Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 8021 8022 8023 8024 8025 8026 8027 8028 8029 8030 8031 8032 8033 8034 8035 8036 8037 8038 8039 8040 8041 8042 8043 8044 8045 8046 8047 8048 8049 8050 8051 8052 8053 8054 8055 8056 8057 8058 8059 8060 8061 8062 8063 8064 8065 8066 8067 8068 8069 8070 8071 8072 8073 8074 8075 8076 8077 8078 8079 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 8096 8097 8098 8099 8100 8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 8193 8194 8195 8196 8197 8198 8199 8200 8201 8202 8203 8204 8205 8206 8207 8208 8209 8210 8211 8212 8213 8214 8215 8216 8217 8218 8219 8220 8221 8222 8223 8224 8225 8226 8227 8228 8229 8230 8231 8232 8233 8234 8235 8236 8237 8238 8239 8240 8241 8242 8243 8244 8245 8246 8247 8248 8249 8250 8251 8252 8253 8254 8255 8256 8257 8258 8259 8260 8261 8262 8263 8264 8265 8266 8267 8268 8269 8270 8271 8272 8273 8274 8275 8276 8277 8278 8279 8280 8281 8282 8283 8284 8285 8286 8287 8288 8289 8290 8291 8292 8293 8294 8295 8296 8297 8298 8299 8300 8301 8302 8303 8304 8305 8306 8307 8308 8309 8310 8311 8312 8313 8314 8315 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325 8326 8327 8328 8329 8330 8331 8332 8333 8334 8335 8336 8337 8338 8339 8340 8341 8342 8343 8344 8345 8346 8347 8348 8349 8350 8351 8352 8353 8354 8355 8356 8357 8358 8359 8360 8361 8362 8363 8364 8365 8366 8367 8368 8369 8370 8371 8372 8373 8374 8375 8376 8377 8378 8379 8380 8381 8382 8383 8384 8385 8386 8387 8388 8389 8390 8391 8392 8393 8394 8395 8396 8397 8398 8399 8400 8401 8402 8403 8404 8405 8406 8407 8408 8409 8410 8411 8412 8413 8414 8415 8416 8417 8418 8419 8420 8421 8422 8423 8424 8425 8426 8427 8428 8429 8430 8431 8432 8433 8434 8435 8436 8437 8438 8439 8440 8441 8442 8443 8444 8445 8446 8447 8448 8449 8450 8451 8452 8453 8454 8455 8456 8457 8458 8459 8460 8461 8462 8463 8464 8465 8466 8467 8468 8469 8470 8471 8472 8473 8474 8475 8476 8477 8478 8479 8480 8481 8482 8483 8484 8485 8486 8487 8488 8489 8490 8491 8492 8493 8494 8495 8496 8497 8498 8499 8500 8501 8502 8503 8504 8505 8506 8507 8508 8509 8510 8511 8512 8513 8514 8515 8516 8517 8518 8519 8520 8521 8522 8523 8524 8525 8526 8527 8528 8529 8530 8531 8532 8533 8534 8535 8536 8537 8538 8539 8540 8541 8542 8543 8544 8545 8546 8547 8548 8549 8550 8551 8552 8553 8554 8555 8556 8557 8558 8559 8560 8561 8562 8563 8564 8565 8566 8567 8568 8569 8570 8571 8572 8573 8574 8575 8576 8577 8578 8579 8580 8581 8582 8583 8584 8585 8586 8587 8588 8589 8590 8591 8592 8593 8594 8595 8596 8597 8598 8599 8600 8601 8602 8603 8604 8605 8606 8607 8608 8609 8610 8611 8612 8613 8614 8615 8616 8617 8618 8619 8620 8621 8622 8623 8624 8625 8626 8627 8628 8629 8630 8631 8632 8633 8634 8635 8636 8637 8638 8639 8640 8641 8642 8643 8644 8645 8646 8647 8648 8649 8650 8651 8652 8653 8654 8655 8656 8657 8658 8659 8660 8661 8662 8663 8664 8665 8666 8667 8668 8669 8670 8671 8672 8673 8674 8675 8676 8677 8678 8679 8680 8681 8682 8683 8684 8685 8686 8687 8688 8689 8690 8691 8692 8693 8694 8695 8696 8697 8698 8699 8700 8701 8702 8703 8704 8705 8706 8707 8708 8709 8710 8711 8712 8713 8714 8715 8716 8717 8718 8719 8720 8721 8722 8723 8724 8725 8726 8727 8728 8729 8730 8731 8732 8733 8734 8735 8736 8737 8738 8739 8740 8741 8742 8743 8744 8745 8746 8747 8748 8749 8750 8751 8752 8753 8754 8755 8756 8757 8758 8759 8760 8761 8762 8763 8764 8765 8766 8767 8768 8769 8770 8771 8772 8773 8774 8775 8776 8777 8778 8779 8780 8781 8782 8783 8784 8785 8786 8787 8788 8789 8790 8791 8792 8793 8794 8795 8796 8797 8798 8799 8800 8801 8802 8803 8804 8805 8806 8807 8808 8809 8810 8811 8812 8813 8814 8815 8816 8817 8818 8819 8820 8821 8822 8823 8824 8825 8826 8827 8828 8829 8830 8831 8832 8833 8834 8835 8836 8837 8838 8839 8840 8841 8842 8843 8844 8845 8846 8847 8848 8849 8850 8851 8852 8853 8854 8855 8856 8857 8858 8859 8860 8861 8862 8863 8864 8865 8866 8867 8868 8869 8870 8871 8872 8873 8874 8875 8876 8877 8878 8879 8880 8881 8882 8883 8884 8885 8886 8887 8888 8889 8890 8891 8892 8893 8894 8895 8896 8897 8898 8899 8900 8901 8902 8903 8904 8905 8906 8907 8908 8909 8910 8911 8912 8913 8914 8915 8916 8917 8918 8919 8920 8921 8922 8923 8924 8925 8926 8927 8928 8929 8930 8931 8932 8933 8934 8935 8936 8937 8938 8939 8940 8941 8942 8943 8944 8945 8946 8947 8948 8949 8950 8951 8952 8953 8954 8955 8956 8957 8958 8959 8960 8961 8962 8963 8964 8965 8966 8967 8968 8969 8970 8971 8972 8973 8974 8975 8976 8977 8978 8979 8980 8981 8982 8983 8984 8985 8986 8987 8988 8989 8990 8991 8992 8993 8994 8995 8996 8997 8998 8999 9000 9001 9002 9003 9004 9005 9006 9007 9008 9009 9010 9011 9012 9013 9014 9015 9016 9017 9018 9019 9020 9021 9022 9023 9024 9025 9026 9027 9028 9029 9030 9031 9032 9033 9034 9035 9036 9037 9038 9039 9040 9041 9042 9043 9044 9045 9046 9047 9048 9049 9050 9051 9052 9053 9054 9055 9056 9057 9058 9059 9060 9061 9062 9063 9064 9065 9066 9067 9068 9069 9070 9071 9072 9073 9074 9075 9076 9077 9078 9079 9080 9081 9082 9083 9084 9085 9086 9087 9088 9089 9090 9091 9092 9093 9094 9095 9096 9097 9098 9099 9100 9101 9102 9103 9104 9105 9106 9107 9108 9109 9110 9111 9112 9113 9114 9115 9116 9117 9118 9119 9120 9121 9122 9123 9124 9125 9126 9127 9128 9129 9130 9131 9132 9133 9134 9135 9136 9137 9138 9139 9140 9141 9142 9143 9144 9145 9146 9147 9148 9149 9150 9151 9152 9153 9154 9155 9156 9157 9158 9159 9160 9161 9162 9163 9164 9165 9166 9167 9168 9169 9170 9171 9172 9173 9174 9175 9176 9177 9178 9179 9180 9181 9182 9183 9184 9185 9186 9187 9188 9189 9190 9191 9192 9193 9194 9195 9196 9197 9198 9199 9200 9201 9202 9203 9204 9205 9206 9207 9208 9209 9210 9211 9212 9213 9214 9215 9216 9217 9218 9219 9220 9221 9222 9223 9224 9225 9226 9227 9228 9229 9230 9231 9232 9233 9234 9235 9236 9237 9238 9239 9240 9241 9242 9243 9244 9245 9246 9247 9248 9249 9250 9251 9252 9253 9254 9255 9256 9257 9258 9259 9260 9261 9262 9263 9264 9265 9266 9267 9268 9269 9270 9271 9272 9273 9274 9275 9276 9277 9278 9279 9280 9281 9282 9283 9284 9285 9286 9287 9288 9289 9290 9291 9292 9293 9294 9295 9296 9297 9298 9299 9300 9301 9302 9303 9304 9305 9306 9307 9308 9309 9310 9311 9312 9313 9314 9315 9316 9317 9318 9319 9320 9321 9322 9323 9324 9325 9326 9327 9328 9329 9330 9331 9332 9333 9334 9335 9336 9337 9338 9339 9340 9341 9342 9343 9344 9345 9346 9347 9348 9349 9350 9351 9352 9353 9354 9355 9356 9357 9358 9359 9360 9361 9362 9363 9364 9365 9366 9367 9368 9369 9370 9371 9372 9373 9374 9375 9376 9377 9378 9379 9380 9381 9382 9383 9384 9385 9386 9387 9388 9389 9390 9391 9392 9393 9394 9395 9396 9397 9398 9399 9400 9401 9402 9403 9404 9405 9406 9407 9408 9409 9410 9411 9412 9413 9414 9415 9416 9417 9418 9419 9420 9421 9422 9423 9424 9425 9426 9427 9428 9429 9430 9431 9432 9433 9434 9435 9436 9437 9438 9439 9440 9441 9442 9443 9444 9445 9446 9447 9448 9449 9450 9451 9452 9453 9454 9455 9456 9457 9458 9459 9460 9461 9462 9463 9464 9465 9466 9467 9468 9469 9470 9471 9472 9473 9474 9475 9476 9477 9478 9479 9480 9481 9482 9483 9484 9485 9486 9487 9488 9489 9490 9491 9492 9493 9494 9495 9496 9497 9498 9499 9500 9501 9502 9503 9504 9505 9506 9507 9508 9509 9510 9511 9512 9513 9514 9515 9516 9517 9518 9519 9520 9521 9522 9523 9524 9525 9526 9527 9528 9529 9530 9531 9532 9533 9534 9535 9536 9537 9538 9539 9540 9541 9542 9543 9544 9545 9546 9547 9548 9549 9550 9551 9552 9553 9554 9555 9556 9557 9558 9559 9560 9561 9562 9563 9564 9565 9566 9567 9568 9569 9570 9571 9572 9573 9574 9575 9576 9577 9578 9579 9580 9581 9582 9583 9584 9585 9586 9587 9588 9589 9590 9591 9592 9593 9594 9595 9596 9597 9598 9599 9600 9601 9602 9603 9604 9605 9606 9607 9608 9609 9610 9611 9612 9613 9614 9615 9616 9617 9618 9619 9620 9621 9622 9623 9624 9625 9626 9627 9628 9629 9630 9631 9632 9633 9634 9635 9636 9637 9638 9639 9640 9641 9642 9643 9644 9645 9646 9647 9648 9649 9650 9651 9652 9653 9654 9655 9656 9657 9658 9659 9660 9661 9662 9663 9664 9665 9666 9667 9668 9669 9670 9671 9672 9673 9674 9675 9676 9677 9678 9679 9680 9681 9682 9683 9684 9685 9686 9687 9688 9689 9690 9691 9692 9693 9694 9695 9696 9697 9698 9699 9700 9701 9702 9703 9704 9705 9706 9707 9708 9709 9710 9711 9712 9713 9714 9715 9716 9717 9718 9719 9720 9721 9722 9723 9724 9725 9726 9727 9728 9729 9730 9731 9732 9733 9734 9735 9736 9737 9738 9739 9740 9741 9742 9743 9744 9745 9746 9747 9748 9749 9750 9751 9752 9753 9754 9755 9756 9757 9758 9759 9760 9761 9762 9763 9764 9765 9766 9767 9768 9769 9770 9771 9772 9773 9774 9775 9776 9777 9778 9779 9780 9781 9782 9783 9784 9785 9786 9787 9788 9789 9790 9791 9792 9793 9794 9795 9796 9797 9798 9799 9800 9801 9802 9803 9804 9805 9806 9807 9808 9809 9810 9811 9812 9813 9814 9815 9816 9817 9818 9819 9820 9821 9822 9823 9824 9825 9826 9827 9828 9829 9830 9831 9832 9833 9834 9835 9836 9837 9838 9839 9840 9841 9842 9843 9844 9845 9846 9847 9848 9849 9850 9851 9852 9853 9854 9855 9856 9857 9858 9859 9860 9861 9862 9863 9864 9865 9866 9867 9868 9869 9870 9871 9872 9873 9874 9875 9876 9877 9878 9879 9880 9881 9882 9883 9884 9885 9886 9887 9888 9889 9890 9891 9892 9893 9894 9895 9896 9897 9898 9899 9900 9901 9902 9903 9904 9905 9906 9907 9908 9909 9910 9911 9912 9913 9914 9915 9916 9917 9918 9919 9920 9921 9922 9923 9924 9925 9926 9927 9928 9929 9930 9931 9932 9933 9934 9935 9936 9937 9938 9939 9940 9941 9942 9943 9944 9945 9946 9947 9948 9949 9950 9951 9952 9953 9954 9955 9956 9957 9958 9959 9960 9961 9962 9963 9964 9965 9966 9967 9968 9969 9970 9971 9972 9973 9974 9975 9976 9977 9978 9979 9980 9981 9982 9983 9984 9985 9986 9987 9988 9989 9990 9991 9992 9993 9994 9995 9996 9997 9998 9999 10000 10001 10002 10003 10004 10005 10006 10007 10008 10009 10010 10011 10012 10013 10014 10015 10016 10017 10018 10019 10020 10021 10022 10023 10024 10025 10026 10027 10028 10029 10030 10031 10032 10033 10034 10035 10036 10037 10038 10039 10040 10041 10042 10043 10044 10045 10046 10047 10048 10049 10050 10051 10052 10053 10054 10055 10056 10057 10058 10059 10060 10061 10062 10063 10064 10065 10066 10067 10068 10069 10070 10071 10072 10073 10074 10075 10076 10077 10078 10079 10080 10081 10082 10083 10084 10085 10086 10087 10088 10089 10090 10091 10092 10093 10094 10095 10096 10097 10098 10099 10100 10101 10102 10103 10104 10105 10106 10107 10108 10109 10110 10111 10112 10113 10114 10115 10116 10117 10118 10119 10120 10121 10122 10123 10124 10125 10126 10127 10128 10129 10130 10131 10132 10133 10134 10135 10136 10137 10138 10139 10140 10141 10142 10143 10144 10145 10146 10147 10148 10149 10150 10151 10152 10153 10154 10155 10156 10157 10158 10159 10160 10161 10162 10163 10164 10165 10166 10167 10168 10169 10170 10171 10172 10173 10174 10175 10176 10177 10178 10179 10180 10181 10182 10183 10184 10185 10186 10187 10188 10189 10190 10191 10192 10193 10194 10195 10196 10197 10198 10199 10200 10201 10202 10203 10204 10205 10206 10207 10208 10209 10210 10211 10212 10213 10214 10215 10216 10217 10218 10219 10220 10221 10222 10223 10224 10225 10226 10227 10228 10229 10230 10231 10232 10233 10234 10235 10236 10237 10238 10239 10240 10241 10242 10243 10244 10245 10246 10247 10248 10249 10250 10251 10252 10253 10254 10255 10256 10257 10258 10259 10260 10261 10262 10263 10264 10265 10266 10267 10268 10269 10270 10271 10272 10273 10274 10275 10276 10277 10278 10279 10280 10281 10282 10283 10284 10285 10286 10287 10288 10289 10290 10291 10292 10293 10294 10295 10296 10297 10298 10299 10300 10301 10302 10303 10304 10305 10306 10307 10308 10309 10310 10311 10312 10313 10314 10315 10316 10317 10318 10319 10320 10321 10322 10323 10324 10325 10326 10327 10328 10329 10330 10331 10332 10333 10334 10335 10336 10337 10338 10339 10340 10341 10342 10343 10344 10345 10346 10347 10348 10349 10350 10351 10352 10353 10354 10355 10356 10357 10358 10359 10360 10361 10362 10363 10364 10365 10366 10367 10368 10369 10370 10371 10372 10373 10374 10375 10376 10377 10378 10379 10380 10381 10382 10383 10384 10385 10386 10387 10388 10389 10390 10391 10392 10393 10394 10395 10396 10397 10398 10399 10400 10401 10402 10403 10404 10405 10406 10407 10408 10409 10410 10411 10412 10413 10414 10415 10416 10417 10418 10419 10420 10421 10422 10423 10424 10425 10426 10427 10428 10429 10430 10431 10432 10433 10434 10435 10436 10437 10438 10439 10440 10441 10442 10443 10444 10445 10446 10447 10448 10449 10450 10451 10452 10453 10454 10455 10456 10457 10458 10459 10460 10461 10462 10463 10464 10465 10466 10467 10468 10469 10470 10471 10472 10473 10474 10475 10476 10477 10478 10479 10480 10481 10482 10483 10484 10485 10486 10487 10488 10489 10490 10491 10492 10493 10494 10495 10496 10497 10498 10499 10500 10501 10502 10503 10504 10505 10506 10507 10508 10509 10510 10511 10512 10513 10514 10515 10516 10517 10518 10519 10520 10521 10522 10523 10524 10525 10526 10527 10528 10529 10530 10531 10532 10533 10534 10535 10536 10537 10538 10539 10540 10541 10542 10543 10544 10545 10546 10547 10548 10549 10550 10551 10552 10553 10554 10555 10556 10557 10558 10559 10560 10561 10562 10563 10564 10565 10566 10567 10568 10569 10570 10571 10572 10573 10574 10575 10576 10577 10578 10579 10580 10581 10582 10583 10584 10585 10586 10587 10588 10589 10590 10591 10592 10593 10594 10595 10596 10597 10598 10599 10600 10601 10602 10603 10604 10605 10606 10607 10608 10609 10610 10611 10612 10613 10614 10615 10616 10617 10618 10619 10620 10621 10622 10623 10624 10625 10626 10627 10628 10629 10630 10631 10632 10633 10634 10635 10636 10637 10638 10639 10640 10641 10642 10643 10644 10645 10646 10647 10648 10649 10650 10651 10652 10653 10654 10655 10656 10657 10658 10659 10660 10661 10662 10663 10664 10665 10666 10667 10668 10669 10670 10671 10672 10673 10674 10675 10676 10677 10678 10679 10680 10681 10682 10683 10684 10685 10686 10687 10688 10689 10690 10691 10692 10693 10694 10695 10696 10697 10698 10699 10700 10701 10702 10703 10704 10705 10706 10707 10708 10709 10710 10711 10712 10713 10714 10715 10716 10717 10718 10719 10720 10721 10722 10723 10724 10725 10726 10727 10728 10729 10730 10731 10732 10733 10734 10735 10736 10737 10738 10739 10740 10741 10742 10743 10744 10745 10746 10747 10748 10749 10750 10751 10752 10753 10754 10755 10756 10757 10758 10759 10760 10761 10762 10763 10764 10765 10766 10767 10768 10769 10770 10771 10772 10773 10774 10775 10776 10777 10778 10779 10780 10781 10782 10783 10784 10785 10786 10787 10788 10789 10790 10791 10792 10793 10794 10795 10796 10797 10798 10799 10800 10801 10802 10803 10804 10805 10806 10807 10808 10809 10810 10811 10812 10813 10814 10815 10816 10817 10818 10819 10820 10821 10822 10823 10824 10825 10826 10827 10828 10829 10830 10831 10832 10833 10834 10835 10836 10837 10838 10839 10840 10841 10842 10843 10844 10845 10846 10847 10848 10849 10850 10851 10852 10853 10854 10855 10856 10857 10858 10859 10860 10861 10862 10863 10864 10865 10866 10867 10868 10869 10870 10871 10872 10873 10874 10875 10876 10877 10878 10879 10880 10881 10882 10883 10884 10885 10886 10887 10888 10889 10890 10891 10892 10893 10894 10895 10896 10897 10898 10899 10900 10901 10902 10903 10904 10905 10906 10907 10908 10909 10910 10911 10912 10913 10914 10915 10916 10917 10918 10919 10920 10921 10922 10923 10924 10925 10926 10927 10928 10929 10930 10931 10932 10933 10934 10935 10936 10937 10938 10939 10940 10941 10942 10943 10944 10945 10946 10947 10948 10949 10950 10951 10952 10953 10954 10955 10956 10957 10958 10959 10960 10961 10962 10963 10964 10965 10966 10967 10968 10969 10970 10971 10972 10973 10974 10975 10976 10977 10978 10979 10980 10981 10982 10983 10984 10985 10986 10987 10988 10989 10990 10991 10992 10993 10994 10995 10996 10997 10998 10999 11000 11001 11002 11003 11004 11005 11006 11007 11008 11009 11010 11011 11012 11013 11014 11015 11016 11017 11018 11019 11020 11021 11022 11023 11024 11025 11026 11027 11028 11029 11030 11031 11032 11033 11034 11035 11036 11037 11038 11039 11040 11041 11042 11043 11044 11045 11046 11047 11048 11049 11050 11051 11052 11053 11054 11055 11056 11057 11058 11059 11060 11061 11062 11063 11064 11065 11066 11067 11068 11069 11070 11071 11072 11073 11074 11075 11076 11077 11078 11079 11080 11081 11082 11083 11084 11085 11086 11087 11088 11089 11090 11091 11092 11093 11094 11095 11096 11097 11098 11099 11100 11101 11102 11103 11104 11105 11106 11107 11108 11109 11110 11111 11112 11113 11114 11115 11116 11117 11118 11119 11120 11121 11122 11123 11124 11125 11126 11127 11128 11129 11130 11131 11132 11133 11134 11135 11136 11137 11138 11139 11140 11141 11142 11143 11144 11145 11146 11147 11148 11149 11150 11151 11152 11153 11154 11155 11156 11157 11158 11159 11160 11161 11162 11163 11164 11165 11166 11167 11168 11169 11170 11171 11172 11173 11174 11175 11176 11177 11178 11179 11180 11181 11182 11183 11184 11185 11186 11187 11188 11189 11190 11191 11192 11193 11194 11195 11196 11197 11198 11199 11200 11201 11202 11203 11204 11205 11206 11207 11208 11209 11210 11211 11212 11213 11214 11215 11216 11217 11218 11219 11220 11221 11222 11223 11224 11225 11226 11227 11228 11229 11230 11231 11232 11233 11234 11235 11236 11237 11238 11239 11240 11241 11242 11243 11244 11245 11246 11247 11248 11249 11250 11251 11252 11253 11254 11255 11256 11257 11258 11259 11260 11261 11262 11263 11264 11265 11266 11267 11268 11269 11270 11271 11272 11273 11274 11275 11276 11277 11278 11279 11280 11281 11282 11283 11284 11285 11286 11287 11288 11289 11290 11291 11292 11293 11294 11295 11296 11297 11298 11299 11300 11301 11302 11303 11304 11305 11306 11307 11308 11309 11310 11311 11312 11313 11314 11315 11316 11317 11318 11319 11320 11321 11322 11323 11324 11325 11326 11327 11328 11329 11330 11331 11332 11333 11334 11335 11336 11337 11338 11339 11340 11341 11342 11343 11344 11345 11346 11347 11348 11349 11350 11351 11352 11353 11354 11355 11356 11357 11358 11359 11360 11361 11362 11363 11364 11365 11366 11367 11368 11369 11370 11371 11372 11373 11374 11375 11376 11377 11378 11379 11380 11381 11382 11383 11384 11385 11386 11387 11388 11389 11390 11391 11392 11393 11394 11395 11396 11397 11398 11399 11400 11401 11402 11403 11404 11405 11406 11407 11408 11409 11410 11411 11412 11413 11414 11415 11416 11417 11418 11419 11420 11421 11422 11423 11424 11425 11426 11427 11428 11429 11430 11431 11432 11433 11434 11435 11436 11437 11438 11439 11440 11441 11442 11443 11444 11445 11446 11447 11448 11449 11450 11451 11452 11453 11454 11455 11456 11457 11458 11459 11460 11461 11462 11463 11464 11465 11466 11467 11468 11469 11470 11471 11472 11473 11474 11475 11476 11477 11478 11479 11480 11481 11482 11483 11484 11485 11486 11487 11488 11489 11490 11491 11492 11493 11494 11495 11496 11497 11498 11499 11500 11501 11502 11503 11504 11505 11506 11507 11508 11509 11510 11511 11512 11513 11514 11515 11516 11517 11518 11519 11520 11521 11522 11523 11524 11525 11526 11527 11528 11529 11530 11531 11532 11533 11534 11535 11536 11537 11538 11539 11540 11541 11542 11543 11544 11545 11546 11547 11548 11549 11550 11551 11552 11553 11554 11555 11556 11557 11558 11559 11560 11561 11562 11563 11564 11565 11566 11567 11568 11569 11570 11571 11572 11573 11574 11575 11576 11577 11578 11579 11580 11581 11582 11583 11584 11585 11586 11587 11588 11589 11590 11591 11592 11593 11594 11595 11596 11597 11598 11599 11600 11601 11602 11603 11604 11605 11606 11607 11608 11609 11610 11611 11612 11613 11614 11615 11616 11617 11618 11619 11620 11621 11622 11623 11624 11625 11626 11627 11628 11629 11630 11631 11632 11633 11634 11635 11636 11637 11638 11639 11640 11641 11642 11643 11644 11645 11646 11647 11648 11649 11650 11651 11652 11653 11654 11655 11656 11657 11658 11659 11660 11661 11662 11663 11664 11665 11666 11667 11668 11669 11670 11671 11672 11673 11674 11675 11676 11677 11678 11679 11680 11681 11682 11683 11684 11685 11686 11687 11688 11689 11690 11691 11692 11693 11694 11695 11696 11697 11698 11699 11700 11701 11702 11703 11704 11705 11706 11707 11708 11709 11710 11711 11712 11713 11714 11715 11716 11717 11718 11719 11720 11721 11722 11723 11724 11725 11726 11727 11728 11729 11730 11731 11732 11733 11734 11735 11736 11737 11738 11739 11740 11741 11742 11743 11744 11745 11746 11747 11748 11749 11750 11751 11752 11753 11754 11755 11756 11757 11758 11759 11760 11761 11762 11763 11764 11765 11766 11767 11768 11769 11770 11771 11772 11773 11774 11775 11776 11777 11778 11779 11780 11781 11782 11783 11784 11785 11786 11787 11788 11789 11790 11791 11792 11793 11794 11795 11796 11797 11798 11799 11800 11801 11802 11803 11804 11805 11806 11807 11808 11809 11810 11811 11812 11813 11814 11815 11816 11817 11818 11819 11820 11821 11822 11823 11824 11825 11826 11827 11828 11829 11830 11831 11832 11833 11834 11835 11836 11837 11838 11839 11840 11841 11842 11843 11844 11845 11846 11847 11848 11849 11850 11851 11852 11853 11854 11855 11856 11857 11858 11859 11860 11861 11862 11863 11864 11865 11866 11867 11868 11869 11870 11871 11872 11873 11874 11875 11876 11877 11878 11879 11880 11881 11882 11883 11884 11885 11886 11887 11888 11889 11890 11891 11892 11893 11894 11895 11896 11897 11898 11899 11900 11901 11902 11903 11904 11905 11906 11907 11908 11909 11910 11911 11912 11913 11914 11915 11916 11917 11918 11919 11920 11921 11922 11923 11924 11925 11926 11927 11928 11929 11930 11931 11932 11933 11934 11935 11936 11937 11938 11939 11940 11941 11942 11943 11944 11945 11946 11947 11948 11949 11950 11951 11952 11953 11954 11955 11956 11957 11958 11959 11960 11961 11962 11963 11964 11965 11966 11967 11968 11969 11970 11971 11972 11973 11974 11975 11976 11977 11978 11979 11980 11981 11982 11983 11984 11985 11986 11987 11988 11989 11990 11991 11992 11993 11994 11995 11996 11997 11998 11999 12000 12001 12002 12003 12004 12005 12006 12007 12008 12009 12010 12011 12012 12013 12014 12015 12016 12017 12018 12019 12020 12021 12022 12023 12024 12025 12026 12027 12028 12029 12030 12031 12032 12033 12034 12035 12036 12037 12038 12039 12040 12041 12042 12043 12044 12045 12046 12047 12048 12049 12050 12051 12052 12053 12054 12055 12056 12057 12058 12059 12060 12061 12062 12063 12064 12065 12066 12067 12068 12069 12070 12071 12072 12073 12074 12075 12076 12077 12078 12079 12080 12081 12082 12083 12084 12085 12086 12087 12088 12089 12090 12091 12092 12093 12094 12095 12096 12097 12098 12099 12100 12101 12102 12103 12104 12105 12106 12107 12108 12109 12110 12111 12112 12113 12114 12115 12116 12117 12118 12119 12120 12121 12122 12123 12124 12125 12126 12127 12128 12129 12130 12131 12132 12133 12134 12135 12136 12137 12138 12139 12140 12141 12142 12143 12144 12145 12146 12147 12148 12149 12150 12151 12152 12153 12154 12155 12156 12157 12158 12159 12160 12161 12162 12163 12164 12165 12166 12167 12168 12169 12170 12171 12172 12173 12174 12175 12176 12177 12178 12179 12180 12181 12182 12183 12184 12185 12186 12187 12188 12189 12190 12191 12192 12193 12194 12195 12196 12197 12198 12199 12200 12201 12202 12203 12204 12205 12206 12207 12208 12209 12210 12211 12212 12213 12214 12215 12216 12217 12218 12219 12220 12221 12222 12223 12224 12225 12226 12227 12228 12229 12230 12231 12232 12233 12234 12235 12236 12237 12238 12239 12240 12241 12242 12243 12244 12245 12246 12247 12248 12249 12250 12251 12252 12253 12254 12255 12256 12257 12258 12259 12260 12261 12262 12263 12264 12265 12266 12267 12268 12269 12270 12271 12272 12273 12274 12275 12276 12277 12278 12279 12280 12281 12282 12283 12284 12285 12286 12287 12288 12289 12290 12291 12292 12293 12294 12295 12296 12297 12298 12299 12300 12301 12302 12303 12304 12305 12306 12307 12308 12309 12310 12311 12312 12313 12314 12315 12316 12317 12318 12319 12320 12321 12322 12323 12324 12325 12326 12327 12328 12329 12330 12331 12332 12333 12334 12335 12336 12337 12338 12339 12340 12341 12342 12343 12344 12345 12346 12347 12348 12349 12350 12351 12352 12353 12354 12355 12356 12357 12358 12359 12360 12361 12362 12363 12364 12365 12366 12367 12368 12369 12370 12371 12372 12373 12374 12375 12376 12377 12378 12379 12380 12381 12382 12383 12384 12385 12386 12387 12388 12389 12390 12391 12392 12393 12394 12395 12396 12397 12398 12399 12400 12401 12402 12403 12404 12405 12406 12407 12408 12409 12410 12411 12412 12413 12414 12415 12416 12417 12418 12419 12420 12421 12422 12423 12424 12425 12426 12427 12428 12429 12430 12431 12432 12433 12434 12435 12436 12437 12438 12439 12440 12441 12442 12443 12444 12445 12446 12447 12448 12449 12450 12451 12452 12453 12454 12455 12456 12457 12458 12459 12460 12461 12462 12463 12464 12465 12466 12467 12468 12469 12470 12471 12472 12473 12474 12475 12476 12477 12478 12479 12480 12481 12482 12483 12484 12485 12486 12487 12488 12489 12490 12491 12492 12493 12494 12495 12496 12497 12498 12499 12500 12501 12502 12503 12504 12505 12506 12507 12508 12509 12510 12511 12512 12513 12514 12515 12516 12517 12518 12519 12520 12521 12522 12523 12524 12525 12526 12527 12528 12529 12530 12531 12532 12533 12534 12535 12536 12537 12538 12539 12540 12541 12542 12543 12544 12545 12546 12547 12548 12549 12550 12551 12552 12553 12554 12555 12556 12557 12558 12559 12560 12561 12562 12563 12564 12565 12566 12567 12568 12569 12570 12571 12572 12573 12574 12575 12576 12577 12578 12579 12580 12581 12582 12583 12584 12585 12586 12587 12588 12589 12590 12591 12592 12593 12594 12595 12596 12597 12598 12599 12600 12601 12602 12603 12604 12605 12606 12607 12608 12609 12610 12611 12612 12613 12614 12615 12616 12617 12618 12619 12620 12621 12622 12623 12624 12625 12626 12627 12628 12629 12630 12631 12632 12633 12634 12635 12636 12637 12638 12639 12640 12641 12642 12643 12644 12645 12646 12647 12648 12649 12650 12651 12652 12653 12654 12655 12656 12657 12658 12659 12660 12661 12662 12663 12664 12665 12666 12667 12668 12669 12670 12671 12672 12673 12674 12675 12676 12677 12678 12679 12680 12681 12682 12683 12684 12685 12686 12687 12688 12689 12690 12691 12692 12693 12694 12695 12696 12697 12698 12699 12700 12701 12702 12703 12704 12705 12706 12707 12708 12709 12710 12711 12712 12713 12714 12715 12716 12717 12718 12719 12720 12721 12722 12723 12724 12725 12726 12727 12728 12729 12730 12731 12732 12733 12734 12735 12736 12737 12738 12739 12740 12741 12742 12743 12744 12745 12746 12747 12748 12749 12750 12751 12752 12753 12754 12755 12756 12757 12758 12759 12760 12761 12762 12763 12764 12765 12766 12767 12768 12769 12770 12771 12772 12773 12774 12775 12776 12777 12778 12779 12780 12781 12782 12783 12784 12785 12786 12787 12788 12789 12790 12791 12792 12793 12794 12795 12796 12797 12798 12799 12800 12801 12802 12803 12804 12805 12806 12807 12808 12809 12810 12811 12812 12813 12814 12815 12816 12817 12818 12819 12820 12821 12822 12823 12824 12825 12826 12827 12828 12829 12830 12831 12832 12833 12834 12835 12836 12837 12838 12839 12840 12841 12842 12843 12844 12845 12846 12847 12848 12849 12850 12851 12852 12853 12854 12855 12856 12857 12858 12859 12860 12861 12862 12863 12864 12865 12866 12867 12868 12869 12870 12871 12872 12873 12874 12875 12876 12877 12878 12879 12880 12881 12882 12883 12884 12885 12886 12887 12888 12889 12890 12891 12892 12893 12894 12895 12896 12897 12898 12899 12900 12901 12902 12903 12904 12905 12906 12907 12908 12909 12910 12911 12912 12913 12914 12915 12916 12917 12918 12919 12920 12921 12922 12923 12924 12925 12926 12927 12928 12929 12930 12931 12932 12933 12934 12935 12936 12937 12938 12939 12940 12941 12942 12943 12944 12945 12946 12947 12948 12949 12950 12951 12952 12953 12954 12955 12956 12957 12958 12959 12960 12961 12962 12963 12964 12965 12966 12967 12968 12969 12970 12971 12972 12973 12974 12975 12976 12977 12978 12979 12980 12981 12982 12983 12984 12985 12986 12987 12988 12989 12990 12991 12992 12993 12994 12995 12996 12997 12998 12999 13000 13001 13002 13003 13004 13005 13006 13007 13008 13009 13010 13011 13012 13013 13014 13015 13016 13017 13018 13019 13020 13021 13022 13023 13024 13025 13026 13027 13028 13029 13030 13031 13032 13033 13034 13035 13036 13037 13038 13039 13040 13041 13042 13043 13044 13045 13046 13047 13048 13049 13050 13051 13052 13053 13054 13055 13056 13057 13058 13059 13060 13061 13062 13063 13064 13065 13066 13067 13068 13069 13070 13071 13072 13073 13074 13075 13076 13077 13078 13079 13080 13081 13082 13083 13084 13085 13086 13087 13088 13089 13090 13091 13092 13093 13094 13095 13096 13097 13098 13099 13100 13101 13102 13103 13104 13105 13106 13107 13108 13109 13110 13111 13112 13113 13114 13115 13116 13117 13118 13119 13120 13121 13122 13123 13124 13125 13126 13127 13128 13129 13130 13131 13132 13133 13134 13135 13136 13137 13138 13139 13140 13141 13142 13143 13144 13145 13146 13147 13148 13149 13150 13151 13152 13153 13154 13155 13156 13157 13158 13159 13160 13161 13162 13163 13164 13165 13166 13167 13168 13169 13170 13171 13172 13173 13174 13175 13176 13177 13178 13179 13180 13181 13182 13183 13184 13185 13186 13187 13188 13189 13190 13191 13192 13193 13194 13195 13196 13197 13198 13199 13200 13201 13202 13203 13204 13205 13206 13207 13208 13209 13210 13211 13212 13213 13214 13215 13216 13217 13218 13219 13220 13221 13222 13223 13224 13225 13226 13227 13228 13229 13230 13231 13232 13233 13234 13235 13236 13237 13238 13239 13240 13241 13242 13243 13244 13245 13246 13247 13248 13249 13250 13251 13252 13253 13254 13255 13256 13257 13258 13259 13260 13261 13262 13263 13264 13265 13266 13267 13268 13269 13270 13271 13272 13273 13274 13275 13276 13277 13278 13279 13280 13281 13282 13283 13284 13285 13286 13287 13288 13289 13290 13291 13292 13293 13294 13295 13296 13297 13298 13299 13300 13301 13302 13303 13304 13305 13306 13307 13308 13309 13310 13311 13312 13313 13314 13315 13316 13317 13318 13319 13320 13321 13322 13323 13324 13325 13326 13327 13328 13329 13330 13331 13332 13333 13334 13335 13336 13337 13338 13339 13340 13341 13342 13343 13344 13345 13346 13347 13348 13349 13350 13351 13352 13353 13354 13355 13356 13357 13358 13359 13360 13361 13362 13363 13364 13365 13366 13367 13368 13369 13370 13371 13372 13373 13374 13375 13376 13377 13378 13379 13380 13381 13382 13383 13384 13385 13386 13387 13388 13389 13390 13391 13392 13393 13394 13395 13396 13397 13398 13399 13400 13401 13402 13403 13404 13405 13406 13407 13408 13409 13410 13411 13412 13413 13414 13415 13416 13417 13418 13419 13420 13421 13422 13423 13424 13425 13426 13427 13428 13429 13430 13431 13432 13433 13434 13435 13436 13437 13438 13439 13440 13441 13442 13443 13444 13445 13446 13447 13448 13449 13450 13451 13452 13453 13454 13455 13456 13457 13458 13459 13460 13461 13462 13463 13464 13465 13466 13467 13468 13469 13470 13471 13472 13473 13474 13475 13476 13477 13478 13479 13480 13481 13482 13483 13484 13485 13486 13487 13488 13489 13490 13491 13492 13493 13494 13495 13496 13497 13498 13499 13500 13501 13502 13503 13504 13505 13506 13507 13508 13509 13510 13511 13512 13513 13514 13515 13516 13517 13518 13519 13520 13521 13522 13523 13524 13525 13526 13527 13528 13529 13530 13531 13532 13533 13534 13535 13536 13537 13538 13539 13540 13541 13542 13543 13544 13545 13546 13547 13548 13549 13550 13551 13552 13553 13554 13555 13556 13557 13558 13559 13560 13561 13562 13563 13564 13565 13566 13567 13568 13569 13570 13571 13572 13573 13574 13575 13576 13577 13578 13579 13580 13581 13582 13583 13584 13585 13586 13587 13588 13589 13590 13591 13592 13593 13594 13595 13596 13597 13598 13599 13600 13601 13602 13603 13604 13605 13606 13607 13608 13609 13610 13611 13612 13613 13614 13615 13616 13617 13618 13619 13620 13621 13622 13623 13624 13625 13626 13627 13628 13629 13630 13631 13632 13633 13634 13635 13636 13637 13638 13639 13640 13641 13642 13643 13644 13645 13646 13647 13648 13649 13650 13651 13652 13653 13654 13655 13656 13657 13658 13659 13660 13661 13662 13663 13664 13665 13666 13667 13668 13669 13670 13671 13672 13673 13674 13675 13676 13677 13678 13679 13680 13681 13682 13683 13684 13685 13686 13687 13688 13689 13690 13691 13692 13693 13694 13695 13696 13697 13698 13699 13700 13701 13702 13703 13704 13705 13706 13707 13708 13709 13710 13711 13712 13713 13714 13715 13716 13717 13718 13719 13720 13721 13722 13723 13724 13725 13726 13727 13728 13729 13730 13731 13732 13733 13734 13735 13736 13737 13738 13739 13740 13741 13742 13743 13744 13745 13746 13747 13748 13749 13750 13751 13752 13753 13754 13755 13756 13757 13758 13759 13760 13761 13762 13763 13764 13765 13766 13767 13768 13769 13770 13771 13772 13773 13774 13775 13776 13777 13778 13779 13780 13781 13782 13783 13784 13785 13786 13787 13788 13789 13790 13791 13792 13793 13794 13795 13796 13797 13798 13799 13800 13801 13802 13803 13804 13805 13806 13807 13808 13809 13810 13811 13812 13813 13814 13815 13816 13817 13818 13819 13820 13821 13822 13823 13824 13825 13826 13827 13828 13829 13830 13831 13832 13833 13834 13835 13836 13837 13838 13839 13840 13841 13842 13843 13844 13845 13846 13847 13848 13849 13850 13851 13852 13853 13854 13855 13856 13857 13858 13859 13860 13861 13862 13863 13864 13865 13866 13867 13868 13869 13870 13871 13872 13873 13874 13875 13876 13877 13878 13879 13880 13881 13882 13883 13884 13885 13886 13887 13888 13889 13890 13891 13892 13893 13894 13895 13896 13897 13898 13899 13900 13901 13902 13903 13904 13905 13906 13907 13908 13909 13910 13911 13912 13913 13914 13915 13916 13917 13918 13919 13920 13921 13922 13923 13924 13925 13926 13927 13928 13929 13930 13931 13932 13933 13934 13935 13936 13937 13938 13939 13940 13941 13942 13943 13944 13945 13946 13947 13948 13949 13950 13951 13952 13953 13954 13955 13956 13957 13958 13959 13960 13961 13962 13963 13964 13965 13966 13967 13968 13969 13970 13971 13972 13973 13974 13975 13976 13977 13978 13979 13980 13981 13982 13983 13984 13985 13986 13987 13988 13989 13990 13991 13992 13993 13994 13995 13996 13997 13998 13999 14000 14001 14002 14003 14004 14005 14006 14007 14008 14009 14010 14011 14012 14013 14014 14015 14016 14017 14018 14019 14020 14021 14022 14023 14024 14025 14026 14027 14028 14029 14030 14031 14032 14033 14034 14035 14036 14037 14038 14039 14040 14041 14042 14043 14044 14045 14046 14047 14048 14049 14050 14051 14052 14053 14054 14055 14056 14057 14058 14059 14060 14061 14062 14063 14064 14065 14066 14067 14068 14069 14070 14071 14072 14073 14074 14075 14076 14077 14078 14079 14080 14081 14082 14083 14084 14085 14086 14087 14088 14089 14090 14091 14092 14093 14094 14095 14096 14097 14098 14099 14100 14101 14102 14103 14104 14105 14106 14107 14108 14109 14110 14111 14112 14113 14114 14115 14116 14117 14118 14119 14120 14121 14122 14123 14124 14125 14126 14127 14128 14129 14130 14131 14132 14133 14134 14135 14136 14137 14138 14139 14140 14141 14142 14143 14144 14145 14146 14147 14148 14149 14150 14151 14152 14153 14154 14155 14156 14157 14158 14159 14160 14161 14162 14163 14164 14165 14166 14167 14168 14169 14170 14171 14172 14173 14174 14175 14176 14177 14178 14179 14180 14181 14182 14183 14184 14185 14186 14187 14188 14189 14190 14191 14192 14193 14194 14195 14196 14197 14198 14199 14200 14201 14202 14203 14204 14205 14206 14207 14208 14209 14210 14211 14212 14213 14214 14215 14216 14217 14218 14219 14220 14221 14222 14223 14224 14225 14226 14227 14228 14229 14230 14231 14232 14233 14234 14235 14236 14237 14238 14239 14240 14241 14242 14243 14244 14245 14246 14247 14248 14249 14250 14251 14252 14253 14254 14255 14256 14257 14258 14259 14260 14261 14262 14263 14264 14265 14266 14267 14268 14269 14270 14271 14272 14273 14274 14275 14276 14277 14278 14279 14280 14281 14282 14283 14284 14285 14286 14287 14288 14289 14290 14291 14292 14293 14294 14295 14296 14297 14298 14299 14300 14301 14302 14303 14304 14305 14306 14307 14308 14309 14310 14311 14312 14313 14314 14315 14316 14317 14318 14319 14320 14321 14322 14323 14324 14325 14326 14327 14328 14329 14330 14331 14332 14333 14334 14335 14336 14337 14338 14339 14340 14341 14342 14343 14344 14345 14346 14347 14348 14349 14350 14351 14352 14353 14354 14355 14356 14357 14358 14359 14360 14361 14362 14363 14364 14365 14366 14367 14368 14369 14370 14371 14372 14373 14374 14375 14376 14377 14378 14379 14380 14381 14382 14383 14384 14385 14386 14387 14388 14389 14390 14391 14392 14393 14394 14395 14396 14397 14398 14399 14400 14401 14402 14403 14404 14405 14406 14407 14408 14409 14410 14411 14412 14413 14414 14415 14416 14417 14418 14419 14420 14421 14422 14423 14424 14425 14426 14427 14428 14429 14430 14431 14432 14433 14434 14435 14436 14437 14438 14439 14440 14441 14442 14443 14444 14445 14446 14447 14448 14449 14450 14451 14452 14453 14454 14455 14456 14457 14458 14459 14460 14461 14462 14463 14464 14465 14466 14467 14468 14469 14470 14471 14472 14473 14474 14475 14476 14477 14478 14479 14480 14481 14482 14483 14484 14485 14486 14487 14488 14489 14490 14491 14492 14493 14494 14495 14496 14497 14498 14499 14500 14501 14502 14503 14504 14505 14506 14507 14508 14509 14510 14511 14512 14513 14514 14515 14516 14517 14518 14519 14520 14521 14522 14523 14524 14525 14526 14527 14528 14529 14530 14531 14532 14533 14534 14535 14536 14537 14538 14539 14540 14541 14542 14543 14544 14545 14546 14547 14548 14549 14550 14551 14552 14553 14554 14555 14556 14557 14558 14559 14560 14561 14562 14563 14564 14565 14566 14567 14568 14569 14570 14571 14572 14573 14574 14575 14576 14577 14578 14579 14580 14581 14582 14583 14584 14585 14586 14587 14588 14589 14590 14591 14592 14593 14594 14595 14596 14597 14598 14599 14600 14601 14602 14603 14604 14605 14606 14607 14608 14609 14610 14611 14612 14613 14614 14615 14616 14617 14618 14619 14620 14621 14622 14623 14624 14625 14626 14627 14628 14629 14630 14631 14632 14633 14634 14635 14636 14637 14638 14639 14640 14641 14642 14643 14644 14645 14646 14647 14648 14649 14650 14651 14652 14653 14654 14655 14656 14657 14658 14659 14660 14661 14662 14663 14664 14665 14666 14667 14668 14669 14670 14671 14672 14673 14674 14675 14676 14677 14678 14679 14680 14681 14682 14683 14684 14685 14686 14687 14688 14689 14690 14691 14692 14693 14694 14695 14696 14697 14698 14699 14700 14701 14702 14703 14704 14705 14706 14707 14708 14709 14710 14711 14712 14713 14714 14715 14716 14717 14718 14719 14720 14721 14722 14723 14724 14725 14726 14727 14728 14729 14730 14731 14732 14733 14734 14735 14736 14737 14738 14739 14740 14741 14742 14743 14744 14745 14746 14747 14748 14749 14750 14751 14752 14753 14754 14755 14756 14757 14758 14759 14760 14761 14762 14763 14764 14765 14766 14767 14768 14769 14770 14771 14772 14773 14774 14775 14776 14777 14778 14779 14780 14781 14782 14783 14784 14785 14786 14787 14788 14789 14790 14791 14792 14793 14794 14795 14796 14797 14798 14799 14800 14801 14802 14803 14804 14805 14806 14807 14808 14809 14810 14811 14812 14813 14814 14815 14816 14817 14818 14819 14820 14821 14822 14823 14824 14825 14826 14827 14828 14829 14830 14831 14832 14833 14834 14835 14836 14837 14838 14839 14840 14841 14842 14843 14844 14845 14846 14847 14848 14849 14850 14851 14852 14853 14854 14855 14856 14857 14858 14859 14860 14861 14862 14863 14864 14865 14866 14867 14868 14869 14870 14871 14872 14873 14874 14875 14876 14877 14878 14879 14880 14881 14882 14883 14884 14885 14886 14887 14888 14889 14890 14891 14892 14893 14894 14895 14896 14897 14898 14899 14900 14901 14902 14903 14904 14905 14906 14907 14908 14909 14910 14911 14912 14913 14914 14915 14916 14917 14918 14919 14920 14921 14922 14923 14924 14925 14926 14927 14928 14929 14930 14931 14932 14933 14934 14935 14936 14937 14938 14939 14940 14941 14942 14943 14944 14945 14946 14947 14948 14949 14950 14951 14952 14953 14954 14955 14956 14957 14958 14959 14960 14961 14962 14963 14964 14965 14966 14967 14968 14969 14970 14971 14972 14973 14974 14975 14976 14977 14978 14979 14980 14981 14982 14983 14984 14985 14986 14987 14988 14989 14990 14991 14992 14993 14994 14995 14996 14997 14998 14999 15000 15001 15002 15003 15004 15005 15006 15007 15008 15009 15010 15011 15012 15013 15014 15015 15016 15017 15018 15019 15020 15021 15022 15023 15024 15025 15026 15027 15028 15029 15030 15031 15032 15033 15034 15035 15036 15037 15038 15039 15040 15041 15042 15043 15044 15045 15046 15047 15048 15049 15050 15051 15052 15053 15054 15055 15056 15057 15058 15059 15060 15061 15062 15063 15064 15065 15066 15067 15068 15069 15070 15071 15072 15073 15074 15075 15076 15077 15078 15079 15080 15081 15082 15083 15084 15085 15086 15087 15088 15089 15090 15091 15092 15093 15094 15095 15096 15097 15098 15099 15100 15101 15102 15103 15104 15105 15106 15107 15108 15109 15110 15111 15112 15113 15114 15115 15116 15117 15118 15119 15120 15121 15122 15123 15124 15125 15126 15127 15128 15129 15130 15131 15132 15133 15134 15135 15136 15137 15138 15139 15140 15141 15142 15143 15144 15145 15146 15147 15148 15149 15150 15151 15152 15153 15154 15155 15156 15157 15158 15159 15160 15161 15162 15163 15164 15165 15166 15167 15168 15169 15170 15171 15172 15173 15174 15175 15176 15177 15178 15179 15180 15181 15182 15183 15184 15185 15186 15187 15188 15189 15190 15191 15192 15193 15194 15195 15196 15197 15198 15199 15200 15201 15202 15203 15204 15205 15206 15207 15208 15209 15210 15211 15212 15213 15214 15215 15216 15217 15218 15219 15220 15221 15222 15223 15224 15225 15226 15227 15228 15229 15230 15231 15232 15233 15234 15235 15236 15237 15238 15239 15240 15241 15242 15243 15244 15245 15246 15247 15248 15249 15250 15251 15252 15253 15254 15255 15256 15257 15258 15259 15260 15261 15262 15263 15264 15265 15266 15267 15268 15269 15270 15271 15272 15273 15274 15275 15276 15277 15278 15279 15280 15281 15282 15283 15284 15285 15286 15287 15288 15289 15290 15291 15292 15293 15294 15295 15296 15297 15298 15299 15300 15301 15302 15303 15304 15305 15306 15307 15308 15309 15310 15311 15312 15313 15314 15315 15316 15317 15318 15319 15320 15321 15322 15323 15324 15325 15326 15327 15328 15329 15330 15331 15332 15333 15334 15335 15336 15337 15338 15339 15340 15341 15342 15343 15344 15345 15346 15347 15348 15349 15350 15351 15352 15353 15354 15355 15356 15357 15358 15359 15360 15361 15362 15363 15364 15365 15366 15367 15368 15369 15370 15371 15372 15373 15374 15375 15376 15377 15378 15379 15380 15381 15382 15383 15384 15385 15386 15387 15388 15389 15390 15391 15392 15393 15394 15395 15396 15397 15398 15399 15400 15401 15402 15403 15404 15405 15406 15407 15408 15409 15410 15411 15412 15413 15414 15415 15416 15417 15418 15419 15420 15421 15422 15423 15424 15425 15426 15427 15428 15429 15430 15431 15432 15433 15434 15435 15436 15437 15438 15439 15440 15441 15442 15443 15444 15445 15446 15447 15448 15449 15450 15451 15452 15453 15454 15455 15456 15457 15458 15459 15460 15461 15462 15463 15464 15465 15466 15467 15468 15469 15470 15471 15472 15473 15474 15475 15476 15477 15478 15479 15480 15481 15482 15483 15484 15485 15486 15487 15488 15489 15490 15491 15492 15493 15494 15495 15496 15497 15498 15499 15500 15501 15502 15503 15504 15505 15506 15507 15508 15509 15510 15511 15512 15513 15514 15515 15516 15517 15518 15519 15520 15521 15522 15523 15524 15525 15526 15527 15528 15529 15530 15531 15532 15533 15534 15535 15536 15537 15538 15539 15540 15541 15542 15543 15544 15545 15546 15547 15548 15549 15550 15551 15552 15553 15554 15555 15556 15557 15558 15559 15560 15561 15562 15563 15564 15565 15566 15567 15568 15569 15570 15571 15572 15573 15574 15575 15576 15577 15578 15579 15580 15581 15582 15583 15584 15585 15586 15587 15588 15589 15590 15591 15592 15593 15594 15595 15596 15597 15598 15599 15600 15601 15602 15603 15604 15605 15606 15607 15608 15609 15610 15611 15612 15613 15614 15615 15616 15617 15618 15619 15620 15621 15622 15623 15624 15625 15626 15627 15628 15629 15630 15631 15632 15633 15634 15635 15636 15637 15638 15639 15640 15641 15642 15643 15644 15645 15646 15647 15648 15649 15650 15651 15652 15653 15654 15655 15656 15657 15658 15659 15660 15661 15662 15663 15664 15665 15666 15667 15668 15669 15670 15671 15672 15673 15674 15675 15676 15677 15678 15679 15680 15681 15682 15683 15684 15685 15686 15687 15688 15689 15690 15691 15692 15693 15694 15695 15696 15697 15698 15699 15700 15701 15702 15703 15704 15705 15706 15707 15708 15709 15710 15711 15712 15713 15714 15715 15716 15717 15718 15719 15720 15721 15722 15723 15724 15725 15726 15727 15728 15729 15730 15731 15732 15733 15734 15735 15736 15737 15738 15739 15740 15741 15742 15743 15744 15745 15746 15747 15748 15749 15750 15751 15752 15753 15754 15755 15756 15757 15758 15759 15760 15761 15762 15763 15764 15765 15766 15767 15768 15769 15770 15771 15772 15773 15774 15775 15776 15777 15778 15779 15780 15781 15782 15783 15784 15785 15786 15787 15788 15789 15790 15791 15792 15793 15794 15795 15796 15797 15798 15799 15800 15801 15802 15803 15804 15805 15806 15807 15808 15809 15810 15811 15812 15813 15814 15815 15816 15817 15818 15819 15820 15821 15822 15823 15824 15825 15826 15827 15828 15829 15830 15831 15832 15833 15834 15835 15836 15837 15838 15839 15840 15841 15842 15843 15844 15845 15846 15847 15848 15849 15850 15851 15852 15853 15854 15855 15856 15857 15858 15859 15860 15861 15862 15863 15864 15865 15866 15867 15868 15869 15870 15871 15872 15873 15874 15875 15876 15877 15878 15879 15880 15881 15882 15883 15884 15885 15886 15887 15888 15889 15890 15891 15892 15893 15894 15895 15896 15897 15898 15899 15900 15901 15902 15903 15904 15905 15906 15907 15908 15909 15910 15911 15912 15913 15914 15915 15916 15917 15918 15919 15920 15921 15922 15923 15924 15925 15926 15927 15928 15929 15930 15931 15932 15933 15934 15935 15936 15937 15938 15939 15940 15941 15942 15943 15944 15945 15946 15947 15948 15949 15950 15951 15952 15953 15954 15955 15956 15957 15958 15959 15960 15961 15962 15963 15964 15965 15966 15967 15968 15969 15970 15971 15972 15973 15974 15975 15976 15977 15978 15979 15980 15981 15982 15983 15984 15985 15986 15987 15988 15989 15990 15991 15992 15993 15994 15995 15996 15997 15998 15999 16000 16001 16002 16003 16004 16005 16006 16007 16008 16009 16010 16011 16012 16013 16014 16015 16016 16017 16018 16019 16020 16021 16022 16023 16024 16025 16026 16027 16028 16029 16030 16031 16032 16033 16034 16035 16036 16037 16038 16039 16040 16041 16042 16043 16044 16045 16046 16047 16048 16049 16050 16051 16052 16053 16054 16055 16056 16057 16058 16059 16060 16061 16062 16063 16064 16065 16066 16067 16068 16069 16070 16071 16072 16073 16074 16075 16076 16077 16078 16079 16080 16081 16082 16083 16084 16085 16086 16087 16088 16089 16090 16091 16092 16093 16094 16095 16096 16097 16098 16099 16100 16101 16102 16103 16104 16105 16106 16107 16108 16109 16110 16111 16112 16113 16114 16115 16116 16117 16118 16119 16120 16121 16122 16123 16124 16125 16126 16127 16128 16129 16130 16131 16132 16133 16134 16135 16136 16137 16138 16139 16140 16141 16142 16143 16144 16145 16146 16147 16148 16149 16150 16151 16152 16153 16154 16155 16156 16157 16158 16159 16160 16161 16162 16163 16164 16165 16166 16167 16168 16169 16170 16171 16172 16173 16174 16175 16176 16177 16178 16179 16180 16181 16182 16183 16184 16185 16186 16187 16188 16189 16190 16191 16192 16193 16194 16195 16196 16197 16198 16199 16200 16201 16202 16203 16204 16205 16206 16207 16208 16209 16210 16211 16212 16213 16214 16215 16216 16217 16218 16219 16220 16221 16222 16223 16224 16225 16226 16227 16228 16229 16230 16231 16232 16233 16234 16235 16236 16237 16238 16239 16240 16241 16242 16243 16244 16245 16246 16247 16248 16249 16250 16251 16252 16253 16254 16255 16256 16257 16258 16259 16260 16261 16262 16263 16264 16265 16266 16267 16268 16269 16270 16271 16272 16273 16274 16275 16276 16277 16278 16279 16280 16281 16282 16283 16284 16285 16286 16287 16288 16289 16290 16291 16292 16293 16294 16295 16296 16297 16298 16299 16300 16301 16302 16303 16304 16305 16306 16307 16308 16309 16310 16311 16312 16313 16314 16315 16316 16317 16318 16319 16320 16321 16322 16323 16324 16325 16326 16327 16328 16329 16330 16331 16332 16333 16334 16335 16336 16337 16338 16339 16340 16341 16342 16343 16344 16345 16346 16347 16348 16349 16350 16351 16352 16353 16354 16355 16356 16357 16358 16359 16360 16361 16362 16363 16364 16365 16366 16367 16368 16369 16370 16371 16372 16373 16374 16375 16376 16377 16378 16379 16380 16381 16382 16383 16384 16385 16386 16387 16388 16389 16390 16391 16392 16393 16394 16395 16396 16397 16398 16399 16400 16401 16402 16403 16404 16405 16406 16407 16408 16409 16410 16411 16412 16413 16414 16415 16416 16417 16418 16419 16420 16421 16422 16423 16424 16425 16426 16427 16428 16429 16430 16431 16432 16433 16434 16435 16436 16437 16438 16439 16440 16441 16442 16443 16444 16445 16446 16447 16448 16449 16450 16451 16452 16453 16454 16455 16456 16457 16458 16459 16460 16461 16462 16463 16464 16465 16466 16467 16468 16469 16470 16471 16472 16473 16474 16475 16476 16477 16478 16479 16480 16481 16482 16483 16484 16485 16486 16487 16488 16489 16490 16491 16492 16493 16494 16495 16496 16497 16498 16499 16500 16501 16502 16503 16504 16505 16506 16507 16508 16509 16510 16511 16512 16513 16514 16515 16516 16517 16518 16519 16520 16521 16522 16523 16524 16525 16526 16527 16528 16529 16530 16531 16532 16533 16534 16535 16536 16537 16538 16539 16540 16541 16542 16543 16544 16545 16546 16547 16548 16549 16550 16551 16552 16553 16554 16555 16556 16557 16558 16559 16560 16561 16562 16563 16564 16565 16566 16567 16568 16569 16570 16571 16572 16573 16574 16575 16576 16577 16578 16579 16580 16581 16582 16583 16584 16585 16586 16587 16588 16589 16590 16591 16592 16593 16594 16595 16596 16597 16598 16599 16600 16601 16602 16603 16604 16605 16606 16607 16608 16609 16610 16611 16612 16613 16614 16615 16616 16617 16618 16619 16620 16621 16622 16623 16624 16625 16626 16627 16628 16629 16630 16631 16632 16633 16634 16635 16636 16637 16638 16639 16640 16641 16642 16643 16644 16645 16646 16647 16648 16649 16650 16651 16652 16653 16654 16655 16656 16657 16658 16659 16660 16661 16662 16663 16664 16665 16666 16667 16668 16669 16670 16671 16672 16673 16674 16675 16676 16677 16678 16679 16680 16681 16682 16683 16684 16685 16686 16687 16688 16689 16690 16691 16692 16693 16694 16695 16696 16697 16698 16699 16700 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ({
/***/ "./node_modules/ansi-html/index.js":
/*!*****************************************!*\
!*** ./node_modules/ansi-html/index.js ***!
\*****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nmodule.exports = ansiHTML\n\n// Reference to https://github.com/sindresorhus/ansi-regex\nvar _regANSI = /(?:(?:\\u001b\\[)|\\u009b)(?:(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?[A-M|f-m])|\\u001b[A-M]/\n\nvar _defColors = {\n reset: ['fff', '000'], // [FOREGROUD_COLOR, BACKGROUND_COLOR]\n black: '000',\n red: 'ff0000',\n green: '209805',\n yellow: 'e8bf03',\n blue: '0000ff',\n magenta: 'ff00ff',\n cyan: '00ffee',\n lightgrey: 'f0f0f0',\n darkgrey: '888'\n}\nvar _styles = {\n 30: 'black',\n 31: 'red',\n 32: 'green',\n 33: 'yellow',\n 34: 'blue',\n 35: 'magenta',\n 36: 'cyan',\n 37: 'lightgrey'\n}\nvar _openTags = {\n '1': 'font-weight:bold', // bold\n '2': 'opacity:0.5', // dim\n '3': '<i>', // italic\n '4': '<u>', // underscore\n '8': 'display:none', // hidden\n '9': '<del>' // delete\n}\nvar _closeTags = {\n '23': '</i>', // reset italic\n '24': '</u>', // reset underscore\n '29': '</del>' // reset delete\n}\n\n;[0, 21, 22, 27, 28, 39, 49].forEach(function (n) {\n _closeTags[n] = '</span>'\n})\n\n/**\n * Converts text with ANSI color codes to HTML markup.\n * @param {String} text\n * @returns {*}\n */\nfunction ansiHTML (text) {\n // Returns the text if the string has no ANSI escape code.\n if (!_regANSI.test(text)) {\n return text\n }\n\n // Cache opened sequence.\n var ansiCodes = []\n // Replace with markup.\n var ret = text.replace(/\\033\\[(\\d+)*m/g, function (match, seq) {\n var ot = _openTags[seq]\n if (ot) {\n // If current sequence has been opened, close it.\n if (!!~ansiCodes.indexOf(seq)) { // eslint-disable-line no-extra-boolean-cast\n ansiCodes.pop()\n return '</span>'\n }\n // Open tag.\n ansiCodes.push(seq)\n return ot[0] === '<' ? ot : '<span style=\"' + ot + ';\">'\n }\n\n var ct = _closeTags[seq]\n if (ct) {\n // Pop sequence\n ansiCodes.pop()\n return ct\n }\n return ''\n })\n\n // Make sure tags are closed.\n var l = ansiCodes.length\n ;(l > 0) && (ret += Array(l + 1).join('</span>'))\n\n return ret\n}\n\n/**\n * Customize colors.\n * @param {Object} colors reference to _defColors\n */\nansiHTML.setColors = function (colors) {\n if (typeof colors !== 'object') {\n throw new Error('`colors` parameter must be an Object.')\n }\n\n var _finalColors = {}\n for (var key in _defColors) {\n var hex = colors.hasOwnProperty(key) ? colors[key] : null\n if (!hex) {\n _finalColors[key] = _defColors[key]\n continue\n }\n if ('reset' === key) {\n if (typeof hex === 'string') {\n hex = [hex]\n }\n if (!Array.isArray(hex) || hex.length === 0 || hex.some(function (h) {\n return typeof h !== 'string'\n })) {\n throw new Error('The value of `' + key + '` property must be an Array and each item could only be a hex string, e.g.: FF0000')\n }\n var defHexColor = _defColors[key]\n if (!hex[0]) {\n hex[0] = defHexColor[0]\n }\n if (hex.length === 1 || !hex[1]) {\n hex = [hex[0]]\n hex.push(defHexColor[1])\n }\n\n hex = hex.slice(0, 2)\n } else if (typeof hex !== 'string') {\n throw new Error('The value of `' + key + '` property must be a hex string, e.g.: FF0000')\n }\n _finalColors[key] = hex\n }\n _setTags(_finalColors)\n}\n\n/**\n * Reset colors.\n */\nansiHTML.reset = function () {\n _setTags(_defColors)\n}\n\n/**\n * Expose tags, including open and close.\n * @type {Object}\n */\nansiHTML.tags = {}\n\nif (Object.defineProperty) {\n Object.defineProperty(ansiHTML.tags, 'open', {\n get: function () { return _openTags }\n })\n Object.defineProperty(ansiHTML.tags, 'close', {\n get: function () { return _closeTags }\n })\n} else {\n ansiHTML.tags.open = _openTags\n ansiHTML.tags.close = _closeTags\n}\n\nfunction _setTags (colors) {\n // reset all\n _openTags['0'] = 'font-weight:normal;opacity:1;color:#' + colors.reset[0] + ';background:#' + colors.reset[1]\n // inverse\n _openTags['7'] = 'color:#' + colors.reset[1] + ';background:#' + colors.reset[0]\n // dark grey\n _openTags['90'] = 'color:#' + colors.darkgrey\n\n for (var code in _styles) {\n var color = _styles[code]\n var oriColor = colors[color] || '000'\n _openTags[code] = 'color:#' + oriColor\n code = parseInt(code)\n _openTags[(code + 10).toString()] = 'background:#' + oriColor\n }\n}\n\nansiHTML.reset()\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW5zaS1odG1sL2luZGV4LmpzPzRlMWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQVk7O0FBRVo7O0FBRUE7QUFDQSxtREFBbUQsSUFBSSxTQUFTLE1BQU0sSUFBSTs7QUFFMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJEO0FBQzNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCLEdBQUc7QUFDSDtBQUNBLHNCQUFzQjtBQUN0QixHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUNBQXVDLFVBQVUsK0JBQStCO0FBQ2hGO0FBQ0EsbURBQW1EO0FBQ25EO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9hbnNpLWh0bWwvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBhbnNpSFRNTFxuXG4vLyBSZWZlcmVuY2UgdG8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9hbnNpLXJlZ2V4XG52YXIgX3JlZ0FOU0kgPSAvKD86KD86XFx1MDAxYlxcWyl8XFx1MDA5YikoPzooPzpbMC05XXsxLDN9KT8oPzooPzo7WzAtOV17MCwzfSkqKT9bQS1NfGYtbV0pfFxcdTAwMWJbQS1NXS9cblxudmFyIF9kZWZDb2xvcnMgPSB7XG4gIHJlc2V0OiBbJ2ZmZicsICcwMDAnXSwgLy8gW0ZPUkVHUk9VRF9DT0xPUiwgQkFDS0dST1VORF9DT0xPUl1cbiAgYmxhY2s6ICcwMDAnLFxuICByZWQ6ICdmZjAwMDAnLFxuICBncmVlbjogJzIwOTgwNScsXG4gIHllbGxvdzogJ2U4YmYwMycsXG4gIGJsdWU6ICcwMDAwZmYnLFxuICBtYWdlbnRhOiAnZmYwMGZmJyxcbiAgY3lhbjogJzAwZmZlZScsXG4gIGxpZ2h0Z3JleTogJ2YwZjBmMCcsXG4gIGRhcmtncmV5OiAnODg4J1xufVxudmFyIF9zdHlsZXMgPSB7XG4gIDMwOiAnYmxhY2snLFxuICAzMTogJ3JlZCcsXG4gIDMyOiAnZ3JlZW4nLFxuICAzMzogJ3llbGxvdycsXG4gIDM0OiAnYmx1ZScsXG4gIDM1OiAnbWFnZW50YScsXG4gIDM2OiAnY3lhbicsXG4gIDM3OiAnbGlnaHRncmV5J1xufVxudmFyIF9vcGVuVGFncyA9IHtcbiAgJzEnOiAnZm9udC13ZWlnaHQ6Ym9sZCcsIC8vIGJvbGRcbiAgJzInOiAnb3BhY2l0eTowLjUnLCAvLyBkaW1cbiAgJzMnOiAnPGk+JywgLy8gaXRhbGljXG4gICc0JzogJzx1PicsIC8vIHVuZGVyc2NvcmVcbiAgJzgnOiAnZGlzcGxheTpub25lJywgLy8gaGlkZGVuXG4gICc5JzogJzxkZWw+JyAvLyBkZWxldGVcbn1cbnZhciBfY2xvc2VUYWdzID0ge1xuICAnMjMnOiAnPC9pPicsIC8vIHJlc2V0IGl0YWxpY1xuICAnMjQnOiAnPC91PicsIC8vIHJlc2V0IHVuZGVyc2NvcmVcbiAgJzI5JzogJzwvZGVsPicgLy8gcmVzZXQgZGVsZXRlXG59XG5cbjtbMCwgMjEsIDIyLCAyNywgMjgsIDM5LCA0OV0uZm9yRWFjaChmdW5jdGlvbiAobikge1xuICBfY2xvc2VUYWdzW25dID0gJzwvc3Bhbj4nXG59KVxuXG4vKipcbiAqIENvbnZlcnRzIHRleHQgd2l0aCBBTlNJIGNvbG9yIGNvZGVzIHRvIEhUTUwgbWFya3VwLlxuICogQHBhcmFtIHtTdHJpbmd9IHRleHRcbiAqIEByZXR1cm5zIHsqfVxuICovXG5mdW5jdGlvbiBhbnNpSFRNTCAodGV4dCkge1xuICAvLyBSZXR1cm5zIHRoZSB0ZXh0IGlmIHRoZSBzdHJpbmcgaGFzIG5vIEFOU0kgZXNjYXBlIGNvZGUuXG4gIGlmICghX3JlZ0FOU0kudGVzdCh0ZXh0KSkge1xuICAgIHJldHVybiB0ZXh0XG4gIH1cblxuICAvLyBDYWNoZSBvcGVuZWQgc2VxdWVuY2UuXG4gIHZhciBhbnNpQ29kZXMgPSBbXVxuICAvLyBSZXBsYWNlIHdpdGggbWFya3VwLlxuICB2YXIgcmV0ID0gdGV4dC5yZXBsYWNlKC9cXDAzM1xcWyhcXGQrKSptL2csIGZ1bmN0aW9uIChtYXRjaCwgc2VxKSB7XG4gICAgdmFyIG90ID0gX29wZW5UYWdzW3NlcV1cbiAgICBpZiAob3QpIHtcbiAgICAgIC8vIElmIGN1cnJlbnQgc2VxdWVuY2UgaGFzIGJlZW4gb3BlbmVkLCBjbG9zZSBpdC5cbiAgICAgIGlmICghIX5hbnNpQ29kZXMuaW5kZXhPZihzZXEpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZXh0cmEtYm9vbGVhbi1jYXN0XG4gICAgICAgIGFuc2lDb2Rlcy5wb3AoKVxuICAgICAgICByZXR1cm4gJzwvc3Bhbj4nXG4gICAgICB9XG4gICAgICAvLyBPcGVuIHRhZy5cbiAgICAgIGFuc2lDb2Rlcy5wdXNoKHNlcSlcbiAgICAgIHJldHVybiBvdFswXSA9PT0gJzwnID8gb3QgOiAnPHNwYW4gc3R5bGU9XCInICsgb3QgKyAnO1wiPidcbiAgICB9XG5cbiAgICB2YXIgY3QgPSBfY2xvc2VUYWdzW3NlcV1cbiAgICBpZiAoY3QpIHtcbiAgICAgIC8vIFBvcCBzZXF1ZW5jZVxuICAgICAgYW5zaUNvZGVzLnBvcCgpXG4gICAgICByZXR1cm4gY3RcbiAgICB9XG4gICAgcmV0dXJuICcnXG4gIH0pXG5cbiAgLy8gTWFrZSBzdXJlIHRhZ3MgYXJlIGNsb3NlZC5cbiAgdmFyIGwgPSBhbnNpQ29kZXMubGVuZ3RoXG4gIDsobCA+IDApICYmIChyZXQgKz0gQXJyYXkobCArIDEpLmpvaW4oJzwvc3Bhbj4nKSlcblxuICByZXR1cm4gcmV0XG59XG5cbi8qKlxuICogQ3VzdG9taXplIGNvbG9ycy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb2xvcnMgcmVmZXJlbmNlIHRvIF9kZWZDb2xvcnNcbiAqL1xuYW5zaUhUTUwuc2V0Q29sb3JzID0gZnVuY3Rpb24gKGNvbG9ycykge1xuICBpZiAodHlwZW9mIGNvbG9ycyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2Bjb2xvcnNgIHBhcmFtZXRlciBtdXN0IGJlIGFuIE9iamVjdC4nKVxuICB9XG5cbiAgdmFyIF9maW5hbENvbG9ycyA9IHt9XG4gIGZvciAodmFyIGtleSBpbiBfZGVmQ29sb3JzKSB7XG4gICAgdmFyIGhleCA9IGNvbG9ycy5oYXNPd25Qcm9wZXJ0eShrZXkpID8gY29sb3JzW2tleV0gOiBudWxsXG4gICAgaWYgKCFoZXgpIHtcbiAgICAgIF9maW5hbENvbG9yc1trZXldID0gX2RlZkNvbG9yc1trZXldXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoJ3Jlc2V0JyA9PT0ga2V5KSB7XG4gICAgICBpZiAodHlwZW9mIGhleCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaGV4ID0gW2hleF1cbiAgICAgIH1cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShoZXgpIHx8IGhleC5sZW5ndGggPT09IDAgfHwgaGV4LnNvbWUoZnVuY3Rpb24gKGgpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBoICE9PSAnc3RyaW5nJ1xuICAgICAgfSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgdmFsdWUgb2YgYCcgKyBrZXkgKyAnYCBwcm9wZXJ0eSBtdXN0IGJlIGFuIEFycmF5IGFuZCBlYWNoIGl0ZW0gY291bGQgb25seSBiZSBhIGhleCBzdHJpbmcsIGUuZy46IEZGMDAwMCcpXG4gICAgICB9XG4gICAgICB2YXIgZGVmSGV4Q29sb3IgPSBfZGVmQ29sb3JzW2tleV1cbiAgICAgIGlmICghaGV4WzBdKSB7XG4gICAgICAgIGhleFswXSA9IGRlZkhleENvbG9yWzBdXG4gICAgICB9XG4gICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gMSB8fCAhaGV4WzFdKSB7XG4gICAgICAgIGhleCA9IFtoZXhbMF1dXG4gICAgICAgIGhleC5wdXNoKGRlZkhleENvbG9yWzFdKVxuICAgICAgfVxuXG4gICAgICBoZXggPSBoZXguc2xpY2UoMCwgMilcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBoZXggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB2YWx1ZSBvZiBgJyArIGtleSArICdgIHByb3BlcnR5IG11c3QgYmUgYSBoZXggc3RyaW5nLCBlLmcuOiBGRjAwMDAnKVxuICAgIH1cbiAgICBfZmluYWxDb2xvcnNba2V5XSA9IGhleFxuICB9XG4gIF9zZXRUYWdzKF9maW5hbENvbG9ycylcbn1cblxuLyoqXG4gKiBSZXNldCBjb2xvcnMuXG4gKi9cbmFuc2lIVE1MLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICBfc2V0VGFncyhfZGVmQ29sb3JzKVxufVxuXG4vKipcbiAqIEV4cG9zZSB0YWdzLCBpbmNsdWRpbmcgb3BlbiBhbmQgY2xvc2UuXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5hbnNpSFRNTC50YWdzID0ge31cblxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYW5zaUhUTUwudGFncywgJ29wZW4nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfb3BlblRhZ3MgfVxuICB9KVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYW5zaUhUTUwudGFncywgJ2Nsb3NlJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX2Nsb3NlVGFncyB9XG4gIH0pXG59IGVsc2Uge1xuICBhbnNpSFRNTC50YWdzLm9wZW4gPSBfb3BlblRhZ3NcbiAgYW5zaUhUTUwudGFncy5jbG9zZSA9IF9jbG9zZVRhZ3Ncbn1cblxuZnVuY3Rpb24gX3NldFRhZ3MgKGNvbG9ycykge1xuICAvLyByZXNldCBhbGxcbiAgX29wZW5UYWdzWycwJ10gPSAnZm9udC13ZWlnaHQ6bm9ybWFsO29wYWNpdHk6MTtjb2xvcjojJyArIGNvbG9ycy5yZXNldFswXSArICc7YmFja2dyb3VuZDojJyArIGNvbG9ycy5yZXNldFsxXVxuICAvLyBpbnZlcnNlXG4gIF9vcGVuVGFnc1snNyddID0gJ2NvbG9yOiMnICsgY29sb3JzLnJlc2V0WzFdICsgJztiYWNrZ3JvdW5kOiMnICsgY29sb3JzLnJlc2V0WzBdXG4gIC8vIGRhcmsgZ3JleVxuICBfb3BlblRhZ3NbJzkwJ10gPSAnY29sb3I6IycgKyBjb2xvcnMuZGFya2dyZXlcblxuICBmb3IgKHZhciBjb2RlIGluIF9zdHlsZXMpIHtcbiAgICB2YXIgY29sb3IgPSBfc3R5bGVzW2NvZGVdXG4gICAgdmFyIG9yaUNvbG9yID0gY29sb3JzW2NvbG9yXSB8fCAnMDAwJ1xuICAgIF9vcGVuVGFnc1tjb2RlXSA9ICdjb2xvcjojJyArIG9yaUNvbG9yXG4gICAgY29kZSA9IHBhcnNlSW50KGNvZGUpXG4gICAgX29wZW5UYWdzWyhjb2RlICsgMTApLnRvU3RyaW5nKCldID0gJ2JhY2tncm91bmQ6IycgKyBvcmlDb2xvclxuICB9XG59XG5cbmFuc2lIVE1MLnJlc2V0KClcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/ansi-html/index.js\n");
/***/ }),
/***/ "./node_modules/ansi-regex/index.js":
/*!******************************************!*\
!*** ./node_modules/ansi-regex/index.js ***!
\******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\nmodule.exports = function () {\n\treturn /[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW5zaS1yZWdleC9pbmRleC5qcz85ZWVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSw2QkFBNkIsWUFBWSxJQUFJLElBQUksTUFBTSxJQUFJO0FBQzNEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2Fuc2ktcmVnZXgvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuIC9bXFx1MDAxYlxcdTAwOWJdW1soKSM7P10qKD86WzAtOV17MSw0fSg/OjtbMC05XXswLDR9KSopP1swLTlBLVBSWmNmLW5xcnk9PjxdL2c7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/ansi-regex/index.js\n");
/***/ }),
/***/ "./node_modules/eventemitter3/index.js":
/*!*********************************************!*\
!*** ./node_modules/eventemitter3/index.js ***!
\*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif (true) {\n module.exports = EventEmitter;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXZlbnRlbWl0dGVyMy9pbmRleC5qcz9iYTEwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQixXQUFXLEVBQUU7QUFDYixXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsRUFBRTtBQUNiLFdBQVcsUUFBUTtBQUNuQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsYUFBYSxNQUFNO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx5REFBeUQsT0FBTztBQUNoRTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx5Q0FBeUMsU0FBUztBQUNsRDtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUEsZUFBZSxZQUFZO0FBQzNCOztBQUVBO0FBQ0EsMkRBQTJEO0FBQzNELCtEQUErRDtBQUMvRCxtRUFBbUU7QUFDbkUsdUVBQXVFO0FBQ3ZFO0FBQ0EsMERBQTBELFNBQVM7QUFDbkU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCLFdBQVcsU0FBUztBQUNwQixXQUFXLEVBQUU7QUFDYixhQUFhLGFBQWE7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxFQUFFO0FBQ2IsYUFBYSxhQUFhO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsRUFBRTtBQUNiLFdBQVcsUUFBUTtBQUNuQixhQUFhLGFBQWE7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILDJEQUEyRCxZQUFZO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsYUFBYSxhQUFhO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBNkI7QUFDakM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuICAsIHByZWZpeCA9ICd+JztcblxuLyoqXG4gKiBDb25zdHJ1Y3RvciB0byBjcmVhdGUgYSBzdG9yYWdlIGZvciBvdXIgYEVFYCBvYmplY3RzLlxuICogQW4gYEV2ZW50c2AgaW5zdGFuY2UgaXMgYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFdmVudHMoKSB7fVxuXG4vL1xuLy8gV2UgdHJ5IHRvIG5vdCBpbmhlcml0IGZyb20gYE9iamVjdC5wcm90b3R5cGVgLiBJbiBzb21lIGVuZ2luZXMgY3JlYXRpbmcgYW5cbi8vIGluc3RhbmNlIGluIHRoaXMgd2F5IGlzIGZhc3RlciB0aGFuIGNhbGxpbmcgYE9iamVjdC5jcmVhdGUobnVsbClgIGRpcmVjdGx5LlxuLy8gSWYgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIG5vdCBzdXBwb3J0ZWQgd2UgcHJlZml4IHRoZSBldmVudCBuYW1lcyB3aXRoIGFcbi8vIGNoYXJhY3RlciB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbHQtaW4gb2JqZWN0IHByb3BlcnRpZXMgYXJlIG5vdFxuLy8gb3ZlcnJpZGRlbiBvciB1c2VkIGFzIGFuIGF0dGFjayB2ZWN0b3IuXG4vL1xuaWYgKE9iamVjdC5jcmVhdGUpIHtcbiAgRXZlbnRzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgLy9cbiAgLy8gVGhpcyBoYWNrIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBgX19wcm90b19fYCBwcm9wZXJ0eSBpcyBzdGlsbCBpbmhlcml0ZWQgaW5cbiAgLy8gc29tZSBvbGQgYnJvd3NlcnMgbGlrZSBBbmRyb2lkIDQsIGlQaG9uZSA1LjEsIE9wZXJhIDExIGFuZCBTYWZhcmkgNS5cbiAgLy9cbiAgaWYgKCFuZXcgRXZlbnRzKCkuX19wcm90b19fKSBwcmVmaXggPSBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRhdGlvbiBvZiBhIHNpbmdsZSBldmVudCBsaXN0ZW5lci5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHBhcmFtIHtCb29sZWFufSBbb25jZT1mYWxzZV0gU3BlY2lmeSBpZiB0aGUgbGlzdGVuZXIgaXMgYSBvbmUtdGltZSBsaXN0ZW5lci5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBlbWl0dGVyIFJlZmVyZW5jZSB0byB0aGUgYEV2ZW50RW1pdHRlcmAgaW5zdGFuY2UuXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIFNwZWNpZnkgaWYgdGhlIGxpc3RlbmVyIGlzIGEgb25lLXRpbWUgbGlzdGVuZXIuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYWRkTGlzdGVuZXIoZW1pdHRlciwgZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgZW1pdHRlciwgb25jZSlcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCFlbWl0dGVyLl9ldmVudHNbZXZ0XSkgZW1pdHRlci5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lciwgZW1pdHRlci5fZXZlbnRzQ291bnQrKztcbiAgZWxzZSBpZiAoIWVtaXR0ZXIuX2V2ZW50c1tldnRdLmZuKSBlbWl0dGVyLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgZWxzZSBlbWl0dGVyLl9ldmVudHNbZXZ0XSA9IFtlbWl0dGVyLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJdO1xuXG4gIHJldHVybiBlbWl0dGVyO1xufVxuXG4vKipcbiAqIENsZWFyIGV2ZW50IGJ5IG5hbWUuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXIgUmVmZXJlbmNlIHRvIHRoZSBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldnQgVGhlIEV2ZW50IG5hbWUuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjbGVhckV2ZW50KGVtaXR0ZXIsIGV2dCkge1xuICBpZiAoLS1lbWl0dGVyLl9ldmVudHNDb3VudCA9PT0gMCkgZW1pdHRlci5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICBlbHNlIGRlbGV0ZSBlbWl0dGVyLl9ldmVudHNbZXZ0XTtcbn1cblxuLyoqXG4gKiBNaW5pbWFsIGBFdmVudEVtaXR0ZXJgIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBgRXZlbnRFbWl0dGVyYCBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG59XG5cbi8qKlxuICogUmV0dXJuIGFuIGFycmF5IGxpc3RpbmcgdGhlIGV2ZW50cyBmb3Igd2hpY2ggdGhlIGVtaXR0ZXIgaGFzIHJlZ2lzdGVyZWRcbiAqIGxpc3RlbmVycy5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZXZlbnROYW1lcyA9IGZ1bmN0aW9uIGV2ZW50TmFtZXMoKSB7XG4gIHZhciBuYW1lcyA9IFtdXG4gICAgLCBldmVudHNcbiAgICAsIG5hbWU7XG5cbiAgaWYgKHRoaXMuX2V2ZW50c0NvdW50ID09PSAwKSByZXR1cm4gbmFtZXM7XG5cbiAgZm9yIChuYW1lIGluIChldmVudHMgPSB0aGlzLl9ldmVudHMpKSB7XG4gICAgaWYgKGhhcy5jYWxsKGV2ZW50cywgbmFtZSkpIG5hbWVzLnB1c2gocHJlZml4ID8gbmFtZS5zbGljZSgxKSA6IG5hbWUpO1xuICB9XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICByZXR1cm4gbmFtZXMuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZXZlbnRzKSk7XG4gIH1cblxuICByZXR1cm4gbmFtZXM7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbGlzdGVuZXJzIHJlZ2lzdGVyZWQgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0FycmF5fSBUaGUgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50XG4gICAgLCBoYW5kbGVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmICghaGFuZGxlcnMpIHJldHVybiBbXTtcbiAgaWYgKGhhbmRsZXJzLmZuKSByZXR1cm4gW2hhbmRsZXJzLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGhhbmRsZXJzLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGhhbmRsZXJzW2ldLmZuO1xuICB9XG5cbiAgcmV0dXJuIGVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBsaXN0ZW5lcnMgbGlzdGVuaW5nIHRvIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWJlciBvZiBsaXN0ZW5lcnMuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uIGxpc3RlbmVyQ291bnQoZXZlbnQpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmICghbGlzdGVuZXJzKSByZXR1cm4gMDtcbiAgaWYgKGxpc3RlbmVycy5mbikgcmV0dXJuIDE7XG4gIHJldHVybiBsaXN0ZW5lcnMubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBDYWxscyBlYWNoIG9mIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBldmVudCBoYWQgbGlzdGVuZXJzLCBlbHNlIGBmYWxzZWAuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQoZXZlbnQsIGExLCBhMiwgYTMsIGE0LCBhNSkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVycy5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICBjYXNlIDE6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCksIHRydWU7XG4gICAgICBjYXNlIDI6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEpLCB0cnVlO1xuICAgICAgY2FzZSAzOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiksIHRydWU7XG4gICAgICBjYXNlIDQ6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMyksIHRydWU7XG4gICAgICBjYXNlIDU6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQpLCB0cnVlO1xuICAgICAgY2FzZSA2OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0LCBhNSksIHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgIH1cblxuICAgIGxpc3RlbmVycy5mbi5hcHBseShsaXN0ZW5lcnMuY29udGV4dCwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3RlbmVycy5sZW5ndGhcbiAgICAgICwgajtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGxpc3RlbmVyc1tpXS5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnNbaV0uZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICAgIGNhc2UgMTogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQpOyBicmVhaztcbiAgICAgICAgY2FzZSAyOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEpOyBicmVhaztcbiAgICAgICAgY2FzZSAzOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEsIGEyKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgNDogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMiwgYTMpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBBZGQgYSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IFtjb250ZXh0PXRoaXNdIFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICByZXR1cm4gYWRkTGlzdGVuZXIodGhpcywgZXZlbnQsIGZuLCBjb250ZXh0LCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG9uZS10aW1lIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHQ9dGhpc10gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICByZXR1cm4gYWRkTGlzdGVuZXIodGhpcywgZXZlbnQsIGZuLCBjb250ZXh0LCB0cnVlKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBsaXN0ZW5lcnMgb2YgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBPbmx5IHJlbW92ZSB0aGUgbGlzdGVuZXJzIHRoYXQgbWF0Y2ggdGhpcyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBPbmx5IHJlbW92ZSB0aGUgbGlzdGVuZXJzIHRoYXQgaGF2ZSB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25lLXRpbWUgbGlzdGVuZXJzLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHJldHVybiB0aGlzO1xuICBpZiAoIWZuKSB7XG4gICAgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICBpZiAoXG4gICAgICBsaXN0ZW5lcnMuZm4gPT09IGZuICYmXG4gICAgICAoIW9uY2UgfHwgbGlzdGVuZXJzLm9uY2UpICYmXG4gICAgICAoIWNvbnRleHQgfHwgbGlzdGVuZXJzLmNvbnRleHQgPT09IGNvbnRleHQpXG4gICAgKSB7XG4gICAgICBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwLCBldmVudHMgPSBbXSwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm4gfHxcbiAgICAgICAgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKSB8fFxuICAgICAgICAoY29udGV4dCAmJiBsaXN0ZW5lcnNbaV0uY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vXG4gICAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAgIC8vXG4gICAgaWYgKGV2ZW50cy5sZW5ndGgpIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgICBlbHNlIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycywgb3IgdGhvc2Ugb2YgdGhlIHNwZWNpZmllZCBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gW2V2ZW50XSBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnMoZXZlbnQpIHtcbiAgdmFyIGV2dDtcblxuICBpZiAoZXZlbnQpIHtcbiAgICBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuICAgIGlmICh0aGlzLl9ldmVudHNbZXZ0XSkgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX2V2ZW50cyA9IG5ldyBFdmVudHMoKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gQWxsb3cgYEV2ZW50RW1pdHRlcmAgdG8gYmUgaW1wb3J0ZWQgYXMgbW9kdWxlIG5hbWVzcGFjZS5cbi8vXG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/eventemitter3/index.js\n");
/***/ }),
/***/ "./node_modules/events/events.js":
/*!***************************************!*\
!*** ./node_modules/events/events.js ***!
\***************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = $getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) args.push(arguments[i]);\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n ReflectApply(this.listener, this.target, args);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcz9mYWExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQixzQkFBc0I7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsbUJBQW1CLFNBQVM7QUFDNUI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLHNCQUFzQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUEsaUNBQWlDLFFBQVE7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixpQkFBaUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxzQ0FBc0MsUUFBUTtBQUM5QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUSx5QkFBeUI7QUFDakM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsZ0JBQWdCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50c0NvdW50ID0gMDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxudmFyIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlciwgJ2RlZmF1bHRNYXhMaXN0ZW5lcnMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24oYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09ICdudW1iZXInIHx8IGFyZyA8IDAgfHwgTnVtYmVySXNOYU4oYXJnKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgYXJnICsgJy4nKTtcbiAgICB9XG4gICAgZGVmYXVsdE1heExpc3RlbmVycyA9IGFyZztcbiAgfVxufSk7XG5cbkV2ZW50RW1pdHRlci5pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgaWYgKHRoaXMuX2V2ZW50cyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9ldmVudHMgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSB7XG4gICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufTtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0TWF4TGlzdGVuZXJzKG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCBuIDwgMCB8fCBOdW1iZXJJc05hTihuKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIG4gKyAnLicpO1xuICB9XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gJGdldE1heExpc3RlbmVycyh0aGF0KSB7XG4gIGlmICh0aGF0Ll9tYXhMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIHJldHVybiB0aGF0Ll9tYXhMaXN0ZW5lcnM7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gZ2V0TWF4TGlzdGVuZXJzKCkge1xuICByZXR1cm4gJGdldE1heExpc3RlbmVycyh0aGlzKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQodHlwZSkge1xuICB2YXIgYXJncyA9IFtdO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gIHZhciBkb0Vycm9yID0gKHR5cGUgPT09ICdlcnJvcicpO1xuXG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZClcbiAgICBkb0Vycm9yID0gKGRvRXJyb3IgJiYgZXZlbnRzLmVycm9yID09PSB1bmRlZmluZWQpO1xuICBlbHNlIGlmICghZG9FcnJvcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAoZG9FcnJvcikge1xuICAgIHZhciBlcjtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKVxuICAgICAgZXIgPSBhcmdzWzBdO1xuICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAvLyBOb3RlOiBUaGUgY29tbWVudHMgb24gdGhlIGB0aHJvd2AgbGluZXMgYXJlIGludGVudGlvbmFsLCB0aGV5IHNob3dcbiAgICAgIC8vIHVwIGluIE5vZGUncyBvdXRwdXQgaWYgdGhpcyByZXN1bHRzIGluIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICB9XG4gICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuaGFuZGxlZCBlcnJvci4nICsgKGVyID8gJyAoJyArIGVyLm1lc3NhZ2UgKyAnKScgOiAnJykpO1xuICAgIGVyci5jb250ZXh0ID0gZXI7XG4gICAgdGhyb3cgZXJyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICB9XG5cbiAgdmFyIGhhbmRsZXIgPSBldmVudHNbdHlwZV07XG5cbiAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdEFwcGx5KGhhbmRsZXIsIHRoaXMsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW4gPSBoYW5kbGVyLmxlbmd0aDtcbiAgICB2YXIgbGlzdGVuZXJzID0gYXJyYXlDbG9uZShoYW5kbGVyLCBsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICBSZWZsZWN0QXBwbHkobGlzdGVuZXJzW2ldLCB0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2FkZExpc3RlbmVyKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHByZXBlbmQpIHtcbiAgdmFyIG07XG4gIHZhciBldmVudHM7XG4gIHZhciBleGlzdGluZztcblxuICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBsaXN0ZW5lcik7XG4gIH1cblxuICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRhcmdldC5fZXZlbnRzQ291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gICAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICAgIGlmIChldmVudHMubmV3TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0LmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyID8gbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgICAgIC8vIFJlLWFzc2lnbiBgZXZlbnRzYCBiZWNhdXNlIGEgbmV3TGlzdGVuZXIgaGFuZGxlciBjb3VsZCBoYXZlIGNhdXNlZCB0aGVcbiAgICAgIC8vIHRoaXMuX2V2ZW50cyB0byBiZSBhc3NpZ25lZCB0byBhIG5ldyBvYmplY3RcbiAgICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICAgIH1cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXTtcbiAgfVxuXG4gIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICArK3RhcmdldC5fZXZlbnRzQ291bnQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBleGlzdGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9XG4gICAgICAgIHByZXBlbmQgPyBbbGlzdGVuZXIsIGV4aXN0aW5nXSA6IFtleGlzdGluZywgbGlzdGVuZXJdO1xuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIH0gZWxzZSBpZiAocHJlcGVuZCkge1xuICAgICAgZXhpc3RpbmcudW5zaGlmdChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0aW5nLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gICAgbSA9ICRnZXRNYXhMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICBpZiAobSA+IDAgJiYgZXhpc3RpbmcubGVuZ3RoID4gbSAmJiAhZXhpc3Rpbmcud2FybmVkKSB7XG4gICAgICBleGlzdGluZy53YXJuZWQgPSB0cnVlO1xuICAgICAgLy8gTm8gZXJyb3IgY29kZSBmb3IgdGhpcyBzaW5jZSBpdCBpcyBhIFdhcm5pbmdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgdmFyIHcgPSBuZXcgRXJyb3IoJ1Bvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmxlbmd0aCArICcgJyArIFN0cmluZyh0eXBlKSArICcgbGlzdGVuZXJzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jcmVhc2UgbGltaXQnKTtcbiAgICAgIHcubmFtZSA9ICdNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmcnO1xuICAgICAgdy5lbWl0dGVyID0gdGFyZ2V0O1xuICAgICAgdy50eXBlID0gdHlwZTtcbiAgICAgIHcuY291bnQgPSBleGlzdGluZy5sZW5ndGg7XG4gICAgICBQcm9jZXNzRW1pdFdhcm5pbmcodyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICB9O1xuXG5mdW5jdGlvbiBvbmNlV3JhcHBlcigpIHtcbiAgdmFyIGFyZ3MgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBSZWZsZWN0QXBwbHkodGhpcy5saXN0ZW5lciwgdGhpcy50YXJnZXQsIGFyZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJlcGVuZExpc3RlbmVyKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuLy8gRW1pdHMgYSAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGlmIGFuZCBvbmx5IGlmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICB2YXIgbGlzdCwgZXZlbnRzLCBwb3NpdGlvbiwgaSwgb3JpZ2luYWxMaXN0ZW5lcjtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgICAgIH1cblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgbGlzdCA9IGV2ZW50c1t0eXBlXTtcbiAgICAgIGlmIChsaXN0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHwgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3QubGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBvc2l0aW9uID0gLTE7XG5cbiAgICAgICAgZm9yIChpID0gbGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fCBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RbaV0ubGlzdGVuZXI7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gMClcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHNwbGljZU9uZShsaXN0LCBwb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpXG4gICAgICAgICAgZXZlbnRzW3R5cGVdID0gbGlzdFswXTtcblxuICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIG9yaWdpbmFsTGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID1cbiAgICBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnModHlwZSkge1xuICAgICAgdmFyIGxpc3RlbmVycywgZXZlbnRzLCBpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudHNbdHlwZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnRzKTtcbiAgICAgICAgdmFyIGtleTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlbmVycyA9IGV2ZW50c1t0eXBlXTtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBMSUZPIG9yZGVyXG4gICAgICAgIGZvciAoaSA9IGxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5mdW5jdGlvbiBfbGlzdGVuZXJzKHRhcmdldCwgdHlwZSwgdW53cmFwKSB7XG4gIHZhciBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuICBpZiAoZXZsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHVud3JhcCA/IFtldmxpc3RlbmVyLmxpc3RlbmVyIHx8IGV2bGlzdGVuZXJdIDogW2V2bGlzdGVuZXJdO1xuXG4gIHJldHVybiB1bndyYXAgP1xuICAgIHVud3JhcExpc3RlbmVycyhldmxpc3RlbmVyKSA6IGFycmF5Q2xvbmUoZXZsaXN0ZW5lciwgZXZsaXN0ZW5lci5sZW5ndGgpO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIHRydWUpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnMgPSBmdW5jdGlvbiByYXdMaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLmxpc3RlbmVyQ291bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsaXN0ZW5lckNvdW50LmNhbGwoZW1pdHRlciwgdHlwZSk7XG4gIH1cbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGxpc3RlbmVyQ291bnQ7XG5mdW5jdGlvbiBsaXN0ZW5lckNvdW50KHR5cGUpIHtcbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcblxuICAgIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChldmxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBldmxpc3RlbmVyLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgcmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50ID4gMCA/IFJlZmxlY3RPd25LZXlzKHRoaXMuX2V2ZW50cykgOiBbXTtcbn07XG5cbmZ1bmN0aW9uIGFycmF5Q2xvbmUoYXJyLCBuKSB7XG4gIHZhciBjb3B5ID0gbmV3IEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSlcbiAgICBjb3B5W2ldID0gYXJyW2ldO1xuICByZXR1cm4gY29weTtcbn1cblxuZnVuY3Rpb24gc3BsaWNlT25lKGxpc3QsIGluZGV4KSB7XG4gIGZvciAoOyBpbmRleCArIDEgPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKylcbiAgICBsaXN0W2luZGV4XSA9IGxpc3RbaW5kZXggKyAxXTtcbiAgbGlzdC5wb3AoKTtcbn1cblxuZnVuY3Rpb24gdW53cmFwTGlzdGVuZXJzKGFycikge1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGFyci5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJldC5sZW5ndGg7ICsraSkge1xuICAgIHJldFtpXSA9IGFycltpXS5saXN0ZW5lciB8fCBhcnJbaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/events/events.js\n");
/***/ }),
/***/ "./node_modules/html-entities/index.js":
/*!*********************************************!*\
!*** ./node_modules/html-entities/index.js ***!
\*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("module.exports = {\n XmlEntities: __webpack_require__(/*! ./lib/xml-entities.js */ \"./node_modules/html-entities/lib/xml-entities.js\"),\n Html4Entities: __webpack_require__(/*! ./lib/html4-entities.js */ \"./node_modules/html-entities/lib/html4-entities.js\"),\n Html5Entities: __webpack_require__(/*! ./lib/html5-entities.js */ \"./node_modules/html-entities/lib/html5-entities.js\"),\n AllHtmlEntities: __webpack_require__(/*! ./lib/html5-entities.js */ \"./node_modules/html-entities/lib/html5-entities.js\")\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaHRtbC1lbnRpdGllcy9pbmRleC5qcz84MmM3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLCtFQUF1QjtBQUM5QyxpQkFBaUIsbUJBQU8sQ0FBQyxtRkFBeUI7QUFDbEQsaUJBQWlCLG1CQUFPLENBQUMsbUZBQXlCO0FBQ2xELG1CQUFtQixtQkFBTyxDQUFDLG1GQUF5QjtBQUNwRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9odG1sLWVudGl0aWVzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSB7XG4gIFhtbEVudGl0aWVzOiByZXF1aXJlKCcuL2xpYi94bWwtZW50aXRpZXMuanMnKSxcbiAgSHRtbDRFbnRpdGllczogcmVxdWlyZSgnLi9saWIvaHRtbDQtZW50aXRpZXMuanMnKSxcbiAgSHRtbDVFbnRpdGllczogcmVxdWlyZSgnLi9saWIvaHRtbDUtZW50aXRpZXMuanMnKSxcbiAgQWxsSHRtbEVudGl0aWVzOiByZXF1aXJlKCcuL2xpYi9odG1sNS1lbnRpdGllcy5qcycpXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/html-entities/index.js\n");
/***/ }),
/***/ "./node_modules/html-entities/lib/html4-entities.js":
/*!**********************************************************!*\
!*** ./node_modules/html-entities/lib/html4-entities.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("var HTML_ALPHA = ['apos', 'nbsp', 'iexcl', 'cent', 'pound', 'curren', 'yen', 'brvbar', 'sect', 'uml', 'copy', 'ordf', 'laquo', 'not', 'shy', 'reg', 'macr', 'deg', 'plusmn', 'sup2', 'sup3', 'acute', 'micro', 'para', 'middot', 'cedil', 'sup1', 'ordm', 'raquo', 'frac14', 'frac12', 'frac34', 'iquest', 'Agrave', 'Aacute', 'Acirc', 'Atilde', 'Auml', 'Aring', 'Aelig', 'Ccedil', 'Egrave', 'Eacute', 'Ecirc', 'Euml', 'Igrave', 'Iacute', 'Icirc', 'Iuml', 'ETH', 'Ntilde', 'Ograve', 'Oacute', 'Ocirc', 'Otilde', 'Ouml', 'times', 'Oslash', 'Ugrave', 'Uacute', 'Ucirc', 'Uuml', 'Yacute', 'THORN', 'szlig', 'agrave', 'aacute', 'acirc', 'atilde', 'auml', 'aring', 'aelig', 'ccedil', 'egrave', 'eacute', 'ecirc', 'euml', 'igrave', 'iacute', 'icirc', 'iuml', 'eth', 'ntilde', 'ograve', 'oacute', 'ocirc', 'otilde', 'ouml', 'divide', 'oslash', 'ugrave', 'uacute', 'ucirc', 'uuml', 'yacute', 'thorn', 'yuml', 'quot', 'amp', 'lt', 'gt', 'OElig', 'oelig', 'Scaron', 'scaron', 'Yuml', 'circ', 'tilde', 'ensp', 'emsp', 'thinsp', 'zwnj', 'zwj', 'lrm', 'rlm', 'ndash', 'mdash', 'lsquo', 'rsquo', 'sbquo', 'ldquo', 'rdquo', 'bdquo', 'dagger', 'Dagger', 'permil', 'lsaquo', 'rsaquo', 'euro', 'fnof', 'Alpha', 'Beta', 'Gamma', 'Delta', 'Epsilon', 'Zeta', 'Eta', 'Theta', 'Iota', 'Kappa', 'Lambda', 'Mu', 'Nu', 'Xi', 'Omicron', 'Pi', 'Rho', 'Sigma', 'Tau', 'Upsilon', 'Phi', 'Chi', 'Psi', 'Omega', 'alpha', 'beta', 'gamma', 'delta', 'epsilon', 'zeta', 'eta', 'theta', 'iota', 'kappa', 'lambda', 'mu', 'nu', 'xi', 'omicron', 'pi', 'rho', 'sigmaf', 'sigma', 'tau', 'upsilon', 'phi', 'chi', 'psi', 'omega', 'thetasym', 'upsih', 'piv', 'bull', 'hellip', 'prime', 'Prime', 'oline', 'frasl', 'weierp', 'image', 'real', 'trade', 'alefsym', 'larr', 'uarr', 'rarr', 'darr', 'harr', 'crarr', 'lArr', 'uArr', 'rArr', 'dArr', 'hArr', 'forall', 'part', 'exist', 'empty', 'nabla', 'isin', 'notin', 'ni', 'prod', 'sum', 'minus', 'lowast', 'radic', 'prop', 'infin', 'ang', 'and', 'or', 'cap', 'cup', 'int', 'there4', 'sim', 'cong', 'asymp', 'ne', 'equiv', 'le', 'ge', 'sub', 'sup', 'nsub', 'sube', 'supe', 'oplus', 'otimes', 'perp', 'sdot', 'lceil', 'rceil', 'lfloor', 'rfloor', 'lang', 'rang', 'loz', 'spades', 'clubs', 'hearts', 'diams'];\nvar HTML_CODES = [39, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 34, 38, 60, 62, 338, 339, 352, 353, 376, 710, 732, 8194, 8195, 8201, 8204, 8205, 8206, 8207, 8211, 8212, 8216, 8217, 8218, 8220, 8221, 8222, 8224, 8225, 8240, 8249, 8250, 8364, 402, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 977, 978, 982, 8226, 8230, 8242, 8243, 8254, 8260, 8472, 8465, 8476, 8482, 8501, 8592, 8593, 8594, 8595, 8596, 8629, 8656, 8657, 8658, 8659, 8660, 8704, 8706, 8707, 8709, 8711, 8712, 8713, 8715, 8719, 8721, 8722, 8727, 8730, 8733, 8734, 8736, 8743, 8744, 8745, 8746, 8747, 8756, 8764, 8773, 8776, 8800, 8801, 8804, 8805, 8834, 8835, 8836, 8838, 8839, 8853, 8855, 8869, 8901, 8968, 8969, 8970, 8971, 9001, 9002, 9674, 9824, 9827, 9829, 9830];\n\nvar alphaIndex = {};\nvar numIndex = {};\n\nvar i = 0;\nvar length = HTML_ALPHA.length;\nwhile (i < length) {\n var a = HTML_ALPHA[i];\n var c = HTML_CODES[i];\n alphaIndex[a] = String.fromCharCode(c);\n numIndex[c] = a;\n i++;\n}\n\n/**\n * @constructor\n */\nfunction Html4Entities() {}\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.prototype.decode = function(str) {\n if (!str || !str.length) {\n return '';\n }\n return str.replace(/&(#?[\\w\\d]+);?/g, function(s, entity) {\n var chr;\n if (entity.charAt(0) === \"#\") {\n var code = entity.charAt(1).toLowerCase() === 'x' ?\n parseInt(entity.substr(2), 16) :\n parseInt(entity.substr(1));\n\n if (!(isNaN(code) || code < -32768 || code > 65535)) {\n chr = String.fromCharCode(code);\n }\n } else {\n chr = alphaIndex[entity];\n }\n return chr || s;\n });\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.decode = function(str) {\n return new Html4Entities().decode(str);\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.prototype.encode = function(str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var alpha = numIndex[str.charCodeAt(i)];\n result += alpha ? \"&\" + alpha + \";\" : str.charAt(i);\n i++;\n }\n return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.encode = function(str) {\n return new Html4Entities().encode(str);\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.prototype.encodeNonUTF = function(str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var cc = str.charCodeAt(i);\n var alpha = numIndex[cc];\n if (alpha) {\n result += \"&\" + alpha + \";\";\n } else if (cc < 32 || cc > 126) {\n result += \"&#\" + cc + \";\";\n } else {\n result += str.charAt(i);\n }\n i++;\n }\n return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.encodeNonUTF = function(str) {\n return new Html4Entities().encodeNonUTF(str);\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.prototype.encodeNonASCII = function(str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var c = str.charCodeAt(i);\n if (c <= 255) {\n result += str[i++];\n continue;\n }\n result += '&#' + c + ';';\n i++;\n }\n return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml4Entities.encodeNonASCII = function(str) {\n return new Html4Entities().encodeNonASCII(str);\n};\n\nmodule.exports = Html4Entities;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaHRtbC1lbnRpdGllcy9saWIvaHRtbDQtZW50aXRpZXMuanM/MWYwNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDLFNBQVM7QUFDVCxvQ0FBb0M7QUFDcEMsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2h0bWwtZW50aXRpZXMvbGliL2h0bWw0LWVudGl0aWVzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIEhUTUxfQUxQSEEgPSBbJ2Fwb3MnLCAnbmJzcCcsICdpZXhjbCcsICdjZW50JywgJ3BvdW5kJywgJ2N1cnJlbicsICd5ZW4nLCAnYnJ2YmFyJywgJ3NlY3QnLCAndW1sJywgJ2NvcHknLCAnb3JkZicsICdsYXF1bycsICdub3QnLCAnc2h5JywgJ3JlZycsICdtYWNyJywgJ2RlZycsICdwbHVzbW4nLCAnc3VwMicsICdzdXAzJywgJ2FjdXRlJywgJ21pY3JvJywgJ3BhcmEnLCAnbWlkZG90JywgJ2NlZGlsJywgJ3N1cDEnLCAnb3JkbScsICdyYXF1bycsICdmcmFjMTQnLCAnZnJhYzEyJywgJ2ZyYWMzNCcsICdpcXVlc3QnLCAnQWdyYXZlJywgJ0FhY3V0ZScsICdBY2lyYycsICdBdGlsZGUnLCAnQXVtbCcsICdBcmluZycsICdBZWxpZycsICdDY2VkaWwnLCAnRWdyYXZlJywgJ0VhY3V0ZScsICdFY2lyYycsICdFdW1sJywgJ0lncmF2ZScsICdJYWN1dGUnLCAnSWNpcmMnLCAnSXVtbCcsICdFVEgnLCAnTnRpbGRlJywgJ09ncmF2ZScsICdPYWN1dGUnLCAnT2NpcmMnLCAnT3RpbGRlJywgJ091bWwnLCAndGltZXMnLCAnT3NsYXNoJywgJ1VncmF2ZScsICdVYWN1dGUnLCAnVWNpcmMnLCAnVXVtbCcsICdZYWN1dGUnLCAnVEhPUk4nLCAnc3psaWcnLCAnYWdyYXZlJywgJ2FhY3V0ZScsICdhY2lyYycsICdhdGlsZGUnLCAnYXVtbCcsICdhcmluZycsICdhZWxpZycsICdjY2VkaWwnLCAnZWdyYXZlJywgJ2VhY3V0ZScsICdlY2lyYycsICdldW1sJywgJ2lncmF2ZScsICdpYWN1dGUnLCAnaWNpcmMnLCAnaXVtbCcsICdldGgnLCAnbnRpbGRlJywgJ29ncmF2ZScsICdvYWN1dGUnLCAnb2NpcmMnLCAnb3RpbGRlJywgJ291bWwnLCAnZGl2aWRlJywgJ29zbGFzaCcsICd1Z3JhdmUnLCAndWFjdXRlJywgJ3VjaXJjJywgJ3V1bWwnLCAneWFjdXRlJywgJ3Rob3JuJywgJ3l1bWwnLCAncXVvdCcsICdhbXAnLCAnbHQnLCAnZ3QnLCAnT0VsaWcnLCAnb2VsaWcnLCAnU2Nhcm9uJywgJ3NjYXJvbicsICdZdW1sJywgJ2NpcmMnLCAndGlsZGUnLCAnZW5zcCcsICdlbXNwJywgJ3RoaW5zcCcsICd6d25qJywgJ3p3aicsICdscm0nLCAncmxtJywgJ25kYXNoJywgJ21kYXNoJywgJ2xzcXVvJywgJ3JzcXVvJywgJ3NicXVvJywgJ2xkcXVvJywgJ3JkcXVvJywgJ2JkcXVvJywgJ2RhZ2dlcicsICdEYWdnZXInLCAncGVybWlsJywgJ2xzYXF1bycsICdyc2FxdW8nLCAnZXVybycsICdmbm9mJywgJ0FscGhhJywgJ0JldGEnLCAnR2FtbWEnLCAnRGVsdGEnLCAnRXBzaWxvbicsICdaZXRhJywgJ0V0YScsICdUaGV0YScsICdJb3RhJywgJ0thcHBhJywgJ0xhbWJkYScsICdNdScsICdOdScsICdYaScsICdPbWljcm9uJywgJ1BpJywgJ1JobycsICdTaWdtYScsICdUYXUnLCAnVXBzaWxvbicsICdQaGknLCAnQ2hpJywgJ1BzaScsICdPbWVnYScsICdhbHBoYScsICdiZXRhJywgJ2dhbW1hJywgJ2RlbHRhJywgJ2Vwc2lsb24nLCAnemV0YScsICdldGEnLCAndGhldGEnLCAnaW90YScsICdrYXBwYScsICdsYW1iZGEnLCAnbXUnLCAnbnUnLCAneGknLCAnb21pY3JvbicsICdwaScsICdyaG8nLCAnc2lnbWFmJywgJ3NpZ21hJywgJ3RhdScsICd1cHNpbG9uJywgJ3BoaScsICdjaGknLCAncHNpJywgJ29tZWdhJywgJ3RoZXRhc3ltJywgJ3Vwc2loJywgJ3BpdicsICdidWxsJywgJ2hlbGxpcCcsICdwcmltZScsICdQcmltZScsICdvbGluZScsICdmcmFzbCcsICd3ZWllcnAnLCAnaW1hZ2UnLCAncmVhbCcsICd0cmFkZScsICdhbGVmc3ltJywgJ2xhcnInLCAndWFycicsICdyYXJyJywgJ2RhcnInLCAnaGFycicsICdjcmFycicsICdsQXJyJywgJ3VBcnInLCAnckFycicsICdkQXJyJywgJ2hBcnInLCAnZm9yYWxsJywgJ3BhcnQnLCAnZXhpc3QnLCAnZW1wdHknLCAnbmFibGEnLCAnaXNpbicsICdub3RpbicsICduaScsICdwcm9kJywgJ3N1bScsICdtaW51cycsICdsb3dhc3QnLCAncmFkaWMnLCAncHJvcCcsICdpbmZpbicsICdhbmcnLCAnYW5kJywgJ29yJywgJ2NhcCcsICdjdXAnLCAnaW50JywgJ3RoZXJlNCcsICdzaW0nLCAnY29uZycsICdhc3ltcCcsICduZScsICdlcXVpdicsICdsZScsICdnZScsICdzdWInLCAnc3VwJywgJ25zdWInLCAnc3ViZScsICdzdXBlJywgJ29wbHVzJywgJ290aW1lcycsICdwZXJwJywgJ3Nkb3QnLCAnbGNlaWwnLCAncmNlaWwnLCAnbGZsb29yJywgJ3JmbG9vcicsICdsYW5nJywgJ3JhbmcnLCAnbG96JywgJ3NwYWRlcycsICdjbHVicycsICdoZWFydHMnLCAnZGlhbXMnXTtcbnZhciBIVE1MX0NPREVTID0gWzM5LCAxNjAsIDE2MSwgMTYyLCAxNjMsIDE2NCwgMTY1LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcxLCAxNzIsIDE3MywgMTc0LCAxNzUsIDE3NiwgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODEsIDE4MiwgMTgzLCAxODQsIDE4NSwgMTg2LCAxODcsIDE4OCwgMTg5LCAxOTAsIDE5MSwgMTkyLCAxOTMsIDE5NCwgMTk1LCAxOTYsIDE5NywgMTk4LCAxOTksIDIwMCwgMjAxLCAyMDIsIDIwMywgMjA0LCAyMDUsIDIwNiwgMjA3LCAyMDgsIDIwOSwgMjEwLCAyMTEsIDIxMiwgMjEzLCAyMTQsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMSwgMjIyLCAyMjMsIDIyNCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIzMCwgMjMxLCAyMzIsIDIzMywgMjM0LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwgMjQwLCAyNDEsIDI0MiwgMjQzLCAyNDQsIDI0NSwgMjQ2LCAyNDcsIDI0OCwgMjQ5LCAyNTAsIDI1MSwgMjUyLCAyNTMsIDI1NCwgMjU1LCAzNCwgMzgsIDYwLCA2MiwgMzM4LCAzMzksIDM1MiwgMzUzLCAzNzYsIDcxMCwgNzMyLCA4MTk0LCA4MTk1LCA4MjAxLCA4MjA0LCA4MjA1LCA4MjA2LCA4MjA3LCA4MjExLCA4MjEyLCA4MjE2LCA4MjE3LCA4MjE4LCA4MjIwLCA4MjIxLCA4MjIyLCA4MjI0LCA4MjI1LCA4MjQwLCA4MjQ5LCA4MjUwLCA4MzY0LCA0MDIsIDkxMywgOTE0LCA5MTUsIDkxNiwgOTE3LCA5MTgsIDkxOSwgOTIwLCA5MjEsIDkyMiwgOTIzLCA5MjQsIDkyNSwgOTI2LCA5MjcsIDkyOCwgOTI5LCA5MzEsIDkzMiwgOTMzLCA5MzQsIDkzNSwgOTM2LCA5MzcsIDk0NSwgOTQ2LCA5NDcsIDk0OCwgOTQ5LCA5NTAsIDk1MSwgOTUyLCA5NTMsIDk1NCwgOTU1LCA5NTYsIDk1NywgOTU4LCA5NTksIDk2MCwgOTYxLCA5NjIsIDk2MywgOTY0LCA5NjUsIDk2NiwgOTY3LCA5NjgsIDk2OSwgOTc3LCA5NzgsIDk4MiwgODIyNiwgODIzMCwgODI0MiwgODI0MywgODI1NCwgODI2MCwgODQ3MiwgODQ2NSwgODQ3NiwgODQ4MiwgODUwMSwgODU5MiwgODU5MywgODU5NCwgODU5NSwgODU5NiwgODYyOSwgODY1NiwgODY1NywgODY1OCwgODY1OSwgODY2MCwgODcwNCwgODcwNiwgODcwNywgODcwOSwgODcxMSwgODcxMiwgODcxMywgODcxNSwgODcxOSwgODcyMSwgODcyMiwgODcyNywgODczMCwgODczMywgODczNCwgODczNiwgODc0MywgODc0NCwgODc0NSwgODc0NiwgODc0NywgODc1NiwgODc2NCwgODc3MywgODc3NiwgODgwMCwgODgwMSwgODgwNCwgODgwNSwgODgzNCwgODgzNSwgODgzNiwgODgzOCwgODgzOSwgODg1MywgODg1NSwgODg2OSwgODkwMSwgODk2OCwgODk2OSwgODk3MCwgODk3MSwgOTAwMSwgOTAwMiwgOTY3NCwgOTgyNCwgOTgyNywgOTgyOSwgOTgzMF07XG5cbnZhciBhbHBoYUluZGV4ID0ge307XG52YXIgbnVtSW5kZXggPSB7fTtcblxudmFyIGkgPSAwO1xudmFyIGxlbmd0aCA9IEhUTUxfQUxQSEEubGVuZ3RoO1xud2hpbGUgKGkgPCBsZW5ndGgpIHtcbiAgICB2YXIgYSA9IEhUTUxfQUxQSEFbaV07XG4gICAgdmFyIGMgPSBIVE1MX0NPREVTW2ldO1xuICAgIGFscGhhSW5kZXhbYV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuICAgIG51bUluZGV4W2NdID0gYTtcbiAgICBpKys7XG59XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIEh0bWw0RW50aXRpZXMoKSB7fVxuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbkh0bWw0RW50aXRpZXMucHJvdG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIGlmICghc3RyIHx8ICFzdHIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8mKCM/W1xcd1xcZF0rKTs/L2csIGZ1bmN0aW9uKHMsIGVudGl0eSkge1xuICAgICAgICB2YXIgY2hyO1xuICAgICAgICBpZiAoZW50aXR5LmNoYXJBdCgwKSA9PT0gXCIjXCIpIHtcbiAgICAgICAgICAgIHZhciBjb2RlID0gZW50aXR5LmNoYXJBdCgxKS50b0xvd2VyQ2FzZSgpID09PSAneCcgP1xuICAgICAgICAgICAgICAgIHBhcnNlSW50KGVudGl0eS5zdWJzdHIoMiksIDE2KSA6XG4gICAgICAgICAgICAgICAgcGFyc2VJbnQoZW50aXR5LnN1YnN0cigxKSk7XG5cbiAgICAgICAgICAgIGlmICghKGlzTmFOKGNvZGUpIHx8IGNvZGUgPCAtMzI3NjggfHwgY29kZSA+IDY1NTM1KSkge1xuICAgICAgICAgICAgICAgIGNociA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaHIgPSBhbHBoYUluZGV4W2VudGl0eV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNociB8fCBzO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICovXG5IdG1sNEVudGl0aWVzLmRlY29kZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiBuZXcgSHRtbDRFbnRpdGllcygpLmRlY29kZShzdHIpO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICovXG5IdG1sNEVudGl0aWVzLnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICBpZiAoIXN0ciB8fCAhc3RyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHZhciBzdHJMZW5ndGggPSBzdHIubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBzdHJMZW5ndGgpIHtcbiAgICAgICAgdmFyIGFscGhhID0gbnVtSW5kZXhbc3RyLmNoYXJDb2RlQXQoaSldO1xuICAgICAgICByZXN1bHQgKz0gYWxwaGEgPyBcIiZcIiArIGFscGhhICsgXCI7XCIgOiBzdHIuY2hhckF0KGkpO1xuICAgICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbkh0bWw0RW50aXRpZXMuZW5jb2RlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgcmV0dXJuIG5ldyBIdG1sNEVudGl0aWVzKCkuZW5jb2RlKHN0cik7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbkh0bWw0RW50aXRpZXMucHJvdG90eXBlLmVuY29kZU5vblVURiA9IGZ1bmN0aW9uKHN0cikge1xuICAgIGlmICghc3RyIHx8ICFzdHIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgdmFyIHN0ckxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IHN0ckxlbmd0aCkge1xuICAgICAgICB2YXIgY2MgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgdmFyIGFscGhhID0gbnVtSW5kZXhbY2NdO1xuICAgICAgICBpZiAoYWxwaGEpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBcIiZcIiArIGFscGhhICsgXCI7XCI7XG4gICAgICAgIH0gZWxzZSBpZiAoY2MgPCAzMiB8fCBjYyA+IDEyNikge1xuICAgICAgICAgICAgcmVzdWx0ICs9IFwiJiNcIiArIGNjICsgXCI7XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gc3RyLmNoYXJBdChpKTtcbiAgICAgICAgfVxuICAgICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbkh0bWw0RW50aXRpZXMuZW5jb2RlTm9uVVRGID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgcmV0dXJuIG5ldyBIdG1sNEVudGl0aWVzKCkuZW5jb2RlTm9uVVRGKHN0cik7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbkh0bWw0RW50aXRpZXMucHJvdG90eXBlLmVuY29kZU5vbkFTQ0lJID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgaWYgKCFzdHIgfHwgIXN0ci5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICB2YXIgc3RyTGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChpIDwgc3RyTGVuZ3RoKSB7XG4gICAgICAgIHZhciBjID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDw9IDI1NSkge1xuICAgICAgICAgICAgcmVzdWx0ICs9IHN0cltpKytdO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ICs9ICcmIycgKyBjICsgJzsnO1xuICAgICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbkh0bWw0RW50aXRpZXMuZW5jb2RlTm9uQVNDSUkgPSBmdW5jdGlvbihzdHIpIHtcbiAgICByZXR1cm4gbmV3IEh0bWw0RW50aXRpZXMoKS5lbmNvZGVOb25BU0NJSShzdHIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBIdG1sNEVudGl0aWVzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/html-entities/lib/html4-entities.js\n");
/***/ }),
/***/ "./node_modules/html-entities/lib/html5-entities.js":
/*!**********************************************************!*\
!*** ./node_modules/html-entities/lib/html5-entities.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("var ENTITIES = [['Aacute', [193]], ['aacute', [225]], ['Abreve', [258]], ['abreve', [259]], ['ac', [8766]], ['acd', [8767]], ['acE', [8766, 819]], ['Acirc', [194]], ['acirc', [226]], ['acute', [180]], ['Acy', [1040]], ['acy', [1072]], ['AElig', [198]], ['aelig', [230]], ['af', [8289]], ['Afr', [120068]], ['afr', [120094]], ['Agrave', [192]], ['agrave', [224]], ['alefsym', [8501]], ['aleph', [8501]], ['Alpha', [913]], ['alpha', [945]], ['Amacr', [256]], ['amacr', [257]], ['amalg', [10815]], ['amp', [38]], ['AMP', [38]], ['andand', [10837]], ['And', [10835]], ['and', [8743]], ['andd', [10844]], ['andslope', [10840]], ['andv', [10842]], ['ang', [8736]], ['ange', [10660]], ['angle', [8736]], ['angmsdaa', [10664]], ['angmsdab', [10665]], ['angmsdac', [10666]], ['angmsdad', [10667]], ['angmsdae', [10668]], ['angmsdaf', [10669]], ['angmsdag', [10670]], ['angmsdah', [10671]], ['angmsd', [8737]], ['angrt', [8735]], ['angrtvb', [8894]], ['angrtvbd', [10653]], ['angsph', [8738]], ['angst', [197]], ['angzarr', [9084]], ['Aogon', [260]], ['aogon', [261]], ['Aopf', [120120]], ['aopf', [120146]], ['apacir', [10863]], ['ap', [8776]], ['apE', [10864]], ['ape', [8778]], ['apid', [8779]], ['apos', [39]], ['ApplyFunction', [8289]], ['approx', [8776]], ['approxeq', [8778]], ['Aring', [197]], ['aring', [229]], ['Ascr', [119964]], ['ascr', [119990]], ['Assign', [8788]], ['ast', [42]], ['asymp', [8776]], ['asympeq', [8781]], ['Atilde', [195]], ['atilde', [227]], ['Auml', [196]], ['auml', [228]], ['awconint', [8755]], ['awint', [10769]], ['backcong', [8780]], ['backepsilon', [1014]], ['backprime', [8245]], ['backsim', [8765]], ['backsimeq', [8909]], ['Backslash', [8726]], ['Barv', [10983]], ['barvee', [8893]], ['barwed', [8965]], ['Barwed', [8966]], ['barwedge', [8965]], ['bbrk', [9141]], ['bbrktbrk', [9142]], ['bcong', [8780]], ['Bcy', [1041]], ['bcy', [1073]], ['bdquo', [8222]], ['becaus', [8757]], ['because', [8757]], ['Because', [8757]], ['bemptyv', [10672]], ['bepsi', [1014]], ['bernou', [8492]], ['Bernoullis', [8492]], ['Beta', [914]], ['beta', [946]], ['beth', [8502]], ['between', [8812]], ['Bfr', [120069]], ['bfr', [120095]], ['bigcap', [8898]], ['bigcirc', [9711]], ['bigcup', [8899]], ['bigodot', [10752]], ['bigoplus', [10753]], ['bigotimes', [10754]], ['bigsqcup', [10758]], ['bigstar', [9733]], ['bigtriangledown', [9661]], ['bigtriangleup', [9651]], ['biguplus', [10756]], ['bigvee', [8897]], ['bigwedge', [8896]], ['bkarow', [10509]], ['blacklozenge', [10731]], ['blacksquare', [9642]], ['blacktriangle', [9652]], ['blacktriangledown', [9662]], ['blacktriangleleft', [9666]], ['blacktriangleright', [9656]], ['blank', [9251]], ['blk12', [9618]], ['blk14', [9617]], ['blk34', [9619]], ['block', [9608]], ['bne', [61, 8421]], ['bnequiv', [8801, 8421]], ['bNot', [10989]], ['bnot', [8976]], ['Bopf', [120121]], ['bopf', [120147]], ['bot', [8869]], ['bottom', [8869]], ['bowtie', [8904]], ['boxbox', [10697]], ['boxdl', [9488]], ['boxdL', [9557]], ['boxDl', [9558]], ['boxDL', [9559]], ['boxdr', [9484]], ['boxdR', [9554]], ['boxDr', [9555]], ['boxDR', [9556]], ['boxh', [9472]], ['boxH', [9552]], ['boxhd', [9516]], ['boxHd', [9572]], ['boxhD', [9573]], ['boxHD', [9574]], ['boxhu', [9524]], ['boxHu', [9575]], ['boxhU', [9576]], ['boxHU', [9577]], ['boxminus', [8863]], ['boxplus', [8862]], ['boxtimes', [8864]], ['boxul', [9496]], ['boxuL', [9563]], ['boxUl', [9564]], ['boxUL', [9565]], ['boxur', [9492]], ['boxuR', [9560]], ['boxUr', [9561]], ['boxUR', [9562]], ['boxv', [9474]], ['boxV', [9553]], ['boxvh', [9532]], ['boxvH', [9578]], ['boxVh', [9579]], ['boxVH', [9580]], ['boxvl', [9508]], ['boxvL', [9569]], ['boxVl', [9570]], ['boxVL', [9571]], ['boxvr', [9500]], ['boxvR', [9566]], ['boxVr', [9567]], ['boxVR', [9568]], ['bprime', [8245]], ['breve', [728]], ['Breve', [728]], ['brvbar', [166]], ['bscr', [119991]], ['Bscr', [8492]], ['bsemi', [8271]], ['bsim', [8765]], ['bsime', [8909]], ['bsolb', [10693]], ['bsol', [92]], ['bsolhsub', [10184]], ['bull', [8226]], ['bullet', [8226]], ['bump', [8782]], ['bumpE', [10926]], ['bumpe', [8783]], ['Bumpeq', [8782]], ['bumpeq', [8783]], ['Cacute', [262]], ['cacute', [263]], ['capand', [10820]], ['capbrcup', [10825]], ['capcap', [10827]], ['cap', [8745]], ['Cap', [8914]], ['capcup', [10823]], ['capdot', [10816]], ['CapitalDifferentialD', [8517]], ['caps', [8745, 65024]], ['caret', [8257]], ['caron', [711]], ['Cayleys', [8493]], ['ccaps', [10829]], ['Ccaron', [268]], ['ccaron', [269]], ['Ccedil', [199]], ['ccedil', [231]], ['Ccirc', [264]], ['ccirc', [265]], ['Cconint', [8752]], ['ccups', [10828]], ['ccupssm', [10832]], ['Cdot', [266]], ['cdot', [267]], ['cedil', [184]], ['Cedilla', [184]], ['cemptyv', [10674]], ['cent', [162]], ['centerdot', [183]], ['CenterDot', [183]], ['cfr', [120096]], ['Cfr', [8493]], ['CHcy', [1063]], ['chcy', [1095]], ['check', [10003]], ['checkmark', [10003]], ['Chi', [935]], ['chi', [967]], ['circ', [710]], ['circeq', [8791]], ['circlearrowleft', [8634]], ['circlearrowright', [8635]], ['circledast', [8859]], ['circledcirc', [8858]], ['circleddash', [8861]], ['CircleDot', [8857]], ['circledR', [174]], ['circledS', [9416]], ['CircleMinus', [8854]], ['CirclePlus', [8853]], ['CircleTimes', [8855]], ['cir', [9675]], ['cirE', [10691]], ['cire', [8791]], ['cirfnint', [10768]], ['cirmid', [10991]], ['cirscir', [10690]], ['ClockwiseContourIntegral', [8754]], ['clubs', [9827]], ['clubsuit', [9827]], ['colon', [58]], ['Colon', [8759]], ['Colone', [10868]], ['colone', [8788]], ['coloneq', [8788]], ['comma', [44]], ['commat', [64]], ['comp', [8705]], ['compfn', [8728]], ['complement', [8705]], ['complexes', [8450]], ['cong', [8773]], ['congdot', [10861]], ['Congruent', [8801]], ['conint', [8750]], ['Conint', [8751]], ['ContourIntegral', [8750]], ['copf', [120148]], ['Copf', [8450]], ['coprod', [8720]], ['Coproduct', [8720]], ['copy', [169]], ['COPY', [169]], ['copysr', [8471]], ['CounterClockwiseContourIntegral', [8755]], ['crarr', [8629]], ['cross', [10007]], ['Cross', [10799]], ['Cscr', [119966]], ['cscr', [119992]], ['csub', [10959]], ['csube', [10961]], ['csup', [10960]], ['csupe', [10962]], ['ctdot', [8943]], ['cudarrl', [10552]], ['cudarrr', [10549]], ['cuepr', [8926]], ['cuesc', [8927]], ['cularr', [8630]], ['cularrp', [10557]], ['cupbrcap', [10824]], ['cupcap', [10822]], ['CupCap', [8781]], ['cup', [8746]], ['Cup', [8915]], ['cupcup', [10826]], ['cupdot', [8845]], ['cupor', [10821]], ['cups', [8746, 65024]], ['curarr', [8631]], ['curarrm', [10556]], ['curlyeqprec', [8926]], ['curlyeqsucc', [8927]], ['curlyvee', [8910]], ['curlywedge', [8911]], ['curren', [164]], ['curvearrowleft', [8630]], ['curvearrowright', [8631]], ['cuvee', [8910]], ['cuwed', [8911]], ['cwconint', [8754]], ['cwint', [8753]], ['cylcty', [9005]], ['dagger', [8224]], ['Dagger', [8225]], ['daleth', [8504]], ['darr', [8595]], ['Darr', [8609]], ['dArr', [8659]], ['dash', [8208]], ['Dashv', [10980]], ['dashv', [8867]], ['dbkarow', [10511]], ['dblac', [733]], ['Dcaron', [270]], ['dcaron', [271]], ['Dcy', [1044]], ['dcy', [1076]], ['ddagger', [8225]], ['ddarr', [8650]], ['DD', [8517]], ['dd', [8518]], ['DDotrahd', [10513]], ['ddotseq', [10871]], ['deg', [176]], ['Del', [8711]], ['Delta', [916]], ['delta', [948]], ['demptyv', [10673]], ['dfisht', [10623]], ['Dfr', [120071]], ['dfr', [120097]], ['dHar', [10597]], ['dharl', [8643]], ['dharr', [8642]], ['DiacriticalAcute', [180]], ['DiacriticalDot', [729]], ['DiacriticalDoubleAcute', [733]], ['DiacriticalGrave', [96]], ['DiacriticalTilde', [732]], ['diam', [8900]], ['diamond', [8900]], ['Diamond', [8900]], ['diamondsuit', [9830]], ['diams', [9830]], ['die', [168]], ['DifferentialD', [8518]], ['digamma', [989]], ['disin', [8946]], ['div', [247]], ['divide', [247]], ['divideontimes', [8903]], ['divonx', [8903]], ['DJcy', [1026]], ['djcy', [1106]], ['dlcorn', [8990]], ['dlcrop', [8973]], ['dollar', [36]], ['Dopf', [120123]], ['dopf', [120149]], ['Dot', [168]], ['dot', [729]], ['DotDot', [8412]], ['doteq', [8784]], ['doteqdot', [8785]], ['DotEqual', [8784]], ['dotminus', [8760]], ['dotplus', [8724]], ['dotsquare', [8865]], ['doublebarwedge', [8966]], ['DoubleContourIntegral', [8751]], ['DoubleDot', [168]], ['DoubleDownArrow', [8659]], ['DoubleLeftArrow', [8656]], ['DoubleLeftRightArrow', [8660]], ['DoubleLeftTee', [10980]], ['DoubleLongLeftArrow', [10232]], ['DoubleLongLeftRightArrow', [10234]], ['DoubleLongRightArrow', [10233]], ['DoubleRightArrow', [8658]], ['DoubleRightTee', [8872]], ['DoubleUpArrow', [8657]], ['DoubleUpDownArrow', [8661]], ['DoubleVerticalBar', [8741]], ['DownArrowBar', [10515]], ['downarrow', [8595]], ['DownArrow', [8595]], ['Downarrow', [8659]], ['DownArrowUpArrow', [8693]], ['DownBreve', [785]], ['downdownarrows', [8650]], ['downharpoonleft', [8643]], ['downharpoonright', [8642]], ['DownLeftRightVector', [10576]], ['DownLeftTeeVector', [10590]], ['DownLeftVectorBar', [10582]], ['DownLeftVector', [8637]], ['DownRightTeeVector', [10591]], ['DownRightVectorBar', [10583]], ['DownRightVector', [8641]], ['DownTeeArrow', [8615]], ['DownTee', [8868]], ['drbkarow', [10512]], ['drcorn', [8991]], ['drcrop', [8972]], ['Dscr', [119967]], ['dscr', [119993]], ['DScy', [1029]], ['dscy', [1109]], ['dsol', [10742]], ['Dstrok', [272]], ['dstrok', [273]], ['dtdot', [8945]], ['dtri', [9663]], ['dtrif', [9662]], ['duarr', [8693]], ['duhar', [10607]], ['dwangle', [10662]], ['DZcy', [1039]], ['dzcy', [1119]], ['dzigrarr', [10239]], ['Eacute', [201]], ['eacute', [233]], ['easter', [10862]], ['Ecaron', [282]], ['ecaron', [283]], ['Ecirc', [202]], ['ecirc', [234]], ['ecir', [8790]], ['ecolon', [8789]], ['Ecy', [1069]], ['ecy', [1101]], ['eDDot', [10871]], ['Edot', [278]], ['edot', [279]], ['eDot', [8785]], ['ee', [8519]], ['efDot', [8786]], ['Efr', [120072]], ['efr', [120098]], ['eg', [10906]], ['Egrave', [200]], ['egrave', [232]], ['egs', [10902]], ['egsdot', [10904]], ['el', [10905]], ['Element', [8712]], ['elinters', [9191]], ['ell', [8467]], ['els', [10901]], ['elsdot', [10903]], ['Emacr', [274]], ['emacr', [275]], ['empty', [8709]], ['emptyset', [8709]], ['EmptySmallSquare', [9723]], ['emptyv', [8709]], ['EmptyVerySmallSquare', [9643]], ['emsp13', [8196]], ['emsp14', [8197]], ['emsp', [8195]], ['ENG', [330]], ['eng', [331]], ['ensp', [8194]], ['Eogon', [280]], ['eogon', [281]], ['Eopf', [120124]], ['eopf', [120150]], ['epar', [8917]], ['eparsl', [10723]], ['eplus', [10865]], ['epsi', [949]], ['Epsilon', [917]], ['epsilon', [949]], ['epsiv', [1013]], ['eqcirc', [8790]], ['eqcolon', [8789]], ['eqsim', [8770]], ['eqslantgtr', [10902]], ['eqslantless', [10901]], ['Equal', [10869]], ['equals', [61]], ['EqualTilde', [8770]], ['equest', [8799]], ['Equilibrium', [8652]], ['equiv', [8801]], ['equivDD', [10872]], ['eqvparsl', [10725]], ['erarr', [10609]], ['erDot', [8787]], ['escr', [8495]], ['Escr', [8496]], ['esdot', [8784]], ['Esim', [10867]], ['esim', [8770]], ['Eta', [919]], ['eta', [951]], ['ETH', [208]], ['eth', [240]], ['Euml', [203]], ['euml', [235]], ['euro', [8364]], ['excl', [33]], ['exist', [8707]], ['Exists', [8707]], ['expectation', [8496]], ['exponentiale', [8519]], ['ExponentialE', [8519]], ['fallingdotseq', [8786]], ['Fcy', [1060]], ['fcy', [1092]], ['female', [9792]], ['ffilig', [64259]], ['fflig', [64256]], ['ffllig', [64260]], ['Ffr', [120073]], ['ffr', [120099]], ['filig', [64257]], ['FilledSmallSquare', [9724]], ['FilledVerySmallSquare', [9642]], ['fjlig', [102, 106]], ['flat', [9837]], ['fllig', [64258]], ['fltns', [9649]], ['fnof', [402]], ['Fopf', [120125]], ['fopf', [120151]], ['forall', [8704]], ['ForAll', [8704]], ['fork', [8916]], ['forkv', [10969]], ['Fouriertrf', [8497]], ['fpartint', [10765]], ['frac12', [189]], ['frac13', [8531]], ['frac14', [188]], ['frac15', [8533]], ['frac16', [8537]], ['frac18', [8539]], ['frac23', [8532]], ['frac25', [8534]], ['frac34', [190]], ['frac35', [8535]], ['frac38', [8540]], ['frac45', [8536]], ['frac56', [8538]], ['frac58', [8541]], ['frac78', [8542]], ['frasl', [8260]], ['frown', [8994]], ['fscr', [119995]], ['Fscr', [8497]], ['gacute', [501]], ['Gamma', [915]], ['gamma', [947]], ['Gammad', [988]], ['gammad', [989]], ['gap', [10886]], ['Gbreve', [286]], ['gbreve', [287]], ['Gcedil', [290]], ['Gcirc', [284]], ['gcirc', [285]], ['Gcy', [1043]], ['gcy', [1075]], ['Gdot', [288]], ['gdot', [289]], ['ge', [8805]], ['gE', [8807]], ['gEl', [10892]], ['gel', [8923]], ['geq', [8805]], ['geqq', [8807]], ['geqslant', [10878]], ['gescc', [10921]], ['ges', [10878]], ['gesdot', [10880]], ['gesdoto', [10882]], ['gesdotol', [10884]], ['gesl', [8923, 65024]], ['gesles', [10900]], ['Gfr', [120074]], ['gfr', [120100]], ['gg', [8811]], ['Gg', [8921]], ['ggg', [8921]], ['gimel', [8503]], ['GJcy', [1027]], ['gjcy', [1107]], ['gla', [10917]], ['gl', [8823]], ['glE', [10898]], ['glj', [10916]], ['gnap', [10890]], ['gnapprox', [10890]], ['gne', [10888]], ['gnE', [8809]], ['gneq', [10888]], ['gneqq', [8809]], ['gnsim', [8935]], ['Gopf', [120126]], ['gopf', [120152]], ['grave', [96]], ['GreaterEqual', [8805]], ['GreaterEqualLess', [8923]], ['GreaterFullEqual', [8807]], ['GreaterGreater', [10914]], ['GreaterLess', [8823]], ['GreaterSlantEqual', [10878]], ['GreaterTilde', [8819]], ['Gscr', [119970]], ['gscr', [8458]], ['gsim', [8819]], ['gsime', [10894]], ['gsiml', [10896]], ['gtcc', [10919]], ['gtcir', [10874]], ['gt', [62]], ['GT', [62]], ['Gt', [8811]], ['gtdot', [8919]], ['gtlPar', [10645]], ['gtquest', [10876]], ['gtrapprox', [10886]], ['gtrarr', [10616]], ['gtrdot', [8919]], ['gtreqless', [8923]], ['gtreqqless', [10892]], ['gtrless', [8823]], ['gtrsim', [8819]], ['gvertneqq', [8809, 65024]], ['gvnE', [8809, 65024]], ['Hacek', [711]], ['hairsp', [8202]], ['half', [189]], ['hamilt', [8459]], ['HARDcy', [1066]], ['hardcy', [1098]], ['harrcir', [10568]], ['harr', [8596]], ['hArr', [8660]], ['harrw', [8621]], ['Hat', [94]], ['hbar', [8463]], ['Hcirc', [292]], ['hcirc', [293]], ['hearts', [9829]], ['heartsuit', [9829]], ['hellip', [8230]], ['hercon', [8889]], ['hfr', [120101]], ['Hfr', [8460]], ['HilbertSpace', [8459]], ['hksearow', [10533]], ['hkswarow', [10534]], ['hoarr', [8703]], ['homtht', [8763]], ['hookleftarrow', [8617]], ['hookrightarrow', [8618]], ['hopf', [120153]], ['Hopf', [8461]], ['horbar', [8213]], ['HorizontalLine', [9472]], ['hscr', [119997]], ['Hscr', [8459]], ['hslash', [8463]], ['Hstrok', [294]], ['hstrok', [295]], ['HumpDownHump', [8782]], ['HumpEqual', [8783]], ['hybull', [8259]], ['hyphen', [8208]], ['Iacute', [205]], ['iacute', [237]], ['ic', [8291]], ['Icirc', [206]], ['icirc', [238]], ['Icy', [1048]], ['icy', [1080]], ['Idot', [304]], ['IEcy', [1045]], ['iecy', [1077]], ['iexcl', [161]], ['iff', [8660]], ['ifr', [120102]], ['Ifr', [8465]], ['Igrave', [204]], ['igrave', [236]], ['ii', [8520]], ['iiiint', [10764]], ['iiint', [8749]], ['iinfin', [10716]], ['iiota', [8489]], ['IJlig', [306]], ['ijlig', [307]], ['Imacr', [298]], ['imacr', [299]], ['image', [8465]], ['ImaginaryI', [8520]], ['imagline', [8464]], ['imagpart', [8465]], ['imath', [305]], ['Im', [8465]], ['imof', [8887]], ['imped', [437]], ['Implies', [8658]], ['incare', [8453]], ['in', [8712]], ['infin', [8734]], ['infintie', [10717]], ['inodot', [305]], ['intcal', [8890]], ['int', [8747]], ['Int', [8748]], ['integers', [8484]], ['Integral', [8747]], ['intercal', [8890]], ['Intersection', [8898]], ['intlarhk', [10775]], ['intprod', [10812]], ['InvisibleComma', [8291]], ['InvisibleTimes', [8290]], ['IOcy', [1025]], ['iocy', [1105]], ['Iogon', [302]], ['iogon', [303]], ['Iopf', [120128]], ['iopf', [120154]], ['Iota', [921]], ['iota', [953]], ['iprod', [10812]], ['iquest', [191]], ['iscr', [119998]], ['Iscr', [8464]], ['isin', [8712]], ['isindot', [8949]], ['isinE', [8953]], ['isins', [8948]], ['isinsv', [8947]], ['isinv', [8712]], ['it', [8290]], ['Itilde', [296]], ['itilde', [297]], ['Iukcy', [1030]], ['iukcy', [1110]], ['Iuml', [207]], ['iuml', [239]], ['Jcirc', [308]], ['jcirc', [309]], ['Jcy', [1049]], ['jcy', [1081]], ['Jfr', [120077]], ['jfr', [120103]], ['jmath', [567]], ['Jopf', [120129]], ['jopf', [120155]], ['Jscr', [119973]], ['jscr', [119999]], ['Jsercy', [1032]], ['jsercy', [1112]], ['Jukcy', [1028]], ['jukcy', [1108]], ['Kappa', [922]], ['kappa', [954]], ['kappav', [1008]], ['Kcedil', [310]], ['kcedil', [311]], ['Kcy', [1050]], ['kcy', [1082]], ['Kfr', [120078]], ['kfr', [120104]], ['kgreen', [312]], ['KHcy', [1061]], ['khcy', [1093]], ['KJcy', [1036]], ['kjcy', [1116]], ['Kopf', [120130]], ['kopf', [120156]], ['Kscr', [119974]], ['kscr', [120000]], ['lAarr', [8666]], ['Lacute', [313]], ['lacute', [314]], ['laemptyv', [10676]], ['lagran', [8466]], ['Lambda', [923]], ['lambda', [955]], ['lang', [10216]], ['Lang', [10218]], ['langd', [10641]], ['langle', [10216]], ['lap', [10885]], ['Laplacetrf', [8466]], ['laquo', [171]], ['larrb', [8676]], ['larrbfs', [10527]], ['larr', [8592]], ['Larr', [8606]], ['lArr', [8656]], ['larrfs', [10525]], ['larrhk', [8617]], ['larrlp', [8619]], ['larrpl', [10553]], ['larrsim', [10611]], ['larrtl', [8610]], ['latail', [10521]], ['lAtail', [10523]], ['lat', [10923]], ['late', [10925]], ['lates', [10925, 65024]], ['lbarr', [10508]], ['lBarr', [10510]], ['lbbrk', [10098]], ['lbrace', [123]], ['lbrack', [91]], ['lbrke', [10635]], ['lbrksld', [10639]], ['lbrkslu', [10637]], ['Lcaron', [317]], ['lcaron', [318]], ['Lcedil', [315]], ['lcedil', [316]], ['lceil', [8968]], ['lcub', [123]], ['Lcy', [1051]], ['lcy', [1083]], ['ldca', [10550]], ['ldquo', [8220]], ['ldquor', [8222]], ['ldrdhar', [10599]], ['ldrushar', [10571]], ['ldsh', [8626]], ['le', [8804]], ['lE', [8806]], ['LeftAngleBracket', [10216]], ['LeftArrowBar', [8676]], ['leftarrow', [8592]], ['LeftArrow', [8592]], ['Leftarrow', [8656]], ['LeftArrowRightArrow', [8646]], ['leftarrowtail', [8610]], ['LeftCeiling', [8968]], ['LeftDoubleBracket', [10214]], ['LeftDownTeeVector', [10593]], ['LeftDownVectorBar', [10585]], ['LeftDownVector', [8643]], ['LeftFloor', [8970]], ['leftharpoondown', [8637]], ['leftharpoonup', [8636]], ['leftleftarrows', [8647]], ['leftrightarrow', [8596]], ['LeftRightArrow', [8596]], ['Leftrightarrow', [8660]], ['leftrightarrows', [8646]], ['leftrightharpoons', [8651]], ['leftrightsquigarrow', [8621]], ['LeftRightVector', [10574]], ['LeftTeeArrow', [8612]], ['LeftTee', [8867]], ['LeftTeeVector', [10586]], ['leftthreetimes', [8907]], ['LeftTriangleBar', [10703]], ['LeftTriangle', [8882]], ['LeftTriangleEqual', [8884]], ['LeftUpDownVector', [10577]], ['LeftUpTeeVector', [10592]], ['LeftUpVectorBar', [10584]], ['LeftUpVector', [8639]], ['LeftVectorBar', [10578]], ['LeftVector', [8636]], ['lEg', [10891]], ['leg', [8922]], ['leq', [8804]], ['leqq', [8806]], ['leqslant', [10877]], ['lescc', [10920]], ['les', [10877]], ['lesdot', [10879]], ['lesdoto', [10881]], ['lesdotor', [10883]], ['lesg', [8922, 65024]], ['lesges', [10899]], ['lessapprox', [10885]], ['lessdot', [8918]], ['lesseqgtr', [8922]], ['lesseqqgtr', [10891]], ['LessEqualGreater', [8922]], ['LessFullEqual', [8806]], ['LessGreater', [8822]], ['lessgtr', [8822]], ['LessLess', [10913]], ['lesssim', [8818]], ['LessSlantEqual', [10877]], ['LessTilde', [8818]], ['lfisht', [10620]], ['lfloor', [8970]], ['Lfr', [120079]], ['lfr', [120105]], ['lg', [8822]], ['lgE', [10897]], ['lHar', [10594]], ['lhard', [8637]], ['lharu', [8636]], ['lharul', [10602]], ['lhblk', [9604]], ['LJcy', [1033]], ['ljcy', [1113]], ['llarr', [8647]], ['ll', [8810]], ['Ll', [8920]], ['llcorner', [8990]], ['Lleftarrow', [8666]], ['llhard', [10603]], ['lltri', [9722]], ['Lmidot', [319]], ['lmidot', [320]], ['lmoustache', [9136]], ['lmoust', [9136]], ['lnap', [10889]], ['lnapprox', [10889]], ['lne', [10887]], ['lnE', [8808]], ['lneq', [10887]], ['lneqq', [8808]], ['lnsim', [8934]], ['loang', [10220]], ['loarr', [8701]], ['lobrk', [10214]], ['longleftarrow', [10229]], ['LongLeftArrow', [10229]], ['Longleftarrow', [10232]], ['longleftrightarrow', [10231]], ['LongLeftRightArrow', [10231]], ['Longleftrightarrow', [10234]], ['longmapsto', [10236]], ['longrightarrow', [10230]], ['LongRightArrow', [10230]], ['Longrightarrow', [10233]], ['looparrowleft', [8619]], ['looparrowright', [8620]], ['lopar', [10629]], ['Lopf', [120131]], ['lopf', [120157]], ['loplus', [10797]], ['lotimes', [10804]], ['lowast', [8727]], ['lowbar', [95]], ['LowerLeftArrow', [8601]], ['LowerRightArrow', [8600]], ['loz', [9674]], ['lozenge', [9674]], ['lozf', [10731]], ['lpar', [40]], ['lparlt', [10643]], ['lrarr', [8646]], ['lrcorner', [8991]], ['lrhar', [8651]], ['lrhard', [10605]], ['lrm', [8206]], ['lrtri', [8895]], ['lsaquo', [8249]], ['lscr', [120001]], ['Lscr', [8466]], ['lsh', [8624]], ['Lsh', [8624]], ['lsim', [8818]], ['lsime', [10893]], ['lsimg', [10895]], ['lsqb', [91]], ['lsquo', [8216]], ['lsquor', [8218]], ['Lstrok', [321]], ['lstrok', [322]], ['ltcc', [10918]], ['ltcir', [10873]], ['lt', [60]], ['LT', [60]], ['Lt', [8810]], ['ltdot', [8918]], ['lthree', [8907]], ['ltimes', [8905]], ['ltlarr', [10614]], ['ltquest', [10875]], ['ltri', [9667]], ['ltrie', [8884]], ['ltrif', [9666]], ['ltrPar', [10646]], ['lurdshar', [10570]], ['luruhar', [10598]], ['lvertneqq', [8808, 65024]], ['lvnE', [8808, 65024]], ['macr', [175]], ['male', [9794]], ['malt', [10016]], ['maltese', [10016]], ['Map', [10501]], ['map', [8614]], ['mapsto', [8614]], ['mapstodown', [8615]], ['mapstoleft', [8612]], ['mapstoup', [8613]], ['marker', [9646]], ['mcomma', [10793]], ['Mcy', [1052]], ['mcy', [1084]], ['mdash', [8212]], ['mDDot', [8762]], ['measuredangle', [8737]], ['MediumSpace', [8287]], ['Mellintrf', [8499]], ['Mfr', [120080]], ['mfr', [120106]], ['mho', [8487]], ['micro', [181]], ['midast', [42]], ['midcir', [10992]], ['mid', [8739]], ['middot', [183]], ['minusb', [8863]], ['minus', [8722]], ['minusd', [8760]], ['minusdu', [10794]], ['MinusPlus', [8723]], ['mlcp', [10971]], ['mldr', [8230]], ['mnplus', [8723]], ['models', [8871]], ['Mopf', [120132]], ['mopf', [120158]], ['mp', [8723]], ['mscr', [120002]], ['Mscr', [8499]], ['mstpos', [8766]], ['Mu', [924]], ['mu', [956]], ['multimap', [8888]], ['mumap', [8888]], ['nabla', [8711]], ['Nacute', [323]], ['nacute', [324]], ['nang', [8736, 8402]], ['nap', [8777]], ['napE', [10864, 824]], ['napid', [8779, 824]], ['napos', [329]], ['napprox', [8777]], ['natural', [9838]], ['naturals', [8469]], ['natur', [9838]], ['nbsp', [160]], ['nbump', [8782, 824]], ['nbumpe', [8783, 824]], ['ncap', [10819]], ['Ncaron', [327]], ['ncaron', [328]], ['Ncedil', [325]], ['ncedil', [326]], ['ncong', [8775]], ['ncongdot', [10861, 824]], ['ncup', [10818]], ['Ncy', [1053]], ['ncy', [1085]], ['ndash', [8211]], ['nearhk', [10532]], ['nearr', [8599]], ['neArr', [8663]], ['nearrow', [8599]], ['ne', [8800]], ['nedot', [8784, 824]], ['NegativeMediumSpace', [8203]], ['NegativeThickSpace', [8203]], ['NegativeThinSpace', [8203]], ['NegativeVeryThinSpace', [8203]], ['nequiv', [8802]], ['nesear', [10536]], ['nesim', [8770, 824]], ['NestedGreaterGreater', [8811]], ['NestedLessLess', [8810]], ['nexist', [8708]], ['nexists', [8708]], ['Nfr', [120081]], ['nfr', [120107]], ['ngE', [8807, 824]], ['nge', [8817]], ['ngeq', [8817]], ['ngeqq', [8807, 824]], ['ngeqslant', [10878, 824]], ['nges', [10878, 824]], ['nGg', [8921, 824]], ['ngsim', [8821]], ['nGt', [8811, 8402]], ['ngt', [8815]], ['ngtr', [8815]], ['nGtv', [8811, 824]], ['nharr', [8622]], ['nhArr', [8654]], ['nhpar', [10994]], ['ni', [8715]], ['nis', [8956]], ['nisd', [8954]], ['niv', [8715]], ['NJcy', [1034]], ['njcy', [1114]], ['nlarr', [8602]], ['nlArr', [8653]], ['nldr', [8229]], ['nlE', [8806, 824]], ['nle', [8816]], ['nleftarrow', [8602]], ['nLeftarrow', [8653]], ['nleftrightarrow', [8622]], ['nLeftrightarrow', [8654]], ['nleq', [8816]], ['nleqq', [8806, 824]], ['nleqslant', [10877, 824]], ['nles', [10877, 824]], ['nless', [8814]], ['nLl', [8920, 824]], ['nlsim', [8820]], ['nLt', [8810, 8402]], ['nlt', [8814]], ['nltri', [8938]], ['nltrie', [8940]], ['nLtv', [8810, 824]], ['nmid', [8740]], ['NoBreak', [8288]], ['NonBreakingSpace', [160]], ['nopf', [120159]], ['Nopf', [8469]], ['Not', [10988]], ['not', [172]], ['NotCongruent', [8802]], ['NotCupCap', [8813]], ['NotDoubleVerticalBar', [8742]], ['NotElement', [8713]], ['NotEqual', [8800]], ['NotEqualTilde', [8770, 824]], ['NotExists', [8708]], ['NotGreater', [8815]], ['NotGreaterEqual', [8817]], ['NotGreaterFullEqual', [8807, 824]], ['NotGreaterGreater', [8811, 824]], ['NotGreaterLess', [8825]], ['NotGreaterSlantEqual', [10878, 824]], ['NotGreaterTilde', [8821]], ['NotHumpDownHump', [8782, 824]], ['NotHumpEqual', [8783, 824]], ['notin', [8713]], ['notindot', [8949, 824]], ['notinE', [8953, 824]], ['notinva', [8713]], ['notinvb', [8951]], ['notinvc', [8950]], ['NotLeftTriangleBar', [10703, 824]], ['NotLeftTriangle', [8938]], ['NotLeftTriangleEqual', [8940]], ['NotLess', [8814]], ['NotLessEqual', [8816]], ['NotLessGreater', [8824]], ['NotLessLess', [8810, 824]], ['NotLessSlantEqual', [10877, 824]], ['NotLessTilde', [8820]], ['NotNestedGreaterGreater', [10914, 824]], ['NotNestedLessLess', [10913, 824]], ['notni', [8716]], ['notniva', [8716]], ['notnivb', [8958]], ['notnivc', [8957]], ['NotPrecedes', [8832]], ['NotPrecedesEqual', [10927, 824]], ['NotPrecedesSlantEqual', [8928]], ['NotReverseElement', [8716]], ['NotRightTriangleBar', [10704, 824]], ['NotRightTriangle', [8939]], ['NotRightTriangleEqual', [8941]], ['NotSquareSubset', [8847, 824]], ['NotSquareSubsetEqual', [8930]], ['NotSquareSuperset', [8848, 824]], ['NotSquareSupersetEqual', [8931]], ['NotSubset', [8834, 8402]], ['NotSubsetEqual', [8840]], ['NotSucceeds', [8833]], ['NotSucceedsEqual', [10928, 824]], ['NotSucceedsSlantEqual', [8929]], ['NotSucceedsTilde', [8831, 824]], ['NotSuperset', [8835, 8402]], ['NotSupersetEqual', [8841]], ['NotTilde', [8769]], ['NotTildeEqual', [8772]], ['NotTildeFullEqual', [8775]], ['NotTildeTilde', [8777]], ['NotVerticalBar', [8740]], ['nparallel', [8742]], ['npar', [8742]], ['nparsl', [11005, 8421]], ['npart', [8706, 824]], ['npolint', [10772]], ['npr', [8832]], ['nprcue', [8928]], ['nprec', [8832]], ['npreceq', [10927, 824]], ['npre', [10927, 824]], ['nrarrc', [10547, 824]], ['nrarr', [8603]], ['nrArr', [8655]], ['nrarrw', [8605, 824]], ['nrightarrow', [8603]], ['nRightarrow', [8655]], ['nrtri', [8939]], ['nrtrie', [8941]], ['nsc', [8833]], ['nsccue', [8929]], ['nsce', [10928, 824]], ['Nscr', [119977]], ['nscr', [120003]], ['nshortmid', [8740]], ['nshortparallel', [8742]], ['nsim', [8769]], ['nsime', [8772]], ['nsimeq', [8772]], ['nsmid', [8740]], ['nspar', [8742]], ['nsqsube', [8930]], ['nsqsupe', [8931]], ['nsub', [8836]], ['nsubE', [10949, 824]], ['nsube', [8840]], ['nsubset', [8834, 8402]], ['nsubseteq', [8840]], ['nsubseteqq', [10949, 824]], ['nsucc', [8833]], ['nsucceq', [10928, 824]], ['nsup', [8837]], ['nsupE', [10950, 824]], ['nsupe', [8841]], ['nsupset', [8835, 8402]], ['nsupseteq', [8841]], ['nsupseteqq', [10950, 824]], ['ntgl', [8825]], ['Ntilde', [209]], ['ntilde', [241]], ['ntlg', [8824]], ['ntriangleleft', [8938]], ['ntrianglelefteq', [8940]], ['ntriangleright', [8939]], ['ntrianglerighteq', [8941]], ['Nu', [925]], ['nu', [957]], ['num', [35]], ['numero', [8470]], ['numsp', [8199]], ['nvap', [8781, 8402]], ['nvdash', [8876]], ['nvDash', [8877]], ['nVdash', [8878]], ['nVDash', [8879]], ['nvge', [8805, 8402]], ['nvgt', [62, 8402]], ['nvHarr', [10500]], ['nvinfin', [10718]], ['nvlArr', [10498]], ['nvle', [8804, 8402]], ['nvlt', [60, 8402]], ['nvltrie', [8884, 8402]], ['nvrArr', [10499]], ['nvrtrie', [8885, 8402]], ['nvsim', [8764, 8402]], ['nwarhk', [10531]], ['nwarr', [8598]], ['nwArr', [8662]], ['nwarrow', [8598]], ['nwnear', [10535]], ['Oacute', [211]], ['oacute', [243]], ['oast', [8859]], ['Ocirc', [212]], ['ocirc', [244]], ['ocir', [8858]], ['Ocy', [1054]], ['ocy', [1086]], ['odash', [8861]], ['Odblac', [336]], ['odblac', [337]], ['odiv', [10808]], ['odot', [8857]], ['odsold', [10684]], ['OElig', [338]], ['oelig', [339]], ['ofcir', [10687]], ['Ofr', [120082]], ['ofr', [120108]], ['ogon', [731]], ['Ograve', [210]], ['ograve', [242]], ['ogt', [10689]], ['ohbar', [10677]], ['ohm', [937]], ['oint', [8750]], ['olarr', [8634]], ['olcir', [10686]], ['olcross', [10683]], ['oline', [8254]], ['olt', [10688]], ['Omacr', [332]], ['omacr', [333]], ['Omega', [937]], ['omega', [969]], ['Omicron', [927]], ['omicron', [959]], ['omid', [10678]], ['ominus', [8854]], ['Oopf', [120134]], ['oopf', [120160]], ['opar', [10679]], ['OpenCurlyDoubleQuote', [8220]], ['OpenCurlyQuote', [8216]], ['operp', [10681]], ['oplus', [8853]], ['orarr', [8635]], ['Or', [10836]], ['or', [8744]], ['ord', [10845]], ['order', [8500]], ['orderof', [8500]], ['ordf', [170]], ['ordm', [186]], ['origof', [8886]], ['oror', [10838]], ['orslope', [10839]], ['orv', [10843]], ['oS', [9416]], ['Oscr', [119978]], ['oscr', [8500]], ['Oslash', [216]], ['oslash', [248]], ['osol', [8856]], ['Otilde', [213]], ['otilde', [245]], ['otimesas', [10806]], ['Otimes', [10807]], ['otimes', [8855]], ['Ouml', [214]], ['ouml', [246]], ['ovbar', [9021]], ['OverBar', [8254]], ['OverBrace', [9182]], ['OverBracket', [9140]], ['OverParenthesis', [9180]], ['para', [182]], ['parallel', [8741]], ['par', [8741]], ['parsim', [10995]], ['parsl', [11005]], ['part', [8706]], ['PartialD', [8706]], ['Pcy', [1055]], ['pcy', [1087]], ['percnt', [37]], ['period', [46]], ['permil', [8240]], ['perp', [8869]], ['pertenk', [8241]], ['Pfr', [120083]], ['pfr', [120109]], ['Phi', [934]], ['phi', [966]], ['phiv', [981]], ['phmmat', [8499]], ['phone', [9742]], ['Pi', [928]], ['pi', [960]], ['pitchfork', [8916]], ['piv', [982]], ['planck', [8463]], ['planckh', [8462]], ['plankv', [8463]], ['plusacir', [10787]], ['plusb', [8862]], ['pluscir', [10786]], ['plus', [43]], ['plusdo', [8724]], ['plusdu', [10789]], ['pluse', [10866]], ['PlusMinus', [177]], ['plusmn', [177]], ['plussim', [10790]], ['plustwo', [10791]], ['pm', [177]], ['Poincareplane', [8460]], ['pointint', [10773]], ['popf', [120161]], ['Popf', [8473]], ['pound', [163]], ['prap', [10935]], ['Pr', [10939]], ['pr', [8826]], ['prcue', [8828]], ['precapprox', [10935]], ['prec', [8826]], ['preccurlyeq', [8828]], ['Precedes', [8826]], ['PrecedesEqual', [10927]], ['PrecedesSlantEqual', [8828]], ['PrecedesTilde', [8830]], ['preceq', [10927]], ['precnapprox', [10937]], ['precneqq', [10933]], ['precnsim', [8936]], ['pre', [10927]], ['prE', [10931]], ['precsim', [8830]], ['prime', [8242]], ['Prime', [8243]], ['primes', [8473]], ['prnap', [10937]], ['prnE', [10933]], ['prnsim', [8936]], ['prod', [8719]], ['Product', [8719]], ['profalar', [9006]], ['profline', [8978]], ['profsurf', [8979]], ['prop', [8733]], ['Proportional', [8733]], ['Proportion', [8759]], ['propto', [8733]], ['prsim', [8830]], ['prurel', [8880]], ['Pscr', [119979]], ['pscr', [120005]], ['Psi', [936]], ['psi', [968]], ['puncsp', [8200]], ['Qfr', [120084]], ['qfr', [120110]], ['qint', [10764]], ['qopf', [120162]], ['Qopf', [8474]], ['qprime', [8279]], ['Qscr', [119980]], ['qscr', [120006]], ['quaternions', [8461]], ['quatint', [10774]], ['quest', [63]], ['questeq', [8799]], ['quot', [34]], ['QUOT', [34]], ['rAarr', [8667]], ['race', [8765, 817]], ['Racute', [340]], ['racute', [341]], ['radic', [8730]], ['raemptyv', [10675]], ['rang', [10217]], ['Rang', [10219]], ['rangd', [10642]], ['range', [10661]], ['rangle', [10217]], ['raquo', [187]], ['rarrap', [10613]], ['rarrb', [8677]], ['rarrbfs', [10528]], ['rarrc', [10547]], ['rarr', [8594]], ['Rarr', [8608]], ['rArr', [8658]], ['rarrfs', [10526]], ['rarrhk', [8618]], ['rarrlp', [8620]], ['rarrpl', [10565]], ['rarrsim', [10612]], ['Rarrtl', [10518]], ['rarrtl', [8611]], ['rarrw', [8605]], ['ratail', [10522]], ['rAtail', [10524]], ['ratio', [8758]], ['rationals', [8474]], ['rbarr', [10509]], ['rBarr', [10511]], ['RBarr', [10512]], ['rbbrk', [10099]], ['rbrace', [125]], ['rbrack', [93]], ['rbrke', [10636]], ['rbrksld', [10638]], ['rbrkslu', [10640]], ['Rcaron', [344]], ['rcaron', [345]], ['Rcedil', [342]], ['rcedil', [343]], ['rceil', [8969]], ['rcub', [125]], ['Rcy', [1056]], ['rcy', [1088]], ['rdca', [10551]], ['rdldhar', [10601]], ['rdquo', [8221]], ['rdquor', [8221]], ['CloseCurlyDoubleQuote', [8221]], ['rdsh', [8627]], ['real', [8476]], ['realine', [8475]], ['realpart', [8476]], ['reals', [8477]], ['Re', [8476]], ['rect', [9645]], ['reg', [174]], ['REG', [174]], ['ReverseElement', [8715]], ['ReverseEquilibrium', [8651]], ['ReverseUpEquilibrium', [10607]], ['rfisht', [10621]], ['rfloor', [8971]], ['rfr', [120111]], ['Rfr', [8476]], ['rHar', [10596]], ['rhard', [8641]], ['rharu', [8640]], ['rharul', [10604]], ['Rho', [929]], ['rho', [961]], ['rhov', [1009]], ['RightAngleBracket', [10217]], ['RightArrowBar', [8677]], ['rightarrow', [8594]], ['RightArrow', [8594]], ['Rightarrow', [8658]], ['RightArrowLeftArrow', [8644]], ['rightarrowtail', [8611]], ['RightCeiling', [8969]], ['RightDoubleBracket', [10215]], ['RightDownTeeVector', [10589]], ['RightDownVectorBar', [10581]], ['RightDownVector', [8642]], ['RightFloor', [8971]], ['rightharpoondown', [8641]], ['rightharpoonup', [8640]], ['rightleftarrows', [8644]], ['rightleftharpoons', [8652]], ['rightrightarrows', [8649]], ['rightsquigarrow', [8605]], ['RightTeeArrow', [8614]], ['RightTee', [8866]], ['RightTeeVector', [10587]], ['rightthreetimes', [8908]], ['RightTriangleBar', [10704]], ['RightTriangle', [8883]], ['RightTriangleEqual', [8885]], ['RightUpDownVector', [10575]], ['RightUpTeeVector', [10588]], ['RightUpVectorBar', [10580]], ['RightUpVector', [8638]], ['RightVectorBar', [10579]], ['RightVector', [8640]], ['ring', [730]], ['risingdotseq', [8787]], ['rlarr', [8644]], ['rlhar', [8652]], ['rlm', [8207]], ['rmoustache', [9137]], ['rmoust', [9137]], ['rnmid', [10990]], ['roang', [10221]], ['roarr', [8702]], ['robrk', [10215]], ['ropar', [10630]], ['ropf', [120163]], ['Ropf', [8477]], ['roplus', [10798]], ['rotimes', [10805]], ['RoundImplies', [10608]], ['rpar', [41]], ['rpargt', [10644]], ['rppolint', [10770]], ['rrarr', [8649]], ['Rrightarrow', [8667]], ['rsaquo', [8250]], ['rscr', [120007]], ['Rscr', [8475]], ['rsh', [8625]], ['Rsh', [8625]], ['rsqb', [93]], ['rsquo', [8217]], ['rsquor', [8217]], ['CloseCurlyQuote', [8217]], ['rthree', [8908]], ['rtimes', [8906]], ['rtri', [9657]], ['rtrie', [8885]], ['rtrif', [9656]], ['rtriltri', [10702]], ['RuleDelayed', [10740]], ['ruluhar', [10600]], ['rx', [8478]], ['Sacute', [346]], ['sacute', [347]], ['sbquo', [8218]], ['scap', [10936]], ['Scaron', [352]], ['scaron', [353]], ['Sc', [10940]], ['sc', [8827]], ['sccue', [8829]], ['sce', [10928]], ['scE', [10932]], ['Scedil', [350]], ['scedil', [351]], ['Scirc', [348]], ['scirc', [349]], ['scnap', [10938]], ['scnE', [10934]], ['scnsim', [8937]], ['scpolint', [10771]], ['scsim', [8831]], ['Scy', [1057]], ['scy', [1089]], ['sdotb', [8865]], ['sdot', [8901]], ['sdote', [10854]], ['searhk', [10533]], ['searr', [8600]], ['seArr', [8664]], ['searrow', [8600]], ['sect', [167]], ['semi', [59]], ['seswar', [10537]], ['setminus', [8726]], ['setmn', [8726]], ['sext', [10038]], ['Sfr', [120086]], ['sfr', [120112]], ['sfrown', [8994]], ['sharp', [9839]], ['SHCHcy', [1065]], ['shchcy', [1097]], ['SHcy', [1064]], ['shcy', [1096]], ['ShortDownArrow', [8595]], ['ShortLeftArrow', [8592]], ['shortmid', [8739]], ['shortparallel', [8741]], ['ShortRightArrow', [8594]], ['ShortUpArrow', [8593]], ['shy', [173]], ['Sigma', [931]], ['sigma', [963]], ['sigmaf', [962]], ['sigmav', [962]], ['sim', [8764]], ['simdot', [10858]], ['sime', [8771]], ['simeq', [8771]], ['simg', [10910]], ['simgE', [10912]], ['siml', [10909]], ['simlE', [10911]], ['simne', [8774]], ['simplus', [10788]], ['simrarr', [10610]], ['slarr', [8592]], ['SmallCircle', [8728]], ['smallsetminus', [8726]], ['smashp', [10803]], ['smeparsl', [10724]], ['smid', [8739]], ['smile', [8995]], ['smt', [10922]], ['smte', [10924]], ['smtes', [10924, 65024]], ['SOFTcy', [1068]], ['softcy', [1100]], ['solbar', [9023]], ['solb', [10692]], ['sol', [47]], ['Sopf', [120138]], ['sopf', [120164]], ['spades', [9824]], ['spadesuit', [9824]], ['spar', [8741]], ['sqcap', [8851]], ['sqcaps', [8851, 65024]], ['sqcup', [8852]], ['sqcups', [8852, 65024]], ['Sqrt', [8730]], ['sqsub', [8847]], ['sqsube', [8849]], ['sqsubset', [8847]], ['sqsubseteq', [8849]], ['sqsup', [8848]], ['sqsupe', [8850]], ['sqsupset', [8848]], ['sqsupseteq', [8850]], ['square', [9633]], ['Square', [9633]], ['SquareIntersection', [8851]], ['SquareSubset', [8847]], ['SquareSubsetEqual', [8849]], ['SquareSuperset', [8848]], ['SquareSupersetEqual', [8850]], ['SquareUnion', [8852]], ['squarf', [9642]], ['squ', [9633]], ['squf', [9642]], ['srarr', [8594]], ['Sscr', [119982]], ['sscr', [120008]], ['ssetmn', [8726]], ['ssmile', [8995]], ['sstarf', [8902]], ['Star', [8902]], ['star', [9734]], ['starf', [9733]], ['straightepsilon', [1013]], ['straightphi', [981]], ['strns', [175]], ['sub', [8834]], ['Sub', [8912]], ['subdot', [10941]], ['subE', [10949]], ['sube', [8838]], ['subedot', [10947]], ['submult', [10945]], ['subnE', [10955]], ['subne', [8842]], ['subplus', [10943]], ['subrarr', [10617]], ['subset', [8834]], ['Subset', [8912]], ['subseteq', [8838]], ['subseteqq', [10949]], ['SubsetEqual', [8838]], ['subsetneq', [8842]], ['subsetneqq', [10955]], ['subsim', [10951]], ['subsub', [10965]], ['subsup', [10963]], ['succapprox', [10936]], ['succ', [8827]], ['succcurlyeq', [8829]], ['Succeeds', [8827]], ['SucceedsEqual', [10928]], ['SucceedsSlantEqual', [8829]], ['SucceedsTilde', [8831]], ['succeq', [10928]], ['succnapprox', [10938]], ['succneqq', [10934]], ['succnsim', [8937]], ['succsim', [8831]], ['SuchThat', [8715]], ['sum', [8721]], ['Sum', [8721]], ['sung', [9834]], ['sup1', [185]], ['sup2', [178]], ['sup3', [179]], ['sup', [8835]], ['Sup', [8913]], ['supdot', [10942]], ['supdsub', [10968]], ['supE', [10950]], ['supe', [8839]], ['supedot', [10948]], ['Superset', [8835]], ['SupersetEqual', [8839]], ['suphsol', [10185]], ['suphsub', [10967]], ['suplarr', [10619]], ['supmult', [10946]], ['supnE', [10956]], ['supne', [8843]], ['supplus', [10944]], ['supset', [8835]], ['Supset', [8913]], ['supseteq', [8839]], ['supseteqq', [10950]], ['supsetneq', [8843]], ['supsetneqq', [10956]], ['supsim', [10952]], ['supsub', [10964]], ['supsup', [10966]], ['swarhk', [10534]], ['swarr', [8601]], ['swArr', [8665]], ['swarrow', [8601]], ['swnwar', [10538]], ['szlig', [223]], ['Tab', [9]], ['target', [8982]], ['Tau', [932]], ['tau', [964]], ['tbrk', [9140]], ['Tcaron', [356]], ['tcaron', [357]], ['Tcedil', [354]], ['tcedil', [355]], ['Tcy', [1058]], ['tcy', [1090]], ['tdot', [8411]], ['telrec', [8981]], ['Tfr', [120087]], ['tfr', [120113]], ['there4', [8756]], ['therefore', [8756]], ['Therefore', [8756]], ['Theta', [920]], ['theta', [952]], ['thetasym', [977]], ['thetav', [977]], ['thickapprox', [8776]], ['thicksim', [8764]], ['ThickSpace', [8287, 8202]], ['ThinSpace', [8201]], ['thinsp', [8201]], ['thkap', [8776]], ['thksim', [8764]], ['THORN', [222]], ['thorn', [254]], ['tilde', [732]], ['Tilde', [8764]], ['TildeEqual', [8771]], ['TildeFullEqual', [8773]], ['TildeTilde', [8776]], ['timesbar', [10801]], ['timesb', [8864]], ['times', [215]], ['timesd', [10800]], ['tint', [8749]], ['toea', [10536]], ['topbot', [9014]], ['topcir', [10993]], ['top', [8868]], ['Topf', [120139]], ['topf', [120165]], ['topfork', [10970]], ['tosa', [10537]], ['tprime', [8244]], ['trade', [8482]], ['TRADE', [8482]], ['triangle', [9653]], ['triangledown', [9663]], ['triangleleft', [9667]], ['trianglelefteq', [8884]], ['triangleq', [8796]], ['triangleright', [9657]], ['trianglerighteq', [8885]], ['tridot', [9708]], ['trie', [8796]], ['triminus', [10810]], ['TripleDot', [8411]], ['triplus', [10809]], ['trisb', [10701]], ['tritime', [10811]], ['trpezium', [9186]], ['Tscr', [119983]], ['tscr', [120009]], ['TScy', [1062]], ['tscy', [1094]], ['TSHcy', [1035]], ['tshcy', [1115]], ['Tstrok', [358]], ['tstrok', [359]], ['twixt', [8812]], ['twoheadleftarrow', [8606]], ['twoheadrightarrow', [8608]], ['Uacute', [218]], ['uacute', [250]], ['uarr', [8593]], ['Uarr', [8607]], ['uArr', [8657]], ['Uarrocir', [10569]], ['Ubrcy', [1038]], ['ubrcy', [1118]], ['Ubreve', [364]], ['ubreve', [365]], ['Ucirc', [219]], ['ucirc', [251]], ['Ucy', [1059]], ['ucy', [1091]], ['udarr', [8645]], ['Udblac', [368]], ['udblac', [369]], ['udhar', [10606]], ['ufisht', [10622]], ['Ufr', [120088]], ['ufr', [120114]], ['Ugrave', [217]], ['ugrave', [249]], ['uHar', [10595]], ['uharl', [8639]], ['uharr', [8638]], ['uhblk', [9600]], ['ulcorn', [8988]], ['ulcorner', [8988]], ['ulcrop', [8975]], ['ultri', [9720]], ['Umacr', [362]], ['umacr', [363]], ['uml', [168]], ['UnderBar', [95]], ['UnderBrace', [9183]], ['UnderBracket', [9141]], ['UnderParenthesis', [9181]], ['Union', [8899]], ['UnionPlus', [8846]], ['Uogon', [370]], ['uogon', [371]], ['Uopf', [120140]], ['uopf', [120166]], ['UpArrowBar', [10514]], ['uparrow', [8593]], ['UpArrow', [8593]], ['Uparrow', [8657]], ['UpArrowDownArrow', [8645]], ['updownarrow', [8597]], ['UpDownArrow', [8597]], ['Updownarrow', [8661]], ['UpEquilibrium', [10606]], ['upharpoonleft', [8639]], ['upharpoonright', [8638]], ['uplus', [8846]], ['UpperLeftArrow', [8598]], ['UpperRightArrow', [8599]], ['upsi', [965]], ['Upsi', [978]], ['upsih', [978]], ['Upsilon', [933]], ['upsilon', [965]], ['UpTeeArrow', [8613]], ['UpTee', [8869]], ['upuparrows', [8648]], ['urcorn', [8989]], ['urcorner', [8989]], ['urcrop', [8974]], ['Uring', [366]], ['uring', [367]], ['urtri', [9721]], ['Uscr', [119984]], ['uscr', [120010]], ['utdot', [8944]], ['Utilde', [360]], ['utilde', [361]], ['utri', [9653]], ['utrif', [9652]], ['uuarr', [8648]], ['Uuml', [220]], ['uuml', [252]], ['uwangle', [10663]], ['vangrt', [10652]], ['varepsilon', [1013]], ['varkappa', [1008]], ['varnothing', [8709]], ['varphi', [981]], ['varpi', [982]], ['varpropto', [8733]], ['varr', [8597]], ['vArr', [8661]], ['varrho', [1009]], ['varsigma', [962]], ['varsubsetneq', [8842, 65024]], ['varsubsetneqq', [10955, 65024]], ['varsupsetneq', [8843, 65024]], ['varsupsetneqq', [10956, 65024]], ['vartheta', [977]], ['vartriangleleft', [8882]], ['vartriangleright', [8883]], ['vBar', [10984]], ['Vbar', [10987]], ['vBarv', [10985]], ['Vcy', [1042]], ['vcy', [1074]], ['vdash', [8866]], ['vDash', [8872]], ['Vdash', [8873]], ['VDash', [8875]], ['Vdashl', [10982]], ['veebar', [8891]], ['vee', [8744]], ['Vee', [8897]], ['veeeq', [8794]], ['vellip', [8942]], ['verbar', [124]], ['Verbar', [8214]], ['vert', [124]], ['Vert', [8214]], ['VerticalBar', [8739]], ['VerticalLine', [124]], ['VerticalSeparator', [10072]], ['VerticalTilde', [8768]], ['VeryThinSpace', [8202]], ['Vfr', [120089]], ['vfr', [120115]], ['vltri', [8882]], ['vnsub', [8834, 8402]], ['vnsup', [8835, 8402]], ['Vopf', [120141]], ['vopf', [120167]], ['vprop', [8733]], ['vrtri', [8883]], ['Vscr', [119985]], ['vscr', [120011]], ['vsubnE', [10955, 65024]], ['vsubne', [8842, 65024]], ['vsupnE', [10956, 65024]], ['vsupne', [8843, 65024]], ['Vvdash', [8874]], ['vzigzag', [10650]], ['Wcirc', [372]], ['wcirc', [373]], ['wedbar', [10847]], ['wedge', [8743]], ['Wedge', [8896]], ['wedgeq', [8793]], ['weierp', [8472]], ['Wfr', [120090]], ['wfr', [120116]], ['Wopf', [120142]], ['wopf', [120168]], ['wp', [8472]], ['wr', [8768]], ['wreath', [8768]], ['Wscr', [119986]], ['wscr', [120012]], ['xcap', [8898]], ['xcirc', [9711]], ['xcup', [8899]], ['xdtri', [9661]], ['Xfr', [120091]], ['xfr', [120117]], ['xharr', [10231]], ['xhArr', [10234]], ['Xi', [926]], ['xi', [958]], ['xlarr', [10229]], ['xlArr', [10232]], ['xmap', [10236]], ['xnis', [8955]], ['xodot', [10752]], ['Xopf', [120143]], ['xopf', [120169]], ['xoplus', [10753]], ['xotime', [10754]], ['xrarr', [10230]], ['xrArr', [10233]], ['Xscr', [119987]], ['xscr', [120013]], ['xsqcup', [10758]], ['xuplus', [10756]], ['xutri', [9651]], ['xvee', [8897]], ['xwedge', [8896]], ['Yacute', [221]], ['yacute', [253]], ['YAcy', [1071]], ['yacy', [1103]], ['Ycirc', [374]], ['ycirc', [375]], ['Ycy', [1067]], ['ycy', [1099]], ['yen', [165]], ['Yfr', [120092]], ['yfr', [120118]], ['YIcy', [1031]], ['yicy', [1111]], ['Yopf', [120144]], ['yopf', [120170]], ['Yscr', [119988]], ['yscr', [120014]], ['YUcy', [1070]], ['yucy', [1102]], ['yuml', [255]], ['Yuml', [376]], ['Zacute', [377]], ['zacute', [378]], ['Zcaron', [381]], ['zcaron', [382]], ['Zcy', [1047]], ['zcy', [1079]], ['Zdot', [379]], ['zdot', [380]], ['zeetrf', [8488]], ['ZeroWidthSpace', [8203]], ['Zeta', [918]], ['zeta', [950]], ['zfr', [120119]], ['Zfr', [8488]], ['ZHcy', [1046]], ['zhcy', [1078]], ['zigrarr', [8669]], ['zopf', [120171]], ['Zopf', [8484]], ['Zscr', [119989]], ['zscr', [120015]], ['zwj', [8205]], ['zwnj', [8204]]];\n\nvar alphaIndex = {};\nvar charIndex = {};\n\ncreateIndexes(alphaIndex, charIndex);\n\n/**\n * @constructor\n */\nfunction Html5Entities() {}\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml5Entities.prototype.decode = function(str) {\n if (!str || !str.length) {\n return '';\n }\n return str.replace(/&(#?[\\w\\d]+);?/g, function(s, entity) {\n var chr;\n if (entity.charAt(0) === \"#\") {\n var code = entity.charAt(1) === 'x' ?\n parseInt(entity.substr(2).toLowerCase(), 16) :\n parseInt(entity.substr(1));\n\n if (!(isNaN(code) || code < -32768 || code > 65535)) {\n chr = String.fromCharCode(code);\n }\n } else {\n chr = alphaIndex[entity];\n }\n return chr || s;\n });\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n Html5Entities.decode = function(str) {\n return new Html5Entities().decode(str);\n };\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml5Entities.prototype.encode = function(str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var charInfo = charIndex[str.charCodeAt(i)];\n if (charInfo) {\n var alpha = charInfo[str.charCodeAt(i + 1)];\n if (alpha) {\n i++;\n } else {\n alpha = charInfo[''];\n }\n if (alpha) {\n result += \"&\" + alpha + \";\";\n i++;\n continue;\n }\n }\n result += str.charAt(i);\n i++;\n }\n return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n Html5Entities.encode = function(str) {\n return new Html5Entities().encode(str);\n };\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml5Entities.prototype.encodeNonUTF = function(str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var c = str.charCodeAt(i);\n var charInfo = charIndex[c];\n if (charInfo) {\n var alpha = charInfo[str.charCodeAt(i + 1)];\n if (alpha) {\n i++;\n } else {\n alpha = charInfo[''];\n }\n if (alpha) {\n result += \"&\" + alpha + \";\";\n i++;\n continue;\n }\n }\n if (c < 32 || c > 126) {\n result += '&#' + c + ';';\n } else {\n result += str.charAt(i);\n }\n i++;\n }\n return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n Html5Entities.encodeNonUTF = function(str) {\n return new Html5Entities().encodeNonUTF(str);\n };\n\n/**\n * @param {String} str\n * @returns {String}\n */\nHtml5Entities.prototype.encodeNonASCII = function(str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var c = str.charCodeAt(i);\n if (c <= 255) {\n result += str[i++];\n continue;\n }\n result += '&#' + c + ';';\n i++\n }\n return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n Html5Entities.encodeNonASCII = function(str) {\n return new Html5Entities().encodeNonASCII(str);\n };\n\n/**\n * @param {Object} alphaIndex Passed by reference.\n * @param {Object} charIndex Passed by reference.\n */\nfunction createIndexes(alphaIndex, charIndex) {\n var i = ENTITIES.length;\n var _results = [];\n while (i--) {\n var e = ENTITIES[i];\n var alpha = e[0];\n var chars = e[1];\n var chr = chars[0];\n var addChar = (chr < 32 || chr > 126) || chr === 62 || chr === 60 || chr === 38 || chr === 34 || chr === 39;\n var charInfo;\n if (addChar) {\n charInfo = charIndex[chr] = charIndex[chr] || {};\n }\n if (chars[1]) {\n var chr2 = chars[1];\n alphaIndex[alpha] = String.fromCharCode(chr) + String.fromCharCode(chr2);\n _results.push(addChar && (charInfo[chr2] = alpha));\n } else {\n alphaIndex[alpha] = String.fromCharCode(chr);\n _results.push(addChar && (charInfo[''] = alpha));\n }\n }\n}\n\nmodule.exports = Html5Entities;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaHRtbC1lbnRpdGllcy9saWIvaHRtbDUtZW50aXRpZXMuanM/MTdmZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQyxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2h0bWwtZW50aXRpZXMvbGliL2h0bWw1LWVudGl0aWVzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIEVOVElUSUVTID0gW1snQWFjdXRlJywgWzE5M11dLCBbJ2FhY3V0ZScsIFsyMjVdXSwgWydBYnJldmUnLCBbMjU4XV0sIFsnYWJyZXZlJywgWzI1OV1dLCBbJ2FjJywgWzg3NjZdXSwgWydhY2QnLCBbODc2N11dLCBbJ2FjRScsIFs4NzY2LCA4MTldXSwgWydBY2lyYycsIFsxOTRdXSwgWydhY2lyYycsIFsyMjZdXSwgWydhY3V0ZScsIFsxODBdXSwgWydBY3knLCBbMTA0MF1dLCBbJ2FjeScsIFsxMDcyXV0sIFsnQUVsaWcnLCBbMTk4XV0sIFsnYWVsaWcnLCBbMjMwXV0sIFsnYWYnLCBbODI4OV1dLCBbJ0FmcicsIFsxMjAwNjhdXSwgWydhZnInLCBbMTIwMDk0XV0sIFsnQWdyYXZlJywgWzE5Ml1dLCBbJ2FncmF2ZScsIFsyMjRdXSwgWydhbGVmc3ltJywgWzg1MDFdXSwgWydhbGVwaCcsIFs4NTAxXV0sIFsnQWxwaGEnLCBbOTEzXV0sIFsnYWxwaGEnLCBbOTQ1XV0sIFsnQW1hY3InLCBbMjU2XV0sIFsnYW1hY3InLCBbMjU3XV0sIFsnYW1hbGcnLCBbMTA4MTVdXSwgWydhbXAnLCBbMzhdXSwgWydBTVAnLCBbMzhdXSwgWydhbmRhbmQnLCBbMTA4MzddXSwgWydBbmQnLCBbMTA4MzVdXSwgWydhbmQnLCBbODc0M11dLCBbJ2FuZGQnLCBbMTA4NDRdXSwgWydhbmRzbG9wZScsIFsxMDg0MF1dLCBbJ2FuZHYnLCBbMTA4NDJdXSwgWydhbmcnLCBbODczNl1dLCBbJ2FuZ2UnLCBbMTA2NjBdXSwgWydhbmdsZScsIFs4NzM2XV0sIFsnYW5nbXNkYWEnLCBbMTA2NjRdXSwgWydhbmdtc2RhYicsIFsxMDY2NV1dLCBbJ2FuZ21zZGFjJywgWzEwNjY2XV0sIFsnYW5nbXNkYWQnLCBbMTA2NjddXSwgWydhbmdtc2RhZScsIFsxMDY2OF1dLCBbJ2FuZ21zZGFmJywgWzEwNjY5XV0sIFsnYW5nbXNkYWcnLCBbMTA2NzBdXSwgWydhbmdtc2RhaCcsIFsxMDY3MV1dLCBbJ2FuZ21zZCcsIFs4NzM3XV0sIFsnYW5ncnQnLCBbODczNV1dLCBbJ2FuZ3J0dmInLCBbODg5NF1dLCBbJ2FuZ3J0dmJkJywgWzEwNjUzXV0sIFsnYW5nc3BoJywgWzg3MzhdXSwgWydhbmdzdCcsIFsxOTddXSwgWydhbmd6YXJyJywgWzkwODRdXSwgWydBb2dvbicsIFsyNjBdXSwgWydhb2dvbicsIFsyNjFdXSwgWydBb3BmJywgWzEyMDEyMF1dLCBbJ2FvcGYnLCBbMTIwMTQ2XV0sIFsnYXBhY2lyJywgWzEwODYzXV0sIFsnYXAnLCBbODc3Nl1dLCBbJ2FwRScsIFsxMDg2NF1dLCBbJ2FwZScsIFs4Nzc4XV0sIFsnYXBpZCcsIFs4Nzc5XV0sIFsnYXBvcycsIFszOV1dLCBbJ0FwcGx5RnVuY3Rpb24nLCBbODI4OV1dLCBbJ2FwcHJveCcsIFs4Nzc2XV0sIFsnYXBwcm94ZXEnLCBbODc3OF1dLCBbJ0FyaW5nJywgWzE5N11dLCBbJ2FyaW5nJywgWzIyOV1dLCBbJ0FzY3InLCBbMTE5OTY0XV0sIFsnYXNjcicsIFsxMTk5OTBdXSwgWydBc3NpZ24nLCBbODc4OF1dLCBbJ2FzdCcsIFs0Ml1dLCBbJ2FzeW1wJywgWzg3NzZdXSwgWydhc3ltcGVxJywgWzg3ODFdXSwgWydBdGlsZGUnLCBbMTk1XV0sIFsnYXRpbGRlJywgWzIyN11dLCBbJ0F1bWwnLCBbMTk2XV0sIFsnYXVtbCcsIFsyMjhdXSwgWydhd2NvbmludCcsIFs4NzU1XV0sIFsnYXdpbnQnLCBbMTA3NjldXSwgWydiYWNrY29uZycsIFs4NzgwXV0sIFsnYmFja2Vwc2lsb24nLCBbMTAxNF1dLCBbJ2JhY2twcmltZScsIFs4MjQ1XV0sIFsnYmFja3NpbScsIFs4NzY1XV0sIFsnYmFja3NpbWVxJywgWzg5MDldXSwgWydCYWNrc2xhc2gnLCBbODcyNl1dLCBbJ0JhcnYnLCBbMTA5ODNdXSwgWydiYXJ2ZWUnLCBbODg5M11dLCBbJ2JhcndlZCcsIFs4OTY1XV0sIFsnQmFyd2VkJywgWzg5NjZdXSwgWydiYXJ3ZWRnZScsIFs4OTY1XV0sIFsnYmJyaycsIFs5MTQxXV0sIFsnYmJya3RicmsnLCBbOTE0Ml1dLCBbJ2Jjb25nJywgWzg3ODBdXSwgWydCY3knLCBbMTA0MV1dLCBbJ2JjeScsIFsxMDczXV0sIFsnYmRxdW8nLCBbODIyMl1dLCBbJ2JlY2F1cycsIFs4NzU3XV0sIFsnYmVjYXVzZScsIFs4NzU3XV0sIFsnQmVjYXVzZScsIFs4NzU3XV0sIFsnYmVtcHR5dicsIFsxMDY3Ml1dLCBbJ2JlcHNpJywgWzEwMTRdXSwgWydiZXJub3UnLCBbODQ5Ml1dLCBbJ0Jlcm5vdWxsaXMnLCBbODQ5Ml1dLCBbJ0JldGEnLCBbOTE0XV0sIFsnYmV0YScsIFs5NDZdXSwgWydiZXRoJywgWzg1MDJdXSwgWydiZXR3ZWVuJywgWzg4MTJdXSwgWydCZnInLCBbMTIwMDY5XV0sIFsnYmZyJywgWzEyMDA5NV1dLCBbJ2JpZ2NhcCcsIFs4ODk4XV0sIFsnYmlnY2lyYycsIFs5NzExXV0sIFsnYmlnY3VwJywgWzg4OTldXSwgWydiaWdvZG90JywgWzEwNzUyXV0sIFsnYmlnb3BsdXMnLCBbMTA3NTNdXSwgWydiaWdvdGltZXMnLCBbMTA3NTRdXSwgWydiaWdzcWN1cCcsIFsxMDc1OF1dLCBbJ2JpZ3N0YXInLCBbOTczM11dLCBbJ2JpZ3RyaWFuZ2xlZG93bicsIFs5NjYxXV0sIFsnYmlndHJpYW5nbGV1cCcsIFs5NjUxXV0sIFsnYmlndXBsdXMnLCBbMTA3NTZdXSwgWydiaWd2ZWUnLCBbODg5N11dLCBbJ2JpZ3dlZGdlJywgWzg4OTZdXSwgWydia2Fyb3cnLCBbMTA1MDldXSwgWydibGFja2xvemVuZ2UnLCBbMTA3MzFdXSwgWydibGFja3NxdWFyZScsIFs5NjQyXV0sIFsnYmxhY2t0cmlhbmdsZScsIFs5NjUyXV0sIFsnYmxhY2t0cmlhbmdsZWRvd24nLCBbOTY2Ml1dLCBbJ2JsYWNrdHJpYW5nbGVsZWZ0JywgWzk2NjZdXSwgWydibGFja3RyaWFuZ2xlcmlnaHQnLCBbOTY1Nl1dLCBbJ2JsYW5rJywgWzkyNTFdXSwgWydibGsxMicsIFs5NjE4XV0sIFsnYmxrMTQnLCBbOTYxN11dLCBbJ2JsazM0JywgWzk2MTldXSwgWydibG9jaycsIFs5NjA4XV0sIFsnYm5lJywgWzYxLCA4NDIxXV0sIFsnYm5lcXVpdicsIFs4ODAxLCA4NDIxXV0sIFsnYk5vdCcsIFsxMDk4OV1dLCBbJ2Jub3QnLCBbODk3Nl1dLCBbJ0JvcGYnLCBbMTIwMTIxXV0sIFsnYm9wZicsIFsxMjAxNDddXSwgWydib3QnLCBbODg2OV1dLCBbJ2JvdHRvbScsIFs4ODY5XV0sIFsnYm93dGllJywgWzg5MDRdXSwgWydib3hib3gnLCBbMTA2OTddXSwgWydib3hkbCcsIFs5NDg4XV0sIFsnYm94ZEwnLCBbOTU1N11dLCBbJ2JveERsJywgWzk1NThdXSwgWydib3hETCcsIFs5NTU5XV0sIFsnYm94ZHInLCBbOTQ4NF1dLCBbJ2JveGRSJywgWzk1NTRdXSwgWydib3hEcicsIFs5NTU1XV0sIFsnYm94RFInLCBbOTU1Nl1dLCBbJ2JveGgnLCBbOTQ3Ml1dLCBbJ2JveEgnLCBbOTU1Ml1dLCBbJ2JveGhkJywgWzk1MTZdXSwgWydib3hIZCcsIFs5NTcyXV0sIFsnYm94aEQnLCBbOTU3M11dLCBbJ2JveEhEJywgWzk1NzRdXSwgWydib3hodScsIFs5NTI0XV0sIFsnYm94SHUnLCBbOTU3NV1dLCBbJ2JveGhVJywgWzk1NzZdXSwgWydib3hIVScsIFs5NTc3XV0sIFsnYm94bWludXMnLCBbODg2M11dLCBbJ2JveHBsdXMnLCBbODg2Ml1dLCBbJ2JveHRpbWVzJywgWzg4NjRdXSwgWydib3h1bCcsIFs5NDk2XV0sIFsnYm94dUwnLCBbOTU2M11dLCBbJ2JveFVsJywgWzk1NjRdXSwgWydib3hVTCcsIFs5NTY1XV0sIFsnYm94dXInLCBbOTQ5Ml1dLCBbJ2JveHVSJywgWzk1NjBdXSwgWydib3hVcicsIFs5NTYxXV0sIFsnYm94VVInLCBbOTU2Ml1dLCBbJ2JveHYnLCBbOTQ3NF1dLCBbJ2JveFYnLCBbOTU1M11dLCBbJ2JveHZoJywgWzk1MzJdXSwgWydib3h2SCcsIFs5NTc4XV0sIFsnYm94VmgnLCBbOTU3OV1dLCBbJ2JveFZIJywgWzk1ODBdXSwgWydib3h2bCcsIFs5NTA4XV0sIFsnYm94dkwnLCBbOTU2OV1dLCBbJ2JveFZsJywgWzk1NzBdXSwgWydib3hWTCcsIFs5NTcxXV0sIFsnYm94dnInLCBbOTUwMF1dLCBbJ2JveHZSJywgWzk1NjZdXSwgWydib3hWcicsIFs5NTY3XV0sIFsnYm94VlInLCBbOTU2OF1dLCBbJ2JwcmltZScsIFs4MjQ1XV0sIFsnYnJldmUnLCBbNzI4XV0sIFsnQnJldmUnLCBbNzI4XV0sIFsnYnJ2YmFyJywgWzE2Nl1dLCBbJ2JzY3InLCBbMTE5OTkxXV0sIFsnQnNjcicsIFs4NDkyXV0sIFsnYnNlbWknLCBbODI3MV1dLCBbJ2JzaW0nLCBbODc2NV1dLCBbJ2JzaW1lJywgWzg5MDldXSwgWydic29sYicsIFsxMDY5M11dLCBbJ2Jzb2wnLCBbOTJdXSwgWydic29saHN1YicsIFsxMDE4NF1dLCBbJ2J1bGwnLCBbODIyNl1dLCBbJ2J1bGxldCcsIFs4MjI2XV0sIFsnYnVtcCcsIFs4NzgyXV0sIFsnYnVtcEUnLCBbMTA5MjZdXSwgWydidW1wZScsIFs4NzgzXV0sIFsnQnVtcGVxJywgWzg3ODJdXSwgWydidW1wZXEnLCBbODc4M11dLCBbJ0NhY3V0ZScsIFsyNjJdXSwgWydjYWN1dGUnLCBbMjYzXV0sIFsnY2FwYW5kJywgWzEwODIwXV0sIFsnY2FwYnJjdXAnLCBbMTA4MjVdXSwgWydjYXBjYXAnLCBbMTA4MjddXSwgWydjYXAnLCBbODc0NV1dLCBbJ0NhcCcsIFs4OTE0XV0sIFsnY2FwY3VwJywgWzEwODIzXV0sIFsnY2FwZG90JywgWzEwODE2XV0sIFsnQ2FwaXRhbERpZmZlcmVudGlhbEQnLCBbODUxN11dLCBbJ2NhcHMnLCBbODc0NSwgNjUwMjRdXSwgWydjYXJldCcsIFs4MjU3XV0sIFsnY2Fyb24nLCBbNzExXV0sIFsnQ2F5bGV5cycsIFs4NDkzXV0sIFsnY2NhcHMnLCBbMTA4MjldXSwgWydDY2Fyb24nLCBbMjY4XV0sIFsnY2Nhcm9uJywgWzI2OV1dLCBbJ0NjZWRpbCcsIFsxOTldXSwgWydjY2VkaWwnLCBbMjMxXV0sIFsnQ2NpcmMnLCBbMjY0XV0sIFsnY2NpcmMnLCBbMjY1XV0sIFsnQ2NvbmludCcsIFs4NzUyXV0sIFsnY2N1cHMnLCBbMTA4MjhdXSwgWydjY3Vwc3NtJywgWzEwODMyXV0sIFsnQ2RvdCcsIFsyNjZdXSwgWydjZG90JywgWzI2N11dLCBbJ2NlZGlsJywgWzE4NF1dLCBbJ0NlZGlsbGEnLCBbMTg0XV0sIFsnY2VtcHR5dicsIFsxMDY3NF1dLCBbJ2NlbnQnLCBbMTYyXV0sIFsnY2VudGVyZG90JywgWzE4M11dLCBbJ0NlbnRlckRvdCcsIFsxODNdXSwgWydjZnInLCBbMTIwMDk2XV0sIFsnQ2ZyJywgWzg0OTNdXSwgWydDSGN5JywgWzEwNjNdXSwgWydjaGN5JywgWzEwOTVdXSwgWydjaGVjaycsIFsxMDAwM11dLCBbJ2NoZWNrbWFyaycsIFsxMDAwM11dLCBbJ0NoaScsIFs5MzVdXSwgWydjaGknLCBbOTY3XV0sIFsnY2lyYycsIFs3MTBdXSwgWydjaXJjZXEnLCBbODc5MV1dLCBbJ2NpcmNsZWFycm93bGVmdCcsIFs4NjM0XV0sIFsnY2lyY2xlYXJyb3dyaWdodCcsIFs4NjM1XV0sIFsnY2lyY2xlZGFzdCcsIFs4ODU5XV0sIFsnY2lyY2xlZGNpcmMnLCBbODg1OF1dLCBbJ2NpcmNsZWRkYXNoJywgWzg4NjFdXSwgWydDaXJjbGVEb3QnLCBbODg1N11dLCBbJ2NpcmNsZWRSJywgWzE3NF1dLCBbJ2NpcmNsZWRTJywgWzk0MTZdXSwgWydDaXJjbGVNaW51cycsIFs4ODU0XV0sIFsnQ2lyY2xlUGx1cycsIFs4ODUzXV0sIFsnQ2lyY2xlVGltZXMnLCBbODg1NV1dLCBbJ2NpcicsIFs5Njc1XV0sIFsnY2lyRScsIFsxMDY5MV1dLCBbJ2NpcmUnLCBbODc5MV1dLCBbJ2NpcmZuaW50JywgWzEwNzY4XV0sIFsnY2lybWlkJywgWzEwOTkxXV0sIFsnY2lyc2NpcicsIFsxMDY5MF1dLCBbJ0Nsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbCcsIFs4NzU0XV0sIFsnY2x1YnMnLCBbOTgyN11dLCBbJ2NsdWJzdWl0JywgWzk4MjddXSwgWydjb2xvbicsIFs1OF1dLCBbJ0NvbG9uJywgWzg3NTldXSwgWydDb2xvbmUnLCBbMTA4NjhdXSwgWydjb2xvbmUnLCBbODc4OF1dLCBbJ2NvbG9uZXEnLCBbODc4OF1dLCBbJ2NvbW1hJywgWzQ0XV0sIFsnY29tbWF0JywgWzY0XV0sIFsnY29tcCcsIFs4NzA1XV0sIFsnY29tcGZuJywgWzg3MjhdXSwgWydjb21wbGVtZW50JywgWzg3MDVdXSwgWydjb21wbGV4ZXMnLCBbODQ1MF1dLCBbJ2NvbmcnLCBbODc3M11dLCBbJ2Nvbmdkb3QnLCBbMTA4NjFdXSwgWydDb25ncnVlbnQnLCBbODgwMV1dLCBbJ2NvbmludCcsIFs4NzUwXV0sIFsnQ29uaW50JywgWzg3NTFdXSwgWydDb250b3VySW50ZWdyYWwnLCBbODc1MF1dLCBbJ2NvcGYnLCBbMTIwMTQ4XV0sIFsnQ29wZicsIFs4NDUwXV0sIFsnY29wcm9kJywgWzg3MjBdXSwgWydDb3Byb2R1Y3QnLCBbODcyMF1dLCBbJ2NvcHknLCBbMTY5XV0sIFsnQ09QWScsIFsxNjldXSwgWydjb3B5c3InLCBbODQ3MV1dLCBbJ0NvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWwnLCBbODc1NV1dLCBbJ2NyYXJyJywgWzg2MjldXSwgWydjcm9zcycsIFsxMDAwN11dLCBbJ0Nyb3NzJywgWzEwNzk5XV0sIFsnQ3NjcicsIFsxMTk5NjZdXSwgWydjc2NyJywgWzExOTk5Ml1dLCBbJ2NzdWInLCBbMTA5NTldXSwgWydjc3ViZScsIFsxMDk2MV1dLCBbJ2NzdXAnLCBbMTA5NjBdXSwgWydjc3VwZScsIFsxMDk2Ml1dLCBbJ2N0ZG90JywgWzg5NDNdXSwgWydjdWRhcnJsJywgWzEwNTUyXV0sIFsnY3VkYXJycicsIFsxMDU0OV1dLCBbJ2N1ZXByJywgWzg5MjZdXSwgWydjdWVzYycsIFs4OTI3XV0sIFsnY3VsYXJyJywgWzg2MzBdXSwgWydjdWxhcnJwJywgWzEwNTU3XV0sIFsnY3VwYnJjYXAnLCBbMTA4MjRdXSwgWydjdXBjYXAnLCBbMTA4MjJdXSwgWydDdXBDYXAnLCBbODc4MV1dLCBbJ2N1cCcsIFs4NzQ2XV0sIFsnQ3VwJywgWzg5MTVdXSwgWydjdXBjdXAnLCBbMTA4MjZdXSwgWydjdXBkb3QnLCBbODg0NV1dLCBbJ2N1cG9yJywgWzEwODIxXV0sIFsnY3VwcycsIFs4NzQ2LCA2NTAyNF1dLCBbJ2N1cmFycicsIFs4NjMxXV0sIFsnY3VyYXJybScsIFsxMDU1Nl1dLCBbJ2N1cmx5ZXFwcmVjJywgWzg5MjZdXSwgWydjdXJseWVxc3VjYycsIFs4OTI3XV0sIFsnY3VybHl2ZWUnLCBbODkxMF1dLCBbJ2N1cmx5d2VkZ2UnLCBbODkxMV1dLCBbJ2N1cnJlbicsIFsxNjRdXSwgWydjdXJ2ZWFycm93bGVmdCcsIFs4NjMwXV0sIFsnY3VydmVhcnJvd3JpZ2h0JywgWzg2MzFdXSwgWydjdXZlZScsIFs4OTEwXV0sIFsnY3V3ZWQnLCBbODkxMV1dLCBbJ2N3Y29uaW50JywgWzg3NTRdXSwgWydjd2ludCcsIFs4NzUzXV0sIFsnY3lsY3R5JywgWzkwMDVdXSwgWydkYWdnZXInLCBbODIyNF1dLCBbJ0RhZ2dlcicsIFs4MjI1XV0sIFsnZGFsZXRoJywgWzg1MDRdXSwgWydkYXJyJywgWzg1OTVdXSwgWydEYXJyJywgWzg2MDldXSwgWydkQXJyJywgWzg2NTldXSwgWydkYXNoJywgWzgyMDhdXSwgWydEYXNodicsIFsxMDk4MF1dLCBbJ2Rhc2h2JywgWzg4NjddXSwgWydkYmthcm93JywgWzEwNTExXV0sIFsnZGJsYWMnLCBbNzMzXV0sIFsnRGNhcm9uJywgWzI3MF1dLCBbJ2RjYXJvbicsIFsyNzFdXSwgWydEY3knLCBbMTA0NF1dLCBbJ2RjeScsIFsxMDc2XV0sIFsnZGRhZ2dlcicsIFs4MjI1XV0sIFsnZGRhcnInLCBbODY1MF1dLCBbJ0REJywgWzg1MTddXSwgWydkZCcsIFs4NTE4XV0sIFsnRERvdHJhaGQnLCBbMTA1MTNdXSwgWydkZG90c2VxJywgWzEwODcxXV0sIFsnZGVnJywgWzE3Nl1dLCBbJ0RlbCcsIFs4NzExXV0sIFsnRGVsdGEnLCBbOTE2XV0sIFsnZGVsdGEnLCBbOTQ4XV0sIFsnZGVtcHR5dicsIFsxMDY3M11dLCBbJ2RmaXNodCcsIFsxMDYyM11dLCBbJ0RmcicsIFsxMjAwNzFdXSwgWydkZnInLCBbMTIwMDk3XV0sIFsnZEhhcicsIFsxMDU5N11dLCBbJ2RoYXJsJywgWzg2NDNdXSwgWydkaGFycicsIFs4NjQyXV0sIFsnRGlhY3JpdGljYWxBY3V0ZScsIFsxODBdXSwgWydEaWFjcml0aWNhbERvdCcsIFs3MjldXSwgWydEaWFjcml0aWNhbERvdWJsZUFjdXRlJywgWzczM11dLCBbJ0RpYWNyaXRpY2FsR3JhdmUnLCBbOTZdXSwgWydEaWFjcml0aWNhbFRpbGRlJywgWzczMl1dLCBbJ2RpYW0nLCBbODkwMF1dLCBbJ2RpYW1vbmQnLCBbODkwMF1dLCBbJ0RpYW1vbmQnLCBbODkwMF1dLCBbJ2RpYW1vbmRzdWl0JywgWzk4MzBdXSwgWydkaWFtcycsIFs5ODMwXV0sIFsnZGllJywgWzE2OF1dLCBbJ0RpZmZlcmVudGlhbEQnLCBbODUxOF1dLCBbJ2RpZ2FtbWEnLCBbOTg5XV0sIFsnZGlzaW4nLCBbODk0Nl1dLCBbJ2RpdicsIFsyNDddXSwgWydkaXZpZGUnLCBbMjQ3XV0sIFsnZGl2aWRlb250aW1lcycsIFs4OTAzXV0sIFsnZGl2b254JywgWzg5MDNdXSwgWydESmN5JywgWzEwMjZdXSwgWydkamN5JywgWzExMDZdXSwgWydkbGNvcm4nLCBbODk5MF1dLCBbJ2RsY3JvcCcsIFs4OTczXV0sIFsnZG9sbGFyJywgWzM2XV0sIFsnRG9wZicsIFsxMjAxMjNdXSwgWydkb3BmJywgWzEyMDE0OV1dLCBbJ0RvdCcsIFsxNjhdXSwgWydkb3QnLCBbNzI5XV0sIFsnRG90RG90JywgWzg0MTJdXSwgWydkb3RlcScsIFs4Nzg0XV0sIFsnZG90ZXFkb3QnLCBbODc4NV1dLCBbJ0RvdEVxdWFsJywgWzg3ODRdXSwgWydkb3RtaW51cycsIFs4NzYwXV0sIFsnZG90cGx1cycsIFs4NzI0XV0sIFsnZG90c3F1YXJlJywgWzg4NjVdXSwgWydkb3VibGViYXJ3ZWRnZScsIFs4OTY2XV0sIFsnRG91YmxlQ29udG91ckludGVncmFsJywgWzg3NTFdXSwgWydEb3VibGVEb3QnLCBbMTY4XV0sIFsnRG91YmxlRG93bkFycm93JywgWzg2NTldXSwgWydEb3VibGVMZWZ0QXJyb3cnLCBbODY1Nl1dLCBbJ0RvdWJsZUxlZnRSaWdodEFycm93JywgWzg2NjBdXSwgWydEb3VibGVMZWZ0VGVlJywgWzEwOTgwXV0sIFsnRG91YmxlTG9uZ0xlZnRBcnJvdycsIFsxMDIzMl1dLCBbJ0RvdWJsZUxvbmdMZWZ0UmlnaHRBcnJvdycsIFsxMDIzNF1dLCBbJ0RvdWJsZUxvbmdSaWdodEFycm93JywgWzEwMjMzXV0sIFsnRG91YmxlUmlnaHRBcnJvdycsIFs4NjU4XV0sIFsnRG91YmxlUmlnaHRUZWUnLCBbODg3Ml1dLCBbJ0RvdWJsZVVwQXJyb3cnLCBbODY1N11dLCBbJ0RvdWJsZVVwRG93bkFycm93JywgWzg2NjFdXSwgWydEb3VibGVWZXJ0aWNhbEJhcicsIFs4NzQxXV0sIFsnRG93bkFycm93QmFyJywgWzEwNTE1XV0sIFsnZG93bmFycm93JywgWzg1OTVdXSwgWydEb3duQXJyb3cnLCBbODU5NV1dLCBbJ0Rvd25hcnJvdycsIFs4NjU5XV0sIFsnRG93bkFycm93VXBBcnJvdycsIFs4NjkzXV0sIFsnRG93bkJyZXZlJywgWzc4NV1dLCBbJ2Rvd25kb3duYXJyb3dzJywgWzg2NTBdXSwgWydkb3duaGFycG9vbmxlZnQnLCBbODY0M11dLCBbJ2Rvd25oYXJwb29ucmlnaHQnLCBbODY0Ml1dLCBbJ0Rvd25MZWZ0UmlnaHRWZWN0b3InLCBbMTA1NzZdXSwgWydEb3duTGVmdFRlZVZlY3RvcicsIFsxMDU5MF1dLCBbJ0Rvd25MZWZ0VmVjdG9yQmFyJywgWzEwNTgyXV0sIFsnRG93bkxlZnRWZWN0b3InLCBbODYzN11dLCBbJ0Rvd25SaWdodFRlZVZlY3RvcicsIFsxMDU5MV1dLCBbJ0Rvd25SaWdodFZlY3RvckJhcicsIFsxMDU4M11dLCBbJ0Rvd25SaWdodFZlY3RvcicsIFs4NjQxXV0sIFsnRG93blRlZUFycm93JywgWzg2MTVdXSwgWydEb3duVGVlJywgWzg4NjhdXSwgWydkcmJrYXJvdycsIFsxMDUxMl1dLCBbJ2RyY29ybicsIFs4OTkxXV0sIFsnZHJjcm9wJywgWzg5NzJdXSwgWydEc2NyJywgWzExOTk2N11dLCBbJ2RzY3InLCBbMTE5OTkzXV0sIFsnRFNjeScsIFsxMDI5XV0sIFsnZHNjeScsIFsxMTA5XV0sIFsnZHNvbCcsIFsxMDc0Ml1dLCBbJ0RzdHJvaycsIFsyNzJdXSwgWydkc3Ryb2snLCBbMjczXV0sIFsnZHRkb3QnLCBbODk0NV1dLCBbJ2R0cmknLCBbOTY2M11dLCBbJ2R0cmlmJywgWzk2NjJdXSwgWydkdWFycicsIFs4NjkzXV0sIFsnZHVoYXInLCBbMTA2MDddXSwgWydkd2FuZ2xlJywgWzEwNjYyXV0sIFsnRFpjeScsIFsxMDM5XV0sIFsnZHpjeScsIFsxMTE5XV0sIFsnZHppZ3JhcnInLCBbMTAyMzldXSwgWydFYWN1dGUnLCBbMjAxXV0sIFsnZWFjdXRlJywgWzIzM11dLCBbJ2Vhc3RlcicsIFsxMDg2Ml1dLCBbJ0VjYXJvbicsIFsyODJdXSwgWydlY2Fyb24nLCBbMjgzXV0sIFsnRWNpcmMnLCBbMjAyXV0sIFsnZWNpcmMnLCBbMjM0XV0sIFsnZWNpcicsIFs4NzkwXV0sIFsnZWNvbG9uJywgWzg3ODldXSwgWydFY3knLCBbMTA2OV1dLCBbJ2VjeScsIFsxMTAxXV0sIFsnZUREb3QnLCBbMTA4NzFdXSwgWydFZG90JywgWzI3OF1dLCBbJ2Vkb3QnLCBbMjc5XV0sIFsnZURvdCcsIFs4Nzg1XV0sIFsnZWUnLCBbODUxOV1dLCBbJ2VmRG90JywgWzg3ODZdXSwgWydFZnInLCBbMTIwMDcyXV0sIFsnZWZyJywgWzEyMDA5OF1dLCBbJ2VnJywgWzEwOTA2XV0sIFsnRWdyYXZlJywgWzIwMF1dLCBbJ2VncmF2ZScsIFsyMzJdXSwgWydlZ3MnLCBbMTA5MDJdXSwgWydlZ3Nkb3QnLCBbMTA5MDRdXSwgWydlbCcsIFsxMDkwNV1dLCBbJ0VsZW1lbnQnLCBbODcxMl1dLCBbJ2VsaW50ZXJzJywgWzkxOTFdXSwgWydlbGwnLCBbODQ2N11dLCBbJ2VscycsIFsxMDkwMV1dLCBbJ2Vsc2RvdCcsIFsxMDkwM11dLCBbJ0VtYWNyJywgWzI3NF1dLCBbJ2VtYWNyJywgWzI3NV1dLCBbJ2VtcHR5JywgWzg3MDldXSwgWydlbXB0eXNldCcsIFs4NzA5XV0sIFsnRW1wdHlTbWFsbFNxdWFyZScsIFs5NzIzXV0sIFsnZW1wdHl2JywgWzg3MDldXSwgWydFbXB0eVZlcnlTbWFsbFNxdWFyZScsIFs5NjQzXV0sIFsnZW1zcDEzJywgWzgxOTZdXSwgWydlbXNwMTQnLCBbODE5N11dLCBbJ2Vtc3AnLCBbODE5NV1dLCBbJ0VORycsIFszMzBdXSwgWydlbmcnLCBbMzMxXV0sIFsnZW5zcCcsIFs4MTk0XV0sIFsnRW9nb24nLCBbMjgwXV0sIFsnZW9nb24nLCBbMjgxXV0sIFsnRW9wZicsIFsxMjAxMjRdXSwgWydlb3BmJywgWzEyMDE1MF1dLCBbJ2VwYXInLCBbODkxN11dLCBbJ2VwYXJzbCcsIFsxMDcyM11dLCBbJ2VwbHVzJywgWzEwODY1XV0sIFsnZXBzaScsIFs5NDldXSwgWydFcHNpbG9uJywgWzkxN11dLCBbJ2Vwc2lsb24nLCBbOTQ5XV0sIFsnZXBzaXYnLCBbMTAxM11dLCBbJ2VxY2lyYycsIFs4NzkwXV0sIFsnZXFjb2xvbicsIFs4Nzg5XV0sIFsnZXFzaW0nLCBbODc3MF1dLCBbJ2Vxc2xhbnRndHInLCBbMTA5MDJdXSwgWydlcXNsYW50bGVzcycsIFsxMDkwMV1dLCBbJ0VxdWFsJywgWzEwODY5XV0sIFsnZXF1YWxzJywgWzYxXV0sIFsnRXF1YWxUaWxkZScsIFs4NzcwXV0sIFsnZXF1ZXN0JywgWzg3OTldXSwgWydFcXVpbGlicml1bScsIFs4NjUyXV0sIFsnZXF1aXYnLCBbODgwMV1dLCBbJ2VxdWl2REQnLCBbMTA4NzJdXSwgWydlcXZwYXJzbCcsIFsxMDcyNV1dLCBbJ2VyYXJyJywgWzEwNjA5XV0sIFsnZXJEb3QnLCBbODc4N11dLCBbJ2VzY3InLCBbODQ5NV1dLCBbJ0VzY3InLCBbODQ5Nl1dLCBbJ2VzZG90JywgWzg3ODRdXSwgWydFc2ltJywgWzEwODY3XV0sIFsnZXNpbScsIFs4NzcwXV0sIFsnRXRhJywgWzkxOV1dLCBbJ2V0YScsIFs5NTFdXSwgWydFVEgnLCBbMjA4XV0sIFsnZXRoJywgWzI0MF1dLCBbJ0V1bWwnLCBbMjAzXV0sIFsnZXVtbCcsIFsyMzVdXSwgWydldXJvJywgWzgzNjRdXSwgWydleGNsJywgWzMzXV0sIFsnZXhpc3QnLCBbODcwN11dLCBbJ0V4aXN0cycsIFs4NzA3XV0sIFsnZXhwZWN0YXRpb24nLCBbODQ5Nl1dLCBbJ2V4cG9uZW50aWFsZScsIFs4NTE5XV0sIFsnRXhwb25lbnRpYWxFJywgWzg1MTldXSwgWydmYWxsaW5nZG90c2VxJywgWzg3ODZdXSwgWydGY3knLCBbMTA2MF1dLCBbJ2ZjeScsIFsxMDkyXV0sIFsnZmVtYWxlJywgWzk3OTJdXSwgWydmZmlsaWcnLCBbNjQyNTldXSwgWydmZmxpZycsIFs2NDI1Nl1dLCBbJ2ZmbGxpZycsIFs2NDI2MF1dLCBbJ0ZmcicsIFsxMjAwNzNdXSwgWydmZnInLCBbMTIwMDk5XV0sIFsnZmlsaWcnLCBbNjQyNTddXSwgWydGaWxsZWRTbWFsbFNxdWFyZScsIFs5NzI0XV0sIFsnRmlsbGVkVmVyeVNtYWxsU3F1YXJlJywgWzk2NDJdXSwgWydmamxpZycsIFsxMDIsIDEwNl1dLCBbJ2ZsYXQnLCBbOTgzN11dLCBbJ2ZsbGlnJywgWzY0MjU4XV0sIFsnZmx0bnMnLCBbOTY0OV1dLCBbJ2Zub2YnLCBbNDAyXV0sIFsnRm9wZicsIFsxMjAxMjVdXSwgWydmb3BmJywgWzEyMDE1MV1dLCBbJ2ZvcmFsbCcsIFs4NzA0XV0sIFsnRm9yQWxsJywgWzg3MDRdXSwgWydmb3JrJywgWzg5MTZdXSwgWydmb3JrdicsIFsxMDk2OV1dLCBbJ0ZvdXJpZXJ0cmYnLCBbODQ5N11dLCBbJ2ZwYXJ0aW50JywgWzEwNzY1XV0sIFsnZnJhYzEyJywgWzE4OV1dLCBbJ2ZyYWMxMycsIFs4NTMxXV0sIFsnZnJhYzE0JywgWzE4OF1dLCBbJ2ZyYWMxNScsIFs4NTMzXV0sIFsnZnJhYzE2JywgWzg1MzddXSwgWydmcmFjMTgnLCBbODUzOV1dLCBbJ2ZyYWMyMycsIFs4NTMyXV0sIFsnZnJhYzI1JywgWzg1MzRdXSwgWydmcmFjMzQnLCBbMTkwXV0sIFsnZnJhYzM1JywgWzg1MzVdXSwgWydmcmFjMzgnLCBbODU0MF1dLCBbJ2ZyYWM0NScsIFs4NTM2XV0sIFsnZnJhYzU2JywgWzg1MzhdXSwgWydmcmFjNTgnLCBbODU0MV1dLCBbJ2ZyYWM3OCcsIFs4NTQyXV0sIFsnZnJhc2wnLCBbODI2MF1dLCBbJ2Zyb3duJywgWzg5OTRdXSwgWydmc2NyJywgWzExOTk5NV1dLCBbJ0ZzY3InLCBbODQ5N11dLCBbJ2dhY3V0ZScsIFs1MDFdXSwgWydHYW1tYScsIFs5MTVdXSwgWydnYW1tYScsIFs5NDddXSwgWydHYW1tYWQnLCBbOTg4XV0sIFsnZ2FtbWFkJywgWzk4OV1dLCBbJ2dhcCcsIFsxMDg4Nl1dLCBbJ0dicmV2ZScsIFsyODZdXSwgWydnYnJldmUnLCBbMjg3XV0sIFsnR2NlZGlsJywgWzI5MF1dLCBbJ0djaXJjJywgWzI4NF1dLCBbJ2djaXJjJywgWzI4NV1dLCBbJ0djeScsIFsxMDQzXV0sIFsnZ2N5JywgWzEwNzVdXSwgWydHZG90JywgWzI4OF1dLCBbJ2dkb3QnLCBbMjg5XV0sIFsnZ2UnLCBbODgwNV1dLCBbJ2dFJywgWzg4MDddXSwgWydnRWwnLCBbMTA4OTJdXSwgWydnZWwnLCBbODkyM11dLCBbJ2dlcScsIFs4ODA1XV0sIFsnZ2VxcScsIFs4ODA3XV0sIFsnZ2Vxc2xhbnQnLCBbMTA4NzhdXSwgWydnZXNjYycsIFsxMDkyMV1dLCBbJ2dlcycsIFsxMDg3OF1dLCBbJ2dlc2RvdCcsIFsxMDg4MF1dLCBbJ2dlc2RvdG8nLCBbMTA4ODJdXSwgWydnZXNkb3RvbCcsIFsxMDg4NF1dLCBbJ2dlc2wnLCBbODkyMywgNjUwMjRdXSwgWydnZXNsZXMnLCBbMTA5MDBdXSwgWydHZnInLCBbMTIwMDc0XV0sIFsnZ2ZyJywgWzEyMDEwMF1dLCBbJ2dnJywgWzg4MTFdXSwgWydHZycsIFs4OTIxXV0sIFsnZ2dnJywgWzg5MjFdXSwgWydnaW1lbCcsIFs4NTAzXV0sIFsnR0pjeScsIFsxMDI3XV0sIFsnZ2pjeScsIFsxMTA3XV0sIFsnZ2xhJywgWzEwOTE3XV0sIFsnZ2wnLCBbODgyM11dLCBbJ2dsRScsIFsxMDg5OF1dLCBbJ2dsaicsIFsxMDkxNl1dLCBbJ2duYXAnLCBbMTA4OTBdXSwgWydnbmFwcHJveCcsIFsxMDg5MF1dLCBbJ2duZScsIFsxMDg4OF1dLCBbJ2duRScsIFs4ODA5XV0sIFsnZ25lcScsIFsxMDg4OF1dLCBbJ2duZXFxJywgWzg4MDldXSwgWydnbnNpbScsIFs4OTM1XV0sIFsnR29wZicsIFsxMjAxMjZdXSwgWydnb3BmJywgWzEyMDE1Ml1dLCBbJ2dyYXZlJywgWzk2XV0sIFsnR3JlYXRlckVxdWFsJywgWzg4MDVdXSwgWydHcmVhdGVyRXF1YWxMZXNzJywgWzg5MjNdXSwgWydHcmVhdGVyRnVsbEVxdWFsJywgWzg4MDddXSwgWydHcmVhdGVyR3JlYXRlcicsIFsxMDkxNF1dLCBbJ0dyZWF0ZXJMZXNzJywgWzg4MjNdXSwgWydHcmVhdGVyU2xhbnRFcXVhbCcsIFsxMDg3OF1dLCBbJ0dyZWF0ZXJUaWxkZScsIFs4ODE5XV0sIFsnR3NjcicsIFsxMTk5NzBdXSwgWydnc2NyJywgWzg0NThdXSwgWydnc2ltJywgWzg4MTldXSwgWydnc2ltZScsIFsxMDg5NF1dLCBbJ2dzaW1sJywgWzEwODk2XV0sIFsnZ3RjYycsIFsxMDkxOV1dLCBbJ2d0Y2lyJywgWzEwODc0XV0sIFsnZ3QnLCBbNjJdXSwgWydHVCcsIFs2Ml1dLCBbJ0d0JywgWzg4MTFdXSwgWydndGRvdCcsIFs4OTE5XV0sIFsnZ3RsUGFyJywgWzEwNjQ1XV0sIFsnZ3RxdWVzdCcsIFsxMDg3Nl1dLCBbJ2d0cmFwcHJveCcsIFsxMDg4Nl1dLCBbJ2d0cmFycicsIFsxMDYxNl1dLCBbJ2d0cmRvdCcsIFs4OTE5XV0sIFsnZ3RyZXFsZXNzJywgWzg5MjNdXSwgWydndHJlcXFsZXNzJywgWzEwODkyXV0sIFsnZ3RybGVzcycsIFs4ODIzXV0sIFsnZ3Ryc2ltJywgWzg4MTldXSwgWydndmVydG5lcXEnLCBbODgwOSwgNjUwMjRdXSwgWydndm5FJywgWzg4MDksIDY1MDI0XV0sIFsnSGFjZWsnLCBbNzExXV0sIFsnaGFpcnNwJywgWzgyMDJdXSwgWydoYWxmJywgWzE4OV1dLCBbJ2hhbWlsdCcsIFs4NDU5XV0sIFsnSEFSRGN5JywgWzEwNjZdXSwgWydoYXJkY3knLCBbMTA5OF1dLCBbJ2hhcnJjaXInLCBbMTA1NjhdXSwgWydoYXJyJywgWzg1OTZdXSwgWydoQXJyJywgWzg2NjBdXSwgWydoYXJydycsIFs4NjIxXV0sIFsnSGF0JywgWzk0XV0sIFsnaGJhcicsIFs4NDYzXV0sIFsnSGNpcmMnLCBbMjkyXV0sIFsnaGNpcmMnLCBbMjkzXV0sIFsnaGVhcnRzJywgWzk4MjldXSwgWydoZWFydHN1aXQnLCBbOTgyOV1dLCBbJ2hlbGxpcCcsIFs4MjMwXV0sIFsnaGVyY29uJywgWzg4ODldXSwgWydoZnInLCBbMTIwMTAxXV0sIFsnSGZyJywgWzg0NjBdXSwgWydIaWxiZXJ0U3BhY2UnLCBbODQ1OV1dLCBbJ2hrc2Vhcm93JywgWzEwNTMzXV0sIFsnaGtzd2Fyb3cnLCBbMTA1MzRdXSwgWydob2FycicsIFs4NzAzXV0sIFsnaG9tdGh0JywgWzg3NjNdXSwgWydob29rbGVmdGFycm93JywgWzg2MTddXSwgWydob29rcmlnaHRhcnJvdycsIFs4NjE4XV0sIFsnaG9wZicsIFsxMjAxNTNdXSwgWydIb3BmJywgWzg0NjFdXSwgWydob3JiYXInLCBbODIxM11dLCBbJ0hvcml6b250YWxMaW5lJywgWzk0NzJdXSwgWydoc2NyJywgWzExOTk5N11dLCBbJ0hzY3InLCBbODQ1OV1dLCBbJ2hzbGFzaCcsIFs4NDYzXV0sIFsnSHN0cm9rJywgWzI5NF1dLCBbJ2hzdHJvaycsIFsyOTVdXSwgWydIdW1wRG93bkh1bXAnLCBbODc4Ml1dLCBbJ0h1bXBFcXVhbCcsIFs4NzgzXV0sIFsnaHlidWxsJywgWzgyNTldXSwgWydoeXBoZW4nLCBbODIwOF1dLCBbJ0lhY3V0ZScsIFsyMDVdXSwgWydpYWN1dGUnLCBbMjM3XV0sIFsnaWMnLCBbODI5MV1dLCBbJ0ljaXJjJywgWzIwNl1dLCBbJ2ljaXJjJywgWzIzOF1dLCBbJ0ljeScsIFsxMDQ4XV0sIFsnaWN5JywgWzEwODBdXSwgWydJZG90JywgWzMwNF1dLCBbJ0lFY3knLCBbMTA0NV1dLCBbJ2llY3knLCBbMTA3N11dLCBbJ2lleGNsJywgWzE2MV1dLCBbJ2lmZicsIFs4NjYwXV0sIFsnaWZyJywgWzEyMDEwMl1dLCBbJ0lmcicsIFs4NDY1XV0sIFsnSWdyYXZlJywgWzIwNF1dLCBbJ2lncmF2ZScsIFsyMzZdXSwgWydpaScsIFs4NTIwXV0sIFsnaWlpaW50JywgWzEwNzY0XV0sIFsnaWlpbnQnLCBbODc0OV1dLCBbJ2lpbmZpbicsIFsxMDcxNl1dLCBbJ2lpb3RhJywgWzg0ODldXSwgWydJSmxpZycsIFszMDZdXSwgWydpamxpZycsIFszMDddXSwgWydJbWFjcicsIFsyOThdXSwgWydpbWFjcicsIFsyOTldXSwgWydpbWFnZScsIFs4NDY1XV0sIFsnSW1hZ2luYXJ5SScsIFs4NTIwXV0sIFsnaW1hZ2xpbmUnLCBbODQ2NF1dLCBbJ2ltYWdwYXJ0JywgWzg0NjVdXSwgWydpbWF0aCcsIFszMDVdXSwgWydJbScsIFs4NDY1XV0sIFsnaW1vZicsIFs4ODg3XV0sIFsnaW1wZWQnLCBbNDM3XV0sIFsnSW1wbGllcycsIFs4NjU4XV0sIFsnaW5jYXJlJywgWzg0NTNdXSwgWydpbicsIFs4NzEyXV0sIFsnaW5maW4nLCBbODczNF1dLCBbJ2luZmludGllJywgWzEwNzE3XV0sIFsnaW5vZG90JywgWzMwNV1dLCBbJ2ludGNhbCcsIFs4ODkwXV0sIFsnaW50JywgWzg3NDddXSwgWydJbnQnLCBbODc0OF1dLCBbJ2ludGVnZXJzJywgWzg0ODRdXSwgWydJbnRlZ3JhbCcsIFs4NzQ3XV0sIFsnaW50ZXJjYWwnLCBbODg5MF1dLCBbJ0ludGVyc2VjdGlvbicsIFs4ODk4XV0sIFsnaW50bGFyaGsnLCBbMTA3NzVdXSwgWydpbnRwcm9kJywgWzEwODEyXV0sIFsnSW52aXNpYmxlQ29tbWEnLCBbODI5MV1dLCBbJ0ludmlzaWJsZVRpbWVzJywgWzgyOTBdXSwgWydJT2N5JywgWzEwMjVdXSwgWydpb2N5JywgWzExMDVdXSwgWydJb2dvbicsIFszMDJdXSwgWydpb2dvbicsIFszMDNdXSwgWydJb3BmJywgWzEyMDEyOF1dLCBbJ2lvcGYnLCBbMTIwMTU0XV0sIFsnSW90YScsIFs5MjFdXSwgWydpb3RhJywgWzk1M11dLCBbJ2lwcm9kJywgWzEwODEyXV0sIFsnaXF1ZXN0JywgWzE5MV1dLCBbJ2lzY3InLCBbMTE5OTk4XV0sIFsnSXNjcicsIFs4NDY0XV0sIFsnaXNpbicsIFs4NzEyXV0sIFsnaXNpbmRvdCcsIFs4OTQ5XV0sIFsnaXNpbkUnLCBbODk1M11dLCBbJ2lzaW5zJywgWzg5NDhdXSwgWydpc2luc3YnLCBbODk0N11dLCBbJ2lzaW52JywgWzg3MTJdXSwgWydpdCcsIFs4MjkwXV0sIFsnSXRpbGRlJywgWzI5Nl1dLCBbJ2l0aWxkZScsIFsyOTddXSwgWydJdWtjeScsIFsxMDMwXV0sIFsnaXVrY3knLCBbMTExMF1dLCBbJ0l1bWwnLCBbMjA3XV0sIFsnaXVtbCcsIFsyMzldXSwgWydKY2lyYycsIFszMDhdXSwgWydqY2lyYycsIFszMDldXSwgWydKY3knLCBbMTA0OV1dLCBbJ2pjeScsIFsxMDgxXV0sIFsnSmZyJywgWzEyMDA3N11dLCBbJ2pmcicsIFsxMjAxMDNdXSwgWydqbWF0aCcsIFs1NjddXSwgWydKb3BmJywgWzEyMDEyOV1dLCBbJ2pvcGYnLCBbMTIwMTU1XV0sIFsnSnNjcicsIFsxMTk5NzNdXSwgWydqc2NyJywgWzExOTk5OV1dLCBbJ0pzZXJjeScsIFsxMDMyXV0sIFsnanNlcmN5JywgWzExMTJdXSwgWydKdWtjeScsIFsxMDI4XV0sIFsnanVrY3knLCBbMTEwOF1dLCBbJ0thcHBhJywgWzkyMl1dLCBbJ2thcHBhJywgWzk1NF1dLCBbJ2thcHBhdicsIFsxMDA4XV0sIFsnS2NlZGlsJywgWzMxMF1dLCBbJ2tjZWRpbCcsIFszMTFdXSwgWydLY3knLCBbMTA1MF1dLCBbJ2tjeScsIFsxMDgyXV0sIFsnS2ZyJywgWzEyMDA3OF1dLCBbJ2tmcicsIFsxMjAxMDRdXSwgWydrZ3JlZW4nLCBbMzEyXV0sIFsnS0hjeScsIFsxMDYxXV0sIFsna2hjeScsIFsxMDkzXV0sIFsnS0pjeScsIFsxMDM2XV0sIFsna2pjeScsIFsxMTE2XV0sIFsnS29wZicsIFsxMjAxMzBdXSwgWydrb3BmJywgWzEyMDE1Nl1dLCBbJ0tzY3InLCBbMTE5OTc0XV0sIFsna3NjcicsIFsxMjAwMDBdXSwgWydsQWFycicsIFs4NjY2XV0sIFsnTGFjdXRlJywgWzMxM11dLCBbJ2xhY3V0ZScsIFszMTRdXSwgWydsYWVtcHR5dicsIFsxMDY3Nl1dLCBbJ2xhZ3JhbicsIFs4NDY2XV0sIFsnTGFtYmRhJywgWzkyM11dLCBbJ2xhbWJkYScsIFs5NTVdXSwgWydsYW5nJywgWzEwMjE2XV0sIFsnTGFuZycsIFsxMDIxOF1dLCBbJ2xhbmdkJywgWzEwNjQxXV0sIFsnbGFuZ2xlJywgWzEwMjE2XV0sIFsnbGFwJywgWzEwODg1XV0sIFsnTGFwbGFjZXRyZicsIFs4NDY2XV0sIFsnbGFxdW8nLCBbMTcxXV0sIFsnbGFycmInLCBbODY3Nl1dLCBbJ2xhcnJiZnMnLCBbMTA1MjddXSwgWydsYXJyJywgWzg1OTJdXSwgWydMYXJyJywgWzg2MDZdXSwgWydsQXJyJywgWzg2NTZdXSwgWydsYXJyZnMnLCBbMTA1MjVdXSwgWydsYXJyaGsnLCBbODYxN11dLCBbJ2xhcnJscCcsIFs4NjE5XV0sIFsnbGFycnBsJywgWzEwNTUzXV0sIFsnbGFycnNpbScsIFsxMDYxMV1dLCBbJ2xhcnJ0bCcsIFs4NjEwXV0sIFsnbGF0YWlsJywgWzEwNTIxXV0sIFsnbEF0YWlsJywgWzEwNTIzXV0sIFsnbGF0JywgWzEwOTIzXV0sIFsnbGF0ZScsIFsxMDkyNV1dLCBbJ2xhdGVzJywgWzEwOTI1LCA2NTAyNF1dLCBbJ2xiYXJyJywgWzEwNTA4XV0sIFsnbEJhcnInLCBbMTA1MTBdXSwgWydsYmJyaycsIFsxMDA5OF1dLCBbJ2xicmFjZScsIFsxMjNdXSwgWydsYnJhY2snLCBbOTFdXSwgWydsYnJrZScsIFsxMDYzNV1dLCBbJ2xicmtzbGQnLCBbMTA2MzldXSwgWydsYnJrc2x1JywgWzEwNjM3XV0sIFsnTGNhcm9uJywgWzMxN11dLCBbJ2xjYXJvbicsIFszMThdXSwgWydMY2VkaWwnLCBbMzE1XV0sIFsnbGNlZGlsJywgWzMxNl1dLCBbJ2xjZWlsJywgWzg5NjhdXSwgWydsY3ViJywgWzEyM11dLCBbJ0xjeScsIFsxMDUxXV0sIFsnbGN5JywgWzEwODNdXSwgWydsZGNhJywgWzEwNTUwXV0sIFsnbGRxdW8nLCBbODIyMF1dLCBbJ2xkcXVvcicsIFs4MjIyXV0sIFsnbGRyZGhhcicsIFsxMDU5OV1dLCBbJ2xkcnVzaGFyJywgWzEwNTcxXV0sIFsnbGRzaCcsIFs4NjI2XV0sIFsnbGUnLCBbODgwNF1dLCBbJ2xFJywgWzg4MDZdXSwgWydMZWZ0QW5nbGVCcmFja2V0JywgWzEwMjE2XV0sIFsnTGVmdEFycm93QmFyJywgWzg2NzZdXSwgWydsZWZ0YXJyb3cnLCBbODU5Ml1dLCBbJ0xlZnRBcnJvdycsIFs4NTkyXV0sIFsnTGVmdGFycm93JywgWzg2NTZdXSwgWydMZWZ0QXJyb3dSaWdodEFycm93JywgWzg2NDZdXSwgWydsZWZ0YXJyb3d0YWlsJywgWzg2MTBdXSwgWydMZWZ0Q2VpbGluZycsIFs4OTY4XV0sIFsnTGVmdERvdWJsZUJyYWNrZXQnLCBbMTAyMTRdXSwgWydMZWZ0RG93blRlZVZlY3RvcicsIFsxMDU5M11dLCBbJ0xlZnREb3duVmVjdG9yQmFyJywgWzEwNTg1XV0sIFsnTGVmdERvd25WZWN0b3InLCBbODY0M11dLCBbJ0xlZnRGbG9vcicsIFs4OTcwXV0sIFsnbGVmdGhhcnBvb25kb3duJywgWzg2MzddXSwgWydsZWZ0aGFycG9vbnVwJywgWzg2MzZdXSwgWydsZWZ0bGVmdGFycm93cycsIFs4NjQ3XV0sIFsnbGVmdHJpZ2h0YXJyb3cnLCBbODU5Nl1dLCBbJ0xlZnRSaWdodEFycm93JywgWzg1OTZdXSwgWydMZWZ0cmlnaHRhcnJvdycsIFs4NjYwXV0sIFsnbGVmdHJpZ2h0YXJyb3dzJywgWzg2NDZdXSwgWydsZWZ0cmlnaHRoYXJwb29ucycsIFs4NjUxXV0sIFsnbGVmdHJpZ2h0c3F1aWdhcnJvdycsIFs4NjIxXV0sIFsnTGVmdFJpZ2h0VmVjdG9yJywgWzEwNTc0XV0sIFsnTGVmdFRlZUFycm93JywgWzg2MTJdXSwgWydMZWZ0VGVlJywgWzg4NjddXSwgWydMZWZ0VGVlVmVjdG9yJywgWzEwNTg2XV0sIFsnbGVmdHRocmVldGltZXMnLCBbODkwN11dLCBbJ0xlZnRUcmlhbmdsZUJhcicsIFsxMDcwM11dLCBbJ0xlZnRUcmlhbmdsZScsIFs4ODgyXV0sIFsnTGVmdFRyaWFuZ2xlRXF1YWwnLCBbODg4NF1dLCBbJ0xlZnRVcERvd25WZWN0b3InLCBbMTA1NzddXSwgWydMZWZ0VXBUZWVWZWN0b3InLCBbMTA1OTJdXSwgWydMZWZ0VXBWZWN0b3JCYXInLCBbMTA1ODRdXSwgWydMZWZ0VXBWZWN0b3InLCBbODYzOV1dLCBbJ0xlZnRWZWN0b3JCYXInLCBbMTA1NzhdXSwgWydMZWZ0VmVjdG9yJywgWzg2MzZdXSwgWydsRWcnLCBbMTA4OTFdXSwgWydsZWcnLCBbODkyMl1dLCBbJ2xlcScsIFs4ODA0XV0sIFsnbGVxcScsIFs4ODA2XV0sIFsnbGVxc2xhbnQnLCBbMTA4NzddXSwgWydsZXNjYycsIFsxMDkyMF1dLCBbJ2xlcycsIFsxMDg3N11dLCBbJ2xlc2RvdCcsIFsxMDg3OV1dLCBbJ2xlc2RvdG8nLCBbMTA4ODFdXSwgWydsZXNkb3RvcicsIFsxMDg4M11dLCBbJ2xlc2cnLCBbODkyMiwgNjUwMjRdXSwgWydsZXNnZXMnLCBbMTA4OTldXSwgWydsZXNzYXBwcm94JywgWzEwODg1XV0sIFsnbGVzc2RvdCcsIFs4OTE4XV0sIFsnbGVzc2VxZ3RyJywgWzg5MjJdXSwgWydsZXNzZXFxZ3RyJywgWzEwODkxXV0sIFsnTGVzc0VxdWFsR3JlYXRlcicsIFs4OTIyXV0sIFsnTGVzc0Z1bGxFcXVhbCcsIFs4ODA2XV0sIFsnTGVzc0dyZWF0ZXInLCBbODgyMl1dLCBbJ2xlc3NndHInLCBbODgyMl1dLCBbJ0xlc3NMZXNzJywgWzEwOTEzXV0sIFsnbGVzc3NpbScsIFs4ODE4XV0sIFsnTGVzc1NsYW50RXF1YWwnLCBbMTA4NzddXSwgWydMZXNzVGlsZGUnLCBbODgxOF1dLCBbJ2xmaXNodCcsIFsxMDYyMF1dLCBbJ2xmbG9vcicsIFs4OTcwXV0sIFsnTGZyJywgWzEyMDA3OV1dLCBbJ2xmcicsIFsxMjAxMDVdXSwgWydsZycsIFs4ODIyXV0sIFsnbGdFJywgWzEwODk3XV0sIFsnbEhhcicsIFsxMDU5NF1dLCBbJ2xoYXJkJywgWzg2MzddXSwgWydsaGFydScsIFs4NjM2XV0sIFsnbGhhcnVsJywgWzEwNjAyXV0sIFsnbGhibGsnLCBbOTYwNF1dLCBbJ0xKY3knLCBbMTAzM11dLCBbJ2xqY3knLCBbMTExM11dLCBbJ2xsYXJyJywgWzg2NDddXSwgWydsbCcsIFs4ODEwXV0sIFsnTGwnLCBbODkyMF1dLCBbJ2xsY29ybmVyJywgWzg5OTBdXSwgWydMbGVmdGFycm93JywgWzg2NjZdXSwgWydsbGhhcmQnLCBbMTA2MDNdXSwgWydsbHRyaScsIFs5NzIyXV0sIFsnTG1pZG90JywgWzMxOV1dLCBbJ2xtaWRvdCcsIFszMjBdXSwgWydsbW91c3RhY2hlJywgWzkxMzZdXSwgWydsbW91c3QnLCBbOTEzNl1dLCBbJ2xuYXAnLCBbMTA4ODldXSwgWydsbmFwcHJveCcsIFsxMDg4OV1dLCBbJ2xuZScsIFsxMDg4N11dLCBbJ2xuRScsIFs4ODA4XV0sIFsnbG5lcScsIFsxMDg4N11dLCBbJ2xuZXFxJywgWzg4MDhdXSwgWydsbnNpbScsIFs4OTM0XV0sIFsnbG9hbmcnLCBbMTAyMjBdXSwgWydsb2FycicsIFs4NzAxXV0sIFsnbG9icmsnLCBbMTAyMTRdXSwgWydsb25nbGVmdGFycm93JywgWzEwMjI5XV0sIFsnTG9uZ0xlZnRBcnJvdycsIFsxMDIyOV1dLCBbJ0xvbmdsZWZ0YXJyb3cnLCBbMTAyMzJdXSwgWydsb25nbGVmdHJpZ2h0YXJyb3cnLCBbMTAyMzFdXSwgWydMb25nTGVmdFJpZ2h0QXJyb3cnLCBbMTAyMzFdXSwgWydMb25nbGVmdHJpZ2h0YXJyb3cnLCBbMTAyMzRdXSwgWydsb25nbWFwc3RvJywgWzEwMjM2XV0sIFsnbG9uZ3JpZ2h0YXJyb3cnLCBbMTAyMzBdXSwgWydMb25nUmlnaHRBcnJvdycsIFsxMDIzMF1dLCBbJ0xvbmdyaWdodGFycm93JywgWzEwMjMzXV0sIFsnbG9vcGFycm93bGVmdCcsIFs4NjE5XV0sIFsnbG9vcGFycm93cmlnaHQnLCBbODYyMF1dLCBbJ2xvcGFyJywgWzEwNjI5XV0sIFsnTG9wZicsIFsxMjAxMzFdXSwgWydsb3BmJywgWzEyMDE1N11dLCBbJ2xvcGx1cycsIFsxMDc5N11dLCBbJ2xvdGltZXMnLCBbMTA4MDRdXSwgWydsb3dhc3QnLCBbODcyN11dLCBbJ2xvd2JhcicsIFs5NV1dLCBbJ0xvd2VyTGVmdEFycm93JywgWzg2MDFdXSwgWydMb3dlclJpZ2h0QXJyb3cnLCBbODYwMF1dLCBbJ2xveicsIFs5Njc0XV0sIFsnbG96ZW5nZScsIFs5Njc0XV0sIFsnbG96ZicsIFsxMDczMV1dLCBbJ2xwYXInLCBbNDBdXSwgWydscGFybHQnLCBbMTA2NDNdXSwgWydscmFycicsIFs4NjQ2XV0sIFsnbHJjb3JuZXInLCBbODk5MV1dLCBbJ2xyaGFyJywgWzg2NTFdXSwgWydscmhhcmQnLCBbMTA2MDVdXSwgWydscm0nLCBbODIwNl1dLCBbJ2xydHJpJywgWzg4OTVdXSwgWydsc2FxdW8nLCBbODI0OV1dLCBbJ2xzY3InLCBbMTIwMDAxXV0sIFsnTHNjcicsIFs4NDY2XV0sIFsnbHNoJywgWzg2MjRdXSwgWydMc2gnLCBbODYyNF1dLCBbJ2xzaW0nLCBbODgxOF1dLCBbJ2xzaW1lJywgWzEwODkzXV0sIFsnbHNpbWcnLCBbMTA4OTVdXSwgWydsc3FiJywgWzkxXV0sIFsnbHNxdW8nLCBbODIxNl1dLCBbJ2xzcXVvcicsIFs4MjE4XV0sIFsnTHN0cm9rJywgWzMyMV1dLCBbJ2xzdHJvaycsIFszMjJdXSwgWydsdGNjJywgWzEwOTE4XV0sIFsnbHRjaXInLCBbMTA4NzNdXSwgWydsdCcsIFs2MF1dLCBbJ0xUJywgWzYwXV0sIFsnTHQnLCBbODgxMF1dLCBbJ2x0ZG90JywgWzg5MThdXSwgWydsdGhyZWUnLCBbODkwN11dLCBbJ2x0aW1lcycsIFs4OTA1XV0sIFsnbHRsYXJyJywgWzEwNjE0XV0sIFsnbHRxdWVzdCcsIFsxMDg3NV1dLCBbJ2x0cmknLCBbOTY2N11dLCBbJ2x0cmllJywgWzg4ODRdXSwgWydsdHJpZicsIFs5NjY2XV0sIFsnbHRyUGFyJywgWzEwNjQ2XV0sIFsnbHVyZHNoYXInLCBbMTA1NzBdXSwgWydsdXJ1aGFyJywgWzEwNTk4XV0sIFsnbHZlcnRuZXFxJywgWzg4MDgsIDY1MDI0XV0sIFsnbHZuRScsIFs4ODA4LCA2NTAyNF1dLCBbJ21hY3InLCBbMTc1XV0sIFsnbWFsZScsIFs5Nzk0XV0sIFsnbWFsdCcsIFsxMDAxNl1dLCBbJ21hbHRlc2UnLCBbMTAwMTZdXSwgWydNYXAnLCBbMTA1MDFdXSwgWydtYXAnLCBbODYxNF1dLCBbJ21hcHN0bycsIFs4NjE0XV0sIFsnbWFwc3RvZG93bicsIFs4NjE1XV0sIFsnbWFwc3RvbGVmdCcsIFs4NjEyXV0sIFsnbWFwc3RvdXAnLCBbODYxM11dLCBbJ21hcmtlcicsIFs5NjQ2XV0sIFsnbWNvbW1hJywgWzEwNzkzXV0sIFsnTWN5JywgWzEwNTJdXSwgWydtY3knLCBbMTA4NF1dLCBbJ21kYXNoJywgWzgyMTJdXSwgWydtRERvdCcsIFs4NzYyXV0sIFsnbWVhc3VyZWRhbmdsZScsIFs4NzM3XV0sIFsnTWVkaXVtU3BhY2UnLCBbODI4N11dLCBbJ01lbGxpbnRyZicsIFs4NDk5XV0sIFsnTWZyJywgWzEyMDA4MF1dLCBbJ21mcicsIFsxMjAxMDZdXSwgWydtaG8nLCBbODQ4N11dLCBbJ21pY3JvJywgWzE4MV1dLCBbJ21pZGFzdCcsIFs0Ml1dLCBbJ21pZGNpcicsIFsxMDk5Ml1dLCBbJ21pZCcsIFs4NzM5XV0sIFsnbWlkZG90JywgWzE4M11dLCBbJ21pbnVzYicsIFs4ODYzXV0sIFsnbWludXMnLCBbODcyMl1dLCBbJ21pbnVzZCcsIFs4NzYwXV0sIFsnbWludXNkdScsIFsxMDc5NF1dLCBbJ01pbnVzUGx1cycsIFs4NzIzXV0sIFsnbWxjcCcsIFsxMDk3MV1dLCBbJ21sZHInLCBbODIzMF1dLCBbJ21ucGx1cycsIFs4NzIzXV0sIFsnbW9kZWxzJywgWzg4NzFdXSwgWydNb3BmJywgWzEyMDEzMl1dLCBbJ21vcGYnLCBbMTIwMTU4XV0sIFsnbXAnLCBbODcyM11dLCBbJ21zY3InLCBbMTIwMDAyXV0sIFsnTXNjcicsIFs4NDk5XV0sIFsnbXN0cG9zJywgWzg3NjZdXSwgWydNdScsIFs5MjRdXSwgWydtdScsIFs5NTZdXSwgWydtdWx0aW1hcCcsIFs4ODg4XV0sIFsnbXVtYXAnLCBbODg4OF1dLCBbJ25hYmxhJywgWzg3MTFdXSwgWydOYWN1dGUnLCBbMzIzXV0sIFsnbmFjdXRlJywgWzMyNF1dLCBbJ25hbmcnLCBbODczNiwgODQwMl1dLCBbJ25hcCcsIFs4Nzc3XV0sIFsnbmFwRScsIFsxMDg2NCwgODI0XV0sIFsnbmFwaWQnLCBbODc3OSwgODI0XV0sIFsnbmFwb3MnLCBbMzI5XV0sIFsnbmFwcHJveCcsIFs4Nzc3XV0sIFsnbmF0dXJhbCcsIFs5ODM4XV0sIFsnbmF0dXJhbHMnLCBbODQ2OV1dLCBbJ25hdHVyJywgWzk4MzhdXSwgWyduYnNwJywgWzE2MF1dLCBbJ25idW1wJywgWzg3ODIsIDgyNF1dLCBbJ25idW1wZScsIFs4NzgzLCA4MjRdXSwgWyduY2FwJywgWzEwODE5XV0sIFsnTmNhcm9uJywgWzMyN11dLCBbJ25jYXJvbicsIFszMjhdXSwgWydOY2VkaWwnLCBbMzI1XV0sIFsnbmNlZGlsJywgWzMyNl1dLCBbJ25jb25nJywgWzg3NzVdXSwgWyduY29uZ2RvdCcsIFsxMDg2MSwgODI0XV0sIFsnbmN1cCcsIFsxMDgxOF1dLCBbJ05jeScsIFsxMDUzXV0sIFsnbmN5JywgWzEwODVdXSwgWyduZGFzaCcsIFs4MjExXV0sIFsnbmVhcmhrJywgWzEwNTMyXV0sIFsnbmVhcnInLCBbODU5OV1dLCBbJ25lQXJyJywgWzg2NjNdXSwgWyduZWFycm93JywgWzg1OTldXSwgWyduZScsIFs4ODAwXV0sIFsnbmVkb3QnLCBbODc4NCwgODI0XV0sIFsnTmVnYXRpdmVNZWRpdW1TcGFjZScsIFs4MjAzXV0sIFsnTmVnYXRpdmVUaGlja1NwYWNlJywgWzgyMDNdXSwgWydOZWdhdGl2ZVRoaW5TcGFjZScsIFs4MjAzXV0sIFsnTmVnYXRpdmVWZXJ5VGhpblNwYWNlJywgWzgyMDNdXSwgWyduZXF1aXYnLCBbODgwMl1dLCBbJ25lc2VhcicsIFsxMDUzNl1dLCBbJ25lc2ltJywgWzg3NzAsIDgyNF1dLCBbJ05lc3RlZEdyZWF0ZXJHcmVhdGVyJywgWzg4MTFdXSwgWydOZXN0ZWRMZXNzTGVzcycsIFs4ODEwXV0sIFsnbmV4aXN0JywgWzg3MDhdXSwgWyduZXhpc3RzJywgWzg3MDhdXSwgWydOZnInLCBbMTIwMDgxXV0sIFsnbmZyJywgWzEyMDEwN11dLCBbJ25nRScsIFs4ODA3LCA4MjRdXSwgWyduZ2UnLCBbODgxN11dLCBbJ25nZXEnLCBbODgxN11dLCBbJ25nZXFxJywgWzg4MDcsIDgyNF1dLCBbJ25nZXFzbGFudCcsIFsxMDg3OCwgODI0XV0sIFsnbmdlcycsIFsxMDg3OCwgODI0XV0sIFsnbkdnJywgWzg5MjEsIDgyNF1dLCBbJ25nc2ltJywgWzg4MjFdXSwgWyduR3QnLCBbODgxMSwgODQwMl1dLCBbJ25ndCcsIFs4ODE1XV0sIFsnbmd0cicsIFs4ODE1XV0sIFsnbkd0dicsIFs4ODExLCA4MjRdXSwgWyduaGFycicsIFs4NjIyXV0sIFsnbmhBcnInLCBbODY1NF1dLCBbJ25ocGFyJywgWzEwOTk0XV0sIFsnbmknLCBbODcxNV1dLCBbJ25pcycsIFs4OTU2XV0sIFsnbmlzZCcsIFs4OTU0XV0sIFsnbml2JywgWzg3MTVdXSwgWydOSmN5JywgWzEwMzRdXSwgWyduamN5JywgWzExMTRdXSwgWydubGFycicsIFs4NjAyXV0sIFsnbmxBcnInLCBbODY1M11dLCBbJ25sZHInLCBbODIyOV1dLCBbJ25sRScsIFs4ODA2LCA4MjRdXSwgWydubGUnLCBbODgxNl1dLCBbJ25sZWZ0YXJyb3cnLCBbODYwMl1dLCBbJ25MZWZ0YXJyb3cnLCBbODY1M11dLCBbJ25sZWZ0cmlnaHRhcnJvdycsIFs4NjIyXV0sIFsnbkxlZnRyaWdodGFycm93JywgWzg2NTRdXSwgWydubGVxJywgWzg4MTZdXSwgWydubGVxcScsIFs4ODA2LCA4MjRdXSwgWydubGVxc2xhbnQnLCBbMTA4NzcsIDgyNF1dLCBbJ25sZXMnLCBbMTA4NzcsIDgyNF1dLCBbJ25sZXNzJywgWzg4MTRdXSwgWyduTGwnLCBbODkyMCwgODI0XV0sIFsnbmxzaW0nLCBbODgyMF1dLCBbJ25MdCcsIFs4ODEwLCA4NDAyXV0sIFsnbmx0JywgWzg4MTRdXSwgWydubHRyaScsIFs4OTM4XV0sIFsnbmx0cmllJywgWzg5NDBdXSwgWyduTHR2JywgWzg4MTAsIDgyNF1dLCBbJ25taWQnLCBbODc0MF1dLCBbJ05vQnJlYWsnLCBbODI4OF1dLCBbJ05vbkJyZWFraW5nU3BhY2UnLCBbMTYwXV0sIFsnbm9wZicsIFsxMjAxNTldXSwgWydOb3BmJywgWzg0NjldXSwgWydOb3QnLCBbMTA5ODhdXSwgWydub3QnLCBbMTcyXV0sIFsnTm90Q29uZ3J1ZW50JywgWzg4MDJdXSwgWydOb3RDdXBDYXAnLCBbODgxM11dLCBbJ05vdERvdWJsZVZlcnRpY2FsQmFyJywgWzg3NDJdXSwgWydOb3RFbGVtZW50JywgWzg3MTNdXSwgWydOb3RFcXVhbCcsIFs4ODAwXV0sIFsnTm90RXF1YWxUaWxkZScsIFs4NzcwLCA4MjRdXSwgWydOb3RFeGlzdHMnLCBbODcwOF1dLCBbJ05vdEdyZWF0ZXInLCBbODgxNV1dLCBbJ05vdEdyZWF0ZXJFcXVhbCcsIFs4ODE3XV0sIFsnTm90R3JlYXRlckZ1bGxFcXVhbCcsIFs4ODA3LCA4MjRdXSwgWydOb3RHcmVhdGVyR3JlYXRlcicsIFs4ODExLCA4MjRdXSwgWydOb3RHcmVhdGVyTGVzcycsIFs4ODI1XV0sIFsnTm90R3JlYXRlclNsYW50RXF1YWwnLCBbMTA4NzgsIDgyNF1dLCBbJ05vdEdyZWF0ZXJUaWxkZScsIFs4ODIxXV0sIFsnTm90SHVtcERvd25IdW1wJywgWzg3ODIsIDgyNF1dLCBbJ05vdEh1bXBFcXVhbCcsIFs4NzgzLCA4MjRdXSwgWydub3RpbicsIFs4NzEzXV0sIFsnbm90aW5kb3QnLCBbODk0OSwgODI0XV0sIFsnbm90aW5FJywgWzg5NTMsIDgyNF1dLCBbJ25vdGludmEnLCBbODcxM11dLCBbJ25vdGludmInLCBbODk1MV1dLCBbJ25vdGludmMnLCBbODk1MF1dLCBbJ05vdExlZnRUcmlhbmdsZUJhcicsIFsxMDcwMywgODI0XV0sIFsnTm90TGVmdFRyaWFuZ2xlJywgWzg5MzhdXSwgWydOb3RMZWZ0VHJpYW5nbGVFcXVhbCcsIFs4OTQwXV0sIFsnTm90TGVzcycsIFs4ODE0XV0sIFsnTm90TGVzc0VxdWFsJywgWzg4MTZdXSwgWydOb3RMZXNzR3JlYXRlcicsIFs4ODI0XV0sIFsnTm90TGVzc0xlc3MnLCBbODgxMCwgODI0XV0sIFsnTm90TGVzc1NsYW50RXF1YWwnLCBbMTA4NzcsIDgyNF1dLCBbJ05vdExlc3NUaWxkZScsIFs4ODIwXV0sIFsnTm90TmVzdGVkR3JlYXRlckdyZWF0ZXInLCBbMTA5MTQsIDgyNF1dLCBbJ05vdE5lc3RlZExlc3NMZXNzJywgWzEwOTEzLCA4MjRdXSwgWydub3RuaScsIFs4NzE2XV0sIFsnbm90bml2YScsIFs4NzE2XV0sIFsnbm90bml2YicsIFs4OTU4XV0sIFsnbm90bml2YycsIFs4OTU3XV0sIFsnTm90UHJlY2VkZXMnLCBbODgzMl1dLCBbJ05vdFByZWNlZGVzRXF1YWwnLCBbMTA5MjcsIDgyNF1dLCBbJ05vdFByZWNlZGVzU2xhbnRFcXVhbCcsIFs4OTI4XV0sIFsnTm90UmV2ZXJzZUVsZW1lbnQnLCBbODcxNl1dLCBbJ05vdFJpZ2h0VHJpYW5nbGVCYXInLCBbMTA3MDQsIDgyNF1dLCBbJ05vdFJpZ2h0VHJpYW5nbGUnLCBbODkzOV1dLCBbJ05vdFJpZ2h0VHJpYW5nbGVFcXVhbCcsIFs4OTQxXV0sIFsnTm90U3F1YXJlU3Vic2V0JywgWzg4NDcsIDgyNF1dLCBbJ05vdFNxdWFyZVN1YnNldEVxdWFsJywgWzg5MzBdXSwgWydOb3RTcXVhcmVTdXBlcnNldCcsIFs4ODQ4LCA4MjRdXSwgWydOb3RTcXVhcmVTdXBlcnNldEVxdWFsJywgWzg5MzFdXSwgWydOb3RTdWJzZXQnLCBbODgzNCwgODQwMl1dLCBbJ05vdFN1YnNldEVxdWFsJywgWzg4NDBdXSwgWydOb3RTdWNjZWVkcycsIFs4ODMzXV0sIFsnTm90U3VjY2VlZHNFcXVhbCcsIFsxMDkyOCwgODI0XV0sIFsnTm90U3VjY2VlZHNTbGFudEVxdWFsJywgWzg5MjldXSwgWydOb3RTdWNjZWVkc1RpbGRlJywgWzg4MzEsIDgyNF1dLCBbJ05vdFN1cGVyc2V0JywgWzg4MzUsIDg0MDJdXSwgWydOb3RTdXBlcnNldEVxdWFsJywgWzg4NDFdXSwgWydOb3RUaWxkZScsIFs4NzY5XV0sIFsnTm90VGlsZGVFcXVhbCcsIFs4NzcyXV0sIFsnTm90VGlsZGVGdWxsRXF1YWwnLCBbODc3NV1dLCBbJ05vdFRpbGRlVGlsZGUnLCBbODc3N11dLCBbJ05vdFZlcnRpY2FsQmFyJywgWzg3NDBdXSwgWyducGFyYWxsZWwnLCBbODc0Ml1dLCBbJ25wYXInLCBbODc0Ml1dLCBbJ25wYXJzbCcsIFsxMTAwNSwgODQyMV1dLCBbJ25wYXJ0JywgWzg3MDYsIDgyNF1dLCBbJ25wb2xpbnQnLCBbMTA3NzJdXSwgWyducHInLCBbODgzMl1dLCBbJ25wcmN1ZScsIFs4OTI4XV0sIFsnbnByZWMnLCBbODgzMl1dLCBbJ25wcmVjZXEnLCBbMTA5MjcsIDgyNF1dLCBbJ25wcmUnLCBbMTA5MjcsIDgyNF1dLCBbJ25yYXJyYycsIFsxMDU0NywgODI0XV0sIFsnbnJhcnInLCBbODYwM11dLCBbJ25yQXJyJywgWzg2NTVdXSwgWyducmFycncnLCBbODYwNSwgODI0XV0sIFsnbnJpZ2h0YXJyb3cnLCBbODYwM11dLCBbJ25SaWdodGFycm93JywgWzg2NTVdXSwgWyducnRyaScsIFs4OTM5XV0sIFsnbnJ0cmllJywgWzg5NDFdXSwgWyduc2MnLCBbODgzM11dLCBbJ25zY2N1ZScsIFs4OTI5XV0sIFsnbnNjZScsIFsxMDkyOCwgODI0XV0sIFsnTnNjcicsIFsxMTk5NzddXSwgWyduc2NyJywgWzEyMDAwM11dLCBbJ25zaG9ydG1pZCcsIFs4NzQwXV0sIFsnbnNob3J0cGFyYWxsZWwnLCBbODc0Ml1dLCBbJ25zaW0nLCBbODc2OV1dLCBbJ25zaW1lJywgWzg3NzJdXSwgWyduc2ltZXEnLCBbODc3Ml1dLCBbJ25zbWlkJywgWzg3NDBdXSwgWyduc3BhcicsIFs4NzQyXV0sIFsnbnNxc3ViZScsIFs4OTMwXV0sIFsnbnNxc3VwZScsIFs4OTMxXV0sIFsnbnN1YicsIFs4ODM2XV0sIFsnbnN1YkUnLCBbMTA5NDksIDgyNF1dLCBbJ25zdWJlJywgWzg4NDBdXSwgWyduc3Vic2V0JywgWzg4MzQsIDg0MDJdXSwgWyduc3Vic2V0ZXEnLCBbODg0MF1dLCBbJ25zdWJzZXRlcXEnLCBbMTA5NDksIDgyNF1dLCBbJ25zdWNjJywgWzg4MzNdXSwgWyduc3VjY2VxJywgWzEwOTI4LCA4MjRdXSwgWyduc3VwJywgWzg4MzddXSwgWyduc3VwRScsIFsxMDk1MCwgODI0XV0sIFsnbnN1cGUnLCBbODg0MV1dLCBbJ25zdXBzZXQnLCBbODgzNSwgODQwMl1dLCBbJ25zdXBzZXRlcScsIFs4ODQxXV0sIFsnbnN1cHNldGVxcScsIFsxMDk1MCwgODI0XV0sIFsnbnRnbCcsIFs4ODI1XV0sIFsnTnRpbGRlJywgWzIwOV1dLCBbJ250aWxkZScsIFsyNDFdXSwgWydudGxnJywgWzg4MjRdXSwgWydudHJpYW5nbGVsZWZ0JywgWzg5MzhdXSwgWydudHJpYW5nbGVsZWZ0ZXEnLCBbODk0MF1dLCBbJ250cmlhbmdsZXJpZ2h0JywgWzg5MzldXSwgWydudHJpYW5nbGVyaWdodGVxJywgWzg5NDFdXSwgWydOdScsIFs5MjVdXSwgWydudScsIFs5NTddXSwgWydudW0nLCBbMzVdXSwgWydudW1lcm8nLCBbODQ3MF1dLCBbJ251bXNwJywgWzgxOTldXSwgWydudmFwJywgWzg3ODEsIDg0MDJdXSwgWydudmRhc2gnLCBbODg3Nl1dLCBbJ252RGFzaCcsIFs4ODc3XV0sIFsnblZkYXNoJywgWzg4NzhdXSwgWyduVkRhc2gnLCBbODg3OV1dLCBbJ252Z2UnLCBbODgwNSwgODQwMl1dLCBbJ252Z3QnLCBbNjIsIDg0MDJdXSwgWydudkhhcnInLCBbMTA1MDBdXSwgWydudmluZmluJywgWzEwNzE4XV0sIFsnbnZsQXJyJywgWzEwNDk4XV0sIFsnbnZsZScsIFs4ODA0LCA4NDAyXV0sIFsnbnZsdCcsIFs2MCwgODQwMl1dLCBbJ252bHRyaWUnLCBbODg4NCwgODQwMl1dLCBbJ252ckFycicsIFsxMDQ5OV1dLCBbJ252cnRyaWUnLCBbODg4NSwgODQwMl1dLCBbJ252c2ltJywgWzg3NjQsIDg0MDJdXSwgWydud2FyaGsnLCBbMTA1MzFdXSwgWydud2FycicsIFs4NTk4XV0sIFsnbndBcnInLCBbODY2Ml1dLCBbJ253YXJyb3cnLCBbODU5OF1dLCBbJ253bmVhcicsIFsxMDUzNV1dLCBbJ09hY3V0ZScsIFsyMTFdXSwgWydvYWN1dGUnLCBbMjQzXV0sIFsnb2FzdCcsIFs4ODU5XV0sIFsnT2NpcmMnLCBbMjEyXV0sIFsnb2NpcmMnLCBbMjQ0XV0sIFsnb2NpcicsIFs4ODU4XV0sIFsnT2N5JywgWzEwNTRdXSwgWydvY3knLCBbMTA4Nl1dLCBbJ29kYXNoJywgWzg4NjFdXSwgWydPZGJsYWMnLCBbMzM2XV0sIFsnb2RibGFjJywgWzMzN11dLCBbJ29kaXYnLCBbMTA4MDhdXSwgWydvZG90JywgWzg4NTddXSwgWydvZHNvbGQnLCBbMTA2ODRdXSwgWydPRWxpZycsIFszMzhdXSwgWydvZWxpZycsIFszMzldXSwgWydvZmNpcicsIFsxMDY4N11dLCBbJ09mcicsIFsxMjAwODJdXSwgWydvZnInLCBbMTIwMTA4XV0sIFsnb2dvbicsIFs3MzFdXSwgWydPZ3JhdmUnLCBbMjEwXV0sIFsnb2dyYXZlJywgWzI0Ml1dLCBbJ29ndCcsIFsxMDY4OV1dLCBbJ29oYmFyJywgWzEwNjc3XV0sIFsnb2htJywgWzkzN11dLCBbJ29pbnQnLCBbODc1MF1dLCBbJ29sYXJyJywgWzg2MzRdXSwgWydvbGNpcicsIFsxMDY4Nl1dLCBbJ29sY3Jvc3MnLCBbMTA2ODNdXSwgWydvbGluZScsIFs4MjU0XV0sIFsnb2x0JywgWzEwNjg4XV0sIFsnT21hY3InLCBbMzMyXV0sIFsnb21hY3InLCBbMzMzXV0sIFsnT21lZ2EnLCBbOTM3XV0sIFsnb21lZ2EnLCBbOTY5XV0sIFsnT21pY3JvbicsIFs5MjddXSwgWydvbWljcm9uJywgWzk1OV1dLCBbJ29taWQnLCBbMTA2NzhdXSwgWydvbWludXMnLCBbODg1NF1dLCBbJ09vcGYnLCBbMTIwMTM0XV0sIFsnb29wZicsIFsxMjAxNjBdXSwgWydvcGFyJywgWzEwNjc5XV0sIFsnT3BlbkN1cmx5RG91YmxlUXVvdGUnLCBbODIyMF1dLCBbJ09wZW5DdXJseVF1b3RlJywgWzgyMTZdXSwgWydvcGVycCcsIFsxMDY4MV1dLCBbJ29wbHVzJywgWzg4NTNdXSwgWydvcmFycicsIFs4NjM1XV0sIFsnT3InLCBbMTA4MzZdXSwgWydvcicsIFs4NzQ0XV0sIFsnb3JkJywgWzEwODQ1XV0sIFsnb3JkZXInLCBbODUwMF1dLCBbJ29yZGVyb2YnLCBbODUwMF1dLCBbJ29yZGYnLCBbMTcwXV0sIFsnb3JkbScsIFsxODZdXSwgWydvcmlnb2YnLCBbODg4Nl1dLCBbJ29yb3InLCBbMTA4MzhdXSwgWydvcnNsb3BlJywgWzEwODM5XV0sIFsnb3J2JywgWzEwODQzXV0sIFsnb1MnLCBbOTQxNl1dLCBbJ09zY3InLCBbMTE5OTc4XV0sIFsnb3NjcicsIFs4NTAwXV0sIFsnT3NsYXNoJywgWzIxNl1dLCBbJ29zbGFzaCcsIFsyNDhdXSwgWydvc29sJywgWzg4NTZdXSwgWydPdGlsZGUnLCBbMjEzXV0sIFsnb3RpbGRlJywgWzI0NV1dLCBbJ290aW1lc2FzJywgWzEwODA2XV0sIFsnT3RpbWVzJywgWzEwODA3XV0sIFsnb3RpbWVzJywgWzg4NTVdXSwgWydPdW1sJywgWzIxNF1dLCBbJ291bWwnLCBbMjQ2XV0sIFsnb3ZiYXInLCBbOTAyMV1dLCBbJ092ZXJCYXInLCBbODI1NF1dLCBbJ092ZXJCcmFjZScsIFs5MTgyXV0sIFsnT3ZlckJyYWNrZXQnLCBbOTE0MF1dLCBbJ092ZXJQYXJlbnRoZXNpcycsIFs5MTgwXV0sIFsncGFyYScsIFsxODJdXSwgWydwYXJhbGxlbCcsIFs4NzQxXV0sIFsncGFyJywgWzg3NDFdXSwgWydwYXJzaW0nLCBbMTA5OTVdXSwgWydwYXJzbCcsIFsxMTAwNV1dLCBbJ3BhcnQnLCBbODcwNl1dLCBbJ1BhcnRpYWxEJywgWzg3MDZdXSwgWydQY3knLCBbMTA1NV1dLCBbJ3BjeScsIFsxMDg3XV0sIFsncGVyY250JywgWzM3XV0sIFsncGVyaW9kJywgWzQ2XV0sIFsncGVybWlsJywgWzgyNDBdXSwgWydwZXJwJywgWzg4NjldXSwgWydwZXJ0ZW5rJywgWzgyNDFdXSwgWydQZnInLCBbMTIwMDgzXV0sIFsncGZyJywgWzEyMDEwOV1dLCBbJ1BoaScsIFs5MzRdXSwgWydwaGknLCBbOTY2XV0sIFsncGhpdicsIFs5ODFdXSwgWydwaG1tYXQnLCBbODQ5OV1dLCBbJ3Bob25lJywgWzk3NDJdXSwgWydQaScsIFs5MjhdXSwgWydwaScsIFs5NjBdXSwgWydwaXRjaGZvcmsnLCBbODkxNl1dLCBbJ3BpdicsIFs5ODJdXSwgWydwbGFuY2snLCBbODQ2M11dLCBbJ3BsYW5ja2gnLCBbODQ2Ml1dLCBbJ3BsYW5rdicsIFs4NDYzXV0sIFsncGx1c2FjaXInLCBbMTA3ODddXSwgWydwbHVzYicsIFs4ODYyXV0sIFsncGx1c2NpcicsIFsxMDc4Nl1dLCBbJ3BsdXMnLCBbNDNdXSwgWydwbHVzZG8nLCBbODcyNF1dLCBbJ3BsdXNkdScsIFsxMDc4OV1dLCBbJ3BsdXNlJywgWzEwODY2XV0sIFsnUGx1c01pbnVzJywgWzE3N11dLCBbJ3BsdXNtbicsIFsxNzddXSwgWydwbHVzc2ltJywgWzEwNzkwXV0sIFsncGx1c3R3bycsIFsxMDc5MV1dLCBbJ3BtJywgWzE3N11dLCBbJ1BvaW5jYXJlcGxhbmUnLCBbODQ2MF1dLCBbJ3BvaW50aW50JywgWzEwNzczXV0sIFsncG9wZicsIFsxMjAxNjFdXSwgWydQb3BmJywgWzg0NzNdXSwgWydwb3VuZCcsIFsxNjNdXSwgWydwcmFwJywgWzEwOTM1XV0sIFsnUHInLCBbMTA5MzldXSwgWydwcicsIFs4ODI2XV0sIFsncHJjdWUnLCBbODgyOF1dLCBbJ3ByZWNhcHByb3gnLCBbMTA5MzVdXSwgWydwcmVjJywgWzg4MjZdXSwgWydwcmVjY3VybHllcScsIFs4ODI4XV0sIFsnUHJlY2VkZXMnLCBbODgyNl1dLCBbJ1ByZWNlZGVzRXF1YWwnLCBbMTA5MjddXSwgWydQcmVjZWRlc1NsYW50RXF1YWwnLCBbODgyOF1dLCBbJ1ByZWNlZGVzVGlsZGUnLCBbODgzMF1dLCBbJ3ByZWNlcScsIFsxMDkyN11dLCBbJ3ByZWNuYXBwcm94JywgWzEwOTM3XV0sIFsncHJlY25lcXEnLCBbMTA5MzNdXSwgWydwcmVjbnNpbScsIFs4OTM2XV0sIFsncHJlJywgWzEwOTI3XV0sIFsncHJFJywgWzEwOTMxXV0sIFsncHJlY3NpbScsIFs4ODMwXV0sIFsncHJpbWUnLCBbODI0Ml1dLCBbJ1ByaW1lJywgWzgyNDNdXSwgWydwcmltZXMnLCBbODQ3M11dLCBbJ3BybmFwJywgWzEwOTM3XV0sIFsncHJuRScsIFsxMDkzM11dLCBbJ3BybnNpbScsIFs4OTM2XV0sIFsncHJvZCcsIFs4NzE5XV0sIFsnUHJvZHVjdCcsIFs4NzE5XV0sIFsncHJvZmFsYXInLCBbOTAwNl1dLCBbJ3Byb2ZsaW5lJywgWzg5NzhdXSwgWydwcm9mc3VyZicsIFs4OTc5XV0sIFsncHJvcCcsIFs4NzMzXV0sIFsnUHJvcG9ydGlvbmFsJywgWzg3MzNdXSwgWydQcm9wb3J0aW9uJywgWzg3NTldXSwgWydwcm9wdG8nLCBbODczM11dLCBbJ3Byc2ltJywgWzg4MzBdXSwgWydwcnVyZWwnLCBbODg4MF1dLCBbJ1BzY3InLCBbMTE5OTc5XV0sIFsncHNjcicsIFsxMjAwMDVdXSwgWydQc2knLCBbOTM2XV0sIFsncHNpJywgWzk2OF1dLCBbJ3B1bmNzcCcsIFs4MjAwXV0sIFsnUWZyJywgWzEyMDA4NF1dLCBbJ3FmcicsIFsxMjAxMTBdXSwgWydxaW50JywgWzEwNzY0XV0sIFsncW9wZicsIFsxMjAxNjJdXSwgWydRb3BmJywgWzg0NzRdXSwgWydxcHJpbWUnLCBbODI3OV1dLCBbJ1FzY3InLCBbMTE5OTgwXV0sIFsncXNjcicsIFsxMjAwMDZdXSwgWydxdWF0ZXJuaW9ucycsIFs4NDYxXV0sIFsncXVhdGludCcsIFsxMDc3NF1dLCBbJ3F1ZXN0JywgWzYzXV0sIFsncXVlc3RlcScsIFs4Nzk5XV0sIFsncXVvdCcsIFszNF1dLCBbJ1FVT1QnLCBbMzRdXSwgWydyQWFycicsIFs4NjY3XV0sIFsncmFjZScsIFs4NzY1LCA4MTddXSwgWydSYWN1dGUnLCBbMzQwXV0sIFsncmFjdXRlJywgWzM0MV1dLCBbJ3JhZGljJywgWzg3MzBdXSwgWydyYWVtcHR5dicsIFsxMDY3NV1dLCBbJ3JhbmcnLCBbMTAyMTddXSwgWydSYW5nJywgWzEwMjE5XV0sIFsncmFuZ2QnLCBbMTA2NDJdXSwgWydyYW5nZScsIFsxMDY2MV1dLCBbJ3JhbmdsZScsIFsxMDIxN11dLCBbJ3JhcXVvJywgWzE4N11dLCBbJ3JhcnJhcCcsIFsxMDYxM11dLCBbJ3JhcnJiJywgWzg2NzddXSwgWydyYXJyYmZzJywgWzEwNTI4XV0sIFsncmFycmMnLCBbMTA1NDddXSwgWydyYXJyJywgWzg1OTRdXSwgWydSYXJyJywgWzg2MDhdXSwgWydyQXJyJywgWzg2NThdXSwgWydyYXJyZnMnLCBbMTA1MjZdXSwgWydyYXJyaGsnLCBbODYxOF1dLCBbJ3JhcnJscCcsIFs4NjIwXV0sIFsncmFycnBsJywgWzEwNTY1XV0sIFsncmFycnNpbScsIFsxMDYxMl1dLCBbJ1JhcnJ0bCcsIFsxMDUxOF1dLCBbJ3JhcnJ0bCcsIFs4NjExXV0sIFsncmFycncnLCBbODYwNV1dLCBbJ3JhdGFpbCcsIFsxMDUyMl1dLCBbJ3JBdGFpbCcsIFsxMDUyNF1dLCBbJ3JhdGlvJywgWzg3NThdXSwgWydyYXRpb25hbHMnLCBbODQ3NF1dLCBbJ3JiYXJyJywgWzEwNTA5XV0sIFsnckJhcnInLCBbMTA1MTFdXSwgWydSQmFycicsIFsxMDUxMl1dLCBbJ3JiYnJrJywgWzEwMDk5XV0sIFsncmJyYWNlJywgWzEyNV1dLCBbJ3JicmFjaycsIFs5M11dLCBbJ3JicmtlJywgWzEwNjM2XV0sIFsncmJya3NsZCcsIFsxMDYzOF1dLCBbJ3JicmtzbHUnLCBbMTA2NDBdXSwgWydSY2Fyb24nLCBbMzQ0XV0sIFsncmNhcm9uJywgWzM0NV1dLCBbJ1JjZWRpbCcsIFszNDJdXSwgWydyY2VkaWwnLCBbMzQzXV0sIFsncmNlaWwnLCBbODk2OV1dLCBbJ3JjdWInLCBbMTI1XV0sIFsnUmN5JywgWzEwNTZdXSwgWydyY3knLCBbMTA4OF1dLCBbJ3JkY2EnLCBbMTA1NTFdXSwgWydyZGxkaGFyJywgWzEwNjAxXV0sIFsncmRxdW8nLCBbODIyMV1dLCBbJ3JkcXVvcicsIFs4MjIxXV0sIFsnQ2xvc2VDdXJseURvdWJsZVF1b3RlJywgWzgyMjFdXSwgWydyZHNoJywgWzg2MjddXSwgWydyZWFsJywgWzg0NzZdXSwgWydyZWFsaW5lJywgWzg0NzVdXSwgWydyZWFscGFydCcsIFs4NDc2XV0sIFsncmVhbHMnLCBbODQ3N11dLCBbJ1JlJywgWzg0NzZdXSwgWydyZWN0JywgWzk2NDVdXSwgWydyZWcnLCBbMTc0XV0sIFsnUkVHJywgWzE3NF1dLCBbJ1JldmVyc2VFbGVtZW50JywgWzg3MTVdXSwgWydSZXZlcnNlRXF1aWxpYnJpdW0nLCBbODY1MV1dLCBbJ1JldmVyc2VVcEVxdWlsaWJyaXVtJywgWzEwNjA3XV0sIFsncmZpc2h0JywgWzEwNjIxXV0sIFsncmZsb29yJywgWzg5NzFdXSwgWydyZnInLCBbMTIwMTExXV0sIFsnUmZyJywgWzg0NzZdXSwgWydySGFyJywgWzEwNTk2XV0sIFsncmhhcmQnLCBbODY0MV1dLCBbJ3JoYXJ1JywgWzg2NDBdXSwgWydyaGFydWwnLCBbMTA2MDRdXSwgWydSaG8nLCBbOTI5XV0sIFsncmhvJywgWzk2MV1dLCBbJ3Job3YnLCBbMTAwOV1dLCBbJ1JpZ2h0QW5nbGVCcmFja2V0JywgWzEwMjE3XV0sIFsnUmlnaHRBcnJvd0JhcicsIFs4Njc3XV0sIFsncmlnaHRhcnJvdycsIFs4NTk0XV0sIFsnUmlnaHRBcnJvdycsIFs4NTk0XV0sIFsnUmlnaHRhcnJvdycsIFs4NjU4XV0sIFsnUmlnaHRBcnJvd0xlZnRBcnJvdycsIFs4NjQ0XV0sIFsncmlnaHRhcnJvd3RhaWwnLCBbODYxMV1dLCBbJ1JpZ2h0Q2VpbGluZycsIFs4OTY5XV0sIFsnUmlnaHREb3VibGVCcmFja2V0JywgWzEwMjE1XV0sIFsnUmlnaHREb3duVGVlVmVjdG9yJywgWzEwNTg5XV0sIFsnUmlnaHREb3duVmVjdG9yQmFyJywgWzEwNTgxXV0sIFsnUmlnaHREb3duVmVjdG9yJywgWzg2NDJdXSwgWydSaWdodEZsb29yJywgWzg5NzFdXSwgWydyaWdodGhhcnBvb25kb3duJywgWzg2NDFdXSwgWydyaWdodGhhcnBvb251cCcsIFs4NjQwXV0sIFsncmlnaHRsZWZ0YXJyb3dzJywgWzg2NDRdXSwgWydyaWdodGxlZnRoYXJwb29ucycsIFs4NjUyXV0sIFsncmlnaHRyaWdodGFycm93cycsIFs4NjQ5XV0sIFsncmlnaHRzcXVpZ2Fycm93JywgWzg2MDVdXSwgWydSaWdodFRlZUFycm93JywgWzg2MTRdXSwgWydSaWdodFRlZScsIFs4ODY2XV0sIFsnUmlnaHRUZWVWZWN0b3InLCBbMTA1ODddXSwgWydyaWdodHRocmVldGltZXMnLCBbODkwOF1dLCBbJ1JpZ2h0VHJpYW5nbGVCYXInLCBbMTA3MDRdXSwgWydSaWdodFRyaWFuZ2xlJywgWzg4ODNdXSwgWydSaWdodFRyaWFuZ2xlRXF1YWwnLCBbODg4NV1dLCBbJ1JpZ2h0VXBEb3duVmVjdG9yJywgWzEwNTc1XV0sIFsnUmlnaHRVcFRlZVZlY3RvcicsIFsxMDU4OF1dLCBbJ1JpZ2h0VXBWZWN0b3JCYXInLCBbMTA1ODBdXSwgWydSaWdodFVwVmVjdG9yJywgWzg2MzhdXSwgWydSaWdodFZlY3RvckJhcicsIFsxMDU3OV1dLCBbJ1JpZ2h0VmVjdG9yJywgWzg2NDBdXSwgWydyaW5nJywgWzczMF1dLCBbJ3Jpc2luZ2RvdHNlcScsIFs4Nzg3XV0sIFsncmxhcnInLCBbODY0NF1dLCBbJ3JsaGFyJywgWzg2NTJdXSwgWydybG0nLCBbODIwN11dLCBbJ3Jtb3VzdGFjaGUnLCBbOTEzN11dLCBbJ3Jtb3VzdCcsIFs5MTM3XV0sIFsncm5taWQnLCBbMTA5OTBdXSwgWydyb2FuZycsIFsxMDIyMV1dLCBbJ3JvYXJyJywgWzg3MDJdXSwgWydyb2JyaycsIFsxMDIxNV1dLCBbJ3JvcGFyJywgWzEwNjMwXV0sIFsncm9wZicsIFsxMjAxNjNdXSwgWydSb3BmJywgWzg0NzddXSwgWydyb3BsdXMnLCBbMTA3OThdXSwgWydyb3RpbWVzJywgWzEwODA1XV0sIFsnUm91bmRJbXBsaWVzJywgWzEwNjA4XV0sIFsncnBhcicsIFs0MV1dLCBbJ3JwYXJndCcsIFsxMDY0NF1dLCBbJ3JwcG9saW50JywgWzEwNzcwXV0sIFsncnJhcnInLCBbODY0OV1dLCBbJ1JyaWdodGFycm93JywgWzg2NjddXSwgWydyc2FxdW8nLCBbODI1MF1dLCBbJ3JzY3InLCBbMTIwMDA3XV0sIFsnUnNjcicsIFs4NDc1XV0sIFsncnNoJywgWzg2MjVdXSwgWydSc2gnLCBbODYyNV1dLCBbJ3JzcWInLCBbOTNdXSwgWydyc3F1bycsIFs4MjE3XV0sIFsncnNxdW9yJywgWzgyMTddXSwgWydDbG9zZUN1cmx5UXVvdGUnLCBbODIxN11dLCBbJ3J0aHJlZScsIFs4OTA4XV0sIFsncnRpbWVzJywgWzg5MDZdXSwgWydydHJpJywgWzk2NTddXSwgWydydHJpZScsIFs4ODg1XV0sIFsncnRyaWYnLCBbOTY1Nl1dLCBbJ3J0cmlsdHJpJywgWzEwNzAyXV0sIFsnUnVsZURlbGF5ZWQnLCBbMTA3NDBdXSwgWydydWx1aGFyJywgWzEwNjAwXV0sIFsncngnLCBbODQ3OF1dLCBbJ1NhY3V0ZScsIFszNDZdXSwgWydzYWN1dGUnLCBbMzQ3XV0sIFsnc2JxdW8nLCBbODIxOF1dLCBbJ3NjYXAnLCBbMTA5MzZdXSwgWydTY2Fyb24nLCBbMzUyXV0sIFsnc2Nhcm9uJywgWzM1M11dLCBbJ1NjJywgWzEwOTQwXV0sIFsnc2MnLCBbODgyN11dLCBbJ3NjY3VlJywgWzg4MjldXSwgWydzY2UnLCBbMTA5MjhdXSwgWydzY0UnLCBbMTA5MzJdXSwgWydTY2VkaWwnLCBbMzUwXV0sIFsnc2NlZGlsJywgWzM1MV1dLCBbJ1NjaXJjJywgWzM0OF1dLCBbJ3NjaXJjJywgWzM0OV1dLCBbJ3NjbmFwJywgWzEwOTM4XV0sIFsnc2NuRScsIFsxMDkzNF1dLCBbJ3NjbnNpbScsIFs4OTM3XV0sIFsnc2Nwb2xpbnQnLCBbMTA3NzFdXSwgWydzY3NpbScsIFs4ODMxXV0sIFsnU2N5JywgWzEwNTddXSwgWydzY3knLCBbMTA4OV1dLCBbJ3Nkb3RiJywgWzg4NjVdXSwgWydzZG90JywgWzg5MDFdXSwgWydzZG90ZScsIFsxMDg1NF1dLCBbJ3NlYXJoaycsIFsxMDUzM11dLCBbJ3NlYXJyJywgWzg2MDBdXSwgWydzZUFycicsIFs4NjY0XV0sIFsnc2VhcnJvdycsIFs4NjAwXV0sIFsnc2VjdCcsIFsxNjddXSwgWydzZW1pJywgWzU5XV0sIFsnc2Vzd2FyJywgWzEwNTM3XV0sIFsnc2V0bWludXMnLCBbODcyNl1dLCBbJ3NldG1uJywgWzg3MjZdXSwgWydzZXh0JywgWzEwMDM4XV0sIFsnU2ZyJywgWzEyMDA4Nl1dLCBbJ3NmcicsIFsxMjAxMTJdXSwgWydzZnJvd24nLCBbODk5NF1dLCBbJ3NoYXJwJywgWzk4MzldXSwgWydTSENIY3knLCBbMTA2NV1dLCBbJ3NoY2hjeScsIFsxMDk3XV0sIFsnU0hjeScsIFsxMDY0XV0sIFsnc2hjeScsIFsxMDk2XV0sIFsnU2hvcnREb3duQXJyb3cnLCBbODU5NV1dLCBbJ1Nob3J0TGVmdEFycm93JywgWzg1OTJdXSwgWydzaG9ydG1pZCcsIFs4NzM5XV0sIFsnc2hvcnRwYXJhbGxlbCcsIFs4NzQxXV0sIFsnU2hvcnRSaWdodEFycm93JywgWzg1OTRdXSwgWydTaG9ydFVwQXJyb3cnLCBbODU5M11dLCBbJ3NoeScsIFsxNzNdXSwgWydTaWdtYScsIFs5MzFdXSwgWydzaWdtYScsIFs5NjNdXSwgWydzaWdtYWYnLCBbOTYyXV0sIFsnc2lnbWF2JywgWzk2Ml1dLCBbJ3NpbScsIFs4NzY0XV0sIFsnc2ltZG90JywgWzEwODU4XV0sIFsnc2ltZScsIFs4NzcxXV0sIFsnc2ltZXEnLCBbODc3MV1dLCBbJ3NpbWcnLCBbMTA5MTBdXSwgWydzaW1nRScsIFsxMDkxMl1dLCBbJ3NpbWwnLCBbMTA5MDldXSwgWydzaW1sRScsIFsxMDkxMV1dLCBbJ3NpbW5lJywgWzg3NzRdXSwgWydzaW1wbHVzJywgWzEwNzg4XV0sIFsnc2ltcmFycicsIFsxMDYxMF1dLCBbJ3NsYXJyJywgWzg1OTJdXSwgWydTbWFsbENpcmNsZScsIFs4NzI4XV0sIFsnc21hbGxzZXRtaW51cycsIFs4NzI2XV0sIFsnc21hc2hwJywgWzEwODAzXV0sIFsnc21lcGFyc2wnLCBbMTA3MjRdXSwgWydzbWlkJywgWzg3MzldXSwgWydzbWlsZScsIFs4OTk1XV0sIFsnc210JywgWzEwOTIyXV0sIFsnc210ZScsIFsxMDkyNF1dLCBbJ3NtdGVzJywgWzEwOTI0LCA2NTAyNF1dLCBbJ1NPRlRjeScsIFsxMDY4XV0sIFsnc29mdGN5JywgWzExMDBdXSwgWydzb2xiYXInLCBbOTAyM11dLCBbJ3NvbGInLCBbMTA2OTJdXSwgWydzb2wnLCBbNDddXSwgWydTb3BmJywgWzEyMDEzOF1dLCBbJ3NvcGYnLCBbMTIwMTY0XV0sIFsnc3BhZGVzJywgWzk4MjRdXSwgWydzcGFkZXN1aXQnLCBbOTgyNF1dLCBbJ3NwYXInLCBbODc0MV1dLCBbJ3NxY2FwJywgWzg4NTFdXSwgWydzcWNhcHMnLCBbODg1MSwgNjUwMjRdXSwgWydzcWN1cCcsIFs4ODUyXV0sIFsnc3FjdXBzJywgWzg4NTIsIDY1MDI0XV0sIFsnU3FydCcsIFs4NzMwXV0sIFsnc3FzdWInLCBbODg0N11dLCBbJ3Nxc3ViZScsIFs4ODQ5XV0sIFsnc3FzdWJzZXQnLCBbODg0N11dLCBbJ3Nxc3Vic2V0ZXEnLCBbODg0OV1dLCBbJ3Nxc3VwJywgWzg4NDhdXSwgWydzcXN1cGUnLCBbODg1MF1dLCBbJ3Nxc3Vwc2V0JywgWzg4NDhdXSwgWydzcXN1cHNldGVxJywgWzg4NTBdXSwgWydzcXVhcmUnLCBbOTYzM11dLCBbJ1NxdWFyZScsIFs5NjMzXV0sIFsnU3F1YXJlSW50ZXJzZWN0aW9uJywgWzg4NTFdXSwgWydTcXVhcmVTdWJzZXQnLCBbODg0N11dLCBbJ1NxdWFyZVN1YnNldEVxdWFsJywgWzg4NDldXSwgWydTcXVhcmVTdXBlcnNldCcsIFs4ODQ4XV0sIFsnU3F1YXJlU3VwZXJzZXRFcXVhbCcsIFs4ODUwXV0sIFsnU3F1YXJlVW5pb24nLCBbODg1Ml1dLCBbJ3NxdWFyZicsIFs5NjQyXV0sIFsnc3F1JywgWzk2MzNdXSwgWydzcXVmJywgWzk2NDJdXSwgWydzcmFycicsIFs4NTk0XV0sIFsnU3NjcicsIFsxMTk5ODJdXSwgWydzc2NyJywgWzEyMDAwOF1dLCBbJ3NzZXRtbicsIFs4NzI2XV0sIFsnc3NtaWxlJywgWzg5OTVdXSwgWydzc3RhcmYnLCBbODkwMl1dLCBbJ1N0YXInLCBbODkwMl1dLCBbJ3N0YXInLCBbOTczNF1dLCBbJ3N0YXJmJywgWzk3MzNdXSwgWydzdHJhaWdodGVwc2lsb24nLCBbMTAxM11dLCBbJ3N0cmFpZ2h0cGhpJywgWzk4MV1dLCBbJ3N0cm5zJywgWzE3NV1dLCBbJ3N1YicsIFs4ODM0XV0sIFsnU3ViJywgWzg5MTJdXSwgWydzdWJkb3QnLCBbMTA5NDFdXSwgWydzdWJFJywgWzEwOTQ5XV0sIFsnc3ViZScsIFs4ODM4XV0sIFsnc3ViZWRvdCcsIFsxMDk0N11dLCBbJ3N1Ym11bHQnLCBbMTA5NDVdXSwgWydzdWJuRScsIFsxMDk1NV1dLCBbJ3N1Ym5lJywgWzg4NDJdXSwgWydzdWJwbHVzJywgWzEwOTQzXV0sIFsnc3VicmFycicsIFsxMDYxN11dLCBbJ3N1YnNldCcsIFs4ODM0XV0sIFsnU3Vic2V0JywgWzg5MTJdXSwgWydzdWJzZXRlcScsIFs4ODM4XV0sIFsnc3Vic2V0ZXFxJywgWzEwOTQ5XV0sIFsnU3Vic2V0RXF1YWwnLCBbODgzOF1dLCBbJ3N1YnNldG5lcScsIFs4ODQyXV0sIFsnc3Vic2V0bmVxcScsIFsxMDk1NV1dLCBbJ3N1YnNpbScsIFsxMDk1MV1dLCBbJ3N1YnN1YicsIFsxMDk2NV1dLCBbJ3N1YnN1cCcsIFsxMDk2M11dLCBbJ3N1Y2NhcHByb3gnLCBbMTA5MzZdXSwgWydzdWNjJywgWzg4MjddXSwgWydzdWNjY3VybHllcScsIFs4ODI5XV0sIFsnU3VjY2VlZHMnLCBbODgyN11dLCBbJ1N1Y2NlZWRzRXF1YWwnLCBbMTA5MjhdXSwgWydTdWNjZWVkc1NsYW50RXF1YWwnLCBbODgyOV1dLCBbJ1N1Y2NlZWRzVGlsZGUnLCBbODgzMV1dLCBbJ3N1Y2NlcScsIFsxMDkyOF1dLCBbJ3N1Y2NuYXBwcm94JywgWzEwOTM4XV0sIFsnc3VjY25lcXEnLCBbMTA5MzRdXSwgWydzdWNjbnNpbScsIFs4OTM3XV0sIFsnc3VjY3NpbScsIFs4ODMxXV0sIFsnU3VjaFRoYXQnLCBbODcxNV1dLCBbJ3N1bScsIFs4NzIxXV0sIFsnU3VtJywgWzg3MjFdXSwgWydzdW5nJywgWzk4MzRdXSwgWydzdXAxJywgWzE4NV1dLCBbJ3N1cDInLCBbMTc4XV0sIFsnc3VwMycsIFsxNzldXSwgWydzdXAnLCBbODgzNV1dLCBbJ1N1cCcsIFs4OTEzXV0sIFsnc3VwZG90JywgWzEwOTQyXV0sIFsnc3VwZHN1YicsIFsxMDk2OF1dLCBbJ3N1cEUnLCBbMTA5NTBdXSwgWydzdXBlJywgWzg4MzldXSwgWydzdXBlZG90JywgWzEwOTQ4XV0sIFsnU3VwZXJzZXQnLCBbODgzNV1dLCBbJ1N1cGVyc2V0RXF1YWwnLCBbODgzOV1dLCBbJ3N1cGhzb2wnLCBbMTAxODVdXSwgWydzdXBoc3ViJywgWzEwOTY3XV0sIFsnc3VwbGFycicsIFsxMDYxOV1dLCBbJ3N1cG11bHQnLCBbMTA5NDZdXSwgWydzdXBuRScsIFsxMDk1Nl1dLCBbJ3N1cG5lJywgWzg4NDNdXSwgWydzdXBwbHVzJywgWzEwOTQ0XV0sIFsnc3Vwc2V0JywgWzg4MzVdXSwgWydTdXBzZXQnLCBbODkxM11dLCBbJ3N1cHNldGVxJywgWzg4MzldXSwgWydzdXBzZXRlcXEnLCBbMTA5NTBdXSwgWydzdXBzZXRuZXEnLCBbODg0M11dLCBbJ3N1cHNldG5lcXEnLCBbMTA5NTZdXSwgWydzdXBzaW0nLCBbMTA5NTJdXSwgWydzdXBzdWInLCBbMTA5NjRdXSwgWydzdXBzdXAnLCBbMTA5NjZdXSwgWydzd2FyaGsnLCBbMTA1MzRdXSwgWydzd2FycicsIFs4NjAxXV0sIFsnc3dBcnInLCBbODY2NV1dLCBbJ3N3YXJyb3cnLCBbODYwMV1dLCBbJ3N3bndhcicsIFsxMDUzOF1dLCBbJ3N6bGlnJywgWzIyM11dLCBbJ1RhYicsIFs5XV0sIFsndGFyZ2V0JywgWzg5ODJdXSwgWydUYXUnLCBbOTMyXV0sIFsndGF1JywgWzk2NF1dLCBbJ3RicmsnLCBbOTE0MF1dLCBbJ1RjYXJvbicsIFszNTZdXSwgWyd0Y2Fyb24nLCBbMzU3XV0sIFsnVGNlZGlsJywgWzM1NF1dLCBbJ3RjZWRpbCcsIFszNTVdXSwgWydUY3knLCBbMTA1OF1dLCBbJ3RjeScsIFsxMDkwXV0sIFsndGRvdCcsIFs4NDExXV0sIFsndGVscmVjJywgWzg5ODFdXSwgWydUZnInLCBbMTIwMDg3XV0sIFsndGZyJywgWzEyMDExM11dLCBbJ3RoZXJlNCcsIFs4NzU2XV0sIFsndGhlcmVmb3JlJywgWzg3NTZdXSwgWydUaGVyZWZvcmUnLCBbODc1Nl1dLCBbJ1RoZXRhJywgWzkyMF1dLCBbJ3RoZXRhJywgWzk1Ml1dLCBbJ3RoZXRhc3ltJywgWzk3N11dLCBbJ3RoZXRhdicsIFs5NzddXSwgWyd0aGlja2FwcHJveCcsIFs4Nzc2XV0sIFsndGhpY2tzaW0nLCBbODc2NF1dLCBbJ1RoaWNrU3BhY2UnLCBbODI4NywgODIwMl1dLCBbJ1RoaW5TcGFjZScsIFs4MjAxXV0sIFsndGhpbnNwJywgWzgyMDFdXSwgWyd0aGthcCcsIFs4Nzc2XV0sIFsndGhrc2ltJywgWzg3NjRdXSwgWydUSE9STicsIFsyMjJdXSwgWyd0aG9ybicsIFsyNTRdXSwgWyd0aWxkZScsIFs3MzJdXSwgWydUaWxkZScsIFs4NzY0XV0sIFsnVGlsZGVFcXVhbCcsIFs4NzcxXV0sIFsnVGlsZGVGdWxsRXF1YWwnLCBbODc3M11dLCBbJ1RpbGRlVGlsZGUnLCBbODc3Nl1dLCBbJ3RpbWVzYmFyJywgWzEwODAxXV0sIFsndGltZXNiJywgWzg4NjRdXSwgWyd0aW1lcycsIFsyMTVdXSwgWyd0aW1lc2QnLCBbMTA4MDBdXSwgWyd0aW50JywgWzg3NDldXSwgWyd0b2VhJywgWzEwNTM2XV0sIFsndG9wYm90JywgWzkwMTRdXSwgWyd0b3BjaXInLCBbMTA5OTNdXSwgWyd0b3AnLCBbODg2OF1dLCBbJ1RvcGYnLCBbMTIwMTM5XV0sIFsndG9wZicsIFsxMjAxNjVdXSwgWyd0b3Bmb3JrJywgWzEwOTcwXV0sIFsndG9zYScsIFsxMDUzN11dLCBbJ3RwcmltZScsIFs4MjQ0XV0sIFsndHJhZGUnLCBbODQ4Ml1dLCBbJ1RSQURFJywgWzg0ODJdXSwgWyd0cmlhbmdsZScsIFs5NjUzXV0sIFsndHJpYW5nbGVkb3duJywgWzk2NjNdXSwgWyd0cmlhbmdsZWxlZnQnLCBbOTY2N11dLCBbJ3RyaWFuZ2xlbGVmdGVxJywgWzg4ODRdXSwgWyd0cmlhbmdsZXEnLCBbODc5Nl1dLCBbJ3RyaWFuZ2xlcmlnaHQnLCBbOTY1N11dLCBbJ3RyaWFuZ2xlcmlnaHRlcScsIFs4ODg1XV0sIFsndHJpZG90JywgWzk3MDhdXSwgWyd0cmllJywgWzg3OTZdXSwgWyd0cmltaW51cycsIFsxMDgxMF1dLCBbJ1RyaXBsZURvdCcsIFs4NDExXV0sIFsndHJpcGx1cycsIFsxMDgwOV1dLCBbJ3RyaXNiJywgWzEwNzAxXV0sIFsndHJpdGltZScsIFsxMDgxMV1dLCBbJ3RycGV6aXVtJywgWzkxODZdXSwgWydUc2NyJywgWzExOTk4M11dLCBbJ3RzY3InLCBbMTIwMDA5XV0sIFsnVFNjeScsIFsxMDYyXV0sIFsndHNjeScsIFsxMDk0XV0sIFsnVFNIY3knLCBbMTAzNV1dLCBbJ3RzaGN5JywgWzExMTVdXSwgWydUc3Ryb2snLCBbMzU4XV0sIFsndHN0cm9rJywgWzM1OV1dLCBbJ3R3aXh0JywgWzg4MTJdXSwgWyd0d29oZWFkbGVmdGFycm93JywgWzg2MDZdXSwgWyd0d29oZWFkcmlnaHRhcnJvdycsIFs4NjA4XV0sIFsnVWFjdXRlJywgWzIxOF1dLCBbJ3VhY3V0ZScsIFsyNTBdXSwgWyd1YXJyJywgWzg1OTNdXSwgWydVYXJyJywgWzg2MDddXSwgWyd1QXJyJywgWzg2NTddXSwgWydVYXJyb2NpcicsIFsxMDU2OV1dLCBbJ1VicmN5JywgWzEwMzhdXSwgWyd1YnJjeScsIFsxMTE4XV0sIFsnVWJyZXZlJywgWzM2NF1dLCBbJ3VicmV2ZScsIFszNjVdXSwgWydVY2lyYycsIFsyMTldXSwgWyd1Y2lyYycsIFsyNTFdXSwgWydVY3knLCBbMTA1OV1dLCBbJ3VjeScsIFsxMDkxXV0sIFsndWRhcnInLCBbODY0NV1dLCBbJ1VkYmxhYycsIFszNjhdXSwgWyd1ZGJsYWMnLCBbMzY5XV0sIFsndWRoYXInLCBbMTA2MDZdXSwgWyd1ZmlzaHQnLCBbMTA2MjJdXSwgWydVZnInLCBbMTIwMDg4XV0sIFsndWZyJywgWzEyMDExNF1dLCBbJ1VncmF2ZScsIFsyMTddXSwgWyd1Z3JhdmUnLCBbMjQ5XV0sIFsndUhhcicsIFsxMDU5NV1dLCBbJ3VoYXJsJywgWzg2MzldXSwgWyd1aGFycicsIFs4NjM4XV0sIFsndWhibGsnLCBbOTYwMF1dLCBbJ3VsY29ybicsIFs4OTg4XV0sIFsndWxjb3JuZXInLCBbODk4OF1dLCBbJ3VsY3JvcCcsIFs4OTc1XV0sIFsndWx0cmknLCBbOTcyMF1dLCBbJ1VtYWNyJywgWzM2Ml1dLCBbJ3VtYWNyJywgWzM2M11dLCBbJ3VtbCcsIFsxNjhdXSwgWydVbmRlckJhcicsIFs5NV1dLCBbJ1VuZGVyQnJhY2UnLCBbOTE4M11dLCBbJ1VuZGVyQnJhY2tldCcsIFs5MTQxXV0sIFsnVW5kZXJQYXJlbnRoZXNpcycsIFs5MTgxXV0sIFsnVW5pb24nLCBbODg5OV1dLCBbJ1VuaW9uUGx1cycsIFs4ODQ2XV0sIFsnVW9nb24nLCBbMzcwXV0sIFsndW9nb24nLCBbMzcxXV0sIFsnVW9wZicsIFsxMjAxNDBdXSwgWyd1b3BmJywgWzEyMDE2Nl1dLCBbJ1VwQXJyb3dCYXInLCBbMTA1MTRdXSwgWyd1cGFycm93JywgWzg1OTNdXSwgWydVcEFycm93JywgWzg1OTNdXSwgWydVcGFycm93JywgWzg2NTddXSwgWydVcEFycm93RG93bkFycm93JywgWzg2NDVdXSwgWyd1cGRvd25hcnJvdycsIFs4NTk3XV0sIFsnVXBEb3duQXJyb3cnLCBbODU5N11dLCBbJ1VwZG93bmFycm93JywgWzg2NjFdXSwgWydVcEVxdWlsaWJyaXVtJywgWzEwNjA2XV0sIFsndXBoYXJwb29ubGVmdCcsIFs4NjM5XV0sIFsndXBoYXJwb29ucmlnaHQnLCBbODYzOF1dLCBbJ3VwbHVzJywgWzg4NDZdXSwgWydVcHBlckxlZnRBcnJvdycsIFs4NTk4XV0sIFsnVXBwZXJSaWdodEFycm93JywgWzg1OTldXSwgWyd1cHNpJywgWzk2NV1dLCBbJ1Vwc2knLCBbOTc4XV0sIFsndXBzaWgnLCBbOTc4XV0sIFsnVXBzaWxvbicsIFs5MzNdXSwgWyd1cHNpbG9uJywgWzk2NV1dLCBbJ1VwVGVlQXJyb3cnLCBbODYxM11dLCBbJ1VwVGVlJywgWzg4NjldXSwgWyd1cHVwYXJyb3dzJywgWzg2NDhdXSwgWyd1cmNvcm4nLCBbODk4OV1dLCBbJ3VyY29ybmVyJywgWzg5ODldXSwgWyd1cmNyb3AnLCBbODk3NF1dLCBbJ1VyaW5nJywgWzM2Nl1dLCBbJ3VyaW5nJywgWzM2N11dLCBbJ3VydHJpJywgWzk3MjFdXSwgWydVc2NyJywgWzExOTk4NF1dLCBbJ3VzY3InLCBbMTIwMDEwXV0sIFsndXRkb3QnLCBbODk0NF1dLCBbJ1V0aWxkZScsIFszNjBdXSwgWyd1dGlsZGUnLCBbMzYxXV0sIFsndXRyaScsIFs5NjUzXV0sIFsndXRyaWYnLCBbOTY1Ml1dLCBbJ3V1YXJyJywgWzg2NDhdXSwgWydVdW1sJywgWzIyMF1dLCBbJ3V1bWwnLCBbMjUyXV0sIFsndXdhbmdsZScsIFsxMDY2M11dLCBbJ3ZhbmdydCcsIFsxMDY1Ml1dLCBbJ3ZhcmVwc2lsb24nLCBbMTAxM11dLCBbJ3ZhcmthcHBhJywgWzEwMDhdXSwgWyd2YXJub3RoaW5nJywgWzg3MDldXSwgWyd2YXJwaGknLCBbOTgxXV0sIFsndmFycGknLCBbOTgyXV0sIFsndmFycHJvcHRvJywgWzg3MzNdXSwgWyd2YXJyJywgWzg1OTddXSwgWyd2QXJyJywgWzg2NjFdXSwgWyd2YXJyaG8nLCBbMTAwOV1dLCBbJ3ZhcnNpZ21hJywgWzk2Ml1dLCBbJ3ZhcnN1YnNldG5lcScsIFs4ODQyLCA2NTAyNF1dLCBbJ3ZhcnN1YnNldG5lcXEnLCBbMTA5NTUsIDY1MDI0XV0sIFsndmFyc3Vwc2V0bmVxJywgWzg4NDMsIDY1MDI0XV0sIFsndmFyc3Vwc2V0bmVxcScsIFsxMDk1NiwgNjUwMjRdXSwgWyd2YXJ0aGV0YScsIFs5NzddXSwgWyd2YXJ0cmlhbmdsZWxlZnQnLCBbODg4Ml1dLCBbJ3ZhcnRyaWFuZ2xlcmlnaHQnLCBbODg4M11dLCBbJ3ZCYXInLCBbMTA5ODRdXSwgWydWYmFyJywgWzEwOTg3XV0sIFsndkJhcnYnLCBbMTA5ODVdXSwgWydWY3knLCBbMTA0Ml1dLCBbJ3ZjeScsIFsxMDc0XV0sIFsndmRhc2gnLCBbODg2Nl1dLCBbJ3ZEYXNoJywgWzg4NzJdXSwgWydWZGFzaCcsIFs4ODczXV0sIFsnVkRhc2gnLCBbODg3NV1dLCBbJ1ZkYXNobCcsIFsxMDk4Ml1dLCBbJ3ZlZWJhcicsIFs4ODkxXV0sIFsndmVlJywgWzg3NDRdXSwgWydWZWUnLCBbODg5N11dLCBbJ3ZlZWVxJywgWzg3OTRdXSwgWyd2ZWxsaXAnLCBbODk0Ml1dLCBbJ3ZlcmJhcicsIFsxMjRdXSwgWydWZXJiYXInLCBbODIxNF1dLCBbJ3ZlcnQnLCBbMTI0XV0sIFsnVmVydCcsIFs4MjE0XV0sIFsnVmVydGljYWxCYXInLCBbODczOV1dLCBbJ1ZlcnRpY2FsTGluZScsIFsxMjRdXSwgWydWZXJ0aWNhbFNlcGFyYXRvcicsIFsxMDA3Ml1dLCBbJ1ZlcnRpY2FsVGlsZGUnLCBbODc2OF1dLCBbJ1ZlcnlUaGluU3BhY2UnLCBbODIwMl1dLCBbJ1ZmcicsIFsxMjAwODldXSwgWyd2ZnInLCBbMTIwMTE1XV0sIFsndmx0cmknLCBbODg4Ml1dLCBbJ3Zuc3ViJywgWzg4MzQsIDg0MDJdXSwgWyd2bnN1cCcsIFs4ODM1LCA4NDAyXV0sIFsnVm9wZicsIFsxMjAxNDFdXSwgWyd2b3BmJywgWzEyMDE2N11dLCBbJ3Zwcm9wJywgWzg3MzNdXSwgWyd2cnRyaScsIFs4ODgzXV0sIFsnVnNjcicsIFsxMTk5ODVdXSwgWyd2c2NyJywgWzEyMDAxMV1dLCBbJ3ZzdWJuRScsIFsxMDk1NSwgNjUwMjRdXSwgWyd2c3VibmUnLCBbODg0MiwgNjUwMjRdXSwgWyd2c3VwbkUnLCBbMTA5NTYsIDY1MDI0XV0sIFsndnN1cG5lJywgWzg4NDMsIDY1MDI0XV0sIFsnVnZkYXNoJywgWzg4NzRdXSwgWyd2emlnemFnJywgWzEwNjUwXV0sIFsnV2NpcmMnLCBbMzcyXV0sIFsnd2NpcmMnLCBbMzczXV0sIFsnd2VkYmFyJywgWzEwODQ3XV0sIFsnd2VkZ2UnLCBbODc0M11dLCBbJ1dlZGdlJywgWzg4OTZdXSwgWyd3ZWRnZXEnLCBbODc5M11dLCBbJ3dlaWVycCcsIFs4NDcyXV0sIFsnV2ZyJywgWzEyMDA5MF1dLCBbJ3dmcicsIFsxMjAxMTZdXSwgWydXb3BmJywgWzEyMDE0Ml1dLCBbJ3dvcGYnLCBbMTIwMTY4XV0sIFsnd3AnLCBbODQ3Ml1dLCBbJ3dyJywgWzg3NjhdXSwgWyd3cmVhdGgnLCBbODc2OF1dLCBbJ1dzY3InLCBbMTE5OTg2XV0sIFsnd3NjcicsIFsxMjAwMTJdXSwgWyd4Y2FwJywgWzg4OThdXSwgWyd4Y2lyYycsIFs5NzExXV0sIFsneGN1cCcsIFs4ODk5XV0sIFsneGR0cmknLCBbOTY2MV1dLCBbJ1hmcicsIFsxMjAwOTFdXSwgWyd4ZnInLCBbMTIwMTE3XV0sIFsneGhhcnInLCBbMTAyMzFdXSwgWyd4aEFycicsIFsxMDIzNF1dLCBbJ1hpJywgWzkyNl1dLCBbJ3hpJywgWzk1OF1dLCBbJ3hsYXJyJywgWzEwMjI5XV0sIFsneGxBcnInLCBbMTAyMzJdXSwgWyd4bWFwJywgWzEwMjM2XV0sIFsneG5pcycsIFs4OTU1XV0sIFsneG9kb3QnLCBbMTA3NTJdXSwgWydYb3BmJywgWzEyMDE0M11dLCBbJ3hvcGYnLCBbMTIwMTY5XV0sIFsneG9wbHVzJywgWzEwNzUzXV0sIFsneG90aW1lJywgWzEwNzU0XV0sIFsneHJhcnInLCBbMTAyMzBdXSwgWyd4ckFycicsIFsxMDIzM11dLCBbJ1hzY3InLCBbMTE5OTg3XV0sIFsneHNjcicsIFsxMjAwMTNdXSwgWyd4c3FjdXAnLCBbMTA3NThdXSwgWyd4dXBsdXMnLCBbMTA3NTZdXSwgWyd4dXRyaScsIFs5NjUxXV0sIFsneHZlZScsIFs4ODk3XV0sIFsneHdlZGdlJywgWzg4OTZdXSwgWydZYWN1dGUnLCBbMjIxXV0sIFsneWFjdXRlJywgWzI1M11dLCBbJ1lBY3knLCBbMTA3MV1dLCBbJ3lhY3knLCBbMTEwM11dLCBbJ1ljaXJjJywgWzM3NF1dLCBbJ3ljaXJjJywgWzM3NV1dLCBbJ1ljeScsIFsxMDY3XV0sIFsneWN5JywgWzEwOTldXSwgWyd5ZW4nLCBbMTY1XV0sIFsnWWZyJywgWzEyMDA5Ml1dLCBbJ3lmcicsIFsxMjAxMThdXSwgWydZSWN5JywgWzEwMzFdXSwgWyd5aWN5JywgWzExMTFdXSwgWydZb3BmJywgWzEyMDE0NF1dLCBbJ3lvcGYnLCBbMTIwMTcwXV0sIFsnWXNjcicsIFsxMTk5ODhdXSwgWyd5c2NyJywgWzEyMDAxNF1dLCBbJ1lVY3knLCBbMTA3MF1dLCBbJ3l1Y3knLCBbMTEwMl1dLCBbJ3l1bWwnLCBbMjU1XV0sIFsnWXVtbCcsIFszNzZdXSwgWydaYWN1dGUnLCBbMzc3XV0sIFsnemFjdXRlJywgWzM3OF1dLCBbJ1pjYXJvbicsIFszODFdXSwgWyd6Y2Fyb24nLCBbMzgyXV0sIFsnWmN5JywgWzEwNDddXSwgWyd6Y3knLCBbMTA3OV1dLCBbJ1pkb3QnLCBbMzc5XV0sIFsnemRvdCcsIFszODBdXSwgWyd6ZWV0cmYnLCBbODQ4OF1dLCBbJ1plcm9XaWR0aFNwYWNlJywgWzgyMDNdXSwgWydaZXRhJywgWzkxOF1dLCBbJ3pldGEnLCBbOTUwXV0sIFsnemZyJywgWzEyMDExOV1dLCBbJ1pmcicsIFs4NDg4XV0sIFsnWkhjeScsIFsxMDQ2XV0sIFsnemhjeScsIFsxMDc4XV0sIFsnemlncmFycicsIFs4NjY5XV0sIFsnem9wZicsIFsxMjAxNzFdXSwgWydab3BmJywgWzg0ODRdXSwgWydac2NyJywgWzExOTk4OV1dLCBbJ3pzY3InLCBbMTIwMDE1XV0sIFsnendqJywgWzgyMDVdXSwgWyd6d25qJywgWzgyMDRdXV07XG5cbnZhciBhbHBoYUluZGV4ID0ge307XG52YXIgY2hhckluZGV4ID0ge307XG5cbmNyZWF0ZUluZGV4ZXMoYWxwaGFJbmRleCwgY2hhckluZGV4KTtcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gSHRtbDVFbnRpdGllcygpIHt9XG5cbi8qKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybnMge1N0cmluZ31cbiAqL1xuSHRtbDVFbnRpdGllcy5wcm90b3R5cGUuZGVjb2RlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgaWYgKCFzdHIgfHwgIXN0ci5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyYoIz9bXFx3XFxkXSspOz8vZywgZnVuY3Rpb24ocywgZW50aXR5KSB7XG4gICAgICAgIHZhciBjaHI7XG4gICAgICAgIGlmIChlbnRpdHkuY2hhckF0KDApID09PSBcIiNcIikge1xuICAgICAgICAgICAgdmFyIGNvZGUgPSBlbnRpdHkuY2hhckF0KDEpID09PSAneCcgP1xuICAgICAgICAgICAgICAgIHBhcnNlSW50KGVudGl0eS5zdWJzdHIoMikudG9Mb3dlckNhc2UoKSwgMTYpIDpcbiAgICAgICAgICAgICAgICBwYXJzZUludChlbnRpdHkuc3Vic3RyKDEpKTtcblxuICAgICAgICAgICAgaWYgKCEoaXNOYU4oY29kZSkgfHwgY29kZSA8IC0zMjc2OCB8fCBjb2RlID4gNjU1MzUpKSB7XG4gICAgICAgICAgICAgICAgY2hyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNociA9IGFscGhhSW5kZXhbZW50aXR5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hyIHx8IHM7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbiBIdG1sNUVudGl0aWVzLmRlY29kZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiBuZXcgSHRtbDVFbnRpdGllcygpLmRlY29kZShzdHIpO1xuIH07XG5cbi8qKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybnMge1N0cmluZ31cbiAqL1xuSHRtbDVFbnRpdGllcy5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgaWYgKCFzdHIgfHwgIXN0ci5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICB2YXIgc3RyTGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChpIDwgc3RyTGVuZ3RoKSB7XG4gICAgICAgIHZhciBjaGFySW5mbyA9IGNoYXJJbmRleFtzdHIuY2hhckNvZGVBdChpKV07XG4gICAgICAgIGlmIChjaGFySW5mbykge1xuICAgICAgICAgICAgdmFyIGFscGhhID0gY2hhckluZm9bc3RyLmNoYXJDb2RlQXQoaSArIDEpXTtcbiAgICAgICAgICAgIGlmIChhbHBoYSkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWxwaGEgPSBjaGFySW5mb1snJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxwaGEpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gXCImXCIgKyBhbHBoYSArIFwiO1wiO1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgKz0gc3RyLmNoYXJBdChpKTtcbiAgICAgICAgaSsrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICovXG4gSHRtbDVFbnRpdGllcy5lbmNvZGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICByZXR1cm4gbmV3IEh0bWw1RW50aXRpZXMoKS5lbmNvZGUoc3RyKTtcbiB9O1xuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbkh0bWw1RW50aXRpZXMucHJvdG90eXBlLmVuY29kZU5vblVURiA9IGZ1bmN0aW9uKHN0cikge1xuICAgIGlmICghc3RyIHx8ICFzdHIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgdmFyIHN0ckxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IHN0ckxlbmd0aCkge1xuICAgICAgICB2YXIgYyA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICB2YXIgY2hhckluZm8gPSBjaGFySW5kZXhbY107XG4gICAgICAgIGlmIChjaGFySW5mbykge1xuICAgICAgICAgICAgdmFyIGFscGhhID0gY2hhckluZm9bc3RyLmNoYXJDb2RlQXQoaSArIDEpXTtcbiAgICAgICAgICAgIGlmIChhbHBoYSkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWxwaGEgPSBjaGFySW5mb1snJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxwaGEpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gXCImXCIgKyBhbHBoYSArIFwiO1wiO1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA8IDMyIHx8IGMgPiAxMjYpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnJiMnICsgYyArICc7JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBzdHIuY2hhckF0KGkpO1xuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybnMge1N0cmluZ31cbiAqL1xuIEh0bWw1RW50aXRpZXMuZW5jb2RlTm9uVVRGID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgcmV0dXJuIG5ldyBIdG1sNUVudGl0aWVzKCkuZW5jb2RlTm9uVVRGKHN0cik7XG4gfTtcblxuLyoqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICovXG5IdG1sNUVudGl0aWVzLnByb3RvdHlwZS5lbmNvZGVOb25BU0NJSSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIGlmICghc3RyIHx8ICFzdHIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgdmFyIHN0ckxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IHN0ckxlbmd0aCkge1xuICAgICAgICB2YXIgYyA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpZiAoYyA8PSAyNTUpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBzdHJbaSsrXTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCArPSAnJiMnICsgYyArICc7JztcbiAgICAgICAgaSsrXG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbiBIdG1sNUVudGl0aWVzLmVuY29kZU5vbkFTQ0lJID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgcmV0dXJuIG5ldyBIdG1sNUVudGl0aWVzKCkuZW5jb2RlTm9uQVNDSUkoc3RyKTtcbiB9O1xuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBhbHBoYUluZGV4IFBhc3NlZCBieSByZWZlcmVuY2UuXG4gKiBAcGFyYW0ge09iamVjdH0gY2hhckluZGV4IFBhc3NlZCBieSByZWZlcmVuY2UuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluZGV4ZXMoYWxwaGFJbmRleCwgY2hhckluZGV4KSB7XG4gICAgdmFyIGkgPSBFTlRJVElFUy5sZW5ndGg7XG4gICAgdmFyIF9yZXN1bHRzID0gW107XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgICB2YXIgZSA9IEVOVElUSUVTW2ldO1xuICAgICAgICB2YXIgYWxwaGEgPSBlWzBdO1xuICAgICAgICB2YXIgY2hhcnMgPSBlWzFdO1xuICAgICAgICB2YXIgY2hyID0gY2hhcnNbMF07XG4gICAgICAgIHZhciBhZGRDaGFyID0gKGNociA8IDMyIHx8IGNociA+IDEyNikgfHwgY2hyID09PSA2MiB8fCBjaHIgPT09IDYwIHx8IGNociA9PT0gMzggfHwgY2hyID09PSAzNCB8fCBjaHIgPT09IDM5O1xuICAgICAgICB2YXIgY2hhckluZm87XG4gICAgICAgIGlmIChhZGRDaGFyKSB7XG4gICAgICAgICAgICBjaGFySW5mbyA9IGNoYXJJbmRleFtjaHJdID0gY2hhckluZGV4W2Nocl0gfHwge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYXJzWzFdKSB7XG4gICAgICAgICAgICB2YXIgY2hyMiA9IGNoYXJzWzFdO1xuICAgICAgICAgICAgYWxwaGFJbmRleFthbHBoYV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNocikgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjIpO1xuICAgICAgICAgICAgX3Jlc3VsdHMucHVzaChhZGRDaGFyICYmIChjaGFySW5mb1tjaHIyXSA9IGFscGhhKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbHBoYUluZGV4W2FscGhhXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyKTtcbiAgICAgICAgICAgIF9yZXN1bHRzLnB1c2goYWRkQ2hhciAmJiAoY2hhckluZm9bJyddID0gYWxwaGEpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBIdG1sNUVudGl0aWVzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/html-entities/lib/html5-entities.js\n");
/***/ }),
/***/ "./node_modules/html-entities/lib/xml-entities.js":
/*!********************************************************!*\
!*** ./node_modules/html-entities/lib/xml-entities.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("var ALPHA_INDEX = {\n '<': '<',\n '>': '>',\n '"': '\"',\n '&apos': '\\'',\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': '\\'',\n '&': '&'\n};\n\nvar CHAR_INDEX = {\n 60: 'lt',\n 62: 'gt',\n 34: 'quot',\n 39: 'apos',\n 38: 'amp'\n};\n\nvar CHAR_S_INDEX = {\n '<': '<',\n '>': '>',\n '\"': '"',\n '\\'': ''',\n '&': '&'\n};\n\n/**\n * @constructor\n */\nfunction XmlEntities() {}\n\n/**\n * @param {String} str\n * @returns {String}\n */\nXmlEntities.prototype.encode = function(str) {\n if (!str || !str.length) {\n return '';\n }\n return str.replace(/<|>|\"|'|&/g, function(s) {\n return CHAR_S_INDEX[s];\n });\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n XmlEntities.encode = function(str) {\n return new XmlEntities().encode(str);\n };\n\n/**\n * @param {String} str\n * @returns {String}\n */\nXmlEntities.prototype.decode = function(str) {\n if (!str || !str.length) {\n return '';\n }\n return str.replace(/&#?[0-9a-zA-Z]+;?/g, function(s) {\n if (s.charAt(1) === '#') {\n var code = s.charAt(2).toLowerCase() === 'x' ?\n parseInt(s.substr(3), 16) :\n parseInt(s.substr(2));\n\n if (isNaN(code) || code < -32768 || code > 65535) {\n return '';\n }\n return String.fromCharCode(code);\n }\n return ALPHA_INDEX[s] || s;\n });\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n XmlEntities.decode = function(str) {\n return new XmlEntities().decode(str);\n };\n\n/**\n * @param {String} str\n * @returns {String}\n */\nXmlEntities.prototype.encodeNonUTF = function(str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var c = str.charCodeAt(i);\n var alpha = CHAR_INDEX[c];\n if (alpha) {\n result += \"&\" + alpha + \";\";\n i++;\n continue;\n }\n if (c < 32 || c > 126) {\n result += '&#' + c + ';';\n } else {\n result += str.charAt(i);\n }\n i++;\n }\n return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n XmlEntities.encodeNonUTF = function(str) {\n return new XmlEntities().encodeNonUTF(str);\n };\n\n/**\n * @param {String} str\n * @returns {String}\n */\nXmlEntities.prototype.encodeNonASCII = function(str) {\n if (!str || !str.length) {\n return '';\n }\n var strLenght = str.length;\n var result = '';\n var i = 0;\n while (i < strLenght) {\n var c = str.charCodeAt(i);\n if (c <= 255) {\n result += str[i++];\n continue;\n }\n result += '&#' + c + ';';\n i++;\n }\n return result;\n};\n\n/**\n * @param {String} str\n * @returns {String}\n */\n XmlEntities.encodeNonASCII = function(str) {\n return new XmlEntities().encodeNonASCII(str);\n };\n\nmodule.exports = XmlEntities;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaHRtbC1lbnRpdGllcy9saWIveG1sLWVudGl0aWVzLmpzPzUwMjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULFNBQVM7QUFDVCxXQUFXO0FBQ1gsV0FBVztBQUNYLFVBQVU7QUFDVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGNBQWM7QUFDZCxjQUFjO0FBQ2QsZ0JBQWdCO0FBQ2hCLGlCQUFpQjtBQUNqQixlQUFlO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkMsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2h0bWwtZW50aXRpZXMvbGliL3htbC1lbnRpdGllcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBBTFBIQV9JTkRFWCA9IHtcbiAgICAnJmx0JzogJzwnLFxuICAgICcmZ3QnOiAnPicsXG4gICAgJyZxdW90JzogJ1wiJyxcbiAgICAnJmFwb3MnOiAnXFwnJyxcbiAgICAnJmFtcCc6ICcmJyxcbiAgICAnJmx0Oyc6ICc8JyxcbiAgICAnJmd0Oyc6ICc+JyxcbiAgICAnJnF1b3Q7JzogJ1wiJyxcbiAgICAnJmFwb3M7JzogJ1xcJycsXG4gICAgJyZhbXA7JzogJyYnXG59O1xuXG52YXIgQ0hBUl9JTkRFWCA9IHtcbiAgICA2MDogJ2x0JyxcbiAgICA2MjogJ2d0JyxcbiAgICAzNDogJ3F1b3QnLFxuICAgIDM5OiAnYXBvcycsXG4gICAgMzg6ICdhbXAnXG59O1xuXG52YXIgQ0hBUl9TX0lOREVYID0ge1xuICAgICc8JzogJyZsdDsnLFxuICAgICc+JzogJyZndDsnLFxuICAgICdcIic6ICcmcXVvdDsnLFxuICAgICdcXCcnOiAnJmFwb3M7JyxcbiAgICAnJic6ICcmYW1wOydcbn07XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFhtbEVudGl0aWVzKCkge31cblxuLyoqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICovXG5YbWxFbnRpdGllcy5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgaWYgKCFzdHIgfHwgIXN0ci5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLzx8PnxcInwnfCYvZywgZnVuY3Rpb24ocykge1xuICAgICAgICByZXR1cm4gQ0hBUl9TX0lOREVYW3NdO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICovXG4gWG1sRW50aXRpZXMuZW5jb2RlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgcmV0dXJuIG5ldyBYbWxFbnRpdGllcygpLmVuY29kZShzdHIpO1xuIH07XG5cbi8qKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybnMge1N0cmluZ31cbiAqL1xuWG1sRW50aXRpZXMucHJvdG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIGlmICghc3RyIHx8ICFzdHIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8mIz9bMC05YS16QS1aXSs7Py9nLCBmdW5jdGlvbihzKSB7XG4gICAgICAgIGlmIChzLmNoYXJBdCgxKSA9PT0gJyMnKSB7XG4gICAgICAgICAgICB2YXIgY29kZSA9IHMuY2hhckF0KDIpLnRvTG93ZXJDYXNlKCkgPT09ICd4JyA/XG4gICAgICAgICAgICAgICAgcGFyc2VJbnQocy5zdWJzdHIoMyksIDE2KSA6XG4gICAgICAgICAgICAgICAgcGFyc2VJbnQocy5zdWJzdHIoMikpO1xuXG4gICAgICAgICAgICBpZiAoaXNOYU4oY29kZSkgfHwgY29kZSA8IC0zMjc2OCB8fCBjb2RlID4gNjU1MzUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQUxQSEFfSU5ERVhbc10gfHwgcztcbiAgICB9KTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybnMge1N0cmluZ31cbiAqL1xuIFhtbEVudGl0aWVzLmRlY29kZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiBuZXcgWG1sRW50aXRpZXMoKS5kZWNvZGUoc3RyKTtcbiB9O1xuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cblhtbEVudGl0aWVzLnByb3RvdHlwZS5lbmNvZGVOb25VVEYgPSBmdW5jdGlvbihzdHIpIHtcbiAgICBpZiAoIXN0ciB8fCAhc3RyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHZhciBzdHJMZW5ndGggPSBzdHIubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBzdHJMZW5ndGgpIHtcbiAgICAgICAgdmFyIGMgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgdmFyIGFscGhhID0gQ0hBUl9JTkRFWFtjXTtcbiAgICAgICAgaWYgKGFscGhhKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gXCImXCIgKyBhbHBoYSArIFwiO1wiO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgPCAzMiB8fCBjID4gMTI2KSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJyYjJyArIGMgKyAnOyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gc3RyLmNoYXJBdChpKTtcbiAgICAgICAgfVxuICAgICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbiBYbWxFbnRpdGllcy5lbmNvZGVOb25VVEYgPSBmdW5jdGlvbihzdHIpIHtcbiAgICByZXR1cm4gbmV3IFhtbEVudGl0aWVzKCkuZW5jb2RlTm9uVVRGKHN0cik7XG4gfTtcblxuLyoqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICovXG5YbWxFbnRpdGllcy5wcm90b3R5cGUuZW5jb2RlTm9uQVNDSUkgPSBmdW5jdGlvbihzdHIpIHtcbiAgICBpZiAoIXN0ciB8fCAhc3RyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHZhciBzdHJMZW5naHQgPSBzdHIubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBzdHJMZW5naHQpIHtcbiAgICAgICAgdmFyIGMgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKGMgPD0gMjU1KSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gc3RyW2krK107XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgKz0gJyYjJyArIGMgKyAnOyc7XG4gICAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybnMge1N0cmluZ31cbiAqL1xuIFhtbEVudGl0aWVzLmVuY29kZU5vbkFTQ0lJID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgcmV0dXJuIG5ldyBYbWxFbnRpdGllcygpLmVuY29kZU5vbkFTQ0lJKHN0cik7XG4gfTtcblxubW9kdWxlLmV4cG9ydHMgPSBYbWxFbnRpdGllcztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/html-entities/lib/xml-entities.js\n");
/***/ }),
/***/ "./node_modules/loglevel/lib/loglevel.js":
/*!***********************************************!*\
!*** ./node_modules/loglevel/lib/loglevel.js ***!
\***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*\n* loglevel - https://github.com/pimterry/loglevel\n*\n* Copyright (c) 2013 Tim Perry\n* Licensed under the MIT license.\n*/\n(function (root, definition) {\n \"use strict\";\n if (true) {\n !(__WEBPACK_AMD_DEFINE_FACTORY__ = (definition),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n}(this, function () {\n \"use strict\";\n\n // Slightly dubious tricks to cut down minimized file size\n var noop = function() {};\n var undefinedType = \"undefined\";\n var isIE = (typeof window !== undefinedType) && (\n /Trident\\/|MSIE /.test(window.navigator.userAgent)\n );\n\n var logMethods = [\n \"trace\",\n \"debug\",\n \"info\",\n \"warn\",\n \"error\"\n ];\n\n // Cross-browser bind equivalent that works at least back to IE6\n function bindMethod(obj, methodName) {\n var method = obj[methodName];\n if (typeof method.bind === 'function') {\n return method.bind(obj);\n } else {\n try {\n return Function.prototype.bind.call(method, obj);\n } catch (e) {\n // Missing bind shim or IE8 + Modernizr, fallback to wrapping\n return function() {\n return Function.prototype.apply.apply(method, [obj, arguments]);\n };\n }\n }\n }\n\n // Trace() doesn't print the message in IE, so for that case we need to wrap it\n function traceForIE() {\n if (console.log) {\n if (console.log.apply) {\n console.log.apply(console, arguments);\n } else {\n // In old IE, native console methods themselves don't have apply().\n Function.prototype.apply.apply(console.log, [console, arguments]);\n }\n }\n if (console.trace) console.trace();\n }\n\n // Build the best logging method possible for this env\n // Wherever possible we want to bind, not wrap, to preserve stack traces\n function realMethod(methodName) {\n if (methodName === 'debug') {\n methodName = 'log';\n }\n\n if (typeof console === undefinedType) {\n return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives\n } else if (methodName === 'trace' && isIE) {\n return traceForIE;\n } else if (console[methodName] !== undefined) {\n return bindMethod(console, methodName);\n } else if (console.log !== undefined) {\n return bindMethod(console, 'log');\n } else {\n return noop;\n }\n }\n\n // These private functions always need `this` to be set properly\n\n function replaceLoggingMethods(level, loggerName) {\n /*jshint validthis:true */\n for (var i = 0; i < logMethods.length; i++) {\n var methodName = logMethods[i];\n this[methodName] = (i < level) ?\n noop :\n this.methodFactory(methodName, level, loggerName);\n }\n\n // Define log.log as an alias for log.debug\n this.log = this.debug;\n }\n\n // In old IE versions, the console isn't present until you first open it.\n // We build realMethod() replacements here that regenerate logging methods\n function enableLoggingWhenConsoleArrives(methodName, level, loggerName) {\n return function () {\n if (typeof console !== undefinedType) {\n replaceLoggingMethods.call(this, level, loggerName);\n this[methodName].apply(this, arguments);\n }\n };\n }\n\n // By default, we use closely bound real methods wherever possible, and\n // otherwise we wait for a console to appear, and then try again.\n function defaultMethodFactory(methodName, level, loggerName) {\n /*jshint validthis:true */\n return realMethod(methodName) ||\n enableLoggingWhenConsoleArrives.apply(this, arguments);\n }\n\n function Logger(name, defaultLevel, factory) {\n var self = this;\n var currentLevel;\n var storageKey = \"loglevel\";\n if (name) {\n storageKey += \":\" + name;\n }\n\n function persistLevelIfPossible(levelNum) {\n var levelName = (logMethods[levelNum] || 'silent').toUpperCase();\n\n if (typeof window === undefinedType) return;\n\n // Use localStorage if available\n try {\n window.localStorage[storageKey] = levelName;\n return;\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n } catch (ignore) {}\n }\n\n function getPersistedLevel() {\n var storedLevel;\n\n if (typeof window === undefinedType) return;\n\n try {\n storedLevel = window.localStorage[storageKey];\n } catch (ignore) {}\n\n // Fallback to cookies if local storage gives us nothing\n if (typeof storedLevel === undefinedType) {\n try {\n var cookie = window.document.cookie;\n var location = cookie.indexOf(\n encodeURIComponent(storageKey) + \"=\");\n if (location !== -1) {\n storedLevel = /^([^;]+)/.exec(cookie.slice(location))[1];\n }\n } catch (ignore) {}\n }\n\n // If the stored level is not valid, treat it as if nothing was stored.\n if (self.levels[storedLevel] === undefined) {\n storedLevel = undefined;\n }\n\n return storedLevel;\n }\n\n /*\n *\n * Public logger API - see https://github.com/pimterry/loglevel for details\n *\n */\n\n self.name = name;\n\n self.levels = { \"TRACE\": 0, \"DEBUG\": 1, \"INFO\": 2, \"WARN\": 3,\n \"ERROR\": 4, \"SILENT\": 5};\n\n self.methodFactory = factory || defaultMethodFactory;\n\n self.getLevel = function () {\n return currentLevel;\n };\n\n self.setLevel = function (level, persist) {\n if (typeof level === \"string\" && self.levels[level.toUpperCase()] !== undefined) {\n level = self.levels[level.toUpperCase()];\n }\n if (typeof level === \"number\" && level >= 0 && level <= self.levels.SILENT) {\n currentLevel = level;\n if (persist !== false) { // defaults to true\n persistLevelIfPossible(level);\n }\n replaceLoggingMethods.call(self, level, name);\n if (typeof console === undefinedType && level < self.levels.SILENT) {\n return \"No console available for logging\";\n }\n } else {\n throw \"log.setLevel() called with invalid level: \" + level;\n }\n };\n\n self.setDefaultLevel = function (level) {\n if (!getPersistedLevel()) {\n self.setLevel(level, false);\n }\n };\n\n self.enableAll = function(persist) {\n self.setLevel(self.levels.TRACE, persist);\n };\n\n self.disableAll = function(persist) {\n self.setLevel(self.levels.SILENT, persist);\n };\n\n // Initialize with the right level\n var initialLevel = getPersistedLevel();\n if (initialLevel == null) {\n initialLevel = defaultLevel == null ? \"WARN\" : defaultLevel;\n }\n self.setLevel(initialLevel, false);\n }\n\n /*\n *\n * Top-level API\n *\n */\n\n var defaultLogger = new Logger();\n\n var _loggersByName = {};\n defaultLogger.getLogger = function getLogger(name) {\n if (typeof name !== \"string\" || name === \"\") {\n throw new TypeError(\"You must supply a name when creating a logger.\");\n }\n\n var logger = _loggersByName[name];\n if (!logger) {\n logger = _loggersByName[name] = new Logger(\n name, defaultLogger.getLevel(), defaultLogger.methodFactory);\n }\n return logger;\n };\n\n // Grab the current global log variable in case of overwrite\n var _log = (typeof window !== undefinedType) ? window.log : undefined;\n defaultLogger.noConflict = function() {\n if (typeof window !== undefinedType &&\n window.log === defaultLogger) {\n window.log = _log;\n }\n\n return defaultLogger;\n };\n\n defaultLogger.getLoggers = function getLoggers() {\n return _loggersByName;\n };\n\n return defaultLogger;\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9nbGV2ZWwvbGliL2xvZ2xldmVsLmpzPzVjN2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBMEM7QUFDbEQsUUFBUSxvQ0FBTyxVQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsb0dBQUM7QUFDMUIsS0FBSyxNQUFNLEVBSU47QUFDTCxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5QkFBeUI7QUFDekIsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCLHVCQUF1QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxxRUFBcUU7QUFDckUsV0FBVztBQUNYOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFdBQVc7O0FBRVg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQSxlQUFlO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHFCQUFxQjtBQUNyQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9nbGV2ZWwvbGliL2xvZ2xldmVsLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiogbG9nbGV2ZWwgLSBodHRwczovL2dpdGh1Yi5jb20vcGltdGVycnkvbG9nbGV2ZWxcbipcbiogQ29weXJpZ2h0IChjKSAyMDEzIFRpbSBQZXJyeVxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4qL1xuKGZ1bmN0aW9uIChyb290LCBkZWZpbml0aW9uKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoZGVmaW5pdGlvbik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGRlZmluaXRpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LmxvZyA9IGRlZmluaXRpb24oKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgIC8vIFNsaWdodGx5IGR1YmlvdXMgdHJpY2tzIHRvIGN1dCBkb3duIG1pbmltaXplZCBmaWxlIHNpemVcbiAgICB2YXIgbm9vcCA9IGZ1bmN0aW9uKCkge307XG4gICAgdmFyIHVuZGVmaW5lZFR5cGUgPSBcInVuZGVmaW5lZFwiO1xuICAgIHZhciBpc0lFID0gKHR5cGVvZiB3aW5kb3cgIT09IHVuZGVmaW5lZFR5cGUpICYmIChcbiAgICAgICAgL1RyaWRlbnRcXC98TVNJRSAvLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpXG4gICAgKTtcblxuICAgIHZhciBsb2dNZXRob2RzID0gW1xuICAgICAgICBcInRyYWNlXCIsXG4gICAgICAgIFwiZGVidWdcIixcbiAgICAgICAgXCJpbmZvXCIsXG4gICAgICAgIFwid2FyblwiLFxuICAgICAgICBcImVycm9yXCJcbiAgICBdO1xuXG4gICAgLy8gQ3Jvc3MtYnJvd3NlciBiaW5kIGVxdWl2YWxlbnQgdGhhdCB3b3JrcyBhdCBsZWFzdCBiYWNrIHRvIElFNlxuICAgIGZ1bmN0aW9uIGJpbmRNZXRob2Qob2JqLCBtZXRob2ROYW1lKSB7XG4gICAgICAgIHZhciBtZXRob2QgPSBvYmpbbWV0aG9kTmFtZV07XG4gICAgICAgIGlmICh0eXBlb2YgbWV0aG9kLmJpbmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBtZXRob2QuYmluZChvYmopO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuY2FsbChtZXRob2QsIG9iaik7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gTWlzc2luZyBiaW5kIHNoaW0gb3IgSUU4ICsgTW9kZXJuaXpyLCBmYWxsYmFjayB0byB3cmFwcGluZ1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5hcHBseShtZXRob2QsIFtvYmosIGFyZ3VtZW50c10pO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmFjZSgpIGRvZXNuJ3QgcHJpbnQgdGhlIG1lc3NhZ2UgaW4gSUUsIHNvIGZvciB0aGF0IGNhc2Ugd2UgbmVlZCB0byB3cmFwIGl0XG4gICAgZnVuY3Rpb24gdHJhY2VGb3JJRSgpIHtcbiAgICAgICAgaWYgKGNvbnNvbGUubG9nKSB7XG4gICAgICAgICAgICBpZiAoY29uc29sZS5sb2cuYXBwbHkpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBJbiBvbGQgSUUsIG5hdGl2ZSBjb25zb2xlIG1ldGhvZHMgdGhlbXNlbHZlcyBkb24ndCBoYXZlIGFwcGx5KCkuXG4gICAgICAgICAgICAgICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmFwcGx5KGNvbnNvbGUubG9nLCBbY29uc29sZSwgYXJndW1lbnRzXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnNvbGUudHJhY2UpIGNvbnNvbGUudHJhY2UoKTtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCB0aGUgYmVzdCBsb2dnaW5nIG1ldGhvZCBwb3NzaWJsZSBmb3IgdGhpcyBlbnZcbiAgICAvLyBXaGVyZXZlciBwb3NzaWJsZSB3ZSB3YW50IHRvIGJpbmQsIG5vdCB3cmFwLCB0byBwcmVzZXJ2ZSBzdGFjayB0cmFjZXNcbiAgICBmdW5jdGlvbiByZWFsTWV0aG9kKG1ldGhvZE5hbWUpIHtcbiAgICAgICAgaWYgKG1ldGhvZE5hbWUgPT09ICdkZWJ1ZycpIHtcbiAgICAgICAgICAgIG1ldGhvZE5hbWUgPSAnbG9nJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uc29sZSA9PT0gdW5kZWZpbmVkVHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBObyBtZXRob2QgcG9zc2libGUsIGZvciBub3cgLSBmaXhlZCBsYXRlciBieSBlbmFibGVMb2dnaW5nV2hlbkNvbnNvbGVBcnJpdmVzXG4gICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZSA9PT0gJ3RyYWNlJyAmJiBpc0lFKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJhY2VGb3JJRTtcbiAgICAgICAgfSBlbHNlIGlmIChjb25zb2xlW21ldGhvZE5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBiaW5kTWV0aG9kKGNvbnNvbGUsIG1ldGhvZE5hbWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnNvbGUubG9nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBiaW5kTWV0aG9kKGNvbnNvbGUsICdsb2cnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBub29wO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhlc2UgcHJpdmF0ZSBmdW5jdGlvbnMgYWx3YXlzIG5lZWQgYHRoaXNgIHRvIGJlIHNldCBwcm9wZXJseVxuXG4gICAgZnVuY3Rpb24gcmVwbGFjZUxvZ2dpbmdNZXRob2RzKGxldmVsLCBsb2dnZXJOYW1lKSB7XG4gICAgICAgIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9nTWV0aG9kcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIG1ldGhvZE5hbWUgPSBsb2dNZXRob2RzW2ldO1xuICAgICAgICAgICAgdGhpc1ttZXRob2ROYW1lXSA9IChpIDwgbGV2ZWwpID9cbiAgICAgICAgICAgICAgICBub29wIDpcbiAgICAgICAgICAgICAgICB0aGlzLm1ldGhvZEZhY3RvcnkobWV0aG9kTmFtZSwgbGV2ZWwsIGxvZ2dlck5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVmaW5lIGxvZy5sb2cgYXMgYW4gYWxpYXMgZm9yIGxvZy5kZWJ1Z1xuICAgICAgICB0aGlzLmxvZyA9IHRoaXMuZGVidWc7XG4gICAgfVxuXG4gICAgLy8gSW4gb2xkIElFIHZlcnNpb25zLCB0aGUgY29uc29sZSBpc24ndCBwcmVzZW50IHVudGlsIHlvdSBmaXJzdCBvcGVuIGl0LlxuICAgIC8vIFdlIGJ1aWxkIHJlYWxNZXRob2QoKSByZXBsYWNlbWVudHMgaGVyZSB0aGF0IHJlZ2VuZXJhdGUgbG9nZ2luZyBtZXRob2RzXG4gICAgZnVuY3Rpb24gZW5hYmxlTG9nZ2luZ1doZW5Db25zb2xlQXJyaXZlcyhtZXRob2ROYW1lLCBsZXZlbCwgbG9nZ2VyTmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSB1bmRlZmluZWRUeXBlKSB7XG4gICAgICAgICAgICAgICAgcmVwbGFjZUxvZ2dpbmdNZXRob2RzLmNhbGwodGhpcywgbGV2ZWwsIGxvZ2dlck5hbWUpO1xuICAgICAgICAgICAgICAgIHRoaXNbbWV0aG9kTmFtZV0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBCeSBkZWZhdWx0LCB3ZSB1c2UgY2xvc2VseSBib3VuZCByZWFsIG1ldGhvZHMgd2hlcmV2ZXIgcG9zc2libGUsIGFuZFxuICAgIC8vIG90aGVyd2lzZSB3ZSB3YWl0IGZvciBhIGNvbnNvbGUgdG8gYXBwZWFyLCBhbmQgdGhlbiB0cnkgYWdhaW4uXG4gICAgZnVuY3Rpb24gZGVmYXVsdE1ldGhvZEZhY3RvcnkobWV0aG9kTmFtZSwgbGV2ZWwsIGxvZ2dlck5hbWUpIHtcbiAgICAgICAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgICAgICAgcmV0dXJuIHJlYWxNZXRob2QobWV0aG9kTmFtZSkgfHxcbiAgICAgICAgICAgICAgIGVuYWJsZUxvZ2dpbmdXaGVuQ29uc29sZUFycml2ZXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBMb2dnZXIobmFtZSwgZGVmYXVsdExldmVsLCBmYWN0b3J5KSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB2YXIgY3VycmVudExldmVsO1xuICAgICAgdmFyIHN0b3JhZ2VLZXkgPSBcImxvZ2xldmVsXCI7XG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICBzdG9yYWdlS2V5ICs9IFwiOlwiICsgbmFtZTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gcGVyc2lzdExldmVsSWZQb3NzaWJsZShsZXZlbE51bSkge1xuICAgICAgICAgIHZhciBsZXZlbE5hbWUgPSAobG9nTWV0aG9kc1tsZXZlbE51bV0gfHwgJ3NpbGVudCcpLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gdW5kZWZpbmVkVHlwZSkgcmV0dXJuO1xuXG4gICAgICAgICAgLy8gVXNlIGxvY2FsU3RvcmFnZSBpZiBhdmFpbGFibGVcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlW3N0b3JhZ2VLZXldID0gbGV2ZWxOYW1lO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBjYXRjaCAoaWdub3JlKSB7fVxuXG4gICAgICAgICAgLy8gVXNlIHNlc3Npb24gY29va2llIGFzIGZhbGxiYWNrXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmNvb2tpZSA9XG4gICAgICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0b3JhZ2VLZXkpICsgXCI9XCIgKyBsZXZlbE5hbWUgKyBcIjtcIjtcbiAgICAgICAgICB9IGNhdGNoIChpZ25vcmUpIHt9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGdldFBlcnNpc3RlZExldmVsKCkge1xuICAgICAgICAgIHZhciBzdG9yZWRMZXZlbDtcblxuICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSB1bmRlZmluZWRUeXBlKSByZXR1cm47XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBzdG9yZWRMZXZlbCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2Vbc3RvcmFnZUtleV07XG4gICAgICAgICAgfSBjYXRjaCAoaWdub3JlKSB7fVxuXG4gICAgICAgICAgLy8gRmFsbGJhY2sgdG8gY29va2llcyBpZiBsb2NhbCBzdG9yYWdlIGdpdmVzIHVzIG5vdGhpbmdcbiAgICAgICAgICBpZiAodHlwZW9mIHN0b3JlZExldmVsID09PSB1bmRlZmluZWRUeXBlKSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICB2YXIgY29va2llID0gd2luZG93LmRvY3VtZW50LmNvb2tpZTtcbiAgICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IGNvb2tpZS5pbmRleE9mKFxuICAgICAgICAgICAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdG9yYWdlS2V5KSArIFwiPVwiKTtcbiAgICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdG9yZWRMZXZlbCA9IC9eKFteO10rKS8uZXhlYyhjb29raWUuc2xpY2UobG9jYXRpb24pKVsxXTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBjYXRjaCAoaWdub3JlKSB7fVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIElmIHRoZSBzdG9yZWQgbGV2ZWwgaXMgbm90IHZhbGlkLCB0cmVhdCBpdCBhcyBpZiBub3RoaW5nIHdhcyBzdG9yZWQuXG4gICAgICAgICAgaWYgKHNlbGYubGV2ZWxzW3N0b3JlZExldmVsXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHN0b3JlZExldmVsID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzdG9yZWRMZXZlbDtcbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgICAqXG4gICAgICAgKiBQdWJsaWMgbG9nZ2VyIEFQSSAtIHNlZSBodHRwczovL2dpdGh1Yi5jb20vcGltdGVycnkvbG9nbGV2ZWwgZm9yIGRldGFpbHNcbiAgICAgICAqXG4gICAgICAgKi9cblxuICAgICAgc2VsZi5uYW1lID0gbmFtZTtcblxuICAgICAgc2VsZi5sZXZlbHMgPSB7IFwiVFJBQ0VcIjogMCwgXCJERUJVR1wiOiAxLCBcIklORk9cIjogMiwgXCJXQVJOXCI6IDMsXG4gICAgICAgICAgXCJFUlJPUlwiOiA0LCBcIlNJTEVOVFwiOiA1fTtcblxuICAgICAgc2VsZi5tZXRob2RGYWN0b3J5ID0gZmFjdG9yeSB8fCBkZWZhdWx0TWV0aG9kRmFjdG9yeTtcblxuICAgICAgc2VsZi5nZXRMZXZlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY3VycmVudExldmVsO1xuICAgICAgfTtcblxuICAgICAgc2VsZi5zZXRMZXZlbCA9IGZ1bmN0aW9uIChsZXZlbCwgcGVyc2lzdCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09IFwic3RyaW5nXCIgJiYgc2VsZi5sZXZlbHNbbGV2ZWwudG9VcHBlckNhc2UoKV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBsZXZlbCA9IHNlbGYubGV2ZWxzW2xldmVsLnRvVXBwZXJDYXNlKCldO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIGxldmVsID09PSBcIm51bWJlclwiICYmIGxldmVsID49IDAgJiYgbGV2ZWwgPD0gc2VsZi5sZXZlbHMuU0lMRU5UKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRMZXZlbCA9IGxldmVsO1xuICAgICAgICAgICAgICBpZiAocGVyc2lzdCAhPT0gZmFsc2UpIHsgIC8vIGRlZmF1bHRzIHRvIHRydWVcbiAgICAgICAgICAgICAgICAgIHBlcnNpc3RMZXZlbElmUG9zc2libGUobGV2ZWwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlcGxhY2VMb2dnaW5nTWV0aG9kcy5jYWxsKHNlbGYsIGxldmVsLCBuYW1lKTtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSB1bmRlZmluZWRUeXBlICYmIGxldmVsIDwgc2VsZi5sZXZlbHMuU0lMRU5UKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJObyBjb25zb2xlIGF2YWlsYWJsZSBmb3IgbG9nZ2luZ1wiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgXCJsb2cuc2V0TGV2ZWwoKSBjYWxsZWQgd2l0aCBpbnZhbGlkIGxldmVsOiBcIiArIGxldmVsO1xuICAgICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHNlbGYuc2V0RGVmYXVsdExldmVsID0gZnVuY3Rpb24gKGxldmVsKSB7XG4gICAgICAgICAgaWYgKCFnZXRQZXJzaXN0ZWRMZXZlbCgpKSB7XG4gICAgICAgICAgICAgIHNlbGYuc2V0TGV2ZWwobGV2ZWwsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBzZWxmLmVuYWJsZUFsbCA9IGZ1bmN0aW9uKHBlcnNpc3QpIHtcbiAgICAgICAgICBzZWxmLnNldExldmVsKHNlbGYubGV2ZWxzLlRSQUNFLCBwZXJzaXN0KTtcbiAgICAgIH07XG5cbiAgICAgIHNlbGYuZGlzYWJsZUFsbCA9IGZ1bmN0aW9uKHBlcnNpc3QpIHtcbiAgICAgICAgICBzZWxmLnNldExldmVsKHNlbGYubGV2ZWxzLlNJTEVOVCwgcGVyc2lzdCk7XG4gICAgICB9O1xuXG4gICAgICAvLyBJbml0aWFsaXplIHdpdGggdGhlIHJpZ2h0IGxldmVsXG4gICAgICB2YXIgaW5pdGlhbExldmVsID0gZ2V0UGVyc2lzdGVkTGV2ZWwoKTtcbiAgICAgIGlmIChpbml0aWFsTGV2ZWwgPT0gbnVsbCkge1xuICAgICAgICAgIGluaXRpYWxMZXZlbCA9IGRlZmF1bHRMZXZlbCA9PSBudWxsID8gXCJXQVJOXCIgOiBkZWZhdWx0TGV2ZWw7XG4gICAgICB9XG4gICAgICBzZWxmLnNldExldmVsKGluaXRpYWxMZXZlbCwgZmFsc2UpO1xuICAgIH1cblxuICAgIC8qXG4gICAgICpcbiAgICAgKiBUb3AtbGV2ZWwgQVBJXG4gICAgICpcbiAgICAgKi9cblxuICAgIHZhciBkZWZhdWx0TG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG4gICAgdmFyIF9sb2dnZXJzQnlOYW1lID0ge307XG4gICAgZGVmYXVsdExvZ2dlci5nZXRMb2dnZXIgPSBmdW5jdGlvbiBnZXRMb2dnZXIobmFtZSkge1xuICAgICAgICBpZiAodHlwZW9mIG5hbWUgIT09IFwic3RyaW5nXCIgfHwgbmFtZSA9PT0gXCJcIikge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJZb3UgbXVzdCBzdXBwbHkgYSBuYW1lIHdoZW4gY3JlYXRpbmcgYSBsb2dnZXIuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvZ2dlciA9IF9sb2dnZXJzQnlOYW1lW25hbWVdO1xuICAgICAgICBpZiAoIWxvZ2dlcikge1xuICAgICAgICAgIGxvZ2dlciA9IF9sb2dnZXJzQnlOYW1lW25hbWVdID0gbmV3IExvZ2dlcihcbiAgICAgICAgICAgIG5hbWUsIGRlZmF1bHRMb2dnZXIuZ2V0TGV2ZWwoKSwgZGVmYXVsdExvZ2dlci5tZXRob2RGYWN0b3J5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nZ2VyO1xuICAgIH07XG5cbiAgICAvLyBHcmFiIHRoZSBjdXJyZW50IGdsb2JhbCBsb2cgdmFyaWFibGUgaW4gY2FzZSBvZiBvdmVyd3JpdGVcbiAgICB2YXIgX2xvZyA9ICh0eXBlb2Ygd2luZG93ICE9PSB1bmRlZmluZWRUeXBlKSA/IHdpbmRvdy5sb2cgOiB1bmRlZmluZWQ7XG4gICAgZGVmYXVsdExvZ2dlci5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSB1bmRlZmluZWRUeXBlICYmXG4gICAgICAgICAgICAgICB3aW5kb3cubG9nID09PSBkZWZhdWx0TG9nZ2VyKSB7XG4gICAgICAgICAgICB3aW5kb3cubG9nID0gX2xvZztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZWZhdWx0TG9nZ2VyO1xuICAgIH07XG5cbiAgICBkZWZhdWx0TG9nZ2VyLmdldExvZ2dlcnMgPSBmdW5jdGlvbiBnZXRMb2dnZXJzKCkge1xuICAgICAgICByZXR1cm4gX2xvZ2dlcnNCeU5hbWU7XG4gICAgfTtcblxuICAgIHJldHVybiBkZWZhdWx0TG9nZ2VyO1xufSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/loglevel/lib/loglevel.js\n");
/***/ }),
/***/ "./node_modules/node-libs-browser/node_modules/punycode/punycode.js":
/*!**************************************************************************!*\
!*** ./node_modules/node-libs-browser/node_modules/punycode/punycode.js ***!
\**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/* WEBPACK VAR INJECTION */(function(module, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = true && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = true && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttrue\n\t) {\n\t\t!(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n\t\t\treturn punycode;\n\t\t}).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else {}\n\n}(this));\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module), __webpack_require__(/*! ./../../../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbm9kZS1saWJzLWJyb3dzZXIvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzPzE5ODUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxDQUFDOztBQUVEO0FBQ0EsbUJBQW1CLEtBQTBCO0FBQzdDO0FBQ0Esa0JBQWtCLEtBQXlCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkIsY0FBYyxNQUFNO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVksTUFBTTtBQUNsQixZQUFZLFNBQVM7QUFDckI7QUFDQSxjQUFjLE1BQU07QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxPQUFPO0FBQ25CLFlBQVksU0FBUztBQUNyQjtBQUNBLGNBQWMsTUFBTTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxPQUFPO0FBQ25CLGNBQWMsTUFBTTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQSxLQUFLO0FBQ0wsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksTUFBTTtBQUNsQixjQUFjLE9BQU87QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksT0FBTztBQUNuQixjQUFjLE9BQU87QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxPQUFPO0FBQ25CLGNBQWMsT0FBTztBQUNyQjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixtQ0FBbUM7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkIsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhLFdBQVc7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCOztBQUV4Qix5Q0FBeUMscUJBQXFCOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLG9CQUFvQjs7QUFFdEQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkIsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDBCQUEwQixpQkFBaUI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxjQUFjLGlCQUFpQjtBQUMvQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixvQkFBb0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0EsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBLGNBQWMsT0FBTztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFFVTtBQUNaO0FBQ0EsRUFBRSxtQ0FBbUI7QUFDckI7QUFDQSxHQUFHO0FBQUEsb0dBQUM7QUFDSixFQUFFLE1BQU0sRUFhTjs7QUFFRixDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL25vZGUtbGlicy1icm93c2VyL25vZGVfbW9kdWxlcy9wdW55Y29kZS9wdW55Y29kZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4xIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuNC4xJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/node-libs-browser/node_modules/punycode/punycode.js\n");
/***/ }),
/***/ "./node_modules/phaser/plugins/camera3d/src/Camera.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/plugins/camera3d/src/Camera.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2018 Photon Storm Ltd.\r\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../src/utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Matrix4 = __webpack_require__(/*! ../../../src/math/Matrix4 */ \"./node_modules/phaser/src/math/Matrix4.js\");\r\nvar RandomXYZ = __webpack_require__(/*! ../../../src/math/RandomXYZ */ \"./node_modules/phaser/src/math/RandomXYZ.js\");\r\nvar RandomXYZW = __webpack_require__(/*! ../../../src/math/RandomXYZW */ \"./node_modules/phaser/src/math/RandomXYZW.js\");\r\nvar RotateVec3 = __webpack_require__(/*! ../../../src/math/RotateVec3 */ \"./node_modules/phaser/src/math/RotateVec3.js\");\r\nvar Set = __webpack_require__(/*! ../../../src/structs/Set */ \"./node_modules/phaser/src/structs/Set.js\");\r\nvar Sprite3D = __webpack_require__(/*! ./sprite3d/Sprite3D */ \"./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3D.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../../src/math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\nvar Vector3 = __webpack_require__(/*! ../../../src/math/Vector3 */ \"./node_modules/phaser/src/math/Vector3.js\");\r\nvar Vector4 = __webpack_require__(/*! ../../../src/math/Vector4 */ \"./node_modules/phaser/src/math/Vector4.js\");\r\n\r\n// Local cache vars\r\nvar tmpVec3 = new Vector3();\r\nvar tmpVec4 = new Vector4();\r\nvar dirvec = new Vector3();\r\nvar rightvec = new Vector3();\r\nvar billboardMatrix = new Matrix4();\r\n\r\n// @author attribute https://github.com/mattdesl/cam3d/wiki\r\n\r\n/**\r\n * @typedef {object} RayDef\r\n *\r\n * @property {Phaser.Math.Vector3} origin - [description]\r\n * @property {Phaser.Math.Vector3} direction - [description]\r\n */\r\n\r\n/**\r\n * @classdesc\r\n * [description]\r\n *\r\n * @class Camera\r\n * @memberOf Phaser.Cameras.Sprite3D\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - [description]\r\n */\r\nvar Camera = new Class({\r\n\r\n initialize:\r\n\r\n function Camera (scene)\r\n {\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D#scene\r\n * @type {Phaser.Scene}\r\n * @since 3.0.0\r\n */\r\n this.scene = scene;\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D#displayList\r\n * @type {Phaser.GameObjects.DisplayList}\r\n * @since 3.0.0\r\n */\r\n this.displayList = scene.sys.displayList;\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D#updateList\r\n * @type {Phaser.GameObjects.UpdateList}\r\n * @since 3.0.0\r\n */\r\n this.updateList = scene.sys.updateList;\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D#name\r\n * @type {string}\r\n * @default ''\r\n * @since 3.0.0\r\n */\r\n this.name = '';\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D#direction\r\n * @type {Phaser.Math.Vector3}\r\n * @since 3.0.0\r\n */\r\n this.direction = new Vector3(0, 0, -1);\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D#up\r\n * @type {Phaser.Math.Vector3}\r\n * @since 3.0.0\r\n */\r\n this.up = new Vector3(0, 1, 0);\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D#position\r\n * @type {Phaser.Math.Vector3}\r\n * @since 3.0.0\r\n */\r\n this.position = new Vector3();\r\n\r\n\r\n /**\r\n * The mapping from 3D size units to pixels.\r\n * In the default case 1 3D unit = 128 pixels. So a sprite that is\r\n * 256 x 128 px in size will be 2 x 1 units.\r\n * Change to whatever best fits your game assets.\r\n *\r\n * @name Phaser.Cameras.Sprite3D#pixelScale\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.pixelScale = 128;\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D#projection\r\n * @type {Phaser.Math.Matrix4}\r\n * @since 3.0.0\r\n */\r\n this.projection = new Matrix4();\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D#view\r\n * @type {Phaser.Math.Matrix4}\r\n * @since 3.0.0\r\n */\r\n this.view = new Matrix4();\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D#combined\r\n * @type {Phaser.Math.Matrix4}\r\n * @since 3.0.0\r\n */\r\n this.combined = new Matrix4();\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D#invProjectionView\r\n * @type {Phaser.Math.Matrix4}\r\n * @since 3.0.0\r\n */\r\n this.invProjectionView = new Matrix4();\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D#near\r\n * @type {number}\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n this.near = 1;\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D#far\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.far = 100;\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D#ray\r\n * @type {RayDef}\r\n * @since 3.0.0\r\n */\r\n this.ray = {\r\n origin: new Vector3(),\r\n direction: new Vector3()\r\n };\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D#viewportWidth\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.viewportWidth = 0;\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D#viewportHeight\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.viewportHeight = 0;\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D#billboardMatrixDirty\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.billboardMatrixDirty = true;\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D#children\r\n * @type {Phaser.Structs.Set.<Phaser.GameObjects.GameObject>}\r\n * @since 3.0.0\r\n */\r\n this.children = new Set();\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#setPosition\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - [description]\r\n * @param {number} y - [description]\r\n * @param {number} z - [description]\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n */\r\n setPosition: function (x, y, z)\r\n {\r\n this.position.set(x, y, z);\r\n\r\n return this.update();\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#setScene\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - [description]\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n */\r\n setScene: function (scene)\r\n {\r\n this.scene = scene;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#setPixelScale\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - [description]\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n */\r\n setPixelScale: function (value)\r\n {\r\n this.pixelScale = value;\r\n\r\n return this.update();\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#add\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Sprite3D} sprite3D - [description]\r\n *\r\n * @return {Phaser.GameObjects.Sprite3D} [description]\r\n */\r\n add: function (sprite3D)\r\n {\r\n this.children.set(sprite3D);\r\n\r\n this.displayList.add(sprite3D.gameObject);\r\n this.updateList.add(sprite3D.gameObject);\r\n\r\n this.updateChildren();\r\n\r\n return sprite3D;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#remove\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} child - [description]\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n */\r\n remove: function (child)\r\n {\r\n this.displayList.remove(child.gameObject);\r\n this.updateList.remove(child.gameObject);\r\n\r\n this.children.delete(child);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#clear\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n */\r\n clear: function ()\r\n {\r\n var children = this.getChildren();\r\n\r\n for (var i = 0; i < children.length; i++)\r\n {\r\n this.remove(children[i]);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#getChildren\r\n * @since 3.0.0\r\n *\r\n * @return {array} [description]\r\n */\r\n getChildren: function ()\r\n {\r\n return this.children.entries;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#create\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - [description]\r\n * @param {number} y - [description]\r\n * @param {number} z - [description]\r\n * @param {string} key - [description]\r\n * @param {(string|number)} frame - [description]\r\n * @param {boolean} [visible=true] - [description]\r\n *\r\n * @return {Phaser.GameObjects.Sprite3D} [description]\r\n */\r\n create: function (x, y, z, key, frame, visible)\r\n {\r\n if (visible === undefined) { visible = true; }\r\n\r\n var child = new Sprite3D(this.scene, x, y, z, key, frame);\r\n\r\n this.displayList.add(child.gameObject);\r\n this.updateList.add(child.gameObject);\r\n\r\n child.visible = visible;\r\n\r\n this.children.set(child);\r\n\r\n this.updateChildren();\r\n\r\n return child;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#createMultiple\r\n * @since 3.0.0\r\n *\r\n * @param {number} quantity - [description]\r\n * @param {string} key - [description]\r\n * @param {(string|number)} frame - [description]\r\n * @param {boolean} [visible=true] - [description]\r\n *\r\n * @return {Phaser.GameObjects.Sprite3D[]} [description]\r\n */\r\n createMultiple: function (quantity, key, frame, visible)\r\n {\r\n if (visible === undefined) { visible = true; }\r\n\r\n var output = [];\r\n\r\n for (var i = 0; i < quantity; i++)\r\n {\r\n var child = new Sprite3D(this.scene, 0, 0, 0, key, frame);\r\n\r\n this.displayList.add(child.gameObject);\r\n this.updateList.add(child.gameObject);\r\n\r\n child.visible = visible;\r\n\r\n this.children.set(child);\r\n\r\n output.push(child);\r\n }\r\n\r\n return output;\r\n },\r\n\r\n // Create a bunch of Sprite3D objects in a rectangle\r\n // size and spacing are Vec3s (or if integers are converted to vec3s)\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#createRect\r\n * @since 3.0.0\r\n *\r\n * @param {(number|{x:number,y:number})} size - [description]\r\n * @param {(number|{x:number,y:number,z:number})} spacing - [description]\r\n * @param {string} key - [description]\r\n * @param {(string|number)} [frame] - [description]\r\n *\r\n * @return {Phaser.GameObjects.Sprite3D[]} [description]\r\n */\r\n createRect: function (size, spacing, key, frame)\r\n {\r\n if (typeof size === 'number') { size = { x: size, y: size, z: size }; }\r\n if (typeof spacing === 'number') { spacing = { x: spacing, y: spacing, z: spacing }; }\r\n\r\n var quantity = size.x * size.y * size.z;\r\n\r\n var sprites = this.createMultiple(quantity, key, frame);\r\n\r\n var i = 0;\r\n\r\n for (var z = 0.5 - (size.z / 2); z < (size.z / 2); z++)\r\n {\r\n for (var y = 0.5 - (size.y / 2); y < (size.y / 2); y++)\r\n {\r\n for (var x = 0.5 - (size.x / 2); x < (size.x / 2); x++)\r\n {\r\n var bx = (x * spacing.x);\r\n var by = (y * spacing.y);\r\n var bz = (z * spacing.z);\r\n\r\n sprites[i].position.set(bx, by, bz);\r\n\r\n i++;\r\n }\r\n }\r\n }\r\n\r\n this.update();\r\n\r\n return sprites;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#randomSphere\r\n * @since 3.0.0\r\n *\r\n * @param {number} [radius=1] - [description]\r\n * @param {Phaser.GameObjects.Sprite3D[]} [sprites] - [description]\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n */\r\n randomSphere: function (radius, sprites)\r\n {\r\n if (sprites === undefined) { sprites = this.getChildren(); }\r\n\r\n for (var i = 0; i < sprites.length; i++)\r\n {\r\n RandomXYZ(sprites[i].position, radius);\r\n }\r\n\r\n return this.update();\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#randomCube\r\n * @since 3.0.0\r\n *\r\n * @param {number} [scale=1] - [description]\r\n * @param {Phaser.GameObjects.Sprite3D[]} [sprites] - [description]\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n */\r\n randomCube: function (scale, sprites)\r\n {\r\n if (sprites === undefined) { sprites = this.getChildren(); }\r\n\r\n for (var i = 0; i < sprites.length; i++)\r\n {\r\n RandomXYZW(sprites[i].position, scale);\r\n }\r\n\r\n return this.update();\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#translateChildren\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Math.Vector3} vec3 - [description]\r\n * @param {Phaser.GameObjects.Sprite3D[]} sprites - [description]\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n */\r\n translateChildren: function (vec3, sprites)\r\n {\r\n if (sprites === undefined) { sprites = this.getChildren(); }\r\n\r\n for (var i = 0; i < sprites.length; i++)\r\n {\r\n sprites[i].position.add(vec3);\r\n }\r\n\r\n return this.update();\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#transformChildren\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Math.Matrix4} mat4 - [description]\r\n * @param {Phaser.GameObjects.Sprite3D[]} sprites - [description]\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n */\r\n transformChildren: function (mat4, sprites)\r\n {\r\n if (sprites === undefined) { sprites = this.getChildren(); }\r\n\r\n for (var i = 0; i < sprites.length; i++)\r\n {\r\n sprites[i].position.transformMat4(mat4);\r\n }\r\n\r\n return this.update();\r\n },\r\n\r\n /**\r\n * Sets the width and height of the viewport. Does not update any matrices.\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#setViewport\r\n * @since 3.0.0\r\n *\r\n * @param {number} width - [description]\r\n * @param {number} height - [description]\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n */\r\n setViewport: function (width, height)\r\n {\r\n this.viewportWidth = width;\r\n this.viewportHeight = height;\r\n\r\n return this.update();\r\n },\r\n\r\n /**\r\n * Translates this camera by a specified Vector3 object\r\n * or x, y, z parameters. Any undefined x y z values will\r\n * default to zero, leaving that component unaffected.\r\n * If you wish to set the camera position directly call setPosition instead.\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#translate\r\n * @since 3.0.0\r\n *\r\n * @param {(number|object)} x - [description]\r\n * @param {number} [y] - [description]\r\n * @param {number} [z] - [description]\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n */\r\n translate: function (x, y, z)\r\n {\r\n if (typeof x === 'object')\r\n {\r\n this.position.x += x.x || 0;\r\n this.position.y += x.y || 0;\r\n this.position.z += x.z || 0;\r\n }\r\n else\r\n {\r\n this.position.x += x || 0;\r\n this.position.y += y || 0;\r\n this.position.z += z || 0;\r\n }\r\n\r\n return this.update();\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#lookAt\r\n * @since 3.0.0\r\n *\r\n * @param {(number|object)} x - [description]\r\n * @param {number} [y] - [description]\r\n * @param {number} [z] - [description]\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n */\r\n lookAt: function (x, y, z)\r\n {\r\n var dir = this.direction;\r\n var up = this.up;\r\n\r\n if (typeof x === 'object')\r\n {\r\n dir.copy(x);\r\n }\r\n else\r\n {\r\n dir.set(x, y, z);\r\n }\r\n\r\n dir.subtract(this.position).normalize();\r\n\r\n // Calculate right vector\r\n tmpVec3.copy(dir).cross(up).normalize();\r\n\r\n // Calculate up vector\r\n up.copy(tmpVec3).cross(dir).normalize();\r\n\r\n return this.update();\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#rotate\r\n * @since 3.0.0\r\n *\r\n * @param {number} radians - [description]\r\n * @param {Phaser.Math.Vector3} axis - [description]\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n */\r\n rotate: function (radians, axis)\r\n {\r\n RotateVec3(this.direction, axis, radians);\r\n RotateVec3(this.up, axis, radians);\r\n\r\n return this.update();\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#rotateAround\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Math.Vector3} point - [description]\r\n * @param {number} radians - [description]\r\n * @param {Phaser.Math.Vector3} axis - [description]\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n */\r\n rotateAround: function (point, radians, axis)\r\n {\r\n tmpVec3.copy(point).subtract(this.position);\r\n\r\n this.translate(tmpVec3);\r\n this.rotate(radians, axis);\r\n this.translate(tmpVec3.negate());\r\n\r\n return this.update();\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#project\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Math.Vector3} vec - [description]\r\n * @param {Phaser.Math.Vector4} out - [description]\r\n *\r\n * @return {Phaser.Math.Vector4} [description]\r\n */\r\n project: function (vec, out)\r\n {\r\n if (out === undefined) { out = new Vector4(); }\r\n\r\n // TODO: support viewport XY\r\n var viewportWidth = this.viewportWidth;\r\n var viewportHeight = this.viewportHeight;\r\n var n = Camera.NEAR_RANGE;\r\n var f = Camera.FAR_RANGE;\r\n\r\n // For useful Z and W values we should do the usual steps: clip space -> NDC -> window coords\r\n\r\n // Implicit 1.0 for w component\r\n tmpVec4.set(vec.x, vec.y, vec.z, 1.0);\r\n\r\n // Transform into clip space\r\n tmpVec4.transformMat4(this.combined);\r\n\r\n // Avoid divide by zero when 0x0x0 camera projects to a 0x0x0 vec3\r\n if (tmpVec4.w === 0)\r\n {\r\n tmpVec4.w = 1;\r\n }\r\n\r\n // Now into NDC\r\n tmpVec4.x = tmpVec4.x / tmpVec4.w;\r\n tmpVec4.y = tmpVec4.y / tmpVec4.w;\r\n tmpVec4.z = tmpVec4.z / tmpVec4.w;\r\n\r\n // And finally into window coordinates\r\n out.x = viewportWidth / 2 * tmpVec4.x + (0 + viewportWidth / 2);\r\n out.y = viewportHeight / 2 * tmpVec4.y + (0 + viewportHeight / 2);\r\n out.z = (f - n) / 2 * tmpVec4.z + (f + n) / 2;\r\n\r\n // If the out vector has a fourth component, we also store (1/clip.w), same idea as gl_FragCoord.w\r\n if (out.w === 0 || out.w)\r\n {\r\n out.w = 1 / tmpVec4.w;\r\n }\r\n\r\n return out;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#unproject\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Math.Vector4} vec - [description]\r\n * @param {Phaser.Math.Vector3} out - [description]\r\n *\r\n * @return {Phaser.Math.Vector3} [description]\r\n */\r\n unproject: function (vec, out)\r\n {\r\n if (out === undefined) { out = new Vector3(); }\r\n\r\n var viewport = tmpVec4.set(0, 0, this.viewportWidth, this.viewportHeight);\r\n\r\n return out.copy(vec).unproject(viewport, this.invProjectionView);\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#getPickRay\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - [description]\r\n * @param {number} [y] - [description]\r\n *\r\n * @return {RayDef} [description]\r\n */\r\n getPickRay: function (x, y)\r\n {\r\n var origin = this.ray.origin.set(x, y, 0);\r\n var direction = this.ray.direction.set(x, y, 1);\r\n var viewport = tmpVec4.set(0, 0, this.viewportWidth, this.viewportHeight);\r\n var mtx = this.invProjectionView;\r\n\r\n origin.unproject(viewport, mtx);\r\n\r\n direction.unproject(viewport, mtx);\r\n\r\n direction.subtract(origin).normalize();\r\n\r\n return this.ray;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#updateChildren\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n */\r\n updateChildren: function ()\r\n {\r\n var children = this.children.entries;\r\n\r\n for (var i = 0; i < children.length; i++)\r\n {\r\n children[i].project(this);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n // Overridden by subclasses\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#update\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n */\r\n update: function ()\r\n {\r\n return this.updateChildren();\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#updateBillboardMatrix\r\n * @since 3.0.0\r\n */\r\n updateBillboardMatrix: function ()\r\n {\r\n var dir = dirvec.set(this.direction).negate();\r\n\r\n // Better view-aligned billboards might use this:\r\n // var dir = tmp.set(camera.position).subtract(p).normalize();\r\n\r\n var right = rightvec.set(this.up).cross(dir).normalize();\r\n var up = tmpVec3.set(dir).cross(right).normalize();\r\n\r\n var out = billboardMatrix.val;\r\n\r\n out[0] = right.x;\r\n out[1] = right.y;\r\n out[2] = right.z;\r\n out[3] = 0;\r\n\r\n out[4] = up.x;\r\n out[5] = up.y;\r\n out[6] = up.z;\r\n out[7] = 0;\r\n\r\n out[8] = dir.x;\r\n out[9] = dir.y;\r\n out[10] = dir.z;\r\n out[11] = 0;\r\n\r\n out[12] = 0;\r\n out[13] = 0;\r\n out[14] = 0;\r\n out[15] = 1;\r\n\r\n this.billboardMatrixDirty = false;\r\n },\r\n\r\n /**\r\n * This is a utility function for canvas 3D rendering,\r\n * which determines the \"point size\" of a camera-facing\r\n * sprite billboard given its 3D world position\r\n * (origin at center of sprite) and its world width\r\n * and height in x/y.\r\n *\r\n * We place into the output Vector2 the scaled width\r\n * and height. If no `out` is specified, a new Vector2\r\n * will be created for convenience (this should be avoided\r\n * in tight loops).\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#getPointSize\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Math.Vector2} vec - The position of the 3D Sprite.\r\n * @param {Phaser.Math.Vector2} size - The x and y dimensions.\r\n * @param {Phaser.Math.Vector2} out - The result, scaled x and y dimensions.\r\n *\r\n * @return {Phaser.Math.Vector2} [description]\r\n */\r\n getPointSize: function (vec, size, out)\r\n {\r\n if (out === undefined) { out = new Vector2(); }\r\n\r\n // TODO: optimize this with a simple distance calculation:\r\n // https://developer.valvesoftware.com/wiki/Field_of_View\r\n\r\n if (this.billboardMatrixDirty)\r\n {\r\n this.updateBillboardMatrix();\r\n }\r\n\r\n var tmp = tmpVec3;\r\n\r\n var dx = (size.x / this.pixelScale) / 2;\r\n var dy = (size.y / this.pixelScale) / 2;\r\n\r\n tmp.set(-dx, -dy, 0).transformMat4(billboardMatrix).add(vec);\r\n\r\n this.project(tmp, tmp);\r\n\r\n var tlx = tmp.x;\r\n var tly = tmp.y;\r\n\r\n tmp.set(dx, dy, 0).transformMat4(billboardMatrix).add(vec);\r\n\r\n this.project(tmp, tmp);\r\n\r\n var brx = tmp.x;\r\n var bry = tmp.y;\r\n\r\n // var w = Math.abs(brx - tlx);\r\n // var h = Math.abs(bry - tly);\r\n\r\n // Allow the projection to get negative ...\r\n var w = brx - tlx;\r\n var h = bry - tly;\r\n\r\n return out.set(w, h);\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#destroy\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.children.clear();\r\n\r\n this.scene = undefined;\r\n this.children = undefined;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#setX\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - [description]\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n */\r\n setX: function (value)\r\n {\r\n this.position.x = value;\r\n\r\n return this.update();\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#setY\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - [description]\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n */\r\n setY: function (value)\r\n {\r\n this.position.y = value;\r\n\r\n return this.update();\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.Camera#setZ\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - [description]\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.Camera} This Camera object.\r\n */\r\n setZ: function (value)\r\n {\r\n this.position.z = value;\r\n\r\n return this.update();\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D.Camera#x\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n x: {\r\n get: function ()\r\n {\r\n return this.position.x;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.position.x = value;\r\n this.update();\r\n }\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D.Camera#y\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n y: {\r\n get: function ()\r\n {\r\n return this.position.y;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.position.y = value;\r\n this.update();\r\n }\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D.Camera#z\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n z: {\r\n get: function ()\r\n {\r\n return this.position.z;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.position.z = value;\r\n this.update();\r\n }\r\n }\r\n\r\n});\r\n\r\nCamera.FAR_RANGE = 1.0;\r\nCamera.NEAR_RANGE = 0.0;\r\n\r\nmodule.exports = Camera;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvY2FtZXJhM2Qvc3JjL0NhbWVyYS5qcz80NjFmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsMEVBQTBCO0FBQzlDLGNBQWMsbUJBQU8sQ0FBQyw0RUFBMkI7QUFDakQsZ0JBQWdCLG1CQUFPLENBQUMsZ0ZBQTZCO0FBQ3JELGlCQUFpQixtQkFBTyxDQUFDLGtGQUE4QjtBQUN2RCxpQkFBaUIsbUJBQU8sQ0FBQyxrRkFBOEI7QUFDdkQsVUFBVSxtQkFBTyxDQUFDLDBFQUEwQjtBQUM1QyxlQUFlLG1CQUFPLENBQUMsNEZBQXFCO0FBQzVDLGNBQWMsbUJBQU8sQ0FBQyw0RUFBMkI7QUFDakQsY0FBYyxtQkFBTyxDQUFDLDRFQUEyQjtBQUNqRCxjQUFjLG1CQUFPLENBQUMsNEVBQTJCOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQSxjQUFjLG9CQUFvQjtBQUNsQyxjQUFjLG9CQUFvQjtBQUNsQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw0QkFBNEI7QUFDM0M7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsZ0JBQWdCO0FBQy9CLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLGdCQUFnQjs7QUFFcEQ7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLGdCQUFnQjtBQUMvQixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxnQkFBZ0I7O0FBRXBEOztBQUVBLHVCQUF1QixjQUFjO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTLGtCQUFrQixFQUFFO0FBQzVDLGVBQWUsU0FBUywyQkFBMkIsRUFBRTtBQUNyRCxlQUFlLE9BQU87QUFDdEIsZUFBZSxnQkFBZ0I7QUFDL0I7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxTQUFTLDZCQUE2QjtBQUM3RSwwQ0FBMEMsWUFBWSxzQ0FBc0M7O0FBRTVGOztBQUVBOztBQUVBOztBQUVBLHdDQUF3QyxrQkFBa0I7QUFDMUQ7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlEO0FBQ0EsZ0RBQWdELGtCQUFrQjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsOEJBQThCOztBQUVsRSx1QkFBdUIsb0JBQW9CO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsOEJBQThCOztBQUVsRSx1QkFBdUIsb0JBQW9CO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyw4QkFBOEI7O0FBRWxFLHVCQUF1QixvQkFBb0I7QUFDM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQyxlQUFlLDhCQUE4QjtBQUM3QztBQUNBLGdCQUFnQiwrQkFBK0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLDhCQUE4Qjs7QUFFbEUsdUJBQXVCLG9CQUFvQjtBQUMzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0JBQWdCO0FBQy9CLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnQkFBZ0I7QUFDL0IsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwrQkFBK0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQyxlQUFlLE9BQU87QUFDdEIsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxxQkFBcUI7O0FBRXJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxxQkFBcUI7O0FBRXJEOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiwrQkFBK0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLHFCQUFxQjtBQUM1QztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxxQkFBcUI7O0FBRXJEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9wbHVnaW5zL2NhbWVyYTNkL3NyYy9DYW1lcmEuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE4IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waG90b25zdG9ybS9waGFzZXIvYmxvYi9tYXN0ZXIvbGljZW5zZS50eHR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vLi4vc3JjL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBNYXRyaXg0ID0gcmVxdWlyZSgnLi4vLi4vLi4vc3JjL21hdGgvTWF0cml4NCcpO1xyXG52YXIgUmFuZG9tWFlaID0gcmVxdWlyZSgnLi4vLi4vLi4vc3JjL21hdGgvUmFuZG9tWFlaJyk7XHJcbnZhciBSYW5kb21YWVpXID0gcmVxdWlyZSgnLi4vLi4vLi4vc3JjL21hdGgvUmFuZG9tWFlaVycpO1xyXG52YXIgUm90YXRlVmVjMyA9IHJlcXVpcmUoJy4uLy4uLy4uL3NyYy9tYXRoL1JvdGF0ZVZlYzMnKTtcclxudmFyIFNldCA9IHJlcXVpcmUoJy4uLy4uLy4uL3NyYy9zdHJ1Y3RzL1NldCcpO1xyXG52YXIgU3ByaXRlM0QgPSByZXF1aXJlKCcuL3Nwcml0ZTNkL1Nwcml0ZTNEJyk7XHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vLi4vLi4vc3JjL21hdGgvVmVjdG9yMicpO1xyXG52YXIgVmVjdG9yMyA9IHJlcXVpcmUoJy4uLy4uLy4uL3NyYy9tYXRoL1ZlY3RvcjMnKTtcclxudmFyIFZlY3RvcjQgPSByZXF1aXJlKCcuLi8uLi8uLi9zcmMvbWF0aC9WZWN0b3I0Jyk7XHJcblxyXG4vLyAgTG9jYWwgY2FjaGUgdmFyc1xyXG52YXIgdG1wVmVjMyA9IG5ldyBWZWN0b3IzKCk7XHJcbnZhciB0bXBWZWM0ID0gbmV3IFZlY3RvcjQoKTtcclxudmFyIGRpcnZlYyA9IG5ldyBWZWN0b3IzKCk7XHJcbnZhciByaWdodHZlYyA9IG5ldyBWZWN0b3IzKCk7XHJcbnZhciBiaWxsYm9hcmRNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuLy8gIEBhdXRob3IgYXR0cmlidXRlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9jYW0zZC93aWtpXHJcblxyXG4vKipcclxuICogQHR5cGVkZWYge29iamVjdH0gUmF5RGVmXHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7UGhhc2VyLk1hdGguVmVjdG9yM30gb3JpZ2luIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcHJvcGVydHkge1BoYXNlci5NYXRoLlZlY3RvcjN9IGRpcmVjdGlvbiAtIFtkZXNjcmlwdGlvbl1cclxuICovXHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBjbGFzcyBDYW1lcmFcclxuICogQG1lbWJlck9mIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNEXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKi9cclxudmFyIENhbWVyYSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBDYW1lcmEgKHNjZW5lKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNEI3NjZW5lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2VuZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNEI2Rpc3BsYXlMaXN0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5EaXNwbGF5TGlzdH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRpc3BsYXlMaXN0ID0gc2NlbmUuc3lzLmRpc3BsYXlMaXN0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRCN1cGRhdGVMaXN0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5VcGRhdGVMaXN0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlzdCA9IHNjZW5lLnN5cy51cGRhdGVMaXN0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRCNuYW1lXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAZGVmYXVsdCAnJ1xyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubmFtZSA9ICcnO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRCNkaXJlY3Rpb25cclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yM31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IG5ldyBWZWN0b3IzKDAsIDAsIC0xKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QjdXBcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yM31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnVwID0gbmV3IFZlY3RvcjMoMCwgMSwgMCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNEI3Bvc2l0aW9uXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjN9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiAgVGhlIG1hcHBpbmcgZnJvbSAzRCBzaXplIHVuaXRzIHRvIHBpeGVscy5cclxuICAgICAgICAgKiAgSW4gdGhlIGRlZmF1bHQgY2FzZSAxIDNEIHVuaXQgPSAxMjggcGl4ZWxzLiBTbyBhIHNwcml0ZSB0aGF0IGlzXHJcbiAgICAgICAgICogIDI1NiB4IDEyOCBweCBpbiBzaXplIHdpbGwgYmUgMiB4IDEgdW5pdHMuXHJcbiAgICAgICAgICogIENoYW5nZSB0byB3aGF0ZXZlciBiZXN0IGZpdHMgeW91ciBnYW1lIGFzc2V0cy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNEI3BpeGVsU2NhbGVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGl4ZWxTY2FsZSA9IDEyODtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QjcHJvamVjdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5NYXRyaXg0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucHJvamVjdGlvbiA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNEI3ZpZXdcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguTWF0cml4NH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZpZXcgPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRCNjb21iaW5lZFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5NYXRyaXg0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY29tYmluZWQgPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRCNpbnZQcm9qZWN0aW9uVmlld1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5NYXRyaXg0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW52UHJvamVjdGlvblZpZXcgPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRCNuZWFyXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5uZWFyID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QjZmFyXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZhciA9IDEwMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QjcmF5XHJcbiAgICAgICAgICogQHR5cGUge1JheURlZn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJheSA9IHtcclxuICAgICAgICAgICAgb3JpZ2luOiBuZXcgVmVjdG9yMygpLFxyXG4gICAgICAgICAgICBkaXJlY3Rpb246IG5ldyBWZWN0b3IzKClcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRCN2aWV3cG9ydFdpZHRoXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52aWV3cG9ydFdpZHRoID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0Qjdmlld3BvcnRIZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZpZXdwb3J0SGVpZ2h0ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QjYmlsbGJvYXJkTWF0cml4RGlydHlcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5iaWxsYm9hcmRNYXRyaXhEaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNEI2NoaWxkcmVuXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TdHJ1Y3RzLlNldC48UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Q+fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBuZXcgU2V0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhI3NldFBvc2l0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHogLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhfSBUaGlzIENhbWVyYSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFBvc2l0aW9uOiBmdW5jdGlvbiAoeCwgeSwgeilcclxuICAgIHtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uLnNldCh4LCB5LCB6KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhI3NldFNjZW5lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhfSBUaGlzIENhbWVyYSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFNjZW5lOiBmdW5jdGlvbiAoc2NlbmUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjc2V0UGl4ZWxTY2FsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYX0gVGhpcyBDYW1lcmEgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRQaXhlbFNjYWxlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5waXhlbFNjYWxlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYSNhZGRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZTNEfSBzcHJpdGUzRCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlM0R9IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoc3ByaXRlM0QpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zZXQoc3ByaXRlM0QpO1xyXG5cclxuICAgICAgICB0aGlzLmRpc3BsYXlMaXN0LmFkZChzcHJpdGUzRC5nYW1lT2JqZWN0KTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpc3QuYWRkKHNwcml0ZTNELmdhbWVPYmplY3QpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUNoaWxkcmVuKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBzcHJpdGUzRDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjcmVtb3ZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBjaGlsZCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmF9IFRoaXMgQ2FtZXJhIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAoY2hpbGQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5TGlzdC5yZW1vdmUoY2hpbGQuZ2FtZU9iamVjdCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaXN0LnJlbW92ZShjaGlsZC5nYW1lT2JqZWN0KTtcclxuXHJcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5kZWxldGUoY2hpbGQpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjY2xlYXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYX0gVGhpcyBDYW1lcmEgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBjbGVhcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmdldENoaWxkcmVuKCk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZShjaGlsZHJlbltpXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjZ2V0Q2hpbGRyZW5cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2FycmF5fSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGdldENoaWxkcmVuOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmVudHJpZXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhI2NyZWF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB6IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xudW1iZXIpfSBmcmFtZSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Zpc2libGU9dHJ1ZV0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZTNEfSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZTogZnVuY3Rpb24gKHgsIHksIHosIGtleSwgZnJhbWUsIHZpc2libGUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHZpc2libGUgPT09IHVuZGVmaW5lZCkgeyB2aXNpYmxlID0gdHJ1ZTsgfVxyXG5cclxuICAgICAgICB2YXIgY2hpbGQgPSBuZXcgU3ByaXRlM0QodGhpcy5zY2VuZSwgeCwgeSwgeiwga2V5LCBmcmFtZSk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlzcGxheUxpc3QuYWRkKGNoaWxkLmdhbWVPYmplY3QpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlzdC5hZGQoY2hpbGQuZ2FtZU9iamVjdCk7XHJcblxyXG4gICAgICAgIGNoaWxkLnZpc2libGUgPSB2aXNpYmxlO1xyXG5cclxuICAgICAgICB0aGlzLmNoaWxkcmVuLnNldChjaGlsZCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQ2hpbGRyZW4oKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYSNjcmVhdGVNdWx0aXBsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHF1YW50aXR5IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xudW1iZXIpfSBmcmFtZSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Zpc2libGU9dHJ1ZV0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZTNEW119IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgY3JlYXRlTXVsdGlwbGU6IGZ1bmN0aW9uIChxdWFudGl0eSwga2V5LCBmcmFtZSwgdmlzaWJsZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmlzaWJsZSA9PT0gdW5kZWZpbmVkKSB7IHZpc2libGUgPSB0cnVlOyB9XHJcblxyXG4gICAgICAgIHZhciBvdXRwdXQgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWFudGl0eTsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNoaWxkID0gbmV3IFNwcml0ZTNEKHRoaXMuc2NlbmUsIDAsIDAsIDAsIGtleSwgZnJhbWUpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5TGlzdC5hZGQoY2hpbGQuZ2FtZU9iamVjdCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTGlzdC5hZGQoY2hpbGQuZ2FtZU9iamVjdCk7XHJcblxyXG4gICAgICAgICAgICBjaGlsZC52aXNpYmxlID0gdmlzaWJsZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uc2V0KGNoaWxkKTtcclxuXHJcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKGNoaWxkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vICBDcmVhdGUgYSBidW5jaCBvZiBTcHJpdGUzRCBvYmplY3RzIGluIGEgcmVjdGFuZ2xlXHJcbiAgICAvLyAgc2l6ZSBhbmQgc3BhY2luZyBhcmUgVmVjM3MgKG9yIGlmIGludGVnZXJzIGFyZSBjb252ZXJ0ZWQgdG8gdmVjM3MpXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYSNjcmVhdGVSZWN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhudW1iZXJ8e3g6bnVtYmVyLHk6bnVtYmVyfSl9IHNpemUgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0geyhudW1iZXJ8e3g6bnVtYmVyLHk6bnVtYmVyLHo6bnVtYmVyfSl9IHNwYWNpbmcgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfG51bWJlcil9IFtmcmFtZV0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZTNEW119IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgY3JlYXRlUmVjdDogZnVuY3Rpb24gKHNpemUsIHNwYWNpbmcsIGtleSwgZnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzaXplID09PSAnbnVtYmVyJykgeyBzaXplID0geyB4OiBzaXplLCB5OiBzaXplLCB6OiBzaXplIH07IH1cclxuICAgICAgICBpZiAodHlwZW9mIHNwYWNpbmcgPT09ICdudW1iZXInKSB7IHNwYWNpbmcgPSB7IHg6IHNwYWNpbmcsIHk6IHNwYWNpbmcsIHo6IHNwYWNpbmcgfTsgfVxyXG5cclxuICAgICAgICB2YXIgcXVhbnRpdHkgPSBzaXplLnggKiBzaXplLnkgKiBzaXplLno7XHJcblxyXG4gICAgICAgIHZhciBzcHJpdGVzID0gdGhpcy5jcmVhdGVNdWx0aXBsZShxdWFudGl0eSwga2V5LCBmcmFtZSk7XHJcblxyXG4gICAgICAgIHZhciBpID0gMDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgeiA9IDAuNSAtIChzaXplLnogLyAyKTsgeiA8IChzaXplLnogLyAyKTsgeisrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgeSA9IDAuNSAtIChzaXplLnkgLyAyKTsgeSA8IChzaXplLnkgLyAyKTsgeSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMC41IC0gKHNpemUueCAvIDIpOyB4IDwgKHNpemUueCAvIDIpOyB4KyspXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJ4ID0gKHggKiBzcGFjaW5nLngpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBieSA9ICh5ICogc3BhY2luZy55KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYnogPSAoeiAqIHNwYWNpbmcueik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNwcml0ZXNbaV0ucG9zaXRpb24uc2V0KGJ4LCBieSwgYnopO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBzcHJpdGVzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYSNyYW5kb21TcGhlcmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcmFkaXVzPTFdIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlM0RbXX0gW3Nwcml0ZXNdIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYX0gVGhpcyBDYW1lcmEgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByYW5kb21TcGhlcmU6IGZ1bmN0aW9uIChyYWRpdXMsIHNwcml0ZXMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHNwcml0ZXMgPT09IHVuZGVmaW5lZCkgeyBzcHJpdGVzID0gdGhpcy5nZXRDaGlsZHJlbigpOyB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ByaXRlcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIFJhbmRvbVhZWihzcHJpdGVzW2ldLnBvc2l0aW9uLCByYWRpdXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhI3JhbmRvbUN1YmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc2NhbGU9MV0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGUzRFtdfSBbc3ByaXRlc10gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhfSBUaGlzIENhbWVyYSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJhbmRvbUN1YmU6IGZ1bmN0aW9uIChzY2FsZSwgc3ByaXRlcylcclxuICAgIHtcclxuICAgICAgICBpZiAoc3ByaXRlcyA9PT0gdW5kZWZpbmVkKSB7IHNwcml0ZXMgPSB0aGlzLmdldENoaWxkcmVuKCk7IH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcHJpdGVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgUmFuZG9tWFlaVyhzcHJpdGVzW2ldLnBvc2l0aW9uLCBzY2FsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjdHJhbnNsYXRlQ2hpbGRyZW5cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yM30gdmVjMyAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZTNEW119IHNwcml0ZXMgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhfSBUaGlzIENhbWVyYSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHRyYW5zbGF0ZUNoaWxkcmVuOiBmdW5jdGlvbiAodmVjMywgc3ByaXRlcylcclxuICAgIHtcclxuICAgICAgICBpZiAoc3ByaXRlcyA9PT0gdW5kZWZpbmVkKSB7IHNwcml0ZXMgPSB0aGlzLmdldENoaWxkcmVuKCk7IH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcHJpdGVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc3ByaXRlc1tpXS5wb3NpdGlvbi5hZGQodmVjMyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjdHJhbnNmb3JtQ2hpbGRyZW5cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguTWF0cml4NH0gbWF0NCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZTNEW119IHNwcml0ZXMgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhfSBUaGlzIENhbWVyYSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHRyYW5zZm9ybUNoaWxkcmVuOiBmdW5jdGlvbiAobWF0NCwgc3ByaXRlcylcclxuICAgIHtcclxuICAgICAgICBpZiAoc3ByaXRlcyA9PT0gdW5kZWZpbmVkKSB7IHNwcml0ZXMgPSB0aGlzLmdldENoaWxkcmVuKCk7IH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcHJpdGVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc3ByaXRlc1tpXS5wb3NpdGlvbi50cmFuc2Zvcm1NYXQ0KG1hdDQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgdmlld3BvcnQuIERvZXMgbm90IHVwZGF0ZSBhbnkgbWF0cmljZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjc2V0Vmlld3BvcnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhfSBUaGlzIENhbWVyYSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFZpZXdwb3J0OiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnZpZXdwb3J0V2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLnZpZXdwb3J0SGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2xhdGVzIHRoaXMgY2FtZXJhIGJ5IGEgc3BlY2lmaWVkIFZlY3RvcjMgb2JqZWN0XHJcbiAgICAgKiBvciB4LCB5LCB6IHBhcmFtZXRlcnMuIEFueSB1bmRlZmluZWQgeCB5IHogdmFsdWVzIHdpbGxcclxuICAgICAqIGRlZmF1bHQgdG8gemVybywgbGVhdmluZyB0aGF0IGNvbXBvbmVudCB1bmFmZmVjdGVkLlxyXG4gICAgICogSWYgeW91IHdpc2ggdG8gc2V0IHRoZSBjYW1lcmEgcG9zaXRpb24gZGlyZWN0bHkgY2FsbCBzZXRQb3NpdGlvbiBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhI3RyYW5zbGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsobnVtYmVyfG9iamVjdCl9IHggLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ldIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt6XSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmF9IFRoaXMgQ2FtZXJhIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgdHJhbnNsYXRlOiBmdW5jdGlvbiAoeCwgeSwgeilcclxuICAgIHtcclxuICAgICAgICBpZiAodHlwZW9mIHggPT09ICdvYmplY3QnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbi54ICs9IHgueCB8fCAwO1xyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgKz0geC55IHx8IDA7XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueiArPSB4LnogfHwgMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbi54ICs9IHggfHwgMDtcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbi55ICs9IHkgfHwgMDtcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbi56ICs9IHogfHwgMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYSNsb29rQXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KG51bWJlcnxvYmplY3QpfSB4IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5XSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbel0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhfSBUaGlzIENhbWVyYSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGxvb2tBdDogZnVuY3Rpb24gKHgsIHksIHopXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGRpciA9IHRoaXMuZGlyZWN0aW9uO1xyXG4gICAgICAgIHZhciB1cCA9IHRoaXMudXA7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgeCA9PT0gJ29iamVjdCcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBkaXIuY29weSh4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZGlyLnNldCh4LCB5LCB6KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRpci5zdWJ0cmFjdCh0aGlzLnBvc2l0aW9uKS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgLy8gIENhbGN1bGF0ZSByaWdodCB2ZWN0b3JcclxuICAgICAgICB0bXBWZWMzLmNvcHkoZGlyKS5jcm9zcyh1cCkubm9ybWFsaXplKCk7XHJcblxyXG4gICAgICAgIC8vICBDYWxjdWxhdGUgdXAgdmVjdG9yXHJcbiAgICAgICAgdXAuY29weSh0bXBWZWMzKS5jcm9zcyhkaXIpLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjcm90YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkaWFucyAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yM30gYXhpcyAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmF9IFRoaXMgQ2FtZXJhIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcm90YXRlOiBmdW5jdGlvbiAocmFkaWFucywgYXhpcylcclxuICAgIHtcclxuICAgICAgICBSb3RhdGVWZWMzKHRoaXMuZGlyZWN0aW9uLCBheGlzLCByYWRpYW5zKTtcclxuICAgICAgICBSb3RhdGVWZWMzKHRoaXMudXAsIGF4aXMsIHJhZGlhbnMpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjcm90YXRlQXJvdW5kXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjN9IHBvaW50IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZGlhbnMgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjN9IGF4aXMgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhfSBUaGlzIENhbWVyYSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZUFyb3VuZDogZnVuY3Rpb24gKHBvaW50LCByYWRpYW5zLCBheGlzKVxyXG4gICAge1xyXG4gICAgICAgIHRtcFZlYzMuY29weShwb2ludCkuc3VidHJhY3QodGhpcy5wb3NpdGlvbik7XHJcblxyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlKHRtcFZlYzMpO1xyXG4gICAgICAgIHRoaXMucm90YXRlKHJhZGlhbnMsIGF4aXMpO1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlKHRtcFZlYzMubmVnYXRlKCkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjcHJvamVjdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IzfSB2ZWMgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjR9IG91dCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3I0fSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIHByb2plY3Q6IGZ1bmN0aW9uICh2ZWMsIG91dClcclxuICAgIHtcclxuICAgICAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFZlY3RvcjQoKTsgfVxyXG5cclxuICAgICAgICAvLyAgVE9ETzogc3VwcG9ydCB2aWV3cG9ydCBYWVxyXG4gICAgICAgIHZhciB2aWV3cG9ydFdpZHRoID0gdGhpcy52aWV3cG9ydFdpZHRoO1xyXG4gICAgICAgIHZhciB2aWV3cG9ydEhlaWdodCA9IHRoaXMudmlld3BvcnRIZWlnaHQ7XHJcbiAgICAgICAgdmFyIG4gPSBDYW1lcmEuTkVBUl9SQU5HRTtcclxuICAgICAgICB2YXIgZiA9IENhbWVyYS5GQVJfUkFOR0U7XHJcblxyXG4gICAgICAgIC8vICBGb3IgdXNlZnVsIFogYW5kIFcgdmFsdWVzIHdlIHNob3VsZCBkbyB0aGUgdXN1YWwgc3RlcHM6IGNsaXAgc3BhY2UgLT4gTkRDIC0+IHdpbmRvdyBjb29yZHNcclxuXHJcbiAgICAgICAgLy8gIEltcGxpY2l0IDEuMCBmb3IgdyBjb21wb25lbnRcclxuICAgICAgICB0bXBWZWM0LnNldCh2ZWMueCwgdmVjLnksIHZlYy56LCAxLjApO1xyXG5cclxuICAgICAgICAvLyAgVHJhbnNmb3JtIGludG8gY2xpcCBzcGFjZVxyXG4gICAgICAgIHRtcFZlYzQudHJhbnNmb3JtTWF0NCh0aGlzLmNvbWJpbmVkKTtcclxuXHJcbiAgICAgICAgLy8gIEF2b2lkIGRpdmlkZSBieSB6ZXJvIHdoZW4gMHgweDAgY2FtZXJhIHByb2plY3RzIHRvIGEgMHgweDAgdmVjM1xyXG4gICAgICAgIGlmICh0bXBWZWM0LncgPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0bXBWZWM0LncgPSAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIE5vdyBpbnRvIE5EQ1xyXG4gICAgICAgIHRtcFZlYzQueCA9IHRtcFZlYzQueCAvIHRtcFZlYzQudztcclxuICAgICAgICB0bXBWZWM0LnkgPSB0bXBWZWM0LnkgLyB0bXBWZWM0Lnc7XHJcbiAgICAgICAgdG1wVmVjNC56ID0gdG1wVmVjNC56IC8gdG1wVmVjNC53O1xyXG5cclxuICAgICAgICAvLyAgQW5kIGZpbmFsbHkgaW50byB3aW5kb3cgY29vcmRpbmF0ZXNcclxuICAgICAgICBvdXQueCA9IHZpZXdwb3J0V2lkdGggLyAyICogdG1wVmVjNC54ICsgKDAgKyB2aWV3cG9ydFdpZHRoIC8gMik7XHJcbiAgICAgICAgb3V0LnkgPSB2aWV3cG9ydEhlaWdodCAvIDIgKiB0bXBWZWM0LnkgKyAoMCArIHZpZXdwb3J0SGVpZ2h0IC8gMik7XHJcbiAgICAgICAgb3V0LnogPSAoZiAtIG4pIC8gMiAqIHRtcFZlYzQueiArIChmICsgbikgLyAyO1xyXG5cclxuICAgICAgICAvLyAgSWYgdGhlIG91dCB2ZWN0b3IgaGFzIGEgZm91cnRoIGNvbXBvbmVudCwgd2UgYWxzbyBzdG9yZSAoMS9jbGlwLncpLCBzYW1lIGlkZWEgYXMgZ2xfRnJhZ0Nvb3JkLndcclxuICAgICAgICBpZiAob3V0LncgPT09IDAgfHwgb3V0LncpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvdXQudyA9IDEgLyB0bXBWZWM0Lnc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYSN1bnByb2plY3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yNH0gdmVjIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IzfSBvdXQgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yM30gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICB1bnByb2plY3Q6IGZ1bmN0aW9uICh2ZWMsIG91dClcclxuICAgIHtcclxuICAgICAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFZlY3RvcjMoKTsgfVxyXG5cclxuICAgICAgICB2YXIgdmlld3BvcnQgPSB0bXBWZWM0LnNldCgwLCAwLCB0aGlzLnZpZXdwb3J0V2lkdGgsIHRoaXMudmlld3BvcnRIZWlnaHQpO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0LmNvcHkodmVjKS51bnByb2plY3Qodmlld3BvcnQsIHRoaXMuaW52UHJvamVjdGlvblZpZXcpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYSNnZXRQaWNrUmF5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeV0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UmF5RGVmfSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGdldFBpY2tSYXk6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBvcmlnaW4gPSB0aGlzLnJheS5vcmlnaW4uc2V0KHgsIHksIDApO1xyXG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLnJheS5kaXJlY3Rpb24uc2V0KHgsIHksIDEpO1xyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IHRtcFZlYzQuc2V0KDAsIDAsIHRoaXMudmlld3BvcnRXaWR0aCwgdGhpcy52aWV3cG9ydEhlaWdodCk7XHJcbiAgICAgICAgdmFyIG10eCA9IHRoaXMuaW52UHJvamVjdGlvblZpZXc7XHJcblxyXG4gICAgICAgIG9yaWdpbi51bnByb2plY3Qodmlld3BvcnQsIG10eCk7XHJcblxyXG4gICAgICAgIGRpcmVjdGlvbi51bnByb2plY3Qodmlld3BvcnQsIG10eCk7XHJcblxyXG4gICAgICAgIGRpcmVjdGlvbi5zdWJ0cmFjdChvcmlnaW4pLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5yYXk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhI3VwZGF0ZUNoaWxkcmVuXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmF9IFRoaXMgQ2FtZXJhIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlQ2hpbGRyZW46IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbi5lbnRyaWVzO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2hpbGRyZW5baV0ucHJvamVjdCh0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyAgT3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYSN1cGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYX0gVGhpcyBDYW1lcmEgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2hpbGRyZW4oKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjdXBkYXRlQmlsbGJvYXJkTWF0cml4XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdXBkYXRlQmlsbGJvYXJkTWF0cml4OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBkaXIgPSBkaXJ2ZWMuc2V0KHRoaXMuZGlyZWN0aW9uKS5uZWdhdGUoKTtcclxuXHJcbiAgICAgICAgLy8gQmV0dGVyIHZpZXctYWxpZ25lZCBiaWxsYm9hcmRzIG1pZ2h0IHVzZSB0aGlzOlxyXG4gICAgICAgIC8vIHZhciBkaXIgPSB0bXAuc2V0KGNhbWVyYS5wb3NpdGlvbikuc3VidHJhY3QocCkubm9ybWFsaXplKCk7XHJcblxyXG4gICAgICAgIHZhciByaWdodCA9IHJpZ2h0dmVjLnNldCh0aGlzLnVwKS5jcm9zcyhkaXIpLm5vcm1hbGl6ZSgpO1xyXG4gICAgICAgIHZhciB1cCA9IHRtcFZlYzMuc2V0KGRpcikuY3Jvc3MocmlnaHQpLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICB2YXIgb3V0ID0gYmlsbGJvYXJkTWF0cml4LnZhbDtcclxuXHJcbiAgICAgICAgb3V0WzBdID0gcmlnaHQueDtcclxuICAgICAgICBvdXRbMV0gPSByaWdodC55O1xyXG4gICAgICAgIG91dFsyXSA9IHJpZ2h0Lno7XHJcbiAgICAgICAgb3V0WzNdID0gMDtcclxuXHJcbiAgICAgICAgb3V0WzRdID0gdXAueDtcclxuICAgICAgICBvdXRbNV0gPSB1cC55O1xyXG4gICAgICAgIG91dFs2XSA9IHVwLno7XHJcbiAgICAgICAgb3V0WzddID0gMDtcclxuXHJcbiAgICAgICAgb3V0WzhdID0gZGlyLng7XHJcbiAgICAgICAgb3V0WzldID0gZGlyLnk7XHJcbiAgICAgICAgb3V0WzEwXSA9IGRpci56O1xyXG4gICAgICAgIG91dFsxMV0gPSAwO1xyXG5cclxuICAgICAgICBvdXRbMTJdID0gMDtcclxuICAgICAgICBvdXRbMTNdID0gMDtcclxuICAgICAgICBvdXRbMTRdID0gMDtcclxuICAgICAgICBvdXRbMTVdID0gMTtcclxuXHJcbiAgICAgICAgdGhpcy5iaWxsYm9hcmRNYXRyaXhEaXJ0eSA9IGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIGZvciBjYW52YXMgM0QgcmVuZGVyaW5nLFxyXG4gICAgICogd2hpY2ggZGV0ZXJtaW5lcyB0aGUgXCJwb2ludCBzaXplXCIgb2YgYSBjYW1lcmEtZmFjaW5nXHJcbiAgICAgKiBzcHJpdGUgYmlsbGJvYXJkIGdpdmVuIGl0cyAzRCB3b3JsZCBwb3NpdGlvblxyXG4gICAgICogKG9yaWdpbiBhdCBjZW50ZXIgb2Ygc3ByaXRlKSBhbmQgaXRzIHdvcmxkIHdpZHRoXHJcbiAgICAgKiBhbmQgaGVpZ2h0IGluIHgveS5cclxuICAgICAqXHJcbiAgICAgKiBXZSBwbGFjZSBpbnRvIHRoZSBvdXRwdXQgVmVjdG9yMiB0aGUgc2NhbGVkIHdpZHRoXHJcbiAgICAgKiBhbmQgaGVpZ2h0LiBJZiBubyBgb3V0YCBpcyBzcGVjaWZpZWQsIGEgbmV3IFZlY3RvcjJcclxuICAgICAqIHdpbGwgYmUgY3JlYXRlZCBmb3IgY29udmVuaWVuY2UgKHRoaXMgc2hvdWxkIGJlIGF2b2lkZWRcclxuICAgICAqIGluIHRpZ2h0IGxvb3BzKS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYSNnZXRQb2ludFNpemVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gdmVjIC0gVGhlIHBvc2l0aW9uIG9mIHRoZSAzRCBTcHJpdGUuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IHNpemUgLSBUaGUgeCBhbmQgeSBkaW1lbnNpb25zLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBvdXQgLSBUaGUgcmVzdWx0LCBzY2FsZWQgeCBhbmQgeSBkaW1lbnNpb25zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgZ2V0UG9pbnRTaXplOiBmdW5jdGlvbiAodmVjLCBzaXplLCBvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgLy8gVE9ETzogb3B0aW1pemUgdGhpcyB3aXRoIGEgc2ltcGxlIGRpc3RhbmNlIGNhbGN1bGF0aW9uOlxyXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLnZhbHZlc29mdHdhcmUuY29tL3dpa2kvRmllbGRfb2ZfVmlld1xyXG5cclxuICAgICAgICBpZiAodGhpcy5iaWxsYm9hcmRNYXRyaXhEaXJ0eSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQmlsbGJvYXJkTWF0cml4KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdG1wID0gdG1wVmVjMztcclxuXHJcbiAgICAgICAgdmFyIGR4ID0gKHNpemUueCAvIHRoaXMucGl4ZWxTY2FsZSkgLyAyO1xyXG4gICAgICAgIHZhciBkeSA9IChzaXplLnkgLyB0aGlzLnBpeGVsU2NhbGUpIC8gMjtcclxuXHJcbiAgICAgICAgdG1wLnNldCgtZHgsIC1keSwgMCkudHJhbnNmb3JtTWF0NChiaWxsYm9hcmRNYXRyaXgpLmFkZCh2ZWMpO1xyXG5cclxuICAgICAgICB0aGlzLnByb2plY3QodG1wLCB0bXApO1xyXG5cclxuICAgICAgICB2YXIgdGx4ID0gdG1wLng7XHJcbiAgICAgICAgdmFyIHRseSA9IHRtcC55O1xyXG5cclxuICAgICAgICB0bXAuc2V0KGR4LCBkeSwgMCkudHJhbnNmb3JtTWF0NChiaWxsYm9hcmRNYXRyaXgpLmFkZCh2ZWMpO1xyXG5cclxuICAgICAgICB0aGlzLnByb2plY3QodG1wLCB0bXApO1xyXG5cclxuICAgICAgICB2YXIgYnJ4ID0gdG1wLng7XHJcbiAgICAgICAgdmFyIGJyeSA9IHRtcC55O1xyXG5cclxuICAgICAgICAvLyB2YXIgdyA9IE1hdGguYWJzKGJyeCAtIHRseCk7XHJcbiAgICAgICAgLy8gdmFyIGggPSBNYXRoLmFicyhicnkgLSB0bHkpO1xyXG5cclxuICAgICAgICAvLyAgQWxsb3cgdGhlIHByb2plY3Rpb24gdG8gZ2V0IG5lZ2F0aXZlIC4uLlxyXG4gICAgICAgIHZhciB3ID0gYnJ4IC0gdGx4O1xyXG4gICAgICAgIHZhciBoID0gYnJ5IC0gdGx5O1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0LnNldCh3LCBoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5jbGVhcigpO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSB1bmRlZmluZWQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhI3NldFhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmF9IFRoaXMgQ2FtZXJhIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0WDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjc2V0WVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYX0gVGhpcyBDYW1lcmEgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRZOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbi55ID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYSNzZXRaXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhfSBUaGlzIENhbWVyYSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFo6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uLnogPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYSN4XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHg6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbi54O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbi54ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmEjeVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB5OiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhI3pcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgejoge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLno7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnogPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbkNhbWVyYS5GQVJfUkFOR0UgPSAxLjA7XHJcbkNhbWVyYS5ORUFSX1JBTkdFID0gMC4wO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDYW1lcmE7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/camera3d/src/Camera.js\n");
/***/ }),
/***/ "./node_modules/phaser/plugins/camera3d/src/CameraManager.js":
/*!*******************************************************************!*\
!*** ./node_modules/phaser/plugins/camera3d/src/CameraManager.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2018 Photon Storm Ltd.\r\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../src/utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar OrthographicCamera = __webpack_require__(/*! ./OrthographicCamera */ \"./node_modules/phaser/plugins/camera3d/src/OrthographicCamera.js\");\r\nvar PerspectiveCamera = __webpack_require__(/*! ./PerspectiveCamera */ \"./node_modules/phaser/plugins/camera3d/src/PerspectiveCamera.js\");\r\nvar PluginCache = __webpack_require__(/*! ../../../src/plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\n\r\n/**\r\n * @classdesc\r\n * [description]\r\n *\r\n * @class CameraManager\r\n * @memberOf Phaser.Cameras.Sprite3D\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - [description]\r\n */\r\nvar CameraManager = new Class({\r\n\r\n initialize:\r\n\r\n function CameraManager (scene)\r\n {\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D.CameraManager#scene\r\n * @type {Phaser.Scene}\r\n * @since 3.0.0\r\n */\r\n this.scene = scene;\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D.CameraManager#systems\r\n * @type {Phaser.Scenes.Systems}\r\n * @since 3.0.0\r\n */\r\n this.systems = scene.sys;\r\n\r\n /**\r\n * An Array of the Camera objects being managed by this Camera Manager.\r\n *\r\n * @name Phaser.Cameras.Sprite3D.CameraManager#cameras\r\n * @type {Phaser.Cameras.Sprite3D.Camera[]}\r\n * @since 3.0.0\r\n */\r\n this.cameras = [];\r\n\r\n scene.sys.events.once('boot', this.boot, this);\r\n scene.sys.events.on('start', this.start, this);\r\n },\r\n\r\n /**\r\n * This method is called automatically, only once, when the Scene is first created.\r\n * Do not invoke it directly.\r\n *\r\n * @method Phaser.Cameras.Scene3D.CameraManager#boot\r\n * @private\r\n * @since 3.5.1\r\n */\r\n boot: function ()\r\n {\r\n this.systems.events.once('destroy', this.destroy, this);\r\n },\r\n\r\n /**\r\n * This method is called automatically by the Scene when it is starting up.\r\n * It is responsible for creating local systems, properties and listening for Scene events.\r\n * Do not invoke it directly.\r\n *\r\n * @method Phaser.Cameras.Sprite3D.CameraManager#start\r\n * @private\r\n * @since 3.5.0\r\n */\r\n start: function ()\r\n {\r\n var eventEmitter = this.systems.events;\r\n\r\n eventEmitter.on('update', this.update, this);\r\n eventEmitter.once('shutdown', this.shutdown, this);\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.CameraManager#add\r\n * @since 3.0.0\r\n *\r\n * @param {number} [fieldOfView=80] - [description]\r\n * @param {number} [width] - [description]\r\n * @param {number} [height] - [description]\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.PerspectiveCamera} [description]\r\n */\r\n add: function (fieldOfView, width, height)\r\n {\r\n return this.addPerspectiveCamera(fieldOfView, width, height);\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.CameraManager#addOrthographicCamera\r\n * @since 3.0.0\r\n *\r\n * @param {number} width - [description]\r\n * @param {number} height - [description]\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.OrthographicCamera} [description]\r\n */\r\n addOrthographicCamera: function (width, height)\r\n {\r\n var config = this.scene.sys.game.config;\r\n\r\n if (width === undefined) { width = config.width; }\r\n if (height === undefined) { height = config.height; }\r\n\r\n var camera = new OrthographicCamera(this.scene, width, height);\r\n\r\n this.cameras.push(camera);\r\n\r\n return camera;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.CameraManager#addPerspectiveCamera\r\n * @since 3.0.0\r\n *\r\n * @param {number} [fieldOfView=80] - [description]\r\n * @param {number} [width] - [description]\r\n * @param {number} [height] - [description]\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.PerspectiveCamera} [description]\r\n */\r\n addPerspectiveCamera: function (fieldOfView, width, height)\r\n {\r\n var config = this.scene.sys.game.config;\r\n\r\n if (fieldOfView === undefined) { fieldOfView = 80; }\r\n if (width === undefined) { width = config.width; }\r\n if (height === undefined) { height = config.height; }\r\n\r\n var camera = new PerspectiveCamera(this.scene, fieldOfView, width, height);\r\n\r\n this.cameras.push(camera);\r\n\r\n return camera;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.CameraManager#getCamera\r\n * @since 3.0.0\r\n *\r\n * @param {string} name - [description]\r\n *\r\n * @return {(Phaser.Cameras.Sprite3D.OrthographicCamera|Phaser.Cameras.Sprite3D.PerspectiveCamera)} [description]\r\n */\r\n getCamera: function (name)\r\n {\r\n for (var i = 0; i < this.cameras.length; i++)\r\n {\r\n if (this.cameras[i].name === name)\r\n {\r\n return this.cameras[i];\r\n }\r\n }\r\n\r\n return null;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.CameraManager#removeCamera\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Cameras.Sprite3D.OrthographicCamera|Phaser.Cameras.Sprite3D.PerspectiveCamera)} camera - [description]\r\n */\r\n removeCamera: function (camera)\r\n {\r\n var cameraIndex = this.cameras.indexOf(camera);\r\n\r\n if (cameraIndex !== -1)\r\n {\r\n this.cameras.splice(cameraIndex, 1);\r\n }\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.CameraManager#removeAll\r\n * @since 3.0.0\r\n *\r\n * @return {(Phaser.Cameras.Sprite3D.OrthographicCamera|Phaser.Cameras.Sprite3D.PerspectiveCamera)} [description]\r\n */\r\n removeAll: function ()\r\n {\r\n while (this.cameras.length > 0)\r\n {\r\n var camera = this.cameras.pop();\r\n\r\n camera.destroy();\r\n }\r\n\r\n return this.main;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.CameraManager#update\r\n * @since 3.0.0\r\n *\r\n * @param {number} timestep - [description]\r\n * @param {number} delta - [description]\r\n */\r\n update: function (timestep, delta)\r\n {\r\n for (var i = 0, l = this.cameras.length; i < l; ++i)\r\n {\r\n this.cameras[i].update(timestep, delta);\r\n }\r\n },\r\n\r\n /**\r\n * The Scene that owns this plugin is shutting down.\r\n * We need to kill and reset all internal properties as well as stop listening to Scene events.\r\n *\r\n * @method Phaser.Cameras.Sprite3D.CameraManager#shutdown\r\n * @private\r\n * @since 3.0.0\r\n */\r\n shutdown: function ()\r\n {\r\n var eventEmitter = this.systems.events;\r\n\r\n eventEmitter.off('update', this.update, this);\r\n eventEmitter.off('shutdown', this.shutdown, this);\r\n\r\n this.removeAll();\r\n },\r\n\r\n /**\r\n * The Scene that owns this plugin is being destroyed.\r\n * We need to shutdown and then kill off all external references.\r\n *\r\n * @method Phaser.Cameras.Sprite3D.CameraManager#destroy\r\n * @private\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.shutdown();\r\n\r\n this.scene.sys.events.off('start', this.start, this);\r\n\r\n this.scene = null;\r\n this.systems = null;\r\n }\r\n\r\n});\r\n\r\nPluginCache.register('CameraManager3D', CameraManager, 'cameras3d');\r\n\r\nmodule.exports = CameraManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvY2FtZXJhM2Qvc3JjL0NhbWVyYU1hbmFnZXIuanM/M2FhYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLDBFQUEwQjtBQUM5Qyx5QkFBeUIsbUJBQU8sQ0FBQyw4RkFBc0I7QUFDdkQsd0JBQXdCLG1CQUFPLENBQUMsNEZBQXFCO0FBQ3JELGtCQUFrQixtQkFBTyxDQUFDLDBGQUFrQzs7QUFFNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwwQ0FBMEM7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsMkNBQTJDO0FBQzNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtDQUFrQyxzQkFBc0I7QUFDeEQsbUNBQW1DLHdCQUF3Qjs7QUFFM0Q7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDBDQUEwQztBQUMxRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3Q0FBd0Msa0JBQWtCO0FBQzFELGtDQUFrQyxzQkFBc0I7QUFDeEQsbUNBQW1DLHdCQUF3Qjs7QUFFM0Q7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix1RkFBdUY7QUFDdkc7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHlCQUF5QjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsdUZBQXVGO0FBQ3RHO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsdUZBQXVGO0FBQ3ZHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxPQUFPO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9wbHVnaW5zL2NhbWVyYTNkL3NyYy9DYW1lcmFNYW5hZ2VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOCBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2Jsb2IvbWFzdGVyL2xpY2Vuc2UudHh0fE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3NyYy91dGlscy9DbGFzcycpO1xyXG52YXIgT3J0aG9ncmFwaGljQ2FtZXJhID0gcmVxdWlyZSgnLi9PcnRob2dyYXBoaWNDYW1lcmEnKTtcclxudmFyIFBlcnNwZWN0aXZlQ2FtZXJhID0gcmVxdWlyZSgnLi9QZXJzcGVjdGl2ZUNhbWVyYScpO1xyXG52YXIgUGx1Z2luQ2FjaGUgPSByZXF1aXJlKCcuLi8uLi8uLi9zcmMvcGx1Z2lucy9QbHVnaW5DYWNoZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogW2Rlc2NyaXB0aW9uXVxyXG4gKlxyXG4gKiBAY2xhc3MgQ2FtZXJhTWFuYWdlclxyXG4gKiBAbWVtYmVyT2YgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0RcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG52YXIgQ2FtZXJhTWFuYWdlciA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBDYW1lcmFNYW5hZ2VyIChzY2VuZSlcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmFNYW5hZ2VyI3NjZW5lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2VuZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYU1hbmFnZXIjc3lzdGVtc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmVzLlN5c3RlbXN9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zID0gc2NlbmUuc3lzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBBcnJheSBvZiB0aGUgQ2FtZXJhIG9iamVjdHMgYmVpbmcgbWFuYWdlZCBieSB0aGlzIENhbWVyYSBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhTWFuYWdlciNjYW1lcmFzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYVtdfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FtZXJhcyA9IFtdO1xyXG5cclxuICAgICAgICBzY2VuZS5zeXMuZXZlbnRzLm9uY2UoJ2Jvb3QnLCB0aGlzLmJvb3QsIHRoaXMpO1xyXG4gICAgICAgIHNjZW5lLnN5cy5ldmVudHMub24oJ3N0YXJ0JywgdGhpcy5zdGFydCwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHksIG9ubHkgb25jZSwgd2hlbiB0aGUgU2NlbmUgaXMgZmlyc3QgY3JlYXRlZC5cclxuICAgICAqIERvIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTNELkNhbWVyYU1hbmFnZXIjYm9vdFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjUuMVxyXG4gICAgICovXHJcbiAgICBib290OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcy5ldmVudHMub25jZSgnZGVzdHJveScsIHRoaXMuZGVzdHJveSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIFNjZW5lIHdoZW4gaXQgaXMgc3RhcnRpbmcgdXAuXHJcbiAgICAgKiBJdCBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgbG9jYWwgc3lzdGVtcywgcHJvcGVydGllcyBhbmQgbGlzdGVuaW5nIGZvciBTY2VuZSBldmVudHMuXHJcbiAgICAgKiBEbyBub3QgaW52b2tlIGl0IGRpcmVjdGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhTWFuYWdlciNzdGFydFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgZXZlbnRFbWl0dGVyID0gdGhpcy5zeXN0ZW1zLmV2ZW50cztcclxuXHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLm9uKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLm9uY2UoJ3NodXRkb3duJywgdGhpcy5zaHV0ZG93biwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhTWFuYWdlciNhZGRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZmllbGRPZlZpZXc9ODBdIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3aWR0aF0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodF0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuUGVyc3BlY3RpdmVDYW1lcmF9IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoZmllbGRPZlZpZXcsIHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUGVyc3BlY3RpdmVDYW1lcmEoZmllbGRPZlZpZXcsIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYU1hbmFnZXIjYWRkT3J0aG9ncmFwaGljQ2FtZXJhXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNwcml0ZTNELk9ydGhvZ3JhcGhpY0NhbWVyYX0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBhZGRPcnRob2dyYXBoaWNDYW1lcmE6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjb25maWcgPSB0aGlzLnNjZW5lLnN5cy5nYW1lLmNvbmZpZztcclxuXHJcbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHsgd2lkdGggPSBjb25maWcud2lkdGg7IH1cclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gY29uZmlnLmhlaWdodDsgfVxyXG5cclxuICAgICAgICB2YXIgY2FtZXJhID0gbmV3IE9ydGhvZ3JhcGhpY0NhbWVyYSh0aGlzLnNjZW5lLCB3aWR0aCwgaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW1lcmFzLnB1c2goY2FtZXJhKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNhbWVyYTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmFNYW5hZ2VyI2FkZFBlcnNwZWN0aXZlQ2FtZXJhXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2ZpZWxkT2ZWaWV3PTgwXSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGhdIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtoZWlnaHRdIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNwcml0ZTNELlBlcnNwZWN0aXZlQ2FtZXJhfSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGFkZFBlcnNwZWN0aXZlQ2FtZXJhOiBmdW5jdGlvbiAoZmllbGRPZlZpZXcsIHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGNvbmZpZyA9IHRoaXMuc2NlbmUuc3lzLmdhbWUuY29uZmlnO1xyXG5cclxuICAgICAgICBpZiAoZmllbGRPZlZpZXcgPT09IHVuZGVmaW5lZCkgeyBmaWVsZE9mVmlldyA9IDgwOyB9XHJcbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHsgd2lkdGggPSBjb25maWcud2lkdGg7IH1cclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gY29uZmlnLmhlaWdodDsgfVxyXG5cclxuICAgICAgICB2YXIgY2FtZXJhID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKHRoaXMuc2NlbmUsIGZpZWxkT2ZWaWV3LCB3aWR0aCwgaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW1lcmFzLnB1c2goY2FtZXJhKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNhbWVyYTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5DYW1lcmFNYW5hZ2VyI2dldENhbWVyYVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7KFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELk9ydGhvZ3JhcGhpY0NhbWVyYXxQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5QZXJzcGVjdGl2ZUNhbWVyYSl9IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgZ2V0Q2FtZXJhOiBmdW5jdGlvbiAobmFtZSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2FtZXJhcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbWVyYXNbaV0ubmFtZSA9PT0gbmFtZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FtZXJhc1tpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhTWFuYWdlciNyZW1vdmVDYW1lcmFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELk9ydGhvZ3JhcGhpY0NhbWVyYXxQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5QZXJzcGVjdGl2ZUNhbWVyYSl9IGNhbWVyYSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQ2FtZXJhOiBmdW5jdGlvbiAoY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjYW1lcmFJbmRleCA9IHRoaXMuY2FtZXJhcy5pbmRleE9mKGNhbWVyYSk7XHJcblxyXG4gICAgICAgIGlmIChjYW1lcmFJbmRleCAhPT0gLTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNhbWVyYXMuc3BsaWNlKGNhbWVyYUluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhTWFuYWdlciNyZW1vdmVBbGxcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5PcnRob2dyYXBoaWNDYW1lcmF8UGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuUGVyc3BlY3RpdmVDYW1lcmEpfSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUFsbDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB3aGlsZSAodGhpcy5jYW1lcmFzLmxlbmd0aCA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5jYW1lcmFzLnBvcCgpO1xyXG5cclxuICAgICAgICAgICAgY2FtZXJhLmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLm1haW47XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhTWFuYWdlciN1cGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lc3RlcCAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAodGltZXN0ZXAsIGRlbHRhKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5jYW1lcmFzLmxlbmd0aDsgaSA8IGw7ICsraSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FtZXJhc1tpXS51cGRhdGUodGltZXN0ZXAsIGRlbHRhKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNjZW5lIHRoYXQgb3ducyB0aGlzIHBsdWdpbiBpcyBzaHV0dGluZyBkb3duLlxyXG4gICAgICogV2UgbmVlZCB0byBraWxsIGFuZCByZXNldCBhbGwgaW50ZXJuYWwgcHJvcGVydGllcyBhcyB3ZWxsIGFzIHN0b3AgbGlzdGVuaW5nIHRvIFNjZW5lIGV2ZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYU1hbmFnZXIjc2h1dGRvd25cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc2h1dGRvd246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGV2ZW50RW1pdHRlciA9IHRoaXMuc3lzdGVtcy5ldmVudHM7XHJcblxyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlLCB0aGlzKTtcclxuICAgICAgICBldmVudEVtaXR0ZXIub2ZmKCdzaHV0ZG93bicsIHRoaXMuc2h1dGRvd24sIHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLnJlbW92ZUFsbCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBTY2VuZSB0aGF0IG93bnMgdGhpcyBwbHVnaW4gaXMgYmVpbmcgZGVzdHJveWVkLlxyXG4gICAgICogV2UgbmVlZCB0byBzaHV0ZG93biBhbmQgdGhlbiBraWxsIG9mZiBhbGwgZXh0ZXJuYWwgcmVmZXJlbmNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYU1hbmFnZXIjZGVzdHJveVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2h1dGRvd24oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZS5zeXMuZXZlbnRzLm9mZignc3RhcnQnLCB0aGlzLnN0YXJ0LCB0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuUGx1Z2luQ2FjaGUucmVnaXN0ZXIoJ0NhbWVyYU1hbmFnZXIzRCcsIENhbWVyYU1hbmFnZXIsICdjYW1lcmFzM2QnKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2FtZXJhTWFuYWdlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/camera3d/src/CameraManager.js\n");
/***/ }),
/***/ "./node_modules/phaser/plugins/camera3d/src/OrthographicCamera.js":
/*!************************************************************************!*\
!*** ./node_modules/phaser/plugins/camera3d/src/OrthographicCamera.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2018 Photon Storm Ltd.\r\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\nvar Camera = __webpack_require__(/*! ./Camera */ \"./node_modules/phaser/plugins/camera3d/src/Camera.js\");\r\nvar Class = __webpack_require__(/*! ../../../src/utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Vector3 = __webpack_require__(/*! ../../../src/math/Vector3 */ \"./node_modules/phaser/src/math/Vector3.js\");\r\n\r\n// Local cache vars\r\nvar tmpVec3 = new Vector3();\r\n\r\n/**\r\n * @classdesc\r\n * [description]\r\n *\r\n * @class OrthographicCamera\r\n * @extends Phaser.Cameras.Sprite3D.Camera\r\n * @memberOf Phaser.Cameras.Sprite3D\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - [description]\r\n * @param {integer} [viewportWidth=0] - [description]\r\n * @param {integer} [viewportHeight=0] - [description]\r\n */\r\nvar OrthographicCamera = new Class({\r\n\r\n Extends: Camera,\r\n\r\n initialize:\r\n\r\n function OrthographicCamera (scene, viewportWidth, viewportHeight)\r\n {\r\n if (viewportWidth === undefined) { viewportWidth = 0; }\r\n if (viewportHeight === undefined) { viewportHeight = 0; }\r\n\r\n Camera.call(this, scene);\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D.OrthographicCamera#viewportWidth\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n this.viewportWidth = viewportWidth;\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D.OrthographicCamera#viewportHeight\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n this.viewportHeight = viewportHeight;\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D.OrthographicCamera#_zoom\r\n * @type {number}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._zoom = 1.0;\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D.OrthographicCamera#near\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.near = 0;\r\n\r\n this.update();\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.OrthographicCamera#setToOrtho\r\n * @since 3.0.0\r\n *\r\n * @param {number} yDown - [description]\r\n * @param {number} [viewportWidth] - [description]\r\n * @param {number} [viewportHeight] - [description]\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.OrthographicCamera} [description]\r\n */\r\n setToOrtho: function (yDown, viewportWidth, viewportHeight)\r\n {\r\n if (viewportWidth === undefined) { viewportWidth = this.viewportWidth; }\r\n if (viewportHeight === undefined) { viewportHeight = this.viewportHeight; }\r\n\r\n var zoom = this.zoom;\r\n\r\n this.up.set(0, (yDown) ? -1 : 1, 0);\r\n this.direction.set(0, 0, (yDown) ? 1 : -1);\r\n this.position.set(zoom * viewportWidth / 2, zoom * viewportHeight / 2, 0);\r\n\r\n this.viewportWidth = viewportWidth;\r\n this.viewportHeight = viewportHeight;\r\n\r\n return this.update();\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.OrthographicCamera#update\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.OrthographicCamera} [description]\r\n */\r\n update: function ()\r\n {\r\n var w = this.viewportWidth;\r\n var h = this.viewportHeight;\r\n var near = Math.abs(this.near);\r\n var far = Math.abs(this.far);\r\n var zoom = this.zoom;\r\n\r\n if (w === 0 || h === 0)\r\n {\r\n // What to do here... hmm?\r\n return this;\r\n }\r\n\r\n this.projection.ortho(\r\n zoom * -w / 2, zoom * w / 2,\r\n zoom * -h / 2, zoom * h / 2,\r\n near,\r\n far\r\n );\r\n\r\n // Build the view matrix\r\n tmpVec3.copy(this.position).add(this.direction);\r\n\r\n this.view.lookAt(this.position, tmpVec3, this.up);\r\n\r\n // Projection * view matrix\r\n this.combined.copy(this.projection).multiply(this.view);\r\n\r\n // Invert combined matrix, used for unproject\r\n this.invProjectionView.copy(this.combined).invert();\r\n\r\n this.billboardMatrixDirty = true;\r\n\r\n this.updateChildren();\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D.OrthographicCamera#zoom\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n zoom: {\r\n\r\n get: function ()\r\n {\r\n return this._zoom;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._zoom = value;\r\n this.update();\r\n }\r\n }\r\n\r\n});\r\n\r\nmodule.exports = OrthographicCamera;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvY2FtZXJhM2Qvc3JjL09ydGhvZ3JhcGhpY0NhbWVyYS5qcz9mMDhmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsc0VBQVU7QUFDL0IsWUFBWSxtQkFBTyxDQUFDLDBFQUEwQjtBQUM5QyxjQUFjLG1CQUFPLENBQUMsNEVBQTJCOztBQUVqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsMENBQTBDLG1CQUFtQjtBQUM3RCwyQ0FBMkMsb0JBQW9COztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwyQ0FBMkM7QUFDM0Q7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLG9DQUFvQztBQUM5RSwyQ0FBMkMsc0NBQXNDOztBQUVqRjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDJDQUEyQztBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvcGx1Z2lucy9jYW1lcmEzZC9zcmMvT3J0aG9ncmFwaGljQ2FtZXJhLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOCBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2Jsb2IvbWFzdGVyL2xpY2Vuc2UudHh0fE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDYW1lcmEgPSByZXF1aXJlKCcuL0NhbWVyYScpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi8uLi9zcmMvdXRpbHMvQ2xhc3MnKTtcclxudmFyIFZlY3RvcjMgPSByZXF1aXJlKCcuLi8uLi8uLi9zcmMvbWF0aC9WZWN0b3IzJyk7XHJcblxyXG4vLyAgTG9jYWwgY2FjaGUgdmFyc1xyXG52YXIgdG1wVmVjMyA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBjbGFzcyBPcnRob2dyYXBoaWNDYW1lcmFcclxuICogQGV4dGVuZHMgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhXHJcbiAqIEBtZW1iZXJPZiBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRFxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbdmlld3BvcnRXaWR0aD0wXSAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbdmlld3BvcnRIZWlnaHQ9MF0gLSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG52YXIgT3J0aG9ncmFwaGljQ2FtZXJhID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBDYW1lcmEsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBPcnRob2dyYXBoaWNDYW1lcmEgKHNjZW5lLCB2aWV3cG9ydFdpZHRoLCB2aWV3cG9ydEhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAodmlld3BvcnRXaWR0aCA9PT0gdW5kZWZpbmVkKSB7IHZpZXdwb3J0V2lkdGggPSAwOyB9XHJcbiAgICAgICAgaWYgKHZpZXdwb3J0SGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgdmlld3BvcnRIZWlnaHQgPSAwOyB9XHJcblxyXG4gICAgICAgIENhbWVyYS5jYWxsKHRoaXMsIHNjZW5lKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuT3J0aG9ncmFwaGljQ2FtZXJhI3ZpZXdwb3J0V2lkdGhcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZpZXdwb3J0V2lkdGggPSB2aWV3cG9ydFdpZHRoO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5PcnRob2dyYXBoaWNDYW1lcmEjdmlld3BvcnRIZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZpZXdwb3J0SGVpZ2h0ID0gdmlld3BvcnRIZWlnaHQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELk9ydGhvZ3JhcGhpY0NhbWVyYSNfem9vbVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl96b29tID0gMS4wO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5PcnRob2dyYXBoaWNDYW1lcmEjbmVhclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubmVhciA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuT3J0aG9ncmFwaGljQ2FtZXJhI3NldFRvT3J0aG9cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5RG93biAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdmlld3BvcnRXaWR0aF0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ZpZXdwb3J0SGVpZ2h0XSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5PcnRob2dyYXBoaWNDYW1lcmF9IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgc2V0VG9PcnRobzogZnVuY3Rpb24gKHlEb3duLCB2aWV3cG9ydFdpZHRoLCB2aWV3cG9ydEhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAodmlld3BvcnRXaWR0aCA9PT0gdW5kZWZpbmVkKSB7IHZpZXdwb3J0V2lkdGggPSB0aGlzLnZpZXdwb3J0V2lkdGg7IH1cclxuICAgICAgICBpZiAodmlld3BvcnRIZWlnaHQgPT09IHVuZGVmaW5lZCkgeyB2aWV3cG9ydEhlaWdodCA9IHRoaXMudmlld3BvcnRIZWlnaHQ7IH1cclxuXHJcbiAgICAgICAgdmFyIHpvb20gPSB0aGlzLnpvb207XHJcblxyXG4gICAgICAgIHRoaXMudXAuc2V0KDAsICh5RG93bikgPyAtMSA6IDEsIDApO1xyXG4gICAgICAgIHRoaXMuZGlyZWN0aW9uLnNldCgwLCAwLCAoeURvd24pID8gMSA6IC0xKTtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uLnNldCh6b29tICogdmlld3BvcnRXaWR0aCAvIDIsIHpvb20gKiB2aWV3cG9ydEhlaWdodCAvIDIsIDApO1xyXG5cclxuICAgICAgICB0aGlzLnZpZXdwb3J0V2lkdGggPSB2aWV3cG9ydFdpZHRoO1xyXG4gICAgICAgIHRoaXMudmlld3BvcnRIZWlnaHQgPSB2aWV3cG9ydEhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuT3J0aG9ncmFwaGljQ2FtZXJhI3VwZGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuT3J0aG9ncmFwaGljQ2FtZXJhfSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgdyA9IHRoaXMudmlld3BvcnRXaWR0aDtcclxuICAgICAgICB2YXIgaCA9IHRoaXMudmlld3BvcnRIZWlnaHQ7XHJcbiAgICAgICAgdmFyIG5lYXIgPSBNYXRoLmFicyh0aGlzLm5lYXIpO1xyXG4gICAgICAgIHZhciBmYXIgPSBNYXRoLmFicyh0aGlzLmZhcik7XHJcbiAgICAgICAgdmFyIHpvb20gPSB0aGlzLnpvb207XHJcblxyXG4gICAgICAgIGlmICh3ID09PSAwIHx8IGggPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgV2hhdCB0byBkbyBoZXJlLi4uIGhtbT9cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnByb2plY3Rpb24ub3J0aG8oXHJcbiAgICAgICAgICAgIHpvb20gKiAtdyAvIDIsIHpvb20gKiB3IC8gMixcclxuICAgICAgICAgICAgem9vbSAqIC1oIC8gMiwgem9vbSAqIGggLyAyLFxyXG4gICAgICAgICAgICBuZWFyLFxyXG4gICAgICAgICAgICBmYXJcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyAgQnVpbGQgdGhlIHZpZXcgbWF0cml4XHJcbiAgICAgICAgdG1wVmVjMy5jb3B5KHRoaXMucG9zaXRpb24pLmFkZCh0aGlzLmRpcmVjdGlvbik7XHJcblxyXG4gICAgICAgIHRoaXMudmlldy5sb29rQXQodGhpcy5wb3NpdGlvbiwgdG1wVmVjMywgdGhpcy51cCk7XHJcblxyXG4gICAgICAgIC8vICBQcm9qZWN0aW9uICogdmlldyBtYXRyaXhcclxuICAgICAgICB0aGlzLmNvbWJpbmVkLmNvcHkodGhpcy5wcm9qZWN0aW9uKS5tdWx0aXBseSh0aGlzLnZpZXcpO1xyXG5cclxuICAgICAgICAvLyAgSW52ZXJ0IGNvbWJpbmVkIG1hdHJpeCwgdXNlZCBmb3IgdW5wcm9qZWN0XHJcbiAgICAgICAgdGhpcy5pbnZQcm9qZWN0aW9uVmlldy5jb3B5KHRoaXMuY29tYmluZWQpLmludmVydCgpO1xyXG5cclxuICAgICAgICB0aGlzLmJpbGxib2FyZE1hdHJpeERpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVDaGlsZHJlbigpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuT3J0aG9ncmFwaGljQ2FtZXJhI3pvb21cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgem9vbToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fem9vbTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3pvb20gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gT3J0aG9ncmFwaGljQ2FtZXJhO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/camera3d/src/OrthographicCamera.js\n");
/***/ }),
/***/ "./node_modules/phaser/plugins/camera3d/src/PerspectiveCamera.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/plugins/camera3d/src/PerspectiveCamera.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2018 Photon Storm Ltd.\r\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\nvar Camera = __webpack_require__(/*! ./Camera */ \"./node_modules/phaser/plugins/camera3d/src/Camera.js\");\r\nvar Class = __webpack_require__(/*! ../../../src/utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Vector3 = __webpack_require__(/*! ../../../src/math/Vector3 */ \"./node_modules/phaser/src/math/Vector3.js\");\r\n\r\n// Local cache vars\r\nvar tmpVec3 = new Vector3();\r\n\r\n/**\r\n * @classdesc\r\n * [description]\r\n *\r\n * @class PerspectiveCamera\r\n * @extends Phaser.Cameras.Sprite3D.Camera\r\n * @memberOf Phaser.Cameras.Sprite3D\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - [description]\r\n * @param {integer} [fieldOfView=80] - [description]\r\n * @param {integer} [viewportWidth=0] - [description]\r\n * @param {integer} [viewportHeight=0] - [description]\r\n */\r\nvar PerspectiveCamera = new Class({\r\n\r\n Extends: Camera,\r\n\r\n // FOV is converted to radians automatically\r\n initialize:\r\n\r\n function PerspectiveCamera (scene, fieldOfView, viewportWidth, viewportHeight)\r\n {\r\n if (fieldOfView === undefined) { fieldOfView = 80; }\r\n if (viewportWidth === undefined) { viewportWidth = 0; }\r\n if (viewportHeight === undefined) { viewportHeight = 0; }\r\n\r\n Camera.call(this, scene);\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D.PerspectiveCamera#viewportWidth\r\n * @type {integer}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.viewportWidth = viewportWidth;\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D.PerspectiveCamera#viewportHeight\r\n * @type {integer}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.viewportHeight = viewportHeight;\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Cameras.Sprite3D.PerspectiveCamera#fieldOfView\r\n * @type {integer}\r\n * @default 80\r\n * @since 3.0.0\r\n */\r\n this.fieldOfView = fieldOfView * Math.PI / 180;\r\n\r\n this.update();\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.PerspectiveCamera#setFOV\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - [description]\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.PerspectiveCamera} [description]\r\n */\r\n setFOV: function (value)\r\n {\r\n this.fieldOfView = value * Math.PI / 180;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Cameras.Sprite3D.PerspectiveCamera#update\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Cameras.Sprite3D.PerspectiveCamera} [description]\r\n */\r\n update: function ()\r\n {\r\n var aspect = this.viewportWidth / this.viewportHeight;\r\n\r\n // Create a perspective matrix for our camera\r\n this.projection.perspective(\r\n this.fieldOfView,\r\n aspect,\r\n Math.abs(this.near),\r\n Math.abs(this.far)\r\n );\r\n\r\n // Build the view matrix\r\n tmpVec3.copy(this.position).add(this.direction);\r\n\r\n this.view.lookAt(this.position, tmpVec3, this.up);\r\n\r\n // Projection * view matrix\r\n this.combined.copy(this.projection).multiply(this.view);\r\n\r\n // Invert combined matrix, used for unproject\r\n this.invProjectionView.copy(this.combined).invert();\r\n\r\n this.billboardMatrixDirty = true;\r\n\r\n this.updateChildren();\r\n\r\n return this;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = PerspectiveCamera;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvY2FtZXJhM2Qvc3JjL1BlcnNwZWN0aXZlQ2FtZXJhLmpzPzEzOWQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyxzRUFBVTtBQUMvQixZQUFZLG1CQUFPLENBQUMsMEVBQTBCO0FBQzlDLGNBQWMsbUJBQU8sQ0FBQyw0RUFBMkI7O0FBRWpEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0Msa0JBQWtCO0FBQzFELDBDQUEwQyxtQkFBbUI7QUFDN0QsMkNBQTJDLG9CQUFvQjs7QUFFL0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwwQ0FBMEM7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiwwQ0FBMEM7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9wbHVnaW5zL2NhbWVyYTNkL3NyYy9QZXJzcGVjdGl2ZUNhbWVyYS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTggUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9ibG9iL21hc3Rlci9saWNlbnNlLnR4dHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2FtZXJhID0gcmVxdWlyZSgnLi9DYW1lcmEnKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vLi4vc3JjL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBWZWN0b3IzID0gcmVxdWlyZSgnLi4vLi4vLi4vc3JjL21hdGgvVmVjdG9yMycpO1xyXG5cclxuLy8gIExvY2FsIGNhY2hlIHZhcnNcclxudmFyIHRtcFZlYzMgPSBuZXcgVmVjdG9yMygpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogW2Rlc2NyaXB0aW9uXVxyXG4gKlxyXG4gKiBAY2xhc3MgUGVyc3BlY3RpdmVDYW1lcmFcclxuICogQGV4dGVuZHMgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuQ2FtZXJhXHJcbiAqIEBtZW1iZXJPZiBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRFxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbZmllbGRPZlZpZXc9ODBdIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFt2aWV3cG9ydFdpZHRoPTBdIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFt2aWV3cG9ydEhlaWdodD0wXSAtIFtkZXNjcmlwdGlvbl1cclxuICovXHJcbnZhciBQZXJzcGVjdGl2ZUNhbWVyYSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogQ2FtZXJhLFxyXG5cclxuICAgIC8vICBGT1YgaXMgY29udmVydGVkIHRvIHJhZGlhbnMgYXV0b21hdGljYWxseVxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBQZXJzcGVjdGl2ZUNhbWVyYSAoc2NlbmUsIGZpZWxkT2ZWaWV3LCB2aWV3cG9ydFdpZHRoLCB2aWV3cG9ydEhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAoZmllbGRPZlZpZXcgPT09IHVuZGVmaW5lZCkgeyBmaWVsZE9mVmlldyA9IDgwOyB9XHJcbiAgICAgICAgaWYgKHZpZXdwb3J0V2lkdGggPT09IHVuZGVmaW5lZCkgeyB2aWV3cG9ydFdpZHRoID0gMDsgfVxyXG4gICAgICAgIGlmICh2aWV3cG9ydEhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IHZpZXdwb3J0SGVpZ2h0ID0gMDsgfVxyXG5cclxuICAgICAgICBDYW1lcmEuY2FsbCh0aGlzLCBzY2VuZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNwcml0ZTNELlBlcnNwZWN0aXZlQ2FtZXJhI3ZpZXdwb3J0V2lkdGhcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52aWV3cG9ydFdpZHRoID0gdmlld3BvcnRXaWR0aDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU3ByaXRlM0QuUGVyc3BlY3RpdmVDYW1lcmEjdmlld3BvcnRIZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52aWV3cG9ydEhlaWdodCA9IHZpZXdwb3J0SGVpZ2h0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5QZXJzcGVjdGl2ZUNhbWVyYSNmaWVsZE9mVmlld1xyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDgwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5maWVsZE9mVmlldyA9IGZpZWxkT2ZWaWV3ICogTWF0aC5QSSAvIDE4MDtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5QZXJzcGVjdGl2ZUNhbWVyYSNzZXRGT1ZcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5QZXJzcGVjdGl2ZUNhbWVyYX0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBzZXRGT1Y6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmZpZWxkT2ZWaWV3ID0gdmFsdWUgKiBNYXRoLlBJIC8gMTgwO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRC5QZXJzcGVjdGl2ZUNhbWVyYSN1cGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNwcml0ZTNELlBlcnNwZWN0aXZlQ2FtZXJhfSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgYXNwZWN0ID0gdGhpcy52aWV3cG9ydFdpZHRoIC8gdGhpcy52aWV3cG9ydEhlaWdodDtcclxuXHJcbiAgICAgICAgLy8gIENyZWF0ZSBhIHBlcnNwZWN0aXZlIG1hdHJpeCBmb3Igb3VyIGNhbWVyYVxyXG4gICAgICAgIHRoaXMucHJvamVjdGlvbi5wZXJzcGVjdGl2ZShcclxuICAgICAgICAgICAgdGhpcy5maWVsZE9mVmlldyxcclxuICAgICAgICAgICAgYXNwZWN0LFxyXG4gICAgICAgICAgICBNYXRoLmFicyh0aGlzLm5lYXIpLFxyXG4gICAgICAgICAgICBNYXRoLmFicyh0aGlzLmZhcilcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyAgQnVpbGQgdGhlIHZpZXcgbWF0cml4XHJcbiAgICAgICAgdG1wVmVjMy5jb3B5KHRoaXMucG9zaXRpb24pLmFkZCh0aGlzLmRpcmVjdGlvbik7XHJcblxyXG4gICAgICAgIHRoaXMudmlldy5sb29rQXQodGhpcy5wb3NpdGlvbiwgdG1wVmVjMywgdGhpcy51cCk7XHJcblxyXG4gICAgICAgIC8vICBQcm9qZWN0aW9uICogdmlldyBtYXRyaXhcclxuICAgICAgICB0aGlzLmNvbWJpbmVkLmNvcHkodGhpcy5wcm9qZWN0aW9uKS5tdWx0aXBseSh0aGlzLnZpZXcpO1xyXG5cclxuICAgICAgICAvLyAgSW52ZXJ0IGNvbWJpbmVkIG1hdHJpeCwgdXNlZCBmb3IgdW5wcm9qZWN0XHJcbiAgICAgICAgdGhpcy5pbnZQcm9qZWN0aW9uVmlldy5jb3B5KHRoaXMuY29tYmluZWQpLmludmVydCgpO1xyXG5cclxuICAgICAgICB0aGlzLmJpbGxib2FyZE1hdHJpeERpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVDaGlsZHJlbigpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQZXJzcGVjdGl2ZUNhbWVyYTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/camera3d/src/PerspectiveCamera.js\n");
/***/ }),
/***/ "./node_modules/phaser/plugins/camera3d/src/index.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/plugins/camera3d/src/index.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2018 Photon Storm Ltd.\r\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Cameras.Sprite3D\r\n */\r\n\r\nmodule.exports = {\r\n\r\n Camera: __webpack_require__(/*! ./Camera */ \"./node_modules/phaser/plugins/camera3d/src/Camera.js\"),\r\n CameraManager: __webpack_require__(/*! ./CameraManager */ \"./node_modules/phaser/plugins/camera3d/src/CameraManager.js\"),\r\n OrthographicCamera: __webpack_require__(/*! ./OrthographicCamera */ \"./node_modules/phaser/plugins/camera3d/src/OrthographicCamera.js\"),\r\n PerspectiveCamera: __webpack_require__(/*! ./PerspectiveCamera */ \"./node_modules/phaser/plugins/camera3d/src/PerspectiveCamera.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvY2FtZXJhM2Qvc3JjL2luZGV4LmpzPzI5YjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxZQUFZLG1CQUFPLENBQUMsc0VBQVU7QUFDOUIsbUJBQW1CLG1CQUFPLENBQUMsb0ZBQWlCO0FBQzVDLHdCQUF3QixtQkFBTyxDQUFDLDhGQUFzQjtBQUN0RCx1QkFBdUIsbUJBQU8sQ0FBQyw0RkFBcUI7O0FBRXBEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9wbHVnaW5zL2NhbWVyYTNkL3NyYy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTggUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9ibG9iL21hc3Rlci9saWNlbnNlLnR4dHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuQ2FtZXJhcy5TcHJpdGUzRFxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIENhbWVyYTogcmVxdWlyZSgnLi9DYW1lcmEnKSxcclxuICAgIENhbWVyYU1hbmFnZXI6IHJlcXVpcmUoJy4vQ2FtZXJhTWFuYWdlcicpLFxyXG4gICAgT3J0aG9ncmFwaGljQ2FtZXJhOiByZXF1aXJlKCcuL09ydGhvZ3JhcGhpY0NhbWVyYScpLFxyXG4gICAgUGVyc3BlY3RpdmVDYW1lcmE6IHJlcXVpcmUoJy4vUGVyc3BlY3RpdmVDYW1lcmEnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/camera3d/src/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3D.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3D.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2018 Photon Storm Ltd.\r\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../../src/utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GameObject = __webpack_require__(/*! ../../../../src/gameobjects/GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar Sprite = __webpack_require__(/*! ../../../../src/gameobjects/sprite/Sprite */ \"./node_modules/phaser/src/gameobjects/sprite/Sprite.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../../../src/math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\nvar Vector4 = __webpack_require__(/*! ../../../../src/math/Vector4 */ \"./node_modules/phaser/src/math/Vector4.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Sprite 3D Game Object.\r\n *\r\n * The Sprite 3D object is an encapsulation of a standard Sprite object, with additional methods to allow\r\n * it to be rendered by a 3D Camera. The Sprite can be positioned anywhere within 3D space.\r\n *\r\n * @class Sprite3D\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberOf Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} x - The x position of this Game Object.\r\n * @param {number} y - The y position of this Game Object.\r\n * @param {number} z - The z position of this Game Object.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n */\r\nvar Sprite3D = new Class({\r\n\r\n Extends: GameObject,\r\n\r\n initialize:\r\n\r\n function Sprite3D (scene, x, y, z, texture, frame)\r\n {\r\n GameObject.call(this, scene, 'Sprite3D');\r\n\r\n /**\r\n * The encapsulated Sprite.\r\n *\r\n * @name Phaser.GameObjects.Sprite3D#gameObject\r\n * @type {Phaser.GameObjects.GameObject}\r\n * @since 3.0.0\r\n */\r\n this.gameObject = new Sprite(scene, 0, 0, texture, frame);\r\n\r\n /**\r\n * The position of the Sprite.\r\n *\r\n * @name Phaser.GameObjects.Sprite3D#position\r\n * @type {Phaser.Math.Vector4}\r\n * @since 3.0.0\r\n */\r\n this.position = new Vector4(x, y, z);\r\n\r\n /**\r\n * The 2D size of the Sprite.\r\n *\r\n * @name Phaser.GameObjects.Sprite3D#size\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.0.0\r\n */\r\n this.size = new Vector2(this.gameObject.width, this.gameObject.height);\r\n\r\n /**\r\n * The 2D scale of the Sprite.\r\n *\r\n * @name Phaser.GameObjects.Sprite3D#scale\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.0.0\r\n */\r\n this.scale = new Vector2(1, 1);\r\n\r\n /**\r\n * Whether to automatically set the horizontal scale of the encapsulated Sprite.\r\n *\r\n * @name Phaser.GameObjects.Sprite3D#adjustScaleX\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.adjustScaleX = true;\r\n\r\n /**\r\n * Whether to automatically set the vertical scale of the encapsulated Sprite.\r\n *\r\n * @name Phaser.GameObjects.Sprite3D#adjustScaleY\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.adjustScaleY = true;\r\n\r\n /**\r\n * The visible state of the Game Object.\r\n *\r\n * @name Phaser.GameObjects.Sprite3D#_visible\r\n * @type {boolean}\r\n * @default true\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._visible = true;\r\n },\r\n\r\n /**\r\n * Project this Sprite onto the given 3D Camera.\r\n *\r\n * @method Phaser.GameObjects.Sprite3D#project\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Cameras.Sprite3D.Camera} camera - The 3D Camera onto which to project this Sprite.\r\n */\r\n project: function (camera)\r\n {\r\n var pos = this.position;\r\n\r\n var gameObject = this.gameObject;\r\n\r\n camera.project(pos, gameObject);\r\n\r\n camera.getPointSize(pos, this.size, this.scale);\r\n\r\n if (this.scale.x <= 0 || this.scale.y <= 0)\r\n {\r\n gameObject.setVisible(false);\r\n }\r\n else\r\n {\r\n if (!gameObject.visible)\r\n {\r\n gameObject.setVisible(true);\r\n }\r\n\r\n if (this.adjustScaleX)\r\n {\r\n gameObject.scaleX = this.scale.x;\r\n }\r\n\r\n if (this.adjustScaleY)\r\n {\r\n gameObject.scaleY = this.scale.y;\r\n }\r\n\r\n gameObject.setDepth(gameObject.z * -1);\r\n }\r\n },\r\n\r\n /**\r\n * Set the visible state of the Game Object.\r\n *\r\n * @method Phaser.GameObjects.Sprite3D#setVisible\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} value - The visible state of the Game Object.\r\n *\r\n * @return {Phaser.GameObjects.Sprite3D} This Sprite3D Object.\r\n */\r\n setVisible: function (value)\r\n {\r\n this.visible = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * The visible state of the Game Object.\r\n *\r\n * An invisible Game Object will skip rendering, but will still process update logic.\r\n *\r\n * @name Phaser.GameObjects.Sprite3D#visible\r\n * @type {boolean}\r\n * @since 3.0.0\r\n */\r\n visible: {\r\n\r\n get: function ()\r\n {\r\n return this._visible;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._visible = value;\r\n this.gameObject.visible = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The x position of this Game Object.\r\n *\r\n * @name Phaser.GameObjects.Sprite3D#x\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n x: {\r\n\r\n get: function ()\r\n {\r\n return this.position.x;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.position.x = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The y position of this Game Object.\r\n *\r\n * @name Phaser.GameObjects.Sprite3D#y\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n y: {\r\n\r\n get: function ()\r\n {\r\n return this.position.y;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.position.y = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The z position of this Game Object.\r\n *\r\n * @name Phaser.GameObjects.Sprite3D#z\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n z: {\r\n\r\n get: function ()\r\n {\r\n return this.position.z;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.position.z = value;\r\n }\r\n\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Sprite3D;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvY2FtZXJhM2Qvc3JjL3Nwcml0ZTNkL1Nwcml0ZTNELmpzPzg2YjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyw2RUFBNkI7QUFDakQsaUJBQWlCLG1CQUFPLENBQUMsbUdBQXdDO0FBQ2pFLGFBQWEsbUJBQU8sQ0FBQyx5R0FBMkM7QUFDaEUsY0FBYyxtQkFBTyxDQUFDLCtFQUE4QjtBQUNwRCxjQUFjLG1CQUFPLENBQUMsK0VBQThCOztBQUVwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsK0JBQStCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvY2FtZXJhM2Qvc3JjL3Nwcml0ZTNkL1Nwcml0ZTNELmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOCBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2Jsb2IvbWFzdGVyL2xpY2Vuc2UudHh0fE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL3NyYy91dGlscy9DbGFzcycpO1xyXG52YXIgR2FtZU9iamVjdCA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL3NyYy9nYW1lb2JqZWN0cy9HYW1lT2JqZWN0Jyk7XHJcbnZhciBTcHJpdGUgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9zcmMvZ2FtZW9iamVjdHMvc3ByaXRlL1Nwcml0ZScpO1xyXG52YXIgVmVjdG9yMiA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL3NyYy9tYXRoL1ZlY3RvcjInKTtcclxudmFyIFZlY3RvcjQgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9zcmMvbWF0aC9WZWN0b3I0Jyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIFNwcml0ZSAzRCBHYW1lIE9iamVjdC5cclxuICpcclxuICogVGhlIFNwcml0ZSAzRCBvYmplY3QgaXMgYW4gZW5jYXBzdWxhdGlvbiBvZiBhIHN0YW5kYXJkIFNwcml0ZSBvYmplY3QsIHdpdGggYWRkaXRpb25hbCBtZXRob2RzIHRvIGFsbG93XHJcbiAqIGl0IHRvIGJlIHJlbmRlcmVkIGJ5IGEgM0QgQ2FtZXJhLiBUaGUgU3ByaXRlIGNhbiBiZSBwb3NpdGlvbmVkIGFueXdoZXJlIHdpdGhpbiAzRCBzcGFjZS5cclxuICpcclxuICogQGNsYXNzIFNwcml0ZTNEXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0XHJcbiAqIEBtZW1iZXJPZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBHYW1lIE9iamVjdCBiZWxvbmdzLiBBIEdhbWUgT2JqZWN0IGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgU2NlbmUgYXQgYSB0aW1lLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHogLSBUaGUgeiBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dHVyZSAtIFRoZSBrZXkgb2YgdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byByZW5kZXIgd2l0aCwgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lXSAtIEFuIG9wdGlvbmFsIGZyYW1lIGZyb20gdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCBpcyByZW5kZXJpbmcgd2l0aC5cclxuICovXHJcbnZhciBTcHJpdGUzRCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogR2FtZU9iamVjdCxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFNwcml0ZTNEIChzY2VuZSwgeCwgeSwgeiwgdGV4dHVyZSwgZnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgR2FtZU9iamVjdC5jYWxsKHRoaXMsIHNjZW5lLCAnU3ByaXRlM0QnKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGVuY2Fwc3VsYXRlZCBTcHJpdGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlM0QjZ2FtZU9iamVjdFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdhbWVPYmplY3QgPSBuZXcgU3ByaXRlKHNjZW5lLCAwLCAwLCB0ZXh0dXJlLCBmcmFtZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgU3ByaXRlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZTNEI3Bvc2l0aW9uXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjR9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBWZWN0b3I0KHgsIHksIHopO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgMkQgc2l6ZSBvZiB0aGUgU3ByaXRlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZTNEI3NpemVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNpemUgPSBuZXcgVmVjdG9yMih0aGlzLmdhbWVPYmplY3Qud2lkdGgsIHRoaXMuZ2FtZU9iamVjdC5oZWlnaHQpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgMkQgc2NhbGUgb2YgdGhlIFNwcml0ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGUzRCNzY2FsZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NhbGUgPSBuZXcgVmVjdG9yMigxLCAxKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0byBhdXRvbWF0aWNhbGx5IHNldCB0aGUgaG9yaXpvbnRhbCBzY2FsZSBvZiB0aGUgZW5jYXBzdWxhdGVkIFNwcml0ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGUzRCNhZGp1c3RTY2FsZVhcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hZGp1c3RTY2FsZVggPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB2ZXJ0aWNhbCBzY2FsZSBvZiB0aGUgZW5jYXBzdWxhdGVkIFNwcml0ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGUzRCNhZGp1c3RTY2FsZVlcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hZGp1c3RTY2FsZVkgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmlzaWJsZSBzdGF0ZSBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlM0QjX3Zpc2libGVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl92aXNpYmxlID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9qZWN0IHRoaXMgU3ByaXRlIG9udG8gdGhlIGdpdmVuIDNEIENhbWVyYS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGUzRCNwcm9qZWN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNwcml0ZTNELkNhbWVyYX0gY2FtZXJhIC0gVGhlIDNEIENhbWVyYSBvbnRvIHdoaWNoIHRvIHByb2plY3QgdGhpcyBTcHJpdGUuXHJcbiAgICAgKi9cclxuICAgIHByb2plY3Q6IGZ1bmN0aW9uIChjYW1lcmEpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHBvcyA9IHRoaXMucG9zaXRpb247XHJcblxyXG4gICAgICAgIHZhciBnYW1lT2JqZWN0ID0gdGhpcy5nYW1lT2JqZWN0O1xyXG5cclxuICAgICAgICBjYW1lcmEucHJvamVjdChwb3MsIGdhbWVPYmplY3QpO1xyXG5cclxuICAgICAgICBjYW1lcmEuZ2V0UG9pbnRTaXplKHBvcywgdGhpcy5zaXplLCB0aGlzLnNjYWxlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2NhbGUueCA8PSAwIHx8IHRoaXMuc2NhbGUueSA8PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5zZXRWaXNpYmxlKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCFnYW1lT2JqZWN0LnZpc2libGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGdhbWVPYmplY3Quc2V0VmlzaWJsZSh0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuYWRqdXN0U2NhbGVYKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBnYW1lT2JqZWN0LnNjYWxlWCA9IHRoaXMuc2NhbGUueDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuYWRqdXN0U2NhbGVZKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBnYW1lT2JqZWN0LnNjYWxlWSA9IHRoaXMuc2NhbGUueTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5zZXREZXB0aChnYW1lT2JqZWN0LnogKiAtMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgdmlzaWJsZSBzdGF0ZSBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlM0Qjc2V0VmlzaWJsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB2YWx1ZSAtIFRoZSB2aXNpYmxlIHN0YXRlIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlM0R9IFRoaXMgU3ByaXRlM0QgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRWaXNpYmxlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2aXNpYmxlIHN0YXRlIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBBbiBpbnZpc2libGUgR2FtZSBPYmplY3Qgd2lsbCBza2lwIHJlbmRlcmluZywgYnV0IHdpbGwgc3RpbGwgcHJvY2VzcyB1cGRhdGUgbG9naWMuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZTNEI3Zpc2libGVcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHZpc2libGU6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2libGU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl92aXNpYmxlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuZ2FtZU9iamVjdC52aXNpYmxlID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgeCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGUzRCN4XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHkgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlM0QjeVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB5OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB6IHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZTNEI3pcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgejoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbi56O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbi56ID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGUzRDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3D.js\n");
/***/ }),
/***/ "./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3DCreator.js":
/*!******************************************************************************!*\
!*** ./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3DCreator.js ***!
\******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2018 Photon Storm Ltd.\r\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\nvar BuildGameObject = __webpack_require__(/*! ../../../../src/gameobjects/BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar BuildGameObjectAnimation = __webpack_require__(/*! ../../../../src/gameobjects/BuildGameObjectAnimation */ \"./node_modules/phaser/src/gameobjects/BuildGameObjectAnimation.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../../../../src/gameobjects/GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../../../src/utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar Sprite3D = __webpack_require__(/*! ./Sprite3D */ \"./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3D.js\");\r\n\r\n/**\r\n * Creates a new Sprite3D Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Sprite3D Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#sprite3D\r\n * @since 3.0.0\r\n *\r\n * @param {object} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.Sprite3D} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('sprite3D', function (config, addToScene)\r\n{\r\n if (config === undefined) { config = {}; }\r\n\r\n var key = GetAdvancedValue(config, 'key', null);\r\n var frame = GetAdvancedValue(config, 'frame', null);\r\n\r\n var sprite = new Sprite3D(this.scene, 0, 0, key, frame);\r\n\r\n if (addToScene !== undefined)\r\n {\r\n config.add = addToScene;\r\n }\r\n\r\n BuildGameObject(this.scene, sprite, config);\r\n\r\n // Sprite specific config options:\r\n\r\n BuildGameObjectAnimation(sprite, config);\r\n\r\n return sprite;\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectCreator context.\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvY2FtZXJhM2Qvc3JjL3Nwcml0ZTNkL1Nwcml0ZTNEQ3JlYXRvci5qcz84NTI5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQyw2R0FBNkM7QUFDM0UsK0JBQStCLG1CQUFPLENBQUMsK0hBQXNEO0FBQzdGLHdCQUF3QixtQkFBTyxDQUFDLGlIQUErQztBQUMvRSx1QkFBdUIsbUJBQU8sQ0FBQyxpSEFBK0M7QUFDOUUsZUFBZSxtQkFBTyxDQUFDLG1GQUFZOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksNEJBQTRCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixhQUFhOztBQUU1QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvcGx1Z2lucy9jYW1lcmEzZC9zcmMvc3ByaXRlM2QvU3ByaXRlM0RDcmVhdG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOCBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2Jsb2IvbWFzdGVyL2xpY2Vuc2UudHh0fE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCdWlsZEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9zcmMvZ2FtZW9iamVjdHMvQnVpbGRHYW1lT2JqZWN0Jyk7XHJcbnZhciBCdWlsZEdhbWVPYmplY3RBbmltYXRpb24gPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9zcmMvZ2FtZW9iamVjdHMvQnVpbGRHYW1lT2JqZWN0QW5pbWF0aW9uJyk7XHJcbnZhciBHYW1lT2JqZWN0Q3JlYXRvciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL3NyYy9nYW1lb2JqZWN0cy9HYW1lT2JqZWN0Q3JlYXRvcicpO1xyXG52YXIgR2V0QWR2YW5jZWRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL3NyYy91dGlscy9vYmplY3QvR2V0QWR2YW5jZWRWYWx1ZScpO1xyXG52YXIgU3ByaXRlM0QgPSByZXF1aXJlKCcuL1Nwcml0ZTNEJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBTcHJpdGUzRCBHYW1lIE9iamVjdCBhbmQgcmV0dXJucyBpdC5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgU3ByaXRlM0QgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI3Nwcml0ZTNEXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gY3JlYXRlIGl0c2VsZi5cclxuICogQHBhcmFtIHtib29sZWFufSBbYWRkVG9TY2VuZV0gLSBBZGQgdGhpcyBHYW1lIE9iamVjdCB0byB0aGUgU2NlbmUgYWZ0ZXIgY3JlYXRpbmcgaXQ/IElmIHNldCB0aGlzIGFyZ3VtZW50IG92ZXJyaWRlcyB0aGUgYGFkZGAgcHJvcGVydHkgaW4gdGhlIGNvbmZpZyBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGUzRH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0Q3JlYXRvci5yZWdpc3Rlcignc3ByaXRlM0QnLCBmdW5jdGlvbiAoY29uZmlnLCBhZGRUb1NjZW5lKVxyXG57XHJcbiAgICBpZiAoY29uZmlnID09PSB1bmRlZmluZWQpIHsgY29uZmlnID0ge307IH1cclxuXHJcbiAgICB2YXIga2V5ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdrZXknLCBudWxsKTtcclxuICAgIHZhciBmcmFtZSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnZnJhbWUnLCBudWxsKTtcclxuXHJcbiAgICB2YXIgc3ByaXRlID0gbmV3IFNwcml0ZTNEKHRoaXMuc2NlbmUsIDAsIDAsIGtleSwgZnJhbWUpO1xyXG5cclxuICAgIGlmIChhZGRUb1NjZW5lICE9PSB1bmRlZmluZWQpXHJcbiAgICB7XHJcbiAgICAgICAgY29uZmlnLmFkZCA9IGFkZFRvU2NlbmU7XHJcbiAgICB9XHJcblxyXG4gICAgQnVpbGRHYW1lT2JqZWN0KHRoaXMuc2NlbmUsIHNwcml0ZSwgY29uZmlnKTtcclxuXHJcbiAgICAvLyAgU3ByaXRlIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zOlxyXG5cclxuICAgIEJ1aWxkR2FtZU9iamVjdEFuaW1hdGlvbihzcHJpdGUsIGNvbmZpZyk7XHJcblxyXG4gICAgcmV0dXJuIHNwcml0ZTtcclxufSk7XHJcblxyXG4vLyAgV2hlbiByZWdpc3RlcmluZyBhIGZhY3RvcnkgZnVuY3Rpb24gJ3RoaXMnIHJlZmVycyB0byB0aGUgR2FtZU9iamVjdENyZWF0b3IgY29udGV4dC5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3DCreator.js\n");
/***/ }),
/***/ "./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3DFactory.js":
/*!******************************************************************************!*\
!*** ./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3DFactory.js ***!
\******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2018 Photon Storm Ltd.\r\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\nvar Sprite3D = __webpack_require__(/*! ./Sprite3D */ \"./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3D.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../../../../src/gameobjects/GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Sprite3D Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Sprite3D Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#sprite3D\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal position of this Game Object.\r\n * @param {number} y - The vertical position of this Game Object.\r\n * @param {number} z - The z position of this Game Object.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n *\r\n * @return {Phaser.GameObjects.Sprite3D} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('sprite3D', function (x, y, z, key, frame)\r\n{\r\n var sprite = new Sprite3D(this.scene, x, y, z, key, frame);\r\n\r\n this.displayList.add(sprite.gameObject);\r\n this.updateList.add(sprite.gameObject);\r\n\r\n return sprite;\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n// There are several properties available to use:\r\n//\r\n// this.scene - a reference to the Scene that owns the GameObjectFactory\r\n// this.displayList - a reference to the Display List the Scene owns\r\n// this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvY2FtZXJhM2Qvc3JjL3Nwcml0ZTNkL1Nwcml0ZTNERmFjdG9yeS5qcz8zZDM0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxlQUFlLG1CQUFPLENBQUMsbUZBQVk7QUFDbkMsd0JBQXdCLG1CQUFPLENBQUMsaUhBQStDOztBQUUvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsWUFBWSw0QkFBNEI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvY2FtZXJhM2Qvc3JjL3Nwcml0ZTNkL1Nwcml0ZTNERmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTggUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9ibG9iL21hc3Rlci9saWNlbnNlLnR4dHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgU3ByaXRlM0QgPSByZXF1aXJlKCcuL1Nwcml0ZTNEJyk7XHJcbnZhciBHYW1lT2JqZWN0RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL3NyYy9nYW1lb2JqZWN0cy9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgU3ByaXRlM0QgR2FtZSBPYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIFNjZW5lLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBTcHJpdGUzRCBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3Rvcnkjc3ByaXRlM0RcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHogLSBUaGUgeiBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dHVyZSAtIFRoZSBrZXkgb2YgdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byByZW5kZXIgd2l0aCwgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lXSAtIEFuIG9wdGlvbmFsIGZyYW1lIGZyb20gdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCBpcyByZW5kZXJpbmcgd2l0aC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZTNEfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RGYWN0b3J5LnJlZ2lzdGVyKCdzcHJpdGUzRCcsIGZ1bmN0aW9uICh4LCB5LCB6LCBrZXksIGZyYW1lKVxyXG57XHJcbiAgICB2YXIgc3ByaXRlID0gbmV3IFNwcml0ZTNEKHRoaXMuc2NlbmUsIHgsIHksIHosIGtleSwgZnJhbWUpO1xyXG5cclxuICAgIHRoaXMuZGlzcGxheUxpc3QuYWRkKHNwcml0ZS5nYW1lT2JqZWN0KTtcclxuICAgIHRoaXMudXBkYXRlTGlzdC5hZGQoc3ByaXRlLmdhbWVPYmplY3QpO1xyXG5cclxuICAgIHJldHVybiBzcHJpdGU7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RGYWN0b3J5IGNvbnRleHQuXHJcbi8vXHJcbi8vICBUaGVyZSBhcmUgc2V2ZXJhbCBwcm9wZXJ0aWVzIGF2YWlsYWJsZSB0byB1c2U6XHJcbi8vXHJcbi8vICB0aGlzLnNjZW5lIC0gYSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgb3ducyB0aGUgR2FtZU9iamVjdEZhY3RvcnlcclxuLy8gIHRoaXMuZGlzcGxheUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgRGlzcGxheSBMaXN0IHRoZSBTY2VuZSBvd25zXHJcbi8vICB0aGlzLnVwZGF0ZUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgVXBkYXRlIExpc3QgdGhlIFNjZW5lIG93bnNcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/camera3d/src/sprite3d/Sprite3DFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/plugins/fbinstant/src/AdInstance.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/plugins/fbinstant/src/AdInstance.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2018 Photon Storm Ltd.\r\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\n/**\r\n * @typedef {object} AdInstance\r\n *\r\n * @property {any} instance - Represents an instance of an ad.\r\n * @property {string} placementID - The Audience Network placement ID of this ad instance.\r\n * @property {boolean} shown - Has this ad already been shown in-game?\r\n * @property {boolean} video - Is this a video ad?\r\n */\r\n\r\nvar AdInstance = function (placementID, instance, video)\r\n{\r\n return {\r\n instance: instance,\r\n placementID: placementID,\r\n shown: false,\r\n video: video\r\n };\r\n};\r\n\r\nmodule.exports = AdInstance;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvZmJpbnN0YW50L3NyYy9BZEluc3RhbmNlLmpzP2Y4ZGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0EsY0FBYyxJQUFJO0FBQ2xCLGNBQWMsT0FBTztBQUNyQixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvcGx1Z2lucy9mYmluc3RhbnQvc3JjL0FkSW5zdGFuY2UuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE4IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waG90b25zdG9ybS9waGFzZXIvYmxvYi9tYXN0ZXIvbGljZW5zZS50eHR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEFkSW5zdGFuY2VcclxuICpcclxuICogQHByb3BlcnR5IHthbnl9IGluc3RhbmNlIC0gUmVwcmVzZW50cyBhbiBpbnN0YW5jZSBvZiBhbiBhZC5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBsYWNlbWVudElEIC0gVGhlIEF1ZGllbmNlIE5ldHdvcmsgcGxhY2VtZW50IElEIG9mIHRoaXMgYWQgaW5zdGFuY2UuXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc2hvd24gLSBIYXMgdGhpcyBhZCBhbHJlYWR5IGJlZW4gc2hvd24gaW4tZ2FtZT9cclxuICogQHByb3BlcnR5IHtib29sZWFufSB2aWRlbyAtIElzIHRoaXMgYSB2aWRlbyBhZD9cclxuICovXHJcblxyXG52YXIgQWRJbnN0YW5jZSA9IGZ1bmN0aW9uIChwbGFjZW1lbnRJRCwgaW5zdGFuY2UsIHZpZGVvKVxyXG57XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcclxuICAgICAgICBwbGFjZW1lbnRJRDogcGxhY2VtZW50SUQsXHJcbiAgICAgICAgc2hvd246IGZhbHNlLFxyXG4gICAgICAgIHZpZGVvOiB2aWRlb1xyXG4gICAgfTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQWRJbnN0YW5jZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/fbinstant/src/AdInstance.js\n");
/***/ }),
/***/ "./node_modules/phaser/plugins/fbinstant/src/FacebookInstantGamesPlugin.js":
/*!*********************************************************************************!*\
!*** ./node_modules/phaser/plugins/fbinstant/src/FacebookInstantGamesPlugin.js ***!
\*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/* eslint no-console: 0 */\r\n\r\n/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2018 Photon Storm Ltd.\r\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\nvar AdInstance = __webpack_require__(/*! ./AdInstance */ \"./node_modules/phaser/plugins/fbinstant/src/AdInstance.js\");\r\nvar Class = __webpack_require__(/*! ../../../src/utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar DataManager = __webpack_require__(/*! ../../../src/data/DataManager */ \"./node_modules/phaser/src/data/DataManager.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Leaderboard = __webpack_require__(/*! ./Leaderboard */ \"./node_modules/phaser/plugins/fbinstant/src/Leaderboard.js\");\r\nvar Product = __webpack_require__(/*! ./Product */ \"./node_modules/phaser/plugins/fbinstant/src/Product.js\");\r\nvar Purchase = __webpack_require__(/*! ./Purchase */ \"./node_modules/phaser/plugins/fbinstant/src/Purchase.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Facebook Instant Games Plugin for Phaser 3 provides a seamless bridge between Phaser\r\n * and the Facebook Instant Games API version 6.2.\r\n * \r\n * You can access this plugin via the `facebook` property in a Scene, i.e:\r\n * \r\n * ```javascript\r\n * this.facebook.getPlatform();\r\n * ```\r\n * \r\n * If this is unavailable please check to make sure you're using a build of Phaser that has\r\n * this plugin within it. You can quickly check this by looking at the dev tools console\r\n * header - the Phaser version number will have `-FB` after it if this plugin is loaded.\r\n *\r\n * If you are building your own version of Phaser then use this Webpack DefinePlugin flag:\r\n * \r\n * `\"typeof PLUGIN_FBINSTANT\": JSON.stringify(true)`\r\n * \r\n * You will find that every Instant Games API method has a mapping in this plugin.\r\n * For a full list please consult either the plugin documentation, or the 6.2 SDK documentation\r\n * at https://developers.facebook.com/docs/games/instant-games/sdk/fbinstant6.2\r\n * \r\n * Internally this plugin uses its own Data Manager to handle seamless user data updates and provides\r\n * handy functions for advertisement displaying, opening share dialogs, logging, leaderboards, purchase API requests,\r\n * loader integration and more.\r\n * \r\n * To get started with Facebook Instant Games you will need to register on Facebook and create a new Instant\r\n * Game app that has its own unique app ID. Facebook have also provided a dashboard interface for setting up\r\n * various features for your game, including leaderboards, ad requests and the payments API. There are lots\r\n * of guides on the Facebook Developers portal to assist with setting these\r\n * various systems up: https://developers.facebook.com/docs/games/instant-games/guides\r\n * \r\n * For more details follow the Quick Start guide here: https://developers.facebook.com/docs/games/instant-games\r\n *\r\n * @class FacebookInstantGamesPlugin\r\n * @memberOf Phaser\r\n * @constructor\r\n * @extends Phaser.Events.EventEmitter\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Game} game - A reference to the Phaser.Game instance.\r\n */\r\nvar FacebookInstantGamesPlugin = new Class({\r\n\r\n Extends: EventEmitter,\r\n\r\n initialize:\r\n\r\n function FacebookInstantGamesPlugin (game)\r\n {\r\n EventEmitter.call(this);\r\n\r\n /**\r\n * A reference to the Phaser.Game instance.\r\n *\r\n * @name Phaser.FacebookInstantGamesPlugin#game\r\n * @type {Phaser.Game}\r\n * @readOnly\r\n * @since 3.13.0\r\n */\r\n this.game = game;\r\n\r\n /**\r\n * A Data Manager instance.\r\n * It allows you to store, query and retrieve any key/value data you may need to store.\r\n * It's also used internally by the plugin to store FBIG API data.\r\n *\r\n * @name Phaser.FacebookInstantGamesPlugin#data\r\n * @type {Phaser.Data.DataManager}\r\n * @since 3.13.0\r\n */\r\n this.data = new DataManager(this);\r\n\r\n this.on('setdata', this.setDataHandler, this);\r\n this.on('changedata', this.changeDataHandler, this);\r\n\r\n /**\r\n * Has the Facebook Instant Games API loaded yet?\r\n * This is set automatically during the boot process.\r\n *\r\n * @name Phaser.FacebookInstantGamesPlugin#hasLoaded\r\n * @type {boolean}\r\n * @since 3.13.0\r\n */\r\n this.hasLoaded = false;\r\n\r\n /**\r\n * Is the Data Manager currently locked?\r\n *\r\n * @name Phaser.FacebookInstantGamesPlugin#dataLocked\r\n * @type {boolean}\r\n * @since 3.13.0\r\n */\r\n this.dataLocked = false;\r\n\r\n /**\r\n * A list of the Facebook Instant Games APIs that are available,\r\n * based on the given platform, context and user privacy settings.\r\n * This value is populated automatically during boot.\r\n *\r\n * @name Phaser.FacebookInstantGamesPlugin#supportedAPIs\r\n * @type {string[]}\r\n * @since 3.13.0\r\n */\r\n this.supportedAPIs = [];\r\n\r\n /**\r\n * Holds the entry point that the game was launched from.\r\n * This value is populated automatically during boot.\r\n *\r\n * @name Phaser.FacebookInstantGamesPlugin#entryPoint\r\n * @type {string}\r\n * @since 3.13.0\r\n */\r\n this.entryPoint = '';\r\n\r\n /**\r\n * An object that contains any data associated with the entry point that the game was launched from.\r\n * The contents of the object are developer-defined, and can occur from entry points on different platforms.\r\n * This will return null for older mobile clients, as well as when there is no data associated with the particular entry point.\r\n * This value is populated automatically during boot.\r\n *\r\n * @name Phaser.FacebookInstantGamesPlugin#entryPointData\r\n * @type {any}\r\n * @since 3.13.0\r\n */\r\n this.entryPointData = null;\r\n\r\n /**\r\n * A unique identifier for the current game context. This represents a specific context\r\n * that the game is being played in (for example, a particular messenger conversation or facebook post).\r\n * The identifier will be null if game is being played in a solo context.\r\n * This value is populated automatically during boot.\r\n *\r\n * @name Phaser.FacebookInstantGamesPlugin#contextID\r\n * @type {string}\r\n * @since 3.13.0\r\n */\r\n this.contextID = null;\r\n\r\n /**\r\n * The current context in which your game is running. This can be either `null` or\r\n * one of:\r\n * \r\n * `POST` - The game is running inside of a Facebook post.\r\n * `THREAD` - The game is running inside a Facebook Messenger thread.\r\n * `GROUP` - The game is running inside a Facebook Group.\r\n * `SOLO` - This is the default context, the player is the only participant.\r\n * \r\n * This value is populated automatically during boot.\r\n *\r\n * @name Phaser.FacebookInstantGamesPlugin#contextType\r\n * @type {?string}\r\n * @since 3.13.0\r\n */\r\n this.contextType = null;\r\n\r\n /**\r\n * The current locale.\r\n * See https://origincache.facebook.com/developers/resources/?id=FacebookLocales.xml for a complete list of supported locale values.\r\n * Use this to determine what languages the current game should be localized with.\r\n * This value is populated automatically during boot.\r\n *\r\n * @name Phaser.FacebookInstantGamesPlugin#locale\r\n * @type {?string}\r\n * @since 3.13.0\r\n */\r\n this.locale = null;\r\n\r\n /**\r\n * The platform on which the game is currently running, i.e. `IOS`.\r\n * This value is populated automatically during boot.\r\n *\r\n * @name Phaser.FacebookInstantGamesPlugin#platform\r\n * @type {?string}\r\n * @since 3.13.0\r\n */\r\n this.platform = null;\r\n\r\n /**\r\n * The string representation of the Facebook Instant Games SDK version being used.\r\n * This value is populated automatically during boot.\r\n *\r\n * @name Phaser.FacebookInstantGamesPlugin#version\r\n * @type {?string}\r\n * @since 3.13.0\r\n */\r\n this.version = null;\r\n\r\n /**\r\n * Holds the id of the player. This is a string based ID, the same as `FBInstant.player.getID()`.\r\n * This value is populated automatically during boot if the API is supported.\r\n *\r\n * @name Phaser.FacebookInstantGamesPlugin#playerID\r\n * @type {?string}\r\n * @since 3.13.0\r\n */\r\n this.playerID = null;\r\n\r\n /**\r\n * The player's localized display name.\r\n * This value is populated automatically during boot if the API is supported.\r\n *\r\n * @name Phaser.FacebookInstantGamesPlugin#playerName\r\n * @type {?string}\r\n * @since 3.13.0\r\n */\r\n this.playerName = null;\r\n\r\n /**\r\n * A url to the player's public profile photo. The photo will always be a square, and with dimensions\r\n * of at least 200x200. When rendering it in the game, the exact dimensions should never be assumed to be constant.\r\n * It's recommended to always scale the image to a desired size before rendering.\r\n * This value is populated automatically during boot if the API is supported.\r\n *\r\n * @name Phaser.FacebookInstantGamesPlugin#playerPhotoURL\r\n * @type {?string}\r\n * @since 3.13.0\r\n */\r\n this.playerPhotoURL = null;\r\n\r\n /**\r\n * Whether a player can subscribe to the game bot or not.\r\n *\r\n * @name Phaser.FacebookInstantGamesPlugin#playerCanSubscribeBot\r\n * @type {boolean}\r\n * @since 3.13.0\r\n */\r\n this.playerCanSubscribeBot = false;\r\n\r\n /**\r\n * Does the current platform and context allow for use of the payments API?\r\n * Currently this is only available on Facebook.com and Android 6+.\r\n *\r\n * @name Phaser.FacebookInstantGamesPlugin#paymentsReady\r\n * @type {boolean}\r\n * @since 3.13.0\r\n */\r\n this.paymentsReady = false;\r\n\r\n /**\r\n * The set of products that are registered to the game.\r\n *\r\n * @name Phaser.FacebookInstantGamesPlugin#catalog\r\n * @type {Product[]}\r\n * @since 3.13.0\r\n */\r\n this.catalog = [];\r\n\r\n /**\r\n * Contains all of the player's unconsumed purchases.\r\n * The game must fetch the current player's purchases as soon as the client indicates that it is ready to perform payments-related operations,\r\n * i.e. at game start. The game can then process and consume any purchases that are waiting to be consumed.\r\n *\r\n * @name Phaser.FacebookInstantGamesPlugin#purchases\r\n * @type {Purchase[]}\r\n * @since 3.13.0\r\n */\r\n this.purchases = [];\r\n\r\n /**\r\n * Contains all of the leaderboard data, as populated by the `getLeaderboard()` method.\r\n *\r\n * @name Phaser.FacebookInstantGamesPlugin#leaderboards\r\n * @type {Phaser.FacebookInstantGamesLeaderboard[]}\r\n * @since 3.13.0\r\n */\r\n this.leaderboards = {};\r\n\r\n /**\r\n * Contains AdInstance objects, as created by the `preloadAds()` method.\r\n *\r\n * @name Phaser.FacebookInstantGamesPlugin#ads\r\n * @type {AdInstance[]}\r\n * @since 3.13.0\r\n */\r\n this.ads = [];\r\n },\r\n\r\n /**\r\n * Internal set data handler.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#setDataHandler\r\n * @private\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Data.DataManager} parent - The parent Data Manager instance.\r\n * @param {string} key - The key of the data.\r\n * @param {any} value - The value of the data.\r\n */\r\n setDataHandler: function (parent, key, value)\r\n {\r\n if (this.dataLocked)\r\n {\r\n return;\r\n }\r\n\r\n var data = {};\r\n\r\n data[key] = value;\r\n\r\n var _this = this;\r\n\r\n FBInstant.player.setDataAsync(data).then(function ()\r\n {\r\n _this.emit('savedata', data);\r\n });\r\n },\r\n\r\n /**\r\n * Internal change data handler.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#changeDataHandler\r\n * @private\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Data.DataManager} parent - The parent Data Manager instance.\r\n * @param {string} key - The key of the data.\r\n * @param {any} value - The value of the data.\r\n */\r\n changeDataHandler: function (parent, key, value)\r\n {\r\n if (this.dataLocked)\r\n {\r\n return;\r\n }\r\n\r\n var data = {};\r\n\r\n data[key] = value;\r\n\r\n var _this = this;\r\n\r\n FBInstant.player.setDataAsync(data).then(function ()\r\n {\r\n _this.emit('savedata', data);\r\n });\r\n },\r\n\r\n /**\r\n * Call this method from your `Scene.preload` in order to sync the load progress\r\n * of the Phaser Loader with the Facebook Instant Games loader display, i.e.:\r\n * \r\n * ```javascript\r\n * this.facebook.showLoadProgress(this);\r\n * this.facebook.once('startgame', this.startGame, this);\r\n * ```\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#showLoadProgress\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene for which you want to show loader progress for.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n showLoadProgress: function (scene)\r\n {\r\n scene.load.on('progress', function (value)\r\n {\r\n if (!this.hasLoaded)\r\n {\r\n FBInstant.setLoadingProgress(value * 100);\r\n }\r\n\r\n }, this);\r\n\r\n scene.load.on('complete', function ()\r\n {\r\n if (!this.hasLoaded)\r\n {\r\n this.hasLoaded = true;\r\n\r\n FBInstant.startGameAsync().then(this.gameStartedHandler.bind(this));\r\n }\r\n \r\n }, this);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * This method is called automatically when the game has finished loading,\r\n * if you used the `showLoadProgress` method. If your game doesn't need to\r\n * load any assets, or you're managing the load yourself, then call this\r\n * method directly to start the API running.\r\n * \r\n * When the API has finished starting this plugin will emit a `startgame` event\r\n * which you should listen for.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#gameStarted\r\n * @since 3.13.0\r\n */\r\n gameStarted: function ()\r\n {\r\n if (!this.hasLoaded)\r\n {\r\n this.hasLoaded = true;\r\n\r\n FBInstant.startGameAsync().then(this.gameStartedHandler.bind(this));\r\n }\r\n else\r\n {\r\n this.gameStartedHandler();\r\n }\r\n },\r\n\r\n /**\r\n * The internal gameStarted handler.\r\n * \r\n * @method Phaser.FacebookInstantGamesPlugin#gameStartedHandler\r\n * @private\r\n * @since 3.20.0\r\n */\r\n gameStartedHandler: function ()\r\n {\r\n var APIs = FBInstant.getSupportedAPIs();\r\n\r\n var supported = {};\r\n\r\n var dotToUpper = function (match)\r\n {\r\n return match[1].toUpperCase();\r\n };\r\n\r\n APIs.forEach(function (api)\r\n {\r\n api = api.replace(/\\../g, dotToUpper);\r\n\r\n supported[api] = true;\r\n });\r\n\r\n this.supportedAPIs = supported;\r\n\r\n this.getID();\r\n this.getType();\r\n this.getLocale();\r\n this.getPlatform();\r\n this.getSDKVersion();\r\n\r\n this.getPlayerID();\r\n this.getPlayerName();\r\n this.getPlayerPhotoURL();\r\n\r\n var _this = this;\r\n\r\n FBInstant.onPause(function ()\r\n {\r\n _this.emit('pause');\r\n });\r\n\r\n FBInstant.getEntryPointAsync().then(function (entrypoint)\r\n {\r\n _this.entryPoint = entrypoint;\r\n _this.entryPointData = FBInstant.getEntryPointData();\r\n\r\n _this.emit('startgame');\r\n\r\n }).catch(function (e)\r\n {\r\n console.warn(e);\r\n });\r\n\r\n // Facebook.com and Android 6 only\r\n if (this.supportedAPIs.paymentsPurchaseAsync)\r\n {\r\n FBInstant.payments.onReady(function ()\r\n {\r\n _this.paymentsReady = true;\r\n\r\n }).catch(function (e)\r\n {\r\n console.warn(e);\r\n });\r\n }\r\n },\r\n\r\n /**\r\n * Checks to see if a given Facebook Instant Games API is available or not.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#checkAPI\r\n * @since 3.13.0\r\n * \r\n * @param {string} api - The API to check for, i.e. `player.getID`.\r\n * \r\n * @return {boolean} `true` if the API is supported, otherwise `false`.\r\n */\r\n checkAPI: function (api)\r\n {\r\n if (!this.supportedAPIs[api])\r\n {\r\n return false;\r\n }\r\n else\r\n {\r\n return true;\r\n }\r\n },\r\n\r\n /**\r\n * Returns the unique identifier for the current game context. This represents a specific context\r\n * that the game is being played in (for example, a particular messenger conversation or facebook post).\r\n * The identifier will be null if game is being played in a solo context.\r\n * \r\n * It is only populated if `contextGetID` is in the list of supported APIs.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#getID\r\n * @since 3.13.0\r\n * \r\n * @return {string} The context ID.\r\n */\r\n getID: function ()\r\n {\r\n if (!this.contextID && this.supportedAPIs.contextGetID)\r\n {\r\n this.contextID = FBInstant.context.getID();\r\n }\r\n\r\n return this.contextID;\r\n },\r\n\r\n /**\r\n * Returns the current context in which your game is running. This can be either `null` or one of:\r\n * \r\n * `POST` - The game is running inside of a Facebook post.\r\n * `THREAD` - The game is running inside a Facebook Messenger thread.\r\n * `GROUP` - The game is running inside a Facebook Group.\r\n * `SOLO` - This is the default context, the player is the only participant.\r\n * \r\n * It is only populated if `contextGetType` is in the list of supported APIs.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#getType\r\n * @since 3.13.0\r\n * \r\n * @return {?string} The context type.\r\n */\r\n getType: function ()\r\n {\r\n if (!this.contextType && this.supportedAPIs.contextGetType)\r\n {\r\n this.contextType = FBInstant.context.getType();\r\n }\r\n\r\n return this.contextType;\r\n },\r\n\r\n /**\r\n * Returns the current locale.\r\n * See https://origincache.facebook.com/developers/resources/?id=FacebookLocales.xml for a complete list of supported locale values.\r\n * Use this to determine what languages the current game should be localized with.\r\n * It is only populated if `getLocale` is in the list of supported APIs.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#getLocale\r\n * @since 3.13.0\r\n * \r\n * @return {?string} The current locale.\r\n */\r\n getLocale: function ()\r\n {\r\n if (!this.locale && this.supportedAPIs.getLocale)\r\n {\r\n this.locale = FBInstant.getLocale();\r\n }\r\n\r\n return this.locale;\r\n },\r\n\r\n /**\r\n * Returns the platform on which the game is currently running, i.e. `IOS`.\r\n * It is only populated if `getPlatform` is in the list of supported APIs.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#getPlatform\r\n * @since 3.13.0\r\n * \r\n * @return {?string} The current platform.\r\n */\r\n getPlatform: function ()\r\n {\r\n if (!this.platform && this.supportedAPIs.getPlatform)\r\n {\r\n this.platform = FBInstant.getPlatform();\r\n }\r\n\r\n return this.platform;\r\n },\r\n\r\n /**\r\n * Returns the string representation of the Facebook Instant Games SDK version being used.\r\n * It is only populated if `getSDKVersion` is in the list of supported APIs.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#getSDKVersion\r\n * @since 3.13.0\r\n * \r\n * @return {?string} The sdk version.\r\n */\r\n getSDKVersion: function ()\r\n {\r\n if (!this.version && this.supportedAPIs.getSDKVersion)\r\n {\r\n this.version = FBInstant.getSDKVersion();\r\n }\r\n\r\n return this.version;\r\n },\r\n\r\n /**\r\n * Returns the id of the player. This is a string based ID, the same as `FBInstant.player.getID()`.\r\n * It is only populated if `playerGetID` is in the list of supported APIs.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#getPlayerID\r\n * @since 3.13.0\r\n * \r\n * @return {?string} The player ID.\r\n */\r\n getPlayerID: function ()\r\n {\r\n if (!this.playerID && this.supportedAPIs.playerGetID)\r\n {\r\n this.playerID = FBInstant.player.getID();\r\n }\r\n\r\n return this.playerID;\r\n },\r\n\r\n /**\r\n * Returns the player's localized display name.\r\n * It is only populated if `playerGetName` is in the list of supported APIs.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#getPlayerName\r\n * @since 3.13.0\r\n * \r\n * @return {?string} The player's localized display name.\r\n */\r\n getPlayerName: function ()\r\n {\r\n if (!this.playerName && this.supportedAPIs.playerGetName)\r\n {\r\n this.playerName = FBInstant.player.getName();\r\n }\r\n\r\n return this.playerName;\r\n },\r\n\r\n /**\r\n * Returns the url to the player's public profile photo. The photo will always be a square, and with dimensions\r\n * of at least 200x200. When rendering it in the game, the exact dimensions should never be assumed to be constant.\r\n * It's recommended to always scale the image to a desired size before rendering.\r\n * It is only populated if `playerGetPhoto` is in the list of supported APIs.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#getPlayerPhotoURL\r\n * @since 3.13.0\r\n * \r\n * @return {?string} The player's photo url.\r\n */\r\n getPlayerPhotoURL: function ()\r\n {\r\n if (!this.playerPhotoURL && this.supportedAPIs.playerGetPhoto)\r\n {\r\n this.playerPhotoURL = FBInstant.player.getPhoto();\r\n }\r\n\r\n return this.playerPhotoURL;\r\n },\r\n\r\n /**\r\n * Load the player's photo and store it in the Texture Manager, ready for use in-game.\r\n * \r\n * This method works by using a Scene Loader instance and then asking the Loader to\r\n * retrieve the image.\r\n * \r\n * When complete the plugin will emit a `photocomplete` event, along with the key of the photo.\r\n * \r\n * ```javascript\r\n * this.facebook.loadPlayerPhoto(this, 'player').once('photocomplete', function (key) {\r\n * this.add.image(x, y, 'player');\r\n * }, this);\r\n * ```\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#loadPlayerPhoto\r\n * @since 3.13.0\r\n * \r\n * @param {Phaser.Scene} scene - The Scene that will be responsible for loading this photo.\r\n * @param {string} key - The key to use when storing the photo in the Texture Manager.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n loadPlayerPhoto: function (scene, key)\r\n {\r\n if (this.playerPhotoURL)\r\n {\r\n scene.load.setCORS('anonymous');\r\n \r\n scene.load.image(key, this.playerPhotoURL);\r\n \r\n scene.load.once('filecomplete-image-' + key, function ()\r\n {\r\n this.emit('photocomplete', key);\r\n\r\n }, this);\r\n \r\n scene.load.start();\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Checks if the current player can subscribe to the game bot.\r\n * \r\n * It makes an async call to the API, so the result isn't available immediately.\r\n * \r\n * If they can subscribe, the `playerCanSubscribeBot` property is set to `true`\r\n * and this plugin will emit the `cansubscribebot` event.\r\n * \r\n * If they cannot, i.e. it's not in the list of supported APIs, or the request\r\n * was rejected, it will emit a `cansubscribebotfail` event instead.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#canSubscribeBot\r\n * @since 3.13.0\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n canSubscribeBot: function ()\r\n {\r\n if (this.supportedAPIs.playerCanSubscribeBotAsync)\r\n {\r\n var _this = this;\r\n\r\n FBInstant.player.canSubscribeBotAsync().then(function ()\r\n {\r\n _this.playerCanSubscribeBot = true;\r\n\r\n _this.emit('cansubscribebot');\r\n\r\n }).catch(function (e)\r\n {\r\n _this.emit('cansubscribebotfail', e);\r\n });\r\n }\r\n else\r\n {\r\n this.emit('cansubscribebotfail');\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Subscribes the current player to the game bot.\r\n * \r\n * It makes an async call to the API, so the result isn't available immediately.\r\n * \r\n * If they are successfully subscribed this plugin will emit the `subscribebot` event.\r\n * \r\n * If they cannot, i.e. it's not in the list of supported APIs, or the request\r\n * was rejected, it will emit a `subscribebotfail` event instead.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#subscribeBot\r\n * @since 3.13.0\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n subscribeBot: function ()\r\n {\r\n if (this.playerCanSubscribeBot)\r\n {\r\n var _this = this;\r\n\r\n FBInstant.player.subscribeBotAsync().then(function ()\r\n {\r\n _this.emit('subscribebot');\r\n\r\n }).catch(function (e)\r\n {\r\n _this.emit('subscribebotfail', e);\r\n });\r\n }\r\n else\r\n {\r\n this.emit('subscribebotfail');\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Gets the associated data from the player based on the given key, or array of keys.\r\n * \r\n * The data is requested in an async call, so the result isn't available immediately.\r\n * \r\n * When the call completes the data is set into this plugins Data Manager and the\r\n * `getdata` event will be emitted.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#getData\r\n * @since 3.13.0\r\n * \r\n * @param {(string|string[])} keys - The key/s of the data to retrieve.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n getData: function (keys)\r\n {\r\n if (!this.checkAPI('playerGetDataAsync'))\r\n {\r\n return this;\r\n }\r\n\r\n if (!Array.isArray(keys))\r\n {\r\n keys = [ keys ];\r\n }\r\n\r\n var _this = this;\r\n\r\n FBInstant.player.getDataAsync(keys).then(function (data)\r\n {\r\n _this.dataLocked = true;\r\n\r\n for (var key in data)\r\n {\r\n _this.data.set(key, data[key]);\r\n }\r\n\r\n _this.dataLocked = false;\r\n\r\n _this.emit('getdata', data);\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set data to be saved to the designated cloud storage of the current player. The game can store up to 1MB of data for each unique player.\r\n * \r\n * The data save is requested in an async call, so the result isn't available immediately.\r\n * \r\n * Data managed via this plugins Data Manager instance is automatically synced with Facebook. However, you can call this\r\n * method directly if you need to replace the data object directly.\r\n * \r\n * When the APIs `setDataAsync` call resolves it will emit the `savedata` event from this plugin. If the call fails for some\r\n * reason it will emit `savedatafail` instead.\r\n * \r\n * The call resolving does not necessarily mean that the input has already been persisted. Rather, it means that the data was valid and\r\n * has been scheduled to be saved. It also guarantees that all values that were set are now available in `getData`.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#saveData\r\n * @since 3.13.0\r\n * \r\n * @param {object} data - An object containing a set of key-value pairs that should be persisted to cloud storage.\r\n * The object must contain only serializable values - any non-serializable values will cause the entire modification to be rejected.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n saveData: function (data)\r\n {\r\n if (!this.checkAPI('playerSetDataAsync'))\r\n {\r\n return this;\r\n }\r\n\r\n var _this = this;\r\n\r\n FBInstant.player.setDataAsync(data).then(function ()\r\n {\r\n _this.emit('savedata', data);\r\n\r\n }).catch(function (e)\r\n {\r\n _this.emit('savedatafail', e);\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Immediately flushes any changes to the player data to the designated cloud storage.\r\n * This function is expensive, and should primarily be used for critical changes where persistence needs to be immediate\r\n * and known by the game. Non-critical changes should rely on the platform to persist them in the background.\r\n * NOTE: Calls to player.setDataAsync will be rejected while this function's result is pending.\r\n * \r\n * Data managed via this plugins Data Manager instance is automatically synced with Facebook. However, you can call this\r\n * method directly if you need to flush the data directly.\r\n * \r\n * When the APIs `flushDataAsync` call resolves it will emit the `flushdata` event from this plugin. If the call fails for some\r\n * reason it will emit `flushdatafail` instead.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#flushData\r\n * @since 3.13.0\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n flushData: function ()\r\n {\r\n if (!this.checkAPI('playerFlushDataAsync'))\r\n {\r\n return this;\r\n }\r\n\r\n var _this = this;\r\n\r\n FBInstant.player.flushDataAsync().then(function ()\r\n {\r\n _this.emit('flushdata');\r\n\r\n }).catch(function (e)\r\n {\r\n _this.emit('flushdatafail', e);\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Retrieve stats from the designated cloud storage of the current player.\r\n * \r\n * The data is requested in an async call, so the result isn't available immediately.\r\n * \r\n * When the call completes the `getstats` event will be emitted along with the data object returned.\r\n * \r\n * If the call fails, i.e. it's not in the list of supported APIs, or the request was rejected,\r\n * it will emit a `getstatsfail` event instead.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#getStats\r\n * @since 3.13.0\r\n * \r\n * @param {string[]} [keys] - An optional array of unique keys to retrieve stats for. If the function is called without it, it will fetch all stats.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n getStats: function (keys)\r\n {\r\n if (!this.checkAPI('playerGetStatsAsync'))\r\n {\r\n return this;\r\n }\r\n\r\n var _this = this;\r\n\r\n FBInstant.player.getStatsAsync(keys).then(function (data)\r\n {\r\n _this.emit('getstats', data);\r\n\r\n }).catch(function (e)\r\n {\r\n _this.emit('getstatsfail', e);\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Save the stats of the current player to the designated cloud storage.\r\n * \r\n * Stats in the Facebook Instant Games API are purely numerical values paired with a string-based key. Only numbers can be saved as stats,\r\n * all other data types will be ignored.\r\n * \r\n * The data is requested in an async call, so the result isn't available immediately.\r\n * \r\n * When the call completes the `savestats` event will be emitted along with the data object returned.\r\n * \r\n * If the call fails, i.e. it's not in the list of supported APIs, or the request was rejected,\r\n * it will emit a `savestatsfail` event instead.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#saveStats\r\n * @since 3.13.0\r\n * \r\n * @param {object} data - An object containing a set of key-value pairs that should be persisted to cloud storage as stats. Note that only numerical values are stored.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n saveStats: function (data)\r\n {\r\n if (!this.checkAPI('playerSetStatsAsync'))\r\n {\r\n return this;\r\n }\r\n\r\n var output = {};\r\n\r\n for (var key in data)\r\n {\r\n if (typeof data[key] === 'number')\r\n {\r\n output[key] = data[key];\r\n }\r\n }\r\n\r\n var _this = this;\r\n\r\n FBInstant.player.setStatsAsync(output).then(function ()\r\n {\r\n _this.emit('savestats', output);\r\n\r\n }).catch(function (e)\r\n {\r\n _this.emit('savestatsfail', e);\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Increment the stats of the current player and save them to the designated cloud storage.\r\n * \r\n * Stats in the Facebook Instant Games API are purely numerical values paired with a string-based key. Only numbers can be saved as stats,\r\n * all other data types will be ignored.\r\n * \r\n * The data object provided for this call should contain offsets for how much to modify the stats by:\r\n * \r\n * ```javascript\r\n * this.facebook.incStats({\r\n * level: 1,\r\n * zombiesSlain: 17,\r\n * rank: -1\r\n * });\r\n * ```\r\n * \r\n * The data is requested in an async call, so the result isn't available immediately.\r\n * \r\n * When the call completes the `incstats` event will be emitted along with the data object returned.\r\n * \r\n * If the call fails, i.e. it's not in the list of supported APIs, or the request was rejected,\r\n * it will emit a `incstatsfail` event instead.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#incStats\r\n * @since 3.13.0\r\n * \r\n * @param {object} data - An object containing a set of key-value pairs indicating how much to increment each stat in cloud storage. Note that only numerical values are processed.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n incStats: function (data)\r\n {\r\n if (!this.checkAPI('playerIncrementStatsAsync'))\r\n {\r\n return this;\r\n }\r\n\r\n var output = {};\r\n\r\n for (var key in data)\r\n {\r\n if (typeof data[key] === 'number')\r\n {\r\n output[key] = data[key];\r\n }\r\n }\r\n\r\n var _this = this;\r\n\r\n FBInstant.player.incrementStatsAsync(output).then(function (stats)\r\n {\r\n _this.emit('incstats', stats);\r\n\r\n }).catch(function (e)\r\n {\r\n _this.emit('incstatsfail', e);\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the data associated with the individual gameplay session for the current context.\r\n * \r\n * This function should be called whenever the game would like to update the current session data.\r\n * \r\n * This session data may be used to populate a variety of payloads, such as game play webhooks.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#saveSession\r\n * @since 3.13.0\r\n * \r\n * @param {object} data - An arbitrary data object, which must be less than or equal to 1000 characters when stringified.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n saveSession: function (data)\r\n {\r\n if (!this.checkAPI('setSessionData'))\r\n {\r\n return this;\r\n }\r\n\r\n var test = JSON.stringify(data);\r\n\r\n if (test.length <= 1000)\r\n {\r\n FBInstant.setSessionData(data);\r\n }\r\n else\r\n {\r\n console.warn('Session data too long. Max 1000 chars.');\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * This invokes a dialog to let the user share specified content, either as a message in Messenger or as a post on the user's timeline.\r\n * \r\n * A blob of data can be attached to the share which every game session launched from the share will be able to access via the `this.entryPointData` property.\r\n * \r\n * This data must be less than or equal to 1000 characters when stringified.\r\n * \r\n * When this method is called you should consider your game paused. Listen out for the `resume` event from this plugin to know when the dialog has been closed.\r\n * \r\n * The user may choose to cancel the share action and close the dialog. The resulting `resume` event will be dispatched regardless if the user actually shared the content or not.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#openShare\r\n * @since 3.13.0\r\n * \r\n * @param {string} text - A text message to be shared.\r\n * @param {string} key - The key of the texture to use as the share image.\r\n * @param {string} [frame] - The frame of the texture to use as the share image. Set to `null` if you don't require a frame, but do need to set session data.\r\n * @param {object} [sessionData] - A blob of data to attach to the share.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n openShare: function (text, key, frame, sessionData)\r\n {\r\n return this._share('SHARE', text, key, frame, sessionData);\r\n },\r\n\r\n /**\r\n * This invokes a dialog to let the user invite a friend to play this game, either as a message in Messenger or as a post on the user's timeline.\r\n * \r\n * A blob of data can be attached to the share which every game session launched from the share will be able to access via the `this.entryPointData` property.\r\n * \r\n * This data must be less than or equal to 1000 characters when stringified.\r\n * \r\n * When this method is called you should consider your game paused. Listen out for the `resume` event from this plugin to know when the dialog has been closed.\r\n * \r\n * The user may choose to cancel the share action and close the dialog. The resulting `resume` event will be dispatched regardless if the user actually shared the content or not.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#openInvite\r\n * @since 3.13.0\r\n * \r\n * @param {string} text - A text message to be shared.\r\n * @param {string} key - The key of the texture to use as the share image.\r\n * @param {string} [frame] - The frame of the texture to use as the share image. Set to `null` if you don't require a frame, but do need to set session data.\r\n * @param {object} [sessionData] - A blob of data to attach to the share.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n openInvite: function (text, key, frame, sessionData)\r\n {\r\n return this._share('INVITE', text, key, frame, sessionData);\r\n },\r\n\r\n /**\r\n * This invokes a dialog to let the user share specified content, either as a message in Messenger or as a post on the user's timeline.\r\n * \r\n * A blob of data can be attached to the share which every game session launched from the share will be able to access via the `this.entryPointData` property.\r\n * \r\n * This data must be less than or equal to 1000 characters when stringified.\r\n * \r\n * When this method is called you should consider your game paused. Listen out for the `resume` event from this plugin to know when the dialog has been closed.\r\n * \r\n * The user may choose to cancel the share action and close the dialog. The resulting `resume` event will be dispatched regardless if the user actually shared the content or not.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#openRequest\r\n * @since 3.13.0\r\n * \r\n * @param {string} text - A text message to be shared.\r\n * @param {string} key - The key of the texture to use as the share image.\r\n * @param {string} [frame] - The frame of the texture to use as the share image. Set to `null` if you don't require a frame, but do need to set session data.\r\n * @param {object} [sessionData] - A blob of data to attach to the share.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n openRequest: function (text, key, frame, sessionData)\r\n {\r\n return this._share('REQUEST', text, key, frame, sessionData);\r\n },\r\n\r\n /**\r\n * This invokes a dialog to let the user share specified content, either as a message in Messenger or as a post on the user's timeline.\r\n * \r\n * A blob of data can be attached to the share which every game session launched from the share will be able to access via the `this.entryPointData` property.\r\n * \r\n * This data must be less than or equal to 1000 characters when stringified.\r\n * \r\n * When this method is called you should consider your game paused. Listen out for the `resume` event from this plugin to know when the dialog has been closed.\r\n * \r\n * The user may choose to cancel the share action and close the dialog. The resulting `resume` event will be dispatched regardless if the user actually shared the content or not.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#openChallenge\r\n * @since 3.13.0\r\n * \r\n * @param {string} text - A text message to be shared.\r\n * @param {string} key - The key of the texture to use as the share image.\r\n * @param {string} [frame] - The frame of the texture to use as the share image. Set to `null` if you don't require a frame, but do need to set session data.\r\n * @param {object} [sessionData] - A blob of data to attach to the share.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n openChallenge: function (text, key, frame, sessionData)\r\n {\r\n return this._share('CHALLENGE', text, key, frame, sessionData);\r\n },\r\n\r\n /**\r\n * Internal share handler.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#_share\r\n * @private\r\n * @since 3.13.0\r\n * \r\n * @param {string} intent - (\"INVITE\" | \"REQUEST\" | \"CHALLENGE\" | \"SHARE\") Indicates the intent of the share.\r\n * @param {string} text - A text message to be shared.\r\n * @param {string} key - The key of the texture to use as the share image.\r\n * @param {string} [frame] - The frame of the texture to use as the share image. Set to `null` if you don't require a frame, but do need to set session data.\r\n * @param {object} [sessionData] - A blob of data to attach to the share.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n _share: function (intent, text, key, frame, sessionData)\r\n {\r\n if (!this.checkAPI('shareAsync'))\r\n {\r\n return this;\r\n }\r\n\r\n if (sessionData === undefined) { sessionData = {}; }\r\n\r\n if (key)\r\n {\r\n var imageData = this.game.textures.getBase64(key, frame);\r\n }\r\n\r\n // intent (\"INVITE\" | \"REQUEST\" | \"CHALLENGE\" | \"SHARE\") Indicates the intent of the share.\r\n // image string A base64 encoded image to be shared.\r\n // text string A text message to be shared.\r\n // data Object? A blob of data to attach to the share. All game sessions launched from the share will be able to access this blob through FBInstant.getEntryPointData().\r\n\r\n var payload = {\r\n intent: intent,\r\n image: imageData,\r\n text: text,\r\n data: sessionData\r\n };\r\n\r\n var _this = this;\r\n\r\n FBInstant.shareAsync(payload).then(function ()\r\n {\r\n _this.emit('resume');\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * This function determines whether the number of participants in the current game context is between a given minimum and maximum, inclusive.\r\n * If one of the bounds is null only the other bound will be checked against.\r\n * It will always return the original result for the first call made in a context in a given game play session.\r\n * Subsequent calls, regardless of arguments, will return the answer to the original query until a context change occurs and the query result is reset.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#isSizeBetween\r\n * @since 3.13.0\r\n * \r\n * @param {integer} [min] - The minimum bound of the context size query.\r\n * @param {integer} [max] - The maximum bound of the context size query.\r\n * \r\n * @return {object} The Context Size Response object in the format: `{answer: boolean, minSize: number?, maxSize: number?}`.\r\n */\r\n isSizeBetween: function (min, max)\r\n {\r\n if (!this.checkAPI('contextIsSizeBetween'))\r\n {\r\n return this;\r\n }\r\n\r\n return FBInstant.context.isSizeBetween(min, max);\r\n },\r\n\r\n /**\r\n * Request a switch into a specific context. If the player does not have permission to enter that context,\r\n * or if the player does not provide permission for the game to enter that context, this will emit a `switchfail` event.\r\n * \r\n * Otherwise, the plugin will emit the `switch` event when the game has switched into the specified context.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#switchContext\r\n * @since 3.13.0\r\n * \r\n * @param {string} contextID - The ID of the desired context.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n switchContext: function (contextID)\r\n {\r\n if (!this.checkAPI('contextSwitchAsync'))\r\n {\r\n return this;\r\n }\r\n\r\n if (contextID !== this.contextID)\r\n {\r\n var _this = this;\r\n\r\n FBInstant.context.switchAsync(contextID).then(function ()\r\n {\r\n _this.contextID = FBInstant.context.getID();\r\n\r\n _this.emit('switch', _this.contextID);\r\n\r\n }).catch(function (e)\r\n {\r\n _this.emit('switchfail', e);\r\n });\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * A filter that may be applied to a Context Choose operation.\r\n * \r\n * 'NEW_CONTEXT_ONLY' - Prefer to only surface contexts the game has not been played in before.\r\n * 'INCLUDE_EXISTING_CHALLENGES' - Include the \"Existing Challenges\" section, which surfaces actively played-in contexts that the player is a part of.\r\n * 'NEW_PLAYERS_ONLY' - In sections containing individuals, prefer people who have not played the game.\r\n * \r\n * @typedef {string} ContextFilter\r\n */\r\n\r\n /**\r\n * A configuration object that may be applied to a Context Choose operation.\r\n * \r\n * @typedef {object} ChooseContextConfig\r\n * @property {ContextFilter[]} [filters] - The set of filters to apply to the context suggestions: 'NEW_CONTEXT_ONLY', 'INCLUDE_EXISTING_CHALLENGES' or 'NEW_PLAYERS_ONLY'.\r\n * @property {number} [maxSize] - The maximum number of participants that a suggested context should ideally have.\r\n * @property {number} [minSize] - The minimum number of participants that a suggested context should ideally have.\r\n */\r\n\r\n /**\r\n * Opens a context selection dialog for the player. If the player selects an available context,\r\n * the client will attempt to switch into that context, and emit the `choose` event if successful.\r\n * Otherwise, if the player exits the menu or the client fails to switch into the new context, the `choosefail` event will be emitted.\r\n * \r\n * @method Phaser.FacebookInstantGamesPlugin#chooseContext\r\n * @since 3.13.0\r\n * \r\n * @param {ChooseContextConfig} [options] - An object specifying conditions on the contexts that should be offered.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n chooseContext: function (options)\r\n {\r\n if (!this.checkAPI('contextChooseAsync'))\r\n {\r\n return this;\r\n }\r\n\r\n var _this = this;\r\n\r\n FBInstant.context.chooseAsync(options).then(function ()\r\n {\r\n _this.contextID = FBInstant.context.getID();\r\n _this.emit('choose', _this.contextID);\r\n\r\n }).catch(function (e)\r\n {\r\n _this.emit('choosefail', e);\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Attempts to create or switch into a context between a specified player and the current player.\r\n * This plugin will emit the `create` event once the context switch is completed.\r\n * If the API call fails, such as if the player listed is not a Connected Player of the current player or if the\r\n * player does not provide permission to enter the new context, then the plugin will emit a 'createfail' event.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#createContext\r\n * @since 3.13.0\r\n * \r\n * @param {string} playerID - ID of the player.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n createContext: function (playerID)\r\n {\r\n if (!this.checkAPI('contextCreateAsync'))\r\n {\r\n return this;\r\n }\r\n\r\n var _this = this;\r\n\r\n FBInstant.context.createAsync(playerID).then(function ()\r\n {\r\n _this.contextID = FBInstant.context.getID();\r\n _this.emit('create', _this.contextID);\r\n\r\n }).catch(function (e)\r\n {\r\n _this.emit('createfail', e);\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Fetches an array of ConnectedPlayer objects containing information about active players\r\n * (people who played the game in the last 90 days) that are connected to the current player.\r\n * \r\n * It makes an async call to the API, so the result isn't available immediately.\r\n * \r\n * If they are successfully subscribed this plugin will emit the `players` event along\r\n * with the player data.\r\n * \r\n * If they cannot, i.e. it's not in the list of supported APIs, or the request\r\n * was rejected, it will emit a `playersfail` event instead.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#getPlayers\r\n * @since 3.13.0\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n getPlayers: function ()\r\n {\r\n if (!this.checkAPI('playerGetConnectedPlayersAsync'))\r\n {\r\n return this;\r\n }\r\n\r\n var _this = this;\r\n\r\n FBInstant.player.getConnectedPlayersAsync().then(function (players)\r\n {\r\n _this.emit('players', players);\r\n\r\n }).catch(function (e)\r\n {\r\n _this.emit('playersfail', e);\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Fetches the game's product catalog.\r\n * \r\n * It makes an async call to the API, so the result isn't available immediately.\r\n * \r\n * If they are successfully subscribed this plugin will emit the `getcatalog` event along\r\n * with the catalog data.\r\n * \r\n * If they cannot, i.e. it's not in the list of supported APIs, or the request\r\n * was rejected, it will emit a `getcatalogfail` event instead.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#getCatalog\r\n * @since 3.13.0\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n getCatalog: function ()\r\n {\r\n if (!this.paymentsReady)\r\n {\r\n return this;\r\n }\r\n\r\n var _this = this;\r\n var catalog = this.catalog;\r\n\r\n FBInstant.payments.getCatalogAsync().then(function (data)\r\n {\r\n catalog = [];\r\n\r\n data.forEach(function (item)\r\n {\r\n catalog.push(Product(item));\r\n });\r\n\r\n _this.emit('getcatalog', catalog);\r\n\r\n }).catch(function (e)\r\n {\r\n _this.emit('getcatalogfail', e);\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Fetches a single Product from the game's product catalog.\r\n * \r\n * The product catalog must have been populated using `getCatalog` prior to calling this method.\r\n * \r\n * Use this to look-up product details based on a purchase list.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#getProduct\r\n * @since 3.17.0\r\n * \r\n * @param {string} productID - The Product ID of the item to get from the catalog.\r\n * \r\n * @return {?Product} The Product from the catalog, or `null` if it couldn't be found or the catalog isn't populated.\r\n */\r\n getProduct: function (productID)\r\n {\r\n for (var i = 0; i < this.catalog.length; i++)\r\n {\r\n if (this.catalog[i].productID === productID)\r\n {\r\n return this.catalog[i];\r\n }\r\n }\r\n\r\n return null;\r\n },\r\n\r\n /**\r\n * Begins the purchase flow for a specific product.\r\n * \r\n * It makes an async call to the API, so the result isn't available immediately.\r\n * \r\n * If they are successfully subscribed this plugin will emit the `purchase` event along\r\n * with the purchase data.\r\n * \r\n * If they cannot, i.e. it's not in the list of supported APIs, or the request\r\n * was rejected, it will emit a `purchasefail` event instead.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#purchase\r\n * @since 3.13.0\r\n * \r\n * @param {string} productID - The identifier of the product to purchase.\r\n * @param {string} [developerPayload] - An optional developer-specified payload, to be included in the returned purchase's signed request.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n purchase: function (productID, developerPayload)\r\n {\r\n if (!this.paymentsReady)\r\n {\r\n return this;\r\n }\r\n\r\n var config = {productID: productID};\r\n\r\n if (developerPayload)\r\n {\r\n config.developerPayload = developerPayload;\r\n }\r\n\r\n var _this = this;\r\n\r\n FBInstant.payments.purchaseAsync(config).then(function (data)\r\n {\r\n var purchase = Purchase(data);\r\n\r\n _this.emit('purchase', purchase);\r\n\r\n }).catch(function (e)\r\n {\r\n _this.emit('purchasefail', e);\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Fetches all of the player's unconsumed purchases. The game must fetch the current player's purchases\r\n * as soon as the client indicates that it is ready to perform payments-related operations,\r\n * i.e. at game start. The game can then process and consume any purchases that are waiting to be consumed.\r\n * \r\n * It makes an async call to the API, so the result isn't available immediately.\r\n * \r\n * If they are successfully subscribed this plugin will emit the `getpurchases` event along\r\n * with the purchase data.\r\n * \r\n * If they cannot, i.e. it's not in the list of supported APIs, or the request\r\n * was rejected, it will emit a `getpurchasesfail` event instead.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#getPurchases\r\n * @since 3.13.0\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n getPurchases: function ()\r\n {\r\n if (!this.paymentsReady)\r\n {\r\n return this;\r\n }\r\n\r\n var _this = this;\r\n var purchases = this.purchases;\r\n\r\n FBInstant.payments.getPurchasesAsync().then(function (data)\r\n {\r\n purchases = [];\r\n\r\n data.forEach(function (item)\r\n {\r\n purchases.push(Purchase(item));\r\n });\r\n\r\n _this.emit('getpurchases', purchases);\r\n\r\n }).catch(function (e)\r\n {\r\n _this.emit('getpurchasesfail', e);\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Consumes a specific purchase belonging to the current player. Before provisioning a product's effects to the player,\r\n * the game should request the consumption of the purchased product. Once the purchase is successfully consumed,\r\n * the game should immediately provide the player with the effects of their purchase.\r\n * \r\n * It makes an async call to the API, so the result isn't available immediately.\r\n * \r\n * If they are successfully subscribed this plugin will emit the `consumepurchase` event along\r\n * with the purchase data.\r\n * \r\n * If they cannot, i.e. it's not in the list of supported APIs, or the request\r\n * was rejected, it will emit a `consumepurchasefail` event instead.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#consumePurchase\r\n * @since 3.17.0\r\n * \r\n * @param {string} purchaseToken - The purchase token of the purchase that should be consumed.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n consumePurchase: function (purchaseToken)\r\n {\r\n if (!this.paymentsReady)\r\n {\r\n return this;\r\n }\r\n\r\n var _this = this;\r\n\r\n FBInstant.payments.consumePurchaseAsync(purchaseToken).then(function ()\r\n {\r\n _this.emit('consumepurchase', purchaseToken);\r\n\r\n }).catch(function (e)\r\n {\r\n _this.emit('consumepurchasefail', e);\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Informs Facebook of a custom update that occurred in the game.\r\n * This will temporarily yield control to Facebook and Facebook will decide what to do based on what the update is.\r\n * Once Facebook returns control to the game the plugin will emit an `update` or `updatefail` event.\r\n * \r\n * It makes an async call to the API, so the result isn't available immediately.\r\n * \r\n * The `text` parameter is an update payload with the following structure:\r\n * \r\n * ```\r\n * text: {\r\n * default: 'X just invaded Y\\'s village!',\r\n * localizations: {\r\n * ar_AR: 'X \\u0641\\u0642\\u0637 \\u063A\\u0632\\u062A ' +\r\n * '\\u0642\\u0631\\u064A\\u0629 Y!',\r\n * en_US: 'X just invaded Y\\'s village!',\r\n * es_LA: '\\u00A1X acaba de invadir el pueblo de Y!',\r\n * }\r\n * }\r\n * ```\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#update\r\n * @since 3.13.0\r\n * \r\n * @param {string} cta - The call to action text.\r\n * @param {object} text - The text object.\r\n * @param {string} key - The key of the texture to use as the share image.\r\n * @param {?(string|integer)} frame - The frame of the texture to use as the share image. Set to `null` if you don't require a frame, but do need to set session data.\r\n * @param {string} template - The update template key.\r\n * @param {object} updateData - The update data object payload.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n update: function (cta, text, key, frame, template, updateData)\r\n {\r\n return this._update('CUSTOM', cta, text, key, frame, template, updateData);\r\n },\r\n\r\n /**\r\n * Informs Facebook of a leaderboard update that occurred in the game.\r\n * This will temporarily yield control to Facebook and Facebook will decide what to do based on what the update is.\r\n * Once Facebook returns control to the game the plugin will emit an `update` or `updatefail` event.\r\n * \r\n * It makes an async call to the API, so the result isn't available immediately.\r\n * \r\n * The `text` parameter is an update payload with the following structure:\r\n * \r\n * ```\r\n * text: {\r\n * default: 'X just invaded Y\\'s village!',\r\n * localizations: {\r\n * ar_AR: 'X \\u0641\\u0642\\u0637 \\u063A\\u0632\\u062A ' +\r\n * '\\u0642\\u0631\\u064A\\u0629 Y!',\r\n * en_US: 'X just invaded Y\\'s village!',\r\n * es_LA: '\\u00A1X acaba de invadir el pueblo de Y!',\r\n * }\r\n * }\r\n * ```\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#updateLeaderboard\r\n * @since 3.13.0\r\n * \r\n * @param {string} cta - The call to action text.\r\n * @param {object} text - The text object.\r\n * @param {string} key - The key of the texture to use as the share image.\r\n * @param {?(string|integer)} frame - The frame of the texture to use as the share image. Set to `null` if you don't require a frame, but do need to set session data.\r\n * @param {string} template - The update template key.\r\n * @param {object} updateData - The update data object payload.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n updateLeaderboard: function (cta, text, key, frame, template, updateData)\r\n {\r\n return this._update('LEADERBOARD', cta, text, key, frame, template, updateData);\r\n },\r\n\r\n /**\r\n * Internal update handler.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#_update\r\n * @private\r\n * @since 3.13.0\r\n * \r\n * @param {string} action - The update action.\r\n * @param {string} cta - The call to action text.\r\n * @param {object} text - The text object.\r\n * @param {string} key - The key of the texture to use as the share image.\r\n * @param {?(string|integer)} frame - The frame of the texture to use as the share image. Set to `null` if you don't require a frame, but do need to set session data.\r\n * @param {string} template - The update template key.\r\n * @param {object} updateData - The update data object payload.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n _update: function (action, cta, text, key, frame, template, updateData)\r\n {\r\n if (!this.checkAPI('shareAsync'))\r\n {\r\n return this;\r\n }\r\n\r\n if (cta === undefined) { cta = ''; }\r\n\r\n if (typeof text === 'string')\r\n {\r\n text = {default: text};\r\n }\r\n\r\n if (updateData === undefined) { updateData = {}; }\r\n\r\n if (key)\r\n {\r\n var imageData = this.game.textures.getBase64(key, frame);\r\n }\r\n\r\n var payload = {\r\n action: action,\r\n cta: cta,\r\n image: imageData,\r\n text: text,\r\n template: template,\r\n data: updateData,\r\n strategy: 'IMMEDIATE',\r\n notification: 'NO_PUSH'\r\n };\r\n\r\n var _this = this;\r\n\r\n FBInstant.updateAsync(payload).then(function ()\r\n {\r\n _this.emit('update');\r\n\r\n }).catch(function (e)\r\n {\r\n _this.emit('updatefail', e);\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Request that the client switch to a different Instant Game.\r\n * \r\n * It makes an async call to the API, so the result isn't available immediately.\r\n * \r\n * If the game switches successfully this plugin will emit the `switchgame` event and the client will load the new game.\r\n * \r\n * If they cannot, i.e. it's not in the list of supported APIs, or the request\r\n * was rejected, it will emit a `switchgamefail` event instead.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#switchGame\r\n * @since 3.13.0\r\n * \r\n * @param {string} appID - The Application ID of the Instant Game to switch to. The application must be an Instant Game, and must belong to the same business as the current game.\r\n * @param {object} [data] - An optional data payload. This will be set as the entrypoint data for the game being switched to. Must be less than or equal to 1000 characters when stringified.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n switchGame: function (appID, data)\r\n {\r\n if (!this.checkAPI('switchGameAsync'))\r\n {\r\n return this;\r\n }\r\n\r\n if (data)\r\n {\r\n var test = JSON.stringify(data);\r\n\r\n if (test.length > 1000)\r\n {\r\n console.warn('Switch Game data too long. Max 1000 chars.');\r\n return this;\r\n }\r\n }\r\n\r\n var _this = this;\r\n\r\n FBInstant.switchGameAsync(appID, data).then(function ()\r\n {\r\n _this.emit('switchgame', appID);\r\n\r\n }).catch(function (e)\r\n {\r\n _this.emit('switchgamefail', e);\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Prompts the user to create a shortcut to the game if they are eligible to.\r\n * Can only be called once per session.\r\n * \r\n * It makes an async call to the API, so the result isn't available immediately.\r\n * \r\n * If the user choose to create a shortcut this plugin will emit the `shortcutcreated` event.\r\n * \r\n * If they cannot, i.e. it's not in the list of supported APIs, or the request\r\n * was rejected, it will emit a `shortcutcreatedfail` event instead.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#createShortcut\r\n * @since 3.13.0\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n createShortcut: function ()\r\n {\r\n var _this = this;\r\n\r\n FBInstant.canCreateShortcutAsync().then(function (canCreateShortcut)\r\n {\r\n if (canCreateShortcut)\r\n {\r\n FBInstant.createShortcutAsync().then(function ()\r\n {\r\n _this.emit('shortcutcreated');\r\n\r\n }).catch(function (e)\r\n {\r\n _this.emit('shortcutfailed', e);\r\n });\r\n }\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Quits the game.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#quit\r\n * @since 3.13.0\r\n */\r\n quit: function ()\r\n {\r\n FBInstant.quit();\r\n },\r\n\r\n /**\r\n * Log an app event with FB Analytics.\r\n * \r\n * See https://developers.facebook.com/docs/javascript/reference/v2.8#app_events for more details about FB Analytics.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#log\r\n * @since 3.13.0\r\n * \r\n * @param {string} name - Name of the event. Must be 2 to 40 characters, and can only contain '_', '-', ' ', and alphanumeric characters.\r\n * @param {number} [value] - An optional numeric value that FB Analytics can calculate a sum with.\r\n * @param {object} [params] - An optional object that can contain up to 25 key-value pairs to be logged with the event. Keys must be 2 to 40 characters, and can only contain '_', '-', ' ', and alphanumeric characters. Values must be less than 100 characters in length.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n log: function (name, value, params)\r\n {\r\n if (!this.checkAPI('logEvent'))\r\n {\r\n return this;\r\n }\r\n\r\n if (params === undefined) { params = {}; }\r\n\r\n if (name.length >= 2 && name.length <= 40)\r\n {\r\n FBInstant.logEvent(name, parseFloat(value), params);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Attempt to create an instance of an interstitial ad.\r\n * \r\n * If the instance is created successfully then the ad is preloaded ready for display in-game via the method `showAd()`.\r\n * \r\n * If the ad loads it will emit the `adloaded` event, passing the AdInstance as the only parameter.\r\n * \r\n * If the ad cannot be displayed because there was no inventory to fill it, it will emit the `adsnofill` event.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#preloadAds\r\n * @since 3.13.0\r\n * \r\n * @param {(string|string[])} placementID - The ad placement ID, or an array of IDs, as created in your Audience Network settings within Facebook.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n preloadAds: function (placementID)\r\n {\r\n if (!this.checkAPI('getInterstitialAdAsync'))\r\n {\r\n return this;\r\n }\r\n\r\n if (!Array.isArray(placementID))\r\n {\r\n placementID = [ placementID ];\r\n }\r\n\r\n var i;\r\n var _this = this;\r\n\r\n var total = 0;\r\n\r\n for (i = 0; i < this.ads.length; i++)\r\n {\r\n if (!this.ads[i].shown)\r\n {\r\n total++;\r\n }\r\n }\r\n\r\n if (total + placementID.length >= 3)\r\n {\r\n console.warn('Too many AdInstances. Show an ad before loading more');\r\n return this;\r\n }\r\n\r\n for (i = 0; i < placementID.length; i++)\r\n {\r\n var id = placementID[i];\r\n var data;\r\n\r\n FBInstant.getInterstitialAdAsync(id).then(function (interstitial)\r\n {\r\n data = interstitial;\r\n\r\n return interstitial.loadAsync();\r\n\r\n }).then(function ()\r\n {\r\n var ad = AdInstance(id, data, false);\r\n\r\n _this.ads.push(ad);\r\n\r\n _this.emit('adloaded', ad);\r\n\r\n }).catch(function (e)\r\n {\r\n if (e.code === 'ADS_NO_FILL')\r\n {\r\n _this.emit('adsnofill', id);\r\n }\r\n else if (e.code === 'ADS_FREQUENT_LOAD')\r\n {\r\n _this.emit('adsfrequentload', id);\r\n }\r\n else\r\n {\r\n console.warn(e);\r\n }\r\n });\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Attempt to create an instance of an rewarded video ad.\r\n * \r\n * If the instance is created successfully then the ad is preloaded ready for display in-game via the method `showVideo()`.\r\n * \r\n * If the ad loads it will emit the `adloaded` event, passing the AdInstance as the only parameter.\r\n * \r\n * If the ad cannot be displayed because there was no inventory to fill it, it will emit the `adsnofill` event.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#preloadVideoAds\r\n * @since 3.13.0\r\n * \r\n * @param {(string|string[])} placementID - The ad placement ID, or an array of IDs, as created in your Audience Network settings within Facebook.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n preloadVideoAds: function (placementID)\r\n {\r\n if (!this.checkAPI('getRewardedVideoAsync'))\r\n {\r\n return this;\r\n }\r\n\r\n if (!Array.isArray(placementID))\r\n {\r\n placementID = [ placementID ];\r\n }\r\n\r\n var i;\r\n var _this = this;\r\n\r\n var total = 0;\r\n\r\n for (i = 0; i < this.ads.length; i++)\r\n {\r\n if (!this.ads[i].shown)\r\n {\r\n total++;\r\n }\r\n }\r\n\r\n if (total + placementID.length >= 3)\r\n {\r\n console.warn('Too many AdInstances. Show an ad before loading more');\r\n return this;\r\n }\r\n\r\n for (i = 0; i < placementID.length; i++)\r\n {\r\n var id = placementID[i];\r\n var data;\r\n\r\n FBInstant.getRewardedVideoAsync(id).then(function (reward)\r\n {\r\n data = reward;\r\n\r\n return reward.loadAsync();\r\n\r\n }).then(function ()\r\n {\r\n var ad = AdInstance(id, data, true);\r\n\r\n _this.ads.push(ad);\r\n\r\n _this.emit('adloaded', ad);\r\n\r\n }).catch(function (e)\r\n {\r\n if (e.code === 'ADS_NO_FILL')\r\n {\r\n _this.emit('adsnofill', id);\r\n }\r\n else if (e.code === 'ADS_FREQUENT_LOAD')\r\n {\r\n _this.emit('adsfrequentload', id);\r\n }\r\n else\r\n {\r\n console.warn(e);\r\n }\r\n });\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Displays a previously loaded interstitial ad.\r\n * \r\n * If the ad is successfully displayed this plugin will emit the `adfinished` event, with the AdInstance object as its parameter.\r\n * \r\n * If the ad cannot be displayed, it will emit the `adsnotloaded` event.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#showAd\r\n * @since 3.13.0\r\n * \r\n * @param {string} placementID - The ad placement ID to display.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n showAd: function (placementID)\r\n {\r\n var _this = this;\r\n\r\n for (var i = 0; i < this.ads.length; i++)\r\n {\r\n var ad = this.ads[i];\r\n\r\n if (ad.placementID === placementID && !ad.shown)\r\n {\r\n ad.instance.showAsync().then(function ()\r\n {\r\n ad.shown = true;\r\n\r\n _this.emit('adfinished', ad);\r\n\r\n }).catch(function (e)\r\n {\r\n if (e.code === 'ADS_NOT_LOADED')\r\n {\r\n _this.emit('adsnotloaded', ad);\r\n }\r\n else if (e.code === 'RATE_LIMITED')\r\n {\r\n _this.emit('adratelimited', ad);\r\n }\r\n \r\n _this.emit('adshowerror', e, ad);\r\n });\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Displays a previously loaded interstitial video ad.\r\n * \r\n * If the ad is successfully displayed this plugin will emit the `adfinished` event, with the AdInstance object as its parameter.\r\n * \r\n * If the ad cannot be displayed, it will emit the `adsnotloaded` event.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#showVideo\r\n * @since 3.13.0\r\n * \r\n * @param {string} placementID - The ad placement ID to display.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n showVideo: function (placementID)\r\n {\r\n var _this = this;\r\n\r\n for (var i = 0; i < this.ads.length; i++)\r\n {\r\n var ad = this.ads[i];\r\n\r\n if (ad.placementID === placementID && ad.video && !ad.shown)\r\n {\r\n ad.instance.showAsync().then(function ()\r\n {\r\n ad.shown = true;\r\n\r\n _this.emit('adfinished', ad);\r\n\r\n }).catch(function (e)\r\n {\r\n if (e.code === 'ADS_NOT_LOADED')\r\n {\r\n _this.emit('adsnotloaded', ad);\r\n }\r\n else if (e.code === 'RATE_LIMITED')\r\n {\r\n _this.emit('adratelimited', ad);\r\n }\r\n \r\n _this.emit('adshowerror', e, ad);\r\n });\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Attempts to match the current player with other users looking for people to play with.\r\n * If successful, a new Messenger group thread will be created containing the matched players and the player will\r\n * be context switched to that thread. This plugin will also dispatch the `matchplayer` event, containing the new context ID and Type.\r\n * \r\n * The default minimum and maximum number of players in one matched thread are 2 and 20 respectively,\r\n * depending on how many players are trying to get matched around the same time.\r\n * \r\n * The values can be changed in `fbapp-config.json`. See the Bundle Config documentation for documentation about `fbapp-config.json`.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#matchPlayer\r\n * @since 3.13.0\r\n * \r\n * @param {string} [matchTag] - Optional extra information about the player used to group them with similar players. Players will only be grouped with other players with exactly the same tag. The tag must only include letters, numbers, and underscores and be 100 characters or less in length.\r\n * @param {boolean} [switchImmediately=false] - Optional extra parameter that specifies whether the player should be immediately switched to the new context when a match is found. By default this will be false which will mean the player needs explicitly press play after being matched to switch to the new context.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n matchPlayer: function (matchTag, switchImmediately)\r\n {\r\n if (matchTag === undefined) { matchTag = null; }\r\n if (switchImmediately === undefined) { switchImmediately = false; }\r\n\r\n if (!this.checkAPI('matchPlayerAsync'))\r\n {\r\n return this;\r\n }\r\n\r\n var _this = this;\r\n\r\n FBInstant.matchPlayerAsync(matchTag, switchImmediately).then(function ()\r\n {\r\n _this.getID();\r\n _this.getType();\r\n\r\n _this.emit('matchplayer', _this.contextID, _this.contextType);\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Fetch a specific leaderboard belonging to this Instant Game.\r\n * \r\n * The data is requested in an async call, so the result isn't available immediately.\r\n * \r\n * When the call completes the `getleaderboard` event will be emitted along with a Leaderboard object instance.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#getLeaderboard\r\n * @since 3.13.0\r\n * \r\n * @param {string} name - The name of the leaderboard. Each leaderboard for an Instant Game must have its own distinct name.\r\n * \r\n * @return {this} This Facebook Instant Games Plugin instance.\r\n */\r\n getLeaderboard: function (name)\r\n {\r\n if (!this.checkAPI('getLeaderboardAsync'))\r\n {\r\n return this;\r\n }\r\n\r\n var _this = this;\r\n\r\n FBInstant.getLeaderboardAsync(name).then(function (data)\r\n {\r\n var leaderboard = new Leaderboard(_this, data);\r\n\r\n _this.leaderboards[name] = leaderboard;\r\n\r\n _this.emit('getleaderboard', leaderboard);\r\n\r\n }).catch(function (e)\r\n {\r\n console.warn(e);\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Quits the Facebook API and then destroys this plugin.\r\n *\r\n * @method Phaser.FacebookInstantGamesPlugin#destroy\r\n * @since 3.13.0\r\n */\r\n destroy: function ()\r\n {\r\n FBInstant.quit();\r\n\r\n this.data.destroy();\r\n\r\n this.removeAllListeners();\r\n\r\n this.catalog = [];\r\n this.purchases = [];\r\n this.leaderboards = [];\r\n this.ads = [];\r\n\r\n this.game = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = FacebookInstantGamesPlugin;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvZmJpbnN0YW50L3NyYy9GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbi5qcz8wYTNkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQywrRUFBYztBQUN2QyxZQUFZLG1CQUFPLENBQUMsMEVBQTBCO0FBQzlDLGtCQUFrQixtQkFBTyxDQUFDLG9GQUErQjtBQUN6RCxtQkFBbUIsbUJBQU8sQ0FBQyw0REFBZTtBQUMxQyxrQkFBa0IsbUJBQU8sQ0FBQyxpRkFBZTtBQUN6QyxjQUFjLG1CQUFPLENBQUMseUVBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLDJFQUFZOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHdCQUF3QjtBQUN2QyxlQUFlLE9BQU87QUFDdEIsZUFBZSxJQUFJO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3QkFBd0I7QUFDdkMsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsSUFBSTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsU0FBUzs7QUFFVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7O0FBRVQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGFBQWE7O0FBRWI7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGtCQUFrQjtBQUNqQztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDLGtCQUFrQjs7QUFFMUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsT0FBTyxtREFBbUQsb0RBQW9EO0FBQzlIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixPQUFPO0FBQ3hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixPQUFPO0FBQ3hCLGtCQUFrQixnQkFBZ0I7QUFDbEMsa0JBQWtCLE9BQU87QUFDekIsa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsU0FBUztBQUN6QjtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIseUJBQXlCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0I7O0FBRXRCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxrQkFBa0I7QUFDakMsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLGtCQUFrQjtBQUNqQyxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsa0JBQWtCO0FBQ2pDLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQ0FBZ0MsVUFBVTs7QUFFMUM7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjs7QUFFQSx1Q0FBdUMsaUJBQWlCOztBQUV4RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DLGFBQWE7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGtCQUFrQjtBQUNqQztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLHFCQUFxQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsd0JBQXdCO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGtCQUFrQjtBQUNqQztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLHFCQUFxQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsd0JBQXdCO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIscUJBQXFCO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxpQkFBaUI7QUFDdEQsOENBQThDLDJCQUEyQjs7QUFFekU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTOztBQUVUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvZmJpbnN0YW50L3NyYy9GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBuby1jb25zb2xlOiAwICovXHJcblxyXG4vKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE4IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waG90b25zdG9ybS9waGFzZXIvYmxvYi9tYXN0ZXIvbGljZW5zZS50eHR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEFkSW5zdGFuY2UgPSByZXF1aXJlKCcuL0FkSW5zdGFuY2UnKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vLi4vc3JjL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBEYXRhTWFuYWdlciA9IHJlcXVpcmUoJy4uLy4uLy4uL3NyYy9kYXRhL0RhdGFNYW5hZ2VyJyk7XHJcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XHJcbnZhciBMZWFkZXJib2FyZCA9IHJlcXVpcmUoJy4vTGVhZGVyYm9hcmQnKTtcclxudmFyIFByb2R1Y3QgPSByZXF1aXJlKCcuL1Byb2R1Y3QnKTtcclxudmFyIFB1cmNoYXNlID0gcmVxdWlyZSgnLi9QdXJjaGFzZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luIGZvciBQaGFzZXIgMyBwcm92aWRlcyBhIHNlYW1sZXNzIGJyaWRnZSBiZXR3ZWVuIFBoYXNlclxyXG4gKiBhbmQgdGhlIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgQVBJIHZlcnNpb24gNi4yLlxyXG4gKiBcclxuICogWW91IGNhbiBhY2Nlc3MgdGhpcyBwbHVnaW4gdmlhIHRoZSBgZmFjZWJvb2tgIHByb3BlcnR5IGluIGEgU2NlbmUsIGkuZTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5mYWNlYm9vay5nZXRQbGF0Zm9ybSgpO1xyXG4gKiBgYGBcclxuICogXHJcbiAqIElmIHRoaXMgaXMgdW5hdmFpbGFibGUgcGxlYXNlIGNoZWNrIHRvIG1ha2Ugc3VyZSB5b3UncmUgdXNpbmcgYSBidWlsZCBvZiBQaGFzZXIgdGhhdCBoYXNcclxuICogdGhpcyBwbHVnaW4gd2l0aGluIGl0LiBZb3UgY2FuIHF1aWNrbHkgY2hlY2sgdGhpcyBieSBsb29raW5nIGF0IHRoZSBkZXYgdG9vbHMgY29uc29sZVxyXG4gKiBoZWFkZXIgLSB0aGUgUGhhc2VyIHZlcnNpb24gbnVtYmVyIHdpbGwgaGF2ZSBgLUZCYCBhZnRlciBpdCBpZiB0aGlzIHBsdWdpbiBpcyBsb2FkZWQuXHJcbiAqXHJcbiAqIElmIHlvdSBhcmUgYnVpbGRpbmcgeW91ciBvd24gdmVyc2lvbiBvZiBQaGFzZXIgdGhlbiB1c2UgdGhpcyBXZWJwYWNrIERlZmluZVBsdWdpbiBmbGFnOlxyXG4gKiBcclxuICogYFwidHlwZW9mIFBMVUdJTl9GQklOU1RBTlRcIjogSlNPTi5zdHJpbmdpZnkodHJ1ZSlgXHJcbiAqIFxyXG4gKiBZb3Ugd2lsbCBmaW5kIHRoYXQgZXZlcnkgSW5zdGFudCBHYW1lcyBBUEkgbWV0aG9kIGhhcyBhIG1hcHBpbmcgaW4gdGhpcyBwbHVnaW4uXHJcbiAqIEZvciBhIGZ1bGwgbGlzdCBwbGVhc2UgY29uc3VsdCBlaXRoZXIgdGhlIHBsdWdpbiBkb2N1bWVudGF0aW9uLCBvciB0aGUgNi4yIFNESyBkb2N1bWVudGF0aW9uXHJcbiAqIGF0IGh0dHBzOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vZG9jcy9nYW1lcy9pbnN0YW50LWdhbWVzL3Nkay9mYmluc3RhbnQ2LjJcclxuICogXHJcbiAqIEludGVybmFsbHkgdGhpcyBwbHVnaW4gdXNlcyBpdHMgb3duIERhdGEgTWFuYWdlciB0byBoYW5kbGUgc2VhbWxlc3MgdXNlciBkYXRhIHVwZGF0ZXMgYW5kIHByb3ZpZGVzXHJcbiAqIGhhbmR5IGZ1bmN0aW9ucyBmb3IgYWR2ZXJ0aXNlbWVudCBkaXNwbGF5aW5nLCBvcGVuaW5nIHNoYXJlIGRpYWxvZ3MsIGxvZ2dpbmcsIGxlYWRlcmJvYXJkcywgcHVyY2hhc2UgQVBJIHJlcXVlc3RzLFxyXG4gKiBsb2FkZXIgaW50ZWdyYXRpb24gYW5kIG1vcmUuXHJcbiAqIFxyXG4gKiBUbyBnZXQgc3RhcnRlZCB3aXRoIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgeW91IHdpbGwgbmVlZCB0byByZWdpc3RlciBvbiBGYWNlYm9vayBhbmQgY3JlYXRlIGEgbmV3IEluc3RhbnRcclxuICogR2FtZSBhcHAgdGhhdCBoYXMgaXRzIG93biB1bmlxdWUgYXBwIElELiBGYWNlYm9vayBoYXZlIGFsc28gcHJvdmlkZWQgYSBkYXNoYm9hcmQgaW50ZXJmYWNlIGZvciBzZXR0aW5nIHVwXHJcbiAqIHZhcmlvdXMgZmVhdHVyZXMgZm9yIHlvdXIgZ2FtZSwgaW5jbHVkaW5nIGxlYWRlcmJvYXJkcywgYWQgcmVxdWVzdHMgYW5kIHRoZSBwYXltZW50cyBBUEkuIFRoZXJlIGFyZSBsb3RzXHJcbiAqIG9mIGd1aWRlcyBvbiB0aGUgRmFjZWJvb2sgRGV2ZWxvcGVycyBwb3J0YWwgdG8gYXNzaXN0IHdpdGggc2V0dGluZyB0aGVzZVxyXG4gKiB2YXJpb3VzIHN5c3RlbXMgdXA6IGh0dHBzOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vZG9jcy9nYW1lcy9pbnN0YW50LWdhbWVzL2d1aWRlc1xyXG4gKiBcclxuICogRm9yIG1vcmUgZGV0YWlscyBmb2xsb3cgdGhlIFF1aWNrIFN0YXJ0IGd1aWRlIGhlcmU6IGh0dHBzOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vZG9jcy9nYW1lcy9pbnN0YW50LWdhbWVzXHJcbiAqXHJcbiAqIEBjbGFzcyBGYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpblxyXG4gKiBAbWVtYmVyT2YgUGhhc2VyXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlclxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWV9IGdhbWUgLSBBIHJlZmVyZW5jZSB0byB0aGUgUGhhc2VyLkdhbWUgaW5zdGFuY2UuXHJcbiAqL1xyXG52YXIgRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4gPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEV2ZW50RW1pdHRlcixcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luIChnYW1lKVxyXG4gICAge1xyXG4gICAgICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgUGhhc2VyLkdhbWUgaW5zdGFuY2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jZ2FtZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZX1cclxuICAgICAgICAgKiBAcmVhZE9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nYW1lID0gZ2FtZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBEYXRhIE1hbmFnZXIgaW5zdGFuY2UuXHJcbiAgICAgICAgICogSXQgYWxsb3dzIHlvdSB0byBzdG9yZSwgcXVlcnkgYW5kIHJldHJpZXZlIGFueSBrZXkvdmFsdWUgZGF0YSB5b3UgbWF5IG5lZWQgdG8gc3RvcmUuXHJcbiAgICAgICAgICogSXQncyBhbHNvIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgcGx1Z2luIHRvIHN0b3JlIEZCSUcgQVBJIGRhdGEuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jZGF0YVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuRGF0YS5EYXRhTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kYXRhID0gbmV3IERhdGFNYW5hZ2VyKHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLm9uKCdzZXRkYXRhJywgdGhpcy5zZXREYXRhSGFuZGxlciwgdGhpcyk7XHJcbiAgICAgICAgdGhpcy5vbignY2hhbmdlZGF0YScsIHRoaXMuY2hhbmdlRGF0YUhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBIYXMgdGhlIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgQVBJIGxvYWRlZCB5ZXQ/XHJcbiAgICAgICAgICogVGhpcyBpcyBzZXQgYXV0b21hdGljYWxseSBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNoYXNMb2FkZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5oYXNMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXMgdGhlIERhdGEgTWFuYWdlciBjdXJyZW50bHkgbG9ja2VkP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2RhdGFMb2NrZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kYXRhTG9ja2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgbGlzdCBvZiB0aGUgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBBUElzIHRoYXQgYXJlIGF2YWlsYWJsZSxcclxuICAgICAgICAgKiBiYXNlZCBvbiB0aGUgZ2l2ZW4gcGxhdGZvcm0sIGNvbnRleHQgYW5kIHVzZXIgcHJpdmFjeSBzZXR0aW5ncy5cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIHBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBib290LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI3N1cHBvcnRlZEFQSXNcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nW119XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3VwcG9ydGVkQVBJcyA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBIb2xkcyB0aGUgZW50cnkgcG9pbnQgdGhhdCB0aGUgZ2FtZSB3YXMgbGF1bmNoZWQgZnJvbS5cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIHBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBib290LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2VudHJ5UG9pbnRcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmVudHJ5UG9pbnQgPSAnJztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYW55IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBlbnRyeSBwb2ludCB0aGF0IHRoZSBnYW1lIHdhcyBsYXVuY2hlZCBmcm9tLlxyXG4gICAgICAgICAqIFRoZSBjb250ZW50cyBvZiB0aGUgb2JqZWN0IGFyZSBkZXZlbG9wZXItZGVmaW5lZCwgYW5kIGNhbiBvY2N1ciBmcm9tIGVudHJ5IHBvaW50cyBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zLlxyXG4gICAgICAgICAqIFRoaXMgd2lsbCByZXR1cm4gbnVsbCBmb3Igb2xkZXIgbW9iaWxlIGNsaWVudHMsIGFzIHdlbGwgYXMgd2hlbiB0aGVyZSBpcyBubyBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFydGljdWxhciBlbnRyeSBwb2ludC5cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIHBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBib290LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2VudHJ5UG9pbnREYXRhXHJcbiAgICAgICAgICogQHR5cGUge2FueX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5lbnRyeVBvaW50RGF0YSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjdXJyZW50IGdhbWUgY29udGV4dC4gVGhpcyByZXByZXNlbnRzIGEgc3BlY2lmaWMgY29udGV4dFxyXG4gICAgICAgICAqIHRoYXQgdGhlIGdhbWUgaXMgYmVpbmcgcGxheWVkIGluIChmb3IgZXhhbXBsZSwgYSBwYXJ0aWN1bGFyIG1lc3NlbmdlciBjb252ZXJzYXRpb24gb3IgZmFjZWJvb2sgcG9zdCkuXHJcbiAgICAgICAgICogVGhlIGlkZW50aWZpZXIgd2lsbCBiZSBudWxsIGlmIGdhbWUgaXMgYmVpbmcgcGxheWVkIGluIGEgc29sbyBjb250ZXh0LlxyXG4gICAgICAgICAqIFRoaXMgdmFsdWUgaXMgcG9wdWxhdGVkIGF1dG9tYXRpY2FsbHkgZHVyaW5nIGJvb3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jY29udGV4dElEXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb250ZXh0SUQgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY3VycmVudCBjb250ZXh0IGluIHdoaWNoIHlvdXIgZ2FtZSBpcyBydW5uaW5nLiBUaGlzIGNhbiBiZSBlaXRoZXIgYG51bGxgIG9yXHJcbiAgICAgICAgICogb25lIG9mOlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIGBQT1NUYCAtIFRoZSBnYW1lIGlzIHJ1bm5pbmcgaW5zaWRlIG9mIGEgRmFjZWJvb2sgcG9zdC5cclxuICAgICAgICAgKiBgVEhSRUFEYCAtIFRoZSBnYW1lIGlzIHJ1bm5pbmcgaW5zaWRlIGEgRmFjZWJvb2sgTWVzc2VuZ2VyIHRocmVhZC5cclxuICAgICAgICAgKiBgR1JPVVBgIC0gVGhlIGdhbWUgaXMgcnVubmluZyBpbnNpZGUgYSBGYWNlYm9vayBHcm91cC5cclxuICAgICAgICAgKiBgU09MT2AgLSBUaGlzIGlzIHRoZSBkZWZhdWx0IGNvbnRleHQsIHRoZSBwbGF5ZXIgaXMgdGhlIG9ubHkgcGFydGljaXBhbnQuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVGhpcyB2YWx1ZSBpcyBwb3B1bGF0ZWQgYXV0b21hdGljYWxseSBkdXJpbmcgYm9vdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNjb250ZXh0VHlwZVxyXG4gICAgICAgICAqIEB0eXBlIHs/c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbnRleHRUeXBlID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGN1cnJlbnQgbG9jYWxlLlxyXG4gICAgICAgICAqIFNlZSBodHRwczovL29yaWdpbmNhY2hlLmZhY2Vib29rLmNvbS9kZXZlbG9wZXJzL3Jlc291cmNlcy8/aWQ9RmFjZWJvb2tMb2NhbGVzLnhtbCBmb3IgYSBjb21wbGV0ZSBsaXN0IG9mIHN1cHBvcnRlZCBsb2NhbGUgdmFsdWVzLlxyXG4gICAgICAgICAqIFVzZSB0aGlzIHRvIGRldGVybWluZSB3aGF0IGxhbmd1YWdlcyB0aGUgY3VycmVudCBnYW1lIHNob3VsZCBiZSBsb2NhbGl6ZWQgd2l0aC5cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIHBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBib290LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2xvY2FsZVxyXG4gICAgICAgICAqIEB0eXBlIHs/c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxvY2FsZSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBwbGF0Zm9ybSBvbiB3aGljaCB0aGUgZ2FtZSBpcyBjdXJyZW50bHkgcnVubmluZywgaS5lLiBgSU9TYC5cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIHBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBib290LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI3BsYXRmb3JtXHJcbiAgICAgICAgICogQHR5cGUgez9zdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGxhdGZvcm0gPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBGYWNlYm9vayBJbnN0YW50IEdhbWVzIFNESyB2ZXJzaW9uIGJlaW5nIHVzZWQuXHJcbiAgICAgICAgICogVGhpcyB2YWx1ZSBpcyBwb3B1bGF0ZWQgYXV0b21hdGljYWxseSBkdXJpbmcgYm9vdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiN2ZXJzaW9uXHJcbiAgICAgICAgICogQHR5cGUgez9zdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudmVyc2lvbiA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEhvbGRzIHRoZSBpZCBvZiB0aGUgcGxheWVyLiBUaGlzIGlzIGEgc3RyaW5nIGJhc2VkIElELCB0aGUgc2FtZSBhcyBgRkJJbnN0YW50LnBsYXllci5nZXRJRCgpYC5cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIHBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBib290IGlmIHRoZSBBUEkgaXMgc3VwcG9ydGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI3BsYXllcklEXHJcbiAgICAgICAgICogQHR5cGUgez9zdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGxheWVySUQgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcGxheWVyJ3MgbG9jYWxpemVkIGRpc3BsYXkgbmFtZS5cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIHBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBib290IGlmIHRoZSBBUEkgaXMgc3VwcG9ydGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI3BsYXllck5hbWVcclxuICAgICAgICAgKiBAdHlwZSB7P3N0cmluZ31cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wbGF5ZXJOYW1lID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSB1cmwgdG8gdGhlIHBsYXllcidzIHB1YmxpYyBwcm9maWxlIHBob3RvLiBUaGUgcGhvdG8gd2lsbCBhbHdheXMgYmUgYSBzcXVhcmUsIGFuZCB3aXRoIGRpbWVuc2lvbnNcclxuICAgICAgICAgKiBvZiBhdCBsZWFzdCAyMDB4MjAwLiBXaGVuIHJlbmRlcmluZyBpdCBpbiB0aGUgZ2FtZSwgdGhlIGV4YWN0IGRpbWVuc2lvbnMgc2hvdWxkIG5ldmVyIGJlIGFzc3VtZWQgdG8gYmUgY29uc3RhbnQuXHJcbiAgICAgICAgICogSXQncyByZWNvbW1lbmRlZCB0byBhbHdheXMgc2NhbGUgdGhlIGltYWdlIHRvIGEgZGVzaXJlZCBzaXplIGJlZm9yZSByZW5kZXJpbmcuXHJcbiAgICAgICAgICogVGhpcyB2YWx1ZSBpcyBwb3B1bGF0ZWQgYXV0b21hdGljYWxseSBkdXJpbmcgYm9vdCBpZiB0aGUgQVBJIGlzIHN1cHBvcnRlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNwbGF5ZXJQaG90b1VSTFxyXG4gICAgICAgICAqIEB0eXBlIHs/c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBsYXllclBob3RvVVJMID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciBhIHBsYXllciBjYW4gc3Vic2NyaWJlIHRvIHRoZSBnYW1lIGJvdCBvciBub3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jcGxheWVyQ2FuU3Vic2NyaWJlQm90XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGxheWVyQ2FuU3Vic2NyaWJlQm90ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERvZXMgdGhlIGN1cnJlbnQgcGxhdGZvcm0gYW5kIGNvbnRleHQgYWxsb3cgZm9yIHVzZSBvZiB0aGUgcGF5bWVudHMgQVBJP1xyXG4gICAgICAgICAqIEN1cnJlbnRseSB0aGlzIGlzIG9ubHkgYXZhaWxhYmxlIG9uIEZhY2Vib29rLmNvbSBhbmQgQW5kcm9pZCA2Ky5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNwYXltZW50c1JlYWR5XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGF5bWVudHNSZWFkeSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc2V0IG9mIHByb2R1Y3RzIHRoYXQgYXJlIHJlZ2lzdGVyZWQgdG8gdGhlIGdhbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jY2F0YWxvZ1xyXG4gICAgICAgICAqIEB0eXBlIHtQcm9kdWN0W119XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2F0YWxvZyA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb250YWlucyBhbGwgb2YgdGhlIHBsYXllcidzIHVuY29uc3VtZWQgcHVyY2hhc2VzLlxyXG4gICAgICAgICAqIFRoZSBnYW1lIG11c3QgZmV0Y2ggdGhlIGN1cnJlbnQgcGxheWVyJ3MgcHVyY2hhc2VzIGFzIHNvb24gYXMgdGhlIGNsaWVudCBpbmRpY2F0ZXMgdGhhdCBpdCBpcyByZWFkeSB0byBwZXJmb3JtIHBheW1lbnRzLXJlbGF0ZWQgb3BlcmF0aW9ucyxcclxuICAgICAgICAgKiBpLmUuIGF0IGdhbWUgc3RhcnQuIFRoZSBnYW1lIGNhbiB0aGVuIHByb2Nlc3MgYW5kIGNvbnN1bWUgYW55IHB1cmNoYXNlcyB0aGF0IGFyZSB3YWl0aW5nIHRvIGJlIGNvbnN1bWVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI3B1cmNoYXNlc1xyXG4gICAgICAgICAqIEB0eXBlIHtQdXJjaGFzZVtdfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnB1cmNoYXNlcyA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb250YWlucyBhbGwgb2YgdGhlIGxlYWRlcmJvYXJkIGRhdGEsIGFzIHBvcHVsYXRlZCBieSB0aGUgYGdldExlYWRlcmJvYXJkKClgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNsZWFkZXJib2FyZHNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzTGVhZGVyYm9hcmRbXX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sZWFkZXJib2FyZHMgPSB7fTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ29udGFpbnMgQWRJbnN0YW5jZSBvYmplY3RzLCBhcyBjcmVhdGVkIGJ5IHRoZSBgcHJlbG9hZEFkcygpYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jYWRzXHJcbiAgICAgICAgICogQHR5cGUge0FkSW5zdGFuY2VbXX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hZHMgPSBbXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBzZXQgZGF0YSBoYW5kbGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI3NldERhdGFIYW5kbGVyXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkRhdGEuRGF0YU1hbmFnZXJ9IHBhcmVudCAtIFRoZSBwYXJlbnQgRGF0YSBNYW5hZ2VyIGluc3RhbmNlLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGRhdGEuXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIGRhdGEuXHJcbiAgICAgKi9cclxuICAgIHNldERhdGFIYW5kbGVyOiBmdW5jdGlvbiAocGFyZW50LCBrZXksIHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGFMb2NrZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGF0YSA9IHt9O1xyXG5cclxuICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgRkJJbnN0YW50LnBsYXllci5zZXREYXRhQXN5bmMoZGF0YSkudGhlbihmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgnc2F2ZWRhdGEnLCBkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBjaGFuZ2UgZGF0YSBoYW5kbGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2NoYW5nZURhdGFIYW5kbGVyXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkRhdGEuRGF0YU1hbmFnZXJ9IHBhcmVudCAtIFRoZSBwYXJlbnQgRGF0YSBNYW5hZ2VyIGluc3RhbmNlLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGRhdGEuXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIGRhdGEuXHJcbiAgICAgKi9cclxuICAgIGNoYW5nZURhdGFIYW5kbGVyOiBmdW5jdGlvbiAocGFyZW50LCBrZXksIHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGFMb2NrZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGF0YSA9IHt9O1xyXG5cclxuICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgRkJJbnN0YW50LnBsYXllci5zZXREYXRhQXN5bmMoZGF0YSkudGhlbihmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgnc2F2ZWRhdGEnLCBkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsIHRoaXMgbWV0aG9kIGZyb20geW91ciBgU2NlbmUucHJlbG9hZGAgaW4gb3JkZXIgdG8gc3luYyB0aGUgbG9hZCBwcm9ncmVzc1xyXG4gICAgICogb2YgdGhlIFBoYXNlciBMb2FkZXIgd2l0aCB0aGUgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBsb2FkZXIgZGlzcGxheSwgaS5lLjpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy5mYWNlYm9vay5zaG93TG9hZFByb2dyZXNzKHRoaXMpO1xyXG4gICAgICogdGhpcy5mYWNlYm9vay5vbmNlKCdzdGFydGdhbWUnLCB0aGlzLnN0YXJ0R2FtZSwgdGhpcyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNzaG93TG9hZFByb2dyZXNzXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIGZvciB3aGljaCB5b3Ugd2FudCB0byBzaG93IGxvYWRlciBwcm9ncmVzcyBmb3IuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNob3dMb2FkUHJvZ3Jlc3M6IGZ1bmN0aW9uIChzY2VuZSlcclxuICAgIHtcclxuICAgICAgICBzY2VuZS5sb2FkLm9uKCdwcm9ncmVzcycsIGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5oYXNMb2FkZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIEZCSW5zdGFudC5zZXRMb2FkaW5nUHJvZ3Jlc3ModmFsdWUgKiAxMDApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG5cclxuICAgICAgICBzY2VuZS5sb2FkLm9uKCdjb21wbGV0ZScsIGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzTG9hZGVkKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgRkJJbnN0YW50LnN0YXJ0R2FtZUFzeW5jKCkudGhlbih0aGlzLmdhbWVTdGFydGVkSGFuZGxlci5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9LCB0aGlzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgZ2FtZSBoYXMgZmluaXNoZWQgbG9hZGluZyxcclxuICAgICAqIGlmIHlvdSB1c2VkIHRoZSBgc2hvd0xvYWRQcm9ncmVzc2AgbWV0aG9kLiBJZiB5b3VyIGdhbWUgZG9lc24ndCBuZWVkIHRvXHJcbiAgICAgKiBsb2FkIGFueSBhc3NldHMsIG9yIHlvdSdyZSBtYW5hZ2luZyB0aGUgbG9hZCB5b3Vyc2VsZiwgdGhlbiBjYWxsIHRoaXNcclxuICAgICAqIG1ldGhvZCBkaXJlY3RseSB0byBzdGFydCB0aGUgQVBJIHJ1bm5pbmcuXHJcbiAgICAgKiBcclxuICAgICAqIFdoZW4gdGhlIEFQSSBoYXMgZmluaXNoZWQgc3RhcnRpbmcgdGhpcyBwbHVnaW4gd2lsbCBlbWl0IGEgYHN0YXJ0Z2FtZWAgZXZlbnRcclxuICAgICAqIHdoaWNoIHlvdSBzaG91bGQgbGlzdGVuIGZvci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNnYW1lU3RhcnRlZFxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICovXHJcbiAgICBnYW1lU3RhcnRlZDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzTG9hZGVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgRkJJbnN0YW50LnN0YXJ0R2FtZUFzeW5jKCkudGhlbih0aGlzLmdhbWVTdGFydGVkSGFuZGxlci5iaW5kKHRoaXMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5nYW1lU3RhcnRlZEhhbmRsZXIoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGludGVybmFsIGdhbWVTdGFydGVkIGhhbmRsZXIuXHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2dhbWVTdGFydGVkSGFuZGxlclxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqL1xyXG4gICAgZ2FtZVN0YXJ0ZWRIYW5kbGVyOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBBUElzID0gRkJJbnN0YW50LmdldFN1cHBvcnRlZEFQSXMoKTtcclxuXHJcbiAgICAgICAgdmFyIHN1cHBvcnRlZCA9IHt9O1xyXG5cclxuICAgICAgICB2YXIgZG90VG9VcHBlciA9IGZ1bmN0aW9uIChtYXRjaClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBtYXRjaFsxXS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIEFQSXMuZm9yRWFjaChmdW5jdGlvbiAoYXBpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYXBpID0gYXBpLnJlcGxhY2UoL1xcLi4vZywgZG90VG9VcHBlcik7XHJcblxyXG4gICAgICAgICAgICBzdXBwb3J0ZWRbYXBpXSA9IHRydWU7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3VwcG9ydGVkQVBJcyA9IHN1cHBvcnRlZDtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRJRCgpO1xyXG4gICAgICAgIHRoaXMuZ2V0VHlwZSgpO1xyXG4gICAgICAgIHRoaXMuZ2V0TG9jYWxlKCk7XHJcbiAgICAgICAgdGhpcy5nZXRQbGF0Zm9ybSgpO1xyXG4gICAgICAgIHRoaXMuZ2V0U0RLVmVyc2lvbigpO1xyXG5cclxuICAgICAgICB0aGlzLmdldFBsYXllcklEKCk7XHJcbiAgICAgICAgdGhpcy5nZXRQbGF5ZXJOYW1lKCk7XHJcbiAgICAgICAgdGhpcy5nZXRQbGF5ZXJQaG90b1VSTCgpO1xyXG5cclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICBGQkluc3RhbnQub25QYXVzZShmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgncGF1c2UnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgRkJJbnN0YW50LmdldEVudHJ5UG9pbnRBc3luYygpLnRoZW4oZnVuY3Rpb24gKGVudHJ5cG9pbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbnRyeVBvaW50ID0gZW50cnlwb2ludDtcclxuICAgICAgICAgICAgX3RoaXMuZW50cnlQb2ludERhdGEgPSBGQkluc3RhbnQuZ2V0RW50cnlQb2ludERhdGEoKTtcclxuXHJcbiAgICAgICAgICAgIF90aGlzLmVtaXQoJ3N0YXJ0Z2FtZScpO1xyXG5cclxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gIEZhY2Vib29rLmNvbSBhbmQgQW5kcm9pZCA2IG9ubHlcclxuICAgICAgICBpZiAodGhpcy5zdXBwb3J0ZWRBUElzLnBheW1lbnRzUHVyY2hhc2VBc3luYylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIEZCSW5zdGFudC5wYXltZW50cy5vblJlYWR5KGZ1bmN0aW9uICgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLnBheW1lbnRzUmVhZHkgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB0byBzZWUgaWYgYSBnaXZlbiBGYWNlYm9vayBJbnN0YW50IEdhbWVzIEFQSSBpcyBhdmFpbGFibGUgb3Igbm90LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2NoZWNrQVBJXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhcGkgLSBUaGUgQVBJIHRvIGNoZWNrIGZvciwgaS5lLiBgcGxheWVyLmdldElEYC5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBBUEkgaXMgc3VwcG9ydGVkLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgY2hlY2tBUEk6IGZ1bmN0aW9uIChhcGkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN1cHBvcnRlZEFQSXNbYXBpXSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY3VycmVudCBnYW1lIGNvbnRleHQuIFRoaXMgcmVwcmVzZW50cyBhIHNwZWNpZmljIGNvbnRleHRcclxuICAgICAqIHRoYXQgdGhlIGdhbWUgaXMgYmVpbmcgcGxheWVkIGluIChmb3IgZXhhbXBsZSwgYSBwYXJ0aWN1bGFyIG1lc3NlbmdlciBjb252ZXJzYXRpb24gb3IgZmFjZWJvb2sgcG9zdCkuXHJcbiAgICAgKiBUaGUgaWRlbnRpZmllciB3aWxsIGJlIG51bGwgaWYgZ2FtZSBpcyBiZWluZyBwbGF5ZWQgaW4gYSBzb2xvIGNvbnRleHQuXHJcbiAgICAgKiBcclxuICAgICAqIEl0IGlzIG9ubHkgcG9wdWxhdGVkIGlmIGBjb250ZXh0R2V0SURgIGlzIGluIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBBUElzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2dldElEXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNvbnRleHQgSUQuXHJcbiAgICAgKi9cclxuICAgIGdldElEOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5jb250ZXh0SUQgJiYgdGhpcy5zdXBwb3J0ZWRBUElzLmNvbnRleHRHZXRJRClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dElEID0gRkJJbnN0YW50LmNvbnRleHQuZ2V0SUQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHRJRDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGNvbnRleHQgaW4gd2hpY2ggeW91ciBnYW1lIGlzIHJ1bm5pbmcuIFRoaXMgY2FuIGJlIGVpdGhlciBgbnVsbGAgb3Igb25lIG9mOlxyXG4gICAgICogXHJcbiAgICAgKiBgUE9TVGAgLSBUaGUgZ2FtZSBpcyBydW5uaW5nIGluc2lkZSBvZiBhIEZhY2Vib29rIHBvc3QuXHJcbiAgICAgKiBgVEhSRUFEYCAtIFRoZSBnYW1lIGlzIHJ1bm5pbmcgaW5zaWRlIGEgRmFjZWJvb2sgTWVzc2VuZ2VyIHRocmVhZC5cclxuICAgICAqIGBHUk9VUGAgLSBUaGUgZ2FtZSBpcyBydW5uaW5nIGluc2lkZSBhIEZhY2Vib29rIEdyb3VwLlxyXG4gICAgICogYFNPTE9gIC0gVGhpcyBpcyB0aGUgZGVmYXVsdCBjb250ZXh0LCB0aGUgcGxheWVyIGlzIHRoZSBvbmx5IHBhcnRpY2lwYW50LlxyXG4gICAgICogXHJcbiAgICAgKiBJdCBpcyBvbmx5IHBvcHVsYXRlZCBpZiBgY29udGV4dEdldFR5cGVgIGlzIGluIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBBUElzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2dldFR5cGVcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7P3N0cmluZ30gVGhlIGNvbnRleHQgdHlwZS5cclxuICAgICAqL1xyXG4gICAgZ2V0VHlwZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29udGV4dFR5cGUgJiYgdGhpcy5zdXBwb3J0ZWRBUElzLmNvbnRleHRHZXRUeXBlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0VHlwZSA9IEZCSW5zdGFudC5jb250ZXh0LmdldFR5cGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHRUeXBlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgbG9jYWxlLlxyXG4gICAgICogU2VlIGh0dHBzOi8vb3JpZ2luY2FjaGUuZmFjZWJvb2suY29tL2RldmVsb3BlcnMvcmVzb3VyY2VzLz9pZD1GYWNlYm9va0xvY2FsZXMueG1sIGZvciBhIGNvbXBsZXRlIGxpc3Qgb2Ygc3VwcG9ydGVkIGxvY2FsZSB2YWx1ZXMuXHJcbiAgICAgKiBVc2UgdGhpcyB0byBkZXRlcm1pbmUgd2hhdCBsYW5ndWFnZXMgdGhlIGN1cnJlbnQgZ2FtZSBzaG91bGQgYmUgbG9jYWxpemVkIHdpdGguXHJcbiAgICAgKiBJdCBpcyBvbmx5IHBvcHVsYXRlZCBpZiBgZ2V0TG9jYWxlYCBpcyBpbiB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgQVBJcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNnZXRMb2NhbGVcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7P3N0cmluZ30gVGhlIGN1cnJlbnQgbG9jYWxlLlxyXG4gICAgICovXHJcbiAgICBnZXRMb2NhbGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmxvY2FsZSAmJiB0aGlzLnN1cHBvcnRlZEFQSXMuZ2V0TG9jYWxlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5sb2NhbGUgPSBGQkluc3RhbnQuZ2V0TG9jYWxlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgcGxhdGZvcm0gb24gd2hpY2ggdGhlIGdhbWUgaXMgY3VycmVudGx5IHJ1bm5pbmcsIGkuZS4gYElPU2AuXHJcbiAgICAgKiBJdCBpcyBvbmx5IHBvcHVsYXRlZCBpZiBgZ2V0UGxhdGZvcm1gIGlzIGluIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBBUElzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2dldFBsYXRmb3JtXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4gez9zdHJpbmd9IFRoZSBjdXJyZW50IHBsYXRmb3JtLlxyXG4gICAgICovXHJcbiAgICBnZXRQbGF0Zm9ybTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMucGxhdGZvcm0gJiYgdGhpcy5zdXBwb3J0ZWRBUElzLmdldFBsYXRmb3JtKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wbGF0Zm9ybSA9IEZCSW5zdGFudC5nZXRQbGF0Zm9ybSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGxhdGZvcm07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBGYWNlYm9vayBJbnN0YW50IEdhbWVzIFNESyB2ZXJzaW9uIGJlaW5nIHVzZWQuXHJcbiAgICAgKiBJdCBpcyBvbmx5IHBvcHVsYXRlZCBpZiBgZ2V0U0RLVmVyc2lvbmAgaXMgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIEFQSXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jZ2V0U0RLVmVyc2lvblxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHs/c3RyaW5nfSBUaGUgc2RrIHZlcnNpb24uXHJcbiAgICAgKi9cclxuICAgIGdldFNES1ZlcnNpb246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZlcnNpb24gJiYgdGhpcy5zdXBwb3J0ZWRBUElzLmdldFNES1ZlcnNpb24pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnZlcnNpb24gPSBGQkluc3RhbnQuZ2V0U0RLVmVyc2lvbigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmVyc2lvbjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBpZCBvZiB0aGUgcGxheWVyLiBUaGlzIGlzIGEgc3RyaW5nIGJhc2VkIElELCB0aGUgc2FtZSBhcyBgRkJJbnN0YW50LnBsYXllci5nZXRJRCgpYC5cclxuICAgICAqIEl0IGlzIG9ubHkgcG9wdWxhdGVkIGlmIGBwbGF5ZXJHZXRJRGAgaXMgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIEFQSXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jZ2V0UGxheWVySURcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7P3N0cmluZ30gVGhlIHBsYXllciBJRC5cclxuICAgICAqL1xyXG4gICAgZ2V0UGxheWVySUQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBsYXllcklEICYmIHRoaXMuc3VwcG9ydGVkQVBJcy5wbGF5ZXJHZXRJRClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGxheWVySUQgPSBGQkluc3RhbnQucGxheWVyLmdldElEKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wbGF5ZXJJRDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBwbGF5ZXIncyBsb2NhbGl6ZWQgZGlzcGxheSBuYW1lLlxyXG4gICAgICogSXQgaXMgb25seSBwb3B1bGF0ZWQgaWYgYHBsYXllckdldE5hbWVgIGlzIGluIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBBUElzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2dldFBsYXllck5hbWVcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7P3N0cmluZ30gVGhlIHBsYXllcidzIGxvY2FsaXplZCBkaXNwbGF5IG5hbWUuXHJcbiAgICAgKi9cclxuICAgIGdldFBsYXllck5hbWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBsYXllck5hbWUgJiYgdGhpcy5zdXBwb3J0ZWRBUElzLnBsYXllckdldE5hbWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBsYXllck5hbWUgPSBGQkluc3RhbnQucGxheWVyLmdldE5hbWUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnBsYXllck5hbWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdXJsIHRvIHRoZSBwbGF5ZXIncyBwdWJsaWMgcHJvZmlsZSBwaG90by4gVGhlIHBob3RvIHdpbGwgYWx3YXlzIGJlIGEgc3F1YXJlLCBhbmQgd2l0aCBkaW1lbnNpb25zXHJcbiAgICAgKiBvZiBhdCBsZWFzdCAyMDB4MjAwLiBXaGVuIHJlbmRlcmluZyBpdCBpbiB0aGUgZ2FtZSwgdGhlIGV4YWN0IGRpbWVuc2lvbnMgc2hvdWxkIG5ldmVyIGJlIGFzc3VtZWQgdG8gYmUgY29uc3RhbnQuXHJcbiAgICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIGFsd2F5cyBzY2FsZSB0aGUgaW1hZ2UgdG8gYSBkZXNpcmVkIHNpemUgYmVmb3JlIHJlbmRlcmluZy5cclxuICAgICAqIEl0IGlzIG9ubHkgcG9wdWxhdGVkIGlmIGBwbGF5ZXJHZXRQaG90b2AgaXMgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIEFQSXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jZ2V0UGxheWVyUGhvdG9VUkxcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7P3N0cmluZ30gVGhlIHBsYXllcidzIHBob3RvIHVybC5cclxuICAgICAqL1xyXG4gICAgZ2V0UGxheWVyUGhvdG9VUkw6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBsYXllclBob3RvVVJMICYmIHRoaXMuc3VwcG9ydGVkQVBJcy5wbGF5ZXJHZXRQaG90bylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGxheWVyUGhvdG9VUkwgPSBGQkluc3RhbnQucGxheWVyLmdldFBob3RvKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wbGF5ZXJQaG90b1VSTDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2FkIHRoZSBwbGF5ZXIncyBwaG90byBhbmQgc3RvcmUgaXQgaW4gdGhlIFRleHR1cmUgTWFuYWdlciwgcmVhZHkgZm9yIHVzZSBpbi1nYW1lLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIG1ldGhvZCB3b3JrcyBieSB1c2luZyBhIFNjZW5lIExvYWRlciBpbnN0YW5jZSBhbmQgdGhlbiBhc2tpbmcgdGhlIExvYWRlciB0b1xyXG4gICAgICogcmV0cmlldmUgdGhlIGltYWdlLlxyXG4gICAgICogXHJcbiAgICAgKiBXaGVuIGNvbXBsZXRlIHRoZSBwbHVnaW4gd2lsbCBlbWl0IGEgYHBob3RvY29tcGxldGVgIGV2ZW50LCBhbG9uZyB3aXRoIHRoZSBrZXkgb2YgdGhlIHBob3RvLlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB0aGlzLmZhY2Vib29rLmxvYWRQbGF5ZXJQaG90byh0aGlzLCAncGxheWVyJykub25jZSgncGhvdG9jb21wbGV0ZScsIGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAqICAgdGhpcy5hZGQuaW1hZ2UoeCwgeSwgJ3BsYXllcicpO1xyXG4gICAgICogfSwgdGhpcyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNsb2FkUGxheWVyUGhvdG9cclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRoYXQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgbG9hZGluZyB0aGlzIHBob3RvLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgdG8gdXNlIHdoZW4gc3RvcmluZyB0aGUgcGhvdG8gaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBGYWNlYm9vayBJbnN0YW50IEdhbWVzIFBsdWdpbiBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgbG9hZFBsYXllclBob3RvOiBmdW5jdGlvbiAoc2NlbmUsIGtleSlcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5wbGF5ZXJQaG90b1VSTClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHNjZW5lLmxvYWQuc2V0Q09SUygnYW5vbnltb3VzJyk7XHJcbiAgICBcclxuICAgICAgICAgICAgc2NlbmUubG9hZC5pbWFnZShrZXksIHRoaXMucGxheWVyUGhvdG9VUkwpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHNjZW5lLmxvYWQub25jZSgnZmlsZWNvbXBsZXRlLWltYWdlLScgKyBrZXksIGZ1bmN0aW9uICgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgncGhvdG9jb21wbGV0ZScsIGtleSk7XHJcblxyXG4gICAgICAgICAgICB9LCB0aGlzKTtcclxuICAgIFxyXG4gICAgICAgICAgICBzY2VuZS5sb2FkLnN0YXJ0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgcGxheWVyIGNhbiBzdWJzY3JpYmUgdG8gdGhlIGdhbWUgYm90LlxyXG4gICAgICogXHJcbiAgICAgKiBJdCBtYWtlcyBhbiBhc3luYyBjYWxsIHRvIHRoZSBBUEksIHNvIHRoZSByZXN1bHQgaXNuJ3QgYXZhaWxhYmxlIGltbWVkaWF0ZWx5LlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGV5IGNhbiBzdWJzY3JpYmUsIHRoZSBgcGxheWVyQ2FuU3Vic2NyaWJlQm90YCBwcm9wZXJ0eSBpcyBzZXQgdG8gYHRydWVgXHJcbiAgICAgKiBhbmQgdGhpcyBwbHVnaW4gd2lsbCBlbWl0IHRoZSBgY2Fuc3Vic2NyaWJlYm90YCBldmVudC5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhleSBjYW5ub3QsIGkuZS4gaXQncyBub3QgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIEFQSXMsIG9yIHRoZSByZXF1ZXN0XHJcbiAgICAgKiB3YXMgcmVqZWN0ZWQsIGl0IHdpbGwgZW1pdCBhIGBjYW5zdWJzY3JpYmVib3RmYWlsYCBldmVudCBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2NhblN1YnNjcmliZUJvdFxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBjYW5TdWJzY3JpYmVCb3Q6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VwcG9ydGVkQVBJcy5wbGF5ZXJDYW5TdWJzY3JpYmVCb3RBc3luYylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICBGQkluc3RhbnQucGxheWVyLmNhblN1YnNjcmliZUJvdEFzeW5jKCkudGhlbihmdW5jdGlvbiAoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5wbGF5ZXJDYW5TdWJzY3JpYmVCb3QgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2NhbnN1YnNjcmliZWJvdCcpO1xyXG5cclxuICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2NhbnN1YnNjcmliZWJvdGZhaWwnLCBlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnY2Fuc3Vic2NyaWJlYm90ZmFpbCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3Vic2NyaWJlcyB0aGUgY3VycmVudCBwbGF5ZXIgdG8gdGhlIGdhbWUgYm90LlxyXG4gICAgICogXHJcbiAgICAgKiBJdCBtYWtlcyBhbiBhc3luYyBjYWxsIHRvIHRoZSBBUEksIHNvIHRoZSByZXN1bHQgaXNuJ3QgYXZhaWxhYmxlIGltbWVkaWF0ZWx5LlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGV5IGFyZSBzdWNjZXNzZnVsbHkgc3Vic2NyaWJlZCB0aGlzIHBsdWdpbiB3aWxsIGVtaXQgdGhlIGBzdWJzY3JpYmVib3RgIGV2ZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGV5IGNhbm5vdCwgaS5lLiBpdCdzIG5vdCBpbiB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgQVBJcywgb3IgdGhlIHJlcXVlc3RcclxuICAgICAqIHdhcyByZWplY3RlZCwgaXQgd2lsbCBlbWl0IGEgYHN1YnNjcmliZWJvdGZhaWxgIGV2ZW50IGluc3RlYWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jc3Vic2NyaWJlQm90XHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHN1YnNjcmliZUJvdDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5wbGF5ZXJDYW5TdWJzY3JpYmVCb3QpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgRkJJbnN0YW50LnBsYXllci5zdWJzY3JpYmVCb3RBc3luYygpLnRoZW4oZnVuY3Rpb24gKClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuZW1pdCgnc3Vic2NyaWJlYm90Jyk7XHJcblxyXG4gICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuZW1pdCgnc3Vic2NyaWJlYm90ZmFpbCcsIGUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KCdzdWJzY3JpYmVib3RmYWlsJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBhc3NvY2lhdGVkIGRhdGEgZnJvbSB0aGUgcGxheWVyIGJhc2VkIG9uIHRoZSBnaXZlbiBrZXksIG9yIGFycmF5IG9mIGtleXMuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBkYXRhIGlzIHJlcXVlc3RlZCBpbiBhbiBhc3luYyBjYWxsLCBzbyB0aGUgcmVzdWx0IGlzbid0IGF2YWlsYWJsZSBpbW1lZGlhdGVseS5cclxuICAgICAqIFxyXG4gICAgICogV2hlbiB0aGUgY2FsbCBjb21wbGV0ZXMgdGhlIGRhdGEgaXMgc2V0IGludG8gdGhpcyBwbHVnaW5zIERhdGEgTWFuYWdlciBhbmQgdGhlXHJcbiAgICAgKiBgZ2V0ZGF0YWAgZXZlbnQgd2lsbCBiZSBlbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2dldERhdGFcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfHN0cmluZ1tdKX0ga2V5cyAtIFRoZSBrZXkvcyBvZiB0aGUgZGF0YSB0byByZXRyaWV2ZS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBGYWNlYm9vayBJbnN0YW50IEdhbWVzIFBsdWdpbiBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgZ2V0RGF0YTogZnVuY3Rpb24gKGtleXMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrQVBJKCdwbGF5ZXJHZXREYXRhQXN5bmMnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGtleXMpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAga2V5cyA9IFsga2V5cyBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgRkJJbnN0YW50LnBsYXllci5nZXREYXRhQXN5bmMoa2V5cykudGhlbihmdW5jdGlvbiAoZGF0YSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLmRhdGFMb2NrZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGRhdGEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmRhdGEuc2V0KGtleSwgZGF0YVtrZXldKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgX3RoaXMuZGF0YUxvY2tlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgnZ2V0ZGF0YScsIGRhdGEpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZGF0YSB0byBiZSBzYXZlZCB0byB0aGUgZGVzaWduYXRlZCBjbG91ZCBzdG9yYWdlIG9mIHRoZSBjdXJyZW50IHBsYXllci4gVGhlIGdhbWUgY2FuIHN0b3JlIHVwIHRvIDFNQiBvZiBkYXRhIGZvciBlYWNoIHVuaXF1ZSBwbGF5ZXIuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBkYXRhIHNhdmUgaXMgcmVxdWVzdGVkIGluIGFuIGFzeW5jIGNhbGwsIHNvIHRoZSByZXN1bHQgaXNuJ3QgYXZhaWxhYmxlIGltbWVkaWF0ZWx5LlxyXG4gICAgICogXHJcbiAgICAgKiBEYXRhIG1hbmFnZWQgdmlhIHRoaXMgcGx1Z2lucyBEYXRhIE1hbmFnZXIgaW5zdGFuY2UgaXMgYXV0b21hdGljYWxseSBzeW5jZWQgd2l0aCBGYWNlYm9vay4gSG93ZXZlciwgeW91IGNhbiBjYWxsIHRoaXNcclxuICAgICAqIG1ldGhvZCBkaXJlY3RseSBpZiB5b3UgbmVlZCB0byByZXBsYWNlIHRoZSBkYXRhIG9iamVjdCBkaXJlY3RseS5cclxuICAgICAqIFxyXG4gICAgICogV2hlbiB0aGUgQVBJcyBgc2V0RGF0YUFzeW5jYCBjYWxsIHJlc29sdmVzIGl0IHdpbGwgZW1pdCB0aGUgYHNhdmVkYXRhYCBldmVudCBmcm9tIHRoaXMgcGx1Z2luLiBJZiB0aGUgY2FsbCBmYWlscyBmb3Igc29tZVxyXG4gICAgICogcmVhc29uIGl0IHdpbGwgZW1pdCBgc2F2ZWRhdGFmYWlsYCBpbnN0ZWFkLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgY2FsbCByZXNvbHZpbmcgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IHRoZSBpbnB1dCBoYXMgYWxyZWFkeSBiZWVuIHBlcnNpc3RlZC4gUmF0aGVyLCBpdCBtZWFucyB0aGF0IHRoZSBkYXRhIHdhcyB2YWxpZCBhbmRcclxuICAgICAqIGhhcyBiZWVuIHNjaGVkdWxlZCB0byBiZSBzYXZlZC4gSXQgYWxzbyBndWFyYW50ZWVzIHRoYXQgYWxsIHZhbHVlcyB0aGF0IHdlcmUgc2V0IGFyZSBub3cgYXZhaWxhYmxlIGluIGBnZXREYXRhYC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNzYXZlRGF0YVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGF0YSAtIEFuIG9iamVjdCBjb250YWluaW5nIGEgc2V0IG9mIGtleS12YWx1ZSBwYWlycyB0aGF0IHNob3VsZCBiZSBwZXJzaXN0ZWQgdG8gY2xvdWQgc3RvcmFnZS5cclxuICAgICAqIFRoZSBvYmplY3QgbXVzdCBjb250YWluIG9ubHkgc2VyaWFsaXphYmxlIHZhbHVlcyAtIGFueSBub24tc2VyaWFsaXphYmxlIHZhbHVlcyB3aWxsIGNhdXNlIHRoZSBlbnRpcmUgbW9kaWZpY2F0aW9uIHRvIGJlIHJlamVjdGVkLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzYXZlRGF0YTogZnVuY3Rpb24gKGRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrQVBJKCdwbGF5ZXJTZXREYXRhQXN5bmMnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgRkJJbnN0YW50LnBsYXllci5zZXREYXRhQXN5bmMoZGF0YSkudGhlbihmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgnc2F2ZWRhdGEnLCBkYXRhKTtcclxuXHJcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdzYXZlZGF0YWZhaWwnLCBlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW1tZWRpYXRlbHkgZmx1c2hlcyBhbnkgY2hhbmdlcyB0byB0aGUgcGxheWVyIGRhdGEgdG8gdGhlIGRlc2lnbmF0ZWQgY2xvdWQgc3RvcmFnZS5cclxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgZXhwZW5zaXZlLCBhbmQgc2hvdWxkIHByaW1hcmlseSBiZSB1c2VkIGZvciBjcml0aWNhbCBjaGFuZ2VzIHdoZXJlIHBlcnNpc3RlbmNlIG5lZWRzIHRvIGJlIGltbWVkaWF0ZVxyXG4gICAgICogYW5kIGtub3duIGJ5IHRoZSBnYW1lLiBOb24tY3JpdGljYWwgY2hhbmdlcyBzaG91bGQgcmVseSBvbiB0aGUgcGxhdGZvcm0gdG8gcGVyc2lzdCB0aGVtIGluIHRoZSBiYWNrZ3JvdW5kLlxyXG4gICAgICogTk9URTogQ2FsbHMgdG8gcGxheWVyLnNldERhdGFBc3luYyB3aWxsIGJlIHJlamVjdGVkIHdoaWxlIHRoaXMgZnVuY3Rpb24ncyByZXN1bHQgaXMgcGVuZGluZy5cclxuICAgICAqIFxyXG4gICAgICogRGF0YSBtYW5hZ2VkIHZpYSB0aGlzIHBsdWdpbnMgRGF0YSBNYW5hZ2VyIGluc3RhbmNlIGlzIGF1dG9tYXRpY2FsbHkgc3luY2VkIHdpdGggRmFjZWJvb2suIEhvd2V2ZXIsIHlvdSBjYW4gY2FsbCB0aGlzXHJcbiAgICAgKiBtZXRob2QgZGlyZWN0bHkgaWYgeW91IG5lZWQgdG8gZmx1c2ggdGhlIGRhdGEgZGlyZWN0bHkuXHJcbiAgICAgKiBcclxuICAgICAqIFdoZW4gdGhlIEFQSXMgYGZsdXNoRGF0YUFzeW5jYCBjYWxsIHJlc29sdmVzIGl0IHdpbGwgZW1pdCB0aGUgYGZsdXNoZGF0YWAgZXZlbnQgZnJvbSB0aGlzIHBsdWdpbi4gSWYgdGhlIGNhbGwgZmFpbHMgZm9yIHNvbWVcclxuICAgICAqIHJlYXNvbiBpdCB3aWxsIGVtaXQgYGZsdXNoZGF0YWZhaWxgIGluc3RlYWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jZmx1c2hEYXRhXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGZsdXNoRGF0YTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tBUEkoJ3BsYXllckZsdXNoRGF0YUFzeW5jJykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIEZCSW5zdGFudC5wbGF5ZXIuZmx1c2hEYXRhQXN5bmMoKS50aGVuKGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdmbHVzaGRhdGEnKTtcclxuXHJcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdmbHVzaGRhdGFmYWlsJywgZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlIHN0YXRzIGZyb20gdGhlIGRlc2lnbmF0ZWQgY2xvdWQgc3RvcmFnZSBvZiB0aGUgY3VycmVudCBwbGF5ZXIuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBkYXRhIGlzIHJlcXVlc3RlZCBpbiBhbiBhc3luYyBjYWxsLCBzbyB0aGUgcmVzdWx0IGlzbid0IGF2YWlsYWJsZSBpbW1lZGlhdGVseS5cclxuICAgICAqIFxyXG4gICAgICogV2hlbiB0aGUgY2FsbCBjb21wbGV0ZXMgdGhlIGBnZXRzdGF0c2AgZXZlbnQgd2lsbCBiZSBlbWl0dGVkIGFsb25nIHdpdGggdGhlIGRhdGEgb2JqZWN0IHJldHVybmVkLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgY2FsbCBmYWlscywgaS5lLiBpdCdzIG5vdCBpbiB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgQVBJcywgb3IgdGhlIHJlcXVlc3Qgd2FzIHJlamVjdGVkLFxyXG4gICAgICogaXQgd2lsbCBlbWl0IGEgYGdldHN0YXRzZmFpbGAgZXZlbnQgaW5zdGVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNnZXRTdGF0c1xyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBba2V5c10gLSBBbiBvcHRpb25hbCBhcnJheSBvZiB1bmlxdWUga2V5cyB0byByZXRyaWV2ZSBzdGF0cyBmb3IuIElmIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aG91dCBpdCwgaXQgd2lsbCBmZXRjaCBhbGwgc3RhdHMuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGdldFN0YXRzOiBmdW5jdGlvbiAoa2V5cylcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tBUEkoJ3BsYXllckdldFN0YXRzQXN5bmMnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgRkJJbnN0YW50LnBsYXllci5nZXRTdGF0c0FzeW5jKGtleXMpLnRoZW4oZnVuY3Rpb24gKGRhdGEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdnZXRzdGF0cycsIGRhdGEpO1xyXG5cclxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLmVtaXQoJ2dldHN0YXRzZmFpbCcsIGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTYXZlIHRoZSBzdGF0cyBvZiB0aGUgY3VycmVudCBwbGF5ZXIgdG8gdGhlIGRlc2lnbmF0ZWQgY2xvdWQgc3RvcmFnZS5cclxuICAgICAqIFxyXG4gICAgICogU3RhdHMgaW4gdGhlIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgQVBJIGFyZSBwdXJlbHkgbnVtZXJpY2FsIHZhbHVlcyBwYWlyZWQgd2l0aCBhIHN0cmluZy1iYXNlZCBrZXkuIE9ubHkgbnVtYmVycyBjYW4gYmUgc2F2ZWQgYXMgc3RhdHMsXHJcbiAgICAgKiBhbGwgb3RoZXIgZGF0YSB0eXBlcyB3aWxsIGJlIGlnbm9yZWQuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBkYXRhIGlzIHJlcXVlc3RlZCBpbiBhbiBhc3luYyBjYWxsLCBzbyB0aGUgcmVzdWx0IGlzbid0IGF2YWlsYWJsZSBpbW1lZGlhdGVseS5cclxuICAgICAqIFxyXG4gICAgICogV2hlbiB0aGUgY2FsbCBjb21wbGV0ZXMgdGhlIGBzYXZlc3RhdHNgIGV2ZW50IHdpbGwgYmUgZW1pdHRlZCBhbG9uZyB3aXRoIHRoZSBkYXRhIG9iamVjdCByZXR1cm5lZC5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIGNhbGwgZmFpbHMsIGkuZS4gaXQncyBub3QgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIEFQSXMsIG9yIHRoZSByZXF1ZXN0IHdhcyByZWplY3RlZCxcclxuICAgICAqIGl0IHdpbGwgZW1pdCBhIGBzYXZlc3RhdHNmYWlsYCBldmVudCBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI3NhdmVTdGF0c1xyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGF0YSAtIEFuIG9iamVjdCBjb250YWluaW5nIGEgc2V0IG9mIGtleS12YWx1ZSBwYWlycyB0aGF0IHNob3VsZCBiZSBwZXJzaXN0ZWQgdG8gY2xvdWQgc3RvcmFnZSBhcyBzdGF0cy4gTm90ZSB0aGF0IG9ubHkgbnVtZXJpY2FsIHZhbHVlcyBhcmUgc3RvcmVkLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzYXZlU3RhdHM6IGZ1bmN0aW9uIChkYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0FQSSgncGxheWVyU2V0U3RhdHNBc3luYycpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgb3V0cHV0ID0ge307XHJcblxyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2tleV0gPT09ICdudW1iZXInKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRba2V5XSA9IGRhdGFba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgRkJJbnN0YW50LnBsYXllci5zZXRTdGF0c0FzeW5jKG91dHB1dCkudGhlbihmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgnc2F2ZXN0YXRzJywgb3V0cHV0KTtcclxuXHJcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdzYXZlc3RhdHNmYWlsJywgZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluY3JlbWVudCB0aGUgc3RhdHMgb2YgdGhlIGN1cnJlbnQgcGxheWVyIGFuZCBzYXZlIHRoZW0gdG8gdGhlIGRlc2lnbmF0ZWQgY2xvdWQgc3RvcmFnZS5cclxuICAgICAqIFxyXG4gICAgICogU3RhdHMgaW4gdGhlIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgQVBJIGFyZSBwdXJlbHkgbnVtZXJpY2FsIHZhbHVlcyBwYWlyZWQgd2l0aCBhIHN0cmluZy1iYXNlZCBrZXkuIE9ubHkgbnVtYmVycyBjYW4gYmUgc2F2ZWQgYXMgc3RhdHMsXHJcbiAgICAgKiBhbGwgb3RoZXIgZGF0YSB0eXBlcyB3aWxsIGJlIGlnbm9yZWQuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBkYXRhIG9iamVjdCBwcm92aWRlZCBmb3IgdGhpcyBjYWxsIHNob3VsZCBjb250YWluIG9mZnNldHMgZm9yIGhvdyBtdWNoIHRvIG1vZGlmeSB0aGUgc3RhdHMgYnk6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMuZmFjZWJvb2suaW5jU3RhdHMoe1xyXG4gICAgICogICAgIGxldmVsOiAxLFxyXG4gICAgICogICAgIHpvbWJpZXNTbGFpbjogMTcsXHJcbiAgICAgKiAgICAgcmFuazogLTFcclxuICAgICAqIH0pO1xyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBkYXRhIGlzIHJlcXVlc3RlZCBpbiBhbiBhc3luYyBjYWxsLCBzbyB0aGUgcmVzdWx0IGlzbid0IGF2YWlsYWJsZSBpbW1lZGlhdGVseS5cclxuICAgICAqIFxyXG4gICAgICogV2hlbiB0aGUgY2FsbCBjb21wbGV0ZXMgdGhlIGBpbmNzdGF0c2AgZXZlbnQgd2lsbCBiZSBlbWl0dGVkIGFsb25nIHdpdGggdGhlIGRhdGEgb2JqZWN0IHJldHVybmVkLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgY2FsbCBmYWlscywgaS5lLiBpdCdzIG5vdCBpbiB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgQVBJcywgb3IgdGhlIHJlcXVlc3Qgd2FzIHJlamVjdGVkLFxyXG4gICAgICogaXQgd2lsbCBlbWl0IGEgYGluY3N0YXRzZmFpbGAgZXZlbnQgaW5zdGVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNpbmNTdGF0c1xyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGF0YSAtIEFuIG9iamVjdCBjb250YWluaW5nIGEgc2V0IG9mIGtleS12YWx1ZSBwYWlycyBpbmRpY2F0aW5nIGhvdyBtdWNoIHRvIGluY3JlbWVudCBlYWNoIHN0YXQgaW4gY2xvdWQgc3RvcmFnZS4gTm90ZSB0aGF0IG9ubHkgbnVtZXJpY2FsIHZhbHVlcyBhcmUgcHJvY2Vzc2VkLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBpbmNTdGF0czogZnVuY3Rpb24gKGRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrQVBJKCdwbGF5ZXJJbmNyZW1lbnRTdGF0c0FzeW5jJykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBvdXRwdXQgPSB7fTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGRhdGEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGRhdGFba2V5XSA9PT0gJ251bWJlcicpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dFtrZXldID0gZGF0YVtrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICBGQkluc3RhbnQucGxheWVyLmluY3JlbWVudFN0YXRzQXN5bmMob3V0cHV0KS50aGVuKGZ1bmN0aW9uIChzdGF0cylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLmVtaXQoJ2luY3N0YXRzJywgc3RhdHMpO1xyXG5cclxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLmVtaXQoJ2luY3N0YXRzZmFpbCcsIGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5kaXZpZHVhbCBnYW1lcGxheSBzZXNzaW9uIGZvciB0aGUgY3VycmVudCBjb250ZXh0LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGdhbWUgd291bGQgbGlrZSB0byB1cGRhdGUgdGhlIGN1cnJlbnQgc2Vzc2lvbiBkYXRhLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIHNlc3Npb24gZGF0YSBtYXkgYmUgdXNlZCB0byBwb3B1bGF0ZSBhIHZhcmlldHkgb2YgcGF5bG9hZHMsIHN1Y2ggYXMgZ2FtZSBwbGF5IHdlYmhvb2tzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI3NhdmVTZXNzaW9uXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhIC0gQW4gYXJiaXRyYXJ5IGRhdGEgb2JqZWN0LCB3aGljaCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxMDAwIGNoYXJhY3RlcnMgd2hlbiBzdHJpbmdpZmllZC5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBGYWNlYm9vayBJbnN0YW50IEdhbWVzIFBsdWdpbiBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2F2ZVNlc3Npb246IGZ1bmN0aW9uIChkYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0FQSSgnc2V0U2Vzc2lvbkRhdGEnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRlc3QgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcclxuXHJcbiAgICAgICAgaWYgKHRlc3QubGVuZ3RoIDw9IDEwMDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBGQkluc3RhbnQuc2V0U2Vzc2lvbkRhdGEoZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignU2Vzc2lvbiBkYXRhIHRvbyBsb25nLiBNYXggMTAwMCBjaGFycy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaW52b2tlcyBhIGRpYWxvZyB0byBsZXQgdGhlIHVzZXIgc2hhcmUgc3BlY2lmaWVkIGNvbnRlbnQsIGVpdGhlciBhcyBhIG1lc3NhZ2UgaW4gTWVzc2VuZ2VyIG9yIGFzIGEgcG9zdCBvbiB0aGUgdXNlcidzIHRpbWVsaW5lLlxyXG4gICAgICogXHJcbiAgICAgKiBBIGJsb2Igb2YgZGF0YSBjYW4gYmUgYXR0YWNoZWQgdG8gdGhlIHNoYXJlIHdoaWNoIGV2ZXJ5IGdhbWUgc2Vzc2lvbiBsYXVuY2hlZCBmcm9tIHRoZSBzaGFyZSB3aWxsIGJlIGFibGUgdG8gYWNjZXNzIHZpYSB0aGUgYHRoaXMuZW50cnlQb2ludERhdGFgIHByb3BlcnR5LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIGRhdGEgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMTAwMCBjaGFyYWN0ZXJzIHdoZW4gc3RyaW5naWZpZWQuXHJcbiAgICAgKiBcclxuICAgICAqIFdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkIHlvdSBzaG91bGQgY29uc2lkZXIgeW91ciBnYW1lIHBhdXNlZC4gTGlzdGVuIG91dCBmb3IgdGhlIGByZXN1bWVgIGV2ZW50IGZyb20gdGhpcyBwbHVnaW4gdG8ga25vdyB3aGVuIHRoZSBkaWFsb2cgaGFzIGJlZW4gY2xvc2VkLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgdXNlciBtYXkgY2hvb3NlIHRvIGNhbmNlbCB0aGUgc2hhcmUgYWN0aW9uIGFuZCBjbG9zZSB0aGUgZGlhbG9nLiBUaGUgcmVzdWx0aW5nIGByZXN1bWVgIGV2ZW50IHdpbGwgYmUgZGlzcGF0Y2hlZCByZWdhcmRsZXNzIGlmIHRoZSB1c2VyIGFjdHVhbGx5IHNoYXJlZCB0aGUgY29udGVudCBvciBub3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jb3BlblNoYXJlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gQSB0ZXh0IG1lc3NhZ2UgdG8gYmUgc2hhcmVkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHRleHR1cmUgdG8gdXNlIGFzIHRoZSBzaGFyZSBpbWFnZS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZnJhbWVdIC0gVGhlIGZyYW1lIG9mIHRoZSB0ZXh0dXJlIHRvIHVzZSBhcyB0aGUgc2hhcmUgaW1hZ2UuIFNldCB0byBgbnVsbGAgaWYgeW91IGRvbid0IHJlcXVpcmUgYSBmcmFtZSwgYnV0IGRvIG5lZWQgdG8gc2V0IHNlc3Npb24gZGF0YS5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbc2Vzc2lvbkRhdGFdIC0gQSBibG9iIG9mIGRhdGEgdG8gYXR0YWNoIHRvIHRoZSBzaGFyZS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBGYWNlYm9vayBJbnN0YW50IEdhbWVzIFBsdWdpbiBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgb3BlblNoYXJlOiBmdW5jdGlvbiAodGV4dCwga2V5LCBmcmFtZSwgc2Vzc2lvbkRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXJlKCdTSEFSRScsIHRleHQsIGtleSwgZnJhbWUsIHNlc3Npb25EYXRhKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGludm9rZXMgYSBkaWFsb2cgdG8gbGV0IHRoZSB1c2VyIGludml0ZSBhIGZyaWVuZCB0byBwbGF5IHRoaXMgZ2FtZSwgZWl0aGVyIGFzIGEgbWVzc2FnZSBpbiBNZXNzZW5nZXIgb3IgYXMgYSBwb3N0IG9uIHRoZSB1c2VyJ3MgdGltZWxpbmUuXHJcbiAgICAgKiBcclxuICAgICAqIEEgYmxvYiBvZiBkYXRhIGNhbiBiZSBhdHRhY2hlZCB0byB0aGUgc2hhcmUgd2hpY2ggZXZlcnkgZ2FtZSBzZXNzaW9uIGxhdW5jaGVkIGZyb20gdGhlIHNoYXJlIHdpbGwgYmUgYWJsZSB0byBhY2Nlc3MgdmlhIHRoZSBgdGhpcy5lbnRyeVBvaW50RGF0YWAgcHJvcGVydHkuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgZGF0YSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxMDAwIGNoYXJhY3RlcnMgd2hlbiBzdHJpbmdpZmllZC5cclxuICAgICAqIFxyXG4gICAgICogV2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgeW91IHNob3VsZCBjb25zaWRlciB5b3VyIGdhbWUgcGF1c2VkLiBMaXN0ZW4gb3V0IGZvciB0aGUgYHJlc3VtZWAgZXZlbnQgZnJvbSB0aGlzIHBsdWdpbiB0byBrbm93IHdoZW4gdGhlIGRpYWxvZyBoYXMgYmVlbiBjbG9zZWQuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSB1c2VyIG1heSBjaG9vc2UgdG8gY2FuY2VsIHRoZSBzaGFyZSBhY3Rpb24gYW5kIGNsb3NlIHRoZSBkaWFsb2cuIFRoZSByZXN1bHRpbmcgYHJlc3VtZWAgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIHJlZ2FyZGxlc3MgaWYgdGhlIHVzZXIgYWN0dWFsbHkgc2hhcmVkIHRoZSBjb250ZW50IG9yIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNvcGVuSW52aXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gQSB0ZXh0IG1lc3NhZ2UgdG8gYmUgc2hhcmVkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHRleHR1cmUgdG8gdXNlIGFzIHRoZSBzaGFyZSBpbWFnZS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZnJhbWVdIC0gVGhlIGZyYW1lIG9mIHRoZSB0ZXh0dXJlIHRvIHVzZSBhcyB0aGUgc2hhcmUgaW1hZ2UuIFNldCB0byBgbnVsbGAgaWYgeW91IGRvbid0IHJlcXVpcmUgYSBmcmFtZSwgYnV0IGRvIG5lZWQgdG8gc2V0IHNlc3Npb24gZGF0YS5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbc2Vzc2lvbkRhdGFdIC0gQSBibG9iIG9mIGRhdGEgdG8gYXR0YWNoIHRvIHRoZSBzaGFyZS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBGYWNlYm9vayBJbnN0YW50IEdhbWVzIFBsdWdpbiBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgb3Blbkludml0ZTogZnVuY3Rpb24gKHRleHQsIGtleSwgZnJhbWUsIHNlc3Npb25EYXRhKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaGFyZSgnSU5WSVRFJywgdGV4dCwga2V5LCBmcmFtZSwgc2Vzc2lvbkRhdGEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaW52b2tlcyBhIGRpYWxvZyB0byBsZXQgdGhlIHVzZXIgc2hhcmUgc3BlY2lmaWVkIGNvbnRlbnQsIGVpdGhlciBhcyBhIG1lc3NhZ2UgaW4gTWVzc2VuZ2VyIG9yIGFzIGEgcG9zdCBvbiB0aGUgdXNlcidzIHRpbWVsaW5lLlxyXG4gICAgICogXHJcbiAgICAgKiBBIGJsb2Igb2YgZGF0YSBjYW4gYmUgYXR0YWNoZWQgdG8gdGhlIHNoYXJlIHdoaWNoIGV2ZXJ5IGdhbWUgc2Vzc2lvbiBsYXVuY2hlZCBmcm9tIHRoZSBzaGFyZSB3aWxsIGJlIGFibGUgdG8gYWNjZXNzIHZpYSB0aGUgYHRoaXMuZW50cnlQb2ludERhdGFgIHByb3BlcnR5LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIGRhdGEgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMTAwMCBjaGFyYWN0ZXJzIHdoZW4gc3RyaW5naWZpZWQuXHJcbiAgICAgKiBcclxuICAgICAqIFdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkIHlvdSBzaG91bGQgY29uc2lkZXIgeW91ciBnYW1lIHBhdXNlZC4gTGlzdGVuIG91dCBmb3IgdGhlIGByZXN1bWVgIGV2ZW50IGZyb20gdGhpcyBwbHVnaW4gdG8ga25vdyB3aGVuIHRoZSBkaWFsb2cgaGFzIGJlZW4gY2xvc2VkLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgdXNlciBtYXkgY2hvb3NlIHRvIGNhbmNlbCB0aGUgc2hhcmUgYWN0aW9uIGFuZCBjbG9zZSB0aGUgZGlhbG9nLiBUaGUgcmVzdWx0aW5nIGByZXN1bWVgIGV2ZW50IHdpbGwgYmUgZGlzcGF0Y2hlZCByZWdhcmRsZXNzIGlmIHRoZSB1c2VyIGFjdHVhbGx5IHNoYXJlZCB0aGUgY29udGVudCBvciBub3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jb3BlblJlcXVlc3RcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBBIHRleHQgbWVzc2FnZSB0byBiZSBzaGFyZWQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgdGV4dHVyZSB0byB1c2UgYXMgdGhlIHNoYXJlIGltYWdlLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtmcmFtZV0gLSBUaGUgZnJhbWUgb2YgdGhlIHRleHR1cmUgdG8gdXNlIGFzIHRoZSBzaGFyZSBpbWFnZS4gU2V0IHRvIGBudWxsYCBpZiB5b3UgZG9uJ3QgcmVxdWlyZSBhIGZyYW1lLCBidXQgZG8gbmVlZCB0byBzZXQgc2Vzc2lvbiBkYXRhLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtzZXNzaW9uRGF0YV0gLSBBIGJsb2Igb2YgZGF0YSB0byBhdHRhY2ggdG8gdGhlIHNoYXJlLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBvcGVuUmVxdWVzdDogZnVuY3Rpb24gKHRleHQsIGtleSwgZnJhbWUsIHNlc3Npb25EYXRhKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaGFyZSgnUkVRVUVTVCcsIHRleHQsIGtleSwgZnJhbWUsIHNlc3Npb25EYXRhKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGludm9rZXMgYSBkaWFsb2cgdG8gbGV0IHRoZSB1c2VyIHNoYXJlIHNwZWNpZmllZCBjb250ZW50LCBlaXRoZXIgYXMgYSBtZXNzYWdlIGluIE1lc3NlbmdlciBvciBhcyBhIHBvc3Qgb24gdGhlIHVzZXIncyB0aW1lbGluZS5cclxuICAgICAqIFxyXG4gICAgICogQSBibG9iIG9mIGRhdGEgY2FuIGJlIGF0dGFjaGVkIHRvIHRoZSBzaGFyZSB3aGljaCBldmVyeSBnYW1lIHNlc3Npb24gbGF1bmNoZWQgZnJvbSB0aGUgc2hhcmUgd2lsbCBiZSBhYmxlIHRvIGFjY2VzcyB2aWEgdGhlIGB0aGlzLmVudHJ5UG9pbnREYXRhYCBwcm9wZXJ0eS5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBkYXRhIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEwMDAgY2hhcmFjdGVycyB3aGVuIHN0cmluZ2lmaWVkLlxyXG4gICAgICogXHJcbiAgICAgKiBXaGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCB5b3Ugc2hvdWxkIGNvbnNpZGVyIHlvdXIgZ2FtZSBwYXVzZWQuIExpc3RlbiBvdXQgZm9yIHRoZSBgcmVzdW1lYCBldmVudCBmcm9tIHRoaXMgcGx1Z2luIHRvIGtub3cgd2hlbiB0aGUgZGlhbG9nIGhhcyBiZWVuIGNsb3NlZC5cclxuICAgICAqIFxyXG4gICAgICogVGhlIHVzZXIgbWF5IGNob29zZSB0byBjYW5jZWwgdGhlIHNoYXJlIGFjdGlvbiBhbmQgY2xvc2UgdGhlIGRpYWxvZy4gVGhlIHJlc3VsdGluZyBgcmVzdW1lYCBldmVudCB3aWxsIGJlIGRpc3BhdGNoZWQgcmVnYXJkbGVzcyBpZiB0aGUgdXNlciBhY3R1YWxseSBzaGFyZWQgdGhlIGNvbnRlbnQgb3Igbm90LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI29wZW5DaGFsbGVuZ2VcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBBIHRleHQgbWVzc2FnZSB0byBiZSBzaGFyZWQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgdGV4dHVyZSB0byB1c2UgYXMgdGhlIHNoYXJlIGltYWdlLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtmcmFtZV0gLSBUaGUgZnJhbWUgb2YgdGhlIHRleHR1cmUgdG8gdXNlIGFzIHRoZSBzaGFyZSBpbWFnZS4gU2V0IHRvIGBudWxsYCBpZiB5b3UgZG9uJ3QgcmVxdWlyZSBhIGZyYW1lLCBidXQgZG8gbmVlZCB0byBzZXQgc2Vzc2lvbiBkYXRhLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtzZXNzaW9uRGF0YV0gLSBBIGJsb2Igb2YgZGF0YSB0byBhdHRhY2ggdG8gdGhlIHNoYXJlLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBvcGVuQ2hhbGxlbmdlOiBmdW5jdGlvbiAodGV4dCwga2V5LCBmcmFtZSwgc2Vzc2lvbkRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXJlKCdDSEFMTEVOR0UnLCB0ZXh0LCBrZXksIGZyYW1lLCBzZXNzaW9uRGF0YSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgc2hhcmUgaGFuZGxlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNfc2hhcmVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpbnRlbnQgLSAoXCJJTlZJVEVcIiB8IFwiUkVRVUVTVFwiIHwgXCJDSEFMTEVOR0VcIiB8IFwiU0hBUkVcIikgSW5kaWNhdGVzIHRoZSBpbnRlbnQgb2YgdGhlIHNoYXJlLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBBIHRleHQgbWVzc2FnZSB0byBiZSBzaGFyZWQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgdGV4dHVyZSB0byB1c2UgYXMgdGhlIHNoYXJlIGltYWdlLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtmcmFtZV0gLSBUaGUgZnJhbWUgb2YgdGhlIHRleHR1cmUgdG8gdXNlIGFzIHRoZSBzaGFyZSBpbWFnZS4gU2V0IHRvIGBudWxsYCBpZiB5b3UgZG9uJ3QgcmVxdWlyZSBhIGZyYW1lLCBidXQgZG8gbmVlZCB0byBzZXQgc2Vzc2lvbiBkYXRhLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtzZXNzaW9uRGF0YV0gLSBBIGJsb2Igb2YgZGF0YSB0byBhdHRhY2ggdG8gdGhlIHNoYXJlLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBfc2hhcmU6IGZ1bmN0aW9uIChpbnRlbnQsIHRleHQsIGtleSwgZnJhbWUsIHNlc3Npb25EYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0FQSSgnc2hhcmVBc3luYycpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2Vzc2lvbkRhdGEgPT09IHVuZGVmaW5lZCkgeyBzZXNzaW9uRGF0YSA9IHt9OyB9XHJcblxyXG4gICAgICAgIGlmIChrZXkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgaW1hZ2VEYXRhID0gdGhpcy5nYW1lLnRleHR1cmVzLmdldEJhc2U2NChrZXksIGZyYW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGludGVudCAoXCJJTlZJVEVcIiB8IFwiUkVRVUVTVFwiIHwgXCJDSEFMTEVOR0VcIiB8IFwiU0hBUkVcIikgSW5kaWNhdGVzIHRoZSBpbnRlbnQgb2YgdGhlIHNoYXJlLlxyXG4gICAgICAgIC8vIGltYWdlIHN0cmluZyBBIGJhc2U2NCBlbmNvZGVkIGltYWdlIHRvIGJlIHNoYXJlZC5cclxuICAgICAgICAvLyB0ZXh0IHN0cmluZyBBIHRleHQgbWVzc2FnZSB0byBiZSBzaGFyZWQuXHJcbiAgICAgICAgLy8gZGF0YSBPYmplY3Q/IEEgYmxvYiBvZiBkYXRhIHRvIGF0dGFjaCB0byB0aGUgc2hhcmUuIEFsbCBnYW1lIHNlc3Npb25zIGxhdW5jaGVkIGZyb20gdGhlIHNoYXJlIHdpbGwgYmUgYWJsZSB0byBhY2Nlc3MgdGhpcyBibG9iIHRocm91Z2ggRkJJbnN0YW50LmdldEVudHJ5UG9pbnREYXRhKCkuXHJcblxyXG4gICAgICAgIHZhciBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgICBpbnRlbnQ6IGludGVudCxcclxuICAgICAgICAgICAgaW1hZ2U6IGltYWdlRGF0YSxcclxuICAgICAgICAgICAgdGV4dDogdGV4dCxcclxuICAgICAgICAgICAgZGF0YTogc2Vzc2lvbkRhdGFcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICBGQkluc3RhbnQuc2hhcmVBc3luYyhwYXlsb2FkKS50aGVuKGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdyZXN1bWUnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIG51bWJlciBvZiBwYXJ0aWNpcGFudHMgaW4gdGhlIGN1cnJlbnQgZ2FtZSBjb250ZXh0IGlzIGJldHdlZW4gYSBnaXZlbiBtaW5pbXVtIGFuZCBtYXhpbXVtLCBpbmNsdXNpdmUuXHJcbiAgICAgKiBJZiBvbmUgb2YgdGhlIGJvdW5kcyBpcyBudWxsIG9ubHkgdGhlIG90aGVyIGJvdW5kIHdpbGwgYmUgY2hlY2tlZCBhZ2FpbnN0LlxyXG4gICAgICogSXQgd2lsbCBhbHdheXMgcmV0dXJuIHRoZSBvcmlnaW5hbCByZXN1bHQgZm9yIHRoZSBmaXJzdCBjYWxsIG1hZGUgaW4gYSBjb250ZXh0IGluIGEgZ2l2ZW4gZ2FtZSBwbGF5IHNlc3Npb24uXHJcbiAgICAgKiBTdWJzZXF1ZW50IGNhbGxzLCByZWdhcmRsZXNzIG9mIGFyZ3VtZW50cywgd2lsbCByZXR1cm4gdGhlIGFuc3dlciB0byB0aGUgb3JpZ2luYWwgcXVlcnkgdW50aWwgYSBjb250ZXh0IGNoYW5nZSBvY2N1cnMgYW5kIHRoZSBxdWVyeSByZXN1bHQgaXMgcmVzZXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jaXNTaXplQmV0d2VlblxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFttaW5dIC0gVGhlIG1pbmltdW0gYm91bmQgb2YgdGhlIGNvbnRleHQgc2l6ZSBxdWVyeS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW21heF0gLSBUaGUgbWF4aW11bSBib3VuZCBvZiB0aGUgY29udGV4dCBzaXplIHF1ZXJ5LlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9IFRoZSBDb250ZXh0IFNpemUgUmVzcG9uc2Ugb2JqZWN0IGluIHRoZSBmb3JtYXQ6IGB7YW5zd2VyOiBib29sZWFuLCBtaW5TaXplOiBudW1iZXI/LCBtYXhTaXplOiBudW1iZXI/fWAuXHJcbiAgICAgKi9cclxuICAgIGlzU2l6ZUJldHdlZW46IGZ1bmN0aW9uIChtaW4sIG1heClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tBUEkoJ2NvbnRleHRJc1NpemVCZXR3ZWVuJykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBGQkluc3RhbnQuY29udGV4dC5pc1NpemVCZXR3ZWVuKG1pbiwgbWF4KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXF1ZXN0IGEgc3dpdGNoIGludG8gYSBzcGVjaWZpYyBjb250ZXh0LiBJZiB0aGUgcGxheWVyIGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byBlbnRlciB0aGF0IGNvbnRleHQsXHJcbiAgICAgKiBvciBpZiB0aGUgcGxheWVyIGRvZXMgbm90IHByb3ZpZGUgcGVybWlzc2lvbiBmb3IgdGhlIGdhbWUgdG8gZW50ZXIgdGhhdCBjb250ZXh0LCB0aGlzIHdpbGwgZW1pdCBhIGBzd2l0Y2hmYWlsYCBldmVudC5cclxuICAgICAqIFxyXG4gICAgICogT3RoZXJ3aXNlLCB0aGUgcGx1Z2luIHdpbGwgZW1pdCB0aGUgYHN3aXRjaGAgZXZlbnQgd2hlbiB0aGUgZ2FtZSBoYXMgc3dpdGNoZWQgaW50byB0aGUgc3BlY2lmaWVkIGNvbnRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jc3dpdGNoQ29udGV4dFxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGV4dElEIC0gVGhlIElEIG9mIHRoZSBkZXNpcmVkIGNvbnRleHQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHN3aXRjaENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0SUQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrQVBJKCdjb250ZXh0U3dpdGNoQXN5bmMnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbnRleHRJRCAhPT0gdGhpcy5jb250ZXh0SUQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgRkJJbnN0YW50LmNvbnRleHQuc3dpdGNoQXN5bmMoY29udGV4dElEKS50aGVuKGZ1bmN0aW9uICgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmNvbnRleHRJRCA9IEZCSW5zdGFudC5jb250ZXh0LmdldElEKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgX3RoaXMuZW1pdCgnc3dpdGNoJywgX3RoaXMuY29udGV4dElEKTtcclxuXHJcbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KCdzd2l0Y2hmYWlsJywgZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBmaWx0ZXIgdGhhdCBtYXkgYmUgYXBwbGllZCB0byBhIENvbnRleHQgQ2hvb3NlIG9wZXJhdGlvbi5cclxuICAgICAqIFxyXG4gICAgICogJ05FV19DT05URVhUX09OTFknIC0gUHJlZmVyIHRvIG9ubHkgc3VyZmFjZSBjb250ZXh0cyB0aGUgZ2FtZSBoYXMgbm90IGJlZW4gcGxheWVkIGluIGJlZm9yZS5cclxuICAgICAqICdJTkNMVURFX0VYSVNUSU5HX0NIQUxMRU5HRVMnIC0gSW5jbHVkZSB0aGUgXCJFeGlzdGluZyBDaGFsbGVuZ2VzXCIgc2VjdGlvbiwgd2hpY2ggc3VyZmFjZXMgYWN0aXZlbHkgcGxheWVkLWluIGNvbnRleHRzIHRoYXQgdGhlIHBsYXllciBpcyBhIHBhcnQgb2YuXHJcbiAgICAgKiAnTkVXX1BMQVlFUlNfT05MWScgLSBJbiBzZWN0aW9ucyBjb250YWluaW5nIGluZGl2aWR1YWxzLCBwcmVmZXIgcGVvcGxlIHdobyBoYXZlIG5vdCBwbGF5ZWQgdGhlIGdhbWUuXHJcbiAgICAgKiBcclxuICAgICAqIEB0eXBlZGVmIHtzdHJpbmd9IENvbnRleHRGaWx0ZXJcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBjb25maWd1cmF0aW9uIG9iamVjdCB0aGF0IG1heSBiZSBhcHBsaWVkIHRvIGEgQ29udGV4dCBDaG9vc2Ugb3BlcmF0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBAdHlwZWRlZiB7b2JqZWN0fSBDaG9vc2VDb250ZXh0Q29uZmlnXHJcbiAgICAgKiBAcHJvcGVydHkge0NvbnRleHRGaWx0ZXJbXX0gW2ZpbHRlcnNdIC0gVGhlIHNldCBvZiBmaWx0ZXJzIHRvIGFwcGx5IHRvIHRoZSBjb250ZXh0IHN1Z2dlc3Rpb25zOiAnTkVXX0NPTlRFWFRfT05MWScsICdJTkNMVURFX0VYSVNUSU5HX0NIQUxMRU5HRVMnIG9yICdORVdfUExBWUVSU19PTkxZJy5cclxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4U2l6ZV0gLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFydGljaXBhbnRzIHRoYXQgYSBzdWdnZXN0ZWQgY29udGV4dCBzaG91bGQgaWRlYWxseSBoYXZlLlxyXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFttaW5TaXplXSAtIFRoZSBtaW5pbXVtIG51bWJlciBvZiBwYXJ0aWNpcGFudHMgdGhhdCBhIHN1Z2dlc3RlZCBjb250ZXh0IHNob3VsZCBpZGVhbGx5IGhhdmUuXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9wZW5zIGEgY29udGV4dCBzZWxlY3Rpb24gZGlhbG9nIGZvciB0aGUgcGxheWVyLiBJZiB0aGUgcGxheWVyIHNlbGVjdHMgYW4gYXZhaWxhYmxlIGNvbnRleHQsXHJcbiAgICAgKiB0aGUgY2xpZW50IHdpbGwgYXR0ZW1wdCB0byBzd2l0Y2ggaW50byB0aGF0IGNvbnRleHQsIGFuZCBlbWl0IHRoZSBgY2hvb3NlYCBldmVudCBpZiBzdWNjZXNzZnVsLlxyXG4gICAgICogT3RoZXJ3aXNlLCBpZiB0aGUgcGxheWVyIGV4aXRzIHRoZSBtZW51IG9yIHRoZSBjbGllbnQgZmFpbHMgdG8gc3dpdGNoIGludG8gdGhlIG5ldyBjb250ZXh0LCB0aGUgYGNob29zZWZhaWxgIGV2ZW50IHdpbGwgYmUgZW1pdHRlZC5cclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jY2hvb3NlQ29udGV4dFxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0Nob29zZUNvbnRleHRDb25maWd9IFtvcHRpb25zXSAtIEFuIG9iamVjdCBzcGVjaWZ5aW5nIGNvbmRpdGlvbnMgb24gdGhlIGNvbnRleHRzIHRoYXQgc2hvdWxkIGJlIG9mZmVyZWQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGNob29zZUNvbnRleHQ6IGZ1bmN0aW9uIChvcHRpb25zKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0FQSSgnY29udGV4dENob29zZUFzeW5jJykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIEZCSW5zdGFudC5jb250ZXh0LmNob29zZUFzeW5jKG9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLmNvbnRleHRJRCA9IEZCSW5zdGFudC5jb250ZXh0LmdldElEKCk7XHJcbiAgICAgICAgICAgIF90aGlzLmVtaXQoJ2Nob29zZScsIF90aGlzLmNvbnRleHRJRCk7XHJcblxyXG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgnY2hvb3NlZmFpbCcsIGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBdHRlbXB0cyB0byBjcmVhdGUgb3Igc3dpdGNoIGludG8gYSBjb250ZXh0IGJldHdlZW4gYSBzcGVjaWZpZWQgcGxheWVyIGFuZCB0aGUgY3VycmVudCBwbGF5ZXIuXHJcbiAgICAgKiBUaGlzIHBsdWdpbiB3aWxsIGVtaXQgdGhlIGBjcmVhdGVgIGV2ZW50IG9uY2UgdGhlIGNvbnRleHQgc3dpdGNoIGlzIGNvbXBsZXRlZC5cclxuICAgICAqIElmIHRoZSBBUEkgY2FsbCBmYWlscywgc3VjaCBhcyBpZiB0aGUgcGxheWVyIGxpc3RlZCBpcyBub3QgYSBDb25uZWN0ZWQgUGxheWVyIG9mIHRoZSBjdXJyZW50IHBsYXllciBvciBpZiB0aGVcclxuICAgICAqIHBsYXllciBkb2VzIG5vdCBwcm92aWRlIHBlcm1pc3Npb24gdG8gZW50ZXIgdGhlIG5ldyBjb250ZXh0LCB0aGVuIHRoZSBwbHVnaW4gd2lsbCBlbWl0IGEgJ2NyZWF0ZWZhaWwnIGV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2NyZWF0ZUNvbnRleHRcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBsYXllcklEIC0gSUQgb2YgdGhlIHBsYXllci5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBGYWNlYm9vayBJbnN0YW50IEdhbWVzIFBsdWdpbiBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgY3JlYXRlQ29udGV4dDogZnVuY3Rpb24gKHBsYXllcklEKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0FQSSgnY29udGV4dENyZWF0ZUFzeW5jJykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIEZCSW5zdGFudC5jb250ZXh0LmNyZWF0ZUFzeW5jKHBsYXllcklEKS50aGVuKGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5jb250ZXh0SUQgPSBGQkluc3RhbnQuY29udGV4dC5nZXRJRCgpO1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdjcmVhdGUnLCBfdGhpcy5jb250ZXh0SUQpO1xyXG5cclxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLmVtaXQoJ2NyZWF0ZWZhaWwnLCBlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmV0Y2hlcyBhbiBhcnJheSBvZiBDb25uZWN0ZWRQbGF5ZXIgb2JqZWN0cyBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IGFjdGl2ZSBwbGF5ZXJzXHJcbiAgICAgKiAocGVvcGxlIHdobyBwbGF5ZWQgdGhlIGdhbWUgaW4gdGhlIGxhc3QgOTAgZGF5cykgdGhhdCBhcmUgY29ubmVjdGVkIHRvIHRoZSBjdXJyZW50IHBsYXllci5cclxuICAgICAqIFxyXG4gICAgICogSXQgbWFrZXMgYW4gYXN5bmMgY2FsbCB0byB0aGUgQVBJLCBzbyB0aGUgcmVzdWx0IGlzbid0IGF2YWlsYWJsZSBpbW1lZGlhdGVseS5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhleSBhcmUgc3VjY2Vzc2Z1bGx5IHN1YnNjcmliZWQgdGhpcyBwbHVnaW4gd2lsbCBlbWl0IHRoZSBgcGxheWVyc2AgZXZlbnQgYWxvbmdcclxuICAgICAqIHdpdGggdGhlIHBsYXllciBkYXRhLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGV5IGNhbm5vdCwgaS5lLiBpdCdzIG5vdCBpbiB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgQVBJcywgb3IgdGhlIHJlcXVlc3RcclxuICAgICAqIHdhcyByZWplY3RlZCwgaXQgd2lsbCBlbWl0IGEgYHBsYXllcnNmYWlsYCBldmVudCBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2dldFBsYXllcnNcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBGYWNlYm9vayBJbnN0YW50IEdhbWVzIFBsdWdpbiBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgZ2V0UGxheWVyczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tBUEkoJ3BsYXllckdldENvbm5lY3RlZFBsYXllcnNBc3luYycpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICBGQkluc3RhbnQucGxheWVyLmdldENvbm5lY3RlZFBsYXllcnNBc3luYygpLnRoZW4oZnVuY3Rpb24gKHBsYXllcnMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdwbGF5ZXJzJywgcGxheWVycyk7XHJcblxyXG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgncGxheWVyc2ZhaWwnLCBlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmV0Y2hlcyB0aGUgZ2FtZSdzIHByb2R1Y3QgY2F0YWxvZy5cclxuICAgICAqIFxyXG4gICAgICogSXQgbWFrZXMgYW4gYXN5bmMgY2FsbCB0byB0aGUgQVBJLCBzbyB0aGUgcmVzdWx0IGlzbid0IGF2YWlsYWJsZSBpbW1lZGlhdGVseS5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhleSBhcmUgc3VjY2Vzc2Z1bGx5IHN1YnNjcmliZWQgdGhpcyBwbHVnaW4gd2lsbCBlbWl0IHRoZSBgZ2V0Y2F0YWxvZ2AgZXZlbnQgYWxvbmdcclxuICAgICAqIHdpdGggdGhlIGNhdGFsb2cgZGF0YS5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhleSBjYW5ub3QsIGkuZS4gaXQncyBub3QgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIEFQSXMsIG9yIHRoZSByZXF1ZXN0XHJcbiAgICAgKiB3YXMgcmVqZWN0ZWQsIGl0IHdpbGwgZW1pdCBhIGBnZXRjYXRhbG9nZmFpbGAgZXZlbnQgaW5zdGVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNnZXRDYXRhbG9nXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGdldENhdGFsb2c6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBheW1lbnRzUmVhZHkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGNhdGFsb2cgPSB0aGlzLmNhdGFsb2c7XHJcblxyXG4gICAgICAgIEZCSW5zdGFudC5wYXltZW50cy5nZXRDYXRhbG9nQXN5bmMoKS50aGVuKGZ1bmN0aW9uIChkYXRhKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2F0YWxvZyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjYXRhbG9nLnB1c2goUHJvZHVjdChpdGVtKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgnZ2V0Y2F0YWxvZycsIGNhdGFsb2cpO1xyXG5cclxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLmVtaXQoJ2dldGNhdGFsb2dmYWlsJywgZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZldGNoZXMgYSBzaW5nbGUgUHJvZHVjdCBmcm9tIHRoZSBnYW1lJ3MgcHJvZHVjdCBjYXRhbG9nLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgcHJvZHVjdCBjYXRhbG9nIG11c3QgaGF2ZSBiZWVuIHBvcHVsYXRlZCB1c2luZyBgZ2V0Q2F0YWxvZ2AgcHJpb3IgdG8gY2FsbGluZyB0aGlzIG1ldGhvZC5cclxuICAgICAqIFxyXG4gICAgICogVXNlIHRoaXMgdG8gbG9vay11cCBwcm9kdWN0IGRldGFpbHMgYmFzZWQgb24gYSBwdXJjaGFzZSBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2dldFByb2R1Y3RcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHByb2R1Y3RJRCAtIFRoZSBQcm9kdWN0IElEIG9mIHRoZSBpdGVtIHRvIGdldCBmcm9tIHRoZSBjYXRhbG9nLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHs/UHJvZHVjdH0gVGhlIFByb2R1Y3QgZnJvbSB0aGUgY2F0YWxvZywgb3IgYG51bGxgIGlmIGl0IGNvdWxkbid0IGJlIGZvdW5kIG9yIHRoZSBjYXRhbG9nIGlzbid0IHBvcHVsYXRlZC5cclxuICAgICAqL1xyXG4gICAgZ2V0UHJvZHVjdDogZnVuY3Rpb24gKHByb2R1Y3RJRClcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2F0YWxvZy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhdGFsb2dbaV0ucHJvZHVjdElEID09PSBwcm9kdWN0SUQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNhdGFsb2dbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJlZ2lucyB0aGUgcHVyY2hhc2UgZmxvdyBmb3IgYSBzcGVjaWZpYyBwcm9kdWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBJdCBtYWtlcyBhbiBhc3luYyBjYWxsIHRvIHRoZSBBUEksIHNvIHRoZSByZXN1bHQgaXNuJ3QgYXZhaWxhYmxlIGltbWVkaWF0ZWx5LlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGV5IGFyZSBzdWNjZXNzZnVsbHkgc3Vic2NyaWJlZCB0aGlzIHBsdWdpbiB3aWxsIGVtaXQgdGhlIGBwdXJjaGFzZWAgZXZlbnQgYWxvbmdcclxuICAgICAqIHdpdGggdGhlIHB1cmNoYXNlIGRhdGEuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZXkgY2Fubm90LCBpLmUuIGl0J3Mgbm90IGluIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBBUElzLCBvciB0aGUgcmVxdWVzdFxyXG4gICAgICogd2FzIHJlamVjdGVkLCBpdCB3aWxsIGVtaXQgYSBgcHVyY2hhc2VmYWlsYCBldmVudCBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI3B1cmNoYXNlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9kdWN0SUQgLSBUaGUgaWRlbnRpZmllciBvZiB0aGUgcHJvZHVjdCB0byBwdXJjaGFzZS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZGV2ZWxvcGVyUGF5bG9hZF0gLSBBbiBvcHRpb25hbCBkZXZlbG9wZXItc3BlY2lmaWVkIHBheWxvYWQsIHRvIGJlIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCBwdXJjaGFzZSdzIHNpZ25lZCByZXF1ZXN0LlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBwdXJjaGFzZTogZnVuY3Rpb24gKHByb2R1Y3RJRCwgZGV2ZWxvcGVyUGF5bG9hZClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMucGF5bWVudHNSZWFkeSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNvbmZpZyA9IHtwcm9kdWN0SUQ6IHByb2R1Y3RJRH07XHJcblxyXG4gICAgICAgIGlmIChkZXZlbG9wZXJQYXlsb2FkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uZmlnLmRldmVsb3BlclBheWxvYWQgPSBkZXZlbG9wZXJQYXlsb2FkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgRkJJbnN0YW50LnBheW1lbnRzLnB1cmNoYXNlQXN5bmMoY29uZmlnKS50aGVuKGZ1bmN0aW9uIChkYXRhKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHB1cmNoYXNlID0gUHVyY2hhc2UoZGF0YSk7XHJcblxyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdwdXJjaGFzZScsIHB1cmNoYXNlKTtcclxuXHJcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdwdXJjaGFzZWZhaWwnLCBlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmV0Y2hlcyBhbGwgb2YgdGhlIHBsYXllcidzIHVuY29uc3VtZWQgcHVyY2hhc2VzLiBUaGUgZ2FtZSBtdXN0IGZldGNoIHRoZSBjdXJyZW50IHBsYXllcidzIHB1cmNoYXNlc1xyXG4gICAgICogYXMgc29vbiBhcyB0aGUgY2xpZW50IGluZGljYXRlcyB0aGF0IGl0IGlzIHJlYWR5IHRvIHBlcmZvcm0gcGF5bWVudHMtcmVsYXRlZCBvcGVyYXRpb25zLFxyXG4gICAgICogaS5lLiBhdCBnYW1lIHN0YXJ0LiBUaGUgZ2FtZSBjYW4gdGhlbiBwcm9jZXNzIGFuZCBjb25zdW1lIGFueSBwdXJjaGFzZXMgdGhhdCBhcmUgd2FpdGluZyB0byBiZSBjb25zdW1lZC5cclxuICAgICAqIFxyXG4gICAgICogSXQgbWFrZXMgYW4gYXN5bmMgY2FsbCB0byB0aGUgQVBJLCBzbyB0aGUgcmVzdWx0IGlzbid0IGF2YWlsYWJsZSBpbW1lZGlhdGVseS5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhleSBhcmUgc3VjY2Vzc2Z1bGx5IHN1YnNjcmliZWQgdGhpcyBwbHVnaW4gd2lsbCBlbWl0IHRoZSBgZ2V0cHVyY2hhc2VzYCBldmVudCBhbG9uZ1xyXG4gICAgICogd2l0aCB0aGUgcHVyY2hhc2UgZGF0YS5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhleSBjYW5ub3QsIGkuZS4gaXQncyBub3QgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIEFQSXMsIG9yIHRoZSByZXF1ZXN0XHJcbiAgICAgKiB3YXMgcmVqZWN0ZWQsIGl0IHdpbGwgZW1pdCBhIGBnZXRwdXJjaGFzZXNmYWlsYCBldmVudCBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2dldFB1cmNoYXNlc1xyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBnZXRQdXJjaGFzZXM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBheW1lbnRzUmVhZHkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHB1cmNoYXNlcyA9IHRoaXMucHVyY2hhc2VzO1xyXG5cclxuICAgICAgICBGQkluc3RhbnQucGF5bWVudHMuZ2V0UHVyY2hhc2VzQXN5bmMoKS50aGVuKGZ1bmN0aW9uIChkYXRhKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHVyY2hhc2VzID0gW107XHJcblxyXG4gICAgICAgICAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHB1cmNoYXNlcy5wdXNoKFB1cmNoYXNlKGl0ZW0pKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdnZXRwdXJjaGFzZXMnLCBwdXJjaGFzZXMpO1xyXG5cclxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLmVtaXQoJ2dldHB1cmNoYXNlc2ZhaWwnLCBlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29uc3VtZXMgYSBzcGVjaWZpYyBwdXJjaGFzZSBiZWxvbmdpbmcgdG8gdGhlIGN1cnJlbnQgcGxheWVyLiBCZWZvcmUgcHJvdmlzaW9uaW5nIGEgcHJvZHVjdCdzIGVmZmVjdHMgdG8gdGhlIHBsYXllcixcclxuICAgICAqIHRoZSBnYW1lIHNob3VsZCByZXF1ZXN0IHRoZSBjb25zdW1wdGlvbiBvZiB0aGUgcHVyY2hhc2VkIHByb2R1Y3QuIE9uY2UgdGhlIHB1cmNoYXNlIGlzIHN1Y2Nlc3NmdWxseSBjb25zdW1lZCxcclxuICAgICAqIHRoZSBnYW1lIHNob3VsZCBpbW1lZGlhdGVseSBwcm92aWRlIHRoZSBwbGF5ZXIgd2l0aCB0aGUgZWZmZWN0cyBvZiB0aGVpciBwdXJjaGFzZS5cclxuICAgICAqIFxyXG4gICAgICogSXQgbWFrZXMgYW4gYXN5bmMgY2FsbCB0byB0aGUgQVBJLCBzbyB0aGUgcmVzdWx0IGlzbid0IGF2YWlsYWJsZSBpbW1lZGlhdGVseS5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhleSBhcmUgc3VjY2Vzc2Z1bGx5IHN1YnNjcmliZWQgdGhpcyBwbHVnaW4gd2lsbCBlbWl0IHRoZSBgY29uc3VtZXB1cmNoYXNlYCBldmVudCBhbG9uZ1xyXG4gICAgICogd2l0aCB0aGUgcHVyY2hhc2UgZGF0YS5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhleSBjYW5ub3QsIGkuZS4gaXQncyBub3QgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIEFQSXMsIG9yIHRoZSByZXF1ZXN0XHJcbiAgICAgKiB3YXMgcmVqZWN0ZWQsIGl0IHdpbGwgZW1pdCBhIGBjb25zdW1lcHVyY2hhc2VmYWlsYCBldmVudCBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2NvbnN1bWVQdXJjaGFzZVxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHVyY2hhc2VUb2tlbiAtIFRoZSBwdXJjaGFzZSB0b2tlbiBvZiB0aGUgcHVyY2hhc2UgdGhhdCBzaG91bGQgYmUgY29uc3VtZWQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGNvbnN1bWVQdXJjaGFzZTogZnVuY3Rpb24gKHB1cmNoYXNlVG9rZW4pXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBheW1lbnRzUmVhZHkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIEZCSW5zdGFudC5wYXltZW50cy5jb25zdW1lUHVyY2hhc2VBc3luYyhwdXJjaGFzZVRva2VuKS50aGVuKGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdjb25zdW1lcHVyY2hhc2UnLCBwdXJjaGFzZVRva2VuKTtcclxuXHJcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCdjb25zdW1lcHVyY2hhc2VmYWlsJywgZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZm9ybXMgRmFjZWJvb2sgb2YgYSBjdXN0b20gdXBkYXRlIHRoYXQgb2NjdXJyZWQgaW4gdGhlIGdhbWUuXHJcbiAgICAgKiBUaGlzIHdpbGwgdGVtcG9yYXJpbHkgeWllbGQgY29udHJvbCB0byBGYWNlYm9vayBhbmQgRmFjZWJvb2sgd2lsbCBkZWNpZGUgd2hhdCB0byBkbyBiYXNlZCBvbiB3aGF0IHRoZSB1cGRhdGUgaXMuXHJcbiAgICAgKiBPbmNlIEZhY2Vib29rIHJldHVybnMgY29udHJvbCB0byB0aGUgZ2FtZSB0aGUgcGx1Z2luIHdpbGwgZW1pdCBhbiBgdXBkYXRlYCBvciBgdXBkYXRlZmFpbGAgZXZlbnQuXHJcbiAgICAgKiBcclxuICAgICAqIEl0IG1ha2VzIGFuIGFzeW5jIGNhbGwgdG8gdGhlIEFQSSwgc28gdGhlIHJlc3VsdCBpc24ndCBhdmFpbGFibGUgaW1tZWRpYXRlbHkuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBgdGV4dGAgcGFyYW1ldGVyIGlzIGFuIHVwZGF0ZSBwYXlsb2FkIHdpdGggdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYFxyXG4gICAgICogdGV4dDoge1xyXG4gICAgICogICAgIGRlZmF1bHQ6ICdYIGp1c3QgaW52YWRlZCBZXFwncyB2aWxsYWdlIScsXHJcbiAgICAgKiAgICAgbG9jYWxpemF0aW9uczoge1xyXG4gICAgICogICAgICAgICBhcl9BUjogJ1ggXFx1MDY0MVxcdTA2NDJcXHUwNjM3IFxcdTA2M0FcXHUwNjMyXFx1MDYyQSAnICtcclxuICAgICAqICAgICAgICAgJ1xcdTA2NDJcXHUwNjMxXFx1MDY0QVxcdTA2MjkgWSEnLFxyXG4gICAgICogICAgICAgICBlbl9VUzogJ1gganVzdCBpbnZhZGVkIFlcXCdzIHZpbGxhZ2UhJyxcclxuICAgICAqICAgICAgICAgZXNfTEE6ICdcXHUwMEExWCBhY2FiYSBkZSBpbnZhZGlyIGVsIHB1ZWJsbyBkZSBZIScsXHJcbiAgICAgKiAgICAgfVxyXG4gICAgICogfVxyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jdXBkYXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjdGEgLSBUaGUgY2FsbCB0byBhY3Rpb24gdGV4dC5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0ZXh0IC0gVGhlIHRleHQgb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHRleHR1cmUgdG8gdXNlIGFzIHRoZSBzaGFyZSBpbWFnZS5cclxuICAgICAqIEBwYXJhbSB7PyhzdHJpbmd8aW50ZWdlcil9IGZyYW1lIC0gVGhlIGZyYW1lIG9mIHRoZSB0ZXh0dXJlIHRvIHVzZSBhcyB0aGUgc2hhcmUgaW1hZ2UuIFNldCB0byBgbnVsbGAgaWYgeW91IGRvbid0IHJlcXVpcmUgYSBmcmFtZSwgYnV0IGRvIG5lZWQgdG8gc2V0IHNlc3Npb24gZGF0YS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZSAtIFRoZSB1cGRhdGUgdGVtcGxhdGUga2V5LlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHVwZGF0ZURhdGEgLSBUaGUgdXBkYXRlIGRhdGEgb2JqZWN0IHBheWxvYWQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGN0YSwgdGV4dCwga2V5LCBmcmFtZSwgdGVtcGxhdGUsIHVwZGF0ZURhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSgnQ1VTVE9NJywgY3RhLCB0ZXh0LCBrZXksIGZyYW1lLCB0ZW1wbGF0ZSwgdXBkYXRlRGF0YSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5mb3JtcyBGYWNlYm9vayBvZiBhIGxlYWRlcmJvYXJkIHVwZGF0ZSB0aGF0IG9jY3VycmVkIGluIHRoZSBnYW1lLlxyXG4gICAgICogVGhpcyB3aWxsIHRlbXBvcmFyaWx5IHlpZWxkIGNvbnRyb2wgdG8gRmFjZWJvb2sgYW5kIEZhY2Vib29rIHdpbGwgZGVjaWRlIHdoYXQgdG8gZG8gYmFzZWQgb24gd2hhdCB0aGUgdXBkYXRlIGlzLlxyXG4gICAgICogT25jZSBGYWNlYm9vayByZXR1cm5zIGNvbnRyb2wgdG8gdGhlIGdhbWUgdGhlIHBsdWdpbiB3aWxsIGVtaXQgYW4gYHVwZGF0ZWAgb3IgYHVwZGF0ZWZhaWxgIGV2ZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBJdCBtYWtlcyBhbiBhc3luYyBjYWxsIHRvIHRoZSBBUEksIHNvIHRoZSByZXN1bHQgaXNuJ3QgYXZhaWxhYmxlIGltbWVkaWF0ZWx5LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgYHRleHRgIHBhcmFtZXRlciBpcyBhbiB1cGRhdGUgcGF5bG9hZCB3aXRoIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBcclxuICAgICAqIHRleHQ6IHtcclxuICAgICAqICAgICBkZWZhdWx0OiAnWCBqdXN0IGludmFkZWQgWVxcJ3MgdmlsbGFnZSEnLFxyXG4gICAgICogICAgIGxvY2FsaXphdGlvbnM6IHtcclxuICAgICAqICAgICAgICAgYXJfQVI6ICdYIFxcdTA2NDFcXHUwNjQyXFx1MDYzNyBcXHUwNjNBXFx1MDYzMlxcdTA2MkEgJyArXHJcbiAgICAgKiAgICAgICAgICdcXHUwNjQyXFx1MDYzMVxcdTA2NEFcXHUwNjI5IFkhJyxcclxuICAgICAqICAgICAgICAgZW5fVVM6ICdYIGp1c3QgaW52YWRlZCBZXFwncyB2aWxsYWdlIScsXHJcbiAgICAgKiAgICAgICAgIGVzX0xBOiAnXFx1MDBBMVggYWNhYmEgZGUgaW52YWRpciBlbCBwdWVibG8gZGUgWSEnLFxyXG4gICAgICogICAgIH1cclxuICAgICAqIH1cclxuICAgICAqIGBgYFxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI3VwZGF0ZUxlYWRlcmJvYXJkXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjdGEgLSBUaGUgY2FsbCB0byBhY3Rpb24gdGV4dC5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0ZXh0IC0gVGhlIHRleHQgb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHRleHR1cmUgdG8gdXNlIGFzIHRoZSBzaGFyZSBpbWFnZS5cclxuICAgICAqIEBwYXJhbSB7PyhzdHJpbmd8aW50ZWdlcil9IGZyYW1lIC0gVGhlIGZyYW1lIG9mIHRoZSB0ZXh0dXJlIHRvIHVzZSBhcyB0aGUgc2hhcmUgaW1hZ2UuIFNldCB0byBgbnVsbGAgaWYgeW91IGRvbid0IHJlcXVpcmUgYSBmcmFtZSwgYnV0IGRvIG5lZWQgdG8gc2V0IHNlc3Npb24gZGF0YS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZSAtIFRoZSB1cGRhdGUgdGVtcGxhdGUga2V5LlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHVwZGF0ZURhdGEgLSBUaGUgdXBkYXRlIGRhdGEgb2JqZWN0IHBheWxvYWQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUxlYWRlcmJvYXJkOiBmdW5jdGlvbiAoY3RhLCB0ZXh0LCBrZXksIGZyYW1lLCB0ZW1wbGF0ZSwgdXBkYXRlRGF0YSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKCdMRUFERVJCT0FSRCcsIGN0YSwgdGV4dCwga2V5LCBmcmFtZSwgdGVtcGxhdGUsIHVwZGF0ZURhdGEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIHVwZGF0ZSBoYW5kbGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI191cGRhdGVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb24gLSBUaGUgdXBkYXRlIGFjdGlvbi5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjdGEgLSBUaGUgY2FsbCB0byBhY3Rpb24gdGV4dC5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0ZXh0IC0gVGhlIHRleHQgb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHRleHR1cmUgdG8gdXNlIGFzIHRoZSBzaGFyZSBpbWFnZS5cclxuICAgICAqIEBwYXJhbSB7PyhzdHJpbmd8aW50ZWdlcil9IGZyYW1lIC0gVGhlIGZyYW1lIG9mIHRoZSB0ZXh0dXJlIHRvIHVzZSBhcyB0aGUgc2hhcmUgaW1hZ2UuIFNldCB0byBgbnVsbGAgaWYgeW91IGRvbid0IHJlcXVpcmUgYSBmcmFtZSwgYnV0IGRvIG5lZWQgdG8gc2V0IHNlc3Npb24gZGF0YS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZSAtIFRoZSB1cGRhdGUgdGVtcGxhdGUga2V5LlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHVwZGF0ZURhdGEgLSBUaGUgdXBkYXRlIGRhdGEgb2JqZWN0IHBheWxvYWQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIF91cGRhdGU6IGZ1bmN0aW9uIChhY3Rpb24sIGN0YSwgdGV4dCwga2V5LCBmcmFtZSwgdGVtcGxhdGUsIHVwZGF0ZURhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrQVBJKCdzaGFyZUFzeW5jJykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjdGEgPT09IHVuZGVmaW5lZCkgeyBjdGEgPSAnJzsgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHRleHQgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGV4dCA9IHtkZWZhdWx0OiB0ZXh0fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh1cGRhdGVEYXRhID09PSB1bmRlZmluZWQpIHsgdXBkYXRlRGF0YSA9IHt9OyB9XHJcblxyXG4gICAgICAgIGlmIChrZXkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgaW1hZ2VEYXRhID0gdGhpcy5nYW1lLnRleHR1cmVzLmdldEJhc2U2NChrZXksIGZyYW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgICBhY3Rpb246IGFjdGlvbixcclxuICAgICAgICAgICAgY3RhOiBjdGEsXHJcbiAgICAgICAgICAgIGltYWdlOiBpbWFnZURhdGEsXHJcbiAgICAgICAgICAgIHRleHQ6IHRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZSxcclxuICAgICAgICAgICAgZGF0YTogdXBkYXRlRGF0YSxcclxuICAgICAgICAgICAgc3RyYXRlZ3k6ICdJTU1FRElBVEUnLFxyXG4gICAgICAgICAgICBub3RpZmljYXRpb246ICdOT19QVVNIJ1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIEZCSW5zdGFudC51cGRhdGVBc3luYyhwYXlsb2FkKS50aGVuKGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCd1cGRhdGUnKTtcclxuXHJcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0KCd1cGRhdGVmYWlsJywgZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlcXVlc3QgdGhhdCB0aGUgY2xpZW50IHN3aXRjaCB0byBhIGRpZmZlcmVudCBJbnN0YW50IEdhbWUuXHJcbiAgICAgKiBcclxuICAgICAqIEl0IG1ha2VzIGFuIGFzeW5jIGNhbGwgdG8gdGhlIEFQSSwgc28gdGhlIHJlc3VsdCBpc24ndCBhdmFpbGFibGUgaW1tZWRpYXRlbHkuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZSBnYW1lIHN3aXRjaGVzIHN1Y2Nlc3NmdWxseSB0aGlzIHBsdWdpbiB3aWxsIGVtaXQgdGhlIGBzd2l0Y2hnYW1lYCBldmVudCBhbmQgdGhlIGNsaWVudCB3aWxsIGxvYWQgdGhlIG5ldyBnYW1lLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGV5IGNhbm5vdCwgaS5lLiBpdCdzIG5vdCBpbiB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgQVBJcywgb3IgdGhlIHJlcXVlc3RcclxuICAgICAqIHdhcyByZWplY3RlZCwgaXQgd2lsbCBlbWl0IGEgYHN3aXRjaGdhbWVmYWlsYCBldmVudCBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI3N3aXRjaEdhbWVcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGFwcElEIC0gVGhlIEFwcGxpY2F0aW9uIElEIG9mIHRoZSBJbnN0YW50IEdhbWUgdG8gc3dpdGNoIHRvLiBUaGUgYXBwbGljYXRpb24gbXVzdCBiZSBhbiBJbnN0YW50IEdhbWUsIGFuZCBtdXN0IGJlbG9uZyB0byB0aGUgc2FtZSBidXNpbmVzcyBhcyB0aGUgY3VycmVudCBnYW1lLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtkYXRhXSAtIEFuIG9wdGlvbmFsIGRhdGEgcGF5bG9hZC4gVGhpcyB3aWxsIGJlIHNldCBhcyB0aGUgZW50cnlwb2ludCBkYXRhIGZvciB0aGUgZ2FtZSBiZWluZyBzd2l0Y2hlZCB0by4gTXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMTAwMCBjaGFyYWN0ZXJzIHdoZW4gc3RyaW5naWZpZWQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHN3aXRjaEdhbWU6IGZ1bmN0aW9uIChhcHBJRCwgZGF0YSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tBUEkoJ3N3aXRjaEdhbWVBc3luYycpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGF0YSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0ZXN0ID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGVzdC5sZW5ndGggPiAxMDAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1N3aXRjaCBHYW1lIGRhdGEgdG9vIGxvbmcuIE1heCAxMDAwIGNoYXJzLicpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIEZCSW5zdGFudC5zd2l0Y2hHYW1lQXN5bmMoYXBwSUQsIGRhdGEpLnRoZW4oZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLmVtaXQoJ3N3aXRjaGdhbWUnLCBhcHBJRCk7XHJcblxyXG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgnc3dpdGNoZ2FtZWZhaWwnLCBlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvbXB0cyB0aGUgdXNlciB0byBjcmVhdGUgYSBzaG9ydGN1dCB0byB0aGUgZ2FtZSBpZiB0aGV5IGFyZSBlbGlnaWJsZSB0by5cclxuICAgICAqIENhbiBvbmx5IGJlIGNhbGxlZCBvbmNlIHBlciBzZXNzaW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBJdCBtYWtlcyBhbiBhc3luYyBjYWxsIHRvIHRoZSBBUEksIHNvIHRoZSByZXN1bHQgaXNuJ3QgYXZhaWxhYmxlIGltbWVkaWF0ZWx5LlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgdXNlciBjaG9vc2UgdG8gY3JlYXRlIGEgc2hvcnRjdXQgdGhpcyBwbHVnaW4gd2lsbCBlbWl0IHRoZSBgc2hvcnRjdXRjcmVhdGVkYCBldmVudC5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhleSBjYW5ub3QsIGkuZS4gaXQncyBub3QgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIEFQSXMsIG9yIHRoZSByZXF1ZXN0XHJcbiAgICAgKiB3YXMgcmVqZWN0ZWQsIGl0IHdpbGwgZW1pdCBhIGBzaG9ydGN1dGNyZWF0ZWRmYWlsYCBldmVudCBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2NyZWF0ZVNob3J0Y3V0XHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZVNob3J0Y3V0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIEZCSW5zdGFudC5jYW5DcmVhdGVTaG9ydGN1dEFzeW5jKCkudGhlbihmdW5jdGlvbiAoY2FuQ3JlYXRlU2hvcnRjdXQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoY2FuQ3JlYXRlU2hvcnRjdXQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIEZCSW5zdGFudC5jcmVhdGVTaG9ydGN1dEFzeW5jKCkudGhlbihmdW5jdGlvbiAoKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ3Nob3J0Y3V0Y3JlYXRlZCcpO1xyXG5cclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ3Nob3J0Y3V0ZmFpbGVkJywgZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBRdWl0cyB0aGUgZ2FtZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNxdWl0XHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKi9cclxuICAgIHF1aXQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgRkJJbnN0YW50LnF1aXQoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2cgYW4gYXBwIGV2ZW50IHdpdGggRkIgQW5hbHl0aWNzLlxyXG4gICAgICogXHJcbiAgICAgKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS9kb2NzL2phdmFzY3JpcHQvcmVmZXJlbmNlL3YyLjgjYXBwX2V2ZW50cyBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IEZCIEFuYWx5dGljcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNsb2dcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBldmVudC4gTXVzdCBiZSAyIHRvIDQwIGNoYXJhY3RlcnMsIGFuZCBjYW4gb25seSBjb250YWluICdfJywgJy0nLCAnICcsIGFuZCBhbHBoYW51bWVyaWMgY2hhcmFjdGVycy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdmFsdWVdIC0gQW4gb3B0aW9uYWwgbnVtZXJpYyB2YWx1ZSB0aGF0IEZCIEFuYWx5dGljcyBjYW4gY2FsY3VsYXRlIGEgc3VtIHdpdGguXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gLSBBbiBvcHRpb25hbCBvYmplY3QgdGhhdCBjYW4gY29udGFpbiB1cCB0byAyNSBrZXktdmFsdWUgcGFpcnMgdG8gYmUgbG9nZ2VkIHdpdGggdGhlIGV2ZW50LiBLZXlzIG11c3QgYmUgMiB0byA0MCBjaGFyYWN0ZXJzLCBhbmQgY2FuIG9ubHkgY29udGFpbiAnXycsICctJywgJyAnLCBhbmQgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuIFZhbHVlcyBtdXN0IGJlIGxlc3MgdGhhbiAxMDAgY2hhcmFjdGVycyBpbiBsZW5ndGguXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGxvZzogZnVuY3Rpb24gKG5hbWUsIHZhbHVlLCBwYXJhbXMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrQVBJKCdsb2dFdmVudCcpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGFyYW1zID09PSB1bmRlZmluZWQpIHsgcGFyYW1zID0ge307IH1cclxuXHJcbiAgICAgICAgaWYgKG5hbWUubGVuZ3RoID49IDIgJiYgbmFtZS5sZW5ndGggPD0gNDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBGQkluc3RhbnQubG9nRXZlbnQobmFtZSwgcGFyc2VGbG9hdCh2YWx1ZSksIHBhcmFtcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBdHRlbXB0IHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhbiBpbnRlcnN0aXRpYWwgYWQuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZSBpbnN0YW5jZSBpcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseSB0aGVuIHRoZSBhZCBpcyBwcmVsb2FkZWQgcmVhZHkgZm9yIGRpc3BsYXkgaW4tZ2FtZSB2aWEgdGhlIG1ldGhvZCBgc2hvd0FkKClgLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgYWQgbG9hZHMgaXQgd2lsbCBlbWl0IHRoZSBgYWRsb2FkZWRgIGV2ZW50LCBwYXNzaW5nIHRoZSBBZEluc3RhbmNlIGFzIHRoZSBvbmx5IHBhcmFtZXRlci5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIGFkIGNhbm5vdCBiZSBkaXNwbGF5ZWQgYmVjYXVzZSB0aGVyZSB3YXMgbm8gaW52ZW50b3J5IHRvIGZpbGwgaXQsIGl0IHdpbGwgZW1pdCB0aGUgYGFkc25vZmlsbGAgZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jcHJlbG9hZEFkc1xyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8c3RyaW5nW10pfSBwbGFjZW1lbnRJRCAtIFRoZSBhZCBwbGFjZW1lbnQgSUQsIG9yIGFuIGFycmF5IG9mIElEcywgYXMgY3JlYXRlZCBpbiB5b3VyIEF1ZGllbmNlIE5ldHdvcmsgc2V0dGluZ3Mgd2l0aGluIEZhY2Vib29rLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBwcmVsb2FkQWRzOiBmdW5jdGlvbiAocGxhY2VtZW50SUQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrQVBJKCdnZXRJbnRlcnN0aXRpYWxBZEFzeW5jJykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShwbGFjZW1lbnRJRCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwbGFjZW1lbnRJRCA9IFsgcGxhY2VtZW50SUQgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIHZhciB0b3RhbCA9IDA7XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmFkcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5hZHNbaV0uc2hvd24pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRvdGFsKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0b3RhbCArIHBsYWNlbWVudElELmxlbmd0aCA+PSAzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUb28gbWFueSBBZEluc3RhbmNlcy4gU2hvdyBhbiBhZCBiZWZvcmUgbG9hZGluZyBtb3JlJyk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBsYWNlbWVudElELmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGlkID0gcGxhY2VtZW50SURbaV07XHJcbiAgICAgICAgICAgIHZhciBkYXRhO1xyXG5cclxuICAgICAgICAgICAgRkJJbnN0YW50LmdldEludGVyc3RpdGlhbEFkQXN5bmMoaWQpLnRoZW4oZnVuY3Rpb24gKGludGVyc3RpdGlhbClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGF0YSA9IGludGVyc3RpdGlhbDtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJzdGl0aWFsLmxvYWRBc3luYygpO1xyXG5cclxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYWQgPSBBZEluc3RhbmNlKGlkLCBkYXRhLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgX3RoaXMuYWRzLnB1c2goYWQpO1xyXG5cclxuICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2FkbG9hZGVkJywgYWQpO1xyXG5cclxuICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmIChlLmNvZGUgPT09ICdBRFNfTk9fRklMTCcpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuZW1pdCgnYWRzbm9maWxsJywgaWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZS5jb2RlID09PSAnQURTX0ZSRVFVRU5UX0xPQUQnKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2Fkc2ZyZXF1ZW50bG9hZCcsIGlkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXR0ZW1wdCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgYW4gcmV3YXJkZWQgdmlkZW8gYWQuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZSBpbnN0YW5jZSBpcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseSB0aGVuIHRoZSBhZCBpcyBwcmVsb2FkZWQgcmVhZHkgZm9yIGRpc3BsYXkgaW4tZ2FtZSB2aWEgdGhlIG1ldGhvZCBgc2hvd1ZpZGVvKClgLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgYWQgbG9hZHMgaXQgd2lsbCBlbWl0IHRoZSBgYWRsb2FkZWRgIGV2ZW50LCBwYXNzaW5nIHRoZSBBZEluc3RhbmNlIGFzIHRoZSBvbmx5IHBhcmFtZXRlci5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIGFkIGNhbm5vdCBiZSBkaXNwbGF5ZWQgYmVjYXVzZSB0aGVyZSB3YXMgbm8gaW52ZW50b3J5IHRvIGZpbGwgaXQsIGl0IHdpbGwgZW1pdCB0aGUgYGFkc25vZmlsbGAgZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jcHJlbG9hZFZpZGVvQWRzXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xzdHJpbmdbXSl9IHBsYWNlbWVudElEIC0gVGhlIGFkIHBsYWNlbWVudCBJRCwgb3IgYW4gYXJyYXkgb2YgSURzLCBhcyBjcmVhdGVkIGluIHlvdXIgQXVkaWVuY2UgTmV0d29yayBzZXR0aW5ncyB3aXRoaW4gRmFjZWJvb2suXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4gaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHByZWxvYWRWaWRlb0FkczogZnVuY3Rpb24gKHBsYWNlbWVudElEKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0FQSSgnZ2V0UmV3YXJkZWRWaWRlb0FzeW5jJykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShwbGFjZW1lbnRJRCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwbGFjZW1lbnRJRCA9IFsgcGxhY2VtZW50SUQgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIHZhciB0b3RhbCA9IDA7XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmFkcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5hZHNbaV0uc2hvd24pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRvdGFsKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0b3RhbCArIHBsYWNlbWVudElELmxlbmd0aCA+PSAzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUb28gbWFueSBBZEluc3RhbmNlcy4gU2hvdyBhbiBhZCBiZWZvcmUgbG9hZGluZyBtb3JlJyk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBsYWNlbWVudElELmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGlkID0gcGxhY2VtZW50SURbaV07XHJcbiAgICAgICAgICAgIHZhciBkYXRhO1xyXG5cclxuICAgICAgICAgICAgRkJJbnN0YW50LmdldFJld2FyZGVkVmlkZW9Bc3luYyhpZCkudGhlbihmdW5jdGlvbiAocmV3YXJkKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkYXRhID0gcmV3YXJkO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXdhcmQubG9hZEFzeW5jKCk7XHJcblxyXG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBhZCA9IEFkSW5zdGFuY2UoaWQsIGRhdGEsIHRydWUpO1xyXG5cclxuICAgICAgICAgICAgICAgIF90aGlzLmFkcy5wdXNoKGFkKTtcclxuXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KCdhZGxvYWRlZCcsIGFkKTtcclxuXHJcbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZS5jb2RlID09PSAnQURTX05PX0ZJTEwnKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2Fkc25vZmlsbCcsIGlkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUuY29kZSA9PT0gJ0FEU19GUkVRVUVOVF9MT0FEJylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KCdhZHNmcmVxdWVudGxvYWQnLCBpZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3BsYXlzIGEgcHJldmlvdXNseSBsb2FkZWQgaW50ZXJzdGl0aWFsIGFkLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgYWQgaXMgc3VjY2Vzc2Z1bGx5IGRpc3BsYXllZCB0aGlzIHBsdWdpbiB3aWxsIGVtaXQgdGhlIGBhZGZpbmlzaGVkYCBldmVudCwgd2l0aCB0aGUgQWRJbnN0YW5jZSBvYmplY3QgYXMgaXRzIHBhcmFtZXRlci5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIGFkIGNhbm5vdCBiZSBkaXNwbGF5ZWQsIGl0IHdpbGwgZW1pdCB0aGUgYGFkc25vdGxvYWRlZGAgZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jc2hvd0FkXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwbGFjZW1lbnRJRCAtIFRoZSBhZCBwbGFjZW1lbnQgSUQgdG8gZGlzcGxheS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBGYWNlYm9vayBJbnN0YW50IEdhbWVzIFBsdWdpbiBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2hvd0FkOiBmdW5jdGlvbiAocGxhY2VtZW50SUQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFkcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBhZCA9IHRoaXMuYWRzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFkLnBsYWNlbWVudElEID09PSBwbGFjZW1lbnRJRCAmJiAhYWQuc2hvd24pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGFkLmluc3RhbmNlLnNob3dBc3luYygpLnRoZW4oZnVuY3Rpb24gKClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBhZC5zaG93biA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2FkZmluaXNoZWQnLCBhZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUuY29kZSA9PT0gJ0FEU19OT1RfTE9BREVEJylcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2Fkc25vdGxvYWRlZCcsIGFkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS5jb2RlID09PSAnUkFURV9MSU1JVEVEJylcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2FkcmF0ZWxpbWl0ZWQnLCBhZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2Fkc2hvd2Vycm9yJywgZSwgYWQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3BsYXlzIGEgcHJldmlvdXNseSBsb2FkZWQgaW50ZXJzdGl0aWFsIHZpZGVvIGFkLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgYWQgaXMgc3VjY2Vzc2Z1bGx5IGRpc3BsYXllZCB0aGlzIHBsdWdpbiB3aWxsIGVtaXQgdGhlIGBhZGZpbmlzaGVkYCBldmVudCwgd2l0aCB0aGUgQWRJbnN0YW5jZSBvYmplY3QgYXMgaXRzIHBhcmFtZXRlci5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIGFkIGNhbm5vdCBiZSBkaXNwbGF5ZWQsIGl0IHdpbGwgZW1pdCB0aGUgYGFkc25vdGxvYWRlZGAgZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4jc2hvd1ZpZGVvXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwbGFjZW1lbnRJRCAtIFRoZSBhZCBwbGFjZW1lbnQgSUQgdG8gZGlzcGxheS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBGYWNlYm9vayBJbnN0YW50IEdhbWVzIFBsdWdpbiBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2hvd1ZpZGVvOiBmdW5jdGlvbiAocGxhY2VtZW50SUQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFkcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBhZCA9IHRoaXMuYWRzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFkLnBsYWNlbWVudElEID09PSBwbGFjZW1lbnRJRCAmJiBhZC52aWRlbyAmJiAhYWQuc2hvd24pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGFkLmluc3RhbmNlLnNob3dBc3luYygpLnRoZW4oZnVuY3Rpb24gKClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBhZC5zaG93biA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2FkZmluaXNoZWQnLCBhZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUuY29kZSA9PT0gJ0FEU19OT1RfTE9BREVEJylcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2Fkc25vdGxvYWRlZCcsIGFkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS5jb2RlID09PSAnUkFURV9MSU1JVEVEJylcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2FkcmF0ZWxpbWl0ZWQnLCBhZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2Fkc2hvd2Vycm9yJywgZSwgYWQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEF0dGVtcHRzIHRvIG1hdGNoIHRoZSBjdXJyZW50IHBsYXllciB3aXRoIG90aGVyIHVzZXJzIGxvb2tpbmcgZm9yIHBlb3BsZSB0byBwbGF5IHdpdGguXHJcbiAgICAgKiBJZiBzdWNjZXNzZnVsLCBhIG5ldyBNZXNzZW5nZXIgZ3JvdXAgdGhyZWFkIHdpbGwgYmUgY3JlYXRlZCBjb250YWluaW5nIHRoZSBtYXRjaGVkIHBsYXllcnMgYW5kIHRoZSBwbGF5ZXIgd2lsbFxyXG4gICAgICogYmUgY29udGV4dCBzd2l0Y2hlZCB0byB0aGF0IHRocmVhZC4gVGhpcyBwbHVnaW4gd2lsbCBhbHNvIGRpc3BhdGNoIHRoZSBgbWF0Y2hwbGF5ZXJgIGV2ZW50LCBjb250YWluaW5nIHRoZSBuZXcgY29udGV4dCBJRCBhbmQgVHlwZS5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGRlZmF1bHQgbWluaW11bSBhbmQgbWF4aW11bSBudW1iZXIgb2YgcGxheWVycyBpbiBvbmUgbWF0Y2hlZCB0aHJlYWQgYXJlIDIgYW5kIDIwIHJlc3BlY3RpdmVseSxcclxuICAgICAqIGRlcGVuZGluZyBvbiBob3cgbWFueSBwbGF5ZXJzIGFyZSB0cnlpbmcgdG8gZ2V0IG1hdGNoZWQgYXJvdW5kIHRoZSBzYW1lIHRpbWUuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSB2YWx1ZXMgY2FuIGJlIGNoYW5nZWQgaW4gYGZiYXBwLWNvbmZpZy5qc29uYC4gU2VlIHRoZSBCdW5kbGUgQ29uZmlnIGRvY3VtZW50YXRpb24gZm9yIGRvY3VtZW50YXRpb24gYWJvdXQgYGZiYXBwLWNvbmZpZy5qc29uYC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiNtYXRjaFBsYXllclxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW21hdGNoVGFnXSAtIE9wdGlvbmFsIGV4dHJhIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwbGF5ZXIgdXNlZCB0byBncm91cCB0aGVtIHdpdGggc2ltaWxhciBwbGF5ZXJzLiBQbGF5ZXJzIHdpbGwgb25seSBiZSBncm91cGVkIHdpdGggb3RoZXIgcGxheWVycyB3aXRoIGV4YWN0bHkgdGhlIHNhbWUgdGFnLiBUaGUgdGFnIG11c3Qgb25seSBpbmNsdWRlIGxldHRlcnMsIG51bWJlcnMsIGFuZCB1bmRlcnNjb3JlcyBhbmQgYmUgMTAwIGNoYXJhY3RlcnMgb3IgbGVzcyBpbiBsZW5ndGguXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzd2l0Y2hJbW1lZGlhdGVseT1mYWxzZV0gLSBPcHRpb25hbCBleHRyYSBwYXJhbWV0ZXIgdGhhdCBzcGVjaWZpZXMgd2hldGhlciB0aGUgcGxheWVyIHNob3VsZCBiZSBpbW1lZGlhdGVseSBzd2l0Y2hlZCB0byB0aGUgbmV3IGNvbnRleHQgd2hlbiBhIG1hdGNoIGlzIGZvdW5kLiBCeSBkZWZhdWx0IHRoaXMgd2lsbCBiZSBmYWxzZSB3aGljaCB3aWxsIG1lYW4gdGhlIHBsYXllciBuZWVkcyBleHBsaWNpdGx5IHByZXNzIHBsYXkgYWZ0ZXIgYmVpbmcgbWF0Y2hlZCB0byBzd2l0Y2ggdG8gdGhlIG5ldyBjb250ZXh0LlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBtYXRjaFBsYXllcjogZnVuY3Rpb24gKG1hdGNoVGFnLCBzd2l0Y2hJbW1lZGlhdGVseSlcclxuICAgIHtcclxuICAgICAgICBpZiAobWF0Y2hUYWcgPT09IHVuZGVmaW5lZCkgeyBtYXRjaFRhZyA9IG51bGw7IH1cclxuICAgICAgICBpZiAoc3dpdGNoSW1tZWRpYXRlbHkgPT09IHVuZGVmaW5lZCkgeyBzd2l0Y2hJbW1lZGlhdGVseSA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0FQSSgnbWF0Y2hQbGF5ZXJBc3luYycpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICBGQkluc3RhbnQubWF0Y2hQbGF5ZXJBc3luYyhtYXRjaFRhZywgc3dpdGNoSW1tZWRpYXRlbHkpLnRoZW4oZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLmdldElEKCk7XHJcbiAgICAgICAgICAgIF90aGlzLmdldFR5cGUoKTtcclxuXHJcbiAgICAgICAgICAgIF90aGlzLmVtaXQoJ21hdGNocGxheWVyJywgX3RoaXMuY29udGV4dElELCBfdGhpcy5jb250ZXh0VHlwZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZldGNoIGEgc3BlY2lmaWMgbGVhZGVyYm9hcmQgYmVsb25naW5nIHRvIHRoaXMgSW5zdGFudCBHYW1lLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZGF0YSBpcyByZXF1ZXN0ZWQgaW4gYW4gYXN5bmMgY2FsbCwgc28gdGhlIHJlc3VsdCBpc24ndCBhdmFpbGFibGUgaW1tZWRpYXRlbHkuXHJcbiAgICAgKiBcclxuICAgICAqIFdoZW4gdGhlIGNhbGwgY29tcGxldGVzIHRoZSBgZ2V0bGVhZGVyYm9hcmRgIGV2ZW50IHdpbGwgYmUgZW1pdHRlZCBhbG9uZyB3aXRoIGEgTGVhZGVyYm9hcmQgb2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2dldExlYWRlcmJvYXJkXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGxlYWRlcmJvYXJkLiBFYWNoIGxlYWRlcmJvYXJkIGZvciBhbiBJbnN0YW50IEdhbWUgbXVzdCBoYXZlIGl0cyBvd24gZGlzdGluY3QgbmFtZS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBGYWNlYm9vayBJbnN0YW50IEdhbWVzIFBsdWdpbiBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgZ2V0TGVhZGVyYm9hcmQ6IGZ1bmN0aW9uIChuYW1lKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0FQSSgnZ2V0TGVhZGVyYm9hcmRBc3luYycpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICBGQkluc3RhbnQuZ2V0TGVhZGVyYm9hcmRBc3luYyhuYW1lKS50aGVuKGZ1bmN0aW9uIChkYXRhKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGxlYWRlcmJvYXJkID0gbmV3IExlYWRlcmJvYXJkKF90aGlzLCBkYXRhKTtcclxuXHJcbiAgICAgICAgICAgIF90aGlzLmxlYWRlcmJvYXJkc1tuYW1lXSA9IGxlYWRlcmJvYXJkO1xyXG5cclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgnZ2V0bGVhZGVyYm9hcmQnLCBsZWFkZXJib2FyZCk7XHJcblxyXG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBRdWl0cyB0aGUgRmFjZWJvb2sgQVBJIGFuZCB0aGVuIGRlc3Ryb3lzIHRoaXMgcGx1Z2luLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzUGx1Z2luI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBGQkluc3RhbnQucXVpdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEuZGVzdHJveSgpO1xyXG5cclxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpO1xyXG5cclxuICAgICAgICB0aGlzLmNhdGFsb2cgPSBbXTtcclxuICAgICAgICB0aGlzLnB1cmNoYXNlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMubGVhZGVyYm9hcmRzID0gW107XHJcbiAgICAgICAgdGhpcy5hZHMgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5nYW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBGYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/fbinstant/src/FacebookInstantGamesPlugin.js\n");
/***/ }),
/***/ "./node_modules/phaser/plugins/fbinstant/src/Leaderboard.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/plugins/fbinstant/src/Leaderboard.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2018 Photon Storm Ltd.\r\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../src/utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar LeaderboardScore = __webpack_require__(/*! ./LeaderboardScore */ \"./node_modules/phaser/plugins/fbinstant/src/LeaderboardScore.js\");\r\n\r\n/**\r\n * @classdesc\r\n * This class represents one single Leaderboard that belongs to a Facebook Instant Game.\r\n * \r\n * You do not need to instantiate this class directly, it will be created when you use the\r\n * `getLeaderboard()` method of the main plugin.\r\n *\r\n * @class FacebookInstantGamesLeaderboard\r\n * @memberOf Phaser\r\n * @constructor\r\n * @extends Phaser.Events.EventEmitter\r\n * @since 3.13.0\r\n * \r\n * @param {Phaser.FacebookInstantGamesPlugin} plugin - A reference to the Facebook Instant Games Plugin.\r\n * @param {any} data - An Instant Game leaderboard instance.\r\n */\r\nvar Leaderboard = new Class({\r\n\r\n Extends: EventEmitter,\r\n\r\n initialize:\r\n\r\n function Leaderboard (plugin, data)\r\n {\r\n EventEmitter.call(this);\r\n\r\n /**\r\n * A reference to the Facebook Instant Games Plugin.\r\n *\r\n * @name Phaser.FacebookInstantGamesLeaderboard#plugin\r\n * @type {Phaser.FacebookInstantGamesPlugin}\r\n * @since 3.13.0\r\n */\r\n this.plugin = plugin;\r\n\r\n /**\r\n * An Instant Game leaderboard instance.\r\n *\r\n * @name Phaser.FacebookInstantGamesLeaderboard#ref\r\n * @type {any}\r\n * @since 3.13.0\r\n */\r\n this.ref = data;\r\n\r\n /**\r\n * The name of the leaderboard.\r\n *\r\n * @name Phaser.FacebookInstantGamesLeaderboard#name\r\n * @type {string}\r\n * @since 3.13.0\r\n */\r\n this.name = data.getName();\r\n\r\n /**\r\n * The ID of the context that the leaderboard is associated with, or null if the leaderboard is not tied to a particular context.\r\n *\r\n * @name Phaser.FacebookInstantGamesLeaderboard#contextID\r\n * @type {string}\r\n * @since 3.13.0\r\n */\r\n this.contextID = data.getContextID();\r\n\r\n /**\r\n * The total number of player entries in the leaderboard.\r\n * This value defaults to zero. Populate it via the `getEntryCount()` method.\r\n *\r\n * @name Phaser.FacebookInstantGamesLeaderboard#entryCount\r\n * @type {integer}\r\n * @since 3.13.0\r\n */\r\n this.entryCount = 0;\r\n\r\n /**\r\n * The players score object.\r\n * This value defaults to `null`. Populate it via the `getPlayerScore()` method.\r\n *\r\n * @name Phaser.FacebookInstantGamesLeaderboard#playerScore\r\n * @type {LeaderboardScore}\r\n * @since 3.13.0\r\n */\r\n this.playerScore = null;\r\n\r\n /**\r\n * The scores in the Leaderboard from the currently requested range.\r\n * This value defaults to an empty array. Populate it via the `getScores()` method.\r\n * The contents of this array are reset each time `getScores()` is called.\r\n *\r\n * @name Phaser.FacebookInstantGamesLeaderboard#scores\r\n * @type {LeaderboardScore[]}\r\n * @since 3.13.0\r\n */\r\n this.scores = [];\r\n\r\n this.getEntryCount();\r\n },\r\n\r\n /**\r\n * Fetches the total number of player entries in the leaderboard.\r\n * \r\n * The data is requested in an async call, so the result isn't available immediately.\r\n * \r\n * When the call completes this Leaderboard will emit the `getentrycount` event along with the count and name of the Leaderboard.\r\n *\r\n * @method Phaser.FacebookInstantGamesLeaderboard#getEntryCount\r\n * @since 3.13.0\r\n * \r\n * @return {this} This Leaderboard instance.\r\n */\r\n getEntryCount: function ()\r\n {\r\n var _this = this;\r\n\r\n this.ref.getEntryCountAsync().then(function (count)\r\n {\r\n _this.entryCount = count;\r\n\r\n _this.emit('getentrycount', count, _this.name);\r\n\r\n }).catch(function (e)\r\n {\r\n console.warn(e);\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Updates the player's score. If the player has an existing score, the old score will only be replaced if the new score is better than it.\r\n * NOTE: If the leaderboard is associated with a specific context, the game must be in that context to set a score for the player.\r\n * \r\n * The data is requested in an async call, so the result isn't available immediately.\r\n * \r\n * When the call completes this Leaderboard will emit the `setscore` event along with the LeaderboardScore object and the name of the Leaderboard.\r\n * \r\n * If the save fails the event will send `null` as the score value.\r\n *\r\n * @method Phaser.FacebookInstantGamesLeaderboard#setScore\r\n * @since 3.13.0\r\n * \r\n * @param {integer} score - The new score for the player. Must be a 64-bit integer number.\r\n * @param {(string|any)} [data] - Metadata to associate with the stored score. Must be less than 2KB in size. If an object is given it will be passed to `JSON.stringify`.\r\n * \r\n * @return {this} This Leaderboard instance.\r\n */\r\n setScore: function (score, data)\r\n {\r\n if (data === undefined) { data = ''; }\r\n\r\n if (typeof data === 'object')\r\n {\r\n data = JSON.stringify(data);\r\n }\r\n\r\n var _this = this;\r\n\r\n this.ref.setScoreAsync(score, data).then(function (entry)\r\n {\r\n if (entry)\r\n {\r\n var score = LeaderboardScore(entry);\r\n\r\n _this.playerScore = score;\r\n \r\n _this.emit('setscore', score, _this.name);\r\n }\r\n else\r\n {\r\n _this.emit('setscore', null, _this.name);\r\n }\r\n\r\n }).catch(function (e)\r\n {\r\n console.warn(e);\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Gets the players leaderboard entry and stores it in the `playerScore` property.\r\n * \r\n * The data is requested in an async call, so the result isn't available immediately.\r\n * \r\n * When the call completes this Leaderboard will emit the `getplayerscore` event along with the score and the name of the Leaderboard.\r\n * \r\n * If the player has not yet saved a score, the event will send `null` as the score value, and `playerScore` will be set to `null` as well.\r\n *\r\n * @method Phaser.FacebookInstantGamesLeaderboard#getPlayerScore\r\n * @since 3.13.0\r\n * \r\n * @return {this} This Leaderboard instance.\r\n */\r\n getPlayerScore: function ()\r\n {\r\n var _this = this;\r\n\r\n this.ref.getPlayerEntryAsync().then(function (entry)\r\n {\r\n if (entry)\r\n {\r\n var score = LeaderboardScore(entry);\r\n\r\n _this.playerScore = score;\r\n \r\n _this.emit('getplayerscore', score, _this.name);\r\n }\r\n else\r\n {\r\n _this.emit('getplayerscore', null, _this.name);\r\n }\r\n\r\n }).catch(function (e)\r\n {\r\n console.warn(e);\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Retrieves a set of leaderboard entries, ordered by score ranking in the leaderboard.\r\n * \r\n * The data is requested in an async call, so the result isn't available immediately.\r\n * \r\n * When the call completes this Leaderboard will emit the `getscores` event along with an array of LeaderboardScore entries and the name of the Leaderboard.\r\n *\r\n * @method Phaser.FacebookInstantGamesLeaderboard#getScores\r\n * @since 3.13.0\r\n * \r\n * @param {integer} [count=10] - The number of entries to attempt to fetch from the leaderboard. Currently, up to a maximum of 100 entries may be fetched per query.\r\n * @param {integer} [offset=0] - The offset from the top of the leaderboard that entries will be fetched from.\r\n * \r\n * @return {this} This Leaderboard instance.\r\n */\r\n getScores: function (count, offset)\r\n {\r\n if (count === undefined) { count = 10; }\r\n if (offset === undefined) { offset = 0; }\r\n\r\n var _this = this;\r\n\r\n this.ref.getEntriesAsync(count, offset).then(function (entries)\r\n {\r\n _this.scores = [];\r\n\r\n entries.forEach(function (entry)\r\n {\r\n _this.scores.push(LeaderboardScore(entry));\r\n });\r\n\r\n _this.emit('getscores', _this.scores, _this.name);\r\n\r\n }).catch(function (e)\r\n {\r\n console.warn(e);\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Retrieves a set of leaderboard entries, based on the current player's connected players (including the current player), ordered by local rank within the set of connected players.\r\n * \r\n * The data is requested in an async call, so the result isn't available immediately.\r\n * \r\n * When the call completes this Leaderboard will emit the `getconnectedscores` event along with an array of LeaderboardScore entries and the name of the Leaderboard.\r\n *\r\n * @method Phaser.FacebookInstantGamesLeaderboard#getConnectedScores\r\n * @since 3.16.0\r\n * \r\n * @return {this} This Leaderboard instance.\r\n */\r\n getConnectedScores: function ()\r\n {\r\n var _this = this;\r\n\r\n this.ref.getConnectedPlayerEntriesAsync().then(function (entries)\r\n {\r\n _this.scores = [];\r\n\r\n entries.forEach(function (entry)\r\n {\r\n _this.scores.push(LeaderboardScore(entry));\r\n });\r\n\r\n _this.emit('getconnectedscores', _this.scores, _this.name);\r\n\r\n }).catch(function (e)\r\n {\r\n console.warn(e);\r\n });\r\n\r\n return this;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Leaderboard;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvZmJpbnN0YW50L3NyYy9MZWFkZXJib2FyZC5qcz8yYTRjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsMEVBQTBCO0FBQzlDLG1CQUFtQixtQkFBTyxDQUFDLDREQUFlO0FBQzFDLHVCQUF1QixtQkFBTyxDQUFDLDJGQUFvQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGtDQUFrQztBQUM3QyxXQUFXLElBQUk7QUFDZjtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLGFBQWE7QUFDNUI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsV0FBVzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxZQUFZO0FBQzlDLG1DQUFtQyxZQUFZOztBQUUvQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvcGx1Z2lucy9mYmluc3RhbnQvc3JjL0xlYWRlcmJvYXJkLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOCBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2Jsb2IvbWFzdGVyL2xpY2Vuc2UudHh0fE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3NyYy91dGlscy9DbGFzcycpO1xyXG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xyXG52YXIgTGVhZGVyYm9hcmRTY29yZSA9IHJlcXVpcmUoJy4vTGVhZGVyYm9hcmRTY29yZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhpcyBjbGFzcyByZXByZXNlbnRzIG9uZSBzaW5nbGUgTGVhZGVyYm9hcmQgdGhhdCBiZWxvbmdzIHRvIGEgRmFjZWJvb2sgSW5zdGFudCBHYW1lLlxyXG4gKiBcclxuICogWW91IGRvIG5vdCBuZWVkIHRvIGluc3RhbnRpYXRlIHRoaXMgY2xhc3MgZGlyZWN0bHksIGl0IHdpbGwgYmUgY3JlYXRlZCB3aGVuIHlvdSB1c2UgdGhlXHJcbiAqIGBnZXRMZWFkZXJib2FyZCgpYCBtZXRob2Qgb2YgdGhlIG1haW4gcGx1Z2luLlxyXG4gKlxyXG4gKiBAY2xhc3MgRmFjZWJvb2tJbnN0YW50R2FtZXNMZWFkZXJib2FyZFxyXG4gKiBAbWVtYmVyT2YgUGhhc2VyXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlclxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbn0gcGx1Z2luIC0gQSByZWZlcmVuY2UgdG8gdGhlIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luLlxyXG4gKiBAcGFyYW0ge2FueX0gZGF0YSAtIEFuIEluc3RhbnQgR2FtZSBsZWFkZXJib2FyZCBpbnN0YW5jZS5cclxuICovXHJcbnZhciBMZWFkZXJib2FyZCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogRXZlbnRFbWl0dGVyLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gTGVhZGVyYm9hcmQgKHBsdWdpbiwgZGF0YSlcclxuICAgIHtcclxuICAgICAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIEZhY2Vib29rIEluc3RhbnQgR2FtZXMgUGx1Z2luLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzTGVhZGVyYm9hcmQjcGx1Z2luXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIEluc3RhbnQgR2FtZSBsZWFkZXJib2FyZCBpbnN0YW5jZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc0xlYWRlcmJvYXJkI3JlZlxyXG4gICAgICAgICAqIEB0eXBlIHthbnl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVmID0gZGF0YTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG5hbWUgb2YgdGhlIGxlYWRlcmJvYXJkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzTGVhZGVyYm9hcmQjbmFtZVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubmFtZSA9IGRhdGEuZ2V0TmFtZSgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgSUQgb2YgdGhlIGNvbnRleHQgdGhhdCB0aGUgbGVhZGVyYm9hcmQgaXMgYXNzb2NpYXRlZCB3aXRoLCBvciBudWxsIGlmIHRoZSBsZWFkZXJib2FyZCBpcyBub3QgdGllZCB0byBhIHBhcnRpY3VsYXIgY29udGV4dC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc0xlYWRlcmJvYXJkI2NvbnRleHRJRFxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY29udGV4dElEID0gZGF0YS5nZXRDb250ZXh0SUQoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRvdGFsIG51bWJlciBvZiBwbGF5ZXIgZW50cmllcyBpbiB0aGUgbGVhZGVyYm9hcmQuXHJcbiAgICAgICAgICogVGhpcyB2YWx1ZSBkZWZhdWx0cyB0byB6ZXJvLiBQb3B1bGF0ZSBpdCB2aWEgdGhlIGBnZXRFbnRyeUNvdW50KClgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc0xlYWRlcmJvYXJkI2VudHJ5Q291bnRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5lbnRyeUNvdW50ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHBsYXllcnMgc2NvcmUgb2JqZWN0LlxyXG4gICAgICAgICAqIFRoaXMgdmFsdWUgZGVmYXVsdHMgdG8gYG51bGxgLiBQb3B1bGF0ZSBpdCB2aWEgdGhlIGBnZXRQbGF5ZXJTY29yZSgpYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNMZWFkZXJib2FyZCNwbGF5ZXJTY29yZVxyXG4gICAgICAgICAqIEB0eXBlIHtMZWFkZXJib2FyZFNjb3JlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBsYXllclNjb3JlID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHNjb3JlcyBpbiB0aGUgTGVhZGVyYm9hcmQgZnJvbSB0aGUgY3VycmVudGx5IHJlcXVlc3RlZCByYW5nZS5cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGRlZmF1bHRzIHRvIGFuIGVtcHR5IGFycmF5LiBQb3B1bGF0ZSBpdCB2aWEgdGhlIGBnZXRTY29yZXMoKWAgbWV0aG9kLlxyXG4gICAgICAgICAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGFycmF5IGFyZSByZXNldCBlYWNoIHRpbWUgYGdldFNjb3JlcygpYCBpcyBjYWxsZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNMZWFkZXJib2FyZCNzY29yZXNcclxuICAgICAgICAgKiBAdHlwZSB7TGVhZGVyYm9hcmRTY29yZVtdfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjb3JlcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLmdldEVudHJ5Q291bnQoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGZXRjaGVzIHRoZSB0b3RhbCBudW1iZXIgb2YgcGxheWVyIGVudHJpZXMgaW4gdGhlIGxlYWRlcmJvYXJkLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZGF0YSBpcyByZXF1ZXN0ZWQgaW4gYW4gYXN5bmMgY2FsbCwgc28gdGhlIHJlc3VsdCBpc24ndCBhdmFpbGFibGUgaW1tZWRpYXRlbHkuXHJcbiAgICAgKiBcclxuICAgICAqIFdoZW4gdGhlIGNhbGwgY29tcGxldGVzIHRoaXMgTGVhZGVyYm9hcmQgd2lsbCBlbWl0IHRoZSBgZ2V0ZW50cnljb3VudGAgZXZlbnQgYWxvbmcgd2l0aCB0aGUgY291bnQgYW5kIG5hbWUgb2YgdGhlIExlYWRlcmJvYXJkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkZhY2Vib29rSW5zdGFudEdhbWVzTGVhZGVyYm9hcmQjZ2V0RW50cnlDb3VudFxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIExlYWRlcmJvYXJkIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBnZXRFbnRyeUNvdW50OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMucmVmLmdldEVudHJ5Q291bnRBc3luYygpLnRoZW4oZnVuY3Rpb24gKGNvdW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgX3RoaXMuZW50cnlDb3VudCA9IGNvdW50O1xyXG5cclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgnZ2V0ZW50cnljb3VudCcsIGNvdW50LCBfdGhpcy5uYW1lKTtcclxuXHJcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIHBsYXllcidzIHNjb3JlLiBJZiB0aGUgcGxheWVyIGhhcyBhbiBleGlzdGluZyBzY29yZSwgdGhlIG9sZCBzY29yZSB3aWxsIG9ubHkgYmUgcmVwbGFjZWQgaWYgdGhlIG5ldyBzY29yZSBpcyBiZXR0ZXIgdGhhbiBpdC5cclxuICAgICAqIE5PVEU6IElmIHRoZSBsZWFkZXJib2FyZCBpcyBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBjb250ZXh0LCB0aGUgZ2FtZSBtdXN0IGJlIGluIHRoYXQgY29udGV4dCB0byBzZXQgYSBzY29yZSBmb3IgdGhlIHBsYXllci5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGRhdGEgaXMgcmVxdWVzdGVkIGluIGFuIGFzeW5jIGNhbGwsIHNvIHRoZSByZXN1bHQgaXNuJ3QgYXZhaWxhYmxlIGltbWVkaWF0ZWx5LlxyXG4gICAgICogXHJcbiAgICAgKiBXaGVuIHRoZSBjYWxsIGNvbXBsZXRlcyB0aGlzIExlYWRlcmJvYXJkIHdpbGwgZW1pdCB0aGUgYHNldHNjb3JlYCBldmVudCBhbG9uZyB3aXRoIHRoZSBMZWFkZXJib2FyZFNjb3JlIG9iamVjdCBhbmQgdGhlIG5hbWUgb2YgdGhlIExlYWRlcmJvYXJkLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgc2F2ZSBmYWlscyB0aGUgZXZlbnQgd2lsbCBzZW5kIGBudWxsYCBhcyB0aGUgc2NvcmUgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNMZWFkZXJib2FyZCNzZXRTY29yZVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHNjb3JlIC0gVGhlIG5ldyBzY29yZSBmb3IgdGhlIHBsYXllci4gTXVzdCBiZSBhIDY0LWJpdCBpbnRlZ2VyIG51bWJlci5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xhbnkpfSBbZGF0YV0gLSBNZXRhZGF0YSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgc3RvcmVkIHNjb3JlLiBNdXN0IGJlIGxlc3MgdGhhbiAyS0IgaW4gc2l6ZS4gSWYgYW4gb2JqZWN0IGlzIGdpdmVuIGl0IHdpbGwgYmUgcGFzc2VkIHRvIGBKU09OLnN0cmluZ2lmeWAuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgTGVhZGVyYm9hcmQgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFNjb3JlOiBmdW5jdGlvbiAoc2NvcmUsIGRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkgeyBkYXRhID0gJyc7IH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMucmVmLnNldFNjb3JlQXN5bmMoc2NvcmUsIGRhdGEpLnRoZW4oZnVuY3Rpb24gKGVudHJ5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGVudHJ5KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2NvcmUgPSBMZWFkZXJib2FyZFNjb3JlKGVudHJ5KTtcclxuXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5wbGF5ZXJTY29yZSA9IHNjb3JlO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KCdzZXRzY29yZScsIHNjb3JlLCBfdGhpcy5uYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ3NldHNjb3JlJywgbnVsbCwgX3RoaXMubmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHBsYXllcnMgbGVhZGVyYm9hcmQgZW50cnkgYW5kIHN0b3JlcyBpdCBpbiB0aGUgYHBsYXllclNjb3JlYCBwcm9wZXJ0eS5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGRhdGEgaXMgcmVxdWVzdGVkIGluIGFuIGFzeW5jIGNhbGwsIHNvIHRoZSByZXN1bHQgaXNuJ3QgYXZhaWxhYmxlIGltbWVkaWF0ZWx5LlxyXG4gICAgICogXHJcbiAgICAgKiBXaGVuIHRoZSBjYWxsIGNvbXBsZXRlcyB0aGlzIExlYWRlcmJvYXJkIHdpbGwgZW1pdCB0aGUgYGdldHBsYXllcnNjb3JlYCBldmVudCBhbG9uZyB3aXRoIHRoZSBzY29yZSBhbmQgdGhlIG5hbWUgb2YgdGhlIExlYWRlcmJvYXJkLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgcGxheWVyIGhhcyBub3QgeWV0IHNhdmVkIGEgc2NvcmUsIHRoZSBldmVudCB3aWxsIHNlbmQgYG51bGxgIGFzIHRoZSBzY29yZSB2YWx1ZSwgYW5kIGBwbGF5ZXJTY29yZWAgd2lsbCBiZSBzZXQgdG8gYG51bGxgIGFzIHdlbGwuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNMZWFkZXJib2FyZCNnZXRQbGF5ZXJTY29yZVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIExlYWRlcmJvYXJkIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBnZXRQbGF5ZXJTY29yZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLnJlZi5nZXRQbGF5ZXJFbnRyeUFzeW5jKCkudGhlbihmdW5jdGlvbiAoZW50cnkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoZW50cnkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBzY29yZSA9IExlYWRlcmJvYXJkU2NvcmUoZW50cnkpO1xyXG5cclxuICAgICAgICAgICAgICAgIF90aGlzLnBsYXllclNjb3JlID0gc2NvcmU7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2dldHBsYXllcnNjb3JlJywgc2NvcmUsIF90aGlzLm5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuZW1pdCgnZ2V0cGxheWVyc2NvcmUnLCBudWxsLCBfdGhpcy5uYW1lKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIGEgc2V0IG9mIGxlYWRlcmJvYXJkIGVudHJpZXMsIG9yZGVyZWQgYnkgc2NvcmUgcmFua2luZyBpbiB0aGUgbGVhZGVyYm9hcmQuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBkYXRhIGlzIHJlcXVlc3RlZCBpbiBhbiBhc3luYyBjYWxsLCBzbyB0aGUgcmVzdWx0IGlzbid0IGF2YWlsYWJsZSBpbW1lZGlhdGVseS5cclxuICAgICAqIFxyXG4gICAgICogV2hlbiB0aGUgY2FsbCBjb21wbGV0ZXMgdGhpcyBMZWFkZXJib2FyZCB3aWxsIGVtaXQgdGhlIGBnZXRzY29yZXNgIGV2ZW50IGFsb25nIHdpdGggYW4gYXJyYXkgb2YgTGVhZGVyYm9hcmRTY29yZSBlbnRyaWVzIGFuZCB0aGUgbmFtZSBvZiB0aGUgTGVhZGVyYm9hcmQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNMZWFkZXJib2FyZCNnZXRTY29yZXNcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbY291bnQ9MTBdIC0gVGhlIG51bWJlciBvZiBlbnRyaWVzIHRvIGF0dGVtcHQgdG8gZmV0Y2ggZnJvbSB0aGUgbGVhZGVyYm9hcmQuIEN1cnJlbnRseSwgdXAgdG8gYSBtYXhpbXVtIG9mIDEwMCBlbnRyaWVzIG1heSBiZSBmZXRjaGVkIHBlciBxdWVyeS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW29mZnNldD0wXSAtIFRoZSBvZmZzZXQgZnJvbSB0aGUgdG9wIG9mIHRoZSBsZWFkZXJib2FyZCB0aGF0IGVudHJpZXMgd2lsbCBiZSBmZXRjaGVkIGZyb20uXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgTGVhZGVyYm9hcmQgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGdldFNjb3JlczogZnVuY3Rpb24gKGNvdW50LCBvZmZzZXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNvdW50ID09PSB1bmRlZmluZWQpIHsgY291bnQgPSAxMDsgfVxyXG4gICAgICAgIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkgeyBvZmZzZXQgPSAwOyB9XHJcblxyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMucmVmLmdldEVudHJpZXNBc3luYyhjb3VudCwgb2Zmc2V0KS50aGVuKGZ1bmN0aW9uIChlbnRyaWVzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgX3RoaXMuc2NvcmVzID0gW107XHJcblxyXG4gICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24gKGVudHJ5KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5zY29yZXMucHVzaChMZWFkZXJib2FyZFNjb3JlKGVudHJ5KSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgX3RoaXMuZW1pdCgnZ2V0c2NvcmVzJywgX3RoaXMuc2NvcmVzLCBfdGhpcy5uYW1lKTtcclxuXHJcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyBhIHNldCBvZiBsZWFkZXJib2FyZCBlbnRyaWVzLCBiYXNlZCBvbiB0aGUgY3VycmVudCBwbGF5ZXIncyBjb25uZWN0ZWQgcGxheWVycyAoaW5jbHVkaW5nIHRoZSBjdXJyZW50IHBsYXllciksIG9yZGVyZWQgYnkgbG9jYWwgcmFuayB3aXRoaW4gdGhlIHNldCBvZiBjb25uZWN0ZWQgcGxheWVycy5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGRhdGEgaXMgcmVxdWVzdGVkIGluIGFuIGFzeW5jIGNhbGwsIHNvIHRoZSByZXN1bHQgaXNuJ3QgYXZhaWxhYmxlIGltbWVkaWF0ZWx5LlxyXG4gICAgICogXHJcbiAgICAgKiBXaGVuIHRoZSBjYWxsIGNvbXBsZXRlcyB0aGlzIExlYWRlcmJvYXJkIHdpbGwgZW1pdCB0aGUgYGdldGNvbm5lY3RlZHNjb3Jlc2AgZXZlbnQgYWxvbmcgd2l0aCBhbiBhcnJheSBvZiBMZWFkZXJib2FyZFNjb3JlIGVudHJpZXMgYW5kIHRoZSBuYW1lIG9mIHRoZSBMZWFkZXJib2FyZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5GYWNlYm9va0luc3RhbnRHYW1lc0xlYWRlcmJvYXJkI2dldENvbm5lY3RlZFNjb3Jlc1xyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIExlYWRlcmJvYXJkIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBnZXRDb25uZWN0ZWRTY29yZXM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy5yZWYuZ2V0Q29ubmVjdGVkUGxheWVyRW50cmllc0FzeW5jKCkudGhlbihmdW5jdGlvbiAoZW50cmllcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLnNjb3JlcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRyeSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuc2NvcmVzLnB1c2goTGVhZGVyYm9hcmRTY29yZShlbnRyeSkpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIF90aGlzLmVtaXQoJ2dldGNvbm5lY3RlZHNjb3JlcycsIF90aGlzLnNjb3JlcywgX3RoaXMubmFtZSk7XHJcblxyXG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBMZWFkZXJib2FyZDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/fbinstant/src/Leaderboard.js\n");
/***/ }),
/***/ "./node_modules/phaser/plugins/fbinstant/src/LeaderboardScore.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/plugins/fbinstant/src/LeaderboardScore.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2018 Photon Storm Ltd.\r\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\n/**\r\n * @typedef {object} LeaderboardScore\r\n *\r\n * @property {integer} score - An integer score value.\r\n * @property {string} scoreFormatted - The score value, formatted with the score format associated with the leaderboard.\r\n * @property {integer} timestamp - The Unix timestamp of when the leaderboard entry was last updated.\r\n * @property {integer} rank - The entry's leaderboard ranking.\r\n * @property {string} data - The developer-specified payload associated with the score, or null if one was not set.\r\n * @property {string} playerName - The player's localized display name.\r\n * @property {string} playerPhotoURL - A url to the player's public profile photo.\r\n * @property {string} playerID - The game's unique identifier for the player.\r\n */\r\n\r\nvar LeaderboardScore = function (entry)\r\n{\r\n return {\r\n score: entry.getScore(),\r\n scoreFormatted: entry.getFormattedScore(),\r\n timestamp: entry.getTimestamp(),\r\n rank: entry.getRank(),\r\n data: entry.getExtraData(),\r\n playerName: entry.getPlayer().getName(),\r\n playerPhotoURL: entry.getPlayer().getPhoto(),\r\n playerID: entry.getPlayer().getID()\r\n };\r\n};\r\n\r\nmodule.exports = LeaderboardScore;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvZmJpbnN0YW50L3NyYy9MZWFkZXJib2FyZFNjb3JlLmpzP2MwNmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0EsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsT0FBTztBQUNyQixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsT0FBTztBQUNyQixjQUFjLE9BQU87QUFDckIsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsT0FBTztBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvcGx1Z2lucy9mYmluc3RhbnQvc3JjL0xlYWRlcmJvYXJkU2NvcmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE4IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waG90b25zdG9ybS9waGFzZXIvYmxvYi9tYXN0ZXIvbGljZW5zZS50eHR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtvYmplY3R9IExlYWRlcmJvYXJkU2NvcmVcclxuICpcclxuICogQHByb3BlcnR5IHtpbnRlZ2VyfSBzY29yZSAtIEFuIGludGVnZXIgc2NvcmUgdmFsdWUuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzY29yZUZvcm1hdHRlZCAtIFRoZSBzY29yZSB2YWx1ZSwgZm9ybWF0dGVkIHdpdGggdGhlIHNjb3JlIGZvcm1hdCBhc3NvY2lhdGVkIHdpdGggdGhlIGxlYWRlcmJvYXJkLlxyXG4gKiBAcHJvcGVydHkge2ludGVnZXJ9IHRpbWVzdGFtcCAtIFRoZSBVbml4IHRpbWVzdGFtcCBvZiB3aGVuIHRoZSBsZWFkZXJib2FyZCBlbnRyeSB3YXMgbGFzdCB1cGRhdGVkLlxyXG4gKiBAcHJvcGVydHkge2ludGVnZXJ9IHJhbmsgLSBUaGUgZW50cnkncyBsZWFkZXJib2FyZCByYW5raW5nLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZGF0YSAtIFRoZSBkZXZlbG9wZXItc3BlY2lmaWVkIHBheWxvYWQgYXNzb2NpYXRlZCB3aXRoIHRoZSBzY29yZSwgb3IgbnVsbCBpZiBvbmUgd2FzIG5vdCBzZXQuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwbGF5ZXJOYW1lIC0gVGhlIHBsYXllcidzIGxvY2FsaXplZCBkaXNwbGF5IG5hbWUuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwbGF5ZXJQaG90b1VSTCAtICBBIHVybCB0byB0aGUgcGxheWVyJ3MgcHVibGljIHByb2ZpbGUgcGhvdG8uXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwbGF5ZXJJRCAtIFRoZSBnYW1lJ3MgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBwbGF5ZXIuXHJcbiAqL1xyXG5cclxudmFyIExlYWRlcmJvYXJkU2NvcmUgPSBmdW5jdGlvbiAoZW50cnkpXHJcbntcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgc2NvcmU6IGVudHJ5LmdldFNjb3JlKCksXHJcbiAgICAgICAgc2NvcmVGb3JtYXR0ZWQ6IGVudHJ5LmdldEZvcm1hdHRlZFNjb3JlKCksXHJcbiAgICAgICAgdGltZXN0YW1wOiBlbnRyeS5nZXRUaW1lc3RhbXAoKSxcclxuICAgICAgICByYW5rOiBlbnRyeS5nZXRSYW5rKCksXHJcbiAgICAgICAgZGF0YTogZW50cnkuZ2V0RXh0cmFEYXRhKCksXHJcbiAgICAgICAgcGxheWVyTmFtZTogZW50cnkuZ2V0UGxheWVyKCkuZ2V0TmFtZSgpLFxyXG4gICAgICAgIHBsYXllclBob3RvVVJMOiBlbnRyeS5nZXRQbGF5ZXIoKS5nZXRQaG90bygpLFxyXG4gICAgICAgIHBsYXllcklEOiBlbnRyeS5nZXRQbGF5ZXIoKS5nZXRJRCgpXHJcbiAgICB9O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBMZWFkZXJib2FyZFNjb3JlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/fbinstant/src/LeaderboardScore.js\n");
/***/ }),
/***/ "./node_modules/phaser/plugins/fbinstant/src/Product.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/plugins/fbinstant/src/Product.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2018 Photon Storm Ltd.\r\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\nvar GetFastValue = __webpack_require__(/*! ../../../src/utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\n\r\n/**\r\n * @typedef {object} Product\r\n *\r\n * @property {string} [title] - The title of the product.\r\n * @property {string} [productID] - The product's game-specified identifier.\r\n * @property {string} [description] - The product description.\r\n * @property {string} [imageURI] - A link to the product's associated image.\r\n * @property {string} [price] - The price of the product.\r\n * @property {string} [priceCurrencyCode] - The currency code for the product.\r\n */\r\n\r\nvar Product = function (data)\r\n{\r\n return {\r\n title: GetFastValue(data, 'title', ''),\r\n productID: GetFastValue(data, 'productID', ''),\r\n description: GetFastValue(data, 'description', ''),\r\n imageURI: GetFastValue(data, 'imageURI', ''),\r\n price: GetFastValue(data, 'price', ''),\r\n priceCurrencyCode: GetFastValue(data, 'priceCurrencyCode', '')\r\n };\r\n};\r\n\r\nmodule.exports = Product;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvZmJpbnN0YW50L3NyYy9Qcm9kdWN0LmpzPzhkNzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLG1CQUFtQixtQkFBTyxDQUFDLHNHQUF3Qzs7QUFFbkU7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQSxjQUFjLE9BQU87QUFDckIsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsT0FBTztBQUNyQixjQUFjLE9BQU87QUFDckIsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsT0FBTztBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9wbHVnaW5zL2ZiaW5zdGFudC9zcmMvUHJvZHVjdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTggUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9ibG9iL21hc3Rlci9saWNlbnNlLnR4dHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vLi4vc3JjL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBQcm9kdWN0XHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdGl0bGVdIC0gVGhlIHRpdGxlIG9mIHRoZSBwcm9kdWN0LlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Byb2R1Y3RJRF0gLSBUaGUgcHJvZHVjdCdzIGdhbWUtc3BlY2lmaWVkIGlkZW50aWZpZXIuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dIC0gVGhlIHByb2R1Y3QgZGVzY3JpcHRpb24uXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaW1hZ2VVUkldIC0gQSBsaW5rIHRvIHRoZSBwcm9kdWN0J3MgYXNzb2NpYXRlZCBpbWFnZS5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwcmljZV0gLSBUaGUgcHJpY2Ugb2YgdGhlIHByb2R1Y3QuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcHJpY2VDdXJyZW5jeUNvZGVdIC0gVGhlIGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwcm9kdWN0LlxyXG4gKi9cclxuXHJcbnZhciBQcm9kdWN0ID0gZnVuY3Rpb24gKGRhdGEpXHJcbntcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdGl0bGU6IEdldEZhc3RWYWx1ZShkYXRhLCAndGl0bGUnLCAnJyksXHJcbiAgICAgICAgcHJvZHVjdElEOiBHZXRGYXN0VmFsdWUoZGF0YSwgJ3Byb2R1Y3RJRCcsICcnKSxcclxuICAgICAgICBkZXNjcmlwdGlvbjogR2V0RmFzdFZhbHVlKGRhdGEsICdkZXNjcmlwdGlvbicsICcnKSxcclxuICAgICAgICBpbWFnZVVSSTogR2V0RmFzdFZhbHVlKGRhdGEsICdpbWFnZVVSSScsICcnKSxcclxuICAgICAgICBwcmljZTogR2V0RmFzdFZhbHVlKGRhdGEsICdwcmljZScsICcnKSxcclxuICAgICAgICBwcmljZUN1cnJlbmN5Q29kZTogR2V0RmFzdFZhbHVlKGRhdGEsICdwcmljZUN1cnJlbmN5Q29kZScsICcnKVxyXG4gICAgfTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUHJvZHVjdDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/fbinstant/src/Product.js\n");
/***/ }),
/***/ "./node_modules/phaser/plugins/fbinstant/src/Purchase.js":
/*!***************************************************************!*\
!*** ./node_modules/phaser/plugins/fbinstant/src/Purchase.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2018 Photon Storm Ltd.\r\n * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}\r\n */\r\n\r\nvar GetFastValue = __webpack_require__(/*! ../../../src/utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\n\r\n/**\r\n * @typedef {object} Purchase\r\n *\r\n * @property {string} [developerPayload] - A developer-specified string, provided during the purchase of the product.\r\n * @property {string} [paymentID] - The identifier for the purchase transaction.\r\n * @property {string} [productID] - The product's game-specified identifier.\r\n * @property {string} [purchaseTime] - Unix timestamp of when the purchase occurred.\r\n * @property {string} [purchaseToken] - A token representing the purchase that may be used to consume the purchase.\r\n * @property {string} [signedRequest] - Server-signed encoding of the purchase request.\r\n */\r\n\r\nvar Purchase = function (data)\r\n{\r\n return {\r\n developerPayload: GetFastValue(data, 'developerPayload', ''),\r\n paymentID: GetFastValue(data, 'paymentID', ''),\r\n productID: GetFastValue(data, 'productID', ''),\r\n purchaseTime: GetFastValue(data, 'purchaseTime', ''),\r\n purchaseToken: GetFastValue(data, 'purchaseToken', ''),\r\n signedRequest: GetFastValue(data, 'signedRequest', '')\r\n };\r\n};\r\n\r\nmodule.exports = Purchase;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3BsdWdpbnMvZmJpbnN0YW50L3NyYy9QdXJjaGFzZS5qcz9mOTRjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxtQkFBbUIsbUJBQU8sQ0FBQyxzR0FBd0M7O0FBRW5FO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0EsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsT0FBTztBQUNyQixjQUFjLE9BQU87QUFDckIsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsT0FBTztBQUNyQixjQUFjLE9BQU87QUFDckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvcGx1Z2lucy9mYmluc3RhbnQvc3JjL1B1cmNoYXNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOCBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2Jsb2IvbWFzdGVyL2xpY2Vuc2UudHh0fE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi8uLi9zcmMvdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFB1cmNoYXNlXHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGV2ZWxvcGVyUGF5bG9hZF0gLSBBIGRldmVsb3Blci1zcGVjaWZpZWQgc3RyaW5nLCBwcm92aWRlZCBkdXJpbmcgdGhlIHB1cmNoYXNlIG9mIHRoZSBwcm9kdWN0LlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3BheW1lbnRJRF0gLSBUaGUgaWRlbnRpZmllciBmb3IgdGhlIHB1cmNoYXNlIHRyYW5zYWN0aW9uLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Byb2R1Y3RJRF0gLSBUaGUgcHJvZHVjdCdzIGdhbWUtc3BlY2lmaWVkIGlkZW50aWZpZXIuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcHVyY2hhc2VUaW1lXSAtIFVuaXggdGltZXN0YW1wIG9mIHdoZW4gdGhlIHB1cmNoYXNlIG9jY3VycmVkLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3B1cmNoYXNlVG9rZW5dIC0gQSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIHB1cmNoYXNlIHRoYXQgbWF5IGJlIHVzZWQgdG8gY29uc3VtZSB0aGUgcHVyY2hhc2UuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2lnbmVkUmVxdWVzdF0gLSBTZXJ2ZXItc2lnbmVkIGVuY29kaW5nIG9mIHRoZSBwdXJjaGFzZSByZXF1ZXN0LlxyXG4gKi9cclxuXHJcbnZhciBQdXJjaGFzZSA9IGZ1bmN0aW9uIChkYXRhKVxyXG57XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRldmVsb3BlclBheWxvYWQ6IEdldEZhc3RWYWx1ZShkYXRhLCAnZGV2ZWxvcGVyUGF5bG9hZCcsICcnKSxcclxuICAgICAgICBwYXltZW50SUQ6IEdldEZhc3RWYWx1ZShkYXRhLCAncGF5bWVudElEJywgJycpLFxyXG4gICAgICAgIHByb2R1Y3RJRDogR2V0RmFzdFZhbHVlKGRhdGEsICdwcm9kdWN0SUQnLCAnJyksXHJcbiAgICAgICAgcHVyY2hhc2VUaW1lOiBHZXRGYXN0VmFsdWUoZGF0YSwgJ3B1cmNoYXNlVGltZScsICcnKSxcclxuICAgICAgICBwdXJjaGFzZVRva2VuOiBHZXRGYXN0VmFsdWUoZGF0YSwgJ3B1cmNoYXNlVG9rZW4nLCAnJyksXHJcbiAgICAgICAgc2lnbmVkUmVxdWVzdDogR2V0RmFzdFZhbHVlKGRhdGEsICdzaWduZWRSZXF1ZXN0JywgJycpXHJcbiAgICB9O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQdXJjaGFzZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/plugins/fbinstant/src/Purchase.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/Angle.js":
/*!**************************************************!*\
!*** ./node_modules/phaser/src/actions/Angle.js ***!
\**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueInc = __webpack_require__(/*! ./PropertyValueInc */ \"./node_modules/phaser/src/actions/PropertyValueInc.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have a public `angle` property,\r\n * and then adds the given value to each of their `angle` properties.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `Angle(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.Angle\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to be added to the `angle` property.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar Angle = function (items, value, step, index, direction)\r\n{\r\n return PropertyValueInc(items, 'angle', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = Angle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL0FuZ2xlLmpzPzAzZjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFvQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvQW5nbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQcm9wZXJ0eVZhbHVlSW5jID0gcmVxdWlyZSgnLi9Qcm9wZXJ0eVZhbHVlSW5jJyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLCBvciBhbnkgb2JqZWN0cyB0aGF0IGhhdmUgYSBwdWJsaWMgYGFuZ2xlYCBwcm9wZXJ0eSxcclxuICogYW5kIHRoZW4gYWRkcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gZWFjaCBvZiB0aGVpciBgYW5nbGVgIHByb3BlcnRpZXMuXHJcbiAqXHJcbiAqIFRoZSBvcHRpb25hbCBgc3RlcGAgcHJvcGVydHkgaXMgYXBwbGllZCBpbmNyZW1lbnRhbGx5LCBtdWx0aXBsaWVkIGJ5IGVhY2ggaXRlbSBpbiB0aGUgYXJyYXkuXHJcbiAqXHJcbiAqIFRvIHVzZSB0aGlzIHdpdGggYSBHcm91cDogYEFuZ2xlKGdyb3VwLmdldENoaWxkcmVuKCksIHZhbHVlLCBzdGVwKWBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLkFuZ2xlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBiZSBhZGRlZCB0byB0aGUgYGFuZ2xlYCBwcm9wZXJ0eS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYHZhbHVlYCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtpbmRleD0wXSAtIEFuIG9wdGlvbmFsIG9mZnNldCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbSB3aXRoaW4gdGhlIGl0ZW1zIGFycmF5LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJlY3Rpb249MV0gLSBUaGUgZGlyZWN0aW9uIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkuIDEgaXMgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLCAtMSBmcm9tIGVuZCB0byBiZWdpbm5pbmcuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIG9iamVjdHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBBbmdsZSA9IGZ1bmN0aW9uIChpdGVtcywgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pXHJcbntcclxuICAgIHJldHVybiBQcm9wZXJ0eVZhbHVlSW5jKGl0ZW1zLCAnYW5nbGUnLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEFuZ2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/Angle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/Call.js":
/*!*************************************************!*\
!*** ./node_modules/phaser/src/actions/Call.js ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes an array of objects and passes each of them to the given callback.\r\n *\r\n * @function Phaser.Actions.Call\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {Phaser.Types.Actions.CallCallback} callback - The callback to be invoked. It will be passed just one argument: the item from the array.\r\n * @param {*} context - The scope in which the callback will be invoked.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that was passed to this Action.\r\n */\r\nvar Call = function (items, callback, context)\r\n{\r\n for (var i = 0; i < items.length; i++)\r\n {\r\n var item = items[i];\r\n\r\n callback.call(context, item);\r\n }\r\n\r\n return items;\r\n};\r\n\r\nmodule.exports = Call;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL0NhbGwuanM/ZjQxMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLGtDQUFrQztBQUM3QyxXQUFXLEVBQUU7QUFDYjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL0NhbGwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBhbiBhcnJheSBvZiBvYmplY3RzIGFuZCBwYXNzZXMgZWFjaCBvZiB0aGVtIHRvIHRoZSBnaXZlbiBjYWxsYmFjay5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLkNhbGxcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIFRoZSBhcnJheSBvZiBpdGVtcyB0byBiZSB1cGRhdGVkIGJ5IHRoaXMgYWN0aW9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5BY3Rpb25zLkNhbGxDYWxsYmFja30gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gYmUgaW52b2tlZC4gSXQgd2lsbCBiZSBwYXNzZWQganVzdCBvbmUgYXJndW1lbnQ6IHRoZSBpdGVtIGZyb20gdGhlIGFycmF5LlxyXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgLSBUaGUgc2NvcGUgaW4gd2hpY2ggdGhlIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZC5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IHdhcyBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgQ2FsbCA9IGZ1bmN0aW9uIChpdGVtcywgY2FsbGJhY2ssIGNvbnRleHQpXHJcbntcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTtcclxuXHJcbiAgICAgICAgY2FsbGJhY2suY2FsbChjb250ZXh0LCBpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENhbGw7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/Call.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/GetFirst.js":
/*!*****************************************************!*\
!*** ./node_modules/phaser/src/actions/GetFirst.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes an array of objects and returns the first element in the array that has properties which match\r\n * all of those specified in the `compare` object. For example, if the compare object was: `{ scaleX: 0.5, alpha: 1 }`\r\n * then it would return the first item which had the property `scaleX` set to 0.5 and `alpha` set to 1.\r\n *\r\n * To use this with a Group: `GetFirst(group.getChildren(), compare, index)`\r\n *\r\n * @function Phaser.Actions.GetFirst\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be searched by this action.\r\n * @param {object} compare - The comparison object. Each property in this object will be checked against the items of the array.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n *\r\n * @return {?(object|Phaser.GameObjects.GameObject)} The first object in the array that matches the comparison object, or `null` if no match was found.\r\n */\r\nvar GetFirst = function (items, compare, index)\r\n{\r\n if (index === undefined) { index = 0; }\r\n\r\n for (var i = index; i < items.length; i++)\r\n {\r\n var item = items[i];\r\n\r\n var match = true;\r\n\r\n for (var property in compare)\r\n {\r\n if (item[property] !== compare[property])\r\n {\r\n match = false;\r\n }\r\n }\r\n\r\n if (match)\r\n {\r\n return item;\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nmodule.exports = GetFirst;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL0dldEZpcnN0LmpzP2M5ZDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQSw2RkFBNkYsd0JBQXdCO0FBQ3JIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLFdBQVc7O0FBRXpDLHVCQUF1QixrQkFBa0I7QUFDekM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL0dldEZpcnN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2Ygb2JqZWN0cyBhbmQgcmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgYXJyYXkgdGhhdCBoYXMgcHJvcGVydGllcyB3aGljaCBtYXRjaFxyXG4gKiBhbGwgb2YgdGhvc2Ugc3BlY2lmaWVkIGluIHRoZSBgY29tcGFyZWAgb2JqZWN0LiBGb3IgZXhhbXBsZSwgaWYgdGhlIGNvbXBhcmUgb2JqZWN0IHdhczogYHsgc2NhbGVYOiAwLjUsIGFscGhhOiAxIH1gXHJcbiAqIHRoZW4gaXQgd291bGQgcmV0dXJuIHRoZSBmaXJzdCBpdGVtIHdoaWNoIGhhZCB0aGUgcHJvcGVydHkgYHNjYWxlWGAgc2V0IHRvIDAuNSBhbmQgYGFscGhhYCBzZXQgdG8gMS5cclxuICpcclxuICogVG8gdXNlIHRoaXMgd2l0aCBhIEdyb3VwOiBgR2V0Rmlyc3QoZ3JvdXAuZ2V0Q2hpbGRyZW4oKSwgY29tcGFyZSwgaW5kZXgpYFxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuR2V0Rmlyc3RcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgc2VhcmNoZWQgYnkgdGhpcyBhY3Rpb24uXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb21wYXJlIC0gVGhlIGNvbXBhcmlzb24gb2JqZWN0LiBFYWNoIHByb3BlcnR5IGluIHRoaXMgb2JqZWN0IHdpbGwgYmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBpdGVtcyBvZiB0aGUgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqXHJcbiAqIEByZXR1cm4gez8ob2JqZWN0fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0KX0gVGhlIGZpcnN0IG9iamVjdCBpbiB0aGUgYXJyYXkgdGhhdCBtYXRjaGVzIHRoZSBjb21wYXJpc29uIG9iamVjdCwgb3IgYG51bGxgIGlmIG5vIG1hdGNoIHdhcyBmb3VuZC5cclxuICovXHJcbnZhciBHZXRGaXJzdCA9IGZ1bmN0aW9uIChpdGVtcywgY29tcGFyZSwgaW5kZXgpXHJcbntcclxuICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7IGluZGV4ID0gMDsgfVxyXG5cclxuICAgIGZvciAodmFyIGkgPSBpbmRleDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07XHJcblxyXG4gICAgICAgIHZhciBtYXRjaCA9IHRydWU7XHJcblxyXG4gICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGNvbXBhcmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoaXRlbVtwcm9wZXJ0eV0gIT09IGNvbXBhcmVbcHJvcGVydHldKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobWF0Y2gpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldEZpcnN0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/GetFirst.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/GetLast.js":
/*!****************************************************!*\
!*** ./node_modules/phaser/src/actions/GetLast.js ***!
\****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes an array of objects and returns the last element in the array that has properties which match\r\n * all of those specified in the `compare` object. For example, if the compare object was: `{ scaleX: 0.5, alpha: 1 }`\r\n * then it would return the last item which had the property `scaleX` set to 0.5 and `alpha` set to 1.\r\n *\r\n * To use this with a Group: `GetLast(group.getChildren(), compare, index)`\r\n *\r\n * @function Phaser.Actions.GetLast\r\n * @since 3.3.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be searched by this action.\r\n * @param {object} compare - The comparison object. Each property in this object will be checked against the items of the array.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n *\r\n * @return {?(object|Phaser.GameObjects.GameObject)} The last object in the array that matches the comparison object, or `null` if no match was found.\r\n */\r\nvar GetLast = function (items, compare, index)\r\n{\r\n if (index === undefined) { index = 0; }\r\n\r\n for (var i = index; i < items.length; i++)\r\n {\r\n var item = items[i];\r\n\r\n var match = true;\r\n\r\n for (var property in compare)\r\n {\r\n if (item[property] !== compare[property])\r\n {\r\n match = false;\r\n }\r\n }\r\n\r\n if (match)\r\n {\r\n return item;\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nmodule.exports = GetLast;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL0dldExhc3QuanM/OWU2MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBLDZGQUE2Rix3QkFBd0I7QUFDckg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsV0FBVzs7QUFFekMsdUJBQXVCLGtCQUFrQjtBQUN6QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvR2V0TGFzdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIG9iamVjdHMgYW5kIHJldHVybnMgdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgYXJyYXkgdGhhdCBoYXMgcHJvcGVydGllcyB3aGljaCBtYXRjaFxyXG4gKiBhbGwgb2YgdGhvc2Ugc3BlY2lmaWVkIGluIHRoZSBgY29tcGFyZWAgb2JqZWN0LiBGb3IgZXhhbXBsZSwgaWYgdGhlIGNvbXBhcmUgb2JqZWN0IHdhczogYHsgc2NhbGVYOiAwLjUsIGFscGhhOiAxIH1gXHJcbiAqIHRoZW4gaXQgd291bGQgcmV0dXJuIHRoZSBsYXN0IGl0ZW0gd2hpY2ggaGFkIHRoZSBwcm9wZXJ0eSBgc2NhbGVYYCBzZXQgdG8gMC41IGFuZCBgYWxwaGFgIHNldCB0byAxLlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBHZXRMYXN0KGdyb3VwLmdldENoaWxkcmVuKCksIGNvbXBhcmUsIGluZGV4KWBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLkdldExhc3RcclxuICogQHNpbmNlIDMuMy4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgc2VhcmNoZWQgYnkgdGhpcyBhY3Rpb24uXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb21wYXJlIC0gVGhlIGNvbXBhcmlzb24gb2JqZWN0LiBFYWNoIHByb3BlcnR5IGluIHRoaXMgb2JqZWN0IHdpbGwgYmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBpdGVtcyBvZiB0aGUgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqXHJcbiAqIEByZXR1cm4gez8ob2JqZWN0fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0KX0gVGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBhcnJheSB0aGF0IG1hdGNoZXMgdGhlIGNvbXBhcmlzb24gb2JqZWN0LCBvciBgbnVsbGAgaWYgbm8gbWF0Y2ggd2FzIGZvdW5kLlxyXG4gKi9cclxudmFyIEdldExhc3QgPSBmdW5jdGlvbiAoaXRlbXMsIGNvbXBhcmUsIGluZGV4KVxyXG57XHJcbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkgeyBpbmRleCA9IDA7IH1cclxuXHJcbiAgICBmb3IgKHZhciBpID0gaW5kZXg7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgaXRlbSA9IGl0ZW1zW2ldO1xyXG5cclxuICAgICAgICB2YXIgbWF0Y2ggPSB0cnVlO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBjb21wYXJlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW1bcHJvcGVydHldICE9PSBjb21wYXJlW3Byb3BlcnR5XSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbWF0Y2ggPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG1hdGNoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRMYXN0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/GetLast.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/GridAlign.js":
/*!******************************************************!*\
!*** ./node_modules/phaser/src/actions/GridAlign.js ***!
\******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar AlignIn = __webpack_require__(/*! ../display/align/in/QuickSet */ \"./node_modules/phaser/src/display/align/in/QuickSet.js\");\r\nvar CONST = __webpack_require__(/*! ../display/align/const */ \"./node_modules/phaser/src/display/align/const.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar NOOP = __webpack_require__(/*! ../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar Zone = __webpack_require__(/*! ../gameobjects/zone/Zone */ \"./node_modules/phaser/src/gameobjects/zone/Zone.js\");\r\n\r\nvar tempZone = new Zone({ sys: { queueDepthSort: NOOP, events: { once: NOOP } } }, 0, 0, 1, 1);\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have public `x` and `y` properties,\r\n * and then aligns them based on the grid configuration given to this action.\r\n *\r\n * @function Phaser.Actions.GridAlign\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {Phaser.Types.Actions.GridAlignConfig} options - The GridAlign Configuration object.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar GridAlign = function (items, options)\r\n{\r\n if (options === undefined) { options = {}; }\r\n\r\n var width = GetFastValue(options, 'width', -1);\r\n var height = GetFastValue(options, 'height', -1);\r\n var cellWidth = GetFastValue(options, 'cellWidth', 1);\r\n var cellHeight = GetFastValue(options, 'cellHeight', cellWidth);\r\n var position = GetFastValue(options, 'position', CONST.TOP_LEFT);\r\n var x = GetFastValue(options, 'x', 0);\r\n var y = GetFastValue(options, 'y', 0);\r\n\r\n var cx = 0;\r\n var cy = 0;\r\n var w = (width * cellWidth);\r\n var h = (height * cellHeight);\r\n\r\n tempZone.setPosition(x, y);\r\n tempZone.setSize(cellWidth, cellHeight);\r\n\r\n for (var i = 0; i < items.length; i++)\r\n {\r\n AlignIn(items[i], tempZone, position);\r\n\r\n if (width === -1)\r\n {\r\n // We keep laying them out horizontally until we've done them all\r\n cy += cellHeight;\r\n tempZone.y += cellHeight;\r\n\r\n if (cy === h)\r\n {\r\n cy = 0;\r\n tempZone.x += cellWidth;\r\n tempZone.y = y;\r\n }\r\n }\r\n else if (height === -1)\r\n {\r\n // We keep laying them out vertically until we've done them all\r\n cx += cellWidth;\r\n tempZone.x += cellWidth;\r\n\r\n if (cx === w)\r\n {\r\n cx = 0;\r\n tempZone.x = x;\r\n tempZone.y += cellHeight;\r\n }\r\n }\r\n else\r\n {\r\n // We keep laying them out until we hit the column limit\r\n cx += cellWidth;\r\n tempZone.x += cellWidth;\r\n\r\n if (cx === w)\r\n {\r\n cx = 0;\r\n cy += cellHeight;\r\n tempZone.x = x;\r\n tempZone.y += cellHeight;\r\n\r\n if (cy === h)\r\n {\r\n // We've hit the column limit, so return, even if there are items left\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return items;\r\n};\r\n\r\nmodule.exports = GridAlign;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL0dyaWRBbGlnbi5qcz9iYTFmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxjQUFjLG1CQUFPLENBQUMsNEZBQThCO0FBQ3BELFlBQVksbUJBQU8sQ0FBQyxnRkFBd0I7QUFDNUMsbUJBQW1CLG1CQUFPLENBQUMsNEZBQThCO0FBQ3pELFdBQVcsbUJBQU8sQ0FBQyw4REFBZTtBQUNsQyxXQUFXLG1CQUFPLENBQUMsb0ZBQTBCOztBQUU3Qyx5QkFBeUIsT0FBTyxnQ0FBZ0MsYUFBYSxFQUFFLEVBQUU7O0FBRWpGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLHFDQUFxQztBQUNoRDtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxjQUFjOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvR3JpZEFsaWduLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQWxpZ25JbiA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvYWxpZ24vaW4vUXVpY2tTZXQnKTtcclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi4vZGlzcGxheS9hbGlnbi9jb25zdCcpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgTk9PUCA9IHJlcXVpcmUoJy4uL3V0aWxzL05PT1AnKTtcclxudmFyIFpvbmUgPSByZXF1aXJlKCcuLi9nYW1lb2JqZWN0cy96b25lL1pvbmUnKTtcclxuXHJcbnZhciB0ZW1wWm9uZSA9IG5ldyBab25lKHsgc3lzOiB7IHF1ZXVlRGVwdGhTb3J0OiBOT09QLCBldmVudHM6IHsgb25jZTogTk9PUCB9IH0gfSwgMCwgMCwgMSwgMSk7XHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLCBvciBhbnkgb2JqZWN0cyB0aGF0IGhhdmUgcHVibGljIGB4YCBhbmQgYHlgIHByb3BlcnRpZXMsXHJcbiAqIGFuZCB0aGVuIGFsaWducyB0aGVtIGJhc2VkIG9uIHRoZSBncmlkIGNvbmZpZ3VyYXRpb24gZ2l2ZW4gdG8gdGhpcyBhY3Rpb24uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5HcmlkQWxpZ25cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIFRoZSBhcnJheSBvZiBpdGVtcyB0byBiZSB1cGRhdGVkIGJ5IHRoaXMgYWN0aW9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5BY3Rpb25zLkdyaWRBbGlnbkNvbmZpZ30gb3B0aW9ucyAtIFRoZSBHcmlkQWxpZ24gQ29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIG9iamVjdHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBHcmlkQWxpZ24gPSBmdW5jdGlvbiAoaXRlbXMsIG9wdGlvbnMpXHJcbntcclxuICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHsgb3B0aW9ucyA9IHt9OyB9XHJcblxyXG4gICAgdmFyIHdpZHRoID0gR2V0RmFzdFZhbHVlKG9wdGlvbnMsICd3aWR0aCcsIC0xKTtcclxuICAgIHZhciBoZWlnaHQgPSBHZXRGYXN0VmFsdWUob3B0aW9ucywgJ2hlaWdodCcsIC0xKTtcclxuICAgIHZhciBjZWxsV2lkdGggPSBHZXRGYXN0VmFsdWUob3B0aW9ucywgJ2NlbGxXaWR0aCcsIDEpO1xyXG4gICAgdmFyIGNlbGxIZWlnaHQgPSBHZXRGYXN0VmFsdWUob3B0aW9ucywgJ2NlbGxIZWlnaHQnLCBjZWxsV2lkdGgpO1xyXG4gICAgdmFyIHBvc2l0aW9uID0gR2V0RmFzdFZhbHVlKG9wdGlvbnMsICdwb3NpdGlvbicsIENPTlNULlRPUF9MRUZUKTtcclxuICAgIHZhciB4ID0gR2V0RmFzdFZhbHVlKG9wdGlvbnMsICd4JywgMCk7XHJcbiAgICB2YXIgeSA9IEdldEZhc3RWYWx1ZShvcHRpb25zLCAneScsIDApO1xyXG5cclxuICAgIHZhciBjeCA9IDA7XHJcbiAgICB2YXIgY3kgPSAwO1xyXG4gICAgdmFyIHcgPSAod2lkdGggKiBjZWxsV2lkdGgpO1xyXG4gICAgdmFyIGggPSAoaGVpZ2h0ICogY2VsbEhlaWdodCk7XHJcblxyXG4gICAgdGVtcFpvbmUuc2V0UG9zaXRpb24oeCwgeSk7XHJcbiAgICB0ZW1wWm9uZS5zZXRTaXplKGNlbGxXaWR0aCwgY2VsbEhlaWdodCk7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICBBbGlnbkluKGl0ZW1zW2ldLCB0ZW1wWm9uZSwgcG9zaXRpb24pO1xyXG5cclxuICAgICAgICBpZiAod2lkdGggPT09IC0xKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFdlIGtlZXAgbGF5aW5nIHRoZW0gb3V0IGhvcml6b250YWxseSB1bnRpbCB3ZSd2ZSBkb25lIHRoZW0gYWxsXHJcbiAgICAgICAgICAgIGN5ICs9IGNlbGxIZWlnaHQ7XHJcbiAgICAgICAgICAgIHRlbXBab25lLnkgKz0gY2VsbEhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIGlmIChjeSA9PT0gaClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY3kgPSAwO1xyXG4gICAgICAgICAgICAgICAgdGVtcFpvbmUueCArPSBjZWxsV2lkdGg7XHJcbiAgICAgICAgICAgICAgICB0ZW1wWm9uZS55ID0geTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChoZWlnaHQgPT09IC0xKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFdlIGtlZXAgbGF5aW5nIHRoZW0gb3V0IHZlcnRpY2FsbHkgdW50aWwgd2UndmUgZG9uZSB0aGVtIGFsbFxyXG4gICAgICAgICAgICBjeCArPSBjZWxsV2lkdGg7XHJcbiAgICAgICAgICAgIHRlbXBab25lLnggKz0gY2VsbFdpZHRoO1xyXG5cclxuICAgICAgICAgICAgaWYgKGN4ID09PSB3KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjeCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0ZW1wWm9uZS54ID0geDtcclxuICAgICAgICAgICAgICAgIHRlbXBab25lLnkgKz0gY2VsbEhlaWdodDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgV2Uga2VlcCBsYXlpbmcgdGhlbSBvdXQgdW50aWwgd2UgaGl0IHRoZSBjb2x1bW4gbGltaXRcclxuICAgICAgICAgICAgY3ggKz0gY2VsbFdpZHRoO1xyXG4gICAgICAgICAgICB0ZW1wWm9uZS54ICs9IGNlbGxXaWR0aDtcclxuXHJcbiAgICAgICAgICAgIGlmIChjeCA9PT0gdylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY3ggPSAwO1xyXG4gICAgICAgICAgICAgICAgY3kgKz0gY2VsbEhlaWdodDtcclxuICAgICAgICAgICAgICAgIHRlbXBab25lLnggPSB4O1xyXG4gICAgICAgICAgICAgICAgdGVtcFpvbmUueSArPSBjZWxsSGVpZ2h0O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjeSA9PT0gaClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgV2UndmUgaGl0IHRoZSBjb2x1bW4gbGltaXQsIHNvIHJldHVybiwgZXZlbiBpZiB0aGVyZSBhcmUgaXRlbXMgbGVmdFxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpdGVtcztcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR3JpZEFsaWduO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/GridAlign.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/IncAlpha.js":
/*!*****************************************************!*\
!*** ./node_modules/phaser/src/actions/IncAlpha.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueInc = __webpack_require__(/*! ./PropertyValueInc */ \"./node_modules/phaser/src/actions/PropertyValueInc.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have a public `alpha` property,\r\n * and then adds the given value to each of their `alpha` properties.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `IncAlpha(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.IncAlpha\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to be added to the `alpha` property.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar IncAlpha = function (items, value, step, index, direction)\r\n{\r\n return PropertyValueInc(items, 'alpha', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = IncAlpha;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL0luY0FscGhhLmpzP2M4ZTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFvQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvSW5jQWxwaGEuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQcm9wZXJ0eVZhbHVlSW5jID0gcmVxdWlyZSgnLi9Qcm9wZXJ0eVZhbHVlSW5jJyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLCBvciBhbnkgb2JqZWN0cyB0aGF0IGhhdmUgYSBwdWJsaWMgYGFscGhhYCBwcm9wZXJ0eSxcclxuICogYW5kIHRoZW4gYWRkcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gZWFjaCBvZiB0aGVpciBgYWxwaGFgIHByb3BlcnRpZXMuXHJcbiAqXHJcbiAqIFRoZSBvcHRpb25hbCBgc3RlcGAgcHJvcGVydHkgaXMgYXBwbGllZCBpbmNyZW1lbnRhbGx5LCBtdWx0aXBsaWVkIGJ5IGVhY2ggaXRlbSBpbiB0aGUgYXJyYXkuXHJcbiAqXHJcbiAqIFRvIHVzZSB0aGlzIHdpdGggYSBHcm91cDogYEluY0FscGhhKGdyb3VwLmdldENoaWxkcmVuKCksIHZhbHVlLCBzdGVwKWBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLkluY0FscGhhXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBiZSBhZGRlZCB0byB0aGUgYGFscGhhYCBwcm9wZXJ0eS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYHZhbHVlYCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtpbmRleD0wXSAtIEFuIG9wdGlvbmFsIG9mZnNldCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbSB3aXRoaW4gdGhlIGl0ZW1zIGFycmF5LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJlY3Rpb249MV0gLSBUaGUgZGlyZWN0aW9uIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkuIDEgaXMgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLCAtMSBmcm9tIGVuZCB0byBiZWdpbm5pbmcuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIG9iamVjdHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBJbmNBbHBoYSA9IGZ1bmN0aW9uIChpdGVtcywgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pXHJcbntcclxuICAgIHJldHVybiBQcm9wZXJ0eVZhbHVlSW5jKGl0ZW1zLCAnYWxwaGEnLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEluY0FscGhhO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/IncAlpha.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/IncX.js":
/*!*************************************************!*\
!*** ./node_modules/phaser/src/actions/IncX.js ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueInc = __webpack_require__(/*! ./PropertyValueInc */ \"./node_modules/phaser/src/actions/PropertyValueInc.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have a public `x` property,\r\n * and then adds the given value to each of their `x` properties.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `IncX(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.IncX\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to be added to the `x` property.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar IncX = function (items, value, step, index, direction)\r\n{\r\n return PropertyValueInc(items, 'x', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = IncX;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL0luY1guanM/Mzg4MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsdUJBQXVCLG1CQUFPLENBQUMsaUZBQW9COztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9JbmNYLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUHJvcGVydHlWYWx1ZUluYyA9IHJlcXVpcmUoJy4vUHJvcGVydHlWYWx1ZUluYycpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgb3IgYW55IG9iamVjdHMgdGhhdCBoYXZlIGEgcHVibGljIGB4YCBwcm9wZXJ0eSxcclxuICogYW5kIHRoZW4gYWRkcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gZWFjaCBvZiB0aGVpciBgeGAgcHJvcGVydGllcy5cclxuICpcclxuICogVGhlIG9wdGlvbmFsIGBzdGVwYCBwcm9wZXJ0eSBpcyBhcHBsaWVkIGluY3JlbWVudGFsbHksIG11bHRpcGxpZWQgYnkgZWFjaCBpdGVtIGluIHRoZSBhcnJheS5cclxuICpcclxuICogVG8gdXNlIHRoaXMgd2l0aCBhIEdyb3VwOiBgSW5jWChncm91cC5nZXRDaGlsZHJlbigpLCB2YWx1ZSwgc3RlcClgXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5JbmNYXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBiZSBhZGRlZCB0byB0aGUgYHhgIHByb3BlcnR5LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpcmVjdGlvbj0xXSAtIFRoZSBkaXJlY3Rpb24gdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheS4gMSBpcyBmcm9tIGJlZ2lubmluZyB0byBlbmQsIC0xIGZyb20gZW5kIHRvIGJlZ2lubmluZy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIEluY1ggPSBmdW5jdGlvbiAoaXRlbXMsIHZhbHVlLCBzdGVwLCBpbmRleCwgZGlyZWN0aW9uKVxyXG57XHJcbiAgICByZXR1cm4gUHJvcGVydHlWYWx1ZUluYyhpdGVtcywgJ3gnLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEluY1g7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/IncX.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/IncXY.js":
/*!**************************************************!*\
!*** ./node_modules/phaser/src/actions/IncXY.js ***!
\**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueInc = __webpack_require__(/*! ./PropertyValueInc */ \"./node_modules/phaser/src/actions/PropertyValueInc.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have public `x` and `y` properties,\r\n * and then adds the given value to each of them.\r\n *\r\n * The optional `stepX` and `stepY` properties are applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `IncXY(group.getChildren(), x, y, stepX, stepY)`\r\n *\r\n * @function Phaser.Actions.IncXY\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} x - The amount to be added to the `x` property.\r\n * @param {number} [y=x] - The amount to be added to the `y` property. If `undefined` or `null` it uses the `x` value.\r\n * @param {number} [stepX=0] - This is added to the `x` amount, multiplied by the iteration counter.\r\n * @param {number} [stepY=0] - This is added to the `y` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar IncXY = function (items, x, y, stepX, stepY, index, direction)\r\n{\r\n if (y === undefined || y === null) { y = x; }\r\n\r\n PropertyValueInc(items, 'x', x, stepX, index, direction);\r\n\r\n return PropertyValueInc(items, 'y', y, stepY, index, direction);\r\n};\r\n\r\nmodule.exports = IncXY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL0luY1hZLmpzPzUwNGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFvQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsT0FBTzs7QUFFL0M7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvSW5jWFkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQcm9wZXJ0eVZhbHVlSW5jID0gcmVxdWlyZSgnLi9Qcm9wZXJ0eVZhbHVlSW5jJyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLCBvciBhbnkgb2JqZWN0cyB0aGF0IGhhdmUgcHVibGljIGB4YCBhbmQgYHlgIHByb3BlcnRpZXMsXHJcbiAqIGFuZCB0aGVuIGFkZHMgdGhlIGdpdmVuIHZhbHVlIHRvIGVhY2ggb2YgdGhlbS5cclxuICpcclxuICogVGhlIG9wdGlvbmFsIGBzdGVwWGAgYW5kIGBzdGVwWWAgcHJvcGVydGllcyBhcmUgYXBwbGllZCBpbmNyZW1lbnRhbGx5LCBtdWx0aXBsaWVkIGJ5IGVhY2ggaXRlbSBpbiB0aGUgYXJyYXkuXHJcbiAqXHJcbiAqIFRvIHVzZSB0aGlzIHdpdGggYSBHcm91cDogYEluY1hZKGdyb3VwLmdldENoaWxkcmVuKCksIHgsIHksIHN0ZXBYLCBzdGVwWSlgXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5JbmNYWVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gVGhlIGFycmF5IG9mIGl0ZW1zIHRvIGJlIHVwZGF0ZWQgYnkgdGhpcyBhY3Rpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGFtb3VudCB0byBiZSBhZGRlZCB0byB0aGUgYHhgIHByb3BlcnR5LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3k9eF0gLSBUaGUgYW1vdW50IHRvIGJlIGFkZGVkIHRvIHRoZSBgeWAgcHJvcGVydHkuIElmIGB1bmRlZmluZWRgIG9yIGBudWxsYCBpdCB1c2VzIHRoZSBgeGAgdmFsdWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFg9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgeGAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwWT0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGB5YCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtpbmRleD0wXSAtIEFuIG9wdGlvbmFsIG9mZnNldCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbSB3aXRoaW4gdGhlIGl0ZW1zIGFycmF5LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJlY3Rpb249MV0gLSBUaGUgZGlyZWN0aW9uIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkuIDEgaXMgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLCAtMSBmcm9tIGVuZCB0byBiZWdpbm5pbmcuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIG9iamVjdHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBJbmNYWSA9IGZ1bmN0aW9uIChpdGVtcywgeCwgeSwgc3RlcFgsIHN0ZXBZLCBpbmRleCwgZGlyZWN0aW9uKVxyXG57XHJcbiAgICBpZiAoeSA9PT0gdW5kZWZpbmVkIHx8IHkgPT09IG51bGwpIHsgeSA9IHg7IH1cclxuXHJcbiAgICBQcm9wZXJ0eVZhbHVlSW5jKGl0ZW1zLCAneCcsIHgsIHN0ZXBYLCBpbmRleCwgZGlyZWN0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gUHJvcGVydHlWYWx1ZUluYyhpdGVtcywgJ3knLCB5LCBzdGVwWSwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEluY1hZO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/IncXY.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/IncY.js":
/*!*************************************************!*\
!*** ./node_modules/phaser/src/actions/IncY.js ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueInc = __webpack_require__(/*! ./PropertyValueInc */ \"./node_modules/phaser/src/actions/PropertyValueInc.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have a public `y` property,\r\n * and then adds the given value to each of their `y` properties.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `IncY(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.IncY\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to be added to the `y` property.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar IncY = function (items, value, step, index, direction)\r\n{\r\n return PropertyValueInc(items, 'y', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = IncY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL0luY1kuanM/MzhiYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsdUJBQXVCLG1CQUFPLENBQUMsaUZBQW9COztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9JbmNZLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUHJvcGVydHlWYWx1ZUluYyA9IHJlcXVpcmUoJy4vUHJvcGVydHlWYWx1ZUluYycpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgb3IgYW55IG9iamVjdHMgdGhhdCBoYXZlIGEgcHVibGljIGB5YCBwcm9wZXJ0eSxcclxuICogYW5kIHRoZW4gYWRkcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gZWFjaCBvZiB0aGVpciBgeWAgcHJvcGVydGllcy5cclxuICpcclxuICogVGhlIG9wdGlvbmFsIGBzdGVwYCBwcm9wZXJ0eSBpcyBhcHBsaWVkIGluY3JlbWVudGFsbHksIG11bHRpcGxpZWQgYnkgZWFjaCBpdGVtIGluIHRoZSBhcnJheS5cclxuICpcclxuICogVG8gdXNlIHRoaXMgd2l0aCBhIEdyb3VwOiBgSW5jWShncm91cC5nZXRDaGlsZHJlbigpLCB2YWx1ZSwgc3RlcClgXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5JbmNZXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBiZSBhZGRlZCB0byB0aGUgYHlgIHByb3BlcnR5LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpcmVjdGlvbj0xXSAtIFRoZSBkaXJlY3Rpb24gdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheS4gMSBpcyBmcm9tIGJlZ2lubmluZyB0byBlbmQsIC0xIGZyb20gZW5kIHRvIGJlZ2lubmluZy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIEluY1kgPSBmdW5jdGlvbiAoaXRlbXMsIHZhbHVlLCBzdGVwLCBpbmRleCwgZGlyZWN0aW9uKVxyXG57XHJcbiAgICByZXR1cm4gUHJvcGVydHlWYWx1ZUluYyhpdGVtcywgJ3knLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEluY1k7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/IncY.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/PlaceOnCircle.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/actions/PlaceOnCircle.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes an array of Game Objects and positions them on evenly spaced points around the perimeter of a Circle.\r\n * \r\n * If you wish to pass a `Phaser.GameObjects.Circle` Shape to this function, you should pass its `geom` property.\r\n *\r\n * @function Phaser.Actions.PlaceOnCircle\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {Phaser.Geom.Circle} circle - The Circle to position the Game Objects on.\r\n * @param {number} [startAngle=0] - Optional angle to start position from, in radians.\r\n * @param {number} [endAngle=6.28] - Optional angle to stop position at, in radians.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar PlaceOnCircle = function (items, circle, startAngle, endAngle)\r\n{\r\n if (startAngle === undefined) { startAngle = 0; }\r\n if (endAngle === undefined) { endAngle = 6.28; }\r\n\r\n var angle = startAngle;\r\n var angleStep = (endAngle - startAngle) / items.length;\r\n\r\n for (var i = 0; i < items.length; i++)\r\n {\r\n items[i].x = circle.x + (circle.radius * Math.cos(angle));\r\n items[i].y = circle.y + (circle.radius * Math.sin(angle));\r\n\r\n angle += angleStep;\r\n }\r\n\r\n return items;\r\n};\r\n\r\nmodule.exports = PlaceOnCircle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1BsYWNlT25DaXJjbGUuanM/ZGQ1MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxtQkFBbUI7QUFDOUIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxnQkFBZ0I7QUFDbkQsaUNBQWlDLGlCQUFpQjs7QUFFbEQ7QUFDQTs7QUFFQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1BsYWNlT25DaXJjbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBhbiBhcnJheSBvZiBHYW1lIE9iamVjdHMgYW5kIHBvc2l0aW9ucyB0aGVtIG9uIGV2ZW5seSBzcGFjZWQgcG9pbnRzIGFyb3VuZCB0aGUgcGVyaW1ldGVyIG9mIGEgQ2lyY2xlLlxyXG4gKiBcclxuICogSWYgeW91IHdpc2ggdG8gcGFzcyBhIGBQaGFzZXIuR2FtZU9iamVjdHMuQ2lyY2xlYCBTaGFwZSB0byB0aGlzIGZ1bmN0aW9uLCB5b3Ugc2hvdWxkIHBhc3MgaXRzIGBnZW9tYCBwcm9wZXJ0eS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLlBsYWNlT25DaXJjbGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cy4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJyYXkgYXJlIHVwZGF0ZWQgYnkgdGhpcyBBY3Rpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBjaXJjbGUgLSBUaGUgQ2lyY2xlIHRvIHBvc2l0aW9uIHRoZSBHYW1lIE9iamVjdHMgb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnRBbmdsZT0wXSAtIE9wdGlvbmFsIGFuZ2xlIHRvIHN0YXJ0IHBvc2l0aW9uIGZyb20sIGluIHJhZGlhbnMuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kQW5nbGU9Ni4yOF0gLSBPcHRpb25hbCBhbmdsZSB0byBzdG9wIHBvc2l0aW9uIGF0LCBpbiByYWRpYW5zLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBHYW1lIE9iamVjdHMgdGhhdCB3YXMgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFBsYWNlT25DaXJjbGUgPSBmdW5jdGlvbiAoaXRlbXMsIGNpcmNsZSwgc3RhcnRBbmdsZSwgZW5kQW5nbGUpXHJcbntcclxuICAgIGlmIChzdGFydEFuZ2xlID09PSB1bmRlZmluZWQpIHsgc3RhcnRBbmdsZSA9IDA7IH1cclxuICAgIGlmIChlbmRBbmdsZSA9PT0gdW5kZWZpbmVkKSB7IGVuZEFuZ2xlID0gNi4yODsgfVxyXG5cclxuICAgIHZhciBhbmdsZSA9IHN0YXJ0QW5nbGU7XHJcbiAgICB2YXIgYW5nbGVTdGVwID0gKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSkgLyBpdGVtcy5sZW5ndGg7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICBpdGVtc1tpXS54ID0gY2lyY2xlLnggKyAoY2lyY2xlLnJhZGl1cyAqIE1hdGguY29zKGFuZ2xlKSk7XHJcbiAgICAgICAgaXRlbXNbaV0ueSA9IGNpcmNsZS55ICsgKGNpcmNsZS5yYWRpdXMgKiBNYXRoLnNpbihhbmdsZSkpO1xyXG5cclxuICAgICAgICBhbmdsZSArPSBhbmdsZVN0ZXA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQbGFjZU9uQ2lyY2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/PlaceOnCircle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/PlaceOnEllipse.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/actions/PlaceOnEllipse.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes an array of Game Objects and positions them on evenly spaced points around the perimeter of an Ellipse.\r\n * \r\n * If you wish to pass a `Phaser.GameObjects.Ellipse` Shape to this function, you should pass its `geom` property.\r\n *\r\n * @function Phaser.Actions.PlaceOnEllipse\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to position the Game Objects on.\r\n * @param {number} [startAngle=0] - Optional angle to start position from, in radians.\r\n * @param {number} [endAngle=6.28] - Optional angle to stop position at, in radians.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar PlaceOnEllipse = function (items, ellipse, startAngle, endAngle)\r\n{\r\n if (startAngle === undefined) { startAngle = 0; }\r\n if (endAngle === undefined) { endAngle = 6.28; }\r\n\r\n var angle = startAngle;\r\n var angleStep = (endAngle - startAngle) / items.length;\r\n\r\n var a = ellipse.width / 2;\r\n var b = ellipse.height / 2;\r\n\r\n for (var i = 0; i < items.length; i++)\r\n {\r\n items[i].x = ellipse.x + a * Math.cos(angle);\r\n items[i].y = ellipse.y + b * Math.sin(angle);\r\n\r\n angle += angleStep;\r\n }\r\n\r\n return items;\r\n};\r\n\r\nmodule.exports = PlaceOnEllipse;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1BsYWNlT25FbGxpcHNlLmpzP2MwYTAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsZ0JBQWdCO0FBQ25ELGlDQUFpQyxpQkFBaUI7O0FBRWxEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1BsYWNlT25FbGxpcHNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzIGFuZCBwb3NpdGlvbnMgdGhlbSBvbiBldmVubHkgc3BhY2VkIHBvaW50cyBhcm91bmQgdGhlIHBlcmltZXRlciBvZiBhbiBFbGxpcHNlLlxyXG4gKiBcclxuICogSWYgeW91IHdpc2ggdG8gcGFzcyBhIGBQaGFzZXIuR2FtZU9iamVjdHMuRWxsaXBzZWAgU2hhcGUgdG8gdGhpcyBmdW5jdGlvbiwgeW91IHNob3VsZCBwYXNzIGl0cyBgZ2VvbWAgcHJvcGVydHkuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5QbGFjZU9uRWxsaXBzZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gQW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLiBUaGUgY29udGVudHMgb2YgdGhpcyBhcnJheSBhcmUgdXBkYXRlZCBieSB0aGlzIEFjdGlvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5FbGxpcHNlfSBlbGxpcHNlIC0gVGhlIEVsbGlwc2UgdG8gcG9zaXRpb24gdGhlIEdhbWUgT2JqZWN0cyBvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydEFuZ2xlPTBdIC0gT3B0aW9uYWwgYW5nbGUgdG8gc3RhcnQgcG9zaXRpb24gZnJvbSwgaW4gcmFkaWFucy5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtlbmRBbmdsZT02LjI4XSAtIE9wdGlvbmFsIGFuZ2xlIHRvIHN0b3AgcG9zaXRpb24gYXQsIGluIHJhZGlhbnMuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0aGF0IHdhcyBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgUGxhY2VPbkVsbGlwc2UgPSBmdW5jdGlvbiAoaXRlbXMsIGVsbGlwc2UsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlKVxyXG57XHJcbiAgICBpZiAoc3RhcnRBbmdsZSA9PT0gdW5kZWZpbmVkKSB7IHN0YXJ0QW5nbGUgPSAwOyB9XHJcbiAgICBpZiAoZW5kQW5nbGUgPT09IHVuZGVmaW5lZCkgeyBlbmRBbmdsZSA9IDYuMjg7IH1cclxuXHJcbiAgICB2YXIgYW5nbGUgPSBzdGFydEFuZ2xlO1xyXG4gICAgdmFyIGFuZ2xlU3RlcCA9IChlbmRBbmdsZSAtIHN0YXJ0QW5nbGUpIC8gaXRlbXMubGVuZ3RoO1xyXG5cclxuICAgIHZhciBhID0gZWxsaXBzZS53aWR0aCAvIDI7XHJcbiAgICB2YXIgYiA9IGVsbGlwc2UuaGVpZ2h0IC8gMjtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIGl0ZW1zW2ldLnggPSBlbGxpcHNlLnggKyBhICogTWF0aC5jb3MoYW5nbGUpO1xyXG4gICAgICAgIGl0ZW1zW2ldLnkgPSBlbGxpcHNlLnkgKyBiICogTWF0aC5zaW4oYW5nbGUpO1xyXG5cclxuICAgICAgICBhbmdsZSArPSBhbmdsZVN0ZXA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQbGFjZU9uRWxsaXBzZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/PlaceOnEllipse.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/PlaceOnLine.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/actions/PlaceOnLine.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetPoints = __webpack_require__(/*! ../geom/line/GetPoints */ \"./node_modules/phaser/src/geom/line/GetPoints.js\");\r\n\r\n/**\r\n * Positions an array of Game Objects on evenly spaced points of a Line.\r\n *\r\n * @function Phaser.Actions.PlaceOnLine\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {Phaser.Geom.Line} line - The Line to position the Game Objects on.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar PlaceOnLine = function (items, line)\r\n{\r\n var points = GetPoints(line, items.length);\r\n\r\n for (var i = 0; i < items.length; i++)\r\n {\r\n var item = items[i];\r\n var point = points[i];\r\n\r\n item.x = point.x;\r\n item.y = point.y;\r\n }\r\n\r\n return items;\r\n};\r\n\r\nmodule.exports = PlaceOnLine;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1BsYWNlT25MaW5lLmpzP2I5NDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLGdGQUF3Qjs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLGlCQUFpQjtBQUM1QjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9QbGFjZU9uTGluZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldFBvaW50cyA9IHJlcXVpcmUoJy4uL2dlb20vbGluZS9HZXRQb2ludHMnKTtcclxuXHJcbi8qKlxyXG4gKiBQb3NpdGlvbnMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzIG9uIGV2ZW5seSBzcGFjZWQgcG9pbnRzIG9mIGEgTGluZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLlBsYWNlT25MaW5lXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBBbiBhcnJheSBvZiBHYW1lIE9iamVjdHMuIFRoZSBjb250ZW50cyBvZiB0aGlzIGFycmF5IGFyZSB1cGRhdGVkIGJ5IHRoaXMgQWN0aW9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgTGluZSB0byBwb3NpdGlvbiB0aGUgR2FtZSBPYmplY3RzIG9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBHYW1lIE9iamVjdHMgdGhhdCB3YXMgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFBsYWNlT25MaW5lID0gZnVuY3Rpb24gKGl0ZW1zLCBsaW5lKVxyXG57XHJcbiAgICB2YXIgcG9pbnRzID0gR2V0UG9pbnRzKGxpbmUsIGl0ZW1zLmxlbmd0aCk7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgaXRlbSA9IGl0ZW1zW2ldO1xyXG4gICAgICAgIHZhciBwb2ludCA9IHBvaW50c1tpXTtcclxuXHJcbiAgICAgICAgaXRlbS54ID0gcG9pbnQueDtcclxuICAgICAgICBpdGVtLnkgPSBwb2ludC55O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpdGVtcztcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGxhY2VPbkxpbmU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/PlaceOnLine.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/PlaceOnRectangle.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/actions/PlaceOnRectangle.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar MarchingAnts = __webpack_require__(/*! ../geom/rectangle/MarchingAnts */ \"./node_modules/phaser/src/geom/rectangle/MarchingAnts.js\");\r\nvar RotateLeft = __webpack_require__(/*! ../utils/array/RotateLeft */ \"./node_modules/phaser/src/utils/array/RotateLeft.js\");\r\nvar RotateRight = __webpack_require__(/*! ../utils/array/RotateRight */ \"./node_modules/phaser/src/utils/array/RotateRight.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects and positions them on evenly spaced points around the perimeter of a Rectangle.\r\n * \r\n * Placement starts from the top-left of the rectangle, and proceeds in a clockwise direction.\r\n * If the `shift` parameter is given you can offset where placement begins.\r\n *\r\n * @function Phaser.Actions.PlaceOnRectangle\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to position the Game Objects on.\r\n * @param {integer} [shift=1] - An optional positional offset.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar PlaceOnRectangle = function (items, rect, shift)\r\n{\r\n if (shift === undefined) { shift = 0; }\r\n\r\n var points = MarchingAnts(rect, false, items.length);\r\n\r\n if (shift > 0)\r\n {\r\n RotateLeft(points, shift);\r\n }\r\n else if (shift < 0)\r\n {\r\n RotateRight(points, Math.abs(shift));\r\n }\r\n\r\n for (var i = 0; i < items.length; i++)\r\n {\r\n items[i].x = points[i].x;\r\n items[i].y = points[i].y;\r\n }\r\n\r\n return items;\r\n};\r\n\r\nmodule.exports = PlaceOnRectangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1BsYWNlT25SZWN0YW5nbGUuanM/NTQ5MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsbUJBQW1CLG1CQUFPLENBQUMsZ0dBQWdDO0FBQzNELGlCQUFpQixtQkFBTyxDQUFDLHNGQUEyQjtBQUNwRCxrQkFBa0IsbUJBQU8sQ0FBQyx3RkFBNEI7O0FBRXREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLFdBQVc7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9QbGFjZU9uUmVjdGFuZ2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTWFyY2hpbmdBbnRzID0gcmVxdWlyZSgnLi4vZ2VvbS9yZWN0YW5nbGUvTWFyY2hpbmdBbnRzJyk7XHJcbnZhciBSb3RhdGVMZWZ0ID0gcmVxdWlyZSgnLi4vdXRpbHMvYXJyYXkvUm90YXRlTGVmdCcpO1xyXG52YXIgUm90YXRlUmlnaHQgPSByZXF1aXJlKCcuLi91dGlscy9hcnJheS9Sb3RhdGVSaWdodCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyBhbmQgcG9zaXRpb25zIHRoZW0gb24gZXZlbmx5IHNwYWNlZCBwb2ludHMgYXJvdW5kIHRoZSBwZXJpbWV0ZXIgb2YgYSBSZWN0YW5nbGUuXHJcbiAqIFxyXG4gKiBQbGFjZW1lbnQgc3RhcnRzIGZyb20gdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGUsIGFuZCBwcm9jZWVkcyBpbiBhIGNsb2Nrd2lzZSBkaXJlY3Rpb24uXHJcbiAqIElmIHRoZSBgc2hpZnRgIHBhcmFtZXRlciBpcyBnaXZlbiB5b3UgY2FuIG9mZnNldCB3aGVyZSBwbGFjZW1lbnQgYmVnaW5zLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuUGxhY2VPblJlY3RhbmdsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gQW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLiBUaGUgY29udGVudHMgb2YgdGhpcyBhcnJheSBhcmUgdXBkYXRlZCBieSB0aGlzIEFjdGlvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3QgLSBUaGUgUmVjdGFuZ2xlIHRvIHBvc2l0aW9uIHRoZSBHYW1lIE9iamVjdHMgb24uXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW3NoaWZ0PTFdIC0gQW4gb3B0aW9uYWwgcG9zaXRpb25hbCBvZmZzZXQuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0aGF0IHdhcyBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgUGxhY2VPblJlY3RhbmdsZSA9IGZ1bmN0aW9uIChpdGVtcywgcmVjdCwgc2hpZnQpXHJcbntcclxuICAgIGlmIChzaGlmdCA9PT0gdW5kZWZpbmVkKSB7IHNoaWZ0ID0gMDsgfVxyXG5cclxuICAgIHZhciBwb2ludHMgPSBNYXJjaGluZ0FudHMocmVjdCwgZmFsc2UsIGl0ZW1zLmxlbmd0aCk7XHJcblxyXG4gICAgaWYgKHNoaWZ0ID4gMClcclxuICAgIHtcclxuICAgICAgICBSb3RhdGVMZWZ0KHBvaW50cywgc2hpZnQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoc2hpZnQgPCAwKVxyXG4gICAge1xyXG4gICAgICAgIFJvdGF0ZVJpZ2h0KHBvaW50cywgTWF0aC5hYnMoc2hpZnQpKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIGl0ZW1zW2ldLnggPSBwb2ludHNbaV0ueDtcclxuICAgICAgICBpdGVtc1tpXS55ID0gcG9pbnRzW2ldLnk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQbGFjZU9uUmVjdGFuZ2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/PlaceOnRectangle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/PlaceOnTriangle.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/actions/PlaceOnTriangle.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BresenhamPoints = __webpack_require__(/*! ../geom/line/BresenhamPoints */ \"./node_modules/phaser/src/geom/line/BresenhamPoints.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects and positions them on evenly spaced points around the edges of a Triangle.\r\n * \r\n * If you wish to pass a `Phaser.GameObjects.Triangle` Shape to this function, you should pass its `geom` property.\r\n *\r\n * @function Phaser.Actions.PlaceOnTriangle\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to position the Game Objects on.\r\n * @param {number} [stepRate=1] - An optional step rate, to increase or decrease the packing of the Game Objects on the lines.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar PlaceOnTriangle = function (items, triangle, stepRate)\r\n{\r\n var p1 = BresenhamPoints({ x1: triangle.x1, y1: triangle.y1, x2: triangle.x2, y2: triangle.y2 }, stepRate);\r\n var p2 = BresenhamPoints({ x1: triangle.x2, y1: triangle.y2, x2: triangle.x3, y2: triangle.y3 }, stepRate);\r\n var p3 = BresenhamPoints({ x1: triangle.x3, y1: triangle.y3, x2: triangle.x1, y2: triangle.y1 }, stepRate);\r\n\r\n // Remove overlaps\r\n p1.pop();\r\n p2.pop();\r\n p3.pop();\r\n\r\n p1 = p1.concat(p2, p3);\r\n\r\n var step = p1.length / items.length;\r\n var p = 0;\r\n\r\n for (var i = 0; i < items.length; i++)\r\n {\r\n var item = items[i];\r\n var point = p1[Math.floor(p)];\r\n\r\n item.x = point.x;\r\n item.y = point.y;\r\n\r\n p += step;\r\n }\r\n\r\n return items;\r\n};\r\n\r\nmodule.exports = PlaceOnTriangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1BsYWNlT25UcmlhbmdsZS5qcz9kZWNhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQyw0RkFBOEI7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixxRUFBcUU7QUFDbkcsOEJBQThCLHFFQUFxRTtBQUNuRyw4QkFBOEIscUVBQXFFOztBQUVuRztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9QbGFjZU9uVHJpYW5nbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCcmVzZW5oYW1Qb2ludHMgPSByZXF1aXJlKCcuLi9nZW9tL2xpbmUvQnJlc2VuaGFtUG9pbnRzJyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzIGFuZCBwb3NpdGlvbnMgdGhlbSBvbiBldmVubHkgc3BhY2VkIHBvaW50cyBhcm91bmQgdGhlIGVkZ2VzIG9mIGEgVHJpYW5nbGUuXHJcbiAqIFxyXG4gKiBJZiB5b3Ugd2lzaCB0byBwYXNzIGEgYFBoYXNlci5HYW1lT2JqZWN0cy5UcmlhbmdsZWAgU2hhcGUgdG8gdGhpcyBmdW5jdGlvbiwgeW91IHNob3VsZCBwYXNzIGl0cyBgZ2VvbWAgcHJvcGVydHkuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5QbGFjZU9uVHJpYW5nbGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cy4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJyYXkgYXJlIHVwZGF0ZWQgYnkgdGhpcyBBY3Rpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlIC0gVGhlIFRyaWFuZ2xlIHRvIHBvc2l0aW9uIHRoZSBHYW1lIE9iamVjdHMgb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFJhdGU9MV0gLSBBbiBvcHRpb25hbCBzdGVwIHJhdGUsIHRvIGluY3JlYXNlIG9yIGRlY3JlYXNlIHRoZSBwYWNraW5nIG9mIHRoZSBHYW1lIE9iamVjdHMgb24gdGhlIGxpbmVzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBHYW1lIE9iamVjdHMgdGhhdCB3YXMgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFBsYWNlT25UcmlhbmdsZSA9IGZ1bmN0aW9uIChpdGVtcywgdHJpYW5nbGUsIHN0ZXBSYXRlKVxyXG57XHJcbiAgICB2YXIgcDEgPSBCcmVzZW5oYW1Qb2ludHMoeyB4MTogdHJpYW5nbGUueDEsIHkxOiB0cmlhbmdsZS55MSwgeDI6IHRyaWFuZ2xlLngyLCB5MjogdHJpYW5nbGUueTIgfSwgc3RlcFJhdGUpO1xyXG4gICAgdmFyIHAyID0gQnJlc2VuaGFtUG9pbnRzKHsgeDE6IHRyaWFuZ2xlLngyLCB5MTogdHJpYW5nbGUueTIsIHgyOiB0cmlhbmdsZS54MywgeTI6IHRyaWFuZ2xlLnkzIH0sIHN0ZXBSYXRlKTtcclxuICAgIHZhciBwMyA9IEJyZXNlbmhhbVBvaW50cyh7IHgxOiB0cmlhbmdsZS54MywgeTE6IHRyaWFuZ2xlLnkzLCB4MjogdHJpYW5nbGUueDEsIHkyOiB0cmlhbmdsZS55MSB9LCBzdGVwUmF0ZSk7XHJcblxyXG4gICAgLy8gIFJlbW92ZSBvdmVybGFwc1xyXG4gICAgcDEucG9wKCk7XHJcbiAgICBwMi5wb3AoKTtcclxuICAgIHAzLnBvcCgpO1xyXG5cclxuICAgIHAxID0gcDEuY29uY2F0KHAyLCBwMyk7XHJcblxyXG4gICAgdmFyIHN0ZXAgPSBwMS5sZW5ndGggLyBpdGVtcy5sZW5ndGg7XHJcbiAgICB2YXIgcCA9IDA7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgaXRlbSA9IGl0ZW1zW2ldO1xyXG4gICAgICAgIHZhciBwb2ludCA9IHAxW01hdGguZmxvb3IocCldO1xyXG5cclxuICAgICAgICBpdGVtLnggPSBwb2ludC54O1xyXG4gICAgICAgIGl0ZW0ueSA9IHBvaW50Lnk7XHJcblxyXG4gICAgICAgIHAgKz0gc3RlcDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBsYWNlT25UcmlhbmdsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/PlaceOnTriangle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/PlayAnimation.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/actions/PlayAnimation.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Play an animation with the given key, starting at the given startFrame on all Game Objects in items.\r\n *\r\n * @function Phaser.Actions.PlayAnimation\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {string} key - The name of the animation to play.\r\n * @param {(string|integer)} [startFrame] - The starting frame of the animation with the given key.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar PlayAnimation = function (items, key, startFrame)\r\n{\r\n for (var i = 0; i < items.length; i++)\r\n {\r\n items[i].anims.play(key, startFrame);\r\n }\r\n\r\n return items;\r\n};\r\n\r\nmodule.exports = PlayAnimation;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1BsYXlBbmltYXRpb24uanM/NmI5ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9QbGF5QW5pbWF0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUGxheSBhbiBhbmltYXRpb24gd2l0aCB0aGUgZ2l2ZW4ga2V5LCBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gc3RhcnRGcmFtZSBvbiBhbGwgR2FtZSBPYmplY3RzIGluIGl0ZW1zLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuUGxheUFuaW1hdGlvblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gQW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLiBUaGUgY29udGVudHMgb2YgdGhpcyBhcnJheSBhcmUgdXBkYXRlZCBieSB0aGlzIEFjdGlvbi5cclxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBuYW1lIG9mIHRoZSBhbmltYXRpb24gdG8gcGxheS5cclxuICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbc3RhcnRGcmFtZV0gLSBUaGUgc3RhcnRpbmcgZnJhbWUgb2YgdGhlIGFuaW1hdGlvbiB3aXRoIHRoZSBnaXZlbiBrZXkuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0aGF0IHdhcyBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgUGxheUFuaW1hdGlvbiA9IGZ1bmN0aW9uIChpdGVtcywga2V5LCBzdGFydEZyYW1lKVxyXG57XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIGl0ZW1zW2ldLmFuaW1zLnBsYXkoa2V5LCBzdGFydEZyYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBsYXlBbmltYXRpb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/PlayAnimation.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/PropertyValueInc.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/actions/PropertyValueInc.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have a public property as defined in `key`,\r\n * and then adds the given value to it.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `PropertyValueInc(group.getChildren(), key, value, step)`\r\n *\r\n * @function Phaser.Actions.PropertyValueInc\r\n * @since 3.3.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {string} key - The property to be updated.\r\n * @param {number} value - The amount to be added to the property.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar PropertyValueInc = function (items, key, value, step, index, direction)\r\n{\r\n if (step === undefined) { step = 0; }\r\n if (index === undefined) { index = 0; }\r\n if (direction === undefined) { direction = 1; }\r\n\r\n var i;\r\n var t = 0;\r\n var end = items.length;\r\n\r\n if (direction === 1)\r\n {\r\n // Start to End\r\n for (i = index; i < end; i++)\r\n {\r\n items[i][key] += value + (t * step);\r\n t++;\r\n }\r\n }\r\n else\r\n {\r\n // End to Start\r\n for (i = index; i >= 0; i--)\r\n {\r\n items[i][key] += value + (t * step);\r\n t++;\r\n }\r\n }\r\n\r\n return items;\r\n};\r\n\r\nmodule.exports = PropertyValueInc;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1Byb3BlcnR5VmFsdWVJbmMuanM/MTk3MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixVQUFVO0FBQ3ZDLDhCQUE4QixXQUFXO0FBQ3pDLGtDQUFrQyxlQUFlOztBQUVqRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFNBQVM7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixRQUFRO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvUHJvcGVydHlWYWx1ZUluYy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgb3IgYW55IG9iamVjdHMgdGhhdCBoYXZlIGEgcHVibGljIHByb3BlcnR5IGFzIGRlZmluZWQgaW4gYGtleWAsXHJcbiAqIGFuZCB0aGVuIGFkZHMgdGhlIGdpdmVuIHZhbHVlIHRvIGl0LlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBQcm9wZXJ0eVZhbHVlSW5jKGdyb3VwLmdldENoaWxkcmVuKCksIGtleSwgdmFsdWUsIHN0ZXApYFxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuUHJvcGVydHlWYWx1ZUluY1xyXG4gKiBAc2luY2UgMy4zLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gVGhlIGFycmF5IG9mIGl0ZW1zIHRvIGJlIHVwZGF0ZWQgYnkgdGhpcyBhY3Rpb24uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgcHJvcGVydHkgdG8gYmUgdXBkYXRlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBiZSBhZGRlZCB0byB0aGUgcHJvcGVydHkuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGB2YWx1ZWAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbaW5kZXg9MF0gLSBBbiBvcHRpb25hbCBvZmZzZXQgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20gd2l0aGluIHRoZSBpdGVtcyBhcnJheS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbZGlyZWN0aW9uPTFdIC0gVGhlIGRpcmVjdGlvbiB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGFycmF5LiAxIGlzIGZyb20gYmVnaW5uaW5nIHRvIGVuZCwgLTEgZnJvbSBlbmQgdG8gYmVnaW5uaW5nLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBvYmplY3RzIHRoYXQgd2VyZSBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgUHJvcGVydHlWYWx1ZUluYyA9IGZ1bmN0aW9uIChpdGVtcywga2V5LCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbilcclxue1xyXG4gICAgaWYgKHN0ZXAgPT09IHVuZGVmaW5lZCkgeyBzdGVwID0gMDsgfVxyXG4gICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHsgaW5kZXggPSAwOyB9XHJcbiAgICBpZiAoZGlyZWN0aW9uID09PSB1bmRlZmluZWQpIHsgZGlyZWN0aW9uID0gMTsgfVxyXG5cclxuICAgIHZhciBpO1xyXG4gICAgdmFyIHQgPSAwO1xyXG4gICAgdmFyIGVuZCA9IGl0ZW1zLmxlbmd0aDtcclxuXHJcbiAgICBpZiAoZGlyZWN0aW9uID09PSAxKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBTdGFydCB0byBFbmRcclxuICAgICAgICBmb3IgKGkgPSBpbmRleDsgaSA8IGVuZDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaXRlbXNbaV1ba2V5XSArPSB2YWx1ZSArICh0ICogc3RlcCk7XHJcbiAgICAgICAgICAgIHQrKztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIEVuZCB0byBTdGFydFxyXG4gICAgICAgIGZvciAoaSA9IGluZGV4OyBpID49IDA7IGktLSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGl0ZW1zW2ldW2tleV0gKz0gdmFsdWUgKyAodCAqIHN0ZXApO1xyXG4gICAgICAgICAgICB0Kys7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpdGVtcztcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUHJvcGVydHlWYWx1ZUluYztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/PropertyValueInc.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/PropertyValueSet.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/actions/PropertyValueSet.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have a public property as defined in `key`,\r\n * and then sets it to the given value.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `PropertyValueSet(group.getChildren(), key, value, step)`\r\n *\r\n * @function Phaser.Actions.PropertyValueSet\r\n * @since 3.3.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {string} key - The property to be updated.\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar PropertyValueSet = function (items, key, value, step, index, direction)\r\n{\r\n if (step === undefined) { step = 0; }\r\n if (index === undefined) { index = 0; }\r\n if (direction === undefined) { direction = 1; }\r\n\r\n var i;\r\n var t = 0;\r\n var end = items.length;\r\n\r\n if (direction === 1)\r\n {\r\n // Start to End\r\n for (i = index; i < end; i++)\r\n {\r\n items[i][key] = value + (t * step);\r\n t++;\r\n }\r\n }\r\n else\r\n {\r\n // End to Start\r\n for (i = index; i >= 0; i--)\r\n {\r\n items[i][key] = value + (t * step);\r\n t++;\r\n }\r\n }\r\n\r\n return items;\r\n};\r\n\r\nmodule.exports = PropertyValueSet;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1Byb3BlcnR5VmFsdWVTZXQuanM/MGI3ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixVQUFVO0FBQ3ZDLDhCQUE4QixXQUFXO0FBQ3pDLGtDQUFrQyxlQUFlOztBQUVqRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFNBQVM7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixRQUFRO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvUHJvcGVydHlWYWx1ZVNldC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgb3IgYW55IG9iamVjdHMgdGhhdCBoYXZlIGEgcHVibGljIHByb3BlcnR5IGFzIGRlZmluZWQgaW4gYGtleWAsXHJcbiAqIGFuZCB0aGVuIHNldHMgaXQgdG8gdGhlIGdpdmVuIHZhbHVlLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBQcm9wZXJ0eVZhbHVlU2V0KGdyb3VwLmdldENoaWxkcmVuKCksIGtleSwgdmFsdWUsIHN0ZXApYFxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuUHJvcGVydHlWYWx1ZVNldFxyXG4gKiBAc2luY2UgMy4zLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gVGhlIGFycmF5IG9mIGl0ZW1zIHRvIGJlIHVwZGF0ZWQgYnkgdGhpcyBhY3Rpb24uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgcHJvcGVydHkgdG8gYmUgdXBkYXRlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBzZXQgdGhlIHByb3BlcnR5IHRvLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpcmVjdGlvbj0xXSAtIFRoZSBkaXJlY3Rpb24gdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheS4gMSBpcyBmcm9tIGJlZ2lubmluZyB0byBlbmQsIC0xIGZyb20gZW5kIHRvIGJlZ2lubmluZy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFByb3BlcnR5VmFsdWVTZXQgPSBmdW5jdGlvbiAoaXRlbXMsIGtleSwgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pXHJcbntcclxuICAgIGlmIChzdGVwID09PSB1bmRlZmluZWQpIHsgc3RlcCA9IDA7IH1cclxuICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7IGluZGV4ID0gMDsgfVxyXG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7IGRpcmVjdGlvbiA9IDE7IH1cclxuXHJcbiAgICB2YXIgaTtcclxuICAgIHZhciB0ID0gMDtcclxuICAgIHZhciBlbmQgPSBpdGVtcy5sZW5ndGg7XHJcblxyXG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gMSlcclxuICAgIHtcclxuICAgICAgICAvLyAgU3RhcnQgdG8gRW5kXHJcbiAgICAgICAgZm9yIChpID0gaW5kZXg7IGkgPCBlbmQ7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGl0ZW1zW2ldW2tleV0gPSB2YWx1ZSArICh0ICogc3RlcCk7XHJcbiAgICAgICAgICAgIHQrKztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIEVuZCB0byBTdGFydFxyXG4gICAgICAgIGZvciAoaSA9IGluZGV4OyBpID49IDA7IGktLSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGl0ZW1zW2ldW2tleV0gPSB2YWx1ZSArICh0ICogc3RlcCk7XHJcbiAgICAgICAgICAgIHQrKztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQcm9wZXJ0eVZhbHVlU2V0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/PropertyValueSet.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/RandomCircle.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/actions/RandomCircle.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Random = __webpack_require__(/*! ../geom/circle/Random */ \"./node_modules/phaser/src/geom/circle/Random.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects and positions them at random locations within the Circle.\r\n * \r\n * If you wish to pass a `Phaser.GameObjects.Circle` Shape to this function, you should pass its `geom` property.\r\n *\r\n * @function Phaser.Actions.RandomCircle\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {Phaser.Geom.Circle} circle - The Circle to position the Game Objects within.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar RandomCircle = function (items, circle)\r\n{\r\n for (var i = 0; i < items.length; i++)\r\n {\r\n Random(circle, items[i]);\r\n }\r\n\r\n return items;\r\n};\r\n\r\nmodule.exports = RandomCircle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1JhbmRvbUNpcmNsZS5qcz80ZGZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsOEVBQXVCOztBQUU1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLG1CQUFtQjtBQUM5QjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1JhbmRvbUNpcmNsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFJhbmRvbSA9IHJlcXVpcmUoJy4uL2dlb20vY2lyY2xlL1JhbmRvbScpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyBhbmQgcG9zaXRpb25zIHRoZW0gYXQgcmFuZG9tIGxvY2F0aW9ucyB3aXRoaW4gdGhlIENpcmNsZS5cclxuICogXHJcbiAqIElmIHlvdSB3aXNoIHRvIHBhc3MgYSBgUGhhc2VyLkdhbWVPYmplY3RzLkNpcmNsZWAgU2hhcGUgdG8gdGhpcyBmdW5jdGlvbiwgeW91IHNob3VsZCBwYXNzIGl0cyBgZ2VvbWAgcHJvcGVydHkuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5SYW5kb21DaXJjbGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cy4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJyYXkgYXJlIHVwZGF0ZWQgYnkgdGhpcyBBY3Rpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBjaXJjbGUgLSBUaGUgQ2lyY2xlIHRvIHBvc2l0aW9uIHRoZSBHYW1lIE9iamVjdHMgd2l0aGluLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBHYW1lIE9iamVjdHMgdGhhdCB3YXMgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFJhbmRvbUNpcmNsZSA9IGZ1bmN0aW9uIChpdGVtcywgY2lyY2xlKVxyXG57XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIFJhbmRvbShjaXJjbGUsIGl0ZW1zW2ldKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJhbmRvbUNpcmNsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/RandomCircle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/RandomEllipse.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/actions/RandomEllipse.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Random = __webpack_require__(/*! ../geom/ellipse/Random */ \"./node_modules/phaser/src/geom/ellipse/Random.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects and positions them at random locations within the Ellipse.\r\n * \r\n * If you wish to pass a `Phaser.GameObjects.Ellipse` Shape to this function, you should pass its `geom` property.\r\n *\r\n * @function Phaser.Actions.RandomEllipse\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to position the Game Objects within.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar RandomEllipse = function (items, ellipse)\r\n{\r\n for (var i = 0; i < items.length; i++)\r\n {\r\n Random(ellipse, items[i]);\r\n }\r\n\r\n return items;\r\n};\r\n\r\nmodule.exports = RandomEllipse;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1JhbmRvbUVsbGlwc2UuanM/NmVjMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsYUFBYSxtQkFBTyxDQUFDLGdGQUF3Qjs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxvQkFBb0I7QUFDL0I7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9SYW5kb21FbGxpcHNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUmFuZG9tID0gcmVxdWlyZSgnLi4vZ2VvbS9lbGxpcHNlL1JhbmRvbScpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyBhbmQgcG9zaXRpb25zIHRoZW0gYXQgcmFuZG9tIGxvY2F0aW9ucyB3aXRoaW4gdGhlIEVsbGlwc2UuXHJcbiAqIFxyXG4gKiBJZiB5b3Ugd2lzaCB0byBwYXNzIGEgYFBoYXNlci5HYW1lT2JqZWN0cy5FbGxpcHNlYCBTaGFwZSB0byB0aGlzIGZ1bmN0aW9uLCB5b3Ugc2hvdWxkIHBhc3MgaXRzIGBnZW9tYCBwcm9wZXJ0eS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLlJhbmRvbUVsbGlwc2VcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cy4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJyYXkgYXJlIHVwZGF0ZWQgYnkgdGhpcyBBY3Rpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uRWxsaXBzZX0gZWxsaXBzZSAtIFRoZSBFbGxpcHNlIHRvIHBvc2l0aW9uIHRoZSBHYW1lIE9iamVjdHMgd2l0aGluLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBHYW1lIE9iamVjdHMgdGhhdCB3YXMgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFJhbmRvbUVsbGlwc2UgPSBmdW5jdGlvbiAoaXRlbXMsIGVsbGlwc2UpXHJcbntcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgUmFuZG9tKGVsbGlwc2UsIGl0ZW1zW2ldKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJhbmRvbUVsbGlwc2U7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/RandomEllipse.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/RandomLine.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/actions/RandomLine.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Random = __webpack_require__(/*! ../geom/line/Random */ \"./node_modules/phaser/src/geom/line/Random.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects and positions them at random locations on the Line.\r\n * \r\n * If you wish to pass a `Phaser.GameObjects.Line` Shape to this function, you should pass its `geom` property.\r\n *\r\n * @function Phaser.Actions.RandomLine\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {Phaser.Geom.Line} line - The Line to position the Game Objects randomly on.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar RandomLine = function (items, line)\r\n{\r\n for (var i = 0; i < items.length; i++)\r\n {\r\n Random(line, items[i]);\r\n }\r\n\r\n return items;\r\n};\r\n\r\nmodule.exports = RandomLine;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1JhbmRvbUxpbmUuanM/NmU3OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsYUFBYSxtQkFBTyxDQUFDLDBFQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9SYW5kb21MaW5lLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUmFuZG9tID0gcmVxdWlyZSgnLi4vZ2VvbS9saW5lL1JhbmRvbScpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyBhbmQgcG9zaXRpb25zIHRoZW0gYXQgcmFuZG9tIGxvY2F0aW9ucyBvbiB0aGUgTGluZS5cclxuICogXHJcbiAqIElmIHlvdSB3aXNoIHRvIHBhc3MgYSBgUGhhc2VyLkdhbWVPYmplY3RzLkxpbmVgIFNoYXBlIHRvIHRoaXMgZnVuY3Rpb24sIHlvdSBzaG91bGQgcGFzcyBpdHMgYGdlb21gIHByb3BlcnR5LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuUmFuZG9tTGluZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gQW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLiBUaGUgY29udGVudHMgb2YgdGhpcyBhcnJheSBhcmUgdXBkYXRlZCBieSB0aGlzIEFjdGlvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIExpbmUgdG8gcG9zaXRpb24gdGhlIEdhbWUgT2JqZWN0cyByYW5kb21seSBvbi5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2YgR2FtZSBPYmplY3RzIHRoYXQgd2FzIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBSYW5kb21MaW5lID0gZnVuY3Rpb24gKGl0ZW1zLCBsaW5lKVxyXG57XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIFJhbmRvbShsaW5lLCBpdGVtc1tpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSYW5kb21MaW5lO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/RandomLine.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/RandomRectangle.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/actions/RandomRectangle.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Random = __webpack_require__(/*! ../geom/rectangle/Random */ \"./node_modules/phaser/src/geom/rectangle/Random.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects and positions them at random locations within the Rectangle.\r\n *\r\n * @function Phaser.Actions.RandomRectangle\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to position the Game Objects within.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar RandomRectangle = function (items, rect)\r\n{\r\n for (var i = 0; i < items.length; i++)\r\n {\r\n Random(rect, items[i]);\r\n }\r\n\r\n return items;\r\n};\r\n\r\nmodule.exports = RandomRectangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1JhbmRvbVJlY3RhbmdsZS5qcz82MjcwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsb0ZBQTBCOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsc0JBQXNCO0FBQ2pDO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvUmFuZG9tUmVjdGFuZ2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUmFuZG9tID0gcmVxdWlyZSgnLi4vZ2VvbS9yZWN0YW5nbGUvUmFuZG9tJyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzIGFuZCBwb3NpdGlvbnMgdGhlbSBhdCByYW5kb20gbG9jYXRpb25zIHdpdGhpbiB0aGUgUmVjdGFuZ2xlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuUmFuZG9tUmVjdGFuZ2xlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBBbiBhcnJheSBvZiBHYW1lIE9iamVjdHMuIFRoZSBjb250ZW50cyBvZiB0aGlzIGFycmF5IGFyZSB1cGRhdGVkIGJ5IHRoaXMgQWN0aW9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdCAtIFRoZSBSZWN0YW5nbGUgdG8gcG9zaXRpb24gdGhlIEdhbWUgT2JqZWN0cyB3aXRoaW4uXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0aGF0IHdhcyBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgUmFuZG9tUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGl0ZW1zLCByZWN0KVxyXG57XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIFJhbmRvbShyZWN0LCBpdGVtc1tpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSYW5kb21SZWN0YW5nbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/RandomRectangle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/RandomTriangle.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/actions/RandomTriangle.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Random = __webpack_require__(/*! ../geom/triangle/Random */ \"./node_modules/phaser/src/geom/triangle/Random.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects and positions them at random locations within the Triangle.\r\n * \r\n * If you wish to pass a `Phaser.GameObjects.Triangle` Shape to this function, you should pass its `geom` property.\r\n *\r\n * @function Phaser.Actions.RandomTriangle\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to position the Game Objects within.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar RandomTriangle = function (items, triangle)\r\n{\r\n for (var i = 0; i < items.length; i++)\r\n {\r\n Random(triangle, items[i]);\r\n }\r\n\r\n return items;\r\n};\r\n\r\nmodule.exports = RandomTriangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1JhbmRvbVRyaWFuZ2xlLmpzP2Y2OWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyxrRkFBeUI7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcscUJBQXFCO0FBQ2hDO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvUmFuZG9tVHJpYW5nbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBSYW5kb20gPSByZXF1aXJlKCcuLi9nZW9tL3RyaWFuZ2xlL1JhbmRvbScpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyBhbmQgcG9zaXRpb25zIHRoZW0gYXQgcmFuZG9tIGxvY2F0aW9ucyB3aXRoaW4gdGhlIFRyaWFuZ2xlLlxyXG4gKiBcclxuICogSWYgeW91IHdpc2ggdG8gcGFzcyBhIGBQaGFzZXIuR2FtZU9iamVjdHMuVHJpYW5nbGVgIFNoYXBlIHRvIHRoaXMgZnVuY3Rpb24sIHlvdSBzaG91bGQgcGFzcyBpdHMgYGdlb21gIHByb3BlcnR5LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuUmFuZG9tVHJpYW5nbGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cy4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJyYXkgYXJlIHVwZGF0ZWQgYnkgdGhpcyBBY3Rpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlIC0gVGhlIFRyaWFuZ2xlIHRvIHBvc2l0aW9uIHRoZSBHYW1lIE9iamVjdHMgd2l0aGluLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBHYW1lIE9iamVjdHMgdGhhdCB3YXMgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFJhbmRvbVRyaWFuZ2xlID0gZnVuY3Rpb24gKGl0ZW1zLCB0cmlhbmdsZSlcclxue1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICBSYW5kb20odHJpYW5nbGUsIGl0ZW1zW2ldKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJhbmRvbVRyaWFuZ2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/RandomTriangle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/Rotate.js":
/*!***************************************************!*\
!*** ./node_modules/phaser/src/actions/Rotate.js ***!
\***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueInc = __webpack_require__(/*! ./PropertyValueInc */ \"./node_modules/phaser/src/actions/PropertyValueInc.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have a public `rotation` property,\r\n * and then adds the given value to each of their `rotation` properties.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `Rotate(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.Rotate\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to be added to the `rotation` property (in radians).\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar Rotate = function (items, value, step, index, direction)\r\n{\r\n return PropertyValueInc(items, 'rotation', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = Rotate;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1JvdGF0ZS5qcz81ZjI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBb0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1JvdGF0ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFByb3BlcnR5VmFsdWVJbmMgPSByZXF1aXJlKCcuL1Byb3BlcnR5VmFsdWVJbmMnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBhbiBhcnJheSBvZiBHYW1lIE9iamVjdHMsIG9yIGFueSBvYmplY3RzIHRoYXQgaGF2ZSBhIHB1YmxpYyBgcm90YXRpb25gIHByb3BlcnR5LFxyXG4gKiBhbmQgdGhlbiBhZGRzIHRoZSBnaXZlbiB2YWx1ZSB0byBlYWNoIG9mIHRoZWlyIGByb3RhdGlvbmAgcHJvcGVydGllcy5cclxuICpcclxuICogVGhlIG9wdGlvbmFsIGBzdGVwYCBwcm9wZXJ0eSBpcyBhcHBsaWVkIGluY3JlbWVudGFsbHksIG11bHRpcGxpZWQgYnkgZWFjaCBpdGVtIGluIHRoZSBhcnJheS5cclxuICpcclxuICogVG8gdXNlIHRoaXMgd2l0aCBhIEdyb3VwOiBgUm90YXRlKGdyb3VwLmdldENoaWxkcmVuKCksIHZhbHVlLCBzdGVwKWBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLlJvdGF0ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gVGhlIGFycmF5IG9mIGl0ZW1zIHRvIGJlIHVwZGF0ZWQgYnkgdGhpcyBhY3Rpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBhbW91bnQgdG8gYmUgYWRkZWQgdG8gdGhlIGByb3RhdGlvbmAgcHJvcGVydHkgKGluIHJhZGlhbnMpLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpcmVjdGlvbj0xXSAtIFRoZSBkaXJlY3Rpb24gdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheS4gMSBpcyBmcm9tIGJlZ2lubmluZyB0byBlbmQsIC0xIGZyb20gZW5kIHRvIGJlZ2lubmluZy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFJvdGF0ZSA9IGZ1bmN0aW9uIChpdGVtcywgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pXHJcbntcclxuICAgIHJldHVybiBQcm9wZXJ0eVZhbHVlSW5jKGl0ZW1zLCAncm90YXRpb24nLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJvdGF0ZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/Rotate.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/RotateAround.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/actions/RotateAround.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar RotateAroundDistance = __webpack_require__(/*! ../math/RotateAroundDistance */ \"./node_modules/phaser/src/math/RotateAroundDistance.js\");\r\nvar DistanceBetween = __webpack_require__(/*! ../math/distance/DistanceBetween */ \"./node_modules/phaser/src/math/distance/DistanceBetween.js\");\r\n\r\n/**\r\n * Rotates each item around the given point by the given angle.\r\n *\r\n * @function Phaser.Actions.RotateAround\r\n * @since 3.0.0\r\n * @see Phaser.Math.RotateAroundDistance\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {object} point - Any object with public `x` and `y` properties.\r\n * @param {number} angle - The angle to rotate by, in radians.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar RotateAround = function (items, point, angle)\r\n{\r\n var x = point.x;\r\n var y = point.y;\r\n\r\n for (var i = 0; i < items.length; i++)\r\n {\r\n var item = items[i];\r\n\r\n RotateAroundDistance(item, x, y, angle, Math.max(1, DistanceBetween(item.x, item.y, x, y)));\r\n }\r\n\r\n return items;\r\n};\r\n\r\nmodule.exports = RotateAround;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1JvdGF0ZUFyb3VuZC5qcz83Njg5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyw0RkFBOEI7QUFDakUsc0JBQXNCLG1CQUFPLENBQUMsb0dBQWtDOztBQUVoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvUm90YXRlQXJvdW5kLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUm90YXRlQXJvdW5kRGlzdGFuY2UgPSByZXF1aXJlKCcuLi9tYXRoL1JvdGF0ZUFyb3VuZERpc3RhbmNlJyk7XHJcbnZhciBEaXN0YW5jZUJldHdlZW4gPSByZXF1aXJlKCcuLi9tYXRoL2Rpc3RhbmNlL0Rpc3RhbmNlQmV0d2VlbicpO1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgZWFjaCBpdGVtIGFyb3VuZCB0aGUgZ2l2ZW4gcG9pbnQgYnkgdGhlIGdpdmVuIGFuZ2xlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuUm90YXRlQXJvdW5kXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAc2VlIFBoYXNlci5NYXRoLlJvdGF0ZUFyb3VuZERpc3RhbmNlXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cy4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJyYXkgYXJlIHVwZGF0ZWQgYnkgdGhpcyBBY3Rpb24uXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBwb2ludCAtIEFueSBvYmplY3Qgd2l0aCBwdWJsaWMgYHhgIGFuZCBgeWAgcHJvcGVydGllcy5cclxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIHRvIHJvdGF0ZSBieSwgaW4gcmFkaWFucy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2YgR2FtZSBPYmplY3RzIHRoYXQgd2FzIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBSb3RhdGVBcm91bmQgPSBmdW5jdGlvbiAoaXRlbXMsIHBvaW50LCBhbmdsZSlcclxue1xyXG4gICAgdmFyIHggPSBwb2ludC54O1xyXG4gICAgdmFyIHkgPSBwb2ludC55O1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTtcclxuXHJcbiAgICAgICAgUm90YXRlQXJvdW5kRGlzdGFuY2UoaXRlbSwgeCwgeSwgYW5nbGUsIE1hdGgubWF4KDEsIERpc3RhbmNlQmV0d2VlbihpdGVtLngsIGl0ZW0ueSwgeCwgeSkpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJvdGF0ZUFyb3VuZDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/RotateAround.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/RotateAroundDistance.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/actions/RotateAroundDistance.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar MathRotateAroundDistance = __webpack_require__(/*! ../math/RotateAroundDistance */ \"./node_modules/phaser/src/math/RotateAroundDistance.js\");\r\n\r\n/**\r\n * Rotates an array of Game Objects around a point by the given angle and distance.\r\n *\r\n * @function Phaser.Actions.RotateAroundDistance\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {object} point - Any object with public `x` and `y` properties.\r\n * @param {number} angle - The angle to rotate by, in radians.\r\n * @param {number} distance - The distance from the point of rotation in pixels.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar RotateAroundDistance = function (items, point, angle, distance)\r\n{\r\n var x = point.x;\r\n var y = point.y;\r\n\r\n // There's nothing to do\r\n if (distance === 0)\r\n {\r\n return items;\r\n }\r\n\r\n for (var i = 0; i < items.length; i++)\r\n {\r\n MathRotateAroundDistance(items[i], x, y, angle, distance);\r\n }\r\n\r\n return items;\r\n};\r\n\r\nmodule.exports = RotateAroundDistance;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1JvdGF0ZUFyb3VuZERpc3RhbmNlLmpzP2MyYTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLCtCQUErQixtQkFBTyxDQUFDLDRGQUE4Qjs7QUFFckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9Sb3RhdGVBcm91bmREaXN0YW5jZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIE1hdGhSb3RhdGVBcm91bmREaXN0YW5jZSA9IHJlcXVpcmUoJy4uL21hdGgvUm90YXRlQXJvdW5kRGlzdGFuY2UnKTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyBhcm91bmQgYSBwb2ludCBieSB0aGUgZ2l2ZW4gYW5nbGUgYW5kIGRpc3RhbmNlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuUm90YXRlQXJvdW5kRGlzdGFuY2VcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cy4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJyYXkgYXJlIHVwZGF0ZWQgYnkgdGhpcyBBY3Rpb24uXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBwb2ludCAtIEFueSBvYmplY3Qgd2l0aCBwdWJsaWMgYHhgIGFuZCBgeWAgcHJvcGVydGllcy5cclxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIHRvIHJvdGF0ZSBieSwgaW4gcmFkaWFucy5cclxuICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlIC0gVGhlIGRpc3RhbmNlIGZyb20gdGhlIHBvaW50IG9mIHJvdGF0aW9uIGluIHBpeGVscy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2YgR2FtZSBPYmplY3RzIHRoYXQgd2FzIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBSb3RhdGVBcm91bmREaXN0YW5jZSA9IGZ1bmN0aW9uIChpdGVtcywgcG9pbnQsIGFuZ2xlLCBkaXN0YW5jZSlcclxue1xyXG4gICAgdmFyIHggPSBwb2ludC54O1xyXG4gICAgdmFyIHkgPSBwb2ludC55O1xyXG5cclxuICAgIC8vICBUaGVyZSdzIG5vdGhpbmcgdG8gZG9cclxuICAgIGlmIChkaXN0YW5jZSA9PT0gMClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICBNYXRoUm90YXRlQXJvdW5kRGlzdGFuY2UoaXRlbXNbaV0sIHgsIHksIGFuZ2xlLCBkaXN0YW5jZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSb3RhdGVBcm91bmREaXN0YW5jZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/RotateAroundDistance.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/ScaleX.js":
/*!***************************************************!*\
!*** ./node_modules/phaser/src/actions/ScaleX.js ***!
\***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueInc = __webpack_require__(/*! ./PropertyValueInc */ \"./node_modules/phaser/src/actions/PropertyValueInc.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have a public `scaleX` property,\r\n * and then adds the given value to each of their `scaleX` properties.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `ScaleX(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.ScaleX\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to be added to the `scaleX` property.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar ScaleX = function (items, value, step, index, direction)\r\n{\r\n return PropertyValueInc(items, 'scaleX', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = ScaleX;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NjYWxlWC5qcz84ZmFjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBb0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NjYWxlWC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFByb3BlcnR5VmFsdWVJbmMgPSByZXF1aXJlKCcuL1Byb3BlcnR5VmFsdWVJbmMnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBhbiBhcnJheSBvZiBHYW1lIE9iamVjdHMsIG9yIGFueSBvYmplY3RzIHRoYXQgaGF2ZSBhIHB1YmxpYyBgc2NhbGVYYCBwcm9wZXJ0eSxcclxuICogYW5kIHRoZW4gYWRkcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gZWFjaCBvZiB0aGVpciBgc2NhbGVYYCBwcm9wZXJ0aWVzLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBTY2FsZVgoZ3JvdXAuZ2V0Q2hpbGRyZW4oKSwgdmFsdWUsIHN0ZXApYFxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuU2NhbGVYXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBiZSBhZGRlZCB0byB0aGUgYHNjYWxlWGAgcHJvcGVydHkuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGB2YWx1ZWAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbaW5kZXg9MF0gLSBBbiBvcHRpb25hbCBvZmZzZXQgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20gd2l0aGluIHRoZSBpdGVtcyBhcnJheS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbZGlyZWN0aW9uPTFdIC0gVGhlIGRpcmVjdGlvbiB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGFycmF5LiAxIGlzIGZyb20gYmVnaW5uaW5nIHRvIGVuZCwgLTEgZnJvbSBlbmQgdG8gYmVnaW5uaW5nLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBvYmplY3RzIHRoYXQgd2VyZSBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgU2NhbGVYID0gZnVuY3Rpb24gKGl0ZW1zLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbilcclxue1xyXG4gICAgcmV0dXJuIFByb3BlcnR5VmFsdWVJbmMoaXRlbXMsICdzY2FsZVgnLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNjYWxlWDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/ScaleX.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/ScaleXY.js":
/*!****************************************************!*\
!*** ./node_modules/phaser/src/actions/ScaleXY.js ***!
\****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueInc = __webpack_require__(/*! ./PropertyValueInc */ \"./node_modules/phaser/src/actions/PropertyValueInc.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have public `scaleX` and `scaleY` properties,\r\n * and then adds the given value to each of them.\r\n *\r\n * The optional `stepX` and `stepY` properties are applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `ScaleXY(group.getChildren(), scaleX, scaleY, stepX, stepY)`\r\n *\r\n * @function Phaser.Actions.ScaleXY\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} scaleX - The amount to be added to the `scaleX` property.\r\n * @param {number} [scaleY] - The amount to be added to the `scaleY` property. If `undefined` or `null` it uses the `scaleX` value.\r\n * @param {number} [stepX=0] - This is added to the `scaleX` amount, multiplied by the iteration counter.\r\n * @param {number} [stepY=0] - This is added to the `scaleY` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar ScaleXY = function (items, scaleX, scaleY, stepX, stepY, index, direction)\r\n{\r\n if (scaleY === undefined || scaleY === null) { scaleY = scaleX; }\r\n\r\n PropertyValueInc(items, 'scaleX', scaleX, stepX, index, direction);\r\n\r\n return PropertyValueInc(items, 'scaleY', scaleY, stepY, index, direction);\r\n};\r\n\r\nmodule.exports = ScaleXY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NjYWxlWFkuanM/MTRiZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsdUJBQXVCLG1CQUFPLENBQUMsaUZBQW9COztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRCxpQkFBaUI7O0FBRW5FOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NjYWxlWFkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQcm9wZXJ0eVZhbHVlSW5jID0gcmVxdWlyZSgnLi9Qcm9wZXJ0eVZhbHVlSW5jJyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLCBvciBhbnkgb2JqZWN0cyB0aGF0IGhhdmUgcHVibGljIGBzY2FsZVhgIGFuZCBgc2NhbGVZYCBwcm9wZXJ0aWVzLFxyXG4gKiBhbmQgdGhlbiBhZGRzIHRoZSBnaXZlbiB2YWx1ZSB0byBlYWNoIG9mIHRoZW0uXHJcbiAqXHJcbiAqIFRoZSBvcHRpb25hbCBgc3RlcFhgIGFuZCBgc3RlcFlgIHByb3BlcnRpZXMgYXJlIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBTY2FsZVhZKGdyb3VwLmdldENoaWxkcmVuKCksIHNjYWxlWCwgc2NhbGVZLCBzdGVwWCwgc3RlcFkpYFxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuU2NhbGVYWVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gVGhlIGFycmF5IG9mIGl0ZW1zIHRvIGJlIHVwZGF0ZWQgYnkgdGhpcyBhY3Rpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVggLSBUaGUgYW1vdW50IHRvIGJlIGFkZGVkIHRvIHRoZSBgc2NhbGVYYCBwcm9wZXJ0eS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzY2FsZVldIC0gVGhlIGFtb3VudCB0byBiZSBhZGRlZCB0byB0aGUgYHNjYWxlWWAgcHJvcGVydHkuIElmIGB1bmRlZmluZWRgIG9yIGBudWxsYCBpdCB1c2VzIHRoZSBgc2NhbGVYYCB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwWD0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGBzY2FsZVhgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFk9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgc2NhbGVZYCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtpbmRleD0wXSAtIEFuIG9wdGlvbmFsIG9mZnNldCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbSB3aXRoaW4gdGhlIGl0ZW1zIGFycmF5LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJlY3Rpb249MV0gLSBUaGUgZGlyZWN0aW9uIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkuIDEgaXMgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLCAtMSBmcm9tIGVuZCB0byBiZWdpbm5pbmcuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIG9iamVjdHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBTY2FsZVhZID0gZnVuY3Rpb24gKGl0ZW1zLCBzY2FsZVgsIHNjYWxlWSwgc3RlcFgsIHN0ZXBZLCBpbmRleCwgZGlyZWN0aW9uKVxyXG57XHJcbiAgICBpZiAoc2NhbGVZID09PSB1bmRlZmluZWQgfHwgc2NhbGVZID09PSBudWxsKSB7IHNjYWxlWSA9IHNjYWxlWDsgfVxyXG5cclxuICAgIFByb3BlcnR5VmFsdWVJbmMoaXRlbXMsICdzY2FsZVgnLCBzY2FsZVgsIHN0ZXBYLCBpbmRleCwgZGlyZWN0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gUHJvcGVydHlWYWx1ZUluYyhpdGVtcywgJ3NjYWxlWScsIHNjYWxlWSwgc3RlcFksIGluZGV4LCBkaXJlY3Rpb24pO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTY2FsZVhZO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/ScaleXY.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/ScaleY.js":
/*!***************************************************!*\
!*** ./node_modules/phaser/src/actions/ScaleY.js ***!
\***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueInc = __webpack_require__(/*! ./PropertyValueInc */ \"./node_modules/phaser/src/actions/PropertyValueInc.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have a public `scaleY` property,\r\n * and then adds the given value to each of their `scaleY` properties.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `ScaleY(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.ScaleY\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to be added to the `scaleY` property.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar ScaleY = function (items, value, step, index, direction)\r\n{\r\n return PropertyValueInc(items, 'scaleY', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = ScaleY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NjYWxlWS5qcz9jYjIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBb0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NjYWxlWS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFByb3BlcnR5VmFsdWVJbmMgPSByZXF1aXJlKCcuL1Byb3BlcnR5VmFsdWVJbmMnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBhbiBhcnJheSBvZiBHYW1lIE9iamVjdHMsIG9yIGFueSBvYmplY3RzIHRoYXQgaGF2ZSBhIHB1YmxpYyBgc2NhbGVZYCBwcm9wZXJ0eSxcclxuICogYW5kIHRoZW4gYWRkcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gZWFjaCBvZiB0aGVpciBgc2NhbGVZYCBwcm9wZXJ0aWVzLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBTY2FsZVkoZ3JvdXAuZ2V0Q2hpbGRyZW4oKSwgdmFsdWUsIHN0ZXApYFxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuU2NhbGVZXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBiZSBhZGRlZCB0byB0aGUgYHNjYWxlWWAgcHJvcGVydHkuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGB2YWx1ZWAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbaW5kZXg9MF0gLSBBbiBvcHRpb25hbCBvZmZzZXQgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20gd2l0aGluIHRoZSBpdGVtcyBhcnJheS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbZGlyZWN0aW9uPTFdIC0gVGhlIGRpcmVjdGlvbiB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGFycmF5LiAxIGlzIGZyb20gYmVnaW5uaW5nIHRvIGVuZCwgLTEgZnJvbSBlbmQgdG8gYmVnaW5uaW5nLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBvYmplY3RzIHRoYXQgd2VyZSBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgU2NhbGVZID0gZnVuY3Rpb24gKGl0ZW1zLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbilcclxue1xyXG4gICAgcmV0dXJuIFByb3BlcnR5VmFsdWVJbmMoaXRlbXMsICdzY2FsZVknLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNjYWxlWTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/ScaleY.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/SetAlpha.js":
/*!*****************************************************!*\
!*** ./node_modules/phaser/src/actions/SetAlpha.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public property `alpha`\r\n * and then sets it to the given value.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetAlpha(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.SetAlpha\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetAlpha = function (items, value, step, index, direction)\r\n{\r\n return PropertyValueSet(items, 'alpha', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = SetAlpha;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldEFscGhhLmpzPzk4NWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFvQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvU2V0QWxwaGEuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQcm9wZXJ0eVZhbHVlU2V0ID0gcmVxdWlyZSgnLi9Qcm9wZXJ0eVZhbHVlU2V0Jyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLCBvciBhbnkgb2JqZWN0cyB0aGF0IGhhdmUgdGhlIHB1YmxpYyBwcm9wZXJ0eSBgYWxwaGFgXHJcbiAqIGFuZCB0aGVuIHNldHMgaXQgdG8gdGhlIGdpdmVuIHZhbHVlLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBTZXRBbHBoYShncm91cC5nZXRDaGlsZHJlbigpLCB2YWx1ZSwgc3RlcClgXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5TZXRBbHBoYVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gVGhlIGFycmF5IG9mIGl0ZW1zIHRvIGJlIHVwZGF0ZWQgYnkgdGhpcyBhY3Rpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBwcm9wZXJ0eSB0by5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYHZhbHVlYCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtpbmRleD0wXSAtIEFuIG9wdGlvbmFsIG9mZnNldCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbSB3aXRoaW4gdGhlIGl0ZW1zIGFycmF5LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJlY3Rpb249MV0gLSBUaGUgZGlyZWN0aW9uIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkuIDEgaXMgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLCAtMSBmcm9tIGVuZCB0byBiZWdpbm5pbmcuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIG9iamVjdHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBTZXRBbHBoYSA9IGZ1bmN0aW9uIChpdGVtcywgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pXHJcbntcclxuICAgIHJldHVybiBQcm9wZXJ0eVZhbHVlU2V0KGl0ZW1zLCAnYWxwaGEnLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNldEFscGhhO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetAlpha.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/SetBlendMode.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/actions/SetBlendMode.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public property `blendMode`\r\n * and then sets it to the given value.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetBlendMode(group.getChildren(), value)`\r\n *\r\n * @function Phaser.Actions.SetBlendMode\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to set the property to.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetBlendMode = function (items, value, index, direction)\r\n{\r\n return PropertyValueSet(items, 'blendMode', value, 0, index, direction);\r\n};\r\n\r\nmodule.exports = SetBlendMode;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldEJsZW5kTW9kZS5qcz9iZWIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBb0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvU2V0QmxlbmRNb2RlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUHJvcGVydHlWYWx1ZVNldCA9IHJlcXVpcmUoJy4vUHJvcGVydHlWYWx1ZVNldCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgb3IgYW55IG9iamVjdHMgdGhhdCBoYXZlIHRoZSBwdWJsaWMgcHJvcGVydHkgYGJsZW5kTW9kZWBcclxuICogYW5kIHRoZW4gc2V0cyBpdCB0byB0aGUgZ2l2ZW4gdmFsdWUuXHJcbiAqXHJcbiAqIFRoZSBvcHRpb25hbCBgc3RlcGAgcHJvcGVydHkgaXMgYXBwbGllZCBpbmNyZW1lbnRhbGx5LCBtdWx0aXBsaWVkIGJ5IGVhY2ggaXRlbSBpbiB0aGUgYXJyYXkuXHJcbiAqXHJcbiAqIFRvIHVzZSB0aGlzIHdpdGggYSBHcm91cDogYFNldEJsZW5kTW9kZShncm91cC5nZXRDaGlsZHJlbigpLCB2YWx1ZSlgXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5TZXRCbGVuZE1vZGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIFRoZSBhcnJheSBvZiBpdGVtcyB0byBiZSB1cGRhdGVkIGJ5IHRoaXMgYWN0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgcHJvcGVydHkgdG8uXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpcmVjdGlvbj0xXSAtIFRoZSBkaXJlY3Rpb24gdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheS4gMSBpcyBmcm9tIGJlZ2lubmluZyB0byBlbmQsIC0xIGZyb20gZW5kIHRvIGJlZ2lubmluZy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFNldEJsZW5kTW9kZSA9IGZ1bmN0aW9uIChpdGVtcywgdmFsdWUsIGluZGV4LCBkaXJlY3Rpb24pXHJcbntcclxuICAgIHJldHVybiBQcm9wZXJ0eVZhbHVlU2V0KGl0ZW1zLCAnYmxlbmRNb2RlJywgdmFsdWUsIDAsIGluZGV4LCBkaXJlY3Rpb24pO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRCbGVuZE1vZGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetBlendMode.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/SetDepth.js":
/*!*****************************************************!*\
!*** ./node_modules/phaser/src/actions/SetDepth.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public property `depth`\r\n * and then sets it to the given value.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetDepth(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.SetDepth\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetDepth = function (items, value, step, index, direction)\r\n{\r\n return PropertyValueSet(items, 'depth', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = SetDepth;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldERlcHRoLmpzP2MyN2YiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFvQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvU2V0RGVwdGguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQcm9wZXJ0eVZhbHVlU2V0ID0gcmVxdWlyZSgnLi9Qcm9wZXJ0eVZhbHVlU2V0Jyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLCBvciBhbnkgb2JqZWN0cyB0aGF0IGhhdmUgdGhlIHB1YmxpYyBwcm9wZXJ0eSBgZGVwdGhgXHJcbiAqIGFuZCB0aGVuIHNldHMgaXQgdG8gdGhlIGdpdmVuIHZhbHVlLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBTZXREZXB0aChncm91cC5nZXRDaGlsZHJlbigpLCB2YWx1ZSwgc3RlcClgXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5TZXREZXB0aFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gVGhlIGFycmF5IG9mIGl0ZW1zIHRvIGJlIHVwZGF0ZWQgYnkgdGhpcyBhY3Rpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBwcm9wZXJ0eSB0by5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYHZhbHVlYCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtpbmRleD0wXSAtIEFuIG9wdGlvbmFsIG9mZnNldCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbSB3aXRoaW4gdGhlIGl0ZW1zIGFycmF5LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJlY3Rpb249MV0gLSBUaGUgZGlyZWN0aW9uIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkuIDEgaXMgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLCAtMSBmcm9tIGVuZCB0byBiZWdpbm5pbmcuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIG9iamVjdHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBTZXREZXB0aCA9IGZ1bmN0aW9uIChpdGVtcywgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pXHJcbntcclxuICAgIHJldHVybiBQcm9wZXJ0eVZhbHVlU2V0KGl0ZW1zLCAnZGVwdGgnLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNldERlcHRoO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetDepth.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/SetHitArea.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/actions/SetHitArea.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Passes all provided Game Objects to the Input Manager to enable them for input with identical areas and callbacks.\r\n * \r\n * @see {@link Phaser.GameObjects.GameObject#setInteractive}\r\n *\r\n * @function Phaser.Actions.SetHitArea\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {*} hitArea - Either an input configuration object, or a geometric shape that defines the hit area for the Game Object. If not specified a Rectangle will be used.\r\n * @param {Phaser.Types.Input.HitAreaCallback} hitAreaCallback - A callback to be invoked when the Game Object is interacted with. If you provide a shape you must also provide a callback.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar SetHitArea = function (items, hitArea, hitAreaCallback)\r\n{\r\n for (var i = 0; i < items.length; i++)\r\n {\r\n items[i].setInteractive(hitArea, hitAreaCallback);\r\n }\r\n\r\n return items;\r\n};\r\n\r\nmodule.exports = SetHitArea;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldEhpdEFyZWEuanM/NDE3MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLEVBQUU7QUFDYixXQUFXLG1DQUFtQztBQUM5QztBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldEhpdEFyZWEuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBQYXNzZXMgYWxsIHByb3ZpZGVkIEdhbWUgT2JqZWN0cyB0byB0aGUgSW5wdXQgTWFuYWdlciB0byBlbmFibGUgdGhlbSBmb3IgaW5wdXQgd2l0aCBpZGVudGljYWwgYXJlYXMgYW5kIGNhbGxiYWNrcy5cclxuICogXHJcbiAqIEBzZWUge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I3NldEludGVyYWN0aXZlfVxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuU2V0SGl0QXJlYVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gQW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLiBUaGUgY29udGVudHMgb2YgdGhpcyBhcnJheSBhcmUgdXBkYXRlZCBieSB0aGlzIEFjdGlvbi5cclxuICogQHBhcmFtIHsqfSBoaXRBcmVhIC0gRWl0aGVyIGFuIGlucHV0IGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhIGdlb21ldHJpYyBzaGFwZSB0aGF0IGRlZmluZXMgdGhlIGhpdCBhcmVhIGZvciB0aGUgR2FtZSBPYmplY3QuIElmIG5vdCBzcGVjaWZpZWQgYSBSZWN0YW5nbGUgd2lsbCBiZSB1c2VkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5IaXRBcmVhQ2FsbGJhY2t9IGhpdEFyZWFDYWxsYmFjayAtIEEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB3aGVuIHRoZSBHYW1lIE9iamVjdCBpcyBpbnRlcmFjdGVkIHdpdGguIElmIHlvdSBwcm92aWRlIGEgc2hhcGUgeW91IG11c3QgYWxzbyBwcm92aWRlIGEgY2FsbGJhY2suXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0aGF0IHdhcyBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgU2V0SGl0QXJlYSA9IGZ1bmN0aW9uIChpdGVtcywgaGl0QXJlYSwgaGl0QXJlYUNhbGxiYWNrKVxyXG57XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIGl0ZW1zW2ldLnNldEludGVyYWN0aXZlKGhpdEFyZWEsIGhpdEFyZWFDYWxsYmFjayk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRIaXRBcmVhO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetHitArea.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/SetOrigin.js":
/*!******************************************************!*\
!*** ./node_modules/phaser/src/actions/SetOrigin.js ***!
\******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public properties `originX` and `originY`\r\n * and then sets them to the given values.\r\n *\r\n * The optional `stepX` and `stepY` properties are applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetOrigin(group.getChildren(), originX, originY, stepX, stepY)`\r\n *\r\n * @function Phaser.Actions.SetOrigin\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} originX - The amount to set the `originX` property to.\r\n * @param {number} [originY] - The amount to set the `originY` property to. If `undefined` or `null` it uses the `originX` value.\r\n * @param {number} [stepX=0] - This is added to the `originX` amount, multiplied by the iteration counter.\r\n * @param {number} [stepY=0] - This is added to the `originY` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetOrigin = function (items, originX, originY, stepX, stepY, index, direction)\r\n{\r\n if (originY === undefined || originY === null) { originY = originX; }\r\n\r\n PropertyValueSet(items, 'originX', originX, stepX, index, direction);\r\n\r\n return PropertyValueSet(items, 'originY', originY, stepY, index, direction);\r\n};\r\n\r\nmodule.exports = SetOrigin;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldE9yaWdpbi5qcz8xMjUxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBb0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELG1CQUFtQjs7QUFFdkU7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvU2V0T3JpZ2luLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUHJvcGVydHlWYWx1ZVNldCA9IHJlcXVpcmUoJy4vUHJvcGVydHlWYWx1ZVNldCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgb3IgYW55IG9iamVjdHMgdGhhdCBoYXZlIHRoZSBwdWJsaWMgcHJvcGVydGllcyBgb3JpZ2luWGAgYW5kIGBvcmlnaW5ZYFxyXG4gKiBhbmQgdGhlbiBzZXRzIHRoZW0gdG8gdGhlIGdpdmVuIHZhbHVlcy5cclxuICpcclxuICogVGhlIG9wdGlvbmFsIGBzdGVwWGAgYW5kIGBzdGVwWWAgcHJvcGVydGllcyBhcmUgYXBwbGllZCBpbmNyZW1lbnRhbGx5LCBtdWx0aXBsaWVkIGJ5IGVhY2ggaXRlbSBpbiB0aGUgYXJyYXkuXHJcbiAqXHJcbiAqIFRvIHVzZSB0aGlzIHdpdGggYSBHcm91cDogYFNldE9yaWdpbihncm91cC5nZXRDaGlsZHJlbigpLCBvcmlnaW5YLCBvcmlnaW5ZLCBzdGVwWCwgc3RlcFkpYFxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuU2V0T3JpZ2luXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IG9yaWdpblggLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgYG9yaWdpblhgIHByb3BlcnR5IHRvLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29yaWdpblldIC0gVGhlIGFtb3VudCB0byBzZXQgdGhlIGBvcmlnaW5ZYCBwcm9wZXJ0eSB0by4gSWYgYHVuZGVmaW5lZGAgb3IgYG51bGxgIGl0IHVzZXMgdGhlIGBvcmlnaW5YYCB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwWD0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGBvcmlnaW5YYCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXBZPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYG9yaWdpbllgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpcmVjdGlvbj0xXSAtIFRoZSBkaXJlY3Rpb24gdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheS4gMSBpcyBmcm9tIGJlZ2lubmluZyB0byBlbmQsIC0xIGZyb20gZW5kIHRvIGJlZ2lubmluZy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFNldE9yaWdpbiA9IGZ1bmN0aW9uIChpdGVtcywgb3JpZ2luWCwgb3JpZ2luWSwgc3RlcFgsIHN0ZXBZLCBpbmRleCwgZGlyZWN0aW9uKVxyXG57XHJcbiAgICBpZiAob3JpZ2luWSA9PT0gdW5kZWZpbmVkIHx8IG9yaWdpblkgPT09IG51bGwpIHsgb3JpZ2luWSA9IG9yaWdpblg7IH1cclxuXHJcbiAgICBQcm9wZXJ0eVZhbHVlU2V0KGl0ZW1zLCAnb3JpZ2luWCcsIG9yaWdpblgsIHN0ZXBYLCBpbmRleCwgZGlyZWN0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gUHJvcGVydHlWYWx1ZVNldChpdGVtcywgJ29yaWdpblknLCBvcmlnaW5ZLCBzdGVwWSwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNldE9yaWdpbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetOrigin.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/SetRotation.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/actions/SetRotation.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public property `rotation`\r\n * and then sets it to the given value.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetRotation(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.SetRotation\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetRotation = function (items, value, step, index, direction)\r\n{\r\n return PropertyValueSet(items, 'rotation', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = SetRotation;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFJvdGF0aW9uLmpzPzgxMzQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFvQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvU2V0Um90YXRpb24uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQcm9wZXJ0eVZhbHVlU2V0ID0gcmVxdWlyZSgnLi9Qcm9wZXJ0eVZhbHVlU2V0Jyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLCBvciBhbnkgb2JqZWN0cyB0aGF0IGhhdmUgdGhlIHB1YmxpYyBwcm9wZXJ0eSBgcm90YXRpb25gXHJcbiAqIGFuZCB0aGVuIHNldHMgaXQgdG8gdGhlIGdpdmVuIHZhbHVlLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBTZXRSb3RhdGlvbihncm91cC5nZXRDaGlsZHJlbigpLCB2YWx1ZSwgc3RlcClgXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5TZXRSb3RhdGlvblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gVGhlIGFycmF5IG9mIGl0ZW1zIHRvIGJlIHVwZGF0ZWQgYnkgdGhpcyBhY3Rpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBwcm9wZXJ0eSB0by5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYHZhbHVlYCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtpbmRleD0wXSAtIEFuIG9wdGlvbmFsIG9mZnNldCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbSB3aXRoaW4gdGhlIGl0ZW1zIGFycmF5LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJlY3Rpb249MV0gLSBUaGUgZGlyZWN0aW9uIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkuIDEgaXMgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLCAtMSBmcm9tIGVuZCB0byBiZWdpbm5pbmcuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIG9iamVjdHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBTZXRSb3RhdGlvbiA9IGZ1bmN0aW9uIChpdGVtcywgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pXHJcbntcclxuICAgIHJldHVybiBQcm9wZXJ0eVZhbHVlU2V0KGl0ZW1zLCAncm90YXRpb24nLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNldFJvdGF0aW9uO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetRotation.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/SetScale.js":
/*!*****************************************************!*\
!*** ./node_modules/phaser/src/actions/SetScale.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public properties `scaleX` and `scaleY`\r\n * and then sets them to the given values.\r\n *\r\n * The optional `stepX` and `stepY` properties are applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetScale(group.getChildren(), scaleX, scaleY, stepX, stepY)`\r\n *\r\n * @function Phaser.Actions.SetScale\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} scaleX - The amount to set the `scaleX` property to.\r\n * @param {number} [scaleY] - The amount to set the `scaleY` property to. If `undefined` or `null` it uses the `scaleX` value.\r\n * @param {number} [stepX=0] - This is added to the `scaleX` amount, multiplied by the iteration counter.\r\n * @param {number} [stepY=0] - This is added to the `scaleY` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetScale = function (items, scaleX, scaleY, stepX, stepY, index, direction)\r\n{\r\n if (scaleY === undefined || scaleY === null) { scaleY = scaleX; }\r\n\r\n PropertyValueSet(items, 'scaleX', scaleX, stepX, index, direction);\r\n\r\n return PropertyValueSet(items, 'scaleY', scaleY, stepY, index, direction);\r\n};\r\n\r\nmodule.exports = SetScale;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFNjYWxlLmpzPzA3Y2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFvQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsaUJBQWlCOztBQUVuRTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9TZXRTY2FsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFByb3BlcnR5VmFsdWVTZXQgPSByZXF1aXJlKCcuL1Byb3BlcnR5VmFsdWVTZXQnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBhbiBhcnJheSBvZiBHYW1lIE9iamVjdHMsIG9yIGFueSBvYmplY3RzIHRoYXQgaGF2ZSB0aGUgcHVibGljIHByb3BlcnRpZXMgYHNjYWxlWGAgYW5kIGBzY2FsZVlgXHJcbiAqIGFuZCB0aGVuIHNldHMgdGhlbSB0byB0aGUgZ2l2ZW4gdmFsdWVzLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBYYCBhbmQgYHN0ZXBZYCBwcm9wZXJ0aWVzIGFyZSBhcHBsaWVkIGluY3JlbWVudGFsbHksIG11bHRpcGxpZWQgYnkgZWFjaCBpdGVtIGluIHRoZSBhcnJheS5cclxuICpcclxuICogVG8gdXNlIHRoaXMgd2l0aCBhIEdyb3VwOiBgU2V0U2NhbGUoZ3JvdXAuZ2V0Q2hpbGRyZW4oKSwgc2NhbGVYLCBzY2FsZVksIHN0ZXBYLCBzdGVwWSlgXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5TZXRTY2FsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gVGhlIGFycmF5IG9mIGl0ZW1zIHRvIGJlIHVwZGF0ZWQgYnkgdGhpcyBhY3Rpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVggLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgYHNjYWxlWGAgcHJvcGVydHkgdG8uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc2NhbGVZXSAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBgc2NhbGVZYCBwcm9wZXJ0eSB0by4gSWYgYHVuZGVmaW5lZGAgb3IgYG51bGxgIGl0IHVzZXMgdGhlIGBzY2FsZVhgIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXBYPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYHNjYWxlWGAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwWT0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGBzY2FsZVlgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpcmVjdGlvbj0xXSAtIFRoZSBkaXJlY3Rpb24gdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheS4gMSBpcyBmcm9tIGJlZ2lubmluZyB0byBlbmQsIC0xIGZyb20gZW5kIHRvIGJlZ2lubmluZy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFNldFNjYWxlID0gZnVuY3Rpb24gKGl0ZW1zLCBzY2FsZVgsIHNjYWxlWSwgc3RlcFgsIHN0ZXBZLCBpbmRleCwgZGlyZWN0aW9uKVxyXG57XHJcbiAgICBpZiAoc2NhbGVZID09PSB1bmRlZmluZWQgfHwgc2NhbGVZID09PSBudWxsKSB7IHNjYWxlWSA9IHNjYWxlWDsgfVxyXG5cclxuICAgIFByb3BlcnR5VmFsdWVTZXQoaXRlbXMsICdzY2FsZVgnLCBzY2FsZVgsIHN0ZXBYLCBpbmRleCwgZGlyZWN0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gUHJvcGVydHlWYWx1ZVNldChpdGVtcywgJ3NjYWxlWScsIHNjYWxlWSwgc3RlcFksIGluZGV4LCBkaXJlY3Rpb24pO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRTY2FsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetScale.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/SetScaleX.js":
/*!******************************************************!*\
!*** ./node_modules/phaser/src/actions/SetScaleX.js ***!
\******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public property `scaleX`\r\n * and then sets it to the given value.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetScaleX(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.SetScaleX\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetScaleX = function (items, value, step, index, direction)\r\n{\r\n return PropertyValueSet(items, 'scaleX', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = SetScaleX;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFNjYWxlWC5qcz9jZTQwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBb0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFNjYWxlWC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFByb3BlcnR5VmFsdWVTZXQgPSByZXF1aXJlKCcuL1Byb3BlcnR5VmFsdWVTZXQnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBhbiBhcnJheSBvZiBHYW1lIE9iamVjdHMsIG9yIGFueSBvYmplY3RzIHRoYXQgaGF2ZSB0aGUgcHVibGljIHByb3BlcnR5IGBzY2FsZVhgXHJcbiAqIGFuZCB0aGVuIHNldHMgaXQgdG8gdGhlIGdpdmVuIHZhbHVlLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBTZXRTY2FsZVgoZ3JvdXAuZ2V0Q2hpbGRyZW4oKSwgdmFsdWUsIHN0ZXApYFxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuU2V0U2NhbGVYXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBzZXQgdGhlIHByb3BlcnR5IHRvLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpcmVjdGlvbj0xXSAtIFRoZSBkaXJlY3Rpb24gdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheS4gMSBpcyBmcm9tIGJlZ2lubmluZyB0byBlbmQsIC0xIGZyb20gZW5kIHRvIGJlZ2lubmluZy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFNldFNjYWxlWCA9IGZ1bmN0aW9uIChpdGVtcywgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pXHJcbntcclxuICAgIHJldHVybiBQcm9wZXJ0eVZhbHVlU2V0KGl0ZW1zLCAnc2NhbGVYJywgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRTY2FsZVg7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetScaleX.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/SetScaleY.js":
/*!******************************************************!*\
!*** ./node_modules/phaser/src/actions/SetScaleY.js ***!
\******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public property `scaleY`\r\n * and then sets it to the given value.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetScaleY(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.SetScaleY\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetScaleY = function (items, value, step, index, direction)\r\n{\r\n return PropertyValueSet(items, 'scaleY', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = SetScaleY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFNjYWxlWS5qcz83NTk4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBb0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFNjYWxlWS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFByb3BlcnR5VmFsdWVTZXQgPSByZXF1aXJlKCcuL1Byb3BlcnR5VmFsdWVTZXQnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBhbiBhcnJheSBvZiBHYW1lIE9iamVjdHMsIG9yIGFueSBvYmplY3RzIHRoYXQgaGF2ZSB0aGUgcHVibGljIHByb3BlcnR5IGBzY2FsZVlgXHJcbiAqIGFuZCB0aGVuIHNldHMgaXQgdG8gdGhlIGdpdmVuIHZhbHVlLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBTZXRTY2FsZVkoZ3JvdXAuZ2V0Q2hpbGRyZW4oKSwgdmFsdWUsIHN0ZXApYFxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuU2V0U2NhbGVZXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBzZXQgdGhlIHByb3BlcnR5IHRvLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpcmVjdGlvbj0xXSAtIFRoZSBkaXJlY3Rpb24gdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheS4gMSBpcyBmcm9tIGJlZ2lubmluZyB0byBlbmQsIC0xIGZyb20gZW5kIHRvIGJlZ2lubmluZy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFNldFNjYWxlWSA9IGZ1bmN0aW9uIChpdGVtcywgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pXHJcbntcclxuICAgIHJldHVybiBQcm9wZXJ0eVZhbHVlU2V0KGl0ZW1zLCAnc2NhbGVZJywgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRTY2FsZVk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetScaleY.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/SetScrollFactor.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/actions/SetScrollFactor.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public properties `scrollFactorX` and `scrollFactorY`\r\n * and then sets them to the given values.\r\n *\r\n * The optional `stepX` and `stepY` properties are applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetScrollFactor(group.getChildren(), scrollFactorX, scrollFactorY, stepX, stepY)`\r\n *\r\n * @function Phaser.Actions.SetScrollFactor\r\n * @since 3.21.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} scrollFactorX - The amount to set the `scrollFactorX` property to.\r\n * @param {number} [scrollFactorY] - The amount to set the `scrollFactorY` property to. If `undefined` or `null` it uses the `scrollFactorX` value.\r\n * @param {number} [stepX=0] - This is added to the `scrollFactorX` amount, multiplied by the iteration counter.\r\n * @param {number} [stepY=0] - This is added to the `scrollFactorY` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetScrollFactor = function (items, scrollFactorX, scrollFactorY, stepX, stepY, index, direction)\r\n{\r\n if (scrollFactorY === undefined || scrollFactorY === null) { scrollFactorY = scrollFactorX; }\r\n\r\n PropertyValueSet(items, 'scrollFactorX', scrollFactorX, stepX, index, direction);\r\n\r\n return PropertyValueSet(items, 'scrollFactorY', scrollFactorY, stepY, index, direction);\r\n};\r\n\r\nmodule.exports = SetScrollFactor;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFNjcm9sbEZhY3Rvci5qcz84MTc0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBb0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsZ0VBQWdFLCtCQUErQjs7QUFFL0Y7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvU2V0U2Nyb2xsRmFjdG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUHJvcGVydHlWYWx1ZVNldCA9IHJlcXVpcmUoJy4vUHJvcGVydHlWYWx1ZVNldCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgb3IgYW55IG9iamVjdHMgdGhhdCBoYXZlIHRoZSBwdWJsaWMgcHJvcGVydGllcyBgc2Nyb2xsRmFjdG9yWGAgYW5kIGBzY3JvbGxGYWN0b3JZYFxyXG4gKiBhbmQgdGhlbiBzZXRzIHRoZW0gdG8gdGhlIGdpdmVuIHZhbHVlcy5cclxuICpcclxuICogVGhlIG9wdGlvbmFsIGBzdGVwWGAgYW5kIGBzdGVwWWAgcHJvcGVydGllcyBhcmUgYXBwbGllZCBpbmNyZW1lbnRhbGx5LCBtdWx0aXBsaWVkIGJ5IGVhY2ggaXRlbSBpbiB0aGUgYXJyYXkuXHJcbiAqXHJcbiAqIFRvIHVzZSB0aGlzIHdpdGggYSBHcm91cDogYFNldFNjcm9sbEZhY3Rvcihncm91cC5nZXRDaGlsZHJlbigpLCBzY3JvbGxGYWN0b3JYLCBzY3JvbGxGYWN0b3JZLCBzdGVwWCwgc3RlcFkpYFxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuU2V0U2Nyb2xsRmFjdG9yXHJcbiAqIEBzaW5jZSAzLjIxLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gVGhlIGFycmF5IG9mIGl0ZW1zIHRvIGJlIHVwZGF0ZWQgYnkgdGhpcyBhY3Rpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzY3JvbGxGYWN0b3JYIC0gVGhlIGFtb3VudCB0byBzZXQgdGhlIGBzY3JvbGxGYWN0b3JYYCBwcm9wZXJ0eSB0by5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzY3JvbGxGYWN0b3JZXSAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBgc2Nyb2xsRmFjdG9yWWAgcHJvcGVydHkgdG8uIElmIGB1bmRlZmluZWRgIG9yIGBudWxsYCBpdCB1c2VzIHRoZSBgc2Nyb2xsRmFjdG9yWGAgdmFsdWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFg9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgc2Nyb2xsRmFjdG9yWGAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwWT0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGBzY3JvbGxGYWN0b3JZYCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtpbmRleD0wXSAtIEFuIG9wdGlvbmFsIG9mZnNldCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbSB3aXRoaW4gdGhlIGl0ZW1zIGFycmF5LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJlY3Rpb249MV0gLSBUaGUgZGlyZWN0aW9uIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkuIDEgaXMgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLCAtMSBmcm9tIGVuZCB0byBiZWdpbm5pbmcuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIG9iamVjdHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBTZXRTY3JvbGxGYWN0b3IgPSBmdW5jdGlvbiAoaXRlbXMsIHNjcm9sbEZhY3RvclgsIHNjcm9sbEZhY3RvclksIHN0ZXBYLCBzdGVwWSwgaW5kZXgsIGRpcmVjdGlvbilcclxue1xyXG4gICAgaWYgKHNjcm9sbEZhY3RvclkgPT09IHVuZGVmaW5lZCB8fCBzY3JvbGxGYWN0b3JZID09PSBudWxsKSB7IHNjcm9sbEZhY3RvclkgPSBzY3JvbGxGYWN0b3JYOyB9XHJcblxyXG4gICAgUHJvcGVydHlWYWx1ZVNldChpdGVtcywgJ3Njcm9sbEZhY3RvclgnLCBzY3JvbGxGYWN0b3JYLCBzdGVwWCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcblxyXG4gICAgcmV0dXJuIFByb3BlcnR5VmFsdWVTZXQoaXRlbXMsICdzY3JvbGxGYWN0b3JZJywgc2Nyb2xsRmFjdG9yWSwgc3RlcFksIGluZGV4LCBkaXJlY3Rpb24pO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRTY3JvbGxGYWN0b3I7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetScrollFactor.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/SetScrollFactorX.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/actions/SetScrollFactorX.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public property `scrollFactorX`\r\n * and then sets it to the given value.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetScrollFactorX(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.SetScrollFactorX\r\n * @since 3.21.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetScrollFactorX = function (items, value, step, index, direction)\r\n{\r\n return PropertyValueSet(items, 'scrollFactorX', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = SetScrollFactorX;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFNjcm9sbEZhY3RvclguanM/YWFkNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsdUJBQXVCLG1CQUFPLENBQUMsaUZBQW9COztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9TZXRTY3JvbGxGYWN0b3JYLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUHJvcGVydHlWYWx1ZVNldCA9IHJlcXVpcmUoJy4vUHJvcGVydHlWYWx1ZVNldCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgb3IgYW55IG9iamVjdHMgdGhhdCBoYXZlIHRoZSBwdWJsaWMgcHJvcGVydHkgYHNjcm9sbEZhY3RvclhgXHJcbiAqIGFuZCB0aGVuIHNldHMgaXQgdG8gdGhlIGdpdmVuIHZhbHVlLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBTZXRTY3JvbGxGYWN0b3JYKGdyb3VwLmdldENoaWxkcmVuKCksIHZhbHVlLCBzdGVwKWBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLlNldFNjcm9sbEZhY3RvclhcclxuICogQHNpbmNlIDMuMjEuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBzZXQgdGhlIHByb3BlcnR5IHRvLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpcmVjdGlvbj0xXSAtIFRoZSBkaXJlY3Rpb24gdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheS4gMSBpcyBmcm9tIGJlZ2lubmluZyB0byBlbmQsIC0xIGZyb20gZW5kIHRvIGJlZ2lubmluZy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFNldFNjcm9sbEZhY3RvclggPSBmdW5jdGlvbiAoaXRlbXMsIHZhbHVlLCBzdGVwLCBpbmRleCwgZGlyZWN0aW9uKVxyXG57XHJcbiAgICByZXR1cm4gUHJvcGVydHlWYWx1ZVNldChpdGVtcywgJ3Njcm9sbEZhY3RvclgnLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNldFNjcm9sbEZhY3Rvclg7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetScrollFactorX.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/SetScrollFactorY.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/actions/SetScrollFactorY.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public property `scrollFactorY`\r\n * and then sets it to the given value.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetScrollFactorY(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.SetScrollFactorY\r\n * @since 3.21.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetScrollFactorY = function (items, value, step, index, direction)\r\n{\r\n return PropertyValueSet(items, 'scrollFactorY', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = SetScrollFactorY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFNjcm9sbEZhY3RvclkuanM/MzJhMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsdUJBQXVCLG1CQUFPLENBQUMsaUZBQW9COztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9TZXRTY3JvbGxGYWN0b3JZLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUHJvcGVydHlWYWx1ZVNldCA9IHJlcXVpcmUoJy4vUHJvcGVydHlWYWx1ZVNldCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgb3IgYW55IG9iamVjdHMgdGhhdCBoYXZlIHRoZSBwdWJsaWMgcHJvcGVydHkgYHNjcm9sbEZhY3RvcllgXHJcbiAqIGFuZCB0aGVuIHNldHMgaXQgdG8gdGhlIGdpdmVuIHZhbHVlLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBTZXRTY3JvbGxGYWN0b3JZKGdyb3VwLmdldENoaWxkcmVuKCksIHZhbHVlLCBzdGVwKWBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLlNldFNjcm9sbEZhY3RvcllcclxuICogQHNpbmNlIDMuMjEuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBzZXQgdGhlIHByb3BlcnR5IHRvLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpcmVjdGlvbj0xXSAtIFRoZSBkaXJlY3Rpb24gdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheS4gMSBpcyBmcm9tIGJlZ2lubmluZyB0byBlbmQsIC0xIGZyb20gZW5kIHRvIGJlZ2lubmluZy5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBUaGUgYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFNldFNjcm9sbEZhY3RvclkgPSBmdW5jdGlvbiAoaXRlbXMsIHZhbHVlLCBzdGVwLCBpbmRleCwgZGlyZWN0aW9uKVxyXG57XHJcbiAgICByZXR1cm4gUHJvcGVydHlWYWx1ZVNldChpdGVtcywgJ3Njcm9sbEZhY3RvclknLCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNldFNjcm9sbEZhY3Rvclk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetScrollFactorY.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/SetTint.js":
/*!****************************************************!*\
!*** ./node_modules/phaser/src/actions/SetTint.js ***!
\****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public method setTint() and then updates it to the given value(s). You can specify tint color per corner or provide only one color value for `topLeft` parameter, in which case whole item will be tinted with that color.\r\n *\r\n * @function Phaser.Actions.SetTint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {number} topLeft - The tint being applied to top-left corner of item. If other parameters are given no value, this tint will be applied to whole item.\r\n * @param {number} [topRight] - The tint to be applied to top-right corner of item.\r\n * @param {number} [bottomLeft] - The tint to be applied to the bottom-left corner of item.\r\n * @param {number} [bottomRight] - The tint to be applied to the bottom-right corner of item.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar SetTint = function (items, topLeft, topRight, bottomLeft, bottomRight)\r\n{\r\n for (var i = 0; i < items.length; i++)\r\n {\r\n items[i].setTint(topLeft, topRight, bottomLeft, bottomRight);\r\n }\r\n\r\n return items;\r\n};\r\n\r\nmodule.exports = SetTint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFRpbnQuanM/ODM2ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9TZXRUaW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLCBvciBhbnkgb2JqZWN0cyB0aGF0IGhhdmUgdGhlIHB1YmxpYyBtZXRob2Qgc2V0VGludCgpIGFuZCB0aGVuIHVwZGF0ZXMgaXQgdG8gdGhlIGdpdmVuIHZhbHVlKHMpLiBZb3UgY2FuIHNwZWNpZnkgdGludCBjb2xvciBwZXIgY29ybmVyIG9yIHByb3ZpZGUgb25seSBvbmUgY29sb3IgdmFsdWUgZm9yIGB0b3BMZWZ0YCBwYXJhbWV0ZXIsIGluIHdoaWNoIGNhc2Ugd2hvbGUgaXRlbSB3aWxsIGJlIHRpbnRlZCB3aXRoIHRoYXQgY29sb3IuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5TZXRUaW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBBbiBhcnJheSBvZiBHYW1lIE9iamVjdHMuIFRoZSBjb250ZW50cyBvZiB0aGlzIGFycmF5IGFyZSB1cGRhdGVkIGJ5IHRoaXMgQWN0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdG9wTGVmdCAtIFRoZSB0aW50IGJlaW5nIGFwcGxpZWQgdG8gdG9wLWxlZnQgY29ybmVyIG9mIGl0ZW0uIElmIG90aGVyIHBhcmFtZXRlcnMgYXJlIGdpdmVuIG5vIHZhbHVlLCB0aGlzIHRpbnQgd2lsbCBiZSBhcHBsaWVkIHRvIHdob2xlIGl0ZW0uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbdG9wUmlnaHRdIC0gVGhlIHRpbnQgdG8gYmUgYXBwbGllZCB0byB0b3AtcmlnaHQgY29ybmVyIG9mIGl0ZW0uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYm90dG9tTGVmdF0gLSBUaGUgdGludCB0byBiZSBhcHBsaWVkIHRvIHRoZSBib3R0b20tbGVmdCBjb3JuZXIgb2YgaXRlbS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtib3R0b21SaWdodF0gLSBUaGUgdGludCB0byBiZSBhcHBsaWVkIHRvIHRoZSBib3R0b20tcmlnaHQgY29ybmVyIG9mIGl0ZW0uXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0aGF0IHdhcyBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgU2V0VGludCA9IGZ1bmN0aW9uIChpdGVtcywgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KVxyXG57XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIGl0ZW1zW2ldLnNldFRpbnQodG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNldFRpbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetTint.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/SetVisible.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/actions/SetVisible.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public property `visible`\r\n * and then sets it to the given value.\r\n *\r\n * To use this with a Group: `SetVisible(group.getChildren(), value)`\r\n *\r\n * @function Phaser.Actions.SetVisible\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {boolean} value - The value to set the property to.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetVisible = function (items, value, index, direction)\r\n{\r\n return PropertyValueSet(items, 'visible', value, 0, index, direction);\r\n};\r\n\r\nmodule.exports = SetVisible;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFZpc2libGUuanM/YWM3ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsdUJBQXVCLG1CQUFPLENBQUMsaUZBQW9COztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvU2V0VmlzaWJsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFByb3BlcnR5VmFsdWVTZXQgPSByZXF1aXJlKCcuL1Byb3BlcnR5VmFsdWVTZXQnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBhbiBhcnJheSBvZiBHYW1lIE9iamVjdHMsIG9yIGFueSBvYmplY3RzIHRoYXQgaGF2ZSB0aGUgcHVibGljIHByb3BlcnR5IGB2aXNpYmxlYFxyXG4gKiBhbmQgdGhlbiBzZXRzIGl0IHRvIHRoZSBnaXZlbiB2YWx1ZS5cclxuICpcclxuICogVG8gdXNlIHRoaXMgd2l0aCBhIEdyb3VwOiBgU2V0VmlzaWJsZShncm91cC5nZXRDaGlsZHJlbigpLCB2YWx1ZSlgXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5TZXRWaXNpYmxlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzZXQgdGhlIHByb3BlcnR5IHRvLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtpbmRleD0wXSAtIEFuIG9wdGlvbmFsIG9mZnNldCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbSB3aXRoaW4gdGhlIGl0ZW1zIGFycmF5LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJlY3Rpb249MV0gLSBUaGUgZGlyZWN0aW9uIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkuIDEgaXMgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLCAtMSBmcm9tIGVuZCB0byBiZWdpbm5pbmcuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIG9iamVjdHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGlzIEFjdGlvbi5cclxuICovXHJcbnZhciBTZXRWaXNpYmxlID0gZnVuY3Rpb24gKGl0ZW1zLCB2YWx1ZSwgaW5kZXgsIGRpcmVjdGlvbilcclxue1xyXG4gICAgcmV0dXJuIFByb3BlcnR5VmFsdWVTZXQoaXRlbXMsICd2aXNpYmxlJywgdmFsdWUsIDAsIGluZGV4LCBkaXJlY3Rpb24pO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRWaXNpYmxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetVisible.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/SetX.js":
/*!*************************************************!*\
!*** ./node_modules/phaser/src/actions/SetX.js ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public property `x`\r\n * and then sets it to the given value.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetX(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.SetX\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetX = function (items, value, step, index, direction)\r\n{\r\n return PropertyValueSet(items, 'x', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = SetX;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFguanM/ZWFlYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsdUJBQXVCLG1CQUFPLENBQUMsaUZBQW9COztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9TZXRYLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUHJvcGVydHlWYWx1ZVNldCA9IHJlcXVpcmUoJy4vUHJvcGVydHlWYWx1ZVNldCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgb3IgYW55IG9iamVjdHMgdGhhdCBoYXZlIHRoZSBwdWJsaWMgcHJvcGVydHkgYHhgXHJcbiAqIGFuZCB0aGVuIHNldHMgaXQgdG8gdGhlIGdpdmVuIHZhbHVlLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBTZXRYKGdyb3VwLmdldENoaWxkcmVuKCksIHZhbHVlLCBzdGVwKWBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLlNldFhcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIFRoZSBhcnJheSBvZiBpdGVtcyB0byBiZSB1cGRhdGVkIGJ5IHRoaXMgYWN0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgcHJvcGVydHkgdG8uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGB2YWx1ZWAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbaW5kZXg9MF0gLSBBbiBvcHRpb25hbCBvZmZzZXQgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20gd2l0aGluIHRoZSBpdGVtcyBhcnJheS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbZGlyZWN0aW9uPTFdIC0gVGhlIGRpcmVjdGlvbiB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGFycmF5LiAxIGlzIGZyb20gYmVnaW5uaW5nIHRvIGVuZCwgLTEgZnJvbSBlbmQgdG8gYmVnaW5uaW5nLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBvYmplY3RzIHRoYXQgd2VyZSBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgU2V0WCA9IGZ1bmN0aW9uIChpdGVtcywgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pXHJcbntcclxuICAgIHJldHVybiBQcm9wZXJ0eVZhbHVlU2V0KGl0ZW1zLCAneCcsIHZhbHVlLCBzdGVwLCBpbmRleCwgZGlyZWN0aW9uKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2V0WDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetX.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/SetXY.js":
/*!**************************************************!*\
!*** ./node_modules/phaser/src/actions/SetXY.js ***!
\**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public properties `x` and `y`\r\n * and then sets them to the given values.\r\n *\r\n * The optional `stepX` and `stepY` properties are applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetXY(group.getChildren(), x, y, stepX, stepY)`\r\n *\r\n * @function Phaser.Actions.SetXY\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} x - The amount to set the `x` property to.\r\n * @param {number} [y=x] - The amount to set the `y` property to. If `undefined` or `null` it uses the `x` value.\r\n * @param {number} [stepX=0] - This is added to the `x` amount, multiplied by the iteration counter.\r\n * @param {number} [stepY=0] - This is added to the `y` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetXY = function (items, x, y, stepX, stepY, index, direction)\r\n{\r\n if (y === undefined || y === null) { y = x; }\r\n\r\n PropertyValueSet(items, 'x', x, stepX, index, direction);\r\n\r\n return PropertyValueSet(items, 'y', y, stepY, index, direction);\r\n};\r\n\r\nmodule.exports = SetXY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFhZLmpzP2MyNDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFvQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsT0FBTzs7QUFFL0M7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvU2V0WFkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQcm9wZXJ0eVZhbHVlU2V0ID0gcmVxdWlyZSgnLi9Qcm9wZXJ0eVZhbHVlU2V0Jyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLCBvciBhbnkgb2JqZWN0cyB0aGF0IGhhdmUgdGhlIHB1YmxpYyBwcm9wZXJ0aWVzIGB4YCBhbmQgYHlgXHJcbiAqIGFuZCB0aGVuIHNldHMgdGhlbSB0byB0aGUgZ2l2ZW4gdmFsdWVzLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBYYCBhbmQgYHN0ZXBZYCBwcm9wZXJ0aWVzIGFyZSBhcHBsaWVkIGluY3JlbWVudGFsbHksIG11bHRpcGxpZWQgYnkgZWFjaCBpdGVtIGluIHRoZSBhcnJheS5cclxuICpcclxuICogVG8gdXNlIHRoaXMgd2l0aCBhIEdyb3VwOiBgU2V0WFkoZ3JvdXAuZ2V0Q2hpbGRyZW4oKSwgeCwgeSwgc3RlcFgsIHN0ZXBZKWBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLlNldFhZXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBUaGUgYXJyYXkgb2YgaXRlbXMgdG8gYmUgdXBkYXRlZCBieSB0aGlzIGFjdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgYHhgIHByb3BlcnR5IHRvLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3k9eF0gLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgYHlgIHByb3BlcnR5IHRvLiBJZiBgdW5kZWZpbmVkYCBvciBgbnVsbGAgaXQgdXNlcyB0aGUgYHhgIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXBYPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYHhgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFk9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgeWAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbaW5kZXg9MF0gLSBBbiBvcHRpb25hbCBvZmZzZXQgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20gd2l0aGluIHRoZSBpdGVtcyBhcnJheS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbZGlyZWN0aW9uPTFdIC0gVGhlIGRpcmVjdGlvbiB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGFycmF5LiAxIGlzIGZyb20gYmVnaW5uaW5nIHRvIGVuZCwgLTEgZnJvbSBlbmQgdG8gYmVnaW5uaW5nLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBvYmplY3RzIHRoYXQgd2VyZSBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgU2V0WFkgPSBmdW5jdGlvbiAoaXRlbXMsIHgsIHksIHN0ZXBYLCBzdGVwWSwgaW5kZXgsIGRpcmVjdGlvbilcclxue1xyXG4gICAgaWYgKHkgPT09IHVuZGVmaW5lZCB8fCB5ID09PSBudWxsKSB7IHkgPSB4OyB9XHJcblxyXG4gICAgUHJvcGVydHlWYWx1ZVNldChpdGVtcywgJ3gnLCB4LCBzdGVwWCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcblxyXG4gICAgcmV0dXJuIFByb3BlcnR5VmFsdWVTZXQoaXRlbXMsICd5JywgeSwgc3RlcFksIGluZGV4LCBkaXJlY3Rpb24pO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRYWTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetXY.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/SetY.js":
/*!*************************************************!*\
!*** ./node_modules/phaser/src/actions/SetY.js ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PropertyValueSet = __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\");\r\n\r\n/**\r\n * Takes an array of Game Objects, or any objects that have the public property `y`\r\n * and then sets it to the given value.\r\n *\r\n * The optional `step` property is applied incrementally, multiplied by each item in the array.\r\n *\r\n * To use this with a Group: `SetY(group.getChildren(), value, step)`\r\n *\r\n * @function Phaser.Actions.SetY\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - The array of items to be updated by this action.\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of objects that were passed to this Action.\r\n */\r\nvar SetY = function (items, value, step, index, direction)\r\n{\r\n return PropertyValueSet(items, 'y', value, step, index, direction);\r\n};\r\n\r\nmodule.exports = SetY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NldFkuanM/ZWRhOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsdUJBQXVCLG1CQUFPLENBQUMsaUZBQW9COztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9TZXRZLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUHJvcGVydHlWYWx1ZVNldCA9IHJlcXVpcmUoJy4vUHJvcGVydHlWYWx1ZVNldCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgb3IgYW55IG9iamVjdHMgdGhhdCBoYXZlIHRoZSBwdWJsaWMgcHJvcGVydHkgYHlgXHJcbiAqIGFuZCB0aGVuIHNldHMgaXQgdG8gdGhlIGdpdmVuIHZhbHVlLlxyXG4gKlxyXG4gKiBUaGUgb3B0aW9uYWwgYHN0ZXBgIHByb3BlcnR5IGlzIGFwcGxpZWQgaW5jcmVtZW50YWxseSwgbXVsdGlwbGllZCBieSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUbyB1c2UgdGhpcyB3aXRoIGEgR3JvdXA6IGBTZXRZKGdyb3VwLmdldENoaWxkcmVuKCksIHZhbHVlLCBzdGVwKWBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLlNldFlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIFRoZSBhcnJheSBvZiBpdGVtcyB0byBiZSB1cGRhdGVkIGJ5IHRoaXMgYWN0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgcHJvcGVydHkgdG8uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGB2YWx1ZWAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbaW5kZXg9MF0gLSBBbiBvcHRpb25hbCBvZmZzZXQgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20gd2l0aGluIHRoZSBpdGVtcyBhcnJheS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbZGlyZWN0aW9uPTFdIC0gVGhlIGRpcmVjdGlvbiB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGFycmF5LiAxIGlzIGZyb20gYmVnaW5uaW5nIHRvIGVuZCwgLTEgZnJvbSBlbmQgdG8gYmVnaW5uaW5nLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBvYmplY3RzIHRoYXQgd2VyZSBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgU2V0WSA9IGZ1bmN0aW9uIChpdGVtcywgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pXHJcbntcclxuICAgIHJldHVybiBQcm9wZXJ0eVZhbHVlU2V0KGl0ZW1zLCAneScsIHZhbHVlLCBzdGVwLCBpbmRleCwgZGlyZWN0aW9uKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2V0WTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SetY.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/ShiftPosition.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/actions/ShiftPosition.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Vector2 = __webpack_require__(/*! ../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * Iterate through the items array changing the position of each element to be that of the element that came before\r\n * it in the array (or after it if direction = 1)\r\n * \r\n * The first items position is set to x/y.\r\n * \r\n * The final x/y coords are returned\r\n *\r\n * @function Phaser.Actions.ShiftPosition\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items]\r\n * @generic {Phaser.Math.Vector2} O - [output,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {number} x - The x coordinate to place the first item in the array at.\r\n * @param {number} y - The y coordinate to place the first item in the array at.\r\n * @param {integer} [direction=0] - The iteration direction. 0 = first to last and 1 = last to first.\r\n * @param {(Phaser.Math.Vector2|object)} [output] - An optional objec to store the final objects position in.\r\n *\r\n * @return {Phaser.Math.Vector2} The output vector.\r\n */\r\nvar ShiftPosition = function (items, x, y, direction, output)\r\n{\r\n if (direction === undefined) { direction = 0; }\r\n if (output === undefined) { output = new Vector2(); }\r\n\r\n var px;\r\n var py;\r\n\r\n if (items.length > 1)\r\n {\r\n var i;\r\n var cx;\r\n var cy;\r\n var cur;\r\n\r\n if (direction === 0)\r\n {\r\n // Bottom to Top\r\n\r\n var len = items.length - 1;\r\n\r\n px = items[len].x;\r\n py = items[len].y;\r\n\r\n for (i = len - 1; i >= 0; i--)\r\n {\r\n // Current item\r\n cur = items[i];\r\n\r\n // Get current item x/y, to be passed to the next item in the list\r\n cx = cur.x;\r\n cy = cur.y;\r\n\r\n // Set current item to the previous items x/y\r\n cur.x = px;\r\n cur.y = py;\r\n\r\n // Set current as previous\r\n px = cx;\r\n py = cy;\r\n }\r\n\r\n // Update the head item to the new x/y coordinates\r\n items[len].x = x;\r\n items[len].y = y;\r\n }\r\n else\r\n {\r\n // Top to Bottom\r\n\r\n px = items[0].x;\r\n py = items[0].y;\r\n\r\n for (i = 1; i < items.length; i++)\r\n {\r\n // Current item\r\n cur = items[i];\r\n\r\n // Get current item x/y, to be passed to the next item in the list\r\n cx = cur.x;\r\n cy = cur.y;\r\n\r\n // Set current item to the previous items x/y\r\n cur.x = px;\r\n cur.y = py;\r\n\r\n // Set current as previous\r\n px = cx;\r\n py = cy;\r\n }\r\n\r\n // Update the head item to the new x/y coordinates\r\n items[0].x = x;\r\n items[0].y = y;\r\n }\r\n }\r\n else\r\n {\r\n px = items[0].x;\r\n py = items[0].y;\r\n\r\n items[0].x = x;\r\n items[0].y = y;\r\n }\r\n\r\n // Return the final set of coordinates as they're effectively lost from the shift and may be needed\r\n\r\n output.x = px;\r\n output.y = py;\r\n\r\n return output;\r\n};\r\n\r\nmodule.exports = ShiftPosition;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NoaWZ0UG9zaXRpb24uanM/MTZjMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLGtFQUFpQjs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDLGFBQWEsb0JBQW9CO0FBQ2pDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyw2QkFBNkI7QUFDeEM7QUFDQSxZQUFZLG9CQUFvQjtBQUNoQztBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsZUFBZTtBQUNqRCwrQkFBK0Isd0JBQXdCOztBQUV2RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSw2QkFBNkIsUUFBUTtBQUNyQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVCQUF1QixrQkFBa0I7QUFDekM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NoaWZ0UG9zaXRpb24uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vbWF0aC9WZWN0b3IyJyk7XHJcblxyXG4vKipcclxuICogSXRlcmF0ZSB0aHJvdWdoIHRoZSBpdGVtcyBhcnJheSBjaGFuZ2luZyB0aGUgcG9zaXRpb24gb2YgZWFjaCBlbGVtZW50IHRvIGJlIHRoYXQgb2YgdGhlIGVsZW1lbnQgdGhhdCBjYW1lIGJlZm9yZVxyXG4gKiBpdCBpbiB0aGUgYXJyYXkgKG9yIGFmdGVyIGl0IGlmIGRpcmVjdGlvbiA9IDEpXHJcbiAqIFxyXG4gKiBUaGUgZmlyc3QgaXRlbXMgcG9zaXRpb24gaXMgc2V0IHRvIHgveS5cclxuICogXHJcbiAqIFRoZSBmaW5hbCB4L3kgY29vcmRzIGFyZSByZXR1cm5lZFxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuU2hpZnRQb3NpdGlvblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXNdXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBPIC0gW291dHB1dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBBbiBhcnJheSBvZiBHYW1lIE9iamVjdHMuIFRoZSBjb250ZW50cyBvZiB0aGlzIGFycmF5IGFyZSB1cGRhdGVkIGJ5IHRoaXMgQWN0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gcGxhY2UgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGFycmF5IGF0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gcGxhY2UgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGFycmF5IGF0LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJlY3Rpb249MF0gLSBUaGUgaXRlcmF0aW9uIGRpcmVjdGlvbi4gMCA9IGZpcnN0IHRvIGxhc3QgYW5kIDEgPSBsYXN0IHRvIGZpcnN0LlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuTWF0aC5WZWN0b3IyfG9iamVjdCl9IFtvdXRwdXRdIC0gQW4gb3B0aW9uYWwgb2JqZWMgdG8gc3RvcmUgdGhlIGZpbmFsIG9iamVjdHMgcG9zaXRpb24gaW4uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFRoZSBvdXRwdXQgdmVjdG9yLlxyXG4gKi9cclxudmFyIFNoaWZ0UG9zaXRpb24gPSBmdW5jdGlvbiAoaXRlbXMsIHgsIHksIGRpcmVjdGlvbiwgb3V0cHV0KVxyXG57XHJcbiAgICBpZiAoZGlyZWN0aW9uID09PSB1bmRlZmluZWQpIHsgZGlyZWN0aW9uID0gMDsgfVxyXG4gICAgaWYgKG91dHB1dCA9PT0gdW5kZWZpbmVkKSB7IG91dHB1dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICB2YXIgcHg7XHJcbiAgICB2YXIgcHk7XHJcblxyXG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDEpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgdmFyIGN4O1xyXG4gICAgICAgIHZhciBjeTtcclxuICAgICAgICB2YXIgY3VyO1xyXG5cclxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIEJvdHRvbSB0byBUb3BcclxuXHJcbiAgICAgICAgICAgIHZhciBsZW4gPSBpdGVtcy5sZW5ndGggLSAxO1xyXG5cclxuICAgICAgICAgICAgcHggPSBpdGVtc1tsZW5dLng7XHJcbiAgICAgICAgICAgIHB5ID0gaXRlbXNbbGVuXS55O1xyXG5cclxuICAgICAgICAgICAgZm9yIChpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBDdXJyZW50IGl0ZW1cclxuICAgICAgICAgICAgICAgIGN1ciA9IGl0ZW1zW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vICBHZXQgY3VycmVudCBpdGVtIHgveSwgdG8gYmUgcGFzc2VkIHRvIHRoZSBuZXh0IGl0ZW0gaW4gdGhlIGxpc3RcclxuICAgICAgICAgICAgICAgIGN4ID0gY3VyLng7XHJcbiAgICAgICAgICAgICAgICBjeSA9IGN1ci55O1xyXG5cclxuICAgICAgICAgICAgICAgIC8vICBTZXQgY3VycmVudCBpdGVtIHRvIHRoZSBwcmV2aW91cyBpdGVtcyB4L3lcclxuICAgICAgICAgICAgICAgIGN1ci54ID0gcHg7XHJcbiAgICAgICAgICAgICAgICBjdXIueSA9IHB5O1xyXG5cclxuICAgICAgICAgICAgICAgIC8vICBTZXQgY3VycmVudCBhcyBwcmV2aW91c1xyXG4gICAgICAgICAgICAgICAgcHggPSBjeDtcclxuICAgICAgICAgICAgICAgIHB5ID0gY3k7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vICBVcGRhdGUgdGhlIGhlYWQgaXRlbSB0byB0aGUgbmV3IHgveSBjb29yZGluYXRlc1xyXG4gICAgICAgICAgICBpdGVtc1tsZW5dLnggPSB4O1xyXG4gICAgICAgICAgICBpdGVtc1tsZW5dLnkgPSB5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgVG9wIHRvIEJvdHRvbVxyXG5cclxuICAgICAgICAgICAgcHggPSBpdGVtc1swXS54O1xyXG4gICAgICAgICAgICBweSA9IGl0ZW1zWzBdLnk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBDdXJyZW50IGl0ZW1cclxuICAgICAgICAgICAgICAgIGN1ciA9IGl0ZW1zW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vICBHZXQgY3VycmVudCBpdGVtIHgveSwgdG8gYmUgcGFzc2VkIHRvIHRoZSBuZXh0IGl0ZW0gaW4gdGhlIGxpc3RcclxuICAgICAgICAgICAgICAgIGN4ID0gY3VyLng7XHJcbiAgICAgICAgICAgICAgICBjeSA9IGN1ci55O1xyXG5cclxuICAgICAgICAgICAgICAgIC8vICBTZXQgY3VycmVudCBpdGVtIHRvIHRoZSBwcmV2aW91cyBpdGVtcyB4L3lcclxuICAgICAgICAgICAgICAgIGN1ci54ID0gcHg7XHJcbiAgICAgICAgICAgICAgICBjdXIueSA9IHB5O1xyXG5cclxuICAgICAgICAgICAgICAgIC8vICBTZXQgY3VycmVudCBhcyBwcmV2aW91c1xyXG4gICAgICAgICAgICAgICAgcHggPSBjeDtcclxuICAgICAgICAgICAgICAgIHB5ID0gY3k7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vICBVcGRhdGUgdGhlIGhlYWQgaXRlbSB0byB0aGUgbmV3IHgveSBjb29yZGluYXRlc1xyXG4gICAgICAgICAgICBpdGVtc1swXS54ID0geDtcclxuICAgICAgICAgICAgaXRlbXNbMF0ueSA9IHk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHB4ID0gaXRlbXNbMF0ueDtcclxuICAgICAgICBweSA9IGl0ZW1zWzBdLnk7XHJcblxyXG4gICAgICAgIGl0ZW1zWzBdLnggPSB4O1xyXG4gICAgICAgIGl0ZW1zWzBdLnkgPSB5O1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBSZXR1cm4gdGhlIGZpbmFsIHNldCBvZiBjb29yZGluYXRlcyBhcyB0aGV5J3JlIGVmZmVjdGl2ZWx5IGxvc3QgZnJvbSB0aGUgc2hpZnQgYW5kIG1heSBiZSBuZWVkZWRcclxuXHJcbiAgICBvdXRwdXQueCA9IHB4O1xyXG4gICAgb3V0cHV0LnkgPSBweTtcclxuXHJcbiAgICByZXR1cm4gb3V0cHV0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTaGlmdFBvc2l0aW9uO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/ShiftPosition.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/Shuffle.js":
/*!****************************************************!*\
!*** ./node_modules/phaser/src/actions/Shuffle.js ***!
\****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar ArrayShuffle = __webpack_require__(/*! ../utils/array/Shuffle */ \"./node_modules/phaser/src/utils/array/Shuffle.js\");\r\n\r\n/**\r\n * Shuffles the array in place. The shuffled array is both modified and returned.\r\n *\r\n * @function Phaser.Actions.Shuffle\r\n * @since 3.0.0\r\n * @see Phaser.Utils.Array.Shuffle\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar Shuffle = function (items)\r\n{\r\n return ArrayShuffle(items);\r\n};\r\n\r\nmodule.exports = Shuffle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NodWZmbGUuanM/MGIwYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsbUJBQW1CLG1CQUFPLENBQUMsZ0ZBQXdCOztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0NBQWdDO0FBQzdDO0FBQ0EsV0FBVyx3Q0FBd0M7QUFDbkQ7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9TaHVmZmxlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQXJyYXlTaHVmZmxlID0gcmVxdWlyZSgnLi4vdXRpbHMvYXJyYXkvU2h1ZmZsZScpO1xyXG5cclxuLyoqXHJcbiAqIFNodWZmbGVzIHRoZSBhcnJheSBpbiBwbGFjZS4gVGhlIHNodWZmbGVkIGFycmF5IGlzIGJvdGggbW9kaWZpZWQgYW5kIHJldHVybmVkLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkFjdGlvbnMuU2h1ZmZsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogQHNlZSBQaGFzZXIuVXRpbHMuQXJyYXkuU2h1ZmZsZVxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gaXRlbXMgLSBBbiBhcnJheSBvZiBHYW1lIE9iamVjdHMuIFRoZSBjb250ZW50cyBvZiB0aGlzIGFycmF5IGFyZSB1cGRhdGVkIGJ5IHRoaXMgQWN0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBHYW1lIE9iamVjdHMgdGhhdCB3YXMgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFNodWZmbGUgPSBmdW5jdGlvbiAoaXRlbXMpXHJcbntcclxuICAgIHJldHVybiBBcnJheVNodWZmbGUoaXRlbXMpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTaHVmZmxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/Shuffle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/SmoothStep.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/actions/SmoothStep.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar MathSmoothStep = __webpack_require__(/*! ../math/SmoothStep */ \"./node_modules/phaser/src/math/SmoothStep.js\");\r\n\r\n/**\r\n * Smoothstep is a sigmoid-like interpolation and clamping function.\r\n * \r\n * The function depends on three parameters, the input x, the \"left edge\" and the \"right edge\", with the left edge being assumed smaller than the right edge. The function receives a real number x as an argument and returns 0 if x is less than or equal to the left edge, 1 if x is greater than or equal to the right edge, and smoothly interpolates, using a Hermite polynomial, between 0 and 1 otherwise. The slope of the smoothstep function is zero at both edges. This is convenient for creating a sequence of transitions using smoothstep to interpolate each segment as an alternative to using more sophisticated or expensive interpolation techniques.\r\n *\r\n * @function Phaser.Actions.SmoothStep\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {string} property - The property of the Game Object to interpolate.\r\n * @param {number} min - The minimum interpolation value.\r\n * @param {number} max - The maximum interpolation value.\r\n * @param {boolean} [inc=false] - Should the values be incremented? `true` or set (`false`)\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar SmoothStep = function (items, property, min, max, inc)\r\n{\r\n if (inc === undefined) { inc = false; }\r\n\r\n var step = Math.abs(max - min) / items.length;\r\n var i;\r\n\r\n if (inc)\r\n {\r\n for (i = 0; i < items.length; i++)\r\n {\r\n items[i][property] += MathSmoothStep(i * step, min, max);\r\n }\r\n }\r\n else\r\n {\r\n for (i = 0; i < items.length; i++)\r\n {\r\n items[i][property] = MathSmoothStep(i * step, min, max);\r\n }\r\n }\r\n\r\n return items;\r\n};\r\n\r\nmodule.exports = SmoothStep;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1Ntb290aFN0ZXAuanM/MTRlYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEscUJBQXFCLG1CQUFPLENBQUMsd0VBQW9COztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQSxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsYUFBYTs7QUFFekM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1Ntb290aFN0ZXAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBNYXRoU21vb3RoU3RlcCA9IHJlcXVpcmUoJy4uL21hdGgvU21vb3RoU3RlcCcpO1xyXG5cclxuLyoqXHJcbiAqIFNtb290aHN0ZXAgaXMgYSBzaWdtb2lkLWxpa2UgaW50ZXJwb2xhdGlvbiBhbmQgY2xhbXBpbmcgZnVuY3Rpb24uXHJcbiAqIFxyXG4gKiBUaGUgZnVuY3Rpb24gZGVwZW5kcyBvbiB0aHJlZSBwYXJhbWV0ZXJzLCB0aGUgaW5wdXQgeCwgdGhlIFwibGVmdCBlZGdlXCIgYW5kIHRoZSBcInJpZ2h0IGVkZ2VcIiwgd2l0aCB0aGUgbGVmdCBlZGdlIGJlaW5nIGFzc3VtZWQgc21hbGxlciB0aGFuIHRoZSByaWdodCBlZGdlLiBUaGUgZnVuY3Rpb24gcmVjZWl2ZXMgYSByZWFsIG51bWJlciB4IGFzIGFuIGFyZ3VtZW50IGFuZCByZXR1cm5zIDAgaWYgeCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGxlZnQgZWRnZSwgMSBpZiB4IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgcmlnaHQgZWRnZSwgYW5kIHNtb290aGx5IGludGVycG9sYXRlcywgdXNpbmcgYSBIZXJtaXRlIHBvbHlub21pYWwsIGJldHdlZW4gMCBhbmQgMSBvdGhlcndpc2UuIFRoZSBzbG9wZSBvZiB0aGUgc21vb3Roc3RlcCBmdW5jdGlvbiBpcyB6ZXJvIGF0IGJvdGggZWRnZXMuIFRoaXMgaXMgY29udmVuaWVudCBmb3IgY3JlYXRpbmcgYSBzZXF1ZW5jZSBvZiB0cmFuc2l0aW9ucyB1c2luZyBzbW9vdGhzdGVwIHRvIGludGVycG9sYXRlIGVhY2ggc2VnbWVudCBhcyBhbiBhbHRlcm5hdGl2ZSB0byB1c2luZyBtb3JlIHNvcGhpc3RpY2F0ZWQgb3IgZXhwZW5zaXZlIGludGVycG9sYXRpb24gdGVjaG5pcXVlcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLlNtb290aFN0ZXBcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cy4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJyYXkgYXJlIHVwZGF0ZWQgYnkgdGhpcyBBY3Rpb24uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBvZiB0aGUgR2FtZSBPYmplY3QgdG8gaW50ZXJwb2xhdGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gLSBUaGUgbWluaW11bSBpbnRlcnBvbGF0aW9uIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4IC0gVGhlIG1heGltdW0gaW50ZXJwb2xhdGlvbiB2YWx1ZS5cclxuICogQHBhcmFtIHtib29sZWFufSBbaW5jPWZhbHNlXSAtIFNob3VsZCB0aGUgdmFsdWVzIGJlIGluY3JlbWVudGVkPyBgdHJ1ZWAgb3Igc2V0IChgZmFsc2VgKVxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBHYW1lIE9iamVjdHMgdGhhdCB3YXMgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFNtb290aFN0ZXAgPSBmdW5jdGlvbiAoaXRlbXMsIHByb3BlcnR5LCBtaW4sIG1heCwgaW5jKVxyXG57XHJcbiAgICBpZiAoaW5jID09PSB1bmRlZmluZWQpIHsgaW5jID0gZmFsc2U7IH1cclxuXHJcbiAgICB2YXIgc3RlcCA9IE1hdGguYWJzKG1heCAtIG1pbikgLyBpdGVtcy5sZW5ndGg7XHJcbiAgICB2YXIgaTtcclxuXHJcbiAgICBpZiAoaW5jKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGl0ZW1zW2ldW3Byb3BlcnR5XSArPSBNYXRoU21vb3RoU3RlcChpICogc3RlcCwgbWluLCBtYXgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpdGVtc1tpXVtwcm9wZXJ0eV0gPSBNYXRoU21vb3RoU3RlcChpICogc3RlcCwgbWluLCBtYXgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNtb290aFN0ZXA7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SmoothStep.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/SmootherStep.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/actions/SmootherStep.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar MathSmootherStep = __webpack_require__(/*! ../math/SmootherStep */ \"./node_modules/phaser/src/math/SmootherStep.js\");\r\n\r\n/**\r\n * Smootherstep is a sigmoid-like interpolation and clamping function.\r\n * \r\n * The function depends on three parameters, the input x, the \"left edge\" and the \"right edge\", with the left edge being assumed smaller than the right edge. The function receives a real number x as an argument and returns 0 if x is less than or equal to the left edge, 1 if x is greater than or equal to the right edge, and smoothly interpolates, using a Hermite polynomial, between 0 and 1 otherwise. The slope of the smoothstep function is zero at both edges. This is convenient for creating a sequence of transitions using smoothstep to interpolate each segment as an alternative to using more sophisticated or expensive interpolation techniques.\r\n *\r\n * @function Phaser.Actions.SmootherStep\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {string} property - The property of the Game Object to interpolate.\r\n * @param {number} min - The minimum interpolation value.\r\n * @param {number} max - The maximum interpolation value.\r\n * @param {boolean} [inc=false] - Should the values be incremented? `true` or set (`false`)\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar SmootherStep = function (items, property, min, max, inc)\r\n{\r\n if (inc === undefined) { inc = false; }\r\n\r\n var step = Math.abs(max - min) / items.length;\r\n var i;\r\n\r\n if (inc)\r\n {\r\n for (i = 0; i < items.length; i++)\r\n {\r\n items[i][property] += MathSmootherStep(i * step, min, max);\r\n }\r\n }\r\n else\r\n {\r\n for (i = 0; i < items.length; i++)\r\n {\r\n items[i][property] = MathSmootherStep(i * step, min, max);\r\n }\r\n }\r\n\r\n return items;\r\n};\r\n\r\nmodule.exports = SmootherStep;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1Ntb290aGVyU3RlcC5qcz8zYTQ5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyw0RUFBc0I7O0FBRXJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixhQUFhOztBQUV6QztBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvU21vb3RoZXJTdGVwLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTWF0aFNtb290aGVyU3RlcCA9IHJlcXVpcmUoJy4uL21hdGgvU21vb3RoZXJTdGVwJyk7XHJcblxyXG4vKipcclxuICogU21vb3RoZXJzdGVwIGlzIGEgc2lnbW9pZC1saWtlIGludGVycG9sYXRpb24gYW5kIGNsYW1waW5nIGZ1bmN0aW9uLlxyXG4gKiBcclxuICogVGhlIGZ1bmN0aW9uIGRlcGVuZHMgb24gdGhyZWUgcGFyYW1ldGVycywgdGhlIGlucHV0IHgsIHRoZSBcImxlZnQgZWRnZVwiIGFuZCB0aGUgXCJyaWdodCBlZGdlXCIsIHdpdGggdGhlIGxlZnQgZWRnZSBiZWluZyBhc3N1bWVkIHNtYWxsZXIgdGhhbiB0aGUgcmlnaHQgZWRnZS4gVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIGEgcmVhbCBudW1iZXIgeCBhcyBhbiBhcmd1bWVudCBhbmQgcmV0dXJucyAwIGlmIHggaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBsZWZ0IGVkZ2UsIDEgaWYgeCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHJpZ2h0IGVkZ2UsIGFuZCBzbW9vdGhseSBpbnRlcnBvbGF0ZXMsIHVzaW5nIGEgSGVybWl0ZSBwb2x5bm9taWFsLCBiZXR3ZWVuIDAgYW5kIDEgb3RoZXJ3aXNlLiBUaGUgc2xvcGUgb2YgdGhlIHNtb290aHN0ZXAgZnVuY3Rpb24gaXMgemVybyBhdCBib3RoIGVkZ2VzLiBUaGlzIGlzIGNvbnZlbmllbnQgZm9yIGNyZWF0aW5nIGEgc2VxdWVuY2Ugb2YgdHJhbnNpdGlvbnMgdXNpbmcgc21vb3Roc3RlcCB0byBpbnRlcnBvbGF0ZSBlYWNoIHNlZ21lbnQgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gdXNpbmcgbW9yZSBzb3BoaXN0aWNhdGVkIG9yIGV4cGVuc2l2ZSBpbnRlcnBvbGF0aW9uIHRlY2huaXF1ZXMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQWN0aW9ucy5TbW9vdGhlclN0ZXBcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cy4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJyYXkgYXJlIHVwZGF0ZWQgYnkgdGhpcyBBY3Rpb24uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBvZiB0aGUgR2FtZSBPYmplY3QgdG8gaW50ZXJwb2xhdGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gLSBUaGUgbWluaW11bSBpbnRlcnBvbGF0aW9uIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4IC0gVGhlIG1heGltdW0gaW50ZXJwb2xhdGlvbiB2YWx1ZS5cclxuICogQHBhcmFtIHtib29sZWFufSBbaW5jPWZhbHNlXSAtIFNob3VsZCB0aGUgdmFsdWVzIGJlIGluY3JlbWVudGVkPyBgdHJ1ZWAgb3Igc2V0IChgZmFsc2VgKVxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBHYW1lIE9iamVjdHMgdGhhdCB3YXMgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFNtb290aGVyU3RlcCA9IGZ1bmN0aW9uIChpdGVtcywgcHJvcGVydHksIG1pbiwgbWF4LCBpbmMpXHJcbntcclxuICAgIGlmIChpbmMgPT09IHVuZGVmaW5lZCkgeyBpbmMgPSBmYWxzZTsgfVxyXG5cclxuICAgIHZhciBzdGVwID0gTWF0aC5hYnMobWF4IC0gbWluKSAvIGl0ZW1zLmxlbmd0aDtcclxuICAgIHZhciBpO1xyXG5cclxuICAgIGlmIChpbmMpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaXRlbXNbaV1bcHJvcGVydHldICs9IE1hdGhTbW9vdGhlclN0ZXAoaSAqIHN0ZXAsIG1pbiwgbWF4KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaXRlbXNbaV1bcHJvcGVydHldID0gTWF0aFNtb290aGVyU3RlcChpICogc3RlcCwgbWluLCBtYXgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNtb290aGVyU3RlcDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/SmootherStep.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/Spread.js":
/*!***************************************************!*\
!*** ./node_modules/phaser/src/actions/Spread.js ***!
\***************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes an array of Game Objects and then modifies their `property` so the value equals, or is incremented, by the\r\n * calculated spread value.\r\n * \r\n * The spread value is derived from the given `min` and `max` values and the total number of items in the array.\r\n * \r\n * For example, to cause an array of Sprites to change in alpha from 0 to 1 you could call:\r\n * \r\n * ```javascript\r\n * Phaser.Actions.Spread(itemsArray, 'alpha', 0, 1);\r\n * ```\r\n *\r\n * @function Phaser.Actions.Spread\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {string} property - The property of the Game Object to spread.\r\n * @param {number} min - The minimum value.\r\n * @param {number} max - The maximum value.\r\n * @param {boolean} [inc=false] - Should the values be incremented? `true` or set (`false`)\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that were passed to this Action.\r\n */\r\nvar Spread = function (items, property, min, max, inc)\r\n{\r\n if (inc === undefined) { inc = false; }\r\n\r\n var step = Math.abs(max - min) / items.length;\r\n var i;\r\n\r\n if (inc)\r\n {\r\n for (i = 0; i < items.length; i++)\r\n {\r\n items[i][property] += i * step + min;\r\n }\r\n }\r\n else\r\n {\r\n for (i = 0; i < items.length; i++)\r\n {\r\n items[i][property] = i * step + min;\r\n }\r\n }\r\n\r\n return items;\r\n};\r\n\r\nmodule.exports = Spread;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1NwcmVhZC5qcz85MGZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixhQUFhOztBQUV6QztBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvU3ByZWFkLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzIGFuZCB0aGVuIG1vZGlmaWVzIHRoZWlyIGBwcm9wZXJ0eWAgc28gdGhlIHZhbHVlIGVxdWFscywgb3IgaXMgaW5jcmVtZW50ZWQsIGJ5IHRoZVxyXG4gKiBjYWxjdWxhdGVkIHNwcmVhZCB2YWx1ZS5cclxuICogXHJcbiAqIFRoZSBzcHJlYWQgdmFsdWUgaXMgZGVyaXZlZCBmcm9tIHRoZSBnaXZlbiBgbWluYCBhbmQgYG1heGAgdmFsdWVzIGFuZCB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBhcnJheS5cclxuICogXHJcbiAqIEZvciBleGFtcGxlLCB0byBjYXVzZSBhbiBhcnJheSBvZiBTcHJpdGVzIHRvIGNoYW5nZSBpbiBhbHBoYSBmcm9tIDAgdG8gMSB5b3UgY291bGQgY2FsbDpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogUGhhc2VyLkFjdGlvbnMuU3ByZWFkKGl0ZW1zQXJyYXksICdhbHBoYScsIDAsIDEpO1xyXG4gKiBgYGBcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLlNwcmVhZFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEcgLSBbaXRlbXMsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGl0ZW1zIC0gQW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLiBUaGUgY29udGVudHMgb2YgdGhpcyBhcnJheSBhcmUgdXBkYXRlZCBieSB0aGlzIEFjdGlvbi5cclxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IG9mIHRoZSBHYW1lIE9iamVjdCB0byBzcHJlYWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gLSBUaGUgbWluaW11bSB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IG1heCAtIFRoZSBtYXhpbXVtIHZhbHVlLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmM9ZmFsc2VdIC0gU2hvdWxkIHRoZSB2YWx1ZXMgYmUgaW5jcmVtZW50ZWQ/IGB0cnVlYCBvciBzZXQgKGBmYWxzZWApXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFNwcmVhZCA9IGZ1bmN0aW9uIChpdGVtcywgcHJvcGVydHksIG1pbiwgbWF4LCBpbmMpXHJcbntcclxuICAgIGlmIChpbmMgPT09IHVuZGVmaW5lZCkgeyBpbmMgPSBmYWxzZTsgfVxyXG5cclxuICAgIHZhciBzdGVwID0gTWF0aC5hYnMobWF4IC0gbWluKSAvIGl0ZW1zLmxlbmd0aDtcclxuICAgIHZhciBpO1xyXG5cclxuICAgIGlmIChpbmMpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaXRlbXNbaV1bcHJvcGVydHldICs9IGkgKiBzdGVwICsgbWluO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpdGVtc1tpXVtwcm9wZXJ0eV0gPSBpICogc3RlcCArIG1pbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTcHJlYWQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/Spread.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/ToggleVisible.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/actions/ToggleVisible.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes an array of Game Objects and toggles the visibility of each one.\r\n * Those previously `visible = false` will become `visible = true`, and vice versa.\r\n *\r\n * @function Phaser.Actions.ToggleVisible\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar ToggleVisible = function (items)\r\n{\r\n for (var i = 0; i < items.length; i++)\r\n {\r\n items[i].visible = !items[i].visible;\r\n }\r\n\r\n return items;\r\n};\r\n\r\nmodule.exports = ToggleVisible;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1RvZ2dsZVZpc2libGUuanM/MWJlOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25EO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvVG9nZ2xlVmlzaWJsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyBhbmQgdG9nZ2xlcyB0aGUgdmlzaWJpbGl0eSBvZiBlYWNoIG9uZS5cclxuICogVGhvc2UgcHJldmlvdXNseSBgdmlzaWJsZSA9IGZhbHNlYCB3aWxsIGJlY29tZSBgdmlzaWJsZSA9IHRydWVgLCBhbmQgdmljZSB2ZXJzYS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLlRvZ2dsZVZpc2libGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cy4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJyYXkgYXJlIHVwZGF0ZWQgYnkgdGhpcyBBY3Rpb24uXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gVGhlIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0aGF0IHdhcyBwYXNzZWQgdG8gdGhpcyBBY3Rpb24uXHJcbiAqL1xyXG52YXIgVG9nZ2xlVmlzaWJsZSA9IGZ1bmN0aW9uIChpdGVtcylcclxue1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICBpdGVtc1tpXS52aXNpYmxlID0gIWl0ZW1zW2ldLnZpc2libGU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUb2dnbGVWaXNpYmxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/ToggleVisible.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/WrapInRectangle.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/actions/WrapInRectangle.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @author samme <samme.npm@gmail.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Wrap = __webpack_require__(/*! ../math/Wrap */ \"./node_modules/phaser/src/math/Wrap.js\");\r\n\r\n/**\r\n * Wrap each item's coordinates within a rectangle's area.\r\n *\r\n * @function Phaser.Actions.WrapInRectangle\r\n * @since 3.0.0\r\n * @see Phaser.Math.Wrap\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {(array|Phaser.GameObjects.GameObject[])} items - An array of Game Objects. The contents of this array are updated by this Action.\r\n * @param {Phaser.Geom.Rectangle} rect - The rectangle.\r\n * @param {number} [padding=0] - An amount added to each side of the rectangle during the operation.\r\n *\r\n * @return {(array|Phaser.GameObjects.GameObject[])} The array of Game Objects that was passed to this Action.\r\n */\r\nvar WrapInRectangle = function (items, rect, padding)\r\n{\r\n if (padding === undefined)\r\n {\r\n padding = 0;\r\n }\r\n\r\n for (var i = 0; i < items.length; i++)\r\n {\r\n var item = items[i];\r\n\r\n item.x = Wrap(item.x, rect.left - padding, rect.right + padding);\r\n item.y = Wrap(item.y, rect.top - padding, rect.bottom + padding);\r\n }\r\n\r\n return items;\r\n};\r\n\r\nmodule.exports = WrapInRectangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL1dyYXBJblJlY3RhbmdsZS5qcz81OGMyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFdBQVcsbUJBQU8sQ0FBQyw0REFBYzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdDQUFnQztBQUM3QztBQUNBLFdBQVcsd0NBQXdDO0FBQ25ELFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FjdGlvbnMvV3JhcEluUmVjdGFuZ2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBhdXRob3IgICAgICAgc2FtbWUgPHNhbW1lLm5wbUBnbWFpbC5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgV3JhcCA9IHJlcXVpcmUoJy4uL21hdGgvV3JhcCcpO1xyXG5cclxuLyoqXHJcbiAqIFdyYXAgZWFjaCBpdGVtJ3MgY29vcmRpbmF0ZXMgd2l0aGluIGEgcmVjdGFuZ2xlJ3MgYXJlYS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5BY3Rpb25zLldyYXBJblJlY3RhbmdsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogQHNlZSBQaGFzZXIuTWF0aC5XcmFwXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW2l0ZW1zLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBpdGVtcyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cy4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJyYXkgYXJlIHVwZGF0ZWQgYnkgdGhpcyBBY3Rpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0IC0gVGhlIHJlY3RhbmdsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtwYWRkaW5nPTBdIC0gQW4gYW1vdW50IGFkZGVkIHRvIGVhY2ggc2lkZSBvZiB0aGUgcmVjdGFuZ2xlIGR1cmluZyB0aGUgb3BlcmF0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IFRoZSBhcnJheSBvZiBHYW1lIE9iamVjdHMgdGhhdCB3YXMgcGFzc2VkIHRvIHRoaXMgQWN0aW9uLlxyXG4gKi9cclxudmFyIFdyYXBJblJlY3RhbmdsZSA9IGZ1bmN0aW9uIChpdGVtcywgcmVjdCwgcGFkZGluZylcclxue1xyXG4gICAgaWYgKHBhZGRpbmcgPT09IHVuZGVmaW5lZClcclxuICAgIHtcclxuICAgICAgICBwYWRkaW5nID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07XHJcblxyXG4gICAgICAgIGl0ZW0ueCA9IFdyYXAoaXRlbS54LCByZWN0LmxlZnQgLSBwYWRkaW5nLCByZWN0LnJpZ2h0ICsgcGFkZGluZyk7XHJcbiAgICAgICAgaXRlbS55ID0gV3JhcChpdGVtLnksIHJlY3QudG9wIC0gcGFkZGluZywgcmVjdC5ib3R0b20gKyBwYWRkaW5nKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFdyYXBJblJlY3RhbmdsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/WrapInRectangle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/actions/index.js":
/*!**************************************************!*\
!*** ./node_modules/phaser/src/actions/index.js ***!
\**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Actions\r\n */\r\n\r\nmodule.exports = {\r\n\r\n Angle: __webpack_require__(/*! ./Angle */ \"./node_modules/phaser/src/actions/Angle.js\"),\r\n Call: __webpack_require__(/*! ./Call */ \"./node_modules/phaser/src/actions/Call.js\"),\r\n GetFirst: __webpack_require__(/*! ./GetFirst */ \"./node_modules/phaser/src/actions/GetFirst.js\"),\r\n GetLast: __webpack_require__(/*! ./GetLast */ \"./node_modules/phaser/src/actions/GetLast.js\"),\r\n GridAlign: __webpack_require__(/*! ./GridAlign */ \"./node_modules/phaser/src/actions/GridAlign.js\"),\r\n IncAlpha: __webpack_require__(/*! ./IncAlpha */ \"./node_modules/phaser/src/actions/IncAlpha.js\"),\r\n IncX: __webpack_require__(/*! ./IncX */ \"./node_modules/phaser/src/actions/IncX.js\"),\r\n IncXY: __webpack_require__(/*! ./IncXY */ \"./node_modules/phaser/src/actions/IncXY.js\"),\r\n IncY: __webpack_require__(/*! ./IncY */ \"./node_modules/phaser/src/actions/IncY.js\"),\r\n PlaceOnCircle: __webpack_require__(/*! ./PlaceOnCircle */ \"./node_modules/phaser/src/actions/PlaceOnCircle.js\"),\r\n PlaceOnEllipse: __webpack_require__(/*! ./PlaceOnEllipse */ \"./node_modules/phaser/src/actions/PlaceOnEllipse.js\"),\r\n PlaceOnLine: __webpack_require__(/*! ./PlaceOnLine */ \"./node_modules/phaser/src/actions/PlaceOnLine.js\"),\r\n PlaceOnRectangle: __webpack_require__(/*! ./PlaceOnRectangle */ \"./node_modules/phaser/src/actions/PlaceOnRectangle.js\"),\r\n PlaceOnTriangle: __webpack_require__(/*! ./PlaceOnTriangle */ \"./node_modules/phaser/src/actions/PlaceOnTriangle.js\"),\r\n PlayAnimation: __webpack_require__(/*! ./PlayAnimation */ \"./node_modules/phaser/src/actions/PlayAnimation.js\"),\r\n PropertyValueInc: __webpack_require__(/*! ./PropertyValueInc */ \"./node_modules/phaser/src/actions/PropertyValueInc.js\"),\r\n PropertyValueSet: __webpack_require__(/*! ./PropertyValueSet */ \"./node_modules/phaser/src/actions/PropertyValueSet.js\"),\r\n RandomCircle: __webpack_require__(/*! ./RandomCircle */ \"./node_modules/phaser/src/actions/RandomCircle.js\"),\r\n RandomEllipse: __webpack_require__(/*! ./RandomEllipse */ \"./node_modules/phaser/src/actions/RandomEllipse.js\"),\r\n RandomLine: __webpack_require__(/*! ./RandomLine */ \"./node_modules/phaser/src/actions/RandomLine.js\"),\r\n RandomRectangle: __webpack_require__(/*! ./RandomRectangle */ \"./node_modules/phaser/src/actions/RandomRectangle.js\"),\r\n RandomTriangle: __webpack_require__(/*! ./RandomTriangle */ \"./node_modules/phaser/src/actions/RandomTriangle.js\"),\r\n Rotate: __webpack_require__(/*! ./Rotate */ \"./node_modules/phaser/src/actions/Rotate.js\"),\r\n RotateAround: __webpack_require__(/*! ./RotateAround */ \"./node_modules/phaser/src/actions/RotateAround.js\"),\r\n RotateAroundDistance: __webpack_require__(/*! ./RotateAroundDistance */ \"./node_modules/phaser/src/actions/RotateAroundDistance.js\"),\r\n ScaleX: __webpack_require__(/*! ./ScaleX */ \"./node_modules/phaser/src/actions/ScaleX.js\"),\r\n ScaleXY: __webpack_require__(/*! ./ScaleXY */ \"./node_modules/phaser/src/actions/ScaleXY.js\"),\r\n ScaleY: __webpack_require__(/*! ./ScaleY */ \"./node_modules/phaser/src/actions/ScaleY.js\"),\r\n SetAlpha: __webpack_require__(/*! ./SetAlpha */ \"./node_modules/phaser/src/actions/SetAlpha.js\"),\r\n SetBlendMode: __webpack_require__(/*! ./SetBlendMode */ \"./node_modules/phaser/src/actions/SetBlendMode.js\"),\r\n SetDepth: __webpack_require__(/*! ./SetDepth */ \"./node_modules/phaser/src/actions/SetDepth.js\"),\r\n SetHitArea: __webpack_require__(/*! ./SetHitArea */ \"./node_modules/phaser/src/actions/SetHitArea.js\"),\r\n SetOrigin: __webpack_require__(/*! ./SetOrigin */ \"./node_modules/phaser/src/actions/SetOrigin.js\"),\r\n SetRotation: __webpack_require__(/*! ./SetRotation */ \"./node_modules/phaser/src/actions/SetRotation.js\"),\r\n SetScale: __webpack_require__(/*! ./SetScale */ \"./node_modules/phaser/src/actions/SetScale.js\"),\r\n SetScaleX: __webpack_require__(/*! ./SetScaleX */ \"./node_modules/phaser/src/actions/SetScaleX.js\"),\r\n SetScaleY: __webpack_require__(/*! ./SetScaleY */ \"./node_modules/phaser/src/actions/SetScaleY.js\"),\r\n SetScrollFactor: __webpack_require__(/*! ./SetScrollFactor */ \"./node_modules/phaser/src/actions/SetScrollFactor.js\"),\r\n SetScrollFactorX: __webpack_require__(/*! ./SetScrollFactorX */ \"./node_modules/phaser/src/actions/SetScrollFactorX.js\"),\r\n SetScrollFactorY: __webpack_require__(/*! ./SetScrollFactorY */ \"./node_modules/phaser/src/actions/SetScrollFactorY.js\"),\r\n SetTint: __webpack_require__(/*! ./SetTint */ \"./node_modules/phaser/src/actions/SetTint.js\"),\r\n SetVisible: __webpack_require__(/*! ./SetVisible */ \"./node_modules/phaser/src/actions/SetVisible.js\"),\r\n SetX: __webpack_require__(/*! ./SetX */ \"./node_modules/phaser/src/actions/SetX.js\"),\r\n SetXY: __webpack_require__(/*! ./SetXY */ \"./node_modules/phaser/src/actions/SetXY.js\"),\r\n SetY: __webpack_require__(/*! ./SetY */ \"./node_modules/phaser/src/actions/SetY.js\"),\r\n ShiftPosition: __webpack_require__(/*! ./ShiftPosition */ \"./node_modules/phaser/src/actions/ShiftPosition.js\"),\r\n Shuffle: __webpack_require__(/*! ./Shuffle */ \"./node_modules/phaser/src/actions/Shuffle.js\"),\r\n SmootherStep: __webpack_require__(/*! ./SmootherStep */ \"./node_modules/phaser/src/actions/SmootherStep.js\"),\r\n SmoothStep: __webpack_require__(/*! ./SmoothStep */ \"./node_modules/phaser/src/actions/SmoothStep.js\"),\r\n Spread: __webpack_require__(/*! ./Spread */ \"./node_modules/phaser/src/actions/Spread.js\"),\r\n ToggleVisible: __webpack_require__(/*! ./ToggleVisible */ \"./node_modules/phaser/src/actions/ToggleVisible.js\"),\r\n WrapInRectangle: __webpack_require__(/*! ./WrapInRectangle */ \"./node_modules/phaser/src/actions/WrapInRectangle.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hY3Rpb25zL2luZGV4LmpzP2I1NGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxXQUFXLG1CQUFPLENBQUMsMkRBQVM7QUFDNUIsVUFBVSxtQkFBTyxDQUFDLHlEQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxpRUFBWTtBQUNsQyxhQUFhLG1CQUFPLENBQUMsK0RBQVc7QUFDaEMsZUFBZSxtQkFBTyxDQUFDLG1FQUFhO0FBQ3BDLGNBQWMsbUJBQU8sQ0FBQyxpRUFBWTtBQUNsQyxVQUFVLG1CQUFPLENBQUMseURBQVE7QUFDMUIsV0FBVyxtQkFBTyxDQUFDLDJEQUFTO0FBQzVCLFVBQVUsbUJBQU8sQ0FBQyx5REFBUTtBQUMxQixtQkFBbUIsbUJBQU8sQ0FBQywyRUFBaUI7QUFDNUMsb0JBQW9CLG1CQUFPLENBQUMsNkVBQWtCO0FBQzlDLGlCQUFpQixtQkFBTyxDQUFDLHVFQUFlO0FBQ3hDLHNCQUFzQixtQkFBTyxDQUFDLGlGQUFvQjtBQUNsRCxxQkFBcUIsbUJBQU8sQ0FBQywrRUFBbUI7QUFDaEQsbUJBQW1CLG1CQUFPLENBQUMsMkVBQWlCO0FBQzVDLHNCQUFzQixtQkFBTyxDQUFDLGlGQUFvQjtBQUNsRCxzQkFBc0IsbUJBQU8sQ0FBQyxpRkFBb0I7QUFDbEQsa0JBQWtCLG1CQUFPLENBQUMseUVBQWdCO0FBQzFDLG1CQUFtQixtQkFBTyxDQUFDLDJFQUFpQjtBQUM1QyxnQkFBZ0IsbUJBQU8sQ0FBQyxxRUFBYztBQUN0QyxxQkFBcUIsbUJBQU8sQ0FBQywrRUFBbUI7QUFDaEQsb0JBQW9CLG1CQUFPLENBQUMsNkVBQWtCO0FBQzlDLFlBQVksbUJBQU8sQ0FBQyw2REFBVTtBQUM5QixrQkFBa0IsbUJBQU8sQ0FBQyx5RUFBZ0I7QUFDMUMsMEJBQTBCLG1CQUFPLENBQUMseUZBQXdCO0FBQzFELFlBQVksbUJBQU8sQ0FBQyw2REFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsK0RBQVc7QUFDaEMsWUFBWSxtQkFBTyxDQUFDLDZEQUFVO0FBQzlCLGNBQWMsbUJBQU8sQ0FBQyxpRUFBWTtBQUNsQyxrQkFBa0IsbUJBQU8sQ0FBQyx5RUFBZ0I7QUFDMUMsY0FBYyxtQkFBTyxDQUFDLGlFQUFZO0FBQ2xDLGdCQUFnQixtQkFBTyxDQUFDLHFFQUFjO0FBQ3RDLGVBQWUsbUJBQU8sQ0FBQyxtRUFBYTtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyx1RUFBZTtBQUN4QyxjQUFjLG1CQUFPLENBQUMsaUVBQVk7QUFDbEMsZUFBZSxtQkFBTyxDQUFDLG1FQUFhO0FBQ3BDLGVBQWUsbUJBQU8sQ0FBQyxtRUFBYTtBQUNwQyxxQkFBcUIsbUJBQU8sQ0FBQywrRUFBbUI7QUFDaEQsc0JBQXNCLG1CQUFPLENBQUMsaUZBQW9CO0FBQ2xELHNCQUFzQixtQkFBTyxDQUFDLGlGQUFvQjtBQUNsRCxhQUFhLG1CQUFPLENBQUMsK0RBQVc7QUFDaEMsZ0JBQWdCLG1CQUFPLENBQUMscUVBQWM7QUFDdEMsVUFBVSxtQkFBTyxDQUFDLHlEQUFRO0FBQzFCLFdBQVcsbUJBQU8sQ0FBQywyREFBUztBQUM1QixVQUFVLG1CQUFPLENBQUMseURBQVE7QUFDMUIsbUJBQW1CLG1CQUFPLENBQUMsMkVBQWlCO0FBQzVDLGFBQWEsbUJBQU8sQ0FBQywrREFBVztBQUNoQyxrQkFBa0IsbUJBQU8sQ0FBQyx5RUFBZ0I7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMscUVBQWM7QUFDdEMsWUFBWSxtQkFBTyxDQUFDLDZEQUFVO0FBQzlCLG1CQUFtQixtQkFBTyxDQUFDLDJFQUFpQjtBQUM1QyxxQkFBcUIsbUJBQU8sQ0FBQywrRUFBbUI7O0FBRWhEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYWN0aW9ucy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkFjdGlvbnNcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBBbmdsZTogcmVxdWlyZSgnLi9BbmdsZScpLFxyXG4gICAgQ2FsbDogcmVxdWlyZSgnLi9DYWxsJyksXHJcbiAgICBHZXRGaXJzdDogcmVxdWlyZSgnLi9HZXRGaXJzdCcpLFxyXG4gICAgR2V0TGFzdDogcmVxdWlyZSgnLi9HZXRMYXN0JyksXHJcbiAgICBHcmlkQWxpZ246IHJlcXVpcmUoJy4vR3JpZEFsaWduJyksXHJcbiAgICBJbmNBbHBoYTogcmVxdWlyZSgnLi9JbmNBbHBoYScpLFxyXG4gICAgSW5jWDogcmVxdWlyZSgnLi9JbmNYJyksXHJcbiAgICBJbmNYWTogcmVxdWlyZSgnLi9JbmNYWScpLFxyXG4gICAgSW5jWTogcmVxdWlyZSgnLi9JbmNZJyksXHJcbiAgICBQbGFjZU9uQ2lyY2xlOiByZXF1aXJlKCcuL1BsYWNlT25DaXJjbGUnKSxcclxuICAgIFBsYWNlT25FbGxpcHNlOiByZXF1aXJlKCcuL1BsYWNlT25FbGxpcHNlJyksXHJcbiAgICBQbGFjZU9uTGluZTogcmVxdWlyZSgnLi9QbGFjZU9uTGluZScpLFxyXG4gICAgUGxhY2VPblJlY3RhbmdsZTogcmVxdWlyZSgnLi9QbGFjZU9uUmVjdGFuZ2xlJyksXHJcbiAgICBQbGFjZU9uVHJpYW5nbGU6IHJlcXVpcmUoJy4vUGxhY2VPblRyaWFuZ2xlJyksXHJcbiAgICBQbGF5QW5pbWF0aW9uOiByZXF1aXJlKCcuL1BsYXlBbmltYXRpb24nKSxcclxuICAgIFByb3BlcnR5VmFsdWVJbmM6IHJlcXVpcmUoJy4vUHJvcGVydHlWYWx1ZUluYycpLFxyXG4gICAgUHJvcGVydHlWYWx1ZVNldDogcmVxdWlyZSgnLi9Qcm9wZXJ0eVZhbHVlU2V0JyksXHJcbiAgICBSYW5kb21DaXJjbGU6IHJlcXVpcmUoJy4vUmFuZG9tQ2lyY2xlJyksXHJcbiAgICBSYW5kb21FbGxpcHNlOiByZXF1aXJlKCcuL1JhbmRvbUVsbGlwc2UnKSxcclxuICAgIFJhbmRvbUxpbmU6IHJlcXVpcmUoJy4vUmFuZG9tTGluZScpLFxyXG4gICAgUmFuZG9tUmVjdGFuZ2xlOiByZXF1aXJlKCcuL1JhbmRvbVJlY3RhbmdsZScpLFxyXG4gICAgUmFuZG9tVHJpYW5nbGU6IHJlcXVpcmUoJy4vUmFuZG9tVHJpYW5nbGUnKSxcclxuICAgIFJvdGF0ZTogcmVxdWlyZSgnLi9Sb3RhdGUnKSxcclxuICAgIFJvdGF0ZUFyb3VuZDogcmVxdWlyZSgnLi9Sb3RhdGVBcm91bmQnKSxcclxuICAgIFJvdGF0ZUFyb3VuZERpc3RhbmNlOiByZXF1aXJlKCcuL1JvdGF0ZUFyb3VuZERpc3RhbmNlJyksXHJcbiAgICBTY2FsZVg6IHJlcXVpcmUoJy4vU2NhbGVYJyksXHJcbiAgICBTY2FsZVhZOiByZXF1aXJlKCcuL1NjYWxlWFknKSxcclxuICAgIFNjYWxlWTogcmVxdWlyZSgnLi9TY2FsZVknKSxcclxuICAgIFNldEFscGhhOiByZXF1aXJlKCcuL1NldEFscGhhJyksXHJcbiAgICBTZXRCbGVuZE1vZGU6IHJlcXVpcmUoJy4vU2V0QmxlbmRNb2RlJyksXHJcbiAgICBTZXREZXB0aDogcmVxdWlyZSgnLi9TZXREZXB0aCcpLFxyXG4gICAgU2V0SGl0QXJlYTogcmVxdWlyZSgnLi9TZXRIaXRBcmVhJyksXHJcbiAgICBTZXRPcmlnaW46IHJlcXVpcmUoJy4vU2V0T3JpZ2luJyksXHJcbiAgICBTZXRSb3RhdGlvbjogcmVxdWlyZSgnLi9TZXRSb3RhdGlvbicpLFxyXG4gICAgU2V0U2NhbGU6IHJlcXVpcmUoJy4vU2V0U2NhbGUnKSxcclxuICAgIFNldFNjYWxlWDogcmVxdWlyZSgnLi9TZXRTY2FsZVgnKSxcclxuICAgIFNldFNjYWxlWTogcmVxdWlyZSgnLi9TZXRTY2FsZVknKSxcclxuICAgIFNldFNjcm9sbEZhY3RvcjogcmVxdWlyZSgnLi9TZXRTY3JvbGxGYWN0b3InKSxcclxuICAgIFNldFNjcm9sbEZhY3Rvclg6IHJlcXVpcmUoJy4vU2V0U2Nyb2xsRmFjdG9yWCcpLFxyXG4gICAgU2V0U2Nyb2xsRmFjdG9yWTogcmVxdWlyZSgnLi9TZXRTY3JvbGxGYWN0b3JZJyksXHJcbiAgICBTZXRUaW50OiByZXF1aXJlKCcuL1NldFRpbnQnKSxcclxuICAgIFNldFZpc2libGU6IHJlcXVpcmUoJy4vU2V0VmlzaWJsZScpLFxyXG4gICAgU2V0WDogcmVxdWlyZSgnLi9TZXRYJyksXHJcbiAgICBTZXRYWTogcmVxdWlyZSgnLi9TZXRYWScpLFxyXG4gICAgU2V0WTogcmVxdWlyZSgnLi9TZXRZJyksXHJcbiAgICBTaGlmdFBvc2l0aW9uOiByZXF1aXJlKCcuL1NoaWZ0UG9zaXRpb24nKSxcclxuICAgIFNodWZmbGU6IHJlcXVpcmUoJy4vU2h1ZmZsZScpLFxyXG4gICAgU21vb3RoZXJTdGVwOiByZXF1aXJlKCcuL1Ntb290aGVyU3RlcCcpLFxyXG4gICAgU21vb3RoU3RlcDogcmVxdWlyZSgnLi9TbW9vdGhTdGVwJyksXHJcbiAgICBTcHJlYWQ6IHJlcXVpcmUoJy4vU3ByZWFkJyksXHJcbiAgICBUb2dnbGVWaXNpYmxlOiByZXF1aXJlKCcuL1RvZ2dsZVZpc2libGUnKSxcclxuICAgIFdyYXBJblJlY3RhbmdsZTogcmVxdWlyZSgnLi9XcmFwSW5SZWN0YW5nbGUnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/actions/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/animations/Animation.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/animations/Animation.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Clamp = __webpack_require__(/*! ../math/Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/animations/events/index.js\");\r\nvar FindClosestInSorted = __webpack_require__(/*! ../utils/array/FindClosestInSorted */ \"./node_modules/phaser/src/utils/array/FindClosestInSorted.js\");\r\nvar Frame = __webpack_require__(/*! ./AnimationFrame */ \"./node_modules/phaser/src/animations/AnimationFrame.js\");\r\nvar GetValue = __webpack_require__(/*! ../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Frame based Animation.\r\n *\r\n * This consists of a key, some default values (like the frame rate) and a bunch of Frame objects.\r\n *\r\n * The Animation Manager creates these. Game Objects don't own an instance of these directly.\r\n * Game Objects have the Animation Component, which are like playheads to global Animations (these objects)\r\n * So multiple Game Objects can have playheads all pointing to this one Animation instance.\r\n *\r\n * @class Animation\r\n * @memberof Phaser.Animations\r\n * @extends Phaser.Events.EventEmitter\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Animations.AnimationManager} manager - A reference to the global Animation Manager\r\n * @param {string} key - The unique identifying string for this animation.\r\n * @param {Phaser.Types.Animations.Animation} config - The Animation configuration.\r\n */\r\nvar Animation = new Class({\r\n\r\n Extends: EventEmitter,\r\n\r\n initialize:\r\n\r\n function Animation (manager, key, config)\r\n {\r\n EventEmitter.call(this);\r\n\r\n /**\r\n * A reference to the global Animation Manager.\r\n *\r\n * @name Phaser.Animations.Animation#manager\r\n * @type {Phaser.Animations.AnimationManager}\r\n * @since 3.0.0\r\n */\r\n this.manager = manager;\r\n\r\n /**\r\n * The unique identifying string for this animation.\r\n *\r\n * @name Phaser.Animations.Animation#key\r\n * @type {string}\r\n * @since 3.0.0\r\n */\r\n this.key = key;\r\n\r\n /**\r\n * A frame based animation (as opposed to a bone based animation)\r\n *\r\n * @name Phaser.Animations.Animation#type\r\n * @type {string}\r\n * @default frame\r\n * @since 3.0.0\r\n */\r\n this.type = 'frame';\r\n\r\n /**\r\n * Extract all the frame data into the frames array.\r\n *\r\n * @name Phaser.Animations.Animation#frames\r\n * @type {Phaser.Animations.AnimationFrame[]}\r\n * @since 3.0.0\r\n */\r\n this.frames = this.getFrames(\r\n manager.textureManager,\r\n GetValue(config, 'frames', []),\r\n GetValue(config, 'defaultTextureKey', null)\r\n );\r\n\r\n /**\r\n * The frame rate of playback in frames per second (default 24 if duration is null)\r\n *\r\n * @name Phaser.Animations.Animation#frameRate\r\n * @type {integer}\r\n * @default 24\r\n * @since 3.0.0\r\n */\r\n this.frameRate = GetValue(config, 'frameRate', null);\r\n\r\n /**\r\n * How long the animation should play for, in milliseconds.\r\n * If the `frameRate` property has been set then it overrides this value,\r\n * otherwise the `frameRate` is derived from `duration`.\r\n *\r\n * @name Phaser.Animations.Animation#duration\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n this.duration = GetValue(config, 'duration', null);\r\n\r\n if (this.duration === null && this.frameRate === null)\r\n {\r\n // No duration or frameRate given, use default frameRate of 24fps\r\n this.frameRate = 24;\r\n this.duration = (this.frameRate / this.frames.length) * 1000;\r\n }\r\n else if (this.duration && this.frameRate === null)\r\n {\r\n // Duration given but no frameRate, so set the frameRate based on duration\r\n // I.e. 12 frames in the animation, duration = 4000 ms\r\n // So frameRate is 12 / (4000 / 1000) = 3 fps\r\n this.frameRate = this.frames.length / (this.duration / 1000);\r\n }\r\n else\r\n {\r\n // frameRate given, derive duration from it (even if duration also specified)\r\n // I.e. 15 frames in the animation, frameRate = 30 fps\r\n // So duration is 15 / 30 = 0.5 * 1000 (half a second, or 500ms)\r\n this.duration = (this.frames.length / this.frameRate) * 1000;\r\n }\r\n\r\n /**\r\n * How many ms per frame, not including frame specific modifiers.\r\n *\r\n * @name Phaser.Animations.Animation#msPerFrame\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n this.msPerFrame = 1000 / this.frameRate;\r\n\r\n /**\r\n * Skip frames if the time lags, or always advanced anyway?\r\n *\r\n * @name Phaser.Animations.Animation#skipMissedFrames\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.skipMissedFrames = GetValue(config, 'skipMissedFrames', true);\r\n\r\n /**\r\n * The delay in ms before the playback will begin.\r\n *\r\n * @name Phaser.Animations.Animation#delay\r\n * @type {integer}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.delay = GetValue(config, 'delay', 0);\r\n\r\n /**\r\n * Number of times to repeat the animation. Set to -1 to repeat forever.\r\n *\r\n * @name Phaser.Animations.Animation#repeat\r\n * @type {integer}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.repeat = GetValue(config, 'repeat', 0);\r\n\r\n /**\r\n * The delay in ms before the a repeat play starts.\r\n *\r\n * @name Phaser.Animations.Animation#repeatDelay\r\n * @type {integer}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.repeatDelay = GetValue(config, 'repeatDelay', 0);\r\n\r\n /**\r\n * Should the animation yoyo (reverse back down to the start) before repeating?\r\n *\r\n * @name Phaser.Animations.Animation#yoyo\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.yoyo = GetValue(config, 'yoyo', false);\r\n\r\n /**\r\n * Should the GameObject's `visible` property be set to `true` when the animation starts to play?\r\n *\r\n * @name Phaser.Animations.Animation#showOnStart\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.showOnStart = GetValue(config, 'showOnStart', false);\r\n\r\n /**\r\n * Should the GameObject's `visible` property be set to `false` when the animation finishes?\r\n *\r\n * @name Phaser.Animations.Animation#hideOnComplete\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.hideOnComplete = GetValue(config, 'hideOnComplete', false);\r\n\r\n /**\r\n * Global pause. All Game Objects using this Animation instance are impacted by this property.\r\n *\r\n * @name Phaser.Animations.Animation#paused\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.paused = false;\r\n\r\n this.manager.on(Events.PAUSE_ALL, this.pause, this);\r\n this.manager.on(Events.RESUME_ALL, this.resume, this);\r\n },\r\n\r\n /**\r\n * Add frames to the end of the animation.\r\n *\r\n * @method Phaser.Animations.Animation#addFrame\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Animations.AnimationFrame[])} config - [description]\r\n *\r\n * @return {Phaser.Animations.Animation} This Animation object.\r\n */\r\n addFrame: function (config)\r\n {\r\n return this.addFrameAt(this.frames.length, config);\r\n },\r\n\r\n /**\r\n * Add frame/s into the animation.\r\n *\r\n * @method Phaser.Animations.Animation#addFrameAt\r\n * @since 3.0.0\r\n *\r\n * @param {integer} index - The index to insert the frame at within the animation.\r\n * @param {(string|Phaser.Types.Animations.AnimationFrame[])} config - [description]\r\n *\r\n * @return {Phaser.Animations.Animation} This Animation object.\r\n */\r\n addFrameAt: function (index, config)\r\n {\r\n var newFrames = this.getFrames(this.manager.textureManager, config);\r\n\r\n if (newFrames.length > 0)\r\n {\r\n if (index === 0)\r\n {\r\n this.frames = newFrames.concat(this.frames);\r\n }\r\n else if (index === this.frames.length)\r\n {\r\n this.frames = this.frames.concat(newFrames);\r\n }\r\n else\r\n {\r\n var pre = this.frames.slice(0, index);\r\n var post = this.frames.slice(index);\r\n\r\n this.frames = pre.concat(newFrames, post);\r\n }\r\n\r\n this.updateFrameSequence();\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Check if the given frame index is valid.\r\n *\r\n * @method Phaser.Animations.Animation#checkFrame\r\n * @since 3.0.0\r\n *\r\n * @param {integer} index - The index to be checked.\r\n *\r\n * @return {boolean} `true` if the index is valid, otherwise `false`.\r\n */\r\n checkFrame: function (index)\r\n {\r\n return (index >= 0 && index < this.frames.length);\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Animations.Animation#completeAnimation\r\n * @protected\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Components.Animation} component - [description]\r\n */\r\n completeAnimation: function (component)\r\n {\r\n if (this.hideOnComplete)\r\n {\r\n component.parent.visible = false;\r\n }\r\n\r\n component.stop();\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Animations.Animation#getFirstTick\r\n * @protected\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Components.Animation} component - [description]\r\n * @param {boolean} [includeDelay=true] - [description]\r\n */\r\n getFirstTick: function (component, includeDelay)\r\n {\r\n if (includeDelay === undefined) { includeDelay = true; }\r\n\r\n // When is the first update due?\r\n component.accumulator = 0;\r\n component.nextTick = component.msPerFrame + component.currentFrame.duration;\r\n\r\n if (includeDelay)\r\n {\r\n component.nextTick += component._delay;\r\n }\r\n },\r\n\r\n /**\r\n * Returns the AnimationFrame at the provided index\r\n *\r\n * @method Phaser.Animations.Animation#getFrameAt\r\n * @protected\r\n * @since 3.0.0\r\n *\r\n * @param {integer} index - The index in the AnimationFrame array\r\n *\r\n * @return {Phaser.Animations.AnimationFrame} The frame at the index provided from the animation sequence\r\n */\r\n getFrameAt: function (index)\r\n {\r\n return this.frames[index];\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Animations.Animation#getFrames\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Textures.TextureManager} textureManager - [description]\r\n * @param {(string|Phaser.Types.Animations.AnimationFrame[])} frames - [description]\r\n * @param {string} [defaultTextureKey] - [description]\r\n *\r\n * @return {Phaser.Animations.AnimationFrame[]} [description]\r\n */\r\n getFrames: function (textureManager, frames, defaultTextureKey)\r\n {\r\n var out = [];\r\n var prev;\r\n var animationFrame;\r\n var index = 1;\r\n var i;\r\n var textureKey;\r\n\r\n // if frames is a string, we'll get all the frames from the texture manager as if it's a sprite sheet\r\n if (typeof frames === 'string')\r\n {\r\n textureKey = frames;\r\n\r\n var texture = textureManager.get(textureKey);\r\n var frameKeys = texture.getFrameNames();\r\n\r\n frames = [];\r\n\r\n frameKeys.forEach(function (idx, value)\r\n {\r\n frames.push({ key: textureKey, frame: value });\r\n });\r\n }\r\n\r\n if (!Array.isArray(frames) || frames.length === 0)\r\n {\r\n return out;\r\n }\r\n\r\n for (i = 0; i < frames.length; i++)\r\n {\r\n var item = frames[i];\r\n\r\n var key = GetValue(item, 'key', defaultTextureKey);\r\n\r\n if (!key)\r\n {\r\n continue;\r\n }\r\n\r\n // Could be an integer or a string\r\n var frame = GetValue(item, 'frame', 0);\r\n\r\n // The actual texture frame\r\n var textureFrame = textureManager.getFrame(key, frame);\r\n\r\n animationFrame = new Frame(key, frame, index, textureFrame);\r\n\r\n animationFrame.duration = GetValue(item, 'duration', 0);\r\n\r\n animationFrame.isFirst = (!prev);\r\n\r\n // The previously created animationFrame\r\n if (prev)\r\n {\r\n prev.nextFrame = animationFrame;\r\n\r\n animationFrame.prevFrame = prev;\r\n }\r\n\r\n out.push(animationFrame);\r\n\r\n prev = animationFrame;\r\n\r\n index++;\r\n }\r\n\r\n if (out.length > 0)\r\n {\r\n animationFrame.isLast = true;\r\n\r\n // Link them end-to-end, so they loop\r\n animationFrame.nextFrame = out[0];\r\n\r\n out[0].prevFrame = animationFrame;\r\n\r\n // Generate the progress data\r\n\r\n var slice = 1 / (out.length - 1);\r\n\r\n for (i = 0; i < out.length; i++)\r\n {\r\n out[i].progress = i * slice;\r\n }\r\n }\r\n\r\n return out;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Animations.Animation#getNextTick\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Components.Animation} component - [description]\r\n */\r\n getNextTick: function (component)\r\n {\r\n // accumulator += delta * _timeScale\r\n // after a large delta surge (perf issue for example) we need to adjust for it here\r\n\r\n // When is the next update due?\r\n component.accumulator -= component.nextTick;\r\n\r\n component.nextTick = component.msPerFrame + component.currentFrame.duration;\r\n },\r\n\r\n /**\r\n * Loads the Animation values into the Animation Component.\r\n *\r\n * @method Phaser.Animations.Animation#load\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Components.Animation} component - The Animation Component to load values into.\r\n * @param {integer} startFrame - The start frame of the animation to load.\r\n */\r\n load: function (component, startFrame)\r\n {\r\n if (startFrame >= this.frames.length)\r\n {\r\n startFrame = 0;\r\n }\r\n\r\n if (component.currentAnim !== this)\r\n {\r\n component.currentAnim = this;\r\n\r\n component.frameRate = this.frameRate;\r\n component.duration = this.duration;\r\n component.msPerFrame = this.msPerFrame;\r\n component.skipMissedFrames = this.skipMissedFrames;\r\n\r\n component._delay = this.delay;\r\n component._repeat = this.repeat;\r\n component._repeatDelay = this.repeatDelay;\r\n component._yoyo = this.yoyo;\r\n }\r\n\r\n var frame = this.frames[startFrame];\r\n\r\n if (startFrame === 0 && !component.forward)\r\n {\r\n frame = this.getLastFrame();\r\n }\r\n\r\n component.updateFrame(frame);\r\n },\r\n\r\n /**\r\n * Returns the frame closest to the given progress value between 0 and 1.\r\n *\r\n * @method Phaser.Animations.Animation#getFrameByProgress\r\n * @since 3.4.0\r\n *\r\n * @param {number} value - A value between 0 and 1.\r\n *\r\n * @return {Phaser.Animations.AnimationFrame} The frame closest to the given progress value.\r\n */\r\n getFrameByProgress: function (value)\r\n {\r\n value = Clamp(value, 0, 1);\r\n\r\n return FindClosestInSorted(value, this.frames, 'progress');\r\n },\r\n\r\n /**\r\n * Advance the animation frame.\r\n *\r\n * @method Phaser.Animations.Animation#nextFrame\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Components.Animation} component - The Animation Component to advance.\r\n */\r\n nextFrame: function (component)\r\n {\r\n var frame = component.currentFrame;\r\n\r\n // TODO: Add frame skip support\r\n\r\n if (frame.isLast)\r\n {\r\n // We're at the end of the animation\r\n\r\n // Yoyo? (happens before repeat)\r\n if (component._yoyo)\r\n {\r\n this.handleYoyoFrame(component, false);\r\n }\r\n else if (component.repeatCounter > 0)\r\n {\r\n // Repeat (happens before complete)\r\n\r\n if (component._reverse && component.forward)\r\n {\r\n component.forward = false;\r\n }\r\n else\r\n {\r\n this.repeatAnimation(component);\r\n }\r\n }\r\n else\r\n {\r\n this.completeAnimation(component);\r\n }\r\n }\r\n else\r\n {\r\n this.updateAndGetNextTick(component, frame.nextFrame);\r\n }\r\n },\r\n\r\n /**\r\n * Handle the yoyo functionality in nextFrame and previousFrame methods.\r\n *\r\n * @method Phaser.Animations.Animation#handleYoyoFrame\r\n * @private\r\n * @since 3.12.0\r\n *\r\n * @param {Phaser.GameObjects.Components.Animation} component - The Animation Component to advance.\r\n * @param {boolean} isReverse - Is animation in reverse mode? (Default: false)\r\n */\r\n handleYoyoFrame: function (component, isReverse)\r\n {\r\n if (!isReverse) { isReverse = false; }\r\n\r\n if (component._reverse === !isReverse && component.repeatCounter > 0)\r\n {\r\n component.forward = isReverse;\r\n\r\n this.repeatAnimation(component);\r\n\r\n return;\r\n }\r\n\r\n if (component._reverse !== isReverse && component.repeatCounter === 0)\r\n {\r\n this.completeAnimation(component);\r\n\r\n return;\r\n }\r\n \r\n component.forward = isReverse;\r\n\r\n var frame = (isReverse) ? component.currentFrame.nextFrame : component.currentFrame.prevFrame;\r\n\r\n this.updateAndGetNextTick(component, frame);\r\n },\r\n\r\n /**\r\n * Returns the animation last frame.\r\n *\r\n * @method Phaser.Animations.Animation#getLastFrame\r\n * @since 3.12.0\r\n *\r\n * @return {Phaser.Animations.AnimationFrame} component - The Animation Last Frame.\r\n */\r\n getLastFrame: function ()\r\n {\r\n return this.frames[this.frames.length - 1];\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Animations.Animation#previousFrame\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Components.Animation} component - [description]\r\n */\r\n previousFrame: function (component)\r\n {\r\n var frame = component.currentFrame;\r\n\r\n // TODO: Add frame skip support\r\n\r\n if (frame.isFirst)\r\n {\r\n // We're at the start of the animation\r\n\r\n if (component._yoyo)\r\n {\r\n this.handleYoyoFrame(component, true);\r\n }\r\n else if (component.repeatCounter > 0)\r\n {\r\n if (component._reverse && !component.forward)\r\n {\r\n component.currentFrame = this.getLastFrame();\r\n this.repeatAnimation(component);\r\n }\r\n else\r\n {\r\n // Repeat (happens before complete)\r\n component.forward = true;\r\n this.repeatAnimation(component);\r\n }\r\n }\r\n else\r\n {\r\n this.completeAnimation(component);\r\n }\r\n }\r\n else\r\n {\r\n this.updateAndGetNextTick(component, frame.prevFrame);\r\n }\r\n },\r\n\r\n /**\r\n * Update Frame and Wait next tick.\r\n *\r\n * @method Phaser.Animations.Animation#updateAndGetNextTick\r\n * @private\r\n * @since 3.12.0\r\n *\r\n * @param {Phaser.Animations.AnimationFrame} frame - An Animation frame.\r\n */\r\n updateAndGetNextTick: function (component, frame)\r\n {\r\n component.updateFrame(frame);\r\n\r\n this.getNextTick(component);\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Animations.Animation#removeFrame\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Animations.AnimationFrame} frame - [description]\r\n *\r\n * @return {Phaser.Animations.Animation} This Animation object.\r\n */\r\n removeFrame: function (frame)\r\n {\r\n var index = this.frames.indexOf(frame);\r\n\r\n if (index !== -1)\r\n {\r\n this.removeFrameAt(index);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Removes a frame from the AnimationFrame array at the provided index\r\n * and updates the animation accordingly.\r\n *\r\n * @method Phaser.Animations.Animation#removeFrameAt\r\n * @since 3.0.0\r\n *\r\n * @param {integer} index - The index in the AnimationFrame array\r\n *\r\n * @return {Phaser.Animations.Animation} This Animation object.\r\n */\r\n removeFrameAt: function (index)\r\n {\r\n this.frames.splice(index, 1);\r\n\r\n this.updateFrameSequence();\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Animations.Animation#repeatAnimation\r\n * @fires Phaser.Animations.Events#ANIMATION_REPEAT\r\n * @fires Phaser.Animations.Events#SPRITE_ANIMATION_REPEAT\r\n * @fires Phaser.Animations.Events#SPRITE_ANIMATION_KEY_REPEAT\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Components.Animation} component - [description]\r\n */\r\n repeatAnimation: function (component)\r\n {\r\n if (component._pendingStop === 2)\r\n {\r\n return this.completeAnimation(component);\r\n }\r\n\r\n if (component._repeatDelay > 0 && component.pendingRepeat === false)\r\n {\r\n component.pendingRepeat = true;\r\n component.accumulator -= component.nextTick;\r\n component.nextTick += component._repeatDelay;\r\n }\r\n else\r\n {\r\n component.repeatCounter--;\r\n\r\n component.updateFrame(component.currentFrame[(component.forward) ? 'nextFrame' : 'prevFrame']);\r\n\r\n if (component.isPlaying)\r\n {\r\n this.getNextTick(component);\r\n\r\n component.pendingRepeat = false;\r\n\r\n var frame = component.currentFrame;\r\n var parent = component.parent;\r\n\r\n this.emit(Events.ANIMATION_REPEAT, this, frame);\r\n\r\n parent.emit(Events.SPRITE_ANIMATION_KEY_REPEAT + this.key, this, frame, component.repeatCounter, parent);\r\n\r\n parent.emit(Events.SPRITE_ANIMATION_REPEAT, this, frame, component.repeatCounter, parent);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Sets the texture frame the animation uses for rendering.\r\n *\r\n * @method Phaser.Animations.Animation#setFrame\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Components.Animation} component - [description]\r\n */\r\n setFrame: function (component)\r\n {\r\n // Work out which frame should be set next on the child, and set it\r\n if (component.forward)\r\n {\r\n this.nextFrame(component);\r\n }\r\n else\r\n {\r\n this.previousFrame(component);\r\n }\r\n },\r\n\r\n /**\r\n * Converts the animation data to JSON.\r\n *\r\n * @method Phaser.Animations.Animation#toJSON\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Types.Animations.JSONAnimation} [description]\r\n */\r\n toJSON: function ()\r\n {\r\n var output = {\r\n key: this.key,\r\n type: this.type,\r\n frames: [],\r\n frameRate: this.frameRate,\r\n duration: this.duration,\r\n skipMissedFrames: this.skipMissedFrames,\r\n delay: this.delay,\r\n repeat: this.repeat,\r\n repeatDelay: this.repeatDelay,\r\n yoyo: this.yoyo,\r\n showOnStart: this.showOnStart,\r\n hideOnComplete: this.hideOnComplete\r\n };\r\n\r\n this.frames.forEach(function (frame)\r\n {\r\n output.frames.push(frame.toJSON());\r\n });\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Animations.Animation#updateFrameSequence\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Animations.Animation} This Animation object.\r\n */\r\n updateFrameSequence: function ()\r\n {\r\n var len = this.frames.length;\r\n var slice = 1 / (len - 1);\r\n\r\n var frame;\r\n\r\n for (var i = 0; i < len; i++)\r\n {\r\n frame = this.frames[i];\r\n\r\n frame.index = i + 1;\r\n frame.isFirst = false;\r\n frame.isLast = false;\r\n frame.progress = i * slice;\r\n\r\n if (i === 0)\r\n {\r\n frame.isFirst = true;\r\n\r\n if (len === 1)\r\n {\r\n frame.isLast = true;\r\n frame.nextFrame = frame;\r\n frame.prevFrame = frame;\r\n }\r\n else\r\n {\r\n frame.isLast = false;\r\n frame.prevFrame = this.frames[len - 1];\r\n frame.nextFrame = this.frames[i + 1];\r\n }\r\n }\r\n else if (i === len - 1 && len > 1)\r\n {\r\n frame.isLast = true;\r\n frame.prevFrame = this.frames[len - 2];\r\n frame.nextFrame = this.frames[0];\r\n }\r\n else if (len > 1)\r\n {\r\n frame.prevFrame = this.frames[i - 1];\r\n frame.nextFrame = this.frames[i + 1];\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Animations.Animation#pause\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Animations.Animation} This Animation object.\r\n */\r\n pause: function ()\r\n {\r\n this.paused = true;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Animations.Animation#resume\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Animations.Animation} This Animation object.\r\n */\r\n resume: function ()\r\n {\r\n this.paused = false;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Animations.Animation#destroy\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.removeAllListeners();\r\n\r\n this.manager.off(Events.PAUSE_ALL, this.pause, this);\r\n this.manager.off(Events.RESUME_ALL, this.resume, this);\r\n\r\n this.manager.remove(this.key);\r\n\r\n for (var i = 0; i < this.frames.length; i++)\r\n {\r\n this.frames[i].destroy();\r\n }\r\n\r\n this.frames = [];\r\n\r\n this.manager = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Animation;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL0FuaW1hdGlvbi5qcz9hOWY3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsOERBQWU7QUFDbkMsWUFBWSxtQkFBTyxDQUFDLGdFQUFnQjtBQUNwQyxtQkFBbUIsbUJBQU8sQ0FBQyw0REFBZTtBQUMxQyxhQUFhLG1CQUFPLENBQUMsc0VBQVU7QUFDL0IsMEJBQTBCLG1CQUFPLENBQUMsd0dBQW9DO0FBQ3RFLFlBQVksbUJBQU8sQ0FBQyxnRkFBa0I7QUFDdEMsZUFBZSxtQkFBTyxDQUFDLG9GQUEwQjs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1DQUFtQztBQUM5QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxrQ0FBa0M7QUFDN0M7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0RBQWtEO0FBQ2pFO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsa0RBQWtEO0FBQ2pFO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3Q0FBd0M7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3Q0FBd0M7QUFDdkQsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxxQkFBcUI7O0FBRTlEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsaUNBQWlDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLCtCQUErQjtBQUM5QyxlQUFlLGtEQUFrRDtBQUNqRSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsbUNBQW1DO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkIsZ0NBQWdDO0FBQzdELGFBQWE7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHdDQUF3QztBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3Q0FBd0M7QUFDdkQsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsaUNBQWlDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHdDQUF3QztBQUN2RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3Q0FBd0M7QUFDdkQsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixtQkFBbUI7O0FBRTVDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsaUNBQWlDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHdDQUF3QztBQUN2RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUNBQWlDO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlDQUFpQztBQUNoRDtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3Q0FBd0M7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3Q0FBd0M7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isc0NBQXNDO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHVCQUF1QixTQUFTO0FBQ2hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSx1QkFBdUIsd0JBQXdCO0FBQy9DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL0FuaW1hdGlvbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYW1wID0gcmVxdWlyZSgnLi4vbWF0aC9DbGFtcCcpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xyXG52YXIgRXZlbnRzID0gcmVxdWlyZSgnLi9ldmVudHMnKTtcclxudmFyIEZpbmRDbG9zZXN0SW5Tb3J0ZWQgPSByZXF1aXJlKCcuLi91dGlscy9hcnJheS9GaW5kQ2xvc2VzdEluU29ydGVkJyk7XHJcbnZhciBGcmFtZSA9IHJlcXVpcmUoJy4vQW5pbWF0aW9uRnJhbWUnKTtcclxudmFyIEdldFZhbHVlID0gcmVxdWlyZSgnLi4vdXRpbHMvb2JqZWN0L0dldFZhbHVlJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIEZyYW1lIGJhc2VkIEFuaW1hdGlvbi5cclxuICpcclxuICogVGhpcyBjb25zaXN0cyBvZiBhIGtleSwgc29tZSBkZWZhdWx0IHZhbHVlcyAobGlrZSB0aGUgZnJhbWUgcmF0ZSkgYW5kIGEgYnVuY2ggb2YgRnJhbWUgb2JqZWN0cy5cclxuICpcclxuICogVGhlIEFuaW1hdGlvbiBNYW5hZ2VyIGNyZWF0ZXMgdGhlc2UuIEdhbWUgT2JqZWN0cyBkb24ndCBvd24gYW4gaW5zdGFuY2Ugb2YgdGhlc2UgZGlyZWN0bHkuXHJcbiAqIEdhbWUgT2JqZWN0cyBoYXZlIHRoZSBBbmltYXRpb24gQ29tcG9uZW50LCB3aGljaCBhcmUgbGlrZSBwbGF5aGVhZHMgdG8gZ2xvYmFsIEFuaW1hdGlvbnMgKHRoZXNlIG9iamVjdHMpXHJcbiAqIFNvIG11bHRpcGxlIEdhbWUgT2JqZWN0cyBjYW4gaGF2ZSBwbGF5aGVhZHMgYWxsIHBvaW50aW5nIHRvIHRoaXMgb25lIEFuaW1hdGlvbiBpbnN0YW5jZS5cclxuICpcclxuICogQGNsYXNzIEFuaW1hdGlvblxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkFuaW1hdGlvbnNcclxuICogQGV4dGVuZHMgUGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXJcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXJ9IG1hbmFnZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIEFuaW1hdGlvbiBNYW5hZ2VyXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgdW5pcXVlIGlkZW50aWZ5aW5nIHN0cmluZyBmb3IgdGhpcyBhbmltYXRpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkFuaW1hdGlvbnMuQW5pbWF0aW9ufSBjb25maWcgLSBUaGUgQW5pbWF0aW9uIGNvbmZpZ3VyYXRpb24uXHJcbiAqL1xyXG52YXIgQW5pbWF0aW9uID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBFdmVudEVtaXR0ZXIsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBBbmltYXRpb24gKG1hbmFnZXIsIGtleSwgY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIEFuaW1hdGlvbiBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI21hbmFnZXJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdW5pcXVlIGlkZW50aWZ5aW5nIHN0cmluZyBmb3IgdGhpcyBhbmltYXRpb24uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb24ja2V5XHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmtleSA9IGtleTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBmcmFtZSBiYXNlZCBhbmltYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBib25lIGJhc2VkIGFuaW1hdGlvbilcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbiN0eXBlXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAZGVmYXVsdCBmcmFtZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudHlwZSA9ICdmcmFtZSc7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEV4dHJhY3QgYWxsIHRoZSBmcmFtZSBkYXRhIGludG8gdGhlIGZyYW1lcyBhcnJheS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbiNmcmFtZXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWVbXX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZyYW1lcyA9IHRoaXMuZ2V0RnJhbWVzKFxyXG4gICAgICAgICAgICBtYW5hZ2VyLnRleHR1cmVNYW5hZ2VyLFxyXG4gICAgICAgICAgICBHZXRWYWx1ZShjb25maWcsICdmcmFtZXMnLCBbXSksXHJcbiAgICAgICAgICAgIEdldFZhbHVlKGNvbmZpZywgJ2RlZmF1bHRUZXh0dXJlS2V5JywgbnVsbClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZnJhbWUgcmF0ZSBvZiBwbGF5YmFjayBpbiBmcmFtZXMgcGVyIHNlY29uZCAoZGVmYXVsdCAyNCBpZiBkdXJhdGlvbiBpcyBudWxsKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI2ZyYW1lUmF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDI0XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mcmFtZVJhdGUgPSBHZXRWYWx1ZShjb25maWcsICdmcmFtZVJhdGUnLCBudWxsKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSG93IGxvbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgcGxheSBmb3IsIGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAgICAgKiBJZiB0aGUgYGZyYW1lUmF0ZWAgcHJvcGVydHkgaGFzIGJlZW4gc2V0IHRoZW4gaXQgb3ZlcnJpZGVzIHRoaXMgdmFsdWUsXHJcbiAgICAgICAgICogb3RoZXJ3aXNlIHRoZSBgZnJhbWVSYXRlYCBpcyBkZXJpdmVkIGZyb20gYGR1cmF0aW9uYC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbiNkdXJhdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZHVyYXRpb24gPSBHZXRWYWx1ZShjb25maWcsICdkdXJhdGlvbicsIG51bGwpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5kdXJhdGlvbiA9PT0gbnVsbCAmJiB0aGlzLmZyYW1lUmF0ZSA9PT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBObyBkdXJhdGlvbiBvciBmcmFtZVJhdGUgZ2l2ZW4sIHVzZSBkZWZhdWx0IGZyYW1lUmF0ZSBvZiAyNGZwc1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lUmF0ZSA9IDI0O1xyXG4gICAgICAgICAgICB0aGlzLmR1cmF0aW9uID0gKHRoaXMuZnJhbWVSYXRlIC8gdGhpcy5mcmFtZXMubGVuZ3RoKSAqIDEwMDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuZHVyYXRpb24gJiYgdGhpcy5mcmFtZVJhdGUgPT09IG51bGwpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgRHVyYXRpb24gZ2l2ZW4gYnV0IG5vIGZyYW1lUmF0ZSwgc28gc2V0IHRoZSBmcmFtZVJhdGUgYmFzZWQgb24gZHVyYXRpb25cclxuICAgICAgICAgICAgLy8gIEkuZS4gMTIgZnJhbWVzIGluIHRoZSBhbmltYXRpb24sIGR1cmF0aW9uID0gNDAwMCBtc1xyXG4gICAgICAgICAgICAvLyAgU28gZnJhbWVSYXRlIGlzIDEyIC8gKDQwMDAgLyAxMDAwKSA9IDMgZnBzXHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVSYXRlID0gdGhpcy5mcmFtZXMubGVuZ3RoIC8gKHRoaXMuZHVyYXRpb24gLyAxMDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIGZyYW1lUmF0ZSBnaXZlbiwgZGVyaXZlIGR1cmF0aW9uIGZyb20gaXQgKGV2ZW4gaWYgZHVyYXRpb24gYWxzbyBzcGVjaWZpZWQpXHJcbiAgICAgICAgICAgIC8vICBJLmUuIDE1IGZyYW1lcyBpbiB0aGUgYW5pbWF0aW9uLCBmcmFtZVJhdGUgPSAzMCBmcHNcclxuICAgICAgICAgICAgLy8gIFNvIGR1cmF0aW9uIGlzIDE1IC8gMzAgPSAwLjUgKiAxMDAwIChoYWxmIGEgc2Vjb25kLCBvciA1MDBtcylcclxuICAgICAgICAgICAgdGhpcy5kdXJhdGlvbiA9ICh0aGlzLmZyYW1lcy5sZW5ndGggLyB0aGlzLmZyYW1lUmF0ZSkgKiAxMDAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSG93IG1hbnkgbXMgcGVyIGZyYW1lLCBub3QgaW5jbHVkaW5nIGZyYW1lIHNwZWNpZmljIG1vZGlmaWVycy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbiNtc1BlckZyYW1lXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tc1BlckZyYW1lID0gMTAwMCAvIHRoaXMuZnJhbWVSYXRlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTa2lwIGZyYW1lcyBpZiB0aGUgdGltZSBsYWdzLCBvciBhbHdheXMgYWR2YW5jZWQgYW55d2F5P1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI3NraXBNaXNzZWRGcmFtZXNcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2tpcE1pc3NlZEZyYW1lcyA9IEdldFZhbHVlKGNvbmZpZywgJ3NraXBNaXNzZWRGcmFtZXMnLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRlbGF5IGluIG1zIGJlZm9yZSB0aGUgcGxheWJhY2sgd2lsbCBiZWdpbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbiNkZWxheVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlbGF5ID0gR2V0VmFsdWUoY29uZmlnLCAnZGVsYXknLCAwKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgYW5pbWF0aW9uLiBTZXQgdG8gLTEgdG8gcmVwZWF0IGZvcmV2ZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb24jcmVwZWF0XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVwZWF0ID0gR2V0VmFsdWUoY29uZmlnLCAncmVwZWF0JywgMCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBkZWxheSBpbiBtcyBiZWZvcmUgdGhlIGEgcmVwZWF0IHBsYXkgc3RhcnRzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI3JlcGVhdERlbGF5XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVwZWF0RGVsYXkgPSBHZXRWYWx1ZShjb25maWcsICdyZXBlYXREZWxheScsIDApO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTaG91bGQgdGhlIGFuaW1hdGlvbiB5b3lvIChyZXZlcnNlIGJhY2sgZG93biB0byB0aGUgc3RhcnQpIGJlZm9yZSByZXBlYXRpbmc/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb24jeW95b1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy55b3lvID0gR2V0VmFsdWUoY29uZmlnLCAneW95bycsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2hvdWxkIHRoZSBHYW1lT2JqZWN0J3MgYHZpc2libGVgIHByb3BlcnR5IGJlIHNldCB0byBgdHJ1ZWAgd2hlbiB0aGUgYW5pbWF0aW9uIHN0YXJ0cyB0byBwbGF5P1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI3Nob3dPblN0YXJ0XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNob3dPblN0YXJ0ID0gR2V0VmFsdWUoY29uZmlnLCAnc2hvd09uU3RhcnQnLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNob3VsZCB0aGUgR2FtZU9iamVjdCdzIGB2aXNpYmxlYCBwcm9wZXJ0eSBiZSBzZXQgdG8gYGZhbHNlYCB3aGVuIHRoZSBhbmltYXRpb24gZmluaXNoZXM/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb24jaGlkZU9uQ29tcGxldGVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaGlkZU9uQ29tcGxldGUgPSBHZXRWYWx1ZShjb25maWcsICdoaWRlT25Db21wbGV0ZScsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogR2xvYmFsIHBhdXNlLiBBbGwgR2FtZSBPYmplY3RzIHVzaW5nIHRoaXMgQW5pbWF0aW9uIGluc3RhbmNlIGFyZSBpbXBhY3RlZCBieSB0aGlzIHByb3BlcnR5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI3BhdXNlZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLm9uKEV2ZW50cy5QQVVTRV9BTEwsIHRoaXMucGF1c2UsIHRoaXMpO1xyXG4gICAgICAgIHRoaXMubWFuYWdlci5vbihFdmVudHMuUkVTVU1FX0FMTCwgdGhpcy5yZXN1bWUsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBmcmFtZXMgdG8gdGhlIGVuZCBvZiB0aGUgYW5pbWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI2FkZEZyYW1lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWVbXSl9IGNvbmZpZyAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb259IFRoaXMgQW5pbWF0aW9uIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgYWRkRnJhbWU6IGZ1bmN0aW9uIChjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRnJhbWVBdCh0aGlzLmZyYW1lcy5sZW5ndGgsIGNvbmZpZyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGZyYW1lL3MgaW50byB0aGUgYW5pbWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI2FkZEZyYW1lQXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gaW5kZXggLSBUaGUgaW5kZXggdG8gaW5zZXJ0IHRoZSBmcmFtZSBhdCB3aXRoaW4gdGhlIGFuaW1hdGlvbi5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZVtdKX0gY29uZmlnIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbn0gVGhpcyBBbmltYXRpb24gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBhZGRGcmFtZUF0OiBmdW5jdGlvbiAoaW5kZXgsIGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICB2YXIgbmV3RnJhbWVzID0gdGhpcy5nZXRGcmFtZXModGhpcy5tYW5hZ2VyLnRleHR1cmVNYW5hZ2VyLCBjb25maWcpO1xyXG5cclxuICAgICAgICBpZiAobmV3RnJhbWVzLmxlbmd0aCA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWVzID0gbmV3RnJhbWVzLmNvbmNhdCh0aGlzLmZyYW1lcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaW5kZXggPT09IHRoaXMuZnJhbWVzLmxlbmd0aClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mcmFtZXMgPSB0aGlzLmZyYW1lcy5jb25jYXQobmV3RnJhbWVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcmUgPSB0aGlzLmZyYW1lcy5zbGljZSgwLCBpbmRleCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgcG9zdCA9IHRoaXMuZnJhbWVzLnNsaWNlKGluZGV4KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyYW1lcyA9IHByZS5jb25jYXQobmV3RnJhbWVzLCBwb3N0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVGcmFtZVNlcXVlbmNlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gZnJhbWUgaW5kZXggaXMgdmFsaWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb24jY2hlY2tGcmFtZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBpbmRleCAtIFRoZSBpbmRleCB0byBiZSBjaGVja2VkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW5kZXggaXMgdmFsaWQsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBjaGVja0ZyYW1lOiBmdW5jdGlvbiAoaW5kZXgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIChpbmRleCA+PSAwICYmIGluZGV4IDwgdGhpcy5mcmFtZXMubGVuZ3RoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb24jY29tcGxldGVBbmltYXRpb25cclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9ufSBjb21wb25lbnQgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGNvbXBsZXRlQW5pbWF0aW9uOiBmdW5jdGlvbiAoY29tcG9uZW50KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmhpZGVPbkNvbXBsZXRlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29tcG9uZW50LnBhcmVudC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb21wb25lbnQuc3RvcCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbiNnZXRGaXJzdFRpY2tcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9ufSBjb21wb25lbnQgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmNsdWRlRGVsYXk9dHJ1ZV0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGdldEZpcnN0VGljazogZnVuY3Rpb24gKGNvbXBvbmVudCwgaW5jbHVkZURlbGF5KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChpbmNsdWRlRGVsYXkgPT09IHVuZGVmaW5lZCkgeyBpbmNsdWRlRGVsYXkgPSB0cnVlOyB9XHJcblxyXG4gICAgICAgIC8vICBXaGVuIGlzIHRoZSBmaXJzdCB1cGRhdGUgZHVlP1xyXG4gICAgICAgIGNvbXBvbmVudC5hY2N1bXVsYXRvciA9IDA7XHJcbiAgICAgICAgY29tcG9uZW50Lm5leHRUaWNrID0gY29tcG9uZW50Lm1zUGVyRnJhbWUgKyBjb21wb25lbnQuY3VycmVudEZyYW1lLmR1cmF0aW9uO1xyXG5cclxuICAgICAgICBpZiAoaW5jbHVkZURlbGF5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29tcG9uZW50Lm5leHRUaWNrICs9IGNvbXBvbmVudC5fZGVsYXk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIEFuaW1hdGlvbkZyYW1lIGF0IHRoZSBwcm92aWRlZCBpbmRleFxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI2dldEZyYW1lQXRcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gaW5kZXggLSBUaGUgaW5kZXggaW4gdGhlIEFuaW1hdGlvbkZyYW1lIGFycmF5XHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWV9IFRoZSBmcmFtZSBhdCB0aGUgaW5kZXggcHJvdmlkZWQgZnJvbSB0aGUgYW5pbWF0aW9uIHNlcXVlbmNlXHJcbiAgICAgKi9cclxuICAgIGdldEZyYW1lQXQ6IGZ1bmN0aW9uIChpbmRleClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mcmFtZXNbaW5kZXhdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbiNnZXRGcmFtZXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlRleHR1cmVzLlRleHR1cmVNYW5hZ2VyfSB0ZXh0dXJlTWFuYWdlciAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZVtdKX0gZnJhbWVzIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtkZWZhdWx0VGV4dHVyZUtleV0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWVbXX0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBnZXRGcmFtZXM6IGZ1bmN0aW9uICh0ZXh0dXJlTWFuYWdlciwgZnJhbWVzLCBkZWZhdWx0VGV4dHVyZUtleSlcclxuICAgIHtcclxuICAgICAgICB2YXIgb3V0ID0gW107XHJcbiAgICAgICAgdmFyIHByZXY7XHJcbiAgICAgICAgdmFyIGFuaW1hdGlvbkZyYW1lO1xyXG4gICAgICAgIHZhciBpbmRleCA9IDE7XHJcbiAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgdmFyIHRleHR1cmVLZXk7XHJcblxyXG4gICAgICAgIC8vICBpZiBmcmFtZXMgaXMgYSBzdHJpbmcsIHdlJ2xsIGdldCBhbGwgdGhlIGZyYW1lcyBmcm9tIHRoZSB0ZXh0dXJlIG1hbmFnZXIgYXMgaWYgaXQncyBhIHNwcml0ZSBzaGVldFxyXG4gICAgICAgIGlmICh0eXBlb2YgZnJhbWVzID09PSAnc3RyaW5nJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRleHR1cmVLZXkgPSBmcmFtZXM7XHJcblxyXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRleHR1cmVNYW5hZ2VyLmdldCh0ZXh0dXJlS2V5KTtcclxuICAgICAgICAgICAgdmFyIGZyYW1lS2V5cyA9IHRleHR1cmUuZ2V0RnJhbWVOYW1lcygpO1xyXG5cclxuICAgICAgICAgICAgZnJhbWVzID0gW107XHJcblxyXG4gICAgICAgICAgICBmcmFtZUtleXMuZm9yRWFjaChmdW5jdGlvbiAoaWR4LCB2YWx1ZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZnJhbWVzLnB1c2goeyBrZXk6IHRleHR1cmVLZXksIGZyYW1lOiB2YWx1ZSB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZnJhbWVzKSB8fCBmcmFtZXMubGVuZ3RoID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgaXRlbSA9IGZyYW1lc1tpXTtcclxuXHJcbiAgICAgICAgICAgIHZhciBrZXkgPSBHZXRWYWx1ZShpdGVtLCAna2V5JywgZGVmYXVsdFRleHR1cmVLZXkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFrZXkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyAgQ291bGQgYmUgYW4gaW50ZWdlciBvciBhIHN0cmluZ1xyXG4gICAgICAgICAgICB2YXIgZnJhbWUgPSBHZXRWYWx1ZShpdGVtLCAnZnJhbWUnLCAwKTtcclxuXHJcbiAgICAgICAgICAgIC8vICBUaGUgYWN0dWFsIHRleHR1cmUgZnJhbWVcclxuICAgICAgICAgICAgdmFyIHRleHR1cmVGcmFtZSA9IHRleHR1cmVNYW5hZ2VyLmdldEZyYW1lKGtleSwgZnJhbWUpO1xyXG5cclxuICAgICAgICAgICAgYW5pbWF0aW9uRnJhbWUgPSBuZXcgRnJhbWUoa2V5LCBmcmFtZSwgaW5kZXgsIHRleHR1cmVGcmFtZSk7XHJcblxyXG4gICAgICAgICAgICBhbmltYXRpb25GcmFtZS5kdXJhdGlvbiA9IEdldFZhbHVlKGl0ZW0sICdkdXJhdGlvbicsIDApO1xyXG5cclxuICAgICAgICAgICAgYW5pbWF0aW9uRnJhbWUuaXNGaXJzdCA9ICghcHJldik7XHJcblxyXG4gICAgICAgICAgICAvLyAgVGhlIHByZXZpb3VzbHkgY3JlYXRlZCBhbmltYXRpb25GcmFtZVxyXG4gICAgICAgICAgICBpZiAocHJldilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcHJldi5uZXh0RnJhbWUgPSBhbmltYXRpb25GcmFtZTtcclxuXHJcbiAgICAgICAgICAgICAgICBhbmltYXRpb25GcmFtZS5wcmV2RnJhbWUgPSBwcmV2O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBvdXQucHVzaChhbmltYXRpb25GcmFtZSk7XHJcblxyXG4gICAgICAgICAgICBwcmV2ID0gYW5pbWF0aW9uRnJhbWU7XHJcblxyXG4gICAgICAgICAgICBpbmRleCsrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG91dC5sZW5ndGggPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYW5pbWF0aW9uRnJhbWUuaXNMYXN0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIC8vICBMaW5rIHRoZW0gZW5kLXRvLWVuZCwgc28gdGhleSBsb29wXHJcbiAgICAgICAgICAgIGFuaW1hdGlvbkZyYW1lLm5leHRGcmFtZSA9IG91dFswXTtcclxuXHJcbiAgICAgICAgICAgIG91dFswXS5wcmV2RnJhbWUgPSBhbmltYXRpb25GcmFtZTtcclxuXHJcbiAgICAgICAgICAgIC8vICBHZW5lcmF0ZSB0aGUgcHJvZ3Jlc3MgZGF0YVxyXG5cclxuICAgICAgICAgICAgdmFyIHNsaWNlID0gMSAvIChvdXQubGVuZ3RoIC0gMSk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb3V0Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBvdXRbaV0ucHJvZ3Jlc3MgPSBpICogc2xpY2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI2dldE5leHRUaWNrXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbn0gY29tcG9uZW50IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBnZXROZXh0VGljazogZnVuY3Rpb24gKGNvbXBvbmVudClcclxuICAgIHtcclxuICAgICAgICAvLyBhY2N1bXVsYXRvciArPSBkZWx0YSAqIF90aW1lU2NhbGVcclxuICAgICAgICAvLyBhZnRlciBhIGxhcmdlIGRlbHRhIHN1cmdlIChwZXJmIGlzc3VlIGZvciBleGFtcGxlKSB3ZSBuZWVkIHRvIGFkanVzdCBmb3IgaXQgaGVyZVxyXG5cclxuICAgICAgICAvLyAgV2hlbiBpcyB0aGUgbmV4dCB1cGRhdGUgZHVlP1xyXG4gICAgICAgIGNvbXBvbmVudC5hY2N1bXVsYXRvciAtPSBjb21wb25lbnQubmV4dFRpY2s7XHJcblxyXG4gICAgICAgIGNvbXBvbmVudC5uZXh0VGljayA9IGNvbXBvbmVudC5tc1BlckZyYW1lICsgY29tcG9uZW50LmN1cnJlbnRGcmFtZS5kdXJhdGlvbjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2FkcyB0aGUgQW5pbWF0aW9uIHZhbHVlcyBpbnRvIHRoZSBBbmltYXRpb24gQ29tcG9uZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI2xvYWRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbn0gY29tcG9uZW50IC0gVGhlIEFuaW1hdGlvbiBDb21wb25lbnQgdG8gbG9hZCB2YWx1ZXMgaW50by5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gc3RhcnRGcmFtZSAtIFRoZSBzdGFydCBmcmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRvIGxvYWQuXHJcbiAgICAgKi9cclxuICAgIGxvYWQ6IGZ1bmN0aW9uIChjb21wb25lbnQsIHN0YXJ0RnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHN0YXJ0RnJhbWUgPj0gdGhpcy5mcmFtZXMubGVuZ3RoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc3RhcnRGcmFtZSA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29tcG9uZW50LmN1cnJlbnRBbmltICE9PSB0aGlzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29tcG9uZW50LmN1cnJlbnRBbmltID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgIGNvbXBvbmVudC5mcmFtZVJhdGUgPSB0aGlzLmZyYW1lUmF0ZTtcclxuICAgICAgICAgICAgY29tcG9uZW50LmR1cmF0aW9uID0gdGhpcy5kdXJhdGlvbjtcclxuICAgICAgICAgICAgY29tcG9uZW50Lm1zUGVyRnJhbWUgPSB0aGlzLm1zUGVyRnJhbWU7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudC5za2lwTWlzc2VkRnJhbWVzID0gdGhpcy5za2lwTWlzc2VkRnJhbWVzO1xyXG5cclxuICAgICAgICAgICAgY29tcG9uZW50Ll9kZWxheSA9IHRoaXMuZGVsYXk7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudC5fcmVwZWF0ID0gdGhpcy5yZXBlYXQ7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudC5fcmVwZWF0RGVsYXkgPSB0aGlzLnJlcGVhdERlbGF5O1xyXG4gICAgICAgICAgICBjb21wb25lbnQuX3lveW8gPSB0aGlzLnlveW87XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZnJhbWUgPSB0aGlzLmZyYW1lc1tzdGFydEZyYW1lXTtcclxuXHJcbiAgICAgICAgaWYgKHN0YXJ0RnJhbWUgPT09IDAgJiYgIWNvbXBvbmVudC5mb3J3YXJkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZnJhbWUgPSB0aGlzLmdldExhc3RGcmFtZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29tcG9uZW50LnVwZGF0ZUZyYW1lKGZyYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBmcmFtZSBjbG9zZXN0IHRvIHRoZSBnaXZlbiBwcm9ncmVzcyB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb24jZ2V0RnJhbWVCeVByb2dyZXNzXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZX0gVGhlIGZyYW1lIGNsb3Nlc3QgdG8gdGhlIGdpdmVuIHByb2dyZXNzIHZhbHVlLlxyXG4gICAgICovXHJcbiAgICBnZXRGcmFtZUJ5UHJvZ3Jlc3M6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB2YWx1ZSA9IENsYW1wKHZhbHVlLCAwLCAxKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIEZpbmRDbG9zZXN0SW5Tb3J0ZWQodmFsdWUsIHRoaXMuZnJhbWVzLCAncHJvZ3Jlc3MnKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZHZhbmNlIHRoZSBhbmltYXRpb24gZnJhbWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb24jbmV4dEZyYW1lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbn0gY29tcG9uZW50IC0gVGhlIEFuaW1hdGlvbiBDb21wb25lbnQgdG8gYWR2YW5jZS5cclxuICAgICAqL1xyXG4gICAgbmV4dEZyYW1lOiBmdW5jdGlvbiAoY29tcG9uZW50KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudC5jdXJyZW50RnJhbWU7XHJcblxyXG4gICAgICAgIC8vICBUT0RPOiBBZGQgZnJhbWUgc2tpcCBzdXBwb3J0XHJcblxyXG4gICAgICAgIGlmIChmcmFtZS5pc0xhc3QpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgV2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgYW5pbWF0aW9uXHJcblxyXG4gICAgICAgICAgICAvLyAgWW95bz8gKGhhcHBlbnMgYmVmb3JlIHJlcGVhdClcclxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudC5feW95bylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVZb3lvRnJhbWUoY29tcG9uZW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY29tcG9uZW50LnJlcGVhdENvdW50ZXIgPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgUmVwZWF0IChoYXBwZW5zIGJlZm9yZSBjb21wbGV0ZSlcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50Ll9yZXZlcnNlICYmIGNvbXBvbmVudC5mb3J3YXJkKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5mb3J3YXJkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXBlYXRBbmltYXRpb24oY29tcG9uZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVBbmltYXRpb24oY29tcG9uZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFuZEdldE5leHRUaWNrKGNvbXBvbmVudCwgZnJhbWUubmV4dEZyYW1lKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlIHRoZSB5b3lvIGZ1bmN0aW9uYWxpdHkgaW4gbmV4dEZyYW1lIGFuZCBwcmV2aW91c0ZyYW1lIG1ldGhvZHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb24jaGFuZGxlWW95b0ZyYW1lXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9ufSBjb21wb25lbnQgLSBUaGUgQW5pbWF0aW9uIENvbXBvbmVudCB0byBhZHZhbmNlLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBpc1JldmVyc2UgLSBJcyBhbmltYXRpb24gaW4gcmV2ZXJzZSBtb2RlPyAoRGVmYXVsdDogZmFsc2UpXHJcbiAgICAgKi9cclxuICAgIGhhbmRsZVlveW9GcmFtZTogZnVuY3Rpb24gKGNvbXBvbmVudCwgaXNSZXZlcnNlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghaXNSZXZlcnNlKSB7IGlzUmV2ZXJzZSA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIGlmIChjb21wb25lbnQuX3JldmVyc2UgPT09ICFpc1JldmVyc2UgJiYgY29tcG9uZW50LnJlcGVhdENvdW50ZXIgPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29tcG9uZW50LmZvcndhcmQgPSBpc1JldmVyc2U7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlcGVhdEFuaW1hdGlvbihjb21wb25lbnQpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbXBvbmVudC5fcmV2ZXJzZSAhPT0gaXNSZXZlcnNlICYmIGNvbXBvbmVudC5yZXBlYXRDb3VudGVyID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZUFuaW1hdGlvbihjb21wb25lbnQpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBjb21wb25lbnQuZm9yd2FyZCA9IGlzUmV2ZXJzZTtcclxuXHJcbiAgICAgICAgdmFyIGZyYW1lID0gKGlzUmV2ZXJzZSkgPyBjb21wb25lbnQuY3VycmVudEZyYW1lLm5leHRGcmFtZSA6IGNvbXBvbmVudC5jdXJyZW50RnJhbWUucHJldkZyYW1lO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUFuZEdldE5leHRUaWNrKGNvbXBvbmVudCwgZnJhbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGFuaW1hdGlvbiBsYXN0IGZyYW1lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI2dldExhc3RGcmFtZVxyXG4gICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lfSBjb21wb25lbnQgLSBUaGUgQW5pbWF0aW9uIExhc3QgRnJhbWUuXHJcbiAgICAgKi9cclxuICAgIGdldExhc3RGcmFtZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mcmFtZXNbdGhpcy5mcmFtZXMubGVuZ3RoIC0gMV07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI3ByZXZpb3VzRnJhbWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9ufSBjb21wb25lbnQgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIHByZXZpb3VzRnJhbWU6IGZ1bmN0aW9uIChjb21wb25lbnQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGZyYW1lID0gY29tcG9uZW50LmN1cnJlbnRGcmFtZTtcclxuXHJcbiAgICAgICAgLy8gIFRPRE86IEFkZCBmcmFtZSBza2lwIHN1cHBvcnRcclxuXHJcbiAgICAgICAgaWYgKGZyYW1lLmlzRmlyc3QpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgV2UncmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBhbmltYXRpb25cclxuXHJcbiAgICAgICAgICAgIGlmIChjb21wb25lbnQuX3lveW8pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlWW95b0ZyYW1lKGNvbXBvbmVudCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY29tcG9uZW50LnJlcGVhdENvdW50ZXIgPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50Ll9yZXZlcnNlICYmICFjb21wb25lbnQuZm9yd2FyZClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuY3VycmVudEZyYW1lID0gdGhpcy5nZXRMYXN0RnJhbWUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcGVhdEFuaW1hdGlvbihjb21wb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICBSZXBlYXQgKGhhcHBlbnMgYmVmb3JlIGNvbXBsZXRlKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5mb3J3YXJkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcGVhdEFuaW1hdGlvbihjb21wb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZUFuaW1hdGlvbihjb21wb25lbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQW5kR2V0TmV4dFRpY2soY29tcG9uZW50LCBmcmFtZS5wcmV2RnJhbWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgRnJhbWUgYW5kIFdhaXQgbmV4dCB0aWNrLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI3VwZGF0ZUFuZEdldE5leHRUaWNrXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWV9IGZyYW1lIC0gQW4gQW5pbWF0aW9uIGZyYW1lLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVBbmRHZXROZXh0VGljazogZnVuY3Rpb24gKGNvbXBvbmVudCwgZnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgY29tcG9uZW50LnVwZGF0ZUZyYW1lKGZyYW1lKTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXROZXh0VGljayhjb21wb25lbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbiNyZW1vdmVGcmFtZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZX0gZnJhbWUgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9ufSBUaGlzIEFuaW1hdGlvbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUZyYW1lOiBmdW5jdGlvbiAoZnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5mcmFtZXMuaW5kZXhPZihmcmFtZSk7XHJcblxyXG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZyYW1lQXQoaW5kZXgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIGZyYW1lIGZyb20gdGhlIEFuaW1hdGlvbkZyYW1lIGFycmF5IGF0IHRoZSBwcm92aWRlZCBpbmRleFxyXG4gICAgICogYW5kIHVwZGF0ZXMgdGhlIGFuaW1hdGlvbiBhY2NvcmRpbmdseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbiNyZW1vdmVGcmFtZUF0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGluZGV4IC0gVGhlIGluZGV4IGluIHRoZSBBbmltYXRpb25GcmFtZSBhcnJheVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbn0gVGhpcyBBbmltYXRpb24gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZW1vdmVGcmFtZUF0OiBmdW5jdGlvbiAoaW5kZXgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5mcmFtZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVGcmFtZVNlcXVlbmNlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbiNyZXBlYXRBbmltYXRpb25cclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQW5pbWF0aW9ucy5FdmVudHMjQU5JTUFUSU9OX1JFUEVBVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNTUFJJVEVfQU5JTUFUSU9OX1JFUEVBVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNTUFJJVEVfQU5JTUFUSU9OX0tFWV9SRVBFQVRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9ufSBjb21wb25lbnQgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIHJlcGVhdEFuaW1hdGlvbjogZnVuY3Rpb24gKGNvbXBvbmVudClcclxuICAgIHtcclxuICAgICAgICBpZiAoY29tcG9uZW50Ll9wZW5kaW5nU3RvcCA9PT0gMilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlQW5pbWF0aW9uKGNvbXBvbmVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29tcG9uZW50Ll9yZXBlYXREZWxheSA+IDAgJiYgY29tcG9uZW50LnBlbmRpbmdSZXBlYXQgPT09IGZhbHNlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29tcG9uZW50LnBlbmRpbmdSZXBlYXQgPSB0cnVlO1xyXG4gICAgICAgICAgICBjb21wb25lbnQuYWNjdW11bGF0b3IgLT0gY29tcG9uZW50Lm5leHRUaWNrO1xyXG4gICAgICAgICAgICBjb21wb25lbnQubmV4dFRpY2sgKz0gY29tcG9uZW50Ll9yZXBlYXREZWxheTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29tcG9uZW50LnJlcGVhdENvdW50ZXItLTtcclxuXHJcbiAgICAgICAgICAgIGNvbXBvbmVudC51cGRhdGVGcmFtZShjb21wb25lbnQuY3VycmVudEZyYW1lWyhjb21wb25lbnQuZm9yd2FyZCkgPyAnbmV4dEZyYW1lJyA6ICdwcmV2RnJhbWUnXSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50LmlzUGxheWluZylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXROZXh0VGljayhjb21wb25lbnQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5wZW5kaW5nUmVwZWF0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGZyYW1lID0gY29tcG9uZW50LmN1cnJlbnRGcmFtZTtcclxuICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBjb21wb25lbnQucGFyZW50O1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuQU5JTUFUSU9OX1JFUEVBVCwgdGhpcywgZnJhbWUpO1xyXG5cclxuICAgICAgICAgICAgICAgIHBhcmVudC5lbWl0KEV2ZW50cy5TUFJJVEVfQU5JTUFUSU9OX0tFWV9SRVBFQVQgKyB0aGlzLmtleSwgdGhpcywgZnJhbWUsIGNvbXBvbmVudC5yZXBlYXRDb3VudGVyLCBwYXJlbnQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHBhcmVudC5lbWl0KEV2ZW50cy5TUFJJVEVfQU5JTUFUSU9OX1JFUEVBVCwgdGhpcywgZnJhbWUsIGNvbXBvbmVudC5yZXBlYXRDb3VudGVyLCBwYXJlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHRleHR1cmUgZnJhbWUgdGhlIGFuaW1hdGlvbiB1c2VzIGZvciByZW5kZXJpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb24jc2V0RnJhbWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9ufSBjb21wb25lbnQgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIHNldEZyYW1lOiBmdW5jdGlvbiAoY29tcG9uZW50KVxyXG4gICAge1xyXG4gICAgICAgIC8vICBXb3JrIG91dCB3aGljaCBmcmFtZSBzaG91bGQgYmUgc2V0IG5leHQgb24gdGhlIGNoaWxkLCBhbmQgc2V0IGl0XHJcbiAgICAgICAgaWYgKGNvbXBvbmVudC5mb3J3YXJkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5uZXh0RnJhbWUoY29tcG9uZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aW91c0ZyYW1lKGNvbXBvbmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRzIHRoZSBhbmltYXRpb24gZGF0YSB0byBKU09OLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI3RvSlNPTlxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlR5cGVzLkFuaW1hdGlvbnMuSlNPTkFuaW1hdGlvbn0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICB0b0pTT046IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG91dHB1dCA9IHtcclxuICAgICAgICAgICAga2V5OiB0aGlzLmtleSxcclxuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICAgICAgICBmcmFtZXM6IFtdLFxyXG4gICAgICAgICAgICBmcmFtZVJhdGU6IHRoaXMuZnJhbWVSYXRlLFxyXG4gICAgICAgICAgICBkdXJhdGlvbjogdGhpcy5kdXJhdGlvbixcclxuICAgICAgICAgICAgc2tpcE1pc3NlZEZyYW1lczogdGhpcy5za2lwTWlzc2VkRnJhbWVzLFxyXG4gICAgICAgICAgICBkZWxheTogdGhpcy5kZWxheSxcclxuICAgICAgICAgICAgcmVwZWF0OiB0aGlzLnJlcGVhdCxcclxuICAgICAgICAgICAgcmVwZWF0RGVsYXk6IHRoaXMucmVwZWF0RGVsYXksXHJcbiAgICAgICAgICAgIHlveW86IHRoaXMueW95byxcclxuICAgICAgICAgICAgc2hvd09uU3RhcnQ6IHRoaXMuc2hvd09uU3RhcnQsXHJcbiAgICAgICAgICAgIGhpZGVPbkNvbXBsZXRlOiB0aGlzLmhpZGVPbkNvbXBsZXRlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZXMuZm9yRWFjaChmdW5jdGlvbiAoZnJhbWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvdXRwdXQuZnJhbWVzLnB1c2goZnJhbWUudG9KU09OKCkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbiN1cGRhdGVGcmFtZVNlcXVlbmNlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb259IFRoaXMgQW5pbWF0aW9uIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlRnJhbWVTZXF1ZW5jZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgbGVuID0gdGhpcy5mcmFtZXMubGVuZ3RoO1xyXG4gICAgICAgIHZhciBzbGljZSA9IDEgLyAobGVuIC0gMSk7XHJcblxyXG4gICAgICAgIHZhciBmcmFtZTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZyYW1lID0gdGhpcy5mcmFtZXNbaV07XHJcblxyXG4gICAgICAgICAgICBmcmFtZS5pbmRleCA9IGkgKyAxO1xyXG4gICAgICAgICAgICBmcmFtZS5pc0ZpcnN0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGZyYW1lLmlzTGFzdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBmcmFtZS5wcm9ncmVzcyA9IGkgKiBzbGljZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID09PSAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmcmFtZS5pc0ZpcnN0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobGVuID09PSAxKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGZyYW1lLmlzTGFzdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhbWUubmV4dEZyYW1lID0gZnJhbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhbWUucHJldkZyYW1lID0gZnJhbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhbWUuaXNMYXN0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhbWUucHJldkZyYW1lID0gdGhpcy5mcmFtZXNbbGVuIC0gMV07XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhbWUubmV4dEZyYW1lID0gdGhpcy5mcmFtZXNbaSArIDFdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGkgPT09IGxlbiAtIDEgJiYgbGVuID4gMSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZnJhbWUuaXNMYXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGZyYW1lLnByZXZGcmFtZSA9IHRoaXMuZnJhbWVzW2xlbiAtIDJdO1xyXG4gICAgICAgICAgICAgICAgZnJhbWUubmV4dEZyYW1lID0gdGhpcy5mcmFtZXNbMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobGVuID4gMSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZnJhbWUucHJldkZyYW1lID0gdGhpcy5mcmFtZXNbaSAtIDFdO1xyXG4gICAgICAgICAgICAgICAgZnJhbWUubmV4dEZyYW1lID0gdGhpcy5mcmFtZXNbaSArIDFdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb24jcGF1c2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbn0gVGhpcyBBbmltYXRpb24gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwYXVzZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnBhdXNlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbiNyZXN1bWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbn0gVGhpcyBBbmltYXRpb24gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZXN1bWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XHJcblxyXG4gICAgICAgIHRoaXMubWFuYWdlci5vZmYoRXZlbnRzLlBBVVNFX0FMTCwgdGhpcy5wYXVzZSwgdGhpcyk7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLm9mZihFdmVudHMuUkVTVU1FX0FMTCwgdGhpcy5yZXN1bWUsIHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLm1hbmFnZXIucmVtb3ZlKHRoaXMua2V5KTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZyYW1lcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzW2ldLmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMubWFuYWdlciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQW5pbWF0aW9uO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/Animation.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/animations/AnimationFrame.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/animations/AnimationFrame.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single frame in an Animation sequence.\r\n *\r\n * An AnimationFrame consists of a reference to the Texture it uses for rendering, references to other\r\n * frames in the animation, and index data. It also has the ability to modify the animation timing.\r\n *\r\n * AnimationFrames are generated automatically by the Animation class.\r\n *\r\n * @class AnimationFrame\r\n * @memberof Phaser.Animations\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {string} textureKey - The key of the Texture this AnimationFrame uses.\r\n * @param {(string|integer)} textureFrame - The key of the Frame within the Texture that this AnimationFrame uses.\r\n * @param {integer} index - The index of this AnimationFrame within the Animation sequence.\r\n * @param {Phaser.Textures.Frame} frame - A reference to the Texture Frame this AnimationFrame uses for rendering.\r\n */\r\nvar AnimationFrame = new Class({\r\n\r\n initialize:\r\n\r\n function AnimationFrame (textureKey, textureFrame, index, frame)\r\n {\r\n /**\r\n * The key of the Texture this AnimationFrame uses.\r\n *\r\n * @name Phaser.Animations.AnimationFrame#textureKey\r\n * @type {string}\r\n * @since 3.0.0\r\n */\r\n this.textureKey = textureKey;\r\n\r\n /**\r\n * The key of the Frame within the Texture that this AnimationFrame uses.\r\n *\r\n * @name Phaser.Animations.AnimationFrame#textureFrame\r\n * @type {(string|integer)}\r\n * @since 3.0.0\r\n */\r\n this.textureFrame = textureFrame;\r\n\r\n /**\r\n * The index of this AnimationFrame within the Animation sequence.\r\n *\r\n * @name Phaser.Animations.AnimationFrame#index\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n this.index = index;\r\n\r\n /**\r\n * A reference to the Texture Frame this AnimationFrame uses for rendering.\r\n *\r\n * @name Phaser.Animations.AnimationFrame#frame\r\n * @type {Phaser.Textures.Frame}\r\n * @since 3.0.0\r\n */\r\n this.frame = frame;\r\n\r\n /**\r\n * Is this the first frame in an animation sequence?\r\n *\r\n * @name Phaser.Animations.AnimationFrame#isFirst\r\n * @type {boolean}\r\n * @default false\r\n * @readonly\r\n * @since 3.0.0\r\n */\r\n this.isFirst = false;\r\n\r\n /**\r\n * Is this the last frame in an animation sequence?\r\n *\r\n * @name Phaser.Animations.AnimationFrame#isLast\r\n * @type {boolean}\r\n * @default false\r\n * @readonly\r\n * @since 3.0.0\r\n */\r\n this.isLast = false;\r\n\r\n /**\r\n * A reference to the AnimationFrame that comes before this one in the animation, if any.\r\n *\r\n * @name Phaser.Animations.AnimationFrame#prevFrame\r\n * @type {?Phaser.Animations.AnimationFrame}\r\n * @default null\r\n * @readonly\r\n * @since 3.0.0\r\n */\r\n this.prevFrame = null;\r\n\r\n /**\r\n * A reference to the AnimationFrame that comes after this one in the animation, if any.\r\n *\r\n * @name Phaser.Animations.AnimationFrame#nextFrame\r\n * @type {?Phaser.Animations.AnimationFrame}\r\n * @default null\r\n * @readonly\r\n * @since 3.0.0\r\n */\r\n this.nextFrame = null;\r\n\r\n /**\r\n * Additional time (in ms) that this frame should appear for during playback.\r\n * The value is added onto the msPerFrame set by the animation.\r\n *\r\n * @name Phaser.Animations.AnimationFrame#duration\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.duration = 0;\r\n\r\n /**\r\n * What % through the animation does this frame come?\r\n * This value is generated when the animation is created and cached here.\r\n *\r\n * @name Phaser.Animations.AnimationFrame#progress\r\n * @type {number}\r\n * @default 0\r\n * @readonly\r\n * @since 3.0.0\r\n */\r\n this.progress = 0;\r\n },\r\n\r\n /**\r\n * Generates a JavaScript object suitable for converting to JSON.\r\n *\r\n * @method Phaser.Animations.AnimationFrame#toJSON\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Types.Animations.JSONAnimationFrame} The AnimationFrame data.\r\n */\r\n toJSON: function ()\r\n {\r\n return {\r\n key: this.textureKey,\r\n frame: this.textureFrame,\r\n duration: this.duration\r\n };\r\n },\r\n\r\n /**\r\n * Destroys this object by removing references to external resources and callbacks.\r\n *\r\n * @method Phaser.Animations.AnimationFrame#destroy\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.frame = undefined;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = AnimationFrame;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL0FuaW1hdGlvbkZyYW1lLmpzPzUwMzMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsc0JBQXNCO0FBQ2pDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsMkNBQTJDO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL0FuaW1hdGlvbkZyYW1lLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBzaW5nbGUgZnJhbWUgaW4gYW4gQW5pbWF0aW9uIHNlcXVlbmNlLlxyXG4gKlxyXG4gKiBBbiBBbmltYXRpb25GcmFtZSBjb25zaXN0cyBvZiBhIHJlZmVyZW5jZSB0byB0aGUgVGV4dHVyZSBpdCB1c2VzIGZvciByZW5kZXJpbmcsIHJlZmVyZW5jZXMgdG8gb3RoZXJcclxuICogZnJhbWVzIGluIHRoZSBhbmltYXRpb24sIGFuZCBpbmRleCBkYXRhLiBJdCBhbHNvIGhhcyB0aGUgYWJpbGl0eSB0byBtb2RpZnkgdGhlIGFuaW1hdGlvbiB0aW1pbmcuXHJcbiAqXHJcbiAqIEFuaW1hdGlvbkZyYW1lcyBhcmUgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIEFuaW1hdGlvbiBjbGFzcy5cclxuICpcclxuICogQGNsYXNzIEFuaW1hdGlvbkZyYW1lXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuQW5pbWF0aW9uc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0dXJlS2V5IC0gVGhlIGtleSBvZiB0aGUgVGV4dHVyZSB0aGlzIEFuaW1hdGlvbkZyYW1lIHVzZXMuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gdGV4dHVyZUZyYW1lIC0gVGhlIGtleSBvZiB0aGUgRnJhbWUgd2l0aGluIHRoZSBUZXh0dXJlIHRoYXQgdGhpcyBBbmltYXRpb25GcmFtZSB1c2VzLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGluZGV4IC0gVGhlIGluZGV4IG9mIHRoaXMgQW5pbWF0aW9uRnJhbWUgd2l0aGluIHRoZSBBbmltYXRpb24gc2VxdWVuY2UuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRleHR1cmVzLkZyYW1lfSBmcmFtZSAtIEEgcmVmZXJlbmNlIHRvIHRoZSBUZXh0dXJlIEZyYW1lIHRoaXMgQW5pbWF0aW9uRnJhbWUgdXNlcyBmb3IgcmVuZGVyaW5nLlxyXG4gKi9cclxudmFyIEFuaW1hdGlvbkZyYW1lID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEFuaW1hdGlvbkZyYW1lICh0ZXh0dXJlS2V5LCB0ZXh0dXJlRnJhbWUsIGluZGV4LCBmcmFtZSlcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUga2V5IG9mIHRoZSBUZXh0dXJlIHRoaXMgQW5pbWF0aW9uRnJhbWUgdXNlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lI3RleHR1cmVLZXlcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGV4dHVyZUtleSA9IHRleHR1cmVLZXk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBrZXkgb2YgdGhlIEZyYW1lIHdpdGhpbiB0aGUgVGV4dHVyZSB0aGF0IHRoaXMgQW5pbWF0aW9uRnJhbWUgdXNlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lI3RleHR1cmVGcmFtZVxyXG4gICAgICAgICAqIEB0eXBlIHsoc3RyaW5nfGludGVnZXIpfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGV4dHVyZUZyYW1lID0gdGV4dHVyZUZyYW1lO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaW5kZXggb2YgdGhpcyBBbmltYXRpb25GcmFtZSB3aXRoaW4gdGhlIEFuaW1hdGlvbiBzZXF1ZW5jZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lI2luZGV4XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgVGV4dHVyZSBGcmFtZSB0aGlzIEFuaW1hdGlvbkZyYW1lIHVzZXMgZm9yIHJlbmRlcmluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lI2ZyYW1lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UZXh0dXJlcy5GcmFtZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElzIHRoaXMgdGhlIGZpcnN0IGZyYW1lIGluIGFuIGFuaW1hdGlvbiBzZXF1ZW5jZT9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lI2lzRmlyc3RcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaXNGaXJzdCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJcyB0aGlzIHRoZSBsYXN0IGZyYW1lIGluIGFuIGFuaW1hdGlvbiBzZXF1ZW5jZT9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lI2lzTGFzdFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc0xhc3QgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIEFuaW1hdGlvbkZyYW1lIHRoYXQgY29tZXMgYmVmb3JlIHRoaXMgb25lIGluIHRoZSBhbmltYXRpb24sIGlmIGFueS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lI3ByZXZGcmFtZVxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWV9XHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucHJldkZyYW1lID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIEFuaW1hdGlvbkZyYW1lIHRoYXQgY29tZXMgYWZ0ZXIgdGhpcyBvbmUgaW4gdGhlIGFuaW1hdGlvbiwgaWYgYW55LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWUjbmV4dEZyYW1lXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5uZXh0RnJhbWUgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBZGRpdGlvbmFsIHRpbWUgKGluIG1zKSB0aGF0IHRoaXMgZnJhbWUgc2hvdWxkIGFwcGVhciBmb3IgZHVyaW5nIHBsYXliYWNrLlxyXG4gICAgICAgICAqIFRoZSB2YWx1ZSBpcyBhZGRlZCBvbnRvIHRoZSBtc1BlckZyYW1lIHNldCBieSB0aGUgYW5pbWF0aW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWUjZHVyYXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmR1cmF0aW9uID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hhdCAlIHRocm91Z2ggdGhlIGFuaW1hdGlvbiBkb2VzIHRoaXMgZnJhbWUgY29tZT9cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIGdlbmVyYXRlZCB3aGVuIHRoZSBhbmltYXRpb24gaXMgY3JlYXRlZCBhbmQgY2FjaGVkIGhlcmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZSNwcm9ncmVzc1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhIEphdmFTY3JpcHQgb2JqZWN0IHN1aXRhYmxlIGZvciBjb252ZXJ0aW5nIHRvIEpTT04uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZSN0b0pTT05cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UeXBlcy5BbmltYXRpb25zLkpTT05BbmltYXRpb25GcmFtZX0gVGhlIEFuaW1hdGlvbkZyYW1lIGRhdGEuXHJcbiAgICAgKi9cclxuICAgIHRvSlNPTjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBrZXk6IHRoaXMudGV4dHVyZUtleSxcclxuICAgICAgICAgICAgZnJhbWU6IHRoaXMudGV4dHVyZUZyYW1lLFxyXG4gICAgICAgICAgICBkdXJhdGlvbjogdGhpcy5kdXJhdGlvblxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhpcyBvYmplY3QgYnkgcmVtb3ZpbmcgcmVmZXJlbmNlcyB0byBleHRlcm5hbCByZXNvdXJjZXMgYW5kIGNhbGxiYWNrcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZnJhbWUgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQW5pbWF0aW9uRnJhbWU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/AnimationFrame.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/animations/AnimationManager.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/animations/AnimationManager.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Animation = __webpack_require__(/*! ./Animation */ \"./node_modules/phaser/src/animations/Animation.js\");\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CustomMap = __webpack_require__(/*! ../structs/Map */ \"./node_modules/phaser/src/structs/Map.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/animations/events/index.js\");\r\nvar GameEvents = __webpack_require__(/*! ../core/events */ \"./node_modules/phaser/src/core/events/index.js\");\r\nvar GetValue = __webpack_require__(/*! ../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar Pad = __webpack_require__(/*! ../utils/string/Pad */ \"./node_modules/phaser/src/utils/string/Pad.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Animation Manager.\r\n *\r\n * Animations are managed by the global Animation Manager. This is a singleton class that is\r\n * responsible for creating and delivering animations and their corresponding data to all Game Objects.\r\n * Unlike plugins it is owned by the Game instance, not the Scene.\r\n *\r\n * Sprites and other Game Objects get the data they need from the AnimationManager.\r\n *\r\n * @class AnimationManager\r\n * @extends Phaser.Events.EventEmitter\r\n * @memberof Phaser.Animations\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Game} game - A reference to the Phaser.Game instance.\r\n */\r\nvar AnimationManager = new Class({\r\n\r\n Extends: EventEmitter,\r\n\r\n initialize:\r\n\r\n function AnimationManager (game)\r\n {\r\n EventEmitter.call(this);\r\n\r\n /**\r\n * A reference to the Phaser.Game instance.\r\n *\r\n * @name Phaser.Animations.AnimationManager#game\r\n * @type {Phaser.Game}\r\n * @protected\r\n * @since 3.0.0\r\n */\r\n this.game = game;\r\n\r\n /**\r\n * A reference to the Texture Manager.\r\n *\r\n * @name Phaser.Animations.AnimationManager#textureManager\r\n * @type {Phaser.Textures.TextureManager}\r\n * @protected\r\n * @since 3.0.0\r\n */\r\n this.textureManager = null;\r\n\r\n /**\r\n * The global time scale of the Animation Manager.\r\n *\r\n * This scales the time delta between two frames, thus influencing the speed of time for the Animation Manager.\r\n *\r\n * @name Phaser.Animations.AnimationManager#globalTimeScale\r\n * @type {number}\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n this.globalTimeScale = 1;\r\n\r\n /**\r\n * The Animations registered in the Animation Manager.\r\n *\r\n * This map should be modified with the {@link #add} and {@link #create} methods of the Animation Manager.\r\n *\r\n * @name Phaser.Animations.AnimationManager#anims\r\n * @type {Phaser.Structs.Map.<string, Phaser.Animations.Animation>}\r\n * @protected\r\n * @since 3.0.0\r\n */\r\n this.anims = new CustomMap();\r\n\r\n /**\r\n * Whether the Animation Manager is paused along with all of its Animations.\r\n *\r\n * @name Phaser.Animations.AnimationManager#paused\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.paused = false;\r\n\r\n /**\r\n * The name of this Animation Manager.\r\n *\r\n * @name Phaser.Animations.AnimationManager#name\r\n * @type {string}\r\n * @since 3.0.0\r\n */\r\n this.name = 'AnimationManager';\r\n\r\n game.events.once(GameEvents.BOOT, this.boot, this);\r\n },\r\n\r\n /**\r\n * Registers event listeners after the Game boots.\r\n *\r\n * @method Phaser.Animations.AnimationManager#boot\r\n * @listens Phaser.Core.Events#DESTROY\r\n * @since 3.0.0\r\n */\r\n boot: function ()\r\n {\r\n this.textureManager = this.game.textures;\r\n\r\n this.game.events.once(GameEvents.DESTROY, this.destroy, this);\r\n },\r\n\r\n /**\r\n * Adds an existing Animation to the Animation Manager.\r\n *\r\n * @method Phaser.Animations.AnimationManager#add\r\n * @fires Phaser.Animations.Events#ADD_ANIMATION\r\n * @since 3.0.0\r\n *\r\n * @param {string} key - The key under which the Animation should be added. The Animation will be updated with it. Must be unique.\r\n * @param {Phaser.Animations.Animation} animation - The Animation which should be added to the Animation Manager.\r\n *\r\n * @return {Phaser.Animations.AnimationManager} This Animation Manager.\r\n */\r\n add: function (key, animation)\r\n {\r\n if (this.anims.has(key))\r\n {\r\n console.warn('Animation key exists: ' + key);\r\n\r\n return;\r\n }\r\n\r\n animation.key = key;\r\n\r\n this.anims.set(key, animation);\r\n\r\n this.emit(Events.ADD_ANIMATION, key, animation);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Checks to see if the given key is already in use within the Animation Manager or not.\r\n * \r\n * Animations are global. Keys created in one scene can be used from any other Scene in your game. They are not Scene specific.\r\n *\r\n * @method Phaser.Animations.AnimationManager#exists\r\n * @since 3.16.0\r\n *\r\n * @param {string} key - The key of the Animation to check.\r\n *\r\n * @return {boolean} `true` if the Animation already exists in the Animation Manager, or `false` if the key is available.\r\n */\r\n exists: function (key)\r\n {\r\n return this.anims.has(key);\r\n },\r\n\r\n /**\r\n * Creates a new Animation and adds it to the Animation Manager.\r\n * \r\n * Animations are global. Once created, you can use them in any Scene in your game. They are not Scene specific.\r\n * \r\n * If an invalid key is given this method will return `false`.\r\n * \r\n * If you pass the key of an animation that already exists in the Animation Manager, that animation will be returned.\r\n * \r\n * A brand new animation is only created if the key is valid and not already in use.\r\n * \r\n * If you wish to re-use an existing key, call `AnimationManager.remove` first, then this method.\r\n *\r\n * @method Phaser.Animations.AnimationManager#create\r\n * @fires Phaser.Animations.Events#ADD_ANIMATION\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Animations.Animation} config - The configuration settings for the Animation.\r\n *\r\n * @return {(Phaser.Animations.Animation|false)} The Animation that was created, or `false` is the key is already in use.\r\n */\r\n create: function (config)\r\n {\r\n var key = config.key;\r\n\r\n var anim = false;\r\n\r\n if (key)\r\n {\r\n anim = this.get(key);\r\n\r\n if (!anim)\r\n {\r\n anim = new Animation(this, key, config);\r\n\r\n this.anims.set(key, anim);\r\n \r\n this.emit(Events.ADD_ANIMATION, key, anim);\r\n }\r\n }\r\n\r\n return anim;\r\n },\r\n\r\n /**\r\n * Loads this Animation Manager's Animations and settings from a JSON object.\r\n *\r\n * @method Phaser.Animations.AnimationManager#fromJSON\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Animations.JSONAnimations|Phaser.Types.Animations.JSONAnimation)} data - The JSON object to parse.\r\n * @param {boolean} [clearCurrentAnimations=false] - If set to `true`, the current animations will be removed (`anims.clear()`). If set to `false` (default), the animations in `data` will be added.\r\n *\r\n * @return {Phaser.Animations.Animation[]} An array containing all of the Animation objects that were created as a result of this call.\r\n */\r\n fromJSON: function (data, clearCurrentAnimations)\r\n {\r\n if (clearCurrentAnimations === undefined) { clearCurrentAnimations = false; }\r\n\r\n if (clearCurrentAnimations)\r\n {\r\n this.anims.clear();\r\n }\r\n\r\n // Do we have a String (i.e. from JSON, or an Object?)\r\n if (typeof data === 'string')\r\n {\r\n data = JSON.parse(data);\r\n }\r\n\r\n var output = [];\r\n\r\n // Array of animations, or a single animation?\r\n if (data.hasOwnProperty('anims') && Array.isArray(data.anims))\r\n {\r\n for (var i = 0; i < data.anims.length; i++)\r\n {\r\n output.push(this.create(data.anims[i]));\r\n }\r\n\r\n if (data.hasOwnProperty('globalTimeScale'))\r\n {\r\n this.globalTimeScale = data.globalTimeScale;\r\n }\r\n }\r\n else if (data.hasOwnProperty('key') && data.type === 'frame')\r\n {\r\n output.push(this.create(data));\r\n }\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Animations.AnimationManager#generateFrameNames\r\n * @since 3.0.0\r\n *\r\n * @param {string} key - The key for the texture containing the animation frames.\r\n * @param {Phaser.Types.Animations.GenerateFrameNames} [config] - The configuration object for the animation frame names.\r\n *\r\n * @return {Phaser.Types.Animations.AnimationFrame[]} The array of {@link Phaser.Types.Animations.AnimationFrame} objects.\r\n */\r\n generateFrameNames: function (key, config)\r\n {\r\n var prefix = GetValue(config, 'prefix', '');\r\n var start = GetValue(config, 'start', 0);\r\n var end = GetValue(config, 'end', 0);\r\n var suffix = GetValue(config, 'suffix', '');\r\n var zeroPad = GetValue(config, 'zeroPad', 0);\r\n var out = GetValue(config, 'outputArray', []);\r\n var frames = GetValue(config, 'frames', false);\r\n\r\n var texture = this.textureManager.get(key);\r\n\r\n if (!texture)\r\n {\r\n return out;\r\n }\r\n\r\n var diff = (start < end) ? 1 : -1;\r\n\r\n // Adjust because we use i !== end in the for loop\r\n end += diff;\r\n\r\n var i;\r\n var frame;\r\n\r\n if (!config)\r\n {\r\n // Use every frame in the atlas?\r\n frames = texture.getFrameNames();\r\n\r\n for (i = 0; i < frames.length; i++)\r\n {\r\n out.push({ key: key, frame: frames[i] });\r\n }\r\n }\r\n else if (Array.isArray(frames))\r\n {\r\n // Have they provided their own custom frame sequence array?\r\n for (i = 0; i < frames.length; i++)\r\n {\r\n frame = prefix + Pad(frames[i], zeroPad, '0', 1) + suffix;\r\n\r\n if (texture.has(frame))\r\n {\r\n out.push({ key: key, frame: frame });\r\n }\r\n }\r\n }\r\n else\r\n {\r\n for (i = start; i !== end; i += diff)\r\n {\r\n frame = prefix + Pad(i, zeroPad, '0', 1) + suffix;\r\n\r\n if (texture.has(frame))\r\n {\r\n out.push({ key: key, frame: frame });\r\n }\r\n }\r\n }\r\n\r\n return out;\r\n },\r\n\r\n /**\r\n * Generate an array of {@link Phaser.Types.Animations.AnimationFrame} objects from a texture key and configuration object.\r\n *\r\n * Generates objects with numbered frame names, as configured by the given {@link Phaser.Types.Animations.GenerateFrameNumbers}.\r\n *\r\n * @method Phaser.Animations.AnimationManager#generateFrameNumbers\r\n * @since 3.0.0\r\n *\r\n * @param {string} key - The key for the texture containing the animation frames.\r\n * @param {Phaser.Types.Animations.GenerateFrameNumbers} config - The configuration object for the animation frames.\r\n *\r\n * @return {Phaser.Types.Animations.AnimationFrame[]} The array of {@link Phaser.Types.Animations.AnimationFrame} objects.\r\n */\r\n generateFrameNumbers: function (key, config)\r\n {\r\n var startFrame = GetValue(config, 'start', 0);\r\n var endFrame = GetValue(config, 'end', -1);\r\n var firstFrame = GetValue(config, 'first', false);\r\n var out = GetValue(config, 'outputArray', []);\r\n var frames = GetValue(config, 'frames', false);\r\n\r\n var texture = this.textureManager.get(key);\r\n\r\n if (!texture)\r\n {\r\n return out;\r\n }\r\n\r\n if (firstFrame && texture.has(firstFrame))\r\n {\r\n out.push({ key: key, frame: firstFrame });\r\n }\r\n\r\n var i;\r\n\r\n // Have they provided their own custom frame sequence array?\r\n if (Array.isArray(frames))\r\n {\r\n for (i = 0; i < frames.length; i++)\r\n {\r\n if (texture.has(frames[i]))\r\n {\r\n out.push({ key: key, frame: frames[i] });\r\n }\r\n }\r\n }\r\n else\r\n {\r\n // No endFrame then see if we can get it\r\n if (endFrame === -1)\r\n {\r\n endFrame = texture.frameTotal;\r\n }\r\n\r\n var diff = (startFrame < endFrame) ? 1 : -1;\r\n\r\n // Adjust because we use i !== end in the for loop\r\n endFrame += diff;\r\n\r\n for (i = startFrame; i !== endFrame; i += diff)\r\n {\r\n if (texture.has(i))\r\n {\r\n out.push({ key: key, frame: i });\r\n }\r\n }\r\n }\r\n\r\n return out;\r\n },\r\n\r\n /**\r\n * Get an Animation.\r\n *\r\n * @method Phaser.Animations.AnimationManager#get\r\n * @since 3.0.0\r\n *\r\n * @param {string} key - The key of the Animation to retrieve.\r\n *\r\n * @return {Phaser.Animations.Animation} The Animation.\r\n */\r\n get: function (key)\r\n {\r\n return this.anims.get(key);\r\n },\r\n\r\n /**\r\n * Load an Animation into a Game Object's Animation Component.\r\n *\r\n * @method Phaser.Animations.AnimationManager#load\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} child - The Game Object to load the animation into.\r\n * @param {string} key - The key of the animation to load.\r\n * @param {(string|integer)} [startFrame] - The name of a start frame to set on the loaded animation.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object with the animation loaded into it.\r\n */\r\n load: function (child, key, startFrame)\r\n {\r\n var anim = this.get(key);\r\n\r\n if (anim)\r\n {\r\n anim.load(child, startFrame);\r\n }\r\n else\r\n {\r\n console.warn('Missing animation: ' + key);\r\n }\r\n\r\n return child;\r\n },\r\n\r\n /**\r\n * Pause all animations.\r\n *\r\n * @method Phaser.Animations.AnimationManager#pauseAll\r\n * @fires Phaser.Animations.Events#PAUSE_ALL\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Animations.AnimationManager} This Animation Manager.\r\n */\r\n pauseAll: function ()\r\n {\r\n if (!this.paused)\r\n {\r\n this.paused = true;\r\n\r\n this.emit(Events.PAUSE_ALL);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Play an animation on the given Game Objects that have an Animation Component.\r\n *\r\n * @method Phaser.Animations.AnimationManager#play\r\n * @since 3.0.0\r\n *\r\n * @param {string} key - The key of the animation to play on the Game Object.\r\n * @param {Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[]} child - The Game Objects to play the animation on.\r\n *\r\n * @return {Phaser.Animations.AnimationManager} This Animation Manager.\r\n */\r\n play: function (key, child)\r\n {\r\n if (!Array.isArray(child))\r\n {\r\n child = [ child ];\r\n }\r\n\r\n var anim = this.get(key);\r\n\r\n if (!anim)\r\n {\r\n return;\r\n }\r\n\r\n for (var i = 0; i < child.length; i++)\r\n {\r\n child[i].anims.play(key);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Remove an animation.\r\n *\r\n * @method Phaser.Animations.AnimationManager#remove\r\n * @fires Phaser.Animations.Events#REMOVE_ANIMATION\r\n * @since 3.0.0\r\n *\r\n * @param {string} key - The key of the animation to remove.\r\n *\r\n * @return {Phaser.Animations.Animation} [description]\r\n */\r\n remove: function (key)\r\n {\r\n var anim = this.get(key);\r\n\r\n if (anim)\r\n {\r\n this.emit(Events.REMOVE_ANIMATION, key, anim);\r\n\r\n this.anims.delete(key);\r\n }\r\n\r\n return anim;\r\n },\r\n\r\n /**\r\n * Resume all paused animations.\r\n *\r\n * @method Phaser.Animations.AnimationManager#resumeAll\r\n * @fires Phaser.Animations.Events#RESUME_ALL\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Animations.AnimationManager} This Animation Manager.\r\n */\r\n resumeAll: function ()\r\n {\r\n if (this.paused)\r\n {\r\n this.paused = false;\r\n\r\n this.emit(Events.RESUME_ALL);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Takes an array of Game Objects that have an Animation Component and then\r\n * starts the given animation playing on them, each one offset by the\r\n * `stagger` amount given to this method.\r\n *\r\n * @method Phaser.Animations.AnimationManager#staggerPlay\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [items,$return]\r\n *\r\n * @param {string} key - The key of the animation to play on the Game Objects.\r\n * @param {Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[]} children - An array of Game Objects to play the animation on. They must have an Animation Component.\r\n * @param {number} [stagger=0] - The amount of time, in milliseconds, to offset each play time by.\r\n *\r\n * @return {Phaser.Animations.AnimationManager} This Animation Manager.\r\n */\r\n staggerPlay: function (key, children, stagger)\r\n {\r\n if (stagger === undefined) { stagger = 0; }\r\n\r\n if (!Array.isArray(children))\r\n {\r\n children = [ children ];\r\n }\r\n\r\n var anim = this.get(key);\r\n\r\n if (!anim)\r\n {\r\n return;\r\n }\r\n\r\n for (var i = 0; i < children.length; i++)\r\n {\r\n children[i].anims.delayedPlay(stagger * i, key);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Get the animation data as javascript object by giving key, or get the data of all animations as array of objects, if key wasn't provided.\r\n *\r\n * @method Phaser.Animations.AnimationManager#toJSON\r\n * @since 3.0.0\r\n *\r\n * @param {string} key - [description]\r\n *\r\n * @return {Phaser.Types.Animations.JSONAnimations} [description]\r\n */\r\n toJSON: function (key)\r\n {\r\n if (key !== undefined && key !== '')\r\n {\r\n return this.anims.get(key).toJSON();\r\n }\r\n else\r\n {\r\n var output = {\r\n anims: [],\r\n globalTimeScale: this.globalTimeScale\r\n };\r\n\r\n this.anims.each(function (animationKey, animation)\r\n {\r\n output.anims.push(animation.toJSON());\r\n });\r\n\r\n return output;\r\n }\r\n },\r\n\r\n /**\r\n * Destroy this Animation Manager and clean up animation definitions and references to other objects.\r\n * This method should not be called directly. It will be called automatically as a response to a `destroy` event from the Phaser.Game instance.\r\n *\r\n * @method Phaser.Animations.AnimationManager#destroy\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.anims.clear();\r\n\r\n this.textureManager = null;\r\n\r\n this.game = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = AnimationManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL0FuaW1hdGlvbk1hbmFnZXIuanM/NDVmNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMsc0VBQWE7QUFDckMsWUFBWSxtQkFBTyxDQUFDLGdFQUFnQjtBQUNwQyxnQkFBZ0IsbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDeEMsbUJBQW1CLG1CQUFPLENBQUMsNERBQWU7QUFDMUMsYUFBYSxtQkFBTyxDQUFDLHNFQUFVO0FBQy9CLGlCQUFpQixtQkFBTyxDQUFDLHNFQUFnQjtBQUN6QyxlQUFlLG1CQUFPLENBQUMsb0ZBQTBCO0FBQ2pELFVBQVUsbUJBQU8sQ0FBQywwRUFBcUI7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsV0FBVyxNQUFNLGNBQWM7QUFDaEY7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLDRCQUE0QjtBQUMzQztBQUNBLGdCQUFnQixtQ0FBbUM7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0NBQWtDO0FBQ2pEO0FBQ0EsZ0JBQWdCLG9DQUFvQztBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxzRkFBc0Y7QUFDckcsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQSxtREFBbUQsZ0NBQWdDOztBQUVuRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQix1QkFBdUI7QUFDbEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsMkNBQTJDO0FBQzFEO0FBQ0EsZ0JBQWdCLHlDQUF5QyxlQUFlLDZDQUE2QztBQUNySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBLDBCQUEwQiw2QkFBNkI7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLHlCQUF5QjtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLFdBQVc7QUFDdEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLHlCQUF5QjtBQUN2RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0EsNkJBQTZCLDZDQUE2QztBQUMxRTtBQUNBLGdGQUFnRixtREFBbUQ7QUFDbkk7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSw2Q0FBNkM7QUFDNUQ7QUFDQSxnQkFBZ0IseUNBQXlDLGVBQWUsNkNBQTZDO0FBQ3JIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNCQUFzQiw4QkFBOEI7QUFDcEQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsNkJBQTZCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsZ0NBQWdDLGdCQUFnQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIscUJBQXFCO0FBQ25EO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixtQ0FBbUM7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLDhEQUE4RDtBQUM3RTtBQUNBLGdCQUFnQixtQ0FBbUM7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGtCQUFrQjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsbUNBQW1DO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGdDQUFnQztBQUNqRDtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLDhEQUE4RDtBQUM3RSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsbUNBQW1DO0FBQ25EO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxhQUFhOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIscUJBQXFCO0FBQzVDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHVDQUF1QztBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FuaW1hdGlvbnMvQW5pbWF0aW9uTWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEFuaW1hdGlvbiA9IHJlcXVpcmUoJy4vQW5pbWF0aW9uJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDdXN0b21NYXAgPSByZXF1aXJlKCcuLi9zdHJ1Y3RzL01hcCcpO1xyXG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xyXG52YXIgRXZlbnRzID0gcmVxdWlyZSgnLi9ldmVudHMnKTtcclxudmFyIEdhbWVFdmVudHMgPSByZXF1aXJlKCcuLi9jb3JlL2V2ZW50cycpO1xyXG52YXIgR2V0VmFsdWUgPSByZXF1aXJlKCcuLi91dGlscy9vYmplY3QvR2V0VmFsdWUnKTtcclxudmFyIFBhZCA9IHJlcXVpcmUoJy4uL3V0aWxzL3N0cmluZy9QYWQnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBBbmltYXRpb24gTWFuYWdlci5cclxuICpcclxuICogQW5pbWF0aW9ucyBhcmUgbWFuYWdlZCBieSB0aGUgZ2xvYmFsIEFuaW1hdGlvbiBNYW5hZ2VyLiBUaGlzIGlzIGEgc2luZ2xldG9uIGNsYXNzIHRoYXQgaXNcclxuICogcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGFuZCBkZWxpdmVyaW5nIGFuaW1hdGlvbnMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgZGF0YSB0byBhbGwgR2FtZSBPYmplY3RzLlxyXG4gKiBVbmxpa2UgcGx1Z2lucyBpdCBpcyBvd25lZCBieSB0aGUgR2FtZSBpbnN0YW5jZSwgbm90IHRoZSBTY2VuZS5cclxuICpcclxuICogU3ByaXRlcyBhbmQgb3RoZXIgR2FtZSBPYmplY3RzIGdldCB0aGUgZGF0YSB0aGV5IG5lZWQgZnJvbSB0aGUgQW5pbWF0aW9uTWFuYWdlci5cclxuICpcclxuICogQGNsYXNzIEFuaW1hdGlvbk1hbmFnZXJcclxuICogQGV4dGVuZHMgUGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5BbmltYXRpb25zXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZX0gZ2FtZSAtIEEgcmVmZXJlbmNlIHRvIHRoZSBQaGFzZXIuR2FtZSBpbnN0YW5jZS5cclxuICovXHJcbnZhciBBbmltYXRpb25NYW5hZ2VyID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBFdmVudEVtaXR0ZXIsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBBbmltYXRpb25NYW5hZ2VyIChnYW1lKVxyXG4gICAge1xyXG4gICAgICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgUGhhc2VyLkdhbWUgaW5zdGFuY2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25NYW5hZ2VyI2dhbWVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWV9XHJcbiAgICAgICAgICogQHByb3RlY3RlZFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZ2FtZSA9IGdhbWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25NYW5hZ2VyI3RleHR1cmVNYW5hZ2VyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlTWFuYWdlcn1cclxuICAgICAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBnbG9iYWwgdGltZSBzY2FsZSBvZiB0aGUgQW5pbWF0aW9uIE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBUaGlzIHNjYWxlcyB0aGUgdGltZSBkZWx0YSBiZXR3ZWVuIHR3byBmcmFtZXMsIHRodXMgaW5mbHVlbmNpbmcgdGhlIHNwZWVkIG9mIHRpbWUgZm9yIHRoZSBBbmltYXRpb24gTWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXIjZ2xvYmFsVGltZVNjYWxlXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nbG9iYWxUaW1lU2NhbGUgPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQW5pbWF0aW9ucyByZWdpc3RlcmVkIGluIHRoZSBBbmltYXRpb24gTWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoaXMgbWFwIHNob3VsZCBiZSBtb2RpZmllZCB3aXRoIHRoZSB7QGxpbmsgI2FkZH0gYW5kIHtAbGluayAjY3JlYXRlfSBtZXRob2RzIG9mIHRoZSBBbmltYXRpb24gTWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXIjYW5pbXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlN0cnVjdHMuTWFwLjxzdHJpbmcsIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbj59XHJcbiAgICAgICAgICogQHByb3RlY3RlZFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYW5pbXMgPSBuZXcgQ3VzdG9tTWFwKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhlIEFuaW1hdGlvbiBNYW5hZ2VyIGlzIHBhdXNlZCBhbG9uZyB3aXRoIGFsbCBvZiBpdHMgQW5pbWF0aW9ucy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXIjcGF1c2VkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIEFuaW1hdGlvbiBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uTWFuYWdlciNuYW1lXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm5hbWUgPSAnQW5pbWF0aW9uTWFuYWdlcic7XHJcblxyXG4gICAgICAgIGdhbWUuZXZlbnRzLm9uY2UoR2FtZUV2ZW50cy5CT09ULCB0aGlzLmJvb3QsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVycyBldmVudCBsaXN0ZW5lcnMgYWZ0ZXIgdGhlIEdhbWUgYm9vdHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25NYW5hZ2VyI2Jvb3RcclxuICAgICAqIEBsaXN0ZW5zIFBoYXNlci5Db3JlLkV2ZW50cyNERVNUUk9ZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgYm9vdDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyID0gdGhpcy5nYW1lLnRleHR1cmVzO1xyXG5cclxuICAgICAgICB0aGlzLmdhbWUuZXZlbnRzLm9uY2UoR2FtZUV2ZW50cy5ERVNUUk9ZLCB0aGlzLmRlc3Ryb3ksIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYW4gZXhpc3RpbmcgQW5pbWF0aW9uIHRvIHRoZSBBbmltYXRpb24gTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXIjYWRkXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkFuaW1hdGlvbnMuRXZlbnRzI0FERF9BTklNQVRJT05cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IHVuZGVyIHdoaWNoIHRoZSBBbmltYXRpb24gc2hvdWxkIGJlIGFkZGVkLiBUaGUgQW5pbWF0aW9uIHdpbGwgYmUgdXBkYXRlZCB3aXRoIGl0LiBNdXN0IGJlIHVuaXF1ZS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9ufSBhbmltYXRpb24gLSBUaGUgQW5pbWF0aW9uIHdoaWNoIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgQW5pbWF0aW9uIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uTWFuYWdlcn0gVGhpcyBBbmltYXRpb24gTWFuYWdlci5cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoa2V5LCBhbmltYXRpb24pXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuYW5pbXMuaGFzKGtleSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0FuaW1hdGlvbiBrZXkgZXhpc3RzOiAnICsga2V5KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFuaW1hdGlvbi5rZXkgPSBrZXk7XHJcblxyXG4gICAgICAgIHRoaXMuYW5pbXMuc2V0KGtleSwgYW5pbWF0aW9uKTtcclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5BRERfQU5JTUFUSU9OLCBrZXksIGFuaW1hdGlvbik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB0byBzZWUgaWYgdGhlIGdpdmVuIGtleSBpcyBhbHJlYWR5IGluIHVzZSB3aXRoaW4gdGhlIEFuaW1hdGlvbiBNYW5hZ2VyIG9yIG5vdC5cclxuICAgICAqIFxyXG4gICAgICogQW5pbWF0aW9ucyBhcmUgZ2xvYmFsLiBLZXlzIGNyZWF0ZWQgaW4gb25lIHNjZW5lIGNhbiBiZSB1c2VkIGZyb20gYW55IG90aGVyIFNjZW5lIGluIHlvdXIgZ2FtZS4gVGhleSBhcmUgbm90IFNjZW5lIHNwZWNpZmljLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uTWFuYWdlciNleGlzdHNcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgQW5pbWF0aW9uIHRvIGNoZWNrLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgQW5pbWF0aW9uIGFscmVhZHkgZXhpc3RzIGluIHRoZSBBbmltYXRpb24gTWFuYWdlciwgb3IgYGZhbHNlYCBpZiB0aGUga2V5IGlzIGF2YWlsYWJsZS5cclxuICAgICAqL1xyXG4gICAgZXhpc3RzOiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFuaW1zLmhhcyhrZXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgQW5pbWF0aW9uIGFuZCBhZGRzIGl0IHRvIHRoZSBBbmltYXRpb24gTWFuYWdlci5cclxuICAgICAqIFxyXG4gICAgICogQW5pbWF0aW9ucyBhcmUgZ2xvYmFsLiBPbmNlIGNyZWF0ZWQsIHlvdSBjYW4gdXNlIHRoZW0gaW4gYW55IFNjZW5lIGluIHlvdXIgZ2FtZS4gVGhleSBhcmUgbm90IFNjZW5lIHNwZWNpZmljLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiBhbiBpbnZhbGlkIGtleSBpcyBnaXZlbiB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBgZmFsc2VgLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB5b3UgcGFzcyB0aGUga2V5IG9mIGFuIGFuaW1hdGlvbiB0aGF0IGFscmVhZHkgZXhpc3RzIGluIHRoZSBBbmltYXRpb24gTWFuYWdlciwgdGhhdCBhbmltYXRpb24gd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqIFxyXG4gICAgICogQSBicmFuZCBuZXcgYW5pbWF0aW9uIGlzIG9ubHkgY3JlYXRlZCBpZiB0aGUga2V5IGlzIHZhbGlkIGFuZCBub3QgYWxyZWFkeSBpbiB1c2UuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHlvdSB3aXNoIHRvIHJlLXVzZSBhbiBleGlzdGluZyBrZXksIGNhbGwgYEFuaW1hdGlvbk1hbmFnZXIucmVtb3ZlYCBmaXJzdCwgdGhlbiB0aGlzIG1ldGhvZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXIjY3JlYXRlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkFuaW1hdGlvbnMuRXZlbnRzI0FERF9BTklNQVRJT05cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkFuaW1hdGlvbnMuQW5pbWF0aW9ufSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIEFuaW1hdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsoUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9ufGZhbHNlKX0gVGhlIEFuaW1hdGlvbiB0aGF0IHdhcyBjcmVhdGVkLCBvciBgZmFsc2VgIGlzIHRoZSBrZXkgaXMgYWxyZWFkeSBpbiB1c2UuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZTogZnVuY3Rpb24gKGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICB2YXIga2V5ID0gY29uZmlnLmtleTtcclxuXHJcbiAgICAgICAgdmFyIGFuaW0gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKGtleSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGFuaW0gPSB0aGlzLmdldChrZXkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFhbmltKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBhbmltID0gbmV3IEFuaW1hdGlvbih0aGlzLCBrZXksIGNvbmZpZyk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmltcy5zZXQoa2V5LCBhbmltKTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuQUREX0FOSU1BVElPTiwga2V5LCBhbmltKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGFuaW07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTG9hZHMgdGhpcyBBbmltYXRpb24gTWFuYWdlcidzIEFuaW1hdGlvbnMgYW5kIHNldHRpbmdzIGZyb20gYSBKU09OIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXIjZnJvbUpTT05cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuQW5pbWF0aW9ucy5KU09OQW5pbWF0aW9uc3xQaGFzZXIuVHlwZXMuQW5pbWF0aW9ucy5KU09OQW5pbWF0aW9uKX0gZGF0YSAtIFRoZSBKU09OIG9iamVjdCB0byBwYXJzZS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NsZWFyQ3VycmVudEFuaW1hdGlvbnM9ZmFsc2VdIC0gSWYgc2V0IHRvIGB0cnVlYCwgdGhlIGN1cnJlbnQgYW5pbWF0aW9ucyB3aWxsIGJlIHJlbW92ZWQgKGBhbmltcy5jbGVhcigpYCkuIElmIHNldCB0byBgZmFsc2VgIChkZWZhdWx0KSwgdGhlIGFuaW1hdGlvbnMgaW4gYGRhdGFgIHdpbGwgYmUgYWRkZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBBbmltYXRpb24gb2JqZWN0cyB0aGF0IHdlcmUgY3JlYXRlZCBhcyBhIHJlc3VsdCBvZiB0aGlzIGNhbGwuXHJcbiAgICAgKi9cclxuICAgIGZyb21KU09OOiBmdW5jdGlvbiAoZGF0YSwgY2xlYXJDdXJyZW50QW5pbWF0aW9ucylcclxuICAgIHtcclxuICAgICAgICBpZiAoY2xlYXJDdXJyZW50QW5pbWF0aW9ucyA9PT0gdW5kZWZpbmVkKSB7IGNsZWFyQ3VycmVudEFuaW1hdGlvbnMgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICBpZiAoY2xlYXJDdXJyZW50QW5pbWF0aW9ucylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuYW5pbXMuY2xlYXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBEbyB3ZSBoYXZlIGEgU3RyaW5nIChpLmUuIGZyb20gSlNPTiwgb3IgYW4gT2JqZWN0PylcclxuICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgb3V0cHV0ID0gW107XHJcblxyXG4gICAgICAgIC8vICBBcnJheSBvZiBhbmltYXRpb25zLCBvciBhIHNpbmdsZSBhbmltYXRpb24/XHJcbiAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoJ2FuaW1zJykgJiYgQXJyYXkuaXNBcnJheShkYXRhLmFuaW1zKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5hbmltcy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2godGhpcy5jcmVhdGUoZGF0YS5hbmltc1tpXSkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eSgnZ2xvYmFsVGltZVNjYWxlJykpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2xvYmFsVGltZVNjYWxlID0gZGF0YS5nbG9iYWxUaW1lU2NhbGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eSgna2V5JykgJiYgZGF0YS50eXBlID09PSAnZnJhbWUnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb3V0cHV0LnB1c2godGhpcy5jcmVhdGUoZGF0YSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25NYW5hZ2VyI2dlbmVyYXRlRnJhbWVOYW1lc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgZm9yIHRoZSB0ZXh0dXJlIGNvbnRhaW5pbmcgdGhlIGFuaW1hdGlvbiBmcmFtZXMuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5BbmltYXRpb25zLkdlbmVyYXRlRnJhbWVOYW1lc30gW2NvbmZpZ10gLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBhbmltYXRpb24gZnJhbWUgbmFtZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlR5cGVzLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWVbXX0gVGhlIGFycmF5IG9mIHtAbGluayBQaGFzZXIuVHlwZXMuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZX0gb2JqZWN0cy5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVGcmFtZU5hbWVzOiBmdW5jdGlvbiAoa2V5LCBjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHByZWZpeCA9IEdldFZhbHVlKGNvbmZpZywgJ3ByZWZpeCcsICcnKTtcclxuICAgICAgICB2YXIgc3RhcnQgPSBHZXRWYWx1ZShjb25maWcsICdzdGFydCcsIDApO1xyXG4gICAgICAgIHZhciBlbmQgPSBHZXRWYWx1ZShjb25maWcsICdlbmQnLCAwKTtcclxuICAgICAgICB2YXIgc3VmZml4ID0gR2V0VmFsdWUoY29uZmlnLCAnc3VmZml4JywgJycpO1xyXG4gICAgICAgIHZhciB6ZXJvUGFkID0gR2V0VmFsdWUoY29uZmlnLCAnemVyb1BhZCcsIDApO1xyXG4gICAgICAgIHZhciBvdXQgPSBHZXRWYWx1ZShjb25maWcsICdvdXRwdXRBcnJheScsIFtdKTtcclxuICAgICAgICB2YXIgZnJhbWVzID0gR2V0VmFsdWUoY29uZmlnLCAnZnJhbWVzJywgZmFsc2UpO1xyXG5cclxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMudGV4dHVyZU1hbmFnZXIuZ2V0KGtleSk7XHJcblxyXG4gICAgICAgIGlmICghdGV4dHVyZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGlmZiA9IChzdGFydCA8IGVuZCkgPyAxIDogLTE7XHJcblxyXG4gICAgICAgIC8vICBBZGp1c3QgYmVjYXVzZSB3ZSB1c2UgaSAhPT0gZW5kIGluIHRoZSBmb3IgbG9vcFxyXG4gICAgICAgIGVuZCArPSBkaWZmO1xyXG5cclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICB2YXIgZnJhbWU7XHJcblxyXG4gICAgICAgIGlmICghY29uZmlnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFVzZSBldmVyeSBmcmFtZSBpbiB0aGUgYXRsYXM/XHJcbiAgICAgICAgICAgIGZyYW1lcyA9IHRleHR1cmUuZ2V0RnJhbWVOYW1lcygpO1xyXG5cclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3V0LnB1c2goeyBrZXk6IGtleSwgZnJhbWU6IGZyYW1lc1tpXSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGZyYW1lcykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgSGF2ZSB0aGV5IHByb3ZpZGVkIHRoZWlyIG93biBjdXN0b20gZnJhbWUgc2VxdWVuY2UgYXJyYXk/XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGZyYW1lID0gcHJlZml4ICsgUGFkKGZyYW1lc1tpXSwgemVyb1BhZCwgJzAnLCAxKSArIHN1ZmZpeDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS5oYXMoZnJhbWUpKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIG91dC5wdXNoKHsga2V5OiBrZXksIGZyYW1lOiBmcmFtZSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSAhPT0gZW5kOyBpICs9IGRpZmYpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGZyYW1lID0gcHJlZml4ICsgUGFkKGksIHplcm9QYWQsICcwJywgMSkgKyBzdWZmaXg7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUuaGFzKGZyYW1lKSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBvdXQucHVzaCh7IGtleToga2V5LCBmcmFtZTogZnJhbWUgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGUgYW4gYXJyYXkgb2Yge0BsaW5rIFBoYXNlci5UeXBlcy5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lfSBvYmplY3RzIGZyb20gYSB0ZXh0dXJlIGtleSBhbmQgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogR2VuZXJhdGVzIG9iamVjdHMgd2l0aCBudW1iZXJlZCBmcmFtZSBuYW1lcywgYXMgY29uZmlndXJlZCBieSB0aGUgZ2l2ZW4ge0BsaW5rIFBoYXNlci5UeXBlcy5BbmltYXRpb25zLkdlbmVyYXRlRnJhbWVOdW1iZXJzfS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXIjZ2VuZXJhdGVGcmFtZU51bWJlcnNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IGZvciB0aGUgdGV4dHVyZSBjb250YWluaW5nIHRoZSBhbmltYXRpb24gZnJhbWVzLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuQW5pbWF0aW9ucy5HZW5lcmF0ZUZyYW1lTnVtYmVyc30gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgYW5pbWF0aW9uIGZyYW1lcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZVtdfSBUaGUgYXJyYXkgb2Yge0BsaW5rIFBoYXNlci5UeXBlcy5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lfSBvYmplY3RzLlxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0ZUZyYW1lTnVtYmVyczogZnVuY3Rpb24gKGtleSwgY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzdGFydEZyYW1lID0gR2V0VmFsdWUoY29uZmlnLCAnc3RhcnQnLCAwKTtcclxuICAgICAgICB2YXIgZW5kRnJhbWUgPSBHZXRWYWx1ZShjb25maWcsICdlbmQnLCAtMSk7XHJcbiAgICAgICAgdmFyIGZpcnN0RnJhbWUgPSBHZXRWYWx1ZShjb25maWcsICdmaXJzdCcsIGZhbHNlKTtcclxuICAgICAgICB2YXIgb3V0ID0gR2V0VmFsdWUoY29uZmlnLCAnb3V0cHV0QXJyYXknLCBbXSk7XHJcbiAgICAgICAgdmFyIGZyYW1lcyA9IEdldFZhbHVlKGNvbmZpZywgJ2ZyYW1lcycsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLnRleHR1cmVNYW5hZ2VyLmdldChrZXkpO1xyXG5cclxuICAgICAgICBpZiAoIXRleHR1cmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZpcnN0RnJhbWUgJiYgdGV4dHVyZS5oYXMoZmlyc3RGcmFtZSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvdXQucHVzaCh7IGtleToga2V5LCBmcmFtZTogZmlyc3RGcmFtZSB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpO1xyXG5cclxuICAgICAgICAvLyAgSGF2ZSB0aGV5IHByb3ZpZGVkIHRoZWlyIG93biBjdXN0b20gZnJhbWUgc2VxdWVuY2UgYXJyYXk/XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZnJhbWVzKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLmhhcyhmcmFtZXNbaV0pKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIG91dC5wdXNoKHsga2V5OiBrZXksIGZyYW1lOiBmcmFtZXNbaV0gfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIE5vIGVuZEZyYW1lIHRoZW4gc2VlIGlmIHdlIGNhbiBnZXQgaXRcclxuICAgICAgICAgICAgaWYgKGVuZEZyYW1lID09PSAtMSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZW5kRnJhbWUgPSB0ZXh0dXJlLmZyYW1lVG90YWw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBkaWZmID0gKHN0YXJ0RnJhbWUgPCBlbmRGcmFtZSkgPyAxIDogLTE7XHJcblxyXG4gICAgICAgICAgICAvLyAgQWRqdXN0IGJlY2F1c2Ugd2UgdXNlIGkgIT09IGVuZCBpbiB0aGUgZm9yIGxvb3BcclxuICAgICAgICAgICAgZW5kRnJhbWUgKz0gZGlmZjtcclxuXHJcbiAgICAgICAgICAgIGZvciAoaSA9IHN0YXJ0RnJhbWU7IGkgIT09IGVuZEZyYW1lOyBpICs9IGRpZmYpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLmhhcyhpKSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBvdXQucHVzaCh7IGtleToga2V5LCBmcmFtZTogaSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYW4gQW5pbWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uTWFuYWdlciNnZXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBBbmltYXRpb24gdG8gcmV0cmlldmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9ufSBUaGUgQW5pbWF0aW9uLlxyXG4gICAgICovXHJcbiAgICBnZXQ6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYW5pbXMuZ2V0KGtleSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTG9hZCBhbiBBbmltYXRpb24gaW50byBhIEdhbWUgT2JqZWN0J3MgQW5pbWF0aW9uIENvbXBvbmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXIjbG9hZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gY2hpbGQgLSBUaGUgR2FtZSBPYmplY3QgdG8gbG9hZCB0aGUgYW5pbWF0aW9uIGludG8uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgYW5pbWF0aW9uIHRvIGxvYWQuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtzdGFydEZyYW1lXSAtIFRoZSBuYW1lIG9mIGEgc3RhcnQgZnJhbWUgdG8gc2V0IG9uIHRoZSBsb2FkZWQgYW5pbWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3Qgd2l0aCB0aGUgYW5pbWF0aW9uIGxvYWRlZCBpbnRvIGl0LlxyXG4gICAgICovXHJcbiAgICBsb2FkOiBmdW5jdGlvbiAoY2hpbGQsIGtleSwgc3RhcnRGcmFtZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgYW5pbSA9IHRoaXMuZ2V0KGtleSk7XHJcblxyXG4gICAgICAgIGlmIChhbmltKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYW5pbS5sb2FkKGNoaWxkLCBzdGFydEZyYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdNaXNzaW5nIGFuaW1hdGlvbjogJyArIGtleSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hpbGQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGF1c2UgYWxsIGFuaW1hdGlvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25NYW5hZ2VyI3BhdXNlQWxsXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkFuaW1hdGlvbnMuRXZlbnRzI1BBVVNFX0FMTFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uTWFuYWdlcn0gVGhpcyBBbmltYXRpb24gTWFuYWdlci5cclxuICAgICAqL1xyXG4gICAgcGF1c2VBbGw6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBhdXNlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGF1c2VkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuUEFVU0VfQUxMKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBsYXkgYW4gYW5pbWF0aW9uIG9uIHRoZSBnaXZlbiBHYW1lIE9iamVjdHMgdGhhdCBoYXZlIGFuIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25NYW5hZ2VyI3BsYXlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBhbmltYXRpb24gdG8gcGxheSBvbiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IGNoaWxkIC0gVGhlIEdhbWUgT2JqZWN0cyB0byBwbGF5IHRoZSBhbmltYXRpb24gb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uTWFuYWdlcn0gVGhpcyBBbmltYXRpb24gTWFuYWdlci5cclxuICAgICAqL1xyXG4gICAgcGxheTogZnVuY3Rpb24gKGtleSwgY2hpbGQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNoaWxkKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNoaWxkID0gWyBjaGlsZCBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGFuaW0gPSB0aGlzLmdldChrZXkpO1xyXG5cclxuICAgICAgICBpZiAoIWFuaW0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2hpbGRbaV0uYW5pbXMucGxheShrZXkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGFuIGFuaW1hdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXIjcmVtb3ZlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkFuaW1hdGlvbnMuRXZlbnRzI1JFTU9WRV9BTklNQVRJT05cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBhbmltYXRpb24gdG8gcmVtb3ZlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbn0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICByZW1vdmU6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGFuaW0gPSB0aGlzLmdldChrZXkpO1xyXG5cclxuICAgICAgICBpZiAoYW5pbSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuUkVNT1ZFX0FOSU1BVElPTiwga2V5LCBhbmltKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYW5pbXMuZGVsZXRlKGtleSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYW5pbTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXN1bWUgYWxsIHBhdXNlZCBhbmltYXRpb25zLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uTWFuYWdlciNyZXN1bWVBbGxcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQW5pbWF0aW9ucy5FdmVudHMjUkVTVU1FX0FMTFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uTWFuYWdlcn0gVGhpcyBBbmltYXRpb24gTWFuYWdlci5cclxuICAgICAqL1xyXG4gICAgcmVzdW1lQWxsOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLnBhdXNlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlJFU1VNRV9BTEwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGFrZXMgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzIHRoYXQgaGF2ZSBhbiBBbmltYXRpb24gQ29tcG9uZW50IGFuZCB0aGVuXHJcbiAgICAgKiBzdGFydHMgdGhlIGdpdmVuIGFuaW1hdGlvbiBwbGF5aW5nIG9uIHRoZW0sIGVhY2ggb25lIG9mZnNldCBieSB0aGVcclxuICAgICAqIGBzdGFnZ2VyYCBhbW91bnQgZ2l2ZW4gdG8gdGhpcyBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25NYW5hZ2VyI3N0YWdnZXJQbGF5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gRyAtIFtpdGVtcywkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBhbmltYXRpb24gdG8gcGxheSBvbiB0aGUgR2FtZSBPYmplY3RzLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdHxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBjaGlsZHJlbiAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0byBwbGF5IHRoZSBhbmltYXRpb24gb24uIFRoZXkgbXVzdCBoYXZlIGFuIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YWdnZXI9MF0gLSBUaGUgYW1vdW50IG9mIHRpbWUsIGluIG1pbGxpc2Vjb25kcywgdG8gb2Zmc2V0IGVhY2ggcGxheSB0aW1lIGJ5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXJ9IFRoaXMgQW5pbWF0aW9uIE1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIHN0YWdnZXJQbGF5OiBmdW5jdGlvbiAoa2V5LCBjaGlsZHJlbiwgc3RhZ2dlcilcclxuICAgIHtcclxuICAgICAgICBpZiAoc3RhZ2dlciA9PT0gdW5kZWZpbmVkKSB7IHN0YWdnZXIgPSAwOyB9XHJcblxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjaGlsZHJlbiA9IFsgY2hpbGRyZW4gXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBhbmltID0gdGhpcy5nZXQoa2V5KTtcclxuXHJcbiAgICAgICAgaWYgKCFhbmltKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLmFuaW1zLmRlbGF5ZWRQbGF5KHN0YWdnZXIgKiBpLCBrZXkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHRoZSBhbmltYXRpb24gZGF0YSBhcyBqYXZhc2NyaXB0IG9iamVjdCBieSBnaXZpbmcga2V5LCBvciBnZXQgdGhlIGRhdGEgb2YgYWxsIGFuaW1hdGlvbnMgYXMgYXJyYXkgb2Ygb2JqZWN0cywgaWYga2V5IHdhc24ndCBwcm92aWRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXIjdG9KU09OXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UeXBlcy5BbmltYXRpb25zLkpTT05BbmltYXRpb25zfSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIHRvSlNPTjogZnVuY3Rpb24gKGtleSlcclxuICAgIHtcclxuICAgICAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQgJiYga2V5ICE9PSAnJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFuaW1zLmdldChrZXkpLnRvSlNPTigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0ge1xyXG4gICAgICAgICAgICAgICAgYW5pbXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgZ2xvYmFsVGltZVNjYWxlOiB0aGlzLmdsb2JhbFRpbWVTY2FsZVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hbmltcy5lYWNoKGZ1bmN0aW9uIChhbmltYXRpb25LZXksIGFuaW1hdGlvbilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0LmFuaW1zLnB1c2goYW5pbWF0aW9uLnRvSlNPTigpKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95IHRoaXMgQW5pbWF0aW9uIE1hbmFnZXIgYW5kIGNsZWFuIHVwIGFuaW1hdGlvbiBkZWZpbml0aW9ucyBhbmQgcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzLlxyXG4gICAgICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYXMgYSByZXNwb25zZSB0byBhIGBkZXN0cm95YCBldmVudCBmcm9tIHRoZSBQaGFzZXIuR2FtZSBpbnN0YW5jZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbk1hbmFnZXIjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hbmltcy5jbGVhcigpO1xyXG5cclxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5nYW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBbmltYXRpb25NYW5hZ2VyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/AnimationManager.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/animations/events/ADD_ANIMATION_EVENT.js":
/*!**************************************************************************!*\
!*** ./node_modules/phaser/src/animations/events/ADD_ANIMATION_EVENT.js ***!
\**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Add Animation Event.\r\n * \r\n * This event is dispatched when a new animation is added to the global Animation Manager.\r\n * \r\n * This can happen either as a result of an animation instance being added to the Animation Manager,\r\n * or the Animation Manager creating a new animation directly.\r\n *\r\n * @event Phaser.Animations.Events#ADD_ANIMATION\r\n * @since 3.0.0\r\n * \r\n * @param {string} key - The key of the Animation that was added to the global Animation Manager.\r\n * @param {Phaser.Animations.Animation} animation - An instance of the newly created Animation.\r\n */\r\nmodule.exports = 'add';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9BRERfQU5JTUFUSU9OX0VWRU5ULmpzPzAzOTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyw0QkFBNEI7QUFDdkM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FuaW1hdGlvbnMvZXZlbnRzL0FERF9BTklNQVRJT05fRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgQWRkIEFuaW1hdGlvbiBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCB3aGVuIGEgbmV3IGFuaW1hdGlvbiBpcyBhZGRlZCB0byB0aGUgZ2xvYmFsIEFuaW1hdGlvbiBNYW5hZ2VyLlxyXG4gKiBcclxuICogVGhpcyBjYW4gaGFwcGVuIGVpdGhlciBhcyBhIHJlc3VsdCBvZiBhbiBhbmltYXRpb24gaW5zdGFuY2UgYmVpbmcgYWRkZWQgdG8gdGhlIEFuaW1hdGlvbiBNYW5hZ2VyLFxyXG4gKiBvciB0aGUgQW5pbWF0aW9uIE1hbmFnZXIgY3JlYXRpbmcgYSBuZXcgYW5pbWF0aW9uIGRpcmVjdGx5LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkFuaW1hdGlvbnMuRXZlbnRzI0FERF9BTklNQVRJT05cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgQW5pbWF0aW9uIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBnbG9iYWwgQW5pbWF0aW9uIE1hbmFnZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9ufSBhbmltYXRpb24gLSBBbiBpbnN0YW5jZSBvZiB0aGUgbmV3bHkgY3JlYXRlZCBBbmltYXRpb24uXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdhZGQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/ADD_ANIMATION_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/animations/events/ANIMATION_COMPLETE_EVENT.js":
/*!*******************************************************************************!*\
!*** ./node_modules/phaser/src/animations/events/ANIMATION_COMPLETE_EVENT.js ***!
\*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Animation Complete Event.\r\n * \r\n * This event is dispatched by an Animation instance when it completes, i.e. finishes playing or is manually stopped.\r\n * \r\n * Be careful with the volume of events this could generate. If a group of Sprites all complete the same\r\n * animation at the same time, this event will invoke its handler for each one of them.\r\n *\r\n * @event Phaser.Animations.Events#ANIMATION_COMPLETE\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that completed.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame that the Animation completed on.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation completed.\r\n */\r\nmodule.exports = 'complete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9BTklNQVRJT05fQ09NUExFVEVfRVZFTlQuanM/Mjg5NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNEJBQTRCO0FBQ3ZDLFdBQVcsaUNBQWlDO0FBQzVDLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9BTklNQVRJT05fQ09NUExFVEVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgQW5pbWF0aW9uIENvbXBsZXRlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGFuIEFuaW1hdGlvbiBpbnN0YW5jZSB3aGVuIGl0IGNvbXBsZXRlcywgaS5lLiBmaW5pc2hlcyBwbGF5aW5nIG9yIGlzIG1hbnVhbGx5IHN0b3BwZWQuXHJcbiAqIFxyXG4gKiBCZSBjYXJlZnVsIHdpdGggdGhlIHZvbHVtZSBvZiBldmVudHMgdGhpcyBjb3VsZCBnZW5lcmF0ZS4gSWYgYSBncm91cCBvZiBTcHJpdGVzIGFsbCBjb21wbGV0ZSB0aGUgc2FtZVxyXG4gKiBhbmltYXRpb24gYXQgdGhlIHNhbWUgdGltZSwgdGhpcyBldmVudCB3aWxsIGludm9rZSBpdHMgaGFuZGxlciBmb3IgZWFjaCBvbmUgb2YgdGhlbS5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNBTklNQVRJT05fQ09NUExFVEVcclxuICogQHNpbmNlIDMuMTYuMVxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb259IGFuaW1hdGlvbiAtIEEgcmVmZXJlbmNlIHRvIHRoZSBBbmltYXRpb24gdGhhdCBjb21wbGV0ZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWV9IGZyYW1lIC0gVGhlIGN1cnJlbnQgQW5pbWF0aW9uIEZyYW1lIHRoYXQgdGhlIEFuaW1hdGlvbiBjb21wbGV0ZWQgb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZX0gZ2FtZU9iamVjdCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBHYW1lIE9iamVjdCBvbiB3aGljaCB0aGUgYW5pbWF0aW9uIGNvbXBsZXRlZC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2NvbXBsZXRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/ANIMATION_COMPLETE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/animations/events/ANIMATION_REPEAT_EVENT.js":
/*!*****************************************************************************!*\
!*** ./node_modules/phaser/src/animations/events/ANIMATION_REPEAT_EVENT.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Animation Repeat Event.\r\n * \r\n * This event is dispatched when a currently playing animation repeats.\r\n * \r\n * The event is dispatched directly from the Animation object itself. Which means that listeners\r\n * bound to this event will be invoked every time the Animation repeats, for every Game Object that may have it.\r\n *\r\n * @event Phaser.Animations.Events#ANIMATION_REPEAT\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that repeated.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame that the Animation was on when it repeated.\r\n */\r\nmodule.exports = 'repeat';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9BTklNQVRJT05fUkVQRUFUX0VWRU5ULmpzP2ZjZmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDRCQUE0QjtBQUN2QyxXQUFXLGlDQUFpQztBQUM1QztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYW5pbWF0aW9ucy9ldmVudHMvQU5JTUFUSU9OX1JFUEVBVF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBBbmltYXRpb24gUmVwZWF0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIHdoZW4gYSBjdXJyZW50bHkgcGxheWluZyBhbmltYXRpb24gcmVwZWF0cy5cclxuICogXHJcbiAqIFRoZSBldmVudCBpcyBkaXNwYXRjaGVkIGRpcmVjdGx5IGZyb20gdGhlIEFuaW1hdGlvbiBvYmplY3QgaXRzZWxmLiBXaGljaCBtZWFucyB0aGF0IGxpc3RlbmVyc1xyXG4gKiBib3VuZCB0byB0aGlzIGV2ZW50IHdpbGwgYmUgaW52b2tlZCBldmVyeSB0aW1lIHRoZSBBbmltYXRpb24gcmVwZWF0cywgZm9yIGV2ZXJ5IEdhbWUgT2JqZWN0IHRoYXQgbWF5IGhhdmUgaXQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQW5pbWF0aW9ucy5FdmVudHMjQU5JTUFUSU9OX1JFUEVBVFxyXG4gKiBAc2luY2UgMy4xNi4xXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbn0gYW5pbWF0aW9uIC0gQSByZWZlcmVuY2UgdG8gdGhlIEFuaW1hdGlvbiB0aGF0IHJlcGVhdGVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lfSBmcmFtZSAtIFRoZSBjdXJyZW50IEFuaW1hdGlvbiBGcmFtZSB0aGF0IHRoZSBBbmltYXRpb24gd2FzIG9uIHdoZW4gaXQgcmVwZWF0ZWQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdyZXBlYXQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/ANIMATION_REPEAT_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/animations/events/ANIMATION_RESTART_EVENT.js":
/*!******************************************************************************!*\
!*** ./node_modules/phaser/src/animations/events/ANIMATION_RESTART_EVENT.js ***!
\******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Animation Restart Event.\r\n * \r\n * This event is dispatched by an Animation instance when it restarts.\r\n * \r\n * Be careful with the volume of events this could generate. If a group of Sprites all restart the same\r\n * animation at the same time, this event will invoke its handler for each one of them.\r\n *\r\n * @event Phaser.Animations.Events#ANIMATION_RESTART\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that restarted playing.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame that the Animation restarted with.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation restarted playing.\r\n */\r\nmodule.exports = 'restart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9BTklNQVRJT05fUkVTVEFSVF9FVkVOVC5qcz9mMDVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw0QkFBNEI7QUFDdkMsV0FBVyxpQ0FBaUM7QUFDNUMsV0FBVywwQkFBMEI7QUFDckM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FuaW1hdGlvbnMvZXZlbnRzL0FOSU1BVElPTl9SRVNUQVJUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEFuaW1hdGlvbiBSZXN0YXJ0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGFuIEFuaW1hdGlvbiBpbnN0YW5jZSB3aGVuIGl0IHJlc3RhcnRzLlxyXG4gKiBcclxuICogQmUgY2FyZWZ1bCB3aXRoIHRoZSB2b2x1bWUgb2YgZXZlbnRzIHRoaXMgY291bGQgZ2VuZXJhdGUuIElmIGEgZ3JvdXAgb2YgU3ByaXRlcyBhbGwgcmVzdGFydCB0aGUgc2FtZVxyXG4gKiBhbmltYXRpb24gYXQgdGhlIHNhbWUgdGltZSwgdGhpcyBldmVudCB3aWxsIGludm9rZSBpdHMgaGFuZGxlciBmb3IgZWFjaCBvbmUgb2YgdGhlbS5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNBTklNQVRJT05fUkVTVEFSVFxyXG4gKiBAc2luY2UgMy4xNi4xXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbn0gYW5pbWF0aW9uIC0gQSByZWZlcmVuY2UgdG8gdGhlIEFuaW1hdGlvbiB0aGF0IHJlc3RhcnRlZCBwbGF5aW5nLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lfSBmcmFtZSAtIFRoZSBjdXJyZW50IEFuaW1hdGlvbiBGcmFtZSB0aGF0IHRoZSBBbmltYXRpb24gcmVzdGFydGVkIHdpdGguXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZX0gZ2FtZU9iamVjdCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBHYW1lIE9iamVjdCBvbiB3aGljaCB0aGUgYW5pbWF0aW9uIHJlc3RhcnRlZCBwbGF5aW5nLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAncmVzdGFydCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/ANIMATION_RESTART_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/animations/events/ANIMATION_START_EVENT.js":
/*!****************************************************************************!*\
!*** ./node_modules/phaser/src/animations/events/ANIMATION_START_EVENT.js ***!
\****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Animation Start Event.\r\n * \r\n * This event is dispatched by an Animation instance when it starts playing.\r\n * \r\n * Be careful with the volume of events this could generate. If a group of Sprites all play the same\r\n * animation at the same time, this event will invoke its handler for each one of them.\r\n *\r\n * @event Phaser.Animations.Events#ANIMATION_START\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that started playing.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame that the Animation started with.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation started playing.\r\n */\r\nmodule.exports = 'start';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9BTklNQVRJT05fU1RBUlRfRVZFTlQuanM/OTEyZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNEJBQTRCO0FBQ3ZDLFdBQVcsaUNBQWlDO0FBQzVDLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9BTklNQVRJT05fU1RBUlRfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgQW5pbWF0aW9uIFN0YXJ0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGFuIEFuaW1hdGlvbiBpbnN0YW5jZSB3aGVuIGl0IHN0YXJ0cyBwbGF5aW5nLlxyXG4gKiBcclxuICogQmUgY2FyZWZ1bCB3aXRoIHRoZSB2b2x1bWUgb2YgZXZlbnRzIHRoaXMgY291bGQgZ2VuZXJhdGUuIElmIGEgZ3JvdXAgb2YgU3ByaXRlcyBhbGwgcGxheSB0aGUgc2FtZVxyXG4gKiBhbmltYXRpb24gYXQgdGhlIHNhbWUgdGltZSwgdGhpcyBldmVudCB3aWxsIGludm9rZSBpdHMgaGFuZGxlciBmb3IgZWFjaCBvbmUgb2YgdGhlbS5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNBTklNQVRJT05fU1RBUlRcclxuICogQHNpbmNlIDMuMTYuMVxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb259IGFuaW1hdGlvbiAtIEEgcmVmZXJlbmNlIHRvIHRoZSBBbmltYXRpb24gdGhhdCBzdGFydGVkIHBsYXlpbmcuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWV9IGZyYW1lIC0gVGhlIGN1cnJlbnQgQW5pbWF0aW9uIEZyYW1lIHRoYXQgdGhlIEFuaW1hdGlvbiBzdGFydGVkIHdpdGguXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZX0gZ2FtZU9iamVjdCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBHYW1lIE9iamVjdCBvbiB3aGljaCB0aGUgYW5pbWF0aW9uIHN0YXJ0ZWQgcGxheWluZy5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3N0YXJ0JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/ANIMATION_START_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/animations/events/PAUSE_ALL_EVENT.js":
/*!**********************************************************************!*\
!*** ./node_modules/phaser/src/animations/events/PAUSE_ALL_EVENT.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pause All Animations Event.\r\n * \r\n * This event is dispatched when the global Animation Manager is told to pause.\r\n * \r\n * When this happens all current animations will stop updating, although it doesn't necessarily mean\r\n * that the game has paused as well.\r\n *\r\n * @event Phaser.Animations.Events#PAUSE_ALL\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'pauseall';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9QQVVTRV9BTExfRVZFTlQuanM/MTNjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYW5pbWF0aW9ucy9ldmVudHMvUEFVU0VfQUxMX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFBhdXNlIEFsbCBBbmltYXRpb25zIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIHdoZW4gdGhlIGdsb2JhbCBBbmltYXRpb24gTWFuYWdlciBpcyB0b2xkIHRvIHBhdXNlLlxyXG4gKiBcclxuICogV2hlbiB0aGlzIGhhcHBlbnMgYWxsIGN1cnJlbnQgYW5pbWF0aW9ucyB3aWxsIHN0b3AgdXBkYXRpbmcsIGFsdGhvdWdoIGl0IGRvZXNuJ3QgbmVjZXNzYXJpbHkgbWVhblxyXG4gKiB0aGF0IHRoZSBnYW1lIGhhcyBwYXVzZWQgYXMgd2VsbC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNQQVVTRV9BTExcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwYXVzZWFsbCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/PAUSE_ALL_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/animations/events/REMOVE_ANIMATION_EVENT.js":
/*!*****************************************************************************!*\
!*** ./node_modules/phaser/src/animations/events/REMOVE_ANIMATION_EVENT.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Remove Animation Event.\r\n * \r\n * This event is dispatched when an animation is removed from the global Animation Manager.\r\n *\r\n * @event Phaser.Animations.Events#REMOVE_ANIMATION\r\n * @since 3.0.0\r\n * \r\n * @param {string} key - The key of the Animation that was removed from the global Animation Manager.\r\n * @param {Phaser.Animations.Animation} animation - An instance of the removed Animation.\r\n */\r\nmodule.exports = 'remove';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9SRU1PVkVfQU5JTUFUSU9OX0VWRU5ULmpzP2MxNGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyw0QkFBNEI7QUFDdkM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FuaW1hdGlvbnMvZXZlbnRzL1JFTU9WRV9BTklNQVRJT05fRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgUmVtb3ZlIEFuaW1hdGlvbiBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCB3aGVuIGFuIGFuaW1hdGlvbiBpcyByZW1vdmVkIGZyb20gdGhlIGdsb2JhbCBBbmltYXRpb24gTWFuYWdlci5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNSRU1PVkVfQU5JTUFUSU9OXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIEFuaW1hdGlvbiB0aGF0IHdhcyByZW1vdmVkIGZyb20gdGhlIGdsb2JhbCBBbmltYXRpb24gTWFuYWdlci5cclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb259IGFuaW1hdGlvbiAtIEFuIGluc3RhbmNlIG9mIHRoZSByZW1vdmVkIEFuaW1hdGlvbi5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3JlbW92ZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/REMOVE_ANIMATION_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/animations/events/RESUME_ALL_EVENT.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/src/animations/events/RESUME_ALL_EVENT.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Resume All Animations Event.\r\n * \r\n * This event is dispatched when the global Animation Manager resumes, having been previously paused.\r\n * \r\n * When this happens all current animations will continue updating again.\r\n *\r\n * @event Phaser.Animations.Events#RESUME_ALL\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'resumeall';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9SRVNVTUVfQUxMX0VWRU5ULmpzPzNhNWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9SRVNVTUVfQUxMX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFJlc3VtZSBBbGwgQW5pbWF0aW9ucyBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCB3aGVuIHRoZSBnbG9iYWwgQW5pbWF0aW9uIE1hbmFnZXIgcmVzdW1lcywgaGF2aW5nIGJlZW4gcHJldmlvdXNseSBwYXVzZWQuXHJcbiAqIFxyXG4gKiBXaGVuIHRoaXMgaGFwcGVucyBhbGwgY3VycmVudCBhbmltYXRpb25zIHdpbGwgY29udGludWUgdXBkYXRpbmcgYWdhaW4uXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQW5pbWF0aW9ucy5FdmVudHMjUkVTVU1FX0FMTFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3Jlc3VtZWFsbCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/RESUME_ALL_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_COMPLETE_EVENT.js":
/*!**************************************************************************************!*\
!*** ./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_COMPLETE_EVENT.js ***!
\**************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sprite Animation Complete Event.\r\n * \r\n * This event is dispatched by a Sprite when an animation finishes playing on it.\r\n * \r\n * Listen for it on the Sprite using `sprite.on('animationcomplete', listener)`\r\n * \r\n * This same event is dispatched for all animations. To listen for a specific animation, use the `SPRITE_ANIMATION_KEY_COMPLETE` event.\r\n *\r\n * @event Phaser.Animations.Events#SPRITE_ANIMATION_COMPLETE\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that completed.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame that the Animation completed on.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation completed.\r\n */\r\nmodule.exports = 'animationcomplete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX0NPTVBMRVRFX0VWRU5ULmpzPzc2OTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNEJBQTRCO0FBQ3ZDLFdBQVcsaUNBQWlDO0FBQzVDLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX0NPTVBMRVRFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNwcml0ZSBBbmltYXRpb24gQ29tcGxldGUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBTcHJpdGUgd2hlbiBhbiBhbmltYXRpb24gZmluaXNoZXMgcGxheWluZyBvbiBpdC5cclxuICogXHJcbiAqIExpc3RlbiBmb3IgaXQgb24gdGhlIFNwcml0ZSB1c2luZyBgc3ByaXRlLm9uKCdhbmltYXRpb25jb21wbGV0ZScsIGxpc3RlbmVyKWBcclxuICogXHJcbiAqIFRoaXMgc2FtZSBldmVudCBpcyBkaXNwYXRjaGVkIGZvciBhbGwgYW5pbWF0aW9ucy4gVG8gbGlzdGVuIGZvciBhIHNwZWNpZmljIGFuaW1hdGlvbiwgdXNlIHRoZSBgU1BSSVRFX0FOSU1BVElPTl9LRVlfQ09NUExFVEVgIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkFuaW1hdGlvbnMuRXZlbnRzI1NQUklURV9BTklNQVRJT05fQ09NUExFVEVcclxuICogQHNpbmNlIDMuMTYuMVxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb259IGFuaW1hdGlvbiAtIEEgcmVmZXJlbmNlIHRvIHRoZSBBbmltYXRpb24gdGhhdCBjb21wbGV0ZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWV9IGZyYW1lIC0gVGhlIGN1cnJlbnQgQW5pbWF0aW9uIEZyYW1lIHRoYXQgdGhlIEFuaW1hdGlvbiBjb21wbGV0ZWQgb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZX0gZ2FtZU9iamVjdCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBHYW1lIE9iamVjdCBvbiB3aGljaCB0aGUgYW5pbWF0aW9uIGNvbXBsZXRlZC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2FuaW1hdGlvbmNvbXBsZXRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_COMPLETE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_COMPLETE_EVENT.js":
/*!******************************************************************************************!*\
!*** ./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_COMPLETE_EVENT.js ***!
\******************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sprite Animation Key Complete Event.\r\n * \r\n * This event is dispatched by a Sprite when a specific animation finishes playing on it.\r\n * \r\n * Listen for it on the Sprite using `sprite.on('animationcomplete-key', listener)` where `key` is the key of\r\n * the animation. For example, if you had an animation with the key 'explode' you should listen for `animationcomplete-explode`.\r\n *\r\n * @event Phaser.Animations.Events#SPRITE_ANIMATION_KEY_COMPLETE\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that completed.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame that the Animation completed on.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation completed.\r\n */\r\nmodule.exports = 'animationcomplete-';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX0tFWV9DT01QTEVURV9FVkVOVC5qcz82MjAxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw0QkFBNEI7QUFDdkMsV0FBVyxpQ0FBaUM7QUFDNUMsV0FBVywwQkFBMEI7QUFDckM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FuaW1hdGlvbnMvZXZlbnRzL1NQUklURV9BTklNQVRJT05fS0VZX0NPTVBMRVRFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNwcml0ZSBBbmltYXRpb24gS2V5IENvbXBsZXRlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgU3ByaXRlIHdoZW4gYSBzcGVjaWZpYyBhbmltYXRpb24gZmluaXNoZXMgcGxheWluZyBvbiBpdC5cclxuICogXHJcbiAqIExpc3RlbiBmb3IgaXQgb24gdGhlIFNwcml0ZSB1c2luZyBgc3ByaXRlLm9uKCdhbmltYXRpb25jb21wbGV0ZS1rZXknLCBsaXN0ZW5lcilgIHdoZXJlIGBrZXlgIGlzIHRoZSBrZXkgb2ZcclxuICogdGhlIGFuaW1hdGlvbi4gRm9yIGV4YW1wbGUsIGlmIHlvdSBoYWQgYW4gYW5pbWF0aW9uIHdpdGggdGhlIGtleSAnZXhwbG9kZScgeW91IHNob3VsZCBsaXN0ZW4gZm9yIGBhbmltYXRpb25jb21wbGV0ZS1leHBsb2RlYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNTUFJJVEVfQU5JTUFUSU9OX0tFWV9DT01QTEVURVxyXG4gKiBAc2luY2UgMy4xNi4xXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbn0gYW5pbWF0aW9uIC0gQSByZWZlcmVuY2UgdG8gdGhlIEFuaW1hdGlvbiB0aGF0IGNvbXBsZXRlZC5cclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZX0gZnJhbWUgLSBUaGUgY3VycmVudCBBbmltYXRpb24gRnJhbWUgdGhhdCB0aGUgQW5pbWF0aW9uIGNvbXBsZXRlZCBvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlfSBnYW1lT2JqZWN0IC0gQSByZWZlcmVuY2UgdG8gdGhlIEdhbWUgT2JqZWN0IG9uIHdoaWNoIHRoZSBhbmltYXRpb24gY29tcGxldGVkLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnYW5pbWF0aW9uY29tcGxldGUtJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_COMPLETE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_REPEAT_EVENT.js":
/*!****************************************************************************************!*\
!*** ./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_REPEAT_EVENT.js ***!
\****************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sprite Animation Key Repeat Event.\r\n * \r\n * This event is dispatched by a Sprite when a specific animation repeats playing on it.\r\n * \r\n * Listen for it on the Sprite using `sprite.on('animationrepeat-key', listener)` where `key` is the key of\r\n * the animation. For example, if you had an animation with the key 'explode' you should listen for `animationrepeat-explode`.\r\n *\r\n * @event Phaser.Animations.Events#SPRITE_ANIMATION_KEY_REPEAT\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that is repeating on the Sprite.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame that the Animation started with.\r\n * @param {integer} repeatCount - The number of times the Animation has repeated so far.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation repeated playing.\r\n */\r\nmodule.exports = 'animationrepeat-';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX0tFWV9SRVBFQVRfRVZFTlQuanM/MzhjNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNEJBQTRCO0FBQ3ZDLFdBQVcsaUNBQWlDO0FBQzVDLFdBQVcsUUFBUTtBQUNuQixXQUFXLDBCQUEwQjtBQUNyQztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYW5pbWF0aW9ucy9ldmVudHMvU1BSSVRFX0FOSU1BVElPTl9LRVlfUkVQRUFUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNwcml0ZSBBbmltYXRpb24gS2V5IFJlcGVhdCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIFNwcml0ZSB3aGVuIGEgc3BlY2lmaWMgYW5pbWF0aW9uIHJlcGVhdHMgcGxheWluZyBvbiBpdC5cclxuICogXHJcbiAqIExpc3RlbiBmb3IgaXQgb24gdGhlIFNwcml0ZSB1c2luZyBgc3ByaXRlLm9uKCdhbmltYXRpb25yZXBlYXQta2V5JywgbGlzdGVuZXIpYCB3aGVyZSBga2V5YCBpcyB0aGUga2V5IG9mXHJcbiAqIHRoZSBhbmltYXRpb24uIEZvciBleGFtcGxlLCBpZiB5b3UgaGFkIGFuIGFuaW1hdGlvbiB3aXRoIHRoZSBrZXkgJ2V4cGxvZGUnIHlvdSBzaG91bGQgbGlzdGVuIGZvciBgYW5pbWF0aW9ucmVwZWF0LWV4cGxvZGVgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkFuaW1hdGlvbnMuRXZlbnRzI1NQUklURV9BTklNQVRJT05fS0VZX1JFUEVBVFxyXG4gKiBAc2luY2UgMy4xNi4xXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbn0gYW5pbWF0aW9uIC0gQSByZWZlcmVuY2UgdG8gdGhlIEFuaW1hdGlvbiB0aGF0IGlzIHJlcGVhdGluZyBvbiB0aGUgU3ByaXRlLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lfSBmcmFtZSAtIFRoZSBjdXJyZW50IEFuaW1hdGlvbiBGcmFtZSB0aGF0IHRoZSBBbmltYXRpb24gc3RhcnRlZCB3aXRoLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHJlcGVhdENvdW50IC0gVGhlIG51bWJlciBvZiB0aW1lcyB0aGUgQW5pbWF0aW9uIGhhcyByZXBlYXRlZCBzbyBmYXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZX0gZ2FtZU9iamVjdCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBHYW1lIE9iamVjdCBvbiB3aGljaCB0aGUgYW5pbWF0aW9uIHJlcGVhdGVkIHBsYXlpbmcuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdhbmltYXRpb25yZXBlYXQtJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_REPEAT_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_RESTART_EVENT.js":
/*!*****************************************************************************************!*\
!*** ./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_RESTART_EVENT.js ***!
\*****************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sprite Animation Key Restart Event.\r\n * \r\n * This event is dispatched by a Sprite when a specific animation restarts playing on it.\r\n * \r\n * Listen for it on the Sprite using `sprite.on('animationrestart-key', listener)` where `key` is the key of\r\n * the animation. For example, if you had an animation with the key 'explode' you should listen for `animationrestart-explode`.\r\n *\r\n * @event Phaser.Animations.Events#SPRITE_ANIMATION_KEY_RESTART\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that was restarted on the Sprite.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame that the Animation restarted with.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation restarted playing.\r\n */\r\nmodule.exports = 'animationrestart-';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX0tFWV9SRVNUQVJUX0VWRU5ULmpzPzk2MTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDRCQUE0QjtBQUN2QyxXQUFXLGlDQUFpQztBQUM1QyxXQUFXLDBCQUEwQjtBQUNyQztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYW5pbWF0aW9ucy9ldmVudHMvU1BSSVRFX0FOSU1BVElPTl9LRVlfUkVTVEFSVF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBTcHJpdGUgQW5pbWF0aW9uIEtleSBSZXN0YXJ0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgU3ByaXRlIHdoZW4gYSBzcGVjaWZpYyBhbmltYXRpb24gcmVzdGFydHMgcGxheWluZyBvbiBpdC5cclxuICogXHJcbiAqIExpc3RlbiBmb3IgaXQgb24gdGhlIFNwcml0ZSB1c2luZyBgc3ByaXRlLm9uKCdhbmltYXRpb25yZXN0YXJ0LWtleScsIGxpc3RlbmVyKWAgd2hlcmUgYGtleWAgaXMgdGhlIGtleSBvZlxyXG4gKiB0aGUgYW5pbWF0aW9uLiBGb3IgZXhhbXBsZSwgaWYgeW91IGhhZCBhbiBhbmltYXRpb24gd2l0aCB0aGUga2V5ICdleHBsb2RlJyB5b3Ugc2hvdWxkIGxpc3RlbiBmb3IgYGFuaW1hdGlvbnJlc3RhcnQtZXhwbG9kZWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQW5pbWF0aW9ucy5FdmVudHMjU1BSSVRFX0FOSU1BVElPTl9LRVlfUkVTVEFSVFxyXG4gKiBAc2luY2UgMy4xNi4xXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbn0gYW5pbWF0aW9uIC0gQSByZWZlcmVuY2UgdG8gdGhlIEFuaW1hdGlvbiB0aGF0IHdhcyByZXN0YXJ0ZWQgb24gdGhlIFNwcml0ZS5cclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZX0gZnJhbWUgLSBUaGUgY3VycmVudCBBbmltYXRpb24gRnJhbWUgdGhhdCB0aGUgQW5pbWF0aW9uIHJlc3RhcnRlZCB3aXRoLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGV9IGdhbWVPYmplY3QgLSBBIHJlZmVyZW5jZSB0byB0aGUgR2FtZSBPYmplY3Qgb24gd2hpY2ggdGhlIGFuaW1hdGlvbiByZXN0YXJ0ZWQgcGxheWluZy5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2FuaW1hdGlvbnJlc3RhcnQtJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_RESTART_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_START_EVENT.js":
/*!***************************************************************************************!*\
!*** ./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_START_EVENT.js ***!
\***************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sprite Animation Key Start Event.\r\n * \r\n * This event is dispatched by a Sprite when a specific animation starts playing on it.\r\n * \r\n * Listen for it on the Sprite using `sprite.on('animationstart-key', listener)` where `key` is the key of\r\n * the animation. For example, if you had an animation with the key 'explode' you should listen for `animationstart-explode`.\r\n *\r\n * @event Phaser.Animations.Events#SPRITE_ANIMATION_KEY_START\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that was started on the Sprite.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame that the Animation started with.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation started playing.\r\n */\r\nmodule.exports = 'animationstart-';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX0tFWV9TVEFSVF9FVkVOVC5qcz81MDk2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw0QkFBNEI7QUFDdkMsV0FBVyxpQ0FBaUM7QUFDNUMsV0FBVywwQkFBMEI7QUFDckM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FuaW1hdGlvbnMvZXZlbnRzL1NQUklURV9BTklNQVRJT05fS0VZX1NUQVJUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNwcml0ZSBBbmltYXRpb24gS2V5IFN0YXJ0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgU3ByaXRlIHdoZW4gYSBzcGVjaWZpYyBhbmltYXRpb24gc3RhcnRzIHBsYXlpbmcgb24gaXQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gZm9yIGl0IG9uIHRoZSBTcHJpdGUgdXNpbmcgYHNwcml0ZS5vbignYW5pbWF0aW9uc3RhcnQta2V5JywgbGlzdGVuZXIpYCB3aGVyZSBga2V5YCBpcyB0aGUga2V5IG9mXHJcbiAqIHRoZSBhbmltYXRpb24uIEZvciBleGFtcGxlLCBpZiB5b3UgaGFkIGFuIGFuaW1hdGlvbiB3aXRoIHRoZSBrZXkgJ2V4cGxvZGUnIHlvdSBzaG91bGQgbGlzdGVuIGZvciBgYW5pbWF0aW9uc3RhcnQtZXhwbG9kZWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQW5pbWF0aW9ucy5FdmVudHMjU1BSSVRFX0FOSU1BVElPTl9LRVlfU1RBUlRcclxuICogQHNpbmNlIDMuMTYuMVxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb259IGFuaW1hdGlvbiAtIEEgcmVmZXJlbmNlIHRvIHRoZSBBbmltYXRpb24gdGhhdCB3YXMgc3RhcnRlZCBvbiB0aGUgU3ByaXRlLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lfSBmcmFtZSAtIFRoZSBjdXJyZW50IEFuaW1hdGlvbiBGcmFtZSB0aGF0IHRoZSBBbmltYXRpb24gc3RhcnRlZCB3aXRoLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGV9IGdhbWVPYmplY3QgLSBBIHJlZmVyZW5jZSB0byB0aGUgR2FtZSBPYmplY3Qgb24gd2hpY2ggdGhlIGFuaW1hdGlvbiBzdGFydGVkIHBsYXlpbmcuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdhbmltYXRpb25zdGFydC0nO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_START_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_UPDATE_EVENT.js":
/*!****************************************************************************************!*\
!*** ./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_UPDATE_EVENT.js ***!
\****************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sprite Animation Key Update Event.\r\n * \r\n * This event is dispatched by a Sprite when a specific animation playing on it updates. This happens when the animation changes frame,\r\n * based on the animation frame rate and other factors like `timeScale` and `delay`.\r\n * \r\n * Listen for it on the Sprite using `sprite.on('animationupdate-key', listener)` where `key` is the key of\r\n * the animation. For example, if you had an animation with the key 'explode' you should listen for `animationupdate-explode`.\r\n *\r\n * @event Phaser.Animations.Events#SPRITE_ANIMATION_KEY_UPDATE\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that has updated on the Sprite.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame of the Animation.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation updated.\r\n */\r\nmodule.exports = 'animationupdate-';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX0tFWV9VUERBVEVfRVZFTlQuanM/YzBmOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw0QkFBNEI7QUFDdkMsV0FBVyxpQ0FBaUM7QUFDNUMsV0FBVywwQkFBMEI7QUFDckM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FuaW1hdGlvbnMvZXZlbnRzL1NQUklURV9BTklNQVRJT05fS0VZX1VQREFURV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBTcHJpdGUgQW5pbWF0aW9uIEtleSBVcGRhdGUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBTcHJpdGUgd2hlbiBhIHNwZWNpZmljIGFuaW1hdGlvbiBwbGF5aW5nIG9uIGl0IHVwZGF0ZXMuIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBhbmltYXRpb24gY2hhbmdlcyBmcmFtZSxcclxuICogYmFzZWQgb24gdGhlIGFuaW1hdGlvbiBmcmFtZSByYXRlIGFuZCBvdGhlciBmYWN0b3JzIGxpa2UgYHRpbWVTY2FsZWAgYW5kIGBkZWxheWAuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gZm9yIGl0IG9uIHRoZSBTcHJpdGUgdXNpbmcgYHNwcml0ZS5vbignYW5pbWF0aW9udXBkYXRlLWtleScsIGxpc3RlbmVyKWAgd2hlcmUgYGtleWAgaXMgdGhlIGtleSBvZlxyXG4gKiB0aGUgYW5pbWF0aW9uLiBGb3IgZXhhbXBsZSwgaWYgeW91IGhhZCBhbiBhbmltYXRpb24gd2l0aCB0aGUga2V5ICdleHBsb2RlJyB5b3Ugc2hvdWxkIGxpc3RlbiBmb3IgYGFuaW1hdGlvbnVwZGF0ZS1leHBsb2RlYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNTUFJJVEVfQU5JTUFUSU9OX0tFWV9VUERBVEVcclxuICogQHNpbmNlIDMuMTYuMVxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb259IGFuaW1hdGlvbiAtIEEgcmVmZXJlbmNlIHRvIHRoZSBBbmltYXRpb24gdGhhdCBoYXMgdXBkYXRlZCBvbiB0aGUgU3ByaXRlLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lfSBmcmFtZSAtIFRoZSBjdXJyZW50IEFuaW1hdGlvbiBGcmFtZSBvZiB0aGUgQW5pbWF0aW9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGV9IGdhbWVPYmplY3QgLSBBIHJlZmVyZW5jZSB0byB0aGUgR2FtZSBPYmplY3Qgb24gd2hpY2ggdGhlIGFuaW1hdGlvbiB1cGRhdGVkLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnYW5pbWF0aW9udXBkYXRlLSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_UPDATE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_REPEAT_EVENT.js":
/*!************************************************************************************!*\
!*** ./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_REPEAT_EVENT.js ***!
\************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sprite Animation Repeat Event.\r\n * \r\n * This event is dispatched by a Sprite when an animation repeats playing on it.\r\n * \r\n * Listen for it on the Sprite using `sprite.on('animationrepeat', listener)`\r\n * \r\n * This same event is dispatched for all animations. To listen for a specific animation, use the `SPRITE_ANIMATION_KEY_REPEAT` event.\r\n *\r\n * @event Phaser.Animations.Events#SPRITE_ANIMATION_REPEAT\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that is repeating on the Sprite.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame that the Animation started with.\r\n * @param {integer} repeatCount - The number of times the Animation has repeated so far.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation repeated playing.\r\n */\r\nmodule.exports = 'animationrepeat';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX1JFUEVBVF9FVkVOVC5qcz80ZGM1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDRCQUE0QjtBQUN2QyxXQUFXLGlDQUFpQztBQUM1QyxXQUFXLFFBQVE7QUFDbkIsV0FBVywwQkFBMEI7QUFDckM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FuaW1hdGlvbnMvZXZlbnRzL1NQUklURV9BTklNQVRJT05fUkVQRUFUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNwcml0ZSBBbmltYXRpb24gUmVwZWF0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgU3ByaXRlIHdoZW4gYW4gYW5pbWF0aW9uIHJlcGVhdHMgcGxheWluZyBvbiBpdC5cclxuICogXHJcbiAqIExpc3RlbiBmb3IgaXQgb24gdGhlIFNwcml0ZSB1c2luZyBgc3ByaXRlLm9uKCdhbmltYXRpb25yZXBlYXQnLCBsaXN0ZW5lcilgXHJcbiAqIFxyXG4gKiBUaGlzIHNhbWUgZXZlbnQgaXMgZGlzcGF0Y2hlZCBmb3IgYWxsIGFuaW1hdGlvbnMuIFRvIGxpc3RlbiBmb3IgYSBzcGVjaWZpYyBhbmltYXRpb24sIHVzZSB0aGUgYFNQUklURV9BTklNQVRJT05fS0VZX1JFUEVBVGAgZXZlbnQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQW5pbWF0aW9ucy5FdmVudHMjU1BSSVRFX0FOSU1BVElPTl9SRVBFQVRcclxuICogQHNpbmNlIDMuMTYuMVxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb259IGFuaW1hdGlvbiAtIEEgcmVmZXJlbmNlIHRvIHRoZSBBbmltYXRpb24gdGhhdCBpcyByZXBlYXRpbmcgb24gdGhlIFNwcml0ZS5cclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZX0gZnJhbWUgLSBUaGUgY3VycmVudCBBbmltYXRpb24gRnJhbWUgdGhhdCB0aGUgQW5pbWF0aW9uIHN0YXJ0ZWQgd2l0aC5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSByZXBlYXRDb3VudCAtIFRoZSBudW1iZXIgb2YgdGltZXMgdGhlIEFuaW1hdGlvbiBoYXMgcmVwZWF0ZWQgc28gZmFyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGV9IGdhbWVPYmplY3QgLSBBIHJlZmVyZW5jZSB0byB0aGUgR2FtZSBPYmplY3Qgb24gd2hpY2ggdGhlIGFuaW1hdGlvbiByZXBlYXRlZCBwbGF5aW5nLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnYW5pbWF0aW9ucmVwZWF0JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_REPEAT_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_RESTART_EVENT.js":
/*!*************************************************************************************!*\
!*** ./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_RESTART_EVENT.js ***!
\*************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sprite Animation Restart Event.\r\n * \r\n * This event is dispatched by a Sprite when an animation restarts playing on it.\r\n * \r\n * Listen for it on the Sprite using `sprite.on('animationrestart', listener)`\r\n * \r\n * This same event is dispatched for all animations. To listen for a specific animation, use the `SPRITE_ANIMATION_KEY_RESTART` event.\r\n *\r\n * @event Phaser.Animations.Events#SPRITE_ANIMATION_RESTART\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that was restarted on the Sprite.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame that the Animation restarted with.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation restarted playing.\r\n */\r\nmodule.exports = 'animationrestart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX1JFU1RBUlRfRVZFTlQuanM/ZTIyNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw0QkFBNEI7QUFDdkMsV0FBVyxpQ0FBaUM7QUFDNUMsV0FBVywwQkFBMEI7QUFDckM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FuaW1hdGlvbnMvZXZlbnRzL1NQUklURV9BTklNQVRJT05fUkVTVEFSVF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBTcHJpdGUgQW5pbWF0aW9uIFJlc3RhcnQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBTcHJpdGUgd2hlbiBhbiBhbmltYXRpb24gcmVzdGFydHMgcGxheWluZyBvbiBpdC5cclxuICogXHJcbiAqIExpc3RlbiBmb3IgaXQgb24gdGhlIFNwcml0ZSB1c2luZyBgc3ByaXRlLm9uKCdhbmltYXRpb25yZXN0YXJ0JywgbGlzdGVuZXIpYFxyXG4gKiBcclxuICogVGhpcyBzYW1lIGV2ZW50IGlzIGRpc3BhdGNoZWQgZm9yIGFsbCBhbmltYXRpb25zLiBUbyBsaXN0ZW4gZm9yIGEgc3BlY2lmaWMgYW5pbWF0aW9uLCB1c2UgdGhlIGBTUFJJVEVfQU5JTUFUSU9OX0tFWV9SRVNUQVJUYCBldmVudC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNTUFJJVEVfQU5JTUFUSU9OX1JFU1RBUlRcclxuICogQHNpbmNlIDMuMTYuMVxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb259IGFuaW1hdGlvbiAtIEEgcmVmZXJlbmNlIHRvIHRoZSBBbmltYXRpb24gdGhhdCB3YXMgcmVzdGFydGVkIG9uIHRoZSBTcHJpdGUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWV9IGZyYW1lIC0gVGhlIGN1cnJlbnQgQW5pbWF0aW9uIEZyYW1lIHRoYXQgdGhlIEFuaW1hdGlvbiByZXN0YXJ0ZWQgd2l0aC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlfSBnYW1lT2JqZWN0IC0gQSByZWZlcmVuY2UgdG8gdGhlIEdhbWUgT2JqZWN0IG9uIHdoaWNoIHRoZSBhbmltYXRpb24gcmVzdGFydGVkIHBsYXlpbmcuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdhbmltYXRpb25yZXN0YXJ0JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_RESTART_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_START_EVENT.js":
/*!***********************************************************************************!*\
!*** ./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_START_EVENT.js ***!
\***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sprite Animation Start Event.\r\n * \r\n * This event is dispatched by a Sprite when an animation starts playing on it.\r\n * \r\n * Listen for it on the Sprite using `sprite.on('animationstart', listener)`\r\n * \r\n * This same event is dispatched for all animations. To listen for a specific animation, use the `SPRITE_ANIMATION_KEY_START` event.\r\n *\r\n * @event Phaser.Animations.Events#SPRITE_ANIMATION_START\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that was started on the Sprite.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame that the Animation started with.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation started playing.\r\n */\r\nmodule.exports = 'animationstart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX1NUQVJUX0VWRU5ULmpzPzMyZGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNEJBQTRCO0FBQ3ZDLFdBQVcsaUNBQWlDO0FBQzVDLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX1NUQVJUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFNwcml0ZSBBbmltYXRpb24gU3RhcnQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBTcHJpdGUgd2hlbiBhbiBhbmltYXRpb24gc3RhcnRzIHBsYXlpbmcgb24gaXQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gZm9yIGl0IG9uIHRoZSBTcHJpdGUgdXNpbmcgYHNwcml0ZS5vbignYW5pbWF0aW9uc3RhcnQnLCBsaXN0ZW5lcilgXHJcbiAqIFxyXG4gKiBUaGlzIHNhbWUgZXZlbnQgaXMgZGlzcGF0Y2hlZCBmb3IgYWxsIGFuaW1hdGlvbnMuIFRvIGxpc3RlbiBmb3IgYSBzcGVjaWZpYyBhbmltYXRpb24sIHVzZSB0aGUgYFNQUklURV9BTklNQVRJT05fS0VZX1NUQVJUYCBldmVudC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNTUFJJVEVfQU5JTUFUSU9OX1NUQVJUXHJcbiAqIEBzaW5jZSAzLjE2LjFcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9ufSBhbmltYXRpb24gLSBBIHJlZmVyZW5jZSB0byB0aGUgQW5pbWF0aW9uIHRoYXQgd2FzIHN0YXJ0ZWQgb24gdGhlIFNwcml0ZS5cclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZX0gZnJhbWUgLSBUaGUgY3VycmVudCBBbmltYXRpb24gRnJhbWUgdGhhdCB0aGUgQW5pbWF0aW9uIHN0YXJ0ZWQgd2l0aC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlfSBnYW1lT2JqZWN0IC0gQSByZWZlcmVuY2UgdG8gdGhlIEdhbWUgT2JqZWN0IG9uIHdoaWNoIHRoZSBhbmltYXRpb24gc3RhcnRlZCBwbGF5aW5nLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnYW5pbWF0aW9uc3RhcnQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_START_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_UPDATE_EVENT.js":
/*!************************************************************************************!*\
!*** ./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_UPDATE_EVENT.js ***!
\************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Sprite Animation Update Event.\r\n * \r\n * This event is dispatched by a Sprite when an animation playing on it updates. This happens when the animation changes frame,\r\n * based on the animation frame rate and other factors like `timeScale` and `delay`.\r\n * \r\n * Listen for it on the Sprite using `sprite.on('animationupdate', listener)`\r\n * \r\n * This same event is dispatched for all animations. To listen for a specific animation, use the `SPRITE_ANIMATION_KEY_UPDATE` event.\r\n *\r\n * @event Phaser.Animations.Events#SPRITE_ANIMATION_UPDATE\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Animations.Animation} animation - A reference to the Animation that has updated on the Sprite.\r\n * @param {Phaser.Animations.AnimationFrame} frame - The current Animation Frame of the Animation.\r\n * @param {Phaser.GameObjects.Sprite} gameObject - A reference to the Game Object on which the animation updated.\r\n */\r\nmodule.exports = 'animationupdate';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX1VQREFURV9FVkVOVC5qcz83NjBjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNEJBQTRCO0FBQ3ZDLFdBQVcsaUNBQWlDO0FBQzVDLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9TUFJJVEVfQU5JTUFUSU9OX1VQREFURV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBTcHJpdGUgQW5pbWF0aW9uIFVwZGF0ZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIFNwcml0ZSB3aGVuIGFuIGFuaW1hdGlvbiBwbGF5aW5nIG9uIGl0IHVwZGF0ZXMuIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBhbmltYXRpb24gY2hhbmdlcyBmcmFtZSxcclxuICogYmFzZWQgb24gdGhlIGFuaW1hdGlvbiBmcmFtZSByYXRlIGFuZCBvdGhlciBmYWN0b3JzIGxpa2UgYHRpbWVTY2FsZWAgYW5kIGBkZWxheWAuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gZm9yIGl0IG9uIHRoZSBTcHJpdGUgdXNpbmcgYHNwcml0ZS5vbignYW5pbWF0aW9udXBkYXRlJywgbGlzdGVuZXIpYFxyXG4gKiBcclxuICogVGhpcyBzYW1lIGV2ZW50IGlzIGRpc3BhdGNoZWQgZm9yIGFsbCBhbmltYXRpb25zLiBUbyBsaXN0ZW4gZm9yIGEgc3BlY2lmaWMgYW5pbWF0aW9uLCB1c2UgdGhlIGBTUFJJVEVfQU5JTUFUSU9OX0tFWV9VUERBVEVgIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkFuaW1hdGlvbnMuRXZlbnRzI1NQUklURV9BTklNQVRJT05fVVBEQVRFXHJcbiAqIEBzaW5jZSAzLjE2LjFcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9ufSBhbmltYXRpb24gLSBBIHJlZmVyZW5jZSB0byB0aGUgQW5pbWF0aW9uIHRoYXQgaGFzIHVwZGF0ZWQgb24gdGhlIFNwcml0ZS5cclxuICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZX0gZnJhbWUgLSBUaGUgY3VycmVudCBBbmltYXRpb24gRnJhbWUgb2YgdGhlIEFuaW1hdGlvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlfSBnYW1lT2JqZWN0IC0gQSByZWZlcmVuY2UgdG8gdGhlIEdhbWUgT2JqZWN0IG9uIHdoaWNoIHRoZSBhbmltYXRpb24gdXBkYXRlZC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2FuaW1hdGlvbnVwZGF0ZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_UPDATE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/animations/events/index.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/animations/events/index.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Animations.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n ADD_ANIMATION: __webpack_require__(/*! ./ADD_ANIMATION_EVENT */ \"./node_modules/phaser/src/animations/events/ADD_ANIMATION_EVENT.js\"),\r\n ANIMATION_COMPLETE: __webpack_require__(/*! ./ANIMATION_COMPLETE_EVENT */ \"./node_modules/phaser/src/animations/events/ANIMATION_COMPLETE_EVENT.js\"),\r\n ANIMATION_REPEAT: __webpack_require__(/*! ./ANIMATION_REPEAT_EVENT */ \"./node_modules/phaser/src/animations/events/ANIMATION_REPEAT_EVENT.js\"),\r\n ANIMATION_RESTART: __webpack_require__(/*! ./ANIMATION_RESTART_EVENT */ \"./node_modules/phaser/src/animations/events/ANIMATION_RESTART_EVENT.js\"),\r\n ANIMATION_START: __webpack_require__(/*! ./ANIMATION_START_EVENT */ \"./node_modules/phaser/src/animations/events/ANIMATION_START_EVENT.js\"),\r\n PAUSE_ALL: __webpack_require__(/*! ./PAUSE_ALL_EVENT */ \"./node_modules/phaser/src/animations/events/PAUSE_ALL_EVENT.js\"),\r\n REMOVE_ANIMATION: __webpack_require__(/*! ./REMOVE_ANIMATION_EVENT */ \"./node_modules/phaser/src/animations/events/REMOVE_ANIMATION_EVENT.js\"),\r\n RESUME_ALL: __webpack_require__(/*! ./RESUME_ALL_EVENT */ \"./node_modules/phaser/src/animations/events/RESUME_ALL_EVENT.js\"),\r\n SPRITE_ANIMATION_COMPLETE: __webpack_require__(/*! ./SPRITE_ANIMATION_COMPLETE_EVENT */ \"./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_COMPLETE_EVENT.js\"),\r\n SPRITE_ANIMATION_KEY_COMPLETE: __webpack_require__(/*! ./SPRITE_ANIMATION_KEY_COMPLETE_EVENT */ \"./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_COMPLETE_EVENT.js\"),\r\n SPRITE_ANIMATION_KEY_REPEAT: __webpack_require__(/*! ./SPRITE_ANIMATION_KEY_REPEAT_EVENT */ \"./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_REPEAT_EVENT.js\"),\r\n SPRITE_ANIMATION_KEY_RESTART: __webpack_require__(/*! ./SPRITE_ANIMATION_KEY_RESTART_EVENT */ \"./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_RESTART_EVENT.js\"),\r\n SPRITE_ANIMATION_KEY_START: __webpack_require__(/*! ./SPRITE_ANIMATION_KEY_START_EVENT */ \"./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_START_EVENT.js\"),\r\n SPRITE_ANIMATION_KEY_UPDATE: __webpack_require__(/*! ./SPRITE_ANIMATION_KEY_UPDATE_EVENT */ \"./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_KEY_UPDATE_EVENT.js\"),\r\n SPRITE_ANIMATION_REPEAT: __webpack_require__(/*! ./SPRITE_ANIMATION_REPEAT_EVENT */ \"./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_REPEAT_EVENT.js\"),\r\n SPRITE_ANIMATION_RESTART: __webpack_require__(/*! ./SPRITE_ANIMATION_RESTART_EVENT */ \"./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_RESTART_EVENT.js\"),\r\n SPRITE_ANIMATION_START: __webpack_require__(/*! ./SPRITE_ANIMATION_START_EVENT */ \"./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_START_EVENT.js\"),\r\n SPRITE_ANIMATION_UPDATE: __webpack_require__(/*! ./SPRITE_ANIMATION_UPDATE_EVENT */ \"./node_modules/phaser/src/animations/events/SPRITE_ANIMATION_UPDATE_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2V2ZW50cy9pbmRleC5qcz83OWZmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLG1CQUFPLENBQUMsaUdBQXVCO0FBQ2xELHdCQUF3QixtQkFBTyxDQUFDLDJHQUE0QjtBQUM1RCxzQkFBc0IsbUJBQU8sQ0FBQyx1R0FBMEI7QUFDeEQsdUJBQXVCLG1CQUFPLENBQUMseUdBQTJCO0FBQzFELHFCQUFxQixtQkFBTyxDQUFDLHFHQUF5QjtBQUN0RCxlQUFlLG1CQUFPLENBQUMseUZBQW1CO0FBQzFDLHNCQUFzQixtQkFBTyxDQUFDLHVHQUEwQjtBQUN4RCxnQkFBZ0IsbUJBQU8sQ0FBQywyRkFBb0I7QUFDNUMsK0JBQStCLG1CQUFPLENBQUMseUhBQW1DO0FBQzFFLG1DQUFtQyxtQkFBTyxDQUFDLGlJQUF1QztBQUNsRixpQ0FBaUMsbUJBQU8sQ0FBQyw2SEFBcUM7QUFDOUUsa0NBQWtDLG1CQUFPLENBQUMsK0hBQXNDO0FBQ2hGLGdDQUFnQyxtQkFBTyxDQUFDLDJIQUFvQztBQUM1RSxpQ0FBaUMsbUJBQU8sQ0FBQyw2SEFBcUM7QUFDOUUsNkJBQTZCLG1CQUFPLENBQUMscUhBQWlDO0FBQ3RFLDhCQUE4QixtQkFBTyxDQUFDLHVIQUFrQztBQUN4RSw0QkFBNEIsbUJBQU8sQ0FBQyxtSEFBZ0M7QUFDcEUsNkJBQTZCLG1CQUFPLENBQUMscUhBQWlDOztBQUV0RSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2FuaW1hdGlvbnMvZXZlbnRzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuQW5pbWF0aW9ucy5FdmVudHNcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBBRERfQU5JTUFUSU9OOiByZXF1aXJlKCcuL0FERF9BTklNQVRJT05fRVZFTlQnKSxcclxuICAgIEFOSU1BVElPTl9DT01QTEVURTogcmVxdWlyZSgnLi9BTklNQVRJT05fQ09NUExFVEVfRVZFTlQnKSxcclxuICAgIEFOSU1BVElPTl9SRVBFQVQ6IHJlcXVpcmUoJy4vQU5JTUFUSU9OX1JFUEVBVF9FVkVOVCcpLFxyXG4gICAgQU5JTUFUSU9OX1JFU1RBUlQ6IHJlcXVpcmUoJy4vQU5JTUFUSU9OX1JFU1RBUlRfRVZFTlQnKSxcclxuICAgIEFOSU1BVElPTl9TVEFSVDogcmVxdWlyZSgnLi9BTklNQVRJT05fU1RBUlRfRVZFTlQnKSxcclxuICAgIFBBVVNFX0FMTDogcmVxdWlyZSgnLi9QQVVTRV9BTExfRVZFTlQnKSxcclxuICAgIFJFTU9WRV9BTklNQVRJT046IHJlcXVpcmUoJy4vUkVNT1ZFX0FOSU1BVElPTl9FVkVOVCcpLFxyXG4gICAgUkVTVU1FX0FMTDogcmVxdWlyZSgnLi9SRVNVTUVfQUxMX0VWRU5UJyksXHJcbiAgICBTUFJJVEVfQU5JTUFUSU9OX0NPTVBMRVRFOiByZXF1aXJlKCcuL1NQUklURV9BTklNQVRJT05fQ09NUExFVEVfRVZFTlQnKSxcclxuICAgIFNQUklURV9BTklNQVRJT05fS0VZX0NPTVBMRVRFOiByZXF1aXJlKCcuL1NQUklURV9BTklNQVRJT05fS0VZX0NPTVBMRVRFX0VWRU5UJyksXHJcbiAgICBTUFJJVEVfQU5JTUFUSU9OX0tFWV9SRVBFQVQ6IHJlcXVpcmUoJy4vU1BSSVRFX0FOSU1BVElPTl9LRVlfUkVQRUFUX0VWRU5UJyksXHJcbiAgICBTUFJJVEVfQU5JTUFUSU9OX0tFWV9SRVNUQVJUOiByZXF1aXJlKCcuL1NQUklURV9BTklNQVRJT05fS0VZX1JFU1RBUlRfRVZFTlQnKSxcclxuICAgIFNQUklURV9BTklNQVRJT05fS0VZX1NUQVJUOiByZXF1aXJlKCcuL1NQUklURV9BTklNQVRJT05fS0VZX1NUQVJUX0VWRU5UJyksXHJcbiAgICBTUFJJVEVfQU5JTUFUSU9OX0tFWV9VUERBVEU6IHJlcXVpcmUoJy4vU1BSSVRFX0FOSU1BVElPTl9LRVlfVVBEQVRFX0VWRU5UJyksXHJcbiAgICBTUFJJVEVfQU5JTUFUSU9OX1JFUEVBVDogcmVxdWlyZSgnLi9TUFJJVEVfQU5JTUFUSU9OX1JFUEVBVF9FVkVOVCcpLFxyXG4gICAgU1BSSVRFX0FOSU1BVElPTl9SRVNUQVJUOiByZXF1aXJlKCcuL1NQUklURV9BTklNQVRJT05fUkVTVEFSVF9FVkVOVCcpLFxyXG4gICAgU1BSSVRFX0FOSU1BVElPTl9TVEFSVDogcmVxdWlyZSgnLi9TUFJJVEVfQU5JTUFUSU9OX1NUQVJUX0VWRU5UJyksXHJcbiAgICBTUFJJVEVfQU5JTUFUSU9OX1VQREFURTogcmVxdWlyZSgnLi9TUFJJVEVfQU5JTUFUSU9OX1VQREFURV9FVkVOVCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/events/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/animations/index.js":
/*!*****************************************************!*\
!*** ./node_modules/phaser/src/animations/index.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Animations\r\n */\r\n\r\nmodule.exports = {\r\n\r\n Animation: __webpack_require__(/*! ./Animation */ \"./node_modules/phaser/src/animations/Animation.js\"),\r\n AnimationFrame: __webpack_require__(/*! ./AnimationFrame */ \"./node_modules/phaser/src/animations/AnimationFrame.js\"),\r\n AnimationManager: __webpack_require__(/*! ./AnimationManager */ \"./node_modules/phaser/src/animations/AnimationManager.js\"),\r\n Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/animations/events/index.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9hbmltYXRpb25zL2luZGV4LmpzPzYyOWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxlQUFlLG1CQUFPLENBQUMsc0VBQWE7QUFDcEMsb0JBQW9CLG1CQUFPLENBQUMsZ0ZBQWtCO0FBQzlDLHNCQUFzQixtQkFBTyxDQUFDLG9GQUFvQjtBQUNsRCxZQUFZLG1CQUFPLENBQUMsc0VBQVU7O0FBRTlCIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvYW5pbWF0aW9ucy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkFuaW1hdGlvbnNcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBBbmltYXRpb246IHJlcXVpcmUoJy4vQW5pbWF0aW9uJyksXHJcbiAgICBBbmltYXRpb25GcmFtZTogcmVxdWlyZSgnLi9BbmltYXRpb25GcmFtZScpLFxyXG4gICAgQW5pbWF0aW9uTWFuYWdlcjogcmVxdWlyZSgnLi9BbmltYXRpb25NYW5hZ2VyJyksXHJcbiAgICBFdmVudHM6IHJlcXVpcmUoJy4vZXZlbnRzJylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/animations/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cache/BaseCache.js":
/*!****************************************************!*\
!*** ./node_modules/phaser/src/cache/BaseCache.js ***!
\****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CustomMap = __webpack_require__(/*! ../structs/Map */ \"./node_modules/phaser/src/structs/Map.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/cache/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The BaseCache is a base Cache class that can be used for storing references to any kind of data.\r\n *\r\n * Data can be added, retrieved and removed based on the given keys.\r\n *\r\n * Keys are string-based.\r\n *\r\n * @class BaseCache\r\n * @memberof Phaser.Cache\r\n * @constructor\r\n * @since 3.0.0\r\n */\r\nvar BaseCache = new Class({\r\n\r\n initialize:\r\n\r\n function BaseCache ()\r\n {\r\n /**\r\n * The Map in which the cache objects are stored.\r\n *\r\n * You can query the Map directly or use the BaseCache methods.\r\n *\r\n * @name Phaser.Cache.BaseCache#entries\r\n * @type {Phaser.Structs.Map.<String, *>}\r\n * @since 3.0.0\r\n */\r\n this.entries = new CustomMap();\r\n\r\n /**\r\n * An instance of EventEmitter used by the cache to emit related events.\r\n *\r\n * @name Phaser.Cache.BaseCache#events\r\n * @type {Phaser.Events.EventEmitter}\r\n * @since 3.0.0\r\n */\r\n this.events = new EventEmitter();\r\n },\r\n\r\n /**\r\n * Adds an item to this cache. The item is referenced by a unique string, which you are responsible\r\n * for setting and keeping track of. The item can only be retrieved by using this string.\r\n *\r\n * @method Phaser.Cache.BaseCache#add\r\n * @fires Phaser.Cache.Events#ADD\r\n * @since 3.0.0\r\n *\r\n * @param {string} key - The unique key by which the data added to the cache will be referenced.\r\n * @param {*} data - The data to be stored in the cache.\r\n *\r\n * @return {Phaser.Cache.BaseCache} This BaseCache object.\r\n */\r\n add: function (key, data)\r\n {\r\n this.entries.set(key, data);\r\n\r\n this.events.emit(Events.ADD, this, key, data);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Checks if this cache contains an item matching the given key.\r\n * This performs the same action as `BaseCache.exists`.\r\n *\r\n * @method Phaser.Cache.BaseCache#has\r\n * @since 3.0.0\r\n *\r\n * @param {string} key - The unique key of the item to be checked in this cache.\r\n *\r\n * @return {boolean} Returns `true` if the cache contains an item matching the given key, otherwise `false`.\r\n */\r\n has: function (key)\r\n {\r\n return this.entries.has(key);\r\n },\r\n\r\n /**\r\n * Checks if this cache contains an item matching the given key.\r\n * This performs the same action as `BaseCache.has` and is called directly by the Loader.\r\n *\r\n * @method Phaser.Cache.BaseCache#exists\r\n * @since 3.7.0\r\n *\r\n * @param {string} key - The unique key of the item to be checked in this cache.\r\n *\r\n * @return {boolean} Returns `true` if the cache contains an item matching the given key, otherwise `false`.\r\n */\r\n exists: function (key)\r\n {\r\n return this.entries.has(key);\r\n },\r\n\r\n /**\r\n * Gets an item from this cache based on the given key.\r\n *\r\n * @method Phaser.Cache.BaseCache#get\r\n * @since 3.0.0\r\n *\r\n * @param {string} key - The unique key of the item to be retrieved from this cache.\r\n *\r\n * @return {*} The item in the cache, or `null` if no item matching the given key was found.\r\n */\r\n get: function (key)\r\n {\r\n return this.entries.get(key);\r\n },\r\n\r\n /**\r\n * Removes and item from this cache based on the given key.\r\n *\r\n * If an entry matching the key is found it is removed from the cache and a `remove` event emitted.\r\n * No additional checks are done on the item removed. If other systems or parts of your game code\r\n * are relying on this item, it is up to you to sever those relationships prior to removing the item.\r\n *\r\n * @method Phaser.Cache.BaseCache#remove\r\n * @fires Phaser.Cache.Events#REMOVE\r\n * @since 3.0.0\r\n *\r\n * @param {string} key - The unique key of the item to remove from the cache.\r\n *\r\n * @return {Phaser.Cache.BaseCache} This BaseCache object.\r\n */\r\n remove: function (key)\r\n {\r\n var entry = this.get(key);\r\n\r\n if (entry)\r\n {\r\n this.entries.delete(key);\r\n\r\n this.events.emit(Events.REMOVE, this, key, entry.data);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Returns all keys in use in this cache.\r\n *\r\n * @method Phaser.Cache.BaseCache#getKeys\r\n * @since 3.17.0\r\n *\r\n * @return {string[]} Array containing all the keys.\r\n */\r\n getKeys: function ()\r\n {\r\n return this.entries.keys();\r\n },\r\n\r\n /**\r\n * Destroys this cache and all items within it.\r\n *\r\n * @method Phaser.Cache.BaseCache#destroy\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.entries.clear();\r\n this.events.removeAllListeners();\r\n\r\n this.entries = null;\r\n this.events = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = BaseCache;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYWNoZS9CYXNlQ2FjaGUuanM/ZTZlNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGdFQUFnQjtBQUNwQyxnQkFBZ0IsbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDeEMsbUJBQW1CLG1CQUFPLENBQUMsNERBQWU7QUFDMUMsYUFBYSxtQkFBTyxDQUFDLGlFQUFVOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLEVBQUU7QUFDakI7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsRUFBRTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NhY2hlL0Jhc2VDYWNoZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEN1c3RvbU1hcCA9IHJlcXVpcmUoJy4uL3N0cnVjdHMvTWFwJyk7XHJcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuL2V2ZW50cycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIEJhc2VDYWNoZSBpcyBhIGJhc2UgQ2FjaGUgY2xhc3MgdGhhdCBjYW4gYmUgdXNlZCBmb3Igc3RvcmluZyByZWZlcmVuY2VzIHRvIGFueSBraW5kIG9mIGRhdGEuXHJcbiAqXHJcbiAqIERhdGEgY2FuIGJlIGFkZGVkLCByZXRyaWV2ZWQgYW5kIHJlbW92ZWQgYmFzZWQgb24gdGhlIGdpdmVuIGtleXMuXHJcbiAqXHJcbiAqIEtleXMgYXJlIHN0cmluZy1iYXNlZC5cclxuICpcclxuICogQGNsYXNzIEJhc2VDYWNoZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkNhY2hlXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbnZhciBCYXNlQ2FjaGUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gQmFzZUNhY2hlICgpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIE1hcCBpbiB3aGljaCB0aGUgY2FjaGUgb2JqZWN0cyBhcmUgc3RvcmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogWW91IGNhbiBxdWVyeSB0aGUgTWFwIGRpcmVjdGx5IG9yIHVzZSB0aGUgQmFzZUNhY2hlIG1ldGhvZHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FjaGUuQmFzZUNhY2hlI2VudHJpZXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlN0cnVjdHMuTWFwLjxTdHJpbmcsICo+fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZW50cmllcyA9IG5ldyBDdXN0b21NYXAoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gaW5zdGFuY2Ugb2YgRXZlbnRFbWl0dGVyIHVzZWQgYnkgdGhlIGNhY2hlIHRvIGVtaXQgcmVsYXRlZCBldmVudHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FjaGUuQmFzZUNhY2hlI2V2ZW50c1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGFuIGl0ZW0gdG8gdGhpcyBjYWNoZS4gVGhlIGl0ZW0gaXMgcmVmZXJlbmNlZCBieSBhIHVuaXF1ZSBzdHJpbmcsIHdoaWNoIHlvdSBhcmUgcmVzcG9uc2libGVcclxuICAgICAqIGZvciBzZXR0aW5nIGFuZCBrZWVwaW5nIHRyYWNrIG9mLiBUaGUgaXRlbSBjYW4gb25seSBiZSByZXRyaWV2ZWQgYnkgdXNpbmcgdGhpcyBzdHJpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FjaGUuQmFzZUNhY2hlI2FkZFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYWNoZS5FdmVudHMjQUREXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBrZXkgYnkgd2hpY2ggdGhlIGRhdGEgYWRkZWQgdG8gdGhlIGNhY2hlIHdpbGwgYmUgcmVmZXJlbmNlZC5cclxuICAgICAqIEBwYXJhbSB7Kn0gZGF0YSAtIFRoZSBkYXRhIHRvIGJlIHN0b3JlZCBpbiB0aGUgY2FjaGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhY2hlLkJhc2VDYWNoZX0gVGhpcyBCYXNlQ2FjaGUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChrZXksIGRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5lbnRyaWVzLnNldChrZXksIGRhdGEpO1xyXG5cclxuICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KEV2ZW50cy5BREQsIHRoaXMsIGtleSwgZGF0YSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiB0aGlzIGNhY2hlIGNvbnRhaW5zIGFuIGl0ZW0gbWF0Y2hpbmcgdGhlIGdpdmVuIGtleS5cclxuICAgICAqIFRoaXMgcGVyZm9ybXMgdGhlIHNhbWUgYWN0aW9uIGFzIGBCYXNlQ2FjaGUuZXhpc3RzYC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYWNoZS5CYXNlQ2FjaGUjaGFzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBrZXkgb2YgdGhlIGl0ZW0gdG8gYmUgY2hlY2tlZCBpbiB0aGlzIGNhY2hlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBjYWNoZSBjb250YWlucyBhbiBpdGVtIG1hdGNoaW5nIHRoZSBnaXZlbiBrZXksIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBoYXM6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllcy5oYXMoa2V5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhpcyBjYWNoZSBjb250YWlucyBhbiBpdGVtIG1hdGNoaW5nIHRoZSBnaXZlbiBrZXkuXHJcbiAgICAgKiBUaGlzIHBlcmZvcm1zIHRoZSBzYW1lIGFjdGlvbiBhcyBgQmFzZUNhY2hlLmhhc2AgYW5kIGlzIGNhbGxlZCBkaXJlY3RseSBieSB0aGUgTG9hZGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhY2hlLkJhc2VDYWNoZSNleGlzdHNcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgdW5pcXVlIGtleSBvZiB0aGUgaXRlbSB0byBiZSBjaGVja2VkIGluIHRoaXMgY2FjaGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGNhY2hlIGNvbnRhaW5zIGFuIGl0ZW0gbWF0Y2hpbmcgdGhlIGdpdmVuIGtleSwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGV4aXN0czogZnVuY3Rpb24gKGtleSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzLmhhcyhrZXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYW4gaXRlbSBmcm9tIHRoaXMgY2FjaGUgYmFzZWQgb24gdGhlIGdpdmVuIGtleS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYWNoZS5CYXNlQ2FjaGUjZ2V0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBrZXkgb2YgdGhlIGl0ZW0gdG8gYmUgcmV0cmlldmVkIGZyb20gdGhpcyBjYWNoZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsqfSBUaGUgaXRlbSBpbiB0aGUgY2FjaGUsIG9yIGBudWxsYCBpZiBubyBpdGVtIG1hdGNoaW5nIHRoZSBnaXZlbiBrZXkgd2FzIGZvdW5kLlxyXG4gICAgICovXHJcbiAgICBnZXQ6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllcy5nZXQoa2V5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGFuZCBpdGVtIGZyb20gdGhpcyBjYWNoZSBiYXNlZCBvbiB0aGUgZ2l2ZW4ga2V5LlxyXG4gICAgICpcclxuICAgICAqIElmIGFuIGVudHJ5IG1hdGNoaW5nIHRoZSBrZXkgaXMgZm91bmQgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZSBhbmQgYSBgcmVtb3ZlYCBldmVudCBlbWl0dGVkLlxyXG4gICAgICogTm8gYWRkaXRpb25hbCBjaGVja3MgYXJlIGRvbmUgb24gdGhlIGl0ZW0gcmVtb3ZlZC4gSWYgb3RoZXIgc3lzdGVtcyBvciBwYXJ0cyBvZiB5b3VyIGdhbWUgY29kZVxyXG4gICAgICogYXJlIHJlbHlpbmcgb24gdGhpcyBpdGVtLCBpdCBpcyB1cCB0byB5b3UgdG8gc2V2ZXIgdGhvc2UgcmVsYXRpb25zaGlwcyBwcmlvciB0byByZW1vdmluZyB0aGUgaXRlbS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYWNoZS5CYXNlQ2FjaGUjcmVtb3ZlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhY2hlLkV2ZW50cyNSRU1PVkVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgdW5pcXVlIGtleSBvZiB0aGUgaXRlbSB0byByZW1vdmUgZnJvbSB0aGUgY2FjaGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhY2hlLkJhc2VDYWNoZX0gVGhpcyBCYXNlQ2FjaGUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZW1vdmU6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5nZXQoa2V5KTtcclxuXHJcbiAgICAgICAgaWYgKGVudHJ5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5lbnRyaWVzLmRlbGV0ZShrZXkpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5ldmVudHMuZW1pdChFdmVudHMuUkVNT1ZFLCB0aGlzLCBrZXksIGVudHJ5LmRhdGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbGwga2V5cyBpbiB1c2UgaW4gdGhpcyBjYWNoZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYWNoZS5CYXNlQ2FjaGUjZ2V0S2V5c1xyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfSBBcnJheSBjb250YWluaW5nIGFsbCB0aGUga2V5cy5cclxuICAgICAqL1xyXG4gICAgZ2V0S2V5czogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzLmtleXMoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGlzIGNhY2hlIGFuZCBhbGwgaXRlbXMgd2l0aGluIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhY2hlLkJhc2VDYWNoZSNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmVudHJpZXMuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmV2ZW50cy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcclxuXHJcbiAgICAgICAgdGhpcy5lbnRyaWVzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmV2ZW50cyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQmFzZUNhY2hlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cache/BaseCache.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cache/CacheManager.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/cache/CacheManager.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BaseCache = __webpack_require__(/*! ./BaseCache */ \"./node_modules/phaser/src/cache/BaseCache.js\");\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GameEvents = __webpack_require__(/*! ../core/events */ \"./node_modules/phaser/src/core/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Cache Manager is the global cache owned and maintained by the Game instance.\r\n *\r\n * Various systems, such as the file Loader, rely on this cache in order to store the files\r\n * it has loaded. The manager itself doesn't store any files, but instead owns multiple BaseCache\r\n * instances, one per type of file. You can also add your own custom caches.\r\n *\r\n * @class CacheManager\r\n * @memberof Phaser.Cache\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Game} game - A reference to the Phaser.Game instance that owns this CacheManager.\r\n */\r\nvar CacheManager = new Class({\r\n\r\n initialize:\r\n\r\n function CacheManager (game)\r\n {\r\n /**\r\n * A reference to the Phaser.Game instance that owns this CacheManager.\r\n *\r\n * @name Phaser.Cache.CacheManager#game\r\n * @type {Phaser.Game}\r\n * @protected\r\n * @since 3.0.0\r\n */\r\n this.game = game;\r\n\r\n /**\r\n * A Cache storing all binary files, typically added via the Loader.\r\n *\r\n * @name Phaser.Cache.CacheManager#binary\r\n * @type {Phaser.Cache.BaseCache}\r\n * @since 3.0.0\r\n */\r\n this.binary = new BaseCache();\r\n\r\n /**\r\n * A Cache storing all bitmap font data files, typically added via the Loader.\r\n * Only the font data is stored in this cache, the textures are part of the Texture Manager.\r\n *\r\n * @name Phaser.Cache.CacheManager#bitmapFont\r\n * @type {Phaser.Cache.BaseCache}\r\n * @since 3.0.0\r\n */\r\n this.bitmapFont = new BaseCache();\r\n\r\n /**\r\n * A Cache storing all JSON data files, typically added via the Loader.\r\n *\r\n * @name Phaser.Cache.CacheManager#json\r\n * @type {Phaser.Cache.BaseCache}\r\n * @since 3.0.0\r\n */\r\n this.json = new BaseCache();\r\n\r\n /**\r\n * A Cache storing all physics data files, typically added via the Loader.\r\n *\r\n * @name Phaser.Cache.CacheManager#physics\r\n * @type {Phaser.Cache.BaseCache}\r\n * @since 3.0.0\r\n */\r\n this.physics = new BaseCache();\r\n\r\n /**\r\n * A Cache storing all shader source files, typically added via the Loader.\r\n *\r\n * @name Phaser.Cache.CacheManager#shader\r\n * @type {Phaser.Cache.BaseCache}\r\n * @since 3.0.0\r\n */\r\n this.shader = new BaseCache();\r\n\r\n /**\r\n * A Cache storing all non-streaming audio files, typically added via the Loader.\r\n *\r\n * @name Phaser.Cache.CacheManager#audio\r\n * @type {Phaser.Cache.BaseCache}\r\n * @since 3.0.0\r\n */\r\n this.audio = new BaseCache();\r\n\r\n /**\r\n * A Cache storing all non-streaming video files, typically added via the Loader.\r\n *\r\n * @name Phaser.Cache.CacheManager#video\r\n * @type {Phaser.Cache.BaseCache}\r\n * @since 3.20.0\r\n */\r\n this.video = new BaseCache();\r\n\r\n /**\r\n * A Cache storing all text files, typically added via the Loader.\r\n *\r\n * @name Phaser.Cache.CacheManager#text\r\n * @type {Phaser.Cache.BaseCache}\r\n * @since 3.0.0\r\n */\r\n this.text = new BaseCache();\r\n\r\n /**\r\n * A Cache storing all html files, typically added via the Loader.\r\n *\r\n * @name Phaser.Cache.CacheManager#html\r\n * @type {Phaser.Cache.BaseCache}\r\n * @since 3.12.0\r\n */\r\n this.html = new BaseCache();\r\n\r\n /**\r\n * A Cache storing all WaveFront OBJ files, typically added via the Loader.\r\n *\r\n * @name Phaser.Cache.CacheManager#obj\r\n * @type {Phaser.Cache.BaseCache}\r\n * @since 3.0.0\r\n */\r\n this.obj = new BaseCache();\r\n\r\n /**\r\n * A Cache storing all tilemap data files, typically added via the Loader.\r\n * Only the data is stored in this cache, the textures are part of the Texture Manager.\r\n *\r\n * @name Phaser.Cache.CacheManager#tilemap\r\n * @type {Phaser.Cache.BaseCache}\r\n * @since 3.0.0\r\n */\r\n this.tilemap = new BaseCache();\r\n\r\n /**\r\n * A Cache storing all xml data files, typically added via the Loader.\r\n *\r\n * @name Phaser.Cache.CacheManager#xml\r\n * @type {Phaser.Cache.BaseCache}\r\n * @since 3.0.0\r\n */\r\n this.xml = new BaseCache();\r\n\r\n /**\r\n * An object that contains your own custom BaseCache entries.\r\n * Add to this via the `addCustom` method.\r\n *\r\n * @name Phaser.Cache.CacheManager#custom\r\n * @type {Object.<Phaser.Cache.BaseCache>}\r\n * @since 3.0.0\r\n */\r\n this.custom = {};\r\n\r\n this.game.events.once(GameEvents.DESTROY, this.destroy, this);\r\n },\r\n\r\n /**\r\n * Add your own custom Cache for storing your own files.\r\n * The cache will be available under `Cache.custom.key`.\r\n * The cache will only be created if the key is not already in use.\r\n *\r\n * @method Phaser.Cache.CacheManager#addCustom\r\n * @since 3.0.0\r\n *\r\n * @param {string} key - The unique key of your custom cache.\r\n *\r\n * @return {Phaser.Cache.BaseCache} A reference to the BaseCache that was created. If the key was already in use, a reference to the existing cache is returned instead.\r\n */\r\n addCustom: function (key)\r\n {\r\n if (!this.custom.hasOwnProperty(key))\r\n {\r\n this.custom[key] = new BaseCache();\r\n }\r\n\r\n return this.custom[key];\r\n },\r\n\r\n /**\r\n * Removes all entries from all BaseCaches and destroys all custom caches.\r\n *\r\n * @method Phaser.Cache.CacheManager#destroy\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n var keys = [\r\n 'binary',\r\n 'bitmapFont',\r\n 'json',\r\n 'physics',\r\n 'shader',\r\n 'audio',\r\n 'video',\r\n 'text',\r\n 'html',\r\n 'obj',\r\n 'tilemap',\r\n 'xml'\r\n ];\r\n\r\n for (var i = 0; i < keys.length; i++)\r\n {\r\n this[keys[i]].destroy();\r\n this[keys[i]] = null;\r\n }\r\n\r\n for (var key in this.custom)\r\n {\r\n this.custom[key].destroy();\r\n }\r\n\r\n this.custom = null;\r\n\r\n this.game = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = CacheManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYWNoZS9DYWNoZU1hbmFnZXIuanM/MmYyZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMsaUVBQWE7QUFDckMsWUFBWSxtQkFBTyxDQUFDLGdFQUFnQjtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyxzRUFBZ0I7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FjaGUvQ2FjaGVNYW5hZ2VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQmFzZUNhY2hlID0gcmVxdWlyZSgnLi9CYXNlQ2FjaGUnKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEdhbWVFdmVudHMgPSByZXF1aXJlKCcuLi9jb3JlL2V2ZW50cycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIENhY2hlIE1hbmFnZXIgaXMgdGhlIGdsb2JhbCBjYWNoZSBvd25lZCBhbmQgbWFpbnRhaW5lZCBieSB0aGUgR2FtZSBpbnN0YW5jZS5cclxuICpcclxuICogVmFyaW91cyBzeXN0ZW1zLCBzdWNoIGFzIHRoZSBmaWxlIExvYWRlciwgcmVseSBvbiB0aGlzIGNhY2hlIGluIG9yZGVyIHRvIHN0b3JlIHRoZSBmaWxlc1xyXG4gKiBpdCBoYXMgbG9hZGVkLiBUaGUgbWFuYWdlciBpdHNlbGYgZG9lc24ndCBzdG9yZSBhbnkgZmlsZXMsIGJ1dCBpbnN0ZWFkIG93bnMgbXVsdGlwbGUgQmFzZUNhY2hlXHJcbiAqIGluc3RhbmNlcywgb25lIHBlciB0eXBlIG9mIGZpbGUuIFlvdSBjYW4gYWxzbyBhZGQgeW91ciBvd24gY3VzdG9tIGNhY2hlcy5cclxuICpcclxuICogQGNsYXNzIENhY2hlTWFuYWdlclxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkNhY2hlXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZX0gZ2FtZSAtIEEgcmVmZXJlbmNlIHRvIHRoZSBQaGFzZXIuR2FtZSBpbnN0YW5jZSB0aGF0IG93bnMgdGhpcyBDYWNoZU1hbmFnZXIuXHJcbiAqL1xyXG52YXIgQ2FjaGVNYW5hZ2VyID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIENhY2hlTWFuYWdlciAoZ2FtZSlcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgUGhhc2VyLkdhbWUgaW5zdGFuY2UgdGhhdCBvd25zIHRoaXMgQ2FjaGVNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhY2hlLkNhY2hlTWFuYWdlciNnYW1lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lfVxyXG4gICAgICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdhbWUgPSBnYW1lO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIENhY2hlIHN0b3JpbmcgYWxsIGJpbmFyeSBmaWxlcywgdHlwaWNhbGx5IGFkZGVkIHZpYSB0aGUgTG9hZGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhY2hlLkNhY2hlTWFuYWdlciNiaW5hcnlcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhY2hlLkJhc2VDYWNoZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJpbmFyeSA9IG5ldyBCYXNlQ2FjaGUoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBDYWNoZSBzdG9yaW5nIGFsbCBiaXRtYXAgZm9udCBkYXRhIGZpbGVzLCB0eXBpY2FsbHkgYWRkZWQgdmlhIHRoZSBMb2FkZXIuXHJcbiAgICAgICAgICogT25seSB0aGUgZm9udCBkYXRhIGlzIHN0b3JlZCBpbiB0aGlzIGNhY2hlLCB0aGUgdGV4dHVyZXMgYXJlIHBhcnQgb2YgdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYWNoZS5DYWNoZU1hbmFnZXIjYml0bWFwRm9udFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQ2FjaGUuQmFzZUNhY2hlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYml0bWFwRm9udCA9IG5ldyBCYXNlQ2FjaGUoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBDYWNoZSBzdG9yaW5nIGFsbCBKU09OIGRhdGEgZmlsZXMsIHR5cGljYWxseSBhZGRlZCB2aWEgdGhlIExvYWRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYWNoZS5DYWNoZU1hbmFnZXIjanNvblxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQ2FjaGUuQmFzZUNhY2hlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuanNvbiA9IG5ldyBCYXNlQ2FjaGUoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBDYWNoZSBzdG9yaW5nIGFsbCBwaHlzaWNzIGRhdGEgZmlsZXMsIHR5cGljYWxseSBhZGRlZCB2aWEgdGhlIExvYWRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYWNoZS5DYWNoZU1hbmFnZXIjcGh5c2ljc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQ2FjaGUuQmFzZUNhY2hlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGh5c2ljcyA9IG5ldyBCYXNlQ2FjaGUoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBDYWNoZSBzdG9yaW5nIGFsbCBzaGFkZXIgc291cmNlIGZpbGVzLCB0eXBpY2FsbHkgYWRkZWQgdmlhIHRoZSBMb2FkZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FjaGUuQ2FjaGVNYW5hZ2VyI3NoYWRlclxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQ2FjaGUuQmFzZUNhY2hlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2hhZGVyID0gbmV3IEJhc2VDYWNoZSgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIENhY2hlIHN0b3JpbmcgYWxsIG5vbi1zdHJlYW1pbmcgYXVkaW8gZmlsZXMsIHR5cGljYWxseSBhZGRlZCB2aWEgdGhlIExvYWRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYWNoZS5DYWNoZU1hbmFnZXIjYXVkaW9cclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhY2hlLkJhc2VDYWNoZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmF1ZGlvID0gbmV3IEJhc2VDYWNoZSgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIENhY2hlIHN0b3JpbmcgYWxsIG5vbi1zdHJlYW1pbmcgdmlkZW8gZmlsZXMsIHR5cGljYWxseSBhZGRlZCB2aWEgdGhlIExvYWRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYWNoZS5DYWNoZU1hbmFnZXIjdmlkZW9cclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhY2hlLkJhc2VDYWNoZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52aWRlbyA9IG5ldyBCYXNlQ2FjaGUoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBDYWNoZSBzdG9yaW5nIGFsbCB0ZXh0IGZpbGVzLCB0eXBpY2FsbHkgYWRkZWQgdmlhIHRoZSBMb2FkZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FjaGUuQ2FjaGVNYW5hZ2VyI3RleHRcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhY2hlLkJhc2VDYWNoZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRleHQgPSBuZXcgQmFzZUNhY2hlKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgQ2FjaGUgc3RvcmluZyBhbGwgaHRtbCBmaWxlcywgdHlwaWNhbGx5IGFkZGVkIHZpYSB0aGUgTG9hZGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhY2hlLkNhY2hlTWFuYWdlciNodG1sXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5DYWNoZS5CYXNlQ2FjaGV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaHRtbCA9IG5ldyBCYXNlQ2FjaGUoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBDYWNoZSBzdG9yaW5nIGFsbCBXYXZlRnJvbnQgT0JKIGZpbGVzLCB0eXBpY2FsbHkgYWRkZWQgdmlhIHRoZSBMb2FkZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FjaGUuQ2FjaGVNYW5hZ2VyI29ialxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQ2FjaGUuQmFzZUNhY2hlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub2JqID0gbmV3IEJhc2VDYWNoZSgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIENhY2hlIHN0b3JpbmcgYWxsIHRpbGVtYXAgZGF0YSBmaWxlcywgdHlwaWNhbGx5IGFkZGVkIHZpYSB0aGUgTG9hZGVyLlxyXG4gICAgICAgICAqIE9ubHkgdGhlIGRhdGEgaXMgc3RvcmVkIGluIHRoaXMgY2FjaGUsIHRoZSB0ZXh0dXJlcyBhcmUgcGFydCBvZiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhY2hlLkNhY2hlTWFuYWdlciN0aWxlbWFwXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5DYWNoZS5CYXNlQ2FjaGV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aWxlbWFwID0gbmV3IEJhc2VDYWNoZSgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIENhY2hlIHN0b3JpbmcgYWxsIHhtbCBkYXRhIGZpbGVzLCB0eXBpY2FsbHkgYWRkZWQgdmlhIHRoZSBMb2FkZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FjaGUuQ2FjaGVNYW5hZ2VyI3htbFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQ2FjaGUuQmFzZUNhY2hlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueG1sID0gbmV3IEJhc2VDYWNoZSgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBjb250YWlucyB5b3VyIG93biBjdXN0b20gQmFzZUNhY2hlIGVudHJpZXMuXHJcbiAgICAgICAgICogQWRkIHRvIHRoaXMgdmlhIHRoZSBgYWRkQ3VzdG9tYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FjaGUuQ2FjaGVNYW5hZ2VyI2N1c3RvbVxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3QuPFBoYXNlci5DYWNoZS5CYXNlQ2FjaGU+fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3VzdG9tID0ge307XHJcblxyXG4gICAgICAgIHRoaXMuZ2FtZS5ldmVudHMub25jZShHYW1lRXZlbnRzLkRFU1RST1ksIHRoaXMuZGVzdHJveSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIHlvdXIgb3duIGN1c3RvbSBDYWNoZSBmb3Igc3RvcmluZyB5b3VyIG93biBmaWxlcy5cclxuICAgICAqIFRoZSBjYWNoZSB3aWxsIGJlIGF2YWlsYWJsZSB1bmRlciBgQ2FjaGUuY3VzdG9tLmtleWAuXHJcbiAgICAgKiBUaGUgY2FjaGUgd2lsbCBvbmx5IGJlIGNyZWF0ZWQgaWYgdGhlIGtleSBpcyBub3QgYWxyZWFkeSBpbiB1c2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FjaGUuQ2FjaGVNYW5hZ2VyI2FkZEN1c3RvbVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSB1bmlxdWUga2V5IG9mIHlvdXIgY3VzdG9tIGNhY2hlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYWNoZS5CYXNlQ2FjaGV9IEEgcmVmZXJlbmNlIHRvIHRoZSBCYXNlQ2FjaGUgdGhhdCB3YXMgY3JlYXRlZC4gSWYgdGhlIGtleSB3YXMgYWxyZWFkeSBpbiB1c2UsIGEgcmVmZXJlbmNlIHRvIHRoZSBleGlzdGluZyBjYWNoZSBpcyByZXR1cm5lZCBpbnN0ZWFkLlxyXG4gICAgICovXHJcbiAgICBhZGRDdXN0b206IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1c3RvbS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jdXN0b21ba2V5XSA9IG5ldyBCYXNlQ2FjaGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmN1c3RvbVtrZXldO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYWxsIGVudHJpZXMgZnJvbSBhbGwgQmFzZUNhY2hlcyBhbmQgZGVzdHJveXMgYWxsIGN1c3RvbSBjYWNoZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FjaGUuQ2FjaGVNYW5hZ2VyI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBrZXlzID0gW1xyXG4gICAgICAgICAgICAnYmluYXJ5JyxcclxuICAgICAgICAgICAgJ2JpdG1hcEZvbnQnLFxyXG4gICAgICAgICAgICAnanNvbicsXHJcbiAgICAgICAgICAgICdwaHlzaWNzJyxcclxuICAgICAgICAgICAgJ3NoYWRlcicsXHJcbiAgICAgICAgICAgICdhdWRpbycsXHJcbiAgICAgICAgICAgICd2aWRlbycsXHJcbiAgICAgICAgICAgICd0ZXh0JyxcclxuICAgICAgICAgICAgJ2h0bWwnLFxyXG4gICAgICAgICAgICAnb2JqJyxcclxuICAgICAgICAgICAgJ3RpbGVtYXAnLFxyXG4gICAgICAgICAgICAneG1sJ1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXNba2V5c1tpXV0uZGVzdHJveSgpO1xyXG4gICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmN1c3RvbSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tW2tleV0uZGVzdHJveSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jdXN0b20gPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLmdhbWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENhY2hlTWFuYWdlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cache/CacheManager.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cache/events/ADD_EVENT.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/cache/events/ADD_EVENT.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Cache Add Event.\r\n * \r\n * This event is dispatched by any Cache that extends the BaseCache each time a new object is added to it.\r\n *\r\n * @event Phaser.Cache.Events#ADD\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Cache.BaseCache} cache - The cache to which the object was added.\r\n * @param {string} key - The key of the object added to the cache.\r\n * @param {*} object - A reference to the object that was added to the cache.\r\n */\r\nmodule.exports = 'add';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYWNoZS9ldmVudHMvQUREX0VWRU5ULmpzPzAzYjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVCQUF1QjtBQUNsQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxFQUFFO0FBQ2I7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NhY2hlL2V2ZW50cy9BRERfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgQ2FjaGUgQWRkIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGFueSBDYWNoZSB0aGF0IGV4dGVuZHMgdGhlIEJhc2VDYWNoZSBlYWNoIHRpbWUgYSBuZXcgb2JqZWN0IGlzIGFkZGVkIHRvIGl0LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkNhY2hlLkV2ZW50cyNBRERcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYWNoZS5CYXNlQ2FjaGV9IGNhY2hlIC0gVGhlIGNhY2hlIHRvIHdoaWNoIHRoZSBvYmplY3Qgd2FzIGFkZGVkLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgb2JqZWN0IGFkZGVkIHRvIHRoZSBjYWNoZS5cclxuICogQHBhcmFtIHsqfSBvYmplY3QgLSBBIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBjYWNoZS5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2FkZCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cache/events/ADD_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cache/events/REMOVE_EVENT.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/cache/events/REMOVE_EVENT.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Cache Remove Event.\r\n * \r\n * This event is dispatched by any Cache that extends the BaseCache each time an object is removed from it.\r\n *\r\n * @event Phaser.Cache.Events#REMOVE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Cache.BaseCache} cache - The cache from which the object was removed.\r\n * @param {string} key - The key of the object removed from the cache.\r\n * @param {*} object - A reference to the object that was removed from the cache.\r\n */\r\nmodule.exports = 'remove';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYWNoZS9ldmVudHMvUkVNT1ZFX0VWRU5ULmpzPzNiYzEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVCQUF1QjtBQUNsQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxFQUFFO0FBQ2I7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NhY2hlL2V2ZW50cy9SRU1PVkVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgQ2FjaGUgUmVtb3ZlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGFueSBDYWNoZSB0aGF0IGV4dGVuZHMgdGhlIEJhc2VDYWNoZSBlYWNoIHRpbWUgYW4gb2JqZWN0IGlzIHJlbW92ZWQgZnJvbSBpdC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5DYWNoZS5FdmVudHMjUkVNT1ZFXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuQ2FjaGUuQmFzZUNhY2hlfSBjYWNoZSAtIFRoZSBjYWNoZSBmcm9tIHdoaWNoIHRoZSBvYmplY3Qgd2FzIHJlbW92ZWQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBvYmplY3QgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZS5cclxuICogQHBhcmFtIHsqfSBvYmplY3QgLSBBIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IHRoYXQgd2FzIHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdyZW1vdmUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cache/events/REMOVE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cache/events/index.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/cache/events/index.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Cache.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n ADD: __webpack_require__(/*! ./ADD_EVENT */ \"./node_modules/phaser/src/cache/events/ADD_EVENT.js\"),\r\n REMOVE: __webpack_require__(/*! ./REMOVE_EVENT */ \"./node_modules/phaser/src/cache/events/REMOVE_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYWNoZS9ldmVudHMvaW5kZXguanM/NzEwNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLFNBQVMsbUJBQU8sQ0FBQyx3RUFBYTtBQUM5QixZQUFZLG1CQUFPLENBQUMsOEVBQWdCOztBQUVwQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NhY2hlL2V2ZW50cy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkNhY2hlLkV2ZW50c1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEFERDogcmVxdWlyZSgnLi9BRERfRVZFTlQnKSxcclxuICAgIFJFTU9WRTogcmVxdWlyZSgnLi9SRU1PVkVfRVZFTlQnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cache/events/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cache/index.js":
/*!************************************************!*\
!*** ./node_modules/phaser/src/cache/index.js ***!
\************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Cache\r\n */\r\n\r\nmodule.exports = {\r\n\r\n BaseCache: __webpack_require__(/*! ./BaseCache */ \"./node_modules/phaser/src/cache/BaseCache.js\"),\r\n CacheManager: __webpack_require__(/*! ./CacheManager */ \"./node_modules/phaser/src/cache/CacheManager.js\"),\r\n Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/cache/events/index.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYWNoZS9pbmRleC5qcz8zOTRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLGlFQUFhO0FBQ3BDLGtCQUFrQixtQkFBTyxDQUFDLHVFQUFnQjtBQUMxQyxZQUFZLG1CQUFPLENBQUMsaUVBQVU7O0FBRTlCIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FjaGUvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5DYWNoZVxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEJhc2VDYWNoZTogcmVxdWlyZSgnLi9CYXNlQ2FjaGUnKSxcclxuICAgIENhY2hlTWFuYWdlcjogcmVxdWlyZSgnLi9DYWNoZU1hbmFnZXInKSxcclxuICAgIEV2ZW50czogcmVxdWlyZSgnLi9ldmVudHMnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cache/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/BaseCamera.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/BaseCamera.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../../gameobjects/components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar DegToRad = __webpack_require__(/*! ../../math/DegToRad */ \"./node_modules/phaser/src/math/DegToRad.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/cameras/2d/events/index.js\");\r\nvar Rectangle = __webpack_require__(/*! ../../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar TransformMatrix = __webpack_require__(/*! ../../gameobjects/components/TransformMatrix */ \"./node_modules/phaser/src/gameobjects/components/TransformMatrix.js\");\r\nvar ValueToColor = __webpack_require__(/*! ../../display/color/ValueToColor */ \"./node_modules/phaser/src/display/color/ValueToColor.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Base Camera class.\r\n *\r\n * The Camera is the way in which all games are rendered in Phaser. They provide a view into your game world,\r\n * and can be positioned, rotated, zoomed and scrolled accordingly.\r\n *\r\n * A Camera consists of two elements: The viewport and the scroll values.\r\n *\r\n * The viewport is the physical position and size of the Camera within your game. Cameras, by default, are\r\n * created the same size as your game, but their position and size can be set to anything. This means if you\r\n * wanted to create a camera that was 320x200 in size, positioned in the bottom-right corner of your game,\r\n * you'd adjust the viewport to do that (using methods like `setViewport` and `setSize`).\r\n *\r\n * If you wish to change where the Camera is looking in your game, then you scroll it. You can do this\r\n * via the properties `scrollX` and `scrollY` or the method `setScroll`. Scrolling has no impact on the\r\n * viewport, and changing the viewport has no impact on the scrolling.\r\n *\r\n * By default a Camera will render all Game Objects it can see. You can change this using the `ignore` method,\r\n * allowing you to filter Game Objects out on a per-Camera basis.\r\n * \r\n * The Base Camera is extended by the Camera class, which adds in special effects including Fade,\r\n * Flash and Camera Shake, as well as the ability to follow Game Objects.\r\n * \r\n * The Base Camera was introduced in Phaser 3.12. It was split off from the Camera class, to allow\r\n * you to isolate special effects as needed. Therefore the 'since' values for properties of this class relate\r\n * to when they were added to the Camera class.\r\n *\r\n * @class BaseCamera\r\n * @memberof Phaser.Cameras.Scene2D\r\n * @constructor\r\n * @since 3.12.0\r\n * \r\n * @extends Phaser.Events.EventEmitter\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {number} x - The x position of the Camera, relative to the top-left of the game canvas.\r\n * @param {number} y - The y position of the Camera, relative to the top-left of the game canvas.\r\n * @param {number} width - The width of the Camera, in pixels.\r\n * @param {number} height - The height of the Camera, in pixels.\r\n */\r\nvar BaseCamera = new Class({\r\n\r\n Extends: EventEmitter,\r\n\r\n Mixins: [\r\n Components.Alpha,\r\n Components.Visible\r\n ],\r\n\r\n initialize:\r\n\r\n function BaseCamera (x, y, width, height)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n if (width === undefined) { width = 0; }\r\n if (height === undefined) { height = 0; }\r\n\r\n EventEmitter.call(this);\r\n\r\n /**\r\n * A reference to the Scene this camera belongs to.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#scene\r\n * @type {Phaser.Scene}\r\n * @since 3.0.0\r\n */\r\n this.scene;\r\n\r\n /**\r\n * A reference to the Game Scene Manager.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#sceneManager\r\n * @type {Phaser.Scenes.SceneManager}\r\n * @since 3.12.0\r\n */\r\n this.sceneManager;\r\n\r\n /**\r\n * A reference to the Game Scale Manager.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#scaleManager\r\n * @type {Phaser.Scale.ScaleManager}\r\n * @since 3.16.0\r\n */\r\n this.scaleManager;\r\n\r\n /**\r\n * A reference to the Scene's Camera Manager to which this Camera belongs.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#cameraManager\r\n * @type {Phaser.Cameras.Scene2D.CameraManager}\r\n * @since 3.17.0\r\n */\r\n this.cameraManager;\r\n\r\n /**\r\n * The Camera ID. Assigned by the Camera Manager and used to handle camera exclusion.\r\n * This value is a bitmask.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#id\r\n * @type {integer}\r\n * @readonly\r\n * @since 3.11.0\r\n */\r\n this.id = 0;\r\n\r\n /**\r\n * The name of the Camera. This is left empty for your own use.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#name\r\n * @type {string}\r\n * @default ''\r\n * @since 3.0.0\r\n */\r\n this.name = '';\r\n\r\n /**\r\n * This property is un-used in v3.16.\r\n * \r\n * The resolution of the Game, used in most Camera calculations.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#resolution\r\n * @type {number}\r\n * @readonly\r\n * @deprecated\r\n * @since 3.12.0\r\n */\r\n this.resolution = 1;\r\n\r\n /**\r\n * Should this camera round its pixel values to integers?\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#roundPixels\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.roundPixels = false;\r\n\r\n /**\r\n * Is this Camera visible or not?\r\n *\r\n * A visible camera will render and perform input tests.\r\n * An invisible camera will not render anything and will skip input tests.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#visible\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.10.0\r\n */\r\n\r\n /**\r\n * Is this Camera using a bounds to restrict scrolling movement?\r\n *\r\n * Set this property along with the bounds via `Camera.setBounds`.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#useBounds\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.useBounds = false;\r\n\r\n /**\r\n * The World View is a Rectangle that defines the area of the 'world' the Camera is currently looking at.\r\n * This factors in the Camera viewport size, zoom and scroll position and is updated in the Camera preRender step.\r\n * If you have enabled Camera bounds the worldview will be clamped to those bounds accordingly.\r\n * You can use it for culling or intersection checks.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#worldView\r\n * @type {Phaser.Geom.Rectangle}\r\n * @readonly\r\n * @since 3.11.0\r\n */\r\n this.worldView = new Rectangle();\r\n\r\n /**\r\n * Is this Camera dirty?\r\n * \r\n * A dirty Camera has had either its viewport size, bounds, scroll, rotation or zoom levels changed since the last frame.\r\n * \r\n * This flag is cleared during the `postRenderCamera` method of the renderer.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#dirty\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.11.0\r\n */\r\n this.dirty = true;\r\n\r\n /**\r\n * The x position of the Camera viewport, relative to the top-left of the game canvas.\r\n * The viewport is the area into which the camera renders.\r\n * To adjust the position the camera is looking at in the game world, see the `scrollX` value.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#x\r\n * @type {number}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._x = x;\r\n\r\n /**\r\n * The y position of the Camera, relative to the top-left of the game canvas.\r\n * The viewport is the area into which the camera renders.\r\n * To adjust the position the camera is looking at in the game world, see the `scrollY` value.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#y\r\n * @type {number}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._y = y;\r\n\r\n /**\r\n * Internal Camera X value multiplied by the resolution.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#_cx\r\n * @type {number}\r\n * @private\r\n * @since 3.12.0\r\n */\r\n this._cx = 0;\r\n\r\n /**\r\n * Internal Camera Y value multiplied by the resolution.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#_cy\r\n * @type {number}\r\n * @private\r\n * @since 3.12.0\r\n */\r\n this._cy = 0;\r\n\r\n /**\r\n * Internal Camera Width value multiplied by the resolution.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#_cw\r\n * @type {number}\r\n * @private\r\n * @since 3.12.0\r\n */\r\n this._cw = 0;\r\n\r\n /**\r\n * Internal Camera Height value multiplied by the resolution.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#_ch\r\n * @type {number}\r\n * @private\r\n * @since 3.12.0\r\n */\r\n this._ch = 0;\r\n\r\n /**\r\n * The width of the Camera viewport, in pixels.\r\n *\r\n * The viewport is the area into which the Camera renders. Setting the viewport does\r\n * not restrict where the Camera can scroll to.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#_width\r\n * @type {number}\r\n * @private\r\n * @since 3.11.0\r\n */\r\n this._width = width;\r\n\r\n /**\r\n * The height of the Camera viewport, in pixels.\r\n *\r\n * The viewport is the area into which the Camera renders. Setting the viewport does\r\n * not restrict where the Camera can scroll to.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#_height\r\n * @type {number}\r\n * @private\r\n * @since 3.11.0\r\n */\r\n this._height = height;\r\n\r\n /**\r\n * The bounds the camera is restrained to during scrolling.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#_bounds\r\n * @type {Phaser.Geom.Rectangle}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._bounds = new Rectangle();\r\n\r\n /**\r\n * The horizontal scroll position of this Camera.\r\n *\r\n * Change this value to cause the Camera to scroll around your Scene.\r\n *\r\n * Alternatively, setting the Camera to follow a Game Object, via the `startFollow` method,\r\n * will automatically adjust the Camera scroll values accordingly.\r\n *\r\n * You can set the bounds within which the Camera can scroll via the `setBounds` method.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#_scrollX\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.11.0\r\n */\r\n this._scrollX = 0;\r\n\r\n /**\r\n * The vertical scroll position of this Camera.\r\n *\r\n * Change this value to cause the Camera to scroll around your Scene.\r\n *\r\n * Alternatively, setting the Camera to follow a Game Object, via the `startFollow` method,\r\n * will automatically adjust the Camera scroll values accordingly.\r\n *\r\n * You can set the bounds within which the Camera can scroll via the `setBounds` method.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#_scrollY\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.11.0\r\n */\r\n this._scrollY = 0;\r\n\r\n /**\r\n * The Camera zoom value. Change this value to zoom in, or out of, a Scene.\r\n *\r\n * A value of 0.5 would zoom the Camera out, so you can now see twice as much\r\n * of the Scene as before. A value of 2 would zoom the Camera in, so every pixel\r\n * now takes up 2 pixels when rendered.\r\n *\r\n * Set to 1 to return to the default zoom level.\r\n *\r\n * Be careful to never set this value to zero.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#_zoom\r\n * @type {number}\r\n * @private\r\n * @default 1\r\n * @since 3.11.0\r\n */\r\n this._zoom = 1;\r\n\r\n /**\r\n * The rotation of the Camera in radians.\r\n *\r\n * Camera rotation always takes place based on the Camera viewport. By default, rotation happens\r\n * in the center of the viewport. You can adjust this with the `originX` and `originY` properties.\r\n *\r\n * Rotation influences the rendering of _all_ Game Objects visible by this Camera. However, it does not\r\n * rotate the Camera viewport itself, which always remains an axis-aligned rectangle.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#_rotation\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.11.0\r\n */\r\n this._rotation = 0;\r\n\r\n /**\r\n * A local transform matrix used for internal calculations.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#matrix\r\n * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this.matrix = new TransformMatrix();\r\n\r\n /**\r\n * Does this Camera have a transparent background?\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#transparent\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.transparent = true;\r\n\r\n /**\r\n * The background color of this Camera. Only used if `transparent` is `false`.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#backgroundColor\r\n * @type {Phaser.Display.Color}\r\n * @since 3.0.0\r\n */\r\n this.backgroundColor = ValueToColor('rgba(0,0,0,0)');\r\n\r\n /**\r\n * The Camera alpha value. Setting this property impacts every single object that this Camera\r\n * renders. You can either set the property directly, i.e. via a Tween, to fade a Camera in or out,\r\n * or via the chainable `setAlpha` method instead.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#alpha\r\n * @type {number}\r\n * @default 1\r\n * @since 3.11.0\r\n */\r\n\r\n /**\r\n * Should the camera cull Game Objects before checking them for input hit tests?\r\n * In some special cases it may be beneficial to disable this.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#disableCull\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.disableCull = false;\r\n\r\n /**\r\n * A temporary array of culled objects.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#culledObjects\r\n * @type {Phaser.GameObjects.GameObject[]}\r\n * @default []\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this.culledObjects = [];\r\n\r\n /**\r\n * The mid-point of the Camera in 'world' coordinates.\r\n *\r\n * Use it to obtain exactly where in the world the center of the camera is currently looking.\r\n *\r\n * This value is updated in the preRender method, after the scroll values and follower\r\n * have been processed.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#midPoint\r\n * @type {Phaser.Math.Vector2}\r\n * @readonly\r\n * @since 3.11.0\r\n */\r\n this.midPoint = new Vector2(width / 2, height / 2);\r\n\r\n /**\r\n * The horizontal origin of rotation for this Camera.\r\n *\r\n * By default the camera rotates around the center of the viewport.\r\n *\r\n * Changing the origin allows you to adjust the point in the viewport from which rotation happens.\r\n * A value of 0 would rotate from the top-left of the viewport. A value of 1 from the bottom right.\r\n *\r\n * See `setOrigin` to set both origins in a single, chainable call.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#originX\r\n * @type {number}\r\n * @default 0.5\r\n * @since 3.11.0\r\n */\r\n this.originX = 0.5;\r\n\r\n /**\r\n * The vertical origin of rotation for this Camera.\r\n *\r\n * By default the camera rotates around the center of the viewport.\r\n *\r\n * Changing the origin allows you to adjust the point in the viewport from which rotation happens.\r\n * A value of 0 would rotate from the top-left of the viewport. A value of 1 from the bottom right.\r\n *\r\n * See `setOrigin` to set both origins in a single, chainable call.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#originY\r\n * @type {number}\r\n * @default 0.5\r\n * @since 3.11.0\r\n */\r\n this.originY = 0.5;\r\n\r\n /**\r\n * Does this Camera have a custom viewport?\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#_customViewport\r\n * @type {boolean}\r\n * @private\r\n * @default false\r\n * @since 3.12.0\r\n */\r\n this._customViewport = false;\r\n\r\n /**\r\n * The Mask this Camera is using during render.\r\n * Set the mask using the `setMask` method. Remove the mask using the `clearMask` method.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#mask\r\n * @type {?(Phaser.Display.Masks.BitmapMask|Phaser.Display.Masks.GeometryMask)}\r\n * @since 3.17.0\r\n */\r\n this.mask = null;\r\n\r\n /**\r\n * The Camera that this Camera uses for translation during masking.\r\n * \r\n * If the mask is fixed in position this will be a reference to\r\n * the CameraManager.default instance. Otherwise, it'll be a reference\r\n * to itself.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#_maskCamera\r\n * @type {?Phaser.Cameras.Scene2D.BaseCamera}\r\n * @private\r\n * @since 3.17.0\r\n */\r\n this._maskCamera = null;\r\n },\r\n\r\n /**\r\n * Set the Alpha level of this Camera. The alpha controls the opacity of the Camera as it renders.\r\n * Alpha values are provided as a float between 0, fully transparent, and 1, fully opaque.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#setAlpha\r\n * @since 3.11.0\r\n *\r\n * @param {number} [value=1] - The Camera alpha value.\r\n *\r\n * @return {this} This Camera instance.\r\n */\r\n\r\n /**\r\n * Sets the rotation origin of this Camera.\r\n *\r\n * The values are given in the range 0 to 1 and are only used when calculating Camera rotation.\r\n *\r\n * By default the camera rotates around the center of the viewport.\r\n *\r\n * Changing the origin allows you to adjust the point in the viewport from which rotation happens.\r\n * A value of 0 would rotate from the top-left of the viewport. A value of 1 from the bottom right.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#setOrigin\r\n * @since 3.11.0\r\n *\r\n * @param {number} [x=0.5] - The horizontal origin value.\r\n * @param {number} [y=x] - The vertical origin value. If not defined it will be set to the value of `x`.\r\n *\r\n * @return {this} This Camera instance.\r\n */\r\n setOrigin: function (x, y)\r\n {\r\n if (x === undefined) { x = 0.5; }\r\n if (y === undefined) { y = x; }\r\n\r\n this.originX = x;\r\n this.originY = y;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Calculates what the Camera.scrollX and scrollY values would need to be in order to move\r\n * the Camera so it is centered on the given x and y coordinates, without actually moving\r\n * the Camera there. The results are clamped based on the Camera bounds, if set.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#getScroll\r\n * @since 3.11.0\r\n *\r\n * @param {number} x - The horizontal coordinate to center on.\r\n * @param {number} y - The vertical coordinate to center on.\r\n * @param {Phaser.Math.Vector2} [out] - A Vec2 to store the values in. If not given a new Vec2 is created.\r\n *\r\n * @return {Phaser.Math.Vector2} The scroll coordinates stored in the `x` and `y` properties.\r\n */\r\n getScroll: function (x, y, out)\r\n {\r\n if (out === undefined) { out = new Vector2(); }\r\n\r\n var originX = this.width * 0.5;\r\n var originY = this.height * 0.5;\r\n\r\n out.x = x - originX;\r\n out.y = y - originY;\r\n\r\n if (this.useBounds)\r\n {\r\n out.x = this.clampX(out.x);\r\n out.y = this.clampY(out.y);\r\n }\r\n\r\n return out;\r\n },\r\n\r\n /**\r\n * Moves the Camera horizontally so that it is centered on the given x coordinate, bounds allowing.\r\n * Calling this does not change the scrollY value.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#centerOnX\r\n * @since 3.16.0\r\n *\r\n * @param {number} x - The horizontal coordinate to center on.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n */\r\n centerOnX: function (x)\r\n {\r\n var originX = this.width * 0.5;\r\n\r\n this.midPoint.x = x;\r\n\r\n this.scrollX = x - originX;\r\n\r\n if (this.useBounds)\r\n {\r\n this.scrollX = this.clampX(this.scrollX);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Moves the Camera vertically so that it is centered on the given y coordinate, bounds allowing.\r\n * Calling this does not change the scrollX value.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#centerOnY\r\n * @since 3.16.0\r\n *\r\n * @param {number} y - The vertical coordinate to center on.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n */\r\n centerOnY: function (y)\r\n {\r\n var originY = this.height * 0.5;\r\n\r\n this.midPoint.y = y;\r\n\r\n this.scrollY = y - originY;\r\n\r\n if (this.useBounds)\r\n {\r\n this.scrollY = this.clampY(this.scrollY);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Moves the Camera so that it is centered on the given coordinates, bounds allowing.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#centerOn\r\n * @since 3.11.0\r\n *\r\n * @param {number} x - The horizontal coordinate to center on.\r\n * @param {number} y - The vertical coordinate to center on.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n */\r\n centerOn: function (x, y)\r\n {\r\n this.centerOnX(x);\r\n this.centerOnY(y);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Moves the Camera so that it is looking at the center of the Camera Bounds, if enabled.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#centerToBounds\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n */\r\n centerToBounds: function ()\r\n {\r\n if (this.useBounds)\r\n {\r\n var bounds = this._bounds;\r\n var originX = this.width * 0.5;\r\n var originY = this.height * 0.5;\r\n\r\n this.midPoint.set(bounds.centerX, bounds.centerY);\r\n\r\n this.scrollX = bounds.centerX - originX;\r\n this.scrollY = bounds.centerY - originY;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Moves the Camera so that it is re-centered based on its viewport size.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#centerToSize\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n */\r\n centerToSize: function ()\r\n {\r\n this.scrollX = this.width * 0.5;\r\n this.scrollY = this.height * 0.5;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Takes an array of Game Objects and returns a new array featuring only those objects\r\n * visible by this camera.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#cull\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject[]} G - [renderableObjects,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject[]} renderableObjects - An array of Game Objects to cull.\r\n *\r\n * @return {Phaser.GameObjects.GameObject[]} An array of Game Objects visible to this Camera.\r\n */\r\n cull: function (renderableObjects)\r\n {\r\n if (this.disableCull)\r\n {\r\n return renderableObjects;\r\n }\r\n\r\n var cameraMatrix = this.matrix.matrix;\r\n\r\n var mva = cameraMatrix[0];\r\n var mvb = cameraMatrix[1];\r\n var mvc = cameraMatrix[2];\r\n var mvd = cameraMatrix[3];\r\n\r\n /* First Invert Matrix */\r\n var determinant = (mva * mvd) - (mvb * mvc);\r\n\r\n if (!determinant)\r\n {\r\n return renderableObjects;\r\n }\r\n\r\n var mve = cameraMatrix[4];\r\n var mvf = cameraMatrix[5];\r\n\r\n var scrollX = this.scrollX;\r\n var scrollY = this.scrollY;\r\n var cameraW = this.width;\r\n var cameraH = this.height;\r\n var culledObjects = this.culledObjects;\r\n var length = renderableObjects.length;\r\n\r\n determinant = 1 / determinant;\r\n\r\n culledObjects.length = 0;\r\n\r\n for (var index = 0; index < length; ++index)\r\n {\r\n var object = renderableObjects[index];\r\n\r\n if (!object.hasOwnProperty('width') || object.parentContainer)\r\n {\r\n culledObjects.push(object);\r\n continue;\r\n }\r\n\r\n var objectW = object.width;\r\n var objectH = object.height;\r\n var objectX = (object.x - (scrollX * object.scrollFactorX)) - (objectW * object.originX);\r\n var objectY = (object.y - (scrollY * object.scrollFactorY)) - (objectH * object.originY);\r\n var tx = (objectX * mva + objectY * mvc + mve);\r\n var ty = (objectX * mvb + objectY * mvd + mvf);\r\n var tw = ((objectX + objectW) * mva + (objectY + objectH) * mvc + mve);\r\n var th = ((objectX + objectW) * mvb + (objectY + objectH) * mvd + mvf);\r\n var cullTop = this.y;\r\n var cullBottom = cullTop + cameraH;\r\n var cullLeft = this.x;\r\n var cullRight = cullLeft + cameraW;\r\n\r\n if ((tw > cullLeft && tx < cullRight) && (th > cullTop && ty < cullBottom))\r\n {\r\n culledObjects.push(object);\r\n }\r\n }\r\n\r\n return culledObjects;\r\n },\r\n\r\n /**\r\n * Converts the given `x` and `y` coordinates into World space, based on this Cameras transform.\r\n * You can optionally provide a Vector2, or similar object, to store the results in.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#getWorldPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [output,$return]\r\n *\r\n * @param {number} x - The x position to convert to world space.\r\n * @param {number} y - The y position to convert to world space.\r\n * @param {(object|Phaser.Math.Vector2)} [output] - An optional object to store the results in. If not provided a new Vector2 will be created.\r\n *\r\n * @return {Phaser.Math.Vector2} An object holding the converted values in its `x` and `y` properties.\r\n */\r\n getWorldPoint: function (x, y, output)\r\n {\r\n if (output === undefined) { output = new Vector2(); }\r\n\r\n var cameraMatrix = this.matrix.matrix;\r\n\r\n var mva = cameraMatrix[0];\r\n var mvb = cameraMatrix[1];\r\n var mvc = cameraMatrix[2];\r\n var mvd = cameraMatrix[3];\r\n var mve = cameraMatrix[4];\r\n var mvf = cameraMatrix[5];\r\n\r\n // Invert Matrix\r\n var determinant = (mva * mvd) - (mvb * mvc);\r\n\r\n if (!determinant)\r\n {\r\n output.x = x;\r\n output.y = y;\r\n\r\n return output;\r\n }\r\n\r\n determinant = 1 / determinant;\r\n\r\n var ima = mvd * determinant;\r\n var imb = -mvb * determinant;\r\n var imc = -mvc * determinant;\r\n var imd = mva * determinant;\r\n var ime = (mvc * mvf - mvd * mve) * determinant;\r\n var imf = (mvb * mve - mva * mvf) * determinant;\r\n\r\n var c = Math.cos(this.rotation);\r\n var s = Math.sin(this.rotation);\r\n\r\n var zoom = this.zoom;\r\n var res = this.resolution;\r\n\r\n var scrollX = this.scrollX;\r\n var scrollY = this.scrollY;\r\n\r\n // Works for zoom of 1 with any resolution, but resolution > 1 and zoom !== 1 breaks\r\n var sx = x + ((scrollX * c - scrollY * s) * zoom);\r\n var sy = y + ((scrollX * s + scrollY * c) * zoom);\r\n\r\n // Apply transform to point\r\n output.x = (sx * ima + sy * imc) * res + ime;\r\n output.y = (sx * imb + sy * imd) * res + imf;\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Given a Game Object, or an array of Game Objects, it will update all of their camera filter settings\r\n * so that they are ignored by this Camera. This means they will not be rendered by this Camera.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#ignore\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[]|Phaser.GameObjects.Group)} entries - The Game Object, or array of Game Objects, to be ignored by this Camera.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n */\r\n ignore: function (entries)\r\n {\r\n var id = this.id;\r\n\r\n if (!Array.isArray(entries))\r\n {\r\n entries = [ entries ];\r\n }\r\n\r\n for (var i = 0; i < entries.length; i++)\r\n {\r\n var entry = entries[i];\r\n\r\n if (Array.isArray(entry))\r\n {\r\n this.ignore(entry);\r\n }\r\n else if (entry.isParent)\r\n {\r\n this.ignore(entry.getChildren());\r\n }\r\n else\r\n {\r\n entry.cameraFilter |= id;\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Internal preRender step.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#preRender\r\n * @protected\r\n * @since 3.0.0\r\n *\r\n * @param {number} resolution - The game resolution, as set in the Scale Manager.\r\n */\r\n preRender: function (resolution)\r\n {\r\n var width = this.width;\r\n var height = this.height;\r\n\r\n var halfWidth = width * 0.5;\r\n var halfHeight = height * 0.5;\r\n\r\n var zoom = this.zoom * resolution;\r\n var matrix = this.matrix;\r\n\r\n var originX = width * this.originX;\r\n var originY = height * this.originY;\r\n\r\n var sx = this.scrollX;\r\n var sy = this.scrollY;\r\n\r\n if (this.useBounds)\r\n {\r\n sx = this.clampX(sx);\r\n sy = this.clampY(sy);\r\n }\r\n\r\n if (this.roundPixels)\r\n {\r\n originX = Math.round(originX);\r\n originY = Math.round(originY);\r\n }\r\n\r\n // Values are in pixels and not impacted by zooming the Camera\r\n this.scrollX = sx;\r\n this.scrollY = sy;\r\n\r\n var midX = sx + halfWidth;\r\n var midY = sy + halfHeight;\r\n\r\n // The center of the camera, in world space, so taking zoom into account\r\n // Basically the pixel value of what it's looking at in the middle of the cam\r\n this.midPoint.set(midX, midY);\r\n\r\n var displayWidth = width / zoom;\r\n var displayHeight = height / zoom;\r\n\r\n this.worldView.setTo(\r\n midX - (displayWidth / 2),\r\n midY - (displayHeight / 2),\r\n displayWidth,\r\n displayHeight\r\n );\r\n\r\n matrix.applyITRS(this.x + originX, this.y + originY, this.rotation, zoom, zoom);\r\n matrix.translate(-originX, -originY);\r\n },\r\n\r\n /**\r\n * Takes an x value and checks it's within the range of the Camera bounds, adjusting if required.\r\n * Do not call this method if you are not using camera bounds.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#clampX\r\n * @since 3.11.0\r\n *\r\n * @param {number} x - The value to horizontally scroll clamp.\r\n *\r\n * @return {number} The adjusted value to use as scrollX.\r\n */\r\n clampX: function (x)\r\n {\r\n var bounds = this._bounds;\r\n\r\n var dw = this.displayWidth;\r\n\r\n var bx = bounds.x + ((dw - this.width) / 2);\r\n var bw = Math.max(bx, bx + bounds.width - dw);\r\n\r\n if (x < bx)\r\n {\r\n x = bx;\r\n }\r\n else if (x > bw)\r\n {\r\n x = bw;\r\n }\r\n\r\n return x;\r\n },\r\n\r\n /**\r\n * Takes a y value and checks it's within the range of the Camera bounds, adjusting if required.\r\n * Do not call this method if you are not using camera bounds.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#clampY\r\n * @since 3.11.0\r\n *\r\n * @param {number} y - The value to vertically scroll clamp.\r\n *\r\n * @return {number} The adjusted value to use as scrollY.\r\n */\r\n clampY: function (y)\r\n {\r\n var bounds = this._bounds;\r\n\r\n var dh = this.displayHeight;\r\n\r\n var by = bounds.y + ((dh - this.height) / 2);\r\n var bh = Math.max(by, by + bounds.height - dh);\r\n\r\n if (y < by)\r\n {\r\n y = by;\r\n }\r\n else if (y > bh)\r\n {\r\n y = bh;\r\n }\r\n\r\n return y;\r\n },\r\n\r\n /*\r\n var gap = this._zoomInversed;\r\n return gap * Math.round((src.x - this.scrollX * src.scrollFactorX) / gap);\r\n */\r\n\r\n /**\r\n * If this Camera has previously had movement bounds set on it, this will remove them.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#removeBounds\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n */\r\n removeBounds: function ()\r\n {\r\n this.useBounds = false;\r\n\r\n this.dirty = true;\r\n\r\n this._bounds.setEmpty();\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the rotation of this Camera. This causes everything it renders to appear rotated.\r\n *\r\n * Rotating a camera does not rotate the viewport itself, it is applied during rendering.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#setAngle\r\n * @since 3.0.0\r\n *\r\n * @param {number} [value=0] - The cameras angle of rotation, given in degrees.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n */\r\n setAngle: function (value)\r\n {\r\n if (value === undefined) { value = 0; }\r\n\r\n this.rotation = DegToRad(value);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the background color for this Camera.\r\n *\r\n * By default a Camera has a transparent background but it can be given a solid color, with any level\r\n * of transparency, via this method.\r\n *\r\n * The color value can be specified using CSS color notation, hex or numbers.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#setBackgroundColor\r\n * @since 3.0.0\r\n *\r\n * @param {(string|number|Phaser.Types.Display.InputColorObject)} [color='rgba(0,0,0,0)'] - The color value. In CSS, hex or numeric color notation.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n */\r\n setBackgroundColor: function (color)\r\n {\r\n if (color === undefined) { color = 'rgba(0,0,0,0)'; }\r\n\r\n this.backgroundColor = ValueToColor(color);\r\n\r\n this.transparent = (this.backgroundColor.alpha === 0);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the bounds of the Camera. The bounds are an axis-aligned rectangle.\r\n * \r\n * The Camera bounds controls where the Camera can scroll to, stopping it from scrolling off the\r\n * edges and into blank space. It does not limit the placement of Game Objects, or where\r\n * the Camera viewport can be positioned.\r\n * \r\n * Temporarily disable the bounds by changing the boolean `Camera.useBounds`.\r\n * \r\n * Clear the bounds entirely by calling `Camera.removeBounds`.\r\n * \r\n * If you set bounds that are smaller than the viewport it will stop the Camera from being\r\n * able to scroll. The bounds can be positioned where-ever you wish. By default they are from\r\n * 0x0 to the canvas width x height. This means that the coordinate 0x0 is the top left of\r\n * the Camera bounds. However, you can position them anywhere. So if you wanted a game world\r\n * that was 2048x2048 in size, with 0x0 being the center of it, you can set the bounds x/y\r\n * to be -1024, -1024, with a width and height of 2048. Depending on your game you may find\r\n * it easier for 0x0 to be the top-left of the bounds, or you may wish 0x0 to be the middle.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#setBounds\r\n * @since 3.0.0\r\n *\r\n * @param {integer} x - The top-left x coordinate of the bounds.\r\n * @param {integer} y - The top-left y coordinate of the bounds.\r\n * @param {integer} width - The width of the bounds, in pixels.\r\n * @param {integer} height - The height of the bounds, in pixels.\r\n * @param {boolean} [centerOn=false] - If `true` the Camera will automatically be centered on the new bounds.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n */\r\n setBounds: function (x, y, width, height, centerOn)\r\n {\r\n if (centerOn === undefined) { centerOn = false; }\r\n\r\n this._bounds.setTo(x, y, width, height);\r\n\r\n this.dirty = true;\r\n this.useBounds = true;\r\n\r\n if (centerOn)\r\n {\r\n this.centerToBounds();\r\n }\r\n else\r\n {\r\n this.scrollX = this.clampX(this.scrollX);\r\n this.scrollY = this.clampY(this.scrollY);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Returns a rectangle containing the bounds of the Camera.\r\n * \r\n * If the Camera does not have any bounds the rectangle will be empty.\r\n * \r\n * The rectangle is a copy of the bounds, so is safe to modify.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#getBounds\r\n * @since 3.16.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} [out] - An optional Rectangle to store the bounds in. If not given, a new Rectangle will be created.\r\n *\r\n * @return {Phaser.Geom.Rectangle} A rectangle containing the bounds of this Camera.\r\n */\r\n getBounds: function (out)\r\n {\r\n if (out === undefined) { out = new Rectangle(); }\r\n\r\n var source = this._bounds;\r\n\r\n out.setTo(source.x, source.y, source.width, source.height);\r\n\r\n return out;\r\n },\r\n\r\n /**\r\n * Sets the name of this Camera.\r\n * This value is for your own use and isn't used internally.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#setName\r\n * @since 3.0.0\r\n *\r\n * @param {string} [value=''] - The name of the Camera.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n */\r\n setName: function (value)\r\n {\r\n if (value === undefined) { value = ''; }\r\n\r\n this.name = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the position of the Camera viewport within the game.\r\n *\r\n * This does not change where the camera is 'looking'. See `setScroll` to control that.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#setPosition\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The top-left x coordinate of the Camera viewport.\r\n * @param {number} [y=x] - The top-left y coordinate of the Camera viewport.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n */\r\n setPosition: function (x, y)\r\n {\r\n if (y === undefined) { y = x; }\r\n\r\n this.x = x;\r\n this.y = y;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the rotation of this Camera. This causes everything it renders to appear rotated.\r\n *\r\n * Rotating a camera does not rotate the viewport itself, it is applied during rendering.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#setRotation\r\n * @since 3.0.0\r\n *\r\n * @param {number} [value=0] - The rotation of the Camera, in radians.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n */\r\n setRotation: function (value)\r\n {\r\n if (value === undefined) { value = 0; }\r\n\r\n this.rotation = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Should the Camera round pixel values to whole integers when rendering Game Objects?\r\n * \r\n * In some types of game, especially with pixel art, this is required to prevent sub-pixel aliasing.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#setRoundPixels\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} value - `true` to round Camera pixels, `false` to not.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n */\r\n setRoundPixels: function (value)\r\n {\r\n this.roundPixels = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the Scene the Camera is bound to.\r\n * \r\n * Also populates the `resolution` property and updates the internal size values.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#setScene\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene the camera is bound to.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n */\r\n setScene: function (scene)\r\n {\r\n if (this.scene && this._customViewport)\r\n {\r\n this.sceneManager.customViewports--;\r\n }\r\n\r\n this.scene = scene;\r\n\r\n var sys = scene.sys;\r\n\r\n this.sceneManager = sys.game.scene;\r\n this.scaleManager = sys.scale;\r\n this.cameraManager = sys.cameras;\r\n\r\n var res = this.scaleManager.resolution;\r\n\r\n this.resolution = res;\r\n\r\n this._cx = this._x * res;\r\n this._cy = this._y * res;\r\n this._cw = this._width * res;\r\n this._ch = this._height * res;\r\n\r\n this.updateSystem();\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the position of where the Camera is looking within the game.\r\n * You can also modify the properties `Camera.scrollX` and `Camera.scrollY` directly.\r\n * Use this method, or the scroll properties, to move your camera around the game world.\r\n *\r\n * This does not change where the camera viewport is placed. See `setPosition` to control that.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#setScroll\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x coordinate of the Camera in the game world.\r\n * @param {number} [y=x] - The y coordinate of the Camera in the game world.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n */\r\n setScroll: function (x, y)\r\n {\r\n if (y === undefined) { y = x; }\r\n\r\n this.scrollX = x;\r\n this.scrollY = y;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the size of the Camera viewport.\r\n *\r\n * By default a Camera is the same size as the game, but can be made smaller via this method,\r\n * allowing you to create mini-cam style effects by creating and positioning a smaller Camera\r\n * viewport within your game.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#setSize\r\n * @since 3.0.0\r\n *\r\n * @param {integer} width - The width of the Camera viewport.\r\n * @param {integer} [height=width] - The height of the Camera viewport.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n */\r\n setSize: function (width, height)\r\n {\r\n if (height === undefined) { height = width; }\r\n\r\n this.width = width;\r\n this.height = height;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * This method sets the position and size of the Camera viewport in a single call.\r\n *\r\n * If you're trying to change where the Camera is looking at in your game, then see\r\n * the method `Camera.setScroll` instead. This method is for changing the viewport\r\n * itself, not what the camera can see.\r\n *\r\n * By default a Camera is the same size as the game, but can be made smaller via this method,\r\n * allowing you to create mini-cam style effects by creating and positioning a smaller Camera\r\n * viewport within your game.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#setViewport\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The top-left x coordinate of the Camera viewport.\r\n * @param {number} y - The top-left y coordinate of the Camera viewport.\r\n * @param {integer} width - The width of the Camera viewport.\r\n * @param {integer} [height=width] - The height of the Camera viewport.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n */\r\n setViewport: function (x, y, width, height)\r\n {\r\n this.x = x;\r\n this.y = y;\r\n this.width = width;\r\n this.height = height;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the zoom value of the Camera.\r\n *\r\n * Changing to a smaller value, such as 0.5, will cause the camera to 'zoom out'.\r\n * Changing to a larger value, such as 2, will cause the camera to 'zoom in'.\r\n *\r\n * A value of 1 means 'no zoom' and is the default.\r\n *\r\n * Changing the zoom does not impact the Camera viewport in any way, it is only applied during rendering.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#setZoom\r\n * @since 3.0.0\r\n *\r\n * @param {number} [value=1] - The zoom value of the Camera. The minimum it can be is 0.001.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.BaseCamera} This Camera instance.\r\n */\r\n setZoom: function (value)\r\n {\r\n if (value === undefined) { value = 1; }\r\n\r\n if (value === 0)\r\n {\r\n value = 0.001;\r\n }\r\n\r\n this.zoom = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the mask to be applied to this Camera during rendering.\r\n *\r\n * The mask must have been previously created and can be either a GeometryMask or a BitmapMask.\r\n * \r\n * Bitmap Masks only work on WebGL. Geometry Masks work on both WebGL and Canvas.\r\n *\r\n * If a mask is already set on this Camera it will be immediately replaced.\r\n * \r\n * Masks have no impact on physics or input detection. They are purely a rendering component\r\n * that allows you to limit what is visible during the render pass.\r\n * \r\n * Note: You cannot mask a Camera that has `renderToTexture` set.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#setMask\r\n * @since 3.17.0\r\n *\r\n * @param {(Phaser.Display.Masks.BitmapMask|Phaser.Display.Masks.GeometryMask)} mask - The mask this Camera will use when rendering.\r\n * @param {boolean} [fixedPosition=true] - Should the mask translate along with the Camera, or be fixed in place and not impacted by the Cameras transform?\r\n *\r\n * @return {this} This Camera instance.\r\n */\r\n setMask: function (mask, fixedPosition)\r\n {\r\n if (fixedPosition === undefined) { fixedPosition = true; }\r\n\r\n this.mask = mask;\r\n\r\n this._maskCamera = (fixedPosition) ? this.cameraManager.default : this;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Clears the mask that this Camera was using.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#clearMask\r\n * @since 3.17.0\r\n *\r\n * @param {boolean} [destroyMask=false] - Destroy the mask before clearing it?\r\n *\r\n * @return {this} This Camera instance.\r\n */\r\n clearMask: function (destroyMask)\r\n {\r\n if (destroyMask === undefined) { destroyMask = false; }\r\n\r\n if (destroyMask && this.mask)\r\n {\r\n this.mask.destroy();\r\n }\r\n\r\n this.mask = null;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the visibility of this Camera.\r\n *\r\n * An invisible Camera will skip rendering and input tests of everything it can see.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#setVisible\r\n * @since 3.10.0\r\n *\r\n * @param {boolean} value - The visible state of the Camera.\r\n *\r\n * @return {this} This Camera instance.\r\n */\r\n\r\n /**\r\n * Returns an Object suitable for JSON storage containing all of the Camera viewport and rendering properties.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#toJSON\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Types.Cameras.Scene2D.JSONCamera} A well-formed object suitable for conversion to JSON.\r\n */\r\n toJSON: function ()\r\n {\r\n var output = {\r\n name: this.name,\r\n x: this.x,\r\n y: this.y,\r\n width: this.width,\r\n height: this.height,\r\n zoom: this.zoom,\r\n rotation: this.rotation,\r\n roundPixels: this.roundPixels,\r\n scrollX: this.scrollX,\r\n scrollY: this.scrollY,\r\n backgroundColor: this.backgroundColor.rgba\r\n };\r\n\r\n if (this.useBounds)\r\n {\r\n output['bounds'] = {\r\n x: this._bounds.x,\r\n y: this._bounds.y,\r\n width: this._bounds.width,\r\n height: this._bounds.height\r\n };\r\n }\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Internal method called automatically by the Camera Manager.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#update\r\n * @protected\r\n * @since 3.0.0\r\n *\r\n * @param {integer} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n */\r\n update: function ()\r\n {\r\n // NOOP\r\n },\r\n\r\n /**\r\n * Internal method called automatically when the viewport changes.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#updateSystem\r\n * @private\r\n * @since 3.12.0\r\n */\r\n updateSystem: function ()\r\n {\r\n if (!this.scaleManager)\r\n {\r\n return;\r\n }\r\n\r\n var custom = (this._x !== 0 || this._y !== 0 || this.scaleManager.width !== this._width || this.scaleManager.height !== this._height);\r\n\r\n var sceneManager = this.sceneManager;\r\n\r\n if (custom && !this._customViewport)\r\n {\r\n // We need a custom viewport for this Camera\r\n sceneManager.customViewports++;\r\n }\r\n else if (!custom && this._customViewport)\r\n {\r\n // We're turning off a custom viewport for this Camera\r\n sceneManager.customViewports--;\r\n }\r\n\r\n this.dirty = true;\r\n this._customViewport = custom;\r\n },\r\n\r\n /**\r\n * Destroys this Camera instance and its internal properties and references.\r\n * Once destroyed you cannot use this Camera again, even if re-added to a Camera Manager.\r\n * \r\n * This method is called automatically by `CameraManager.remove` if that methods `runDestroy` argument is `true`, which is the default.\r\n * \r\n * Unless you have a specific reason otherwise, always use `CameraManager.remove` and allow it to handle the camera destruction,\r\n * rather than calling this method directly.\r\n *\r\n * @method Phaser.Cameras.Scene2D.BaseCamera#destroy\r\n * @fires Phaser.Cameras.Scene2D.Events#DESTROY\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.emit(Events.DESTROY, this);\r\n\r\n this.removeAllListeners();\r\n\r\n this.matrix.destroy();\r\n\r\n this.culledObjects = [];\r\n\r\n if (this._customViewport)\r\n {\r\n // We're turning off a custom viewport for this Camera\r\n this.sceneManager.customViewports--;\r\n }\r\n\r\n this._bounds = null;\r\n\r\n this.scene = null;\r\n this.scaleManager = null;\r\n this.sceneManager = null;\r\n this.cameraManager = null;\r\n },\r\n\r\n /**\r\n * The x position of the Camera viewport, relative to the top-left of the game canvas.\r\n * The viewport is the area into which the camera renders.\r\n * To adjust the position the camera is looking at in the game world, see the `scrollX` value.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#x\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n x: {\r\n\r\n get: function ()\r\n {\r\n return this._x;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._x = value;\r\n this._cx = value * this.resolution;\r\n this.updateSystem();\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The y position of the Camera viewport, relative to the top-left of the game canvas.\r\n * The viewport is the area into which the camera renders.\r\n * To adjust the position the camera is looking at in the game world, see the `scrollY` value.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#y\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n y: {\r\n\r\n get: function ()\r\n {\r\n return this._y;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._y = value;\r\n this._cy = value * this.resolution;\r\n this.updateSystem();\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The width of the Camera viewport, in pixels.\r\n *\r\n * The viewport is the area into which the Camera renders. Setting the viewport does\r\n * not restrict where the Camera can scroll to.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#width\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n width: {\r\n\r\n get: function ()\r\n {\r\n return this._width;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._width = value;\r\n this._cw = value * this.resolution;\r\n this.updateSystem();\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The height of the Camera viewport, in pixels.\r\n *\r\n * The viewport is the area into which the Camera renders. Setting the viewport does\r\n * not restrict where the Camera can scroll to.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#height\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n height: {\r\n\r\n get: function ()\r\n {\r\n return this._height;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._height = value;\r\n this._ch = value * this.resolution;\r\n this.updateSystem();\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The horizontal scroll position of this Camera.\r\n *\r\n * Change this value to cause the Camera to scroll around your Scene.\r\n *\r\n * Alternatively, setting the Camera to follow a Game Object, via the `startFollow` method,\r\n * will automatically adjust the Camera scroll values accordingly.\r\n *\r\n * You can set the bounds within which the Camera can scroll via the `setBounds` method.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#scrollX\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n scrollX: {\r\n\r\n get: function ()\r\n {\r\n return this._scrollX;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._scrollX = value;\r\n this.dirty = true;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The vertical scroll position of this Camera.\r\n *\r\n * Change this value to cause the Camera to scroll around your Scene.\r\n *\r\n * Alternatively, setting the Camera to follow a Game Object, via the `startFollow` method,\r\n * will automatically adjust the Camera scroll values accordingly.\r\n *\r\n * You can set the bounds within which the Camera can scroll via the `setBounds` method.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#scrollY\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n scrollY: {\r\n\r\n get: function ()\r\n {\r\n return this._scrollY;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._scrollY = value;\r\n this.dirty = true;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The Camera zoom value. Change this value to zoom in, or out of, a Scene.\r\n *\r\n * A value of 0.5 would zoom the Camera out, so you can now see twice as much\r\n * of the Scene as before. A value of 2 would zoom the Camera in, so every pixel\r\n * now takes up 2 pixels when rendered.\r\n *\r\n * Set to 1 to return to the default zoom level.\r\n *\r\n * Be careful to never set this value to zero.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#zoom\r\n * @type {number}\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n zoom: {\r\n\r\n get: function ()\r\n {\r\n return this._zoom;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._zoom = value;\r\n this.dirty = true;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The rotation of the Camera in radians.\r\n *\r\n * Camera rotation always takes place based on the Camera viewport. By default, rotation happens\r\n * in the center of the viewport. You can adjust this with the `originX` and `originY` properties.\r\n *\r\n * Rotation influences the rendering of _all_ Game Objects visible by this Camera. However, it does not\r\n * rotate the Camera viewport itself, which always remains an axis-aligned rectangle.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#rotation\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.11.0\r\n */\r\n rotation: {\r\n\r\n get: function ()\r\n {\r\n return this._rotation;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._rotation = value;\r\n this.dirty = true;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The horizontal position of the center of the Camera's viewport, relative to the left of the game canvas.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#centerX\r\n * @type {number}\r\n * @readonly\r\n * @since 3.10.0\r\n */\r\n centerX: {\r\n\r\n get: function ()\r\n {\r\n return this.x + (0.5 * this.width);\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The vertical position of the center of the Camera's viewport, relative to the top of the game canvas.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#centerY\r\n * @type {number}\r\n * @readonly\r\n * @since 3.10.0\r\n */\r\n centerY: {\r\n\r\n get: function ()\r\n {\r\n return this.y + (0.5 * this.height);\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The displayed width of the camera viewport, factoring in the camera zoom level.\r\n *\r\n * If a camera has a viewport width of 800 and a zoom of 0.5 then its display width\r\n * would be 1600, as it's displaying twice as many pixels as zoom level 1.\r\n *\r\n * Equally, a camera with a width of 800 and zoom of 2 would have a display width\r\n * of 400 pixels.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#displayWidth\r\n * @type {number}\r\n * @readonly\r\n * @since 3.11.0\r\n */\r\n displayWidth: {\r\n\r\n get: function ()\r\n {\r\n return this.width / this.zoom;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The displayed height of the camera viewport, factoring in the camera zoom level.\r\n *\r\n * If a camera has a viewport height of 600 and a zoom of 0.5 then its display height\r\n * would be 1200, as it's displaying twice as many pixels as zoom level 1.\r\n *\r\n * Equally, a camera with a height of 600 and zoom of 2 would have a display height\r\n * of 300 pixels.\r\n *\r\n * @name Phaser.Cameras.Scene2D.BaseCamera#displayHeight\r\n * @type {number}\r\n * @readonly\r\n * @since 3.11.0\r\n */\r\n displayHeight: {\r\n\r\n get: function ()\r\n {\r\n return this.height / this.zoom;\r\n }\r\n\r\n }\r\n\r\n});\r\n\r\nmodule.exports = BaseCamera;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL0Jhc2VDYW1lcmEuanM/YTJjNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQywrRkFBOEI7QUFDdkQsZUFBZSxtQkFBTyxDQUFDLHVFQUFxQjtBQUM1QyxtQkFBbUIsbUJBQU8sQ0FBQyw0REFBZTtBQUMxQyxhQUFhLG1CQUFPLENBQUMsc0VBQVU7QUFDL0IsZ0JBQWdCLG1CQUFPLENBQUMsNkZBQWdDO0FBQ3hELHNCQUFzQixtQkFBTyxDQUFDLHlIQUE4QztBQUM1RSxtQkFBbUIsbUJBQU8sQ0FBQyxpR0FBa0M7QUFDN0QsY0FBYyxtQkFBTyxDQUFDLHFFQUFvQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87QUFDckMsa0NBQWtDLFdBQVc7QUFDN0MsbUNBQW1DLFlBQVk7O0FBRS9DOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLFNBQVM7QUFDdkMsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MscUJBQXFCOztBQUVyRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isa0NBQWtDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixrQ0FBa0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isa0NBQWtDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixrQ0FBa0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixrQ0FBa0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsZ0NBQWdDO0FBQ2pEO0FBQ0EsZUFBZSxnQ0FBZ0M7QUFDL0M7QUFDQSxnQkFBZ0IsZ0NBQWdDO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsMkJBQTJCLGdCQUFnQjtBQUMzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSw2QkFBNkI7QUFDNUM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyx3QkFBd0I7O0FBRTNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx5RkFBeUY7QUFDeEc7QUFDQSxnQkFBZ0Isa0NBQWtDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixvQkFBb0I7QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isa0NBQWtDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLGtDQUFrQztBQUNsRDtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsV0FBVzs7QUFFN0M7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHNEQUFzRDtBQUNyRTtBQUNBLGdCQUFnQixrQ0FBa0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHlCQUF5Qjs7QUFFM0Q7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixrQ0FBa0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLGtCQUFrQjs7QUFFdkQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxzQkFBc0I7QUFDckM7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyx1QkFBdUI7O0FBRXZEOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixrQ0FBa0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLFlBQVk7O0FBRTlDOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixrQ0FBa0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isa0NBQWtDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxXQUFXOztBQUU3Qzs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixrQ0FBa0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUI7QUFDQSxnQkFBZ0Isa0NBQWtDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLGtDQUFrQztBQUNsRDtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTzs7QUFFckM7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLGtDQUFrQztBQUNsRDtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsZ0JBQWdCOztBQUVuRDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLGtDQUFrQztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isa0NBQWtDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxXQUFXOztBQUU3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0VBQW9FO0FBQ25GLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxzQkFBc0I7O0FBRWhFOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MscUJBQXFCOztBQUU3RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix3Q0FBd0M7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL0Jhc2VDYW1lcmEuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzID0gcmVxdWlyZSgnLi4vLi4vZ2FtZW9iamVjdHMvY29tcG9uZW50cycpO1xyXG52YXIgRGVnVG9SYWQgPSByZXF1aXJlKCcuLi8uLi9tYXRoL0RlZ1RvUmFkJyk7XHJcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuL2V2ZW50cycpO1xyXG52YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi4vLi4vZ2VvbS9yZWN0YW5nbGUvUmVjdGFuZ2xlJyk7XHJcbnZhciBUcmFuc2Zvcm1NYXRyaXggPSByZXF1aXJlKCcuLi8uLi9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1RyYW5zZm9ybU1hdHJpeCcpO1xyXG52YXIgVmFsdWVUb0NvbG9yID0gcmVxdWlyZSgnLi4vLi4vZGlzcGxheS9jb2xvci9WYWx1ZVRvQ29sb3InKTtcclxudmFyIFZlY3RvcjIgPSByZXF1aXJlKCcuLi8uLi9tYXRoL1ZlY3RvcjInKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgQmFzZSBDYW1lcmEgY2xhc3MuXHJcbiAqXHJcbiAqIFRoZSBDYW1lcmEgaXMgdGhlIHdheSBpbiB3aGljaCBhbGwgZ2FtZXMgYXJlIHJlbmRlcmVkIGluIFBoYXNlci4gVGhleSBwcm92aWRlIGEgdmlldyBpbnRvIHlvdXIgZ2FtZSB3b3JsZCxcclxuICogYW5kIGNhbiBiZSBwb3NpdGlvbmVkLCByb3RhdGVkLCB6b29tZWQgYW5kIHNjcm9sbGVkIGFjY29yZGluZ2x5LlxyXG4gKlxyXG4gKiBBIENhbWVyYSBjb25zaXN0cyBvZiB0d28gZWxlbWVudHM6IFRoZSB2aWV3cG9ydCBhbmQgdGhlIHNjcm9sbCB2YWx1ZXMuXHJcbiAqXHJcbiAqIFRoZSB2aWV3cG9ydCBpcyB0aGUgcGh5c2ljYWwgcG9zaXRpb24gYW5kIHNpemUgb2YgdGhlIENhbWVyYSB3aXRoaW4geW91ciBnYW1lLiBDYW1lcmFzLCBieSBkZWZhdWx0LCBhcmVcclxuICogY3JlYXRlZCB0aGUgc2FtZSBzaXplIGFzIHlvdXIgZ2FtZSwgYnV0IHRoZWlyIHBvc2l0aW9uIGFuZCBzaXplIGNhbiBiZSBzZXQgdG8gYW55dGhpbmcuIFRoaXMgbWVhbnMgaWYgeW91XHJcbiAqIHdhbnRlZCB0byBjcmVhdGUgYSBjYW1lcmEgdGhhdCB3YXMgMzIweDIwMCBpbiBzaXplLCBwb3NpdGlvbmVkIGluIHRoZSBib3R0b20tcmlnaHQgY29ybmVyIG9mIHlvdXIgZ2FtZSxcclxuICogeW91J2QgYWRqdXN0IHRoZSB2aWV3cG9ydCB0byBkbyB0aGF0ICh1c2luZyBtZXRob2RzIGxpa2UgYHNldFZpZXdwb3J0YCBhbmQgYHNldFNpemVgKS5cclxuICpcclxuICogSWYgeW91IHdpc2ggdG8gY2hhbmdlIHdoZXJlIHRoZSBDYW1lcmEgaXMgbG9va2luZyBpbiB5b3VyIGdhbWUsIHRoZW4geW91IHNjcm9sbCBpdC4gWW91IGNhbiBkbyB0aGlzXHJcbiAqIHZpYSB0aGUgcHJvcGVydGllcyBgc2Nyb2xsWGAgYW5kIGBzY3JvbGxZYCBvciB0aGUgbWV0aG9kIGBzZXRTY3JvbGxgLiBTY3JvbGxpbmcgaGFzIG5vIGltcGFjdCBvbiB0aGVcclxuICogdmlld3BvcnQsIGFuZCBjaGFuZ2luZyB0aGUgdmlld3BvcnQgaGFzIG5vIGltcGFjdCBvbiB0aGUgc2Nyb2xsaW5nLlxyXG4gKlxyXG4gKiBCeSBkZWZhdWx0IGEgQ2FtZXJhIHdpbGwgcmVuZGVyIGFsbCBHYW1lIE9iamVjdHMgaXQgY2FuIHNlZS4gWW91IGNhbiBjaGFuZ2UgdGhpcyB1c2luZyB0aGUgYGlnbm9yZWAgbWV0aG9kLFxyXG4gKiBhbGxvd2luZyB5b3UgdG8gZmlsdGVyIEdhbWUgT2JqZWN0cyBvdXQgb24gYSBwZXItQ2FtZXJhIGJhc2lzLlxyXG4gKiBcclxuICogVGhlIEJhc2UgQ2FtZXJhIGlzIGV4dGVuZGVkIGJ5IHRoZSBDYW1lcmEgY2xhc3MsIHdoaWNoIGFkZHMgaW4gc3BlY2lhbCBlZmZlY3RzIGluY2x1ZGluZyBGYWRlLFxyXG4gKiBGbGFzaCBhbmQgQ2FtZXJhIFNoYWtlLCBhcyB3ZWxsIGFzIHRoZSBhYmlsaXR5IHRvIGZvbGxvdyBHYW1lIE9iamVjdHMuXHJcbiAqIFxyXG4gKiBUaGUgQmFzZSBDYW1lcmEgd2FzIGludHJvZHVjZWQgaW4gUGhhc2VyIDMuMTIuIEl0IHdhcyBzcGxpdCBvZmYgZnJvbSB0aGUgQ2FtZXJhIGNsYXNzLCB0byBhbGxvd1xyXG4gKiB5b3UgdG8gaXNvbGF0ZSBzcGVjaWFsIGVmZmVjdHMgYXMgbmVlZGVkLiBUaGVyZWZvcmUgdGhlICdzaW5jZScgdmFsdWVzIGZvciBwcm9wZXJ0aWVzIG9mIHRoaXMgY2xhc3MgcmVsYXRlXHJcbiAqIHRvIHdoZW4gdGhleSB3ZXJlIGFkZGVkIHRvIHRoZSBDYW1lcmEgY2xhc3MuXHJcbiAqXHJcbiAqIEBjbGFzcyBCYXNlQ2FtZXJhXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJEXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4xMi4wXHJcbiAqIFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlclxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbHBoYVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5WaXNpYmxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggcG9zaXRpb24gb2YgdGhlIENhbWVyYSwgcmVsYXRpdmUgdG8gdGhlIHRvcC1sZWZ0IG9mIHRoZSBnYW1lIGNhbnZhcy5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgQ2FtZXJhLCByZWxhdGl2ZSB0byB0aGUgdG9wLWxlZnQgb2YgdGhlIGdhbWUgY2FudmFzLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIENhbWVyYSwgaW4gcGl4ZWxzLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgQ2FtZXJhLCBpbiBwaXhlbHMuXHJcbiAqL1xyXG52YXIgQmFzZUNhbWVyYSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogRXZlbnRFbWl0dGVyLFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIENvbXBvbmVudHMuQWxwaGEsXHJcbiAgICAgICAgQ29tcG9uZW50cy5WaXNpYmxlXHJcbiAgICBdLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gQmFzZUNhbWVyYSAoeCwgeSwgd2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7IHggPSAwOyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0gMDsgfVxyXG4gICAgICAgIGlmICh3aWR0aCA9PT0gdW5kZWZpbmVkKSB7IHdpZHRoID0gMDsgfVxyXG4gICAgICAgIGlmIChoZWlnaHQgPT09IHVuZGVmaW5lZCkgeyBoZWlnaHQgPSAwOyB9XHJcblxyXG4gICAgICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgdGhpcyBjYW1lcmEgYmVsb25ncyB0by5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNzY2VuZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY2VuZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIEdhbWUgU2NlbmUgTWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNzY2VuZU1hbmFnZXJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lcy5TY2VuZU1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmVNYW5hZ2VyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgR2FtZSBTY2FsZSBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI3NjYWxlTWFuYWdlclxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NhbGUuU2NhbGVNYW5hZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjYWxlTWFuYWdlcjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lJ3MgQ2FtZXJhIE1hbmFnZXIgdG8gd2hpY2ggdGhpcyBDYW1lcmEgYmVsb25ncy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNjYW1lcmFNYW5hZ2VyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYW1lcmFNYW5hZ2VyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQ2FtZXJhIElELiBBc3NpZ25lZCBieSB0aGUgQ2FtZXJhIE1hbmFnZXIgYW5kIHVzZWQgdG8gaGFuZGxlIGNhbWVyYSBleGNsdXNpb24uXHJcbiAgICAgICAgICogVGhpcyB2YWx1ZSBpcyBhIGJpdG1hc2suXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjaWRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pZCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBuYW1lIG9mIHRoZSBDYW1lcmEuIFRoaXMgaXMgbGVmdCBlbXB0eSBmb3IgeW91ciBvd24gdXNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI25hbWVcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBkZWZhdWx0ICcnXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5uYW1lID0gJyc7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgaXMgdW4tdXNlZCBpbiB2My4xNi5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgR2FtZSwgdXNlZCBpbiBtb3N0IENhbWVyYSBjYWxjdWxhdGlvbnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjcmVzb2x1dGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlcHJlY2F0ZWRcclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2hvdWxkIHRoaXMgY2FtZXJhIHJvdW5kIGl0cyBwaXhlbCB2YWx1ZXMgdG8gaW50ZWdlcnM/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjcm91bmRQaXhlbHNcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucm91bmRQaXhlbHMgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXMgdGhpcyBDYW1lcmEgdmlzaWJsZSBvciBub3Q/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBBIHZpc2libGUgY2FtZXJhIHdpbGwgcmVuZGVyIGFuZCBwZXJmb3JtIGlucHV0IHRlc3RzLlxyXG4gICAgICAgICAqIEFuIGludmlzaWJsZSBjYW1lcmEgd2lsbCBub3QgcmVuZGVyIGFueXRoaW5nIGFuZCB3aWxsIHNraXAgaW5wdXQgdGVzdHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjdmlzaWJsZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElzIHRoaXMgQ2FtZXJhIHVzaW5nIGEgYm91bmRzIHRvIHJlc3RyaWN0IHNjcm9sbGluZyBtb3ZlbWVudD9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFNldCB0aGlzIHByb3BlcnR5IGFsb25nIHdpdGggdGhlIGJvdW5kcyB2aWEgYENhbWVyYS5zZXRCb3VuZHNgLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI3VzZUJvdW5kc1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy51c2VCb3VuZHMgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFdvcmxkIFZpZXcgaXMgYSBSZWN0YW5nbGUgdGhhdCBkZWZpbmVzIHRoZSBhcmVhIG9mIHRoZSAnd29ybGQnIHRoZSBDYW1lcmEgaXMgY3VycmVudGx5IGxvb2tpbmcgYXQuXHJcbiAgICAgICAgICogVGhpcyBmYWN0b3JzIGluIHRoZSBDYW1lcmEgdmlld3BvcnQgc2l6ZSwgem9vbSBhbmQgc2Nyb2xsIHBvc2l0aW9uIGFuZCBpcyB1cGRhdGVkIGluIHRoZSBDYW1lcmEgcHJlUmVuZGVyIHN0ZXAuXHJcbiAgICAgICAgICogSWYgeW91IGhhdmUgZW5hYmxlZCBDYW1lcmEgYm91bmRzIHRoZSB3b3JsZHZpZXcgd2lsbCBiZSBjbGFtcGVkIHRvIHRob3NlIGJvdW5kcyBhY2NvcmRpbmdseS5cclxuICAgICAgICAgKiBZb3UgY2FuIHVzZSBpdCBmb3IgY3VsbGluZyBvciBpbnRlcnNlY3Rpb24gY2hlY2tzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI3dvcmxkVmlld1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMud29ybGRWaWV3ID0gbmV3IFJlY3RhbmdsZSgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJcyB0aGlzIENhbWVyYSBkaXJ0eT9cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBBIGRpcnR5IENhbWVyYSBoYXMgaGFkIGVpdGhlciBpdHMgdmlld3BvcnQgc2l6ZSwgYm91bmRzLCBzY3JvbGwsIHJvdGF0aW9uIG9yIHpvb20gbGV2ZWxzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgZnJhbWUuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVGhpcyBmbGFnIGlzIGNsZWFyZWQgZHVyaW5nIHRoZSBgcG9zdFJlbmRlckNhbWVyYWAgbWV0aG9kIG9mIHRoZSByZW5kZXJlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNkaXJ0eVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB4IHBvc2l0aW9uIG9mIHRoZSBDYW1lcmEgdmlld3BvcnQsIHJlbGF0aXZlIHRvIHRoZSB0b3AtbGVmdCBvZiB0aGUgZ2FtZSBjYW52YXMuXHJcbiAgICAgICAgICogVGhlIHZpZXdwb3J0IGlzIHRoZSBhcmVhIGludG8gd2hpY2ggdGhlIGNhbWVyYSByZW5kZXJzLlxyXG4gICAgICAgICAqIFRvIGFkanVzdCB0aGUgcG9zaXRpb24gdGhlIGNhbWVyYSBpcyBsb29raW5nIGF0IGluIHRoZSBnYW1lIHdvcmxkLCBzZWUgdGhlIGBzY3JvbGxYYCB2YWx1ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSN4XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3ggPSB4O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgQ2FtZXJhLCByZWxhdGl2ZSB0byB0aGUgdG9wLWxlZnQgb2YgdGhlIGdhbWUgY2FudmFzLlxyXG4gICAgICAgICAqIFRoZSB2aWV3cG9ydCBpcyB0aGUgYXJlYSBpbnRvIHdoaWNoIHRoZSBjYW1lcmEgcmVuZGVycy5cclxuICAgICAgICAgKiBUbyBhZGp1c3QgdGhlIHBvc2l0aW9uIHRoZSBjYW1lcmEgaXMgbG9va2luZyBhdCBpbiB0aGUgZ2FtZSB3b3JsZCwgc2VlIHRoZSBgc2Nyb2xsWWAgdmFsdWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjeVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl95ID0geTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgQ2FtZXJhIFggdmFsdWUgbXVsdGlwbGllZCBieSB0aGUgcmVzb2x1dGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNfY3hcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2N4ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgQ2FtZXJhIFkgdmFsdWUgbXVsdGlwbGllZCBieSB0aGUgcmVzb2x1dGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNfY3lcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2N5ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgQ2FtZXJhIFdpZHRoIHZhbHVlIG11bHRpcGxpZWQgYnkgdGhlIHJlc29sdXRpb24uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjX2N3XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9jdyA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIENhbWVyYSBIZWlnaHQgdmFsdWUgbXVsdGlwbGllZCBieSB0aGUgcmVzb2x1dGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNfY2hcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2NoID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHdpZHRoIG9mIHRoZSBDYW1lcmEgdmlld3BvcnQsIGluIHBpeGVscy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoZSB2aWV3cG9ydCBpcyB0aGUgYXJlYSBpbnRvIHdoaWNoIHRoZSBDYW1lcmEgcmVuZGVycy4gU2V0dGluZyB0aGUgdmlld3BvcnQgZG9lc1xyXG4gICAgICAgICAqIG5vdCByZXN0cmljdCB3aGVyZSB0aGUgQ2FtZXJhIGNhbiBzY3JvbGwgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjX3dpZHRoXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl93aWR0aCA9IHdpZHRoO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBDYW1lcmEgdmlld3BvcnQsIGluIHBpeGVscy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoZSB2aWV3cG9ydCBpcyB0aGUgYXJlYSBpbnRvIHdoaWNoIHRoZSBDYW1lcmEgcmVuZGVycy4gU2V0dGluZyB0aGUgdmlld3BvcnQgZG9lc1xyXG4gICAgICAgICAqIG5vdCByZXN0cmljdCB3aGVyZSB0aGUgQ2FtZXJhIGNhbiBzY3JvbGwgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjX2hlaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYm91bmRzIHRoZSBjYW1lcmEgaXMgcmVzdHJhaW5lZCB0byBkdXJpbmcgc2Nyb2xsaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI19ib3VuZHNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fYm91bmRzID0gbmV3IFJlY3RhbmdsZSgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaG9yaXpvbnRhbCBzY3JvbGwgcG9zaXRpb24gb2YgdGhpcyBDYW1lcmEuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBDaGFuZ2UgdGhpcyB2YWx1ZSB0byBjYXVzZSB0aGUgQ2FtZXJhIHRvIHNjcm9sbCBhcm91bmQgeW91ciBTY2VuZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEFsdGVybmF0aXZlbHksIHNldHRpbmcgdGhlIENhbWVyYSB0byBmb2xsb3cgYSBHYW1lIE9iamVjdCwgdmlhIHRoZSBgc3RhcnRGb2xsb3dgIG1ldGhvZCxcclxuICAgICAgICAgKiB3aWxsIGF1dG9tYXRpY2FsbHkgYWRqdXN0IHRoZSBDYW1lcmEgc2Nyb2xsIHZhbHVlcyBhY2NvcmRpbmdseS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFlvdSBjYW4gc2V0IHRoZSBib3VuZHMgd2l0aGluIHdoaWNoIHRoZSBDYW1lcmEgY2FuIHNjcm9sbCB2aWEgdGhlIGBzZXRCb3VuZHNgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNfc2Nyb2xsWFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3Njcm9sbFggPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmVydGljYWwgc2Nyb2xsIHBvc2l0aW9uIG9mIHRoaXMgQ2FtZXJhLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQ2hhbmdlIHRoaXMgdmFsdWUgdG8gY2F1c2UgdGhlIENhbWVyYSB0byBzY3JvbGwgYXJvdW5kIHlvdXIgU2NlbmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBBbHRlcm5hdGl2ZWx5LCBzZXR0aW5nIHRoZSBDYW1lcmEgdG8gZm9sbG93IGEgR2FtZSBPYmplY3QsIHZpYSB0aGUgYHN0YXJ0Rm9sbG93YCBtZXRob2QsXHJcbiAgICAgICAgICogd2lsbCBhdXRvbWF0aWNhbGx5IGFkanVzdCB0aGUgQ2FtZXJhIHNjcm9sbCB2YWx1ZXMgYWNjb3JkaW5nbHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBZb3UgY2FuIHNldCB0aGUgYm91bmRzIHdpdGhpbiB3aGljaCB0aGUgQ2FtZXJhIGNhbiBzY3JvbGwgdmlhIHRoZSBgc2V0Qm91bmRzYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjX3Njcm9sbFlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9zY3JvbGxZID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIENhbWVyYSB6b29tIHZhbHVlLiBDaGFuZ2UgdGhpcyB2YWx1ZSB0byB6b29tIGluLCBvciBvdXQgb2YsIGEgU2NlbmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBBIHZhbHVlIG9mIDAuNSB3b3VsZCB6b29tIHRoZSBDYW1lcmEgb3V0LCBzbyB5b3UgY2FuIG5vdyBzZWUgdHdpY2UgYXMgbXVjaFxyXG4gICAgICAgICAqIG9mIHRoZSBTY2VuZSBhcyBiZWZvcmUuIEEgdmFsdWUgb2YgMiB3b3VsZCB6b29tIHRoZSBDYW1lcmEgaW4sIHNvIGV2ZXJ5IHBpeGVsXHJcbiAgICAgICAgICogbm93IHRha2VzIHVwIDIgcGl4ZWxzIHdoZW4gcmVuZGVyZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBTZXQgdG8gMSB0byByZXR1cm4gdG8gdGhlIGRlZmF1bHQgem9vbSBsZXZlbC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEJlIGNhcmVmdWwgdG8gbmV2ZXIgc2V0IHRoaXMgdmFsdWUgdG8gemVyby5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNfem9vbVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3pvb20gPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIENhbWVyYSBpbiByYWRpYW5zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQ2FtZXJhIHJvdGF0aW9uIGFsd2F5cyB0YWtlcyBwbGFjZSBiYXNlZCBvbiB0aGUgQ2FtZXJhIHZpZXdwb3J0LiBCeSBkZWZhdWx0LCByb3RhdGlvbiBoYXBwZW5zXHJcbiAgICAgICAgICogaW4gdGhlIGNlbnRlciBvZiB0aGUgdmlld3BvcnQuIFlvdSBjYW4gYWRqdXN0IHRoaXMgd2l0aCB0aGUgYG9yaWdpblhgIGFuZCBgb3JpZ2luWWAgcHJvcGVydGllcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFJvdGF0aW9uIGluZmx1ZW5jZXMgdGhlIHJlbmRlcmluZyBvZiBfYWxsXyBHYW1lIE9iamVjdHMgdmlzaWJsZSBieSB0aGlzIENhbWVyYS4gSG93ZXZlciwgaXQgZG9lcyBub3RcclxuICAgICAgICAgKiByb3RhdGUgdGhlIENhbWVyYSB2aWV3cG9ydCBpdHNlbGYsIHdoaWNoIGFsd2F5cyByZW1haW5zIGFuIGF4aXMtYWxpZ25lZCByZWN0YW5nbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjX3JvdGF0aW9uXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fcm90YXRpb24gPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGxvY2FsIHRyYW5zZm9ybSBtYXRyaXggdXNlZCBmb3IgaW50ZXJuYWwgY2FsY3VsYXRpb25zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI21hdHJpeFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1hdHJpeCA9IG5ldyBUcmFuc2Zvcm1NYXRyaXgoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRG9lcyB0aGlzIENhbWVyYSBoYXZlIGEgdHJhbnNwYXJlbnQgYmFja2dyb3VuZD9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSN0cmFuc3BhcmVudFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhpcyBDYW1lcmEuIE9ubHkgdXNlZCBpZiBgdHJhbnNwYXJlbnRgIGlzIGBmYWxzZWAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjYmFja2dyb3VuZENvbG9yXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5EaXNwbGF5LkNvbG9yfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gVmFsdWVUb0NvbG9yKCdyZ2JhKDAsMCwwLDApJyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBDYW1lcmEgYWxwaGEgdmFsdWUuIFNldHRpbmcgdGhpcyBwcm9wZXJ0eSBpbXBhY3RzIGV2ZXJ5IHNpbmdsZSBvYmplY3QgdGhhdCB0aGlzIENhbWVyYVxyXG4gICAgICAgICAqIHJlbmRlcnMuIFlvdSBjYW4gZWl0aGVyIHNldCB0aGUgcHJvcGVydHkgZGlyZWN0bHksIGkuZS4gdmlhIGEgVHdlZW4sIHRvIGZhZGUgYSBDYW1lcmEgaW4gb3Igb3V0LFxyXG4gICAgICAgICAqIG9yIHZpYSB0aGUgY2hhaW5hYmxlIGBzZXRBbHBoYWAgbWV0aG9kIGluc3RlYWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjYWxwaGFcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNob3VsZCB0aGUgY2FtZXJhIGN1bGwgR2FtZSBPYmplY3RzIGJlZm9yZSBjaGVja2luZyB0aGVtIGZvciBpbnB1dCBoaXQgdGVzdHM/XHJcbiAgICAgICAgICogSW4gc29tZSBzcGVjaWFsIGNhc2VzIGl0IG1heSBiZSBiZW5lZmljaWFsIHRvIGRpc2FibGUgdGhpcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNkaXNhYmxlQ3VsbFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kaXNhYmxlQ3VsbCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHRlbXBvcmFyeSBhcnJheSBvZiBjdWxsZWQgb2JqZWN0cy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNjdWxsZWRPYmplY3RzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119XHJcbiAgICAgICAgICogQGRlZmF1bHQgW11cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3VsbGVkT2JqZWN0cyA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbWlkLXBvaW50IG9mIHRoZSBDYW1lcmEgaW4gJ3dvcmxkJyBjb29yZGluYXRlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFVzZSBpdCB0byBvYnRhaW4gZXhhY3RseSB3aGVyZSBpbiB0aGUgd29ybGQgdGhlIGNlbnRlciBvZiB0aGUgY2FtZXJhIGlzIGN1cnJlbnRseSBsb29raW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhpcyB2YWx1ZSBpcyB1cGRhdGVkIGluIHRoZSBwcmVSZW5kZXIgbWV0aG9kLCBhZnRlciB0aGUgc2Nyb2xsIHZhbHVlcyBhbmQgZm9sbG93ZXJcclxuICAgICAgICAgKiBoYXZlIGJlZW4gcHJvY2Vzc2VkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI21pZFBvaW50XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWlkUG9pbnQgPSBuZXcgVmVjdG9yMih3aWR0aCAvIDIsIGhlaWdodCAvIDIpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaG9yaXpvbnRhbCBvcmlnaW4gb2Ygcm90YXRpb24gZm9yIHRoaXMgQ2FtZXJhLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQnkgZGVmYXVsdCB0aGUgY2FtZXJhIHJvdGF0ZXMgYXJvdW5kIHRoZSBjZW50ZXIgb2YgdGhlIHZpZXdwb3J0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQ2hhbmdpbmcgdGhlIG9yaWdpbiBhbGxvd3MgeW91IHRvIGFkanVzdCB0aGUgcG9pbnQgaW4gdGhlIHZpZXdwb3J0IGZyb20gd2hpY2ggcm90YXRpb24gaGFwcGVucy5cclxuICAgICAgICAgKiBBIHZhbHVlIG9mIDAgd291bGQgcm90YXRlIGZyb20gdGhlIHRvcC1sZWZ0IG9mIHRoZSB2aWV3cG9ydC4gQSB2YWx1ZSBvZiAxIGZyb20gdGhlIGJvdHRvbSByaWdodC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFNlZSBgc2V0T3JpZ2luYCB0byBzZXQgYm90aCBvcmlnaW5zIGluIGEgc2luZ2xlLCBjaGFpbmFibGUgY2FsbC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNvcmlnaW5YXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwLjVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5vcmlnaW5YID0gMC41O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmVydGljYWwgb3JpZ2luIG9mIHJvdGF0aW9uIGZvciB0aGlzIENhbWVyYS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEJ5IGRlZmF1bHQgdGhlIGNhbWVyYSByb3RhdGVzIGFyb3VuZCB0aGUgY2VudGVyIG9mIHRoZSB2aWV3cG9ydC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIENoYW5naW5nIHRoZSBvcmlnaW4gYWxsb3dzIHlvdSB0byBhZGp1c3QgdGhlIHBvaW50IGluIHRoZSB2aWV3cG9ydCBmcm9tIHdoaWNoIHJvdGF0aW9uIGhhcHBlbnMuXHJcbiAgICAgICAgICogQSB2YWx1ZSBvZiAwIHdvdWxkIHJvdGF0ZSBmcm9tIHRoZSB0b3AtbGVmdCBvZiB0aGUgdmlld3BvcnQuIEEgdmFsdWUgb2YgMSBmcm9tIHRoZSBib3R0b20gcmlnaHQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBTZWUgYHNldE9yaWdpbmAgdG8gc2V0IGJvdGggb3JpZ2lucyBpbiBhIHNpbmdsZSwgY2hhaW5hYmxlIGNhbGwuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjb3JpZ2luWVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMC41XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub3JpZ2luWSA9IDAuNTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRG9lcyB0aGlzIENhbWVyYSBoYXZlIGEgY3VzdG9tIHZpZXdwb3J0P1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI19jdXN0b21WaWV3cG9ydFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fY3VzdG9tVmlld3BvcnQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIE1hc2sgdGhpcyBDYW1lcmEgaXMgdXNpbmcgZHVyaW5nIHJlbmRlci5cclxuICAgICAgICAgKiBTZXQgdGhlIG1hc2sgdXNpbmcgdGhlIGBzZXRNYXNrYCBtZXRob2QuIFJlbW92ZSB0aGUgbWFzayB1c2luZyB0aGUgYGNsZWFyTWFza2AgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI21hc2tcclxuICAgICAgICAgKiBAdHlwZSB7PyhQaGFzZXIuRGlzcGxheS5NYXNrcy5CaXRtYXBNYXNrfFBoYXNlci5EaXNwbGF5Lk1hc2tzLkdlb21ldHJ5TWFzayl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWFzayA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBDYW1lcmEgdGhhdCB0aGlzIENhbWVyYSB1c2VzIGZvciB0cmFuc2xhdGlvbiBkdXJpbmcgbWFza2luZy5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBJZiB0aGUgbWFzayBpcyBmaXhlZCBpbiBwb3NpdGlvbiB0aGlzIHdpbGwgYmUgYSByZWZlcmVuY2UgdG9cclxuICAgICAgICAgKiB0aGUgQ2FtZXJhTWFuYWdlci5kZWZhdWx0IGluc3RhbmNlLiBPdGhlcndpc2UsIGl0J2xsIGJlIGEgcmVmZXJlbmNlXHJcbiAgICAgICAgICogdG8gaXRzZWxmLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI19tYXNrQ2FtZXJhXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmF9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fbWFza0NhbWVyYSA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBBbHBoYSBsZXZlbCBvZiB0aGlzIENhbWVyYS4gVGhlIGFscGhhIGNvbnRyb2xzIHRoZSBvcGFjaXR5IG9mIHRoZSBDYW1lcmEgYXMgaXQgcmVuZGVycy5cclxuICAgICAqIEFscGhhIHZhbHVlcyBhcmUgcHJvdmlkZWQgYXMgYSBmbG9hdCBiZXR3ZWVuIDAsIGZ1bGx5IHRyYW5zcGFyZW50LCBhbmQgMSwgZnVsbHkgb3BhcXVlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI3NldEFscGhhXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt2YWx1ZT0xXSAtIFRoZSBDYW1lcmEgYWxwaGEgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHJvdGF0aW9uIG9yaWdpbiBvZiB0aGlzIENhbWVyYS5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgdmFsdWVzIGFyZSBnaXZlbiBpbiB0aGUgcmFuZ2UgMCB0byAxIGFuZCBhcmUgb25seSB1c2VkIHdoZW4gY2FsY3VsYXRpbmcgQ2FtZXJhIHJvdGF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEJ5IGRlZmF1bHQgdGhlIGNhbWVyYSByb3RhdGVzIGFyb3VuZCB0aGUgY2VudGVyIG9mIHRoZSB2aWV3cG9ydC5cclxuICAgICAqXHJcbiAgICAgKiBDaGFuZ2luZyB0aGUgb3JpZ2luIGFsbG93cyB5b3UgdG8gYWRqdXN0IHRoZSBwb2ludCBpbiB0aGUgdmlld3BvcnQgZnJvbSB3aGljaCByb3RhdGlvbiBoYXBwZW5zLlxyXG4gICAgICogQSB2YWx1ZSBvZiAwIHdvdWxkIHJvdGF0ZSBmcm9tIHRoZSB0b3AtbGVmdCBvZiB0aGUgdmlld3BvcnQuIEEgdmFsdWUgb2YgMSBmcm9tIHRoZSBib3R0b20gcmlnaHQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjc2V0T3JpZ2luXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4PTAuNV0gLSBUaGUgaG9yaXpvbnRhbCBvcmlnaW4gdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9eF0gLSBUaGUgdmVydGljYWwgb3JpZ2luIHZhbHVlLiBJZiBub3QgZGVmaW5lZCBpdCB3aWxsIGJlIHNldCB0byB0aGUgdmFsdWUgb2YgYHhgLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgQ2FtZXJhIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRPcmlnaW46IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDAuNTsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IHg7IH1cclxuXHJcbiAgICAgICAgdGhpcy5vcmlnaW5YID0geDtcclxuICAgICAgICB0aGlzLm9yaWdpblkgPSB5O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIHdoYXQgdGhlIENhbWVyYS5zY3JvbGxYIGFuZCBzY3JvbGxZIHZhbHVlcyB3b3VsZCBuZWVkIHRvIGJlIGluIG9yZGVyIHRvIG1vdmVcclxuICAgICAqIHRoZSBDYW1lcmEgc28gaXQgaXMgY2VudGVyZWQgb24gdGhlIGdpdmVuIHggYW5kIHkgY29vcmRpbmF0ZXMsIHdpdGhvdXQgYWN0dWFsbHkgbW92aW5nXHJcbiAgICAgKiB0aGUgQ2FtZXJhIHRoZXJlLiBUaGUgcmVzdWx0cyBhcmUgY2xhbXBlZCBiYXNlZCBvbiB0aGUgQ2FtZXJhIGJvdW5kcywgaWYgc2V0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI2dldFNjcm9sbFxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgY29vcmRpbmF0ZSB0byBjZW50ZXIgb24uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBjb29yZGluYXRlIHRvIGNlbnRlciBvbi5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW291dF0gLSBBIFZlYzIgdG8gc3RvcmUgdGhlIHZhbHVlcyBpbi4gSWYgbm90IGdpdmVuIGEgbmV3IFZlYzIgaXMgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBUaGUgc2Nyb2xsIGNvb3JkaW5hdGVzIHN0b3JlZCBpbiB0aGUgYHhgIGFuZCBgeWAgcHJvcGVydGllcy5cclxuICAgICAqL1xyXG4gICAgZ2V0U2Nyb2xsOiBmdW5jdGlvbiAoeCwgeSwgb3V0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgVmVjdG9yMigpOyB9XHJcblxyXG4gICAgICAgIHZhciBvcmlnaW5YID0gdGhpcy53aWR0aCAqIDAuNTtcclxuICAgICAgICB2YXIgb3JpZ2luWSA9IHRoaXMuaGVpZ2h0ICogMC41O1xyXG5cclxuICAgICAgICBvdXQueCA9IHggLSBvcmlnaW5YO1xyXG4gICAgICAgIG91dC55ID0geSAtIG9yaWdpblk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnVzZUJvdW5kcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG91dC54ID0gdGhpcy5jbGFtcFgob3V0LngpO1xyXG4gICAgICAgICAgICBvdXQueSA9IHRoaXMuY2xhbXBZKG91dC55KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW92ZXMgdGhlIENhbWVyYSBob3Jpem9udGFsbHkgc28gdGhhdCBpdCBpcyBjZW50ZXJlZCBvbiB0aGUgZ2l2ZW4geCBjb29yZGluYXRlLCBib3VuZHMgYWxsb3dpbmcuXHJcbiAgICAgKiBDYWxsaW5nIHRoaXMgZG9lcyBub3QgY2hhbmdlIHRoZSBzY3JvbGxZIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI2NlbnRlck9uWFxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgY29vcmRpbmF0ZSB0byBjZW50ZXIgb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgY2VudGVyT25YOiBmdW5jdGlvbiAoeClcclxuICAgIHtcclxuICAgICAgICB2YXIgb3JpZ2luWCA9IHRoaXMud2lkdGggKiAwLjU7XHJcblxyXG4gICAgICAgIHRoaXMubWlkUG9pbnQueCA9IHg7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsWCA9IHggLSBvcmlnaW5YO1xyXG5cclxuICAgICAgICBpZiAodGhpcy51c2VCb3VuZHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbFggPSB0aGlzLmNsYW1wWCh0aGlzLnNjcm9sbFgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW92ZXMgdGhlIENhbWVyYSB2ZXJ0aWNhbGx5IHNvIHRoYXQgaXQgaXMgY2VudGVyZWQgb24gdGhlIGdpdmVuIHkgY29vcmRpbmF0ZSwgYm91bmRzIGFsbG93aW5nLlxyXG4gICAgICogQ2FsbGluZyB0aGlzIGRvZXMgbm90IGNoYW5nZSB0aGUgc2Nyb2xsWCB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNjZW50ZXJPbllcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBjb29yZGluYXRlIHRvIGNlbnRlciBvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmF9IFRoaXMgQ2FtZXJhIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBjZW50ZXJPblk6IGZ1bmN0aW9uICh5KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBvcmlnaW5ZID0gdGhpcy5oZWlnaHQgKiAwLjU7XHJcblxyXG4gICAgICAgIHRoaXMubWlkUG9pbnQueSA9IHk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsWSA9IHkgLSBvcmlnaW5ZO1xyXG5cclxuICAgICAgICBpZiAodGhpcy51c2VCb3VuZHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbFkgPSB0aGlzLmNsYW1wWSh0aGlzLnNjcm9sbFkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW92ZXMgdGhlIENhbWVyYSBzbyB0aGF0IGl0IGlzIGNlbnRlcmVkIG9uIHRoZSBnaXZlbiBjb29yZGluYXRlcywgYm91bmRzIGFsbG93aW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI2NlbnRlck9uXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBjb29yZGluYXRlIHRvIGNlbnRlciBvbi5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIGNvb3JkaW5hdGUgdG8gY2VudGVyIG9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGNlbnRlck9uOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNlbnRlck9uWCh4KTtcclxuICAgICAgICB0aGlzLmNlbnRlck9uWSh5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW92ZXMgdGhlIENhbWVyYSBzbyB0aGF0IGl0IGlzIGxvb2tpbmcgYXQgdGhlIGNlbnRlciBvZiB0aGUgQ2FtZXJhIEJvdW5kcywgaWYgZW5hYmxlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNjZW50ZXJUb0JvdW5kc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgY2VudGVyVG9Cb3VuZHM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMudXNlQm91bmRzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcclxuICAgICAgICAgICAgdmFyIG9yaWdpblggPSB0aGlzLndpZHRoICogMC41O1xyXG4gICAgICAgICAgICB2YXIgb3JpZ2luWSA9IHRoaXMuaGVpZ2h0ICogMC41O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5taWRQb2ludC5zZXQoYm91bmRzLmNlbnRlclgsIGJvdW5kcy5jZW50ZXJZKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsWCA9IGJvdW5kcy5jZW50ZXJYIC0gb3JpZ2luWDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxZID0gYm91bmRzLmNlbnRlclkgLSBvcmlnaW5ZO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW92ZXMgdGhlIENhbWVyYSBzbyB0aGF0IGl0IGlzIHJlLWNlbnRlcmVkIGJhc2VkIG9uIGl0cyB2aWV3cG9ydCBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI2NlbnRlclRvU2l6ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgY2VudGVyVG9TaXplOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsWCA9IHRoaXMud2lkdGggKiAwLjU7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxZID0gdGhpcy5oZWlnaHQgKiAwLjU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRha2VzIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyBhbmQgcmV0dXJucyBhIG5ldyBhcnJheSBmZWF0dXJpbmcgb25seSB0aG9zZSBvYmplY3RzXHJcbiAgICAgKiB2aXNpYmxlIGJ5IHRoaXMgY2FtZXJhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI2N1bGxcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBHIC0gW3JlbmRlcmFibGVPYmplY3RzLCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSByZW5kZXJhYmxlT2JqZWN0cyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0byBjdWxsLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB2aXNpYmxlIHRvIHRoaXMgQ2FtZXJhLlxyXG4gICAgICovXHJcbiAgICBjdWxsOiBmdW5jdGlvbiAocmVuZGVyYWJsZU9iamVjdHMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZUN1bGwpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZU9iamVjdHM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY2FtZXJhTWF0cml4ID0gdGhpcy5tYXRyaXgubWF0cml4O1xyXG5cclxuICAgICAgICB2YXIgbXZhID0gY2FtZXJhTWF0cml4WzBdO1xyXG4gICAgICAgIHZhciBtdmIgPSBjYW1lcmFNYXRyaXhbMV07XHJcbiAgICAgICAgdmFyIG12YyA9IGNhbWVyYU1hdHJpeFsyXTtcclxuICAgICAgICB2YXIgbXZkID0gY2FtZXJhTWF0cml4WzNdO1xyXG5cclxuICAgICAgICAvKiBGaXJzdCBJbnZlcnQgTWF0cml4ICovXHJcbiAgICAgICAgdmFyIGRldGVybWluYW50ID0gKG12YSAqIG12ZCkgLSAobXZiICogbXZjKTtcclxuXHJcbiAgICAgICAgaWYgKCFkZXRlcm1pbmFudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlT2JqZWN0cztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBtdmUgPSBjYW1lcmFNYXRyaXhbNF07XHJcbiAgICAgICAgdmFyIG12ZiA9IGNhbWVyYU1hdHJpeFs1XTtcclxuXHJcbiAgICAgICAgdmFyIHNjcm9sbFggPSB0aGlzLnNjcm9sbFg7XHJcbiAgICAgICAgdmFyIHNjcm9sbFkgPSB0aGlzLnNjcm9sbFk7XHJcbiAgICAgICAgdmFyIGNhbWVyYVcgPSB0aGlzLndpZHRoO1xyXG4gICAgICAgIHZhciBjYW1lcmFIID0gdGhpcy5oZWlnaHQ7XHJcbiAgICAgICAgdmFyIGN1bGxlZE9iamVjdHMgPSB0aGlzLmN1bGxlZE9iamVjdHM7XHJcbiAgICAgICAgdmFyIGxlbmd0aCA9IHJlbmRlcmFibGVPYmplY3RzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgZGV0ZXJtaW5hbnQgPSAxIC8gZGV0ZXJtaW5hbnQ7XHJcblxyXG4gICAgICAgIGN1bGxlZE9iamVjdHMubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBvYmplY3QgPSByZW5kZXJhYmxlT2JqZWN0c1tpbmRleF07XHJcblxyXG4gICAgICAgICAgICBpZiAoIW9iamVjdC5oYXNPd25Qcm9wZXJ0eSgnd2lkdGgnKSB8fCBvYmplY3QucGFyZW50Q29udGFpbmVyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjdWxsZWRPYmplY3RzLnB1c2gob2JqZWN0KTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgb2JqZWN0VyA9IG9iamVjdC53aWR0aDtcclxuICAgICAgICAgICAgdmFyIG9iamVjdEggPSBvYmplY3QuaGVpZ2h0O1xyXG4gICAgICAgICAgICB2YXIgb2JqZWN0WCA9IChvYmplY3QueCAtIChzY3JvbGxYICogb2JqZWN0LnNjcm9sbEZhY3RvclgpKSAtIChvYmplY3RXICogb2JqZWN0Lm9yaWdpblgpO1xyXG4gICAgICAgICAgICB2YXIgb2JqZWN0WSA9IChvYmplY3QueSAtIChzY3JvbGxZICogb2JqZWN0LnNjcm9sbEZhY3RvclkpKSAtIChvYmplY3RIICogb2JqZWN0Lm9yaWdpblkpO1xyXG4gICAgICAgICAgICB2YXIgdHggPSAob2JqZWN0WCAqIG12YSArIG9iamVjdFkgKiBtdmMgKyBtdmUpO1xyXG4gICAgICAgICAgICB2YXIgdHkgPSAob2JqZWN0WCAqIG12YiArIG9iamVjdFkgKiBtdmQgKyBtdmYpO1xyXG4gICAgICAgICAgICB2YXIgdHcgPSAoKG9iamVjdFggKyBvYmplY3RXKSAqIG12YSArIChvYmplY3RZICsgb2JqZWN0SCkgKiBtdmMgKyBtdmUpO1xyXG4gICAgICAgICAgICB2YXIgdGggPSAoKG9iamVjdFggKyBvYmplY3RXKSAqIG12YiArIChvYmplY3RZICsgb2JqZWN0SCkgKiBtdmQgKyBtdmYpO1xyXG4gICAgICAgICAgICB2YXIgY3VsbFRvcCA9IHRoaXMueTtcclxuICAgICAgICAgICAgdmFyIGN1bGxCb3R0b20gPSBjdWxsVG9wICsgY2FtZXJhSDtcclxuICAgICAgICAgICAgdmFyIGN1bGxMZWZ0ID0gdGhpcy54O1xyXG4gICAgICAgICAgICB2YXIgY3VsbFJpZ2h0ID0gY3VsbExlZnQgKyBjYW1lcmFXO1xyXG5cclxuICAgICAgICAgICAgaWYgKCh0dyA+IGN1bGxMZWZ0ICYmIHR4IDwgY3VsbFJpZ2h0KSAmJiAodGggPiBjdWxsVG9wICYmIHR5IDwgY3VsbEJvdHRvbSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGN1bGxlZE9iamVjdHMucHVzaChvYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY3VsbGVkT2JqZWN0cztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gYHhgIGFuZCBgeWAgY29vcmRpbmF0ZXMgaW50byBXb3JsZCBzcGFjZSwgYmFzZWQgb24gdGhpcyBDYW1lcmFzIHRyYW5zZm9ybS5cclxuICAgICAqIFlvdSBjYW4gb3B0aW9uYWxseSBwcm92aWRlIGEgVmVjdG9yMiwgb3Igc2ltaWxhciBvYmplY3QsIHRvIHN0b3JlIHRoZSByZXN1bHRzIGluLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI2dldFdvcmxkUG9pbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBPIC0gW291dHB1dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggcG9zaXRpb24gdG8gY29udmVydCB0byB3b3JsZCBzcGFjZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgcG9zaXRpb24gdG8gY29udmVydCB0byB3b3JsZCBzcGFjZS5cclxuICAgICAqIEBwYXJhbSB7KG9iamVjdHxQaGFzZXIuTWF0aC5WZWN0b3IyKX0gW291dHB1dF0gLSBBbiBvcHRpb25hbCBvYmplY3QgdG8gc3RvcmUgdGhlIHJlc3VsdHMgaW4uIElmIG5vdCBwcm92aWRlZCBhIG5ldyBWZWN0b3IyIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBBbiBvYmplY3QgaG9sZGluZyB0aGUgY29udmVydGVkIHZhbHVlcyBpbiBpdHMgYHhgIGFuZCBgeWAgcHJvcGVydGllcy5cclxuICAgICAqL1xyXG4gICAgZ2V0V29ybGRQb2ludDogZnVuY3Rpb24gKHgsIHksIG91dHB1dClcclxuICAgIHtcclxuICAgICAgICBpZiAob3V0cHV0ID09PSB1bmRlZmluZWQpIHsgb3V0cHV0ID0gbmV3IFZlY3RvcjIoKTsgfVxyXG5cclxuICAgICAgICB2YXIgY2FtZXJhTWF0cml4ID0gdGhpcy5tYXRyaXgubWF0cml4O1xyXG5cclxuICAgICAgICB2YXIgbXZhID0gY2FtZXJhTWF0cml4WzBdO1xyXG4gICAgICAgIHZhciBtdmIgPSBjYW1lcmFNYXRyaXhbMV07XHJcbiAgICAgICAgdmFyIG12YyA9IGNhbWVyYU1hdHJpeFsyXTtcclxuICAgICAgICB2YXIgbXZkID0gY2FtZXJhTWF0cml4WzNdO1xyXG4gICAgICAgIHZhciBtdmUgPSBjYW1lcmFNYXRyaXhbNF07XHJcbiAgICAgICAgdmFyIG12ZiA9IGNhbWVyYU1hdHJpeFs1XTtcclxuXHJcbiAgICAgICAgLy8gIEludmVydCBNYXRyaXhcclxuICAgICAgICB2YXIgZGV0ZXJtaW5hbnQgPSAobXZhICogbXZkKSAtIChtdmIgKiBtdmMpO1xyXG5cclxuICAgICAgICBpZiAoIWRldGVybWluYW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb3V0cHV0LnggPSB4O1xyXG4gICAgICAgICAgICBvdXRwdXQueSA9IHk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGV0ZXJtaW5hbnQgPSAxIC8gZGV0ZXJtaW5hbnQ7XHJcblxyXG4gICAgICAgIHZhciBpbWEgPSBtdmQgKiBkZXRlcm1pbmFudDtcclxuICAgICAgICB2YXIgaW1iID0gLW12YiAqIGRldGVybWluYW50O1xyXG4gICAgICAgIHZhciBpbWMgPSAtbXZjICogZGV0ZXJtaW5hbnQ7XHJcbiAgICAgICAgdmFyIGltZCA9IG12YSAqIGRldGVybWluYW50O1xyXG4gICAgICAgIHZhciBpbWUgPSAobXZjICogbXZmIC0gbXZkICogbXZlKSAqIGRldGVybWluYW50O1xyXG4gICAgICAgIHZhciBpbWYgPSAobXZiICogbXZlIC0gbXZhICogbXZmKSAqIGRldGVybWluYW50O1xyXG5cclxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKHRoaXMucm90YXRpb24pO1xyXG4gICAgICAgIHZhciBzID0gTWF0aC5zaW4odGhpcy5yb3RhdGlvbik7XHJcblxyXG4gICAgICAgIHZhciB6b29tID0gdGhpcy56b29tO1xyXG4gICAgICAgIHZhciByZXMgPSB0aGlzLnJlc29sdXRpb247XHJcblxyXG4gICAgICAgIHZhciBzY3JvbGxYID0gdGhpcy5zY3JvbGxYO1xyXG4gICAgICAgIHZhciBzY3JvbGxZID0gdGhpcy5zY3JvbGxZO1xyXG5cclxuICAgICAgICAvLyAgV29ya3MgZm9yIHpvb20gb2YgMSB3aXRoIGFueSByZXNvbHV0aW9uLCBidXQgcmVzb2x1dGlvbiA+IDEgYW5kIHpvb20gIT09IDEgYnJlYWtzXHJcbiAgICAgICAgdmFyIHN4ID0geCArICgoc2Nyb2xsWCAqIGMgLSBzY3JvbGxZICogcykgKiB6b29tKTtcclxuICAgICAgICB2YXIgc3kgPSB5ICsgKChzY3JvbGxYICogcyArIHNjcm9sbFkgKiBjKSAqIHpvb20pO1xyXG5cclxuICAgICAgICAvLyAgQXBwbHkgdHJhbnNmb3JtIHRvIHBvaW50XHJcbiAgICAgICAgb3V0cHV0LnggPSAoc3ggKiBpbWEgKyBzeSAqIGltYykgKiByZXMgKyBpbWU7XHJcbiAgICAgICAgb3V0cHV0LnkgPSAoc3ggKiBpbWIgKyBzeSAqIGltZCkgKiByZXMgKyBpbWY7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2l2ZW4gYSBHYW1lIE9iamVjdCwgb3IgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLCBpdCB3aWxsIHVwZGF0ZSBhbGwgb2YgdGhlaXIgY2FtZXJhIGZpbHRlciBzZXR0aW5nc1xyXG4gICAgICogc28gdGhhdCB0aGV5IGFyZSBpZ25vcmVkIGJ5IHRoaXMgQ2FtZXJhLiBUaGlzIG1lYW5zIHRoZXkgd2lsbCBub3QgYmUgcmVuZGVyZWQgYnkgdGhpcyBDYW1lcmEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjaWdub3JlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdHxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCl9IGVudHJpZXMgLSBUaGUgR2FtZSBPYmplY3QsIG9yIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgdG8gYmUgaWdub3JlZCBieSB0aGlzIENhbWVyYS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmF9IFRoaXMgQ2FtZXJhIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBpZ25vcmU6IGZ1bmN0aW9uIChlbnRyaWVzKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpZCA9IHRoaXMuaWQ7XHJcblxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlbnRyaWVzKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGVudHJpZXMgPSBbIGVudHJpZXMgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbnRyeSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaWdub3JlKGVudHJ5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChlbnRyeS5pc1BhcmVudClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pZ25vcmUoZW50cnkuZ2V0Q2hpbGRyZW4oKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBlbnRyeS5jYW1lcmFGaWx0ZXIgfD0gaWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIHByZVJlbmRlciBzdGVwLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI3ByZVJlbmRlclxyXG4gICAgICogQHByb3RlY3RlZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJlc29sdXRpb24gLSBUaGUgZ2FtZSByZXNvbHV0aW9uLCBhcyBzZXQgaW4gdGhlIFNjYWxlIE1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIHByZVJlbmRlcjogZnVuY3Rpb24gKHJlc29sdXRpb24pXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHdpZHRoID0gdGhpcy53aWR0aDtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcblxyXG4gICAgICAgIHZhciBoYWxmV2lkdGggPSB3aWR0aCAqIDAuNTtcclxuICAgICAgICB2YXIgaGFsZkhlaWdodCA9IGhlaWdodCAqIDAuNTtcclxuXHJcbiAgICAgICAgdmFyIHpvb20gPSB0aGlzLnpvb20gKiByZXNvbHV0aW9uO1xyXG4gICAgICAgIHZhciBtYXRyaXggPSB0aGlzLm1hdHJpeDtcclxuXHJcbiAgICAgICAgdmFyIG9yaWdpblggPSB3aWR0aCAqIHRoaXMub3JpZ2luWDtcclxuICAgICAgICB2YXIgb3JpZ2luWSA9IGhlaWdodCAqIHRoaXMub3JpZ2luWTtcclxuXHJcbiAgICAgICAgdmFyIHN4ID0gdGhpcy5zY3JvbGxYO1xyXG4gICAgICAgIHZhciBzeSA9IHRoaXMuc2Nyb2xsWTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudXNlQm91bmRzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc3ggPSB0aGlzLmNsYW1wWChzeCk7XHJcbiAgICAgICAgICAgIHN5ID0gdGhpcy5jbGFtcFkoc3kpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucm91bmRQaXhlbHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvcmlnaW5YID0gTWF0aC5yb3VuZChvcmlnaW5YKTtcclxuICAgICAgICAgICAgb3JpZ2luWSA9IE1hdGgucm91bmQob3JpZ2luWSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgVmFsdWVzIGFyZSBpbiBwaXhlbHMgYW5kIG5vdCBpbXBhY3RlZCBieSB6b29taW5nIHRoZSBDYW1lcmFcclxuICAgICAgICB0aGlzLnNjcm9sbFggPSBzeDtcclxuICAgICAgICB0aGlzLnNjcm9sbFkgPSBzeTtcclxuXHJcbiAgICAgICAgdmFyIG1pZFggPSBzeCArIGhhbGZXaWR0aDtcclxuICAgICAgICB2YXIgbWlkWSA9IHN5ICsgaGFsZkhlaWdodDtcclxuXHJcbiAgICAgICAgLy8gIFRoZSBjZW50ZXIgb2YgdGhlIGNhbWVyYSwgaW4gd29ybGQgc3BhY2UsIHNvIHRha2luZyB6b29tIGludG8gYWNjb3VudFxyXG4gICAgICAgIC8vICBCYXNpY2FsbHkgdGhlIHBpeGVsIHZhbHVlIG9mIHdoYXQgaXQncyBsb29raW5nIGF0IGluIHRoZSBtaWRkbGUgb2YgdGhlIGNhbVxyXG4gICAgICAgIHRoaXMubWlkUG9pbnQuc2V0KG1pZFgsIG1pZFkpO1xyXG5cclxuICAgICAgICB2YXIgZGlzcGxheVdpZHRoID0gd2lkdGggLyB6b29tO1xyXG4gICAgICAgIHZhciBkaXNwbGF5SGVpZ2h0ID0gaGVpZ2h0IC8gem9vbTtcclxuXHJcbiAgICAgICAgdGhpcy53b3JsZFZpZXcuc2V0VG8oXHJcbiAgICAgICAgICAgIG1pZFggLSAoZGlzcGxheVdpZHRoIC8gMiksXHJcbiAgICAgICAgICAgIG1pZFkgLSAoZGlzcGxheUhlaWdodCAvIDIpLFxyXG4gICAgICAgICAgICBkaXNwbGF5V2lkdGgsXHJcbiAgICAgICAgICAgIGRpc3BsYXlIZWlnaHRcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBtYXRyaXguYXBwbHlJVFJTKHRoaXMueCArIG9yaWdpblgsIHRoaXMueSArIG9yaWdpblksIHRoaXMucm90YXRpb24sIHpvb20sIHpvb20pO1xyXG4gICAgICAgIG1hdHJpeC50cmFuc2xhdGUoLW9yaWdpblgsIC1vcmlnaW5ZKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhbiB4IHZhbHVlIGFuZCBjaGVja3MgaXQncyB3aXRoaW4gdGhlIHJhbmdlIG9mIHRoZSBDYW1lcmEgYm91bmRzLCBhZGp1c3RpbmcgaWYgcmVxdWlyZWQuXHJcbiAgICAgKiBEbyBub3QgY2FsbCB0aGlzIG1ldGhvZCBpZiB5b3UgYXJlIG5vdCB1c2luZyBjYW1lcmEgYm91bmRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI2NsYW1wWFxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHZhbHVlIHRvIGhvcml6b250YWxseSBzY3JvbGwgY2xhbXAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgYWRqdXN0ZWQgdmFsdWUgdG8gdXNlIGFzIHNjcm9sbFguXHJcbiAgICAgKi9cclxuICAgIGNsYW1wWDogZnVuY3Rpb24gKHgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcclxuXHJcbiAgICAgICAgdmFyIGR3ID0gdGhpcy5kaXNwbGF5V2lkdGg7XHJcblxyXG4gICAgICAgIHZhciBieCA9IGJvdW5kcy54ICsgKChkdyAtIHRoaXMud2lkdGgpIC8gMik7XHJcbiAgICAgICAgdmFyIGJ3ID0gTWF0aC5tYXgoYngsIGJ4ICsgYm91bmRzLndpZHRoIC0gZHcpO1xyXG5cclxuICAgICAgICBpZiAoeCA8IGJ4KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgeCA9IGJ4O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh4ID4gYncpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB4ID0gYnc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4geDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIHkgdmFsdWUgYW5kIGNoZWNrcyBpdCdzIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgdGhlIENhbWVyYSBib3VuZHMsIGFkanVzdGluZyBpZiByZXF1aXJlZC5cclxuICAgICAqIERvIG5vdCBjYWxsIHRoaXMgbWV0aG9kIGlmIHlvdSBhcmUgbm90IHVzaW5nIGNhbWVyYSBib3VuZHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjY2xhbXBZXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmFsdWUgdG8gdmVydGljYWxseSBzY3JvbGwgY2xhbXAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgYWRqdXN0ZWQgdmFsdWUgdG8gdXNlIGFzIHNjcm9sbFkuXHJcbiAgICAgKi9cclxuICAgIGNsYW1wWTogZnVuY3Rpb24gKHkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcclxuXHJcbiAgICAgICAgdmFyIGRoID0gdGhpcy5kaXNwbGF5SGVpZ2h0O1xyXG5cclxuICAgICAgICB2YXIgYnkgPSBib3VuZHMueSArICgoZGggLSB0aGlzLmhlaWdodCkgLyAyKTtcclxuICAgICAgICB2YXIgYmggPSBNYXRoLm1heChieSwgYnkgKyBib3VuZHMuaGVpZ2h0IC0gZGgpO1xyXG5cclxuICAgICAgICBpZiAoeSA8IGJ5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgeSA9IGJ5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh5ID4gYmgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB5ID0gYmg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4geTtcclxuICAgIH0sXHJcblxyXG4gICAgLypcclxuICAgICAgICB2YXIgZ2FwID0gdGhpcy5fem9vbUludmVyc2VkO1xyXG4gICAgICAgIHJldHVybiBnYXAgKiBNYXRoLnJvdW5kKChzcmMueCAtIHRoaXMuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYKSAvIGdhcCk7XHJcbiAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgdGhpcyBDYW1lcmEgaGFzIHByZXZpb3VzbHkgaGFkIG1vdmVtZW50IGJvdW5kcyBzZXQgb24gaXQsIHRoaXMgd2lsbCByZW1vdmUgdGhlbS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNyZW1vdmVCb3VuZHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUJvdW5kczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnVzZUJvdW5kcyA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5fYm91bmRzLnNldEVtcHR5KCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgcm90YXRpb24gb2YgdGhpcyBDYW1lcmEuIFRoaXMgY2F1c2VzIGV2ZXJ5dGhpbmcgaXQgcmVuZGVycyB0byBhcHBlYXIgcm90YXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBSb3RhdGluZyBhIGNhbWVyYSBkb2VzIG5vdCByb3RhdGUgdGhlIHZpZXdwb3J0IGl0c2VsZiwgaXQgaXMgYXBwbGllZCBkdXJpbmcgcmVuZGVyaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI3NldEFuZ2xlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ZhbHVlPTBdIC0gVGhlIGNhbWVyYXMgYW5nbGUgb2Ygcm90YXRpb24sIGdpdmVuIGluIGRlZ3JlZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0QW5nbGU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9IDA7IH1cclxuXHJcbiAgICAgICAgdGhpcy5yb3RhdGlvbiA9IERlZ1RvUmFkKHZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYmFja2dyb3VuZCBjb2xvciBmb3IgdGhpcyBDYW1lcmEuXHJcbiAgICAgKlxyXG4gICAgICogQnkgZGVmYXVsdCBhIENhbWVyYSBoYXMgYSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kIGJ1dCBpdCBjYW4gYmUgZ2l2ZW4gYSBzb2xpZCBjb2xvciwgd2l0aCBhbnkgbGV2ZWxcclxuICAgICAqIG9mIHRyYW5zcGFyZW5jeSwgdmlhIHRoaXMgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBjb2xvciB2YWx1ZSBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIENTUyBjb2xvciBub3RhdGlvbiwgaGV4IG9yIG51bWJlcnMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjc2V0QmFja2dyb3VuZENvbG9yXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8bnVtYmVyfFBoYXNlci5UeXBlcy5EaXNwbGF5LklucHV0Q29sb3JPYmplY3QpfSBbY29sb3I9J3JnYmEoMCwwLDAsMCknXSAtIFRoZSBjb2xvciB2YWx1ZS4gSW4gQ1NTLCBoZXggb3IgbnVtZXJpYyBjb2xvciBub3RhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmF9IFRoaXMgQ2FtZXJhIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRCYWNrZ3JvdW5kQ29sb3I6IGZ1bmN0aW9uIChjb2xvcilcclxuICAgIHtcclxuICAgICAgICBpZiAoY29sb3IgPT09IHVuZGVmaW5lZCkgeyBjb2xvciA9ICdyZ2JhKDAsMCwwLDApJzsgfVxyXG5cclxuICAgICAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IFZhbHVlVG9Db2xvcihjb2xvcik7XHJcblxyXG4gICAgICAgIHRoaXMudHJhbnNwYXJlbnQgPSAodGhpcy5iYWNrZ3JvdW5kQ29sb3IuYWxwaGEgPT09IDApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIGJvdW5kcyBvZiB0aGUgQ2FtZXJhLiBUaGUgYm91bmRzIGFyZSBhbiBheGlzLWFsaWduZWQgcmVjdGFuZ2xlLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgQ2FtZXJhIGJvdW5kcyBjb250cm9scyB3aGVyZSB0aGUgQ2FtZXJhIGNhbiBzY3JvbGwgdG8sIHN0b3BwaW5nIGl0IGZyb20gc2Nyb2xsaW5nIG9mZiB0aGVcclxuICAgICAqIGVkZ2VzIGFuZCBpbnRvIGJsYW5rIHNwYWNlLiBJdCBkb2VzIG5vdCBsaW1pdCB0aGUgcGxhY2VtZW50IG9mIEdhbWUgT2JqZWN0cywgb3Igd2hlcmVcclxuICAgICAqIHRoZSBDYW1lcmEgdmlld3BvcnQgY2FuIGJlIHBvc2l0aW9uZWQuXHJcbiAgICAgKiBcclxuICAgICAqIFRlbXBvcmFyaWx5IGRpc2FibGUgdGhlIGJvdW5kcyBieSBjaGFuZ2luZyB0aGUgYm9vbGVhbiBgQ2FtZXJhLnVzZUJvdW5kc2AuXHJcbiAgICAgKiBcclxuICAgICAqIENsZWFyIHRoZSBib3VuZHMgZW50aXJlbHkgYnkgY2FsbGluZyBgQ2FtZXJhLnJlbW92ZUJvdW5kc2AuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHlvdSBzZXQgYm91bmRzIHRoYXQgYXJlIHNtYWxsZXIgdGhhbiB0aGUgdmlld3BvcnQgaXQgd2lsbCBzdG9wIHRoZSBDYW1lcmEgZnJvbSBiZWluZ1xyXG4gICAgICogYWJsZSB0byBzY3JvbGwuIFRoZSBib3VuZHMgY2FuIGJlIHBvc2l0aW9uZWQgd2hlcmUtZXZlciB5b3Ugd2lzaC4gQnkgZGVmYXVsdCB0aGV5IGFyZSBmcm9tXHJcbiAgICAgKiAweDAgdG8gdGhlIGNhbnZhcyB3aWR0aCB4IGhlaWdodC4gVGhpcyBtZWFucyB0aGF0IHRoZSBjb29yZGluYXRlIDB4MCBpcyB0aGUgdG9wIGxlZnQgb2ZcclxuICAgICAqIHRoZSBDYW1lcmEgYm91bmRzLiBIb3dldmVyLCB5b3UgY2FuIHBvc2l0aW9uIHRoZW0gYW55d2hlcmUuIFNvIGlmIHlvdSB3YW50ZWQgYSBnYW1lIHdvcmxkXHJcbiAgICAgKiB0aGF0IHdhcyAyMDQ4eDIwNDggaW4gc2l6ZSwgd2l0aCAweDAgYmVpbmcgdGhlIGNlbnRlciBvZiBpdCwgeW91IGNhbiBzZXQgdGhlIGJvdW5kcyB4L3lcclxuICAgICAqIHRvIGJlIC0xMDI0LCAtMTAyNCwgd2l0aCBhIHdpZHRoIGFuZCBoZWlnaHQgb2YgMjA0OC4gRGVwZW5kaW5nIG9uIHlvdXIgZ2FtZSB5b3UgbWF5IGZpbmRcclxuICAgICAqIGl0IGVhc2llciBmb3IgMHgwIHRvIGJlIHRoZSB0b3AtbGVmdCBvZiB0aGUgYm91bmRzLCBvciB5b3UgbWF5IHdpc2ggMHgwIHRvIGJlIHRoZSBtaWRkbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjc2V0Qm91bmRzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHggLSBUaGUgdG9wLWxlZnQgeCBjb29yZGluYXRlIG9mIHRoZSBib3VuZHMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHkgLSBUaGUgdG9wLWxlZnQgeSBjb29yZGluYXRlIG9mIHRoZSBib3VuZHMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBib3VuZHMsIGluIHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgYm91bmRzLCBpbiBwaXhlbHMuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjZW50ZXJPbj1mYWxzZV0gLSBJZiBgdHJ1ZWAgdGhlIENhbWVyYSB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgY2VudGVyZWQgb24gdGhlIG5ldyBib3VuZHMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0Qm91bmRzOiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgY2VudGVyT24pXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNlbnRlck9uID09PSB1bmRlZmluZWQpIHsgY2VudGVyT24gPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICB0aGlzLl9ib3VuZHMuc2V0VG8oeCwgeSwgd2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudXNlQm91bmRzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKGNlbnRlck9uKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jZW50ZXJUb0JvdW5kcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbFggPSB0aGlzLmNsYW1wWCh0aGlzLnNjcm9sbFgpO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbFkgPSB0aGlzLmNsYW1wWSh0aGlzLnNjcm9sbFkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIHJlY3RhbmdsZSBjb250YWluaW5nIHRoZSBib3VuZHMgb2YgdGhlIENhbWVyYS5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIENhbWVyYSBkb2VzIG5vdCBoYXZlIGFueSBib3VuZHMgdGhlIHJlY3RhbmdsZSB3aWxsIGJlIGVtcHR5LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgcmVjdGFuZ2xlIGlzIGEgY29weSBvZiB0aGUgYm91bmRzLCBzbyBpcyBzYWZlIHRvIG1vZGlmeS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNnZXRCb3VuZHNcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gW291dF0gLSBBbiBvcHRpb25hbCBSZWN0YW5nbGUgdG8gc3RvcmUgdGhlIGJvdW5kcyBpbi4gSWYgbm90IGdpdmVuLCBhIG5ldyBSZWN0YW5nbGUgd2lsbCBiZSBjcmVhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gQSByZWN0YW5nbGUgY29udGFpbmluZyB0aGUgYm91bmRzIG9mIHRoaXMgQ2FtZXJhLlxyXG4gICAgICovXHJcbiAgICBnZXRCb3VuZHM6IGZ1bmN0aW9uIChvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBSZWN0YW5nbGUoKTsgfVxyXG5cclxuICAgICAgICB2YXIgc291cmNlID0gdGhpcy5fYm91bmRzO1xyXG5cclxuICAgICAgICBvdXQuc2V0VG8oc291cmNlLngsIHNvdXJjZS55LCBzb3VyY2Uud2lkdGgsIHNvdXJjZS5oZWlnaHQpO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIG5hbWUgb2YgdGhpcyBDYW1lcmEuXHJcbiAgICAgKiBUaGlzIHZhbHVlIGlzIGZvciB5b3VyIG93biB1c2UgYW5kIGlzbid0IHVzZWQgaW50ZXJuYWxseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNzZXROYW1lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlPScnXSAtIFRoZSBuYW1lIG9mIHRoZSBDYW1lcmEuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0TmFtZTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7IHZhbHVlID0gJyc7IH1cclxuXHJcbiAgICAgICAgdGhpcy5uYW1lID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgcG9zaXRpb24gb2YgdGhlIENhbWVyYSB2aWV3cG9ydCB3aXRoaW4gdGhlIGdhbWUuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBkb2VzIG5vdCBjaGFuZ2Ugd2hlcmUgdGhlIGNhbWVyYSBpcyAnbG9va2luZycuIFNlZSBgc2V0U2Nyb2xsYCB0byBjb250cm9sIHRoYXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjc2V0UG9zaXRpb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHRvcC1sZWZ0IHggY29vcmRpbmF0ZSBvZiB0aGUgQ2FtZXJhIHZpZXdwb3J0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PXhdIC0gVGhlIHRvcC1sZWZ0IHkgY29vcmRpbmF0ZSBvZiB0aGUgQ2FtZXJhIHZpZXdwb3J0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFBvc2l0aW9uOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSB4OyB9XHJcblxyXG4gICAgICAgIHRoaXMueCA9IHg7XHJcbiAgICAgICAgdGhpcy55ID0geTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSByb3RhdGlvbiBvZiB0aGlzIENhbWVyYS4gVGhpcyBjYXVzZXMgZXZlcnl0aGluZyBpdCByZW5kZXJzIHRvIGFwcGVhciByb3RhdGVkLlxyXG4gICAgICpcclxuICAgICAqIFJvdGF0aW5nIGEgY2FtZXJhIGRvZXMgbm90IHJvdGF0ZSB0aGUgdmlld3BvcnQgaXRzZWxmLCBpdCBpcyBhcHBsaWVkIGR1cmluZyByZW5kZXJpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjc2V0Um90YXRpb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdmFsdWU9MF0gLSBUaGUgcm90YXRpb24gb2YgdGhlIENhbWVyYSwgaW4gcmFkaWFucy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmF9IFRoaXMgQ2FtZXJhIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRSb3RhdGlvbjogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7IHZhbHVlID0gMDsgfVxyXG5cclxuICAgICAgICB0aGlzLnJvdGF0aW9uID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3VsZCB0aGUgQ2FtZXJhIHJvdW5kIHBpeGVsIHZhbHVlcyB0byB3aG9sZSBpbnRlZ2VycyB3aGVuIHJlbmRlcmluZyBHYW1lIE9iamVjdHM/XHJcbiAgICAgKiBcclxuICAgICAqIEluIHNvbWUgdHlwZXMgb2YgZ2FtZSwgZXNwZWNpYWxseSB3aXRoIHBpeGVsIGFydCwgdGhpcyBpcyByZXF1aXJlZCB0byBwcmV2ZW50IHN1Yi1waXhlbCBhbGlhc2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNzZXRSb3VuZFBpeGVsc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB2YWx1ZSAtIGB0cnVlYCB0byByb3VuZCBDYW1lcmEgcGl4ZWxzLCBgZmFsc2VgIHRvIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmF9IFRoaXMgQ2FtZXJhIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRSb3VuZFBpeGVsczogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucm91bmRQaXhlbHMgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgU2NlbmUgdGhlIENhbWVyYSBpcyBib3VuZCB0by5cclxuICAgICAqIFxyXG4gICAgICogQWxzbyBwb3B1bGF0ZXMgdGhlIGByZXNvbHV0aW9uYCBwcm9wZXJ0eSBhbmQgdXBkYXRlcyB0aGUgaW50ZXJuYWwgc2l6ZSB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjc2V0U2NlbmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0aGUgY2FtZXJhIGlzIGJvdW5kIHRvLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFNjZW5lOiBmdW5jdGlvbiAoc2NlbmUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmUgJiYgdGhpcy5fY3VzdG9tVmlld3BvcnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNjZW5lTWFuYWdlci5jdXN0b21WaWV3cG9ydHMtLTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuXHJcbiAgICAgICAgdmFyIHN5cyA9IHNjZW5lLnN5cztcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZU1hbmFnZXIgPSBzeXMuZ2FtZS5zY2VuZTtcclxuICAgICAgICB0aGlzLnNjYWxlTWFuYWdlciA9IHN5cy5zY2FsZTtcclxuICAgICAgICB0aGlzLmNhbWVyYU1hbmFnZXIgPSBzeXMuY2FtZXJhcztcclxuXHJcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuc2NhbGVNYW5hZ2VyLnJlc29sdXRpb247XHJcblxyXG4gICAgICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlcztcclxuXHJcbiAgICAgICAgdGhpcy5fY3ggPSB0aGlzLl94ICogcmVzO1xyXG4gICAgICAgIHRoaXMuX2N5ID0gdGhpcy5feSAqIHJlcztcclxuICAgICAgICB0aGlzLl9jdyA9IHRoaXMuX3dpZHRoICogcmVzO1xyXG4gICAgICAgIHRoaXMuX2NoID0gdGhpcy5faGVpZ2h0ICogcmVzO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVN5c3RlbSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHBvc2l0aW9uIG9mIHdoZXJlIHRoZSBDYW1lcmEgaXMgbG9va2luZyB3aXRoaW4gdGhlIGdhbWUuXHJcbiAgICAgKiBZb3UgY2FuIGFsc28gbW9kaWZ5IHRoZSBwcm9wZXJ0aWVzIGBDYW1lcmEuc2Nyb2xsWGAgYW5kIGBDYW1lcmEuc2Nyb2xsWWAgZGlyZWN0bHkuXHJcbiAgICAgKiBVc2UgdGhpcyBtZXRob2QsIG9yIHRoZSBzY3JvbGwgcHJvcGVydGllcywgdG8gbW92ZSB5b3VyIGNhbWVyYSBhcm91bmQgdGhlIGdhbWUgd29ybGQuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBkb2VzIG5vdCBjaGFuZ2Ugd2hlcmUgdGhlIGNhbWVyYSB2aWV3cG9ydCBpcyBwbGFjZWQuIFNlZSBgc2V0UG9zaXRpb25gIHRvIGNvbnRyb2wgdGhhdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNzZXRTY3JvbGxcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgQ2FtZXJhIGluIHRoZSBnYW1lIHdvcmxkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PXhdIC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgQ2FtZXJhIGluIHRoZSBnYW1lIHdvcmxkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFNjcm9sbDogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0geDsgfVxyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbFggPSB4O1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsWSA9IHk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgc2l6ZSBvZiB0aGUgQ2FtZXJhIHZpZXdwb3J0LlxyXG4gICAgICpcclxuICAgICAqIEJ5IGRlZmF1bHQgYSBDYW1lcmEgaXMgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgZ2FtZSwgYnV0IGNhbiBiZSBtYWRlIHNtYWxsZXIgdmlhIHRoaXMgbWV0aG9kLFxyXG4gICAgICogYWxsb3dpbmcgeW91IHRvIGNyZWF0ZSBtaW5pLWNhbSBzdHlsZSBlZmZlY3RzIGJ5IGNyZWF0aW5nIGFuZCBwb3NpdGlvbmluZyBhIHNtYWxsZXIgQ2FtZXJhXHJcbiAgICAgKiB2aWV3cG9ydCB3aXRoaW4geW91ciBnYW1lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI3NldFNpemVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIENhbWVyYSB2aWV3cG9ydC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodD13aWR0aF0gLSBUaGUgaGVpZ2h0IG9mIHRoZSBDYW1lcmEgdmlld3BvcnQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0U2l6ZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IGhlaWdodCA9IHdpZHRoOyB9XHJcblxyXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgcG9zaXRpb24gYW5kIHNpemUgb2YgdGhlIENhbWVyYSB2aWV3cG9ydCBpbiBhIHNpbmdsZSBjYWxsLlxyXG4gICAgICpcclxuICAgICAqIElmIHlvdSdyZSB0cnlpbmcgdG8gY2hhbmdlIHdoZXJlIHRoZSBDYW1lcmEgaXMgbG9va2luZyBhdCBpbiB5b3VyIGdhbWUsIHRoZW4gc2VlXHJcbiAgICAgKiB0aGUgbWV0aG9kIGBDYW1lcmEuc2V0U2Nyb2xsYCBpbnN0ZWFkLiBUaGlzIG1ldGhvZCBpcyBmb3IgY2hhbmdpbmcgdGhlIHZpZXdwb3J0XHJcbiAgICAgKiBpdHNlbGYsIG5vdCB3aGF0IHRoZSBjYW1lcmEgY2FuIHNlZS5cclxuICAgICAqXHJcbiAgICAgKiBCeSBkZWZhdWx0IGEgQ2FtZXJhIGlzIHRoZSBzYW1lIHNpemUgYXMgdGhlIGdhbWUsIGJ1dCBjYW4gYmUgbWFkZSBzbWFsbGVyIHZpYSB0aGlzIG1ldGhvZCxcclxuICAgICAqIGFsbG93aW5nIHlvdSB0byBjcmVhdGUgbWluaS1jYW0gc3R5bGUgZWZmZWN0cyBieSBjcmVhdGluZyBhbmQgcG9zaXRpb25pbmcgYSBzbWFsbGVyIENhbWVyYVxyXG4gICAgICogdmlld3BvcnQgd2l0aGluIHlvdXIgZ2FtZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNzZXRWaWV3cG9ydFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgdG9wLWxlZnQgeCBjb29yZGluYXRlIG9mIHRoZSBDYW1lcmEgdmlld3BvcnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB0b3AtbGVmdCB5IGNvb3JkaW5hdGUgb2YgdGhlIENhbWVyYSB2aWV3cG9ydC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIENhbWVyYSB2aWV3cG9ydC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodD13aWR0aF0gLSBUaGUgaGVpZ2h0IG9mIHRoZSBDYW1lcmEgdmlld3BvcnQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0Vmlld3BvcnQ6IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMueCA9IHg7XHJcbiAgICAgICAgdGhpcy55ID0geTtcclxuICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgem9vbSB2YWx1ZSBvZiB0aGUgQ2FtZXJhLlxyXG4gICAgICpcclxuICAgICAqIENoYW5naW5nIHRvIGEgc21hbGxlciB2YWx1ZSwgc3VjaCBhcyAwLjUsIHdpbGwgY2F1c2UgdGhlIGNhbWVyYSB0byAnem9vbSBvdXQnLlxyXG4gICAgICogQ2hhbmdpbmcgdG8gYSBsYXJnZXIgdmFsdWUsIHN1Y2ggYXMgMiwgd2lsbCBjYXVzZSB0aGUgY2FtZXJhIHRvICd6b29tIGluJy5cclxuICAgICAqXHJcbiAgICAgKiBBIHZhbHVlIG9mIDEgbWVhbnMgJ25vIHpvb20nIGFuZCBpcyB0aGUgZGVmYXVsdC5cclxuICAgICAqXHJcbiAgICAgKiBDaGFuZ2luZyB0aGUgem9vbSBkb2VzIG5vdCBpbXBhY3QgdGhlIENhbWVyYSB2aWV3cG9ydCBpbiBhbnkgd2F5LCBpdCBpcyBvbmx5IGFwcGxpZWQgZHVyaW5nIHJlbmRlcmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNzZXRab29tXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ZhbHVlPTFdIC0gVGhlIHpvb20gdmFsdWUgb2YgdGhlIENhbWVyYS4gVGhlIG1pbmltdW0gaXQgY2FuIGJlIGlzIDAuMDAxLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFpvb206IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9IDE7IH1cclxuXHJcbiAgICAgICAgaWYgKHZhbHVlID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFsdWUgPSAwLjAwMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuem9vbSA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBtYXNrIHRvIGJlIGFwcGxpZWQgdG8gdGhpcyBDYW1lcmEgZHVyaW5nIHJlbmRlcmluZy5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgbWFzayBtdXN0IGhhdmUgYmVlbiBwcmV2aW91c2x5IGNyZWF0ZWQgYW5kIGNhbiBiZSBlaXRoZXIgYSBHZW9tZXRyeU1hc2sgb3IgYSBCaXRtYXBNYXNrLlxyXG4gICAgICogXHJcbiAgICAgKiBCaXRtYXAgTWFza3Mgb25seSB3b3JrIG9uIFdlYkdMLiBHZW9tZXRyeSBNYXNrcyB3b3JrIG9uIGJvdGggV2ViR0wgYW5kIENhbnZhcy5cclxuICAgICAqXHJcbiAgICAgKiBJZiBhIG1hc2sgaXMgYWxyZWFkeSBzZXQgb24gdGhpcyBDYW1lcmEgaXQgd2lsbCBiZSBpbW1lZGlhdGVseSByZXBsYWNlZC5cclxuICAgICAqIFxyXG4gICAgICogTWFza3MgaGF2ZSBubyBpbXBhY3Qgb24gcGh5c2ljcyBvciBpbnB1dCBkZXRlY3Rpb24uIFRoZXkgYXJlIHB1cmVseSBhIHJlbmRlcmluZyBjb21wb25lbnRcclxuICAgICAqIHRoYXQgYWxsb3dzIHlvdSB0byBsaW1pdCB3aGF0IGlzIHZpc2libGUgZHVyaW5nIHRoZSByZW5kZXIgcGFzcy5cclxuICAgICAqIFxyXG4gICAgICogTm90ZTogWW91IGNhbm5vdCBtYXNrIGEgQ2FtZXJhIHRoYXQgaGFzIGByZW5kZXJUb1RleHR1cmVgIHNldC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNzZXRNYXNrXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLkRpc3BsYXkuTWFza3MuQml0bWFwTWFza3xQaGFzZXIuRGlzcGxheS5NYXNrcy5HZW9tZXRyeU1hc2spfSBtYXNrIC0gVGhlIG1hc2sgdGhpcyBDYW1lcmEgd2lsbCB1c2Ugd2hlbiByZW5kZXJpbmcuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmaXhlZFBvc2l0aW9uPXRydWVdIC0gU2hvdWxkIHRoZSBtYXNrIHRyYW5zbGF0ZSBhbG9uZyB3aXRoIHRoZSBDYW1lcmEsIG9yIGJlIGZpeGVkIGluIHBsYWNlIGFuZCBub3QgaW1wYWN0ZWQgYnkgdGhlIENhbWVyYXMgdHJhbnNmb3JtP1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgQ2FtZXJhIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRNYXNrOiBmdW5jdGlvbiAobWFzaywgZml4ZWRQb3NpdGlvbilcclxuICAgIHtcclxuICAgICAgICBpZiAoZml4ZWRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkKSB7IGZpeGVkUG9zaXRpb24gPSB0cnVlOyB9XHJcblxyXG4gICAgICAgIHRoaXMubWFzayA9IG1hc2s7XHJcblxyXG4gICAgICAgIHRoaXMuX21hc2tDYW1lcmEgPSAoZml4ZWRQb3NpdGlvbikgPyB0aGlzLmNhbWVyYU1hbmFnZXIuZGVmYXVsdCA6IHRoaXM7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyB0aGUgbWFzayB0aGF0IHRoaXMgQ2FtZXJhIHdhcyB1c2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNjbGVhck1hc2tcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkZXN0cm95TWFzaz1mYWxzZV0gLSBEZXN0cm95IHRoZSBtYXNrIGJlZm9yZSBjbGVhcmluZyBpdD9cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgY2xlYXJNYXNrOiBmdW5jdGlvbiAoZGVzdHJveU1hc2spXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGRlc3Ryb3lNYXNrID09PSB1bmRlZmluZWQpIHsgZGVzdHJveU1hc2sgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICBpZiAoZGVzdHJveU1hc2sgJiYgdGhpcy5tYXNrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tYXNrLmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWFzayA9IG51bGw7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHZpc2liaWxpdHkgb2YgdGhpcyBDYW1lcmEuXHJcbiAgICAgKlxyXG4gICAgICogQW4gaW52aXNpYmxlIENhbWVyYSB3aWxsIHNraXAgcmVuZGVyaW5nIGFuZCBpbnB1dCB0ZXN0cyBvZiBldmVyeXRoaW5nIGl0IGNhbiBzZWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjc2V0VmlzaWJsZVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBUaGUgdmlzaWJsZSBzdGF0ZSBvZiB0aGUgQ2FtZXJhLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgQ2FtZXJhIGluc3RhbmNlLlxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGFuIE9iamVjdCBzdWl0YWJsZSBmb3IgSlNPTiBzdG9yYWdlIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBDYW1lcmEgdmlld3BvcnQgYW5kIHJlbmRlcmluZyBwcm9wZXJ0aWVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI3RvSlNPTlxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlR5cGVzLkNhbWVyYXMuU2NlbmUyRC5KU09OQ2FtZXJhfSBBIHdlbGwtZm9ybWVkIG9iamVjdCBzdWl0YWJsZSBmb3IgY29udmVyc2lvbiB0byBKU09OLlxyXG4gICAgICovXHJcbiAgICB0b0pTT046IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG91dHB1dCA9IHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICAgICAgICB4OiB0aGlzLngsXHJcbiAgICAgICAgICAgIHk6IHRoaXMueSxcclxuICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQsXHJcbiAgICAgICAgICAgIHpvb206IHRoaXMuem9vbSxcclxuICAgICAgICAgICAgcm90YXRpb246IHRoaXMucm90YXRpb24sXHJcbiAgICAgICAgICAgIHJvdW5kUGl4ZWxzOiB0aGlzLnJvdW5kUGl4ZWxzLFxyXG4gICAgICAgICAgICBzY3JvbGxYOiB0aGlzLnNjcm9sbFgsXHJcbiAgICAgICAgICAgIHNjcm9sbFk6IHRoaXMuc2Nyb2xsWSxcclxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLmJhY2tncm91bmRDb2xvci5yZ2JhXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudXNlQm91bmRzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb3V0cHV0Wydib3VuZHMnXSA9IHtcclxuICAgICAgICAgICAgICAgIHg6IHRoaXMuX2JvdW5kcy54LFxyXG4gICAgICAgICAgICAgICAgeTogdGhpcy5fYm91bmRzLnksXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy5fYm91bmRzLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLl9ib3VuZHMuaGVpZ2h0XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIG1ldGhvZCBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgQ2FtZXJhIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjdXBkYXRlXHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lc3RhbXAgYXMgZ2VuZXJhdGVkIGJ5IHRoZSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSBvciBTZXRUaW1lb3V0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUsIGluIG1zLCBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IGZyYW1lLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIE5PT1BcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgdmlld3BvcnQgY2hhbmdlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSN1cGRhdGVTeXN0ZW1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVN5c3RlbTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2NhbGVNYW5hZ2VyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGN1c3RvbSA9ICh0aGlzLl94ICE9PSAwIHx8IHRoaXMuX3kgIT09IDAgfHwgdGhpcy5zY2FsZU1hbmFnZXIud2lkdGggIT09IHRoaXMuX3dpZHRoIHx8IHRoaXMuc2NhbGVNYW5hZ2VyLmhlaWdodCAhPT0gdGhpcy5faGVpZ2h0KTtcclxuXHJcbiAgICAgICAgdmFyIHNjZW5lTWFuYWdlciA9IHRoaXMuc2NlbmVNYW5hZ2VyO1xyXG5cclxuICAgICAgICBpZiAoY3VzdG9tICYmICF0aGlzLl9jdXN0b21WaWV3cG9ydClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBXZSBuZWVkIGEgY3VzdG9tIHZpZXdwb3J0IGZvciB0aGlzIENhbWVyYVxyXG4gICAgICAgICAgICBzY2VuZU1hbmFnZXIuY3VzdG9tVmlld3BvcnRzKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCFjdXN0b20gJiYgdGhpcy5fY3VzdG9tVmlld3BvcnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgV2UncmUgdHVybmluZyBvZmYgYSBjdXN0b20gdmlld3BvcnQgZm9yIHRoaXMgQ2FtZXJhXHJcbiAgICAgICAgICAgIHNjZW5lTWFuYWdlci5jdXN0b21WaWV3cG9ydHMtLTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2N1c3RvbVZpZXdwb3J0ID0gY3VzdG9tO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoaXMgQ2FtZXJhIGluc3RhbmNlIGFuZCBpdHMgaW50ZXJuYWwgcHJvcGVydGllcyBhbmQgcmVmZXJlbmNlcy5cclxuICAgICAqIE9uY2UgZGVzdHJveWVkIHlvdSBjYW5ub3QgdXNlIHRoaXMgQ2FtZXJhIGFnYWluLCBldmVuIGlmIHJlLWFkZGVkIHRvIGEgQ2FtZXJhIE1hbmFnZXIuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IGBDYW1lcmFNYW5hZ2VyLnJlbW92ZWAgaWYgdGhhdCBtZXRob2RzIGBydW5EZXN0cm95YCBhcmd1bWVudCBpcyBgdHJ1ZWAsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LlxyXG4gICAgICogXHJcbiAgICAgKiBVbmxlc3MgeW91IGhhdmUgYSBzcGVjaWZpYyByZWFzb24gb3RoZXJ3aXNlLCBhbHdheXMgdXNlIGBDYW1lcmFNYW5hZ2VyLnJlbW92ZWAgYW5kIGFsbG93IGl0IHRvIGhhbmRsZSB0aGUgY2FtZXJhIGRlc3RydWN0aW9uLFxyXG4gICAgICogcmF0aGVyIHRoYW4gY2FsbGluZyB0aGlzIG1ldGhvZCBkaXJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNkZXN0cm95XHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjREVTVFJPWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5ERVNUUk9ZLCB0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcclxuXHJcbiAgICAgICAgdGhpcy5tYXRyaXguZGVzdHJveSgpO1xyXG5cclxuICAgICAgICB0aGlzLmN1bGxlZE9iamVjdHMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2N1c3RvbVZpZXdwb3J0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFdlJ3JlIHR1cm5pbmcgb2ZmIGEgY3VzdG9tIHZpZXdwb3J0IGZvciB0aGlzIENhbWVyYVxyXG4gICAgICAgICAgICB0aGlzLnNjZW5lTWFuYWdlci5jdXN0b21WaWV3cG9ydHMtLTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2JvdW5kcyA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2NhbGVNYW5hZ2VyID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNjZW5lTWFuYWdlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jYW1lcmFNYW5hZ2VyID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgQ2FtZXJhIHZpZXdwb3J0LCByZWxhdGl2ZSB0byB0aGUgdG9wLWxlZnQgb2YgdGhlIGdhbWUgY2FudmFzLlxyXG4gICAgICogVGhlIHZpZXdwb3J0IGlzIHRoZSBhcmVhIGludG8gd2hpY2ggdGhlIGNhbWVyYSByZW5kZXJzLlxyXG4gICAgICogVG8gYWRqdXN0IHRoZSBwb3NpdGlvbiB0aGUgY2FtZXJhIGlzIGxvb2tpbmcgYXQgaW4gdGhlIGdhbWUgd29ybGQsIHNlZSB0aGUgYHNjcm9sbFhgIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSN4XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3g7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl94ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2N4ID0gdmFsdWUgKiB0aGlzLnJlc29sdXRpb247XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3lzdGVtKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgQ2FtZXJhIHZpZXdwb3J0LCByZWxhdGl2ZSB0byB0aGUgdG9wLWxlZnQgb2YgdGhlIGdhbWUgY2FudmFzLlxyXG4gICAgICogVGhlIHZpZXdwb3J0IGlzIHRoZSBhcmVhIGludG8gd2hpY2ggdGhlIGNhbWVyYSByZW5kZXJzLlxyXG4gICAgICogVG8gYWRqdXN0IHRoZSBwb3NpdGlvbiB0aGUgY2FtZXJhIGlzIGxvb2tpbmcgYXQgaW4gdGhlIGdhbWUgd29ybGQsIHNlZSB0aGUgYHNjcm9sbFlgIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSN5XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHk6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3k7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl95ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2N5ID0gdmFsdWUgKiB0aGlzLnJlc29sdXRpb247XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3lzdGVtKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIENhbWVyYSB2aWV3cG9ydCwgaW4gcGl4ZWxzLlxyXG4gICAgICpcclxuICAgICAqIFRoZSB2aWV3cG9ydCBpcyB0aGUgYXJlYSBpbnRvIHdoaWNoIHRoZSBDYW1lcmEgcmVuZGVycy4gU2V0dGluZyB0aGUgdmlld3BvcnQgZG9lc1xyXG4gICAgICogbm90IHJlc3RyaWN0IHdoZXJlIHRoZSBDYW1lcmEgY2FuIHNjcm9sbCB0by5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjd2lkdGhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgd2lkdGg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fY3cgPSB2YWx1ZSAqIHRoaXMucmVzb2x1dGlvbjtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVTeXN0ZW0oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIENhbWVyYSB2aWV3cG9ydCwgaW4gcGl4ZWxzLlxyXG4gICAgICpcclxuICAgICAqIFRoZSB2aWV3cG9ydCBpcyB0aGUgYXJlYSBpbnRvIHdoaWNoIHRoZSBDYW1lcmEgcmVuZGVycy4gU2V0dGluZyB0aGUgdmlld3BvcnQgZG9lc1xyXG4gICAgICogbm90IHJlc3RyaWN0IHdoZXJlIHRoZSBDYW1lcmEgY2FuIHNjcm9sbCB0by5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjaGVpZ2h0XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGhlaWdodDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoID0gdmFsdWUgKiB0aGlzLnJlc29sdXRpb247XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3lzdGVtKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaG9yaXpvbnRhbCBzY3JvbGwgcG9zaXRpb24gb2YgdGhpcyBDYW1lcmEuXHJcbiAgICAgKlxyXG4gICAgICogQ2hhbmdlIHRoaXMgdmFsdWUgdG8gY2F1c2UgdGhlIENhbWVyYSB0byBzY3JvbGwgYXJvdW5kIHlvdXIgU2NlbmUuXHJcbiAgICAgKlxyXG4gICAgICogQWx0ZXJuYXRpdmVseSwgc2V0dGluZyB0aGUgQ2FtZXJhIHRvIGZvbGxvdyBhIEdhbWUgT2JqZWN0LCB2aWEgdGhlIGBzdGFydEZvbGxvd2AgbWV0aG9kLFxyXG4gICAgICogd2lsbCBhdXRvbWF0aWNhbGx5IGFkanVzdCB0aGUgQ2FtZXJhIHNjcm9sbCB2YWx1ZXMgYWNjb3JkaW5nbHkuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGJvdW5kcyB3aXRoaW4gd2hpY2ggdGhlIENhbWVyYSBjYW4gc2Nyb2xsIHZpYSB0aGUgYHNldEJvdW5kc2AgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYSNzY3JvbGxYXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGRlZmF1bHQgMFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHNjcm9sbFg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Njcm9sbFg7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9zY3JvbGxYID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHZlcnRpY2FsIHNjcm9sbCBwb3NpdGlvbiBvZiB0aGlzIENhbWVyYS5cclxuICAgICAqXHJcbiAgICAgKiBDaGFuZ2UgdGhpcyB2YWx1ZSB0byBjYXVzZSB0aGUgQ2FtZXJhIHRvIHNjcm9sbCBhcm91bmQgeW91ciBTY2VuZS5cclxuICAgICAqXHJcbiAgICAgKiBBbHRlcm5hdGl2ZWx5LCBzZXR0aW5nIHRoZSBDYW1lcmEgdG8gZm9sbG93IGEgR2FtZSBPYmplY3QsIHZpYSB0aGUgYHN0YXJ0Rm9sbG93YCBtZXRob2QsXHJcbiAgICAgKiB3aWxsIGF1dG9tYXRpY2FsbHkgYWRqdXN0IHRoZSBDYW1lcmEgc2Nyb2xsIHZhbHVlcyBhY2NvcmRpbmdseS5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIHNldCB0aGUgYm91bmRzIHdpdGhpbiB3aGljaCB0aGUgQ2FtZXJhIGNhbiBzY3JvbGwgdmlhIHRoZSBgc2V0Qm91bmRzYCBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI3Njcm9sbFlcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc2Nyb2xsWToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2Nyb2xsWTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbFkgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQ2FtZXJhIHpvb20gdmFsdWUuIENoYW5nZSB0aGlzIHZhbHVlIHRvIHpvb20gaW4sIG9yIG91dCBvZiwgYSBTY2VuZS5cclxuICAgICAqXHJcbiAgICAgKiBBIHZhbHVlIG9mIDAuNSB3b3VsZCB6b29tIHRoZSBDYW1lcmEgb3V0LCBzbyB5b3UgY2FuIG5vdyBzZWUgdHdpY2UgYXMgbXVjaFxyXG4gICAgICogb2YgdGhlIFNjZW5lIGFzIGJlZm9yZS4gQSB2YWx1ZSBvZiAyIHdvdWxkIHpvb20gdGhlIENhbWVyYSBpbiwgc28gZXZlcnkgcGl4ZWxcclxuICAgICAqIG5vdyB0YWtlcyB1cCAyIHBpeGVscyB3aGVuIHJlbmRlcmVkLlxyXG4gICAgICpcclxuICAgICAqIFNldCB0byAxIHRvIHJldHVybiB0byB0aGUgZGVmYXVsdCB6b29tIGxldmVsLlxyXG4gICAgICpcclxuICAgICAqIEJlIGNhcmVmdWwgdG8gbmV2ZXIgc2V0IHRoaXMgdmFsdWUgdG8gemVyby5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjem9vbVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB6b29tOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl96b29tO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fem9vbSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSByb3RhdGlvbiBvZiB0aGUgQ2FtZXJhIGluIHJhZGlhbnMuXHJcbiAgICAgKlxyXG4gICAgICogQ2FtZXJhIHJvdGF0aW9uIGFsd2F5cyB0YWtlcyBwbGFjZSBiYXNlZCBvbiB0aGUgQ2FtZXJhIHZpZXdwb3J0LiBCeSBkZWZhdWx0LCByb3RhdGlvbiBoYXBwZW5zXHJcbiAgICAgKiBpbiB0aGUgY2VudGVyIG9mIHRoZSB2aWV3cG9ydC4gWW91IGNhbiBhZGp1c3QgdGhpcyB3aXRoIHRoZSBgb3JpZ2luWGAgYW5kIGBvcmlnaW5ZYCBwcm9wZXJ0aWVzLlxyXG4gICAgICpcclxuICAgICAqIFJvdGF0aW9uIGluZmx1ZW5jZXMgdGhlIHJlbmRlcmluZyBvZiBfYWxsXyBHYW1lIE9iamVjdHMgdmlzaWJsZSBieSB0aGlzIENhbWVyYS4gSG93ZXZlciwgaXQgZG9lcyBub3RcclxuICAgICAqIHJvdGF0ZSB0aGUgQ2FtZXJhIHZpZXdwb3J0IGl0c2VsZiwgd2hpY2ggYWx3YXlzIHJlbWFpbnMgYW4gYXhpcy1hbGlnbmVkIHJlY3RhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjcm90YXRpb25cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGRlZmF1bHQgMFxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICovXHJcbiAgICByb3RhdGlvbjoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb2YgdGhlIENhbWVyYSdzIHZpZXdwb3J0LCByZWxhdGl2ZSB0byB0aGUgbGVmdCBvZiB0aGUgZ2FtZSBjYW52YXMuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhI2NlbnRlclhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgY2VudGVyWDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy54ICsgKDAuNSAqIHRoaXMud2lkdGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb2YgdGhlIENhbWVyYSdzIHZpZXdwb3J0LCByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBnYW1lIGNhbnZhcy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjY2VudGVyWVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICovXHJcbiAgICBjZW50ZXJZOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnkgKyAoMC41ICogdGhpcy5oZWlnaHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRpc3BsYXllZCB3aWR0aCBvZiB0aGUgY2FtZXJhIHZpZXdwb3J0LCBmYWN0b3JpbmcgaW4gdGhlIGNhbWVyYSB6b29tIGxldmVsLlxyXG4gICAgICpcclxuICAgICAqIElmIGEgY2FtZXJhIGhhcyBhIHZpZXdwb3J0IHdpZHRoIG9mIDgwMCBhbmQgYSB6b29tIG9mIDAuNSB0aGVuIGl0cyBkaXNwbGF5IHdpZHRoXHJcbiAgICAgKiB3b3VsZCBiZSAxNjAwLCBhcyBpdCdzIGRpc3BsYXlpbmcgdHdpY2UgYXMgbWFueSBwaXhlbHMgYXMgem9vbSBsZXZlbCAxLlxyXG4gICAgICpcclxuICAgICAqIEVxdWFsbHksIGEgY2FtZXJhIHdpdGggYSB3aWR0aCBvZiA4MDAgYW5kIHpvb20gb2YgMiB3b3VsZCBoYXZlIGEgZGlzcGxheSB3aWR0aFxyXG4gICAgICogb2YgNDAwIHBpeGVscy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjZGlzcGxheVdpZHRoXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKi9cclxuICAgIGRpc3BsYXlXaWR0aDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy53aWR0aCAvIHRoaXMuem9vbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkaXNwbGF5ZWQgaGVpZ2h0IG9mIHRoZSBjYW1lcmEgdmlld3BvcnQsIGZhY3RvcmluZyBpbiB0aGUgY2FtZXJhIHpvb20gbGV2ZWwuXHJcbiAgICAgKlxyXG4gICAgICogSWYgYSBjYW1lcmEgaGFzIGEgdmlld3BvcnQgaGVpZ2h0IG9mIDYwMCBhbmQgYSB6b29tIG9mIDAuNSB0aGVuIGl0cyBkaXNwbGF5IGhlaWdodFxyXG4gICAgICogd291bGQgYmUgMTIwMCwgYXMgaXQncyBkaXNwbGF5aW5nIHR3aWNlIGFzIG1hbnkgcGl4ZWxzIGFzIHpvb20gbGV2ZWwgMS5cclxuICAgICAqXHJcbiAgICAgKiBFcXVhbGx5LCBhIGNhbWVyYSB3aXRoIGEgaGVpZ2h0IG9mIDYwMCBhbmQgem9vbSBvZiAyIHdvdWxkIGhhdmUgYSBkaXNwbGF5IGhlaWdodFxyXG4gICAgICogb2YgMzAwIHBpeGVscy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmEjZGlzcGxheUhlaWdodFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICovXHJcbiAgICBkaXNwbGF5SGVpZ2h0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhlaWdodCAvIHRoaXMuem9vbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VDYW1lcmE7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/BaseCamera.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/Camera.js":
/*!******************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/Camera.js ***!
\******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BaseCamera = __webpack_require__(/*! ./BaseCamera */ \"./node_modules/phaser/src/cameras/2d/BaseCamera.js\");\r\nvar CanvasPool = __webpack_require__(/*! ../../display/canvas/CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\");\r\nvar CenterOn = __webpack_require__(/*! ../../geom/rectangle/CenterOn */ \"./node_modules/phaser/src/geom/rectangle/CenterOn.js\");\r\nvar Clamp = __webpack_require__(/*! ../../math/Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../../gameobjects/components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar Effects = __webpack_require__(/*! ./effects */ \"./node_modules/phaser/src/cameras/2d/effects/index.js\");\r\nvar Linear = __webpack_require__(/*! ../../math/Linear */ \"./node_modules/phaser/src/math/Linear.js\");\r\nvar Rectangle = __webpack_require__(/*! ../../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Camera.\r\n *\r\n * The Camera is the way in which all games are rendered in Phaser. They provide a view into your game world,\r\n * and can be positioned, rotated, zoomed and scrolled accordingly.\r\n *\r\n * A Camera consists of two elements: The viewport and the scroll values.\r\n *\r\n * The viewport is the physical position and size of the Camera within your game. Cameras, by default, are\r\n * created the same size as your game, but their position and size can be set to anything. This means if you\r\n * wanted to create a camera that was 320x200 in size, positioned in the bottom-right corner of your game,\r\n * you'd adjust the viewport to do that (using methods like `setViewport` and `setSize`).\r\n *\r\n * If you wish to change where the Camera is looking in your game, then you scroll it. You can do this\r\n * via the properties `scrollX` and `scrollY` or the method `setScroll`. Scrolling has no impact on the\r\n * viewport, and changing the viewport has no impact on the scrolling.\r\n *\r\n * By default a Camera will render all Game Objects it can see. You can change this using the `ignore` method,\r\n * allowing you to filter Game Objects out on a per-Camera basis.\r\n *\r\n * A Camera also has built-in special effects including Fade, Flash and Camera Shake.\r\n *\r\n * @class Camera\r\n * @memberof Phaser.Cameras.Scene2D\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.Cameras.Scene2D.BaseCamera\r\n * @extends Phaser.GameObjects.Components.Flip\r\n * @extends Phaser.GameObjects.Components.Tint\r\n *\r\n * @param {number} x - The x position of the Camera, relative to the top-left of the game canvas.\r\n * @param {number} y - The y position of the Camera, relative to the top-left of the game canvas.\r\n * @param {number} width - The width of the Camera, in pixels.\r\n * @param {number} height - The height of the Camera, in pixels.\r\n */\r\nvar Camera = new Class({\r\n\r\n Extends: BaseCamera,\r\n\r\n Mixins: [\r\n Components.Flip,\r\n Components.Tint\r\n ],\r\n\r\n initialize:\r\n\r\n function Camera (x, y, width, height)\r\n {\r\n BaseCamera.call(this, x, y, width, height);\r\n\r\n /**\r\n * Does this Camera allow the Game Objects it renders to receive input events?\r\n *\r\n * @name Phaser.Cameras.Scene2D.Camera#inputEnabled\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.inputEnabled = true;\r\n\r\n /**\r\n * The Camera Fade effect handler.\r\n * To fade this camera see the `Camera.fade` methods.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Camera#fadeEffect\r\n * @type {Phaser.Cameras.Scene2D.Effects.Fade}\r\n * @since 3.5.0\r\n */\r\n this.fadeEffect = new Effects.Fade(this);\r\n\r\n /**\r\n * The Camera Flash effect handler.\r\n * To flash this camera see the `Camera.flash` method.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Camera#flashEffect\r\n * @type {Phaser.Cameras.Scene2D.Effects.Flash}\r\n * @since 3.5.0\r\n */\r\n this.flashEffect = new Effects.Flash(this);\r\n\r\n /**\r\n * The Camera Shake effect handler.\r\n * To shake this camera see the `Camera.shake` method.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Camera#shakeEffect\r\n * @type {Phaser.Cameras.Scene2D.Effects.Shake}\r\n * @since 3.5.0\r\n */\r\n this.shakeEffect = new Effects.Shake(this);\r\n\r\n /**\r\n * The Camera Pan effect handler.\r\n * To pan this camera see the `Camera.pan` method.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Camera#panEffect\r\n * @type {Phaser.Cameras.Scene2D.Effects.Pan}\r\n * @since 3.11.0\r\n */\r\n this.panEffect = new Effects.Pan(this);\r\n\r\n /**\r\n * The Camera Zoom effect handler.\r\n * To zoom this camera see the `Camera.zoom` method.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Camera#zoomEffect\r\n * @type {Phaser.Cameras.Scene2D.Effects.Zoom}\r\n * @since 3.11.0\r\n */\r\n this.zoomEffect = new Effects.Zoom(this);\r\n\r\n /**\r\n * The linear interpolation value to use when following a target.\r\n *\r\n * Can also be set via `setLerp` or as part of the `startFollow` call.\r\n *\r\n * The default values of 1 means the camera will instantly snap to the target coordinates.\r\n * A lower value, such as 0.1 means the camera will more slowly track the target, giving\r\n * a smooth transition. You can set the horizontal and vertical values independently, and also\r\n * adjust this value in real-time during your game.\r\n *\r\n * Be sure to keep the value between 0 and 1. A value of zero will disable tracking on that axis.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Camera#lerp\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.9.0\r\n */\r\n this.lerp = new Vector2(1, 1);\r\n\r\n /**\r\n * The values stored in this property are subtracted from the Camera targets position, allowing you to\r\n * offset the camera from the actual target x/y coordinates by this amount.\r\n * Can also be set via `setFollowOffset` or as part of the `startFollow` call.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Camera#followOffset\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.9.0\r\n */\r\n this.followOffset = new Vector2();\r\n\r\n /**\r\n * The Camera dead zone.\r\n *\r\n * The deadzone is only used when the camera is following a target.\r\n *\r\n * It defines a rectangular region within which if the target is present, the camera will not scroll.\r\n * If the target moves outside of this area, the camera will begin scrolling in order to follow it.\r\n *\r\n * The `lerp` values that you can set for a follower target also apply when using a deadzone.\r\n *\r\n * You can directly set this property to be an instance of a Rectangle. Or, you can use the\r\n * `setDeadzone` method for a chainable approach.\r\n *\r\n * The rectangle you provide can have its dimensions adjusted dynamically, however, please\r\n * note that its position is updated every frame, as it is constantly re-centered on the cameras mid point.\r\n *\r\n * Calling `setDeadzone` with no arguments will reset an active deadzone, as will setting this property\r\n * to `null`.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Camera#deadzone\r\n * @type {?Phaser.Geom.Rectangle}\r\n * @since 3.11.0\r\n */\r\n this.deadzone = null;\r\n\r\n /**\r\n * Internal follow target reference.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Camera#_follow\r\n * @type {?any}\r\n * @private\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this._follow = null;\r\n\r\n /**\r\n * Is this Camera rendering directly to the canvas or to a texture?\r\n *\r\n * Enable rendering to texture with the method `setRenderToTexture` (just enabling this boolean won't be enough)\r\n *\r\n * Once enabled you can toggle it by switching this property.\r\n *\r\n * To properly remove a render texture you should call the `clearRenderToTexture()` method.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Camera#renderToTexture\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.13.0\r\n */\r\n this.renderToTexture = false;\r\n\r\n /**\r\n * If this Camera has been set to render to a texture then this holds a reference\r\n * to the HTML Canvas Element that the Camera is drawing to.\r\n *\r\n * Enable texture rendering using the method `setRenderToTexture`.\r\n *\r\n * This is only populated if Phaser is running with the Canvas Renderer.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Camera#canvas\r\n * @type {HTMLCanvasElement}\r\n * @since 3.13.0\r\n */\r\n this.canvas = null;\r\n\r\n /**\r\n * If this Camera has been set to render to a texture then this holds a reference\r\n * to the Rendering Context belonging to the Canvas element the Camera is drawing to.\r\n *\r\n * Enable texture rendering using the method `setRenderToTexture`.\r\n *\r\n * This is only populated if Phaser is running with the Canvas Renderer.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Camera#context\r\n * @type {CanvasRenderingContext2D}\r\n * @since 3.13.0\r\n */\r\n this.context = null;\r\n\r\n /**\r\n * If this Camera has been set to render to a texture then this holds a reference\r\n * to the GL Texture belonging the Camera is drawing to.\r\n *\r\n * Enable texture rendering using the method `setRenderToTexture`.\r\n *\r\n * This is only set if Phaser is running with the WebGL Renderer.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Camera#glTexture\r\n * @type {?WebGLTexture}\r\n * @since 3.13.0\r\n */\r\n this.glTexture = null;\r\n\r\n /**\r\n * If this Camera has been set to render to a texture then this holds a reference\r\n * to the GL Frame Buffer belonging the Camera is drawing to.\r\n *\r\n * Enable texture rendering using the method `setRenderToTexture`.\r\n *\r\n * This is only set if Phaser is running with the WebGL Renderer.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Camera#framebuffer\r\n * @type {?WebGLFramebuffer}\r\n * @since 3.13.0\r\n */\r\n this.framebuffer = null;\r\n\r\n /**\r\n * If this Camera has been set to render to a texture and to use a custom pipeline,\r\n * then this holds a reference to the pipeline the Camera is drawing with.\r\n *\r\n * Enable texture rendering using the method `setRenderToTexture`.\r\n *\r\n * This is only set if Phaser is running with the WebGL Renderer.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Camera#pipeline\r\n * @type {any}\r\n * @since 3.13.0\r\n */\r\n this.pipeline = null;\r\n },\r\n\r\n /**\r\n * Sets the Camera to render to a texture instead of to the main canvas.\r\n *\r\n * The Camera will redirect all Game Objects it's asked to render to this texture.\r\n *\r\n * During the render sequence, the texture itself will then be rendered to the main canvas.\r\n *\r\n * Doing this gives you the ability to modify the texture before this happens,\r\n * allowing for special effects such as Camera specific shaders, or post-processing\r\n * on the texture.\r\n *\r\n * If running under Canvas the Camera will render to its `canvas` property.\r\n *\r\n * If running under WebGL the Camera will create a frame buffer, which is stored in its `framebuffer` and `glTexture` properties.\r\n *\r\n * If you set a camera to render to a texture then it will emit 2 events during the render loop:\r\n *\r\n * First, it will emit the event `prerender`. This happens right before any Game Object's are drawn to the Camera texture.\r\n *\r\n * Then, it will emit the event `postrender`. This happens after all Game Object's have been drawn, but right before the\r\n * Camera texture is rendered to the main game canvas. It's the final point at which you can manipulate the texture before\r\n * it appears in-game.\r\n *\r\n * You should not enable this unless you plan on actually using the texture it creates\r\n * somehow, otherwise you're just doubling the work required to render your game.\r\n *\r\n * To temporarily disable rendering to a texture, toggle the `renderToTexture` boolean.\r\n *\r\n * If you no longer require the Camera to render to a texture, call the `clearRenderToTexture` method,\r\n * which will delete the respective textures and free-up resources.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Camera#setRenderToTexture\r\n * @since 3.13.0\r\n *\r\n * @param {(string|Phaser.Renderer.WebGL.WebGLPipeline)} [pipeline] - An optional WebGL Pipeline to render with, can be either a string which is the name of the pipeline, or a pipeline reference.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n */\r\n setRenderToTexture: function (pipeline)\r\n {\r\n var renderer = this.scene.sys.game.renderer;\r\n\r\n if (renderer.gl)\r\n {\r\n this.glTexture = renderer.createTextureFromSource(null, this.width, this.height, 0);\r\n this.framebuffer = renderer.createFramebuffer(this.width, this.height, this.glTexture, false);\r\n }\r\n else\r\n {\r\n this.canvas = CanvasPool.create2D(this, this.width, this.height);\r\n this.context = this.canvas.getContext('2d');\r\n }\r\n\r\n this.renderToTexture = true;\r\n\r\n if (pipeline)\r\n {\r\n this.setPipeline(pipeline);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the WebGL pipeline this Camera is using when rendering to a texture.\r\n *\r\n * You can pass either the string-based name of the pipeline, or a reference to the pipeline itself.\r\n *\r\n * Call this method with no arguments to clear any previously set pipeline.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Camera#setPipeline\r\n * @since 3.13.0\r\n *\r\n * @param {(string|Phaser.Renderer.WebGL.WebGLPipeline)} [pipeline] - The WebGL Pipeline to render with, can be either a string which is the name of the pipeline, or a pipeline reference. Or if left empty it will clear the pipeline.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n */\r\n setPipeline: function (pipeline)\r\n {\r\n if (typeof pipeline === 'string')\r\n {\r\n var renderer = this.scene.sys.game.renderer;\r\n\r\n if (renderer.gl && renderer.hasPipeline(pipeline))\r\n {\r\n this.pipeline = renderer.getPipeline(pipeline);\r\n }\r\n }\r\n else\r\n {\r\n this.pipeline = pipeline;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * If this Camera was set to render to a texture, this will clear the resources it was using and\r\n * redirect it to render back to the primary Canvas again.\r\n *\r\n * If you only wish to temporarily disable rendering to a texture then you can toggle the\r\n * property `renderToTexture` instead.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Camera#clearRenderToTexture\r\n * @since 3.13.0\r\n *\r\n * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n */\r\n clearRenderToTexture: function ()\r\n {\r\n if (!this.scene)\r\n {\r\n return;\r\n }\r\n\r\n var renderer = this.scene.sys.game.renderer;\r\n\r\n if (!renderer)\r\n {\r\n return;\r\n }\r\n\r\n if (renderer.gl)\r\n {\r\n if (this.framebuffer)\r\n {\r\n renderer.deleteFramebuffer(this.framebuffer);\r\n }\r\n\r\n if (this.glTexture)\r\n {\r\n renderer.deleteTexture(this.glTexture);\r\n }\r\n\r\n this.framebuffer = null;\r\n this.glTexture = null;\r\n this.pipeline = null;\r\n }\r\n else\r\n {\r\n CanvasPool.remove(this);\r\n\r\n this.canvas = null;\r\n this.context = null;\r\n }\r\n\r\n this.renderToTexture = false;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the Camera dead zone.\r\n *\r\n * The deadzone is only used when the camera is following a target.\r\n *\r\n * It defines a rectangular region within which if the target is present, the camera will not scroll.\r\n * If the target moves outside of this area, the camera will begin scrolling in order to follow it.\r\n *\r\n * The deadzone rectangle is re-positioned every frame so that it is centered on the mid-point\r\n * of the camera. This allows you to use the object for additional game related checks, such as\r\n * testing if an object is within it or not via a Rectangle.contains call.\r\n *\r\n * The `lerp` values that you can set for a follower target also apply when using a deadzone.\r\n *\r\n * Calling this method with no arguments will reset an active deadzone.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Camera#setDeadzone\r\n * @since 3.11.0\r\n *\r\n * @param {number} [width] - The width of the deadzone rectangle in pixels. If not specified the deadzone is removed.\r\n * @param {number} [height] - The height of the deadzone rectangle in pixels.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n */\r\n setDeadzone: function (width, height)\r\n {\r\n if (width === undefined)\r\n {\r\n this.deadzone = null;\r\n }\r\n else\r\n {\r\n if (this.deadzone)\r\n {\r\n this.deadzone.width = width;\r\n this.deadzone.height = height;\r\n }\r\n else\r\n {\r\n this.deadzone = new Rectangle(0, 0, width, height);\r\n }\r\n\r\n if (this._follow)\r\n {\r\n var originX = this.width / 2;\r\n var originY = this.height / 2;\r\n\r\n var fx = this._follow.x - this.followOffset.x;\r\n var fy = this._follow.y - this.followOffset.y;\r\n\r\n this.midPoint.set(fx, fy);\r\n\r\n this.scrollX = fx - originX;\r\n this.scrollY = fy - originY;\r\n }\r\n\r\n CenterOn(this.deadzone, this.midPoint.x, this.midPoint.y);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Fades the Camera in from the given color over the duration specified.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Camera#fadeIn\r\n * @fires Phaser.Cameras.Scene2D.Events#FADE_IN_START\r\n * @fires Phaser.Cameras.Scene2D.Events#FADE_IN_COMPLETE\r\n * @since 3.3.0\r\n *\r\n * @param {integer} [duration=1000] - The duration of the effect in milliseconds.\r\n * @param {integer} [red=0] - The amount to fade the red channel towards. A value between 0 and 255.\r\n * @param {integer} [green=0] - The amount to fade the green channel towards. A value between 0 and 255.\r\n * @param {integer} [blue=0] - The amount to fade the blue channel towards. A value between 0 and 255.\r\n * @param {function} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n * It is sent two arguments: A reference to the camera and a progress amount between 0 and 1 indicating how complete the effect is.\r\n * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n */\r\n fadeIn: function (duration, red, green, blue, callback, context)\r\n {\r\n return this.fadeEffect.start(false, duration, red, green, blue, true, callback, context);\r\n },\r\n\r\n /**\r\n * Fades the Camera out to the given color over the duration specified.\r\n * This is an alias for Camera.fade that forces the fade to start, regardless of existing fades.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Camera#fadeOut\r\n * @fires Phaser.Cameras.Scene2D.Events#FADE_OUT_START\r\n * @fires Phaser.Cameras.Scene2D.Events#FADE_OUT_COMPLETE\r\n * @since 3.3.0\r\n *\r\n * @param {integer} [duration=1000] - The duration of the effect in milliseconds.\r\n * @param {integer} [red=0] - The amount to fade the red channel towards. A value between 0 and 255.\r\n * @param {integer} [green=0] - The amount to fade the green channel towards. A value between 0 and 255.\r\n * @param {integer} [blue=0] - The amount to fade the blue channel towards. A value between 0 and 255.\r\n * @param {function} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n * It is sent two arguments: A reference to the camera and a progress amount between 0 and 1 indicating how complete the effect is.\r\n * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n */\r\n fadeOut: function (duration, red, green, blue, callback, context)\r\n {\r\n return this.fadeEffect.start(true, duration, red, green, blue, true, callback, context);\r\n },\r\n\r\n /**\r\n * Fades the Camera from the given color to transparent over the duration specified.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Camera#fadeFrom\r\n * @fires Phaser.Cameras.Scene2D.Events#FADE_IN_START\r\n * @fires Phaser.Cameras.Scene2D.Events#FADE_IN_COMPLETE\r\n * @since 3.5.0\r\n *\r\n * @param {integer} [duration=1000] - The duration of the effect in milliseconds.\r\n * @param {integer} [red=0] - The amount to fade the red channel towards. A value between 0 and 255.\r\n * @param {integer} [green=0] - The amount to fade the green channel towards. A value between 0 and 255.\r\n * @param {integer} [blue=0] - The amount to fade the blue channel towards. A value between 0 and 255.\r\n * @param {boolean} [force=false] - Force the effect to start immediately, even if already running.\r\n * @param {function} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n * It is sent two arguments: A reference to the camera and a progress amount between 0 and 1 indicating how complete the effect is.\r\n * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n */\r\n fadeFrom: function (duration, red, green, blue, force, callback, context)\r\n {\r\n return this.fadeEffect.start(false, duration, red, green, blue, force, callback, context);\r\n },\r\n\r\n /**\r\n * Fades the Camera from transparent to the given color over the duration specified.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Camera#fade\r\n * @fires Phaser.Cameras.Scene2D.Events#FADE_OUT_START\r\n * @fires Phaser.Cameras.Scene2D.Events#FADE_OUT_COMPLETE\r\n * @since 3.0.0\r\n *\r\n * @param {integer} [duration=1000] - The duration of the effect in milliseconds.\r\n * @param {integer} [red=0] - The amount to fade the red channel towards. A value between 0 and 255.\r\n * @param {integer} [green=0] - The amount to fade the green channel towards. A value between 0 and 255.\r\n * @param {integer} [blue=0] - The amount to fade the blue channel towards. A value between 0 and 255.\r\n * @param {boolean} [force=false] - Force the effect to start immediately, even if already running.\r\n * @param {function} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n * It is sent two arguments: A reference to the camera and a progress amount between 0 and 1 indicating how complete the effect is.\r\n * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n */\r\n fade: function (duration, red, green, blue, force, callback, context)\r\n {\r\n return this.fadeEffect.start(true, duration, red, green, blue, force, callback, context);\r\n },\r\n\r\n /**\r\n * Flashes the Camera by setting it to the given color immediately and then fading it away again quickly over the duration specified.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Camera#flash\r\n * @fires Phaser.Cameras.Scene2D.Events#FLASH_START\r\n * @fires Phaser.Cameras.Scene2D.Events#FLASH_COMPLETE\r\n * @since 3.0.0\r\n *\r\n * @param {integer} [duration=250] - The duration of the effect in milliseconds.\r\n * @param {integer} [red=255] - The amount to fade the red channel towards. A value between 0 and 255.\r\n * @param {integer} [green=255] - The amount to fade the green channel towards. A value between 0 and 255.\r\n * @param {integer} [blue=255] - The amount to fade the blue channel towards. A value between 0 and 255.\r\n * @param {boolean} [force=false] - Force the effect to start immediately, even if already running.\r\n * @param {function} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n * It is sent two arguments: A reference to the camera and a progress amount between 0 and 1 indicating how complete the effect is.\r\n * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n */\r\n flash: function (duration, red, green, blue, force, callback, context)\r\n {\r\n return this.flashEffect.start(duration, red, green, blue, force, callback, context);\r\n },\r\n\r\n /**\r\n * Shakes the Camera by the given intensity over the duration specified.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Camera#shake\r\n * @fires Phaser.Cameras.Scene2D.Events#SHAKE_START\r\n * @fires Phaser.Cameras.Scene2D.Events#SHAKE_COMPLETE\r\n * @since 3.0.0\r\n *\r\n * @param {integer} [duration=100] - The duration of the effect in milliseconds.\r\n * @param {(number|Phaser.Math.Vector2)} [intensity=0.05] - The intensity of the shake.\r\n * @param {boolean} [force=false] - Force the shake effect to start immediately, even if already running.\r\n * @param {function} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n * It is sent two arguments: A reference to the camera and a progress amount between 0 and 1 indicating how complete the effect is.\r\n * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n */\r\n shake: function (duration, intensity, force, callback, context)\r\n {\r\n return this.shakeEffect.start(duration, intensity, force, callback, context);\r\n },\r\n\r\n /**\r\n * This effect will scroll the Camera so that the center of its viewport finishes at the given destination,\r\n * over the duration and with the ease specified.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Camera#pan\r\n * @fires Phaser.Cameras.Scene2D.Events#PAN_START\r\n * @fires Phaser.Cameras.Scene2D.Events#PAN_COMPLETE\r\n * @since 3.11.0\r\n *\r\n * @param {number} x - The destination x coordinate to scroll the center of the Camera viewport to.\r\n * @param {number} y - The destination y coordinate to scroll the center of the Camera viewport to.\r\n * @param {integer} [duration=1000] - The duration of the effect in milliseconds.\r\n * @param {(string|function)} [ease='Linear'] - The ease to use for the pan. Can be any of the Phaser Easing constants or a custom function.\r\n * @param {boolean} [force=false] - Force the pan effect to start immediately, even if already running.\r\n * @param {Phaser.Types.Cameras.Scene2D.CameraPanCallback} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n * It is sent four arguments: A reference to the camera, a progress amount between 0 and 1 indicating how complete the effect is,\r\n * the current camera scroll x coordinate and the current camera scroll y coordinate.\r\n * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n */\r\n pan: function (x, y, duration, ease, force, callback, context)\r\n {\r\n return this.panEffect.start(x, y, duration, ease, force, callback, context);\r\n },\r\n\r\n /**\r\n * This effect will zoom the Camera to the given scale, over the duration and with the ease specified.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Camera#zoomTo\r\n * @fires Phaser.Cameras.Scene2D.Events#ZOOM_START\r\n * @fires Phaser.Cameras.Scene2D.Events#ZOOM_COMPLETE\r\n * @since 3.11.0\r\n *\r\n * @param {number} zoom - The target Camera zoom value.\r\n * @param {integer} [duration=1000] - The duration of the effect in milliseconds.\r\n * @param {(string|function)} [ease='Linear'] - The ease to use for the pan. Can be any of the Phaser Easing constants or a custom function.\r\n * @param {boolean} [force=false] - Force the pan effect to start immediately, even if already running.\r\n * @param {Phaser.Types.Cameras.Scene2D.CameraPanCallback} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n * It is sent four arguments: A reference to the camera, a progress amount between 0 and 1 indicating how complete the effect is,\r\n * the current camera scroll x coordinate and the current camera scroll y coordinate.\r\n * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n */\r\n zoomTo: function (zoom, duration, ease, force, callback, context)\r\n {\r\n return this.zoomEffect.start(zoom, duration, ease, force, callback, context);\r\n },\r\n\r\n /**\r\n * Internal preRender step.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Camera#preRender\r\n * @protected\r\n * @since 3.0.0\r\n *\r\n * @param {number} resolution - The game resolution, as set in the Scale Manager.\r\n */\r\n preRender: function (resolution)\r\n {\r\n var width = this.width;\r\n var height = this.height;\r\n\r\n var halfWidth = width * 0.5;\r\n var halfHeight = height * 0.5;\r\n\r\n var zoom = this.zoom * resolution;\r\n var matrix = this.matrix;\r\n\r\n var originX = width * this.originX;\r\n var originY = height * this.originY;\r\n\r\n var follow = this._follow;\r\n var deadzone = this.deadzone;\r\n\r\n var sx = this.scrollX;\r\n var sy = this.scrollY;\r\n\r\n if (deadzone)\r\n {\r\n CenterOn(deadzone, this.midPoint.x, this.midPoint.y);\r\n }\r\n\r\n if (follow && !this.panEffect.isRunning)\r\n {\r\n var fx = (follow.x - this.followOffset.x);\r\n var fy = (follow.y - this.followOffset.y);\r\n\r\n if (deadzone)\r\n {\r\n if (fx < deadzone.x)\r\n {\r\n sx = Linear(sx, sx - (deadzone.x - fx), this.lerp.x);\r\n }\r\n else if (fx > deadzone.right)\r\n {\r\n sx = Linear(sx, sx + (fx - deadzone.right), this.lerp.x);\r\n }\r\n\r\n if (fy < deadzone.y)\r\n {\r\n sy = Linear(sy, sy - (deadzone.y - fy), this.lerp.y);\r\n }\r\n else if (fy > deadzone.bottom)\r\n {\r\n sy = Linear(sy, sy + (fy - deadzone.bottom), this.lerp.y);\r\n }\r\n }\r\n else\r\n {\r\n sx = Linear(sx, fx - originX, this.lerp.x);\r\n sy = Linear(sy, fy - originY, this.lerp.y);\r\n }\r\n }\r\n\r\n if (this.useBounds)\r\n {\r\n sx = this.clampX(sx);\r\n sy = this.clampY(sy);\r\n }\r\n\r\n if (this.roundPixels)\r\n {\r\n originX = Math.round(originX);\r\n originY = Math.round(originY);\r\n }\r\n\r\n // Values are in pixels and not impacted by zooming the Camera\r\n this.scrollX = sx;\r\n this.scrollY = sy;\r\n\r\n var midX = sx + halfWidth;\r\n var midY = sy + halfHeight;\r\n\r\n // The center of the camera, in world space, so taking zoom into account\r\n // Basically the pixel value of what it's looking at in the middle of the cam\r\n this.midPoint.set(midX, midY);\r\n\r\n var displayWidth = width / zoom;\r\n var displayHeight = height / zoom;\r\n\r\n this.worldView.setTo(\r\n midX - (displayWidth / 2),\r\n midY - (displayHeight / 2),\r\n displayWidth,\r\n displayHeight\r\n );\r\n\r\n matrix.applyITRS(this.x + originX, this.y + originY, this.rotation, zoom, zoom);\r\n matrix.translate(-originX, -originY);\r\n\r\n this.shakeEffect.preRender();\r\n },\r\n\r\n /**\r\n * Sets the linear interpolation value to use when following a target.\r\n *\r\n * The default values of 1 means the camera will instantly snap to the target coordinates.\r\n * A lower value, such as 0.1 means the camera will more slowly track the target, giving\r\n * a smooth transition. You can set the horizontal and vertical values independently, and also\r\n * adjust this value in real-time during your game.\r\n *\r\n * Be sure to keep the value between 0 and 1. A value of zero will disable tracking on that axis.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Camera#setLerp\r\n * @since 3.9.0\r\n *\r\n * @param {number} [x=1] - The amount added to the horizontal linear interpolation of the follow target.\r\n * @param {number} [y=1] - The amount added to the vertical linear interpolation of the follow target.\r\n *\r\n * @return {this} This Camera instance.\r\n */\r\n setLerp: function (x, y)\r\n {\r\n if (x === undefined) { x = 1; }\r\n if (y === undefined) { y = x; }\r\n\r\n this.lerp.set(x, y);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the horizontal and vertical offset of the camera from its follow target.\r\n * The values are subtracted from the targets position during the Cameras update step.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Camera#setFollowOffset\r\n * @since 3.9.0\r\n *\r\n * @param {number} [x=0] - The horizontal offset from the camera follow target.x position.\r\n * @param {number} [y=0] - The vertical offset from the camera follow target.y position.\r\n *\r\n * @return {this} This Camera instance.\r\n */\r\n setFollowOffset: function (x, y)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n\r\n this.followOffset.set(x, y);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the Camera to follow a Game Object.\r\n *\r\n * When enabled the Camera will automatically adjust its scroll position to keep the target Game Object\r\n * in its center.\r\n *\r\n * You can set the linear interpolation value used in the follow code.\r\n * Use low lerp values (such as 0.1) to automatically smooth the camera motion.\r\n *\r\n * If you find you're getting a slight \"jitter\" effect when following an object it's probably to do with sub-pixel\r\n * rendering of the targets position. This can be rounded by setting the `roundPixels` argument to `true` to\r\n * force full pixel rounding rendering. Note that this can still be broken if you have specified a non-integer zoom\r\n * value on the camera. So be sure to keep the camera zoom to integers.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Camera#startFollow\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.GameObjects.GameObject|object)} target - The target for the Camera to follow.\r\n * @param {boolean} [roundPixels=false] - Round the camera position to whole integers to avoid sub-pixel rendering?\r\n * @param {number} [lerpX=1] - A value between 0 and 1. This value specifies the amount of linear interpolation to use when horizontally tracking the target. The closer the value to 1, the faster the camera will track.\r\n * @param {number} [lerpY=1] - A value between 0 and 1. This value specifies the amount of linear interpolation to use when vertically tracking the target. The closer the value to 1, the faster the camera will track.\r\n * @param {number} [offsetX=0] - The horizontal offset from the camera follow target.x position.\r\n * @param {number} [offsetY=0] - The vertical offset from the camera follow target.y position.\r\n *\r\n * @return {this} This Camera instance.\r\n */\r\n startFollow: function (target, roundPixels, lerpX, lerpY, offsetX, offsetY)\r\n {\r\n if (roundPixels === undefined) { roundPixels = false; }\r\n if (lerpX === undefined) { lerpX = 1; }\r\n if (lerpY === undefined) { lerpY = lerpX; }\r\n if (offsetX === undefined) { offsetX = 0; }\r\n if (offsetY === undefined) { offsetY = offsetX; }\r\n\r\n this._follow = target;\r\n\r\n this.roundPixels = roundPixels;\r\n\r\n lerpX = Clamp(lerpX, 0, 1);\r\n lerpY = Clamp(lerpY, 0, 1);\r\n\r\n this.lerp.set(lerpX, lerpY);\r\n\r\n this.followOffset.set(offsetX, offsetY);\r\n\r\n var originX = this.width / 2;\r\n var originY = this.height / 2;\r\n\r\n var fx = target.x - offsetX;\r\n var fy = target.y - offsetY;\r\n\r\n this.midPoint.set(fx, fy);\r\n\r\n this.scrollX = fx - originX;\r\n this.scrollY = fy - originY;\r\n\r\n if (this.useBounds)\r\n {\r\n this.scrollX = this.clampX(this.scrollX);\r\n this.scrollY = this.clampY(this.scrollY);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Stops a Camera from following a Game Object, if previously set via `Camera.startFollow`.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Camera#stopFollow\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n */\r\n stopFollow: function ()\r\n {\r\n this._follow = null;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Resets any active FX, such as a fade, flash or shake. Useful to call after a fade in order to\r\n * remove the fade.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Camera#resetFX\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Cameras.Scene2D.Camera} This Camera instance.\r\n */\r\n resetFX: function ()\r\n {\r\n this.panEffect.reset();\r\n this.shakeEffect.reset();\r\n this.flashEffect.reset();\r\n this.fadeEffect.reset();\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Internal method called automatically by the Camera Manager.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Camera#update\r\n * @protected\r\n * @since 3.0.0\r\n *\r\n * @param {integer} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n */\r\n update: function (time, delta)\r\n {\r\n if (this.visible)\r\n {\r\n this.panEffect.update(time, delta);\r\n this.zoomEffect.update(time, delta);\r\n this.shakeEffect.update(time, delta);\r\n this.flashEffect.update(time, delta);\r\n this.fadeEffect.update(time, delta);\r\n }\r\n },\r\n\r\n /**\r\n * Destroys this Camera instance. You rarely need to call this directly.\r\n *\r\n * Called by the Camera Manager. If you wish to destroy a Camera please use `CameraManager.remove` as\r\n * cameras are stored in a pool, ready for recycling later, and calling this directly will prevent that.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Camera#destroy\r\n * @fires Phaser.Cameras.Scene2D.Events#DESTROY\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.clearRenderToTexture();\r\n\r\n this.resetFX();\r\n\r\n BaseCamera.prototype.destroy.call(this);\r\n\r\n this._follow = null;\r\n\r\n this.deadzone = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Camera;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL0NhbWVyYS5qcz9jODZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyx3RUFBYztBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDMUQsZUFBZSxtQkFBTyxDQUFDLDJGQUErQjtBQUN0RCxZQUFZLG1CQUFPLENBQUMsaUVBQWtCO0FBQ3RDLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsK0ZBQThCO0FBQ3ZELGNBQWMsbUJBQU8sQ0FBQyx3RUFBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLDZGQUFnQztBQUN4RCxjQUFjLG1CQUFPLENBQUMscUVBQW9COztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNkNBQTZDO0FBQzVEO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDZDQUE2QztBQUM1RDtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxTQUFTO0FBQ3hCO0FBQ0EsZUFBZSxJQUFJO0FBQ25CO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsU0FBUztBQUN4QjtBQUNBLGVBQWUsSUFBSTtBQUNuQjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsU0FBUztBQUN4QjtBQUNBLGVBQWUsSUFBSTtBQUNuQjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsU0FBUztBQUN4QjtBQUNBLGVBQWUsSUFBSTtBQUNuQjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsU0FBUztBQUN4QjtBQUNBLGVBQWUsSUFBSTtBQUNuQjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSw2QkFBNkI7QUFDNUMsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsU0FBUztBQUN4QjtBQUNBLGVBQWUsSUFBSTtBQUNuQjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsa0JBQWtCO0FBQ2pDLGVBQWUsUUFBUTtBQUN2QixlQUFlLCtDQUErQztBQUM5RDtBQUNBO0FBQ0EsZUFBZSxJQUFJO0FBQ25CO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxrQkFBa0I7QUFDakMsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsK0NBQStDO0FBQzlEO0FBQ0E7QUFDQSxlQUFlLElBQUk7QUFDbkI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTztBQUNyQyw4QkFBOEIsT0FBTzs7QUFFckM7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPOztBQUVyQzs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsdUNBQXVDO0FBQ3RELGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MscUJBQXFCO0FBQzdELGtDQUFrQyxXQUFXO0FBQzdDLGtDQUFrQyxlQUFlO0FBQ2pELG9DQUFvQyxhQUFhO0FBQ2pELG9DQUFvQyxtQkFBbUI7O0FBRXZEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FtZXJhcy8yZC9DYW1lcmEuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCYXNlQ2FtZXJhID0gcmVxdWlyZSgnLi9CYXNlQ2FtZXJhJyk7XHJcbnZhciBDYW52YXNQb29sID0gcmVxdWlyZSgnLi4vLi4vZGlzcGxheS9jYW52YXMvQ2FudmFzUG9vbCcpO1xyXG52YXIgQ2VudGVyT24gPSByZXF1aXJlKCcuLi8uLi9nZW9tL3JlY3RhbmdsZS9DZW50ZXJPbicpO1xyXG52YXIgQ2xhbXAgPSByZXF1aXJlKCcuLi8uLi9tYXRoL0NsYW1wJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzID0gcmVxdWlyZSgnLi4vLi4vZ2FtZW9iamVjdHMvY29tcG9uZW50cycpO1xyXG52YXIgRWZmZWN0cyA9IHJlcXVpcmUoJy4vZWZmZWN0cycpO1xyXG52YXIgTGluZWFyID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9MaW5lYXInKTtcclxudmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4uLy4uL2dlb20vcmVjdGFuZ2xlL1JlY3RhbmdsZScpO1xyXG52YXIgVmVjdG9yMiA9IHJlcXVpcmUoJy4uLy4uL21hdGgvVmVjdG9yMicpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBDYW1lcmEuXHJcbiAqXHJcbiAqIFRoZSBDYW1lcmEgaXMgdGhlIHdheSBpbiB3aGljaCBhbGwgZ2FtZXMgYXJlIHJlbmRlcmVkIGluIFBoYXNlci4gVGhleSBwcm92aWRlIGEgdmlldyBpbnRvIHlvdXIgZ2FtZSB3b3JsZCxcclxuICogYW5kIGNhbiBiZSBwb3NpdGlvbmVkLCByb3RhdGVkLCB6b29tZWQgYW5kIHNjcm9sbGVkIGFjY29yZGluZ2x5LlxyXG4gKlxyXG4gKiBBIENhbWVyYSBjb25zaXN0cyBvZiB0d28gZWxlbWVudHM6IFRoZSB2aWV3cG9ydCBhbmQgdGhlIHNjcm9sbCB2YWx1ZXMuXHJcbiAqXHJcbiAqIFRoZSB2aWV3cG9ydCBpcyB0aGUgcGh5c2ljYWwgcG9zaXRpb24gYW5kIHNpemUgb2YgdGhlIENhbWVyYSB3aXRoaW4geW91ciBnYW1lLiBDYW1lcmFzLCBieSBkZWZhdWx0LCBhcmVcclxuICogY3JlYXRlZCB0aGUgc2FtZSBzaXplIGFzIHlvdXIgZ2FtZSwgYnV0IHRoZWlyIHBvc2l0aW9uIGFuZCBzaXplIGNhbiBiZSBzZXQgdG8gYW55dGhpbmcuIFRoaXMgbWVhbnMgaWYgeW91XHJcbiAqIHdhbnRlZCB0byBjcmVhdGUgYSBjYW1lcmEgdGhhdCB3YXMgMzIweDIwMCBpbiBzaXplLCBwb3NpdGlvbmVkIGluIHRoZSBib3R0b20tcmlnaHQgY29ybmVyIG9mIHlvdXIgZ2FtZSxcclxuICogeW91J2QgYWRqdXN0IHRoZSB2aWV3cG9ydCB0byBkbyB0aGF0ICh1c2luZyBtZXRob2RzIGxpa2UgYHNldFZpZXdwb3J0YCBhbmQgYHNldFNpemVgKS5cclxuICpcclxuICogSWYgeW91IHdpc2ggdG8gY2hhbmdlIHdoZXJlIHRoZSBDYW1lcmEgaXMgbG9va2luZyBpbiB5b3VyIGdhbWUsIHRoZW4geW91IHNjcm9sbCBpdC4gWW91IGNhbiBkbyB0aGlzXHJcbiAqIHZpYSB0aGUgcHJvcGVydGllcyBgc2Nyb2xsWGAgYW5kIGBzY3JvbGxZYCBvciB0aGUgbWV0aG9kIGBzZXRTY3JvbGxgLiBTY3JvbGxpbmcgaGFzIG5vIGltcGFjdCBvbiB0aGVcclxuICogdmlld3BvcnQsIGFuZCBjaGFuZ2luZyB0aGUgdmlld3BvcnQgaGFzIG5vIGltcGFjdCBvbiB0aGUgc2Nyb2xsaW5nLlxyXG4gKlxyXG4gKiBCeSBkZWZhdWx0IGEgQ2FtZXJhIHdpbGwgcmVuZGVyIGFsbCBHYW1lIE9iamVjdHMgaXQgY2FuIHNlZS4gWW91IGNhbiBjaGFuZ2UgdGhpcyB1c2luZyB0aGUgYGlnbm9yZWAgbWV0aG9kLFxyXG4gKiBhbGxvd2luZyB5b3UgdG8gZmlsdGVyIEdhbWUgT2JqZWN0cyBvdXQgb24gYSBwZXItQ2FtZXJhIGJhc2lzLlxyXG4gKlxyXG4gKiBBIENhbWVyYSBhbHNvIGhhcyBidWlsdC1pbiBzcGVjaWFsIGVmZmVjdHMgaW5jbHVkaW5nIEZhZGUsIEZsYXNoIGFuZCBDYW1lcmEgU2hha2UuXHJcbiAqXHJcbiAqIEBjbGFzcyBDYW1lcmFcclxuICogQG1lbWJlcm9mIFBoYXNlci5DYW1lcmFzLlNjZW5lMkRcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmFcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRmxpcFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UaW50XHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggcG9zaXRpb24gb2YgdGhlIENhbWVyYSwgcmVsYXRpdmUgdG8gdGhlIHRvcC1sZWZ0IG9mIHRoZSBnYW1lIGNhbnZhcy5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgQ2FtZXJhLCByZWxhdGl2ZSB0byB0aGUgdG9wLWxlZnQgb2YgdGhlIGdhbWUgY2FudmFzLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIENhbWVyYSwgaW4gcGl4ZWxzLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgQ2FtZXJhLCBpbiBwaXhlbHMuXHJcbiAqL1xyXG52YXIgQ2FtZXJhID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBCYXNlQ2FtZXJhLFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIENvbXBvbmVudHMuRmxpcCxcclxuICAgICAgICBDb21wb25lbnRzLlRpbnRcclxuICAgIF0sXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBDYW1lcmEgKHgsIHksIHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgQmFzZUNhbWVyYS5jYWxsKHRoaXMsIHgsIHksIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEb2VzIHRoaXMgQ2FtZXJhIGFsbG93IHRoZSBHYW1lIE9iamVjdHMgaXQgcmVuZGVycyB0byByZWNlaXZlIGlucHV0IGV2ZW50cz9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI2lucHV0RW5hYmxlZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlucHV0RW5hYmxlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBDYW1lcmEgRmFkZSBlZmZlY3QgaGFuZGxlci5cclxuICAgICAgICAgKiBUbyBmYWRlIHRoaXMgY2FtZXJhIHNlZSB0aGUgYENhbWVyYS5mYWRlYCBtZXRob2RzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjZmFkZUVmZmVjdFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmFkZX1cclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZhZGVFZmZlY3QgPSBuZXcgRWZmZWN0cy5GYWRlKHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQ2FtZXJhIEZsYXNoIGVmZmVjdCBoYW5kbGVyLlxyXG4gICAgICAgICAqIFRvIGZsYXNoIHRoaXMgY2FtZXJhIHNlZSB0aGUgYENhbWVyYS5mbGFzaGAgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjZmxhc2hFZmZlY3RcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZsYXNofVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZmxhc2hFZmZlY3QgPSBuZXcgRWZmZWN0cy5GbGFzaCh0aGlzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIENhbWVyYSBTaGFrZSBlZmZlY3QgaGFuZGxlci5cclxuICAgICAgICAgKiBUbyBzaGFrZSB0aGlzIGNhbWVyYSBzZWUgdGhlIGBDYW1lcmEuc2hha2VgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI3NoYWtlRWZmZWN0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5TaGFrZX1cclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNoYWtlRWZmZWN0ID0gbmV3IEVmZmVjdHMuU2hha2UodGhpcyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBDYW1lcmEgUGFuIGVmZmVjdCBoYW5kbGVyLlxyXG4gICAgICAgICAqIFRvIHBhbiB0aGlzIGNhbWVyYSBzZWUgdGhlIGBDYW1lcmEucGFuYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYSNwYW5FZmZlY3RcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlBhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wYW5FZmZlY3QgPSBuZXcgRWZmZWN0cy5QYW4odGhpcyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBDYW1lcmEgWm9vbSBlZmZlY3QgaGFuZGxlci5cclxuICAgICAgICAgKiBUbyB6b29tIHRoaXMgY2FtZXJhIHNlZSB0aGUgYENhbWVyYS56b29tYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYSN6b29tRWZmZWN0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5ab29tfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnpvb21FZmZlY3QgPSBuZXcgRWZmZWN0cy5ab29tKHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbGluZWFyIGludGVycG9sYXRpb24gdmFsdWUgdG8gdXNlIHdoZW4gZm9sbG93aW5nIGEgdGFyZ2V0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQ2FuIGFsc28gYmUgc2V0IHZpYSBgc2V0TGVycGAgb3IgYXMgcGFydCBvZiB0aGUgYHN0YXJ0Rm9sbG93YCBjYWxsLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHQgdmFsdWVzIG9mIDEgbWVhbnMgdGhlIGNhbWVyYSB3aWxsIGluc3RhbnRseSBzbmFwIHRvIHRoZSB0YXJnZXQgY29vcmRpbmF0ZXMuXHJcbiAgICAgICAgICogQSBsb3dlciB2YWx1ZSwgc3VjaCBhcyAwLjEgbWVhbnMgdGhlIGNhbWVyYSB3aWxsIG1vcmUgc2xvd2x5IHRyYWNrIHRoZSB0YXJnZXQsIGdpdmluZ1xyXG4gICAgICAgICAqIGEgc21vb3RoIHRyYW5zaXRpb24uIFlvdSBjYW4gc2V0IHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCB2YWx1ZXMgaW5kZXBlbmRlbnRseSwgYW5kIGFsc29cclxuICAgICAgICAgKiBhZGp1c3QgdGhpcyB2YWx1ZSBpbiByZWFsLXRpbWUgZHVyaW5nIHlvdXIgZ2FtZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEJlIHN1cmUgdG8ga2VlcCB0aGUgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLiBBIHZhbHVlIG9mIHplcm8gd2lsbCBkaXNhYmxlIHRyYWNraW5nIG9uIHRoYXQgYXhpcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI2xlcnBcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAc2luY2UgMy45LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxlcnAgPSBuZXcgVmVjdG9yMigxLCAxKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHZhbHVlcyBzdG9yZWQgaW4gdGhpcyBwcm9wZXJ0eSBhcmUgc3VidHJhY3RlZCBmcm9tIHRoZSBDYW1lcmEgdGFyZ2V0cyBwb3NpdGlvbiwgYWxsb3dpbmcgeW91IHRvXHJcbiAgICAgICAgICogb2Zmc2V0IHRoZSBjYW1lcmEgZnJvbSB0aGUgYWN0dWFsIHRhcmdldCB4L3kgY29vcmRpbmF0ZXMgYnkgdGhpcyBhbW91bnQuXHJcbiAgICAgICAgICogQ2FuIGFsc28gYmUgc2V0IHZpYSBgc2V0Rm9sbG93T2Zmc2V0YCBvciBhcyBwYXJ0IG9mIHRoZSBgc3RhcnRGb2xsb3dgIGNhbGwuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYSNmb2xsb3dPZmZzZXRcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAc2luY2UgMy45LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZvbGxvd09mZnNldCA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBDYW1lcmEgZGVhZCB6b25lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhlIGRlYWR6b25lIGlzIG9ubHkgdXNlZCB3aGVuIHRoZSBjYW1lcmEgaXMgZm9sbG93aW5nIGEgdGFyZ2V0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogSXQgZGVmaW5lcyBhIHJlY3Rhbmd1bGFyIHJlZ2lvbiB3aXRoaW4gd2hpY2ggaWYgdGhlIHRhcmdldCBpcyBwcmVzZW50LCB0aGUgY2FtZXJhIHdpbGwgbm90IHNjcm9sbC5cclxuICAgICAgICAgKiBJZiB0aGUgdGFyZ2V0IG1vdmVzIG91dHNpZGUgb2YgdGhpcyBhcmVhLCB0aGUgY2FtZXJhIHdpbGwgYmVnaW4gc2Nyb2xsaW5nIGluIG9yZGVyIHRvIGZvbGxvdyBpdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoZSBgbGVycGAgdmFsdWVzIHRoYXQgeW91IGNhbiBzZXQgZm9yIGEgZm9sbG93ZXIgdGFyZ2V0IGFsc28gYXBwbHkgd2hlbiB1c2luZyBhIGRlYWR6b25lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogWW91IGNhbiBkaXJlY3RseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byBiZSBhbiBpbnN0YW5jZSBvZiBhIFJlY3RhbmdsZS4gT3IsIHlvdSBjYW4gdXNlIHRoZVxyXG4gICAgICAgICAqIGBzZXREZWFkem9uZWAgbWV0aG9kIGZvciBhIGNoYWluYWJsZSBhcHByb2FjaC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoZSByZWN0YW5nbGUgeW91IHByb3ZpZGUgY2FuIGhhdmUgaXRzIGRpbWVuc2lvbnMgYWRqdXN0ZWQgZHluYW1pY2FsbHksIGhvd2V2ZXIsIHBsZWFzZVxyXG4gICAgICAgICAqIG5vdGUgdGhhdCBpdHMgcG9zaXRpb24gaXMgdXBkYXRlZCBldmVyeSBmcmFtZSwgYXMgaXQgaXMgY29uc3RhbnRseSByZS1jZW50ZXJlZCBvbiB0aGUgY2FtZXJhcyBtaWQgcG9pbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBDYWxsaW5nIGBzZXREZWFkem9uZWAgd2l0aCBubyBhcmd1bWVudHMgd2lsbCByZXNldCBhbiBhY3RpdmUgZGVhZHpvbmUsIGFzIHdpbGwgc2V0dGluZyB0aGlzIHByb3BlcnR5XHJcbiAgICAgICAgICogdG8gYG51bGxgLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjZGVhZHpvbmVcclxuICAgICAgICAgKiBAdHlwZSB7P1BoYXNlci5HZW9tLlJlY3RhbmdsZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWFkem9uZSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIGZvbGxvdyB0YXJnZXQgcmVmZXJlbmNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjX2ZvbGxvd1xyXG4gICAgICAgICAqIEB0eXBlIHs/YW55fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2ZvbGxvdyA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElzIHRoaXMgQ2FtZXJhIHJlbmRlcmluZyBkaXJlY3RseSB0byB0aGUgY2FudmFzIG9yIHRvIGEgdGV4dHVyZT9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEVuYWJsZSByZW5kZXJpbmcgdG8gdGV4dHVyZSB3aXRoIHRoZSBtZXRob2QgYHNldFJlbmRlclRvVGV4dHVyZWAgKGp1c3QgZW5hYmxpbmcgdGhpcyBib29sZWFuIHdvbid0IGJlIGVub3VnaClcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIE9uY2UgZW5hYmxlZCB5b3UgY2FuIHRvZ2dsZSBpdCBieSBzd2l0Y2hpbmcgdGhpcyBwcm9wZXJ0eS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRvIHByb3Blcmx5IHJlbW92ZSBhIHJlbmRlciB0ZXh0dXJlIHlvdSBzaG91bGQgY2FsbCB0aGUgYGNsZWFyUmVuZGVyVG9UZXh0dXJlKClgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI3JlbmRlclRvVGV4dHVyZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVuZGVyVG9UZXh0dXJlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHRoaXMgQ2FtZXJhIGhhcyBiZWVuIHNldCB0byByZW5kZXIgdG8gYSB0ZXh0dXJlIHRoZW4gdGhpcyBob2xkcyBhIHJlZmVyZW5jZVxyXG4gICAgICAgICAqIHRvIHRoZSBIVE1MIENhbnZhcyBFbGVtZW50IHRoYXQgdGhlIENhbWVyYSBpcyBkcmF3aW5nIHRvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogRW5hYmxlIHRleHR1cmUgcmVuZGVyaW5nIHVzaW5nIHRoZSBtZXRob2QgYHNldFJlbmRlclRvVGV4dHVyZWAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBUaGlzIGlzIG9ubHkgcG9wdWxhdGVkIGlmIFBoYXNlciBpcyBydW5uaW5nIHdpdGggdGhlIENhbnZhcyBSZW5kZXJlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI2NhbnZhc1xyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MQ2FudmFzRWxlbWVudH1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYW52YXMgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiB0aGlzIENhbWVyYSBoYXMgYmVlbiBzZXQgdG8gcmVuZGVyIHRvIGEgdGV4dHVyZSB0aGVuIHRoaXMgaG9sZHMgYSByZWZlcmVuY2VcclxuICAgICAgICAgKiB0byB0aGUgUmVuZGVyaW5nIENvbnRleHQgYmVsb25naW5nIHRvIHRoZSBDYW52YXMgZWxlbWVudCB0aGUgQ2FtZXJhIGlzIGRyYXdpbmcgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBFbmFibGUgdGV4dHVyZSByZW5kZXJpbmcgdXNpbmcgdGhlIG1ldGhvZCBgc2V0UmVuZGVyVG9UZXh0dXJlYC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoaXMgaXMgb25seSBwb3B1bGF0ZWQgaWYgUGhhc2VyIGlzIHJ1bm5pbmcgd2l0aCB0aGUgQ2FudmFzIFJlbmRlcmVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjY29udGV4dFxyXG4gICAgICAgICAqIEB0eXBlIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHRoaXMgQ2FtZXJhIGhhcyBiZWVuIHNldCB0byByZW5kZXIgdG8gYSB0ZXh0dXJlIHRoZW4gdGhpcyBob2xkcyBhIHJlZmVyZW5jZVxyXG4gICAgICAgICAqIHRvIHRoZSBHTCBUZXh0dXJlIGJlbG9uZ2luZyB0aGUgQ2FtZXJhIGlzIGRyYXdpbmcgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBFbmFibGUgdGV4dHVyZSByZW5kZXJpbmcgdXNpbmcgdGhlIG1ldGhvZCBgc2V0UmVuZGVyVG9UZXh0dXJlYC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoaXMgaXMgb25seSBzZXQgaWYgUGhhc2VyIGlzIHJ1bm5pbmcgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYSNnbFRleHR1cmVcclxuICAgICAgICAgKiBAdHlwZSB7P1dlYkdMVGV4dHVyZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nbFRleHR1cmUgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiB0aGlzIENhbWVyYSBoYXMgYmVlbiBzZXQgdG8gcmVuZGVyIHRvIGEgdGV4dHVyZSB0aGVuIHRoaXMgaG9sZHMgYSByZWZlcmVuY2VcclxuICAgICAgICAgKiB0byB0aGUgR0wgRnJhbWUgQnVmZmVyIGJlbG9uZ2luZyB0aGUgQ2FtZXJhIGlzIGRyYXdpbmcgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBFbmFibGUgdGV4dHVyZSByZW5kZXJpbmcgdXNpbmcgdGhlIG1ldGhvZCBgc2V0UmVuZGVyVG9UZXh0dXJlYC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoaXMgaXMgb25seSBzZXQgaWYgUGhhc2VyIGlzIHJ1bm5pbmcgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYSNmcmFtZWJ1ZmZlclxyXG4gICAgICAgICAqIEB0eXBlIHs/V2ViR0xGcmFtZWJ1ZmZlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mcmFtZWJ1ZmZlciA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHRoaXMgQ2FtZXJhIGhhcyBiZWVuIHNldCB0byByZW5kZXIgdG8gYSB0ZXh0dXJlIGFuZCB0byB1c2UgYSBjdXN0b20gcGlwZWxpbmUsXHJcbiAgICAgICAgICogdGhlbiB0aGlzIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBwaXBlbGluZSB0aGUgQ2FtZXJhIGlzIGRyYXdpbmcgd2l0aC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEVuYWJsZSB0ZXh0dXJlIHJlbmRlcmluZyB1c2luZyB0aGUgbWV0aG9kIGBzZXRSZW5kZXJUb1RleHR1cmVgLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhpcyBpcyBvbmx5IHNldCBpZiBQaGFzZXIgaXMgcnVubmluZyB3aXRoIHRoZSBXZWJHTCBSZW5kZXJlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI3BpcGVsaW5lXHJcbiAgICAgICAgICogQHR5cGUge2FueX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5waXBlbGluZSA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgQ2FtZXJhIHRvIHJlbmRlciB0byBhIHRleHR1cmUgaW5zdGVhZCBvZiB0byB0aGUgbWFpbiBjYW52YXMuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIENhbWVyYSB3aWxsIHJlZGlyZWN0IGFsbCBHYW1lIE9iamVjdHMgaXQncyBhc2tlZCB0byByZW5kZXIgdG8gdGhpcyB0ZXh0dXJlLlxyXG4gICAgICpcclxuICAgICAqIER1cmluZyB0aGUgcmVuZGVyIHNlcXVlbmNlLCB0aGUgdGV4dHVyZSBpdHNlbGYgd2lsbCB0aGVuIGJlIHJlbmRlcmVkIHRvIHRoZSBtYWluIGNhbnZhcy5cclxuICAgICAqXHJcbiAgICAgKiBEb2luZyB0aGlzIGdpdmVzIHlvdSB0aGUgYWJpbGl0eSB0byBtb2RpZnkgdGhlIHRleHR1cmUgYmVmb3JlIHRoaXMgaGFwcGVucyxcclxuICAgICAqIGFsbG93aW5nIGZvciBzcGVjaWFsIGVmZmVjdHMgc3VjaCBhcyBDYW1lcmEgc3BlY2lmaWMgc2hhZGVycywgb3IgcG9zdC1wcm9jZXNzaW5nXHJcbiAgICAgKiBvbiB0aGUgdGV4dHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBJZiBydW5uaW5nIHVuZGVyIENhbnZhcyB0aGUgQ2FtZXJhIHdpbGwgcmVuZGVyIHRvIGl0cyBgY2FudmFzYCBwcm9wZXJ0eS5cclxuICAgICAqXHJcbiAgICAgKiBJZiBydW5uaW5nIHVuZGVyIFdlYkdMIHRoZSBDYW1lcmEgd2lsbCBjcmVhdGUgYSBmcmFtZSBidWZmZXIsIHdoaWNoIGlzIHN0b3JlZCBpbiBpdHMgYGZyYW1lYnVmZmVyYCBhbmQgYGdsVGV4dHVyZWAgcHJvcGVydGllcy5cclxuICAgICAqXHJcbiAgICAgKiBJZiB5b3Ugc2V0IGEgY2FtZXJhIHRvIHJlbmRlciB0byBhIHRleHR1cmUgdGhlbiBpdCB3aWxsIGVtaXQgMiBldmVudHMgZHVyaW5nIHRoZSByZW5kZXIgbG9vcDpcclxuICAgICAqXHJcbiAgICAgKiBGaXJzdCwgaXQgd2lsbCBlbWl0IHRoZSBldmVudCBgcHJlcmVuZGVyYC4gVGhpcyBoYXBwZW5zIHJpZ2h0IGJlZm9yZSBhbnkgR2FtZSBPYmplY3QncyBhcmUgZHJhd24gdG8gdGhlIENhbWVyYSB0ZXh0dXJlLlxyXG4gICAgICpcclxuICAgICAqIFRoZW4sIGl0IHdpbGwgZW1pdCB0aGUgZXZlbnQgYHBvc3RyZW5kZXJgLiBUaGlzIGhhcHBlbnMgYWZ0ZXIgYWxsIEdhbWUgT2JqZWN0J3MgaGF2ZSBiZWVuIGRyYXduLCBidXQgcmlnaHQgYmVmb3JlIHRoZVxyXG4gICAgICogQ2FtZXJhIHRleHR1cmUgaXMgcmVuZGVyZWQgdG8gdGhlIG1haW4gZ2FtZSBjYW52YXMuIEl0J3MgdGhlIGZpbmFsIHBvaW50IGF0IHdoaWNoIHlvdSBjYW4gbWFuaXB1bGF0ZSB0aGUgdGV4dHVyZSBiZWZvcmVcclxuICAgICAqIGl0IGFwcGVhcnMgaW4tZ2FtZS5cclxuICAgICAqXHJcbiAgICAgKiBZb3Ugc2hvdWxkIG5vdCBlbmFibGUgdGhpcyB1bmxlc3MgeW91IHBsYW4gb24gYWN0dWFsbHkgdXNpbmcgdGhlIHRleHR1cmUgaXQgY3JlYXRlc1xyXG4gICAgICogc29tZWhvdywgb3RoZXJ3aXNlIHlvdSdyZSBqdXN0IGRvdWJsaW5nIHRoZSB3b3JrIHJlcXVpcmVkIHRvIHJlbmRlciB5b3VyIGdhbWUuXHJcbiAgICAgKlxyXG4gICAgICogVG8gdGVtcG9yYXJpbHkgZGlzYWJsZSByZW5kZXJpbmcgdG8gYSB0ZXh0dXJlLCB0b2dnbGUgdGhlIGByZW5kZXJUb1RleHR1cmVgIGJvb2xlYW4uXHJcbiAgICAgKlxyXG4gICAgICogSWYgeW91IG5vIGxvbmdlciByZXF1aXJlIHRoZSBDYW1lcmEgdG8gcmVuZGVyIHRvIGEgdGV4dHVyZSwgY2FsbCB0aGUgYGNsZWFyUmVuZGVyVG9UZXh0dXJlYCBtZXRob2QsXHJcbiAgICAgKiB3aGljaCB3aWxsIGRlbGV0ZSB0aGUgcmVzcGVjdGl2ZSB0ZXh0dXJlcyBhbmQgZnJlZS11cCByZXNvdXJjZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYSNzZXRSZW5kZXJUb1RleHR1cmVcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUGlwZWxpbmUpfSBbcGlwZWxpbmVdIC0gQW4gb3B0aW9uYWwgV2ViR0wgUGlwZWxpbmUgdG8gcmVuZGVyIHdpdGgsIGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgd2hpY2ggaXMgdGhlIG5hbWUgb2YgdGhlIHBpcGVsaW5lLCBvciBhIHBpcGVsaW5lIHJlZmVyZW5jZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFJlbmRlclRvVGV4dHVyZTogZnVuY3Rpb24gKHBpcGVsaW5lKVxyXG4gICAge1xyXG4gICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMuc2NlbmUuc3lzLmdhbWUucmVuZGVyZXI7XHJcblxyXG4gICAgICAgIGlmIChyZW5kZXJlci5nbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2xUZXh0dXJlID0gcmVuZGVyZXIuY3JlYXRlVGV4dHVyZUZyb21Tb3VyY2UobnVsbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDApO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lYnVmZmVyID0gcmVuZGVyZXIuY3JlYXRlRnJhbWVidWZmZXIodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIHRoaXMuZ2xUZXh0dXJlLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzID0gQ2FudmFzUG9vbC5jcmVhdGUyRCh0aGlzLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlbmRlclRvVGV4dHVyZSA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmIChwaXBlbGluZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UGlwZWxpbmUocGlwZWxpbmUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgV2ViR0wgcGlwZWxpbmUgdGhpcyBDYW1lcmEgaXMgdXNpbmcgd2hlbiByZW5kZXJpbmcgdG8gYSB0ZXh0dXJlLlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gcGFzcyBlaXRoZXIgdGhlIHN0cmluZy1iYXNlZCBuYW1lIG9mIHRoZSBwaXBlbGluZSwgb3IgYSByZWZlcmVuY2UgdG8gdGhlIHBpcGVsaW5lIGl0c2VsZi5cclxuICAgICAqXHJcbiAgICAgKiBDYWxsIHRoaXMgbWV0aG9kIHdpdGggbm8gYXJndW1lbnRzIHRvIGNsZWFyIGFueSBwcmV2aW91c2x5IHNldCBwaXBlbGluZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI3NldFBpcGVsaW5lXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFBpcGVsaW5lKX0gW3BpcGVsaW5lXSAtIFRoZSBXZWJHTCBQaXBlbGluZSB0byByZW5kZXIgd2l0aCwgY2FuIGJlIGVpdGhlciBhIHN0cmluZyB3aGljaCBpcyB0aGUgbmFtZSBvZiB0aGUgcGlwZWxpbmUsIG9yIGEgcGlwZWxpbmUgcmVmZXJlbmNlLiBPciBpZiBsZWZ0IGVtcHR5IGl0IHdpbGwgY2xlYXIgdGhlIHBpcGVsaW5lLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0UGlwZWxpbmU6IGZ1bmN0aW9uIChwaXBlbGluZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodHlwZW9mIHBpcGVsaW5lID09PSAnc3RyaW5nJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMuc2NlbmUuc3lzLmdhbWUucmVuZGVyZXI7XHJcblxyXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIuZ2wgJiYgcmVuZGVyZXIuaGFzUGlwZWxpbmUocGlwZWxpbmUpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBpcGVsaW5lID0gcmVuZGVyZXIuZ2V0UGlwZWxpbmUocGlwZWxpbmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGlwZWxpbmUgPSBwaXBlbGluZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHRoaXMgQ2FtZXJhIHdhcyBzZXQgdG8gcmVuZGVyIHRvIGEgdGV4dHVyZSwgdGhpcyB3aWxsIGNsZWFyIHRoZSByZXNvdXJjZXMgaXQgd2FzIHVzaW5nIGFuZFxyXG4gICAgICogcmVkaXJlY3QgaXQgdG8gcmVuZGVyIGJhY2sgdG8gdGhlIHByaW1hcnkgQ2FudmFzIGFnYWluLlxyXG4gICAgICpcclxuICAgICAqIElmIHlvdSBvbmx5IHdpc2ggdG8gdGVtcG9yYXJpbHkgZGlzYWJsZSByZW5kZXJpbmcgdG8gYSB0ZXh0dXJlIHRoZW4geW91IGNhbiB0b2dnbGUgdGhlXHJcbiAgICAgKiBwcm9wZXJ0eSBgcmVuZGVyVG9UZXh0dXJlYCBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjY2xlYXJSZW5kZXJUb1RleHR1cmVcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGNsZWFyUmVuZGVyVG9UZXh0dXJlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5zY2VuZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMuc2NlbmUuc3lzLmdhbWUucmVuZGVyZXI7XHJcblxyXG4gICAgICAgIGlmICghcmVuZGVyZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVuZGVyZXIuZ2wpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mcmFtZWJ1ZmZlcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyZXIuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdsVGV4dHVyZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyZXIuZGVsZXRlVGV4dHVyZSh0aGlzLmdsVGV4dHVyZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVidWZmZXIgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmdsVGV4dHVyZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMucGlwZWxpbmUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBDYW52YXNQb29sLnJlbW92ZSh0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyVG9UZXh0dXJlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIENhbWVyYSBkZWFkIHpvbmUuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGRlYWR6b25lIGlzIG9ubHkgdXNlZCB3aGVuIHRoZSBjYW1lcmEgaXMgZm9sbG93aW5nIGEgdGFyZ2V0LlxyXG4gICAgICpcclxuICAgICAqIEl0IGRlZmluZXMgYSByZWN0YW5ndWxhciByZWdpb24gd2l0aGluIHdoaWNoIGlmIHRoZSB0YXJnZXQgaXMgcHJlc2VudCwgdGhlIGNhbWVyYSB3aWxsIG5vdCBzY3JvbGwuXHJcbiAgICAgKiBJZiB0aGUgdGFyZ2V0IG1vdmVzIG91dHNpZGUgb2YgdGhpcyBhcmVhLCB0aGUgY2FtZXJhIHdpbGwgYmVnaW4gc2Nyb2xsaW5nIGluIG9yZGVyIHRvIGZvbGxvdyBpdC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgZGVhZHpvbmUgcmVjdGFuZ2xlIGlzIHJlLXBvc2l0aW9uZWQgZXZlcnkgZnJhbWUgc28gdGhhdCBpdCBpcyBjZW50ZXJlZCBvbiB0aGUgbWlkLXBvaW50XHJcbiAgICAgKiBvZiB0aGUgY2FtZXJhLiBUaGlzIGFsbG93cyB5b3UgdG8gdXNlIHRoZSBvYmplY3QgZm9yIGFkZGl0aW9uYWwgZ2FtZSByZWxhdGVkIGNoZWNrcywgc3VjaCBhc1xyXG4gICAgICogdGVzdGluZyBpZiBhbiBvYmplY3QgaXMgd2l0aGluIGl0IG9yIG5vdCB2aWEgYSBSZWN0YW5nbGUuY29udGFpbnMgY2FsbC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgYGxlcnBgIHZhbHVlcyB0aGF0IHlvdSBjYW4gc2V0IGZvciBhIGZvbGxvd2VyIHRhcmdldCBhbHNvIGFwcGx5IHdoZW4gdXNpbmcgYSBkZWFkem9uZS5cclxuICAgICAqXHJcbiAgICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIHdpdGggbm8gYXJndW1lbnRzIHdpbGwgcmVzZXQgYW4gYWN0aXZlIGRlYWR6b25lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjc2V0RGVhZHpvbmVcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3dpZHRoXSAtIFRoZSB3aWR0aCBvZiB0aGUgZGVhZHpvbmUgcmVjdGFuZ2xlIGluIHBpeGVscy4gSWYgbm90IHNwZWNpZmllZCB0aGUgZGVhZHpvbmUgaXMgcmVtb3ZlZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0XSAtIFRoZSBoZWlnaHQgb2YgdGhlIGRlYWR6b25lIHJlY3RhbmdsZSBpbiBwaXhlbHMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFRoaXMgQ2FtZXJhIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXREZWFkem9uZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmRlYWR6b25lID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGVhZHpvbmUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVhZHpvbmUud2lkdGggPSB3aWR0aDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVhZHpvbmUuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWFkem9uZSA9IG5ldyBSZWN0YW5nbGUoMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9mb2xsb3cpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBvcmlnaW5YID0gdGhpcy53aWR0aCAvIDI7XHJcbiAgICAgICAgICAgICAgICB2YXIgb3JpZ2luWSA9IHRoaXMuaGVpZ2h0IC8gMjtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgZnggPSB0aGlzLl9mb2xsb3cueCAtIHRoaXMuZm9sbG93T2Zmc2V0Lng7XHJcbiAgICAgICAgICAgICAgICB2YXIgZnkgPSB0aGlzLl9mb2xsb3cueSAtIHRoaXMuZm9sbG93T2Zmc2V0Lnk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5taWRQb2ludC5zZXQoZngsIGZ5KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFggPSBmeCAtIG9yaWdpblg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFkgPSBmeSAtIG9yaWdpblk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIENlbnRlck9uKHRoaXMuZGVhZHpvbmUsIHRoaXMubWlkUG9pbnQueCwgdGhpcy5taWRQb2ludC55KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZhZGVzIHRoZSBDYW1lcmEgaW4gZnJvbSB0aGUgZ2l2ZW4gY29sb3Igb3ZlciB0aGUgZHVyYXRpb24gc3BlY2lmaWVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjZmFkZUluXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjRkFERV9JTl9TVEFSVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI0ZBREVfSU5fQ09NUExFVEVcclxuICAgICAqIEBzaW5jZSAzLjMuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2R1cmF0aW9uPTEwMDBdIC0gVGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbcmVkPTBdIC0gVGhlIGFtb3VudCB0byBmYWRlIHRoZSByZWQgY2hhbm5lbCB0b3dhcmRzLiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZ3JlZW49MF0gLSBUaGUgYW1vdW50IHRvIGZhZGUgdGhlIGdyZWVuIGNoYW5uZWwgdG93YXJkcy4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2JsdWU9MF0gLSBUaGUgYW1vdW50IHRvIGZhZGUgdGhlIGJsdWUgY2hhbm5lbCB0b3dhcmRzLiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gW2NhbGxiYWNrXSAtIFRoaXMgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIGV2ZXJ5IGZyYW1lIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdC5cclxuICAgICAqIEl0IGlzIHNlbnQgdHdvIGFyZ3VtZW50czogQSByZWZlcmVuY2UgdG8gdGhlIGNhbWVyYSBhbmQgYSBwcm9ncmVzcyBhbW91bnQgYmV0d2VlbiAwIGFuZCAxIGluZGljYXRpbmcgaG93IGNvbXBsZXRlIHRoZSBlZmZlY3QgaXMuXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gW2NvbnRleHRdIC0gVGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIGNhbGxiYWNrIGlzIGludm9rZWQuIERlZmF1bHRzIHRvIHRoZSBTY2VuZSB0byB3aGljaCB0aGUgQ2FtZXJhIGJlbG9uZ3MuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFRoaXMgQ2FtZXJhIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBmYWRlSW46IGZ1bmN0aW9uIChkdXJhdGlvbiwgcmVkLCBncmVlbiwgYmx1ZSwgY2FsbGJhY2ssIGNvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmFkZUVmZmVjdC5zdGFydChmYWxzZSwgZHVyYXRpb24sIHJlZCwgZ3JlZW4sIGJsdWUsIHRydWUsIGNhbGxiYWNrLCBjb250ZXh0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGYWRlcyB0aGUgQ2FtZXJhIG91dCB0byB0aGUgZ2l2ZW4gY29sb3Igb3ZlciB0aGUgZHVyYXRpb24gc3BlY2lmaWVkLlxyXG4gICAgICogVGhpcyBpcyBhbiBhbGlhcyBmb3IgQ2FtZXJhLmZhZGUgdGhhdCBmb3JjZXMgdGhlIGZhZGUgdG8gc3RhcnQsIHJlZ2FyZGxlc3Mgb2YgZXhpc3RpbmcgZmFkZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYSNmYWRlT3V0XHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjRkFERV9PVVRfU1RBUlRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNGQURFX09VVF9DT01QTEVURVxyXG4gICAgICogQHNpbmNlIDMuMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZHVyYXRpb249MTAwMF0gLSBUaGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdCBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtyZWQ9MF0gLSBUaGUgYW1vdW50IHRvIGZhZGUgdGhlIHJlZCBjaGFubmVsIHRvd2FyZHMuIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtncmVlbj0wXSAtIFRoZSBhbW91bnQgdG8gZmFkZSB0aGUgZ3JlZW4gY2hhbm5lbCB0b3dhcmRzLiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbYmx1ZT0wXSAtIFRoZSBhbW91bnQgdG8gZmFkZSB0aGUgYmx1ZSBjaGFubmVsIHRvd2FyZHMuIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gVGhpcyBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgZXZlcnkgZnJhbWUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gICAgICogSXQgaXMgc2VudCB0d28gYXJndW1lbnRzOiBBIHJlZmVyZW5jZSB0byB0aGUgY2FtZXJhIGFuZCBhIHByb2dyZXNzIGFtb3VudCBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBob3cgY29tcGxldGUgdGhlIGVmZmVjdCBpcy5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbY29udGV4dF0gLSBUaGUgY29udGV4dCBpbiB3aGljaCB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZC4gRGVmYXVsdHMgdG8gdGhlIFNjZW5lIHRvIHdoaWNoIHRoZSBDYW1lcmEgYmVsb25ncy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGZhZGVPdXQ6IGZ1bmN0aW9uIChkdXJhdGlvbiwgcmVkLCBncmVlbiwgYmx1ZSwgY2FsbGJhY2ssIGNvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmFkZUVmZmVjdC5zdGFydCh0cnVlLCBkdXJhdGlvbiwgcmVkLCBncmVlbiwgYmx1ZSwgdHJ1ZSwgY2FsbGJhY2ssIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZhZGVzIHRoZSBDYW1lcmEgZnJvbSB0aGUgZ2l2ZW4gY29sb3IgdG8gdHJhbnNwYXJlbnQgb3ZlciB0aGUgZHVyYXRpb24gc3BlY2lmaWVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjZmFkZUZyb21cclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNGQURFX0lOX1NUQVJUXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjRkFERV9JTl9DT01QTEVURVxyXG4gICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZHVyYXRpb249MTAwMF0gLSBUaGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdCBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtyZWQ9MF0gLSBUaGUgYW1vdW50IHRvIGZhZGUgdGhlIHJlZCBjaGFubmVsIHRvd2FyZHMuIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtncmVlbj0wXSAtIFRoZSBhbW91bnQgdG8gZmFkZSB0aGUgZ3JlZW4gY2hhbm5lbCB0b3dhcmRzLiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbYmx1ZT0wXSAtIFRoZSBhbW91bnQgdG8gZmFkZSB0aGUgYmx1ZSBjaGFubmVsIHRvd2FyZHMuIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gLSBGb3JjZSB0aGUgZWZmZWN0IHRvIHN0YXJ0IGltbWVkaWF0ZWx5LCBldmVuIGlmIGFscmVhZHkgcnVubmluZy5cclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IFtjYWxsYmFja10gLSBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZCBldmVyeSBmcmFtZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QuXHJcbiAgICAgKiBJdCBpcyBzZW50IHR3byBhcmd1bWVudHM6IEEgcmVmZXJlbmNlIHRvIHRoZSBjYW1lcmEgYW5kIGEgcHJvZ3Jlc3MgYW1vdW50IGJldHdlZW4gMCBhbmQgMSBpbmRpY2F0aW5nIGhvdyBjb21wbGV0ZSB0aGUgZWZmZWN0IGlzLlxyXG4gICAgICogQHBhcmFtIHthbnl9IFtjb250ZXh0XSAtIFRoZSBjb250ZXh0IGluIHdoaWNoIHRoZSBjYWxsYmFjayBpcyBpbnZva2VkLiBEZWZhdWx0cyB0byB0aGUgU2NlbmUgdG8gd2hpY2ggdGhlIENhbWVyYSBiZWxvbmdzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgZmFkZUZyb206IGZ1bmN0aW9uIChkdXJhdGlvbiwgcmVkLCBncmVlbiwgYmx1ZSwgZm9yY2UsIGNhbGxiYWNrLCBjb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZhZGVFZmZlY3Quc3RhcnQoZmFsc2UsIGR1cmF0aW9uLCByZWQsIGdyZWVuLCBibHVlLCBmb3JjZSwgY2FsbGJhY2ssIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZhZGVzIHRoZSBDYW1lcmEgZnJvbSB0cmFuc3BhcmVudCB0byB0aGUgZ2l2ZW4gY29sb3Igb3ZlciB0aGUgZHVyYXRpb24gc3BlY2lmaWVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjZmFkZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI0ZBREVfT1VUX1NUQVJUXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjRkFERV9PVVRfQ09NUExFVEVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2R1cmF0aW9uPTEwMDBdIC0gVGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbcmVkPTBdIC0gVGhlIGFtb3VudCB0byBmYWRlIHRoZSByZWQgY2hhbm5lbCB0b3dhcmRzLiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZ3JlZW49MF0gLSBUaGUgYW1vdW50IHRvIGZhZGUgdGhlIGdyZWVuIGNoYW5uZWwgdG93YXJkcy4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2JsdWU9MF0gLSBUaGUgYW1vdW50IHRvIGZhZGUgdGhlIGJsdWUgY2hhbm5lbCB0b3dhcmRzLiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZm9yY2U9ZmFsc2VdIC0gRm9yY2UgdGhlIGVmZmVjdCB0byBzdGFydCBpbW1lZGlhdGVseSwgZXZlbiBpZiBhbHJlYWR5IHJ1bm5pbmcuXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gVGhpcyBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgZXZlcnkgZnJhbWUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gICAgICogSXQgaXMgc2VudCB0d28gYXJndW1lbnRzOiBBIHJlZmVyZW5jZSB0byB0aGUgY2FtZXJhIGFuZCBhIHByb2dyZXNzIGFtb3VudCBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBob3cgY29tcGxldGUgdGhlIGVmZmVjdCBpcy5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbY29udGV4dF0gLSBUaGUgY29udGV4dCBpbiB3aGljaCB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZC4gRGVmYXVsdHMgdG8gdGhlIFNjZW5lIHRvIHdoaWNoIHRoZSBDYW1lcmEgYmVsb25ncy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGZhZGU6IGZ1bmN0aW9uIChkdXJhdGlvbiwgcmVkLCBncmVlbiwgYmx1ZSwgZm9yY2UsIGNhbGxiYWNrLCBjb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZhZGVFZmZlY3Quc3RhcnQodHJ1ZSwgZHVyYXRpb24sIHJlZCwgZ3JlZW4sIGJsdWUsIGZvcmNlLCBjYWxsYmFjaywgY29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmxhc2hlcyB0aGUgQ2FtZXJhIGJ5IHNldHRpbmcgaXQgdG8gdGhlIGdpdmVuIGNvbG9yIGltbWVkaWF0ZWx5IGFuZCB0aGVuIGZhZGluZyBpdCBhd2F5IGFnYWluIHF1aWNrbHkgb3ZlciB0aGUgZHVyYXRpb24gc3BlY2lmaWVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjZmxhc2hcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNGTEFTSF9TVEFSVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI0ZMQVNIX0NPTVBMRVRFXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtkdXJhdGlvbj0yNTBdIC0gVGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbcmVkPTI1NV0gLSBUaGUgYW1vdW50IHRvIGZhZGUgdGhlIHJlZCBjaGFubmVsIHRvd2FyZHMuIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtncmVlbj0yNTVdIC0gVGhlIGFtb3VudCB0byBmYWRlIHRoZSBncmVlbiBjaGFubmVsIHRvd2FyZHMuIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtibHVlPTI1NV0gLSBUaGUgYW1vdW50IHRvIGZhZGUgdGhlIGJsdWUgY2hhbm5lbCB0b3dhcmRzLiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZm9yY2U9ZmFsc2VdIC0gRm9yY2UgdGhlIGVmZmVjdCB0byBzdGFydCBpbW1lZGlhdGVseSwgZXZlbiBpZiBhbHJlYWR5IHJ1bm5pbmcuXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gVGhpcyBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgZXZlcnkgZnJhbWUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gICAgICogSXQgaXMgc2VudCB0d28gYXJndW1lbnRzOiBBIHJlZmVyZW5jZSB0byB0aGUgY2FtZXJhIGFuZCBhIHByb2dyZXNzIGFtb3VudCBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBob3cgY29tcGxldGUgdGhlIGVmZmVjdCBpcy5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbY29udGV4dF0gLSBUaGUgY29udGV4dCBpbiB3aGljaCB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZC4gRGVmYXVsdHMgdG8gdGhlIFNjZW5lIHRvIHdoaWNoIHRoZSBDYW1lcmEgYmVsb25ncy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGZsYXNoOiBmdW5jdGlvbiAoZHVyYXRpb24sIHJlZCwgZ3JlZW4sIGJsdWUsIGZvcmNlLCBjYWxsYmFjaywgY29udGV4dClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mbGFzaEVmZmVjdC5zdGFydChkdXJhdGlvbiwgcmVkLCBncmVlbiwgYmx1ZSwgZm9yY2UsIGNhbGxiYWNrLCBjb250ZXh0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaGFrZXMgdGhlIENhbWVyYSBieSB0aGUgZ2l2ZW4gaW50ZW5zaXR5IG92ZXIgdGhlIGR1cmF0aW9uIHNwZWNpZmllZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI3NoYWtlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjU0hBS0VfU1RBUlRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNTSEFLRV9DT01QTEVURVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZHVyYXRpb249MTAwXSAtIFRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0IGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAqIEBwYXJhbSB7KG51bWJlcnxQaGFzZXIuTWF0aC5WZWN0b3IyKX0gW2ludGVuc2l0eT0wLjA1XSAtIFRoZSBpbnRlbnNpdHkgb2YgdGhlIHNoYWtlLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZm9yY2U9ZmFsc2VdIC0gRm9yY2UgdGhlIHNoYWtlIGVmZmVjdCB0byBzdGFydCBpbW1lZGlhdGVseSwgZXZlbiBpZiBhbHJlYWR5IHJ1bm5pbmcuXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gVGhpcyBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgZXZlcnkgZnJhbWUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gICAgICogSXQgaXMgc2VudCB0d28gYXJndW1lbnRzOiBBIHJlZmVyZW5jZSB0byB0aGUgY2FtZXJhIGFuZCBhIHByb2dyZXNzIGFtb3VudCBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBob3cgY29tcGxldGUgdGhlIGVmZmVjdCBpcy5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbY29udGV4dF0gLSBUaGUgY29udGV4dCBpbiB3aGljaCB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZC4gRGVmYXVsdHMgdG8gdGhlIFNjZW5lIHRvIHdoaWNoIHRoZSBDYW1lcmEgYmVsb25ncy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNoYWtlOiBmdW5jdGlvbiAoZHVyYXRpb24sIGludGVuc2l0eSwgZm9yY2UsIGNhbGxiYWNrLCBjb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNoYWtlRWZmZWN0LnN0YXJ0KGR1cmF0aW9uLCBpbnRlbnNpdHksIGZvcmNlLCBjYWxsYmFjaywgY29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBlZmZlY3Qgd2lsbCBzY3JvbGwgdGhlIENhbWVyYSBzbyB0aGF0IHRoZSBjZW50ZXIgb2YgaXRzIHZpZXdwb3J0IGZpbmlzaGVzIGF0IHRoZSBnaXZlbiBkZXN0aW5hdGlvbixcclxuICAgICAqIG92ZXIgdGhlIGR1cmF0aW9uIGFuZCB3aXRoIHRoZSBlYXNlIHNwZWNpZmllZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI3BhblxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI1BBTl9TVEFSVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI1BBTl9DT01QTEVURVxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGRlc3RpbmF0aW9uIHggY29vcmRpbmF0ZSB0byBzY3JvbGwgdGhlIGNlbnRlciBvZiB0aGUgQ2FtZXJhIHZpZXdwb3J0IHRvLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgZGVzdGluYXRpb24geSBjb29yZGluYXRlIHRvIHNjcm9sbCB0aGUgY2VudGVyIG9mIHRoZSBDYW1lcmEgdmlld3BvcnQgdG8uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtkdXJhdGlvbj0xMDAwXSAtIFRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0IGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xmdW5jdGlvbil9IFtlYXNlPSdMaW5lYXInXSAtIFRoZSBlYXNlIHRvIHVzZSBmb3IgdGhlIHBhbi4gQ2FuIGJlIGFueSBvZiB0aGUgUGhhc2VyIEVhc2luZyBjb25zdGFudHMgb3IgYSBjdXN0b20gZnVuY3Rpb24uXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gLSBGb3JjZSB0aGUgcGFuIGVmZmVjdCB0byBzdGFydCBpbW1lZGlhdGVseSwgZXZlbiBpZiBhbHJlYWR5IHJ1bm5pbmcuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhUGFuQ2FsbGJhY2t9IFtjYWxsYmFja10gLSBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZCBldmVyeSBmcmFtZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QuXHJcbiAgICAgKiBJdCBpcyBzZW50IGZvdXIgYXJndW1lbnRzOiBBIHJlZmVyZW5jZSB0byB0aGUgY2FtZXJhLCBhIHByb2dyZXNzIGFtb3VudCBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBob3cgY29tcGxldGUgdGhlIGVmZmVjdCBpcyxcclxuICAgICAqIHRoZSBjdXJyZW50IGNhbWVyYSBzY3JvbGwgeCBjb29yZGluYXRlIGFuZCB0aGUgY3VycmVudCBjYW1lcmEgc2Nyb2xsIHkgY29vcmRpbmF0ZS5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbY29udGV4dF0gLSBUaGUgY29udGV4dCBpbiB3aGljaCB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZC4gRGVmYXVsdHMgdG8gdGhlIFNjZW5lIHRvIHdoaWNoIHRoZSBDYW1lcmEgYmVsb25ncy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHBhbjogZnVuY3Rpb24gKHgsIHksIGR1cmF0aW9uLCBlYXNlLCBmb3JjZSwgY2FsbGJhY2ssIGNvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFuRWZmZWN0LnN0YXJ0KHgsIHksIGR1cmF0aW9uLCBlYXNlLCBmb3JjZSwgY2FsbGJhY2ssIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZWZmZWN0IHdpbGwgem9vbSB0aGUgQ2FtZXJhIHRvIHRoZSBnaXZlbiBzY2FsZSwgb3ZlciB0aGUgZHVyYXRpb24gYW5kIHdpdGggdGhlIGVhc2Ugc3BlY2lmaWVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjem9vbVRvXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjWk9PTV9TVEFSVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI1pPT01fQ09NUExFVEVcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gem9vbSAtIFRoZSB0YXJnZXQgQ2FtZXJhIHpvb20gdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtkdXJhdGlvbj0xMDAwXSAtIFRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0IGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xmdW5jdGlvbil9IFtlYXNlPSdMaW5lYXInXSAtIFRoZSBlYXNlIHRvIHVzZSBmb3IgdGhlIHBhbi4gQ2FuIGJlIGFueSBvZiB0aGUgUGhhc2VyIEVhc2luZyBjb25zdGFudHMgb3IgYSBjdXN0b20gZnVuY3Rpb24uXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gLSBGb3JjZSB0aGUgcGFuIGVmZmVjdCB0byBzdGFydCBpbW1lZGlhdGVseSwgZXZlbiBpZiBhbHJlYWR5IHJ1bm5pbmcuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhUGFuQ2FsbGJhY2t9IFtjYWxsYmFja10gLSBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZCBldmVyeSBmcmFtZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QuXHJcbiAgICAgKiBJdCBpcyBzZW50IGZvdXIgYXJndW1lbnRzOiBBIHJlZmVyZW5jZSB0byB0aGUgY2FtZXJhLCBhIHByb2dyZXNzIGFtb3VudCBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBob3cgY29tcGxldGUgdGhlIGVmZmVjdCBpcyxcclxuICAgICAqIHRoZSBjdXJyZW50IGNhbWVyYSBzY3JvbGwgeCBjb29yZGluYXRlIGFuZCB0aGUgY3VycmVudCBjYW1lcmEgc2Nyb2xsIHkgY29vcmRpbmF0ZS5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbY29udGV4dF0gLSBUaGUgY29udGV4dCBpbiB3aGljaCB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZC4gRGVmYXVsdHMgdG8gdGhlIFNjZW5lIHRvIHdoaWNoIHRoZSBDYW1lcmEgYmVsb25ncy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHpvb21UbzogZnVuY3Rpb24gKHpvb20sIGR1cmF0aW9uLCBlYXNlLCBmb3JjZSwgY2FsbGJhY2ssIGNvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuem9vbUVmZmVjdC5zdGFydCh6b29tLCBkdXJhdGlvbiwgZWFzZSwgZm9yY2UsIGNhbGxiYWNrLCBjb250ZXh0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBwcmVSZW5kZXIgc3RlcC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI3ByZVJlbmRlclxyXG4gICAgICogQHByb3RlY3RlZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJlc29sdXRpb24gLSBUaGUgZ2FtZSByZXNvbHV0aW9uLCBhcyBzZXQgaW4gdGhlIFNjYWxlIE1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIHByZVJlbmRlcjogZnVuY3Rpb24gKHJlc29sdXRpb24pXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHdpZHRoID0gdGhpcy53aWR0aDtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcblxyXG4gICAgICAgIHZhciBoYWxmV2lkdGggPSB3aWR0aCAqIDAuNTtcclxuICAgICAgICB2YXIgaGFsZkhlaWdodCA9IGhlaWdodCAqIDAuNTtcclxuXHJcbiAgICAgICAgdmFyIHpvb20gPSB0aGlzLnpvb20gKiByZXNvbHV0aW9uO1xyXG4gICAgICAgIHZhciBtYXRyaXggPSB0aGlzLm1hdHJpeDtcclxuXHJcbiAgICAgICAgdmFyIG9yaWdpblggPSB3aWR0aCAqIHRoaXMub3JpZ2luWDtcclxuICAgICAgICB2YXIgb3JpZ2luWSA9IGhlaWdodCAqIHRoaXMub3JpZ2luWTtcclxuXHJcbiAgICAgICAgdmFyIGZvbGxvdyA9IHRoaXMuX2ZvbGxvdztcclxuICAgICAgICB2YXIgZGVhZHpvbmUgPSB0aGlzLmRlYWR6b25lO1xyXG5cclxuICAgICAgICB2YXIgc3ggPSB0aGlzLnNjcm9sbFg7XHJcbiAgICAgICAgdmFyIHN5ID0gdGhpcy5zY3JvbGxZO1xyXG5cclxuICAgICAgICBpZiAoZGVhZHpvbmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBDZW50ZXJPbihkZWFkem9uZSwgdGhpcy5taWRQb2ludC54LCB0aGlzLm1pZFBvaW50LnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZvbGxvdyAmJiAhdGhpcy5wYW5FZmZlY3QuaXNSdW5uaW5nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGZ4ID0gKGZvbGxvdy54IC0gdGhpcy5mb2xsb3dPZmZzZXQueCk7XHJcbiAgICAgICAgICAgIHZhciBmeSA9IChmb2xsb3cueSAtIHRoaXMuZm9sbG93T2Zmc2V0LnkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGRlYWR6b25lKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnggPCBkZWFkem9uZS54KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHN4ID0gTGluZWFyKHN4LCBzeCAtIChkZWFkem9uZS54IC0gZngpLCB0aGlzLmxlcnAueCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmeCA+IGRlYWR6b25lLnJpZ2h0KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHN4ID0gTGluZWFyKHN4LCBzeCArIChmeCAtIGRlYWR6b25lLnJpZ2h0KSwgdGhpcy5sZXJwLngpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChmeSA8IGRlYWR6b25lLnkpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3kgPSBMaW5lYXIoc3ksIHN5IC0gKGRlYWR6b25lLnkgLSBmeSksIHRoaXMubGVycC55KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZ5ID4gZGVhZHpvbmUuYm90dG9tKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHN5ID0gTGluZWFyKHN5LCBzeSArIChmeSAtIGRlYWR6b25lLmJvdHRvbSksIHRoaXMubGVycC55KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN4ID0gTGluZWFyKHN4LCBmeCAtIG9yaWdpblgsIHRoaXMubGVycC54KTtcclxuICAgICAgICAgICAgICAgIHN5ID0gTGluZWFyKHN5LCBmeSAtIG9yaWdpblksIHRoaXMubGVycC55KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudXNlQm91bmRzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc3ggPSB0aGlzLmNsYW1wWChzeCk7XHJcbiAgICAgICAgICAgIHN5ID0gdGhpcy5jbGFtcFkoc3kpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucm91bmRQaXhlbHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvcmlnaW5YID0gTWF0aC5yb3VuZChvcmlnaW5YKTtcclxuICAgICAgICAgICAgb3JpZ2luWSA9IE1hdGgucm91bmQob3JpZ2luWSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgVmFsdWVzIGFyZSBpbiBwaXhlbHMgYW5kIG5vdCBpbXBhY3RlZCBieSB6b29taW5nIHRoZSBDYW1lcmFcclxuICAgICAgICB0aGlzLnNjcm9sbFggPSBzeDtcclxuICAgICAgICB0aGlzLnNjcm9sbFkgPSBzeTtcclxuXHJcbiAgICAgICAgdmFyIG1pZFggPSBzeCArIGhhbGZXaWR0aDtcclxuICAgICAgICB2YXIgbWlkWSA9IHN5ICsgaGFsZkhlaWdodDtcclxuXHJcbiAgICAgICAgLy8gIFRoZSBjZW50ZXIgb2YgdGhlIGNhbWVyYSwgaW4gd29ybGQgc3BhY2UsIHNvIHRha2luZyB6b29tIGludG8gYWNjb3VudFxyXG4gICAgICAgIC8vICBCYXNpY2FsbHkgdGhlIHBpeGVsIHZhbHVlIG9mIHdoYXQgaXQncyBsb29raW5nIGF0IGluIHRoZSBtaWRkbGUgb2YgdGhlIGNhbVxyXG4gICAgICAgIHRoaXMubWlkUG9pbnQuc2V0KG1pZFgsIG1pZFkpO1xyXG5cclxuICAgICAgICB2YXIgZGlzcGxheVdpZHRoID0gd2lkdGggLyB6b29tO1xyXG4gICAgICAgIHZhciBkaXNwbGF5SGVpZ2h0ID0gaGVpZ2h0IC8gem9vbTtcclxuXHJcbiAgICAgICAgdGhpcy53b3JsZFZpZXcuc2V0VG8oXHJcbiAgICAgICAgICAgIG1pZFggLSAoZGlzcGxheVdpZHRoIC8gMiksXHJcbiAgICAgICAgICAgIG1pZFkgLSAoZGlzcGxheUhlaWdodCAvIDIpLFxyXG4gICAgICAgICAgICBkaXNwbGF5V2lkdGgsXHJcbiAgICAgICAgICAgIGRpc3BsYXlIZWlnaHRcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBtYXRyaXguYXBwbHlJVFJTKHRoaXMueCArIG9yaWdpblgsIHRoaXMueSArIG9yaWdpblksIHRoaXMucm90YXRpb24sIHpvb20sIHpvb20pO1xyXG4gICAgICAgIG1hdHJpeC50cmFuc2xhdGUoLW9yaWdpblgsIC1vcmlnaW5ZKTtcclxuXHJcbiAgICAgICAgdGhpcy5zaGFrZUVmZmVjdC5wcmVSZW5kZXIoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBsaW5lYXIgaW50ZXJwb2xhdGlvbiB2YWx1ZSB0byB1c2Ugd2hlbiBmb2xsb3dpbmcgYSB0YXJnZXQuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGRlZmF1bHQgdmFsdWVzIG9mIDEgbWVhbnMgdGhlIGNhbWVyYSB3aWxsIGluc3RhbnRseSBzbmFwIHRvIHRoZSB0YXJnZXQgY29vcmRpbmF0ZXMuXHJcbiAgICAgKiBBIGxvd2VyIHZhbHVlLCBzdWNoIGFzIDAuMSBtZWFucyB0aGUgY2FtZXJhIHdpbGwgbW9yZSBzbG93bHkgdHJhY2sgdGhlIHRhcmdldCwgZ2l2aW5nXHJcbiAgICAgKiBhIHNtb290aCB0cmFuc2l0aW9uLiBZb3UgY2FuIHNldCB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgdmFsdWVzIGluZGVwZW5kZW50bHksIGFuZCBhbHNvXHJcbiAgICAgKiBhZGp1c3QgdGhpcyB2YWx1ZSBpbiByZWFsLXRpbWUgZHVyaW5nIHlvdXIgZ2FtZS5cclxuICAgICAqXHJcbiAgICAgKiBCZSBzdXJlIHRvIGtlZXAgdGhlIHZhbHVlIGJldHdlZW4gMCBhbmQgMS4gQSB2YWx1ZSBvZiB6ZXJvIHdpbGwgZGlzYWJsZSB0cmFja2luZyBvbiB0aGF0IGF4aXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYSNzZXRMZXJwXHJcbiAgICAgKiBAc2luY2UgMy45LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3g9MV0gLSBUaGUgYW1vdW50IGFkZGVkIHRvIHRoZSBob3Jpem9udGFsIGxpbmVhciBpbnRlcnBvbGF0aW9uIG9mIHRoZSBmb2xsb3cgdGFyZ2V0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PTFdIC0gVGhlIGFtb3VudCBhZGRlZCB0byB0aGUgdmVydGljYWwgbGluZWFyIGludGVycG9sYXRpb24gb2YgdGhlIGZvbGxvdyB0YXJnZXQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldExlcnA6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDE7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSB4OyB9XHJcblxyXG4gICAgICAgIHRoaXMubGVycC5zZXQoeCwgeSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIG9mZnNldCBvZiB0aGUgY2FtZXJhIGZyb20gaXRzIGZvbGxvdyB0YXJnZXQuXHJcbiAgICAgKiBUaGUgdmFsdWVzIGFyZSBzdWJ0cmFjdGVkIGZyb20gdGhlIHRhcmdldHMgcG9zaXRpb24gZHVyaW5nIHRoZSBDYW1lcmFzIHVwZGF0ZSBzdGVwLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjc2V0Rm9sbG93T2Zmc2V0XHJcbiAgICAgKiBAc2luY2UgMy45LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgaG9yaXpvbnRhbCBvZmZzZXQgZnJvbSB0aGUgY2FtZXJhIGZvbGxvdyB0YXJnZXQueCBwb3NpdGlvbi5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBvZmZzZXQgZnJvbSB0aGUgY2FtZXJhIGZvbGxvdyB0YXJnZXQueSBwb3NpdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0Rm9sbG93T2Zmc2V0OiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7IHggPSAwOyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0gMDsgfVxyXG5cclxuICAgICAgICB0aGlzLmZvbGxvd09mZnNldC5zZXQoeCwgeSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIENhbWVyYSB0byBmb2xsb3cgYSBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBXaGVuIGVuYWJsZWQgdGhlIENhbWVyYSB3aWxsIGF1dG9tYXRpY2FsbHkgYWRqdXN0IGl0cyBzY3JvbGwgcG9zaXRpb24gdG8ga2VlcCB0aGUgdGFyZ2V0IEdhbWUgT2JqZWN0XHJcbiAgICAgKiBpbiBpdHMgY2VudGVyLlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBsaW5lYXIgaW50ZXJwb2xhdGlvbiB2YWx1ZSB1c2VkIGluIHRoZSBmb2xsb3cgY29kZS5cclxuICAgICAqIFVzZSBsb3cgbGVycCB2YWx1ZXMgKHN1Y2ggYXMgMC4xKSB0byBhdXRvbWF0aWNhbGx5IHNtb290aCB0aGUgY2FtZXJhIG1vdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBJZiB5b3UgZmluZCB5b3UncmUgZ2V0dGluZyBhIHNsaWdodCBcImppdHRlclwiIGVmZmVjdCB3aGVuIGZvbGxvd2luZyBhbiBvYmplY3QgaXQncyBwcm9iYWJseSB0byBkbyB3aXRoIHN1Yi1waXhlbFxyXG4gICAgICogcmVuZGVyaW5nIG9mIHRoZSB0YXJnZXRzIHBvc2l0aW9uLiBUaGlzIGNhbiBiZSByb3VuZGVkIGJ5IHNldHRpbmcgdGhlIGByb3VuZFBpeGVsc2AgYXJndW1lbnQgdG8gYHRydWVgIHRvXHJcbiAgICAgKiBmb3JjZSBmdWxsIHBpeGVsIHJvdW5kaW5nIHJlbmRlcmluZy4gTm90ZSB0aGF0IHRoaXMgY2FuIHN0aWxsIGJlIGJyb2tlbiBpZiB5b3UgaGF2ZSBzcGVjaWZpZWQgYSBub24taW50ZWdlciB6b29tXHJcbiAgICAgKiB2YWx1ZSBvbiB0aGUgY2FtZXJhLiBTbyBiZSBzdXJlIHRvIGtlZXAgdGhlIGNhbWVyYSB6b29tIHRvIGludGVnZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmEjc3RhcnRGb2xsb3dcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fG9iamVjdCl9IHRhcmdldCAtIFRoZSB0YXJnZXQgZm9yIHRoZSBDYW1lcmEgdG8gZm9sbG93LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcm91bmRQaXhlbHM9ZmFsc2VdIC0gUm91bmQgdGhlIGNhbWVyYSBwb3NpdGlvbiB0byB3aG9sZSBpbnRlZ2VycyB0byBhdm9pZCBzdWItcGl4ZWwgcmVuZGVyaW5nP1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZXJwWD0xXSAtIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLiBUaGlzIHZhbHVlIHNwZWNpZmllcyB0aGUgYW1vdW50IG9mIGxpbmVhciBpbnRlcnBvbGF0aW9uIHRvIHVzZSB3aGVuIGhvcml6b250YWxseSB0cmFja2luZyB0aGUgdGFyZ2V0LiBUaGUgY2xvc2VyIHRoZSB2YWx1ZSB0byAxLCB0aGUgZmFzdGVyIHRoZSBjYW1lcmEgd2lsbCB0cmFjay5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVycFk9MV0gLSBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMS4gVGhpcyB2YWx1ZSBzcGVjaWZpZXMgdGhlIGFtb3VudCBvZiBsaW5lYXIgaW50ZXJwb2xhdGlvbiB0byB1c2Ugd2hlbiB2ZXJ0aWNhbGx5IHRyYWNraW5nIHRoZSB0YXJnZXQuIFRoZSBjbG9zZXIgdGhlIHZhbHVlIHRvIDEsIHRoZSBmYXN0ZXIgdGhlIGNhbWVyYSB3aWxsIHRyYWNrLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRYPTBdIC0gVGhlIGhvcml6b250YWwgb2Zmc2V0IGZyb20gdGhlIGNhbWVyYSBmb2xsb3cgdGFyZ2V0LnggcG9zaXRpb24uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFk9MF0gLSBUaGUgdmVydGljYWwgb2Zmc2V0IGZyb20gdGhlIGNhbWVyYSBmb2xsb3cgdGFyZ2V0LnkgcG9zaXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBDYW1lcmEgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0Rm9sbG93OiBmdW5jdGlvbiAodGFyZ2V0LCByb3VuZFBpeGVscywgbGVycFgsIGxlcnBZLCBvZmZzZXRYLCBvZmZzZXRZKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChyb3VuZFBpeGVscyA9PT0gdW5kZWZpbmVkKSB7IHJvdW5kUGl4ZWxzID0gZmFsc2U7IH1cclxuICAgICAgICBpZiAobGVycFggPT09IHVuZGVmaW5lZCkgeyBsZXJwWCA9IDE7IH1cclxuICAgICAgICBpZiAobGVycFkgPT09IHVuZGVmaW5lZCkgeyBsZXJwWSA9IGxlcnBYOyB9XHJcbiAgICAgICAgaWYgKG9mZnNldFggPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRYID0gMDsgfVxyXG4gICAgICAgIGlmIChvZmZzZXRZID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WSA9IG9mZnNldFg7IH1cclxuXHJcbiAgICAgICAgdGhpcy5fZm9sbG93ID0gdGFyZ2V0O1xyXG5cclxuICAgICAgICB0aGlzLnJvdW5kUGl4ZWxzID0gcm91bmRQaXhlbHM7XHJcblxyXG4gICAgICAgIGxlcnBYID0gQ2xhbXAobGVycFgsIDAsIDEpO1xyXG4gICAgICAgIGxlcnBZID0gQ2xhbXAobGVycFksIDAsIDEpO1xyXG5cclxuICAgICAgICB0aGlzLmxlcnAuc2V0KGxlcnBYLCBsZXJwWSk7XHJcblxyXG4gICAgICAgIHRoaXMuZm9sbG93T2Zmc2V0LnNldChvZmZzZXRYLCBvZmZzZXRZKTtcclxuXHJcbiAgICAgICAgdmFyIG9yaWdpblggPSB0aGlzLndpZHRoIC8gMjtcclxuICAgICAgICB2YXIgb3JpZ2luWSA9IHRoaXMuaGVpZ2h0IC8gMjtcclxuXHJcbiAgICAgICAgdmFyIGZ4ID0gdGFyZ2V0LnggLSBvZmZzZXRYO1xyXG4gICAgICAgIHZhciBmeSA9IHRhcmdldC55IC0gb2Zmc2V0WTtcclxuXHJcbiAgICAgICAgdGhpcy5taWRQb2ludC5zZXQoZngsIGZ5KTtcclxuXHJcbiAgICAgICAgdGhpcy5zY3JvbGxYID0gZnggLSBvcmlnaW5YO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsWSA9IGZ5IC0gb3JpZ2luWTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudXNlQm91bmRzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxYID0gdGhpcy5jbGFtcFgodGhpcy5zY3JvbGxYKTtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxZID0gdGhpcy5jbGFtcFkodGhpcy5zY3JvbGxZKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIGEgQ2FtZXJhIGZyb20gZm9sbG93aW5nIGEgR2FtZSBPYmplY3QsIGlmIHByZXZpb3VzbHkgc2V0IHZpYSBgQ2FtZXJhLnN0YXJ0Rm9sbG93YC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI3N0b3BGb2xsb3dcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc3RvcEZvbGxvdzogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9mb2xsb3cgPSBudWxsO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldHMgYW55IGFjdGl2ZSBGWCwgc3VjaCBhcyBhIGZhZGUsIGZsYXNoIG9yIHNoYWtlLiBVc2VmdWwgdG8gY2FsbCBhZnRlciBhIGZhZGUgaW4gb3JkZXIgdG9cclxuICAgICAqIHJlbW92ZSB0aGUgZmFkZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI3Jlc2V0RlhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBUaGlzIENhbWVyYSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgcmVzZXRGWDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnBhbkVmZmVjdC5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuc2hha2VFZmZlY3QucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmZsYXNoRWZmZWN0LnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5mYWRlRWZmZWN0LnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIG1ldGhvZCBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgQ2FtZXJhIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYSN1cGRhdGVcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGltZSAtIFRoZSBjdXJyZW50IHRpbWVzdGFtcCBhcyBnZW5lcmF0ZWQgYnkgdGhlIFJlcXVlc3QgQW5pbWF0aW9uIEZyYW1lIG9yIFNldFRpbWVvdXQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGEgLSBUaGUgZGVsdGEgdGltZSwgaW4gbXMsIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgZnJhbWUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKHRpbWUsIGRlbHRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLnZpc2libGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBhbkVmZmVjdC51cGRhdGUodGltZSwgZGVsdGEpO1xyXG4gICAgICAgICAgICB0aGlzLnpvb21FZmZlY3QudXBkYXRlKHRpbWUsIGRlbHRhKTtcclxuICAgICAgICAgICAgdGhpcy5zaGFrZUVmZmVjdC51cGRhdGUodGltZSwgZGVsdGEpO1xyXG4gICAgICAgICAgICB0aGlzLmZsYXNoRWZmZWN0LnVwZGF0ZSh0aW1lLCBkZWx0YSk7XHJcbiAgICAgICAgICAgIHRoaXMuZmFkZUVmZmVjdC51cGRhdGUodGltZSwgZGVsdGEpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGlzIENhbWVyYSBpbnN0YW5jZS4gWW91IHJhcmVseSBuZWVkIHRvIGNhbGwgdGhpcyBkaXJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBDYWxsZWQgYnkgdGhlIENhbWVyYSBNYW5hZ2VyLiBJZiB5b3Ugd2lzaCB0byBkZXN0cm95IGEgQ2FtZXJhIHBsZWFzZSB1c2UgYENhbWVyYU1hbmFnZXIucmVtb3ZlYCBhc1xyXG4gICAgICogY2FtZXJhcyBhcmUgc3RvcmVkIGluIGEgcG9vbCwgcmVhZHkgZm9yIHJlY3ljbGluZyBsYXRlciwgYW5kIGNhbGxpbmcgdGhpcyBkaXJlY3RseSB3aWxsIHByZXZlbnQgdGhhdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhI2Rlc3Ryb3lcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNERVNUUk9ZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNsZWFyUmVuZGVyVG9UZXh0dXJlKCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzZXRGWCgpO1xyXG5cclxuICAgICAgICBCYXNlQ2FtZXJhLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZvbGxvdyA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuZGVhZHpvbmUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENhbWVyYTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/Camera.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/CameraManager.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/CameraManager.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Camera = __webpack_require__(/*! ./Camera */ \"./node_modules/phaser/src/cameras/2d/Camera.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar PluginCache = __webpack_require__(/*! ../../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar RectangleContains = __webpack_require__(/*! ../../geom/rectangle/Contains */ \"./node_modules/phaser/src/geom/rectangle/Contains.js\");\r\nvar ScaleEvents = __webpack_require__(/*! ../../scale/events */ \"./node_modules/phaser/src/scale/events/index.js\");\r\nvar SceneEvents = __webpack_require__(/*! ../../scene/events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Camera Manager is a plugin that belongs to a Scene and is responsible for managing all of the Scene Cameras.\r\n * \r\n * By default you can access the Camera Manager from within a Scene using `this.cameras`, although this can be changed\r\n * in your game config.\r\n * \r\n * Create new Cameras using the `add` method. Or extend the Camera class with your own addition code and then add\r\n * the new Camera in using the `addExisting` method.\r\n * \r\n * Cameras provide a view into your game world, and can be positioned, rotated, zoomed and scrolled accordingly.\r\n *\r\n * A Camera consists of two elements: The viewport and the scroll values.\r\n *\r\n * The viewport is the physical position and size of the Camera within your game. Cameras, by default, are\r\n * created the same size as your game, but their position and size can be set to anything. This means if you\r\n * wanted to create a camera that was 320x200 in size, positioned in the bottom-right corner of your game,\r\n * you'd adjust the viewport to do that (using methods like `setViewport` and `setSize`).\r\n *\r\n * If you wish to change where the Camera is looking in your game, then you scroll it. You can do this\r\n * via the properties `scrollX` and `scrollY` or the method `setScroll`. Scrolling has no impact on the\r\n * viewport, and changing the viewport has no impact on the scrolling.\r\n *\r\n * By default a Camera will render all Game Objects it can see. You can change this using the `ignore` method,\r\n * allowing you to filter Game Objects out on a per-Camera basis. The Camera Manager can manage up to 31 unique \r\n * 'Game Object ignore capable' Cameras. Any Cameras beyond 31 that you create will all be given a Camera ID of\r\n * zero, meaning that they cannot be used for Game Object exclusion. This means if you need your Camera to ignore\r\n * Game Objects, make sure it's one of the first 31 created.\r\n *\r\n * A Camera also has built-in special effects including Fade, Flash, Camera Shake, Pan and Zoom.\r\n *\r\n * @class CameraManager\r\n * @memberof Phaser.Cameras.Scene2D\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene that owns the Camera Manager plugin.\r\n */\r\nvar CameraManager = new Class({\r\n\r\n initialize:\r\n\r\n function CameraManager (scene)\r\n {\r\n /**\r\n * The Scene that owns the Camera Manager plugin.\r\n *\r\n * @name Phaser.Cameras.Scene2D.CameraManager#scene\r\n * @type {Phaser.Scene}\r\n * @since 3.0.0\r\n */\r\n this.scene = scene;\r\n\r\n /**\r\n * A reference to the Scene.Systems handler for the Scene that owns the Camera Manager.\r\n *\r\n * @name Phaser.Cameras.Scene2D.CameraManager#systems\r\n * @type {Phaser.Scenes.Systems}\r\n * @since 3.0.0\r\n */\r\n this.systems = scene.sys;\r\n\r\n /**\r\n * All Cameras created by, or added to, this Camera Manager, will have their `roundPixels`\r\n * property set to match this value. By default it is set to match the value set in the\r\n * game configuration, but can be changed at any point. Equally, individual cameras can\r\n * also be changed as needed.\r\n *\r\n * @name Phaser.Cameras.Scene2D.CameraManager#roundPixels\r\n * @type {boolean}\r\n * @since 3.11.0\r\n */\r\n this.roundPixels = scene.sys.game.config.roundPixels;\r\n\r\n /**\r\n * An Array of the Camera objects being managed by this Camera Manager.\r\n * The Cameras are updated and rendered in the same order in which they appear in this array.\r\n * Do not directly add or remove entries to this array. However, you can move the contents\r\n * around the array should you wish to adjust the display order.\r\n *\r\n * @name Phaser.Cameras.Scene2D.CameraManager#cameras\r\n * @type {Phaser.Cameras.Scene2D.Camera[]}\r\n * @since 3.0.0\r\n */\r\n this.cameras = [];\r\n\r\n /**\r\n * A handy reference to the 'main' camera. By default this is the first Camera the\r\n * Camera Manager creates. You can also set it directly, or use the `makeMain` argument\r\n * in the `add` and `addExisting` methods. It allows you to access it from your game:\r\n * \r\n * ```javascript\r\n * var cam = this.cameras.main;\r\n * ```\r\n * \r\n * Also see the properties `camera1`, `camera2` and so on.\r\n *\r\n * @name Phaser.Cameras.Scene2D.CameraManager#main\r\n * @type {Phaser.Cameras.Scene2D.Camera}\r\n * @since 3.0.0\r\n */\r\n this.main;\r\n\r\n /**\r\n * A default un-transformed Camera that doesn't exist on the camera list and doesn't\r\n * count towards the total number of cameras being managed. It exists for other\r\n * systems, as well as your own code, should they require a basic un-transformed\r\n * camera instance from which to calculate a view matrix.\r\n *\r\n * @name Phaser.Cameras.Scene2D.CameraManager#default\r\n * @type {Phaser.Cameras.Scene2D.Camera}\r\n * @since 3.17.0\r\n */\r\n this.default;\r\n\r\n scene.sys.events.once(SceneEvents.BOOT, this.boot, this);\r\n scene.sys.events.on(SceneEvents.START, this.start, this);\r\n },\r\n\r\n /**\r\n * This method is called automatically, only once, when the Scene is first created.\r\n * Do not invoke it directly.\r\n *\r\n * @method Phaser.Cameras.Scene2D.CameraManager#boot\r\n * @private\r\n * @listens Phaser.Scenes.Events#DESTROY\r\n * @since 3.5.1\r\n */\r\n boot: function ()\r\n {\r\n var sys = this.systems;\r\n\r\n if (sys.settings.cameras)\r\n {\r\n // We have cameras to create\r\n this.fromJSON(sys.settings.cameras);\r\n }\r\n else\r\n {\r\n // Make one\r\n this.add();\r\n }\r\n\r\n this.main = this.cameras[0];\r\n\r\n // Create a default camera\r\n this.default = new Camera(0, 0, sys.scale.width, sys.scale.height).setScene(this.scene);\r\n\r\n sys.game.scale.on(ScaleEvents.RESIZE, this.onResize, this);\r\n\r\n this.systems.events.once(SceneEvents.DESTROY, this.destroy, this);\r\n },\r\n\r\n /**\r\n * This method is called automatically by the Scene when it is starting up.\r\n * It is responsible for creating local systems, properties and listening for Scene events.\r\n * Do not invoke it directly.\r\n *\r\n * @method Phaser.Cameras.Scene2D.CameraManager#start\r\n * @private\r\n * @listens Phaser.Scenes.Events#UPDATE\r\n * @listens Phaser.Scenes.Events#SHUTDOWN\r\n * @since 3.5.0\r\n */\r\n start: function ()\r\n {\r\n if (!this.main)\r\n {\r\n var sys = this.systems;\r\n\r\n if (sys.settings.cameras)\r\n {\r\n // We have cameras to create\r\n this.fromJSON(sys.settings.cameras);\r\n }\r\n else\r\n {\r\n // Make one\r\n this.add();\r\n }\r\n \r\n this.main = this.cameras[0];\r\n }\r\n\r\n var eventEmitter = this.systems.events;\r\n\r\n eventEmitter.on(SceneEvents.UPDATE, this.update, this);\r\n eventEmitter.once(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n },\r\n\r\n /**\r\n * Adds a new Camera into the Camera Manager. The Camera Manager can support up to 31 different Cameras.\r\n * \r\n * Each Camera has its own viewport, which controls the size of the Camera and its position within the canvas.\r\n * \r\n * Use the `Camera.scrollX` and `Camera.scrollY` properties to change where the Camera is looking, or the\r\n * Camera methods such as `centerOn`. Cameras also have built in special effects, such as fade, flash, shake,\r\n * pan and zoom.\r\n * \r\n * By default Cameras are transparent and will render anything that they can see based on their `scrollX`\r\n * and `scrollY` values. Game Objects can be set to be ignored by a Camera by using the `Camera.ignore` method.\r\n * \r\n * The Camera will have its `roundPixels` property set to whatever `CameraManager.roundPixels` is. You can change\r\n * it after creation if required.\r\n * \r\n * See the Camera class documentation for more details.\r\n *\r\n * @method Phaser.Cameras.Scene2D.CameraManager#add\r\n * @since 3.0.0\r\n *\r\n * @param {integer} [x=0] - The horizontal position of the Camera viewport.\r\n * @param {integer} [y=0] - The vertical position of the Camera viewport.\r\n * @param {integer} [width] - The width of the Camera viewport. If not given it'll be the game config size.\r\n * @param {integer} [height] - The height of the Camera viewport. If not given it'll be the game config size.\r\n * @param {boolean} [makeMain=false] - Set this Camera as being the 'main' camera. This just makes the property `main` a reference to it.\r\n * @param {string} [name=''] - The name of the Camera.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.Camera} The newly created Camera.\r\n */\r\n add: function (x, y, width, height, makeMain, name)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n if (width === undefined) { width = this.scene.sys.scale.width; }\r\n if (height === undefined) { height = this.scene.sys.scale.height; }\r\n if (makeMain === undefined) { makeMain = false; }\r\n if (name === undefined) { name = ''; }\r\n\r\n var camera = new Camera(x, y, width, height);\r\n\r\n camera.setName(name);\r\n camera.setScene(this.scene);\r\n camera.setRoundPixels(this.roundPixels);\r\n\r\n camera.id = this.getNextID();\r\n\r\n this.cameras.push(camera);\r\n\r\n if (makeMain)\r\n {\r\n this.main = camera;\r\n }\r\n\r\n return camera;\r\n },\r\n\r\n /**\r\n * Adds an existing Camera into the Camera Manager.\r\n * \r\n * The Camera should either be a `Phaser.Cameras.Scene2D.Camera` instance, or a class that extends from it.\r\n * \r\n * The Camera will have its `roundPixels` property set to whatever `CameraManager.roundPixels` is. You can change\r\n * it after addition if required.\r\n * \r\n * The Camera will be assigned an ID, which is used for Game Object exclusion and then added to the\r\n * manager. As long as it doesn't already exist in the manager it will be added then returned.\r\n * \r\n * If this method returns `null` then the Camera already exists in this Camera Manager.\r\n *\r\n * @method Phaser.Cameras.Scene2D.CameraManager#addExisting\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera to be added to the Camera Manager.\r\n * @param {boolean} [makeMain=false] - Set this Camera as being the 'main' camera. This just makes the property `main` a reference to it.\r\n *\r\n * @return {?Phaser.Cameras.Scene2D.Camera} The Camera that was added to the Camera Manager, or `null` if it couldn't be added.\r\n */\r\n addExisting: function (camera, makeMain)\r\n {\r\n if (makeMain === undefined) { makeMain = false; }\r\n\r\n var index = this.cameras.indexOf(camera);\r\n\r\n if (index === -1)\r\n {\r\n camera.id = this.getNextID();\r\n\r\n camera.setRoundPixels(this.roundPixels);\r\n\r\n this.cameras.push(camera);\r\n\r\n if (makeMain)\r\n {\r\n this.main = camera;\r\n }\r\n \r\n return camera;\r\n }\r\n\r\n return null;\r\n },\r\n\r\n /**\r\n * Gets the next available Camera ID number.\r\n * \r\n * The Camera Manager supports up to 31 unique cameras, after which the ID returned will always be zero.\r\n * You can create additional cameras beyond 31, but they cannot be used for Game Object exclusion.\r\n *\r\n * @method Phaser.Cameras.Scene2D.CameraManager#getNextID\r\n * @private\r\n * @since 3.11.0\r\n *\r\n * @return {number} The next available Camera ID, or 0 if they're all already in use.\r\n */\r\n getNextID: function ()\r\n {\r\n var cameras = this.cameras;\r\n\r\n var testID = 1;\r\n\r\n // Find the first free camera ID we can use\r\n\r\n for (var t = 0; t < 32; t++)\r\n {\r\n var found = false;\r\n\r\n for (var i = 0; i < cameras.length; i++)\r\n {\r\n var camera = cameras[i];\r\n\r\n if (camera && camera.id === testID)\r\n {\r\n found = true;\r\n continue;\r\n }\r\n }\r\n\r\n if (found)\r\n {\r\n testID = testID << 1;\r\n }\r\n else\r\n {\r\n return testID;\r\n }\r\n }\r\n\r\n return 0;\r\n },\r\n\r\n /**\r\n * Gets the total number of Cameras in this Camera Manager.\r\n * \r\n * If the optional `isVisible` argument is set it will only count Cameras that are currently visible.\r\n *\r\n * @method Phaser.Cameras.Scene2D.CameraManager#getTotal\r\n * @since 3.11.0\r\n * \r\n * @param {boolean} [isVisible=false] - Set the `true` to only include visible Cameras in the total.\r\n *\r\n * @return {integer} The total number of Cameras in this Camera Manager.\r\n */\r\n getTotal: function (isVisible)\r\n {\r\n if (isVisible === undefined) { isVisible = false; }\r\n\r\n var total = 0;\r\n\r\n var cameras = this.cameras;\r\n\r\n for (var i = 0; i < cameras.length; i++)\r\n {\r\n var camera = cameras[i];\r\n\r\n if (!isVisible || (isVisible && camera.visible))\r\n {\r\n total++;\r\n }\r\n }\r\n\r\n return total;\r\n },\r\n\r\n /**\r\n * Populates this Camera Manager based on the given configuration object, or an array of config objects.\r\n * \r\n * See the `Phaser.Types.Cameras.Scene2D.CameraConfig` documentation for details of the object structure.\r\n *\r\n * @method Phaser.Cameras.Scene2D.CameraManager#fromJSON\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Types.Cameras.Scene2D.CameraConfig|Phaser.Types.Cameras.Scene2D.CameraConfig[])} config - A Camera configuration object, or an array of them, to be added to this Camera Manager.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.CameraManager} This Camera Manager instance.\r\n */\r\n fromJSON: function (config)\r\n {\r\n if (!Array.isArray(config))\r\n {\r\n config = [ config ];\r\n }\r\n\r\n var gameWidth = this.scene.sys.scale.width;\r\n var gameHeight = this.scene.sys.scale.height;\r\n\r\n for (var i = 0; i < config.length; i++)\r\n {\r\n var cameraConfig = config[i];\r\n\r\n var x = GetFastValue(cameraConfig, 'x', 0);\r\n var y = GetFastValue(cameraConfig, 'y', 0);\r\n var width = GetFastValue(cameraConfig, 'width', gameWidth);\r\n var height = GetFastValue(cameraConfig, 'height', gameHeight);\r\n\r\n var camera = this.add(x, y, width, height);\r\n\r\n // Direct properties\r\n camera.name = GetFastValue(cameraConfig, 'name', '');\r\n camera.zoom = GetFastValue(cameraConfig, 'zoom', 1);\r\n camera.rotation = GetFastValue(cameraConfig, 'rotation', 0);\r\n camera.scrollX = GetFastValue(cameraConfig, 'scrollX', 0);\r\n camera.scrollY = GetFastValue(cameraConfig, 'scrollY', 0);\r\n camera.roundPixels = GetFastValue(cameraConfig, 'roundPixels', false);\r\n camera.visible = GetFastValue(cameraConfig, 'visible', true);\r\n\r\n // Background Color\r\n\r\n var backgroundColor = GetFastValue(cameraConfig, 'backgroundColor', false);\r\n\r\n if (backgroundColor)\r\n {\r\n camera.setBackgroundColor(backgroundColor);\r\n }\r\n\r\n // Bounds\r\n\r\n var boundsConfig = GetFastValue(cameraConfig, 'bounds', null);\r\n\r\n if (boundsConfig)\r\n {\r\n var bx = GetFastValue(boundsConfig, 'x', 0);\r\n var by = GetFastValue(boundsConfig, 'y', 0);\r\n var bwidth = GetFastValue(boundsConfig, 'width', gameWidth);\r\n var bheight = GetFastValue(boundsConfig, 'height', gameHeight);\r\n\r\n camera.setBounds(bx, by, bwidth, bheight);\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Gets a Camera based on its name.\r\n * \r\n * Camera names are optional and don't have to be set, so this method is only of any use if you\r\n * have given your Cameras unique names.\r\n *\r\n * @method Phaser.Cameras.Scene2D.CameraManager#getCamera\r\n * @since 3.0.0\r\n *\r\n * @param {string} name - The name of the Camera.\r\n *\r\n * @return {?Phaser.Cameras.Scene2D.Camera} The first Camera with a name matching the given string, otherwise `null`.\r\n */\r\n getCamera: function (name)\r\n {\r\n var cameras = this.cameras;\r\n\r\n for (var i = 0; i < cameras.length; i++)\r\n {\r\n if (cameras[i].name === name)\r\n {\r\n return cameras[i];\r\n }\r\n }\r\n\r\n return null;\r\n },\r\n\r\n /**\r\n * Returns an array of all cameras below the given Pointer.\r\n * \r\n * The first camera in the array is the top-most camera in the camera list.\r\n *\r\n * @method Phaser.Cameras.Scene2D.CameraManager#getCamerasBelowPointer\r\n * @since 3.10.0\r\n *\r\n * @param {Phaser.Input.Pointer} pointer - The Pointer to check against.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.Camera[]} An array of cameras below the Pointer.\r\n */\r\n getCamerasBelowPointer: function (pointer)\r\n {\r\n var cameras = this.cameras;\r\n\r\n var x = pointer.x;\r\n var y = pointer.y;\r\n\r\n var output = [];\r\n\r\n for (var i = 0; i < cameras.length; i++)\r\n {\r\n var camera = cameras[i];\r\n\r\n if (camera.visible && camera.inputEnabled && RectangleContains(camera, x, y))\r\n {\r\n // So the top-most camera is at the top of the search array\r\n output.unshift(camera);\r\n }\r\n }\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Removes the given Camera, or an array of Cameras, from this Camera Manager.\r\n * \r\n * If found in the Camera Manager it will be immediately removed from the local cameras array.\r\n * If also currently the 'main' camera, 'main' will be reset to be camera 0.\r\n * \r\n * The removed Cameras are automatically destroyed if the `runDestroy` argument is `true`, which is the default.\r\n * If you wish to re-use the cameras then set this to `false`, but know that they will retain their references\r\n * and internal data until destroyed or re-added to a Camera Manager.\r\n *\r\n * @method Phaser.Cameras.Scene2D.CameraManager#remove\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Cameras.Scene2D.Camera|Phaser.Cameras.Scene2D.Camera[])} camera - The Camera, or an array of Cameras, to be removed from this Camera Manager.\r\n * @param {boolean} [runDestroy=true] - Automatically call `Camera.destroy` on each Camera removed from this Camera Manager.\r\n * \r\n * @return {integer} The total number of Cameras removed.\r\n */\r\n remove: function (camera, runDestroy)\r\n {\r\n if (runDestroy === undefined) { runDestroy = true; }\r\n\r\n if (!Array.isArray(camera))\r\n {\r\n camera = [ camera ];\r\n }\r\n\r\n var total = 0;\r\n var cameras = this.cameras;\r\n\r\n for (var i = 0; i < camera.length; i++)\r\n {\r\n var index = cameras.indexOf(camera[i]);\r\n\r\n if (index !== -1)\r\n {\r\n if (runDestroy)\r\n {\r\n cameras[index].destroy();\r\n }\r\n\r\n cameras.splice(index, 1);\r\n\r\n total++;\r\n }\r\n }\r\n\r\n if (!this.main && cameras[0])\r\n {\r\n this.main = cameras[0];\r\n }\r\n\r\n return total;\r\n },\r\n\r\n /**\r\n * The internal render method. This is called automatically by the Scene and should not be invoked directly.\r\n * \r\n * It will iterate through all local cameras and render them in turn, as long as they're visible and have\r\n * an alpha level > 0.\r\n *\r\n * @method Phaser.Cameras.Scene2D.CameraManager#render\r\n * @protected\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)} renderer - The Renderer that will render the children to this camera.\r\n * @param {Phaser.GameObjects.GameObject[]} children - An array of renderable Game Objects.\r\n * @param {number} interpolation - Interpolation value. Reserved for future use.\r\n */\r\n render: function (renderer, children, interpolation)\r\n {\r\n var scene = this.scene;\r\n var cameras = this.cameras;\r\n\r\n for (var i = 0; i < this.cameras.length; i++)\r\n {\r\n var camera = cameras[i];\r\n\r\n if (camera.visible && camera.alpha > 0)\r\n {\r\n // Hard-coded to 1 for now\r\n camera.preRender(1);\r\n\r\n renderer.render(scene, children, interpolation, camera);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Resets this Camera Manager.\r\n * \r\n * This will iterate through all current Cameras, destroying them all, then it will reset the\r\n * cameras array, reset the ID counter and create 1 new single camera using the default values.\r\n *\r\n * @method Phaser.Cameras.Scene2D.CameraManager#resetAll\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Cameras.Scene2D.Camera} The freshly created main Camera.\r\n */\r\n resetAll: function ()\r\n {\r\n for (var i = 0; i < this.cameras.length; i++)\r\n {\r\n this.cameras[i].destroy();\r\n }\r\n\r\n this.cameras = [];\r\n\r\n this.main = this.add();\r\n\r\n return this.main;\r\n },\r\n\r\n /**\r\n * The main update loop. Called automatically when the Scene steps.\r\n *\r\n * @method Phaser.Cameras.Scene2D.CameraManager#update\r\n * @protected\r\n * @since 3.0.0\r\n *\r\n * @param {integer} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n */\r\n update: function (time, delta)\r\n {\r\n for (var i = 0; i < this.cameras.length; i++)\r\n {\r\n this.cameras[i].update(time, delta);\r\n }\r\n },\r\n\r\n /**\r\n * The event handler that manages the `resize` event dispatched by the Scale Manager.\r\n *\r\n * @method Phaser.Cameras.Scene2D.CameraManager#onResize\r\n * @since 3.18.0\r\n *\r\n * @param {Phaser.Structs.Size} gameSize - The default Game Size object. This is the un-modified game dimensions.\r\n * @param {Phaser.Structs.Size} baseSize - The base Size object. The game dimensions multiplied by the resolution. The canvas width / height values match this.\r\n */\r\n onResize: function (gameSize, baseSize, displaySize, resolution, previousWidth, previousHeight)\r\n {\r\n for (var i = 0; i < this.cameras.length; i++)\r\n {\r\n var cam = this.cameras[i];\r\n\r\n // if camera is at 0x0 and was the size of the previous game size, then we can safely assume it\r\n // should be updated to match the new game size too\r\n\r\n if (cam._x === 0 && cam._y === 0 && cam._width === previousWidth && cam._height === previousHeight)\r\n {\r\n cam.setSize(baseSize.width, baseSize.height);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Resizes all cameras to the given dimensions.\r\n *\r\n * @method Phaser.Cameras.Scene2D.CameraManager#resize\r\n * @since 3.2.0\r\n *\r\n * @param {number} width - The new width of the camera.\r\n * @param {number} height - The new height of the camera.\r\n */\r\n resize: function (width, height)\r\n {\r\n for (var i = 0; i < this.cameras.length; i++)\r\n {\r\n this.cameras[i].setSize(width, height);\r\n }\r\n },\r\n\r\n /**\r\n * The Scene that owns this plugin is shutting down.\r\n * We need to kill and reset all internal properties as well as stop listening to Scene events.\r\n *\r\n * @method Phaser.Cameras.Scene2D.CameraManager#shutdown\r\n * @private\r\n * @since 3.0.0\r\n */\r\n shutdown: function ()\r\n {\r\n this.main = undefined;\r\n\r\n for (var i = 0; i < this.cameras.length; i++)\r\n {\r\n this.cameras[i].destroy();\r\n }\r\n\r\n this.cameras = [];\r\n\r\n var eventEmitter = this.systems.events;\r\n\r\n eventEmitter.off(SceneEvents.UPDATE, this.update, this);\r\n eventEmitter.off(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n },\r\n\r\n /**\r\n * The Scene that owns this plugin is being destroyed.\r\n * We need to shutdown and then kill off all external references.\r\n *\r\n * @method Phaser.Cameras.Scene2D.CameraManager#destroy\r\n * @private\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.shutdown();\r\n\r\n this.default.destroy();\r\n\r\n this.scene.sys.events.off(SceneEvents.START, this.start, this);\r\n\r\n this.scene = null;\r\n this.systems = null;\r\n }\r\n\r\n});\r\n\r\nPluginCache.register('CameraManager', CameraManager, 'cameras');\r\n\r\nmodule.exports = CameraManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL0NhbWVyYU1hbmFnZXIuanM/MDI2MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsYUFBYSxtQkFBTyxDQUFDLGdFQUFVO0FBQy9CLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsbUJBQW1CLG1CQUFPLENBQUMsK0ZBQWlDO0FBQzVELGtCQUFrQixtQkFBTyxDQUFDLG1GQUEyQjtBQUNyRCx3QkFBd0IsbUJBQU8sQ0FBQywyRkFBK0I7QUFDL0Qsa0JBQWtCLG1CQUFPLENBQUMsMkVBQW9CO0FBQzlDLGtCQUFrQixtQkFBTyxDQUFDLDJFQUFvQjs7QUFFOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPO0FBQ3JDLGtDQUFrQyxvQ0FBb0M7QUFDdEUsbUNBQW1DLHNDQUFzQztBQUN6RSxxQ0FBcUMsa0JBQWtCO0FBQ3ZELGlDQUFpQyxXQUFXOztBQUU1Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsa0JBQWtCOztBQUV2RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSx1QkFBdUIsUUFBUTtBQUMvQjtBQUNBOztBQUVBLDJCQUEyQixvQkFBb0I7QUFDL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLG1CQUFtQjs7QUFFekQ7O0FBRUE7O0FBRUEsdUJBQXVCLG9CQUFvQjtBQUMzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHdGQUF3RjtBQUN2RztBQUNBLGdCQUFnQixxQ0FBcUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx1QkFBdUIsbUJBQW1CO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixvQkFBb0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQkFBcUI7QUFDcEM7QUFDQSxnQkFBZ0IsZ0NBQWdDO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsdUJBQXVCLG9CQUFvQjtBQUMzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdFQUFnRTtBQUMvRSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsbUJBQW1COztBQUUxRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNEVBQTRFO0FBQzNGLGVBQWUsZ0NBQWdDO0FBQy9DLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1Qix5QkFBeUI7QUFDaEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHlCQUF5QjtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIseUJBQXlCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHlCQUF5QjtBQUNoRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIseUJBQXlCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIseUJBQXlCO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FtZXJhcy8yZC9DYW1lcmFNYW5hZ2VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2FtZXJhID0gcmVxdWlyZSgnLi9DYW1lcmEnKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIFBsdWdpbkNhY2hlID0gcmVxdWlyZSgnLi4vLi4vcGx1Z2lucy9QbHVnaW5DYWNoZScpO1xyXG52YXIgUmVjdGFuZ2xlQ29udGFpbnMgPSByZXF1aXJlKCcuLi8uLi9nZW9tL3JlY3RhbmdsZS9Db250YWlucycpO1xyXG52YXIgU2NhbGVFdmVudHMgPSByZXF1aXJlKCcuLi8uLi9zY2FsZS9ldmVudHMnKTtcclxudmFyIFNjZW5lRXZlbnRzID0gcmVxdWlyZSgnLi4vLi4vc2NlbmUvZXZlbnRzJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgQ2FtZXJhIE1hbmFnZXIgaXMgYSBwbHVnaW4gdGhhdCBiZWxvbmdzIHRvIGEgU2NlbmUgYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyBhbGwgb2YgdGhlIFNjZW5lIENhbWVyYXMuXHJcbiAqIFxyXG4gKiBCeSBkZWZhdWx0IHlvdSBjYW4gYWNjZXNzIHRoZSBDYW1lcmEgTWFuYWdlciBmcm9tIHdpdGhpbiBhIFNjZW5lIHVzaW5nIGB0aGlzLmNhbWVyYXNgLCBhbHRob3VnaCB0aGlzIGNhbiBiZSBjaGFuZ2VkXHJcbiAqIGluIHlvdXIgZ2FtZSBjb25maWcuXHJcbiAqIFxyXG4gKiBDcmVhdGUgbmV3IENhbWVyYXMgdXNpbmcgdGhlIGBhZGRgIG1ldGhvZC4gT3IgZXh0ZW5kIHRoZSBDYW1lcmEgY2xhc3Mgd2l0aCB5b3VyIG93biBhZGRpdGlvbiBjb2RlIGFuZCB0aGVuIGFkZFxyXG4gKiB0aGUgbmV3IENhbWVyYSBpbiB1c2luZyB0aGUgYGFkZEV4aXN0aW5nYCBtZXRob2QuXHJcbiAqIFxyXG4gKiBDYW1lcmFzIHByb3ZpZGUgYSB2aWV3IGludG8geW91ciBnYW1lIHdvcmxkLCBhbmQgY2FuIGJlIHBvc2l0aW9uZWQsIHJvdGF0ZWQsIHpvb21lZCBhbmQgc2Nyb2xsZWQgYWNjb3JkaW5nbHkuXHJcbiAqXHJcbiAqIEEgQ2FtZXJhIGNvbnNpc3RzIG9mIHR3byBlbGVtZW50czogVGhlIHZpZXdwb3J0IGFuZCB0aGUgc2Nyb2xsIHZhbHVlcy5cclxuICpcclxuICogVGhlIHZpZXdwb3J0IGlzIHRoZSBwaHlzaWNhbCBwb3NpdGlvbiBhbmQgc2l6ZSBvZiB0aGUgQ2FtZXJhIHdpdGhpbiB5b3VyIGdhbWUuIENhbWVyYXMsIGJ5IGRlZmF1bHQsIGFyZVxyXG4gKiBjcmVhdGVkIHRoZSBzYW1lIHNpemUgYXMgeW91ciBnYW1lLCBidXQgdGhlaXIgcG9zaXRpb24gYW5kIHNpemUgY2FuIGJlIHNldCB0byBhbnl0aGluZy4gVGhpcyBtZWFucyBpZiB5b3VcclxuICogd2FudGVkIHRvIGNyZWF0ZSBhIGNhbWVyYSB0aGF0IHdhcyAzMjB4MjAwIGluIHNpemUsIHBvc2l0aW9uZWQgaW4gdGhlIGJvdHRvbS1yaWdodCBjb3JuZXIgb2YgeW91ciBnYW1lLFxyXG4gKiB5b3UnZCBhZGp1c3QgdGhlIHZpZXdwb3J0IHRvIGRvIHRoYXQgKHVzaW5nIG1ldGhvZHMgbGlrZSBgc2V0Vmlld3BvcnRgIGFuZCBgc2V0U2l6ZWApLlxyXG4gKlxyXG4gKiBJZiB5b3Ugd2lzaCB0byBjaGFuZ2Ugd2hlcmUgdGhlIENhbWVyYSBpcyBsb29raW5nIGluIHlvdXIgZ2FtZSwgdGhlbiB5b3Ugc2Nyb2xsIGl0LiBZb3UgY2FuIGRvIHRoaXNcclxuICogdmlhIHRoZSBwcm9wZXJ0aWVzIGBzY3JvbGxYYCBhbmQgYHNjcm9sbFlgIG9yIHRoZSBtZXRob2QgYHNldFNjcm9sbGAuIFNjcm9sbGluZyBoYXMgbm8gaW1wYWN0IG9uIHRoZVxyXG4gKiB2aWV3cG9ydCwgYW5kIGNoYW5naW5nIHRoZSB2aWV3cG9ydCBoYXMgbm8gaW1wYWN0IG9uIHRoZSBzY3JvbGxpbmcuXHJcbiAqXHJcbiAqIEJ5IGRlZmF1bHQgYSBDYW1lcmEgd2lsbCByZW5kZXIgYWxsIEdhbWUgT2JqZWN0cyBpdCBjYW4gc2VlLiBZb3UgY2FuIGNoYW5nZSB0aGlzIHVzaW5nIHRoZSBgaWdub3JlYCBtZXRob2QsXHJcbiAqIGFsbG93aW5nIHlvdSB0byBmaWx0ZXIgR2FtZSBPYmplY3RzIG91dCBvbiBhIHBlci1DYW1lcmEgYmFzaXMuIFRoZSBDYW1lcmEgTWFuYWdlciBjYW4gbWFuYWdlIHVwIHRvIDMxIHVuaXF1ZSBcclxuICogJ0dhbWUgT2JqZWN0IGlnbm9yZSBjYXBhYmxlJyBDYW1lcmFzLiBBbnkgQ2FtZXJhcyBiZXlvbmQgMzEgdGhhdCB5b3UgY3JlYXRlIHdpbGwgYWxsIGJlIGdpdmVuIGEgQ2FtZXJhIElEIG9mXHJcbiAqIHplcm8sIG1lYW5pbmcgdGhhdCB0aGV5IGNhbm5vdCBiZSB1c2VkIGZvciBHYW1lIE9iamVjdCBleGNsdXNpb24uIFRoaXMgbWVhbnMgaWYgeW91IG5lZWQgeW91ciBDYW1lcmEgdG8gaWdub3JlXHJcbiAqIEdhbWUgT2JqZWN0cywgbWFrZSBzdXJlIGl0J3Mgb25lIG9mIHRoZSBmaXJzdCAzMSBjcmVhdGVkLlxyXG4gKlxyXG4gKiBBIENhbWVyYSBhbHNvIGhhcyBidWlsdC1pbiBzcGVjaWFsIGVmZmVjdHMgaW5jbHVkaW5nIEZhZGUsIEZsYXNoLCBDYW1lcmEgU2hha2UsIFBhbiBhbmQgWm9vbS5cclxuICpcclxuICogQGNsYXNzIENhbWVyYU1hbmFnZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5DYW1lcmFzLlNjZW5lMkRcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdGhhdCBvd25zIHRoZSBDYW1lcmEgTWFuYWdlciBwbHVnaW4uXHJcbiAqL1xyXG52YXIgQ2FtZXJhTWFuYWdlciA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBDYW1lcmFNYW5hZ2VyIChzY2VuZSlcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgU2NlbmUgdGhhdCBvd25zIHRoZSBDYW1lcmEgTWFuYWdlciBwbHVnaW4uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYU1hbmFnZXIjc2NlbmVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lLlN5c3RlbXMgaGFuZGxlciBmb3IgdGhlIFNjZW5lIHRoYXQgb3ducyB0aGUgQ2FtZXJhIE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYU1hbmFnZXIjc3lzdGVtc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmVzLlN5c3RlbXN9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zID0gc2NlbmUuc3lzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbGwgQ2FtZXJhcyBjcmVhdGVkIGJ5LCBvciBhZGRlZCB0bywgdGhpcyBDYW1lcmEgTWFuYWdlciwgd2lsbCBoYXZlIHRoZWlyIGByb3VuZFBpeGVsc2BcclxuICAgICAgICAgKiBwcm9wZXJ0eSBzZXQgdG8gbWF0Y2ggdGhpcyB2YWx1ZS4gQnkgZGVmYXVsdCBpdCBpcyBzZXQgdG8gbWF0Y2ggdGhlIHZhbHVlIHNldCBpbiB0aGVcclxuICAgICAgICAgKiBnYW1lIGNvbmZpZ3VyYXRpb24sIGJ1dCBjYW4gYmUgY2hhbmdlZCBhdCBhbnkgcG9pbnQuIEVxdWFsbHksIGluZGl2aWR1YWwgY2FtZXJhcyBjYW5cclxuICAgICAgICAgKiBhbHNvIGJlIGNoYW5nZWQgYXMgbmVlZGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFNYW5hZ2VyI3JvdW5kUGl4ZWxzXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucm91bmRQaXhlbHMgPSBzY2VuZS5zeXMuZ2FtZS5jb25maWcucm91bmRQaXhlbHM7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIEFycmF5IG9mIHRoZSBDYW1lcmEgb2JqZWN0cyBiZWluZyBtYW5hZ2VkIGJ5IHRoaXMgQ2FtZXJhIE1hbmFnZXIuXHJcbiAgICAgICAgICogVGhlIENhbWVyYXMgYXJlIHVwZGF0ZWQgYW5kIHJlbmRlcmVkIGluIHRoZSBzYW1lIG9yZGVyIGluIHdoaWNoIHRoZXkgYXBwZWFyIGluIHRoaXMgYXJyYXkuXHJcbiAgICAgICAgICogRG8gbm90IGRpcmVjdGx5IGFkZCBvciByZW1vdmUgZW50cmllcyB0byB0aGlzIGFycmF5LiBIb3dldmVyLCB5b3UgY2FuIG1vdmUgdGhlIGNvbnRlbnRzXHJcbiAgICAgICAgICogYXJvdW5kIHRoZSBhcnJheSBzaG91bGQgeW91IHdpc2ggdG8gYWRqdXN0IHRoZSBkaXNwbGF5IG9yZGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFNYW5hZ2VyI2NhbWVyYXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFbXX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNhbWVyYXMgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBoYW5keSByZWZlcmVuY2UgdG8gdGhlICdtYWluJyBjYW1lcmEuIEJ5IGRlZmF1bHQgdGhpcyBpcyB0aGUgZmlyc3QgQ2FtZXJhIHRoZVxyXG4gICAgICAgICAqIENhbWVyYSBNYW5hZ2VyIGNyZWF0ZXMuIFlvdSBjYW4gYWxzbyBzZXQgaXQgZGlyZWN0bHksIG9yIHVzZSB0aGUgYG1ha2VNYWluYCBhcmd1bWVudFxyXG4gICAgICAgICAqIGluIHRoZSBgYWRkYCBhbmQgYGFkZEV4aXN0aW5nYCBtZXRob2RzLiBJdCBhbGxvd3MgeW91IHRvIGFjY2VzcyBpdCBmcm9tIHlvdXIgZ2FtZTpcclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgICAgICogdmFyIGNhbSA9IHRoaXMuY2FtZXJhcy5tYWluO1xyXG4gICAgICAgICAqIGBgYFxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEFsc28gc2VlIHRoZSBwcm9wZXJ0aWVzIGBjYW1lcmExYCwgYGNhbWVyYTJgIGFuZCBzbyBvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhTWFuYWdlciNtYWluXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWFpbjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBkZWZhdWx0IHVuLXRyYW5zZm9ybWVkIENhbWVyYSB0aGF0IGRvZXNuJ3QgZXhpc3Qgb24gdGhlIGNhbWVyYSBsaXN0IGFuZCBkb2Vzbid0XHJcbiAgICAgICAgICogY291bnQgdG93YXJkcyB0aGUgdG90YWwgbnVtYmVyIG9mIGNhbWVyYXMgYmVpbmcgbWFuYWdlZC4gSXQgZXhpc3RzIGZvciBvdGhlclxyXG4gICAgICAgICAqIHN5c3RlbXMsIGFzIHdlbGwgYXMgeW91ciBvd24gY29kZSwgc2hvdWxkIHRoZXkgcmVxdWlyZSBhIGJhc2ljIHVuLXRyYW5zZm9ybWVkXHJcbiAgICAgICAgICogY2FtZXJhIGluc3RhbmNlIGZyb20gd2hpY2ggdG8gY2FsY3VsYXRlIGEgdmlldyBtYXRyaXguXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYU1hbmFnZXIjZGVmYXVsdFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0O1xyXG5cclxuICAgICAgICBzY2VuZS5zeXMuZXZlbnRzLm9uY2UoU2NlbmVFdmVudHMuQk9PVCwgdGhpcy5ib290LCB0aGlzKTtcclxuICAgICAgICBzY2VuZS5zeXMuZXZlbnRzLm9uKFNjZW5lRXZlbnRzLlNUQVJULCB0aGlzLnN0YXJ0LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSwgb25seSBvbmNlLCB3aGVuIHRoZSBTY2VuZSBpcyBmaXJzdCBjcmVhdGVkLlxyXG4gICAgICogRG8gbm90IGludm9rZSBpdCBkaXJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhTWFuYWdlciNib290XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGxpc3RlbnMgUGhhc2VyLlNjZW5lcy5FdmVudHMjREVTVFJPWVxyXG4gICAgICogQHNpbmNlIDMuNS4xXHJcbiAgICAgKi9cclxuICAgIGJvb3Q6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHN5cyA9IHRoaXMuc3lzdGVtcztcclxuXHJcbiAgICAgICAgaWYgKHN5cy5zZXR0aW5ncy5jYW1lcmFzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFdlIGhhdmUgY2FtZXJhcyB0byBjcmVhdGVcclxuICAgICAgICAgICAgdGhpcy5mcm9tSlNPTihzeXMuc2V0dGluZ3MuY2FtZXJhcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBNYWtlIG9uZVxyXG4gICAgICAgICAgICB0aGlzLmFkZCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5tYWluID0gdGhpcy5jYW1lcmFzWzBdO1xyXG5cclxuICAgICAgICAvLyAgQ3JlYXRlIGEgZGVmYXVsdCBjYW1lcmFcclxuICAgICAgICB0aGlzLmRlZmF1bHQgPSBuZXcgQ2FtZXJhKDAsIDAsIHN5cy5zY2FsZS53aWR0aCwgc3lzLnNjYWxlLmhlaWdodCkuc2V0U2NlbmUodGhpcy5zY2VuZSk7XHJcblxyXG4gICAgICAgIHN5cy5nYW1lLnNjYWxlLm9uKFNjYWxlRXZlbnRzLlJFU0laRSwgdGhpcy5vblJlc2l6ZSwgdGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuc3lzdGVtcy5ldmVudHMub25jZShTY2VuZUV2ZW50cy5ERVNUUk9ZLCB0aGlzLmRlc3Ryb3ksIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBTY2VuZSB3aGVuIGl0IGlzIHN0YXJ0aW5nIHVwLlxyXG4gICAgICogSXQgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGxvY2FsIHN5c3RlbXMsIHByb3BlcnRpZXMgYW5kIGxpc3RlbmluZyBmb3IgU2NlbmUgZXZlbnRzLlxyXG4gICAgICogRG8gbm90IGludm9rZSBpdCBkaXJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhTWFuYWdlciNzdGFydFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBsaXN0ZW5zIFBoYXNlci5TY2VuZXMuRXZlbnRzI1VQREFURVxyXG4gICAgICogQGxpc3RlbnMgUGhhc2VyLlNjZW5lcy5FdmVudHMjU0hVVERPV05cclxuICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMubWFpbilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBzeXMgPSB0aGlzLnN5c3RlbXM7XHJcblxyXG4gICAgICAgICAgICBpZiAoc3lzLnNldHRpbmdzLmNhbWVyYXMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBXZSBoYXZlIGNhbWVyYXMgdG8gY3JlYXRlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyb21KU09OKHN5cy5zZXR0aW5ncy5jYW1lcmFzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBNYWtlIG9uZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMubWFpbiA9IHRoaXMuY2FtZXJhc1swXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBldmVudEVtaXR0ZXIgPSB0aGlzLnN5c3RlbXMuZXZlbnRzO1xyXG5cclxuICAgICAgICBldmVudEVtaXR0ZXIub24oU2NlbmVFdmVudHMuVVBEQVRFLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLm9uY2UoU2NlbmVFdmVudHMuU0hVVERPV04sIHRoaXMuc2h1dGRvd24sIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBuZXcgQ2FtZXJhIGludG8gdGhlIENhbWVyYSBNYW5hZ2VyLiBUaGUgQ2FtZXJhIE1hbmFnZXIgY2FuIHN1cHBvcnQgdXAgdG8gMzEgZGlmZmVyZW50IENhbWVyYXMuXHJcbiAgICAgKiBcclxuICAgICAqIEVhY2ggQ2FtZXJhIGhhcyBpdHMgb3duIHZpZXdwb3J0LCB3aGljaCBjb250cm9scyB0aGUgc2l6ZSBvZiB0aGUgQ2FtZXJhIGFuZCBpdHMgcG9zaXRpb24gd2l0aGluIHRoZSBjYW52YXMuXHJcbiAgICAgKiBcclxuICAgICAqIFVzZSB0aGUgYENhbWVyYS5zY3JvbGxYYCBhbmQgYENhbWVyYS5zY3JvbGxZYCBwcm9wZXJ0aWVzIHRvIGNoYW5nZSB3aGVyZSB0aGUgQ2FtZXJhIGlzIGxvb2tpbmcsIG9yIHRoZVxyXG4gICAgICogQ2FtZXJhIG1ldGhvZHMgc3VjaCBhcyBgY2VudGVyT25gLiBDYW1lcmFzIGFsc28gaGF2ZSBidWlsdCBpbiBzcGVjaWFsIGVmZmVjdHMsIHN1Y2ggYXMgZmFkZSwgZmxhc2gsIHNoYWtlLFxyXG4gICAgICogcGFuIGFuZCB6b29tLlxyXG4gICAgICogXHJcbiAgICAgKiBCeSBkZWZhdWx0IENhbWVyYXMgYXJlIHRyYW5zcGFyZW50IGFuZCB3aWxsIHJlbmRlciBhbnl0aGluZyB0aGF0IHRoZXkgY2FuIHNlZSBiYXNlZCBvbiB0aGVpciBgc2Nyb2xsWGBcclxuICAgICAqIGFuZCBgc2Nyb2xsWWAgdmFsdWVzLiBHYW1lIE9iamVjdHMgY2FuIGJlIHNldCB0byBiZSBpZ25vcmVkIGJ5IGEgQ2FtZXJhIGJ5IHVzaW5nIHRoZSBgQ2FtZXJhLmlnbm9yZWAgbWV0aG9kLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgQ2FtZXJhIHdpbGwgaGF2ZSBpdHMgYHJvdW5kUGl4ZWxzYCBwcm9wZXJ0eSBzZXQgdG8gd2hhdGV2ZXIgYENhbWVyYU1hbmFnZXIucm91bmRQaXhlbHNgIGlzLiBZb3UgY2FuIGNoYW5nZVxyXG4gICAgICogaXQgYWZ0ZXIgY3JlYXRpb24gaWYgcmVxdWlyZWQuXHJcbiAgICAgKiBcclxuICAgICAqIFNlZSB0aGUgQ2FtZXJhIGNsYXNzIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhTWFuYWdlciNhZGRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3g9MF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgQ2FtZXJhIHZpZXdwb3J0LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgQ2FtZXJhIHZpZXdwb3J0LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGhdIC0gVGhlIHdpZHRoIG9mIHRoZSBDYW1lcmEgdmlld3BvcnQuIElmIG5vdCBnaXZlbiBpdCdsbCBiZSB0aGUgZ2FtZSBjb25maWcgc2l6ZS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodF0gLSBUaGUgaGVpZ2h0IG9mIHRoZSBDYW1lcmEgdmlld3BvcnQuIElmIG5vdCBnaXZlbiBpdCdsbCBiZSB0aGUgZ2FtZSBjb25maWcgc2l6ZS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW21ha2VNYWluPWZhbHNlXSAtIFNldCB0aGlzIENhbWVyYSBhcyBiZWluZyB0aGUgJ21haW4nIGNhbWVyYS4gVGhpcyBqdXN0IG1ha2VzIHRoZSBwcm9wZXJ0eSBgbWFpbmAgYSByZWZlcmVuY2UgdG8gaXQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW25hbWU9JyddIC0gVGhlIG5hbWUgb2YgdGhlIENhbWVyYS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhlIG5ld2x5IGNyZWF0ZWQgQ2FtZXJhLlxyXG4gICAgICovXHJcbiAgICBhZGQ6IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBtYWtlTWFpbiwgbmFtZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7IHggPSAwOyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0gMDsgfVxyXG4gICAgICAgIGlmICh3aWR0aCA9PT0gdW5kZWZpbmVkKSB7IHdpZHRoID0gdGhpcy5zY2VuZS5zeXMuc2NhbGUud2lkdGg7IH1cclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gdGhpcy5zY2VuZS5zeXMuc2NhbGUuaGVpZ2h0OyB9XHJcbiAgICAgICAgaWYgKG1ha2VNYWluID09PSB1bmRlZmluZWQpIHsgbWFrZU1haW4gPSBmYWxzZTsgfVxyXG4gICAgICAgIGlmIChuYW1lID09PSB1bmRlZmluZWQpIHsgbmFtZSA9ICcnOyB9XHJcblxyXG4gICAgICAgIHZhciBjYW1lcmEgPSBuZXcgQ2FtZXJhKHgsIHksIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICBjYW1lcmEuc2V0TmFtZShuYW1lKTtcclxuICAgICAgICBjYW1lcmEuc2V0U2NlbmUodGhpcy5zY2VuZSk7XHJcbiAgICAgICAgY2FtZXJhLnNldFJvdW5kUGl4ZWxzKHRoaXMucm91bmRQaXhlbHMpO1xyXG5cclxuICAgICAgICBjYW1lcmEuaWQgPSB0aGlzLmdldE5leHRJRCgpO1xyXG5cclxuICAgICAgICB0aGlzLmNhbWVyYXMucHVzaChjYW1lcmEpO1xyXG5cclxuICAgICAgICBpZiAobWFrZU1haW4pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1haW4gPSBjYW1lcmE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2FtZXJhO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYW4gZXhpc3RpbmcgQ2FtZXJhIGludG8gdGhlIENhbWVyYSBNYW5hZ2VyLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgQ2FtZXJhIHNob3VsZCBlaXRoZXIgYmUgYSBgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFgIGluc3RhbmNlLCBvciBhIGNsYXNzIHRoYXQgZXh0ZW5kcyBmcm9tIGl0LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgQ2FtZXJhIHdpbGwgaGF2ZSBpdHMgYHJvdW5kUGl4ZWxzYCBwcm9wZXJ0eSBzZXQgdG8gd2hhdGV2ZXIgYENhbWVyYU1hbmFnZXIucm91bmRQaXhlbHNgIGlzLiBZb3UgY2FuIGNoYW5nZVxyXG4gICAgICogaXQgYWZ0ZXIgYWRkaXRpb24gaWYgcmVxdWlyZWQuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBDYW1lcmEgd2lsbCBiZSBhc3NpZ25lZCBhbiBJRCwgd2hpY2ggaXMgdXNlZCBmb3IgR2FtZSBPYmplY3QgZXhjbHVzaW9uIGFuZCB0aGVuIGFkZGVkIHRvIHRoZVxyXG4gICAgICogbWFuYWdlci4gQXMgbG9uZyBhcyBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QgaW4gdGhlIG1hbmFnZXIgaXQgd2lsbCBiZSBhZGRlZCB0aGVuIHJldHVybmVkLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIGBudWxsYCB0aGVuIHRoZSBDYW1lcmEgYWxyZWFkeSBleGlzdHMgaW4gdGhpcyBDYW1lcmEgTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhTWFuYWdlciNhZGRFeGlzdGluZ1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0byBiZSBhZGRlZCB0byB0aGUgQ2FtZXJhIE1hbmFnZXIuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFttYWtlTWFpbj1mYWxzZV0gLSBTZXQgdGhpcyBDYW1lcmEgYXMgYmVpbmcgdGhlICdtYWluJyBjYW1lcmEuIFRoaXMganVzdCBtYWtlcyB0aGUgcHJvcGVydHkgYG1haW5gIGEgcmVmZXJlbmNlIHRvIGl0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhlIENhbWVyYSB0aGF0IHdhcyBhZGRlZCB0byB0aGUgQ2FtZXJhIE1hbmFnZXIsIG9yIGBudWxsYCBpZiBpdCBjb3VsZG4ndCBiZSBhZGRlZC5cclxuICAgICAqL1xyXG4gICAgYWRkRXhpc3Rpbmc6IGZ1bmN0aW9uIChjYW1lcmEsIG1ha2VNYWluKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChtYWtlTWFpbiA9PT0gdW5kZWZpbmVkKSB7IG1ha2VNYWluID0gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5jYW1lcmFzLmluZGV4T2YoY2FtZXJhKTtcclxuXHJcbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhbWVyYS5pZCA9IHRoaXMuZ2V0TmV4dElEKCk7XHJcblxyXG4gICAgICAgICAgICBjYW1lcmEuc2V0Um91bmRQaXhlbHModGhpcy5yb3VuZFBpeGVscyk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNhbWVyYXMucHVzaChjYW1lcmEpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG1ha2VNYWluKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1haW4gPSBjYW1lcmE7XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gY2FtZXJhO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgbmV4dCBhdmFpbGFibGUgQ2FtZXJhIElEIG51bWJlci5cclxuICAgICAqIFxyXG4gICAgICogVGhlIENhbWVyYSBNYW5hZ2VyIHN1cHBvcnRzIHVwIHRvIDMxIHVuaXF1ZSBjYW1lcmFzLCBhZnRlciB3aGljaCB0aGUgSUQgcmV0dXJuZWQgd2lsbCBhbHdheXMgYmUgemVyby5cclxuICAgICAqIFlvdSBjYW4gY3JlYXRlIGFkZGl0aW9uYWwgY2FtZXJhcyBiZXlvbmQgMzEsIGJ1dCB0aGV5IGNhbm5vdCBiZSB1c2VkIGZvciBHYW1lIE9iamVjdCBleGNsdXNpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYU1hbmFnZXIjZ2V0TmV4dElEXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIG5leHQgYXZhaWxhYmxlIENhbWVyYSBJRCwgb3IgMCBpZiB0aGV5J3JlIGFsbCBhbHJlYWR5IGluIHVzZS5cclxuICAgICAqL1xyXG4gICAgZ2V0TmV4dElEOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjYW1lcmFzID0gdGhpcy5jYW1lcmFzO1xyXG5cclxuICAgICAgICB2YXIgdGVzdElEID0gMTtcclxuXHJcbiAgICAgICAgLy8gIEZpbmQgdGhlIGZpcnN0IGZyZWUgY2FtZXJhIElEIHdlIGNhbiB1c2VcclxuXHJcbiAgICAgICAgZm9yICh2YXIgdCA9IDA7IHQgPCAzMjsgdCsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbWVyYXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBjYW1lcmEgPSBjYW1lcmFzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjYW1lcmEgJiYgY2FtZXJhLmlkID09PSB0ZXN0SUQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZm91bmQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRlc3RJRCA9IHRlc3RJRCA8PCAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRlc3RJRDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdG90YWwgbnVtYmVyIG9mIENhbWVyYXMgaW4gdGhpcyBDYW1lcmEgTWFuYWdlci5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIG9wdGlvbmFsIGBpc1Zpc2libGVgIGFyZ3VtZW50IGlzIHNldCBpdCB3aWxsIG9ubHkgY291bnQgQ2FtZXJhcyB0aGF0IGFyZSBjdXJyZW50bHkgdmlzaWJsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhTWFuYWdlciNnZXRUb3RhbFxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc1Zpc2libGU9ZmFsc2VdIC0gU2V0IHRoZSBgdHJ1ZWAgdG8gb25seSBpbmNsdWRlIHZpc2libGUgQ2FtZXJhcyBpbiB0aGUgdG90YWwuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gVGhlIHRvdGFsIG51bWJlciBvZiBDYW1lcmFzIGluIHRoaXMgQ2FtZXJhIE1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIGdldFRvdGFsOiBmdW5jdGlvbiAoaXNWaXNpYmxlKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChpc1Zpc2libGUgPT09IHVuZGVmaW5lZCkgeyBpc1Zpc2libGUgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICB2YXIgdG90YWwgPSAwO1xyXG5cclxuICAgICAgICB2YXIgY2FtZXJhcyA9IHRoaXMuY2FtZXJhcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYW1lcmFzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNhbWVyYSA9IGNhbWVyYXNbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAoIWlzVmlzaWJsZSB8fCAoaXNWaXNpYmxlICYmIGNhbWVyYS52aXNpYmxlKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdG90YWwrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRvdGFsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBvcHVsYXRlcyB0aGlzIENhbWVyYSBNYW5hZ2VyIGJhc2VkIG9uIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIG9iamVjdCwgb3IgYW4gYXJyYXkgb2YgY29uZmlnIG9iamVjdHMuXHJcbiAgICAgKiBcclxuICAgICAqIFNlZSB0aGUgYFBoYXNlci5UeXBlcy5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhQ29uZmlnYCBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzIG9mIHRoZSBvYmplY3Qgc3RydWN0dXJlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFNYW5hZ2VyI2Zyb21KU09OXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuVHlwZXMuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYUNvbmZpZ3xQaGFzZXIuVHlwZXMuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYUNvbmZpZ1tdKX0gY29uZmlnIC0gQSBDYW1lcmEgY29uZmlndXJhdGlvbiBvYmplY3QsIG9yIGFuIGFycmF5IG9mIHRoZW0sIHRvIGJlIGFkZGVkIHRvIHRoaXMgQ2FtZXJhIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFNYW5hZ2VyfSBUaGlzIENhbWVyYSBNYW5hZ2VyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBmcm9tSlNPTjogZnVuY3Rpb24gKGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbmZpZyA9IFsgY29uZmlnIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZ2FtZVdpZHRoID0gdGhpcy5zY2VuZS5zeXMuc2NhbGUud2lkdGg7XHJcbiAgICAgICAgdmFyIGdhbWVIZWlnaHQgPSB0aGlzLnNjZW5lLnN5cy5zY2FsZS5oZWlnaHQ7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29uZmlnLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNhbWVyYUNvbmZpZyA9IGNvbmZpZ1tpXTtcclxuXHJcbiAgICAgICAgICAgIHZhciB4ID0gR2V0RmFzdFZhbHVlKGNhbWVyYUNvbmZpZywgJ3gnLCAwKTtcclxuICAgICAgICAgICAgdmFyIHkgPSBHZXRGYXN0VmFsdWUoY2FtZXJhQ29uZmlnLCAneScsIDApO1xyXG4gICAgICAgICAgICB2YXIgd2lkdGggPSBHZXRGYXN0VmFsdWUoY2FtZXJhQ29uZmlnLCAnd2lkdGgnLCBnYW1lV2lkdGgpO1xyXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gR2V0RmFzdFZhbHVlKGNhbWVyYUNvbmZpZywgJ2hlaWdodCcsIGdhbWVIZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMuYWRkKHgsIHksIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgLy8gIERpcmVjdCBwcm9wZXJ0aWVzXHJcbiAgICAgICAgICAgIGNhbWVyYS5uYW1lID0gR2V0RmFzdFZhbHVlKGNhbWVyYUNvbmZpZywgJ25hbWUnLCAnJyk7XHJcbiAgICAgICAgICAgIGNhbWVyYS56b29tID0gR2V0RmFzdFZhbHVlKGNhbWVyYUNvbmZpZywgJ3pvb20nLCAxKTtcclxuICAgICAgICAgICAgY2FtZXJhLnJvdGF0aW9uID0gR2V0RmFzdFZhbHVlKGNhbWVyYUNvbmZpZywgJ3JvdGF0aW9uJywgMCk7XHJcbiAgICAgICAgICAgIGNhbWVyYS5zY3JvbGxYID0gR2V0RmFzdFZhbHVlKGNhbWVyYUNvbmZpZywgJ3Njcm9sbFgnLCAwKTtcclxuICAgICAgICAgICAgY2FtZXJhLnNjcm9sbFkgPSBHZXRGYXN0VmFsdWUoY2FtZXJhQ29uZmlnLCAnc2Nyb2xsWScsIDApO1xyXG4gICAgICAgICAgICBjYW1lcmEucm91bmRQaXhlbHMgPSBHZXRGYXN0VmFsdWUoY2FtZXJhQ29uZmlnLCAncm91bmRQaXhlbHMnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGNhbWVyYS52aXNpYmxlID0gR2V0RmFzdFZhbHVlKGNhbWVyYUNvbmZpZywgJ3Zpc2libGUnLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEJhY2tncm91bmQgQ29sb3JcclxuXHJcbiAgICAgICAgICAgIHZhciBiYWNrZ3JvdW5kQ29sb3IgPSBHZXRGYXN0VmFsdWUoY2FtZXJhQ29uZmlnLCAnYmFja2dyb3VuZENvbG9yJywgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGJhY2tncm91bmRDb2xvcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY2FtZXJhLnNldEJhY2tncm91bmRDb2xvcihiYWNrZ3JvdW5kQ29sb3IpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyAgQm91bmRzXHJcblxyXG4gICAgICAgICAgICB2YXIgYm91bmRzQ29uZmlnID0gR2V0RmFzdFZhbHVlKGNhbWVyYUNvbmZpZywgJ2JvdW5kcycsIG51bGwpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGJvdW5kc0NvbmZpZylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIGJ4ID0gR2V0RmFzdFZhbHVlKGJvdW5kc0NvbmZpZywgJ3gnLCAwKTtcclxuICAgICAgICAgICAgICAgIHZhciBieSA9IEdldEZhc3RWYWx1ZShib3VuZHNDb25maWcsICd5JywgMCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgYndpZHRoID0gR2V0RmFzdFZhbHVlKGJvdW5kc0NvbmZpZywgJ3dpZHRoJywgZ2FtZVdpZHRoKTtcclxuICAgICAgICAgICAgICAgIHZhciBiaGVpZ2h0ID0gR2V0RmFzdFZhbHVlKGJvdW5kc0NvbmZpZywgJ2hlaWdodCcsIGdhbWVIZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhbWVyYS5zZXRCb3VuZHMoYngsIGJ5LCBid2lkdGgsIGJoZWlnaHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGEgQ2FtZXJhIGJhc2VkIG9uIGl0cyBuYW1lLlxyXG4gICAgICogXHJcbiAgICAgKiBDYW1lcmEgbmFtZXMgYXJlIG9wdGlvbmFsIGFuZCBkb24ndCBoYXZlIHRvIGJlIHNldCwgc28gdGhpcyBtZXRob2QgaXMgb25seSBvZiBhbnkgdXNlIGlmIHlvdVxyXG4gICAgICogaGF2ZSBnaXZlbiB5b3VyIENhbWVyYXMgdW5pcXVlIG5hbWVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFNYW5hZ2VyI2dldENhbWVyYVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgQ2FtZXJhLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhlIGZpcnN0IENhbWVyYSB3aXRoIGEgbmFtZSBtYXRjaGluZyB0aGUgZ2l2ZW4gc3RyaW5nLCBvdGhlcndpc2UgYG51bGxgLlxyXG4gICAgICovXHJcbiAgICBnZXRDYW1lcmE6IGZ1bmN0aW9uIChuYW1lKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjYW1lcmFzID0gdGhpcy5jYW1lcmFzO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbWVyYXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoY2FtZXJhc1tpXS5uYW1lID09PSBuYW1lKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FtZXJhc1tpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgY2FtZXJhcyBiZWxvdyB0aGUgZ2l2ZW4gUG9pbnRlci5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGZpcnN0IGNhbWVyYSBpbiB0aGUgYXJyYXkgaXMgdGhlIHRvcC1tb3N0IGNhbWVyYSBpbiB0aGUgY2FtZXJhIGxpc3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYU1hbmFnZXIjZ2V0Q2FtZXJhc0JlbG93UG9pbnRlclxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciB0byBjaGVjayBhZ2FpbnN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhW119IEFuIGFycmF5IG9mIGNhbWVyYXMgYmVsb3cgdGhlIFBvaW50ZXIuXHJcbiAgICAgKi9cclxuICAgIGdldENhbWVyYXNCZWxvd1BvaW50ZXI6IGZ1bmN0aW9uIChwb2ludGVyKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjYW1lcmFzID0gdGhpcy5jYW1lcmFzO1xyXG5cclxuICAgICAgICB2YXIgeCA9IHBvaW50ZXIueDtcclxuICAgICAgICB2YXIgeSA9IHBvaW50ZXIueTtcclxuXHJcbiAgICAgICAgdmFyIG91dHB1dCA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbWVyYXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY2FtZXJhID0gY2FtZXJhc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjYW1lcmEudmlzaWJsZSAmJiBjYW1lcmEuaW5wdXRFbmFibGVkICYmIFJlY3RhbmdsZUNvbnRhaW5zKGNhbWVyYSwgeCwgeSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBTbyB0aGUgdG9wLW1vc3QgY2FtZXJhIGlzIGF0IHRoZSB0b3Agb2YgdGhlIHNlYXJjaCBhcnJheVxyXG4gICAgICAgICAgICAgICAgb3V0cHV0LnVuc2hpZnQoY2FtZXJhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBnaXZlbiBDYW1lcmEsIG9yIGFuIGFycmF5IG9mIENhbWVyYXMsIGZyb20gdGhpcyBDYW1lcmEgTWFuYWdlci5cclxuICAgICAqIFxyXG4gICAgICogSWYgZm91bmQgaW4gdGhlIENhbWVyYSBNYW5hZ2VyIGl0IHdpbGwgYmUgaW1tZWRpYXRlbHkgcmVtb3ZlZCBmcm9tIHRoZSBsb2NhbCBjYW1lcmFzIGFycmF5LlxyXG4gICAgICogSWYgYWxzbyBjdXJyZW50bHkgdGhlICdtYWluJyBjYW1lcmEsICdtYWluJyB3aWxsIGJlIHJlc2V0IHRvIGJlIGNhbWVyYSAwLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgcmVtb3ZlZCBDYW1lcmFzIGFyZSBhdXRvbWF0aWNhbGx5IGRlc3Ryb3llZCBpZiB0aGUgYHJ1bkRlc3Ryb3lgIGFyZ3VtZW50IGlzIGB0cnVlYCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuXHJcbiAgICAgKiBJZiB5b3Ugd2lzaCB0byByZS11c2UgdGhlIGNhbWVyYXMgdGhlbiBzZXQgdGhpcyB0byBgZmFsc2VgLCBidXQga25vdyB0aGF0IHRoZXkgd2lsbCByZXRhaW4gdGhlaXIgcmVmZXJlbmNlc1xyXG4gICAgICogYW5kIGludGVybmFsIGRhdGEgdW50aWwgZGVzdHJveWVkIG9yIHJlLWFkZGVkIHRvIGEgQ2FtZXJhIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYU1hbmFnZXIjcmVtb3ZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYXxQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYVtdKX0gY2FtZXJhIC0gVGhlIENhbWVyYSwgb3IgYW4gYXJyYXkgb2YgQ2FtZXJhcywgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoaXMgQ2FtZXJhIE1hbmFnZXIuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtydW5EZXN0cm95PXRydWVdIC0gQXV0b21hdGljYWxseSBjYWxsIGBDYW1lcmEuZGVzdHJveWAgb24gZWFjaCBDYW1lcmEgcmVtb3ZlZCBmcm9tIHRoaXMgQ2FtZXJhIE1hbmFnZXIuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSB0b3RhbCBudW1iZXIgb2YgQ2FtZXJhcyByZW1vdmVkLlxyXG4gICAgICovXHJcbiAgICByZW1vdmU6IGZ1bmN0aW9uIChjYW1lcmEsIHJ1bkRlc3Ryb3kpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHJ1bkRlc3Ryb3kgPT09IHVuZGVmaW5lZCkgeyBydW5EZXN0cm95ID0gdHJ1ZTsgfVxyXG5cclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2FtZXJhKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhbWVyYSA9IFsgY2FtZXJhIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdG90YWwgPSAwO1xyXG4gICAgICAgIHZhciBjYW1lcmFzID0gdGhpcy5jYW1lcmFzO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbWVyYS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGNhbWVyYXMuaW5kZXhPZihjYW1lcmFbaV0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJ1bkRlc3Ryb3kpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FtZXJhc1tpbmRleF0uZGVzdHJveSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNhbWVyYXMuc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0b3RhbCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMubWFpbiAmJiBjYW1lcmFzWzBdKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tYWluID0gY2FtZXJhc1swXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0b3RhbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaW50ZXJuYWwgcmVuZGVyIG1ldGhvZC4gVGhpcyBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgU2NlbmUgYW5kIHNob3VsZCBub3QgYmUgaW52b2tlZCBkaXJlY3RseS5cclxuICAgICAqIFxyXG4gICAgICogSXQgd2lsbCBpdGVyYXRlIHRocm91Z2ggYWxsIGxvY2FsIGNhbWVyYXMgYW5kIHJlbmRlciB0aGVtIGluIHR1cm4sIGFzIGxvbmcgYXMgdGhleSdyZSB2aXNpYmxlIGFuZCBoYXZlXHJcbiAgICAgKiBhbiBhbHBoYSBsZXZlbCA+IDAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYU1hbmFnZXIjcmVuZGVyXHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyfFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyKX0gcmVuZGVyZXIgLSBUaGUgUmVuZGVyZXIgdGhhdCB3aWxsIHJlbmRlciB0aGUgY2hpbGRyZW4gdG8gdGhpcyBjYW1lcmEuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IGNoaWxkcmVuIC0gQW4gYXJyYXkgb2YgcmVuZGVyYWJsZSBHYW1lIE9iamVjdHMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvbiAtIEludGVycG9sYXRpb24gdmFsdWUuIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLlxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgY2hpbGRyZW4sIGludGVycG9sYXRpb24pXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5zY2VuZTtcclxuICAgICAgICB2YXIgY2FtZXJhcyA9IHRoaXMuY2FtZXJhcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNhbWVyYXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY2FtZXJhID0gY2FtZXJhc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjYW1lcmEudmlzaWJsZSAmJiBjYW1lcmEuYWxwaGEgPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgSGFyZC1jb2RlZCB0byAxIGZvciBub3dcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5wcmVSZW5kZXIoMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjaGlsZHJlbiwgaW50ZXJwb2xhdGlvbiwgY2FtZXJhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldHMgdGhpcyBDYW1lcmEgTWFuYWdlci5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyB3aWxsIGl0ZXJhdGUgdGhyb3VnaCBhbGwgY3VycmVudCBDYW1lcmFzLCBkZXN0cm95aW5nIHRoZW0gYWxsLCB0aGVuIGl0IHdpbGwgcmVzZXQgdGhlXHJcbiAgICAgKiBjYW1lcmFzIGFycmF5LCByZXNldCB0aGUgSUQgY291bnRlciBhbmQgY3JlYXRlIDEgbmV3IHNpbmdsZSBjYW1lcmEgdXNpbmcgdGhlIGRlZmF1bHQgdmFsdWVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFNYW5hZ2VyI3Jlc2V0QWxsXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhlIGZyZXNobHkgY3JlYXRlZCBtYWluIENhbWVyYS5cclxuICAgICAqL1xyXG4gICAgcmVzZXRBbGw6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNhbWVyYXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNhbWVyYXNbaV0uZGVzdHJveSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jYW1lcmFzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMubWFpbiA9IHRoaXMuYWRkKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLm1haW47XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1haW4gdXBkYXRlIGxvb3AuIENhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIFNjZW5lIHN0ZXBzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFNYW5hZ2VyI3VwZGF0ZVxyXG4gICAgICogQHByb3RlY3RlZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aW1lIC0gVGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGdlbmVyYXRlZCBieSB0aGUgUmVxdWVzdCBBbmltYXRpb24gRnJhbWUgb3IgU2V0VGltZW91dC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lLCBpbiBtcywgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCBmcmFtZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAodGltZSwgZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNhbWVyYXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNhbWVyYXNbaV0udXBkYXRlKHRpbWUsIGRlbHRhKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGV2ZW50IGhhbmRsZXIgdGhhdCBtYW5hZ2VzIHRoZSBgcmVzaXplYCBldmVudCBkaXNwYXRjaGVkIGJ5IHRoZSBTY2FsZSBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFNYW5hZ2VyI29uUmVzaXplXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuU3RydWN0cy5TaXplfSBnYW1lU2l6ZSAtIFRoZSBkZWZhdWx0IEdhbWUgU2l6ZSBvYmplY3QuIFRoaXMgaXMgdGhlIHVuLW1vZGlmaWVkIGdhbWUgZGltZW5zaW9ucy5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlN0cnVjdHMuU2l6ZX0gYmFzZVNpemUgLSBUaGUgYmFzZSBTaXplIG9iamVjdC4gVGhlIGdhbWUgZGltZW5zaW9ucyBtdWx0aXBsaWVkIGJ5IHRoZSByZXNvbHV0aW9uLiBUaGUgY2FudmFzIHdpZHRoIC8gaGVpZ2h0IHZhbHVlcyBtYXRjaCB0aGlzLlxyXG4gICAgICovXHJcbiAgICBvblJlc2l6ZTogZnVuY3Rpb24gKGdhbWVTaXplLCBiYXNlU2l6ZSwgZGlzcGxheVNpemUsIHJlc29sdXRpb24sIHByZXZpb3VzV2lkdGgsIHByZXZpb3VzSGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jYW1lcmFzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNhbSA9IHRoaXMuY2FtZXJhc1tpXTtcclxuXHJcbiAgICAgICAgICAgIC8vICBpZiBjYW1lcmEgaXMgYXQgMHgwIGFuZCB3YXMgdGhlIHNpemUgb2YgdGhlIHByZXZpb3VzIGdhbWUgc2l6ZSwgdGhlbiB3ZSBjYW4gc2FmZWx5IGFzc3VtZSBpdFxyXG4gICAgICAgICAgICAvLyAgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gbWF0Y2ggdGhlIG5ldyBnYW1lIHNpemUgdG9vXHJcblxyXG4gICAgICAgICAgICBpZiAoY2FtLl94ID09PSAwICYmIGNhbS5feSA9PT0gMCAmJiBjYW0uX3dpZHRoID09PSBwcmV2aW91c1dpZHRoICYmIGNhbS5faGVpZ2h0ID09PSBwcmV2aW91c0hlaWdodClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY2FtLnNldFNpemUoYmFzZVNpemUud2lkdGgsIGJhc2VTaXplLmhlaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzaXplcyBhbGwgY2FtZXJhcyB0byB0aGUgZ2l2ZW4gZGltZW5zaW9ucy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhTWFuYWdlciNyZXNpemVcclxuICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSBuZXcgd2lkdGggb2YgdGhlIGNhbWVyYS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgbmV3IGhlaWdodCBvZiB0aGUgY2FtZXJhLlxyXG4gICAgICovXHJcbiAgICByZXNpemU6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jYW1lcmFzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jYW1lcmFzW2ldLnNldFNpemUod2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBTY2VuZSB0aGF0IG93bnMgdGhpcyBwbHVnaW4gaXMgc2h1dHRpbmcgZG93bi5cclxuICAgICAqIFdlIG5lZWQgdG8ga2lsbCBhbmQgcmVzZXQgYWxsIGludGVybmFsIHByb3BlcnRpZXMgYXMgd2VsbCBhcyBzdG9wIGxpc3RlbmluZyB0byBTY2VuZSBldmVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYU1hbmFnZXIjc2h1dGRvd25cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc2h1dGRvd246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5tYWluID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2FtZXJhcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FtZXJhc1tpXS5kZXN0cm95KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNhbWVyYXMgPSBbXTtcclxuXHJcbiAgICAgICAgdmFyIGV2ZW50RW1pdHRlciA9IHRoaXMuc3lzdGVtcy5ldmVudHM7XHJcblxyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vZmYoU2NlbmVFdmVudHMuVVBEQVRFLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLm9mZihTY2VuZUV2ZW50cy5TSFVURE9XTiwgdGhpcy5zaHV0ZG93biwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNjZW5lIHRoYXQgb3ducyB0aGlzIHBsdWdpbiBpcyBiZWluZyBkZXN0cm95ZWQuXHJcbiAgICAgKiBXZSBuZWVkIHRvIHNodXRkb3duIGFuZCB0aGVuIGtpbGwgb2ZmIGFsbCBleHRlcm5hbCByZWZlcmVuY2VzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFNYW5hZ2VyI2Rlc3Ryb3lcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNodXRkb3duKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZGVmYXVsdC5kZXN0cm95KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUuc3lzLmV2ZW50cy5vZmYoU2NlbmVFdmVudHMuU1RBUlQsIHRoaXMuc3RhcnQsIHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcclxuICAgICAgICB0aGlzLnN5c3RlbXMgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5QbHVnaW5DYWNoZS5yZWdpc3RlcignQ2FtZXJhTWFuYWdlcicsIENhbWVyYU1hbmFnZXIsICdjYW1lcmFzJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENhbWVyYU1hbmFnZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/CameraManager.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/effects/Fade.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/effects/Fade.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Clamp = __webpack_require__(/*! ../../../math/Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/cameras/2d/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Camera Fade effect.\r\n *\r\n * This effect will fade the camera viewport to the given color, over the duration specified.\r\n *\r\n * Only the camera viewport is faded. None of the objects it is displaying are impacted, i.e. their colors do\r\n * not change.\r\n *\r\n * The effect will dispatch several events on the Camera itself and you can also specify an `onUpdate` callback,\r\n * which is invoked each frame for the duration of the effect, if required.\r\n *\r\n * @class Fade\r\n * @memberof Phaser.Cameras.Scene2D.Effects\r\n * @constructor\r\n * @since 3.5.0\r\n *\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera this effect is acting upon.\r\n */\r\nvar Fade = new Class({\r\n\r\n initialize:\r\n\r\n function Fade (camera)\r\n {\r\n /**\r\n * The Camera this effect belongs to.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Fade#camera\r\n * @type {Phaser.Cameras.Scene2D.Camera}\r\n * @readonly\r\n * @since 3.5.0\r\n */\r\n this.camera = camera;\r\n\r\n /**\r\n * Is this effect actively running?\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Fade#isRunning\r\n * @type {boolean}\r\n * @readonly\r\n * @default false\r\n * @since 3.5.0\r\n */\r\n this.isRunning = false;\r\n\r\n /**\r\n * Has this effect finished running?\r\n *\r\n * This is different from `isRunning` because it remains set to `true` when the effect is over,\r\n * until the effect is either reset or started again.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Fade#isComplete\r\n * @type {boolean}\r\n * @readonly\r\n * @default false\r\n * @since 3.5.0\r\n */\r\n this.isComplete = false;\r\n\r\n /**\r\n * The direction of the fade.\r\n * `true` = fade out (transparent to color), `false` = fade in (color to transparent)\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Fade#direction\r\n * @type {boolean}\r\n * @readonly\r\n * @since 3.5.0\r\n */\r\n this.direction = true;\r\n\r\n /**\r\n * The duration of the effect, in milliseconds.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Fade#duration\r\n * @type {integer}\r\n * @readonly\r\n * @default 0\r\n * @since 3.5.0\r\n */\r\n this.duration = 0;\r\n\r\n /**\r\n * The value of the red color channel the camera will use for the fade effect.\r\n * A value between 0 and 255.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Fade#red\r\n * @type {integer}\r\n * @private\r\n * @since 3.5.0\r\n */\r\n this.red = 0;\r\n\r\n /**\r\n * The value of the green color channel the camera will use for the fade effect.\r\n * A value between 0 and 255.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Fade#green\r\n * @type {integer}\r\n * @private\r\n * @since 3.5.0\r\n */\r\n this.green = 0;\r\n\r\n /**\r\n * The value of the blue color channel the camera will use for the fade effect.\r\n * A value between 0 and 255.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Fade#blue\r\n * @type {integer}\r\n * @private\r\n * @since 3.5.0\r\n */\r\n this.blue = 0;\r\n\r\n /**\r\n * The value of the alpha channel used during the fade effect.\r\n * A value between 0 and 1.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Fade#alpha\r\n * @type {number}\r\n * @private\r\n * @since 3.5.0\r\n */\r\n this.alpha = 0;\r\n\r\n /**\r\n * If this effect is running this holds the current percentage of the progress, a value between 0 and 1.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Fade#progress\r\n * @type {number}\r\n * @since 3.5.0\r\n */\r\n this.progress = 0;\r\n\r\n /**\r\n * Effect elapsed timer.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Fade#_elapsed\r\n * @type {number}\r\n * @private\r\n * @since 3.5.0\r\n */\r\n this._elapsed = 0;\r\n\r\n /**\r\n * This callback is invoked every frame for the duration of the effect.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Fade#_onUpdate\r\n * @type {?Phaser.Types.Cameras.Scene2D.CameraFadeCallback}\r\n * @private\r\n * @default null\r\n * @since 3.5.0\r\n */\r\n this._onUpdate;\r\n\r\n /**\r\n * On Complete callback scope.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Fade#_onUpdateScope\r\n * @type {any}\r\n * @private\r\n * @since 3.5.0\r\n */\r\n this._onUpdateScope;\r\n },\r\n\r\n /**\r\n * Fades the Camera to or from the given color over the duration specified.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Fade#start\r\n * @fires Phaser.Cameras.Scene2D.Events#FADE_IN_START\r\n * @fires Phaser.Cameras.Scene2D.Events#FADE_OUT_START\r\n * @since 3.5.0\r\n *\r\n * @param {boolean} [direction=true] - The direction of the fade. `true` = fade out (transparent to color), `false` = fade in (color to transparent)\r\n * @param {integer} [duration=1000] - The duration of the effect in milliseconds.\r\n * @param {integer} [red=0] - The amount to fade the red channel towards. A value between 0 and 255.\r\n * @param {integer} [green=0] - The amount to fade the green channel towards. A value between 0 and 255.\r\n * @param {integer} [blue=0] - The amount to fade the blue channel towards. A value between 0 and 255.\r\n * @param {boolean} [force=false] - Force the effect to start immediately, even if already running.\r\n * @param {Phaser.Types.Cameras.Scene2D.CameraFadeCallback} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n * It is sent two arguments: A reference to the camera and a progress amount between 0 and 1 indicating how complete the effect is.\r\n * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.Camera} The Camera on which the effect was started.\r\n */\r\n start: function (direction, duration, red, green, blue, force, callback, context)\r\n {\r\n if (direction === undefined) { direction = true; }\r\n if (duration === undefined) { duration = 1000; }\r\n if (red === undefined) { red = 0; }\r\n if (green === undefined) { green = 0; }\r\n if (blue === undefined) { blue = 0; }\r\n if (force === undefined) { force = false; }\r\n if (callback === undefined) { callback = null; }\r\n if (context === undefined) { context = this.camera.scene; }\r\n\r\n if (!force && this.isRunning)\r\n {\r\n return this.camera;\r\n }\r\n\r\n this.isRunning = true;\r\n this.isComplete = false;\r\n this.duration = duration;\r\n this.direction = direction;\r\n this.progress = 0;\r\n\r\n this.red = red;\r\n this.green = green;\r\n this.blue = blue;\r\n this.alpha = (direction) ? Number.MIN_VALUE : 1;\r\n\r\n this._elapsed = 0;\r\n\r\n this._onUpdate = callback;\r\n this._onUpdateScope = context;\r\n\r\n var eventName = (direction) ? Events.FADE_OUT_START : Events.FADE_IN_START;\r\n\r\n this.camera.emit(eventName, this.camera, this, duration, red, green, blue);\r\n\r\n return this.camera;\r\n },\r\n\r\n /**\r\n * The main update loop for this effect. Called automatically by the Camera.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Fade#update\r\n * @since 3.5.0\r\n *\r\n * @param {integer} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n */\r\n update: function (time, delta)\r\n {\r\n if (!this.isRunning)\r\n {\r\n return;\r\n }\r\n\r\n this._elapsed += delta;\r\n\r\n this.progress = Clamp(this._elapsed / this.duration, 0, 1);\r\n\r\n if (this._onUpdate)\r\n {\r\n this._onUpdate.call(this._onUpdateScope, this.camera, this.progress);\r\n }\r\n\r\n if (this._elapsed < this.duration)\r\n {\r\n this.alpha = (this.direction) ? this.progress : 1 - this.progress;\r\n }\r\n else\r\n {\r\n this.alpha = (this.direction) ? 1 : 0;\r\n this.effectComplete();\r\n }\r\n },\r\n\r\n /**\r\n * Called internally by the Canvas Renderer.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Fade#postRenderCanvas\r\n * @since 3.5.0\r\n *\r\n * @param {CanvasRenderingContext2D} ctx - The Canvas context to render to.\r\n *\r\n * @return {boolean} `true` if the effect drew to the renderer, otherwise `false`.\r\n */\r\n postRenderCanvas: function (ctx)\r\n {\r\n if (!this.isRunning && !this.isComplete)\r\n {\r\n return false;\r\n }\r\n\r\n var camera = this.camera;\r\n\r\n ctx.fillStyle = 'rgba(' + this.red + ',' + this.green + ',' + this.blue + ',' + this.alpha + ')';\r\n ctx.fillRect(camera._cx, camera._cy, camera._cw, camera._ch);\r\n\r\n return true;\r\n },\r\n\r\n /**\r\n * Called internally by the WebGL Renderer.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Fade#postRenderWebGL\r\n * @since 3.5.0\r\n *\r\n * @param {Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline} pipeline - The WebGL Pipeline to render to.\r\n * @param {function} getTintFunction - A function that will return the gl safe tint colors.\r\n *\r\n * @return {boolean} `true` if the effect drew to the renderer, otherwise `false`.\r\n */\r\n postRenderWebGL: function (pipeline, getTintFunction)\r\n {\r\n if (!this.isRunning && !this.isComplete)\r\n {\r\n return false;\r\n }\r\n\r\n var camera = this.camera;\r\n var red = this.red / 255;\r\n var blue = this.blue / 255;\r\n var green = this.green / 255;\r\n\r\n pipeline.drawFillRect(\r\n camera._cx, camera._cy, camera._cw, camera._ch,\r\n getTintFunction(red, green, blue, 1),\r\n this.alpha\r\n );\r\n\r\n return true;\r\n },\r\n\r\n /**\r\n * Called internally when the effect completes.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Fade#effectComplete\r\n * @fires Phaser.Cameras.Scene2D.Events#FADE_IN_COMPLETE\r\n * @fires Phaser.Cameras.Scene2D.Events#FADE_OUT_COMPLETE\r\n * @since 3.5.0\r\n */\r\n effectComplete: function ()\r\n {\r\n this._onUpdate = null;\r\n this._onUpdateScope = null;\r\n\r\n this.isRunning = false;\r\n this.isComplete = true;\r\n\r\n var eventName = (this.direction) ? Events.FADE_OUT_COMPLETE : Events.FADE_IN_COMPLETE;\r\n\r\n this.camera.emit(eventName, this.camera, this);\r\n },\r\n\r\n /**\r\n * Resets this camera effect.\r\n * If it was previously running, it stops instantly without calling its onComplete callback or emitting an event.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Fade#reset\r\n * @since 3.5.0\r\n */\r\n reset: function ()\r\n {\r\n this.isRunning = false;\r\n this.isComplete = false;\r\n\r\n this._onUpdate = null;\r\n this._onUpdateScope = null;\r\n },\r\n\r\n /**\r\n * Destroys this effect, releasing it from the Camera.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Fade#destroy\r\n * @since 3.5.0\r\n */\r\n destroy: function ()\r\n {\r\n this.reset();\r\n\r\n this.camera = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Fade;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2VmZmVjdHMvRmFkZS5qcz85MjQ4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsb0VBQXFCO0FBQ3pDLFlBQVksbUJBQU8sQ0FBQyxzRUFBc0I7QUFDMUMsYUFBYSxtQkFBTyxDQUFDLHVFQUFXOztBQUVoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxnREFBZ0Q7QUFDL0Q7QUFDQSxlQUFlLElBQUk7QUFDbkI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxrQkFBa0I7QUFDeEQscUNBQXFDLGlCQUFpQjtBQUN0RCxnQ0FBZ0MsU0FBUztBQUN6QyxrQ0FBa0MsV0FBVztBQUM3QyxpQ0FBaUMsVUFBVTtBQUMzQyxrQ0FBa0MsZUFBZTtBQUNqRCxxQ0FBcUMsaUJBQWlCO0FBQ3RELG9DQUFvQyw2QkFBNkI7O0FBRWpFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUseUJBQXlCO0FBQ3hDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvREFBb0Q7QUFDbkUsZUFBZSxTQUFTO0FBQ3hCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NhbWVyYXMvMmQvZWZmZWN0cy9GYWRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhbXAgPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoL0NsYW1wJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuLi9ldmVudHMnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgQ2FtZXJhIEZhZGUgZWZmZWN0LlxyXG4gKlxyXG4gKiBUaGlzIGVmZmVjdCB3aWxsIGZhZGUgdGhlIGNhbWVyYSB2aWV3cG9ydCB0byB0aGUgZ2l2ZW4gY29sb3IsIG92ZXIgdGhlIGR1cmF0aW9uIHNwZWNpZmllZC5cclxuICpcclxuICogT25seSB0aGUgY2FtZXJhIHZpZXdwb3J0IGlzIGZhZGVkLiBOb25lIG9mIHRoZSBvYmplY3RzIGl0IGlzIGRpc3BsYXlpbmcgYXJlIGltcGFjdGVkLCBpLmUuIHRoZWlyIGNvbG9ycyBkb1xyXG4gKiBub3QgY2hhbmdlLlxyXG4gKlxyXG4gKiBUaGUgZWZmZWN0IHdpbGwgZGlzcGF0Y2ggc2V2ZXJhbCBldmVudHMgb24gdGhlIENhbWVyYSBpdHNlbGYgYW5kIHlvdSBjYW4gYWxzbyBzcGVjaWZ5IGFuIGBvblVwZGF0ZWAgY2FsbGJhY2ssXHJcbiAqIHdoaWNoIGlzIGludm9rZWQgZWFjaCBmcmFtZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QsIGlmIHJlcXVpcmVkLlxyXG4gKlxyXG4gKiBAY2xhc3MgRmFkZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy41LjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIGNhbWVyYSB0aGlzIGVmZmVjdCBpcyBhY3RpbmcgdXBvbi5cclxuICovXHJcbnZhciBGYWRlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEZhZGUgKGNhbWVyYSlcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQ2FtZXJhIHRoaXMgZWZmZWN0IGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmFkZSNjYW1lcmFcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYW1lcmEgPSBjYW1lcmE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElzIHRoaXMgZWZmZWN0IGFjdGl2ZWx5IHJ1bm5pbmc/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmFkZSNpc1J1bm5pbmdcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaXNSdW5uaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEhhcyB0aGlzIGVmZmVjdCBmaW5pc2hlZCBydW5uaW5nP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBgaXNSdW5uaW5nYCBiZWNhdXNlIGl0IHJlbWFpbnMgc2V0IHRvIGB0cnVlYCB3aGVuIHRoZSBlZmZlY3QgaXMgb3ZlcixcclxuICAgICAgICAgKiB1bnRpbCB0aGUgZWZmZWN0IGlzIGVpdGhlciByZXNldCBvciBzdGFydGVkIGFnYWluLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZhZGUjaXNDb21wbGV0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc0NvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBkaXJlY3Rpb24gb2YgdGhlIGZhZGUuXHJcbiAgICAgICAgICogYHRydWVgID0gZmFkZSBvdXQgKHRyYW5zcGFyZW50IHRvIGNvbG9yKSwgYGZhbHNlYCA9IGZhZGUgaW4gKGNvbG9yIHRvIHRyYW5zcGFyZW50KVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZhZGUjZGlyZWN0aW9uXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdCwgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZhZGUjZHVyYXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kdXJhdGlvbiA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgcmVkIGNvbG9yIGNoYW5uZWwgdGhlIGNhbWVyYSB3aWxsIHVzZSBmb3IgdGhlIGZhZGUgZWZmZWN0LlxyXG4gICAgICAgICAqIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmFkZSNyZWRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVkID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHZhbHVlIG9mIHRoZSBncmVlbiBjb2xvciBjaGFubmVsIHRoZSBjYW1lcmEgd2lsbCB1c2UgZm9yIHRoZSBmYWRlIGVmZmVjdC5cclxuICAgICAgICAgKiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZhZGUjZ3JlZW5cclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZ3JlZW4gPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIGJsdWUgY29sb3IgY2hhbm5lbCB0aGUgY2FtZXJhIHdpbGwgdXNlIGZvciB0aGUgZmFkZSBlZmZlY3QuXHJcbiAgICAgICAgICogQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5GYWRlI2JsdWVcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYmx1ZSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgYWxwaGEgY2hhbm5lbCB1c2VkIGR1cmluZyB0aGUgZmFkZSBlZmZlY3QuXHJcbiAgICAgICAgICogQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmFkZSNhbHBoYVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFscGhhID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgdGhpcyBlZmZlY3QgaXMgcnVubmluZyB0aGlzIGhvbGRzIHRoZSBjdXJyZW50IHBlcmNlbnRhZ2Ugb2YgdGhlIHByb2dyZXNzLCBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5GYWRlI3Byb2dyZXNzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnByb2dyZXNzID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRWZmZWN0IGVsYXBzZWQgdGltZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmFkZSNfZWxhcHNlZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9lbGFwc2VkID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhpcyBjYWxsYmFjayBpcyBpbnZva2VkIGV2ZXJ5IGZyYW1lIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5GYWRlI19vblVwZGF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLlR5cGVzLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFGYWRlQ2FsbGJhY2t9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE9uIENvbXBsZXRlIGNhbGxiYWNrIHNjb3BlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZhZGUjX29uVXBkYXRlU2NvcGVcclxuICAgICAgICAgKiBAdHlwZSB7YW55fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGVTY29wZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGYWRlcyB0aGUgQ2FtZXJhIHRvIG9yIGZyb20gdGhlIGdpdmVuIGNvbG9yIG92ZXIgdGhlIGR1cmF0aW9uIHNwZWNpZmllZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5GYWRlI3N0YXJ0XHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjRkFERV9JTl9TVEFSVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI0ZBREVfT1VUX1NUQVJUXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkaXJlY3Rpb249dHJ1ZV0gLSBUaGUgZGlyZWN0aW9uIG9mIHRoZSBmYWRlLiBgdHJ1ZWAgPSBmYWRlIG91dCAodHJhbnNwYXJlbnQgdG8gY29sb3IpLCBgZmFsc2VgID0gZmFkZSBpbiAoY29sb3IgdG8gdHJhbnNwYXJlbnQpXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtkdXJhdGlvbj0xMDAwXSAtIFRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0IGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3JlZD0wXSAtIFRoZSBhbW91bnQgdG8gZmFkZSB0aGUgcmVkIGNoYW5uZWwgdG93YXJkcy4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2dyZWVuPTBdIC0gVGhlIGFtb3VudCB0byBmYWRlIHRoZSBncmVlbiBjaGFubmVsIHRvd2FyZHMuIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtibHVlPTBdIC0gVGhlIGFtb3VudCB0byBmYWRlIHRoZSBibHVlIGNoYW5uZWwgdG93YXJkcy4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlPWZhbHNlXSAtIEZvcmNlIHRoZSBlZmZlY3QgdG8gc3RhcnQgaW1tZWRpYXRlbHksIGV2ZW4gaWYgYWxyZWFkeSBydW5uaW5nLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYUZhZGVDYWxsYmFja30gW2NhbGxiYWNrXSAtIFRoaXMgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIGV2ZXJ5IGZyYW1lIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdC5cclxuICAgICAqIEl0IGlzIHNlbnQgdHdvIGFyZ3VtZW50czogQSByZWZlcmVuY2UgdG8gdGhlIGNhbWVyYSBhbmQgYSBwcm9ncmVzcyBhbW91bnQgYmV0d2VlbiAwIGFuZCAxIGluZGljYXRpbmcgaG93IGNvbXBsZXRlIHRoZSBlZmZlY3QgaXMuXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gW2NvbnRleHRdIC0gVGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIGNhbGxiYWNrIGlzIGludm9rZWQuIERlZmF1bHRzIHRvIHRoZSBTY2VuZSB0byB3aGljaCB0aGUgQ2FtZXJhIGJlbG9uZ3MuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFRoZSBDYW1lcmEgb24gd2hpY2ggdGhlIGVmZmVjdCB3YXMgc3RhcnRlZC5cclxuICAgICAqL1xyXG4gICAgc3RhcnQ6IGZ1bmN0aW9uIChkaXJlY3Rpb24sIGR1cmF0aW9uLCByZWQsIGdyZWVuLCBibHVlLCBmb3JjZSwgY2FsbGJhY2ssIGNvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7IGRpcmVjdGlvbiA9IHRydWU7IH1cclxuICAgICAgICBpZiAoZHVyYXRpb24gPT09IHVuZGVmaW5lZCkgeyBkdXJhdGlvbiA9IDEwMDA7IH1cclxuICAgICAgICBpZiAocmVkID09PSB1bmRlZmluZWQpIHsgcmVkID0gMDsgfVxyXG4gICAgICAgIGlmIChncmVlbiA9PT0gdW5kZWZpbmVkKSB7IGdyZWVuID0gMDsgfVxyXG4gICAgICAgIGlmIChibHVlID09PSB1bmRlZmluZWQpIHsgYmx1ZSA9IDA7IH1cclxuICAgICAgICBpZiAoZm9yY2UgPT09IHVuZGVmaW5lZCkgeyBmb3JjZSA9IGZhbHNlOyB9XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHsgY2FsbGJhY2sgPSBudWxsOyB9XHJcbiAgICAgICAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkgeyBjb250ZXh0ID0gdGhpcy5jYW1lcmEuc2NlbmU7IH1cclxuXHJcbiAgICAgICAgaWYgKCFmb3JjZSAmJiB0aGlzLmlzUnVubmluZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbWVyYTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNSdW5uaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzQ29tcGxldGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmR1cmF0aW9uID0gZHVyYXRpb247XHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XHJcbiAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMucmVkID0gcmVkO1xyXG4gICAgICAgIHRoaXMuZ3JlZW4gPSBncmVlbjtcclxuICAgICAgICB0aGlzLmJsdWUgPSBibHVlO1xyXG4gICAgICAgIHRoaXMuYWxwaGEgPSAoZGlyZWN0aW9uKSA/IE51bWJlci5NSU5fVkFMVUUgOiAxO1xyXG5cclxuICAgICAgICB0aGlzLl9lbGFwc2VkID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGUgPSBjYWxsYmFjaztcclxuICAgICAgICB0aGlzLl9vblVwZGF0ZVNjb3BlID0gY29udGV4dDtcclxuXHJcbiAgICAgICAgdmFyIGV2ZW50TmFtZSA9IChkaXJlY3Rpb24pID8gRXZlbnRzLkZBREVfT1VUX1NUQVJUIDogRXZlbnRzLkZBREVfSU5fU1RBUlQ7XHJcblxyXG4gICAgICAgIHRoaXMuY2FtZXJhLmVtaXQoZXZlbnROYW1lLCB0aGlzLmNhbWVyYSwgdGhpcywgZHVyYXRpb24sIHJlZCwgZ3JlZW4sIGJsdWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5jYW1lcmE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1haW4gdXBkYXRlIGxvb3AgZm9yIHRoaXMgZWZmZWN0LiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgQ2FtZXJhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZhZGUjdXBkYXRlXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lc3RhbXAgYXMgZ2VuZXJhdGVkIGJ5IHRoZSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSBvciBTZXRUaW1lb3V0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUsIGluIG1zLCBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IGZyYW1lLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICh0aW1lLCBkZWx0YSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZWxhcHNlZCArPSBkZWx0YTtcclxuXHJcbiAgICAgICAgdGhpcy5wcm9ncmVzcyA9IENsYW1wKHRoaXMuX2VsYXBzZWQgLyB0aGlzLmR1cmF0aW9uLCAwLCAxKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX29uVXBkYXRlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fb25VcGRhdGUuY2FsbCh0aGlzLl9vblVwZGF0ZVNjb3BlLCB0aGlzLmNhbWVyYSwgdGhpcy5wcm9ncmVzcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fZWxhcHNlZCA8IHRoaXMuZHVyYXRpb24pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmFscGhhID0gKHRoaXMuZGlyZWN0aW9uKSA/IHRoaXMucHJvZ3Jlc3MgOiAxIC0gdGhpcy5wcm9ncmVzcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5hbHBoYSA9ICh0aGlzLmRpcmVjdGlvbikgPyAxIDogMDtcclxuICAgICAgICAgICAgdGhpcy5lZmZlY3RDb21wbGV0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgaW50ZXJuYWxseSBieSB0aGUgQ2FudmFzIFJlbmRlcmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZhZGUjcG9zdFJlbmRlckNhbnZhc1xyXG4gICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCAtIFRoZSBDYW52YXMgY29udGV4dCB0byByZW5kZXIgdG8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBlZmZlY3QgZHJldyB0byB0aGUgcmVuZGVyZXIsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBwb3N0UmVuZGVyQ2FudmFzOiBmdW5jdGlvbiAoY3R4KVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5pc1J1bm5pbmcgJiYgIXRoaXMuaXNDb21wbGV0ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLmNhbWVyYTtcclxuXHJcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICdyZ2JhKCcgKyB0aGlzLnJlZCArICcsJyArIHRoaXMuZ3JlZW4gKyAnLCcgKyB0aGlzLmJsdWUgKyAnLCcgKyB0aGlzLmFscGhhICsgJyknO1xyXG4gICAgICAgIGN0eC5maWxsUmVjdChjYW1lcmEuX2N4LCBjYW1lcmEuX2N5LCBjYW1lcmEuX2N3LCBjYW1lcmEuX2NoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGludGVybmFsbHkgYnkgdGhlIFdlYkdMIFJlbmRlcmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZhZGUjcG9zdFJlbmRlcldlYkdMXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5QaXBlbGluZXMuVGV4dHVyZVRpbnRQaXBlbGluZX0gcGlwZWxpbmUgLSBUaGUgV2ViR0wgUGlwZWxpbmUgdG8gcmVuZGVyIHRvLlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gZ2V0VGludEZ1bmN0aW9uIC0gQSBmdW5jdGlvbiB0aGF0IHdpbGwgcmV0dXJuIHRoZSBnbCBzYWZlIHRpbnQgY29sb3JzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZWZmZWN0IGRyZXcgdG8gdGhlIHJlbmRlcmVyLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgcG9zdFJlbmRlcldlYkdMOiBmdW5jdGlvbiAocGlwZWxpbmUsIGdldFRpbnRGdW5jdGlvbilcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNSdW5uaW5nICYmICF0aGlzLmlzQ29tcGxldGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5jYW1lcmE7XHJcbiAgICAgICAgdmFyIHJlZCA9IHRoaXMucmVkIC8gMjU1O1xyXG4gICAgICAgIHZhciBibHVlID0gdGhpcy5ibHVlIC8gMjU1O1xyXG4gICAgICAgIHZhciBncmVlbiA9IHRoaXMuZ3JlZW4gLyAyNTU7XHJcblxyXG4gICAgICAgIHBpcGVsaW5lLmRyYXdGaWxsUmVjdChcclxuICAgICAgICAgICAgY2FtZXJhLl9jeCwgY2FtZXJhLl9jeSwgY2FtZXJhLl9jdywgY2FtZXJhLl9jaCxcclxuICAgICAgICAgICAgZ2V0VGludEZ1bmN0aW9uKHJlZCwgZ3JlZW4sIGJsdWUsIDEpLFxyXG4gICAgICAgICAgICB0aGlzLmFscGhhXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGludGVybmFsbHkgd2hlbiB0aGUgZWZmZWN0IGNvbXBsZXRlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5GYWRlI2VmZmVjdENvbXBsZXRlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjRkFERV9JTl9DT01QTEVURVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI0ZBREVfT1VUX0NPTVBMRVRFXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqL1xyXG4gICAgZWZmZWN0Q29tcGxldGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlU2NvcGUgPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLmlzUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNDb21wbGV0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHZhciBldmVudE5hbWUgPSAodGhpcy5kaXJlY3Rpb24pID8gRXZlbnRzLkZBREVfT1VUX0NPTVBMRVRFIDogRXZlbnRzLkZBREVfSU5fQ09NUExFVEU7XHJcblxyXG4gICAgICAgIHRoaXMuY2FtZXJhLmVtaXQoZXZlbnROYW1lLCB0aGlzLmNhbWVyYSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXRzIHRoaXMgY2FtZXJhIGVmZmVjdC5cclxuICAgICAqIElmIGl0IHdhcyBwcmV2aW91c2x5IHJ1bm5pbmcsIGl0IHN0b3BzIGluc3RhbnRseSB3aXRob3V0IGNhbGxpbmcgaXRzIG9uQ29tcGxldGUgY2FsbGJhY2sgb3IgZW1pdHRpbmcgYW4gZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmFkZSNyZXNldFxyXG4gICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgKi9cclxuICAgIHJlc2V0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuaXNSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0NvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9vblVwZGF0ZVNjb3BlID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGlzIGVmZmVjdCwgcmVsZWFzaW5nIGl0IGZyb20gdGhlIENhbWVyYS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5GYWRlI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVzZXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW1lcmEgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEZhZGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/effects/Fade.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/effects/Flash.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/effects/Flash.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Clamp = __webpack_require__(/*! ../../../math/Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/cameras/2d/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Camera Flash effect.\r\n *\r\n * This effect will flash the camera viewport to the given color, over the duration specified.\r\n *\r\n * Only the camera viewport is flashed. None of the objects it is displaying are impacted, i.e. their colors do\r\n * not change.\r\n *\r\n * The effect will dispatch several events on the Camera itself and you can also specify an `onUpdate` callback,\r\n * which is invoked each frame for the duration of the effect, if required.\r\n *\r\n * @class Flash\r\n * @memberof Phaser.Cameras.Scene2D.Effects\r\n * @constructor\r\n * @since 3.5.0\r\n *\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera this effect is acting upon.\r\n */\r\nvar Flash = new Class({\r\n\r\n initialize:\r\n\r\n function Flash (camera)\r\n {\r\n /**\r\n * The Camera this effect belongs to.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Flash#camera\r\n * @type {Phaser.Cameras.Scene2D.Camera}\r\n * @readonly\r\n * @since 3.5.0\r\n */\r\n this.camera = camera;\r\n\r\n /**\r\n * Is this effect actively running?\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Flash#isRunning\r\n * @type {boolean}\r\n * @readonly\r\n * @default false\r\n * @since 3.5.0\r\n */\r\n this.isRunning = false;\r\n\r\n /**\r\n * The duration of the effect, in milliseconds.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Flash#duration\r\n * @type {integer}\r\n * @readonly\r\n * @default 0\r\n * @since 3.5.0\r\n */\r\n this.duration = 0;\r\n\r\n /**\r\n * The value of the red color channel the camera will use for the fade effect.\r\n * A value between 0 and 255.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Flash#red\r\n * @type {integer}\r\n * @private\r\n * @since 3.5.0\r\n */\r\n this.red = 0;\r\n\r\n /**\r\n * The value of the green color channel the camera will use for the fade effect.\r\n * A value between 0 and 255.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Flash#green\r\n * @type {integer}\r\n * @private\r\n * @since 3.5.0\r\n */\r\n this.green = 0;\r\n\r\n /**\r\n * The value of the blue color channel the camera will use for the fade effect.\r\n * A value between 0 and 255.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Flash#blue\r\n * @type {integer}\r\n * @private\r\n * @since 3.5.0\r\n */\r\n this.blue = 0;\r\n\r\n /**\r\n * The value of the alpha channel used during the fade effect.\r\n * A value between 0 and 1.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Flash#alpha\r\n * @type {number}\r\n * @private\r\n * @since 3.5.0\r\n */\r\n this.alpha = 0;\r\n\r\n /**\r\n * If this effect is running this holds the current percentage of the progress, a value between 0 and 1.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Flash#progress\r\n * @type {number}\r\n * @since 3.5.0\r\n */\r\n this.progress = 0;\r\n\r\n /**\r\n * Effect elapsed timer.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Flash#_elapsed\r\n * @type {number}\r\n * @private\r\n * @since 3.5.0\r\n */\r\n this._elapsed = 0;\r\n\r\n /**\r\n * This callback is invoked every frame for the duration of the effect.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Flash#_onUpdate\r\n * @type {?Phaser.Types.Cameras.Scene2D.CameraFlashCallback}\r\n * @private\r\n * @default null\r\n * @since 3.5.0\r\n */\r\n this._onUpdate;\r\n\r\n /**\r\n * On Complete callback scope.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Flash#_onUpdateScope\r\n * @type {any}\r\n * @private\r\n * @since 3.5.0\r\n */\r\n this._onUpdateScope;\r\n },\r\n\r\n /**\r\n * Flashes the Camera to or from the given color over the duration specified.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Flash#start\r\n * @fires Phaser.Cameras.Scene2D.Events#FLASH_START\r\n * @fires Phaser.Cameras.Scene2D.Events#FLASH_COMPLETE\r\n * @since 3.5.0\r\n *\r\n * @param {integer} [duration=250] - The duration of the effect in milliseconds.\r\n * @param {integer} [red=255] - The amount to fade the red channel towards. A value between 0 and 255.\r\n * @param {integer} [green=255] - The amount to fade the green channel towards. A value between 0 and 255.\r\n * @param {integer} [blue=255] - The amount to fade the blue channel towards. A value between 0 and 255.\r\n * @param {boolean} [force=false] - Force the effect to start immediately, even if already running.\r\n * @param {Phaser.Types.Cameras.Scene2D.CameraFlashCallback} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n * It is sent two arguments: A reference to the camera and a progress amount between 0 and 1 indicating how complete the effect is.\r\n * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.Camera} The Camera on which the effect was started.\r\n */\r\n start: function (duration, red, green, blue, force, callback, context)\r\n {\r\n if (duration === undefined) { duration = 250; }\r\n if (red === undefined) { red = 255; }\r\n if (green === undefined) { green = 255; }\r\n if (blue === undefined) { blue = 255; }\r\n if (force === undefined) { force = false; }\r\n if (callback === undefined) { callback = null; }\r\n if (context === undefined) { context = this.camera.scene; }\r\n\r\n if (!force && this.isRunning)\r\n {\r\n return this.camera;\r\n }\r\n\r\n this.isRunning = true;\r\n this.duration = duration;\r\n this.progress = 0;\r\n\r\n this.red = red;\r\n this.green = green;\r\n this.blue = blue;\r\n this.alpha = 1;\r\n\r\n this._elapsed = 0;\r\n\r\n this._onUpdate = callback;\r\n this._onUpdateScope = context;\r\n\r\n this.camera.emit(Events.FLASH_START, this.camera, this, duration, red, green, blue);\r\n\r\n return this.camera;\r\n },\r\n\r\n /**\r\n * The main update loop for this effect. Called automatically by the Camera.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Flash#update\r\n * @since 3.5.0\r\n *\r\n * @param {integer} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n */\r\n update: function (time, delta)\r\n {\r\n if (!this.isRunning)\r\n {\r\n return;\r\n }\r\n\r\n this._elapsed += delta;\r\n\r\n this.progress = Clamp(this._elapsed / this.duration, 0, 1);\r\n\r\n if (this._onUpdate)\r\n {\r\n this._onUpdate.call(this._onUpdateScope, this.camera, this.progress);\r\n }\r\n\r\n if (this._elapsed < this.duration)\r\n {\r\n this.alpha = 1 - this.progress;\r\n }\r\n else\r\n {\r\n this.effectComplete();\r\n }\r\n },\r\n\r\n /**\r\n * Called internally by the Canvas Renderer.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Flash#postRenderCanvas\r\n * @since 3.5.0\r\n *\r\n * @param {CanvasRenderingContext2D} ctx - The Canvas context to render to.\r\n *\r\n * @return {boolean} `true` if the effect drew to the renderer, otherwise `false`.\r\n */\r\n postRenderCanvas: function (ctx)\r\n {\r\n if (!this.isRunning)\r\n {\r\n return false;\r\n }\r\n\r\n var camera = this.camera;\r\n\r\n ctx.fillStyle = 'rgba(' + this.red + ',' + this.green + ',' + this.blue + ',' + this.alpha + ')';\r\n ctx.fillRect(camera._cx, camera._cy, camera._cw, camera._ch);\r\n\r\n return true;\r\n },\r\n\r\n /**\r\n * Called internally by the WebGL Renderer.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Flash#postRenderWebGL\r\n * @since 3.5.0\r\n *\r\n * @param {Phaser.Renderer.WebGL.Pipelines.TextureTintPipeline} pipeline - The WebGL Pipeline to render to.\r\n * @param {function} getTintFunction - A function that will return the gl safe tint colors.\r\n *\r\n * @return {boolean} `true` if the effect drew to the renderer, otherwise `false`.\r\n */\r\n postRenderWebGL: function (pipeline, getTintFunction)\r\n {\r\n if (!this.isRunning)\r\n {\r\n return false;\r\n }\r\n\r\n var camera = this.camera;\r\n var red = this.red / 255;\r\n var blue = this.blue / 255;\r\n var green = this.green / 255;\r\n\r\n pipeline.drawFillRect(\r\n camera._cx, camera._cy, camera._cw, camera._ch,\r\n getTintFunction(red, green, blue, 1),\r\n this.alpha\r\n );\r\n\r\n return true;\r\n },\r\n\r\n /**\r\n * Called internally when the effect completes.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Flash#effectComplete\r\n * @fires Phaser.Cameras.Scene2D.Events#FLASH_COMPLETE\r\n * @since 3.5.0\r\n */\r\n effectComplete: function ()\r\n {\r\n this._onUpdate = null;\r\n this._onUpdateScope = null;\r\n\r\n this.isRunning = false;\r\n\r\n this.camera.emit(Events.FLASH_COMPLETE, this.camera, this);\r\n },\r\n\r\n /**\r\n * Resets this camera effect.\r\n * If it was previously running, it stops instantly without calling its onComplete callback or emitting an event.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Flash#reset\r\n * @since 3.5.0\r\n */\r\n reset: function ()\r\n {\r\n this.isRunning = false;\r\n\r\n this._onUpdate = null;\r\n this._onUpdateScope = null;\r\n },\r\n\r\n /**\r\n * Destroys this effect, releasing it from the Camera.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Flash#destroy\r\n * @since 3.5.0\r\n */\r\n destroy: function ()\r\n {\r\n this.reset();\r\n\r\n this.camera = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Flash;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2VmZmVjdHMvRmxhc2guanM/YzZmMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG9FQUFxQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsc0VBQXNCO0FBQzFDLGFBQWEsbUJBQU8sQ0FBQyx1RUFBVzs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQThCO0FBQ3pDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLGlEQUFpRDtBQUNoRTtBQUNBLGVBQWUsSUFBSTtBQUNuQjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLGdCQUFnQjtBQUNyRCxnQ0FBZ0MsV0FBVztBQUMzQyxrQ0FBa0MsYUFBYTtBQUMvQyxpQ0FBaUMsWUFBWTtBQUM3QyxrQ0FBa0MsZUFBZTtBQUNqRCxxQ0FBcUMsaUJBQWlCO0FBQ3RELG9DQUFvQyw2QkFBNkI7O0FBRWpFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUseUJBQXlCO0FBQ3hDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvREFBb0Q7QUFDbkUsZUFBZSxTQUFTO0FBQ3hCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NhbWVyYXMvMmQvZWZmZWN0cy9GbGFzaC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYW1wID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aC9DbGFtcCcpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgRXZlbnRzID0gcmVxdWlyZSgnLi4vZXZlbnRzJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIENhbWVyYSBGbGFzaCBlZmZlY3QuXHJcbiAqXHJcbiAqIFRoaXMgZWZmZWN0IHdpbGwgZmxhc2ggdGhlIGNhbWVyYSB2aWV3cG9ydCB0byB0aGUgZ2l2ZW4gY29sb3IsIG92ZXIgdGhlIGR1cmF0aW9uIHNwZWNpZmllZC5cclxuICpcclxuICogT25seSB0aGUgY2FtZXJhIHZpZXdwb3J0IGlzIGZsYXNoZWQuIE5vbmUgb2YgdGhlIG9iamVjdHMgaXQgaXMgZGlzcGxheWluZyBhcmUgaW1wYWN0ZWQsIGkuZS4gdGhlaXIgY29sb3JzIGRvXHJcbiAqIG5vdCBjaGFuZ2UuXHJcbiAqXHJcbiAqIFRoZSBlZmZlY3Qgd2lsbCBkaXNwYXRjaCBzZXZlcmFsIGV2ZW50cyBvbiB0aGUgQ2FtZXJhIGl0c2VsZiBhbmQgeW91IGNhbiBhbHNvIHNwZWNpZnkgYW4gYG9uVXBkYXRlYCBjYWxsYmFjayxcclxuICogd2hpY2ggaXMgaW52b2tlZCBlYWNoIGZyYW1lIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdCwgaWYgcmVxdWlyZWQuXHJcbiAqXHJcbiAqIEBjbGFzcyBGbGFzaFxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy41LjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIGNhbWVyYSB0aGlzIGVmZmVjdCBpcyBhY3RpbmcgdXBvbi5cclxuICovXHJcbnZhciBGbGFzaCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBGbGFzaCAoY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBDYW1lcmEgdGhpcyBlZmZlY3QgYmVsb25ncyB0by5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5GbGFzaCNjYW1lcmFcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYW1lcmEgPSBjYW1lcmE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElzIHRoaXMgZWZmZWN0IGFjdGl2ZWx5IHJ1bm5pbmc/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmxhc2gjaXNSdW5uaW5nXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlzUnVubmluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdCwgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZsYXNoI2R1cmF0aW9uXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZHVyYXRpb24gPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIHJlZCBjb2xvciBjaGFubmVsIHRoZSBjYW1lcmEgd2lsbCB1c2UgZm9yIHRoZSBmYWRlIGVmZmVjdC5cclxuICAgICAgICAgKiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZsYXNoI3JlZFxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZWQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIGdyZWVuIGNvbG9yIGNoYW5uZWwgdGhlIGNhbWVyYSB3aWxsIHVzZSBmb3IgdGhlIGZhZGUgZWZmZWN0LlxyXG4gICAgICAgICAqIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmxhc2gjZ3JlZW5cclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZ3JlZW4gPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIGJsdWUgY29sb3IgY2hhbm5lbCB0aGUgY2FtZXJhIHdpbGwgdXNlIGZvciB0aGUgZmFkZSBlZmZlY3QuXHJcbiAgICAgICAgICogQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5GbGFzaCNibHVlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJsdWUgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIGFscGhhIGNoYW5uZWwgdXNlZCBkdXJpbmcgdGhlIGZhZGUgZWZmZWN0LlxyXG4gICAgICAgICAqIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZsYXNoI2FscGhhXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWxwaGEgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiB0aGlzIGVmZmVjdCBpcyBydW5uaW5nIHRoaXMgaG9sZHMgdGhlIGN1cnJlbnQgcGVyY2VudGFnZSBvZiB0aGUgcHJvZ3Jlc3MsIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZsYXNoI3Byb2dyZXNzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnByb2dyZXNzID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRWZmZWN0IGVsYXBzZWQgdGltZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmxhc2gjX2VsYXBzZWRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fZWxhcHNlZCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCBldmVyeSBmcmFtZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmxhc2gjX29uVXBkYXRlXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuVHlwZXMuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYUZsYXNoQ2FsbGJhY2t9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE9uIENvbXBsZXRlIGNhbGxiYWNrIHNjb3BlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZsYXNoI19vblVwZGF0ZVNjb3BlXHJcbiAgICAgICAgICogQHR5cGUge2FueX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlU2NvcGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmxhc2hlcyB0aGUgQ2FtZXJhIHRvIG9yIGZyb20gdGhlIGdpdmVuIGNvbG9yIG92ZXIgdGhlIGR1cmF0aW9uIHNwZWNpZmllZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5GbGFzaCNzdGFydFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI0ZMQVNIX1NUQVJUXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjRkxBU0hfQ09NUExFVEVcclxuICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2R1cmF0aW9uPTI1MF0gLSBUaGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdCBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtyZWQ9MjU1XSAtIFRoZSBhbW91bnQgdG8gZmFkZSB0aGUgcmVkIGNoYW5uZWwgdG93YXJkcy4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2dyZWVuPTI1NV0gLSBUaGUgYW1vdW50IHRvIGZhZGUgdGhlIGdyZWVuIGNoYW5uZWwgdG93YXJkcy4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2JsdWU9MjU1XSAtIFRoZSBhbW91bnQgdG8gZmFkZSB0aGUgYmx1ZSBjaGFubmVsIHRvd2FyZHMuIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gLSBGb3JjZSB0aGUgZWZmZWN0IHRvIHN0YXJ0IGltbWVkaWF0ZWx5LCBldmVuIGlmIGFscmVhZHkgcnVubmluZy5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFGbGFzaENhbGxiYWNrfSBbY2FsbGJhY2tdIC0gVGhpcyBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgZXZlcnkgZnJhbWUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gICAgICogSXQgaXMgc2VudCB0d28gYXJndW1lbnRzOiBBIHJlZmVyZW5jZSB0byB0aGUgY2FtZXJhIGFuZCBhIHByb2dyZXNzIGFtb3VudCBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBob3cgY29tcGxldGUgdGhlIGVmZmVjdCBpcy5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbY29udGV4dF0gLSBUaGUgY29udGV4dCBpbiB3aGljaCB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZC4gRGVmYXVsdHMgdG8gdGhlIFNjZW5lIHRvIHdoaWNoIHRoZSBDYW1lcmEgYmVsb25ncy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhlIENhbWVyYSBvbiB3aGljaCB0aGUgZWZmZWN0IHdhcyBzdGFydGVkLlxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKGR1cmF0aW9uLCByZWQsIGdyZWVuLCBibHVlLCBmb3JjZSwgY2FsbGJhY2ssIGNvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGR1cmF0aW9uID09PSB1bmRlZmluZWQpIHsgZHVyYXRpb24gPSAyNTA7IH1cclxuICAgICAgICBpZiAocmVkID09PSB1bmRlZmluZWQpIHsgcmVkID0gMjU1OyB9XHJcbiAgICAgICAgaWYgKGdyZWVuID09PSB1bmRlZmluZWQpIHsgZ3JlZW4gPSAyNTU7IH1cclxuICAgICAgICBpZiAoYmx1ZSA9PT0gdW5kZWZpbmVkKSB7IGJsdWUgPSAyNTU7IH1cclxuICAgICAgICBpZiAoZm9yY2UgPT09IHVuZGVmaW5lZCkgeyBmb3JjZSA9IGZhbHNlOyB9XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHsgY2FsbGJhY2sgPSBudWxsOyB9XHJcbiAgICAgICAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkgeyBjb250ZXh0ID0gdGhpcy5jYW1lcmEuc2NlbmU7IH1cclxuXHJcbiAgICAgICAgaWYgKCFmb3JjZSAmJiB0aGlzLmlzUnVubmluZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbWVyYTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNSdW5uaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmR1cmF0aW9uID0gZHVyYXRpb247XHJcbiAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMucmVkID0gcmVkO1xyXG4gICAgICAgIHRoaXMuZ3JlZW4gPSBncmVlbjtcclxuICAgICAgICB0aGlzLmJsdWUgPSBibHVlO1xyXG4gICAgICAgIHRoaXMuYWxwaGEgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLl9lbGFwc2VkID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGUgPSBjYWxsYmFjaztcclxuICAgICAgICB0aGlzLl9vblVwZGF0ZVNjb3BlID0gY29udGV4dDtcclxuXHJcbiAgICAgICAgdGhpcy5jYW1lcmEuZW1pdChFdmVudHMuRkxBU0hfU1RBUlQsIHRoaXMuY2FtZXJhLCB0aGlzLCBkdXJhdGlvbiwgcmVkLCBncmVlbiwgYmx1ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbWVyYTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWFpbiB1cGRhdGUgbG9vcCBmb3IgdGhpcyBlZmZlY3QuIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBDYW1lcmEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmxhc2gjdXBkYXRlXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lc3RhbXAgYXMgZ2VuZXJhdGVkIGJ5IHRoZSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSBvciBTZXRUaW1lb3V0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUsIGluIG1zLCBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IGZyYW1lLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICh0aW1lLCBkZWx0YSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZWxhcHNlZCArPSBkZWx0YTtcclxuXHJcbiAgICAgICAgdGhpcy5wcm9ncmVzcyA9IENsYW1wKHRoaXMuX2VsYXBzZWQgLyB0aGlzLmR1cmF0aW9uLCAwLCAxKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX29uVXBkYXRlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fb25VcGRhdGUuY2FsbCh0aGlzLl9vblVwZGF0ZVNjb3BlLCB0aGlzLmNhbWVyYSwgdGhpcy5wcm9ncmVzcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fZWxhcHNlZCA8IHRoaXMuZHVyYXRpb24pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmFscGhhID0gMSAtIHRoaXMucHJvZ3Jlc3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZWZmZWN0Q29tcGxldGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGludGVybmFsbHkgYnkgdGhlIENhbnZhcyBSZW5kZXJlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5GbGFzaCNwb3N0UmVuZGVyQ2FudmFzXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4IC0gVGhlIENhbnZhcyBjb250ZXh0IHRvIHJlbmRlciB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGVmZmVjdCBkcmV3IHRvIHRoZSByZW5kZXJlciwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIHBvc3RSZW5kZXJDYW52YXM6IGZ1bmN0aW9uIChjdHgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzUnVubmluZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLmNhbWVyYTtcclxuXHJcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICdyZ2JhKCcgKyB0aGlzLnJlZCArICcsJyArIHRoaXMuZ3JlZW4gKyAnLCcgKyB0aGlzLmJsdWUgKyAnLCcgKyB0aGlzLmFscGhhICsgJyknO1xyXG4gICAgICAgIGN0eC5maWxsUmVjdChjYW1lcmEuX2N4LCBjYW1lcmEuX2N5LCBjYW1lcmEuX2N3LCBjYW1lcmEuX2NoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGludGVybmFsbHkgYnkgdGhlIFdlYkdMIFJlbmRlcmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZsYXNoI3Bvc3RSZW5kZXJXZWJHTFxyXG4gICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuV2ViR0wuUGlwZWxpbmVzLlRleHR1cmVUaW50UGlwZWxpbmV9IHBpcGVsaW5lIC0gVGhlIFdlYkdMIFBpcGVsaW5lIHRvIHJlbmRlciB0by5cclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGdldFRpbnRGdW5jdGlvbiAtIEEgZnVuY3Rpb24gdGhhdCB3aWxsIHJldHVybiB0aGUgZ2wgc2FmZSB0aW50IGNvbG9ycy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGVmZmVjdCBkcmV3IHRvIHRoZSByZW5kZXJlciwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIHBvc3RSZW5kZXJXZWJHTDogZnVuY3Rpb24gKHBpcGVsaW5lLCBnZXRUaW50RnVuY3Rpb24pXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzUnVubmluZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLmNhbWVyYTtcclxuICAgICAgICB2YXIgcmVkID0gdGhpcy5yZWQgLyAyNTU7XHJcbiAgICAgICAgdmFyIGJsdWUgPSB0aGlzLmJsdWUgLyAyNTU7XHJcbiAgICAgICAgdmFyIGdyZWVuID0gdGhpcy5ncmVlbiAvIDI1NTtcclxuXHJcbiAgICAgICAgcGlwZWxpbmUuZHJhd0ZpbGxSZWN0KFxyXG4gICAgICAgICAgICBjYW1lcmEuX2N4LCBjYW1lcmEuX2N5LCBjYW1lcmEuX2N3LCBjYW1lcmEuX2NoLFxyXG4gICAgICAgICAgICBnZXRUaW50RnVuY3Rpb24ocmVkLCBncmVlbiwgYmx1ZSwgMSksXHJcbiAgICAgICAgICAgIHRoaXMuYWxwaGFcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgaW50ZXJuYWxseSB3aGVuIHRoZSBlZmZlY3QgY29tcGxldGVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZsYXNoI2VmZmVjdENvbXBsZXRlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjRkxBU0hfQ09NUExFVEVcclxuICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICovXHJcbiAgICBlZmZlY3RDb21wbGV0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9vblVwZGF0ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGVTY29wZSA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuaXNSdW5uaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuY2FtZXJhLmVtaXQoRXZlbnRzLkZMQVNIX0NPTVBMRVRFLCB0aGlzLmNhbWVyYSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXRzIHRoaXMgY2FtZXJhIGVmZmVjdC5cclxuICAgICAqIElmIGl0IHdhcyBwcmV2aW91c2x5IHJ1bm5pbmcsIGl0IHN0b3BzIGluc3RhbnRseSB3aXRob3V0IGNhbGxpbmcgaXRzIG9uQ29tcGxldGUgY2FsbGJhY2sgb3IgZW1pdHRpbmcgYW4gZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmxhc2gjcmVzZXRcclxuICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICovXHJcbiAgICByZXNldDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmlzUnVubmluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLl9vblVwZGF0ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGVTY29wZSA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhpcyBlZmZlY3QsIHJlbGVhc2luZyBpdCBmcm9tIHRoZSBDYW1lcmEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmxhc2gjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLmNhbWVyYSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRmxhc2g7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/effects/Flash.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/effects/Pan.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/effects/Pan.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Clamp = __webpack_require__(/*! ../../../math/Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar EaseMap = __webpack_require__(/*! ../../../math/easing/EaseMap */ \"./node_modules/phaser/src/math/easing/EaseMap.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/cameras/2d/events/index.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Camera Pan effect.\r\n *\r\n * This effect will scroll the Camera so that the center of its viewport finishes at the given destination,\r\n * over the duration and with the ease specified.\r\n *\r\n * Only the camera scroll is moved. None of the objects it is displaying are impacted, i.e. their positions do\r\n * not change.\r\n *\r\n * The effect will dispatch several events on the Camera itself and you can also specify an `onUpdate` callback,\r\n * which is invoked each frame for the duration of the effect if required.\r\n *\r\n * @class Pan\r\n * @memberof Phaser.Cameras.Scene2D.Effects\r\n * @constructor\r\n * @since 3.11.0\r\n *\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera this effect is acting upon.\r\n */\r\nvar Pan = new Class({\r\n\r\n initialize:\r\n\r\n function Pan (camera)\r\n {\r\n /**\r\n * The Camera this effect belongs to.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Pan#camera\r\n * @type {Phaser.Cameras.Scene2D.Camera}\r\n * @readonly\r\n * @since 3.11.0\r\n */\r\n this.camera = camera;\r\n\r\n /**\r\n * Is this effect actively running?\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Pan#isRunning\r\n * @type {boolean}\r\n * @readonly\r\n * @default false\r\n * @since 3.11.0\r\n */\r\n this.isRunning = false;\r\n\r\n /**\r\n * The duration of the effect, in milliseconds.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Pan#duration\r\n * @type {integer}\r\n * @readonly\r\n * @default 0\r\n * @since 3.11.0\r\n */\r\n this.duration = 0;\r\n\r\n /**\r\n * The starting scroll coordinates to pan the camera from.\r\n * \r\n * @name Phaser.Cameras.Scene2D.Effects.Pan#source\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.11.0\r\n */\r\n this.source = new Vector2();\r\n\r\n /**\r\n * The constantly updated value based on zoom.\r\n * \r\n * @name Phaser.Cameras.Scene2D.Effects.Pan#current\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.11.0\r\n */\r\n this.current = new Vector2();\r\n\r\n /**\r\n * The destination scroll coordinates to pan the camera to.\r\n * \r\n * @name Phaser.Cameras.Scene2D.Effects.Pan#destination\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.11.0\r\n */\r\n this.destination = new Vector2();\r\n\r\n /**\r\n * The ease function to use during the pan.\r\n * \r\n * @name Phaser.Cameras.Scene2D.Effects.Pan#ease\r\n * @type {function}\r\n * @since 3.11.0\r\n */\r\n this.ease;\r\n\r\n /**\r\n * If this effect is running this holds the current percentage of the progress, a value between 0 and 1.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Pan#progress\r\n * @type {number}\r\n * @since 3.11.0\r\n */\r\n this.progress = 0;\r\n\r\n /**\r\n * Effect elapsed timer.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Pan#_elapsed\r\n * @type {number}\r\n * @private\r\n * @since 3.11.0\r\n */\r\n this._elapsed = 0;\r\n\r\n /**\r\n * This callback is invoked every frame for the duration of the effect.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Pan#_onUpdate\r\n * @type {?Phaser.Types.Cameras.Scene2D.CameraPanCallback}\r\n * @private\r\n * @default null\r\n * @since 3.11.0\r\n */\r\n this._onUpdate;\r\n\r\n /**\r\n * On Complete callback scope.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Pan#_onUpdateScope\r\n * @type {any}\r\n * @private\r\n * @since 3.11.0\r\n */\r\n this._onUpdateScope;\r\n },\r\n\r\n /**\r\n * This effect will scroll the Camera so that the center of its viewport finishes at the given destination,\r\n * over the duration and with the ease specified.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Pan#start\r\n * @fires Phaser.Cameras.Scene2D.Events#PAN_START\r\n * @fires Phaser.Cameras.Scene2D.Events#PAN_COMPLETE\r\n * @since 3.11.0\r\n *\r\n * @param {number} x - The destination x coordinate to scroll the center of the Camera viewport to.\r\n * @param {number} y - The destination y coordinate to scroll the center of the Camera viewport to.\r\n * @param {integer} [duration=1000] - The duration of the effect in milliseconds.\r\n * @param {(string|function)} [ease='Linear'] - The ease to use for the pan. Can be any of the Phaser Easing constants or a custom function.\r\n * @param {boolean} [force=false] - Force the pan effect to start immediately, even if already running.\r\n * @param {Phaser.Types.Cameras.Scene2D.CameraPanCallback} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n * It is sent four arguments: A reference to the camera, a progress amount between 0 and 1 indicating how complete the effect is,\r\n * the current camera scroll x coordinate and the current camera scroll y coordinate.\r\n * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.Camera} The Camera on which the effect was started.\r\n */\r\n start: function (x, y, duration, ease, force, callback, context)\r\n {\r\n if (duration === undefined) { duration = 1000; }\r\n if (ease === undefined) { ease = EaseMap.Linear; }\r\n if (force === undefined) { force = false; }\r\n if (callback === undefined) { callback = null; }\r\n if (context === undefined) { context = this.camera.scene; }\r\n\r\n var cam = this.camera;\r\n\r\n if (!force && this.isRunning)\r\n {\r\n return cam;\r\n }\r\n\r\n this.isRunning = true;\r\n this.duration = duration;\r\n this.progress = 0;\r\n\r\n // Starting from\r\n this.source.set(cam.scrollX, cam.scrollY);\r\n\r\n // Destination\r\n this.destination.set(x, y);\r\n\r\n // Zoom factored version\r\n cam.getScroll(x, y, this.current);\r\n\r\n // Using this ease\r\n if (typeof ease === 'string' && EaseMap.hasOwnProperty(ease))\r\n {\r\n this.ease = EaseMap[ease];\r\n }\r\n else if (typeof ease === 'function')\r\n {\r\n this.ease = ease;\r\n }\r\n\r\n this._elapsed = 0;\r\n\r\n this._onUpdate = callback;\r\n this._onUpdateScope = context;\r\n\r\n this.camera.emit(Events.PAN_START, this.camera, this, duration, x, y);\r\n\r\n return cam;\r\n },\r\n\r\n /**\r\n * The main update loop for this effect. Called automatically by the Camera.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Pan#update\r\n * @since 3.11.0\r\n *\r\n * @param {integer} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n */\r\n update: function (time, delta)\r\n {\r\n if (!this.isRunning)\r\n {\r\n return;\r\n }\r\n\r\n this._elapsed += delta;\r\n\r\n var progress = Clamp(this._elapsed / this.duration, 0, 1);\r\n\r\n this.progress = progress;\r\n\r\n var cam = this.camera;\r\n\r\n if (this._elapsed < this.duration)\r\n {\r\n var v = this.ease(progress);\r\n\r\n cam.getScroll(this.destination.x, this.destination.y, this.current);\r\n\r\n var x = this.source.x + ((this.current.x - this.source.x) * v);\r\n var y = this.source.y + ((this.current.y - this.source.y) * v);\r\n\r\n cam.setScroll(x, y);\r\n\r\n if (this._onUpdate)\r\n {\r\n this._onUpdate.call(this._onUpdateScope, cam, progress, x, y);\r\n }\r\n }\r\n else\r\n {\r\n cam.centerOn(this.destination.x, this.destination.y);\r\n\r\n if (this._onUpdate)\r\n {\r\n this._onUpdate.call(this._onUpdateScope, cam, progress, cam.scrollX, cam.scrollY);\r\n }\r\n \r\n this.effectComplete();\r\n }\r\n },\r\n\r\n /**\r\n * Called internally when the effect completes.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Pan#effectComplete\r\n * @fires Phaser.Cameras.Scene2D.Events#PAN_COMPLETE\r\n * @since 3.11.0\r\n */\r\n effectComplete: function ()\r\n {\r\n this._onUpdate = null;\r\n this._onUpdateScope = null;\r\n\r\n this.isRunning = false;\r\n\r\n this.camera.emit(Events.PAN_COMPLETE, this.camera, this);\r\n },\r\n\r\n /**\r\n * Resets this camera effect.\r\n * If it was previously running, it stops instantly without calling its onComplete callback or emitting an event.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Pan#reset\r\n * @since 3.11.0\r\n */\r\n reset: function ()\r\n {\r\n this.isRunning = false;\r\n\r\n this._onUpdate = null;\r\n this._onUpdateScope = null;\r\n },\r\n\r\n /**\r\n * Destroys this effect, releasing it from the Camera.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Pan#destroy\r\n * @since 3.11.0\r\n */\r\n destroy: function ()\r\n {\r\n this.reset();\r\n\r\n this.camera = null;\r\n this.source = null;\r\n this.destination = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Pan;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2VmZmVjdHMvUGFuLmpzPzI0YWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxvRUFBcUI7QUFDekMsWUFBWSxtQkFBTyxDQUFDLHNFQUFzQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsc0ZBQThCO0FBQ3BELGFBQWEsbUJBQU8sQ0FBQyx1RUFBVztBQUNoQyxjQUFjLG1CQUFPLENBQUMsd0VBQXVCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLGtCQUFrQjtBQUNqQyxlQUFlLFFBQVE7QUFDdkIsZUFBZSwrQ0FBK0M7QUFDOUQ7QUFDQTtBQUNBLGVBQWUsSUFBSTtBQUNuQjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLGlCQUFpQjtBQUN0RCxpQ0FBaUMsdUJBQXVCO0FBQ3hELGtDQUFrQyxlQUFlO0FBQ2pELHFDQUFxQyxpQkFBaUI7QUFDdEQsb0NBQW9DLDZCQUE2Qjs7QUFFakU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2VmZmVjdHMvUGFuLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhbXAgPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoL0NsYW1wJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBFYXNlTWFwID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aC9lYXNpbmcvRWFzZU1hcCcpO1xyXG52YXIgRXZlbnRzID0gcmVxdWlyZSgnLi4vZXZlbnRzJyk7XHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aC9WZWN0b3IyJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIENhbWVyYSBQYW4gZWZmZWN0LlxyXG4gKlxyXG4gKiBUaGlzIGVmZmVjdCB3aWxsIHNjcm9sbCB0aGUgQ2FtZXJhIHNvIHRoYXQgdGhlIGNlbnRlciBvZiBpdHMgdmlld3BvcnQgZmluaXNoZXMgYXQgdGhlIGdpdmVuIGRlc3RpbmF0aW9uLFxyXG4gKiBvdmVyIHRoZSBkdXJhdGlvbiBhbmQgd2l0aCB0aGUgZWFzZSBzcGVjaWZpZWQuXHJcbiAqXHJcbiAqIE9ubHkgdGhlIGNhbWVyYSBzY3JvbGwgaXMgbW92ZWQuIE5vbmUgb2YgdGhlIG9iamVjdHMgaXQgaXMgZGlzcGxheWluZyBhcmUgaW1wYWN0ZWQsIGkuZS4gdGhlaXIgcG9zaXRpb25zIGRvXHJcbiAqIG5vdCBjaGFuZ2UuXHJcbiAqXHJcbiAqIFRoZSBlZmZlY3Qgd2lsbCBkaXNwYXRjaCBzZXZlcmFsIGV2ZW50cyBvbiB0aGUgQ2FtZXJhIGl0c2VsZiBhbmQgeW91IGNhbiBhbHNvIHNwZWNpZnkgYW4gYG9uVXBkYXRlYCBjYWxsYmFjayxcclxuICogd2hpY2ggaXMgaW52b2tlZCBlYWNoIGZyYW1lIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdCBpZiByZXF1aXJlZC5cclxuICpcclxuICogQGNsYXNzIFBhblxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4xMS4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBjYW1lcmEgdGhpcyBlZmZlY3QgaXMgYWN0aW5nIHVwb24uXHJcbiAqL1xyXG52YXIgUGFuID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFBhbiAoY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBDYW1lcmEgdGhpcyBlZmZlY3QgYmVsb25ncyB0by5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5QYW4jY2FtZXJhXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNhbWVyYSA9IGNhbWVyYTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXMgdGhpcyBlZmZlY3QgYWN0aXZlbHkgcnVubmluZz9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5QYW4jaXNSdW5uaW5nXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QsIGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5QYW4jZHVyYXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZHVyYXRpb24gPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc3RhcnRpbmcgc2Nyb2xsIGNvb3JkaW5hdGVzIHRvIHBhbiB0aGUgY2FtZXJhIGZyb20uXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlBhbiNzb3VyY2VcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBuZXcgVmVjdG9yMigpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY29uc3RhbnRseSB1cGRhdGVkIHZhbHVlIGJhc2VkIG9uIHpvb20uXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlBhbiNjdXJyZW50XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBkZXN0aW5hdGlvbiBzY3JvbGwgY29vcmRpbmF0ZXMgdG8gcGFuIHRoZSBjYW1lcmEgdG8uXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlBhbiNkZXN0aW5hdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gbmV3IFZlY3RvcjIoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGVhc2UgZnVuY3Rpb24gdG8gdXNlIGR1cmluZyB0aGUgcGFuLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5QYW4jZWFzZVxyXG4gICAgICAgICAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5lYXNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiB0aGlzIGVmZmVjdCBpcyBydW5uaW5nIHRoaXMgaG9sZHMgdGhlIGN1cnJlbnQgcGVyY2VudGFnZSBvZiB0aGUgcHJvZ3Jlc3MsIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlBhbiNwcm9ncmVzc1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBFZmZlY3QgZWxhcHNlZCB0aW1lci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5QYW4jX2VsYXBzZWRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2VsYXBzZWQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGlzIGNhbGxiYWNrIGlzIGludm9rZWQgZXZlcnkgZnJhbWUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlBhbiNfb25VcGRhdGVcclxuICAgICAgICAgKiBAdHlwZSB7P1BoYXNlci5UeXBlcy5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhUGFuQ2FsbGJhY2t9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBPbiBDb21wbGV0ZSBjYWxsYmFjayBzY29wZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5QYW4jX29uVXBkYXRlU2NvcGVcclxuICAgICAgICAgKiBAdHlwZSB7YW55fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlU2NvcGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBlZmZlY3Qgd2lsbCBzY3JvbGwgdGhlIENhbWVyYSBzbyB0aGF0IHRoZSBjZW50ZXIgb2YgaXRzIHZpZXdwb3J0IGZpbmlzaGVzIGF0IHRoZSBnaXZlbiBkZXN0aW5hdGlvbixcclxuICAgICAqIG92ZXIgdGhlIGR1cmF0aW9uIGFuZCB3aXRoIHRoZSBlYXNlIHNwZWNpZmllZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5QYW4jc3RhcnRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNQQU5fU1RBUlRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNQQU5fQ09NUExFVEVcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBkZXN0aW5hdGlvbiB4IGNvb3JkaW5hdGUgdG8gc2Nyb2xsIHRoZSBjZW50ZXIgb2YgdGhlIENhbWVyYSB2aWV3cG9ydCB0by5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIGRlc3RpbmF0aW9uIHkgY29vcmRpbmF0ZSB0byBzY3JvbGwgdGhlIGNlbnRlciBvZiB0aGUgQ2FtZXJhIHZpZXdwb3J0IHRvLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZHVyYXRpb249MTAwMF0gLSBUaGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdCBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8ZnVuY3Rpb24pfSBbZWFzZT0nTGluZWFyJ10gLSBUaGUgZWFzZSB0byB1c2UgZm9yIHRoZSBwYW4uIENhbiBiZSBhbnkgb2YgdGhlIFBoYXNlciBFYXNpbmcgY29uc3RhbnRzIG9yIGEgY3VzdG9tIGZ1bmN0aW9uLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZm9yY2U9ZmFsc2VdIC0gRm9yY2UgdGhlIHBhbiBlZmZlY3QgdG8gc3RhcnQgaW1tZWRpYXRlbHksIGV2ZW4gaWYgYWxyZWFkeSBydW5uaW5nLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYVBhbkNhbGxiYWNrfSBbY2FsbGJhY2tdIC0gVGhpcyBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgZXZlcnkgZnJhbWUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gICAgICogSXQgaXMgc2VudCBmb3VyIGFyZ3VtZW50czogQSByZWZlcmVuY2UgdG8gdGhlIGNhbWVyYSwgYSBwcm9ncmVzcyBhbW91bnQgYmV0d2VlbiAwIGFuZCAxIGluZGljYXRpbmcgaG93IGNvbXBsZXRlIHRoZSBlZmZlY3QgaXMsXHJcbiAgICAgKiB0aGUgY3VycmVudCBjYW1lcmEgc2Nyb2xsIHggY29vcmRpbmF0ZSBhbmQgdGhlIGN1cnJlbnQgY2FtZXJhIHNjcm9sbCB5IGNvb3JkaW5hdGUuXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gW2NvbnRleHRdIC0gVGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIGNhbGxiYWNrIGlzIGludm9rZWQuIERlZmF1bHRzIHRvIHRoZSBTY2VuZSB0byB3aGljaCB0aGUgQ2FtZXJhIGJlbG9uZ3MuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IFRoZSBDYW1lcmEgb24gd2hpY2ggdGhlIGVmZmVjdCB3YXMgc3RhcnRlZC5cclxuICAgICAqL1xyXG4gICAgc3RhcnQ6IGZ1bmN0aW9uICh4LCB5LCBkdXJhdGlvbiwgZWFzZSwgZm9yY2UsIGNhbGxiYWNrLCBjb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChkdXJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7IGR1cmF0aW9uID0gMTAwMDsgfVxyXG4gICAgICAgIGlmIChlYXNlID09PSB1bmRlZmluZWQpIHsgZWFzZSA9IEVhc2VNYXAuTGluZWFyOyB9XHJcbiAgICAgICAgaWYgKGZvcmNlID09PSB1bmRlZmluZWQpIHsgZm9yY2UgPSBmYWxzZTsgfVxyXG4gICAgICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7IGNhbGxiYWNrID0gbnVsbDsgfVxyXG4gICAgICAgIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHsgY29udGV4dCA9IHRoaXMuY2FtZXJhLnNjZW5lOyB9XHJcblxyXG4gICAgICAgIHZhciBjYW0gPSB0aGlzLmNhbWVyYTtcclxuXHJcbiAgICAgICAgaWYgKCFmb3JjZSAmJiB0aGlzLmlzUnVubmluZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBjYW07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzUnVubmluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kdXJhdGlvbiA9IGR1cmF0aW9uO1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xyXG5cclxuICAgICAgICAvLyAgU3RhcnRpbmcgZnJvbVxyXG4gICAgICAgIHRoaXMuc291cmNlLnNldChjYW0uc2Nyb2xsWCwgY2FtLnNjcm9sbFkpO1xyXG5cclxuICAgICAgICAvLyAgRGVzdGluYXRpb25cclxuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLnNldCh4LCB5KTtcclxuXHJcbiAgICAgICAgLy8gIFpvb20gZmFjdG9yZWQgdmVyc2lvblxyXG4gICAgICAgIGNhbS5nZXRTY3JvbGwoeCwgeSwgdGhpcy5jdXJyZW50KTtcclxuXHJcbiAgICAgICAgLy8gIFVzaW5nIHRoaXMgZWFzZVxyXG4gICAgICAgIGlmICh0eXBlb2YgZWFzZSA9PT0gJ3N0cmluZycgJiYgRWFzZU1hcC5oYXNPd25Qcm9wZXJ0eShlYXNlKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZWFzZSA9IEVhc2VNYXBbZWFzZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBlYXNlID09PSAnZnVuY3Rpb24nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5lYXNlID0gZWFzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2VsYXBzZWQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLl9vblVwZGF0ZSA9IGNhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlU2NvcGUgPSBjb250ZXh0O1xyXG5cclxuICAgICAgICB0aGlzLmNhbWVyYS5lbWl0KEV2ZW50cy5QQU5fU1RBUlQsIHRoaXMuY2FtZXJhLCB0aGlzLCBkdXJhdGlvbiwgeCwgeSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjYW07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1haW4gdXBkYXRlIGxvb3AgZm9yIHRoaXMgZWZmZWN0LiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgQ2FtZXJhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlBhbiN1cGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lc3RhbXAgYXMgZ2VuZXJhdGVkIGJ5IHRoZSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSBvciBTZXRUaW1lb3V0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUsIGluIG1zLCBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IGZyYW1lLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICh0aW1lLCBkZWx0YSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZWxhcHNlZCArPSBkZWx0YTtcclxuXHJcbiAgICAgICAgdmFyIHByb2dyZXNzID0gQ2xhbXAodGhpcy5fZWxhcHNlZCAvIHRoaXMuZHVyYXRpb24sIDAsIDEpO1xyXG5cclxuICAgICAgICB0aGlzLnByb2dyZXNzID0gcHJvZ3Jlc3M7XHJcblxyXG4gICAgICAgIHZhciBjYW0gPSB0aGlzLmNhbWVyYTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2VsYXBzZWQgPCB0aGlzLmR1cmF0aW9uKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHYgPSB0aGlzLmVhc2UocHJvZ3Jlc3MpO1xyXG5cclxuICAgICAgICAgICAgY2FtLmdldFNjcm9sbCh0aGlzLmRlc3RpbmF0aW9uLngsIHRoaXMuZGVzdGluYXRpb24ueSwgdGhpcy5jdXJyZW50KTtcclxuXHJcbiAgICAgICAgICAgIHZhciB4ID0gdGhpcy5zb3VyY2UueCArICgodGhpcy5jdXJyZW50LnggLSB0aGlzLnNvdXJjZS54KSAqIHYpO1xyXG4gICAgICAgICAgICB2YXIgeSA9IHRoaXMuc291cmNlLnkgKyAoKHRoaXMuY3VycmVudC55IC0gdGhpcy5zb3VyY2UueSkgKiB2KTtcclxuXHJcbiAgICAgICAgICAgIGNhbS5zZXRTY3JvbGwoeCwgeSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fb25VcGRhdGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX29uVXBkYXRlLmNhbGwodGhpcy5fb25VcGRhdGVTY29wZSwgY2FtLCBwcm9ncmVzcywgeCwgeSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2FtLmNlbnRlck9uKHRoaXMuZGVzdGluYXRpb24ueCwgdGhpcy5kZXN0aW5hdGlvbi55KTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9vblVwZGF0ZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb25VcGRhdGUuY2FsbCh0aGlzLl9vblVwZGF0ZVNjb3BlLCBjYW0sIHByb2dyZXNzLCBjYW0uc2Nyb2xsWCwgY2FtLnNjcm9sbFkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdGhpcy5lZmZlY3RDb21wbGV0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgaW50ZXJuYWxseSB3aGVuIHRoZSBlZmZlY3QgY29tcGxldGVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlBhbiNlZmZlY3RDb21wbGV0ZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI1BBTl9DT01QTEVURVxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICovXHJcbiAgICBlZmZlY3RDb21wbGV0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9vblVwZGF0ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGVTY29wZSA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuaXNSdW5uaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuY2FtZXJhLmVtaXQoRXZlbnRzLlBBTl9DT01QTEVURSwgdGhpcy5jYW1lcmEsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGlzIGNhbWVyYSBlZmZlY3QuXHJcbiAgICAgKiBJZiBpdCB3YXMgcHJldmlvdXNseSBydW5uaW5nLCBpdCBzdG9wcyBpbnN0YW50bHkgd2l0aG91dCBjYWxsaW5nIGl0cyBvbkNvbXBsZXRlIGNhbGxiYWNrIG9yIGVtaXR0aW5nIGFuIGV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlBhbiNyZXNldFxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICovXHJcbiAgICByZXNldDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmlzUnVubmluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLl9vblVwZGF0ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGVTY29wZSA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhpcyBlZmZlY3QsIHJlbGVhc2luZyBpdCBmcm9tIHRoZSBDYW1lcmEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuUGFuI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuY2FtZXJhID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNvdXJjZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGFuO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/effects/Pan.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/effects/Shake.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/effects/Shake.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Clamp = __webpack_require__(/*! ../../../math/Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/cameras/2d/events/index.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Camera Shake effect.\r\n *\r\n * This effect will shake the camera viewport by a random amount, bounded by the specified intensity, each frame.\r\n *\r\n * Only the camera viewport is moved. None of the objects it is displaying are impacted, i.e. their positions do\r\n * not change.\r\n *\r\n * The effect will dispatch several events on the Camera itself and you can also specify an `onUpdate` callback,\r\n * which is invoked each frame for the duration of the effect if required.\r\n *\r\n * @class Shake\r\n * @memberof Phaser.Cameras.Scene2D.Effects\r\n * @constructor\r\n * @since 3.5.0\r\n *\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera this effect is acting upon.\r\n */\r\nvar Shake = new Class({\r\n\r\n initialize:\r\n\r\n function Shake (camera)\r\n {\r\n /**\r\n * The Camera this effect belongs to.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Shake#camera\r\n * @type {Phaser.Cameras.Scene2D.Camera}\r\n * @readonly\r\n * @since 3.5.0\r\n */\r\n this.camera = camera;\r\n\r\n /**\r\n * Is this effect actively running?\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Shake#isRunning\r\n * @type {boolean}\r\n * @readonly\r\n * @default false\r\n * @since 3.5.0\r\n */\r\n this.isRunning = false;\r\n\r\n /**\r\n * The duration of the effect, in milliseconds.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Shake#duration\r\n * @type {integer}\r\n * @readonly\r\n * @default 0\r\n * @since 3.5.0\r\n */\r\n this.duration = 0;\r\n\r\n /**\r\n * The intensity of the effect. Use small float values. The default when the effect starts is 0.05.\r\n * This is a Vector2 object, allowing you to control the shake intensity independently across x and y.\r\n * You can modify this value while the effect is active to create more varied shake effects.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Shake#intensity\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.5.0\r\n */\r\n this.intensity = new Vector2();\r\n\r\n /**\r\n * If this effect is running this holds the current percentage of the progress, a value between 0 and 1.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Shake#progress\r\n * @type {number}\r\n * @since 3.5.0\r\n */\r\n this.progress = 0;\r\n\r\n /**\r\n * Effect elapsed timer.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Shake#_elapsed\r\n * @type {number}\r\n * @private\r\n * @since 3.5.0\r\n */\r\n this._elapsed = 0;\r\n\r\n /**\r\n * How much to offset the camera by horizontally.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Shake#_offsetX\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this._offsetX = 0;\r\n\r\n /**\r\n * How much to offset the camera by vertically.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Shake#_offsetY\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this._offsetY = 0;\r\n\r\n /**\r\n * This callback is invoked every frame for the duration of the effect.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Shake#_onUpdate\r\n * @type {?Phaser.Types.Cameras.Scene2D.CameraShakeCallback}\r\n * @private\r\n * @default null\r\n * @since 3.5.0\r\n */\r\n this._onUpdate;\r\n\r\n /**\r\n * On Complete callback scope.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Shake#_onUpdateScope\r\n * @type {any}\r\n * @private\r\n * @since 3.5.0\r\n */\r\n this._onUpdateScope;\r\n },\r\n\r\n /**\r\n * Shakes the Camera by the given intensity over the duration specified.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Shake#start\r\n * @fires Phaser.Cameras.Scene2D.Events#SHAKE_START\r\n * @fires Phaser.Cameras.Scene2D.Events#SHAKE_COMPLETE\r\n * @since 3.5.0\r\n *\r\n * @param {integer} [duration=100] - The duration of the effect in milliseconds.\r\n * @param {(number|Phaser.Math.Vector2)} [intensity=0.05] - The intensity of the shake.\r\n * @param {boolean} [force=false] - Force the shake effect to start immediately, even if already running.\r\n * @param {Phaser.Types.Cameras.Scene2D.CameraShakeCallback} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n * It is sent two arguments: A reference to the camera and a progress amount between 0 and 1 indicating how complete the effect is.\r\n * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.Camera} The Camera on which the effect was started.\r\n */\r\n start: function (duration, intensity, force, callback, context)\r\n {\r\n if (duration === undefined) { duration = 100; }\r\n if (intensity === undefined) { intensity = 0.05; }\r\n if (force === undefined) { force = false; }\r\n if (callback === undefined) { callback = null; }\r\n if (context === undefined) { context = this.camera.scene; }\r\n\r\n if (!force && this.isRunning)\r\n {\r\n return this.camera;\r\n }\r\n\r\n this.isRunning = true;\r\n this.duration = duration;\r\n this.progress = 0;\r\n\r\n if (typeof intensity === 'number')\r\n {\r\n this.intensity.set(intensity);\r\n }\r\n else\r\n {\r\n this.intensity.set(intensity.x, intensity.y);\r\n }\r\n\r\n this._elapsed = 0;\r\n this._offsetX = 0;\r\n this._offsetY = 0;\r\n\r\n this._onUpdate = callback;\r\n this._onUpdateScope = context;\r\n\r\n this.camera.emit(Events.SHAKE_START, this.camera, this, duration, intensity);\r\n\r\n return this.camera;\r\n },\r\n\r\n /**\r\n * The pre-render step for this effect. Called automatically by the Camera.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Shake#preRender\r\n * @since 3.5.0\r\n */\r\n preRender: function ()\r\n {\r\n if (this.isRunning)\r\n {\r\n this.camera.matrix.translate(this._offsetX, this._offsetY);\r\n }\r\n },\r\n\r\n /**\r\n * The main update loop for this effect. Called automatically by the Camera.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Shake#update\r\n * @since 3.5.0\r\n *\r\n * @param {integer} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n */\r\n update: function (time, delta)\r\n {\r\n if (!this.isRunning)\r\n {\r\n return;\r\n }\r\n\r\n this._elapsed += delta;\r\n\r\n this.progress = Clamp(this._elapsed / this.duration, 0, 1);\r\n\r\n if (this._onUpdate)\r\n {\r\n this._onUpdate.call(this._onUpdateScope, this.camera, this.progress);\r\n }\r\n\r\n if (this._elapsed < this.duration)\r\n {\r\n var intensity = this.intensity;\r\n var width = this.camera._cw;\r\n var height = this.camera._ch;\r\n var zoom = this.camera.zoom;\r\n\r\n this._offsetX = (Math.random() * intensity.x * width * 2 - intensity.x * width) * zoom;\r\n this._offsetY = (Math.random() * intensity.y * height * 2 - intensity.y * height) * zoom;\r\n\r\n if (this.camera.roundPixels)\r\n {\r\n this._offsetX = Math.round(this._offsetX);\r\n this._offsetY = Math.round(this._offsetY);\r\n }\r\n }\r\n else\r\n {\r\n this.effectComplete();\r\n }\r\n },\r\n\r\n /**\r\n * Called internally when the effect completes.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Shake#effectComplete\r\n * @fires Phaser.Cameras.Scene2D.Events#SHAKE_COMPLETE\r\n * @since 3.5.0\r\n */\r\n effectComplete: function ()\r\n {\r\n this._offsetX = 0;\r\n this._offsetY = 0;\r\n\r\n this._onUpdate = null;\r\n this._onUpdateScope = null;\r\n\r\n this.isRunning = false;\r\n\r\n this.camera.emit(Events.SHAKE_COMPLETE, this.camera, this);\r\n },\r\n\r\n /**\r\n * Resets this camera effect.\r\n * If it was previously running, it stops instantly without calling its onComplete callback or emitting an event.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Shake#reset\r\n * @since 3.5.0\r\n */\r\n reset: function ()\r\n {\r\n this.isRunning = false;\r\n\r\n this._offsetX = 0;\r\n this._offsetY = 0;\r\n\r\n this._onUpdate = null;\r\n this._onUpdateScope = null;\r\n },\r\n\r\n /**\r\n * Destroys this effect, releasing it from the Camera.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Shake#destroy\r\n * @since 3.5.0\r\n */\r\n destroy: function ()\r\n {\r\n this.reset();\r\n\r\n this.camera = null;\r\n this.intensity = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Shake;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2VmZmVjdHMvU2hha2UuanM/YzgyOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG9FQUFxQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsc0VBQXNCO0FBQzFDLGFBQWEsbUJBQU8sQ0FBQyx1RUFBVztBQUNoQyxjQUFjLG1CQUFPLENBQUMsd0VBQXVCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsNkJBQTZCO0FBQzVDLGVBQWUsUUFBUTtBQUN2QixlQUFlLGlEQUFpRDtBQUNoRTtBQUNBLGVBQWUsSUFBSTtBQUNuQjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLGdCQUFnQjtBQUNyRCxzQ0FBc0Msa0JBQWtCO0FBQ3hELGtDQUFrQyxlQUFlO0FBQ2pELHFDQUFxQyxpQkFBaUI7QUFDdEQsb0NBQW9DLDZCQUE2Qjs7QUFFakU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NhbWVyYXMvMmQvZWZmZWN0cy9TaGFrZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYW1wID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aC9DbGFtcCcpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgRXZlbnRzID0gcmVxdWlyZSgnLi4vZXZlbnRzJyk7XHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aC9WZWN0b3IyJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIENhbWVyYSBTaGFrZSBlZmZlY3QuXHJcbiAqXHJcbiAqIFRoaXMgZWZmZWN0IHdpbGwgc2hha2UgdGhlIGNhbWVyYSB2aWV3cG9ydCBieSBhIHJhbmRvbSBhbW91bnQsIGJvdW5kZWQgYnkgdGhlIHNwZWNpZmllZCBpbnRlbnNpdHksIGVhY2ggZnJhbWUuXHJcbiAqXHJcbiAqIE9ubHkgdGhlIGNhbWVyYSB2aWV3cG9ydCBpcyBtb3ZlZC4gTm9uZSBvZiB0aGUgb2JqZWN0cyBpdCBpcyBkaXNwbGF5aW5nIGFyZSBpbXBhY3RlZCwgaS5lLiB0aGVpciBwb3NpdGlvbnMgZG9cclxuICogbm90IGNoYW5nZS5cclxuICpcclxuICogVGhlIGVmZmVjdCB3aWxsIGRpc3BhdGNoIHNldmVyYWwgZXZlbnRzIG9uIHRoZSBDYW1lcmEgaXRzZWxmIGFuZCB5b3UgY2FuIGFsc28gc3BlY2lmeSBhbiBgb25VcGRhdGVgIGNhbGxiYWNrLFxyXG4gKiB3aGljaCBpcyBpbnZva2VkIGVhY2ggZnJhbWUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0IGlmIHJlcXVpcmVkLlxyXG4gKlxyXG4gKiBAY2xhc3MgU2hha2VcclxuICogQG1lbWJlcm9mIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuNS4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBjYW1lcmEgdGhpcyBlZmZlY3QgaXMgYWN0aW5nIHVwb24uXHJcbiAqL1xyXG52YXIgU2hha2UgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gU2hha2UgKGNhbWVyYSlcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQ2FtZXJhIHRoaXMgZWZmZWN0IGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuU2hha2UjY2FtZXJhXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FtZXJhID0gY2FtZXJhO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJcyB0aGlzIGVmZmVjdCBhY3RpdmVseSBydW5uaW5nP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlNoYWtlI2lzUnVubmluZ1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QsIGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5TaGFrZSNkdXJhdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmR1cmF0aW9uID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGludGVuc2l0eSBvZiB0aGUgZWZmZWN0LiBVc2Ugc21hbGwgZmxvYXQgdmFsdWVzLiBUaGUgZGVmYXVsdCB3aGVuIHRoZSBlZmZlY3Qgc3RhcnRzIGlzIDAuMDUuXHJcbiAgICAgICAgICogVGhpcyBpcyBhIFZlY3RvcjIgb2JqZWN0LCBhbGxvd2luZyB5b3UgdG8gY29udHJvbCB0aGUgc2hha2UgaW50ZW5zaXR5IGluZGVwZW5kZW50bHkgYWNyb3NzIHggYW5kIHkuXHJcbiAgICAgICAgICogWW91IGNhbiBtb2RpZnkgdGhpcyB2YWx1ZSB3aGlsZSB0aGUgZWZmZWN0IGlzIGFjdGl2ZSB0byBjcmVhdGUgbW9yZSB2YXJpZWQgc2hha2UgZWZmZWN0cy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5TaGFrZSNpbnRlbnNpdHlcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmludGVuc2l0eSA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHRoaXMgZWZmZWN0IGlzIHJ1bm5pbmcgdGhpcyBob2xkcyB0aGUgY3VycmVudCBwZXJjZW50YWdlIG9mIHRoZSBwcm9ncmVzcywgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuU2hha2UjcHJvZ3Jlc3NcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBFZmZlY3QgZWxhcHNlZCB0aW1lci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5TaGFrZSNfZWxhcHNlZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9lbGFwc2VkID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSG93IG11Y2ggdG8gb2Zmc2V0IHRoZSBjYW1lcmEgYnkgaG9yaXpvbnRhbGx5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlNoYWtlI19vZmZzZXRYXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9vZmZzZXRYID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSG93IG11Y2ggdG8gb2Zmc2V0IHRoZSBjYW1lcmEgYnkgdmVydGljYWxseS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5TaGFrZSNfb2Zmc2V0WVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fb2Zmc2V0WSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCBldmVyeSBmcmFtZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuU2hha2UjX29uVXBkYXRlXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuVHlwZXMuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYVNoYWtlQ2FsbGJhY2t9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE9uIENvbXBsZXRlIGNhbGxiYWNrIHNjb3BlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlNoYWtlI19vblVwZGF0ZVNjb3BlXHJcbiAgICAgICAgICogQHR5cGUge2FueX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlU2NvcGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hha2VzIHRoZSBDYW1lcmEgYnkgdGhlIGdpdmVuIGludGVuc2l0eSBvdmVyIHRoZSBkdXJhdGlvbiBzcGVjaWZpZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuU2hha2Ujc3RhcnRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNTSEFLRV9TVEFSVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI1NIQUtFX0NPTVBMRVRFXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtkdXJhdGlvbj0xMDBdIC0gVGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAgICogQHBhcmFtIHsobnVtYmVyfFBoYXNlci5NYXRoLlZlY3RvcjIpfSBbaW50ZW5zaXR5PTAuMDVdIC0gVGhlIGludGVuc2l0eSBvZiB0aGUgc2hha2UuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gLSBGb3JjZSB0aGUgc2hha2UgZWZmZWN0IHRvIHN0YXJ0IGltbWVkaWF0ZWx5LCBldmVuIGlmIGFscmVhZHkgcnVubmluZy5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmFTaGFrZUNhbGxiYWNrfSBbY2FsbGJhY2tdIC0gVGhpcyBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgZXZlcnkgZnJhbWUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gICAgICogSXQgaXMgc2VudCB0d28gYXJndW1lbnRzOiBBIHJlZmVyZW5jZSB0byB0aGUgY2FtZXJhIGFuZCBhIHByb2dyZXNzIGFtb3VudCBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBob3cgY29tcGxldGUgdGhlIGVmZmVjdCBpcy5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbY29udGV4dF0gLSBUaGUgY29udGV4dCBpbiB3aGljaCB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZC4gRGVmYXVsdHMgdG8gdGhlIFNjZW5lIHRvIHdoaWNoIHRoZSBDYW1lcmEgYmVsb25ncy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gVGhlIENhbWVyYSBvbiB3aGljaCB0aGUgZWZmZWN0IHdhcyBzdGFydGVkLlxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKGR1cmF0aW9uLCBpbnRlbnNpdHksIGZvcmNlLCBjYWxsYmFjaywgY29udGV4dClcclxuICAgIHtcclxuICAgICAgICBpZiAoZHVyYXRpb24gPT09IHVuZGVmaW5lZCkgeyBkdXJhdGlvbiA9IDEwMDsgfVxyXG4gICAgICAgIGlmIChpbnRlbnNpdHkgPT09IHVuZGVmaW5lZCkgeyBpbnRlbnNpdHkgPSAwLjA1OyB9XHJcbiAgICAgICAgaWYgKGZvcmNlID09PSB1bmRlZmluZWQpIHsgZm9yY2UgPSBmYWxzZTsgfVxyXG4gICAgICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7IGNhbGxiYWNrID0gbnVsbDsgfVxyXG4gICAgICAgIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHsgY29udGV4dCA9IHRoaXMuY2FtZXJhLnNjZW5lOyB9XHJcblxyXG4gICAgICAgIGlmICghZm9yY2UgJiYgdGhpcy5pc1J1bm5pbmcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW1lcmE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzUnVubmluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kdXJhdGlvbiA9IGR1cmF0aW9uO1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIGludGVuc2l0eSA9PT0gJ251bWJlcicpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmludGVuc2l0eS5zZXQoaW50ZW5zaXR5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5pbnRlbnNpdHkuc2V0KGludGVuc2l0eS54LCBpbnRlbnNpdHkueSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9lbGFwc2VkID0gMDtcclxuICAgICAgICB0aGlzLl9vZmZzZXRYID0gMDtcclxuICAgICAgICB0aGlzLl9vZmZzZXRZID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGUgPSBjYWxsYmFjaztcclxuICAgICAgICB0aGlzLl9vblVwZGF0ZVNjb3BlID0gY29udGV4dDtcclxuXHJcbiAgICAgICAgdGhpcy5jYW1lcmEuZW1pdChFdmVudHMuU0hBS0VfU1RBUlQsIHRoaXMuY2FtZXJhLCB0aGlzLCBkdXJhdGlvbiwgaW50ZW5zaXR5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FtZXJhO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBwcmUtcmVuZGVyIHN0ZXAgZm9yIHRoaXMgZWZmZWN0LiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgQ2FtZXJhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlNoYWtlI3ByZVJlbmRlclxyXG4gICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgKi9cclxuICAgIHByZVJlbmRlcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5pc1J1bm5pbmcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNhbWVyYS5tYXRyaXgudHJhbnNsYXRlKHRoaXMuX29mZnNldFgsIHRoaXMuX29mZnNldFkpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWFpbiB1cGRhdGUgbG9vcCBmb3IgdGhpcyBlZmZlY3QuIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBDYW1lcmEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuU2hha2UjdXBkYXRlXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lc3RhbXAgYXMgZ2VuZXJhdGVkIGJ5IHRoZSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSBvciBTZXRUaW1lb3V0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUsIGluIG1zLCBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IGZyYW1lLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICh0aW1lLCBkZWx0YSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZWxhcHNlZCArPSBkZWx0YTtcclxuXHJcbiAgICAgICAgdGhpcy5wcm9ncmVzcyA9IENsYW1wKHRoaXMuX2VsYXBzZWQgLyB0aGlzLmR1cmF0aW9uLCAwLCAxKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX29uVXBkYXRlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fb25VcGRhdGUuY2FsbCh0aGlzLl9vblVwZGF0ZVNjb3BlLCB0aGlzLmNhbWVyYSwgdGhpcy5wcm9ncmVzcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fZWxhcHNlZCA8IHRoaXMuZHVyYXRpb24pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gdGhpcy5pbnRlbnNpdHk7XHJcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuY2FtZXJhLl9jdztcclxuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuY2FtZXJhLl9jaDtcclxuICAgICAgICAgICAgdmFyIHpvb20gPSB0aGlzLmNhbWVyYS56b29tO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fb2Zmc2V0WCA9IChNYXRoLnJhbmRvbSgpICogaW50ZW5zaXR5LnggKiB3aWR0aCAqIDIgLSBpbnRlbnNpdHkueCAqIHdpZHRoKSAqIHpvb207XHJcbiAgICAgICAgICAgIHRoaXMuX29mZnNldFkgPSAoTWF0aC5yYW5kb20oKSAqIGludGVuc2l0eS55ICogaGVpZ2h0ICogMiAtIGludGVuc2l0eS55ICogaGVpZ2h0KSAqIHpvb207XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYW1lcmEucm91bmRQaXhlbHMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX29mZnNldFggPSBNYXRoLnJvdW5kKHRoaXMuX29mZnNldFgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb2Zmc2V0WSA9IE1hdGgucm91bmQodGhpcy5fb2Zmc2V0WSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5lZmZlY3RDb21wbGV0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgaW50ZXJuYWxseSB3aGVuIHRoZSBlZmZlY3QgY29tcGxldGVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlNoYWtlI2VmZmVjdENvbXBsZXRlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjU0hBS0VfQ09NUExFVEVcclxuICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICovXHJcbiAgICBlZmZlY3RDb21wbGV0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9vZmZzZXRYID0gMDtcclxuICAgICAgICB0aGlzLl9vZmZzZXRZID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlU2NvcGUgPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLmlzUnVubmluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmNhbWVyYS5lbWl0KEV2ZW50cy5TSEFLRV9DT01QTEVURSwgdGhpcy5jYW1lcmEsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGlzIGNhbWVyYSBlZmZlY3QuXHJcbiAgICAgKiBJZiBpdCB3YXMgcHJldmlvdXNseSBydW5uaW5nLCBpdCBzdG9wcyBpbnN0YW50bHkgd2l0aG91dCBjYWxsaW5nIGl0cyBvbkNvbXBsZXRlIGNhbGxiYWNrIG9yIGVtaXR0aW5nIGFuIGV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlNoYWtlI3Jlc2V0XHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqL1xyXG4gICAgcmVzZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5fb2Zmc2V0WCA9IDA7XHJcbiAgICAgICAgdGhpcy5fb2Zmc2V0WSA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9vblVwZGF0ZVNjb3BlID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGlzIGVmZmVjdCwgcmVsZWFzaW5nIGl0IGZyb20gdGhlIENhbWVyYS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5TaGFrZSNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuY2FtZXJhID0gbnVsbDtcclxuICAgICAgICB0aGlzLmludGVuc2l0eSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2hha2U7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/effects/Shake.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/effects/Zoom.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/effects/Zoom.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Clamp = __webpack_require__(/*! ../../../math/Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar EaseMap = __webpack_require__(/*! ../../../math/easing/EaseMap */ \"./node_modules/phaser/src/math/easing/EaseMap.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/cameras/2d/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Camera Zoom effect.\r\n *\r\n * This effect will zoom the Camera to the given scale, over the duration and with the ease specified.\r\n *\r\n * The effect will dispatch several events on the Camera itself and you can also specify an `onUpdate` callback,\r\n * which is invoked each frame for the duration of the effect if required.\r\n *\r\n * @class Zoom\r\n * @memberof Phaser.Cameras.Scene2D.Effects\r\n * @constructor\r\n * @since 3.11.0\r\n *\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera this effect is acting upon.\r\n */\r\nvar Zoom = new Class({\r\n\r\n initialize:\r\n\r\n function Zoom (camera)\r\n {\r\n /**\r\n * The Camera this effect belongs to.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Zoom#camera\r\n * @type {Phaser.Cameras.Scene2D.Camera}\r\n * @readonly\r\n * @since 3.11.0\r\n */\r\n this.camera = camera;\r\n\r\n /**\r\n * Is this effect actively running?\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Zoom#isRunning\r\n * @type {boolean}\r\n * @readonly\r\n * @default false\r\n * @since 3.11.0\r\n */\r\n this.isRunning = false;\r\n\r\n /**\r\n * The duration of the effect, in milliseconds.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Zoom#duration\r\n * @type {integer}\r\n * @readonly\r\n * @default 0\r\n * @since 3.11.0\r\n */\r\n this.duration = 0;\r\n\r\n /**\r\n * The starting zoom value;\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Zoom#source\r\n * @type {number}\r\n * @since 3.11.0\r\n */\r\n this.source = 1;\r\n\r\n /**\r\n * The destination zoom value.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Zoom#destination\r\n * @type {number}\r\n * @since 3.11.0\r\n */\r\n this.destination = 1;\r\n\r\n /**\r\n * The ease function to use during the zoom.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Zoom#ease\r\n * @type {function}\r\n * @since 3.11.0\r\n */\r\n this.ease;\r\n\r\n /**\r\n * If this effect is running this holds the current percentage of the progress, a value between 0 and 1.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Zoom#progress\r\n * @type {number}\r\n * @since 3.11.0\r\n */\r\n this.progress = 0;\r\n\r\n /**\r\n * Effect elapsed timer.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Zoom#_elapsed\r\n * @type {number}\r\n * @private\r\n * @since 3.11.0\r\n */\r\n this._elapsed = 0;\r\n\r\n /**\r\n * This callback is invoked every frame for the duration of the effect.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Zoom#_onUpdate\r\n * @type {?Phaser.Types.Cameras.Scene2D.CameraZoomCallback}\r\n * @private\r\n * @default null\r\n * @since 3.11.0\r\n */\r\n this._onUpdate;\r\n\r\n /**\r\n * On Complete callback scope.\r\n *\r\n * @name Phaser.Cameras.Scene2D.Effects.Zoom#_onUpdateScope\r\n * @type {any}\r\n * @private\r\n * @since 3.11.0\r\n */\r\n this._onUpdateScope;\r\n },\r\n\r\n /**\r\n * This effect will zoom the Camera to the given scale, over the duration and with the ease specified.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Zoom#start\r\n * @fires Phaser.Cameras.Scene2D.Events#ZOOM_START\r\n * @fires Phaser.Cameras.Scene2D.Events#ZOOM_COMPLETE\r\n * @since 3.11.0\r\n *\r\n * @param {number} zoom - The target Camera zoom value.\r\n * @param {integer} [duration=1000] - The duration of the effect in milliseconds.\r\n * @param {(string|function)} [ease='Linear'] - The ease to use for the Zoom. Can be any of the Phaser Easing constants or a custom function.\r\n * @param {boolean} [force=false] - Force the zoom effect to start immediately, even if already running.\r\n * @param {Phaser.Types.Cameras.Scene2D.CameraZoomCallback} [callback] - This callback will be invoked every frame for the duration of the effect.\r\n * It is sent three arguments: A reference to the camera, a progress amount between 0 and 1 indicating how complete the effect is,\r\n * and the current camera zoom value.\r\n * @param {any} [context] - The context in which the callback is invoked. Defaults to the Scene to which the Camera belongs.\r\n *\r\n * @return {Phaser.Cameras.Scene2D.Camera} The Camera on which the effect was started.\r\n */\r\n start: function (zoom, duration, ease, force, callback, context)\r\n {\r\n if (duration === undefined) { duration = 1000; }\r\n if (ease === undefined) { ease = EaseMap.Linear; }\r\n if (force === undefined) { force = false; }\r\n if (callback === undefined) { callback = null; }\r\n if (context === undefined) { context = this.camera.scene; }\r\n\r\n var cam = this.camera;\r\n\r\n if (!force && this.isRunning)\r\n {\r\n return cam;\r\n }\r\n\r\n this.isRunning = true;\r\n this.duration = duration;\r\n this.progress = 0;\r\n\r\n // Starting from\r\n this.source = cam.zoom;\r\n\r\n // Zooming to\r\n this.destination = zoom;\r\n\r\n // Using this ease\r\n if (typeof ease === 'string' && EaseMap.hasOwnProperty(ease))\r\n {\r\n this.ease = EaseMap[ease];\r\n }\r\n else if (typeof ease === 'function')\r\n {\r\n this.ease = ease;\r\n }\r\n\r\n this._elapsed = 0;\r\n\r\n this._onUpdate = callback;\r\n this._onUpdateScope = context;\r\n\r\n this.camera.emit(Events.ZOOM_START, this.camera, this, duration, zoom);\r\n\r\n return cam;\r\n },\r\n\r\n /**\r\n * The main update loop for this effect. Called automatically by the Camera.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Zoom#update\r\n * @since 3.11.0\r\n *\r\n * @param {integer} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n */\r\n update: function (time, delta)\r\n {\r\n if (!this.isRunning)\r\n {\r\n return;\r\n }\r\n\r\n this._elapsed += delta;\r\n\r\n this.progress = Clamp(this._elapsed / this.duration, 0, 1);\r\n\r\n if (this._elapsed < this.duration)\r\n {\r\n this.camera.zoom = this.source + ((this.destination - this.source) * this.ease(this.progress));\r\n\r\n if (this._onUpdate)\r\n {\r\n this._onUpdate.call(this._onUpdateScope, this.camera, this.progress, this.camera.zoom);\r\n }\r\n }\r\n else\r\n {\r\n this.camera.zoom = this.destination;\r\n\r\n if (this._onUpdate)\r\n {\r\n this._onUpdate.call(this._onUpdateScope, this.camera, this.progress, this.destination);\r\n }\r\n\r\n this.effectComplete();\r\n }\r\n },\r\n\r\n /**\r\n * Called internally when the effect completes.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Zoom#effectComplete\r\n * @fires Phaser.Cameras.Scene2D.Events#ZOOM_COMPLETE\r\n * @since 3.11.0\r\n */\r\n effectComplete: function ()\r\n {\r\n this._onUpdate = null;\r\n this._onUpdateScope = null;\r\n\r\n this.isRunning = false;\r\n\r\n this.camera.emit(Events.ZOOM_COMPLETE, this.camera, this);\r\n },\r\n\r\n /**\r\n * Resets this camera effect.\r\n * If it was previously running, it stops instantly without calling its onComplete callback or emitting an event.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Zoom#reset\r\n * @since 3.11.0\r\n */\r\n reset: function ()\r\n {\r\n this.isRunning = false;\r\n\r\n this._onUpdate = null;\r\n this._onUpdateScope = null;\r\n },\r\n\r\n /**\r\n * Destroys this effect, releasing it from the Camera.\r\n *\r\n * @method Phaser.Cameras.Scene2D.Effects.Zoom#destroy\r\n * @since 3.11.0\r\n */\r\n destroy: function ()\r\n {\r\n this.reset();\r\n\r\n this.camera = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Zoom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2VmZmVjdHMvWm9vbS5qcz8zZDVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsb0VBQXFCO0FBQ3pDLFlBQVksbUJBQU8sQ0FBQyxzRUFBc0I7QUFDMUMsY0FBYyxtQkFBTyxDQUFDLHNGQUE4QjtBQUNwRCxhQUFhLG1CQUFPLENBQUMsdUVBQVc7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsa0JBQWtCO0FBQ2pDLGVBQWUsUUFBUTtBQUN2QixlQUFlLGdEQUFnRDtBQUMvRDtBQUNBO0FBQ0EsZUFBZSxJQUFJO0FBQ25CO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsaUJBQWlCO0FBQ3RELGlDQUFpQyx1QkFBdUI7QUFDeEQsa0NBQWtDLGVBQWU7QUFDakQscUNBQXFDLGlCQUFpQjtBQUN0RCxvQ0FBb0MsNkJBQTZCOztBQUVqRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2VmZmVjdHMvWm9vbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYW1wID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aC9DbGFtcCcpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgRWFzZU1hcCA9IHJlcXVpcmUoJy4uLy4uLy4uL21hdGgvZWFzaW5nL0Vhc2VNYXAnKTtcclxudmFyIEV2ZW50cyA9IHJlcXVpcmUoJy4uL2V2ZW50cycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBDYW1lcmEgWm9vbSBlZmZlY3QuXHJcbiAqXHJcbiAqIFRoaXMgZWZmZWN0IHdpbGwgem9vbSB0aGUgQ2FtZXJhIHRvIHRoZSBnaXZlbiBzY2FsZSwgb3ZlciB0aGUgZHVyYXRpb24gYW5kIHdpdGggdGhlIGVhc2Ugc3BlY2lmaWVkLlxyXG4gKlxyXG4gKiBUaGUgZWZmZWN0IHdpbGwgZGlzcGF0Y2ggc2V2ZXJhbCBldmVudHMgb24gdGhlIENhbWVyYSBpdHNlbGYgYW5kIHlvdSBjYW4gYWxzbyBzcGVjaWZ5IGFuIGBvblVwZGF0ZWAgY2FsbGJhY2ssXHJcbiAqIHdoaWNoIGlzIGludm9rZWQgZWFjaCBmcmFtZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QgaWYgcmVxdWlyZWQuXHJcbiAqXHJcbiAqIEBjbGFzcyBab29tXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjExLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIGNhbWVyYSB0aGlzIGVmZmVjdCBpcyBhY3RpbmcgdXBvbi5cclxuICovXHJcbnZhciBab29tID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFpvb20gKGNhbWVyYSlcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQ2FtZXJhIHRoaXMgZWZmZWN0IGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuWm9vbSNjYW1lcmFcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FtZXJhID0gY2FtZXJhO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJcyB0aGlzIGVmZmVjdCBhY3RpdmVseSBydW5uaW5nP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlpvb20jaXNSdW5uaW5nXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QsIGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5ab29tI2R1cmF0aW9uXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmR1cmF0aW9uID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHN0YXJ0aW5nIHpvb20gdmFsdWU7XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuWm9vbSNzb3VyY2VcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNvdXJjZSA9IDE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBkZXN0aW5hdGlvbiB6b29tIHZhbHVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlpvb20jZGVzdGluYXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGVhc2UgZnVuY3Rpb24gdG8gdXNlIGR1cmluZyB0aGUgem9vbS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5ab29tI2Vhc2VcclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZWFzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgdGhpcyBlZmZlY3QgaXMgcnVubmluZyB0aGlzIGhvbGRzIHRoZSBjdXJyZW50IHBlcmNlbnRhZ2Ugb2YgdGhlIHByb2dyZXNzLCBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5ab29tI3Byb2dyZXNzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEVmZmVjdCBlbGFwc2VkIHRpbWVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlpvb20jX2VsYXBzZWRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2VsYXBzZWQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGlzIGNhbGxiYWNrIGlzIGludm9rZWQgZXZlcnkgZnJhbWUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlpvb20jX29uVXBkYXRlXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuVHlwZXMuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYVpvb21DYWxsYmFja31cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE9uIENvbXBsZXRlIGNhbGxiYWNrIHNjb3BlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlpvb20jX29uVXBkYXRlU2NvcGVcclxuICAgICAgICAgKiBAdHlwZSB7YW55fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlU2NvcGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBlZmZlY3Qgd2lsbCB6b29tIHRoZSBDYW1lcmEgdG8gdGhlIGdpdmVuIHNjYWxlLCBvdmVyIHRoZSBkdXJhdGlvbiBhbmQgd2l0aCB0aGUgZWFzZSBzcGVjaWZpZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuWm9vbSNzdGFydFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI1pPT01fU1RBUlRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNaT09NX0NPTVBMRVRFXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHpvb20gLSBUaGUgdGFyZ2V0IENhbWVyYSB6b29tIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZHVyYXRpb249MTAwMF0gLSBUaGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdCBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8ZnVuY3Rpb24pfSBbZWFzZT0nTGluZWFyJ10gLSBUaGUgZWFzZSB0byB1c2UgZm9yIHRoZSBab29tLiBDYW4gYmUgYW55IG9mIHRoZSBQaGFzZXIgRWFzaW5nIGNvbnN0YW50cyBvciBhIGN1c3RvbSBmdW5jdGlvbi5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlPWZhbHNlXSAtIEZvcmNlIHRoZSB6b29tIGVmZmVjdCB0byBzdGFydCBpbW1lZGlhdGVseSwgZXZlbiBpZiBhbHJlYWR5IHJ1bm5pbmcuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhWm9vbUNhbGxiYWNrfSBbY2FsbGJhY2tdIC0gVGhpcyBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgZXZlcnkgZnJhbWUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gICAgICogSXQgaXMgc2VudCB0aHJlZSBhcmd1bWVudHM6IEEgcmVmZXJlbmNlIHRvIHRoZSBjYW1lcmEsIGEgcHJvZ3Jlc3MgYW1vdW50IGJldHdlZW4gMCBhbmQgMSBpbmRpY2F0aW5nIGhvdyBjb21wbGV0ZSB0aGUgZWZmZWN0IGlzLFxyXG4gICAgICogYW5kIHRoZSBjdXJyZW50IGNhbWVyYSB6b29tIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHthbnl9IFtjb250ZXh0XSAtIFRoZSBjb250ZXh0IGluIHdoaWNoIHRoZSBjYWxsYmFjayBpcyBpbnZva2VkLiBEZWZhdWx0cyB0byB0aGUgU2NlbmUgdG8gd2hpY2ggdGhlIENhbWVyYSBiZWxvbmdzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBUaGUgQ2FtZXJhIG9uIHdoaWNoIHRoZSBlZmZlY3Qgd2FzIHN0YXJ0ZWQuXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0OiBmdW5jdGlvbiAoem9vbSwgZHVyYXRpb24sIGVhc2UsIGZvcmNlLCBjYWxsYmFjaywgY29udGV4dClcclxuICAgIHtcclxuICAgICAgICBpZiAoZHVyYXRpb24gPT09IHVuZGVmaW5lZCkgeyBkdXJhdGlvbiA9IDEwMDA7IH1cclxuICAgICAgICBpZiAoZWFzZSA9PT0gdW5kZWZpbmVkKSB7IGVhc2UgPSBFYXNlTWFwLkxpbmVhcjsgfVxyXG4gICAgICAgIGlmIChmb3JjZSA9PT0gdW5kZWZpbmVkKSB7IGZvcmNlID0gZmFsc2U7IH1cclxuICAgICAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkgeyBjYWxsYmFjayA9IG51bGw7IH1cclxuICAgICAgICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7IGNvbnRleHQgPSB0aGlzLmNhbWVyYS5zY2VuZTsgfVxyXG5cclxuICAgICAgICB2YXIgY2FtID0gdGhpcy5jYW1lcmE7XHJcblxyXG4gICAgICAgIGlmICghZm9yY2UgJiYgdGhpcy5pc1J1bm5pbmcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gY2FtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZHVyYXRpb24gPSBkdXJhdGlvbjtcclxuICAgICAgICB0aGlzLnByb2dyZXNzID0gMDtcclxuXHJcbiAgICAgICAgLy8gIFN0YXJ0aW5nIGZyb21cclxuICAgICAgICB0aGlzLnNvdXJjZSA9IGNhbS56b29tO1xyXG5cclxuICAgICAgICAvLyAgWm9vbWluZyB0b1xyXG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24gPSB6b29tO1xyXG5cclxuICAgICAgICAvLyAgVXNpbmcgdGhpcyBlYXNlXHJcbiAgICAgICAgaWYgKHR5cGVvZiBlYXNlID09PSAnc3RyaW5nJyAmJiBFYXNlTWFwLmhhc093blByb3BlcnR5KGVhc2UpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5lYXNlID0gRWFzZU1hcFtlYXNlXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGVhc2UgPT09ICdmdW5jdGlvbicpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmVhc2UgPSBlYXNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZWxhcHNlZCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlID0gY2FsbGJhY2s7XHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGVTY29wZSA9IGNvbnRleHQ7XHJcblxyXG4gICAgICAgIHRoaXMuY2FtZXJhLmVtaXQoRXZlbnRzLlpPT01fU1RBUlQsIHRoaXMuY2FtZXJhLCB0aGlzLCBkdXJhdGlvbiwgem9vbSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjYW07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1haW4gdXBkYXRlIGxvb3AgZm9yIHRoaXMgZWZmZWN0LiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgQ2FtZXJhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlpvb20jdXBkYXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aW1lIC0gVGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGdlbmVyYXRlZCBieSB0aGUgUmVxdWVzdCBBbmltYXRpb24gRnJhbWUgb3IgU2V0VGltZW91dC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lLCBpbiBtcywgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCBmcmFtZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAodGltZSwgZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzUnVubmluZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2VsYXBzZWQgKz0gZGVsdGE7XHJcblxyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3MgPSBDbGFtcCh0aGlzLl9lbGFwc2VkIC8gdGhpcy5kdXJhdGlvbiwgMCwgMSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9lbGFwc2VkIDwgdGhpcy5kdXJhdGlvbilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FtZXJhLnpvb20gPSB0aGlzLnNvdXJjZSArICgodGhpcy5kZXN0aW5hdGlvbiAtIHRoaXMuc291cmNlKSAqIHRoaXMuZWFzZSh0aGlzLnByb2dyZXNzKSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fb25VcGRhdGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX29uVXBkYXRlLmNhbGwodGhpcy5fb25VcGRhdGVTY29wZSwgdGhpcy5jYW1lcmEsIHRoaXMucHJvZ3Jlc3MsIHRoaXMuY2FtZXJhLnpvb20pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FtZXJhLnpvb20gPSB0aGlzLmRlc3RpbmF0aW9uO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX29uVXBkYXRlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vblVwZGF0ZS5jYWxsKHRoaXMuX29uVXBkYXRlU2NvcGUsIHRoaXMuY2FtZXJhLCB0aGlzLnByb2dyZXNzLCB0aGlzLmRlc3RpbmF0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5lZmZlY3RDb21wbGV0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgaW50ZXJuYWxseSB3aGVuIHRoZSBlZmZlY3QgY29tcGxldGVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlpvb20jZWZmZWN0Q29tcGxldGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNaT09NX0NPTVBMRVRFXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKi9cclxuICAgIGVmZmVjdENvbXBsZXRlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9vblVwZGF0ZVNjb3BlID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW1lcmEuZW1pdChFdmVudHMuWk9PTV9DT01QTEVURSwgdGhpcy5jYW1lcmEsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGlzIGNhbWVyYSBlZmZlY3QuXHJcbiAgICAgKiBJZiBpdCB3YXMgcHJldmlvdXNseSBydW5uaW5nLCBpdCBzdG9wcyBpbnN0YW50bHkgd2l0aG91dCBjYWxsaW5nIGl0cyBvbkNvbXBsZXRlIGNhbGxiYWNrIG9yIGVtaXR0aW5nIGFuIGV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlpvb20jcmVzZXRcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqL1xyXG4gICAgcmVzZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX29uVXBkYXRlU2NvcGUgPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoaXMgZWZmZWN0LCByZWxlYXNpbmcgaXQgZnJvbSB0aGUgQ2FtZXJhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlpvb20jZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVzZXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW1lcmEgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFpvb207XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/effects/Zoom.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/effects/index.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/effects/index.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Cameras.Scene2D.Effects\r\n */\r\n\r\nmodule.exports = {\r\n\r\n Fade: __webpack_require__(/*! ./Fade */ \"./node_modules/phaser/src/cameras/2d/effects/Fade.js\"),\r\n Flash: __webpack_require__(/*! ./Flash */ \"./node_modules/phaser/src/cameras/2d/effects/Flash.js\"),\r\n Pan: __webpack_require__(/*! ./Pan */ \"./node_modules/phaser/src/cameras/2d/effects/Pan.js\"),\r\n Shake: __webpack_require__(/*! ./Shake */ \"./node_modules/phaser/src/cameras/2d/effects/Shake.js\"),\r\n Zoom: __webpack_require__(/*! ./Zoom */ \"./node_modules/phaser/src/cameras/2d/effects/Zoom.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2VmZmVjdHMvaW5kZXguanM/ZTMxNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxvRUFBUTtBQUMxQixXQUFXLG1CQUFPLENBQUMsc0VBQVM7QUFDNUIsU0FBUyxtQkFBTyxDQUFDLGtFQUFPO0FBQ3hCLFdBQVcsbUJBQU8sQ0FBQyxzRUFBUztBQUM1QixVQUFVLG1CQUFPLENBQUMsb0VBQVE7O0FBRTFCIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FtZXJhcy8yZC9lZmZlY3RzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHNcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBGYWRlOiByZXF1aXJlKCcuL0ZhZGUnKSxcclxuICAgIEZsYXNoOiByZXF1aXJlKCcuL0ZsYXNoJyksXHJcbiAgICBQYW46IHJlcXVpcmUoJy4vUGFuJyksXHJcbiAgICBTaGFrZTogcmVxdWlyZSgnLi9TaGFrZScpLFxyXG4gICAgWm9vbTogcmVxdWlyZSgnLi9ab29tJylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/effects/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/events/DESTROY_EVENT.js":
/*!********************************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/events/DESTROY_EVENT.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Destroy Camera Event.\r\n * \r\n * This event is dispatched by a Camera instance when it is destroyed by the Camera Manager.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#DESTROY\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.BaseCamera} camera - The camera that was destroyed.\r\n */\r\nmodule.exports = 'cameradestroy';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9ERVNUUk9ZX0VWRU5ULmpzP2RmMmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGtDQUFrQztBQUM3QztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FtZXJhcy8yZC9ldmVudHMvREVTVFJPWV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBEZXN0cm95IENhbWVyYSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIENhbWVyYSBpbnN0YW5jZSB3aGVuIGl0IGlzIGRlc3Ryb3llZCBieSB0aGUgQ2FtZXJhIE1hbmFnZXIuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNERVNUUk9ZXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmF9IGNhbWVyYSAtIFRoZSBjYW1lcmEgdGhhdCB3YXMgZGVzdHJveWVkLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnY2FtZXJhZGVzdHJveSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/DESTROY_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/events/FADE_IN_COMPLETE_EVENT.js":
/*!*****************************************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/events/FADE_IN_COMPLETE_EVENT.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Fade In Complete Event.\r\n * \r\n * This event is dispatched by a Camera instance when the Fade In Effect completes.\r\n * \r\n * Listen to it from a Camera instance using `Camera.on('camerafadeincomplete', listener)`.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#FADE_IN_COMPLETE\r\n * @since 3.3.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera that the effect began on.\r\n * @param {Phaser.Cameras.Scene2D.Effects.Fade} effect - A reference to the effect instance.\r\n */\r\nmodule.exports = 'camerafadeincomplete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9GQURFX0lOX0NPTVBMRVRFX0VWRU5ULmpzP2NjNDYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxvQ0FBb0M7QUFDL0M7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NhbWVyYXMvMmQvZXZlbnRzL0ZBREVfSU5fQ09NUExFVEVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgQ2FtZXJhIEZhZGUgSW4gQ29tcGxldGUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBDYW1lcmEgaW5zdGFuY2Ugd2hlbiB0aGUgRmFkZSBJbiBFZmZlY3QgY29tcGxldGVzLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIGl0IGZyb20gYSBDYW1lcmEgaW5zdGFuY2UgdXNpbmcgYENhbWVyYS5vbignY2FtZXJhZmFkZWluY29tcGxldGUnLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjRkFERV9JTl9DT01QTEVURVxyXG4gKiBAc2luY2UgMy4zLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBjYW1lcmEgdGhhdCB0aGUgZWZmZWN0IGJlZ2FuIG9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5GYWRlfSBlZmZlY3QgLSBBIHJlZmVyZW5jZSB0byB0aGUgZWZmZWN0IGluc3RhbmNlLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnY2FtZXJhZmFkZWluY29tcGxldGUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/FADE_IN_COMPLETE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/events/FADE_IN_START_EVENT.js":
/*!**************************************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/events/FADE_IN_START_EVENT.js ***!
\**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Fade In Start Event.\r\n * \r\n * This event is dispatched by a Camera instance when the Fade In Effect starts.\r\n * \r\n * Listen to it from a Camera instance using `Camera.on('camerafadeinstart', listener)`.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#FADE_IN_START\r\n * @since 3.3.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera that the effect began on.\r\n * @param {Phaser.Cameras.Scene2D.Effects.Fade} effect - A reference to the effect instance.\r\n * @param {integer} duration - The duration of the effect.\r\n * @param {integer} red - The red color channel value.\r\n * @param {integer} green - The green color channel value.\r\n * @param {integer} blue - The blue color channel value.\r\n */\r\nmodule.exports = 'camerafadeinstart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9GQURFX0lOX1NUQVJUX0VWRU5ULmpzP2Y5ZjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxvQ0FBb0M7QUFDL0MsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9GQURFX0lOX1NUQVJUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIENhbWVyYSBGYWRlIEluIFN0YXJ0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgQ2FtZXJhIGluc3RhbmNlIHdoZW4gdGhlIEZhZGUgSW4gRWZmZWN0IHN0YXJ0cy5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgQ2FtZXJhIGluc3RhbmNlIHVzaW5nIGBDYW1lcmEub24oJ2NhbWVyYWZhZGVpbnN0YXJ0JywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI0ZBREVfSU5fU1RBUlRcclxuICogQHNpbmNlIDMuMy4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgY2FtZXJhIHRoYXQgdGhlIGVmZmVjdCBiZWdhbiBvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmFkZX0gZWZmZWN0IC0gQSByZWZlcmVuY2UgdG8gdGhlIGVmZmVjdCBpbnN0YW5jZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBkdXJhdGlvbiAtIFRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHJlZCAtIFRoZSByZWQgY29sb3IgY2hhbm5lbCB2YWx1ZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBncmVlbiAtIFRoZSBncmVlbiBjb2xvciBjaGFubmVsIHZhbHVlLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGJsdWUgLSBUaGUgYmx1ZSBjb2xvciBjaGFubmVsIHZhbHVlLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnY2FtZXJhZmFkZWluc3RhcnQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/FADE_IN_START_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/events/FADE_OUT_COMPLETE_EVENT.js":
/*!******************************************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/events/FADE_OUT_COMPLETE_EVENT.js ***!
\******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Fade Out Complete Event.\r\n * \r\n * This event is dispatched by a Camera instance when the Fade Out Effect completes.\r\n * \r\n * Listen to it from a Camera instance using `Camera.on('camerafadeoutcomplete', listener)`.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#FADE_OUT_COMPLETE\r\n * @since 3.3.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera that the effect began on.\r\n * @param {Phaser.Cameras.Scene2D.Effects.Fade} effect - A reference to the effect instance.\r\n */\r\nmodule.exports = 'camerafadeoutcomplete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9GQURFX09VVF9DT01QTEVURV9FVkVOVC5qcz9jY2I2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsb0NBQW9DO0FBQy9DO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9GQURFX09VVF9DT01QTEVURV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBDYW1lcmEgRmFkZSBPdXQgQ29tcGxldGUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBDYW1lcmEgaW5zdGFuY2Ugd2hlbiB0aGUgRmFkZSBPdXQgRWZmZWN0IGNvbXBsZXRlcy5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgQ2FtZXJhIGluc3RhbmNlIHVzaW5nIGBDYW1lcmEub24oJ2NhbWVyYWZhZGVvdXRjb21wbGV0ZScsIGxpc3RlbmVyKWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNGQURFX09VVF9DT01QTEVURVxyXG4gKiBAc2luY2UgMy4zLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBjYW1lcmEgdGhhdCB0aGUgZWZmZWN0IGJlZ2FuIG9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5GYWRlfSBlZmZlY3QgLSBBIHJlZmVyZW5jZSB0byB0aGUgZWZmZWN0IGluc3RhbmNlLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnY2FtZXJhZmFkZW91dGNvbXBsZXRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/FADE_OUT_COMPLETE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/events/FADE_OUT_START_EVENT.js":
/*!***************************************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/events/FADE_OUT_START_EVENT.js ***!
\***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Fade Out Start Event.\r\n * \r\n * This event is dispatched by a Camera instance when the Fade Out Effect starts.\r\n * \r\n * Listen to it from a Camera instance using `Camera.on('camerafadeoutstart', listener)`.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#FADE_OUT_START\r\n * @since 3.3.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera that the effect began on.\r\n * @param {Phaser.Cameras.Scene2D.Effects.Fade} effect - A reference to the effect instance.\r\n * @param {integer} duration - The duration of the effect.\r\n * @param {integer} red - The red color channel value.\r\n * @param {integer} green - The green color channel value.\r\n * @param {integer} blue - The blue color channel value.\r\n */\r\nmodule.exports = 'camerafadeoutstart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9GQURFX09VVF9TVEFSVF9FVkVOVC5qcz8yZTNlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FtZXJhcy8yZC9ldmVudHMvRkFERV9PVVRfU1RBUlRfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgQ2FtZXJhIEZhZGUgT3V0IFN0YXJ0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgQ2FtZXJhIGluc3RhbmNlIHdoZW4gdGhlIEZhZGUgT3V0IEVmZmVjdCBzdGFydHMuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIENhbWVyYSBpbnN0YW5jZSB1c2luZyBgQ2FtZXJhLm9uKCdjYW1lcmFmYWRlb3V0c3RhcnQnLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjRkFERV9PVVRfU1RBUlRcclxuICogQHNpbmNlIDMuMy4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgY2FtZXJhIHRoYXQgdGhlIGVmZmVjdCBiZWdhbiBvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmFkZX0gZWZmZWN0IC0gQSByZWZlcmVuY2UgdG8gdGhlIGVmZmVjdCBpbnN0YW5jZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBkdXJhdGlvbiAtIFRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHJlZCAtIFRoZSByZWQgY29sb3IgY2hhbm5lbCB2YWx1ZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBncmVlbiAtIFRoZSBncmVlbiBjb2xvciBjaGFubmVsIHZhbHVlLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGJsdWUgLSBUaGUgYmx1ZSBjb2xvciBjaGFubmVsIHZhbHVlLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnY2FtZXJhZmFkZW91dHN0YXJ0JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/FADE_OUT_START_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/events/FLASH_COMPLETE_EVENT.js":
/*!***************************************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/events/FLASH_COMPLETE_EVENT.js ***!
\***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Flash Complete Event.\r\n * \r\n * This event is dispatched by a Camera instance when the Flash Effect completes.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#FLASH_COMPLETE\r\n * @since 3.3.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera that the effect began on.\r\n * @param {Phaser.Cameras.Scene2D.Effects.Flash} effect - A reference to the effect instance.\r\n */\r\nmodule.exports = 'cameraflashcomplete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9GTEFTSF9DT01QTEVURV9FVkVOVC5qcz9hN2I0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxxQ0FBcUM7QUFDaEQ7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NhbWVyYXMvMmQvZXZlbnRzL0ZMQVNIX0NPTVBMRVRFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIENhbWVyYSBGbGFzaCBDb21wbGV0ZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIENhbWVyYSBpbnN0YW5jZSB3aGVuIHRoZSBGbGFzaCBFZmZlY3QgY29tcGxldGVzLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjRkxBU0hfQ09NUExFVEVcclxuICogQHNpbmNlIDMuMy4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgY2FtZXJhIHRoYXQgdGhlIGVmZmVjdCBiZWdhbiBvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuRmxhc2h9IGVmZmVjdCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBlZmZlY3QgaW5zdGFuY2UuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdjYW1lcmFmbGFzaGNvbXBsZXRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/FLASH_COMPLETE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/events/FLASH_START_EVENT.js":
/*!************************************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/events/FLASH_START_EVENT.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Flash Start Event.\r\n * \r\n * This event is dispatched by a Camera instance when the Flash Effect starts.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#FLASH_START\r\n * @since 3.3.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera that the effect began on.\r\n * @param {Phaser.Cameras.Scene2D.Effects.Flash} effect - A reference to the effect instance.\r\n * @param {integer} duration - The duration of the effect.\r\n * @param {integer} red - The red color channel value.\r\n * @param {integer} green - The green color channel value.\r\n * @param {integer} blue - The blue color channel value.\r\n */\r\nmodule.exports = 'cameraflashstart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9GTEFTSF9TVEFSVF9FVkVOVC5qcz9lZDQzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxxQ0FBcUM7QUFDaEQsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9GTEFTSF9TVEFSVF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBDYW1lcmEgRmxhc2ggU3RhcnQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBDYW1lcmEgaW5zdGFuY2Ugd2hlbiB0aGUgRmxhc2ggRWZmZWN0IHN0YXJ0cy5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI0ZMQVNIX1NUQVJUXHJcbiAqIEBzaW5jZSAzLjMuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIGNhbWVyYSB0aGF0IHRoZSBlZmZlY3QgYmVnYW4gb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLkZsYXNofSBlZmZlY3QgLSBBIHJlZmVyZW5jZSB0byB0aGUgZWZmZWN0IGluc3RhbmNlLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGR1cmF0aW9uIC0gVGhlIGR1cmF0aW9uIG9mIHRoZSBlZmZlY3QuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gcmVkIC0gVGhlIHJlZCBjb2xvciBjaGFubmVsIHZhbHVlLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGdyZWVuIC0gVGhlIGdyZWVuIGNvbG9yIGNoYW5uZWwgdmFsdWUuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gYmx1ZSAtIFRoZSBibHVlIGNvbG9yIGNoYW5uZWwgdmFsdWUuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdjYW1lcmFmbGFzaHN0YXJ0JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/FLASH_START_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/events/PAN_COMPLETE_EVENT.js":
/*!*************************************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/events/PAN_COMPLETE_EVENT.js ***!
\*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Pan Complete Event.\r\n * \r\n * This event is dispatched by a Camera instance when the Pan Effect completes.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#PAN_COMPLETE\r\n * @since 3.3.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera that the effect began on.\r\n * @param {Phaser.Cameras.Scene2D.Effects.Pan} effect - A reference to the effect instance.\r\n */\r\nmodule.exports = 'camerapancomplete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9QQU5fQ09NUExFVEVfRVZFTlQuanM/OTk1YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsbUNBQW1DO0FBQzlDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9QQU5fQ09NUExFVEVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgQ2FtZXJhIFBhbiBDb21wbGV0ZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIENhbWVyYSBpbnN0YW5jZSB3aGVuIHRoZSBQYW4gRWZmZWN0IGNvbXBsZXRlcy5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI1BBTl9DT01QTEVURVxyXG4gKiBAc2luY2UgMy4zLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBjYW1lcmEgdGhhdCB0aGUgZWZmZWN0IGJlZ2FuIG9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5QYW59IGVmZmVjdCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBlZmZlY3QgaW5zdGFuY2UuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdjYW1lcmFwYW5jb21wbGV0ZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/PAN_COMPLETE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/events/PAN_START_EVENT.js":
/*!**********************************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/events/PAN_START_EVENT.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Pan Start Event.\r\n * \r\n * This event is dispatched by a Camera instance when the Pan Effect starts.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#PAN_START\r\n * @since 3.3.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera that the effect began on.\r\n * @param {Phaser.Cameras.Scene2D.Effects.Pan} effect - A reference to the effect instance.\r\n * @param {integer} duration - The duration of the effect.\r\n * @param {number} x - The destination scroll x coordinate.\r\n * @param {number} y - The destination scroll y coordinate.\r\n */\r\nmodule.exports = 'camerapanstart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9QQU5fU1RBUlRfRVZFTlQuanM/NGQ0NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsbUNBQW1DO0FBQzlDLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9QQU5fU1RBUlRfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgQ2FtZXJhIFBhbiBTdGFydCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIENhbWVyYSBpbnN0YW5jZSB3aGVuIHRoZSBQYW4gRWZmZWN0IHN0YXJ0cy5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI1BBTl9TVEFSVFxyXG4gKiBAc2luY2UgMy4zLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBjYW1lcmEgdGhhdCB0aGUgZWZmZWN0IGJlZ2FuIG9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5QYW59IGVmZmVjdCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBlZmZlY3QgaW5zdGFuY2UuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gZHVyYXRpb24gLSBUaGUgZHVyYXRpb24gb2YgdGhlIGVmZmVjdC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgZGVzdGluYXRpb24gc2Nyb2xsIHggY29vcmRpbmF0ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgZGVzdGluYXRpb24gc2Nyb2xsIHkgY29vcmRpbmF0ZS5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2NhbWVyYXBhbnN0YXJ0JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/PAN_START_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/events/POST_RENDER_EVENT.js":
/*!************************************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/events/POST_RENDER_EVENT.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Post-Render Event.\r\n * \r\n * This event is dispatched by a Camera instance after is has finished rendering.\r\n * It is only dispatched if the Camera is rendering to a texture.\r\n * \r\n * Listen to it from a Camera instance using: `camera.on('postrender', listener)`.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#POST_RENDER\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.BaseCamera} camera - The camera that has finished rendering to a texture.\r\n */\r\nmodule.exports = 'postrender';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9QT1NUX1JFTkRFUl9FVkVOVC5qcz9jZTg4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxrQ0FBa0M7QUFDN0M7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NhbWVyYXMvMmQvZXZlbnRzL1BPU1RfUkVOREVSX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIENhbWVyYSBQb3N0LVJlbmRlciBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIENhbWVyYSBpbnN0YW5jZSBhZnRlciBpcyBoYXMgZmluaXNoZWQgcmVuZGVyaW5nLlxyXG4gKiBJdCBpcyBvbmx5IGRpc3BhdGNoZWQgaWYgdGhlIENhbWVyYSBpcyByZW5kZXJpbmcgdG8gYSB0ZXh0dXJlLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIGl0IGZyb20gYSBDYW1lcmEgaW5zdGFuY2UgdXNpbmc6IGBjYW1lcmEub24oJ3Bvc3RyZW5kZXInLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjUE9TVF9SRU5ERVJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQmFzZUNhbWVyYX0gY2FtZXJhIC0gVGhlIGNhbWVyYSB0aGF0IGhhcyBmaW5pc2hlZCByZW5kZXJpbmcgdG8gYSB0ZXh0dXJlLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAncG9zdHJlbmRlcic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/POST_RENDER_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/events/PRE_RENDER_EVENT.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/events/PRE_RENDER_EVENT.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Pre-Render Event.\r\n * \r\n * This event is dispatched by a Camera instance when it is about to render.\r\n * It is only dispatched if the Camera is rendering to a texture.\r\n * \r\n * Listen to it from a Camera instance using: `camera.on('prerender', listener)`.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#PRE_RENDER\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.BaseCamera} camera - The camera that is about to render to a texture.\r\n */\r\nmodule.exports = 'prerender';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9QUkVfUkVOREVSX0VWRU5ULmpzPzY5MjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGtDQUFrQztBQUM3QztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FtZXJhcy8yZC9ldmVudHMvUFJFX1JFTkRFUl9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBDYW1lcmEgUHJlLVJlbmRlciBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIENhbWVyYSBpbnN0YW5jZSB3aGVuIGl0IGlzIGFib3V0IHRvIHJlbmRlci5cclxuICogSXQgaXMgb25seSBkaXNwYXRjaGVkIGlmIHRoZSBDYW1lcmEgaXMgcmVuZGVyaW5nIHRvIGEgdGV4dHVyZS5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgQ2FtZXJhIGluc3RhbmNlIHVzaW5nOiBgY2FtZXJhLm9uKCdwcmVyZW5kZXInLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjUFJFX1JFTkRFUlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5CYXNlQ2FtZXJhfSBjYW1lcmEgLSBUaGUgY2FtZXJhIHRoYXQgaXMgYWJvdXQgdG8gcmVuZGVyIHRvIGEgdGV4dHVyZS5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3ByZXJlbmRlcic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/PRE_RENDER_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/events/SHAKE_COMPLETE_EVENT.js":
/*!***************************************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/events/SHAKE_COMPLETE_EVENT.js ***!
\***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Shake Complete Event.\r\n * \r\n * This event is dispatched by a Camera instance when the Shake Effect completes.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#SHAKE_COMPLETE\r\n * @since 3.3.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera that the effect began on.\r\n * @param {Phaser.Cameras.Scene2D.Effects.Shake} effect - A reference to the effect instance.\r\n */\r\nmodule.exports = 'camerashakecomplete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9TSEFLRV9DT01QTEVURV9FVkVOVC5qcz9kNDM4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxxQ0FBcUM7QUFDaEQ7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NhbWVyYXMvMmQvZXZlbnRzL1NIQUtFX0NPTVBMRVRFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIENhbWVyYSBTaGFrZSBDb21wbGV0ZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIENhbWVyYSBpbnN0YW5jZSB3aGVuIHRoZSBTaGFrZSBFZmZlY3QgY29tcGxldGVzLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHMjU0hBS0VfQ09NUExFVEVcclxuICogQHNpbmNlIDMuMy4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgY2FtZXJhIHRoYXQgdGhlIGVmZmVjdCBiZWdhbiBvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuU2hha2V9IGVmZmVjdCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBlZmZlY3QgaW5zdGFuY2UuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdjYW1lcmFzaGFrZWNvbXBsZXRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/SHAKE_COMPLETE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/events/SHAKE_START_EVENT.js":
/*!************************************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/events/SHAKE_START_EVENT.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Shake Start Event.\r\n * \r\n * This event is dispatched by a Camera instance when the Shake Effect starts.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#SHAKE_START\r\n * @since 3.3.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera that the effect began on.\r\n * @param {Phaser.Cameras.Scene2D.Effects.Shake} effect - A reference to the effect instance.\r\n * @param {integer} duration - The duration of the effect.\r\n * @param {number} intensity - The intensity of the effect.\r\n */\r\nmodule.exports = 'camerashakestart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9TSEFLRV9TVEFSVF9FVkVOVC5qcz80ZDdjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxxQ0FBcUM7QUFDaEQsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FtZXJhcy8yZC9ldmVudHMvU0hBS0VfU1RBUlRfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgQ2FtZXJhIFNoYWtlIFN0YXJ0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgQ2FtZXJhIGluc3RhbmNlIHdoZW4gdGhlIFNoYWtlIEVmZmVjdCBzdGFydHMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNTSEFLRV9TVEFSVFxyXG4gKiBAc2luY2UgMy4zLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBjYW1lcmEgdGhhdCB0aGUgZWZmZWN0IGJlZ2FuIG9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuRWZmZWN0cy5TaGFrZX0gZWZmZWN0IC0gQSByZWZlcmVuY2UgdG8gdGhlIGVmZmVjdCBpbnN0YW5jZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBkdXJhdGlvbiAtIFRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZW5zaXR5IC0gVGhlIGludGVuc2l0eSBvZiB0aGUgZWZmZWN0LlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnY2FtZXJhc2hha2VzdGFydCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/SHAKE_START_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/events/ZOOM_COMPLETE_EVENT.js":
/*!**************************************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/events/ZOOM_COMPLETE_EVENT.js ***!
\**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Zoom Complete Event.\r\n * \r\n * This event is dispatched by a Camera instance when the Zoom Effect completes.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#ZOOM_COMPLETE\r\n * @since 3.3.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera that the effect began on.\r\n * @param {Phaser.Cameras.Scene2D.Effects.Zoom} effect - A reference to the effect instance.\r\n */\r\nmodule.exports = 'camerazoomcomplete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9aT09NX0NPTVBMRVRFX0VWRU5ULmpzPzFjYTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLG9DQUFvQztBQUMvQztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FtZXJhcy8yZC9ldmVudHMvWk9PTV9DT01QTEVURV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBDYW1lcmEgWm9vbSBDb21wbGV0ZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIENhbWVyYSBpbnN0YW5jZSB3aGVuIHRoZSBab29tIEVmZmVjdCBjb21wbGV0ZXMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkV2ZW50cyNaT09NX0NPTVBMRVRFXHJcbiAqIEBzaW5jZSAzLjMuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIGNhbWVyYSB0aGF0IHRoZSBlZmZlY3QgYmVnYW4gb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FZmZlY3RzLlpvb219IGVmZmVjdCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBlZmZlY3QgaW5zdGFuY2UuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdjYW1lcmF6b29tY29tcGxldGUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/ZOOM_COMPLETE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/events/ZOOM_START_EVENT.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/events/ZOOM_START_EVENT.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Camera Zoom Start Event.\r\n * \r\n * This event is dispatched by a Camera instance when the Zoom Effect starts.\r\n *\r\n * @event Phaser.Cameras.Scene2D.Events#ZOOM_START\r\n * @since 3.3.0\r\n * \r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera that the effect began on.\r\n * @param {Phaser.Cameras.Scene2D.Effects.Zoom} effect - A reference to the effect instance.\r\n * @param {integer} duration - The duration of the effect.\r\n * @param {number} zoom - The destination zoom value.\r\n */\r\nmodule.exports = 'camerazoomstart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9aT09NX1NUQVJUX0VWRU5ULmpzP2Q0YmUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLG9DQUFvQztBQUMvQyxXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9aT09NX1NUQVJUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIENhbWVyYSBab29tIFN0YXJ0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgQ2FtZXJhIGluc3RhbmNlIHdoZW4gdGhlIFpvb20gRWZmZWN0IHN0YXJ0cy5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5DYW1lcmFzLlNjZW5lMkQuRXZlbnRzI1pPT01fU1RBUlRcclxuICogQHNpbmNlIDMuMy4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgY2FtZXJhIHRoYXQgdGhlIGVmZmVjdCBiZWdhbiBvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkVmZmVjdHMuWm9vbX0gZWZmZWN0IC0gQSByZWZlcmVuY2UgdG8gdGhlIGVmZmVjdCBpbnN0YW5jZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBkdXJhdGlvbiAtIFRoZSBkdXJhdGlvbiBvZiB0aGUgZWZmZWN0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gem9vbSAtIFRoZSBkZXN0aW5hdGlvbiB6b29tIHZhbHVlLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnY2FtZXJhem9vbXN0YXJ0JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/ZOOM_START_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/events/index.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/events/index.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Cameras.Scene2D.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n DESTROY: __webpack_require__(/*! ./DESTROY_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/DESTROY_EVENT.js\"),\r\n FADE_IN_COMPLETE: __webpack_require__(/*! ./FADE_IN_COMPLETE_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/FADE_IN_COMPLETE_EVENT.js\"),\r\n FADE_IN_START: __webpack_require__(/*! ./FADE_IN_START_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/FADE_IN_START_EVENT.js\"),\r\n FADE_OUT_COMPLETE: __webpack_require__(/*! ./FADE_OUT_COMPLETE_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/FADE_OUT_COMPLETE_EVENT.js\"),\r\n FADE_OUT_START: __webpack_require__(/*! ./FADE_OUT_START_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/FADE_OUT_START_EVENT.js\"),\r\n FLASH_COMPLETE: __webpack_require__(/*! ./FLASH_COMPLETE_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/FLASH_COMPLETE_EVENT.js\"),\r\n FLASH_START: __webpack_require__(/*! ./FLASH_START_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/FLASH_START_EVENT.js\"),\r\n PAN_COMPLETE: __webpack_require__(/*! ./PAN_COMPLETE_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/PAN_COMPLETE_EVENT.js\"),\r\n PAN_START: __webpack_require__(/*! ./PAN_START_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/PAN_START_EVENT.js\"),\r\n POST_RENDER: __webpack_require__(/*! ./POST_RENDER_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/POST_RENDER_EVENT.js\"),\r\n PRE_RENDER: __webpack_require__(/*! ./PRE_RENDER_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/PRE_RENDER_EVENT.js\"),\r\n SHAKE_COMPLETE: __webpack_require__(/*! ./SHAKE_COMPLETE_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/SHAKE_COMPLETE_EVENT.js\"),\r\n SHAKE_START: __webpack_require__(/*! ./SHAKE_START_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/SHAKE_START_EVENT.js\"),\r\n ZOOM_COMPLETE: __webpack_require__(/*! ./ZOOM_COMPLETE_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/ZOOM_COMPLETE_EVENT.js\"),\r\n ZOOM_START: __webpack_require__(/*! ./ZOOM_START_EVENT */ \"./node_modules/phaser/src/cameras/2d/events/ZOOM_START_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9pbmRleC5qcz9jNTc3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsYUFBYSxtQkFBTyxDQUFDLHFGQUFpQjtBQUN0QyxzQkFBc0IsbUJBQU8sQ0FBQyx1R0FBMEI7QUFDeEQsbUJBQW1CLG1CQUFPLENBQUMsaUdBQXVCO0FBQ2xELHVCQUF1QixtQkFBTyxDQUFDLHlHQUEyQjtBQUMxRCxvQkFBb0IsbUJBQU8sQ0FBQyxtR0FBd0I7QUFDcEQsb0JBQW9CLG1CQUFPLENBQUMsbUdBQXdCO0FBQ3BELGlCQUFpQixtQkFBTyxDQUFDLDZGQUFxQjtBQUM5QyxrQkFBa0IsbUJBQU8sQ0FBQywrRkFBc0I7QUFDaEQsZUFBZSxtQkFBTyxDQUFDLHlGQUFtQjtBQUMxQyxpQkFBaUIsbUJBQU8sQ0FBQyw2RkFBcUI7QUFDOUMsZ0JBQWdCLG1CQUFPLENBQUMsMkZBQW9CO0FBQzVDLG9CQUFvQixtQkFBTyxDQUFDLG1HQUF3QjtBQUNwRCxpQkFBaUIsbUJBQU8sQ0FBQyw2RkFBcUI7QUFDOUMsbUJBQW1CLG1CQUFPLENBQUMsaUdBQXVCO0FBQ2xELGdCQUFnQixtQkFBTyxDQUFDLDJGQUFvQjs7QUFFNUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2V2ZW50cy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5FdmVudHNcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBERVNUUk9ZOiByZXF1aXJlKCcuL0RFU1RST1lfRVZFTlQnKSxcclxuICAgIEZBREVfSU5fQ09NUExFVEU6IHJlcXVpcmUoJy4vRkFERV9JTl9DT01QTEVURV9FVkVOVCcpLFxyXG4gICAgRkFERV9JTl9TVEFSVDogcmVxdWlyZSgnLi9GQURFX0lOX1NUQVJUX0VWRU5UJyksXHJcbiAgICBGQURFX09VVF9DT01QTEVURTogcmVxdWlyZSgnLi9GQURFX09VVF9DT01QTEVURV9FVkVOVCcpLFxyXG4gICAgRkFERV9PVVRfU1RBUlQ6IHJlcXVpcmUoJy4vRkFERV9PVVRfU1RBUlRfRVZFTlQnKSxcclxuICAgIEZMQVNIX0NPTVBMRVRFOiByZXF1aXJlKCcuL0ZMQVNIX0NPTVBMRVRFX0VWRU5UJyksXHJcbiAgICBGTEFTSF9TVEFSVDogcmVxdWlyZSgnLi9GTEFTSF9TVEFSVF9FVkVOVCcpLFxyXG4gICAgUEFOX0NPTVBMRVRFOiByZXF1aXJlKCcuL1BBTl9DT01QTEVURV9FVkVOVCcpLFxyXG4gICAgUEFOX1NUQVJUOiByZXF1aXJlKCcuL1BBTl9TVEFSVF9FVkVOVCcpLFxyXG4gICAgUE9TVF9SRU5ERVI6IHJlcXVpcmUoJy4vUE9TVF9SRU5ERVJfRVZFTlQnKSxcclxuICAgIFBSRV9SRU5ERVI6IHJlcXVpcmUoJy4vUFJFX1JFTkRFUl9FVkVOVCcpLFxyXG4gICAgU0hBS0VfQ09NUExFVEU6IHJlcXVpcmUoJy4vU0hBS0VfQ09NUExFVEVfRVZFTlQnKSxcclxuICAgIFNIQUtFX1NUQVJUOiByZXF1aXJlKCcuL1NIQUtFX1NUQVJUX0VWRU5UJyksXHJcbiAgICBaT09NX0NPTVBMRVRFOiByZXF1aXJlKCcuL1pPT01fQ09NUExFVEVfRVZFTlQnKSxcclxuICAgIFpPT01fU1RBUlQ6IHJlcXVpcmUoJy4vWk9PTV9TVEFSVF9FVkVOVCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/events/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/2d/index.js":
/*!*****************************************************!*\
!*** ./node_modules/phaser/src/cameras/2d/index.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Cameras.Scene2D\r\n */\r\n\r\nmodule.exports = {\r\n\r\n Camera: __webpack_require__(/*! ./Camera */ \"./node_modules/phaser/src/cameras/2d/Camera.js\"),\r\n BaseCamera: __webpack_require__(/*! ./BaseCamera */ \"./node_modules/phaser/src/cameras/2d/BaseCamera.js\"),\r\n CameraManager: __webpack_require__(/*! ./CameraManager */ \"./node_modules/phaser/src/cameras/2d/CameraManager.js\"),\r\n Effects: __webpack_require__(/*! ./effects */ \"./node_modules/phaser/src/cameras/2d/effects/index.js\"),\r\n Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/cameras/2d/events/index.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzLzJkL2luZGV4LmpzPzFmMDEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQVU7QUFDOUIsZ0JBQWdCLG1CQUFPLENBQUMsd0VBQWM7QUFDdEMsbUJBQW1CLG1CQUFPLENBQUMsOEVBQWlCO0FBQzVDLGFBQWEsbUJBQU8sQ0FBQyx3RUFBVztBQUNoQyxZQUFZLG1CQUFPLENBQUMsc0VBQVU7O0FBRTlCIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FtZXJhcy8yZC9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkNhbWVyYXMuU2NlbmUyRFxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIENhbWVyYTogcmVxdWlyZSgnLi9DYW1lcmEnKSxcclxuICAgIEJhc2VDYW1lcmE6IHJlcXVpcmUoJy4vQmFzZUNhbWVyYScpLFxyXG4gICAgQ2FtZXJhTWFuYWdlcjogcmVxdWlyZSgnLi9DYW1lcmFNYW5hZ2VyJyksXHJcbiAgICBFZmZlY3RzOiByZXF1aXJlKCcuL2VmZmVjdHMnKSxcclxuICAgIEV2ZW50czogcmVxdWlyZSgnLi9ldmVudHMnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/2d/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/controls/FixedKeyControl.js":
/*!*********************************************************************!*\
!*** ./node_modules/phaser/src/cameras/controls/FixedKeyControl.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Fixed Key Camera Control.\r\n *\r\n * This allows you to control the movement and zoom of a camera using the defined keys.\r\n *\r\n * ```javascript\r\n * var camControl = new FixedKeyControl({\r\n * camera: this.cameras.main,\r\n * left: cursors.left,\r\n * right: cursors.right,\r\n * speed: float OR { x: 0, y: 0 }\r\n * });\r\n * ```\r\n *\r\n * Movement is precise and has no 'smoothing' applied to it.\r\n *\r\n * You must call the `update` method of this controller every frame.\r\n *\r\n * @class FixedKeyControl\r\n * @memberof Phaser.Cameras.Controls\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Cameras.Controls.FixedKeyControlConfig} config - The Fixed Key Control configuration object.\r\n */\r\nvar FixedKeyControl = new Class({\r\n\r\n initialize:\r\n\r\n function FixedKeyControl (config)\r\n {\r\n /**\r\n * The Camera that this Control will update.\r\n *\r\n * @name Phaser.Cameras.Controls.FixedKeyControl#camera\r\n * @type {?Phaser.Cameras.Scene2D.Camera}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.camera = GetValue(config, 'camera', null);\r\n\r\n /**\r\n * The Key to be pressed that will move the Camera left.\r\n *\r\n * @name Phaser.Cameras.Controls.FixedKeyControl#left\r\n * @type {?Phaser.Input.Keyboard.Key}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.left = GetValue(config, 'left', null);\r\n\r\n /**\r\n * The Key to be pressed that will move the Camera right.\r\n *\r\n * @name Phaser.Cameras.Controls.FixedKeyControl#right\r\n * @type {?Phaser.Input.Keyboard.Key}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.right = GetValue(config, 'right', null);\r\n\r\n /**\r\n * The Key to be pressed that will move the Camera up.\r\n *\r\n * @name Phaser.Cameras.Controls.FixedKeyControl#up\r\n * @type {?Phaser.Input.Keyboard.Key}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.up = GetValue(config, 'up', null);\r\n\r\n /**\r\n * The Key to be pressed that will move the Camera down.\r\n *\r\n * @name Phaser.Cameras.Controls.FixedKeyControl#down\r\n * @type {?Phaser.Input.Keyboard.Key}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.down = GetValue(config, 'down', null);\r\n\r\n /**\r\n * The Key to be pressed that will zoom the Camera in.\r\n *\r\n * @name Phaser.Cameras.Controls.FixedKeyControl#zoomIn\r\n * @type {?Phaser.Input.Keyboard.Key}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.zoomIn = GetValue(config, 'zoomIn', null);\r\n\r\n /**\r\n * The Key to be pressed that will zoom the Camera out.\r\n *\r\n * @name Phaser.Cameras.Controls.FixedKeyControl#zoomOut\r\n * @type {?Phaser.Input.Keyboard.Key}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.zoomOut = GetValue(config, 'zoomOut', null);\r\n\r\n /**\r\n * The speed at which the camera will zoom if the `zoomIn` or `zoomOut` keys are pressed.\r\n *\r\n * @name Phaser.Cameras.Controls.FixedKeyControl#zoomSpeed\r\n * @type {number}\r\n * @default 0.01\r\n * @since 3.0.0\r\n */\r\n this.zoomSpeed = GetValue(config, 'zoomSpeed', 0.01);\r\n\r\n /**\r\n * The horizontal speed the camera will move.\r\n *\r\n * @name Phaser.Cameras.Controls.FixedKeyControl#speedX\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.speedX = 0;\r\n\r\n /**\r\n * The vertical speed the camera will move.\r\n *\r\n * @name Phaser.Cameras.Controls.FixedKeyControl#speedY\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.speedY = 0;\r\n\r\n var speed = GetValue(config, 'speed', null);\r\n\r\n if (typeof speed === 'number')\r\n {\r\n this.speedX = speed;\r\n this.speedY = speed;\r\n }\r\n else\r\n {\r\n this.speedX = GetValue(config, 'speed.x', 0);\r\n this.speedY = GetValue(config, 'speed.y', 0);\r\n }\r\n\r\n /**\r\n * Internal property to track the current zoom level.\r\n *\r\n * @name Phaser.Cameras.Controls.FixedKeyControl#_zoom\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this._zoom = 0;\r\n\r\n /**\r\n * A flag controlling if the Controls will update the Camera or not.\r\n *\r\n * @name Phaser.Cameras.Controls.FixedKeyControl#active\r\n * @type {boolean}\r\n * @since 3.0.0\r\n */\r\n this.active = (this.camera !== null);\r\n },\r\n\r\n /**\r\n * Starts the Key Control running, providing it has been linked to a camera.\r\n *\r\n * @method Phaser.Cameras.Controls.FixedKeyControl#start\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Cameras.Controls.FixedKeyControl} This Key Control instance.\r\n */\r\n start: function ()\r\n {\r\n this.active = (this.camera !== null);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Stops this Key Control from running. Call `start` to start it again.\r\n *\r\n * @method Phaser.Cameras.Controls.FixedKeyControl#stop\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Cameras.Controls.FixedKeyControl} This Key Control instance.\r\n */\r\n stop: function ()\r\n {\r\n this.active = false;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Binds this Key Control to a camera.\r\n *\r\n * @method Phaser.Cameras.Controls.FixedKeyControl#setCamera\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera to bind this Key Control to.\r\n *\r\n * @return {Phaser.Cameras.Controls.FixedKeyControl} This Key Control instance.\r\n */\r\n setCamera: function (camera)\r\n {\r\n this.camera = camera;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Applies the results of pressing the control keys to the Camera.\r\n *\r\n * You must call this every step, it is not called automatically.\r\n *\r\n * @method Phaser.Cameras.Controls.FixedKeyControl#update\r\n * @since 3.0.0\r\n *\r\n * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n */\r\n update: function (delta)\r\n {\r\n if (!this.active)\r\n {\r\n return;\r\n }\r\n\r\n if (delta === undefined) { delta = 1; }\r\n\r\n var cam = this.camera;\r\n\r\n if (this.up && this.up.isDown)\r\n {\r\n cam.scrollY -= ((this.speedY * delta) | 0);\r\n }\r\n else if (this.down && this.down.isDown)\r\n {\r\n cam.scrollY += ((this.speedY * delta) | 0);\r\n }\r\n\r\n if (this.left && this.left.isDown)\r\n {\r\n cam.scrollX -= ((this.speedX * delta) | 0);\r\n }\r\n else if (this.right && this.right.isDown)\r\n {\r\n cam.scrollX += ((this.speedX * delta) | 0);\r\n }\r\n\r\n // Camera zoom\r\n\r\n if (this.zoomIn && this.zoomIn.isDown)\r\n {\r\n cam.zoom -= this.zoomSpeed;\r\n\r\n if (cam.zoom < 0.1)\r\n {\r\n cam.zoom = 0.1;\r\n }\r\n }\r\n else if (this.zoomOut && this.zoomOut.isDown)\r\n {\r\n cam.zoom += this.zoomSpeed;\r\n }\r\n },\r\n\r\n /**\r\n * Destroys this Key Control.\r\n *\r\n * @method Phaser.Cameras.Controls.FixedKeyControl#destroy\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.camera = null;\r\n\r\n this.left = null;\r\n this.right = null;\r\n this.up = null;\r\n this.down = null;\r\n\r\n this.zoomIn = null;\r\n this.zoomOut = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = FixedKeyControl;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzL2NvbnRyb2xzL0ZpeGVkS2V5Q29udHJvbC5qcz9mNjY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyx1RkFBNkI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEIsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9EQUFvRDtBQUMvRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHdDQUF3QztBQUN4RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHdDQUF3QztBQUN4RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0Isd0NBQXdDO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtDQUFrQyxXQUFXOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FtZXJhcy9jb250cm9scy9GaXhlZEtleUNvbnRyb2wuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBHZXRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRWYWx1ZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBGaXhlZCBLZXkgQ2FtZXJhIENvbnRyb2wuXHJcbiAqXHJcbiAqIFRoaXMgYWxsb3dzIHlvdSB0byBjb250cm9sIHRoZSBtb3ZlbWVudCBhbmQgem9vbSBvZiBhIGNhbWVyYSB1c2luZyB0aGUgZGVmaW5lZCBrZXlzLlxyXG4gKlxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHZhciBjYW1Db250cm9sID0gbmV3IEZpeGVkS2V5Q29udHJvbCh7XHJcbiAqICAgICBjYW1lcmE6IHRoaXMuY2FtZXJhcy5tYWluLFxyXG4gKiAgICAgbGVmdDogY3Vyc29ycy5sZWZ0LFxyXG4gKiAgICAgcmlnaHQ6IGN1cnNvcnMucmlnaHQsXHJcbiAqICAgICBzcGVlZDogZmxvYXQgT1IgeyB4OiAwLCB5OiAwIH1cclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBNb3ZlbWVudCBpcyBwcmVjaXNlIGFuZCBoYXMgbm8gJ3Ntb290aGluZycgYXBwbGllZCB0byBpdC5cclxuICpcclxuICogWW91IG11c3QgY2FsbCB0aGUgYHVwZGF0ZWAgbWV0aG9kIG9mIHRoaXMgY29udHJvbGxlciBldmVyeSBmcmFtZS5cclxuICpcclxuICogQGNsYXNzIEZpeGVkS2V5Q29udHJvbFxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5DYW1lcmFzLkNvbnRyb2xzLkZpeGVkS2V5Q29udHJvbENvbmZpZ30gY29uZmlnIC0gVGhlIEZpeGVkIEtleSBDb250cm9sIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKi9cclxudmFyIEZpeGVkS2V5Q29udHJvbCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBGaXhlZEtleUNvbnRyb2wgKGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQ2FtZXJhIHRoYXQgdGhpcyBDb250cm9sIHdpbGwgdXBkYXRlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuRml4ZWRLZXlDb250cm9sI2NhbWVyYVxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9XHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FtZXJhID0gR2V0VmFsdWUoY29uZmlnLCAnY2FtZXJhJywgbnVsbCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBLZXkgdG8gYmUgcHJlc3NlZCB0aGF0IHdpbGwgbW92ZSB0aGUgQ2FtZXJhIGxlZnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5Db250cm9scy5GaXhlZEtleUNvbnRyb2wjbGVmdFxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLklucHV0LktleWJvYXJkLktleX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sZWZ0ID0gR2V0VmFsdWUoY29uZmlnLCAnbGVmdCcsIG51bGwpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgS2V5IHRvIGJlIHByZXNzZWQgdGhhdCB3aWxsIG1vdmUgdGhlIENhbWVyYSByaWdodC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLkZpeGVkS2V5Q29udHJvbCNyaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLklucHV0LktleWJvYXJkLktleX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yaWdodCA9IEdldFZhbHVlKGNvbmZpZywgJ3JpZ2h0JywgbnVsbCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBLZXkgdG8gYmUgcHJlc3NlZCB0aGF0IHdpbGwgbW92ZSB0aGUgQ2FtZXJhIHVwLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuRml4ZWRLZXlDb250cm9sI3VwXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnVwID0gR2V0VmFsdWUoY29uZmlnLCAndXAnLCBudWxsKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEtleSB0byBiZSBwcmVzc2VkIHRoYXQgd2lsbCBtb3ZlIHRoZSBDYW1lcmEgZG93bi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLkZpeGVkS2V5Q29udHJvbCNkb3duXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRvd24gPSBHZXRWYWx1ZShjb25maWcsICdkb3duJywgbnVsbCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBLZXkgdG8gYmUgcHJlc3NlZCB0aGF0IHdpbGwgem9vbSB0aGUgQ2FtZXJhIGluLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuRml4ZWRLZXlDb250cm9sI3pvb21JblxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLklucHV0LktleWJvYXJkLktleX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy56b29tSW4gPSBHZXRWYWx1ZShjb25maWcsICd6b29tSW4nLCBudWxsKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEtleSB0byBiZSBwcmVzc2VkIHRoYXQgd2lsbCB6b29tIHRoZSBDYW1lcmEgb3V0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuRml4ZWRLZXlDb250cm9sI3pvb21PdXRcclxuICAgICAgICAgKiBAdHlwZSB7P1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXl9XHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuem9vbU91dCA9IEdldFZhbHVlKGNvbmZpZywgJ3pvb21PdXQnLCBudWxsKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHNwZWVkIGF0IHdoaWNoIHRoZSBjYW1lcmEgd2lsbCB6b29tIGlmIHRoZSBgem9vbUluYCBvciBgem9vbU91dGAga2V5cyBhcmUgcHJlc3NlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLkZpeGVkS2V5Q29udHJvbCN6b29tU3BlZWRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDAuMDFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnpvb21TcGVlZCA9IEdldFZhbHVlKGNvbmZpZywgJ3pvb21TcGVlZCcsIDAuMDEpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaG9yaXpvbnRhbCBzcGVlZCB0aGUgY2FtZXJhIHdpbGwgbW92ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLkZpeGVkS2V5Q29udHJvbCNzcGVlZFhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNwZWVkWCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB2ZXJ0aWNhbCBzcGVlZCB0aGUgY2FtZXJhIHdpbGwgbW92ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLkZpeGVkS2V5Q29udHJvbCNzcGVlZFlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNwZWVkWSA9IDA7XHJcblxyXG4gICAgICAgIHZhciBzcGVlZCA9IEdldFZhbHVlKGNvbmZpZywgJ3NwZWVkJywgbnVsbCk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygc3BlZWQgPT09ICdudW1iZXInKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zcGVlZFggPSBzcGVlZDtcclxuICAgICAgICAgICAgdGhpcy5zcGVlZFkgPSBzcGVlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zcGVlZFggPSBHZXRWYWx1ZShjb25maWcsICdzcGVlZC54JywgMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc3BlZWRZID0gR2V0VmFsdWUoY29uZmlnLCAnc3BlZWQueScsIDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgcHJvcGVydHkgdG8gdHJhY2sgdGhlIGN1cnJlbnQgem9vbSBsZXZlbC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLkZpeGVkS2V5Q29udHJvbCNfem9vbVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fem9vbSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgZmxhZyBjb250cm9sbGluZyBpZiB0aGUgQ29udHJvbHMgd2lsbCB1cGRhdGUgdGhlIENhbWVyYSBvciBub3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5Db250cm9scy5GaXhlZEtleUNvbnRyb2wjYWN0aXZlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSAodGhpcy5jYW1lcmEgIT09IG51bGwpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YXJ0cyB0aGUgS2V5IENvbnRyb2wgcnVubmluZywgcHJvdmlkaW5nIGl0IGhhcyBiZWVuIGxpbmtlZCB0byBhIGNhbWVyYS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLkZpeGVkS2V5Q29udHJvbCNzdGFydFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuRml4ZWRLZXlDb250cm9sfSBUaGlzIEtleSBDb250cm9sIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZSA9ICh0aGlzLmNhbWVyYSAhPT0gbnVsbCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIHRoaXMgS2V5IENvbnRyb2wgZnJvbSBydW5uaW5nLiBDYWxsIGBzdGFydGAgdG8gc3RhcnQgaXQgYWdhaW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5Db250cm9scy5GaXhlZEtleUNvbnRyb2wjc3RvcFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuRml4ZWRLZXlDb250cm9sfSBUaGlzIEtleSBDb250cm9sIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzdG9wOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJpbmRzIHRoaXMgS2V5IENvbnRyb2wgdG8gYSBjYW1lcmEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5Db250cm9scy5GaXhlZEtleUNvbnRyb2wjc2V0Q2FtZXJhXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgY2FtZXJhIHRvIGJpbmQgdGhpcyBLZXkgQ29udHJvbCB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5Db250cm9scy5GaXhlZEtleUNvbnRyb2x9IFRoaXMgS2V5IENvbnRyb2wgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldENhbWVyYTogZnVuY3Rpb24gKGNhbWVyYSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNhbWVyYSA9IGNhbWVyYTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbGllcyB0aGUgcmVzdWx0cyBvZiBwcmVzc2luZyB0aGUgY29udHJvbCBrZXlzIHRvIHRoZSBDYW1lcmEuXHJcbiAgICAgKlxyXG4gICAgICogWW91IG11c3QgY2FsbCB0aGlzIGV2ZXJ5IHN0ZXAsIGl0IGlzIG5vdCBjYWxsZWQgYXV0b21hdGljYWxseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLkZpeGVkS2V5Q29udHJvbCN1cGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lIGluIG1zIHNpbmNlIHRoZSBsYXN0IGZyYW1lLiBUaGlzIGlzIGEgc21vb3RoZWQgYW5kIGNhcHBlZCB2YWx1ZSBiYXNlZCBvbiB0aGUgRlBTIHJhdGUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGRlbHRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5hY3RpdmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGVsdGEgPT09IHVuZGVmaW5lZCkgeyBkZWx0YSA9IDE7IH1cclxuXHJcbiAgICAgICAgdmFyIGNhbSA9IHRoaXMuY2FtZXJhO1xyXG5cclxuICAgICAgICBpZiAodGhpcy51cCAmJiB0aGlzLnVwLmlzRG93bilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhbS5zY3JvbGxZIC09ICgodGhpcy5zcGVlZFkgKiBkZWx0YSkgfCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5kb3duICYmIHRoaXMuZG93bi5pc0Rvd24pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjYW0uc2Nyb2xsWSArPSAoKHRoaXMuc3BlZWRZICogZGVsdGEpIHwgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5sZWZ0ICYmIHRoaXMubGVmdC5pc0Rvd24pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjYW0uc2Nyb2xsWCAtPSAoKHRoaXMuc3BlZWRYICogZGVsdGEpIHwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMucmlnaHQgJiYgdGhpcy5yaWdodC5pc0Rvd24pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjYW0uc2Nyb2xsWCArPSAoKHRoaXMuc3BlZWRYICogZGVsdGEpIHwgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgQ2FtZXJhIHpvb21cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuem9vbUluICYmIHRoaXMuem9vbUluLmlzRG93bilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhbS56b29tIC09IHRoaXMuem9vbVNwZWVkO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNhbS56b29tIDwgMC4xKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjYW0uem9vbSA9IDAuMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnpvb21PdXQgJiYgdGhpcy56b29tT3V0LmlzRG93bilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhbS56b29tICs9IHRoaXMuem9vbVNwZWVkO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGlzIEtleSBDb250cm9sLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuRml4ZWRLZXlDb250cm9sI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuY2FtZXJhID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5sZWZ0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnJpZ2h0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnVwID0gbnVsbDtcclxuICAgICAgICB0aGlzLmRvd24gPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLnpvb21JbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy56b29tT3V0ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBGaXhlZEtleUNvbnRyb2w7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/controls/FixedKeyControl.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/controls/SmoothedKeyControl.js":
/*!************************************************************************!*\
!*** ./node_modules/phaser/src/cameras/controls/SmoothedKeyControl.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Smoothed Key Camera Control.\r\n *\r\n * This allows you to control the movement and zoom of a camera using the defined keys.\r\n * Unlike the Fixed Camera Control you can also provide physics values for acceleration, drag and maxSpeed for smoothing effects.\r\n *\r\n * ```javascript\r\n * var controlConfig = {\r\n * camera: this.cameras.main,\r\n * left: cursors.left,\r\n * right: cursors.right,\r\n * up: cursors.up,\r\n * down: cursors.down,\r\n * zoomIn: this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.Q),\r\n * zoomOut: this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.E),\r\n * zoomSpeed: 0.02,\r\n * acceleration: 0.06,\r\n * drag: 0.0005,\r\n * maxSpeed: 1.0\r\n * };\r\n * ```\r\n * \r\n * You must call the `update` method of this controller every frame.\r\n *\r\n * @class SmoothedKeyControl\r\n * @memberof Phaser.Cameras.Controls\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Cameras.Controls.SmoothedKeyControlConfig} config - The Smoothed Key Control configuration object.\r\n */\r\nvar SmoothedKeyControl = new Class({\r\n\r\n initialize:\r\n\r\n function SmoothedKeyControl (config)\r\n {\r\n /**\r\n * The Camera that this Control will update.\r\n *\r\n * @name Phaser.Cameras.Controls.SmoothedKeyControl#camera\r\n * @type {?Phaser.Cameras.Scene2D.Camera}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.camera = GetValue(config, 'camera', null);\r\n\r\n /**\r\n * The Key to be pressed that will move the Camera left.\r\n *\r\n * @name Phaser.Cameras.Controls.SmoothedKeyControl#left\r\n * @type {?Phaser.Input.Keyboard.Key}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.left = GetValue(config, 'left', null);\r\n\r\n /**\r\n * The Key to be pressed that will move the Camera right.\r\n *\r\n * @name Phaser.Cameras.Controls.SmoothedKeyControl#right\r\n * @type {?Phaser.Input.Keyboard.Key}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.right = GetValue(config, 'right', null);\r\n\r\n /**\r\n * The Key to be pressed that will move the Camera up.\r\n *\r\n * @name Phaser.Cameras.Controls.SmoothedKeyControl#up\r\n * @type {?Phaser.Input.Keyboard.Key}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.up = GetValue(config, 'up', null);\r\n\r\n /**\r\n * The Key to be pressed that will move the Camera down.\r\n *\r\n * @name Phaser.Cameras.Controls.SmoothedKeyControl#down\r\n * @type {?Phaser.Input.Keyboard.Key}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.down = GetValue(config, 'down', null);\r\n\r\n /**\r\n * The Key to be pressed that will zoom the Camera in.\r\n *\r\n * @name Phaser.Cameras.Controls.SmoothedKeyControl#zoomIn\r\n * @type {?Phaser.Input.Keyboard.Key}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.zoomIn = GetValue(config, 'zoomIn', null);\r\n\r\n /**\r\n * The Key to be pressed that will zoom the Camera out.\r\n *\r\n * @name Phaser.Cameras.Controls.SmoothedKeyControl#zoomOut\r\n * @type {?Phaser.Input.Keyboard.Key}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.zoomOut = GetValue(config, 'zoomOut', null);\r\n\r\n /**\r\n * The speed at which the camera will zoom if the `zoomIn` or `zoomOut` keys are pressed.\r\n *\r\n * @name Phaser.Cameras.Controls.SmoothedKeyControl#zoomSpeed\r\n * @type {number}\r\n * @default 0.01\r\n * @since 3.0.0\r\n */\r\n this.zoomSpeed = GetValue(config, 'zoomSpeed', 0.01);\r\n\r\n /**\r\n * The horizontal acceleration the camera will move.\r\n *\r\n * @name Phaser.Cameras.Controls.SmoothedKeyControl#accelX\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.accelX = 0;\r\n\r\n /**\r\n * The vertical acceleration the camera will move.\r\n *\r\n * @name Phaser.Cameras.Controls.SmoothedKeyControl#accelY\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.accelY = 0;\r\n\r\n var accel = GetValue(config, 'acceleration', null);\r\n\r\n if (typeof accel === 'number')\r\n {\r\n this.accelX = accel;\r\n this.accelY = accel;\r\n }\r\n else\r\n {\r\n this.accelX = GetValue(config, 'acceleration.x', 0);\r\n this.accelY = GetValue(config, 'acceleration.y', 0);\r\n }\r\n\r\n /**\r\n * The horizontal drag applied to the camera when it is moving.\r\n *\r\n * @name Phaser.Cameras.Controls.SmoothedKeyControl#dragX\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.dragX = 0;\r\n\r\n /**\r\n * The vertical drag applied to the camera when it is moving.\r\n *\r\n * @name Phaser.Cameras.Controls.SmoothedKeyControl#dragY\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.dragY = 0;\r\n\r\n var drag = GetValue(config, 'drag', null);\r\n\r\n if (typeof drag === 'number')\r\n {\r\n this.dragX = drag;\r\n this.dragY = drag;\r\n }\r\n else\r\n {\r\n this.dragX = GetValue(config, 'drag.x', 0);\r\n this.dragY = GetValue(config, 'drag.y', 0);\r\n }\r\n\r\n /**\r\n * The maximum horizontal speed the camera will move.\r\n *\r\n * @name Phaser.Cameras.Controls.SmoothedKeyControl#maxSpeedX\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.maxSpeedX = 0;\r\n\r\n /**\r\n * The maximum vertical speed the camera will move.\r\n *\r\n * @name Phaser.Cameras.Controls.SmoothedKeyControl#maxSpeedY\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.maxSpeedY = 0;\r\n\r\n var maxSpeed = GetValue(config, 'maxSpeed', null);\r\n\r\n if (typeof maxSpeed === 'number')\r\n {\r\n this.maxSpeedX = maxSpeed;\r\n this.maxSpeedY = maxSpeed;\r\n }\r\n else\r\n {\r\n this.maxSpeedX = GetValue(config, 'maxSpeed.x', 0);\r\n this.maxSpeedY = GetValue(config, 'maxSpeed.y', 0);\r\n }\r\n\r\n /**\r\n * Internal property to track the speed of the control.\r\n *\r\n * @name Phaser.Cameras.Controls.SmoothedKeyControl#_speedX\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this._speedX = 0;\r\n\r\n /**\r\n * Internal property to track the speed of the control.\r\n *\r\n * @name Phaser.Cameras.Controls.SmoothedKeyControl#_speedY\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this._speedY = 0;\r\n\r\n /**\r\n * Internal property to track the zoom of the control.\r\n *\r\n * @name Phaser.Cameras.Controls.SmoothedKeyControl#_zoom\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this._zoom = 0;\r\n\r\n /**\r\n * A flag controlling if the Controls will update the Camera or not.\r\n *\r\n * @name Phaser.Cameras.Controls.SmoothedKeyControl#active\r\n * @type {boolean}\r\n * @since 3.0.0\r\n */\r\n this.active = (this.camera !== null);\r\n },\r\n\r\n /**\r\n * Starts the Key Control running, providing it has been linked to a camera.\r\n *\r\n * @method Phaser.Cameras.Controls.SmoothedKeyControl#start\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Cameras.Controls.SmoothedKeyControl} This Key Control instance.\r\n */\r\n start: function ()\r\n {\r\n this.active = (this.camera !== null);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Stops this Key Control from running. Call `start` to start it again.\r\n *\r\n * @method Phaser.Cameras.Controls.SmoothedKeyControl#stop\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Cameras.Controls.SmoothedKeyControl} This Key Control instance.\r\n */\r\n stop: function ()\r\n {\r\n this.active = false;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Binds this Key Control to a camera.\r\n *\r\n * @method Phaser.Cameras.Controls.SmoothedKeyControl#setCamera\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera to bind this Key Control to.\r\n *\r\n * @return {Phaser.Cameras.Controls.SmoothedKeyControl} This Key Control instance.\r\n */\r\n setCamera: function (camera)\r\n {\r\n this.camera = camera;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Applies the results of pressing the control keys to the Camera.\r\n *\r\n * You must call this every step, it is not called automatically.\r\n *\r\n * @method Phaser.Cameras.Controls.SmoothedKeyControl#update\r\n * @since 3.0.0\r\n *\r\n * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n */\r\n update: function (delta)\r\n {\r\n if (!this.active)\r\n {\r\n return;\r\n }\r\n\r\n if (delta === undefined) { delta = 1; }\r\n\r\n var cam = this.camera;\r\n\r\n // Apply Deceleration\r\n\r\n if (this._speedX > 0)\r\n {\r\n this._speedX -= this.dragX * delta;\r\n\r\n if (this._speedX < 0)\r\n {\r\n this._speedX = 0;\r\n }\r\n }\r\n else if (this._speedX < 0)\r\n {\r\n this._speedX += this.dragX * delta;\r\n\r\n if (this._speedX > 0)\r\n {\r\n this._speedX = 0;\r\n }\r\n }\r\n\r\n if (this._speedY > 0)\r\n {\r\n this._speedY -= this.dragY * delta;\r\n\r\n if (this._speedY < 0)\r\n {\r\n this._speedY = 0;\r\n }\r\n }\r\n else if (this._speedY < 0)\r\n {\r\n this._speedY += this.dragY * delta;\r\n\r\n if (this._speedY > 0)\r\n {\r\n this._speedY = 0;\r\n }\r\n }\r\n\r\n // Check for keys\r\n\r\n if (this.up && this.up.isDown)\r\n {\r\n this._speedY += this.accelY;\r\n\r\n if (this._speedY > this.maxSpeedY)\r\n {\r\n this._speedY = this.maxSpeedY;\r\n }\r\n }\r\n else if (this.down && this.down.isDown)\r\n {\r\n this._speedY -= this.accelY;\r\n\r\n if (this._speedY < -this.maxSpeedY)\r\n {\r\n this._speedY = -this.maxSpeedY;\r\n }\r\n }\r\n\r\n if (this.left && this.left.isDown)\r\n {\r\n this._speedX += this.accelX;\r\n\r\n if (this._speedX > this.maxSpeedX)\r\n {\r\n this._speedX = this.maxSpeedX;\r\n }\r\n }\r\n else if (this.right && this.right.isDown)\r\n {\r\n this._speedX -= this.accelX;\r\n\r\n if (this._speedX < -this.maxSpeedX)\r\n {\r\n this._speedX = -this.maxSpeedX;\r\n }\r\n }\r\n\r\n // Camera zoom\r\n\r\n if (this.zoomIn && this.zoomIn.isDown)\r\n {\r\n this._zoom = -this.zoomSpeed;\r\n }\r\n else if (this.zoomOut && this.zoomOut.isDown)\r\n {\r\n this._zoom = this.zoomSpeed;\r\n }\r\n else\r\n {\r\n this._zoom = 0;\r\n }\r\n\r\n // Apply to Camera\r\n\r\n if (this._speedX !== 0)\r\n {\r\n cam.scrollX -= ((this._speedX * delta) | 0);\r\n }\r\n\r\n if (this._speedY !== 0)\r\n {\r\n cam.scrollY -= ((this._speedY * delta) | 0);\r\n }\r\n\r\n if (this._zoom !== 0)\r\n {\r\n cam.zoom += this._zoom;\r\n\r\n if (cam.zoom < 0.001)\r\n {\r\n cam.zoom = 0.001;\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Destroys this Key Control.\r\n *\r\n * @method Phaser.Cameras.Controls.SmoothedKeyControl#destroy\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.camera = null;\r\n\r\n this.left = null;\r\n this.right = null;\r\n this.up = null;\r\n this.down = null;\r\n\r\n this.zoomIn = null;\r\n this.zoomOut = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = SmoothedKeyControl;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzL2NvbnRyb2xzL1Ntb290aGVkS2V5Q29udHJvbC5qcz9lZmM3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyx1RkFBNkI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdURBQXVEO0FBQ2xFO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDJDQUEyQztBQUMzRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDJDQUEyQztBQUMzRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IsMkNBQTJDO0FBQzNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtDQUFrQyxXQUFXOztBQUU3Qzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY2FtZXJhcy9jb250cm9scy9TbW9vdGhlZEtleUNvbnRyb2wuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBHZXRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRWYWx1ZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBTbW9vdGhlZCBLZXkgQ2FtZXJhIENvbnRyb2wuXHJcbiAqXHJcbiAqIFRoaXMgYWxsb3dzIHlvdSB0byBjb250cm9sIHRoZSBtb3ZlbWVudCBhbmQgem9vbSBvZiBhIGNhbWVyYSB1c2luZyB0aGUgZGVmaW5lZCBrZXlzLlxyXG4gKiBVbmxpa2UgdGhlIEZpeGVkIENhbWVyYSBDb250cm9sIHlvdSBjYW4gYWxzbyBwcm92aWRlIHBoeXNpY3MgdmFsdWVzIGZvciBhY2NlbGVyYXRpb24sIGRyYWcgYW5kIG1heFNwZWVkIGZvciBzbW9vdGhpbmcgZWZmZWN0cy5cclxuICpcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB2YXIgY29udHJvbENvbmZpZyA9IHtcclxuICogICAgIGNhbWVyYTogdGhpcy5jYW1lcmFzLm1haW4sXHJcbiAqICAgICBsZWZ0OiBjdXJzb3JzLmxlZnQsXHJcbiAqICAgICByaWdodDogY3Vyc29ycy5yaWdodCxcclxuICogICAgIHVwOiBjdXJzb3JzLnVwLFxyXG4gKiAgICAgZG93bjogY3Vyc29ycy5kb3duLFxyXG4gKiAgICAgem9vbUluOiB0aGlzLmlucHV0LmtleWJvYXJkLmFkZEtleShQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuUSksXHJcbiAqICAgICB6b29tT3V0OiB0aGlzLmlucHV0LmtleWJvYXJkLmFkZEtleShQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuRSksXHJcbiAqICAgICB6b29tU3BlZWQ6IDAuMDIsXHJcbiAqICAgICBhY2NlbGVyYXRpb246IDAuMDYsXHJcbiAqICAgICBkcmFnOiAwLjAwMDUsXHJcbiAqICAgICBtYXhTcGVlZDogMS4wXHJcbiAqIH07XHJcbiAqIGBgYFxyXG4gKiBcclxuICogWW91IG11c3QgY2FsbCB0aGUgYHVwZGF0ZWAgbWV0aG9kIG9mIHRoaXMgY29udHJvbGxlciBldmVyeSBmcmFtZS5cclxuICpcclxuICogQGNsYXNzIFNtb290aGVkS2V5Q29udHJvbFxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5DYW1lcmFzLkNvbnRyb2xzLlNtb290aGVkS2V5Q29udHJvbENvbmZpZ30gY29uZmlnIC0gVGhlIFNtb290aGVkIEtleSBDb250cm9sIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKi9cclxudmFyIFNtb290aGVkS2V5Q29udHJvbCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBTbW9vdGhlZEtleUNvbnRyb2wgKGNvbmZpZylcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQ2FtZXJhIHRoYXQgdGhpcyBDb250cm9sIHdpbGwgdXBkYXRlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuU21vb3RoZWRLZXlDb250cm9sI2NhbWVyYVxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9XHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FtZXJhID0gR2V0VmFsdWUoY29uZmlnLCAnY2FtZXJhJywgbnVsbCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBLZXkgdG8gYmUgcHJlc3NlZCB0aGF0IHdpbGwgbW92ZSB0aGUgQ2FtZXJhIGxlZnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5Db250cm9scy5TbW9vdGhlZEtleUNvbnRyb2wjbGVmdFxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLklucHV0LktleWJvYXJkLktleX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sZWZ0ID0gR2V0VmFsdWUoY29uZmlnLCAnbGVmdCcsIG51bGwpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgS2V5IHRvIGJlIHByZXNzZWQgdGhhdCB3aWxsIG1vdmUgdGhlIENhbWVyYSByaWdodC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLlNtb290aGVkS2V5Q29udHJvbCNyaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLklucHV0LktleWJvYXJkLktleX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yaWdodCA9IEdldFZhbHVlKGNvbmZpZywgJ3JpZ2h0JywgbnVsbCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBLZXkgdG8gYmUgcHJlc3NlZCB0aGF0IHdpbGwgbW92ZSB0aGUgQ2FtZXJhIHVwLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuU21vb3RoZWRLZXlDb250cm9sI3VwXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnVwID0gR2V0VmFsdWUoY29uZmlnLCAndXAnLCBudWxsKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEtleSB0byBiZSBwcmVzc2VkIHRoYXQgd2lsbCBtb3ZlIHRoZSBDYW1lcmEgZG93bi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLlNtb290aGVkS2V5Q29udHJvbCNkb3duXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRvd24gPSBHZXRWYWx1ZShjb25maWcsICdkb3duJywgbnVsbCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBLZXkgdG8gYmUgcHJlc3NlZCB0aGF0IHdpbGwgem9vbSB0aGUgQ2FtZXJhIGluLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuU21vb3RoZWRLZXlDb250cm9sI3pvb21JblxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLklucHV0LktleWJvYXJkLktleX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy56b29tSW4gPSBHZXRWYWx1ZShjb25maWcsICd6b29tSW4nLCBudWxsKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEtleSB0byBiZSBwcmVzc2VkIHRoYXQgd2lsbCB6b29tIHRoZSBDYW1lcmEgb3V0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuU21vb3RoZWRLZXlDb250cm9sI3pvb21PdXRcclxuICAgICAgICAgKiBAdHlwZSB7P1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXl9XHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuem9vbU91dCA9IEdldFZhbHVlKGNvbmZpZywgJ3pvb21PdXQnLCBudWxsKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHNwZWVkIGF0IHdoaWNoIHRoZSBjYW1lcmEgd2lsbCB6b29tIGlmIHRoZSBgem9vbUluYCBvciBgem9vbU91dGAga2V5cyBhcmUgcHJlc3NlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLlNtb290aGVkS2V5Q29udHJvbCN6b29tU3BlZWRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDAuMDFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnpvb21TcGVlZCA9IEdldFZhbHVlKGNvbmZpZywgJ3pvb21TcGVlZCcsIDAuMDEpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaG9yaXpvbnRhbCBhY2NlbGVyYXRpb24gdGhlIGNhbWVyYSB3aWxsIG1vdmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5Db250cm9scy5TbW9vdGhlZEtleUNvbnRyb2wjYWNjZWxYXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hY2NlbFggPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmVydGljYWwgYWNjZWxlcmF0aW9uIHRoZSBjYW1lcmEgd2lsbCBtb3ZlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuU21vb3RoZWRLZXlDb250cm9sI2FjY2VsWVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWNjZWxZID0gMDtcclxuXHJcbiAgICAgICAgdmFyIGFjY2VsID0gR2V0VmFsdWUoY29uZmlnLCAnYWNjZWxlcmF0aW9uJywgbnVsbCk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgYWNjZWwgPT09ICdudW1iZXInKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5hY2NlbFggPSBhY2NlbDtcclxuICAgICAgICAgICAgdGhpcy5hY2NlbFkgPSBhY2NlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5hY2NlbFggPSBHZXRWYWx1ZShjb25maWcsICdhY2NlbGVyYXRpb24ueCcsIDApO1xyXG4gICAgICAgICAgICB0aGlzLmFjY2VsWSA9IEdldFZhbHVlKGNvbmZpZywgJ2FjY2VsZXJhdGlvbi55JywgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaG9yaXpvbnRhbCBkcmFnIGFwcGxpZWQgdG8gdGhlIGNhbWVyYSB3aGVuIGl0IGlzIG1vdmluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLlNtb290aGVkS2V5Q29udHJvbCNkcmFnWFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZHJhZ1ggPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmVydGljYWwgZHJhZyBhcHBsaWVkIHRvIHRoZSBjYW1lcmEgd2hlbiBpdCBpcyBtb3ZpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5Db250cm9scy5TbW9vdGhlZEtleUNvbnRyb2wjZHJhZ1lcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRyYWdZID0gMDtcclxuXHJcbiAgICAgICAgdmFyIGRyYWcgPSBHZXRWYWx1ZShjb25maWcsICdkcmFnJywgbnVsbCk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgZHJhZyA9PT0gJ251bWJlcicpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmRyYWdYID0gZHJhZztcclxuICAgICAgICAgICAgdGhpcy5kcmFnWSA9IGRyYWc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhZ1ggPSBHZXRWYWx1ZShjb25maWcsICdkcmFnLngnLCAwKTtcclxuICAgICAgICAgICAgdGhpcy5kcmFnWSA9IEdldFZhbHVlKGNvbmZpZywgJ2RyYWcueScsIDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG1heGltdW0gaG9yaXpvbnRhbCBzcGVlZCB0aGUgY2FtZXJhIHdpbGwgbW92ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLlNtb290aGVkS2V5Q29udHJvbCNtYXhTcGVlZFhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1heFNwZWVkWCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBtYXhpbXVtIHZlcnRpY2FsIHNwZWVkIHRoZSBjYW1lcmEgd2lsbCBtb3ZlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuU21vb3RoZWRLZXlDb250cm9sI21heFNwZWVkWVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWF4U3BlZWRZID0gMDtcclxuXHJcbiAgICAgICAgdmFyIG1heFNwZWVkID0gR2V0VmFsdWUoY29uZmlnLCAnbWF4U3BlZWQnLCBudWxsKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBtYXhTcGVlZCA9PT0gJ251bWJlcicpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1heFNwZWVkWCA9IG1heFNwZWVkO1xyXG4gICAgICAgICAgICB0aGlzLm1heFNwZWVkWSA9IG1heFNwZWVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1heFNwZWVkWCA9IEdldFZhbHVlKGNvbmZpZywgJ21heFNwZWVkLngnLCAwKTtcclxuICAgICAgICAgICAgdGhpcy5tYXhTcGVlZFkgPSBHZXRWYWx1ZShjb25maWcsICdtYXhTcGVlZC55JywgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCBwcm9wZXJ0eSB0byB0cmFjayB0aGUgc3BlZWQgb2YgdGhlIGNvbnRyb2wuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ2FtZXJhcy5Db250cm9scy5TbW9vdGhlZEtleUNvbnRyb2wjX3NwZWVkWFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fc3BlZWRYID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgcHJvcGVydHkgdG8gdHJhY2sgdGhlIHNwZWVkIG9mIHRoZSBjb250cm9sLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuU21vb3RoZWRLZXlDb250cm9sI19zcGVlZFlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3NwZWVkWSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIHByb3BlcnR5IHRvIHRyYWNrIHRoZSB6b29tIG9mIHRoZSBjb250cm9sLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuU21vb3RoZWRLZXlDb250cm9sI196b29tXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl96b29tID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBmbGFnIGNvbnRyb2xsaW5nIGlmIHRoZSBDb250cm9scyB3aWxsIHVwZGF0ZSB0aGUgQ2FtZXJhIG9yIG5vdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLlNtb290aGVkS2V5Q29udHJvbCNhY3RpdmVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFjdGl2ZSA9ICh0aGlzLmNhbWVyYSAhPT0gbnVsbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RhcnRzIHRoZSBLZXkgQ29udHJvbCBydW5uaW5nLCBwcm92aWRpbmcgaXQgaGFzIGJlZW4gbGlua2VkIHRvIGEgY2FtZXJhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuU21vb3RoZWRLZXlDb250cm9sI3N0YXJ0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5Db250cm9scy5TbW9vdGhlZEtleUNvbnRyb2x9IFRoaXMgS2V5IENvbnRyb2wgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gKHRoaXMuY2FtZXJhICE9PSBudWxsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcHMgdGhpcyBLZXkgQ29udHJvbCBmcm9tIHJ1bm5pbmcuIENhbGwgYHN0YXJ0YCB0byBzdGFydCBpdCBhZ2Fpbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLlNtb290aGVkS2V5Q29udHJvbCNzdG9wXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ2FtZXJhcy5Db250cm9scy5TbW9vdGhlZEtleUNvbnRyb2x9IFRoaXMgS2V5IENvbnRyb2wgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQmluZHMgdGhpcyBLZXkgQ29udHJvbCB0byBhIGNhbWVyYS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzLlNtb290aGVkS2V5Q29udHJvbCNzZXRDYW1lcmFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBjYW1lcmEgdG8gYmluZCB0aGlzIEtleSBDb250cm9sIHRvLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DYW1lcmFzLkNvbnRyb2xzLlNtb290aGVkS2V5Q29udHJvbH0gVGhpcyBLZXkgQ29udHJvbCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0Q2FtZXJhOiBmdW5jdGlvbiAoY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuY2FtZXJhID0gY2FtZXJhO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBsaWVzIHRoZSByZXN1bHRzIG9mIHByZXNzaW5nIHRoZSBjb250cm9sIGtleXMgdG8gdGhlIENhbWVyYS5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgbXVzdCBjYWxsIHRoaXMgZXZlcnkgc3RlcCwgaXQgaXMgbm90IGNhbGxlZCBhdXRvbWF0aWNhbGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNhbWVyYXMuQ29udHJvbHMuU21vb3RoZWRLZXlDb250cm9sI3VwZGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUgaW4gbXMgc2luY2UgdGhlIGxhc3QgZnJhbWUuIFRoaXMgaXMgYSBzbW9vdGhlZCBhbmQgY2FwcGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBGUFMgcmF0ZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkZWx0YSA9PT0gdW5kZWZpbmVkKSB7IGRlbHRhID0gMTsgfVxyXG5cclxuICAgICAgICB2YXIgY2FtID0gdGhpcy5jYW1lcmE7XHJcblxyXG4gICAgICAgIC8vICBBcHBseSBEZWNlbGVyYXRpb25cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3NwZWVkWCA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9zcGVlZFggLT0gdGhpcy5kcmFnWCAqIGRlbHRhO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3NwZWVkWCA8IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NwZWVkWCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fc3BlZWRYIDwgMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NwZWVkWCArPSB0aGlzLmRyYWdYICogZGVsdGE7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fc3BlZWRYID4gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3BlZWRYID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3NwZWVkWSA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9zcGVlZFkgLT0gdGhpcy5kcmFnWSAqIGRlbHRhO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3NwZWVkWSA8IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NwZWVkWSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fc3BlZWRZIDwgMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NwZWVkWSArPSB0aGlzLmRyYWdZICogZGVsdGE7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fc3BlZWRZID4gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3BlZWRZID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIENoZWNrIGZvciBrZXlzXHJcblxyXG4gICAgICAgIGlmICh0aGlzLnVwICYmIHRoaXMudXAuaXNEb3duKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fc3BlZWRZICs9IHRoaXMuYWNjZWxZO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3NwZWVkWSA+IHRoaXMubWF4U3BlZWRZKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zcGVlZFkgPSB0aGlzLm1heFNwZWVkWTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmRvd24gJiYgdGhpcy5kb3duLmlzRG93bilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NwZWVkWSAtPSB0aGlzLmFjY2VsWTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9zcGVlZFkgPCAtdGhpcy5tYXhTcGVlZFkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NwZWVkWSA9IC10aGlzLm1heFNwZWVkWTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMubGVmdCAmJiB0aGlzLmxlZnQuaXNEb3duKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fc3BlZWRYICs9IHRoaXMuYWNjZWxYO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3NwZWVkWCA+IHRoaXMubWF4U3BlZWRYKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zcGVlZFggPSB0aGlzLm1heFNwZWVkWDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnJpZ2h0ICYmIHRoaXMucmlnaHQuaXNEb3duKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fc3BlZWRYIC09IHRoaXMuYWNjZWxYO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3NwZWVkWCA8IC10aGlzLm1heFNwZWVkWClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3BlZWRYID0gLXRoaXMubWF4U3BlZWRYO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgQ2FtZXJhIHpvb21cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuem9vbUluICYmIHRoaXMuem9vbUluLmlzRG93bilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3pvb20gPSAtdGhpcy56b29tU3BlZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuem9vbU91dCAmJiB0aGlzLnpvb21PdXQuaXNEb3duKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fem9vbSA9IHRoaXMuem9vbVNwZWVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl96b29tID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBBcHBseSB0byBDYW1lcmFcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3NwZWVkWCAhPT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhbS5zY3JvbGxYIC09ICgodGhpcy5fc3BlZWRYICogZGVsdGEpIHwgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fc3BlZWRZICE9PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2FtLnNjcm9sbFkgLT0gKCh0aGlzLl9zcGVlZFkgKiBkZWx0YSkgfCAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl96b29tICE9PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2FtLnpvb20gKz0gdGhpcy5fem9vbTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjYW0uem9vbSA8IDAuMDAxKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjYW0uem9vbSA9IDAuMDAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoaXMgS2V5IENvbnRyb2wuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ2FtZXJhcy5Db250cm9scy5TbW9vdGhlZEtleUNvbnRyb2wjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jYW1lcmEgPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLmxlZnQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucmlnaHQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudXAgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZG93biA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuem9vbUluID0gbnVsbDtcclxuICAgICAgICB0aGlzLnpvb21PdXQgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNtb290aGVkS2V5Q29udHJvbDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/controls/SmoothedKeyControl.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/controls/index.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/cameras/controls/index.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Cameras.Controls\r\n */\r\n\r\nmodule.exports = {\r\n\r\n FixedKeyControl: __webpack_require__(/*! ./FixedKeyControl */ \"./node_modules/phaser/src/cameras/controls/FixedKeyControl.js\"),\r\n SmoothedKeyControl: __webpack_require__(/*! ./SmoothedKeyControl */ \"./node_modules/phaser/src/cameras/controls/SmoothedKeyControl.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzL2NvbnRyb2xzL2luZGV4LmpzP2Y4MGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxxQkFBcUIsbUJBQU8sQ0FBQyx3RkFBbUI7QUFDaEQsd0JBQXdCLG1CQUFPLENBQUMsOEZBQXNCOztBQUV0RCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NhbWVyYXMvY29udHJvbHMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5DYW1lcmFzLkNvbnRyb2xzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgRml4ZWRLZXlDb250cm9sOiByZXF1aXJlKCcuL0ZpeGVkS2V5Q29udHJvbCcpLFxyXG4gICAgU21vb3RoZWRLZXlDb250cm9sOiByZXF1aXJlKCcuL1Ntb290aGVkS2V5Q29udHJvbCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/controls/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/cameras/index.js":
/*!**************************************************!*\
!*** ./node_modules/phaser/src/cameras/index.js ***!
\**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Cameras\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Types.Cameras\r\n */\r\n\r\nmodule.exports = {\r\n\r\n Controls: __webpack_require__(/*! ./controls */ \"./node_modules/phaser/src/cameras/controls/index.js\"),\r\n Scene2D: __webpack_require__(/*! ./2d */ \"./node_modules/phaser/src/cameras/2d/index.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzL2luZGV4LmpzPzkwZTAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLHVFQUFZO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQywyREFBTTs7QUFFM0IiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jYW1lcmFzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuQ2FtZXJhc1xyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5UeXBlcy5DYW1lcmFzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQ29udHJvbHM6IHJlcXVpcmUoJy4vY29udHJvbHMnKSxcclxuICAgIFNjZW5lMkQ6IHJlcXVpcmUoJy4vMmQnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/cameras/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/const.js":
/*!******************************************!*\
!*** ./node_modules/phaser/src/const.js ***!
\******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Global constants.\r\n * \r\n * @ignore\r\n */\r\n\r\nvar CONST = {\r\n\r\n /**\r\n * Phaser Release Version\r\n * \r\n * @name Phaser.VERSION\r\n * @const\r\n * @type {string}\r\n * @since 3.0.0\r\n */\r\n VERSION: '3.21.0',\r\n\r\n BlendModes: __webpack_require__(/*! ./renderer/BlendModes */ \"./node_modules/phaser/src/renderer/BlendModes.js\"),\r\n\r\n ScaleModes: __webpack_require__(/*! ./renderer/ScaleModes */ \"./node_modules/phaser/src/renderer/ScaleModes.js\"),\r\n\r\n /**\r\n * AUTO Detect Renderer.\r\n * \r\n * @name Phaser.AUTO\r\n * @const\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n AUTO: 0,\r\n\r\n /**\r\n * Canvas Renderer.\r\n * \r\n * @name Phaser.CANVAS\r\n * @const\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n CANVAS: 1,\r\n\r\n /**\r\n * WebGL Renderer.\r\n * \r\n * @name Phaser.WEBGL\r\n * @const\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n WEBGL: 2,\r\n\r\n /**\r\n * Headless Renderer.\r\n * \r\n * @name Phaser.HEADLESS\r\n * @const\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n HEADLESS: 3,\r\n\r\n /**\r\n * In Phaser the value -1 means 'forever' in lots of cases, this const allows you to use it instead\r\n * to help you remember what the value is doing in your code.\r\n * \r\n * @name Phaser.FOREVER\r\n * @const\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n FOREVER: -1,\r\n\r\n /**\r\n * Direction constant.\r\n * \r\n * @name Phaser.NONE\r\n * @const\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n NONE: 4,\r\n\r\n /**\r\n * Direction constant.\r\n * \r\n * @name Phaser.UP\r\n * @const\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n UP: 5,\r\n\r\n /**\r\n * Direction constant.\r\n * \r\n * @name Phaser.DOWN\r\n * @const\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n DOWN: 6,\r\n\r\n /**\r\n * Direction constant.\r\n * \r\n * @name Phaser.LEFT\r\n * @const\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n LEFT: 7,\r\n\r\n /**\r\n * Direction constant.\r\n * \r\n * @name Phaser.RIGHT\r\n * @const\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n RIGHT: 8\r\n\r\n};\r\n\r\nmodule.exports = CONST;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb25zdC5qcz9hN2U5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLCtFQUF1Qjs7QUFFL0MsZ0JBQWdCLG1CQUFPLENBQUMsK0VBQXVCOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY29uc3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBHbG9iYWwgY29uc3RhbnRzLlxyXG4gKiBcclxuICogQGlnbm9yZVxyXG4gKi9cclxuXHJcbnZhciBDT05TVCA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBoYXNlciBSZWxlYXNlIFZlcnNpb25cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLlZFUlNJT05cclxuICAgICAqIEBjb25zdFxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBWRVJTSU9OOiAnMy4yMS4wJyxcclxuXHJcbiAgICBCbGVuZE1vZGVzOiByZXF1aXJlKCcuL3JlbmRlcmVyL0JsZW5kTW9kZXMnKSxcclxuXHJcbiAgICBTY2FsZU1vZGVzOiByZXF1aXJlKCcuL3JlbmRlcmVyL1NjYWxlTW9kZXMnKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFVVE8gRGV0ZWN0IFJlbmRlcmVyLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQVVUT1xyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBBVVRPOiAwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FudmFzIFJlbmRlcmVyLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ0FOVkFTXHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIENBTlZBUzogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdlYkdMIFJlbmRlcmVyLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuV0VCR0xcclxuICAgICAqIEBjb25zdFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgV0VCR0w6IDIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWFkbGVzcyBSZW5kZXJlci5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkhFQURMRVNTXHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEhFQURMRVNTOiAzLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW4gUGhhc2VyIHRoZSB2YWx1ZSAtMSBtZWFucyAnZm9yZXZlcicgaW4gbG90cyBvZiBjYXNlcywgdGhpcyBjb25zdCBhbGxvd3MgeW91IHRvIHVzZSBpdCBpbnN0ZWFkXHJcbiAgICAgKiB0byBoZWxwIHlvdSByZW1lbWJlciB3aGF0IHRoZSB2YWx1ZSBpcyBkb2luZyBpbiB5b3VyIGNvZGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5GT1JFVkVSXHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEZPUkVWRVI6IC0xLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlyZWN0aW9uIGNvbnN0YW50LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuTk9ORVxyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBOT05FOiA0LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlyZWN0aW9uIGNvbnN0YW50LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuVVBcclxuICAgICAqIEBjb25zdFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgVVA6IDUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXJlY3Rpb24gY29uc3RhbnQuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5ET1dOXHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIERPV046IDYsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXJlY3Rpb24gY29uc3RhbnQuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5MRUZUXHJcbiAgICAgKiBAY29uc3RcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIExFRlQ6IDcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXJlY3Rpb24gY29uc3RhbnQuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5SSUdIVFxyXG4gICAgICogQGNvbnN0XHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBSSUdIVDogOFxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ09OU1Q7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/const.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/core/Config.js":
/*!************************************************!*\
!*** ./node_modules/phaser/src/core/Config.js ***!
\************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/const.js\");\r\nvar Device = __webpack_require__(/*! ../device */ \"./node_modules/phaser/src/device/index.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar GetValue = __webpack_require__(/*! ../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\nvar PhaserMath = __webpack_require__(/*! ../math/ */ \"./node_modules/phaser/src/math/index.js\");\r\nvar NOOP = __webpack_require__(/*! ../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar DefaultPlugins = __webpack_require__(/*! ../plugins/DefaultPlugins */ \"./node_modules/phaser/src/plugins/DefaultPlugins.js\");\r\nvar ValueToColor = __webpack_require__(/*! ../display/color/ValueToColor */ \"./node_modules/phaser/src/display/color/ValueToColor.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The active game configuration settings, parsed from a {@link Phaser.Types.Core.GameConfig} object.\r\n *\r\n * @class Config\r\n * @memberof Phaser.Core\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Core.GameConfig} [GameConfig] - The configuration object for your Phaser Game instance.\r\n *\r\n * @see Phaser.Game#config\r\n */\r\nvar Config = new Class({\r\n\r\n initialize:\r\n\r\n function Config (config)\r\n {\r\n if (config === undefined) { config = {}; }\r\n\r\n var defaultBannerColor = [\r\n '#ff0000',\r\n '#ffff00',\r\n '#00ff00',\r\n '#00ffff',\r\n '#000000'\r\n ];\r\n\r\n var defaultBannerTextColor = '#ffffff';\r\n\r\n /**\r\n * @const {(integer|string)} Phaser.Core.Config#width - The width of the underlying canvas, in pixels.\r\n */\r\n this.width = GetValue(config, 'width', 1024);\r\n\r\n /**\r\n * @const {(integer|string)} Phaser.Core.Config#height - The height of the underlying canvas, in pixels.\r\n */\r\n this.height = GetValue(config, 'height', 768);\r\n\r\n /**\r\n * @const {(Phaser.Scale.ZoomType|integer)} Phaser.Core.Config#zoom - The zoom factor, as used by the Scale Manager.\r\n */\r\n this.zoom = GetValue(config, 'zoom', 1);\r\n\r\n /**\r\n * @const {number} Phaser.Core.Config#resolution - The canvas device pixel resolution. Currently un-used.\r\n */\r\n this.resolution = GetValue(config, 'resolution', 1);\r\n\r\n /**\r\n * @const {?*} Phaser.Core.Config#parent - A parent DOM element into which the canvas created by the renderer will be injected.\r\n */\r\n this.parent = GetValue(config, 'parent', undefined);\r\n\r\n /**\r\n * @const {Phaser.Scale.ScaleModeType} Phaser.Core.Config#scaleMode - The scale mode as used by the Scale Manager. The default is zero, which is no scaling.\r\n */\r\n this.scaleMode = GetValue(config, 'scaleMode', 0);\r\n\r\n /**\r\n * @const {boolean} Phaser.Core.Config#expandParent - Is the Scale Manager allowed to adjust the CSS height property of the parent to be 100%?\r\n */\r\n this.expandParent = GetValue(config, 'expandParent', true);\r\n\r\n /**\r\n * @const {integer} Phaser.Core.Config#autoRound - Automatically round the display and style sizes of the canvas. This can help with performance in lower-powered devices.\r\n */\r\n this.autoRound = GetValue(config, 'autoRound', false);\r\n\r\n /**\r\n * @const {Phaser.Scale.CenterType} Phaser.Core.Config#autoCenter - Automatically center the canvas within the parent?\r\n */\r\n this.autoCenter = GetValue(config, 'autoCenter', 0);\r\n\r\n /**\r\n * @const {integer} Phaser.Core.Config#resizeInterval - How many ms should elapse before checking if the browser size has changed?\r\n */\r\n this.resizeInterval = GetValue(config, 'resizeInterval', 500);\r\n\r\n /**\r\n * @const {?(HTMLElement|string)} Phaser.Core.Config#fullscreenTarget - The DOM element that will be sent into full screen mode, or its `id`. If undefined Phaser will create its own div and insert the canvas into it when entering fullscreen mode.\r\n */\r\n this.fullscreenTarget = GetValue(config, 'fullscreenTarget', null);\r\n\r\n /**\r\n * @const {integer} Phaser.Core.Config#minWidth - The minimum width, in pixels, the canvas will scale down to. A value of zero means no minimum.\r\n */\r\n this.minWidth = GetValue(config, 'minWidth', 0);\r\n\r\n /**\r\n * @const {integer} Phaser.Core.Config#maxWidth - The maximum width, in pixels, the canvas will scale up to. A value of zero means no maximum.\r\n */\r\n this.maxWidth = GetValue(config, 'maxWidth', 0);\r\n\r\n /**\r\n * @const {integer} Phaser.Core.Config#minHeight - The minimum height, in pixels, the canvas will scale down to. A value of zero means no minimum.\r\n */\r\n this.minHeight = GetValue(config, 'minHeight', 0);\r\n\r\n /**\r\n * @const {integer} Phaser.Core.Config#maxHeight - The maximum height, in pixels, the canvas will scale up to. A value of zero means no maximum.\r\n */\r\n this.maxHeight = GetValue(config, 'maxHeight', 0);\r\n\r\n // Scale Manager - Anything set in here over-rides anything set above\r\n\r\n var scaleConfig = GetValue(config, 'scale', null);\r\n\r\n if (scaleConfig)\r\n {\r\n this.width = GetValue(scaleConfig, 'width', this.width);\r\n this.height = GetValue(scaleConfig, 'height', this.height);\r\n this.zoom = GetValue(scaleConfig, 'zoom', this.zoom);\r\n this.resolution = GetValue(scaleConfig, 'resolution', this.resolution);\r\n this.parent = GetValue(scaleConfig, 'parent', this.parent);\r\n this.scaleMode = GetValue(scaleConfig, 'mode', this.scaleMode);\r\n this.expandParent = GetValue(scaleConfig, 'expandParent', this.expandParent);\r\n this.autoRound = GetValue(scaleConfig, 'autoRound', this.autoRound);\r\n this.autoCenter = GetValue(scaleConfig, 'autoCenter', this.autoCenter);\r\n this.resizeInterval = GetValue(scaleConfig, 'resizeInterval', this.resizeInterval);\r\n this.fullscreenTarget = GetValue(scaleConfig, 'fullscreenTarget', this.fullscreenTarget);\r\n this.minWidth = GetValue(scaleConfig, 'min.width', this.minWidth);\r\n this.maxWidth = GetValue(scaleConfig, 'max.width', this.maxWidth);\r\n this.minHeight = GetValue(scaleConfig, 'min.height', this.minHeight);\r\n this.maxHeight = GetValue(scaleConfig, 'max.height', this.maxHeight);\r\n }\r\n\r\n /**\r\n * @const {number} Phaser.Core.Config#renderType - Force Phaser to use a specific renderer. Can be `CONST.CANVAS`, `CONST.WEBGL`, `CONST.HEADLESS` or `CONST.AUTO` (default)\r\n */\r\n this.renderType = GetValue(config, 'type', CONST.AUTO);\r\n\r\n /**\r\n * @const {?HTMLCanvasElement} Phaser.Core.Config#canvas - Force Phaser to use your own Canvas element instead of creating one.\r\n */\r\n this.canvas = GetValue(config, 'canvas', null);\r\n\r\n /**\r\n * @const {?(CanvasRenderingContext2D|WebGLRenderingContext)} Phaser.Core.Config#context - Force Phaser to use your own Canvas context instead of creating one.\r\n */\r\n this.context = GetValue(config, 'context', null);\r\n\r\n /**\r\n * @const {?string} Phaser.Core.Config#canvasStyle - Optional CSS attributes to be set on the canvas object created by the renderer.\r\n */\r\n this.canvasStyle = GetValue(config, 'canvasStyle', null);\r\n\r\n /**\r\n * @const {boolean} Phaser.Core.Config#customEnvironment - Is Phaser running under a custom (non-native web) environment? If so, set this to `true` to skip internal Feature detection. If `true` the `renderType` cannot be left as `AUTO`.\r\n */\r\n this.customEnvironment = GetValue(config, 'customEnvironment', false);\r\n\r\n /**\r\n * @const {?object} Phaser.Core.Config#sceneConfig - The default Scene configuration object.\r\n */\r\n this.sceneConfig = GetValue(config, 'scene', null);\r\n\r\n /**\r\n * @const {string[]} Phaser.Core.Config#seed - A seed which the Random Data Generator will use. If not given, a dynamic seed based on the time is used.\r\n */\r\n this.seed = GetValue(config, 'seed', [ (Date.now() * Math.random()).toString() ]);\r\n\r\n PhaserMath.RND = new PhaserMath.RandomDataGenerator(this.seed);\r\n\r\n /**\r\n * @const {string} Phaser.Core.Config#gameTitle - The title of the game.\r\n */\r\n this.gameTitle = GetValue(config, 'title', '');\r\n\r\n /**\r\n * @const {string} Phaser.Core.Config#gameURL - The URL of the game.\r\n */\r\n this.gameURL = GetValue(config, 'url', 'https://phaser.io');\r\n\r\n /**\r\n * @const {string} Phaser.Core.Config#gameVersion - The version of the game.\r\n */\r\n this.gameVersion = GetValue(config, 'version', '');\r\n\r\n /**\r\n * @const {boolean} Phaser.Core.Config#autoFocus - If `true` the window will automatically be given focus immediately and on any future mousedown event.\r\n */\r\n this.autoFocus = GetValue(config, 'autoFocus', true);\r\n\r\n // DOM Element Container\r\n\r\n /**\r\n * @const {?boolean} Phaser.Core.Config#domCreateContainer - Should the game create a div element to act as a DOM Container? Only enable if you're using DOM Element objects. You must provide a parent object if you use this feature.\r\n */\r\n this.domCreateContainer = GetValue(config, 'dom.createContainer', false);\r\n\r\n /**\r\n * @const {?boolean} Phaser.Core.Config#domBehindCanvas - Should the DOM Container that is created (if `dom.createContainer` is true) be positioned behind (true) or over the top (false, the default) of the game canvas?\r\n */\r\n this.domBehindCanvas = GetValue(config, 'dom.behindCanvas', false);\r\n\r\n // Input\r\n\r\n /**\r\n * @const {boolean} Phaser.Core.Config#inputKeyboard - Enable the Keyboard Plugin. This can be disabled in games that don't need keyboard input.\r\n */\r\n this.inputKeyboard = GetValue(config, 'input.keyboard', true);\r\n\r\n /**\r\n * @const {*} Phaser.Core.Config#inputKeyboardEventTarget - The DOM Target to listen for keyboard events on. Defaults to `window` if not specified.\r\n */\r\n this.inputKeyboardEventTarget = GetValue(config, 'input.keyboard.target', window);\r\n\r\n /**\r\n * @const {?integer[]} Phaser.Core.Config#inputKeyboardCapture - `preventDefault` will be called on every non-modified key which has a key code in this array. By default, it is empty.\r\n */\r\n this.inputKeyboardCapture = GetValue(config, 'input.keyboard.capture', []);\r\n\r\n /**\r\n * @const {(boolean|object)} Phaser.Core.Config#inputMouse - Enable the Mouse Plugin. This can be disabled in games that don't need mouse input.\r\n */\r\n this.inputMouse = GetValue(config, 'input.mouse', true);\r\n\r\n /**\r\n * @const {?*} Phaser.Core.Config#inputMouseEventTarget - The DOM Target to listen for mouse events on. Defaults to the game canvas if not specified.\r\n */\r\n this.inputMouseEventTarget = GetValue(config, 'input.mouse.target', null);\r\n\r\n /**\r\n * @const {boolean} Phaser.Core.Config#inputMouseCapture - Should mouse events be captured? I.e. have prevent default called on them.\r\n */\r\n this.inputMouseCapture = GetValue(config, 'input.mouse.capture', true);\r\n\r\n /**\r\n * @const {boolean} Phaser.Core.Config#inputTouch - Enable the Touch Plugin. This can be disabled in games that don't need touch input.\r\n */\r\n this.inputTouch = GetValue(config, 'input.touch', Device.input.touch);\r\n\r\n /**\r\n * @const {?*} Phaser.Core.Config#inputTouchEventTarget - The DOM Target to listen for touch events on. Defaults to the game canvas if not specified.\r\n */\r\n this.inputTouchEventTarget = GetValue(config, 'input.touch.target', null);\r\n\r\n /**\r\n * @const {boolean} Phaser.Core.Config#inputTouchCapture - Should touch events be captured? I.e. have prevent default called on them.\r\n */\r\n this.inputTouchCapture = GetValue(config, 'input.touch.capture', true);\r\n\r\n /**\r\n * @const {integer} Phaser.Core.Config#inputActivePointers - The number of Pointer objects created by default. In a mouse-only, or non-multi touch game, you can leave this as 1.\r\n */\r\n this.inputActivePointers = GetValue(config, 'input.activePointers', 1);\r\n\r\n /**\r\n * @const {integer} Phaser.Core.Config#inputSmoothFactor - The smoothing factor to apply during Pointer movement. See {@link Phaser.Input.Pointer#smoothFactor}.\r\n */\r\n this.inputSmoothFactor = GetValue(config, 'input.smoothFactor', 0);\r\n\r\n /**\r\n * @const {boolean} Phaser.Core.Config#inputWindowEvents - Should Phaser listen for input events on the Window? If you disable this, events like 'POINTER_UP_OUTSIDE' will no longer fire.\r\n */\r\n this.inputWindowEvents = GetValue(config, 'input.windowEvents', true);\r\n\r\n /**\r\n * @const {boolean} Phaser.Core.Config#inputGamepad - Enable the Gamepad Plugin. This can be disabled in games that don't need gamepad input.\r\n */\r\n this.inputGamepad = GetValue(config, 'input.gamepad', false);\r\n\r\n /**\r\n * @const {*} Phaser.Core.Config#inputGamepadEventTarget - The DOM Target to listen for gamepad events on. Defaults to `window` if not specified.\r\n */\r\n this.inputGamepadEventTarget = GetValue(config, 'input.gamepad.target', window);\r\n\r\n /**\r\n * @const {boolean} Phaser.Core.Config#disableContextMenu - Set to `true` to disable the right-click context menu.\r\n */\r\n this.disableContextMenu = GetValue(config, 'disableContextMenu', false);\r\n\r\n /**\r\n * @const {Phaser.Types.Core.AudioConfig} Phaser.Core.Config#audio - The Audio Configuration object.\r\n */\r\n this.audio = GetValue(config, 'audio');\r\n\r\n // If you do: { banner: false } it won't display any banner at all\r\n\r\n /**\r\n * @const {boolean} Phaser.Core.Config#hideBanner - Don't write the banner line to the console.log.\r\n */\r\n this.hideBanner = (GetValue(config, 'banner', null) === false);\r\n\r\n /**\r\n * @const {boolean} Phaser.Core.Config#hidePhaser - Omit Phaser's name and version from the banner.\r\n */\r\n this.hidePhaser = GetValue(config, 'banner.hidePhaser', false);\r\n\r\n /**\r\n * @const {string} Phaser.Core.Config#bannerTextColor - The color of the banner text.\r\n */\r\n this.bannerTextColor = GetValue(config, 'banner.text', defaultBannerTextColor);\r\n\r\n /**\r\n * @const {string[]} Phaser.Core.Config#bannerBackgroundColor - The background colors of the banner.\r\n */\r\n this.bannerBackgroundColor = GetValue(config, 'banner.background', defaultBannerColor);\r\n\r\n if (this.gameTitle === '' && this.hidePhaser)\r\n {\r\n this.hideBanner = true;\r\n }\r\n\r\n /**\r\n * @const {?Phaser.Types.Core.FPSConfig} Phaser.Core.Config#fps - The Frame Rate Configuration object, as parsed by the Timestep class.\r\n */\r\n this.fps = GetValue(config, 'fps', null);\r\n\r\n // Renderer Settings\r\n // These can either be in a `render` object within the Config, or specified on their own\r\n\r\n var renderConfig = GetValue(config, 'render', config);\r\n\r\n /**\r\n * @const {boolean} Phaser.Core.Config#antialias - When set to `true`, WebGL uses linear interpolation to draw scaled or rotated textures, giving a smooth appearance. When set to `false`, WebGL uses nearest-neighbor interpolation, giving a crisper appearance. `false` also disables antialiasing of the game canvas itself, if the browser supports it, when the game canvas is scaled.\r\n */\r\n this.antialias = GetValue(renderConfig, 'antialias', true);\r\n\r\n /**\r\n * @const {boolean} Phaser.Core.Config#antialiasGL - Sets the `antialias` property when the WebGL context is created. Setting this value does not impact any subsequent textures that are created, or the canvas style attributes.\r\n */\r\n this.antialiasGL = GetValue(renderConfig, 'antialiasGL', true);\r\n\r\n /**\r\n * @const {string} Phaser.Core.Config#mipmapFilter - Sets the `mipmapFilter` property when the WebGL renderer is created.\r\n */\r\n this.mipmapFilter = GetValue(renderConfig, 'mipmapFilter', 'LINEAR');\r\n\r\n /**\r\n * @const {boolean} Phaser.Core.Config#desynchronized - When set to `true` it will create a desynchronized context for both 2D and WebGL. See https://developers.google.com/web/updates/2019/05/desynchronized for details.\r\n */\r\n this.desynchronized = GetValue(renderConfig, 'desynchronized', false);\r\n\r\n /**\r\n * @const {boolean} Phaser.Core.Config#roundPixels - Draw texture-based Game Objects at only whole-integer positions. Game Objects without textures, like Graphics, ignore this property.\r\n */\r\n this.roundPixels = GetValue(renderConfig, 'roundPixels', false);\r\n\r\n /**\r\n * @const {boolean} Phaser.Core.Config#pixelArt - Prevent pixel art from becoming blurred when scaled. It will remain crisp (tells the WebGL renderer to automatically create textures using a linear filter mode).\r\n */\r\n this.pixelArt = GetValue(renderConfig, 'pixelArt', this.zoom !== 1);\r\n\r\n if (this.pixelArt)\r\n {\r\n this.antialias = false;\r\n this.roundPixels = true;\r\n }\r\n\r\n /**\r\n * @const {boolean} Phaser.Core.Config#transparent - Whether the game canvas will have a transparent background.\r\n */\r\n this.transparent = GetValue(renderConfig, 'transparent', false);\r\n\r\n /**\r\n * @const {boolean} Phaser.Core.Config#clearBeforeRender - Whether the game canvas will be cleared between each rendering frame. You can disable this if you have a full-screen background image or game object.\r\n */\r\n this.clearBeforeRender = GetValue(renderConfig, 'clearBeforeRender', true);\r\n\r\n /**\r\n * @const {boolean} Phaser.Core.Config#premultipliedAlpha - In WebGL mode, sets the drawing buffer to contain colors with pre-multiplied alpha.\r\n */\r\n this.premultipliedAlpha = GetValue(renderConfig, 'premultipliedAlpha', true);\r\n\r\n /**\r\n * @const {boolean} Phaser.Core.Config#failIfMajorPerformanceCaveat - Let the browser abort creating a WebGL context if it judges performance would be unacceptable.\r\n */\r\n this.failIfMajorPerformanceCaveat = GetValue(renderConfig, 'failIfMajorPerformanceCaveat', false);\r\n\r\n /**\r\n * @const {string} Phaser.Core.Config#powerPreference - \"high-performance\", \"low-power\" or \"default\". A hint to the browser on how much device power the game might use.\r\n */\r\n this.powerPreference = GetValue(renderConfig, 'powerPreference', 'default');\r\n\r\n /**\r\n * @const {integer} Phaser.Core.Config#batchSize - The default WebGL Batch size.\r\n */\r\n this.batchSize = GetValue(renderConfig, 'batchSize', 2000);\r\n\r\n /**\r\n * @const {integer} Phaser.Core.Config#maxLights - The maximum number of lights allowed to be visible within range of a single Camera in the LightManager.\r\n */\r\n this.maxLights = GetValue(renderConfig, 'maxLights', 10);\r\n\r\n var bgc = GetValue(config, 'backgroundColor', 0);\r\n\r\n /**\r\n * @const {Phaser.Display.Color} Phaser.Core.Config#backgroundColor - The background color of the game canvas. The default is black. This value is ignored if `transparent` is set to `true`.\r\n */\r\n this.backgroundColor = ValueToColor(bgc);\r\n\r\n if (bgc === 0 && this.transparent)\r\n {\r\n this.backgroundColor.alpha = 0;\r\n }\r\n\r\n /**\r\n * @const {Phaser.Types.Core.BootCallback} Phaser.Core.Config#preBoot - Called before Phaser boots. Useful for initializing anything not related to Phaser that Phaser may require while booting.\r\n */\r\n this.preBoot = GetValue(config, 'callbacks.preBoot', NOOP);\r\n\r\n /**\r\n * @const {Phaser.Types.Core.BootCallback} Phaser.Core.Config#postBoot - A function to run at the end of the boot sequence. At this point, all the game systems have started and plugins have been loaded.\r\n */\r\n this.postBoot = GetValue(config, 'callbacks.postBoot', NOOP);\r\n\r\n /**\r\n * @const {Phaser.Types.Core.PhysicsConfig} Phaser.Core.Config#physics - The Physics Configuration object.\r\n */\r\n this.physics = GetValue(config, 'physics', {});\r\n\r\n /**\r\n * @const {(boolean|string)} Phaser.Core.Config#defaultPhysicsSystem - The default physics system. It will be started for each scene. Either 'arcade', 'impact' or 'matter'.\r\n */\r\n this.defaultPhysicsSystem = GetValue(this.physics, 'default', false);\r\n\r\n /**\r\n * @const {string} Phaser.Core.Config#loaderBaseURL - A URL used to resolve paths given to the loader. Example: 'http://labs.phaser.io/assets/'.\r\n */\r\n this.loaderBaseURL = GetValue(config, 'loader.baseURL', '');\r\n\r\n /**\r\n * @const {string} Phaser.Core.Config#loaderPath - A URL path used to resolve relative paths given to the loader. Example: 'images/sprites/'.\r\n */\r\n this.loaderPath = GetValue(config, 'loader.path', '');\r\n\r\n /**\r\n * @const {integer} Phaser.Core.Config#loaderMaxParallelDownloads - Maximum parallel downloads allowed for resources (Default to 32).\r\n */\r\n this.loaderMaxParallelDownloads = GetValue(config, 'loader.maxParallelDownloads', 32);\r\n\r\n /**\r\n * @const {(string|undefined)} Phaser.Core.Config#loaderCrossOrigin - 'anonymous', 'use-credentials', or `undefined`. If you're not making cross-origin requests, leave this as `undefined`. See {@link https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes}.\r\n */\r\n this.loaderCrossOrigin = GetValue(config, 'loader.crossOrigin', undefined);\r\n\r\n /**\r\n * @const {string} Phaser.Core.Config#loaderResponseType - The response type of the XHR request, e.g. `blob`, `text`, etc.\r\n */\r\n this.loaderResponseType = GetValue(config, 'loader.responseType', '');\r\n\r\n /**\r\n * @const {boolean} Phaser.Core.Config#loaderAsync - Should the XHR request use async or not?\r\n */\r\n this.loaderAsync = GetValue(config, 'loader.async', true);\r\n\r\n /**\r\n * @const {string} Phaser.Core.Config#loaderUser - Optional username for all XHR requests.\r\n */\r\n this.loaderUser = GetValue(config, 'loader.user', '');\r\n\r\n /**\r\n * @const {string} Phaser.Core.Config#loaderPassword - Optional password for all XHR requests.\r\n */\r\n this.loaderPassword = GetValue(config, 'loader.password', '');\r\n\r\n /**\r\n * @const {integer} Phaser.Core.Config#loaderTimeout - Optional XHR timeout value, in ms.\r\n */\r\n this.loaderTimeout = GetValue(config, 'loader.timeout', 0);\r\n\r\n /*\r\n * Allows `plugins` property to either be an array, in which case it just replaces\r\n * the default plugins like previously, or a config object.\r\n *\r\n * plugins: {\r\n * global: [\r\n * { key: 'TestPlugin', plugin: TestPlugin, start: true, data: { msg: 'The plugin is alive' } },\r\n * ],\r\n * scene: [\r\n * { key: 'WireFramePlugin', plugin: WireFramePlugin, systemKey: 'wireFramePlugin', sceneKey: 'wireframe' }\r\n * ],\r\n * default: [], OR\r\n * defaultMerge: [\r\n * 'ModPlayer'\r\n * ]\r\n * }\r\n */\r\n\r\n /**\r\n * @const {any} Phaser.Core.Config#installGlobalPlugins - An array of global plugins to be installed.\r\n */\r\n this.installGlobalPlugins = [];\r\n\r\n /**\r\n * @const {any} Phaser.Core.Config#installScenePlugins - An array of Scene level plugins to be installed.\r\n */\r\n this.installScenePlugins = [];\r\n\r\n var plugins = GetValue(config, 'plugins', null);\r\n var defaultPlugins = DefaultPlugins.DefaultScene;\r\n\r\n if (plugins)\r\n {\r\n // Old 3.7 array format?\r\n if (Array.isArray(plugins))\r\n {\r\n this.defaultPlugins = plugins;\r\n }\r\n else if (IsPlainObject(plugins))\r\n {\r\n this.installGlobalPlugins = GetFastValue(plugins, 'global', []);\r\n this.installScenePlugins = GetFastValue(plugins, 'scene', []);\r\n\r\n if (Array.isArray(plugins.default))\r\n {\r\n defaultPlugins = plugins.default;\r\n }\r\n else if (Array.isArray(plugins.defaultMerge))\r\n {\r\n defaultPlugins = defaultPlugins.concat(plugins.defaultMerge);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @const {any} Phaser.Core.Config#defaultPlugins - The plugins installed into every Scene (in addition to CoreScene and Global).\r\n */\r\n this.defaultPlugins = defaultPlugins;\r\n\r\n // Default / Missing Images\r\n var pngPrefix = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAg';\r\n\r\n /**\r\n * @const {string} Phaser.Core.Config#defaultImage - A base64 encoded PNG that will be used as the default blank texture.\r\n */\r\n this.defaultImage = GetValue(config, 'images.default', pngPrefix + 'AQMAAABJtOi3AAAAA1BMVEX///+nxBvIAAAAAXRSTlMAQObYZgAAABVJREFUeF7NwIEAAAAAgKD9qdeocAMAoAABm3DkcAAAAABJRU5ErkJggg==');\r\n\r\n /**\r\n * @const {string} Phaser.Core.Config#missingImage - A base64 encoded PNG that will be used as the default texture when a texture is assigned that is missing or not loaded.\r\n */\r\n this.missingImage = GetValue(config, 'images.missing', pngPrefix + 'CAIAAAD8GO2jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ9JREFUeNq01ssOwyAMRFG46v//Mt1ESmgh+DFmE2GPOBARKb2NVjo+17PXLD8a1+pl5+A+wSgFygymWYHBb0FtsKhJDdZlncG2IzJ4ayoMDv20wTmSMzClEgbWYNTAkQ0Z+OJ+A/eWnAaR9+oxCF4Os0H8htsMUp+pwcgBBiMNnAwF8GqIgL2hAzaGFFgZauDPKABmowZ4GL369/0rwACp2yA/ttmvsQAAAABJRU5ErkJggg==');\r\n\r\n if (window)\r\n {\r\n if (window.FORCE_WEBGL)\r\n {\r\n this.renderType = CONST.WEBGL;\r\n }\r\n else if (window.FORCE_CANVAS)\r\n {\r\n this.renderType = CONST.CANVAS;\r\n }\r\n }\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Config;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL0NvbmZpZy5qcz81M2ExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ3BDLFlBQVksbUJBQU8sQ0FBQyxvREFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsNERBQVc7QUFDaEMsbUJBQW1CLG1CQUFPLENBQUMsNEZBQThCO0FBQ3pELGVBQWUsbUJBQU8sQ0FBQyxvRkFBMEI7QUFDakQsb0JBQW9CLG1CQUFPLENBQUMsOEZBQStCO0FBQzNELGlCQUFpQixtQkFBTyxDQUFDLHlEQUFVO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyw4REFBZTtBQUNsQyxxQkFBcUIsbUJBQU8sQ0FBQyxzRkFBMkI7QUFDeEQsbUJBQW1CLG1CQUFPLENBQUMsOEZBQStCOztBQUUxRDtBQUNBO0FBQ0EsMERBQTBELG1DQUFtQztBQUM3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDZCQUE2QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DLGFBQWE7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsbUJBQW1CLGlCQUFpQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLGlCQUFpQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLGdDQUFnQztBQUNuRDtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLE9BQU87QUFDMUI7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixHQUFHO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsMkJBQTJCO0FBQzlDO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQix3QkFBd0I7QUFDM0M7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsa0RBQWtEO0FBQ3JFO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsU0FBUztBQUM1QjtBQUNBOztBQUVBOztBQUVBO0FBQ0EsbUJBQW1CLE9BQU87QUFDMUI7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsT0FBTztBQUMxQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLG1CQUFtQixTQUFTO0FBQzVCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsU0FBUztBQUM1QjtBQUNBOztBQUVBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixFQUFFO0FBQ3JCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsV0FBVztBQUM5QjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLGlCQUFpQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLEdBQUc7QUFDdEI7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLEdBQUc7QUFDdEI7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVEsb0dBQW9HLHdDQUF3QztBQUN2SztBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsRUFBRTtBQUNyQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQiw4QkFBOEI7QUFDakQ7QUFDQTs7QUFFQSx3QkFBd0IsZ0JBQWdCOztBQUV4QztBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLE9BQU87QUFDMUI7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixTQUFTO0FBQzVCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsNkJBQTZCO0FBQ2hEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLE9BQU87QUFDMUI7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLG1CQUFtQixxQkFBcUI7QUFDeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQiwrQkFBK0I7QUFDbEQ7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQiwrQkFBK0I7QUFDbEQ7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixnQ0FBZ0M7QUFDbkQ7QUFDQSxxREFBcUQ7O0FBRXJEO0FBQ0EsbUJBQW1CLGlCQUFpQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLE9BQU87QUFDMUI7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLG1CQUFtQixvS0FBb0ssaUZBQWlGO0FBQzNSO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsT0FBTztBQUMxQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsT0FBTztBQUMxQjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsNERBQTRELDZCQUE2QixFQUFFO0FBQzlHO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsSUFBSTtBQUN2QjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLElBQUk7QUFDdkI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsSUFBSTtBQUN2QjtBQUNBOztBQUVBO0FBQ0Esd0NBQXdDOztBQUV4QztBQUNBLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsT0FBTztBQUMxQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY29yZS9Db25maWcuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XHJcbnZhciBEZXZpY2UgPSByZXF1aXJlKCcuLi9kZXZpY2UnKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIEdldFZhbHVlID0gcmVxdWlyZSgnLi4vdXRpbHMvb2JqZWN0L0dldFZhbHVlJyk7XHJcbnZhciBJc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi4vdXRpbHMvb2JqZWN0L0lzUGxhaW5PYmplY3QnKTtcclxudmFyIFBoYXNlck1hdGggPSByZXF1aXJlKCcuLi9tYXRoLycpO1xyXG52YXIgTk9PUCA9IHJlcXVpcmUoJy4uL3V0aWxzL05PT1AnKTtcclxudmFyIERlZmF1bHRQbHVnaW5zID0gcmVxdWlyZSgnLi4vcGx1Z2lucy9EZWZhdWx0UGx1Z2lucycpO1xyXG52YXIgVmFsdWVUb0NvbG9yID0gcmVxdWlyZSgnLi4vZGlzcGxheS9jb2xvci9WYWx1ZVRvQ29sb3InKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBhY3RpdmUgZ2FtZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLCBwYXJzZWQgZnJvbSBhIHtAbGluayBQaGFzZXIuVHlwZXMuQ29yZS5HYW1lQ29uZmlnfSBvYmplY3QuXHJcbiAqXHJcbiAqIEBjbGFzcyBDb25maWdcclxuICogQG1lbWJlcm9mIFBoYXNlci5Db3JlXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuQ29yZS5HYW1lQ29uZmlnfSBbR2FtZUNvbmZpZ10gLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHlvdXIgUGhhc2VyIEdhbWUgaW5zdGFuY2UuXHJcbiAqXHJcbiAqIEBzZWUgUGhhc2VyLkdhbWUjY29uZmlnXHJcbiAqL1xyXG52YXIgQ29uZmlnID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIENvbmZpZyAoY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChjb25maWcgPT09IHVuZGVmaW5lZCkgeyBjb25maWcgPSB7fTsgfVxyXG5cclxuICAgICAgICB2YXIgZGVmYXVsdEJhbm5lckNvbG9yID0gW1xyXG4gICAgICAgICAgICAnI2ZmMDAwMCcsXHJcbiAgICAgICAgICAgICcjZmZmZjAwJyxcclxuICAgICAgICAgICAgJyMwMGZmMDAnLFxyXG4gICAgICAgICAgICAnIzAwZmZmZicsXHJcbiAgICAgICAgICAgICcjMDAwMDAwJ1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHZhciBkZWZhdWx0QmFubmVyVGV4dENvbG9yID0gJyNmZmZmZmYnO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3QgeyhpbnRlZ2VyfHN0cmluZyl9IFBoYXNlci5Db3JlLkNvbmZpZyN3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgdW5kZXJseWluZyBjYW52YXMsIGluIHBpeGVscy5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLndpZHRoID0gR2V0VmFsdWUoY29uZmlnLCAnd2lkdGgnLCAxMDI0KTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHsoaW50ZWdlcnxzdHJpbmcpfSBQaGFzZXIuQ29yZS5Db25maWcjaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgdW5kZXJseWluZyBjYW52YXMsIGluIHBpeGVscy5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhlaWdodCA9IEdldFZhbHVlKGNvbmZpZywgJ2hlaWdodCcsIDc2OCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7KFBoYXNlci5TY2FsZS5ab29tVHlwZXxpbnRlZ2VyKX0gUGhhc2VyLkNvcmUuQ29uZmlnI3pvb20gLSBUaGUgem9vbSBmYWN0b3IsIGFzIHVzZWQgYnkgdGhlIFNjYWxlIE1hbmFnZXIuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy56b29tID0gR2V0VmFsdWUoY29uZmlnLCAnem9vbScsIDEpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge251bWJlcn0gUGhhc2VyLkNvcmUuQ29uZmlnI3Jlc29sdXRpb24gLSBUaGUgY2FudmFzIGRldmljZSBwaXhlbCByZXNvbHV0aW9uLiBDdXJyZW50bHkgdW4tdXNlZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJlc29sdXRpb24gPSBHZXRWYWx1ZShjb25maWcsICdyZXNvbHV0aW9uJywgMSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7Pyp9IFBoYXNlci5Db3JlLkNvbmZpZyNwYXJlbnQgLSBBIHBhcmVudCBET00gZWxlbWVudCBpbnRvIHdoaWNoIHRoZSBjYW52YXMgY3JlYXRlZCBieSB0aGUgcmVuZGVyZXIgd2lsbCBiZSBpbmplY3RlZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBhcmVudCA9IEdldFZhbHVlKGNvbmZpZywgJ3BhcmVudCcsIHVuZGVmaW5lZCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7UGhhc2VyLlNjYWxlLlNjYWxlTW9kZVR5cGV9IFBoYXNlci5Db3JlLkNvbmZpZyNzY2FsZU1vZGUgLSBUaGUgc2NhbGUgbW9kZSBhcyB1c2VkIGJ5IHRoZSBTY2FsZSBNYW5hZ2VyLiBUaGUgZGVmYXVsdCBpcyB6ZXJvLCB3aGljaCBpcyBubyBzY2FsaW5nLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NhbGVNb2RlID0gR2V0VmFsdWUoY29uZmlnLCAnc2NhbGVNb2RlJywgMCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7Ym9vbGVhbn0gUGhhc2VyLkNvcmUuQ29uZmlnI2V4cGFuZFBhcmVudCAtIElzIHRoZSBTY2FsZSBNYW5hZ2VyIGFsbG93ZWQgdG8gYWRqdXN0IHRoZSBDU1MgaGVpZ2h0IHByb3BlcnR5IG9mIHRoZSBwYXJlbnQgdG8gYmUgMTAwJT9cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmV4cGFuZFBhcmVudCA9IEdldFZhbHVlKGNvbmZpZywgJ2V4cGFuZFBhcmVudCcsIHRydWUpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2ludGVnZXJ9IFBoYXNlci5Db3JlLkNvbmZpZyNhdXRvUm91bmQgLSBBdXRvbWF0aWNhbGx5IHJvdW5kIHRoZSBkaXNwbGF5IGFuZCBzdHlsZSBzaXplcyBvZiB0aGUgY2FudmFzLiBUaGlzIGNhbiBoZWxwIHdpdGggcGVyZm9ybWFuY2UgaW4gbG93ZXItcG93ZXJlZCBkZXZpY2VzLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYXV0b1JvdW5kID0gR2V0VmFsdWUoY29uZmlnLCAnYXV0b1JvdW5kJywgZmFsc2UpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge1BoYXNlci5TY2FsZS5DZW50ZXJUeXBlfSBQaGFzZXIuQ29yZS5Db25maWcjYXV0b0NlbnRlciAtIEF1dG9tYXRpY2FsbHkgY2VudGVyIHRoZSBjYW52YXMgd2l0aGluIHRoZSBwYXJlbnQ/XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hdXRvQ2VudGVyID0gR2V0VmFsdWUoY29uZmlnLCAnYXV0b0NlbnRlcicsIDApO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2ludGVnZXJ9IFBoYXNlci5Db3JlLkNvbmZpZyNyZXNpemVJbnRlcnZhbCAtIEhvdyBtYW55IG1zIHNob3VsZCBlbGFwc2UgYmVmb3JlIGNoZWNraW5nIGlmIHRoZSBicm93c2VyIHNpemUgaGFzIGNoYW5nZWQ/XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZXNpemVJbnRlcnZhbCA9IEdldFZhbHVlKGNvbmZpZywgJ3Jlc2l6ZUludGVydmFsJywgNTAwKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHs/KEhUTUxFbGVtZW50fHN0cmluZyl9IFBoYXNlci5Db3JlLkNvbmZpZyNmdWxsc2NyZWVuVGFyZ2V0IC0gVGhlIERPTSBlbGVtZW50IHRoYXQgd2lsbCBiZSBzZW50IGludG8gZnVsbCBzY3JlZW4gbW9kZSwgb3IgaXRzIGBpZGAuIElmIHVuZGVmaW5lZCBQaGFzZXIgd2lsbCBjcmVhdGUgaXRzIG93biBkaXYgYW5kIGluc2VydCB0aGUgY2FudmFzIGludG8gaXQgd2hlbiBlbnRlcmluZyBmdWxsc2NyZWVuIG1vZGUuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mdWxsc2NyZWVuVGFyZ2V0ID0gR2V0VmFsdWUoY29uZmlnLCAnZnVsbHNjcmVlblRhcmdldCcsIG51bGwpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2ludGVnZXJ9IFBoYXNlci5Db3JlLkNvbmZpZyNtaW5XaWR0aCAtIFRoZSBtaW5pbXVtIHdpZHRoLCBpbiBwaXhlbHMsIHRoZSBjYW52YXMgd2lsbCBzY2FsZSBkb3duIHRvLiBBIHZhbHVlIG9mIHplcm8gbWVhbnMgbm8gbWluaW11bS5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1pbldpZHRoID0gR2V0VmFsdWUoY29uZmlnLCAnbWluV2lkdGgnLCAwKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtpbnRlZ2VyfSBQaGFzZXIuQ29yZS5Db25maWcjbWF4V2lkdGggLSBUaGUgbWF4aW11bSB3aWR0aCwgaW4gcGl4ZWxzLCB0aGUgY2FudmFzIHdpbGwgc2NhbGUgdXAgdG8uIEEgdmFsdWUgb2YgemVybyBtZWFucyBubyBtYXhpbXVtLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWF4V2lkdGggPSBHZXRWYWx1ZShjb25maWcsICdtYXhXaWR0aCcsIDApO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2ludGVnZXJ9IFBoYXNlci5Db3JlLkNvbmZpZyNtaW5IZWlnaHQgLSBUaGUgbWluaW11bSBoZWlnaHQsIGluIHBpeGVscywgdGhlIGNhbnZhcyB3aWxsIHNjYWxlIGRvd24gdG8uIEEgdmFsdWUgb2YgemVybyBtZWFucyBubyBtaW5pbXVtLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWluSGVpZ2h0ID0gR2V0VmFsdWUoY29uZmlnLCAnbWluSGVpZ2h0JywgMCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7aW50ZWdlcn0gUGhhc2VyLkNvcmUuQ29uZmlnI21heEhlaWdodCAtIFRoZSBtYXhpbXVtIGhlaWdodCwgaW4gcGl4ZWxzLCB0aGUgY2FudmFzIHdpbGwgc2NhbGUgdXAgdG8uIEEgdmFsdWUgb2YgemVybyBtZWFucyBubyBtYXhpbXVtLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gR2V0VmFsdWUoY29uZmlnLCAnbWF4SGVpZ2h0JywgMCk7XHJcblxyXG4gICAgICAgIC8vICBTY2FsZSBNYW5hZ2VyIC0gQW55dGhpbmcgc2V0IGluIGhlcmUgb3Zlci1yaWRlcyBhbnl0aGluZyBzZXQgYWJvdmVcclxuXHJcbiAgICAgICAgdmFyIHNjYWxlQ29uZmlnID0gR2V0VmFsdWUoY29uZmlnLCAnc2NhbGUnLCBudWxsKTtcclxuXHJcbiAgICAgICAgaWYgKHNjYWxlQ29uZmlnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IEdldFZhbHVlKHNjYWxlQ29uZmlnLCAnd2lkdGgnLCB0aGlzLndpZHRoKTtcclxuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBHZXRWYWx1ZShzY2FsZUNvbmZpZywgJ2hlaWdodCcsIHRoaXMuaGVpZ2h0KTtcclxuICAgICAgICAgICAgdGhpcy56b29tID0gR2V0VmFsdWUoc2NhbGVDb25maWcsICd6b29tJywgdGhpcy56b29tKTtcclxuICAgICAgICAgICAgdGhpcy5yZXNvbHV0aW9uID0gR2V0VmFsdWUoc2NhbGVDb25maWcsICdyZXNvbHV0aW9uJywgdGhpcy5yZXNvbHV0aW9uKTtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnQgPSBHZXRWYWx1ZShzY2FsZUNvbmZpZywgJ3BhcmVudCcsIHRoaXMucGFyZW50KTtcclxuICAgICAgICAgICAgdGhpcy5zY2FsZU1vZGUgPSBHZXRWYWx1ZShzY2FsZUNvbmZpZywgJ21vZGUnLCB0aGlzLnNjYWxlTW9kZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kUGFyZW50ID0gR2V0VmFsdWUoc2NhbGVDb25maWcsICdleHBhbmRQYXJlbnQnLCB0aGlzLmV4cGFuZFBhcmVudCk7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0b1JvdW5kID0gR2V0VmFsdWUoc2NhbGVDb25maWcsICdhdXRvUm91bmQnLCB0aGlzLmF1dG9Sb3VuZCk7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0b0NlbnRlciA9IEdldFZhbHVlKHNjYWxlQ29uZmlnLCAnYXV0b0NlbnRlcicsIHRoaXMuYXV0b0NlbnRlcik7XHJcbiAgICAgICAgICAgIHRoaXMucmVzaXplSW50ZXJ2YWwgPSBHZXRWYWx1ZShzY2FsZUNvbmZpZywgJ3Jlc2l6ZUludGVydmFsJywgdGhpcy5yZXNpemVJbnRlcnZhbCk7XHJcbiAgICAgICAgICAgIHRoaXMuZnVsbHNjcmVlblRhcmdldCA9IEdldFZhbHVlKHNjYWxlQ29uZmlnLCAnZnVsbHNjcmVlblRhcmdldCcsIHRoaXMuZnVsbHNjcmVlblRhcmdldCk7XHJcbiAgICAgICAgICAgIHRoaXMubWluV2lkdGggPSBHZXRWYWx1ZShzY2FsZUNvbmZpZywgJ21pbi53aWR0aCcsIHRoaXMubWluV2lkdGgpO1xyXG4gICAgICAgICAgICB0aGlzLm1heFdpZHRoID0gR2V0VmFsdWUoc2NhbGVDb25maWcsICdtYXgud2lkdGgnLCB0aGlzLm1heFdpZHRoKTtcclxuICAgICAgICAgICAgdGhpcy5taW5IZWlnaHQgPSBHZXRWYWx1ZShzY2FsZUNvbmZpZywgJ21pbi5oZWlnaHQnLCB0aGlzLm1pbkhlaWdodCk7XHJcbiAgICAgICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gR2V0VmFsdWUoc2NhbGVDb25maWcsICdtYXguaGVpZ2h0JywgdGhpcy5tYXhIZWlnaHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtudW1iZXJ9IFBoYXNlci5Db3JlLkNvbmZpZyNyZW5kZXJUeXBlIC0gRm9yY2UgUGhhc2VyIHRvIHVzZSBhIHNwZWNpZmljIHJlbmRlcmVyLiBDYW4gYmUgYENPTlNULkNBTlZBU2AsIGBDT05TVC5XRUJHTGAsIGBDT05TVC5IRUFETEVTU2Agb3IgYENPTlNULkFVVE9gIChkZWZhdWx0KVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVuZGVyVHlwZSA9IEdldFZhbHVlKGNvbmZpZywgJ3R5cGUnLCBDT05TVC5BVVRPKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHs/SFRNTENhbnZhc0VsZW1lbnR9IFBoYXNlci5Db3JlLkNvbmZpZyNjYW52YXMgLSBGb3JjZSBQaGFzZXIgdG8gdXNlIHlvdXIgb3duIENhbnZhcyBlbGVtZW50IGluc3RlYWQgb2YgY3JlYXRpbmcgb25lLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FudmFzID0gR2V0VmFsdWUoY29uZmlnLCAnY2FudmFzJywgbnVsbCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7PyhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR8V2ViR0xSZW5kZXJpbmdDb250ZXh0KX0gUGhhc2VyLkNvcmUuQ29uZmlnI2NvbnRleHQgLSBGb3JjZSBQaGFzZXIgdG8gdXNlIHlvdXIgb3duIENhbnZhcyBjb250ZXh0IGluc3RlYWQgb2YgY3JlYXRpbmcgb25lLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IEdldFZhbHVlKGNvbmZpZywgJ2NvbnRleHQnLCBudWxsKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHs/c3RyaW5nfSBQaGFzZXIuQ29yZS5Db25maWcjY2FudmFzU3R5bGUgLSBPcHRpb25hbCBDU1MgYXR0cmlidXRlcyB0byBiZSBzZXQgb24gdGhlIGNhbnZhcyBvYmplY3QgY3JlYXRlZCBieSB0aGUgcmVuZGVyZXIuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYW52YXNTdHlsZSA9IEdldFZhbHVlKGNvbmZpZywgJ2NhbnZhc1N0eWxlJywgbnVsbCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7Ym9vbGVhbn0gUGhhc2VyLkNvcmUuQ29uZmlnI2N1c3RvbUVudmlyb25tZW50IC0gSXMgUGhhc2VyIHJ1bm5pbmcgdW5kZXIgYSBjdXN0b20gKG5vbi1uYXRpdmUgd2ViKSBlbnZpcm9ubWVudD8gSWYgc28sIHNldCB0aGlzIHRvIGB0cnVlYCB0byBza2lwIGludGVybmFsIEZlYXR1cmUgZGV0ZWN0aW9uLiBJZiBgdHJ1ZWAgdGhlIGByZW5kZXJUeXBlYCBjYW5ub3QgYmUgbGVmdCBhcyBgQVVUT2AuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdXN0b21FbnZpcm9ubWVudCA9IEdldFZhbHVlKGNvbmZpZywgJ2N1c3RvbUVudmlyb25tZW50JywgZmFsc2UpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qgez9vYmplY3R9IFBoYXNlci5Db3JlLkNvbmZpZyNzY2VuZUNvbmZpZyAtIFRoZSBkZWZhdWx0IFNjZW5lIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmVDb25maWcgPSBHZXRWYWx1ZShjb25maWcsICdzY2VuZScsIG51bGwpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge3N0cmluZ1tdfSBQaGFzZXIuQ29yZS5Db25maWcjc2VlZCAtIEEgc2VlZCB3aGljaCB0aGUgUmFuZG9tIERhdGEgR2VuZXJhdG9yIHdpbGwgdXNlLiBJZiBub3QgZ2l2ZW4sIGEgZHluYW1pYyBzZWVkIGJhc2VkIG9uIHRoZSB0aW1lIGlzIHVzZWQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zZWVkID0gR2V0VmFsdWUoY29uZmlnLCAnc2VlZCcsIFsgKERhdGUubm93KCkgKiBNYXRoLnJhbmRvbSgpKS50b1N0cmluZygpIF0pO1xyXG5cclxuICAgICAgICBQaGFzZXJNYXRoLlJORCA9IG5ldyBQaGFzZXJNYXRoLlJhbmRvbURhdGFHZW5lcmF0b3IodGhpcy5zZWVkKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtzdHJpbmd9IFBoYXNlci5Db3JlLkNvbmZpZyNnYW1lVGl0bGUgLSBUaGUgdGl0bGUgb2YgdGhlIGdhbWUuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nYW1lVGl0bGUgPSBHZXRWYWx1ZShjb25maWcsICd0aXRsZScsICcnKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtzdHJpbmd9IFBoYXNlci5Db3JlLkNvbmZpZyNnYW1lVVJMIC0gVGhlIFVSTCBvZiB0aGUgZ2FtZS5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdhbWVVUkwgPSBHZXRWYWx1ZShjb25maWcsICd1cmwnLCAnaHR0cHM6Ly9waGFzZXIuaW8nKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtzdHJpbmd9IFBoYXNlci5Db3JlLkNvbmZpZyNnYW1lVmVyc2lvbiAtIFRoZSB2ZXJzaW9uIG9mIHRoZSBnYW1lLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZ2FtZVZlcnNpb24gPSBHZXRWYWx1ZShjb25maWcsICd2ZXJzaW9uJywgJycpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2Jvb2xlYW59IFBoYXNlci5Db3JlLkNvbmZpZyNhdXRvRm9jdXMgLSBJZiBgdHJ1ZWAgdGhlIHdpbmRvdyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgZ2l2ZW4gZm9jdXMgaW1tZWRpYXRlbHkgYW5kIG9uIGFueSBmdXR1cmUgbW91c2Vkb3duIGV2ZW50LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYXV0b0ZvY3VzID0gR2V0VmFsdWUoY29uZmlnLCAnYXV0b0ZvY3VzJywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8vICBET00gRWxlbWVudCBDb250YWluZXJcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHs/Ym9vbGVhbn0gUGhhc2VyLkNvcmUuQ29uZmlnI2RvbUNyZWF0ZUNvbnRhaW5lciAtIFNob3VsZCB0aGUgZ2FtZSBjcmVhdGUgYSBkaXYgZWxlbWVudCB0byBhY3QgYXMgYSBET00gQ29udGFpbmVyPyBPbmx5IGVuYWJsZSBpZiB5b3UncmUgdXNpbmcgRE9NIEVsZW1lbnQgb2JqZWN0cy4gWW91IG11c3QgcHJvdmlkZSBhIHBhcmVudCBvYmplY3QgaWYgeW91IHVzZSB0aGlzIGZlYXR1cmUuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kb21DcmVhdGVDb250YWluZXIgPSBHZXRWYWx1ZShjb25maWcsICdkb20uY3JlYXRlQ29udGFpbmVyJywgZmFsc2UpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qgez9ib29sZWFufSBQaGFzZXIuQ29yZS5Db25maWcjZG9tQmVoaW5kQ2FudmFzIC0gU2hvdWxkIHRoZSBET00gQ29udGFpbmVyIHRoYXQgaXMgY3JlYXRlZCAoaWYgYGRvbS5jcmVhdGVDb250YWluZXJgIGlzIHRydWUpIGJlIHBvc2l0aW9uZWQgYmVoaW5kICh0cnVlKSBvciBvdmVyIHRoZSB0b3AgKGZhbHNlLCB0aGUgZGVmYXVsdCkgb2YgdGhlIGdhbWUgY2FudmFzP1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZG9tQmVoaW5kQ2FudmFzID0gR2V0VmFsdWUoY29uZmlnLCAnZG9tLmJlaGluZENhbnZhcycsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLy8gIElucHV0XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7Ym9vbGVhbn0gUGhhc2VyLkNvcmUuQ29uZmlnI2lucHV0S2V5Ym9hcmQgLSBFbmFibGUgdGhlIEtleWJvYXJkIFBsdWdpbi4gVGhpcyBjYW4gYmUgZGlzYWJsZWQgaW4gZ2FtZXMgdGhhdCBkb24ndCBuZWVkIGtleWJvYXJkIGlucHV0LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW5wdXRLZXlib2FyZCA9IEdldFZhbHVlKGNvbmZpZywgJ2lucHV0LmtleWJvYXJkJywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7Kn0gUGhhc2VyLkNvcmUuQ29uZmlnI2lucHV0S2V5Ym9hcmRFdmVudFRhcmdldCAtIFRoZSBET00gVGFyZ2V0IHRvIGxpc3RlbiBmb3Iga2V5Ym9hcmQgZXZlbnRzIG9uLiBEZWZhdWx0cyB0byBgd2luZG93YCBpZiBub3Qgc3BlY2lmaWVkLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW5wdXRLZXlib2FyZEV2ZW50VGFyZ2V0ID0gR2V0VmFsdWUoY29uZmlnLCAnaW5wdXQua2V5Ym9hcmQudGFyZ2V0Jywgd2luZG93KTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHs/aW50ZWdlcltdfSBQaGFzZXIuQ29yZS5Db25maWcjaW5wdXRLZXlib2FyZENhcHR1cmUgLSBgcHJldmVudERlZmF1bHRgIHdpbGwgYmUgY2FsbGVkIG9uIGV2ZXJ5IG5vbi1tb2RpZmllZCBrZXkgd2hpY2ggaGFzIGEga2V5IGNvZGUgaW4gdGhpcyBhcnJheS4gQnkgZGVmYXVsdCwgaXQgaXMgZW1wdHkuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbnB1dEtleWJvYXJkQ2FwdHVyZSA9IEdldFZhbHVlKGNvbmZpZywgJ2lucHV0LmtleWJvYXJkLmNhcHR1cmUnLCBbXSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7KGJvb2xlYW58b2JqZWN0KX0gUGhhc2VyLkNvcmUuQ29uZmlnI2lucHV0TW91c2UgLSBFbmFibGUgdGhlIE1vdXNlIFBsdWdpbi4gVGhpcyBjYW4gYmUgZGlzYWJsZWQgaW4gZ2FtZXMgdGhhdCBkb24ndCBuZWVkIG1vdXNlIGlucHV0LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW5wdXRNb3VzZSA9IEdldFZhbHVlKGNvbmZpZywgJ2lucHV0Lm1vdXNlJywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7Pyp9IFBoYXNlci5Db3JlLkNvbmZpZyNpbnB1dE1vdXNlRXZlbnRUYXJnZXQgLSBUaGUgRE9NIFRhcmdldCB0byBsaXN0ZW4gZm9yIG1vdXNlIGV2ZW50cyBvbi4gRGVmYXVsdHMgdG8gdGhlIGdhbWUgY2FudmFzIGlmIG5vdCBzcGVjaWZpZWQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbnB1dE1vdXNlRXZlbnRUYXJnZXQgPSBHZXRWYWx1ZShjb25maWcsICdpbnB1dC5tb3VzZS50YXJnZXQnLCBudWxsKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtib29sZWFufSBQaGFzZXIuQ29yZS5Db25maWcjaW5wdXRNb3VzZUNhcHR1cmUgLSBTaG91bGQgbW91c2UgZXZlbnRzIGJlIGNhcHR1cmVkPyBJLmUuIGhhdmUgcHJldmVudCBkZWZhdWx0IGNhbGxlZCBvbiB0aGVtLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW5wdXRNb3VzZUNhcHR1cmUgPSBHZXRWYWx1ZShjb25maWcsICdpbnB1dC5tb3VzZS5jYXB0dXJlJywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7Ym9vbGVhbn0gUGhhc2VyLkNvcmUuQ29uZmlnI2lucHV0VG91Y2ggLSBFbmFibGUgdGhlIFRvdWNoIFBsdWdpbi4gVGhpcyBjYW4gYmUgZGlzYWJsZWQgaW4gZ2FtZXMgdGhhdCBkb24ndCBuZWVkIHRvdWNoIGlucHV0LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW5wdXRUb3VjaCA9IEdldFZhbHVlKGNvbmZpZywgJ2lucHV0LnRvdWNoJywgRGV2aWNlLmlucHV0LnRvdWNoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHs/Kn0gUGhhc2VyLkNvcmUuQ29uZmlnI2lucHV0VG91Y2hFdmVudFRhcmdldCAtIFRoZSBET00gVGFyZ2V0IHRvIGxpc3RlbiBmb3IgdG91Y2ggZXZlbnRzIG9uLiBEZWZhdWx0cyB0byB0aGUgZ2FtZSBjYW52YXMgaWYgbm90IHNwZWNpZmllZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlucHV0VG91Y2hFdmVudFRhcmdldCA9IEdldFZhbHVlKGNvbmZpZywgJ2lucHV0LnRvdWNoLnRhcmdldCcsIG51bGwpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2Jvb2xlYW59IFBoYXNlci5Db3JlLkNvbmZpZyNpbnB1dFRvdWNoQ2FwdHVyZSAtIFNob3VsZCB0b3VjaCBldmVudHMgYmUgY2FwdHVyZWQ/IEkuZS4gaGF2ZSBwcmV2ZW50IGRlZmF1bHQgY2FsbGVkIG9uIHRoZW0uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbnB1dFRvdWNoQ2FwdHVyZSA9IEdldFZhbHVlKGNvbmZpZywgJ2lucHV0LnRvdWNoLmNhcHR1cmUnLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtpbnRlZ2VyfSBQaGFzZXIuQ29yZS5Db25maWcjaW5wdXRBY3RpdmVQb2ludGVycyAtIFRoZSBudW1iZXIgb2YgUG9pbnRlciBvYmplY3RzIGNyZWF0ZWQgYnkgZGVmYXVsdC4gSW4gYSBtb3VzZS1vbmx5LCBvciBub24tbXVsdGkgdG91Y2ggZ2FtZSwgeW91IGNhbiBsZWF2ZSB0aGlzIGFzIDEuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbnB1dEFjdGl2ZVBvaW50ZXJzID0gR2V0VmFsdWUoY29uZmlnLCAnaW5wdXQuYWN0aXZlUG9pbnRlcnMnLCAxKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtpbnRlZ2VyfSBQaGFzZXIuQ29yZS5Db25maWcjaW5wdXRTbW9vdGhGYWN0b3IgLSBUaGUgc21vb3RoaW5nIGZhY3RvciB0byBhcHBseSBkdXJpbmcgUG9pbnRlciBtb3ZlbWVudC4gU2VlIHtAbGluayBQaGFzZXIuSW5wdXQuUG9pbnRlciNzbW9vdGhGYWN0b3J9LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW5wdXRTbW9vdGhGYWN0b3IgPSBHZXRWYWx1ZShjb25maWcsICdpbnB1dC5zbW9vdGhGYWN0b3InLCAwKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtib29sZWFufSBQaGFzZXIuQ29yZS5Db25maWcjaW5wdXRXaW5kb3dFdmVudHMgLSBTaG91bGQgUGhhc2VyIGxpc3RlbiBmb3IgaW5wdXQgZXZlbnRzIG9uIHRoZSBXaW5kb3c/IElmIHlvdSBkaXNhYmxlIHRoaXMsIGV2ZW50cyBsaWtlICdQT0lOVEVSX1VQX09VVFNJREUnIHdpbGwgbm8gbG9uZ2VyIGZpcmUuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbnB1dFdpbmRvd0V2ZW50cyA9IEdldFZhbHVlKGNvbmZpZywgJ2lucHV0LndpbmRvd0V2ZW50cycsIHRydWUpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2Jvb2xlYW59IFBoYXNlci5Db3JlLkNvbmZpZyNpbnB1dEdhbWVwYWQgLSBFbmFibGUgdGhlIEdhbWVwYWQgUGx1Z2luLiBUaGlzIGNhbiBiZSBkaXNhYmxlZCBpbiBnYW1lcyB0aGF0IGRvbid0IG5lZWQgZ2FtZXBhZCBpbnB1dC5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlucHV0R2FtZXBhZCA9IEdldFZhbHVlKGNvbmZpZywgJ2lucHV0LmdhbWVwYWQnLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7Kn0gUGhhc2VyLkNvcmUuQ29uZmlnI2lucHV0R2FtZXBhZEV2ZW50VGFyZ2V0IC0gVGhlIERPTSBUYXJnZXQgdG8gbGlzdGVuIGZvciBnYW1lcGFkIGV2ZW50cyBvbi4gRGVmYXVsdHMgdG8gYHdpbmRvd2AgaWYgbm90IHNwZWNpZmllZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlucHV0R2FtZXBhZEV2ZW50VGFyZ2V0ID0gR2V0VmFsdWUoY29uZmlnLCAnaW5wdXQuZ2FtZXBhZC50YXJnZXQnLCB3aW5kb3cpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2Jvb2xlYW59IFBoYXNlci5Db3JlLkNvbmZpZyNkaXNhYmxlQ29udGV4dE1lbnUgLSBTZXQgdG8gYHRydWVgIHRvIGRpc2FibGUgdGhlIHJpZ2h0LWNsaWNrIGNvbnRleHQgbWVudS5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRpc2FibGVDb250ZXh0TWVudSA9IEdldFZhbHVlKGNvbmZpZywgJ2Rpc2FibGVDb250ZXh0TWVudScsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtQaGFzZXIuVHlwZXMuQ29yZS5BdWRpb0NvbmZpZ30gUGhhc2VyLkNvcmUuQ29uZmlnI2F1ZGlvIC0gVGhlIEF1ZGlvIENvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYXVkaW8gPSBHZXRWYWx1ZShjb25maWcsICdhdWRpbycpO1xyXG5cclxuICAgICAgICAvLyAgSWYgeW91IGRvOiB7IGJhbm5lcjogZmFsc2UgfSBpdCB3b24ndCBkaXNwbGF5IGFueSBiYW5uZXIgYXQgYWxsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7Ym9vbGVhbn0gUGhhc2VyLkNvcmUuQ29uZmlnI2hpZGVCYW5uZXIgLSBEb24ndCB3cml0ZSB0aGUgYmFubmVyIGxpbmUgdG8gdGhlIGNvbnNvbGUubG9nLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaGlkZUJhbm5lciA9IChHZXRWYWx1ZShjb25maWcsICdiYW5uZXInLCBudWxsKSA9PT0gZmFsc2UpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2Jvb2xlYW59IFBoYXNlci5Db3JlLkNvbmZpZyNoaWRlUGhhc2VyIC0gT21pdCBQaGFzZXIncyBuYW1lIGFuZCB2ZXJzaW9uIGZyb20gdGhlIGJhbm5lci5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhpZGVQaGFzZXIgPSBHZXRWYWx1ZShjb25maWcsICdiYW5uZXIuaGlkZVBoYXNlcicsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtzdHJpbmd9IFBoYXNlci5Db3JlLkNvbmZpZyNiYW5uZXJUZXh0Q29sb3IgLSBUaGUgY29sb3Igb2YgdGhlIGJhbm5lciB0ZXh0LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYmFubmVyVGV4dENvbG9yID0gR2V0VmFsdWUoY29uZmlnLCAnYmFubmVyLnRleHQnLCBkZWZhdWx0QmFubmVyVGV4dENvbG9yKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtzdHJpbmdbXX0gUGhhc2VyLkNvcmUuQ29uZmlnI2Jhbm5lckJhY2tncm91bmRDb2xvciAtIFRoZSBiYWNrZ3JvdW5kIGNvbG9ycyBvZiB0aGUgYmFubmVyLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYmFubmVyQmFja2dyb3VuZENvbG9yID0gR2V0VmFsdWUoY29uZmlnLCAnYmFubmVyLmJhY2tncm91bmQnLCBkZWZhdWx0QmFubmVyQ29sb3IpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5nYW1lVGl0bGUgPT09ICcnICYmIHRoaXMuaGlkZVBoYXNlcilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuaGlkZUJhbm5lciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qgez9QaGFzZXIuVHlwZXMuQ29yZS5GUFNDb25maWd9IFBoYXNlci5Db3JlLkNvbmZpZyNmcHMgLSBUaGUgRnJhbWUgUmF0ZSBDb25maWd1cmF0aW9uIG9iamVjdCwgYXMgcGFyc2VkIGJ5IHRoZSBUaW1lc3RlcCBjbGFzcy5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZwcyA9IEdldFZhbHVlKGNvbmZpZywgJ2ZwcycsIG51bGwpO1xyXG5cclxuICAgICAgICAvLyAgUmVuZGVyZXIgU2V0dGluZ3NcclxuICAgICAgICAvLyAgVGhlc2UgY2FuIGVpdGhlciBiZSBpbiBhIGByZW5kZXJgIG9iamVjdCB3aXRoaW4gdGhlIENvbmZpZywgb3Igc3BlY2lmaWVkIG9uIHRoZWlyIG93blxyXG5cclxuICAgICAgICB2YXIgcmVuZGVyQ29uZmlnID0gR2V0VmFsdWUoY29uZmlnLCAncmVuZGVyJywgY29uZmlnKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtib29sZWFufSBQaGFzZXIuQ29yZS5Db25maWcjYW50aWFsaWFzIC0gV2hlbiBzZXQgdG8gYHRydWVgLCBXZWJHTCB1c2VzIGxpbmVhciBpbnRlcnBvbGF0aW9uIHRvIGRyYXcgc2NhbGVkIG9yIHJvdGF0ZWQgdGV4dHVyZXMsIGdpdmluZyBhIHNtb290aCBhcHBlYXJhbmNlLiBXaGVuIHNldCB0byBgZmFsc2VgLCBXZWJHTCB1c2VzIG5lYXJlc3QtbmVpZ2hib3IgaW50ZXJwb2xhdGlvbiwgZ2l2aW5nIGEgY3Jpc3BlciBhcHBlYXJhbmNlLiBgZmFsc2VgIGFsc28gZGlzYWJsZXMgYW50aWFsaWFzaW5nIG9mIHRoZSBnYW1lIGNhbnZhcyBpdHNlbGYsIGlmIHRoZSBicm93c2VyIHN1cHBvcnRzIGl0LCB3aGVuIHRoZSBnYW1lIGNhbnZhcyBpcyBzY2FsZWQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hbnRpYWxpYXMgPSBHZXRWYWx1ZShyZW5kZXJDb25maWcsICdhbnRpYWxpYXMnLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtib29sZWFufSBQaGFzZXIuQ29yZS5Db25maWcjYW50aWFsaWFzR0wgLSBTZXRzIHRoZSBgYW50aWFsaWFzYCBwcm9wZXJ0eSB3aGVuIHRoZSBXZWJHTCBjb250ZXh0IGlzIGNyZWF0ZWQuIFNldHRpbmcgdGhpcyB2YWx1ZSBkb2VzIG5vdCBpbXBhY3QgYW55IHN1YnNlcXVlbnQgdGV4dHVyZXMgdGhhdCBhcmUgY3JlYXRlZCwgb3IgdGhlIGNhbnZhcyBzdHlsZSBhdHRyaWJ1dGVzLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYW50aWFsaWFzR0wgPSBHZXRWYWx1ZShyZW5kZXJDb25maWcsICdhbnRpYWxpYXNHTCcsIHRydWUpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge3N0cmluZ30gUGhhc2VyLkNvcmUuQ29uZmlnI21pcG1hcEZpbHRlciAtIFNldHMgdGhlIGBtaXBtYXBGaWx0ZXJgIHByb3BlcnR5IHdoZW4gdGhlIFdlYkdMIHJlbmRlcmVyIGlzIGNyZWF0ZWQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5taXBtYXBGaWx0ZXIgPSBHZXRWYWx1ZShyZW5kZXJDb25maWcsICdtaXBtYXBGaWx0ZXInLCAnTElORUFSJyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7Ym9vbGVhbn0gUGhhc2VyLkNvcmUuQ29uZmlnI2Rlc3luY2hyb25pemVkIC0gV2hlbiBzZXQgdG8gYHRydWVgIGl0IHdpbGwgY3JlYXRlIGEgZGVzeW5jaHJvbml6ZWQgY29udGV4dCBmb3IgYm90aCAyRCBhbmQgV2ViR0wuIFNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS93ZWIvdXBkYXRlcy8yMDE5LzA1L2Rlc3luY2hyb25pemVkIGZvciBkZXRhaWxzLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGVzeW5jaHJvbml6ZWQgPSBHZXRWYWx1ZShyZW5kZXJDb25maWcsICdkZXN5bmNocm9uaXplZCcsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtib29sZWFufSBQaGFzZXIuQ29yZS5Db25maWcjcm91bmRQaXhlbHMgLSBEcmF3IHRleHR1cmUtYmFzZWQgR2FtZSBPYmplY3RzIGF0IG9ubHkgd2hvbGUtaW50ZWdlciBwb3NpdGlvbnMuIEdhbWUgT2JqZWN0cyB3aXRob3V0IHRleHR1cmVzLCBsaWtlIEdyYXBoaWNzLCBpZ25vcmUgdGhpcyBwcm9wZXJ0eS5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJvdW5kUGl4ZWxzID0gR2V0VmFsdWUocmVuZGVyQ29uZmlnLCAncm91bmRQaXhlbHMnLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7Ym9vbGVhbn0gUGhhc2VyLkNvcmUuQ29uZmlnI3BpeGVsQXJ0IC0gUHJldmVudCBwaXhlbCBhcnQgZnJvbSBiZWNvbWluZyBibHVycmVkIHdoZW4gc2NhbGVkLiBJdCB3aWxsIHJlbWFpbiBjcmlzcCAodGVsbHMgdGhlIFdlYkdMIHJlbmRlcmVyIHRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlIHRleHR1cmVzIHVzaW5nIGEgbGluZWFyIGZpbHRlciBtb2RlKS5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBpeGVsQXJ0ID0gR2V0VmFsdWUocmVuZGVyQ29uZmlnLCAncGl4ZWxBcnQnLCB0aGlzLnpvb20gIT09IDEpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5waXhlbEFydClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuYW50aWFsaWFzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucm91bmRQaXhlbHMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtib29sZWFufSBQaGFzZXIuQ29yZS5Db25maWcjdHJhbnNwYXJlbnQgLSBXaGV0aGVyIHRoZSBnYW1lIGNhbnZhcyB3aWxsIGhhdmUgYSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudHJhbnNwYXJlbnQgPSBHZXRWYWx1ZShyZW5kZXJDb25maWcsICd0cmFuc3BhcmVudCcsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtib29sZWFufSBQaGFzZXIuQ29yZS5Db25maWcjY2xlYXJCZWZvcmVSZW5kZXIgLSBXaGV0aGVyIHRoZSBnYW1lIGNhbnZhcyB3aWxsIGJlIGNsZWFyZWQgYmV0d2VlbiBlYWNoIHJlbmRlcmluZyBmcmFtZS4gWW91IGNhbiBkaXNhYmxlIHRoaXMgaWYgeW91IGhhdmUgYSBmdWxsLXNjcmVlbiBiYWNrZ3JvdW5kIGltYWdlIG9yIGdhbWUgb2JqZWN0LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBHZXRWYWx1ZShyZW5kZXJDb25maWcsICdjbGVhckJlZm9yZVJlbmRlcicsIHRydWUpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2Jvb2xlYW59IFBoYXNlci5Db3JlLkNvbmZpZyNwcmVtdWx0aXBsaWVkQWxwaGEgLSBJbiBXZWJHTCBtb2RlLCBzZXRzIHRoZSBkcmF3aW5nIGJ1ZmZlciB0byBjb250YWluIGNvbG9ycyB3aXRoIHByZS1tdWx0aXBsaWVkIGFscGhhLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gR2V0VmFsdWUocmVuZGVyQ29uZmlnLCAncHJlbXVsdGlwbGllZEFscGhhJywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7Ym9vbGVhbn0gUGhhc2VyLkNvcmUuQ29uZmlnI2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQgLSBMZXQgdGhlIGJyb3dzZXIgYWJvcnQgY3JlYXRpbmcgYSBXZWJHTCBjb250ZXh0IGlmIGl0IGp1ZGdlcyBwZXJmb3JtYW5jZSB3b3VsZCBiZSB1bmFjY2VwdGFibGUuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0ID0gR2V0VmFsdWUocmVuZGVyQ29uZmlnLCAnZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCcsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtzdHJpbmd9IFBoYXNlci5Db3JlLkNvbmZpZyNwb3dlclByZWZlcmVuY2UgLSBcImhpZ2gtcGVyZm9ybWFuY2VcIiwgXCJsb3ctcG93ZXJcIiBvciBcImRlZmF1bHRcIi4gQSBoaW50IHRvIHRoZSBicm93c2VyIG9uIGhvdyBtdWNoIGRldmljZSBwb3dlciB0aGUgZ2FtZSBtaWdodCB1c2UuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wb3dlclByZWZlcmVuY2UgPSBHZXRWYWx1ZShyZW5kZXJDb25maWcsICdwb3dlclByZWZlcmVuY2UnLCAnZGVmYXVsdCcpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2ludGVnZXJ9IFBoYXNlci5Db3JlLkNvbmZpZyNiYXRjaFNpemUgLSBUaGUgZGVmYXVsdCBXZWJHTCBCYXRjaCBzaXplLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYmF0Y2hTaXplID0gR2V0VmFsdWUocmVuZGVyQ29uZmlnLCAnYmF0Y2hTaXplJywgMjAwMCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7aW50ZWdlcn0gUGhhc2VyLkNvcmUuQ29uZmlnI21heExpZ2h0cyAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBsaWdodHMgYWxsb3dlZCB0byBiZSB2aXNpYmxlIHdpdGhpbiByYW5nZSBvZiBhIHNpbmdsZSBDYW1lcmEgaW4gdGhlIExpZ2h0TWFuYWdlci5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1heExpZ2h0cyA9IEdldFZhbHVlKHJlbmRlckNvbmZpZywgJ21heExpZ2h0cycsIDEwKTtcclxuXHJcbiAgICAgICAgdmFyIGJnYyA9IEdldFZhbHVlKGNvbmZpZywgJ2JhY2tncm91bmRDb2xvcicsIDApO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge1BoYXNlci5EaXNwbGF5LkNvbG9yfSBQaGFzZXIuQ29yZS5Db25maWcjYmFja2dyb3VuZENvbG9yIC0gVGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIGdhbWUgY2FudmFzLiBUaGUgZGVmYXVsdCBpcyBibGFjay4gVGhpcyB2YWx1ZSBpcyBpZ25vcmVkIGlmIGB0cmFuc3BhcmVudGAgaXMgc2V0IHRvIGB0cnVlYC5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IFZhbHVlVG9Db2xvcihiZ2MpO1xyXG5cclxuICAgICAgICBpZiAoYmdjID09PSAwICYmIHRoaXMudHJhbnNwYXJlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmJhY2tncm91bmRDb2xvci5hbHBoYSA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge1BoYXNlci5UeXBlcy5Db3JlLkJvb3RDYWxsYmFja30gUGhhc2VyLkNvcmUuQ29uZmlnI3ByZUJvb3QgLSBDYWxsZWQgYmVmb3JlIFBoYXNlciBib290cy4gVXNlZnVsIGZvciBpbml0aWFsaXppbmcgYW55dGhpbmcgbm90IHJlbGF0ZWQgdG8gUGhhc2VyIHRoYXQgUGhhc2VyIG1heSByZXF1aXJlIHdoaWxlIGJvb3RpbmcuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wcmVCb290ID0gR2V0VmFsdWUoY29uZmlnLCAnY2FsbGJhY2tzLnByZUJvb3QnLCBOT09QKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtQaGFzZXIuVHlwZXMuQ29yZS5Cb290Q2FsbGJhY2t9IFBoYXNlci5Db3JlLkNvbmZpZyNwb3N0Qm9vdCAtIEEgZnVuY3Rpb24gdG8gcnVuIGF0IHRoZSBlbmQgb2YgdGhlIGJvb3Qgc2VxdWVuY2UuIEF0IHRoaXMgcG9pbnQsIGFsbCB0aGUgZ2FtZSBzeXN0ZW1zIGhhdmUgc3RhcnRlZCBhbmQgcGx1Z2lucyBoYXZlIGJlZW4gbG9hZGVkLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucG9zdEJvb3QgPSBHZXRWYWx1ZShjb25maWcsICdjYWxsYmFja3MucG9zdEJvb3QnLCBOT09QKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtQaGFzZXIuVHlwZXMuQ29yZS5QaHlzaWNzQ29uZmlnfSBQaGFzZXIuQ29yZS5Db25maWcjcGh5c2ljcyAtIFRoZSBQaHlzaWNzIENvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGh5c2ljcyA9IEdldFZhbHVlKGNvbmZpZywgJ3BoeXNpY3MnLCB7fSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7KGJvb2xlYW58c3RyaW5nKX0gUGhhc2VyLkNvcmUuQ29uZmlnI2RlZmF1bHRQaHlzaWNzU3lzdGVtIC0gVGhlIGRlZmF1bHQgcGh5c2ljcyBzeXN0ZW0uIEl0IHdpbGwgYmUgc3RhcnRlZCBmb3IgZWFjaCBzY2VuZS4gRWl0aGVyICdhcmNhZGUnLCAnaW1wYWN0JyBvciAnbWF0dGVyJy5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlZmF1bHRQaHlzaWNzU3lzdGVtID0gR2V0VmFsdWUodGhpcy5waHlzaWNzLCAnZGVmYXVsdCcsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtzdHJpbmd9IFBoYXNlci5Db3JlLkNvbmZpZyNsb2FkZXJCYXNlVVJMIC0gQSBVUkwgdXNlZCB0byByZXNvbHZlIHBhdGhzIGdpdmVuIHRvIHRoZSBsb2FkZXIuIEV4YW1wbGU6ICdodHRwOi8vbGFicy5waGFzZXIuaW8vYXNzZXRzLycuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sb2FkZXJCYXNlVVJMID0gR2V0VmFsdWUoY29uZmlnLCAnbG9hZGVyLmJhc2VVUkwnLCAnJyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7c3RyaW5nfSBQaGFzZXIuQ29yZS5Db25maWcjbG9hZGVyUGF0aCAtIEEgVVJMIHBhdGggdXNlZCB0byByZXNvbHZlIHJlbGF0aXZlIHBhdGhzIGdpdmVuIHRvIHRoZSBsb2FkZXIuIEV4YW1wbGU6ICdpbWFnZXMvc3ByaXRlcy8nLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubG9hZGVyUGF0aCA9IEdldFZhbHVlKGNvbmZpZywgJ2xvYWRlci5wYXRoJywgJycpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2ludGVnZXJ9IFBoYXNlci5Db3JlLkNvbmZpZyNsb2FkZXJNYXhQYXJhbGxlbERvd25sb2FkcyAtIE1heGltdW0gcGFyYWxsZWwgZG93bmxvYWRzIGFsbG93ZWQgZm9yIHJlc291cmNlcyAoRGVmYXVsdCB0byAzMikuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sb2FkZXJNYXhQYXJhbGxlbERvd25sb2FkcyA9IEdldFZhbHVlKGNvbmZpZywgJ2xvYWRlci5tYXhQYXJhbGxlbERvd25sb2FkcycsIDMyKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHsoc3RyaW5nfHVuZGVmaW5lZCl9IFBoYXNlci5Db3JlLkNvbmZpZyNsb2FkZXJDcm9zc09yaWdpbiAtICdhbm9ueW1vdXMnLCAndXNlLWNyZWRlbnRpYWxzJywgb3IgYHVuZGVmaW5lZGAuIElmIHlvdSdyZSBub3QgbWFraW5nIGNyb3NzLW9yaWdpbiByZXF1ZXN0cywgbGVhdmUgdGhpcyBhcyBgdW5kZWZpbmVkYC4gU2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0NPUlNfc2V0dGluZ3NfYXR0cmlidXRlc30uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sb2FkZXJDcm9zc09yaWdpbiA9IEdldFZhbHVlKGNvbmZpZywgJ2xvYWRlci5jcm9zc09yaWdpbicsIHVuZGVmaW5lZCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7c3RyaW5nfSBQaGFzZXIuQ29yZS5Db25maWcjbG9hZGVyUmVzcG9uc2VUeXBlIC0gVGhlIHJlc3BvbnNlIHR5cGUgb2YgdGhlIFhIUiByZXF1ZXN0LCBlLmcuIGBibG9iYCwgYHRleHRgLCBldGMuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sb2FkZXJSZXNwb25zZVR5cGUgPSBHZXRWYWx1ZShjb25maWcsICdsb2FkZXIucmVzcG9uc2VUeXBlJywgJycpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2Jvb2xlYW59IFBoYXNlci5Db3JlLkNvbmZpZyNsb2FkZXJBc3luYyAtIFNob3VsZCB0aGUgWEhSIHJlcXVlc3QgdXNlIGFzeW5jIG9yIG5vdD9cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxvYWRlckFzeW5jID0gR2V0VmFsdWUoY29uZmlnLCAnbG9hZGVyLmFzeW5jJywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7c3RyaW5nfSBQaGFzZXIuQ29yZS5Db25maWcjbG9hZGVyVXNlciAtIE9wdGlvbmFsIHVzZXJuYW1lIGZvciBhbGwgWEhSIHJlcXVlc3RzLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubG9hZGVyVXNlciA9IEdldFZhbHVlKGNvbmZpZywgJ2xvYWRlci51c2VyJywgJycpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge3N0cmluZ30gUGhhc2VyLkNvcmUuQ29uZmlnI2xvYWRlclBhc3N3b3JkIC0gT3B0aW9uYWwgcGFzc3dvcmQgZm9yIGFsbCBYSFIgcmVxdWVzdHMuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sb2FkZXJQYXNzd29yZCA9IEdldFZhbHVlKGNvbmZpZywgJ2xvYWRlci5wYXNzd29yZCcsICcnKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtpbnRlZ2VyfSBQaGFzZXIuQ29yZS5Db25maWcjbG9hZGVyVGltZW91dCAtIE9wdGlvbmFsIFhIUiB0aW1lb3V0IHZhbHVlLCBpbiBtcy5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxvYWRlclRpbWVvdXQgPSBHZXRWYWx1ZShjb25maWcsICdsb2FkZXIudGltZW91dCcsIDApO1xyXG5cclxuICAgICAgICAvKlxyXG4gICAgICAgICAqIEFsbG93cyBgcGx1Z2luc2AgcHJvcGVydHkgdG8gZWl0aGVyIGJlIGFuIGFycmF5LCBpbiB3aGljaCBjYXNlIGl0IGp1c3QgcmVwbGFjZXNcclxuICAgICAgICAgKiB0aGUgZGVmYXVsdCBwbHVnaW5zIGxpa2UgcHJldmlvdXNseSwgb3IgYSBjb25maWcgb2JqZWN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogcGx1Z2luczoge1xyXG4gICAgICAgICAqICAgIGdsb2JhbDogW1xyXG4gICAgICAgICAqICAgICAgICB7IGtleTogJ1Rlc3RQbHVnaW4nLCBwbHVnaW46IFRlc3RQbHVnaW4sIHN0YXJ0OiB0cnVlLCBkYXRhOiB7IG1zZzogJ1RoZSBwbHVnaW4gaXMgYWxpdmUnIH0gfSxcclxuICAgICAgICAgKiAgICBdLFxyXG4gICAgICAgICAqICAgIHNjZW5lOiBbXHJcbiAgICAgICAgICogICAgICAgIHsga2V5OiAnV2lyZUZyYW1lUGx1Z2luJywgcGx1Z2luOiBXaXJlRnJhbWVQbHVnaW4sIHN5c3RlbUtleTogJ3dpcmVGcmFtZVBsdWdpbicsIHNjZW5lS2V5OiAnd2lyZWZyYW1lJyB9XHJcbiAgICAgICAgICogICAgXSxcclxuICAgICAgICAgKiAgICBkZWZhdWx0OiBbXSwgT1JcclxuICAgICAgICAgKiAgICBkZWZhdWx0TWVyZ2U6IFtcclxuICAgICAgICAgKiAgICAgICAgJ01vZFBsYXllcidcclxuICAgICAgICAgKiAgICBdXHJcbiAgICAgICAgICogfVxyXG4gICAgICAgICAqL1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge2FueX0gUGhhc2VyLkNvcmUuQ29uZmlnI2luc3RhbGxHbG9iYWxQbHVnaW5zIC0gQW4gYXJyYXkgb2YgZ2xvYmFsIHBsdWdpbnMgdG8gYmUgaW5zdGFsbGVkLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW5zdGFsbEdsb2JhbFBsdWdpbnMgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHthbnl9IFBoYXNlci5Db3JlLkNvbmZpZyNpbnN0YWxsU2NlbmVQbHVnaW5zIC0gQW4gYXJyYXkgb2YgU2NlbmUgbGV2ZWwgcGx1Z2lucyB0byBiZSBpbnN0YWxsZWQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbnN0YWxsU2NlbmVQbHVnaW5zID0gW107XHJcblxyXG4gICAgICAgIHZhciBwbHVnaW5zID0gR2V0VmFsdWUoY29uZmlnLCAncGx1Z2lucycsIG51bGwpO1xyXG4gICAgICAgIHZhciBkZWZhdWx0UGx1Z2lucyA9IERlZmF1bHRQbHVnaW5zLkRlZmF1bHRTY2VuZTtcclxuXHJcbiAgICAgICAgaWYgKHBsdWdpbnMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgT2xkIDMuNyBhcnJheSBmb3JtYXQ/XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBsdWdpbnMpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRQbHVnaW5zID0gcGx1Z2lucztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChJc1BsYWluT2JqZWN0KHBsdWdpbnMpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluc3RhbGxHbG9iYWxQbHVnaW5zID0gR2V0RmFzdFZhbHVlKHBsdWdpbnMsICdnbG9iYWwnLCBbXSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluc3RhbGxTY2VuZVBsdWdpbnMgPSBHZXRGYXN0VmFsdWUocGx1Z2lucywgJ3NjZW5lJywgW10pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBsdWdpbnMuZGVmYXVsdCkpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFBsdWdpbnMgPSBwbHVnaW5zLmRlZmF1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHBsdWdpbnMuZGVmYXVsdE1lcmdlKSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0UGx1Z2lucyA9IGRlZmF1bHRQbHVnaW5zLmNvbmNhdChwbHVnaW5zLmRlZmF1bHRNZXJnZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBjb25zdCB7YW55fSBQaGFzZXIuQ29yZS5Db25maWcjZGVmYXVsdFBsdWdpbnMgLSBUaGUgcGx1Z2lucyBpbnN0YWxsZWQgaW50byBldmVyeSBTY2VuZSAoaW4gYWRkaXRpb24gdG8gQ29yZVNjZW5lIGFuZCBHbG9iYWwpLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdFBsdWdpbnMgPSBkZWZhdWx0UGx1Z2lucztcclxuXHJcbiAgICAgICAgLy8gIERlZmF1bHQgLyBNaXNzaW5nIEltYWdlc1xyXG4gICAgICAgIHZhciBwbmdQcmVmaXggPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDQUFBQUFnJztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGNvbnN0IHtzdHJpbmd9IFBoYXNlci5Db3JlLkNvbmZpZyNkZWZhdWx0SW1hZ2UgLSBBIGJhc2U2NCBlbmNvZGVkIFBORyB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBibGFuayB0ZXh0dXJlLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEltYWdlID0gR2V0VmFsdWUoY29uZmlnLCAnaW1hZ2VzLmRlZmF1bHQnLCBwbmdQcmVmaXggKyAnQVFNQUFBQkp0T2kzQUFBQUExQk1WRVgvLy8rbnhCdklBQUFBQVhSU1RsTUFRT2JZWmdBQUFCVkpSRUZVZUY3TndJRUFBQUFBZ0tEOXFkZW9jQU1Bb0FBQm0zRGtjQUFBQUFCSlJVNUVya0pnZ2c9PScpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAY29uc3Qge3N0cmluZ30gUGhhc2VyLkNvcmUuQ29uZmlnI21pc3NpbmdJbWFnZSAtIEEgYmFzZTY0IGVuY29kZWQgUE5HIHRoYXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHRleHR1cmUgd2hlbiBhIHRleHR1cmUgaXMgYXNzaWduZWQgdGhhdCBpcyBtaXNzaW5nIG9yIG5vdCBsb2FkZWQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5taXNzaW5nSW1hZ2UgPSBHZXRWYWx1ZShjb25maWcsICdpbWFnZXMubWlzc2luZycsIHBuZ1ByZWZpeCArICdDQUlBQUFEOEdPMmpBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQUo5SlJFRlVlTnEwMXNzT3d5QU1SRkc0NnYvL010MUVTbWdoK0RGbUUyR1BPQkFSS2IyTlZqbysxN1BYTEQ4YTErcGw1K0Erd1NnRnlneW1XWUhCYjBGdHNLaEpEZFpsbmNHMkl6SjRheW9NRHYyMHdUbVNNekNsRWdiV1lOVEFrUTBaK09KK0EvZVduQWFSOStveENGNE9zMEg4aHRzTVVwK3B3Y2dCQmlNTm5Bd0Y4R3FJZ0wyaEF6YUdGRmdaYXVEUEtBQm1vd1o0R0wzNjkvMHJ3QUNwMnlBL3R0bXZzUUFBQUFCSlJVNUVya0pnZ2c9PScpO1xyXG5cclxuICAgICAgICBpZiAod2luZG93KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5GT1JDRV9XRUJHTClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUeXBlID0gQ09OU1QuV0VCR0w7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAod2luZG93LkZPUkNFX0NBTlZBUylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUeXBlID0gQ09OU1QuQ0FOVkFTO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvbmZpZztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/Config.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/core/CreateRenderer.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/core/CreateRenderer.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CanvasInterpolation = __webpack_require__(/*! ../display/canvas/CanvasInterpolation */ \"./node_modules/phaser/src/display/canvas/CanvasInterpolation.js\");\r\nvar CanvasPool = __webpack_require__(/*! ../display/canvas/CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/const.js\");\r\nvar Features = __webpack_require__(/*! ../device/Features */ \"./node_modules/phaser/src/device/Features.js\");\r\n\r\n/**\r\n * Called automatically by Phaser.Game and responsible for creating the renderer it will use.\r\n *\r\n * Relies upon two webpack global flags to be defined: `WEBGL_RENDERER` and `CANVAS_RENDERER` during build time, but not at run-time.\r\n *\r\n * @function Phaser.Core.CreateRenderer\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Game} game - The Phaser.Game instance on which the renderer will be set.\r\n */\r\nvar CreateRenderer = function (game)\r\n{\r\n var config = game.config;\r\n\r\n if ((config.customEnvironment || config.canvas) && config.renderType === CONST.AUTO)\r\n {\r\n throw new Error('Must set explicit renderType in custom environment');\r\n }\r\n\r\n // Not a custom environment, didn't provide their own canvas and not headless, so determine the renderer:\r\n if (!config.customEnvironment && !config.canvas && config.renderType !== CONST.HEADLESS)\r\n {\r\n if (config.renderType === CONST.CANVAS || (config.renderType !== CONST.CANVAS && !Features.webGL))\r\n {\r\n if (Features.canvas)\r\n {\r\n // They requested Canvas and their browser supports it\r\n config.renderType = CONST.CANVAS;\r\n }\r\n else\r\n {\r\n throw new Error('Cannot create Canvas or WebGL context, aborting.');\r\n }\r\n }\r\n else\r\n {\r\n // Game requested WebGL and browser says it supports it\r\n config.renderType = CONST.WEBGL;\r\n }\r\n }\r\n\r\n // Pixel Art mode?\r\n if (!config.antialias)\r\n {\r\n CanvasPool.disableSmoothing();\r\n }\r\n\r\n var baseSize = game.scale.baseSize;\r\n\r\n var width = baseSize.width;\r\n var height = baseSize.height;\r\n\r\n // Does the game config provide its own canvas element to use?\r\n if (config.canvas)\r\n {\r\n game.canvas = config.canvas;\r\n\r\n game.canvas.width = width;\r\n game.canvas.height = height;\r\n }\r\n else\r\n {\r\n game.canvas = CanvasPool.create(game, width, height, config.renderType);\r\n }\r\n\r\n // Does the game config provide some canvas css styles to use?\r\n if (config.canvasStyle)\r\n {\r\n game.canvas.style = config.canvasStyle;\r\n }\r\n\r\n // Pixel Art mode?\r\n if (!config.antialias)\r\n {\r\n CanvasInterpolation.setCrisp(game.canvas);\r\n }\r\n\r\n if (config.renderType === CONST.HEADLESS)\r\n {\r\n // Nothing more to do here\r\n return;\r\n }\r\n\r\n var CanvasRenderer;\r\n var WebGLRenderer;\r\n\r\n if (true)\r\n {\r\n CanvasRenderer = __webpack_require__(/*! ../renderer/canvas/CanvasRenderer */ \"./node_modules/phaser/src/renderer/canvas/CanvasRenderer.js\");\r\n WebGLRenderer = __webpack_require__(/*! ../renderer/webgl/WebGLRenderer */ \"./node_modules/phaser/src/renderer/webgl/WebGLRenderer.js\");\r\n\r\n // Let the config pick the renderer type, as both are included\r\n if (config.renderType === CONST.WEBGL)\r\n {\r\n game.renderer = new WebGLRenderer(game);\r\n }\r\n else\r\n {\r\n game.renderer = new CanvasRenderer(game);\r\n game.context = game.renderer.gameContext;\r\n }\r\n }\r\n\r\n if (false)\r\n {}\r\n\r\n if (false)\r\n {}\r\n};\r\n\r\nmodule.exports = CreateRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL0NyZWF0ZVJlbmRlcmVyLmpzP2FmMWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLDBCQUEwQixtQkFBTyxDQUFDLDhHQUF1QztBQUN6RSxpQkFBaUIsbUJBQU8sQ0FBQyw0RkFBOEI7QUFDdkQsWUFBWSxtQkFBTyxDQUFDLG9EQUFVO0FBQzlCLGVBQWUsbUJBQU8sQ0FBQyx3RUFBb0I7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLFFBQVEsSUFBK0M7QUFDdkQ7QUFDQSx5QkFBeUIsbUJBQU8sQ0FBQyxzR0FBbUM7QUFDcEUsd0JBQXdCLG1CQUFPLENBQUMsa0dBQWlDOztBQUVqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsS0FBZ0Q7QUFDeEQsSUFBSSxFQU9DOztBQUVMLFFBQVEsS0FBZ0Q7QUFDeEQsSUFBSSxFQVNDO0FBQ0w7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL0NyZWF0ZVJlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2FudmFzSW50ZXJwb2xhdGlvbiA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvY2FudmFzL0NhbnZhc0ludGVycG9sYXRpb24nKTtcclxudmFyIENhbnZhc1Bvb2wgPSByZXF1aXJlKCcuLi9kaXNwbGF5L2NhbnZhcy9DYW52YXNQb29sJyk7XHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XHJcbnZhciBGZWF0dXJlcyA9IHJlcXVpcmUoJy4uL2RldmljZS9GZWF0dXJlcycpO1xyXG5cclxuLyoqXHJcbiAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IFBoYXNlci5HYW1lIGFuZCByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhlIHJlbmRlcmVyIGl0IHdpbGwgdXNlLlxyXG4gKlxyXG4gKiBSZWxpZXMgdXBvbiB0d28gd2VicGFjayBnbG9iYWwgZmxhZ3MgdG8gYmUgZGVmaW5lZDogYFdFQkdMX1JFTkRFUkVSYCBhbmQgYENBTlZBU19SRU5ERVJFUmAgZHVyaW5nIGJ1aWxkIHRpbWUsIGJ1dCBub3QgYXQgcnVuLXRpbWUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQ29yZS5DcmVhdGVSZW5kZXJlclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZX0gZ2FtZSAtIFRoZSBQaGFzZXIuR2FtZSBpbnN0YW5jZSBvbiB3aGljaCB0aGUgcmVuZGVyZXIgd2lsbCBiZSBzZXQuXHJcbiAqL1xyXG52YXIgQ3JlYXRlUmVuZGVyZXIgPSBmdW5jdGlvbiAoZ2FtZSlcclxue1xyXG4gICAgdmFyIGNvbmZpZyA9IGdhbWUuY29uZmlnO1xyXG5cclxuICAgIGlmICgoY29uZmlnLmN1c3RvbUVudmlyb25tZW50IHx8IGNvbmZpZy5jYW52YXMpICYmIGNvbmZpZy5yZW5kZXJUeXBlID09PSBDT05TVC5BVVRPKVxyXG4gICAge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBzZXQgZXhwbGljaXQgcmVuZGVyVHlwZSBpbiBjdXN0b20gZW52aXJvbm1lbnQnKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgTm90IGEgY3VzdG9tIGVudmlyb25tZW50LCBkaWRuJ3QgcHJvdmlkZSB0aGVpciBvd24gY2FudmFzIGFuZCBub3QgaGVhZGxlc3MsIHNvIGRldGVybWluZSB0aGUgcmVuZGVyZXI6XHJcbiAgICBpZiAoIWNvbmZpZy5jdXN0b21FbnZpcm9ubWVudCAmJiAhY29uZmlnLmNhbnZhcyAmJiBjb25maWcucmVuZGVyVHlwZSAhPT0gQ09OU1QuSEVBRExFU1MpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNvbmZpZy5yZW5kZXJUeXBlID09PSBDT05TVC5DQU5WQVMgfHwgKGNvbmZpZy5yZW5kZXJUeXBlICE9PSBDT05TVC5DQU5WQVMgJiYgIUZlYXR1cmVzLndlYkdMKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChGZWF0dXJlcy5jYW52YXMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBUaGV5IHJlcXVlc3RlZCBDYW52YXMgYW5kIHRoZWlyIGJyb3dzZXIgc3VwcG9ydHMgaXRcclxuICAgICAgICAgICAgICAgIGNvbmZpZy5yZW5kZXJUeXBlID0gQ09OU1QuQ0FOVkFTO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIENhbnZhcyBvciBXZWJHTCBjb250ZXh0LCBhYm9ydGluZy4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgR2FtZSByZXF1ZXN0ZWQgV2ViR0wgYW5kIGJyb3dzZXIgc2F5cyBpdCBzdXBwb3J0cyBpdFxyXG4gICAgICAgICAgICBjb25maWcucmVuZGVyVHlwZSA9IENPTlNULldFQkdMO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAgUGl4ZWwgQXJ0IG1vZGU/XHJcbiAgICBpZiAoIWNvbmZpZy5hbnRpYWxpYXMpXHJcbiAgICB7XHJcbiAgICAgICAgQ2FudmFzUG9vbC5kaXNhYmxlU21vb3RoaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGJhc2VTaXplID0gZ2FtZS5zY2FsZS5iYXNlU2l6ZTtcclxuXHJcbiAgICB2YXIgd2lkdGggPSBiYXNlU2l6ZS53aWR0aDtcclxuICAgIHZhciBoZWlnaHQgPSBiYXNlU2l6ZS5oZWlnaHQ7XHJcblxyXG4gICAgLy8gIERvZXMgdGhlIGdhbWUgY29uZmlnIHByb3ZpZGUgaXRzIG93biBjYW52YXMgZWxlbWVudCB0byB1c2U/XHJcbiAgICBpZiAoY29uZmlnLmNhbnZhcylcclxuICAgIHtcclxuICAgICAgICBnYW1lLmNhbnZhcyA9IGNvbmZpZy5jYW52YXM7XHJcblxyXG4gICAgICAgIGdhbWUuY2FudmFzLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgZ2FtZS5jYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIGdhbWUuY2FudmFzID0gQ2FudmFzUG9vbC5jcmVhdGUoZ2FtZSwgd2lkdGgsIGhlaWdodCwgY29uZmlnLnJlbmRlclR5cGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBEb2VzIHRoZSBnYW1lIGNvbmZpZyBwcm92aWRlIHNvbWUgY2FudmFzIGNzcyBzdHlsZXMgdG8gdXNlP1xyXG4gICAgaWYgKGNvbmZpZy5jYW52YXNTdHlsZSlcclxuICAgIHtcclxuICAgICAgICBnYW1lLmNhbnZhcy5zdHlsZSA9IGNvbmZpZy5jYW52YXNTdHlsZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgUGl4ZWwgQXJ0IG1vZGU/XHJcbiAgICBpZiAoIWNvbmZpZy5hbnRpYWxpYXMpXHJcbiAgICB7XHJcbiAgICAgICAgQ2FudmFzSW50ZXJwb2xhdGlvbi5zZXRDcmlzcChnYW1lLmNhbnZhcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5yZW5kZXJUeXBlID09PSBDT05TVC5IRUFETEVTUylcclxuICAgIHtcclxuICAgICAgICAvLyAgTm90aGluZyBtb3JlIHRvIGRvIGhlcmVcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIENhbnZhc1JlbmRlcmVyO1xyXG4gICAgdmFyIFdlYkdMUmVuZGVyZXI7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUiAmJiB0eXBlb2YgQ0FOVkFTX1JFTkRFUkVSKVxyXG4gICAge1xyXG4gICAgICAgIENhbnZhc1JlbmRlcmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXIvY2FudmFzL0NhbnZhc1JlbmRlcmVyJyk7XHJcbiAgICAgICAgV2ViR0xSZW5kZXJlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVyL3dlYmdsL1dlYkdMUmVuZGVyZXInKTtcclxuXHJcbiAgICAgICAgLy8gIExldCB0aGUgY29uZmlnIHBpY2sgdGhlIHJlbmRlcmVyIHR5cGUsIGFzIGJvdGggYXJlIGluY2x1ZGVkXHJcbiAgICAgICAgaWYgKGNvbmZpZy5yZW5kZXJUeXBlID09PSBDT05TVC5XRUJHTClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdhbWUucmVuZGVyZXIgPSBuZXcgV2ViR0xSZW5kZXJlcihnYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZ2FtZS5yZW5kZXJlciA9IG5ldyBDYW52YXNSZW5kZXJlcihnYW1lKTtcclxuICAgICAgICAgICAgZ2FtZS5jb250ZXh0ID0gZ2FtZS5yZW5kZXJlci5nYW1lQ29udGV4dDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUiAmJiAhdHlwZW9mIENBTlZBU19SRU5ERVJFUilcclxuICAgIHtcclxuICAgICAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXIvd2ViZ2wvV2ViR0xSZW5kZXJlcicpO1xyXG5cclxuICAgICAgICAvLyAgRm9yY2UgdGhlIHR5cGUgdG8gV2ViR0wsIHJlZ2FyZGxlc3Mgd2hhdCB3YXMgcmVxdWVzdGVkXHJcbiAgICAgICAgY29uZmlnLnJlbmRlclR5cGUgPSBDT05TVC5XRUJHTDtcclxuXHJcbiAgICAgICAgZ2FtZS5yZW5kZXJlciA9IG5ldyBXZWJHTFJlbmRlcmVyKGdhbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdHlwZW9mIFdFQkdMX1JFTkRFUkVSICYmIHR5cGVvZiBDQU5WQVNfUkVOREVSRVIpXHJcbiAgICB7XHJcbiAgICAgICAgQ2FudmFzUmVuZGVyZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlci9jYW52YXMvQ2FudmFzUmVuZGVyZXInKTtcclxuXHJcbiAgICAgICAgLy8gIEZvcmNlIHRoZSB0eXBlIHRvIENhbnZhcywgcmVnYXJkbGVzcyB3aGF0IHdhcyByZXF1ZXN0ZWRcclxuICAgICAgICBjb25maWcucmVuZGVyVHlwZSA9IENPTlNULkNBTlZBUztcclxuXHJcbiAgICAgICAgZ2FtZS5yZW5kZXJlciA9IG5ldyBDYW52YXNSZW5kZXJlcihnYW1lKTtcclxuXHJcbiAgICAgICAgZ2FtZS5jb250ZXh0ID0gZ2FtZS5yZW5kZXJlci5nYW1lQ29udGV4dDtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ3JlYXRlUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/CreateRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/core/DebugHeader.js":
/*!*****************************************************!*\
!*** ./node_modules/phaser/src/core/DebugHeader.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/const.js\");\r\n\r\n/**\r\n * Called automatically by Phaser.Game and responsible for creating the console.log debug header.\r\n *\r\n * You can customize or disable the header via the Game Config object.\r\n *\r\n * @function Phaser.Core.DebugHeader\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Game} game - The Phaser.Game instance which will output this debug header.\r\n */\r\nvar DebugHeader = function (game)\r\n{\r\n var config = game.config;\r\n\r\n if (config.hideBanner)\r\n {\r\n return;\r\n }\r\n\r\n var renderType = 'WebGL';\r\n\r\n if (config.renderType === CONST.CANVAS)\r\n {\r\n renderType = 'Canvas';\r\n }\r\n else if (config.renderType === CONST.HEADLESS)\r\n {\r\n renderType = 'Headless';\r\n }\r\n\r\n var audioConfig = config.audio;\r\n var deviceAudio = game.device.audio;\r\n\r\n var audioType;\r\n\r\n if (deviceAudio.webAudio && !(audioConfig && audioConfig.disableWebAudio))\r\n {\r\n audioType = 'Web Audio';\r\n }\r\n else if ((audioConfig && audioConfig.noAudio) || (!deviceAudio.webAudio && !deviceAudio.audioData))\r\n {\r\n audioType = 'No Audio';\r\n }\r\n else\r\n {\r\n audioType = 'HTML5 Audio';\r\n }\r\n\r\n if (!game.device.browser.ie)\r\n {\r\n var c = '';\r\n var args = [ c ];\r\n\r\n if (Array.isArray(config.bannerBackgroundColor))\r\n {\r\n var lastColor;\r\n\r\n config.bannerBackgroundColor.forEach(function (color)\r\n {\r\n c = c.concat('%c ');\r\n\r\n args.push('background: ' + color);\r\n\r\n lastColor = color;\r\n\r\n });\r\n\r\n // inject the text color\r\n args[args.length - 1] = 'color: ' + config.bannerTextColor + '; background: ' + lastColor;\r\n }\r\n else\r\n {\r\n c = c.concat('%c ');\r\n\r\n args.push('color: ' + config.bannerTextColor + '; background: ' + config.bannerBackgroundColor);\r\n }\r\n\r\n // URL link background color (always white)\r\n args.push('background: #fff');\r\n\r\n if (config.gameTitle)\r\n {\r\n c = c.concat(config.gameTitle);\r\n\r\n if (config.gameVersion)\r\n {\r\n c = c.concat(' v' + config.gameVersion);\r\n }\r\n\r\n if (!config.hidePhaser)\r\n {\r\n c = c.concat(' / ');\r\n }\r\n }\r\n\r\n var fb = (typeof PLUGIN_FBINSTANT) ? '-FB' : '';\r\n\r\n if (!config.hidePhaser)\r\n {\r\n c = c.concat('Phaser v' + CONST.VERSION + fb + ' (' + renderType + ' | ' + audioType + ')');\r\n }\r\n\r\n c = c.concat(' %c ' + config.gameURL);\r\n\r\n // Inject the new string back into the args array\r\n args[0] = c;\r\n\r\n console.log.apply(console, args);\r\n }\r\n else if (window['console'])\r\n {\r\n console.log('Phaser v' + CONST.VERSION + ' / https://phaser.io');\r\n }\r\n};\r\n\r\nmodule.exports = DebugHeader;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL0RlYnVnSGVhZGVyLmpzPzBlMTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxvREFBVTs7QUFFOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsWUFBWTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsYUFBYTs7QUFFYjtBQUNBLDJFQUEyRTtBQUMzRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2REFBNkQ7QUFDN0Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY29yZS9EZWJ1Z0hlYWRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcclxuXHJcbi8qKlxyXG4gKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSBQaGFzZXIuR2FtZSBhbmQgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoZSBjb25zb2xlLmxvZyBkZWJ1ZyBoZWFkZXIuXHJcbiAqXHJcbiAqIFlvdSBjYW4gY3VzdG9taXplIG9yIGRpc2FibGUgdGhlIGhlYWRlciB2aWEgdGhlIEdhbWUgQ29uZmlnIG9iamVjdC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5Db3JlLkRlYnVnSGVhZGVyXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lfSBnYW1lIC0gVGhlIFBoYXNlci5HYW1lIGluc3RhbmNlIHdoaWNoIHdpbGwgb3V0cHV0IHRoaXMgZGVidWcgaGVhZGVyLlxyXG4gKi9cclxudmFyIERlYnVnSGVhZGVyID0gZnVuY3Rpb24gKGdhbWUpXHJcbntcclxuICAgIHZhciBjb25maWcgPSBnYW1lLmNvbmZpZztcclxuXHJcbiAgICBpZiAoY29uZmlnLmhpZGVCYW5uZXIpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciByZW5kZXJUeXBlID0gJ1dlYkdMJztcclxuXHJcbiAgICBpZiAoY29uZmlnLnJlbmRlclR5cGUgPT09IENPTlNULkNBTlZBUylcclxuICAgIHtcclxuICAgICAgICByZW5kZXJUeXBlID0gJ0NhbnZhcyc7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb25maWcucmVuZGVyVHlwZSA9PT0gQ09OU1QuSEVBRExFU1MpXHJcbiAgICB7XHJcbiAgICAgICAgcmVuZGVyVHlwZSA9ICdIZWFkbGVzcyc7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGF1ZGlvQ29uZmlnID0gY29uZmlnLmF1ZGlvO1xyXG4gICAgdmFyIGRldmljZUF1ZGlvID0gZ2FtZS5kZXZpY2UuYXVkaW87XHJcblxyXG4gICAgdmFyIGF1ZGlvVHlwZTtcclxuXHJcbiAgICBpZiAoZGV2aWNlQXVkaW8ud2ViQXVkaW8gJiYgIShhdWRpb0NvbmZpZyAmJiBhdWRpb0NvbmZpZy5kaXNhYmxlV2ViQXVkaW8pKVxyXG4gICAge1xyXG4gICAgICAgIGF1ZGlvVHlwZSA9ICdXZWIgQXVkaW8nO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoKGF1ZGlvQ29uZmlnICYmIGF1ZGlvQ29uZmlnLm5vQXVkaW8pIHx8ICghZGV2aWNlQXVkaW8ud2ViQXVkaW8gJiYgIWRldmljZUF1ZGlvLmF1ZGlvRGF0YSkpXHJcbiAgICB7XHJcbiAgICAgICAgYXVkaW9UeXBlID0gJ05vIEF1ZGlvJztcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBhdWRpb1R5cGUgPSAnSFRNTDUgQXVkaW8nO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZ2FtZS5kZXZpY2UuYnJvd3Nlci5pZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgYyA9ICcnO1xyXG4gICAgICAgIHZhciBhcmdzID0gWyBjIF07XHJcblxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbmZpZy5iYW5uZXJCYWNrZ3JvdW5kQ29sb3IpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGxhc3RDb2xvcjtcclxuXHJcbiAgICAgICAgICAgIGNvbmZpZy5iYW5uZXJCYWNrZ3JvdW5kQ29sb3IuZm9yRWFjaChmdW5jdGlvbiAoY29sb3IpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGMgPSBjLmNvbmNhdCgnJWMgJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgYXJncy5wdXNoKCdiYWNrZ3JvdW5kOiAnICsgY29sb3IpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxhc3RDb2xvciA9IGNvbG9yO1xyXG5cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyAgaW5qZWN0IHRoZSB0ZXh0IGNvbG9yXHJcbiAgICAgICAgICAgIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9ICdjb2xvcjogJyArIGNvbmZpZy5iYW5uZXJUZXh0Q29sb3IgKyAnOyBiYWNrZ3JvdW5kOiAnICsgbGFzdENvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjID0gYy5jb25jYXQoJyVjICcpO1xyXG5cclxuICAgICAgICAgICAgYXJncy5wdXNoKCdjb2xvcjogJyArIGNvbmZpZy5iYW5uZXJUZXh0Q29sb3IgKyAnOyBiYWNrZ3JvdW5kOiAnICsgY29uZmlnLmJhbm5lckJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgVVJMIGxpbmsgYmFja2dyb3VuZCBjb2xvciAoYWx3YXlzIHdoaXRlKVxyXG4gICAgICAgIGFyZ3MucHVzaCgnYmFja2dyb3VuZDogI2ZmZicpO1xyXG5cclxuICAgICAgICBpZiAoY29uZmlnLmdhbWVUaXRsZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGMgPSBjLmNvbmNhdChjb25maWcuZ2FtZVRpdGxlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb25maWcuZ2FtZVZlcnNpb24pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGMgPSBjLmNvbmNhdCgnIHYnICsgY29uZmlnLmdhbWVWZXJzaW9uKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFjb25maWcuaGlkZVBoYXNlcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYyA9IGMuY29uY2F0KCcgLyAnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGZiID0gKHR5cGVvZiBQTFVHSU5fRkJJTlNUQU5UKSA/ICctRkInIDogJyc7XHJcblxyXG4gICAgICAgIGlmICghY29uZmlnLmhpZGVQaGFzZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjID0gYy5jb25jYXQoJ1BoYXNlciB2JyArIENPTlNULlZFUlNJT04gKyBmYiArICcgKCcgKyByZW5kZXJUeXBlICsgJyB8ICcgKyBhdWRpb1R5cGUgKyAnKScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYyA9IGMuY29uY2F0KCcgJWMgJyArIGNvbmZpZy5nYW1lVVJMKTtcclxuXHJcbiAgICAgICAgLy8gIEluamVjdCB0aGUgbmV3IHN0cmluZyBiYWNrIGludG8gdGhlIGFyZ3MgYXJyYXlcclxuICAgICAgICBhcmdzWzBdID0gYztcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2cuYXBwbHkoY29uc29sZSwgYXJncyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh3aW5kb3dbJ2NvbnNvbGUnXSlcclxuICAgIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnUGhhc2VyIHYnICsgQ09OU1QuVkVSU0lPTiArICcgLyBodHRwczovL3BoYXNlci5pbycpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBEZWJ1Z0hlYWRlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/DebugHeader.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/core/Game.js":
/*!**********************************************!*\
!*** ./node_modules/phaser/src/core/Game.js ***!
\**********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar AddToDOM = __webpack_require__(/*! ../dom/AddToDOM */ \"./node_modules/phaser/src/dom/AddToDOM.js\");\r\nvar AnimationManager = __webpack_require__(/*! ../animations/AnimationManager */ \"./node_modules/phaser/src/animations/AnimationManager.js\");\r\nvar CacheManager = __webpack_require__(/*! ../cache/CacheManager */ \"./node_modules/phaser/src/cache/CacheManager.js\");\r\nvar CanvasPool = __webpack_require__(/*! ../display/canvas/CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\");\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Config = __webpack_require__(/*! ./Config */ \"./node_modules/phaser/src/core/Config.js\");\r\nvar CreateDOMContainer = __webpack_require__(/*! ../dom/CreateDOMContainer */ \"./node_modules/phaser/src/dom/CreateDOMContainer.js\");\r\nvar CreateRenderer = __webpack_require__(/*! ./CreateRenderer */ \"./node_modules/phaser/src/core/CreateRenderer.js\");\r\nvar DataManager = __webpack_require__(/*! ../data/DataManager */ \"./node_modules/phaser/src/data/DataManager.js\");\r\nvar DebugHeader = __webpack_require__(/*! ./DebugHeader */ \"./node_modules/phaser/src/core/DebugHeader.js\");\r\nvar Device = __webpack_require__(/*! ../device */ \"./node_modules/phaser/src/device/index.js\");\r\nvar DOMContentLoaded = __webpack_require__(/*! ../dom/DOMContentLoaded */ \"./node_modules/phaser/src/dom/DOMContentLoaded.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/core/events/index.js\");\r\nvar InputManager = __webpack_require__(/*! ../input/InputManager */ \"./node_modules/phaser/src/input/InputManager.js\");\r\nvar PluginCache = __webpack_require__(/*! ../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar PluginManager = __webpack_require__(/*! ../plugins/PluginManager */ \"./node_modules/phaser/src/plugins/PluginManager.js\");\r\nvar ScaleManager = __webpack_require__(/*! ../scale/ScaleManager */ \"./node_modules/phaser/src/scale/ScaleManager.js\");\r\nvar SceneManager = __webpack_require__(/*! ../scene/SceneManager */ \"./node_modules/phaser/src/scene/SceneManager.js\");\r\nvar TextureEvents = __webpack_require__(/*! ../textures/events */ \"./node_modules/phaser/src/textures/events/index.js\");\r\nvar TextureManager = __webpack_require__(/*! ../textures/TextureManager */ \"./node_modules/phaser/src/textures/TextureManager.js\");\r\nvar TimeStep = __webpack_require__(/*! ./TimeStep */ \"./node_modules/phaser/src/core/TimeStep.js\");\r\nvar VisibilityHandler = __webpack_require__(/*! ./VisibilityHandler */ \"./node_modules/phaser/src/core/VisibilityHandler.js\");\r\n\r\nif (typeof FEATURE_SOUND)\r\n{\r\n var SoundManagerCreator = __webpack_require__(/*! ../sound/SoundManagerCreator */ \"./node_modules/phaser/src/sound/SoundManagerCreator.js\");\r\n}\r\n\r\nif (typeof PLUGIN_FBINSTANT)\r\n{\r\n var FacebookInstantGamesPlugin = __webpack_require__(/*! ../../plugins/fbinstant/src/FacebookInstantGamesPlugin */ \"./node_modules/phaser/plugins/fbinstant/src/FacebookInstantGamesPlugin.js\");\r\n}\r\n\r\n/**\r\n * @classdesc\r\n * The Phaser.Game instance is the main controller for the entire Phaser game. It is responsible\r\n * for handling the boot process, parsing the configuration values, creating the renderer,\r\n * and setting-up all of the global Phaser systems, such as sound and input.\r\n * Once that is complete it will start the Scene Manager and then begin the main game loop.\r\n *\r\n * You should generally avoid accessing any of the systems created by Game, and instead use those\r\n * made available to you via the Phaser.Scene Systems class instead.\r\n *\r\n * @class Game\r\n * @memberof Phaser\r\n * @constructor\r\n * @fires Phaser.Core.Events#BLUR\r\n * @fires Phaser.Core.Events#FOCUS\r\n * @fires Phaser.Core.Events#HIDDEN\r\n * @fires Phaser.Core.Events#VISIBLE\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Core.GameConfig} [GameConfig] - The configuration object for your Phaser Game instance.\r\n */\r\nvar Game = new Class({\r\n\r\n initialize:\r\n\r\n function Game (config)\r\n {\r\n /**\r\n * The parsed Game Configuration object.\r\n *\r\n * The values stored within this object are read-only and should not be changed at run-time.\r\n *\r\n * @name Phaser.Game#config\r\n * @type {Phaser.Core.Config}\r\n * @readonly\r\n * @since 3.0.0\r\n */\r\n this.config = new Config(config);\r\n\r\n /**\r\n * A reference to either the Canvas or WebGL Renderer that this Game is using.\r\n *\r\n * @name Phaser.Game#renderer\r\n * @type {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)}\r\n * @since 3.0.0\r\n */\r\n this.renderer = null;\r\n\r\n /**\r\n * A reference to an HTML Div Element used as the DOM Element Container.\r\n *\r\n * Only set if `createDOMContainer` is `true` in the game config (by default it is `false`) and\r\n * if you provide a parent element to insert the Phaser Game inside.\r\n *\r\n * See the DOM Element Game Object for more details.\r\n *\r\n * @name Phaser.Game#domContainer\r\n * @type {HTMLDivElement}\r\n * @since 3.17.0\r\n */\r\n this.domContainer = null;\r\n\r\n /**\r\n * A reference to the HTML Canvas Element that Phaser uses to render the game.\r\n * This is created automatically by Phaser unless you provide a `canvas` property\r\n * in your Game Config.\r\n *\r\n * @name Phaser.Game#canvas\r\n * @type {HTMLCanvasElement}\r\n * @since 3.0.0\r\n */\r\n this.canvas = null;\r\n\r\n /**\r\n * A reference to the Rendering Context belonging to the Canvas Element this game is rendering to.\r\n * If the game is running under Canvas it will be a 2d Canvas Rendering Context.\r\n * If the game is running under WebGL it will be a WebGL Rendering Context.\r\n * This context is created automatically by Phaser unless you provide a `context` property\r\n * in your Game Config.\r\n *\r\n * @name Phaser.Game#context\r\n * @type {(CanvasRenderingContext2D|WebGLRenderingContext)}\r\n * @since 3.0.0\r\n */\r\n this.context = null;\r\n\r\n /**\r\n * A flag indicating when this Game instance has finished its boot process.\r\n *\r\n * @name Phaser.Game#isBooted\r\n * @type {boolean}\r\n * @readonly\r\n * @since 3.0.0\r\n */\r\n this.isBooted = false;\r\n\r\n /**\r\n * A flag indicating if this Game is currently running its game step or not.\r\n *\r\n * @name Phaser.Game#isRunning\r\n * @type {boolean}\r\n * @readonly\r\n * @since 3.0.0\r\n */\r\n this.isRunning = false;\r\n\r\n /**\r\n * An Event Emitter which is used to broadcast game-level events from the global systems.\r\n *\r\n * @name Phaser.Game#events\r\n * @type {Phaser.Events.EventEmitter}\r\n * @since 3.0.0\r\n */\r\n this.events = new EventEmitter();\r\n\r\n /**\r\n * An instance of the Animation Manager.\r\n *\r\n * The Animation Manager is a global system responsible for managing all animations used within your game.\r\n *\r\n * @name Phaser.Game#anims\r\n * @type {Phaser.Animations.AnimationManager}\r\n * @since 3.0.0\r\n */\r\n this.anims = new AnimationManager(this);\r\n\r\n /**\r\n * An instance of the Texture Manager.\r\n *\r\n * The Texture Manager is a global system responsible for managing all textures being used by your game.\r\n *\r\n * @name Phaser.Game#textures\r\n * @type {Phaser.Textures.TextureManager}\r\n * @since 3.0.0\r\n */\r\n this.textures = new TextureManager(this);\r\n\r\n /**\r\n * An instance of the Cache Manager.\r\n *\r\n * The Cache Manager is a global system responsible for caching, accessing and releasing external game assets.\r\n *\r\n * @name Phaser.Game#cache\r\n * @type {Phaser.Cache.CacheManager}\r\n * @since 3.0.0\r\n */\r\n this.cache = new CacheManager(this);\r\n\r\n /**\r\n * An instance of the Data Manager\r\n *\r\n * @name Phaser.Game#registry\r\n * @type {Phaser.Data.DataManager}\r\n * @since 3.0.0\r\n */\r\n this.registry = new DataManager(this);\r\n\r\n /**\r\n * An instance of the Input Manager.\r\n *\r\n * The Input Manager is a global system responsible for the capture of browser-level input events.\r\n *\r\n * @name Phaser.Game#input\r\n * @type {Phaser.Input.InputManager}\r\n * @since 3.0.0\r\n */\r\n this.input = new InputManager(this, this.config);\r\n\r\n /**\r\n * An instance of the Scene Manager.\r\n *\r\n * The Scene Manager is a global system responsible for creating, modifying and updating the Scenes in your game.\r\n *\r\n * @name Phaser.Game#scene\r\n * @type {Phaser.Scenes.SceneManager}\r\n * @since 3.0.0\r\n */\r\n this.scene = new SceneManager(this, this.config.sceneConfig);\r\n\r\n /**\r\n * A reference to the Device inspector.\r\n *\r\n * Contains information about the device running this game, such as OS, browser vendor and feature support.\r\n * Used by various systems to determine capabilities and code paths.\r\n *\r\n * @name Phaser.Game#device\r\n * @type {Phaser.DeviceConf}\r\n * @since 3.0.0\r\n */\r\n this.device = Device;\r\n\r\n /**\r\n * An instance of the Scale Manager.\r\n *\r\n * The Scale Manager is a global system responsible for handling scaling of the game canvas.\r\n *\r\n * @name Phaser.Game#scale\r\n * @type {Phaser.Scale.ScaleManager}\r\n * @since 3.16.0\r\n */\r\n this.scale = new ScaleManager(this, this.config);\r\n\r\n /**\r\n * An instance of the base Sound Manager.\r\n *\r\n * The Sound Manager is a global system responsible for the playback and updating of all audio in your game.\r\n *\r\n * You can disable the inclusion of the Sound Manager in your build by toggling the webpack `FEATURE_SOUND` flag.\r\n *\r\n * @name Phaser.Game#sound\r\n * @type {(Phaser.Sound.NoAudioSoundManager|Phaser.Sound.HTML5AudioSoundManager|Phaser.Sound.WebAudioSoundManager)}\r\n * @since 3.0.0\r\n */\r\n this.sound = null;\r\n\r\n if (typeof FEATURE_SOUND)\r\n {\r\n this.sound = SoundManagerCreator.create(this);\r\n }\r\n\r\n /**\r\n * An instance of the Time Step.\r\n *\r\n * The Time Step is a global system responsible for setting-up and responding to the browser frame events, processing\r\n * them and calculating delta values. It then automatically calls the game step.\r\n *\r\n * @name Phaser.Game#loop\r\n * @type {Phaser.Core.TimeStep}\r\n * @since 3.0.0\r\n */\r\n this.loop = new TimeStep(this, this.config.fps);\r\n\r\n /**\r\n * An instance of the Plugin Manager.\r\n *\r\n * The Plugin Manager is a global system that allows plugins to register themselves with it, and can then install\r\n * those plugins into Scenes as required.\r\n *\r\n * @name Phaser.Game#plugins\r\n * @type {Phaser.Plugins.PluginManager}\r\n * @since 3.0.0\r\n */\r\n this.plugins = new PluginManager(this, this.config);\r\n\r\n if (typeof PLUGIN_FBINSTANT)\r\n {\r\n /**\r\n * An instance of the Facebook Instant Games Plugin.\r\n *\r\n * This will only be available if the plugin has been built into Phaser,\r\n * or you're using the special Facebook Instant Games custom build.\r\n *\r\n * @name Phaser.Game#facebook\r\n * @type {Phaser.FacebookInstantGamesPlugin}\r\n * @since 3.13.0\r\n */\r\n this.facebook = new FacebookInstantGamesPlugin(this);\r\n }\r\n\r\n /**\r\n * Is this Game pending destruction at the start of the next frame?\r\n *\r\n * @name Phaser.Game#pendingDestroy\r\n * @type {boolean}\r\n * @private\r\n * @since 3.5.0\r\n */\r\n this.pendingDestroy = false;\r\n\r\n /**\r\n * Remove the Canvas once the destroy is over?\r\n *\r\n * @name Phaser.Game#removeCanvas\r\n * @type {boolean}\r\n * @private\r\n * @since 3.5.0\r\n */\r\n this.removeCanvas = false;\r\n\r\n /**\r\n * Remove everything when the game is destroyed.\r\n * You cannot create a new Phaser instance on the same web page after doing this.\r\n *\r\n * @name Phaser.Game#noReturn\r\n * @type {boolean}\r\n * @private\r\n * @since 3.12.0\r\n */\r\n this.noReturn = false;\r\n\r\n /**\r\n * Does the window the game is running in currently have focus or not?\r\n * This is modified by the VisibilityHandler.\r\n *\r\n * @name Phaser.Game#hasFocus\r\n * @type {boolean}\r\n * @readonly\r\n * @since 3.9.0\r\n */\r\n this.hasFocus = false;\r\n\r\n // Wait for the DOM Ready event, then call boot.\r\n DOMContentLoaded(this.boot.bind(this));\r\n },\r\n\r\n /**\r\n * This method is called automatically when the DOM is ready. It is responsible for creating the renderer,\r\n * displaying the Debug Header, adding the game canvas to the DOM and emitting the 'boot' event.\r\n * It listens for a 'ready' event from the base systems and once received it will call `Game.start`.\r\n *\r\n * @method Phaser.Game#boot\r\n * @protected\r\n * @fires Phaser.Core.Events#BOOT\r\n * @listens Phaser.Textures.Events#READY\r\n * @since 3.0.0\r\n */\r\n boot: function ()\r\n {\r\n if (!PluginCache.hasCore('EventEmitter'))\r\n {\r\n console.warn('Aborting. Core Plugins missing.');\r\n return;\r\n }\r\n\r\n this.isBooted = true;\r\n\r\n this.config.preBoot(this);\r\n\r\n this.scale.preBoot();\r\n\r\n CreateRenderer(this);\r\n\r\n CreateDOMContainer(this);\r\n\r\n DebugHeader(this);\r\n\r\n AddToDOM(this.canvas, this.config.parent);\r\n\r\n // The Texture Manager has to wait on a couple of non-blocking events before it's fully ready.\r\n // So it will emit this internal event when done:\r\n this.textures.once(TextureEvents.READY, this.texturesReady, this);\r\n\r\n this.events.emit(Events.BOOT);\r\n },\r\n\r\n /**\r\n * Called automatically when the Texture Manager has finished setting up and preparing the\r\n * default textures.\r\n *\r\n * @method Phaser.Game#texturesReady\r\n * @private\r\n * @fires Phaser.Game#ready\r\n * @since 3.12.0\r\n */\r\n texturesReady: function ()\r\n {\r\n // Start all the other systems\r\n this.events.emit(Events.READY);\r\n\r\n this.start();\r\n },\r\n\r\n /**\r\n * Called automatically by Game.boot once all of the global systems have finished setting themselves up.\r\n * By this point the Game is now ready to start the main loop running.\r\n * It will also enable the Visibility Handler.\r\n *\r\n * @method Phaser.Game#start\r\n * @protected\r\n * @since 3.0.0\r\n */\r\n start: function ()\r\n {\r\n this.isRunning = true;\r\n\r\n this.config.postBoot(this);\r\n\r\n if (this.renderer)\r\n {\r\n this.loop.start(this.step.bind(this));\r\n }\r\n else\r\n {\r\n this.loop.start(this.headlessStep.bind(this));\r\n }\r\n\r\n VisibilityHandler(this);\r\n\r\n var eventEmitter = this.events;\r\n\r\n eventEmitter.on(Events.HIDDEN, this.onHidden, this);\r\n eventEmitter.on(Events.VISIBLE, this.onVisible, this);\r\n eventEmitter.on(Events.BLUR, this.onBlur, this);\r\n eventEmitter.on(Events.FOCUS, this.onFocus, this);\r\n },\r\n\r\n /**\r\n * The main Game Step. Called automatically by the Time Step, once per browser frame (typically as a result of\r\n * Request Animation Frame, or Set Timeout on very old browsers.)\r\n *\r\n * The step will update the global managers first, then proceed to update each Scene in turn, via the Scene Manager.\r\n *\r\n * It will then render each Scene in turn, via the Renderer. This process emits `prerender` and `postrender` events.\r\n *\r\n * @method Phaser.Game#step\r\n * @fires Phaser.Core.Events#PRE_STEP_EVENT\r\n * @fires Phaser.Core.Events#STEP_EVENT\r\n * @fires Phaser.Core.Events#POST_STEP_EVENT\r\n * @fires Phaser.Core.Events#PRE_RENDER_EVENT\r\n * @fires Phaser.Core.Events#POST_RENDER_EVENT\r\n * @since 3.0.0\r\n *\r\n * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n */\r\n step: function (time, delta)\r\n {\r\n if (this.pendingDestroy)\r\n {\r\n return this.runDestroy();\r\n }\r\n\r\n var eventEmitter = this.events;\r\n\r\n // Global Managers like Input and Sound update in the prestep\r\n\r\n eventEmitter.emit(Events.PRE_STEP, time, delta);\r\n\r\n // This is mostly meant for user-land code and plugins\r\n\r\n eventEmitter.emit(Events.STEP, time, delta);\r\n\r\n // Update the Scene Manager and all active Scenes\r\n\r\n this.scene.update(time, delta);\r\n\r\n // Our final event before rendering starts\r\n\r\n eventEmitter.emit(Events.POST_STEP, time, delta);\r\n\r\n var renderer = this.renderer;\r\n\r\n // Run the Pre-render (clearing the canvas, setting background colors, etc)\r\n\r\n renderer.preRender();\r\n\r\n eventEmitter.emit(Events.PRE_RENDER, renderer, time, delta);\r\n\r\n // The main render loop. Iterates all Scenes and all Cameras in those scenes, rendering to the renderer instance.\r\n\r\n this.scene.render(renderer);\r\n\r\n // The Post-Render call. Tidies up loose end, takes snapshots, etc.\r\n\r\n renderer.postRender();\r\n\r\n // The final event before the step repeats. Your last chance to do anything to the canvas before it all starts again.\r\n\r\n eventEmitter.emit(Events.POST_RENDER, renderer, time, delta);\r\n },\r\n\r\n /**\r\n * A special version of the Game Step for the HEADLESS renderer only.\r\n *\r\n * The main Game Step. Called automatically by the Time Step, once per browser frame (typically as a result of\r\n * Request Animation Frame, or Set Timeout on very old browsers.)\r\n *\r\n * The step will update the global managers first, then proceed to update each Scene in turn, via the Scene Manager.\r\n *\r\n * This process emits `prerender` and `postrender` events, even though nothing actually displays.\r\n *\r\n * @method Phaser.Game#headlessStep\r\n * @fires Phaser.Game#prerenderEvent\r\n * @fires Phaser.Game#postrenderEvent\r\n * @since 3.2.0\r\n *\r\n * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n */\r\n headlessStep: function (time, delta)\r\n {\r\n if (this.pendingDestroy)\r\n {\r\n return this.runDestroy();\r\n }\r\n\r\n var eventEmitter = this.events;\r\n\r\n // Global Managers\r\n\r\n eventEmitter.emit(Events.PRE_STEP, time, delta);\r\n\r\n eventEmitter.emit(Events.STEP, time, delta);\r\n\r\n // Scenes\r\n\r\n this.scene.update(time, delta);\r\n\r\n eventEmitter.emit(Events.POST_STEP, time, delta);\r\n\r\n // Render\r\n\r\n eventEmitter.emit(Events.PRE_RENDER);\r\n\r\n eventEmitter.emit(Events.POST_RENDER);\r\n },\r\n\r\n /**\r\n * Called automatically by the Visibility Handler.\r\n * This will pause the main loop and then emit a pause event.\r\n *\r\n * @method Phaser.Game#onHidden\r\n * @protected\r\n * @fires Phaser.Core.Events#PAUSE\r\n * @since 3.0.0\r\n */\r\n onHidden: function ()\r\n {\r\n this.loop.pause();\r\n\r\n this.events.emit(Events.PAUSE);\r\n },\r\n\r\n /**\r\n * Called automatically by the Visibility Handler.\r\n * This will resume the main loop and then emit a resume event.\r\n *\r\n * @method Phaser.Game#onVisible\r\n * @protected\r\n * @fires Phaser.Core.Events#RESUME\r\n * @since 3.0.0\r\n */\r\n onVisible: function ()\r\n {\r\n this.loop.resume();\r\n\r\n this.events.emit(Events.RESUME);\r\n },\r\n\r\n /**\r\n * Called automatically by the Visibility Handler.\r\n * This will set the main loop into a 'blurred' state, which pauses it.\r\n *\r\n * @method Phaser.Game#onBlur\r\n * @protected\r\n * @since 3.0.0\r\n */\r\n onBlur: function ()\r\n {\r\n this.hasFocus = false;\r\n\r\n this.loop.blur();\r\n },\r\n\r\n /**\r\n * Called automatically by the Visibility Handler.\r\n * This will set the main loop into a 'focused' state, which resumes it.\r\n *\r\n * @method Phaser.Game#onFocus\r\n * @protected\r\n * @since 3.0.0\r\n */\r\n onFocus: function ()\r\n {\r\n this.hasFocus = true;\r\n\r\n this.loop.focus();\r\n },\r\n\r\n /**\r\n * Returns the current game frame.\r\n *\r\n * When the game starts running, the frame is incremented every time Request Animation Frame, or Set Timeout, fires.\r\n *\r\n * @method Phaser.Game#getFrame\r\n * @since 3.16.0\r\n *\r\n * @return {number} The current game frame.\r\n */\r\n getFrame: function ()\r\n {\r\n return this.loop.frame;\r\n },\r\n\r\n /**\r\n * Returns the time that the current game step started at, as based on `performance.now`.\r\n *\r\n * @method Phaser.Game#getTime\r\n * @since 3.16.0\r\n *\r\n * @return {number} The current game timestamp.\r\n */\r\n getTime: function ()\r\n {\r\n return this.loop.now;\r\n },\r\n\r\n /**\r\n * Flags this Game instance as needing to be destroyed on the _next frame_, making this an asynchronous operation.\r\n *\r\n * It will wait until the current frame has completed and then call `runDestroy` internally.\r\n *\r\n * If you need to react to the games eventual destruction, listen for the `DESTROY` event.\r\n *\r\n * If you **do not** need to run Phaser again on the same web page you can set the `noReturn` argument to `true` and it will free-up\r\n * memory being held by the core Phaser plugins. If you do need to create another game instance on the same page, leave this as `false`.\r\n *\r\n * @method Phaser.Game#destroy\r\n * @fires Phaser.Core.Events#DESTROY\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} removeCanvas - Set to `true` if you would like the parent canvas element removed from the DOM, or `false` to leave it in place.\r\n * @param {boolean} [noReturn=false] - If `true` all the core Phaser plugins are destroyed. You cannot create another instance of Phaser on the same web page if you do this.\r\n */\r\n destroy: function (removeCanvas, noReturn)\r\n {\r\n if (noReturn === undefined) { noReturn = false; }\r\n\r\n this.pendingDestroy = true;\r\n\r\n this.removeCanvas = removeCanvas;\r\n this.noReturn = noReturn;\r\n },\r\n\r\n /**\r\n * Destroys this Phaser.Game instance, all global systems, all sub-systems and all Scenes.\r\n *\r\n * @method Phaser.Game#runDestroy\r\n * @private\r\n * @since 3.5.0\r\n */\r\n runDestroy: function ()\r\n {\r\n this.events.emit(Events.DESTROY);\r\n\r\n this.events.removeAllListeners();\r\n\r\n this.scene.destroy();\r\n\r\n if (this.renderer)\r\n {\r\n this.renderer.destroy();\r\n }\r\n\r\n if (this.removeCanvas && this.canvas)\r\n {\r\n CanvasPool.remove(this.canvas);\r\n\r\n if (this.canvas.parentNode)\r\n {\r\n this.canvas.parentNode.removeChild(this.canvas);\r\n }\r\n }\r\n\r\n if (this.domContainer)\r\n {\r\n this.domContainer.parentNode.removeChild(this.domContainer);\r\n }\r\n\r\n this.loop.destroy();\r\n\r\n this.pendingDestroy = false;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Game;\r\n\r\n/**\r\n * \"Computers are good at following instructions, but not at reading your mind.\" - Donald Knuth\r\n */\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL0dhbWUuanM/MjJkNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLGtFQUFpQjtBQUN4Qyx1QkFBdUIsbUJBQU8sQ0FBQyxnR0FBZ0M7QUFDL0QsbUJBQW1CLG1CQUFPLENBQUMsOEVBQXVCO0FBQ2xELGlCQUFpQixtQkFBTyxDQUFDLDRGQUE4QjtBQUN2RCxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ3BDLGFBQWEsbUJBQU8sQ0FBQywwREFBVTtBQUMvQix5QkFBeUIsbUJBQU8sQ0FBQyxzRkFBMkI7QUFDNUQscUJBQXFCLG1CQUFPLENBQUMsMEVBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLDBFQUFxQjtBQUMvQyxrQkFBa0IsbUJBQU8sQ0FBQyxvRUFBZTtBQUN6QyxhQUFhLG1CQUFPLENBQUMsNERBQVc7QUFDaEMsdUJBQXVCLG1CQUFPLENBQUMsa0ZBQXlCO0FBQ3hELG1CQUFtQixtQkFBTyxDQUFDLDREQUFlO0FBQzFDLGFBQWEsbUJBQU8sQ0FBQyxnRUFBVTtBQUMvQixtQkFBbUIsbUJBQU8sQ0FBQyw4RUFBdUI7QUFDbEQsa0JBQWtCLG1CQUFPLENBQUMsZ0ZBQXdCO0FBQ2xELG9CQUFvQixtQkFBTyxDQUFDLG9GQUEwQjtBQUN0RCxtQkFBbUIsbUJBQU8sQ0FBQyw4RUFBdUI7QUFDbEQsbUJBQW1CLG1CQUFPLENBQUMsOEVBQXVCO0FBQ2xELG9CQUFvQixtQkFBTyxDQUFDLDhFQUFvQjtBQUNoRCxxQkFBcUIsbUJBQU8sQ0FBQyx3RkFBNEI7QUFDekQsZUFBZSxtQkFBTyxDQUFDLDhEQUFZO0FBQ25DLHdCQUF3QixtQkFBTyxDQUFDLGdGQUFxQjs7QUFFckQ7QUFDQTtBQUNBLDhCQUE4QixtQkFBTyxDQUFDLDRGQUE4QjtBQUNwRTs7QUFFQTtBQUNBO0FBQ0EscUNBQXFDLG1CQUFPLENBQUMseUlBQXdEO0FBQ3JHOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw2QkFBNkI7QUFDeEM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLGtCQUFrQjs7QUFFdkQ7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvR2FtZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEFkZFRvRE9NID0gcmVxdWlyZSgnLi4vZG9tL0FkZFRvRE9NJyk7XHJcbnZhciBBbmltYXRpb25NYW5hZ2VyID0gcmVxdWlyZSgnLi4vYW5pbWF0aW9ucy9BbmltYXRpb25NYW5hZ2VyJyk7XHJcbnZhciBDYWNoZU1hbmFnZXIgPSByZXF1aXJlKCcuLi9jYWNoZS9DYWNoZU1hbmFnZXInKTtcclxudmFyIENhbnZhc1Bvb2wgPSByZXF1aXJlKCcuLi9kaXNwbGF5L2NhbnZhcy9DYW52YXNQb29sJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb25maWcgPSByZXF1aXJlKCcuL0NvbmZpZycpO1xyXG52YXIgQ3JlYXRlRE9NQ29udGFpbmVyID0gcmVxdWlyZSgnLi4vZG9tL0NyZWF0ZURPTUNvbnRhaW5lcicpO1xyXG52YXIgQ3JlYXRlUmVuZGVyZXIgPSByZXF1aXJlKCcuL0NyZWF0ZVJlbmRlcmVyJyk7XHJcbnZhciBEYXRhTWFuYWdlciA9IHJlcXVpcmUoJy4uL2RhdGEvRGF0YU1hbmFnZXInKTtcclxudmFyIERlYnVnSGVhZGVyID0gcmVxdWlyZSgnLi9EZWJ1Z0hlYWRlcicpO1xyXG52YXIgRGV2aWNlID0gcmVxdWlyZSgnLi4vZGV2aWNlJyk7XHJcbnZhciBET01Db250ZW50TG9hZGVkID0gcmVxdWlyZSgnLi4vZG9tL0RPTUNvbnRlbnRMb2FkZWQnKTtcclxudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcclxudmFyIEV2ZW50cyA9IHJlcXVpcmUoJy4vZXZlbnRzJyk7XHJcbnZhciBJbnB1dE1hbmFnZXIgPSByZXF1aXJlKCcuLi9pbnB1dC9JbnB1dE1hbmFnZXInKTtcclxudmFyIFBsdWdpbkNhY2hlID0gcmVxdWlyZSgnLi4vcGx1Z2lucy9QbHVnaW5DYWNoZScpO1xyXG52YXIgUGx1Z2luTWFuYWdlciA9IHJlcXVpcmUoJy4uL3BsdWdpbnMvUGx1Z2luTWFuYWdlcicpO1xyXG52YXIgU2NhbGVNYW5hZ2VyID0gcmVxdWlyZSgnLi4vc2NhbGUvU2NhbGVNYW5hZ2VyJyk7XHJcbnZhciBTY2VuZU1hbmFnZXIgPSByZXF1aXJlKCcuLi9zY2VuZS9TY2VuZU1hbmFnZXInKTtcclxudmFyIFRleHR1cmVFdmVudHMgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9ldmVudHMnKTtcclxudmFyIFRleHR1cmVNYW5hZ2VyID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZU1hbmFnZXInKTtcclxudmFyIFRpbWVTdGVwID0gcmVxdWlyZSgnLi9UaW1lU3RlcCcpO1xyXG52YXIgVmlzaWJpbGl0eUhhbmRsZXIgPSByZXF1aXJlKCcuL1Zpc2liaWxpdHlIYW5kbGVyJyk7XHJcblxyXG5pZiAodHlwZW9mIEZFQVRVUkVfU09VTkQpXHJcbntcclxuICAgIHZhciBTb3VuZE1hbmFnZXJDcmVhdG9yID0gcmVxdWlyZSgnLi4vc291bmQvU291bmRNYW5hZ2VyQ3JlYXRvcicpO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIFBMVUdJTl9GQklOU1RBTlQpXHJcbntcclxuICAgIHZhciBGYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbiA9IHJlcXVpcmUoJy4uLy4uL3BsdWdpbnMvZmJpbnN0YW50L3NyYy9GYWNlYm9va0luc3RhbnRHYW1lc1BsdWdpbicpO1xyXG59XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgUGhhc2VyLkdhbWUgaW5zdGFuY2UgaXMgdGhlIG1haW4gY29udHJvbGxlciBmb3IgdGhlIGVudGlyZSBQaGFzZXIgZ2FtZS4gSXQgaXMgcmVzcG9uc2libGVcclxuICogZm9yIGhhbmRsaW5nIHRoZSBib290IHByb2Nlc3MsIHBhcnNpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdmFsdWVzLCBjcmVhdGluZyB0aGUgcmVuZGVyZXIsXHJcbiAqIGFuZCBzZXR0aW5nLXVwIGFsbCBvZiB0aGUgZ2xvYmFsIFBoYXNlciBzeXN0ZW1zLCBzdWNoIGFzIHNvdW5kIGFuZCBpbnB1dC5cclxuICogT25jZSB0aGF0IGlzIGNvbXBsZXRlIGl0IHdpbGwgc3RhcnQgdGhlIFNjZW5lIE1hbmFnZXIgYW5kIHRoZW4gYmVnaW4gdGhlIG1haW4gZ2FtZSBsb29wLlxyXG4gKlxyXG4gKiBZb3Ugc2hvdWxkIGdlbmVyYWxseSBhdm9pZCBhY2Nlc3NpbmcgYW55IG9mIHRoZSBzeXN0ZW1zIGNyZWF0ZWQgYnkgR2FtZSwgYW5kIGluc3RlYWQgdXNlIHRob3NlXHJcbiAqIG1hZGUgYXZhaWxhYmxlIHRvIHlvdSB2aWEgdGhlIFBoYXNlci5TY2VuZSBTeXN0ZW1zIGNsYXNzIGluc3RlYWQuXHJcbiAqXHJcbiAqIEBjbGFzcyBHYW1lXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXJcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBmaXJlcyBQaGFzZXIuQ29yZS5FdmVudHMjQkxVUlxyXG4gKiBAZmlyZXMgUGhhc2VyLkNvcmUuRXZlbnRzI0ZPQ1VTXHJcbiAqIEBmaXJlcyBQaGFzZXIuQ29yZS5FdmVudHMjSElEREVOXHJcbiAqIEBmaXJlcyBQaGFzZXIuQ29yZS5FdmVudHMjVklTSUJMRVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuQ29yZS5HYW1lQ29uZmlnfSBbR2FtZUNvbmZpZ10gLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHlvdXIgUGhhc2VyIEdhbWUgaW5zdGFuY2UuXHJcbiAqL1xyXG52YXIgR2FtZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBHYW1lIChjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHBhcnNlZCBHYW1lIENvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhlIHZhbHVlcyBzdG9yZWQgd2l0aGluIHRoaXMgb2JqZWN0IGFyZSByZWFkLW9ubHkgYW5kIHNob3VsZCBub3QgYmUgY2hhbmdlZCBhdCBydW4tdGltZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lI2NvbmZpZ1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQ29yZS5Db25maWd9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb25maWcgPSBuZXcgQ29uZmlnKGNvbmZpZyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIGVpdGhlciB0aGUgQ2FudmFzIG9yIFdlYkdMIFJlbmRlcmVyIHRoYXQgdGhpcyBHYW1lIGlzIHVzaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWUjcmVuZGVyZXJcclxuICAgICAgICAgKiBAdHlwZSB7KFBoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXJ8UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXIpfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byBhbiBIVE1MIERpdiBFbGVtZW50IHVzZWQgYXMgdGhlIERPTSBFbGVtZW50IENvbnRhaW5lci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIE9ubHkgc2V0IGlmIGBjcmVhdGVET01Db250YWluZXJgIGlzIGB0cnVlYCBpbiB0aGUgZ2FtZSBjb25maWcgKGJ5IGRlZmF1bHQgaXQgaXMgYGZhbHNlYCkgYW5kXHJcbiAgICAgICAgICogaWYgeW91IHByb3ZpZGUgYSBwYXJlbnQgZWxlbWVudCB0byBpbnNlcnQgdGhlIFBoYXNlciBHYW1lIGluc2lkZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFNlZSB0aGUgRE9NIEVsZW1lbnQgR2FtZSBPYmplY3QgZm9yIG1vcmUgZGV0YWlscy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lI2RvbUNvbnRhaW5lclxyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MRGl2RWxlbWVudH1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kb21Db250YWluZXIgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgSFRNTCBDYW52YXMgRWxlbWVudCB0aGF0IFBoYXNlciB1c2VzIHRvIHJlbmRlciB0aGUgZ2FtZS5cclxuICAgICAgICAgKiBUaGlzIGlzIGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSBQaGFzZXIgdW5sZXNzIHlvdSBwcm92aWRlIGEgYGNhbnZhc2AgcHJvcGVydHlcclxuICAgICAgICAgKiBpbiB5b3VyIEdhbWUgQ29uZmlnLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWUjY2FudmFzXHJcbiAgICAgICAgICogQHR5cGUge0hUTUxDYW52YXNFbGVtZW50fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFJlbmRlcmluZyBDb250ZXh0IGJlbG9uZ2luZyB0byB0aGUgQ2FudmFzIEVsZW1lbnQgdGhpcyBnYW1lIGlzIHJlbmRlcmluZyB0by5cclxuICAgICAgICAgKiBJZiB0aGUgZ2FtZSBpcyBydW5uaW5nIHVuZGVyIENhbnZhcyBpdCB3aWxsIGJlIGEgMmQgQ2FudmFzIFJlbmRlcmluZyBDb250ZXh0LlxyXG4gICAgICAgICAqIElmIHRoZSBnYW1lIGlzIHJ1bm5pbmcgdW5kZXIgV2ViR0wgaXQgd2lsbCBiZSBhIFdlYkdMIFJlbmRlcmluZyBDb250ZXh0LlxyXG4gICAgICAgICAqIFRoaXMgY29udGV4dCBpcyBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgUGhhc2VyIHVubGVzcyB5b3UgcHJvdmlkZSBhIGBjb250ZXh0YCBwcm9wZXJ0eVxyXG4gICAgICAgICAqIGluIHlvdXIgR2FtZSBDb25maWcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZSNjb250ZXh0XHJcbiAgICAgICAgICogQHR5cGUgeyhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR8V2ViR0xSZW5kZXJpbmdDb250ZXh0KX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGZsYWcgaW5kaWNhdGluZyB3aGVuIHRoaXMgR2FtZSBpbnN0YW5jZSBoYXMgZmluaXNoZWQgaXRzIGJvb3QgcHJvY2Vzcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lI2lzQm9vdGVkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc0Jvb3RlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGZsYWcgaW5kaWNhdGluZyBpZiB0aGlzIEdhbWUgaXMgY3VycmVudGx5IHJ1bm5pbmcgaXRzIGdhbWUgc3RlcCBvciBub3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZSNpc1J1bm5pbmdcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlzUnVubmluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBFdmVudCBFbWl0dGVyIHdoaWNoIGlzIHVzZWQgdG8gYnJvYWRjYXN0IGdhbWUtbGV2ZWwgZXZlbnRzIGZyb20gdGhlIGdsb2JhbCBzeXN0ZW1zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWUjZXZlbnRzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5FdmVudHMuRXZlbnRFbWl0dGVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBpbnN0YW5jZSBvZiB0aGUgQW5pbWF0aW9uIE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBUaGUgQW5pbWF0aW9uIE1hbmFnZXIgaXMgYSBnbG9iYWwgc3lzdGVtIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyBhbGwgYW5pbWF0aW9ucyB1c2VkIHdpdGhpbiB5b3VyIGdhbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZSNhbmltc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25NYW5hZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYW5pbXMgPSBuZXcgQW5pbWF0aW9uTWFuYWdlcih0aGlzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gaW5zdGFuY2Ugb2YgdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoZSBUZXh0dXJlIE1hbmFnZXIgaXMgYSBnbG9iYWwgc3lzdGVtIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyBhbGwgdGV4dHVyZXMgYmVpbmcgdXNlZCBieSB5b3VyIGdhbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZSN0ZXh0dXJlc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZU1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50ZXh0dXJlcyA9IG5ldyBUZXh0dXJlTWFuYWdlcih0aGlzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gaW5zdGFuY2Ugb2YgdGhlIENhY2hlIE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBUaGUgQ2FjaGUgTWFuYWdlciBpcyBhIGdsb2JhbCBzeXN0ZW0gcmVzcG9uc2libGUgZm9yIGNhY2hpbmcsIGFjY2Vzc2luZyBhbmQgcmVsZWFzaW5nIGV4dGVybmFsIGdhbWUgYXNzZXRzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWUjY2FjaGVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhY2hlLkNhY2hlTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNhY2hlID0gbmV3IENhY2hlTWFuYWdlcih0aGlzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gaW5zdGFuY2Ugb2YgdGhlIERhdGEgTWFuYWdlclxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWUjcmVnaXN0cnlcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkRhdGEuRGF0YU1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZWdpc3RyeSA9IG5ldyBEYXRhTWFuYWdlcih0aGlzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gaW5zdGFuY2Ugb2YgdGhlIElucHV0IE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBUaGUgSW5wdXQgTWFuYWdlciBpcyBhIGdsb2JhbCBzeXN0ZW0gcmVzcG9uc2libGUgZm9yIHRoZSBjYXB0dXJlIG9mIGJyb3dzZXItbGV2ZWwgaW5wdXQgZXZlbnRzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWUjaW5wdXRcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LklucHV0TWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlucHV0ID0gbmV3IElucHV0TWFuYWdlcih0aGlzLCB0aGlzLmNvbmZpZyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGluc3RhbmNlIG9mIHRoZSBTY2VuZSBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhlIFNjZW5lIE1hbmFnZXIgaXMgYSBnbG9iYWwgc3lzdGVtIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZywgbW9kaWZ5aW5nIGFuZCB1cGRhdGluZyB0aGUgU2NlbmVzIGluIHlvdXIgZ2FtZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lI3NjZW5lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBuZXcgU2NlbmVNYW5hZ2VyKHRoaXMsIHRoaXMuY29uZmlnLnNjZW5lQ29uZmlnKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIERldmljZSBpbnNwZWN0b3IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGV2aWNlIHJ1bm5pbmcgdGhpcyBnYW1lLCBzdWNoIGFzIE9TLCBicm93c2VyIHZlbmRvciBhbmQgZmVhdHVyZSBzdXBwb3J0LlxyXG4gICAgICAgICAqIFVzZWQgYnkgdmFyaW91cyBzeXN0ZW1zIHRvIGRldGVybWluZSBjYXBhYmlsaXRpZXMgYW5kIGNvZGUgcGF0aHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZSNkZXZpY2VcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkRldmljZUNvbmZ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZXZpY2UgPSBEZXZpY2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGluc3RhbmNlIG9mIHRoZSBTY2FsZSBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhlIFNjYWxlIE1hbmFnZXIgaXMgYSBnbG9iYWwgc3lzdGVtIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBzY2FsaW5nIG9mIHRoZSBnYW1lIGNhbnZhcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lI3NjYWxlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2FsZS5TY2FsZU1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NhbGUgPSBuZXcgU2NhbGVNYW5hZ2VyKHRoaXMsIHRoaXMuY29uZmlnKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gaW5zdGFuY2Ugb2YgdGhlIGJhc2UgU291bmQgTWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoZSBTb3VuZCBNYW5hZ2VyIGlzIGEgZ2xvYmFsIHN5c3RlbSByZXNwb25zaWJsZSBmb3IgdGhlIHBsYXliYWNrIGFuZCB1cGRhdGluZyBvZiBhbGwgYXVkaW8gaW4geW91ciBnYW1lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogWW91IGNhbiBkaXNhYmxlIHRoZSBpbmNsdXNpb24gb2YgdGhlIFNvdW5kIE1hbmFnZXIgaW4geW91ciBidWlsZCBieSB0b2dnbGluZyB0aGUgd2VicGFjayBgRkVBVFVSRV9TT1VORGAgZmxhZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lI3NvdW5kXHJcbiAgICAgICAgICogQHR5cGUgeyhQaGFzZXIuU291bmQuTm9BdWRpb1NvdW5kTWFuYWdlcnxQaGFzZXIuU291bmQuSFRNTDVBdWRpb1NvdW5kTWFuYWdlcnxQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZE1hbmFnZXIpfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc291bmQgPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIEZFQVRVUkVfU09VTkQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNvdW5kID0gU291bmRNYW5hZ2VyQ3JlYXRvci5jcmVhdGUodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBpbnN0YW5jZSBvZiB0aGUgVGltZSBTdGVwLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhlIFRpbWUgU3RlcCBpcyBhIGdsb2JhbCBzeXN0ZW0gcmVzcG9uc2libGUgZm9yIHNldHRpbmctdXAgYW5kIHJlc3BvbmRpbmcgdG8gdGhlIGJyb3dzZXIgZnJhbWUgZXZlbnRzLCBwcm9jZXNzaW5nXHJcbiAgICAgICAgICogdGhlbSBhbmQgY2FsY3VsYXRpbmcgZGVsdGEgdmFsdWVzLiBJdCB0aGVuIGF1dG9tYXRpY2FsbHkgY2FsbHMgdGhlIGdhbWUgc3RlcC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lI2xvb3BcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNvcmUuVGltZVN0ZXB9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sb29wID0gbmV3IFRpbWVTdGVwKHRoaXMsIHRoaXMuY29uZmlnLmZwcyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGluc3RhbmNlIG9mIHRoZSBQbHVnaW4gTWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoZSBQbHVnaW4gTWFuYWdlciBpcyBhIGdsb2JhbCBzeXN0ZW0gdGhhdCBhbGxvd3MgcGx1Z2lucyB0byByZWdpc3RlciB0aGVtc2VsdmVzIHdpdGggaXQsIGFuZCBjYW4gdGhlbiBpbnN0YWxsXHJcbiAgICAgICAgICogdGhvc2UgcGx1Z2lucyBpbnRvIFNjZW5lcyBhcyByZXF1aXJlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lI3BsdWdpbnNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlBsdWdpbnMuUGx1Z2luTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBsdWdpbnMgPSBuZXcgUGx1Z2luTWFuYWdlcih0aGlzLCB0aGlzLmNvbmZpZyk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgUExVR0lOX0ZCSU5TVEFOVClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBBbiBpbnN0YW5jZSBvZiB0aGUgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBQbHVnaW4uXHJcbiAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAqIFRoaXMgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgcGx1Z2luIGhhcyBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLFxyXG4gICAgICAgICAgICAgKiBvciB5b3UncmUgdXNpbmcgdGhlIHNwZWNpYWwgRmFjZWJvb2sgSW5zdGFudCBHYW1lcyBjdXN0b20gYnVpbGQuXHJcbiAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lI2ZhY2Vib29rXHJcbiAgICAgICAgICAgICAqIEB0eXBlIHtQaGFzZXIuRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW59XHJcbiAgICAgICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIHRoaXMuZmFjZWJvb2sgPSBuZXcgRmFjZWJvb2tJbnN0YW50R2FtZXNQbHVnaW4odGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJcyB0aGlzIEdhbWUgcGVuZGluZyBkZXN0cnVjdGlvbiBhdCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgZnJhbWU/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZSNwZW5kaW5nRGVzdHJveVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wZW5kaW5nRGVzdHJveSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBSZW1vdmUgdGhlIENhbnZhcyBvbmNlIHRoZSBkZXN0cm95IGlzIG92ZXI/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZSNyZW1vdmVDYW52YXNcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQ2FudmFzID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFJlbW92ZSBldmVyeXRoaW5nIHdoZW4gdGhlIGdhbWUgaXMgZGVzdHJveWVkLlxyXG4gICAgICAgICAqIFlvdSBjYW5ub3QgY3JlYXRlIGEgbmV3IFBoYXNlciBpbnN0YW5jZSBvbiB0aGUgc2FtZSB3ZWIgcGFnZSBhZnRlciBkb2luZyB0aGlzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWUjbm9SZXR1cm5cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm5vUmV0dXJuID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERvZXMgdGhlIHdpbmRvdyB0aGUgZ2FtZSBpcyBydW5uaW5nIGluIGN1cnJlbnRseSBoYXZlIGZvY3VzIG9yIG5vdD9cclxuICAgICAgICAgKiBUaGlzIGlzIG1vZGlmaWVkIGJ5IHRoZSBWaXNpYmlsaXR5SGFuZGxlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lI2hhc0ZvY3VzXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuOS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5oYXNGb2N1cyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyAgV2FpdCBmb3IgdGhlIERPTSBSZWFkeSBldmVudCwgdGhlbiBjYWxsIGJvb3QuXHJcbiAgICAgICAgRE9NQ29udGVudExvYWRlZCh0aGlzLmJvb3QuYmluZCh0aGlzKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgRE9NIGlzIHJlYWR5LiBJdCBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhlIHJlbmRlcmVyLFxyXG4gICAgICogZGlzcGxheWluZyB0aGUgRGVidWcgSGVhZGVyLCBhZGRpbmcgdGhlIGdhbWUgY2FudmFzIHRvIHRoZSBET00gYW5kIGVtaXR0aW5nIHRoZSAnYm9vdCcgZXZlbnQuXHJcbiAgICAgKiBJdCBsaXN0ZW5zIGZvciBhICdyZWFkeScgZXZlbnQgZnJvbSB0aGUgYmFzZSBzeXN0ZW1zIGFuZCBvbmNlIHJlY2VpdmVkIGl0IHdpbGwgY2FsbCBgR2FtZS5zdGFydGAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZSNib290XHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkNvcmUuRXZlbnRzI0JPT1RcclxuICAgICAqIEBsaXN0ZW5zIFBoYXNlci5UZXh0dXJlcy5FdmVudHMjUkVBRFlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBib290OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghUGx1Z2luQ2FjaGUuaGFzQ29yZSgnRXZlbnRFbWl0dGVyJykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Fib3J0aW5nLiBDb3JlIFBsdWdpbnMgbWlzc2luZy4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Jvb3RlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuY29uZmlnLnByZUJvb3QodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuc2NhbGUucHJlQm9vdCgpO1xyXG5cclxuICAgICAgICBDcmVhdGVSZW5kZXJlcih0aGlzKTtcclxuXHJcbiAgICAgICAgQ3JlYXRlRE9NQ29udGFpbmVyKHRoaXMpO1xyXG5cclxuICAgICAgICBEZWJ1Z0hlYWRlcih0aGlzKTtcclxuXHJcbiAgICAgICAgQWRkVG9ET00odGhpcy5jYW52YXMsIHRoaXMuY29uZmlnLnBhcmVudCk7XHJcblxyXG4gICAgICAgIC8vICBUaGUgVGV4dHVyZSBNYW5hZ2VyIGhhcyB0byB3YWl0IG9uIGEgY291cGxlIG9mIG5vbi1ibG9ja2luZyBldmVudHMgYmVmb3JlIGl0J3MgZnVsbHkgcmVhZHkuXHJcbiAgICAgICAgLy8gIFNvIGl0IHdpbGwgZW1pdCB0aGlzIGludGVybmFsIGV2ZW50IHdoZW4gZG9uZTpcclxuICAgICAgICB0aGlzLnRleHR1cmVzLm9uY2UoVGV4dHVyZUV2ZW50cy5SRUFEWSwgdGhpcy50ZXh0dXJlc1JlYWR5LCB0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5ldmVudHMuZW1pdChFdmVudHMuQk9PVCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgVGV4dHVyZSBNYW5hZ2VyIGhhcyBmaW5pc2hlZCBzZXR0aW5nIHVwIGFuZCBwcmVwYXJpbmcgdGhlXHJcbiAgICAgKiBkZWZhdWx0IHRleHR1cmVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWUjdGV4dHVyZXNSZWFkeVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuR2FtZSNyZWFkeVxyXG4gICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICovXHJcbiAgICB0ZXh0dXJlc1JlYWR5OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBTdGFydCBhbGwgdGhlIG90aGVyIHN5c3RlbXNcclxuICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KEV2ZW50cy5SRUFEWSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnQoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSBHYW1lLmJvb3Qgb25jZSBhbGwgb2YgdGhlIGdsb2JhbCBzeXN0ZW1zIGhhdmUgZmluaXNoZWQgc2V0dGluZyB0aGVtc2VsdmVzIHVwLlxyXG4gICAgICogQnkgdGhpcyBwb2ludCB0aGUgR2FtZSBpcyBub3cgcmVhZHkgdG8gc3RhcnQgdGhlIG1haW4gbG9vcCBydW5uaW5nLlxyXG4gICAgICogSXQgd2lsbCBhbHNvIGVuYWJsZSB0aGUgVmlzaWJpbGl0eSBIYW5kbGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWUjc3RhcnRcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmlzUnVubmluZyA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuY29uZmlnLnBvc3RCb290KHRoaXMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5yZW5kZXJlcilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMubG9vcC5zdGFydCh0aGlzLnN0ZXAuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMubG9vcC5zdGFydCh0aGlzLmhlYWRsZXNzU3RlcC5iaW5kKHRoaXMpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFZpc2liaWxpdHlIYW5kbGVyKHRoaXMpO1xyXG5cclxuICAgICAgICB2YXIgZXZlbnRFbWl0dGVyID0gdGhpcy5ldmVudHM7XHJcblxyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vbihFdmVudHMuSElEREVOLCB0aGlzLm9uSGlkZGVuLCB0aGlzKTtcclxuICAgICAgICBldmVudEVtaXR0ZXIub24oRXZlbnRzLlZJU0lCTEUsIHRoaXMub25WaXNpYmxlLCB0aGlzKTtcclxuICAgICAgICBldmVudEVtaXR0ZXIub24oRXZlbnRzLkJMVVIsIHRoaXMub25CbHVyLCB0aGlzKTtcclxuICAgICAgICBldmVudEVtaXR0ZXIub24oRXZlbnRzLkZPQ1VTLCB0aGlzLm9uRm9jdXMsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtYWluIEdhbWUgU3RlcC4gQ2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIFRpbWUgU3RlcCwgb25jZSBwZXIgYnJvd3NlciBmcmFtZSAodHlwaWNhbGx5IGFzIGEgcmVzdWx0IG9mXHJcbiAgICAgKiBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSwgb3IgU2V0IFRpbWVvdXQgb24gdmVyeSBvbGQgYnJvd3NlcnMuKVxyXG4gICAgICpcclxuICAgICAqIFRoZSBzdGVwIHdpbGwgdXBkYXRlIHRoZSBnbG9iYWwgbWFuYWdlcnMgZmlyc3QsIHRoZW4gcHJvY2VlZCB0byB1cGRhdGUgZWFjaCBTY2VuZSBpbiB0dXJuLCB2aWEgdGhlIFNjZW5lIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogSXQgd2lsbCB0aGVuIHJlbmRlciBlYWNoIFNjZW5lIGluIHR1cm4sIHZpYSB0aGUgUmVuZGVyZXIuIFRoaXMgcHJvY2VzcyBlbWl0cyBgcHJlcmVuZGVyYCBhbmQgYHBvc3RyZW5kZXJgIGV2ZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lI3N0ZXBcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ29yZS5FdmVudHMjUFJFX1NURVBfRVZFTlRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ29yZS5FdmVudHMjU1RFUF9FVkVOVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Db3JlLkV2ZW50cyNQT1NUX1NURVBfRVZFTlRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ29yZS5FdmVudHMjUFJFX1JFTkRFUl9FVkVOVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Db3JlLkV2ZW50cyNQT1NUX1JFTkRFUl9FVkVOVFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lLiBFaXRoZXIgYSBIaWdoIFJlc29sdXRpb24gVGltZXIgdmFsdWUgaWYgaXQgY29tZXMgZnJvbSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSwgb3IgRGF0ZS5ub3cgaWYgdXNpbmcgU2V0VGltZW91dC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lIGluIG1zIHNpbmNlIHRoZSBsYXN0IGZyYW1lLiBUaGlzIGlzIGEgc21vb3RoZWQgYW5kIGNhcHBlZCB2YWx1ZSBiYXNlZCBvbiB0aGUgRlBTIHJhdGUuXHJcbiAgICAgKi9cclxuICAgIHN0ZXA6IGZ1bmN0aW9uICh0aW1lLCBkZWx0YSlcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5wZW5kaW5nRGVzdHJveSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJ1bkRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBldmVudEVtaXR0ZXIgPSB0aGlzLmV2ZW50cztcclxuXHJcbiAgICAgICAgLy8gIEdsb2JhbCBNYW5hZ2VycyBsaWtlIElucHV0IGFuZCBTb3VuZCB1cGRhdGUgaW4gdGhlIHByZXN0ZXBcclxuXHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLmVtaXQoRXZlbnRzLlBSRV9TVEVQLCB0aW1lLCBkZWx0YSk7XHJcblxyXG4gICAgICAgIC8vICBUaGlzIGlzIG1vc3RseSBtZWFudCBmb3IgdXNlci1sYW5kIGNvZGUgYW5kIHBsdWdpbnNcclxuXHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLmVtaXQoRXZlbnRzLlNURVAsIHRpbWUsIGRlbHRhKTtcclxuXHJcbiAgICAgICAgLy8gIFVwZGF0ZSB0aGUgU2NlbmUgTWFuYWdlciBhbmQgYWxsIGFjdGl2ZSBTY2VuZXNcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZS51cGRhdGUodGltZSwgZGVsdGEpO1xyXG5cclxuICAgICAgICAvLyAgT3VyIGZpbmFsIGV2ZW50IGJlZm9yZSByZW5kZXJpbmcgc3RhcnRzXHJcblxyXG4gICAgICAgIGV2ZW50RW1pdHRlci5lbWl0KEV2ZW50cy5QT1NUX1NURVAsIHRpbWUsIGRlbHRhKTtcclxuXHJcbiAgICAgICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcclxuXHJcbiAgICAgICAgLy8gIFJ1biB0aGUgUHJlLXJlbmRlciAoY2xlYXJpbmcgdGhlIGNhbnZhcywgc2V0dGluZyBiYWNrZ3JvdW5kIGNvbG9ycywgZXRjKVxyXG5cclxuICAgICAgICByZW5kZXJlci5wcmVSZW5kZXIoKTtcclxuXHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLmVtaXQoRXZlbnRzLlBSRV9SRU5ERVIsIHJlbmRlcmVyLCB0aW1lLCBkZWx0YSk7XHJcblxyXG4gICAgICAgIC8vICBUaGUgbWFpbiByZW5kZXIgbG9vcC4gSXRlcmF0ZXMgYWxsIFNjZW5lcyBhbmQgYWxsIENhbWVyYXMgaW4gdGhvc2Ugc2NlbmVzLCByZW5kZXJpbmcgdG8gdGhlIHJlbmRlcmVyIGluc3RhbmNlLlxyXG5cclxuICAgICAgICB0aGlzLnNjZW5lLnJlbmRlcihyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIC8vICBUaGUgUG9zdC1SZW5kZXIgY2FsbC4gVGlkaWVzIHVwIGxvb3NlIGVuZCwgdGFrZXMgc25hcHNob3RzLCBldGMuXHJcblxyXG4gICAgICAgIHJlbmRlcmVyLnBvc3RSZW5kZXIoKTtcclxuXHJcbiAgICAgICAgLy8gIFRoZSBmaW5hbCBldmVudCBiZWZvcmUgdGhlIHN0ZXAgcmVwZWF0cy4gWW91ciBsYXN0IGNoYW5jZSB0byBkbyBhbnl0aGluZyB0byB0aGUgY2FudmFzIGJlZm9yZSBpdCBhbGwgc3RhcnRzIGFnYWluLlxyXG5cclxuICAgICAgICBldmVudEVtaXR0ZXIuZW1pdChFdmVudHMuUE9TVF9SRU5ERVIsIHJlbmRlcmVyLCB0aW1lLCBkZWx0YSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBzcGVjaWFsIHZlcnNpb24gb2YgdGhlIEdhbWUgU3RlcCBmb3IgdGhlIEhFQURMRVNTIHJlbmRlcmVyIG9ubHkuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIG1haW4gR2FtZSBTdGVwLiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgVGltZSBTdGVwLCBvbmNlIHBlciBicm93c2VyIGZyYW1lICh0eXBpY2FsbHkgYXMgYSByZXN1bHQgb2ZcclxuICAgICAqIFJlcXVlc3QgQW5pbWF0aW9uIEZyYW1lLCBvciBTZXQgVGltZW91dCBvbiB2ZXJ5IG9sZCBicm93c2Vycy4pXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHN0ZXAgd2lsbCB1cGRhdGUgdGhlIGdsb2JhbCBtYW5hZ2VycyBmaXJzdCwgdGhlbiBwcm9jZWVkIHRvIHVwZGF0ZSBlYWNoIFNjZW5lIGluIHR1cm4sIHZpYSB0aGUgU2NlbmUgTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIHByb2Nlc3MgZW1pdHMgYHByZXJlbmRlcmAgYW5kIGBwb3N0cmVuZGVyYCBldmVudHMsIGV2ZW4gdGhvdWdoIG5vdGhpbmcgYWN0dWFsbHkgZGlzcGxheXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZSNoZWFkbGVzc1N0ZXBcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuR2FtZSNwcmVyZW5kZXJFdmVudFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5HYW1lI3Bvc3RyZW5kZXJFdmVudFxyXG4gICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lLiBFaXRoZXIgYSBIaWdoIFJlc29sdXRpb24gVGltZXIgdmFsdWUgaWYgaXQgY29tZXMgZnJvbSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSwgb3IgRGF0ZS5ub3cgaWYgdXNpbmcgU2V0VGltZW91dC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lIGluIG1zIHNpbmNlIHRoZSBsYXN0IGZyYW1lLiBUaGlzIGlzIGEgc21vb3RoZWQgYW5kIGNhcHBlZCB2YWx1ZSBiYXNlZCBvbiB0aGUgRlBTIHJhdGUuXHJcbiAgICAgKi9cclxuICAgIGhlYWRsZXNzU3RlcDogZnVuY3Rpb24gKHRpbWUsIGRlbHRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdEZXN0cm95KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucnVuRGVzdHJveSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGV2ZW50RW1pdHRlciA9IHRoaXMuZXZlbnRzO1xyXG5cclxuICAgICAgICAvLyAgR2xvYmFsIE1hbmFnZXJzXHJcblxyXG4gICAgICAgIGV2ZW50RW1pdHRlci5lbWl0KEV2ZW50cy5QUkVfU1RFUCwgdGltZSwgZGVsdGEpO1xyXG5cclxuICAgICAgICBldmVudEVtaXR0ZXIuZW1pdChFdmVudHMuU1RFUCwgdGltZSwgZGVsdGEpO1xyXG5cclxuICAgICAgICAvLyAgU2NlbmVzXHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUudXBkYXRlKHRpbWUsIGRlbHRhKTtcclxuXHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLmVtaXQoRXZlbnRzLlBPU1RfU1RFUCwgdGltZSwgZGVsdGEpO1xyXG5cclxuICAgICAgICAvLyAgUmVuZGVyXHJcblxyXG4gICAgICAgIGV2ZW50RW1pdHRlci5lbWl0KEV2ZW50cy5QUkVfUkVOREVSKTtcclxuXHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLmVtaXQoRXZlbnRzLlBPU1RfUkVOREVSKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgVmlzaWJpbGl0eSBIYW5kbGVyLlxyXG4gICAgICogVGhpcyB3aWxsIHBhdXNlIHRoZSBtYWluIGxvb3AgYW5kIHRoZW4gZW1pdCBhIHBhdXNlIGV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWUjb25IaWRkZW5cclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ29yZS5FdmVudHMjUEFVU0VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBvbkhpZGRlbjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmxvb3AucGF1c2UoKTtcclxuXHJcbiAgICAgICAgdGhpcy5ldmVudHMuZW1pdChFdmVudHMuUEFVU0UpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBWaXNpYmlsaXR5IEhhbmRsZXIuXHJcbiAgICAgKiBUaGlzIHdpbGwgcmVzdW1lIHRoZSBtYWluIGxvb3AgYW5kIHRoZW4gZW1pdCBhIHJlc3VtZSBldmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lI29uVmlzaWJsZVxyXG4gICAgICogQHByb3RlY3RlZFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Db3JlLkV2ZW50cyNSRVNVTUVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBvblZpc2libGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5sb29wLnJlc3VtZSgpO1xyXG5cclxuICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KEV2ZW50cy5SRVNVTUUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBWaXNpYmlsaXR5IEhhbmRsZXIuXHJcbiAgICAgKiBUaGlzIHdpbGwgc2V0IHRoZSBtYWluIGxvb3AgaW50byBhICdibHVycmVkJyBzdGF0ZSwgd2hpY2ggcGF1c2VzIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWUjb25CbHVyXHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgb25CbHVyOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuaGFzRm9jdXMgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5sb29wLmJsdXIoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgVmlzaWJpbGl0eSBIYW5kbGVyLlxyXG4gICAgICogVGhpcyB3aWxsIHNldCB0aGUgbWFpbiBsb29wIGludG8gYSAnZm9jdXNlZCcgc3RhdGUsIHdoaWNoIHJlc3VtZXMgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZSNvbkZvY3VzXHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgb25Gb2N1czogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmhhc0ZvY3VzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5sb29wLmZvY3VzKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBnYW1lIGZyYW1lLlxyXG4gICAgICpcclxuICAgICAqIFdoZW4gdGhlIGdhbWUgc3RhcnRzIHJ1bm5pbmcsIHRoZSBmcmFtZSBpcyBpbmNyZW1lbnRlZCBldmVyeSB0aW1lIFJlcXVlc3QgQW5pbWF0aW9uIEZyYW1lLCBvciBTZXQgVGltZW91dCwgZmlyZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZSNnZXRGcmFtZVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGN1cnJlbnQgZ2FtZSBmcmFtZS5cclxuICAgICAqL1xyXG4gICAgZ2V0RnJhbWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9vcC5mcmFtZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB0aW1lIHRoYXQgdGhlIGN1cnJlbnQgZ2FtZSBzdGVwIHN0YXJ0ZWQgYXQsIGFzIGJhc2VkIG9uIGBwZXJmb3JtYW5jZS5ub3dgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWUjZ2V0VGltZVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGN1cnJlbnQgZ2FtZSB0aW1lc3RhbXAuXHJcbiAgICAgKi9cclxuICAgIGdldFRpbWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9vcC5ub3c7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmxhZ3MgdGhpcyBHYW1lIGluc3RhbmNlIGFzIG5lZWRpbmcgdG8gYmUgZGVzdHJveWVkIG9uIHRoZSBfbmV4dCBmcmFtZV8sIG1ha2luZyB0aGlzIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogSXQgd2lsbCB3YWl0IHVudGlsIHRoZSBjdXJyZW50IGZyYW1lIGhhcyBjb21wbGV0ZWQgYW5kIHRoZW4gY2FsbCBgcnVuRGVzdHJveWAgaW50ZXJuYWxseS5cclxuICAgICAqXHJcbiAgICAgKiBJZiB5b3UgbmVlZCB0byByZWFjdCB0byB0aGUgZ2FtZXMgZXZlbnR1YWwgZGVzdHJ1Y3Rpb24sIGxpc3RlbiBmb3IgdGhlIGBERVNUUk9ZYCBldmVudC5cclxuICAgICAqXHJcbiAgICAgKiBJZiB5b3UgKipkbyBub3QqKiBuZWVkIHRvIHJ1biBQaGFzZXIgYWdhaW4gb24gdGhlIHNhbWUgd2ViIHBhZ2UgeW91IGNhbiBzZXQgdGhlIGBub1JldHVybmAgYXJndW1lbnQgdG8gYHRydWVgIGFuZCBpdCB3aWxsIGZyZWUtdXBcclxuICAgICAqIG1lbW9yeSBiZWluZyBoZWxkIGJ5IHRoZSBjb3JlIFBoYXNlciBwbHVnaW5zLiBJZiB5b3UgZG8gbmVlZCB0byBjcmVhdGUgYW5vdGhlciBnYW1lIGluc3RhbmNlIG9uIHRoZSBzYW1lIHBhZ2UsIGxlYXZlIHRoaXMgYXMgYGZhbHNlYC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lI2Rlc3Ryb3lcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQ29yZS5FdmVudHMjREVTVFJPWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSByZW1vdmVDYW52YXMgLSBTZXQgdG8gYHRydWVgIGlmIHlvdSB3b3VsZCBsaWtlIHRoZSBwYXJlbnQgY2FudmFzIGVsZW1lbnQgcmVtb3ZlZCBmcm9tIHRoZSBET00sIG9yIGBmYWxzZWAgdG8gbGVhdmUgaXQgaW4gcGxhY2UuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtub1JldHVybj1mYWxzZV0gLSBJZiBgdHJ1ZWAgYWxsIHRoZSBjb3JlIFBoYXNlciBwbHVnaW5zIGFyZSBkZXN0cm95ZWQuIFlvdSBjYW5ub3QgY3JlYXRlIGFub3RoZXIgaW5zdGFuY2Ugb2YgUGhhc2VyIG9uIHRoZSBzYW1lIHdlYiBwYWdlIGlmIHlvdSBkbyB0aGlzLlxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAocmVtb3ZlQ2FudmFzLCBub1JldHVybilcclxuICAgIHtcclxuICAgICAgICBpZiAobm9SZXR1cm4gPT09IHVuZGVmaW5lZCkgeyBub1JldHVybiA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIHRoaXMucGVuZGluZ0Rlc3Ryb3kgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnJlbW92ZUNhbnZhcyA9IHJlbW92ZUNhbnZhcztcclxuICAgICAgICB0aGlzLm5vUmV0dXJuID0gbm9SZXR1cm47XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhpcyBQaGFzZXIuR2FtZSBpbnN0YW5jZSwgYWxsIGdsb2JhbCBzeXN0ZW1zLCBhbGwgc3ViLXN5c3RlbXMgYW5kIGFsbCBTY2VuZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZSNydW5EZXN0cm95XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgKi9cclxuICAgIHJ1bkRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5ldmVudHMuZW1pdChFdmVudHMuREVTVFJPWSk7XHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnRzLnJlbW92ZUFsbExpc3RlbmVycygpO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lLmRlc3Ryb3koKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVuZGVyZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlbW92ZUNhbnZhcyAmJiB0aGlzLmNhbnZhcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIENhbnZhc1Bvb2wucmVtb3ZlKHRoaXMuY2FudmFzKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbnZhcy5wYXJlbnROb2RlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY2FudmFzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZG9tQ29udGFpbmVyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5kb21Db250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmRvbUNvbnRhaW5lcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvb3AuZGVzdHJveSgpO1xyXG5cclxuICAgICAgICB0aGlzLnBlbmRpbmdEZXN0cm95ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2FtZTtcclxuXHJcbi8qKlxyXG4gKiBcIkNvbXB1dGVycyBhcmUgZ29vZCBhdCBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb25zLCBidXQgbm90IGF0IHJlYWRpbmcgeW91ciBtaW5kLlwiIC0gRG9uYWxkIEtudXRoXHJcbiAqL1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/Game.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/core/TimeStep.js":
/*!**************************************************!*\
!*** ./node_modules/phaser/src/core/TimeStep.js ***!
\**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GetValue = __webpack_require__(/*! ../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar NOOP = __webpack_require__(/*! ../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar RequestAnimationFrame = __webpack_require__(/*! ../dom/RequestAnimationFrame */ \"./node_modules/phaser/src/dom/RequestAnimationFrame.js\");\r\n\r\n// Frame Rate config\r\n// fps: {\r\n// min: 10,\r\n// target: 60,\r\n// forceSetTimeOut: false,\r\n// deltaHistory: 10,\r\n// panicMax: 120\r\n// }\r\n\r\n// http://www.testufo.com/#test=animation-time-graph\r\n\r\n/**\r\n * @classdesc\r\n * [description]\r\n *\r\n * @class TimeStep\r\n * @memberof Phaser.Core\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Game} game - A reference to the Phaser.Game instance that owns this Time Step.\r\n * @param {Phaser.Types.Core.FPSConfig} config\r\n */\r\nvar TimeStep = new Class({\r\n\r\n initialize:\r\n\r\n function TimeStep (game, config)\r\n {\r\n /**\r\n * A reference to the Phaser.Game instance.\r\n *\r\n * @name Phaser.Core.TimeStep#game\r\n * @type {Phaser.Game}\r\n * @readonly\r\n * @since 3.0.0\r\n */\r\n this.game = game;\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Core.TimeStep#raf\r\n * @type {Phaser.DOM.RequestAnimationFrame}\r\n * @readonly\r\n * @since 3.0.0\r\n */\r\n this.raf = new RequestAnimationFrame();\r\n\r\n /**\r\n * A flag that is set once the TimeStep has started running and toggled when it stops.\r\n *\r\n * @name Phaser.Core.TimeStep#started\r\n * @type {boolean}\r\n * @readonly\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.started = false;\r\n\r\n /**\r\n * A flag that is set once the TimeStep has started running and toggled when it stops.\r\n * The difference between this value and `started` is that `running` is toggled when\r\n * the TimeStep is sent to sleep, where-as `started` remains `true`, only changing if\r\n * the TimeStep is actually stopped, not just paused.\r\n *\r\n * @name Phaser.Core.TimeStep#running\r\n * @type {boolean}\r\n * @readonly\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.running = false;\r\n\r\n /**\r\n * The minimum fps rate you want the Time Step to run at.\r\n *\r\n * @name Phaser.Core.TimeStep#minFps\r\n * @type {integer}\r\n * @default 5\r\n * @since 3.0.0\r\n */\r\n this.minFps = GetValue(config, 'min', 5);\r\n\r\n /**\r\n * The target fps rate for the Time Step to run at.\r\n *\r\n * Setting this value will not actually change the speed at which the browser runs, that is beyond\r\n * the control of Phaser. Instead, it allows you to determine performance issues and if the Time Step\r\n * is spiraling out of control.\r\n *\r\n * @name Phaser.Core.TimeStep#targetFps\r\n * @type {integer}\r\n * @default 60\r\n * @since 3.0.0\r\n */\r\n this.targetFps = GetValue(config, 'target', 60);\r\n\r\n /**\r\n * The minFps value in ms.\r\n * Defaults to 200ms between frames (i.e. super slow!)\r\n *\r\n * @name Phaser.Core.TimeStep#_min\r\n * @type {number}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._min = 1000 / this.minFps;\r\n\r\n /**\r\n * The targetFps value in ms.\r\n * Defaults to 16.66ms between frames (i.e. normal)\r\n *\r\n * @name Phaser.Core.TimeStep#_target\r\n * @type {number}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._target = 1000 / this.targetFps;\r\n\r\n /**\r\n * An exponential moving average of the frames per second.\r\n *\r\n * @name Phaser.Core.TimeStep#actualFps\r\n * @type {integer}\r\n * @readonly\r\n * @default 60\r\n * @since 3.0.0\r\n */\r\n this.actualFps = this.targetFps;\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Core.TimeStep#nextFpsUpdate\r\n * @type {integer}\r\n * @readonly\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.nextFpsUpdate = 0;\r\n\r\n /**\r\n * The number of frames processed this second.\r\n *\r\n * @name Phaser.Core.TimeStep#framesThisSecond\r\n * @type {integer}\r\n * @readonly\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.framesThisSecond = 0;\r\n\r\n /**\r\n * A callback to be invoked each time the Time Step steps.\r\n *\r\n * @name Phaser.Core.TimeStep#callback\r\n * @type {Phaser.Types.Core.TimeStepCallback}\r\n * @default NOOP\r\n * @since 3.0.0\r\n */\r\n this.callback = NOOP;\r\n\r\n /**\r\n * You can force the Time Step to use Set Timeout instead of Request Animation Frame by setting\r\n * the `forceSetTimeOut` property to `true` in the Game Configuration object. It cannot be changed at run-time.\r\n *\r\n * @name Phaser.Core.TimeStep#forceSetTimeOut\r\n * @type {boolean}\r\n * @readonly\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.forceSetTimeOut = GetValue(config, 'forceSetTimeOut', false);\r\n\r\n /**\r\n * The time, calculated at the start of the current step, as smoothed by the delta value.\r\n *\r\n * @name Phaser.Core.TimeStep#time\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.time = 0;\r\n\r\n /**\r\n * The time at which the game started running. This value is adjusted if the game is then\r\n * paused and resumes.\r\n *\r\n * @name Phaser.Core.TimeStep#startTime\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.startTime = 0;\r\n\r\n /**\r\n * The time, as returned by `performance.now` of the previous step.\r\n *\r\n * @name Phaser.Core.TimeStep#lastTime\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.lastTime = 0;\r\n\r\n /**\r\n * The current frame the game is on. This counter is incremented once every game step, regardless of how much\r\n * time has passed and is unaffected by delta smoothing.\r\n *\r\n * @name Phaser.Core.TimeStep#frame\r\n * @type {integer}\r\n * @readonly\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.frame = 0;\r\n\r\n /**\r\n * Is the browser currently considered in focus by the Page Visibility API?\r\n * This value is set in the `blur` method, which is called automatically by the Game instance.\r\n *\r\n * @name Phaser.Core.TimeStep#inFocus\r\n * @type {boolean}\r\n * @readonly\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.inFocus = true;\r\n\r\n /**\r\n * The timestamp at which the game became paused, as determined by the Page Visibility API.\r\n *\r\n * @name Phaser.Core.TimeStep#_pauseTime\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this._pauseTime = 0;\r\n\r\n /**\r\n * An internal counter to allow for the browser 'cooling down' after coming back into focus.\r\n *\r\n * @name Phaser.Core.TimeStep#_coolDown\r\n * @type {integer}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this._coolDown = 0;\r\n\r\n /**\r\n * The delta time, in ms, since the last game step. This is a clamped and smoothed average value.\r\n *\r\n * @name Phaser.Core.TimeStep#delta\r\n * @type {integer}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.delta = 0;\r\n\r\n /**\r\n * Internal index of the delta history position.\r\n *\r\n * @name Phaser.Core.TimeStep#deltaIndex\r\n * @type {integer}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.deltaIndex = 0;\r\n\r\n /**\r\n * Internal array holding the previous delta values, used for delta smoothing.\r\n *\r\n * @name Phaser.Core.TimeStep#deltaHistory\r\n * @type {integer[]}\r\n * @since 3.0.0\r\n */\r\n this.deltaHistory = [];\r\n\r\n /**\r\n * The maximum number of delta values that are retained in order to calculate a smoothed moving average.\r\n * \r\n * This can be changed in the Game Config via the `fps.deltaHistory` property. The default is 10.\r\n *\r\n * @name Phaser.Core.TimeStep#deltaSmoothingMax\r\n * @type {integer}\r\n * @default 10\r\n * @since 3.0.0\r\n */\r\n this.deltaSmoothingMax = GetValue(config, 'deltaHistory', 10);\r\n\r\n /**\r\n * The number of frames that the cooldown is set to after the browser panics over the FPS rate, usually\r\n * as a result of switching tabs and regaining focus.\r\n * \r\n * This can be changed in the Game Config via the `fps.panicMax` property. The default is 120.\r\n *\r\n * @name Phaser.Core.TimeStep#panicMax\r\n * @type {integer}\r\n * @default 120\r\n * @since 3.0.0\r\n */\r\n this.panicMax = GetValue(config, 'panicMax', 120);\r\n\r\n /**\r\n * The actual elapsed time in ms between one update and the next.\r\n * \r\n * Unlike with `delta`, no smoothing, capping, or averaging is applied to this value.\r\n * So please be careful when using this value in math calculations.\r\n *\r\n * @name Phaser.Core.TimeStep#rawDelta\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.rawDelta = 0;\r\n\r\n /**\r\n * The time, as returned by `performance.now` at the very start of the current step.\r\n * This can differ from the `time` value in that it isn't calculated based on the delta value.\r\n *\r\n * @name Phaser.Core.TimeStep#now\r\n * @type {number}\r\n * @default 0\r\n * @since 3.18.0\r\n */\r\n this.now = 0;\r\n },\r\n\r\n /**\r\n * Called by the Game instance when the DOM window.onBlur event triggers.\r\n *\r\n * @method Phaser.Core.TimeStep#blur\r\n * @since 3.0.0\r\n */\r\n blur: function ()\r\n {\r\n this.inFocus = false;\r\n },\r\n\r\n /**\r\n * Called by the Game instance when the DOM window.onFocus event triggers.\r\n *\r\n * @method Phaser.Core.TimeStep#focus\r\n * @since 3.0.0\r\n */\r\n focus: function ()\r\n {\r\n this.inFocus = true;\r\n\r\n this.resetDelta();\r\n },\r\n\r\n /**\r\n * Called when the visibility API says the game is 'hidden' (tab switch out of view, etc)\r\n *\r\n * @method Phaser.Core.TimeStep#pause\r\n * @since 3.0.0\r\n */\r\n pause: function ()\r\n {\r\n this._pauseTime = window.performance.now();\r\n },\r\n\r\n /**\r\n * Called when the visibility API says the game is 'visible' again (tab switch back into view, etc)\r\n *\r\n * @method Phaser.Core.TimeStep#resume\r\n * @since 3.0.0\r\n */\r\n resume: function ()\r\n {\r\n this.resetDelta();\r\n\r\n this.startTime += this.time - this._pauseTime;\r\n },\r\n\r\n /**\r\n * Resets the time, lastTime, fps averages and delta history.\r\n * Called automatically when a browser sleeps them resumes.\r\n *\r\n * @method Phaser.Core.TimeStep#resetDelta\r\n * @since 3.0.0\r\n */\r\n resetDelta: function ()\r\n {\r\n var now = window.performance.now();\r\n\r\n this.time = now;\r\n this.lastTime = now;\r\n this.nextFpsUpdate = now + 1000;\r\n this.framesThisSecond = 0;\r\n\r\n // Pre-populate smoothing array\r\n\r\n for (var i = 0; i < this.deltaSmoothingMax; i++)\r\n {\r\n this.deltaHistory[i] = Math.min(this._target, this.deltaHistory[i]);\r\n }\r\n\r\n this.delta = 0;\r\n this.deltaIndex = 0;\r\n\r\n this._coolDown = this.panicMax;\r\n },\r\n\r\n /**\r\n * Starts the Time Step running, if it is not already doing so.\r\n * Called automatically by the Game Boot process.\r\n *\r\n * @method Phaser.Core.TimeStep#start\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Core.TimeStepCallback} callback - The callback to be invoked each time the Time Step steps.\r\n */\r\n start: function (callback)\r\n {\r\n if (this.started)\r\n {\r\n return this;\r\n }\r\n\r\n this.started = true;\r\n this.running = true;\r\n\r\n for (var i = 0; i < this.deltaSmoothingMax; i++)\r\n {\r\n this.deltaHistory[i] = this._target;\r\n }\r\n\r\n this.resetDelta();\r\n\r\n this.startTime = window.performance.now();\r\n\r\n this.callback = callback;\r\n\r\n this.raf.start(this.step.bind(this), this.forceSetTimeOut, this._target);\r\n },\r\n\r\n /**\r\n * The main step method. This is called each time the browser updates, either by Request Animation Frame,\r\n * or by Set Timeout. It is responsible for calculating the delta values, frame totals, cool down history and more.\r\n * You generally should never call this method directly.\r\n *\r\n * @method Phaser.Core.TimeStep#step\r\n * @since 3.0.0\r\n */\r\n step: function ()\r\n {\r\n // Because the timestamp passed in from raf represents the beginning of the main thread frame that we’re currently in,\r\n // not the actual time now. As we want to compare this time value against Event timeStamps and the like, we need a\r\n // more accurate one:\r\n\r\n var time = window.performance.now();\r\n\r\n this.now = time;\r\n\r\n var before = time - this.lastTime;\r\n\r\n if (before < 0)\r\n {\r\n // Because, Chrome.\r\n before = 0;\r\n }\r\n\r\n this.rawDelta = before;\r\n\r\n var idx = this.deltaIndex;\r\n var history = this.deltaHistory;\r\n var max = this.deltaSmoothingMax;\r\n\r\n // delta time (time is in ms)\r\n var dt = before;\r\n\r\n // When a browser switches tab, then comes back again, it takes around 10 frames before\r\n // the delta time settles down so we employ a 'cooling down' period before we start\r\n // trusting the delta values again, to avoid spikes flooding through our delta average\r\n\r\n if (this._coolDown > 0 || !this.inFocus)\r\n {\r\n this._coolDown--;\r\n\r\n dt = Math.min(dt, this._target);\r\n }\r\n\r\n if (dt > this._min)\r\n {\r\n // Probably super bad start time or browser tab context loss,\r\n // so use the last 'sane' dt value\r\n\r\n dt = history[idx];\r\n\r\n // Clamp delta to min (in case history has become corrupted somehow)\r\n dt = Math.min(dt, this._min);\r\n }\r\n\r\n // Smooth out the delta over the previous X frames\r\n\r\n // add the delta to the smoothing array\r\n history[idx] = dt;\r\n\r\n // adjusts the delta history array index based on the smoothing count\r\n // this stops the array growing beyond the size of deltaSmoothingMax\r\n this.deltaIndex++;\r\n\r\n if (this.deltaIndex > max)\r\n {\r\n this.deltaIndex = 0;\r\n }\r\n\r\n // Delta Average\r\n var avg = 0;\r\n\r\n // Loop the history array, adding the delta values together\r\n\r\n for (var i = 0; i < max; i++)\r\n {\r\n avg += history[i];\r\n }\r\n\r\n // Then divide by the array length to get the average delta\r\n avg /= max;\r\n\r\n // Set as the world delta value\r\n this.delta = avg;\r\n\r\n // Real-world timer advance\r\n this.time += this.rawDelta;\r\n\r\n // Update the estimate of the frame rate, `fps`. Every second, the number\r\n // of frames that occurred in that second are included in an exponential\r\n // moving average of all frames per second, with an alpha of 0.25. This\r\n // means that more recent seconds affect the estimated frame rate more than\r\n // older seconds.\r\n //\r\n // When a browser window is NOT minimized, but is covered up (i.e. you're using\r\n // another app which has spawned a window over the top of the browser), then it\r\n // will start to throttle the raf callback time. It waits for a while, and then\r\n // starts to drop the frame rate at 1 frame per second until it's down to just over 1fps.\r\n // So if the game was running at 60fps, and the player opens a new window, then\r\n // after 60 seconds (+ the 'buffer time') it'll be down to 1fps, so rafin'g at 1Hz.\r\n //\r\n // When they make the game visible again, the frame rate is increased at a rate of\r\n // approx. 8fps, back up to 60fps (or the max it can obtain)\r\n //\r\n // There is no easy way to determine if this drop in frame rate is because the\r\n // browser is throttling raf, or because the game is struggling with performance\r\n // because you're asking it to do too much on the device.\r\n\r\n if (time > this.nextFpsUpdate)\r\n {\r\n // Compute the new exponential moving average with an alpha of 0.25.\r\n this.actualFps = 0.25 * this.framesThisSecond + 0.75 * this.actualFps;\r\n this.nextFpsUpdate = time + 1000;\r\n this.framesThisSecond = 0;\r\n }\r\n\r\n this.framesThisSecond++;\r\n\r\n // Interpolation - how far between what is expected and where we are?\r\n var interpolation = avg / this._target;\r\n\r\n this.callback(time, avg, interpolation);\r\n\r\n // Shift time value over\r\n this.lastTime = time;\r\n\r\n this.frame++;\r\n },\r\n\r\n /**\r\n * Manually calls `TimeStep.step`.\r\n *\r\n * @method Phaser.Core.TimeStep#tick\r\n * @since 3.0.0\r\n */\r\n tick: function ()\r\n {\r\n this.step();\r\n },\r\n\r\n /**\r\n * Sends the TimeStep to sleep, stopping Request Animation Frame (or SetTimeout) and toggling the `running` flag to false.\r\n *\r\n * @method Phaser.Core.TimeStep#sleep\r\n * @since 3.0.0\r\n */\r\n sleep: function ()\r\n {\r\n if (this.running)\r\n {\r\n this.raf.stop();\r\n\r\n this.running = false;\r\n }\r\n },\r\n\r\n /**\r\n * Wakes-up the TimeStep, restarting Request Animation Frame (or SetTimeout) and toggling the `running` flag to true.\r\n * The `seamless` argument controls if the wake-up should adjust the start time or not.\r\n *\r\n * @method Phaser.Core.TimeStep#wake\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} [seamless=false] - Adjust the startTime based on the lastTime values.\r\n */\r\n wake: function (seamless)\r\n {\r\n if (this.running)\r\n {\r\n this.sleep();\r\n }\r\n else if (seamless)\r\n {\r\n this.startTime += -this.lastTime + (this.lastTime + window.performance.now());\r\n }\r\n\r\n this.raf.start(this.step.bind(this), this.useRAF);\r\n\r\n this.running = true;\r\n\r\n this.step();\r\n },\r\n\r\n /**\r\n * Gets the duration which the game has been running, in seconds.\r\n *\r\n * @method Phaser.Core.TimeStep#getDuration\r\n * @since 3.17.0\r\n *\r\n * @return {number} The duration in seconds.\r\n */\r\n getDuration: function ()\r\n {\r\n return Math.round(this.lastTime - this.startTime) / 1000;\r\n },\r\n\r\n /**\r\n * Gets the duration which the game has been running, in ms.\r\n *\r\n * @method Phaser.Core.TimeStep#getDurationMS\r\n * @since 3.17.0\r\n *\r\n * @return {number} The duration in ms.\r\n */\r\n getDurationMS: function ()\r\n {\r\n return Math.round(this.lastTime - this.startTime);\r\n },\r\n\r\n /**\r\n * Stops the TimeStep running.\r\n *\r\n * @method Phaser.Core.TimeStep#stop\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Core.TimeStep} The TimeStep object.\r\n */\r\n stop: function ()\r\n {\r\n this.running = false;\r\n this.started = false;\r\n\r\n this.raf.stop();\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Destroys the TimeStep. This will stop Request Animation Frame, stop the step, clear the callbacks and null\r\n * any objects.\r\n *\r\n * @method Phaser.Core.TimeStep#destroy\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.stop();\r\n\r\n this.callback = NOOP;\r\n\r\n this.raf = null;\r\n this.game = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = TimeStep;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL1RpbWVTdGVwLmpzP2ZkZDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsZUFBZSxtQkFBTyxDQUFDLG9GQUEwQjtBQUNqRCxXQUFXLG1CQUFPLENBQUMsOERBQWU7QUFDbEMsNEJBQTRCLG1CQUFPLENBQUMsNEZBQThCOztBQUVsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsWUFBWTtBQUN2QixXQUFXLDRCQUE0QjtBQUN2QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHVCQUF1Qiw0QkFBNEI7QUFDbkQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtQ0FBbUM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx1QkFBdUIsNEJBQTRCO0FBQ25EO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsdUJBQXVCLFNBQVM7QUFDaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvVGltZVN0ZXAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBHZXRWYWx1ZSA9IHJlcXVpcmUoJy4uL3V0aWxzL29iamVjdC9HZXRWYWx1ZScpO1xyXG52YXIgTk9PUCA9IHJlcXVpcmUoJy4uL3V0aWxzL05PT1AnKTtcclxudmFyIFJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHJlcXVpcmUoJy4uL2RvbS9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUnKTtcclxuXHJcbi8vICBGcmFtZSBSYXRlIGNvbmZpZ1xyXG4vLyAgICAgIGZwczoge1xyXG4vLyAgICAgICAgICBtaW46IDEwLFxyXG4vLyAgICAgICAgICB0YXJnZXQ6IDYwLFxyXG4vLyAgICAgICAgICBmb3JjZVNldFRpbWVPdXQ6IGZhbHNlLFxyXG4vLyAgICAgICAgICBkZWx0YUhpc3Rvcnk6IDEwLFxyXG4vLyAgICAgICAgICBwYW5pY01heDogMTIwXHJcbi8vICAgICB9XHJcblxyXG4vLyBodHRwOi8vd3d3LnRlc3R1Zm8uY29tLyN0ZXN0PWFuaW1hdGlvbi10aW1lLWdyYXBoXHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBjbGFzcyBUaW1lU3RlcFxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkNvcmVcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lfSBnYW1lIC0gQSByZWZlcmVuY2UgdG8gdGhlIFBoYXNlci5HYW1lIGluc3RhbmNlIHRoYXQgb3ducyB0aGlzIFRpbWUgU3RlcC5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuQ29yZS5GUFNDb25maWd9IGNvbmZpZ1xyXG4gKi9cclxudmFyIFRpbWVTdGVwID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFRpbWVTdGVwIChnYW1lLCBjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFBoYXNlci5HYW1lIGluc3RhbmNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNvcmUuVGltZVN0ZXAjZ2FtZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZX1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdhbWUgPSBnYW1lO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ29yZS5UaW1lU3RlcCNyYWZcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkRPTS5SZXF1ZXN0QW5pbWF0aW9uRnJhbWV9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yYWYgPSBuZXcgUmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgZmxhZyB0aGF0IGlzIHNldCBvbmNlIHRoZSBUaW1lU3RlcCBoYXMgc3RhcnRlZCBydW5uaW5nIGFuZCB0b2dnbGVkIHdoZW4gaXQgc3RvcHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ29yZS5UaW1lU3RlcCNzdGFydGVkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBmbGFnIHRoYXQgaXMgc2V0IG9uY2UgdGhlIFRpbWVTdGVwIGhhcyBzdGFydGVkIHJ1bm5pbmcgYW5kIHRvZ2dsZWQgd2hlbiBpdCBzdG9wcy5cclxuICAgICAgICAgKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgdmFsdWUgYW5kIGBzdGFydGVkYCBpcyB0aGF0IGBydW5uaW5nYCBpcyB0b2dnbGVkIHdoZW5cclxuICAgICAgICAgKiB0aGUgVGltZVN0ZXAgaXMgc2VudCB0byBzbGVlcCwgd2hlcmUtYXMgYHN0YXJ0ZWRgIHJlbWFpbnMgYHRydWVgLCBvbmx5IGNoYW5naW5nIGlmXHJcbiAgICAgICAgICogdGhlIFRpbWVTdGVwIGlzIGFjdHVhbGx5IHN0b3BwZWQsIG5vdCBqdXN0IHBhdXNlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Db3JlLlRpbWVTdGVwI3J1bm5pbmdcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbWluaW11bSBmcHMgcmF0ZSB5b3Ugd2FudCB0aGUgVGltZSBTdGVwIHRvIHJ1biBhdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Db3JlLlRpbWVTdGVwI21pbkZwc1xyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1pbkZwcyA9IEdldFZhbHVlKGNvbmZpZywgJ21pbicsIDUpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGFyZ2V0IGZwcyByYXRlIGZvciB0aGUgVGltZSBTdGVwIHRvIHJ1biBhdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIG5vdCBhY3R1YWxseSBjaGFuZ2UgdGhlIHNwZWVkIGF0IHdoaWNoIHRoZSBicm93c2VyIHJ1bnMsIHRoYXQgaXMgYmV5b25kXHJcbiAgICAgICAgICogdGhlIGNvbnRyb2wgb2YgUGhhc2VyLiBJbnN0ZWFkLCBpdCBhbGxvd3MgeW91IHRvIGRldGVybWluZSBwZXJmb3JtYW5jZSBpc3N1ZXMgYW5kIGlmIHRoZSBUaW1lIFN0ZXBcclxuICAgICAgICAgKiBpcyBzcGlyYWxpbmcgb3V0IG9mIGNvbnRyb2wuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ29yZS5UaW1lU3RlcCN0YXJnZXRGcHNcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCA2MFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGFyZ2V0RnBzID0gR2V0VmFsdWUoY29uZmlnLCAndGFyZ2V0JywgNjApO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbWluRnBzIHZhbHVlIGluIG1zLlxyXG4gICAgICAgICAqIERlZmF1bHRzIHRvIDIwMG1zIGJldHdlZW4gZnJhbWVzIChpLmUuIHN1cGVyIHNsb3chKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNvcmUuVGltZVN0ZXAjX21pblxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9taW4gPSAxMDAwIC8gdGhpcy5taW5GcHM7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB0YXJnZXRGcHMgdmFsdWUgaW4gbXMuXHJcbiAgICAgICAgICogRGVmYXVsdHMgdG8gMTYuNjZtcyBiZXR3ZWVuIGZyYW1lcyAoaS5lLiBub3JtYWwpXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ29yZS5UaW1lU3RlcCNfdGFyZ2V0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RhcmdldCA9IDEwMDAgLyB0aGlzLnRhcmdldEZwcztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gZXhwb25lbnRpYWwgbW92aW5nIGF2ZXJhZ2Ugb2YgdGhlIGZyYW1lcyBwZXIgc2Vjb25kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNvcmUuVGltZVN0ZXAjYWN0dWFsRnBzXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlZmF1bHQgNjBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFjdHVhbEZwcyA9IHRoaXMudGFyZ2V0RnBzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ29yZS5UaW1lU3RlcCNuZXh0RnBzVXBkYXRlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubmV4dEZwc1VwZGF0ZSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBudW1iZXIgb2YgZnJhbWVzIHByb2Nlc3NlZCB0aGlzIHNlY29uZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Db3JlLlRpbWVTdGVwI2ZyYW1lc1RoaXNTZWNvbmRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mcmFtZXNUaGlzU2Vjb25kID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBjYWxsYmFjayB0byBiZSBpbnZva2VkIGVhY2ggdGltZSB0aGUgVGltZSBTdGVwIHN0ZXBzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNvcmUuVGltZVN0ZXAjY2FsbGJhY2tcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlR5cGVzLkNvcmUuVGltZVN0ZXBDYWxsYmFja31cclxuICAgICAgICAgKiBAZGVmYXVsdCBOT09QXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IE5PT1A7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFlvdSBjYW4gZm9yY2UgdGhlIFRpbWUgU3RlcCB0byB1c2UgU2V0IFRpbWVvdXQgaW5zdGVhZCBvZiBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSBieSBzZXR0aW5nXHJcbiAgICAgICAgICogdGhlIGBmb3JjZVNldFRpbWVPdXRgIHByb3BlcnR5IHRvIGB0cnVlYCBpbiB0aGUgR2FtZSBDb25maWd1cmF0aW9uIG9iamVjdC4gSXQgY2Fubm90IGJlIGNoYW5nZWQgYXQgcnVuLXRpbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ29yZS5UaW1lU3RlcCNmb3JjZVNldFRpbWVPdXRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZm9yY2VTZXRUaW1lT3V0ID0gR2V0VmFsdWUoY29uZmlnLCAnZm9yY2VTZXRUaW1lT3V0JywgZmFsc2UpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGltZSwgY2FsY3VsYXRlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgc3RlcCwgYXMgc21vb3RoZWQgYnkgdGhlIGRlbHRhIHZhbHVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNvcmUuVGltZVN0ZXAjdGltZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGltZSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB0aW1lIGF0IHdoaWNoIHRoZSBnYW1lIHN0YXJ0ZWQgcnVubmluZy4gVGhpcyB2YWx1ZSBpcyBhZGp1c3RlZCBpZiB0aGUgZ2FtZSBpcyB0aGVuXHJcbiAgICAgICAgICogcGF1c2VkIGFuZCByZXN1bWVzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNvcmUuVGltZVN0ZXAjc3RhcnRUaW1lXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGltZSwgYXMgcmV0dXJuZWQgYnkgYHBlcmZvcm1hbmNlLm5vd2Agb2YgdGhlIHByZXZpb3VzIHN0ZXAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ29yZS5UaW1lU3RlcCNsYXN0VGltZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubGFzdFRpbWUgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY3VycmVudCBmcmFtZSB0aGUgZ2FtZSBpcyBvbi4gVGhpcyBjb3VudGVyIGlzIGluY3JlbWVudGVkIG9uY2UgZXZlcnkgZ2FtZSBzdGVwLCByZWdhcmRsZXNzIG9mIGhvdyBtdWNoXHJcbiAgICAgICAgICogdGltZSBoYXMgcGFzc2VkIGFuZCBpcyB1bmFmZmVjdGVkIGJ5IGRlbHRhIHNtb290aGluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Db3JlLlRpbWVTdGVwI2ZyYW1lXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZnJhbWUgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJcyB0aGUgYnJvd3NlciBjdXJyZW50bHkgY29uc2lkZXJlZCBpbiBmb2N1cyBieSB0aGUgUGFnZSBWaXNpYmlsaXR5IEFQST9cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIHNldCBpbiB0aGUgYGJsdXJgIG1ldGhvZCwgd2hpY2ggaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIEdhbWUgaW5zdGFuY2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ29yZS5UaW1lU3RlcCNpbkZvY3VzXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW5Gb2N1cyA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB0aW1lc3RhbXAgYXQgd2hpY2ggdGhlIGdhbWUgYmVjYW1lIHBhdXNlZCwgYXMgZGV0ZXJtaW5lZCBieSB0aGUgUGFnZSBWaXNpYmlsaXR5IEFQSS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Db3JlLlRpbWVTdGVwI19wYXVzZVRpbWVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3BhdXNlVGltZSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGludGVybmFsIGNvdW50ZXIgdG8gYWxsb3cgZm9yIHRoZSBicm93c2VyICdjb29saW5nIGRvd24nIGFmdGVyIGNvbWluZyBiYWNrIGludG8gZm9jdXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ29yZS5UaW1lU3RlcCNfY29vbERvd25cclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9jb29sRG93biA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBkZWx0YSB0aW1lLCBpbiBtcywgc2luY2UgdGhlIGxhc3QgZ2FtZSBzdGVwLiBUaGlzIGlzIGEgY2xhbXBlZCBhbmQgc21vb3RoZWQgYXZlcmFnZSB2YWx1ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Db3JlLlRpbWVTdGVwI2RlbHRhXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGVsdGEgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCBpbmRleCBvZiB0aGUgZGVsdGEgaGlzdG9yeSBwb3NpdGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Db3JlLlRpbWVTdGVwI2RlbHRhSW5kZXhcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWx0YUluZGV4ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgYXJyYXkgaG9sZGluZyB0aGUgcHJldmlvdXMgZGVsdGEgdmFsdWVzLCB1c2VkIGZvciBkZWx0YSBzbW9vdGhpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ29yZS5UaW1lU3RlcCNkZWx0YUhpc3RvcnlcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcltdfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGVsdGFIaXN0b3J5ID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBkZWx0YSB2YWx1ZXMgdGhhdCBhcmUgcmV0YWluZWQgaW4gb3JkZXIgdG8gY2FsY3VsYXRlIGEgc21vb3RoZWQgbW92aW5nIGF2ZXJhZ2UuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVGhpcyBjYW4gYmUgY2hhbmdlZCBpbiB0aGUgR2FtZSBDb25maWcgdmlhIHRoZSBgZnBzLmRlbHRhSGlzdG9yeWAgcHJvcGVydHkuIFRoZSBkZWZhdWx0IGlzIDEwLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNvcmUuVGltZVN0ZXAjZGVsdGFTbW9vdGhpbmdNYXhcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGVsdGFTbW9vdGhpbmdNYXggPSBHZXRWYWx1ZShjb25maWcsICdkZWx0YUhpc3RvcnknLCAxMCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBudW1iZXIgb2YgZnJhbWVzIHRoYXQgdGhlIGNvb2xkb3duIGlzIHNldCB0byBhZnRlciB0aGUgYnJvd3NlciBwYW5pY3Mgb3ZlciB0aGUgRlBTIHJhdGUsIHVzdWFsbHlcclxuICAgICAgICAgKiBhcyBhIHJlc3VsdCBvZiBzd2l0Y2hpbmcgdGFicyBhbmQgcmVnYWluaW5nIGZvY3VzLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoaXMgY2FuIGJlIGNoYW5nZWQgaW4gdGhlIEdhbWUgQ29uZmlnIHZpYSB0aGUgYGZwcy5wYW5pY01heGAgcHJvcGVydHkuIFRoZSBkZWZhdWx0IGlzIDEyMC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Db3JlLlRpbWVTdGVwI3BhbmljTWF4XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMTIwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wYW5pY01heCA9IEdldFZhbHVlKGNvbmZpZywgJ3BhbmljTWF4JywgMTIwKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGFjdHVhbCBlbGFwc2VkIHRpbWUgaW4gbXMgYmV0d2VlbiBvbmUgdXBkYXRlIGFuZCB0aGUgbmV4dC5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBVbmxpa2Ugd2l0aCBgZGVsdGFgLCBubyBzbW9vdGhpbmcsIGNhcHBpbmcsIG9yIGF2ZXJhZ2luZyBpcyBhcHBsaWVkIHRvIHRoaXMgdmFsdWUuXHJcbiAgICAgICAgICogU28gcGxlYXNlIGJlIGNhcmVmdWwgd2hlbiB1c2luZyB0aGlzIHZhbHVlIGluIG1hdGggY2FsY3VsYXRpb25zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNvcmUuVGltZVN0ZXAjcmF3RGVsdGFcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJhd0RlbHRhID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRpbWUsIGFzIHJldHVybmVkIGJ5IGBwZXJmb3JtYW5jZS5ub3dgIGF0IHRoZSB2ZXJ5IHN0YXJ0IG9mIHRoZSBjdXJyZW50IHN0ZXAuXHJcbiAgICAgICAgICogVGhpcyBjYW4gZGlmZmVyIGZyb20gdGhlIGB0aW1lYCB2YWx1ZSBpbiB0aGF0IGl0IGlzbid0IGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIGRlbHRhIHZhbHVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkNvcmUuVGltZVN0ZXAjbm93XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubm93ID0gMDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYnkgdGhlIEdhbWUgaW5zdGFuY2Ugd2hlbiB0aGUgRE9NIHdpbmRvdy5vbkJsdXIgZXZlbnQgdHJpZ2dlcnMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ29yZS5UaW1lU3RlcCNibHVyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgYmx1cjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmluRm9jdXMgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYnkgdGhlIEdhbWUgaW5zdGFuY2Ugd2hlbiB0aGUgRE9NIHdpbmRvdy5vbkZvY3VzIGV2ZW50IHRyaWdnZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNvcmUuVGltZVN0ZXAjZm9jdXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBmb2N1czogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmluRm9jdXMgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnJlc2V0RGVsdGEoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgdmlzaWJpbGl0eSBBUEkgc2F5cyB0aGUgZ2FtZSBpcyAnaGlkZGVuJyAodGFiIHN3aXRjaCBvdXQgb2YgdmlldywgZXRjKVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNvcmUuVGltZVN0ZXAjcGF1c2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBwYXVzZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9wYXVzZVRpbWUgPSB3aW5kb3cucGVyZm9ybWFuY2Uubm93KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIHZpc2liaWxpdHkgQVBJIHNheXMgdGhlIGdhbWUgaXMgJ3Zpc2libGUnIGFnYWluICh0YWIgc3dpdGNoIGJhY2sgaW50byB2aWV3LCBldGMpXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ29yZS5UaW1lU3RlcCNyZXN1bWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICByZXN1bWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZXNldERlbHRhKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lICs9IHRoaXMudGltZSAtIHRoaXMuX3BhdXNlVGltZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldHMgdGhlIHRpbWUsIGxhc3RUaW1lLCBmcHMgYXZlcmFnZXMgYW5kIGRlbHRhIGhpc3RvcnkuXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSB3aGVuIGEgYnJvd3NlciBzbGVlcHMgdGhlbSByZXN1bWVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNvcmUuVGltZVN0ZXAjcmVzZXREZWx0YVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHJlc2V0RGVsdGE6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG5vdyA9IHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTtcclxuXHJcbiAgICAgICAgdGhpcy50aW1lID0gbm93O1xyXG4gICAgICAgIHRoaXMubGFzdFRpbWUgPSBub3c7XHJcbiAgICAgICAgdGhpcy5uZXh0RnBzVXBkYXRlID0gbm93ICsgMTAwMDtcclxuICAgICAgICB0aGlzLmZyYW1lc1RoaXNTZWNvbmQgPSAwO1xyXG5cclxuICAgICAgICAvLyAgUHJlLXBvcHVsYXRlIHNtb290aGluZyBhcnJheVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGVsdGFTbW9vdGhpbmdNYXg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVsdGFIaXN0b3J5W2ldID0gTWF0aC5taW4odGhpcy5fdGFyZ2V0LCB0aGlzLmRlbHRhSGlzdG9yeVtpXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRlbHRhID0gMDtcclxuICAgICAgICB0aGlzLmRlbHRhSW5kZXggPSAwO1xyXG5cclxuICAgICAgICB0aGlzLl9jb29sRG93biA9IHRoaXMucGFuaWNNYXg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RhcnRzIHRoZSBUaW1lIFN0ZXAgcnVubmluZywgaWYgaXQgaXMgbm90IGFscmVhZHkgZG9pbmcgc28uXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgR2FtZSBCb290IHByb2Nlc3MuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ29yZS5UaW1lU3RlcCNzdGFydFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuQ29yZS5UaW1lU3RlcENhbGxiYWNrfSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBiZSBpbnZva2VkIGVhY2ggdGltZSB0aGUgVGltZSBTdGVwIHN0ZXBzLlxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKGNhbGxiYWNrKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXJ0ZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5ydW5uaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRlbHRhU21vb3RoaW5nTWF4OyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmRlbHRhSGlzdG9yeVtpXSA9IHRoaXMuX3RhcmdldDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVzZXREZWx0YSgpO1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xyXG5cclxuICAgICAgICB0aGlzLnJhZi5zdGFydCh0aGlzLnN0ZXAuYmluZCh0aGlzKSwgdGhpcy5mb3JjZVNldFRpbWVPdXQsIHRoaXMuX3RhcmdldCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1haW4gc3RlcCBtZXRob2QuIFRoaXMgaXMgY2FsbGVkIGVhY2ggdGltZSB0aGUgYnJvd3NlciB1cGRhdGVzLCBlaXRoZXIgYnkgUmVxdWVzdCBBbmltYXRpb24gRnJhbWUsXHJcbiAgICAgKiBvciBieSBTZXQgVGltZW91dC4gSXQgaXMgcmVzcG9uc2libGUgZm9yIGNhbGN1bGF0aW5nIHRoZSBkZWx0YSB2YWx1ZXMsIGZyYW1lIHRvdGFscywgY29vbCBkb3duIGhpc3RvcnkgYW5kIG1vcmUuXHJcbiAgICAgKiBZb3UgZ2VuZXJhbGx5IHNob3VsZCBuZXZlciBjYWxsIHRoaXMgbWV0aG9kIGRpcmVjdGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNvcmUuVGltZVN0ZXAjc3RlcFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHN0ZXA6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIEJlY2F1c2UgdGhlIHRpbWVzdGFtcCBwYXNzZWQgaW4gZnJvbSByYWYgcmVwcmVzZW50cyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtYWluIHRocmVhZCBmcmFtZSB0aGF0IHdl4oCZcmUgY3VycmVudGx5IGluLFxyXG4gICAgICAgIC8vICBub3QgdGhlIGFjdHVhbCB0aW1lIG5vdy4gQXMgd2Ugd2FudCB0byBjb21wYXJlIHRoaXMgdGltZSB2YWx1ZSBhZ2FpbnN0IEV2ZW50IHRpbWVTdGFtcHMgYW5kIHRoZSBsaWtlLCB3ZSBuZWVkIGFcclxuICAgICAgICAvLyAgbW9yZSBhY2N1cmF0ZSBvbmU6XHJcblxyXG4gICAgICAgIHZhciB0aW1lID0gd2luZG93LnBlcmZvcm1hbmNlLm5vdygpO1xyXG5cclxuICAgICAgICB0aGlzLm5vdyA9IHRpbWU7XHJcblxyXG4gICAgICAgIHZhciBiZWZvcmUgPSB0aW1lIC0gdGhpcy5sYXN0VGltZTtcclxuXHJcbiAgICAgICAgaWYgKGJlZm9yZSA8IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgQmVjYXVzZSwgQ2hyb21lLlxyXG4gICAgICAgICAgICBiZWZvcmUgPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yYXdEZWx0YSA9IGJlZm9yZTtcclxuXHJcbiAgICAgICAgdmFyIGlkeCA9IHRoaXMuZGVsdGFJbmRleDtcclxuICAgICAgICB2YXIgaGlzdG9yeSA9IHRoaXMuZGVsdGFIaXN0b3J5O1xyXG4gICAgICAgIHZhciBtYXggPSB0aGlzLmRlbHRhU21vb3RoaW5nTWF4O1xyXG5cclxuICAgICAgICAvLyAgZGVsdGEgdGltZSAodGltZSBpcyBpbiBtcylcclxuICAgICAgICB2YXIgZHQgPSBiZWZvcmU7XHJcblxyXG4gICAgICAgIC8vICBXaGVuIGEgYnJvd3NlciBzd2l0Y2hlcyB0YWIsIHRoZW4gY29tZXMgYmFjayBhZ2FpbiwgaXQgdGFrZXMgYXJvdW5kIDEwIGZyYW1lcyBiZWZvcmVcclxuICAgICAgICAvLyAgdGhlIGRlbHRhIHRpbWUgc2V0dGxlcyBkb3duIHNvIHdlIGVtcGxveSBhICdjb29saW5nIGRvd24nIHBlcmlvZCBiZWZvcmUgd2Ugc3RhcnRcclxuICAgICAgICAvLyAgdHJ1c3RpbmcgdGhlIGRlbHRhIHZhbHVlcyBhZ2FpbiwgdG8gYXZvaWQgc3Bpa2VzIGZsb29kaW5nIHRocm91Z2ggb3VyIGRlbHRhIGF2ZXJhZ2VcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2Nvb2xEb3duID4gMCB8fCAhdGhpcy5pbkZvY3VzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fY29vbERvd24tLTtcclxuXHJcbiAgICAgICAgICAgIGR0ID0gTWF0aC5taW4oZHQsIHRoaXMuX3RhcmdldCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZHQgPiB0aGlzLl9taW4pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgUHJvYmFibHkgc3VwZXIgYmFkIHN0YXJ0IHRpbWUgb3IgYnJvd3NlciB0YWIgY29udGV4dCBsb3NzLFxyXG4gICAgICAgICAgICAvLyAgc28gdXNlIHRoZSBsYXN0ICdzYW5lJyBkdCB2YWx1ZVxyXG5cclxuICAgICAgICAgICAgZHQgPSBoaXN0b3J5W2lkeF07XHJcblxyXG4gICAgICAgICAgICAvLyAgQ2xhbXAgZGVsdGEgdG8gbWluIChpbiBjYXNlIGhpc3RvcnkgaGFzIGJlY29tZSBjb3JydXB0ZWQgc29tZWhvdylcclxuICAgICAgICAgICAgZHQgPSBNYXRoLm1pbihkdCwgdGhpcy5fbWluKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBTbW9vdGggb3V0IHRoZSBkZWx0YSBvdmVyIHRoZSBwcmV2aW91cyBYIGZyYW1lc1xyXG5cclxuICAgICAgICAvLyAgYWRkIHRoZSBkZWx0YSB0byB0aGUgc21vb3RoaW5nIGFycmF5XHJcbiAgICAgICAgaGlzdG9yeVtpZHhdID0gZHQ7XHJcblxyXG4gICAgICAgIC8vICBhZGp1c3RzIHRoZSBkZWx0YSBoaXN0b3J5IGFycmF5IGluZGV4IGJhc2VkIG9uIHRoZSBzbW9vdGhpbmcgY291bnRcclxuICAgICAgICAvLyAgdGhpcyBzdG9wcyB0aGUgYXJyYXkgZ3Jvd2luZyBiZXlvbmQgdGhlIHNpemUgb2YgZGVsdGFTbW9vdGhpbmdNYXhcclxuICAgICAgICB0aGlzLmRlbHRhSW5kZXgrKztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGVsdGFJbmRleCA+IG1heClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVsdGFJbmRleCA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgRGVsdGEgQXZlcmFnZVxyXG4gICAgICAgIHZhciBhdmcgPSAwO1xyXG5cclxuICAgICAgICAvLyAgTG9vcCB0aGUgaGlzdG9yeSBhcnJheSwgYWRkaW5nIHRoZSBkZWx0YSB2YWx1ZXMgdG9nZXRoZXJcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGF2ZyArPSBoaXN0b3J5W2ldO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFRoZW4gZGl2aWRlIGJ5IHRoZSBhcnJheSBsZW5ndGggdG8gZ2V0IHRoZSBhdmVyYWdlIGRlbHRhXHJcbiAgICAgICAgYXZnIC89IG1heDtcclxuXHJcbiAgICAgICAgLy8gIFNldCBhcyB0aGUgd29ybGQgZGVsdGEgdmFsdWVcclxuICAgICAgICB0aGlzLmRlbHRhID0gYXZnO1xyXG5cclxuICAgICAgICAvLyAgUmVhbC13b3JsZCB0aW1lciBhZHZhbmNlXHJcbiAgICAgICAgdGhpcy50aW1lICs9IHRoaXMucmF3RGVsdGE7XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgZXN0aW1hdGUgb2YgdGhlIGZyYW1lIHJhdGUsIGBmcHNgLiBFdmVyeSBzZWNvbmQsIHRoZSBudW1iZXJcclxuICAgICAgICAvLyBvZiBmcmFtZXMgdGhhdCBvY2N1cnJlZCBpbiB0aGF0IHNlY29uZCBhcmUgaW5jbHVkZWQgaW4gYW4gZXhwb25lbnRpYWxcclxuICAgICAgICAvLyBtb3ZpbmcgYXZlcmFnZSBvZiBhbGwgZnJhbWVzIHBlciBzZWNvbmQsIHdpdGggYW4gYWxwaGEgb2YgMC4yNS4gVGhpc1xyXG4gICAgICAgIC8vIG1lYW5zIHRoYXQgbW9yZSByZWNlbnQgc2Vjb25kcyBhZmZlY3QgdGhlIGVzdGltYXRlZCBmcmFtZSByYXRlIG1vcmUgdGhhblxyXG4gICAgICAgIC8vIG9sZGVyIHNlY29uZHMuXHJcbiAgICAgICAgLy9cclxuICAgICAgICAvLyBXaGVuIGEgYnJvd3NlciB3aW5kb3cgaXMgTk9UIG1pbmltaXplZCwgYnV0IGlzIGNvdmVyZWQgdXAgKGkuZS4geW91J3JlIHVzaW5nXHJcbiAgICAgICAgLy8gYW5vdGhlciBhcHAgd2hpY2ggaGFzIHNwYXduZWQgYSB3aW5kb3cgb3ZlciB0aGUgdG9wIG9mIHRoZSBicm93c2VyKSwgdGhlbiBpdFxyXG4gICAgICAgIC8vIHdpbGwgc3RhcnQgdG8gdGhyb3R0bGUgdGhlIHJhZiBjYWxsYmFjayB0aW1lLiBJdCB3YWl0cyBmb3IgYSB3aGlsZSwgYW5kIHRoZW5cclxuICAgICAgICAvLyBzdGFydHMgdG8gZHJvcCB0aGUgZnJhbWUgcmF0ZSBhdCAxIGZyYW1lIHBlciBzZWNvbmQgdW50aWwgaXQncyBkb3duIHRvIGp1c3Qgb3ZlciAxZnBzLlxyXG4gICAgICAgIC8vIFNvIGlmIHRoZSBnYW1lIHdhcyBydW5uaW5nIGF0IDYwZnBzLCBhbmQgdGhlIHBsYXllciBvcGVucyBhIG5ldyB3aW5kb3csIHRoZW5cclxuICAgICAgICAvLyBhZnRlciA2MCBzZWNvbmRzICgrIHRoZSAnYnVmZmVyIHRpbWUnKSBpdCdsbCBiZSBkb3duIHRvIDFmcHMsIHNvIHJhZmluJ2cgYXQgMUh6LlxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gV2hlbiB0aGV5IG1ha2UgdGhlIGdhbWUgdmlzaWJsZSBhZ2FpbiwgdGhlIGZyYW1lIHJhdGUgaXMgaW5jcmVhc2VkIGF0IGEgcmF0ZSBvZlxyXG4gICAgICAgIC8vIGFwcHJveC4gOGZwcywgYmFjayB1cCB0byA2MGZwcyAob3IgdGhlIG1heCBpdCBjYW4gb2J0YWluKVxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gVGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgZHJvcCBpbiBmcmFtZSByYXRlIGlzIGJlY2F1c2UgdGhlXHJcbiAgICAgICAgLy8gYnJvd3NlciBpcyB0aHJvdHRsaW5nIHJhZiwgb3IgYmVjYXVzZSB0aGUgZ2FtZSBpcyBzdHJ1Z2dsaW5nIHdpdGggcGVyZm9ybWFuY2VcclxuICAgICAgICAvLyBiZWNhdXNlIHlvdSdyZSBhc2tpbmcgaXQgdG8gZG8gdG9vIG11Y2ggb24gdGhlIGRldmljZS5cclxuXHJcbiAgICAgICAgaWYgKHRpbWUgPiB0aGlzLm5leHRGcHNVcGRhdGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgQ29tcHV0ZSB0aGUgbmV3IGV4cG9uZW50aWFsIG1vdmluZyBhdmVyYWdlIHdpdGggYW4gYWxwaGEgb2YgMC4yNS5cclxuICAgICAgICAgICAgdGhpcy5hY3R1YWxGcHMgPSAwLjI1ICogdGhpcy5mcmFtZXNUaGlzU2Vjb25kICsgMC43NSAqIHRoaXMuYWN0dWFsRnBzO1xyXG4gICAgICAgICAgICB0aGlzLm5leHRGcHNVcGRhdGUgPSB0aW1lICsgMTAwMDtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZXNUaGlzU2Vjb25kID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVzVGhpc1NlY29uZCsrO1xyXG5cclxuICAgICAgICAvLyAgSW50ZXJwb2xhdGlvbiAtIGhvdyBmYXIgYmV0d2VlbiB3aGF0IGlzIGV4cGVjdGVkIGFuZCB3aGVyZSB3ZSBhcmU/XHJcbiAgICAgICAgdmFyIGludGVycG9sYXRpb24gPSBhdmcgLyB0aGlzLl90YXJnZXQ7XHJcblxyXG4gICAgICAgIHRoaXMuY2FsbGJhY2sodGltZSwgYXZnLCBpbnRlcnBvbGF0aW9uKTtcclxuXHJcbiAgICAgICAgLy8gIFNoaWZ0IHRpbWUgdmFsdWUgb3ZlclxyXG4gICAgICAgIHRoaXMubGFzdFRpbWUgPSB0aW1lO1xyXG5cclxuICAgICAgICB0aGlzLmZyYW1lKys7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFudWFsbHkgY2FsbHMgYFRpbWVTdGVwLnN0ZXBgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNvcmUuVGltZVN0ZXAjdGlja1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHRpY2s6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zdGVwKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VuZHMgdGhlIFRpbWVTdGVwIHRvIHNsZWVwLCBzdG9wcGluZyBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSAob3IgU2V0VGltZW91dCkgYW5kIHRvZ2dsaW5nIHRoZSBgcnVubmluZ2AgZmxhZyB0byBmYWxzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Db3JlLlRpbWVTdGVwI3NsZWVwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc2xlZXA6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMucnVubmluZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmFmLnN0b3AoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXYWtlcy11cCB0aGUgVGltZVN0ZXAsIHJlc3RhcnRpbmcgUmVxdWVzdCBBbmltYXRpb24gRnJhbWUgKG9yIFNldFRpbWVvdXQpIGFuZCB0b2dnbGluZyB0aGUgYHJ1bm5pbmdgIGZsYWcgdG8gdHJ1ZS5cclxuICAgICAqIFRoZSBgc2VhbWxlc3NgIGFyZ3VtZW50IGNvbnRyb2xzIGlmIHRoZSB3YWtlLXVwIHNob3VsZCBhZGp1c3QgdGhlIHN0YXJ0IHRpbWUgb3Igbm90LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNvcmUuVGltZVN0ZXAjd2FrZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbc2VhbWxlc3M9ZmFsc2VdIC0gQWRqdXN0IHRoZSBzdGFydFRpbWUgYmFzZWQgb24gdGhlIGxhc3RUaW1lIHZhbHVlcy5cclxuICAgICAqL1xyXG4gICAgd2FrZTogZnVuY3Rpb24gKHNlYW1sZXNzKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLnJ1bm5pbmcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNsZWVwKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNlYW1sZXNzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFydFRpbWUgKz0gLXRoaXMubGFzdFRpbWUgKyAodGhpcy5sYXN0VGltZSArIHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJhZi5zdGFydCh0aGlzLnN0ZXAuYmluZCh0aGlzKSwgdGhpcy51c2VSQUYpO1xyXG5cclxuICAgICAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnN0ZXAoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBkdXJhdGlvbiB3aGljaCB0aGUgZ2FtZSBoYXMgYmVlbiBydW5uaW5nLCBpbiBzZWNvbmRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNvcmUuVGltZVN0ZXAjZ2V0RHVyYXRpb25cclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxyXG4gICAgICovXHJcbiAgICBnZXREdXJhdGlvbjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLmxhc3RUaW1lIC0gdGhpcy5zdGFydFRpbWUpIC8gMTAwMDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBkdXJhdGlvbiB3aGljaCB0aGUgZ2FtZSBoYXMgYmVlbiBydW5uaW5nLCBpbiBtcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Db3JlLlRpbWVTdGVwI2dldER1cmF0aW9uTVNcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBkdXJhdGlvbiBpbiBtcy5cclxuICAgICAqL1xyXG4gICAgZ2V0RHVyYXRpb25NUzogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLmxhc3RUaW1lIC0gdGhpcy5zdGFydFRpbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIHRoZSBUaW1lU3RlcCBydW5uaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkNvcmUuVGltZVN0ZXAjc3RvcFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkNvcmUuVGltZVN0ZXB9IFRoZSBUaW1lU3RlcCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5ydW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucmFmLnN0b3AoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhlIFRpbWVTdGVwLiBUaGlzIHdpbGwgc3RvcCBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSwgc3RvcCB0aGUgc3RlcCwgY2xlYXIgdGhlIGNhbGxiYWNrcyBhbmQgbnVsbFxyXG4gICAgICogYW55IG9iamVjdHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ29yZS5UaW1lU3RlcCNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN0b3AoKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IE5PT1A7XHJcblxyXG4gICAgICAgIHRoaXMucmFmID0gbnVsbDtcclxuICAgICAgICB0aGlzLmdhbWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRpbWVTdGVwO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/TimeStep.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/core/VisibilityHandler.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/core/VisibilityHandler.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/core/events/index.js\");\r\n\r\n/**\r\n * The Visibility Handler is responsible for listening out for document level visibility change events.\r\n * This includes `visibilitychange` if the browser supports it, and blur and focus events. It then uses\r\n * the provided Event Emitter and fires the related events.\r\n *\r\n * @function Phaser.Core.VisibilityHandler\r\n * @fires Phaser.Core.Events#BLUR\r\n * @fires Phaser.Core.Events#FOCUS\r\n * @fires Phaser.Core.Events#HIDDEN\r\n * @fires Phaser.Core.Events#VISIBLE\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Game} game - The Game instance this Visibility Handler is working on.\r\n */\r\nvar VisibilityHandler = function (game)\r\n{\r\n var hiddenVar;\r\n var eventEmitter = game.events;\r\n\r\n if (document.hidden !== undefined)\r\n {\r\n hiddenVar = 'visibilitychange';\r\n }\r\n else\r\n {\r\n var vendors = [ 'webkit', 'moz', 'ms' ];\r\n\r\n vendors.forEach(function (prefix)\r\n {\r\n if (document[prefix + 'Hidden'] !== undefined)\r\n {\r\n document.hidden = function ()\r\n {\r\n return document[prefix + 'Hidden'];\r\n };\r\n\r\n hiddenVar = prefix + 'visibilitychange';\r\n }\r\n\r\n });\r\n }\r\n\r\n var onChange = function (event)\r\n {\r\n if (document.hidden || event.type === 'pause')\r\n {\r\n eventEmitter.emit(Events.HIDDEN);\r\n }\r\n else\r\n {\r\n eventEmitter.emit(Events.VISIBLE);\r\n }\r\n };\r\n\r\n if (hiddenVar)\r\n {\r\n document.addEventListener(hiddenVar, onChange, false);\r\n }\r\n\r\n window.onblur = function ()\r\n {\r\n eventEmitter.emit(Events.BLUR);\r\n };\r\n\r\n window.onfocus = function ()\r\n {\r\n eventEmitter.emit(Events.FOCUS);\r\n };\r\n\r\n // Automatically give the window focus unless config says otherwise\r\n if (window.focus && game.config.autoFocus)\r\n {\r\n window.focus();\r\n }\r\n};\r\n\r\nmodule.exports = VisibilityHandler;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL1Zpc2liaWxpdHlIYW5kbGVyLmpzP2E4MzMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyxnRUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvVmlzaWJpbGl0eUhhbmRsZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuL2V2ZW50cycpO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBWaXNpYmlsaXR5IEhhbmRsZXIgaXMgcmVzcG9uc2libGUgZm9yIGxpc3RlbmluZyBvdXQgZm9yIGRvY3VtZW50IGxldmVsIHZpc2liaWxpdHkgY2hhbmdlIGV2ZW50cy5cclxuICogVGhpcyBpbmNsdWRlcyBgdmlzaWJpbGl0eWNoYW5nZWAgaWYgdGhlIGJyb3dzZXIgc3VwcG9ydHMgaXQsIGFuZCBibHVyIGFuZCBmb2N1cyBldmVudHMuIEl0IHRoZW4gdXNlc1xyXG4gKiB0aGUgcHJvdmlkZWQgRXZlbnQgRW1pdHRlciBhbmQgZmlyZXMgdGhlIHJlbGF0ZWQgZXZlbnRzLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkNvcmUuVmlzaWJpbGl0eUhhbmRsZXJcclxuICogQGZpcmVzIFBoYXNlci5Db3JlLkV2ZW50cyNCTFVSXHJcbiAqIEBmaXJlcyBQaGFzZXIuQ29yZS5FdmVudHMjRk9DVVNcclxuICogQGZpcmVzIFBoYXNlci5Db3JlLkV2ZW50cyNISURERU5cclxuICogQGZpcmVzIFBoYXNlci5Db3JlLkV2ZW50cyNWSVNJQkxFXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lfSBnYW1lIC0gVGhlIEdhbWUgaW5zdGFuY2UgdGhpcyBWaXNpYmlsaXR5IEhhbmRsZXIgaXMgd29ya2luZyBvbi5cclxuICovXHJcbnZhciBWaXNpYmlsaXR5SGFuZGxlciA9IGZ1bmN0aW9uIChnYW1lKVxyXG57XHJcbiAgICB2YXIgaGlkZGVuVmFyO1xyXG4gICAgdmFyIGV2ZW50RW1pdHRlciA9IGdhbWUuZXZlbnRzO1xyXG5cclxuICAgIGlmIChkb2N1bWVudC5oaWRkZW4gIT09IHVuZGVmaW5lZClcclxuICAgIHtcclxuICAgICAgICBoaWRkZW5WYXIgPSAndmlzaWJpbGl0eWNoYW5nZSc7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHZlbmRvcnMgPSBbICd3ZWJraXQnLCAnbW96JywgJ21zJyBdO1xyXG5cclxuICAgICAgICB2ZW5kb3JzLmZvckVhY2goZnVuY3Rpb24gKHByZWZpeClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudFtwcmVmaXggKyAnSGlkZGVuJ10gIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuaGlkZGVuID0gZnVuY3Rpb24gKClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9jdW1lbnRbcHJlZml4ICsgJ0hpZGRlbiddO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBoaWRkZW5WYXIgPSBwcmVmaXggKyAndmlzaWJpbGl0eWNoYW5nZSc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIG9uQ2hhbmdlID0gZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChkb2N1bWVudC5oaWRkZW4gfHwgZXZlbnQudHlwZSA9PT0gJ3BhdXNlJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGV2ZW50RW1pdHRlci5lbWl0KEV2ZW50cy5ISURERU4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBldmVudEVtaXR0ZXIuZW1pdChFdmVudHMuVklTSUJMRSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoaGlkZGVuVmFyKVxyXG4gICAge1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoaGlkZGVuVmFyLCBvbkNoYW5nZSwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHdpbmRvdy5vbmJsdXIgPSBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGV2ZW50RW1pdHRlci5lbWl0KEV2ZW50cy5CTFVSKTtcclxuICAgIH07XHJcblxyXG4gICAgd2luZG93Lm9uZm9jdXMgPSBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGV2ZW50RW1pdHRlci5lbWl0KEV2ZW50cy5GT0NVUyk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vICBBdXRvbWF0aWNhbGx5IGdpdmUgdGhlIHdpbmRvdyBmb2N1cyB1bmxlc3MgY29uZmlnIHNheXMgb3RoZXJ3aXNlXHJcbiAgICBpZiAod2luZG93LmZvY3VzICYmIGdhbWUuY29uZmlnLmF1dG9Gb2N1cylcclxuICAgIHtcclxuICAgICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVmlzaWJpbGl0eUhhbmRsZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/VisibilityHandler.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/core/events/BLUR_EVENT.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/core/events/BLUR_EVENT.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Blur Event.\r\n * \r\n * This event is dispatched by the Game Visibility Handler when the window in which the Game instance is embedded\r\n * enters a blurred state. The blur event is raised when the window loses focus. This can happen if a user swaps\r\n * tab, or if they simply remove focus from the browser to another app.\r\n *\r\n * @event Phaser.Core.Events#BLUR\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'blur';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9CTFVSX0VWRU5ULmpzPzg2MDciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9CTFVSX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgQmx1ciBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgR2FtZSBWaXNpYmlsaXR5IEhhbmRsZXIgd2hlbiB0aGUgd2luZG93IGluIHdoaWNoIHRoZSBHYW1lIGluc3RhbmNlIGlzIGVtYmVkZGVkXHJcbiAqIGVudGVycyBhIGJsdXJyZWQgc3RhdGUuIFRoZSBibHVyIGV2ZW50IGlzIHJhaXNlZCB3aGVuIHRoZSB3aW5kb3cgbG9zZXMgZm9jdXMuIFRoaXMgY2FuIGhhcHBlbiBpZiBhIHVzZXIgc3dhcHNcclxuICogdGFiLCBvciBpZiB0aGV5IHNpbXBseSByZW1vdmUgZm9jdXMgZnJvbSB0aGUgYnJvd3NlciB0byBhbm90aGVyIGFwcC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Db3JlLkV2ZW50cyNCTFVSXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnYmx1cic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/BLUR_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/core/events/BOOT_EVENT.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/core/events/BOOT_EVENT.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Boot Event.\r\n * \r\n * This event is dispatched when the Phaser Game instance has finished booting, but before it is ready to start running.\r\n * The global systems use this event to know when to set themselves up, dispatching their own `ready` events as required.\r\n *\r\n * @event Phaser.Core.Events#BOOT\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'boot';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9CT09UX0VWRU5ULmpzPzgyMWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY29yZS9ldmVudHMvQk9PVF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIEJvb3QgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgd2hlbiB0aGUgUGhhc2VyIEdhbWUgaW5zdGFuY2UgaGFzIGZpbmlzaGVkIGJvb3RpbmcsIGJ1dCBiZWZvcmUgaXQgaXMgcmVhZHkgdG8gc3RhcnQgcnVubmluZy5cclxuICogVGhlIGdsb2JhbCBzeXN0ZW1zIHVzZSB0aGlzIGV2ZW50IHRvIGtub3cgd2hlbiB0byBzZXQgdGhlbXNlbHZlcyB1cCwgZGlzcGF0Y2hpbmcgdGhlaXIgb3duIGByZWFkeWAgZXZlbnRzIGFzIHJlcXVpcmVkLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkNvcmUuRXZlbnRzI0JPT1RcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdib290JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/BOOT_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/core/events/CONTEXT_LOST_EVENT.js":
/*!*******************************************************************!*\
!*** ./node_modules/phaser/src/core/events/CONTEXT_LOST_EVENT.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Context Lost Event.\r\n * \r\n * This event is dispatched by the Game if the WebGL Renderer it is using encounters a WebGL Context Lost event from the browser.\r\n * \r\n * The partner event is `CONTEXT_RESTORED`.\r\n *\r\n * @event Phaser.Core.Events#CONTEXT_LOST\r\n * @since 3.19.0\r\n */\r\nmodule.exports = 'contextlost';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9DT05URVhUX0xPU1RfRVZFTlQuanM/NDliMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvZXZlbnRzL0NPTlRFWFRfTE9TVF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIENvbnRleHQgTG9zdCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgR2FtZSBpZiB0aGUgV2ViR0wgUmVuZGVyZXIgaXQgaXMgdXNpbmcgZW5jb3VudGVycyBhIFdlYkdMIENvbnRleHQgTG9zdCBldmVudCBmcm9tIHRoZSBicm93c2VyLlxyXG4gKiBcclxuICogVGhlIHBhcnRuZXIgZXZlbnQgaXMgYENPTlRFWFRfUkVTVE9SRURgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkNvcmUuRXZlbnRzI0NPTlRFWFRfTE9TVFxyXG4gKiBAc2luY2UgMy4xOS4wXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdjb250ZXh0bG9zdCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/CONTEXT_LOST_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/core/events/CONTEXT_RESTORED_EVENT.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/src/core/events/CONTEXT_RESTORED_EVENT.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Context Restored Event.\r\n * \r\n * This event is dispatched by the Game if the WebGL Renderer it is using encounters a WebGL Context Restored event from the browser.\r\n * \r\n * The partner event is `CONTEXT_LOST`.\r\n *\r\n * @event Phaser.Core.Events#CONTEXT_RESTORED\r\n * @since 3.19.0\r\n */\r\nmodule.exports = 'contextrestored';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9DT05URVhUX1JFU1RPUkVEX0VWRU5ULmpzPzcxZjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9DT05URVhUX1JFU1RPUkVEX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgQ29udGV4dCBSZXN0b3JlZCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgR2FtZSBpZiB0aGUgV2ViR0wgUmVuZGVyZXIgaXQgaXMgdXNpbmcgZW5jb3VudGVycyBhIFdlYkdMIENvbnRleHQgUmVzdG9yZWQgZXZlbnQgZnJvbSB0aGUgYnJvd3Nlci5cclxuICogXHJcbiAqIFRoZSBwYXJ0bmVyIGV2ZW50IGlzIGBDT05URVhUX0xPU1RgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkNvcmUuRXZlbnRzI0NPTlRFWFRfUkVTVE9SRURcclxuICogQHNpbmNlIDMuMTkuMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnY29udGV4dHJlc3RvcmVkJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/CONTEXT_RESTORED_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/core/events/DESTROY_EVENT.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/core/events/DESTROY_EVENT.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Destroy Event.\r\n * \r\n * This event is dispatched when the game instance has been told to destroy itself.\r\n * Lots of internal systems listen to this event in order to clear themselves out.\r\n * Custom plugins and game code should also do the same.\r\n *\r\n * @event Phaser.Core.Events#DESTROY\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'destroy';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9ERVNUUk9ZX0VWRU5ULmpzPzNmZDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9ERVNUUk9ZX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgRGVzdHJveSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCB3aGVuIHRoZSBnYW1lIGluc3RhbmNlIGhhcyBiZWVuIHRvbGQgdG8gZGVzdHJveSBpdHNlbGYuXHJcbiAqIExvdHMgb2YgaW50ZXJuYWwgc3lzdGVtcyBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBvcmRlciB0byBjbGVhciB0aGVtc2VsdmVzIG91dC5cclxuICogQ3VzdG9tIHBsdWdpbnMgYW5kIGdhbWUgY29kZSBzaG91bGQgYWxzbyBkbyB0aGUgc2FtZS5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Db3JlLkV2ZW50cyNERVNUUk9ZXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZGVzdHJveSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/DESTROY_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/core/events/FOCUS_EVENT.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/core/events/FOCUS_EVENT.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Focus Event.\r\n * \r\n * This event is dispatched by the Game Visibility Handler when the window in which the Game instance is embedded\r\n * enters a focused state. The focus event is raised when the window re-gains focus, having previously lost it.\r\n *\r\n * @event Phaser.Core.Events#FOCUS\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'focus';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9GT0NVU19FVkVOVC5qcz82ODMzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvZXZlbnRzL0ZPQ1VTX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgRm9jdXMgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIEdhbWUgVmlzaWJpbGl0eSBIYW5kbGVyIHdoZW4gdGhlIHdpbmRvdyBpbiB3aGljaCB0aGUgR2FtZSBpbnN0YW5jZSBpcyBlbWJlZGRlZFxyXG4gKiBlbnRlcnMgYSBmb2N1c2VkIHN0YXRlLiBUaGUgZm9jdXMgZXZlbnQgaXMgcmFpc2VkIHdoZW4gdGhlIHdpbmRvdyByZS1nYWlucyBmb2N1cywgaGF2aW5nIHByZXZpb3VzbHkgbG9zdCBpdC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Db3JlLkV2ZW50cyNGT0NVU1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2ZvY3VzJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/FOCUS_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/core/events/HIDDEN_EVENT.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/core/events/HIDDEN_EVENT.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Hidden Event.\r\n * \r\n * This event is dispatched by the Game Visibility Handler when the document in which the Game instance is embedded\r\n * enters a hidden state. Only browsers that support the Visibility API will cause this event to be emitted.\r\n * \r\n * In most modern browsers, when the document enters a hidden state, the Request Animation Frame and setTimeout, which\r\n * control the main game loop, will automatically pause. There is no way to stop this from happening. It is something\r\n * your game should account for in its own code, should the pause be an issue (i.e. for multiplayer games)\r\n *\r\n * @event Phaser.Core.Events#HIDDEN\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'hidden';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9ISURERU5fRVZFTlQuanM/N2RkZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvZXZlbnRzL0hJRERFTl9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIEhpZGRlbiBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgR2FtZSBWaXNpYmlsaXR5IEhhbmRsZXIgd2hlbiB0aGUgZG9jdW1lbnQgaW4gd2hpY2ggdGhlIEdhbWUgaW5zdGFuY2UgaXMgZW1iZWRkZWRcclxuICogZW50ZXJzIGEgaGlkZGVuIHN0YXRlLiBPbmx5IGJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0aGUgVmlzaWJpbGl0eSBBUEkgd2lsbCBjYXVzZSB0aGlzIGV2ZW50IHRvIGJlIGVtaXR0ZWQuXHJcbiAqIFxyXG4gKiBJbiBtb3N0IG1vZGVybiBicm93c2Vycywgd2hlbiB0aGUgZG9jdW1lbnQgZW50ZXJzIGEgaGlkZGVuIHN0YXRlLCB0aGUgUmVxdWVzdCBBbmltYXRpb24gRnJhbWUgYW5kIHNldFRpbWVvdXQsIHdoaWNoXHJcbiAqIGNvbnRyb2wgdGhlIG1haW4gZ2FtZSBsb29wLCB3aWxsIGF1dG9tYXRpY2FsbHkgcGF1c2UuIFRoZXJlIGlzIG5vIHdheSB0byBzdG9wIHRoaXMgZnJvbSBoYXBwZW5pbmcuIEl0IGlzIHNvbWV0aGluZ1xyXG4gKiB5b3VyIGdhbWUgc2hvdWxkIGFjY291bnQgZm9yIGluIGl0cyBvd24gY29kZSwgc2hvdWxkIHRoZSBwYXVzZSBiZSBhbiBpc3N1ZSAoaS5lLiBmb3IgbXVsdGlwbGF5ZXIgZ2FtZXMpXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQ29yZS5FdmVudHMjSElEREVOXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnaGlkZGVuJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/HIDDEN_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/core/events/PAUSE_EVENT.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/core/events/PAUSE_EVENT.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Pause Event.\r\n * \r\n * This event is dispatched when the Game loop enters a paused state, usually as a result of the Visibility Handler.\r\n *\r\n * @event Phaser.Core.Events#PAUSE\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'pause';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9QQVVTRV9FVkVOVC5qcz82MWQwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9QQVVTRV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIFBhdXNlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIHdoZW4gdGhlIEdhbWUgbG9vcCBlbnRlcnMgYSBwYXVzZWQgc3RhdGUsIHVzdWFsbHkgYXMgYSByZXN1bHQgb2YgdGhlIFZpc2liaWxpdHkgSGFuZGxlci5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Db3JlLkV2ZW50cyNQQVVTRVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3BhdXNlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/PAUSE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/core/events/POST_RENDER_EVENT.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/core/events/POST_RENDER_EVENT.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Post-Render Event.\r\n * \r\n * This event is dispatched right at the end of the render process.\r\n * \r\n * Every Scene will have rendered and been drawn to the canvas by the time this event is fired.\r\n * Use it for any last minute post-processing before the next game step begins.\r\n *\r\n * @event Phaser.Core.Events#POST_RENDER\r\n * @since 3.0.0\r\n * \r\n * @param {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)} renderer - A reference to the current renderer being used by the Game instance.\r\n */\r\nmodule.exports = 'postrender';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9QT1NUX1JFTkRFUl9FVkVOVC5qcz85Mzg3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw0RUFBNEU7QUFDdkY7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvZXZlbnRzL1BPU1RfUkVOREVSX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgUG9zdC1SZW5kZXIgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgcmlnaHQgYXQgdGhlIGVuZCBvZiB0aGUgcmVuZGVyIHByb2Nlc3MuXHJcbiAqIFxyXG4gKiBFdmVyeSBTY2VuZSB3aWxsIGhhdmUgcmVuZGVyZWQgYW5kIGJlZW4gZHJhd24gdG8gdGhlIGNhbnZhcyBieSB0aGUgdGltZSB0aGlzIGV2ZW50IGlzIGZpcmVkLlxyXG4gKiBVc2UgaXQgZm9yIGFueSBsYXN0IG1pbnV0ZSBwb3N0LXByb2Nlc3NpbmcgYmVmb3JlIHRoZSBuZXh0IGdhbWUgc3RlcCBiZWdpbnMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQ29yZS5FdmVudHMjUE9TVF9SRU5ERVJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0geyhQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyfFBoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyKX0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlciBiZWluZyB1c2VkIGJ5IHRoZSBHYW1lIGluc3RhbmNlLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAncG9zdHJlbmRlcic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/POST_RENDER_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/core/events/POST_STEP_EVENT.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/core/events/POST_STEP_EVENT.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Post-Step Event.\r\n * \r\n * This event is dispatched after the Scene Manager has updated.\r\n * Hook into it from plugins or systems that need to do things before the render starts.\r\n *\r\n * @event Phaser.Core.Events#POST_STEP\r\n * @since 3.0.0\r\n * \r\n * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n */\r\nmodule.exports = 'poststep';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9QT1NUX1NURVBfRVZFTlQuanM/NWY5MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY29yZS9ldmVudHMvUE9TVF9TVEVQX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgUG9zdC1TdGVwIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGFmdGVyIHRoZSBTY2VuZSBNYW5hZ2VyIGhhcyB1cGRhdGVkLlxyXG4gKiBIb29rIGludG8gaXQgZnJvbSBwbHVnaW5zIG9yIHN5c3RlbXMgdGhhdCBuZWVkIHRvIGRvIHRoaW5ncyBiZWZvcmUgdGhlIHJlbmRlciBzdGFydHMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQ29yZS5FdmVudHMjUE9TVF9TVEVQXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lLiBFaXRoZXIgYSBIaWdoIFJlc29sdXRpb24gVGltZXIgdmFsdWUgaWYgaXQgY29tZXMgZnJvbSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSwgb3IgRGF0ZS5ub3cgaWYgdXNpbmcgU2V0VGltZW91dC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUgaW4gbXMgc2luY2UgdGhlIGxhc3QgZnJhbWUuIFRoaXMgaXMgYSBzbW9vdGhlZCBhbmQgY2FwcGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBGUFMgcmF0ZS5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3Bvc3RzdGVwJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/POST_STEP_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/core/events/PRE_RENDER_EVENT.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/core/events/PRE_RENDER_EVENT.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Pre-Render Event.\r\n * \r\n * This event is dispatched immediately before any of the Scenes have started to render.\r\n * \r\n * The renderer will already have been initialized this frame, clearing itself and preparing to receive the Scenes for rendering, but it won't have actually drawn anything yet.\r\n *\r\n * @event Phaser.Core.Events#PRE_RENDER\r\n * @since 3.0.0\r\n * \r\n * @param {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)} renderer - A reference to the current renderer being used by the Game instance.\r\n */\r\nmodule.exports = 'prerender';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9QUkVfUkVOREVSX0VWRU5ULmpzP2NjZGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw0RUFBNEU7QUFDdkY7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvZXZlbnRzL1BSRV9SRU5ERVJfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgR2FtZSBQcmUtUmVuZGVyIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGltbWVkaWF0ZWx5IGJlZm9yZSBhbnkgb2YgdGhlIFNjZW5lcyBoYXZlIHN0YXJ0ZWQgdG8gcmVuZGVyLlxyXG4gKiBcclxuICogVGhlIHJlbmRlcmVyIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgdGhpcyBmcmFtZSwgY2xlYXJpbmcgaXRzZWxmIGFuZCBwcmVwYXJpbmcgdG8gcmVjZWl2ZSB0aGUgU2NlbmVzIGZvciByZW5kZXJpbmcsIGJ1dCBpdCB3b24ndCBoYXZlIGFjdHVhbGx5IGRyYXduIGFueXRoaW5nIHlldC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Db3JlLkV2ZW50cyNQUkVfUkVOREVSXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHsoUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcnxQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcil9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXIgYmVpbmcgdXNlZCBieSB0aGUgR2FtZSBpbnN0YW5jZS5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3ByZXJlbmRlcic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/PRE_RENDER_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/core/events/PRE_STEP_EVENT.js":
/*!***************************************************************!*\
!*** ./node_modules/phaser/src/core/events/PRE_STEP_EVENT.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Pre-Step Event.\r\n * \r\n * This event is dispatched before the main Game Step starts. By this point in the game cycle none of the Scene updates have yet happened.\r\n * Hook into it from plugins or systems that need to update before the Scene Manager does.\r\n *\r\n * @event Phaser.Core.Events#PRE_STEP\r\n * @since 3.0.0\r\n * \r\n * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n */\r\nmodule.exports = 'prestep';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9QUkVfU1RFUF9FVkVOVC5qcz9hN2E4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9QUkVfU1RFUF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIFByZS1TdGVwIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJlZm9yZSB0aGUgbWFpbiBHYW1lIFN0ZXAgc3RhcnRzLiBCeSB0aGlzIHBvaW50IGluIHRoZSBnYW1lIGN5Y2xlIG5vbmUgb2YgdGhlIFNjZW5lIHVwZGF0ZXMgaGF2ZSB5ZXQgaGFwcGVuZWQuXHJcbiAqIEhvb2sgaW50byBpdCBmcm9tIHBsdWdpbnMgb3Igc3lzdGVtcyB0aGF0IG5lZWQgdG8gdXBkYXRlIGJlZm9yZSB0aGUgU2NlbmUgTWFuYWdlciBkb2VzLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkNvcmUuRXZlbnRzI1BSRV9TVEVQXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lLiBFaXRoZXIgYSBIaWdoIFJlc29sdXRpb24gVGltZXIgdmFsdWUgaWYgaXQgY29tZXMgZnJvbSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSwgb3IgRGF0ZS5ub3cgaWYgdXNpbmcgU2V0VGltZW91dC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUgaW4gbXMgc2luY2UgdGhlIGxhc3QgZnJhbWUuIFRoaXMgaXMgYSBzbW9vdGhlZCBhbmQgY2FwcGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBGUFMgcmF0ZS5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3ByZXN0ZXAnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/PRE_STEP_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/core/events/READY_EVENT.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/core/events/READY_EVENT.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Ready Event.\r\n * \r\n * This event is dispatched when the Phaser Game instance has finished booting, the Texture Manager is fully ready,\r\n * and all local systems are now able to start.\r\n *\r\n * @event Phaser.Core.Events#READY\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'ready';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9SRUFEWV9FVkVOVC5qcz82MDIzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvZXZlbnRzL1JFQURZX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgUmVhZHkgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgd2hlbiB0aGUgUGhhc2VyIEdhbWUgaW5zdGFuY2UgaGFzIGZpbmlzaGVkIGJvb3RpbmcsIHRoZSBUZXh0dXJlIE1hbmFnZXIgaXMgZnVsbHkgcmVhZHksXHJcbiAqIGFuZCBhbGwgbG9jYWwgc3lzdGVtcyBhcmUgbm93IGFibGUgdG8gc3RhcnQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuQ29yZS5FdmVudHMjUkVBRFlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdyZWFkeSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/READY_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/core/events/RESUME_EVENT.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/core/events/RESUME_EVENT.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Resume Event.\r\n * \r\n * This event is dispatched when the game loop leaves a paused state and resumes running.\r\n *\r\n * @event Phaser.Core.Events#RESUME\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'resume';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9SRVNVTUVfRVZFTlQuanM/YzYxZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY29yZS9ldmVudHMvUkVTVU1FX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgUmVzdW1lIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIHdoZW4gdGhlIGdhbWUgbG9vcCBsZWF2ZXMgYSBwYXVzZWQgc3RhdGUgYW5kIHJlc3VtZXMgcnVubmluZy5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Db3JlLkV2ZW50cyNSRVNVTUVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdyZXN1bWUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/RESUME_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/core/events/STEP_EVENT.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/core/events/STEP_EVENT.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Step Event.\r\n * \r\n * This event is dispatched after the Game Pre-Step and before the Scene Manager steps.\r\n * Hook into it from plugins or systems that need to update before the Scene Manager does, but after the core Systems have.\r\n *\r\n * @event Phaser.Core.Events#STEP\r\n * @since 3.0.0\r\n * \r\n * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n */\r\nmodule.exports = 'step';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9TVEVQX0VWRU5ULmpzP2MzOGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvZXZlbnRzL1NURVBfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgR2FtZSBTdGVwIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGFmdGVyIHRoZSBHYW1lIFByZS1TdGVwIGFuZCBiZWZvcmUgdGhlIFNjZW5lIE1hbmFnZXIgc3RlcHMuXHJcbiAqIEhvb2sgaW50byBpdCBmcm9tIHBsdWdpbnMgb3Igc3lzdGVtcyB0aGF0IG5lZWQgdG8gdXBkYXRlIGJlZm9yZSB0aGUgU2NlbmUgTWFuYWdlciBkb2VzLCBidXQgYWZ0ZXIgdGhlIGNvcmUgU3lzdGVtcyBoYXZlLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkNvcmUuRXZlbnRzI1NURVBcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZSAtIFRoZSBjdXJyZW50IHRpbWUuIEVpdGhlciBhIEhpZ2ggUmVzb2x1dGlvbiBUaW1lciB2YWx1ZSBpZiBpdCBjb21lcyBmcm9tIFJlcXVlc3QgQW5pbWF0aW9uIEZyYW1lLCBvciBEYXRlLm5vdyBpZiB1c2luZyBTZXRUaW1lb3V0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZGVsdGEgLSBUaGUgZGVsdGEgdGltZSBpbiBtcyBzaW5jZSB0aGUgbGFzdCBmcmFtZS4gVGhpcyBpcyBhIHNtb290aGVkIGFuZCBjYXBwZWQgdmFsdWUgYmFzZWQgb24gdGhlIEZQUyByYXRlLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnc3RlcCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/STEP_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/core/events/VISIBLE_EVENT.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/core/events/VISIBLE_EVENT.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Visible Event.\r\n * \r\n * This event is dispatched by the Game Visibility Handler when the document in which the Game instance is embedded\r\n * enters a visible state, previously having been hidden.\r\n * \r\n * Only browsers that support the Visibility API will cause this event to be emitted.\r\n *\r\n * @event Phaser.Core.Events#VISIBLE\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'visible';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9WSVNJQkxFX0VWRU5ULmpzPzEwYzEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvZXZlbnRzL1ZJU0lCTEVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgR2FtZSBWaXNpYmxlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBHYW1lIFZpc2liaWxpdHkgSGFuZGxlciB3aGVuIHRoZSBkb2N1bWVudCBpbiB3aGljaCB0aGUgR2FtZSBpbnN0YW5jZSBpcyBlbWJlZGRlZFxyXG4gKiBlbnRlcnMgYSB2aXNpYmxlIHN0YXRlLCBwcmV2aW91c2x5IGhhdmluZyBiZWVuIGhpZGRlbi5cclxuICogXHJcbiAqIE9ubHkgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHRoZSBWaXNpYmlsaXR5IEFQSSB3aWxsIGNhdXNlIHRoaXMgZXZlbnQgdG8gYmUgZW1pdHRlZC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Db3JlLkV2ZW50cyNWSVNJQkxFXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAndmlzaWJsZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/VISIBLE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/core/events/index.js":
/*!******************************************************!*\
!*** ./node_modules/phaser/src/core/events/index.js ***!
\******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Core.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n BLUR: __webpack_require__(/*! ./BLUR_EVENT */ \"./node_modules/phaser/src/core/events/BLUR_EVENT.js\"),\r\n BOOT: __webpack_require__(/*! ./BOOT_EVENT */ \"./node_modules/phaser/src/core/events/BOOT_EVENT.js\"),\r\n CONTEXT_LOST: __webpack_require__(/*! ./CONTEXT_LOST_EVENT */ \"./node_modules/phaser/src/core/events/CONTEXT_LOST_EVENT.js\"),\r\n CONTEXT_RESTORED: __webpack_require__(/*! ./CONTEXT_RESTORED_EVENT */ \"./node_modules/phaser/src/core/events/CONTEXT_RESTORED_EVENT.js\"),\r\n DESTROY: __webpack_require__(/*! ./DESTROY_EVENT */ \"./node_modules/phaser/src/core/events/DESTROY_EVENT.js\"),\r\n FOCUS: __webpack_require__(/*! ./FOCUS_EVENT */ \"./node_modules/phaser/src/core/events/FOCUS_EVENT.js\"),\r\n HIDDEN: __webpack_require__(/*! ./HIDDEN_EVENT */ \"./node_modules/phaser/src/core/events/HIDDEN_EVENT.js\"),\r\n PAUSE: __webpack_require__(/*! ./PAUSE_EVENT */ \"./node_modules/phaser/src/core/events/PAUSE_EVENT.js\"),\r\n POST_RENDER: __webpack_require__(/*! ./POST_RENDER_EVENT */ \"./node_modules/phaser/src/core/events/POST_RENDER_EVENT.js\"),\r\n POST_STEP: __webpack_require__(/*! ./POST_STEP_EVENT */ \"./node_modules/phaser/src/core/events/POST_STEP_EVENT.js\"),\r\n PRE_RENDER: __webpack_require__(/*! ./PRE_RENDER_EVENT */ \"./node_modules/phaser/src/core/events/PRE_RENDER_EVENT.js\"),\r\n PRE_STEP: __webpack_require__(/*! ./PRE_STEP_EVENT */ \"./node_modules/phaser/src/core/events/PRE_STEP_EVENT.js\"),\r\n READY: __webpack_require__(/*! ./READY_EVENT */ \"./node_modules/phaser/src/core/events/READY_EVENT.js\"),\r\n RESUME: __webpack_require__(/*! ./RESUME_EVENT */ \"./node_modules/phaser/src/core/events/RESUME_EVENT.js\"),\r\n STEP: __webpack_require__(/*! ./STEP_EVENT */ \"./node_modules/phaser/src/core/events/STEP_EVENT.js\"),\r\n VISIBLE: __webpack_require__(/*! ./VISIBLE_EVENT */ \"./node_modules/phaser/src/core/events/VISIBLE_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2V2ZW50cy9pbmRleC5qcz84MDU3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsVUFBVSxtQkFBTyxDQUFDLHlFQUFjO0FBQ2hDLFVBQVUsbUJBQU8sQ0FBQyx5RUFBYztBQUNoQyxrQkFBa0IsbUJBQU8sQ0FBQyx5RkFBc0I7QUFDaEQsc0JBQXNCLG1CQUFPLENBQUMsaUdBQTBCO0FBQ3hELGFBQWEsbUJBQU8sQ0FBQywrRUFBaUI7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLDJFQUFlO0FBQ2xDLFlBQVksbUJBQU8sQ0FBQyw2RUFBZ0I7QUFDcEMsV0FBVyxtQkFBTyxDQUFDLDJFQUFlO0FBQ2xDLGlCQUFpQixtQkFBTyxDQUFDLHVGQUFxQjtBQUM5QyxlQUFlLG1CQUFPLENBQUMsbUZBQW1CO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLHFGQUFvQjtBQUM1QyxjQUFjLG1CQUFPLENBQUMsaUZBQWtCO0FBQ3hDLFdBQVcsbUJBQU8sQ0FBQywyRUFBZTtBQUNsQyxZQUFZLG1CQUFPLENBQUMsNkVBQWdCO0FBQ3BDLFVBQVUsbUJBQU8sQ0FBQyx5RUFBYztBQUNoQyxhQUFhLG1CQUFPLENBQUMsK0VBQWlCOztBQUV0QyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvZXZlbnRzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuQ29yZS5FdmVudHNcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBCTFVSOiByZXF1aXJlKCcuL0JMVVJfRVZFTlQnKSxcclxuICAgIEJPT1Q6IHJlcXVpcmUoJy4vQk9PVF9FVkVOVCcpLFxyXG4gICAgQ09OVEVYVF9MT1NUOiByZXF1aXJlKCcuL0NPTlRFWFRfTE9TVF9FVkVOVCcpLFxyXG4gICAgQ09OVEVYVF9SRVNUT1JFRDogcmVxdWlyZSgnLi9DT05URVhUX1JFU1RPUkVEX0VWRU5UJyksXHJcbiAgICBERVNUUk9ZOiByZXF1aXJlKCcuL0RFU1RST1lfRVZFTlQnKSxcclxuICAgIEZPQ1VTOiByZXF1aXJlKCcuL0ZPQ1VTX0VWRU5UJyksXHJcbiAgICBISURERU46IHJlcXVpcmUoJy4vSElEREVOX0VWRU5UJyksXHJcbiAgICBQQVVTRTogcmVxdWlyZSgnLi9QQVVTRV9FVkVOVCcpLFxyXG4gICAgUE9TVF9SRU5ERVI6IHJlcXVpcmUoJy4vUE9TVF9SRU5ERVJfRVZFTlQnKSxcclxuICAgIFBPU1RfU1RFUDogcmVxdWlyZSgnLi9QT1NUX1NURVBfRVZFTlQnKSxcclxuICAgIFBSRV9SRU5ERVI6IHJlcXVpcmUoJy4vUFJFX1JFTkRFUl9FVkVOVCcpLFxyXG4gICAgUFJFX1NURVA6IHJlcXVpcmUoJy4vUFJFX1NURVBfRVZFTlQnKSxcclxuICAgIFJFQURZOiByZXF1aXJlKCcuL1JFQURZX0VWRU5UJyksXHJcbiAgICBSRVNVTUU6IHJlcXVpcmUoJy4vUkVTVU1FX0VWRU5UJyksXHJcbiAgICBTVEVQOiByZXF1aXJlKCcuL1NURVBfRVZFTlQnKSxcclxuICAgIFZJU0lCTEU6IHJlcXVpcmUoJy4vVklTSUJMRV9FVkVOVCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/events/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/core/index.js":
/*!***********************************************!*\
!*** ./node_modules/phaser/src/core/index.js ***!
\***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Core\r\n */\r\n\r\nmodule.exports = {\r\n\r\n Config: __webpack_require__(/*! ./Config */ \"./node_modules/phaser/src/core/Config.js\"),\r\n CreateRenderer: __webpack_require__(/*! ./CreateRenderer */ \"./node_modules/phaser/src/core/CreateRenderer.js\"),\r\n DebugHeader: __webpack_require__(/*! ./DebugHeader */ \"./node_modules/phaser/src/core/DebugHeader.js\"),\r\n Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/core/events/index.js\"),\r\n TimeStep: __webpack_require__(/*! ./TimeStep */ \"./node_modules/phaser/src/core/TimeStep.js\"),\r\n VisibilityHandler: __webpack_require__(/*! ./VisibilityHandler */ \"./node_modules/phaser/src/core/VisibilityHandler.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jb3JlL2luZGV4LmpzP2U4NDciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxZQUFZLG1CQUFPLENBQUMsMERBQVU7QUFDOUIsb0JBQW9CLG1CQUFPLENBQUMsMEVBQWtCO0FBQzlDLGlCQUFpQixtQkFBTyxDQUFDLG9FQUFlO0FBQ3hDLFlBQVksbUJBQU8sQ0FBQyxnRUFBVTtBQUM5QixjQUFjLG1CQUFPLENBQUMsOERBQVk7QUFDbEMsdUJBQXVCLG1CQUFPLENBQUMsZ0ZBQXFCOztBQUVwRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NvcmUvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5Db3JlXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQ29uZmlnOiByZXF1aXJlKCcuL0NvbmZpZycpLFxyXG4gICAgQ3JlYXRlUmVuZGVyZXI6IHJlcXVpcmUoJy4vQ3JlYXRlUmVuZGVyZXInKSxcclxuICAgIERlYnVnSGVhZGVyOiByZXF1aXJlKCcuL0RlYnVnSGVhZGVyJyksXHJcbiAgICBFdmVudHM6IHJlcXVpcmUoJy4vZXZlbnRzJyksXHJcbiAgICBUaW1lU3RlcDogcmVxdWlyZSgnLi9UaW1lU3RlcCcpLFxyXG4gICAgVmlzaWJpbGl0eUhhbmRsZXI6IHJlcXVpcmUoJy4vVmlzaWJpbGl0eUhhbmRsZXInKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/core/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/create/GenerateTexture.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/create/GenerateTexture.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Arne16 = __webpack_require__(/*! ./palettes/Arne16 */ \"./node_modules/phaser/src/create/palettes/Arne16.js\");\r\nvar CanvasPool = __webpack_require__(/*! ../display/canvas/CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\");\r\nvar GetValue = __webpack_require__(/*! ../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Create.GenerateTexture\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Create.GenerateTextureConfig} config - [description]\r\n *\r\n * @return {HTMLCanvasElement} [description]\r\n */\r\nvar GenerateTexture = function (config)\r\n{\r\n var data = GetValue(config, 'data', []);\r\n var canvas = GetValue(config, 'canvas', null);\r\n var palette = GetValue(config, 'palette', Arne16);\r\n var pixelWidth = GetValue(config, 'pixelWidth', 1);\r\n var pixelHeight = GetValue(config, 'pixelHeight', pixelWidth);\r\n var resizeCanvas = GetValue(config, 'resizeCanvas', true);\r\n var clearCanvas = GetValue(config, 'clearCanvas', true);\r\n var preRender = GetValue(config, 'preRender', null);\r\n var postRender = GetValue(config, 'postRender', null);\r\n\r\n var width = Math.floor(Math.abs(data[0].length * pixelWidth));\r\n var height = Math.floor(Math.abs(data.length * pixelHeight));\r\n\r\n if (!canvas)\r\n {\r\n canvas = CanvasPool.create2D(this, width, height);\r\n resizeCanvas = false;\r\n clearCanvas = false;\r\n }\r\n\r\n if (resizeCanvas)\r\n {\r\n canvas.width = width;\r\n canvas.height = height;\r\n }\r\n\r\n var ctx = canvas.getContext('2d');\r\n\r\n if (clearCanvas)\r\n {\r\n ctx.clearRect(0, 0, width, height);\r\n }\r\n\r\n // preRender Callback?\r\n if (preRender)\r\n {\r\n preRender(canvas, ctx);\r\n }\r\n\r\n // Draw it\r\n for (var y = 0; y < data.length; y++)\r\n {\r\n var row = data[y];\r\n\r\n for (var x = 0; x < row.length; x++)\r\n {\r\n var d = row[x];\r\n\r\n if (d !== '.' && d !== ' ')\r\n {\r\n ctx.fillStyle = palette[d];\r\n ctx.fillRect(x * pixelWidth, y * pixelHeight, pixelWidth, pixelHeight);\r\n }\r\n }\r\n }\r\n\r\n // postRender Callback?\r\n if (postRender)\r\n {\r\n postRender(canvas, ctx);\r\n }\r\n\r\n return canvas;\r\n};\r\n\r\nmodule.exports = GenerateTexture;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jcmVhdGUvR2VuZXJhdGVUZXh0dXJlLmpzPzNkNDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyw4RUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsNEZBQThCO0FBQ3ZELGVBQWUsbUJBQU8sQ0FBQyxvRkFBMEI7O0FBRWpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMENBQTBDO0FBQ3JEO0FBQ0EsWUFBWSxrQkFBa0I7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixpQkFBaUI7QUFDcEM7QUFDQTs7QUFFQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY3JlYXRlL0dlbmVyYXRlVGV4dHVyZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEFybmUxNiA9IHJlcXVpcmUoJy4vcGFsZXR0ZXMvQXJuZTE2Jyk7XHJcbnZhciBDYW52YXNQb29sID0gcmVxdWlyZSgnLi4vZGlzcGxheS9jYW52YXMvQ2FudmFzUG9vbCcpO1xyXG52YXIgR2V0VmFsdWUgPSByZXF1aXJlKCcuLi91dGlscy9vYmplY3QvR2V0VmFsdWUnKTtcclxuXHJcbi8qKlxyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQ3JlYXRlLkdlbmVyYXRlVGV4dHVyZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuQ3JlYXRlLkdlbmVyYXRlVGV4dHVyZUNvbmZpZ30gY29uZmlnIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gW2Rlc2NyaXB0aW9uXVxyXG4gKi9cclxudmFyIEdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChjb25maWcpXHJcbntcclxuICAgIHZhciBkYXRhID0gR2V0VmFsdWUoY29uZmlnLCAnZGF0YScsIFtdKTtcclxuICAgIHZhciBjYW52YXMgPSBHZXRWYWx1ZShjb25maWcsICdjYW52YXMnLCBudWxsKTtcclxuICAgIHZhciBwYWxldHRlID0gR2V0VmFsdWUoY29uZmlnLCAncGFsZXR0ZScsIEFybmUxNik7XHJcbiAgICB2YXIgcGl4ZWxXaWR0aCA9IEdldFZhbHVlKGNvbmZpZywgJ3BpeGVsV2lkdGgnLCAxKTtcclxuICAgIHZhciBwaXhlbEhlaWdodCA9IEdldFZhbHVlKGNvbmZpZywgJ3BpeGVsSGVpZ2h0JywgcGl4ZWxXaWR0aCk7XHJcbiAgICB2YXIgcmVzaXplQ2FudmFzID0gR2V0VmFsdWUoY29uZmlnLCAncmVzaXplQ2FudmFzJywgdHJ1ZSk7XHJcbiAgICB2YXIgY2xlYXJDYW52YXMgPSBHZXRWYWx1ZShjb25maWcsICdjbGVhckNhbnZhcycsIHRydWUpO1xyXG4gICAgdmFyIHByZVJlbmRlciA9IEdldFZhbHVlKGNvbmZpZywgJ3ByZVJlbmRlcicsIG51bGwpO1xyXG4gICAgdmFyIHBvc3RSZW5kZXIgPSBHZXRWYWx1ZShjb25maWcsICdwb3N0UmVuZGVyJywgbnVsbCk7XHJcblxyXG4gICAgdmFyIHdpZHRoID0gTWF0aC5mbG9vcihNYXRoLmFicyhkYXRhWzBdLmxlbmd0aCAqIHBpeGVsV2lkdGgpKTtcclxuICAgIHZhciBoZWlnaHQgPSBNYXRoLmZsb29yKE1hdGguYWJzKGRhdGEubGVuZ3RoICogcGl4ZWxIZWlnaHQpKTtcclxuXHJcbiAgICBpZiAoIWNhbnZhcylcclxuICAgIHtcclxuICAgICAgICBjYW52YXMgPSBDYW52YXNQb29sLmNyZWF0ZTJEKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgIHJlc2l6ZUNhbnZhcyA9IGZhbHNlO1xyXG4gICAgICAgIGNsZWFyQ2FudmFzID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlc2l6ZUNhbnZhcylcclxuICAgIHtcclxuICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuXHJcbiAgICBpZiAoY2xlYXJDYW52YXMpXHJcbiAgICB7XHJcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgcHJlUmVuZGVyIENhbGxiYWNrP1xyXG4gICAgaWYgKHByZVJlbmRlcilcclxuICAgIHtcclxuICAgICAgICBwcmVSZW5kZXIoY2FudmFzLCBjdHgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBEcmF3IGl0XHJcbiAgICBmb3IgKHZhciB5ID0gMDsgeSA8IGRhdGEubGVuZ3RoOyB5KyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHJvdyA9IGRhdGFbeV07XHJcblxyXG4gICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgcm93Lmxlbmd0aDsgeCsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGQgPSByb3dbeF07XHJcblxyXG4gICAgICAgICAgICBpZiAoZCAhPT0gJy4nICYmIGQgIT09ICcgJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHBhbGV0dGVbZF07XHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoeCAqIHBpeGVsV2lkdGgsIHkgKiBwaXhlbEhlaWdodCwgcGl4ZWxXaWR0aCwgcGl4ZWxIZWlnaHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vICBwb3N0UmVuZGVyIENhbGxiYWNrP1xyXG4gICAgaWYgKHBvc3RSZW5kZXIpXHJcbiAgICB7XHJcbiAgICAgICAgcG9zdFJlbmRlcihjYW52YXMsIGN0eCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNhbnZhcztcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2VuZXJhdGVUZXh0dXJlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/create/GenerateTexture.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/create/index.js":
/*!*************************************************!*\
!*** ./node_modules/phaser/src/create/index.js ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Create\r\n */\r\n\r\nmodule.exports = {\r\n \r\n GenerateTexture: __webpack_require__(/*! ./GenerateTexture */ \"./node_modules/phaser/src/create/GenerateTexture.js\"),\r\n Palettes: __webpack_require__(/*! ./palettes */ \"./node_modules/phaser/src/create/palettes/index.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jcmVhdGUvaW5kZXguanM/OWIwYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLHFCQUFxQixtQkFBTyxDQUFDLDhFQUFtQjtBQUNoRCxjQUFjLG1CQUFPLENBQUMsc0VBQVk7O0FBRWxDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY3JlYXRlL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuQ3JlYXRlXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgXHJcbiAgICBHZW5lcmF0ZVRleHR1cmU6IHJlcXVpcmUoJy4vR2VuZXJhdGVUZXh0dXJlJyksXHJcbiAgICBQYWxldHRlczogcmVxdWlyZSgnLi9wYWxldHRlcycpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/create/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/create/palettes/Arne16.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/create/palettes/Arne16.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * A 16 color palette by [Arne](http://androidarts.com/palette/16pal.htm)\r\n *\r\n * @name Phaser.Create.Palettes.ARNE16\r\n * @since 3.0.0\r\n *\r\n * @type {Phaser.Types.Create.Palette}\r\n */\r\nmodule.exports = {\r\n 0: '#000',\r\n 1: '#9D9D9D',\r\n 2: '#FFF',\r\n 3: '#BE2633',\r\n 4: '#E06F8B',\r\n 5: '#493C2B',\r\n 6: '#A46422',\r\n 7: '#EB8931',\r\n 8: '#F7E26B',\r\n 9: '#2F484E',\r\n A: '#44891A',\r\n B: '#A3CE27',\r\n C: '#1B2632',\r\n D: '#005784',\r\n E: '#31A2F2',\r\n F: '#B2DCEF'\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jcmVhdGUvcGFsZXR0ZXMvQXJuZTE2LmpzPzkzNWQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NyZWF0ZS9wYWxldHRlcy9Bcm5lMTYuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIDE2IGNvbG9yIHBhbGV0dGUgYnkgW0FybmVdKGh0dHA6Ly9hbmRyb2lkYXJ0cy5jb20vcGFsZXR0ZS8xNnBhbC5odG0pXHJcbiAqXHJcbiAqIEBuYW1lIFBoYXNlci5DcmVhdGUuUGFsZXR0ZXMuQVJORTE2XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAdHlwZSB7UGhhc2VyLlR5cGVzLkNyZWF0ZS5QYWxldHRlfVxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICAwOiAnIzAwMCcsXHJcbiAgICAxOiAnIzlEOUQ5RCcsXHJcbiAgICAyOiAnI0ZGRicsXHJcbiAgICAzOiAnI0JFMjYzMycsXHJcbiAgICA0OiAnI0UwNkY4QicsXHJcbiAgICA1OiAnIzQ5M0MyQicsXHJcbiAgICA2OiAnI0E0NjQyMicsXHJcbiAgICA3OiAnI0VCODkzMScsXHJcbiAgICA4OiAnI0Y3RTI2QicsXHJcbiAgICA5OiAnIzJGNDg0RScsXHJcbiAgICBBOiAnIzQ0ODkxQScsXHJcbiAgICBCOiAnI0EzQ0UyNycsXHJcbiAgICBDOiAnIzFCMjYzMicsXHJcbiAgICBEOiAnIzAwNTc4NCcsXHJcbiAgICBFOiAnIzMxQTJGMicsXHJcbiAgICBGOiAnI0IyRENFRidcclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/create/palettes/Arne16.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/create/palettes/C64.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/create/palettes/C64.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * A 16 color palette inspired by the Commodore 64.\r\n *\r\n * @name Phaser.Create.Palettes.C64\r\n * @since 3.0.0\r\n *\r\n * @type {Phaser.Types.Create.Palette}\r\n */\r\nmodule.exports = {\r\n 0: '#000',\r\n 1: '#fff',\r\n 2: '#8b4131',\r\n 3: '#7bbdc5',\r\n 4: '#8b41ac',\r\n 5: '#6aac41',\r\n 6: '#3931a4',\r\n 7: '#d5de73',\r\n 8: '#945a20',\r\n 9: '#5a4100',\r\n A: '#bd736a',\r\n B: '#525252',\r\n C: '#838383',\r\n D: '#acee8b',\r\n E: '#7b73de',\r\n F: '#acacac'\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jcmVhdGUvcGFsZXR0ZXMvQzY0LmpzPzU5MTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NyZWF0ZS9wYWxldHRlcy9DNjQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIDE2IGNvbG9yIHBhbGV0dGUgaW5zcGlyZWQgYnkgdGhlIENvbW1vZG9yZSA2NC5cclxuICpcclxuICogQG5hbWUgUGhhc2VyLkNyZWF0ZS5QYWxldHRlcy5DNjRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEB0eXBlIHtQaGFzZXIuVHlwZXMuQ3JlYXRlLlBhbGV0dGV9XHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuICAgIDA6ICcjMDAwJyxcclxuICAgIDE6ICcjZmZmJyxcclxuICAgIDI6ICcjOGI0MTMxJyxcclxuICAgIDM6ICcjN2JiZGM1JyxcclxuICAgIDQ6ICcjOGI0MWFjJyxcclxuICAgIDU6ICcjNmFhYzQxJyxcclxuICAgIDY6ICcjMzkzMWE0JyxcclxuICAgIDc6ICcjZDVkZTczJyxcclxuICAgIDg6ICcjOTQ1YTIwJyxcclxuICAgIDk6ICcjNWE0MTAwJyxcclxuICAgIEE6ICcjYmQ3MzZhJyxcclxuICAgIEI6ICcjNTI1MjUyJyxcclxuICAgIEM6ICcjODM4MzgzJyxcclxuICAgIEQ6ICcjYWNlZThiJyxcclxuICAgIEU6ICcjN2I3M2RlJyxcclxuICAgIEY6ICcjYWNhY2FjJ1xyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/create/palettes/C64.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/create/palettes/CGA.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/create/palettes/CGA.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * A 16 color CGA inspired palette by [Arne](http://androidarts.com/palette/16pal.htm)\r\n *\r\n * @name Phaser.Create.Palettes.CGA\r\n * @since 3.0.0\r\n *\r\n * @type {Phaser.Types.Create.Palette}\r\n */\r\nmodule.exports = {\r\n 0: '#000',\r\n 1: '#2234d1',\r\n 2: '#0c7e45',\r\n 3: '#44aacc',\r\n 4: '#8a3622',\r\n 5: '#5c2e78',\r\n 6: '#aa5c3d',\r\n 7: '#b5b5b5',\r\n 8: '#5e606e',\r\n 9: '#4c81fb',\r\n A: '#6cd947',\r\n B: '#7be2f9',\r\n C: '#eb8a60',\r\n D: '#e23d69',\r\n E: '#ffd93f',\r\n F: '#fff'\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jcmVhdGUvcGFsZXR0ZXMvQ0dBLmpzPzY5ZGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NyZWF0ZS9wYWxldHRlcy9DR0EuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIDE2IGNvbG9yIENHQSBpbnNwaXJlZCBwYWxldHRlIGJ5IFtBcm5lXShodHRwOi8vYW5kcm9pZGFydHMuY29tL3BhbGV0dGUvMTZwYWwuaHRtKVxyXG4gKlxyXG4gKiBAbmFtZSBQaGFzZXIuQ3JlYXRlLlBhbGV0dGVzLkNHQVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHR5cGUge1BoYXNlci5UeXBlcy5DcmVhdGUuUGFsZXR0ZX1cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gICAgMDogJyMwMDAnLFxyXG4gICAgMTogJyMyMjM0ZDEnLFxyXG4gICAgMjogJyMwYzdlNDUnLFxyXG4gICAgMzogJyM0NGFhY2MnLFxyXG4gICAgNDogJyM4YTM2MjInLFxyXG4gICAgNTogJyM1YzJlNzgnLFxyXG4gICAgNjogJyNhYTVjM2QnLFxyXG4gICAgNzogJyNiNWI1YjUnLFxyXG4gICAgODogJyM1ZTYwNmUnLFxyXG4gICAgOTogJyM0YzgxZmInLFxyXG4gICAgQTogJyM2Y2Q5NDcnLFxyXG4gICAgQjogJyM3YmUyZjknLFxyXG4gICAgQzogJyNlYjhhNjAnLFxyXG4gICAgRDogJyNlMjNkNjknLFxyXG4gICAgRTogJyNmZmQ5M2YnLFxyXG4gICAgRjogJyNmZmYnXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/create/palettes/CGA.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/create/palettes/JMP.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/create/palettes/JMP.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * A 16 color JMP palette by [Arne](http://androidarts.com/palette/16pal.htm)\r\n *\r\n * @name Phaser.Create.Palettes.JMP\r\n * @since 3.0.0\r\n *\r\n * @type {Phaser.Types.Create.Palette}\r\n */\r\nmodule.exports = {\r\n 0: '#000',\r\n 1: '#191028',\r\n 2: '#46af45',\r\n 3: '#a1d685',\r\n 4: '#453e78',\r\n 5: '#7664fe',\r\n 6: '#833129',\r\n 7: '#9ec2e8',\r\n 8: '#dc534b',\r\n 9: '#e18d79',\r\n A: '#d6b97b',\r\n B: '#e9d8a1',\r\n C: '#216c4b',\r\n D: '#d365c8',\r\n E: '#afaab9',\r\n F: '#f5f4eb'\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jcmVhdGUvcGFsZXR0ZXMvSk1QLmpzP2FhMmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NyZWF0ZS9wYWxldHRlcy9KTVAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIDE2IGNvbG9yIEpNUCBwYWxldHRlIGJ5IFtBcm5lXShodHRwOi8vYW5kcm9pZGFydHMuY29tL3BhbGV0dGUvMTZwYWwuaHRtKVxyXG4gKlxyXG4gKiBAbmFtZSBQaGFzZXIuQ3JlYXRlLlBhbGV0dGVzLkpNUFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHR5cGUge1BoYXNlci5UeXBlcy5DcmVhdGUuUGFsZXR0ZX1cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gICAgMDogJyMwMDAnLFxyXG4gICAgMTogJyMxOTEwMjgnLFxyXG4gICAgMjogJyM0NmFmNDUnLFxyXG4gICAgMzogJyNhMWQ2ODUnLFxyXG4gICAgNDogJyM0NTNlNzgnLFxyXG4gICAgNTogJyM3NjY0ZmUnLFxyXG4gICAgNjogJyM4MzMxMjknLFxyXG4gICAgNzogJyM5ZWMyZTgnLFxyXG4gICAgODogJyNkYzUzNGInLFxyXG4gICAgOTogJyNlMThkNzknLFxyXG4gICAgQTogJyNkNmI5N2InLFxyXG4gICAgQjogJyNlOWQ4YTEnLFxyXG4gICAgQzogJyMyMTZjNGInLFxyXG4gICAgRDogJyNkMzY1YzgnLFxyXG4gICAgRTogJyNhZmFhYjknLFxyXG4gICAgRjogJyNmNWY0ZWInXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/create/palettes/JMP.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/create/palettes/MSX.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/create/palettes/MSX.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * A 16 color palette inspired by Japanese computers like the MSX.\r\n *\r\n * @name Phaser.Create.Palettes.MSX\r\n * @since 3.0.0\r\n *\r\n * @type {Phaser.Types.Create.Palette}\r\n */\r\nmodule.exports = {\r\n 0: '#000',\r\n 1: '#191028',\r\n 2: '#46af45',\r\n 3: '#a1d685',\r\n 4: '#453e78',\r\n 5: '#7664fe',\r\n 6: '#833129',\r\n 7: '#9ec2e8',\r\n 8: '#dc534b',\r\n 9: '#e18d79',\r\n A: '#d6b97b',\r\n B: '#e9d8a1',\r\n C: '#216c4b',\r\n D: '#d365c8',\r\n E: '#afaab9',\r\n F: '#fff'\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jcmVhdGUvcGFsZXR0ZXMvTVNYLmpzPzRiZGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2NyZWF0ZS9wYWxldHRlcy9NU1guanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIDE2IGNvbG9yIHBhbGV0dGUgaW5zcGlyZWQgYnkgSmFwYW5lc2UgY29tcHV0ZXJzIGxpa2UgdGhlIE1TWC5cclxuICpcclxuICogQG5hbWUgUGhhc2VyLkNyZWF0ZS5QYWxldHRlcy5NU1hcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEB0eXBlIHtQaGFzZXIuVHlwZXMuQ3JlYXRlLlBhbGV0dGV9XHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuICAgIDA6ICcjMDAwJyxcclxuICAgIDE6ICcjMTkxMDI4JyxcclxuICAgIDI6ICcjNDZhZjQ1JyxcclxuICAgIDM6ICcjYTFkNjg1JyxcclxuICAgIDQ6ICcjNDUzZTc4JyxcclxuICAgIDU6ICcjNzY2NGZlJyxcclxuICAgIDY6ICcjODMzMTI5JyxcclxuICAgIDc6ICcjOWVjMmU4JyxcclxuICAgIDg6ICcjZGM1MzRiJyxcclxuICAgIDk6ICcjZTE4ZDc5JyxcclxuICAgIEE6ICcjZDZiOTdiJyxcclxuICAgIEI6ICcjZTlkOGExJyxcclxuICAgIEM6ICcjMjE2YzRiJyxcclxuICAgIEQ6ICcjZDM2NWM4JyxcclxuICAgIEU6ICcjYWZhYWI5JyxcclxuICAgIEY6ICcjZmZmJ1xyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/create/palettes/MSX.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/create/palettes/index.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/create/palettes/index.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Create.Palettes\r\n */\r\n\r\nmodule.exports = {\r\n\r\n ARNE16: __webpack_require__(/*! ./Arne16 */ \"./node_modules/phaser/src/create/palettes/Arne16.js\"),\r\n C64: __webpack_require__(/*! ./C64 */ \"./node_modules/phaser/src/create/palettes/C64.js\"),\r\n CGA: __webpack_require__(/*! ./CGA */ \"./node_modules/phaser/src/create/palettes/CGA.js\"),\r\n JMP: __webpack_require__(/*! ./JMP */ \"./node_modules/phaser/src/create/palettes/JMP.js\"),\r\n MSX: __webpack_require__(/*! ./MSX */ \"./node_modules/phaser/src/create/palettes/MSX.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jcmVhdGUvcGFsZXR0ZXMvaW5kZXguanM/YzBmNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRUFBVTtBQUM5QixTQUFTLG1CQUFPLENBQUMsK0RBQU87QUFDeEIsU0FBUyxtQkFBTyxDQUFDLCtEQUFPO0FBQ3hCLFNBQVMsbUJBQU8sQ0FBQywrREFBTztBQUN4QixTQUFTLG1CQUFPLENBQUMsK0RBQU87O0FBRXhCIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY3JlYXRlL3BhbGV0dGVzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuQ3JlYXRlLlBhbGV0dGVzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQVJORTE2OiByZXF1aXJlKCcuL0FybmUxNicpLFxyXG4gICAgQzY0OiByZXF1aXJlKCcuL0M2NCcpLFxyXG4gICAgQ0dBOiByZXF1aXJlKCcuL0NHQScpLFxyXG4gICAgSk1QOiByZXF1aXJlKCcuL0pNUCcpLFxyXG4gICAgTVNYOiByZXF1aXJlKCcuL01TWCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/create/palettes/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/curves/CubicBezierCurve.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/curves/CubicBezierCurve.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n// Based on the three.js Curve classes created by [zz85](http://www.lab4games.net/zz85/blog)\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CubicBezier = __webpack_require__(/*! ../math/interpolation/CubicBezierInterpolation */ \"./node_modules/phaser/src/math/interpolation/CubicBezierInterpolation.js\");\r\nvar Curve = __webpack_require__(/*! ./Curve */ \"./node_modules/phaser/src/curves/Curve.js\");\r\nvar Vector2 = __webpack_require__(/*! ../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A higher-order Bézier curve constructed of four points.\r\n *\r\n * @class CubicBezier\r\n * @extends Phaser.Curves.Curve\r\n * @memberof Phaser.Curves\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Math.Vector2|Phaser.Math.Vector2[])} p0 - Start point, or an array of point pairs.\r\n * @param {Phaser.Math.Vector2} p1 - Control Point 1.\r\n * @param {Phaser.Math.Vector2} p2 - Control Point 2.\r\n * @param {Phaser.Math.Vector2} p3 - End Point.\r\n */\r\nvar CubicBezierCurve = new Class({\r\n\r\n Extends: Curve,\r\n\r\n initialize:\r\n\r\n function CubicBezierCurve (p0, p1, p2, p3)\r\n {\r\n Curve.call(this, 'CubicBezierCurve');\r\n\r\n if (Array.isArray(p0))\r\n {\r\n p3 = new Vector2(p0[6], p0[7]);\r\n p2 = new Vector2(p0[4], p0[5]);\r\n p1 = new Vector2(p0[2], p0[3]);\r\n p0 = new Vector2(p0[0], p0[1]);\r\n }\r\n\r\n /**\r\n * The start point of this curve.\r\n *\r\n * @name Phaser.Curves.CubicBezier#p0\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.0.0\r\n */\r\n this.p0 = p0;\r\n\r\n /**\r\n * The first control point of this curve.\r\n *\r\n * @name Phaser.Curves.CubicBezier#p1\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.0.0\r\n */\r\n this.p1 = p1;\r\n\r\n /**\r\n * The second control point of this curve.\r\n *\r\n * @name Phaser.Curves.CubicBezier#p2\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.0.0\r\n */\r\n this.p2 = p2;\r\n\r\n /**\r\n * The end point of this curve.\r\n *\r\n * @name Phaser.Curves.CubicBezier#p3\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.0.0\r\n */\r\n this.p3 = p3;\r\n },\r\n\r\n /**\r\n * Gets the starting point on the curve.\r\n *\r\n * @method Phaser.Curves.CubicBezier#getStartPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @param {Phaser.Math.Vector2} [out] - A Vector2 object to store the result in. If not given will be created.\r\n *\r\n * @return {Phaser.Math.Vector2} The coordinates of the point on the curve. If an `out` object was given this will be returned.\r\n */\r\n getStartPoint: function (out)\r\n {\r\n if (out === undefined) { out = new Vector2(); }\r\n\r\n return out.copy(this.p0);\r\n },\r\n\r\n /**\r\n * Returns the resolution of this curve.\r\n *\r\n * @method Phaser.Curves.CubicBezier#getResolution\r\n * @since 3.0.0\r\n *\r\n * @param {number} divisions - The amount of divisions used by this curve.\r\n *\r\n * @return {number} The resolution of the curve.\r\n */\r\n getResolution: function (divisions)\r\n {\r\n return divisions;\r\n },\r\n\r\n /**\r\n * Get point at relative position in curve according to length.\r\n *\r\n * @method Phaser.Curves.CubicBezier#getPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @param {number} t - The position along the curve to return. Where 0 is the start and 1 is the end.\r\n * @param {Phaser.Math.Vector2} [out] - A Vector2 object to store the result in. If not given will be created.\r\n *\r\n * @return {Phaser.Math.Vector2} The coordinates of the point on the curve. If an `out` object was given this will be returned.\r\n */\r\n getPoint: function (t, out)\r\n {\r\n if (out === undefined) { out = new Vector2(); }\r\n\r\n var p0 = this.p0;\r\n var p1 = this.p1;\r\n var p2 = this.p2;\r\n var p3 = this.p3;\r\n\r\n return out.set(CubicBezier(t, p0.x, p1.x, p2.x, p3.x), CubicBezier(t, p0.y, p1.y, p2.y, p3.y));\r\n },\r\n\r\n /**\r\n * Draws this curve to the specified graphics object.\r\n *\r\n * @method Phaser.Curves.CubicBezier#draw\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.Graphics} G - [graphics,$return]\r\n *\r\n * @param {Phaser.GameObjects.Graphics} graphics - The graphics object this curve should be drawn to.\r\n * @param {integer} [pointsTotal=32] - The number of intermediary points that make up this curve. A higher number of points will result in a smoother curve.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} The graphics object this curve was drawn to. Useful for method chaining.\r\n */\r\n draw: function (graphics, pointsTotal)\r\n {\r\n if (pointsTotal === undefined) { pointsTotal = 32; }\r\n\r\n var points = this.getPoints(pointsTotal);\r\n\r\n graphics.beginPath();\r\n graphics.moveTo(this.p0.x, this.p0.y);\r\n\r\n for (var i = 1; i < points.length; i++)\r\n {\r\n graphics.lineTo(points[i].x, points[i].y);\r\n }\r\n\r\n graphics.strokePath();\r\n\r\n // So you can chain graphics calls\r\n return graphics;\r\n },\r\n\r\n /**\r\n * Returns a JSON object that describes this curve.\r\n *\r\n * @method Phaser.Curves.CubicBezier#toJSON\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Types.Curves.JSONCurve} The JSON object containing this curve data.\r\n */\r\n toJSON: function ()\r\n {\r\n return {\r\n type: this.type,\r\n points: [\r\n this.p0.x, this.p0.y,\r\n this.p1.x, this.p1.y,\r\n this.p2.x, this.p2.y,\r\n this.p3.x, this.p3.y\r\n ]\r\n };\r\n }\r\n\r\n});\r\n\r\n/**\r\n * Generates a curve from a JSON object.\r\n *\r\n * @function Phaser.Curves.CubicBezier.fromJSON\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Curves.JSONCurve} data - The JSON object containing this curve data.\r\n *\r\n * @return {Phaser.Curves.CubicBezier} The curve generated from the JSON object.\r\n */\r\nCubicBezierCurve.fromJSON = function (data)\r\n{\r\n var points = data.points;\r\n\r\n var p0 = new Vector2(points[0], points[1]);\r\n var p1 = new Vector2(points[2], points[3]);\r\n var p2 = new Vector2(points[4], points[5]);\r\n var p3 = new Vector2(points[6], points[7]);\r\n\r\n return new CubicBezierCurve(p0, p1, p2, p3);\r\n};\r\n\r\nmodule.exports = CubicBezierCurve;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jdXJ2ZXMvQ3ViaWNCZXppZXJDdXJ2ZS5qcz8yMmQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ3BDLGtCQUFrQixtQkFBTyxDQUFDLGdJQUFnRDtBQUMxRSxZQUFZLG1CQUFPLENBQUMsMERBQVM7QUFDN0IsY0FBYyxtQkFBTyxDQUFDLGtFQUFpQjs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDRDQUE0QztBQUN2RCxXQUFXLG9CQUFvQjtBQUMvQixXQUFXLG9CQUFvQjtBQUMvQixXQUFXLG9CQUFvQjtBQUMvQjtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixvQkFBb0I7QUFDckM7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLHFCQUFxQjs7QUFFckQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MscUJBQXFCOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLDRCQUE0QjtBQUM3QztBQUNBLGVBQWUsNEJBQTRCO0FBQzNDLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLGtCQUFrQjs7QUFFMUQ7O0FBRUE7QUFDQTs7QUFFQSx1QkFBdUIsbUJBQW1CO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekM7QUFDQSxZQUFZLDBCQUEwQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY3VydmVzL0N1YmljQmV6aWVyQ3VydmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8vICBCYXNlZCBvbiB0aGUgdGhyZWUuanMgQ3VydmUgY2xhc3NlcyBjcmVhdGVkIGJ5IFt6ejg1XShodHRwOi8vd3d3LmxhYjRnYW1lcy5uZXQveno4NS9ibG9nKVxyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEN1YmljQmV6aWVyID0gcmVxdWlyZSgnLi4vbWF0aC9pbnRlcnBvbGF0aW9uL0N1YmljQmV6aWVySW50ZXJwb2xhdGlvbicpO1xyXG52YXIgQ3VydmUgPSByZXF1aXJlKCcuL0N1cnZlJyk7XHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vbWF0aC9WZWN0b3IyJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIGhpZ2hlci1vcmRlciBCw6l6aWVyIGN1cnZlIGNvbnN0cnVjdGVkIG9mIGZvdXIgcG9pbnRzLlxyXG4gKlxyXG4gKiBAY2xhc3MgQ3ViaWNCZXppZXJcclxuICogQGV4dGVuZHMgUGhhc2VyLkN1cnZlcy5DdXJ2ZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkN1cnZlc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5NYXRoLlZlY3RvcjJ8UGhhc2VyLk1hdGguVmVjdG9yMltdKX0gcDAgLSBTdGFydCBwb2ludCwgb3IgYW4gYXJyYXkgb2YgcG9pbnQgcGFpcnMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gcDEgLSBDb250cm9sIFBvaW50IDEuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gcDIgLSBDb250cm9sIFBvaW50IDIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gcDMgLSBFbmQgUG9pbnQuXHJcbiAqL1xyXG52YXIgQ3ViaWNCZXppZXJDdXJ2ZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogQ3VydmUsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBDdWJpY0JlemllckN1cnZlIChwMCwgcDEsIHAyLCBwMylcclxuICAgIHtcclxuICAgICAgICBDdXJ2ZS5jYWxsKHRoaXMsICdDdWJpY0JlemllckN1cnZlJyk7XHJcblxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHAwKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHAzID0gbmV3IFZlY3RvcjIocDBbNl0sIHAwWzddKTtcclxuICAgICAgICAgICAgcDIgPSBuZXcgVmVjdG9yMihwMFs0XSwgcDBbNV0pO1xyXG4gICAgICAgICAgICBwMSA9IG5ldyBWZWN0b3IyKHAwWzJdLCBwMFszXSk7XHJcbiAgICAgICAgICAgIHAwID0gbmV3IFZlY3RvcjIocDBbMF0sIHAwWzFdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBzdGFydCBwb2ludCBvZiB0aGlzIGN1cnZlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5DdWJpY0JlemllciNwMFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucDAgPSBwMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGZpcnN0IGNvbnRyb2wgcG9pbnQgb2YgdGhpcyBjdXJ2ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DdXJ2ZXMuQ3ViaWNCZXppZXIjcDFcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnAxID0gcDE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBzZWNvbmQgY29udHJvbCBwb2ludCBvZiB0aGlzIGN1cnZlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5DdWJpY0JlemllciNwMlxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucDIgPSBwMjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGVuZCBwb2ludCBvZiB0aGlzIGN1cnZlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5DdWJpY0JlemllciNwM1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucDMgPSBwMztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBzdGFydGluZyBwb2ludCBvbiB0aGUgY3VydmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkN1YmljQmV6aWVyI2dldFN0YXJ0UG9pbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBPIC0gW291dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW291dF0gLSBBIFZlY3RvcjIgb2JqZWN0IHRvIHN0b3JlIHRoZSByZXN1bHQgaW4uIElmIG5vdCBnaXZlbiB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gVGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCBvbiB0aGUgY3VydmUuIElmIGFuIGBvdXRgIG9iamVjdCB3YXMgZ2l2ZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICovXHJcbiAgICBnZXRTdGFydFBvaW50OiBmdW5jdGlvbiAob3V0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgVmVjdG9yMigpOyB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQuY29weSh0aGlzLnAwKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSByZXNvbHV0aW9uIG9mIHRoaXMgY3VydmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkN1YmljQmV6aWVyI2dldFJlc29sdXRpb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkaXZpc2lvbnMgLSBUaGUgYW1vdW50IG9mIGRpdmlzaW9ucyB1c2VkIGJ5IHRoaXMgY3VydmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY3VydmUuXHJcbiAgICAgKi9cclxuICAgIGdldFJlc29sdXRpb246IGZ1bmN0aW9uIChkaXZpc2lvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGRpdmlzaW9ucztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgcG9pbnQgYXQgcmVsYXRpdmUgcG9zaXRpb24gaW4gY3VydmUgYWNjb3JkaW5nIHRvIGxlbmd0aC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuQ3ViaWNCZXppZXIjZ2V0UG9pbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBPIC0gW291dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0IC0gVGhlIHBvc2l0aW9uIGFsb25nIHRoZSBjdXJ2ZSB0byByZXR1cm4uIFdoZXJlIDAgaXMgdGhlIHN0YXJ0IGFuZCAxIGlzIHRoZSBlbmQuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFtvdXRdIC0gQSBWZWN0b3IyIG9iamVjdCB0byBzdG9yZSB0aGUgcmVzdWx0IGluLiBJZiBub3QgZ2l2ZW4gd2lsbCBiZSBjcmVhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFRoZSBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnQgb24gdGhlIGN1cnZlLiBJZiBhbiBgb3V0YCBvYmplY3Qgd2FzIGdpdmVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqL1xyXG4gICAgZ2V0UG9pbnQ6IGZ1bmN0aW9uICh0LCBvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgdmFyIHAwID0gdGhpcy5wMDtcclxuICAgICAgICB2YXIgcDEgPSB0aGlzLnAxO1xyXG4gICAgICAgIHZhciBwMiA9IHRoaXMucDI7XHJcbiAgICAgICAgdmFyIHAzID0gdGhpcy5wMztcclxuXHJcbiAgICAgICAgcmV0dXJuIG91dC5zZXQoQ3ViaWNCZXppZXIodCwgcDAueCwgcDEueCwgcDIueCwgcDMueCksIEN1YmljQmV6aWVyKHQsIHAwLnksIHAxLnksIHAyLnksIHAzLnkpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3cyB0aGlzIGN1cnZlIHRvIHRoZSBzcGVjaWZpZWQgZ3JhcGhpY3Mgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5DdWJpY0JlemllciNkcmF3XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBHIC0gW2dyYXBoaWNzLCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IGdyYXBoaWNzIC0gVGhlIGdyYXBoaWNzIG9iamVjdCB0aGlzIGN1cnZlIHNob3VsZCBiZSBkcmF3biB0by5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3BvaW50c1RvdGFsPTMyXSAtIFRoZSBudW1iZXIgb2YgaW50ZXJtZWRpYXJ5IHBvaW50cyB0aGF0IG1ha2UgdXAgdGhpcyBjdXJ2ZS4gQSBoaWdoZXIgbnVtYmVyIG9mIHBvaW50cyB3aWxsIHJlc3VsdCBpbiBhIHNtb290aGVyIGN1cnZlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0aGlzIGN1cnZlIHdhcyBkcmF3biB0by4gVXNlZnVsIGZvciBtZXRob2QgY2hhaW5pbmcuXHJcbiAgICAgKi9cclxuICAgIGRyYXc6IGZ1bmN0aW9uIChncmFwaGljcywgcG9pbnRzVG90YWwpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHBvaW50c1RvdGFsID09PSB1bmRlZmluZWQpIHsgcG9pbnRzVG90YWwgPSAzMjsgfVxyXG5cclxuICAgICAgICB2YXIgcG9pbnRzID0gdGhpcy5nZXRQb2ludHMocG9pbnRzVG90YWwpO1xyXG5cclxuICAgICAgICBncmFwaGljcy5iZWdpblBhdGgoKTtcclxuICAgICAgICBncmFwaGljcy5tb3ZlVG8odGhpcy5wMC54LCB0aGlzLnAwLnkpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdyYXBoaWNzLmxpbmVUbyhwb2ludHNbaV0ueCwgcG9pbnRzW2ldLnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ3JhcGhpY3Muc3Ryb2tlUGF0aCgpO1xyXG5cclxuICAgICAgICAvLyAgU28geW91IGNhbiBjaGFpbiBncmFwaGljcyBjYWxsc1xyXG4gICAgICAgIHJldHVybiBncmFwaGljcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgSlNPTiBvYmplY3QgdGhhdCBkZXNjcmliZXMgdGhpcyBjdXJ2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuQ3ViaWNCZXppZXIjdG9KU09OXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuQ3VydmVzLkpTT05DdXJ2ZX0gVGhlIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgdGhpcyBjdXJ2ZSBkYXRhLlxyXG4gICAgICovXHJcbiAgICB0b0pTT046IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICAgICAgICBwb2ludHM6IFtcclxuICAgICAgICAgICAgICAgIHRoaXMucDAueCwgdGhpcy5wMC55LFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wMS54LCB0aGlzLnAxLnksXHJcbiAgICAgICAgICAgICAgICB0aGlzLnAyLngsIHRoaXMucDIueSxcclxuICAgICAgICAgICAgICAgIHRoaXMucDMueCwgdGhpcy5wMy55XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgY3VydmUgZnJvbSBhIEpTT04gb2JqZWN0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkN1cnZlcy5DdWJpY0Jlemllci5mcm9tSlNPTlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuQ3VydmVzLkpTT05DdXJ2ZX0gZGF0YSAtIFRoZSBKU09OIG9iamVjdCBjb250YWluaW5nIHRoaXMgY3VydmUgZGF0YS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkN1cnZlcy5DdWJpY0Jlemllcn0gVGhlIGN1cnZlIGdlbmVyYXRlZCBmcm9tIHRoZSBKU09OIG9iamVjdC5cclxuICovXHJcbkN1YmljQmV6aWVyQ3VydmUuZnJvbUpTT04gPSBmdW5jdGlvbiAoZGF0YSlcclxue1xyXG4gICAgdmFyIHBvaW50cyA9IGRhdGEucG9pbnRzO1xyXG5cclxuICAgIHZhciBwMCA9IG5ldyBWZWN0b3IyKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcclxuICAgIHZhciBwMSA9IG5ldyBWZWN0b3IyKHBvaW50c1syXSwgcG9pbnRzWzNdKTtcclxuICAgIHZhciBwMiA9IG5ldyBWZWN0b3IyKHBvaW50c1s0XSwgcG9pbnRzWzVdKTtcclxuICAgIHZhciBwMyA9IG5ldyBWZWN0b3IyKHBvaW50c1s2XSwgcG9pbnRzWzddKTtcclxuXHJcbiAgICByZXR1cm4gbmV3IEN1YmljQmV6aWVyQ3VydmUocDAsIHAxLCBwMiwgcDMpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDdWJpY0JlemllckN1cnZlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/curves/CubicBezierCurve.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/curves/Curve.js":
/*!*************************************************!*\
!*** ./node_modules/phaser/src/curves/Curve.js ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar FromPoints = __webpack_require__(/*! ../geom/rectangle/FromPoints */ \"./node_modules/phaser/src/geom/rectangle/FromPoints.js\");\r\nvar Rectangle = __webpack_require__(/*! ../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar Vector2 = __webpack_require__(/*! ../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Base Curve class, which all other curve types extend.\r\n *\r\n * Based on the three.js Curve classes created by [zz85](http://www.lab4games.net/zz85/blog)\r\n *\r\n * @class Curve\r\n * @memberof Phaser.Curves\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {string} type - [description]\r\n */\r\nvar Curve = new Class({\r\n\r\n initialize:\r\n\r\n function Curve (type)\r\n {\r\n /**\r\n * String based identifier for the type of curve.\r\n *\r\n * @name Phaser.Curves.Curve#type\r\n * @type {string}\r\n * @since 3.0.0\r\n */\r\n this.type = type;\r\n\r\n /**\r\n * The default number of divisions within the curve.\r\n *\r\n * @name Phaser.Curves.Curve#defaultDivisions\r\n * @type {integer}\r\n * @default 5\r\n * @since 3.0.0\r\n */\r\n this.defaultDivisions = 5;\r\n\r\n /**\r\n * The quantity of arc length divisions within the curve.\r\n *\r\n * @name Phaser.Curves.Curve#arcLengthDivisions\r\n * @type {integer}\r\n * @default 100\r\n * @since 3.0.0\r\n */\r\n this.arcLengthDivisions = 100;\r\n\r\n /**\r\n * An array of cached arc length values.\r\n *\r\n * @name Phaser.Curves.Curve#cacheArcLengths\r\n * @type {number[]}\r\n * @default []\r\n * @since 3.0.0\r\n */\r\n this.cacheArcLengths = [];\r\n\r\n /**\r\n * Does the data of this curve need updating?\r\n *\r\n * @name Phaser.Curves.Curve#needsUpdate\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.needsUpdate = true;\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Curves.Curve#active\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.active = true;\r\n\r\n /**\r\n * A temporary calculation Vector.\r\n *\r\n * @name Phaser.Curves.Curve#_tmpVec2A\r\n * @type {Phaser.Math.Vector2}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._tmpVec2A = new Vector2();\r\n\r\n /**\r\n * A temporary calculation Vector.\r\n *\r\n * @name Phaser.Curves.Curve#_tmpVec2B\r\n * @type {Phaser.Math.Vector2}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._tmpVec2B = new Vector2();\r\n },\r\n\r\n /**\r\n * Draws this curve on the given Graphics object.\r\n *\r\n * The curve is drawn using `Graphics.strokePoints` so will be drawn at whatever the present Graphics stroke color is.\r\n * The Graphics object is not cleared before the draw, so the curve will appear on-top of anything else already rendered to it.\r\n *\r\n * @method Phaser.Curves.Curve#draw\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.Graphics} G - [graphics,$return]\r\n *\r\n * @param {Phaser.GameObjects.Graphics} graphics - The Graphics instance onto which this curve will be drawn.\r\n * @param {integer} [pointsTotal=32] - The resolution of the curve. The higher the value the smoother it will render, at the cost of rendering performance.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} The Graphics object to which the curve was drawn.\r\n */\r\n draw: function (graphics, pointsTotal)\r\n {\r\n if (pointsTotal === undefined) { pointsTotal = 32; }\r\n\r\n // So you can chain graphics calls\r\n return graphics.strokePoints(this.getPoints(pointsTotal));\r\n },\r\n \r\n /**\r\n * Returns a Rectangle where the position and dimensions match the bounds of this Curve.\r\n *\r\n * You can control the accuracy of the bounds. The value given is used to work out how many points\r\n * to plot across the curve. Higher values are more accurate at the cost of calculation speed.\r\n *\r\n * @method Phaser.Curves.Curve#getBounds\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} [out] - The Rectangle to store the bounds in. If falsey a new object will be created.\r\n * @param {integer} [accuracy=16] - The accuracy of the bounds calculations.\r\n *\r\n * @return {Phaser.Geom.Rectangle} A Rectangle object holding the bounds of this curve. If `out` was given it will be this object.\r\n */\r\n getBounds: function (out, accuracy)\r\n {\r\n if (!out) { out = new Rectangle(); }\r\n if (accuracy === undefined) { accuracy = 16; }\r\n\r\n var len = this.getLength();\r\n\r\n if (accuracy > len)\r\n {\r\n accuracy = len / 2;\r\n }\r\n\r\n // The length of the curve in pixels\r\n // So we'll have 1 spaced point per 'accuracy' pixels\r\n\r\n var spaced = Math.max(1, Math.round(len / accuracy));\r\n\r\n return FromPoints(this.getSpacedPoints(spaced), out);\r\n },\r\n\r\n /**\r\n * Returns an array of points, spaced out X distance pixels apart.\r\n * The smaller the distance, the larger the array will be.\r\n *\r\n * @method Phaser.Curves.Curve#getDistancePoints\r\n * @since 3.0.0\r\n *\r\n * @param {integer} distance - The distance, in pixels, between each point along the curve.\r\n *\r\n * @return {Phaser.Geom.Point[]} An Array of Point objects.\r\n */\r\n getDistancePoints: function (distance)\r\n {\r\n var len = this.getLength();\r\n\r\n var spaced = Math.max(1, len / distance);\r\n\r\n return this.getSpacedPoints(spaced);\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Curves.Curve#getEndPoint\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Math.Vector2} [out] - Optional Vector object to store the result in.\r\n *\r\n * @return {Phaser.Math.Vector2} Vector2 containing the coordinates of the curves end point.\r\n */\r\n getEndPoint: function (out)\r\n {\r\n if (out === undefined) { out = new Vector2(); }\r\n\r\n return this.getPointAt(1, out);\r\n },\r\n\r\n /**\r\n * Get total curve arc length\r\n *\r\n * @method Phaser.Curves.Curve#getLength\r\n * @since 3.0.0\r\n *\r\n * @return {number} [description]\r\n */\r\n getLength: function ()\r\n {\r\n var lengths = this.getLengths();\r\n\r\n return lengths[lengths.length - 1];\r\n },\r\n\r\n\r\n /**\r\n * Get list of cumulative segment lengths\r\n *\r\n * @method Phaser.Curves.Curve#getLengths\r\n * @since 3.0.0\r\n *\r\n * @param {integer} [divisions] - [description]\r\n *\r\n * @return {number[]} [description]\r\n */\r\n getLengths: function (divisions)\r\n {\r\n if (divisions === undefined) { divisions = this.arcLengthDivisions; }\r\n\r\n if ((this.cacheArcLengths.length === divisions + 1) && !this.needsUpdate)\r\n {\r\n return this.cacheArcLengths;\r\n }\r\n\r\n this.needsUpdate = false;\r\n\r\n var cache = [];\r\n var current;\r\n var last = this.getPoint(0, this._tmpVec2A);\r\n var sum = 0;\r\n\r\n cache.push(0);\r\n\r\n for (var p = 1; p <= divisions; p++)\r\n {\r\n current = this.getPoint(p / divisions, this._tmpVec2B);\r\n\r\n sum += current.distance(last);\r\n\r\n cache.push(sum);\r\n\r\n last.copy(current);\r\n }\r\n\r\n this.cacheArcLengths = cache;\r\n\r\n return cache; // { sums: cache, sum:sum }; Sum is in the last element.\r\n },\r\n\r\n // Get point at relative position in curve according to arc length\r\n\r\n // - u [0 .. 1]\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Curves.Curve#getPointAt\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @param {number} u - [description]\r\n * @param {Phaser.Math.Vector2} [out] - [description]\r\n *\r\n * @return {Phaser.Math.Vector2} [description]\r\n */\r\n getPointAt: function (u, out)\r\n {\r\n var t = this.getUtoTmapping(u);\r\n\r\n return this.getPoint(t, out);\r\n },\r\n\r\n // Get sequence of points using getPoint( t )\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Curves.Curve#getPoints\r\n * @since 3.0.0\r\n *\r\n * @param {integer} divisions - The number of evenly spaced points from the curve to return. If falsy, step param will be used to calculate the number of points.\r\n * @param {number} step - Step between points. Used to calculate the number of points to return when divisions is falsy. Ignored if divisions is positive. \r\n * @param {(array|Phaser.Math.Vector2[])} [out] - An optional array to store the points in.\r\n *\r\n * @return {(array|Phaser.Math.Vector2[])} An array of Points from the curve.\r\n */\r\n getPoints: function (divisions, stepRate, out)\r\n {\r\n if (out === undefined) { out = []; }\r\n\r\n // If divisions is a falsey value (false, null, 0, undefined, etc) then we calculate it based on the stepRate instead.\r\n if (!divisions)\r\n {\r\n if (!stepRate)\r\n {\r\n divisions = this.defaultDivisions;\r\n }\r\n else\r\n {\r\n divisions = this.getLength() / stepRate;\r\n }\r\n }\r\n\r\n for (var d = 0; d <= divisions; d++)\r\n {\r\n out.push(this.getPoint(d / divisions));\r\n }\r\n\r\n return out;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Curves.Curve#getRandomPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @param {Phaser.Math.Vector2} [out] - [description]\r\n *\r\n * @return {Phaser.Math.Vector2} [description]\r\n */\r\n getRandomPoint: function (out)\r\n {\r\n if (out === undefined) { out = new Vector2(); }\r\n\r\n return this.getPoint(Math.random(), out);\r\n },\r\n\r\n // Get sequence of points using getPointAt( u )\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Curves.Curve#getSpacedPoints\r\n * @since 3.0.0\r\n *\r\n * @param {integer} [divisions] - [description]\r\n *\r\n * @return {Phaser.Math.Vector2[]} [description]\r\n */\r\n getSpacedPoints: function (divisions)\r\n {\r\n if (divisions === undefined) { divisions = this.defaultDivisions; }\r\n\r\n var points = [];\r\n\r\n for (var d = 0; d <= divisions; d++)\r\n {\r\n var t = this.getUtoTmapping(d / divisions, null, divisions);\r\n\r\n points.push(this.getPoint(t));\r\n }\r\n\r\n return points;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Curves.Curve#getStartPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @param {Phaser.Math.Vector2} [out] - [description]\r\n *\r\n * @return {Phaser.Math.Vector2} [description]\r\n */\r\n getStartPoint: function (out)\r\n {\r\n if (out === undefined) { out = new Vector2(); }\r\n\r\n return this.getPointAt(0, out);\r\n },\r\n\r\n /**\r\n * Returns a unit vector tangent at t\r\n * In case any sub curve does not implement its tangent derivation,\r\n * 2 points a small delta apart will be used to find its gradient\r\n * which seems to give a reasonable approximation\r\n *\r\n * @method Phaser.Curves.Curve#getTangent\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @param {number} t - [description]\r\n * @param {Phaser.Math.Vector2} [out] - [description]\r\n *\r\n * @return {Phaser.Math.Vector2} Vector approximating the tangent line at the point t (delta +/- 0.0001)\r\n */\r\n getTangent: function (t, out)\r\n {\r\n if (out === undefined) { out = new Vector2(); }\r\n\r\n var delta = 0.0001;\r\n var t1 = t - delta;\r\n var t2 = t + delta;\r\n\r\n // Capping in case of danger\r\n\r\n if (t1 < 0)\r\n {\r\n t1 = 0;\r\n }\r\n\r\n if (t2 > 1)\r\n {\r\n t2 = 1;\r\n }\r\n\r\n this.getPoint(t1, this._tmpVec2A);\r\n this.getPoint(t2, out);\r\n\r\n return out.subtract(this._tmpVec2A).normalize();\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Curves.Curve#getTangentAt\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @param {number} u - [description]\r\n * @param {Phaser.Math.Vector2} [out] - [description]\r\n *\r\n * @return {Phaser.Math.Vector2} [description]\r\n */\r\n getTangentAt: function (u, out)\r\n {\r\n var t = this.getUtoTmapping(u);\r\n\r\n return this.getTangent(t, out);\r\n },\r\n\r\n // Given a distance in pixels, get a t to find p.\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Curves.Curve#getTFromDistance\r\n * @since 3.0.0\r\n *\r\n * @param {integer} distance - [description]\r\n * @param {integer} [divisions] - [description]\r\n *\r\n * @return {number} [description]\r\n */\r\n getTFromDistance: function (distance, divisions)\r\n {\r\n if (distance <= 0)\r\n {\r\n return 0;\r\n }\r\n\r\n return this.getUtoTmapping(0, distance, divisions);\r\n },\r\n\r\n // Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Curves.Curve#getUtoTmapping\r\n * @since 3.0.0\r\n *\r\n * @param {number} u - [description]\r\n * @param {integer} distance - [description]\r\n * @param {integer} [divisions] - [description]\r\n *\r\n * @return {number} [description]\r\n */\r\n getUtoTmapping: function (u, distance, divisions)\r\n {\r\n var arcLengths = this.getLengths(divisions);\r\n\r\n var i = 0;\r\n var il = arcLengths.length;\r\n\r\n var targetArcLength; // The targeted u distance value to get\r\n\r\n if (distance)\r\n {\r\n // Cannot overshoot the curve\r\n targetArcLength = Math.min(distance, arcLengths[il - 1]);\r\n }\r\n else\r\n {\r\n targetArcLength = u * arcLengths[il - 1];\r\n }\r\n\r\n // binary search for the index with largest value smaller than target u distance\r\n\r\n var low = 0;\r\n var high = il - 1;\r\n var comparison;\r\n\r\n while (low <= high)\r\n {\r\n i = Math.floor(low + (high - low) / 2); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\r\n\r\n comparison = arcLengths[i] - targetArcLength;\r\n\r\n if (comparison < 0)\r\n {\r\n low = i + 1;\r\n }\r\n else if (comparison > 0)\r\n {\r\n high = i - 1;\r\n }\r\n else\r\n {\r\n high = i;\r\n break;\r\n }\r\n }\r\n\r\n i = high;\r\n\r\n if (arcLengths[i] === targetArcLength)\r\n {\r\n return i / (il - 1);\r\n }\r\n\r\n // we could get finer grain at lengths, or use simple interpolation between two points\r\n\r\n var lengthBefore = arcLengths[i];\r\n var lengthAfter = arcLengths[i + 1];\r\n\r\n var segmentLength = lengthAfter - lengthBefore;\r\n\r\n // determine where we are between the 'before' and 'after' points\r\n\r\n var segmentFraction = (targetArcLength - lengthBefore) / segmentLength;\r\n\r\n // add that fractional amount to t\r\n\r\n return (i + segmentFraction) / (il - 1);\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Curves.Curve#updateArcLengths\r\n * @since 3.0.0\r\n */\r\n updateArcLengths: function ()\r\n {\r\n this.needsUpdate = true;\r\n\r\n this.getLengths();\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Curve;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jdXJ2ZXMvQ3VydmUuanM/Nzg0MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGdFQUFnQjtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyw0RkFBOEI7QUFDdkQsZ0JBQWdCLG1CQUFPLENBQUMsMEZBQTZCO0FBQ3JELGNBQWMsbUJBQU8sQ0FBQyxrRUFBaUI7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsNEJBQTRCO0FBQzdDO0FBQ0EsZUFBZSw0QkFBNEI7QUFDM0MsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQSx3Q0FBd0Msa0JBQWtCOztBQUUxRDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHNCQUFzQjtBQUNyQyxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQix1QkFBdUI7QUFDMUMscUNBQXFDLGVBQWU7O0FBRXBEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxxQkFBcUI7O0FBRXJEO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxxQ0FBcUM7O0FBRTNFO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLHFCQUFxQixLQUFLLHdCQUF3QjtBQUNsRCxLQUFLOztBQUVMOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixvQkFBb0I7QUFDckM7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsVUFBVTs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxxQkFBcUI7O0FBRXJEO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxtQ0FBbUM7O0FBRXpFOztBQUVBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxxQkFBcUI7O0FBRXJEO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MscUJBQXFCOztBQUVyRDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsNEJBQTRCOztBQUU1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtREFBbUQ7O0FBRW5EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2N1cnZlcy9DdXJ2ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEZyb21Qb2ludHMgPSByZXF1aXJlKCcuLi9nZW9tL3JlY3RhbmdsZS9Gcm9tUG9pbnRzJyk7XHJcbnZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuLi9nZW9tL3JlY3RhbmdsZS9SZWN0YW5nbGUnKTtcclxudmFyIFZlY3RvcjIgPSByZXF1aXJlKCcuLi9tYXRoL1ZlY3RvcjInKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgQmFzZSBDdXJ2ZSBjbGFzcywgd2hpY2ggYWxsIG90aGVyIGN1cnZlIHR5cGVzIGV4dGVuZC5cclxuICpcclxuICogQmFzZWQgb24gdGhlIHRocmVlLmpzIEN1cnZlIGNsYXNzZXMgY3JlYXRlZCBieSBbeno4NV0oaHR0cDovL3d3dy5sYWI0Z2FtZXMubmV0L3p6ODUvYmxvZylcclxuICpcclxuICogQGNsYXNzIEN1cnZlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuQ3VydmVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG52YXIgQ3VydmUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gQ3VydmUgKHR5cGUpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU3RyaW5nIGJhc2VkIGlkZW50aWZpZXIgZm9yIHRoZSB0eXBlIG9mIGN1cnZlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5DdXJ2ZSN0eXBlXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZGVmYXVsdCBudW1iZXIgb2YgZGl2aXNpb25zIHdpdGhpbiB0aGUgY3VydmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLkN1cnZlI2RlZmF1bHREaXZpc2lvbnNcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCA1XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0RGl2aXNpb25zID0gNTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHF1YW50aXR5IG9mIGFyYyBsZW5ndGggZGl2aXNpb25zIHdpdGhpbiB0aGUgY3VydmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLkN1cnZlI2FyY0xlbmd0aERpdmlzaW9uc1xyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDEwMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zID0gMTAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBvZiBjYWNoZWQgYXJjIGxlbmd0aCB2YWx1ZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLkN1cnZlI2NhY2hlQXJjTGVuZ3Roc1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJbXX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBbXVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FjaGVBcmNMZW5ndGhzID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERvZXMgdGhlIGRhdGEgb2YgdGhpcyBjdXJ2ZSBuZWVkIHVwZGF0aW5nP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5DdXJ2ZSNuZWVkc1VwZGF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5DdXJ2ZSNhY3RpdmVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHRlbXBvcmFyeSBjYWxjdWxhdGlvbiBWZWN0b3IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLkN1cnZlI190bXBWZWMyQVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdG1wVmVjMkEgPSBuZXcgVmVjdG9yMigpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHRlbXBvcmFyeSBjYWxjdWxhdGlvbiBWZWN0b3IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLkN1cnZlI190bXBWZWMyQlxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdG1wVmVjMkIgPSBuZXcgVmVjdG9yMigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERyYXdzIHRoaXMgY3VydmUgb24gdGhlIGdpdmVuIEdyYXBoaWNzIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgY3VydmUgaXMgZHJhd24gdXNpbmcgYEdyYXBoaWNzLnN0cm9rZVBvaW50c2Agc28gd2lsbCBiZSBkcmF3biBhdCB3aGF0ZXZlciB0aGUgcHJlc2VudCBHcmFwaGljcyBzdHJva2UgY29sb3IgaXMuXHJcbiAgICAgKiBUaGUgR3JhcGhpY3Mgb2JqZWN0IGlzIG5vdCBjbGVhcmVkIGJlZm9yZSB0aGUgZHJhdywgc28gdGhlIGN1cnZlIHdpbGwgYXBwZWFyIG9uLXRvcCBvZiBhbnl0aGluZyBlbHNlIGFscmVhZHkgcmVuZGVyZWQgdG8gaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkN1cnZlI2RyYXdcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IEcgLSBbZ3JhcGhpY3MsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gZ3JhcGhpY3MgLSBUaGUgR3JhcGhpY3MgaW5zdGFuY2Ugb250byB3aGljaCB0aGlzIGN1cnZlIHdpbGwgYmUgZHJhd24uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtwb2ludHNUb3RhbD0zMl0gLSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY3VydmUuIFRoZSBoaWdoZXIgdGhlIHZhbHVlIHRoZSBzbW9vdGhlciBpdCB3aWxsIHJlbmRlciwgYXQgdGhlIGNvc3Qgb2YgcmVuZGVyaW5nIHBlcmZvcm1hbmNlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gVGhlIEdyYXBoaWNzIG9iamVjdCB0byB3aGljaCB0aGUgY3VydmUgd2FzIGRyYXduLlxyXG4gICAgICovXHJcbiAgICBkcmF3OiBmdW5jdGlvbiAoZ3JhcGhpY3MsIHBvaW50c1RvdGFsKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChwb2ludHNUb3RhbCA9PT0gdW5kZWZpbmVkKSB7IHBvaW50c1RvdGFsID0gMzI7IH1cclxuXHJcbiAgICAgICAgLy8gIFNvIHlvdSBjYW4gY2hhaW4gZ3JhcGhpY3MgY2FsbHNcclxuICAgICAgICByZXR1cm4gZ3JhcGhpY3Muc3Ryb2tlUG9pbnRzKHRoaXMuZ2V0UG9pbnRzKHBvaW50c1RvdGFsKSk7XHJcbiAgICB9LFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBSZWN0YW5nbGUgd2hlcmUgdGhlIHBvc2l0aW9uIGFuZCBkaW1lbnNpb25zIG1hdGNoIHRoZSBib3VuZHMgb2YgdGhpcyBDdXJ2ZS5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIGNvbnRyb2wgdGhlIGFjY3VyYWN5IG9mIHRoZSBib3VuZHMuIFRoZSB2YWx1ZSBnaXZlbiBpcyB1c2VkIHRvIHdvcmsgb3V0IGhvdyBtYW55IHBvaW50c1xyXG4gICAgICogdG8gcGxvdCBhY3Jvc3MgdGhlIGN1cnZlLiBIaWdoZXIgdmFsdWVzIGFyZSBtb3JlIGFjY3VyYXRlIGF0IHRoZSBjb3N0IG9mIGNhbGN1bGF0aW9uIHNwZWVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5DdXJ2ZSNnZXRCb3VuZHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBbb3V0XSAtIFRoZSBSZWN0YW5nbGUgdG8gc3RvcmUgdGhlIGJvdW5kcyBpbi4gSWYgZmFsc2V5IGEgbmV3IG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFthY2N1cmFjeT0xNl0gLSBUaGUgYWNjdXJhY3kgb2YgdGhlIGJvdW5kcyBjYWxjdWxhdGlvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBBIFJlY3RhbmdsZSBvYmplY3QgaG9sZGluZyB0aGUgYm91bmRzIG9mIHRoaXMgY3VydmUuIElmIGBvdXRgIHdhcyBnaXZlbiBpdCB3aWxsIGJlIHRoaXMgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRCb3VuZHM6IGZ1bmN0aW9uIChvdXQsIGFjY3VyYWN5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICghb3V0KSB7IG91dCA9IG5ldyBSZWN0YW5nbGUoKTsgfVxyXG4gICAgICAgIGlmIChhY2N1cmFjeSA9PT0gdW5kZWZpbmVkKSB7IGFjY3VyYWN5ID0gMTY7IH1cclxuXHJcbiAgICAgICAgdmFyIGxlbiA9IHRoaXMuZ2V0TGVuZ3RoKCk7XHJcblxyXG4gICAgICAgIGlmIChhY2N1cmFjeSA+IGxlbilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjY3VyYWN5ID0gbGVuIC8gMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBUaGUgbGVuZ3RoIG9mIHRoZSBjdXJ2ZSBpbiBwaXhlbHNcclxuICAgICAgICAvLyAgU28gd2UnbGwgaGF2ZSAxIHNwYWNlZCBwb2ludCBwZXIgJ2FjY3VyYWN5JyBwaXhlbHNcclxuXHJcbiAgICAgICAgdmFyIHNwYWNlZCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQobGVuIC8gYWNjdXJhY3kpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIEZyb21Qb2ludHModGhpcy5nZXRTcGFjZWRQb2ludHMoc3BhY2VkKSwgb3V0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHBvaW50cywgc3BhY2VkIG91dCBYIGRpc3RhbmNlIHBpeGVscyBhcGFydC5cclxuICAgICAqIFRoZSBzbWFsbGVyIHRoZSBkaXN0YW5jZSwgdGhlIGxhcmdlciB0aGUgYXJyYXkgd2lsbCBiZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuQ3VydmUjZ2V0RGlzdGFuY2VQb2ludHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gZGlzdGFuY2UgLSBUaGUgZGlzdGFuY2UsIGluIHBpeGVscywgYmV0d2VlbiBlYWNoIHBvaW50IGFsb25nIHRoZSBjdXJ2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5Qb2ludFtdfSBBbiBBcnJheSBvZiBQb2ludCBvYmplY3RzLlxyXG4gICAgICovXHJcbiAgICBnZXREaXN0YW5jZVBvaW50czogZnVuY3Rpb24gKGRpc3RhbmNlKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBsZW4gPSB0aGlzLmdldExlbmd0aCgpO1xyXG5cclxuICAgICAgICB2YXIgc3BhY2VkID0gTWF0aC5tYXgoMSwgbGVuIC8gZGlzdGFuY2UpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTcGFjZWRQb2ludHMoc3BhY2VkKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkN1cnZlI2dldEVuZFBvaW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFtvdXRdIC0gT3B0aW9uYWwgVmVjdG9yIG9iamVjdCB0byBzdG9yZSB0aGUgcmVzdWx0IGluLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFZlY3RvcjIgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGN1cnZlcyBlbmQgcG9pbnQuXHJcbiAgICAgKi9cclxuICAgIGdldEVuZFBvaW50OiBmdW5jdGlvbiAob3V0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgVmVjdG9yMigpOyB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFBvaW50QXQoMSwgb3V0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdG90YWwgY3VydmUgYXJjIGxlbmd0aFxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5DdXJ2ZSNnZXRMZW5ndGhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBnZXRMZW5ndGg6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGxlbmd0aHMgPSB0aGlzLmdldExlbmd0aHMoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGxlbmd0aHNbbGVuZ3Rocy5sZW5ndGggLSAxXTtcclxuICAgIH0sXHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGxpc3Qgb2YgY3VtdWxhdGl2ZSBzZWdtZW50IGxlbmd0aHNcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuQ3VydmUjZ2V0TGVuZ3Roc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZGl2aXNpb25zXSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJbXX0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBnZXRMZW5ndGhzOiBmdW5jdGlvbiAoZGl2aXNpb25zKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChkaXZpc2lvbnMgPT09IHVuZGVmaW5lZCkgeyBkaXZpc2lvbnMgPSB0aGlzLmFyY0xlbmd0aERpdmlzaW9uczsgfVxyXG5cclxuICAgICAgICBpZiAoKHRoaXMuY2FjaGVBcmNMZW5ndGhzLmxlbmd0aCA9PT0gZGl2aXNpb25zICsgMSkgJiYgIXRoaXMubmVlZHNVcGRhdGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm5lZWRzVXBkYXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHZhciBjYWNoZSA9IFtdO1xyXG4gICAgICAgIHZhciBjdXJyZW50O1xyXG4gICAgICAgIHZhciBsYXN0ID0gdGhpcy5nZXRQb2ludCgwLCB0aGlzLl90bXBWZWMyQSk7XHJcbiAgICAgICAgdmFyIHN1bSA9IDA7XHJcblxyXG4gICAgICAgIGNhY2hlLnB1c2goMCk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIHAgPSAxOyBwIDw9IGRpdmlzaW9uczsgcCsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY3VycmVudCA9IHRoaXMuZ2V0UG9pbnQocCAvIGRpdmlzaW9ucywgdGhpcy5fdG1wVmVjMkIpO1xyXG5cclxuICAgICAgICAgICAgc3VtICs9IGN1cnJlbnQuZGlzdGFuY2UobGFzdCk7XHJcblxyXG4gICAgICAgICAgICBjYWNoZS5wdXNoKHN1bSk7XHJcblxyXG4gICAgICAgICAgICBsYXN0LmNvcHkoY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNhY2hlQXJjTGVuZ3RocyA9IGNhY2hlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2FjaGU7IC8vIHsgc3VtczogY2FjaGUsIHN1bTpzdW0gfTsgU3VtIGlzIGluIHRoZSBsYXN0IGVsZW1lbnQuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIEdldCBwb2ludCBhdCByZWxhdGl2ZSBwb3NpdGlvbiBpbiBjdXJ2ZSBhY2NvcmRpbmcgdG8gYXJjIGxlbmd0aFxyXG5cclxuICAgIC8vIC0gdSBbMCAuLiAxXVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5DdXJ2ZSNnZXRQb2ludEF0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLk1hdGguVmVjdG9yMn0gTyAtIFtvdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW291dF0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBnZXRQb2ludEF0OiBmdW5jdGlvbiAodSwgb3V0KVxyXG4gICAge1xyXG4gICAgICAgIHZhciB0ID0gdGhpcy5nZXRVdG9UbWFwcGluZyh1KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9pbnQodCwgb3V0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gR2V0IHNlcXVlbmNlIG9mIHBvaW50cyB1c2luZyBnZXRQb2ludCggdCApXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkN1cnZlI2dldFBvaW50c1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBkaXZpc2lvbnMgLSBUaGUgbnVtYmVyIG9mIGV2ZW5seSBzcGFjZWQgcG9pbnRzIGZyb20gdGhlIGN1cnZlIHRvIHJldHVybi4gSWYgZmFsc3ksIHN0ZXAgcGFyYW0gd2lsbCBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIHBvaW50cy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGVwIC0gU3RlcCBiZXR3ZWVuIHBvaW50cy4gVXNlZCB0byBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBwb2ludHMgdG8gcmV0dXJuIHdoZW4gZGl2aXNpb25zIGlzIGZhbHN5LiBJZ25vcmVkIGlmIGRpdmlzaW9ucyBpcyBwb3NpdGl2ZS4gICAgIFxyXG4gICAgICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLk1hdGguVmVjdG9yMltdKX0gW291dF0gLSBBbiBvcHRpb25hbCBhcnJheSB0byBzdG9yZSB0aGUgcG9pbnRzIGluLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuTWF0aC5WZWN0b3IyW10pfSBBbiBhcnJheSBvZiBQb2ludHMgZnJvbSB0aGUgY3VydmUuXHJcbiAgICAgKi9cclxuICAgIGdldFBvaW50czogZnVuY3Rpb24gKGRpdmlzaW9ucywgc3RlcFJhdGUsIG91dClcclxuICAgIHtcclxuICAgICAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gW107IH1cclxuXHJcbiAgICAgICAgLy8gIElmIGRpdmlzaW9ucyBpcyBhIGZhbHNleSB2YWx1ZSAoZmFsc2UsIG51bGwsIDAsIHVuZGVmaW5lZCwgZXRjKSB0aGVuIHdlIGNhbGN1bGF0ZSBpdCBiYXNlZCBvbiB0aGUgc3RlcFJhdGUgaW5zdGVhZC5cclxuICAgICAgICBpZiAoIWRpdmlzaW9ucylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICghc3RlcFJhdGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGRpdmlzaW9ucyA9IHRoaXMuZGVmYXVsdERpdmlzaW9ucztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGRpdmlzaW9ucyA9IHRoaXMuZ2V0TGVuZ3RoKCkgLyBzdGVwUmF0ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPD0gZGl2aXNpb25zOyBkKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvdXQucHVzaCh0aGlzLmdldFBvaW50KGQgLyBkaXZpc2lvbnMpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5DdXJ2ZSNnZXRSYW5kb21Qb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbb3V0XSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGdldFJhbmRvbVBvaW50OiBmdW5jdGlvbiAob3V0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgVmVjdG9yMigpOyB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFBvaW50KE1hdGgucmFuZG9tKCksIG91dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIEdldCBzZXF1ZW5jZSBvZiBwb2ludHMgdXNpbmcgZ2V0UG9pbnRBdCggdSApXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkN1cnZlI2dldFNwYWNlZFBvaW50c1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZGl2aXNpb25zXSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyW119IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgZ2V0U3BhY2VkUG9pbnRzOiBmdW5jdGlvbiAoZGl2aXNpb25zKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChkaXZpc2lvbnMgPT09IHVuZGVmaW5lZCkgeyBkaXZpc2lvbnMgPSB0aGlzLmRlZmF1bHREaXZpc2lvbnM7IH1cclxuXHJcbiAgICAgICAgdmFyIHBvaW50cyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBkID0gMDsgZCA8PSBkaXZpc2lvbnM7IGQrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0ID0gdGhpcy5nZXRVdG9UbWFwcGluZyhkIC8gZGl2aXNpb25zLCBudWxsLCBkaXZpc2lvbnMpO1xyXG5cclxuICAgICAgICAgICAgcG9pbnRzLnB1c2godGhpcy5nZXRQb2ludCh0KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcG9pbnRzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuQ3VydmUjZ2V0U3RhcnRQb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbb3V0XSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGdldFN0YXJ0UG9pbnQ6IGZ1bmN0aW9uIChvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9pbnRBdCgwLCBvdXQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSB1bml0IHZlY3RvciB0YW5nZW50IGF0IHRcclxuICAgICAqIEluIGNhc2UgYW55IHN1YiBjdXJ2ZSBkb2VzIG5vdCBpbXBsZW1lbnQgaXRzIHRhbmdlbnQgZGVyaXZhdGlvbixcclxuICAgICAqIDIgcG9pbnRzIGEgc21hbGwgZGVsdGEgYXBhcnQgd2lsbCBiZSB1c2VkIHRvIGZpbmQgaXRzIGdyYWRpZW50XHJcbiAgICAgKiB3aGljaCBzZWVtcyB0byBnaXZlIGEgcmVhc29uYWJsZSBhcHByb3hpbWF0aW9uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkN1cnZlI2dldFRhbmdlbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBPIC0gW291dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbb3V0XSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBWZWN0b3IgYXBwcm94aW1hdGluZyB0aGUgdGFuZ2VudCBsaW5lIGF0IHRoZSBwb2ludCB0IChkZWx0YSArLy0gMC4wMDAxKVxyXG4gICAgICovXHJcbiAgICBnZXRUYW5nZW50OiBmdW5jdGlvbiAodCwgb3V0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgVmVjdG9yMigpOyB9XHJcblxyXG4gICAgICAgIHZhciBkZWx0YSA9IDAuMDAwMTtcclxuICAgICAgICB2YXIgdDEgPSB0IC0gZGVsdGE7XHJcbiAgICAgICAgdmFyIHQyID0gdCArIGRlbHRhO1xyXG5cclxuICAgICAgICAvLyBDYXBwaW5nIGluIGNhc2Ugb2YgZGFuZ2VyXHJcblxyXG4gICAgICAgIGlmICh0MSA8IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0MSA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodDIgPiAxKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdDIgPSAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nZXRQb2ludCh0MSwgdGhpcy5fdG1wVmVjMkEpO1xyXG4gICAgICAgIHRoaXMuZ2V0UG9pbnQodDIsIG91dCk7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQuc3VidHJhY3QodGhpcy5fdG1wVmVjMkEpLm5vcm1hbGl6ZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuQ3VydmUjZ2V0VGFuZ2VudEF0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLk1hdGguVmVjdG9yMn0gTyAtIFtvdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW291dF0gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBnZXRUYW5nZW50QXQ6IGZ1bmN0aW9uICh1LCBvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHQgPSB0aGlzLmdldFV0b1RtYXBwaW5nKHUpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUYW5nZW50KHQsIG91dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vICBHaXZlbiBhIGRpc3RhbmNlIGluIHBpeGVscywgZ2V0IGEgdCB0byBmaW5kIHAuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuQ3VydmUjZ2V0VEZyb21EaXN0YW5jZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBkaXN0YW5jZSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpdmlzaW9uc10gLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGdldFRGcm9tRGlzdGFuY2U6IGZ1bmN0aW9uIChkaXN0YW5jZSwgZGl2aXNpb25zKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChkaXN0YW5jZSA8PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRVdG9UbWFwcGluZygwLCBkaXN0YW5jZSwgZGl2aXNpb25zKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gR2l2ZW4gdSAoIDAgLi4gMSApLCBnZXQgYSB0IHRvIGZpbmQgcC4gVGhpcyBnaXZlcyB5b3UgcG9pbnRzIHdoaWNoIGFyZSBlcXVpZGlzdGFudFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5DdXJ2ZSNnZXRVdG9UbWFwcGluZ1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHUgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGRpc3RhbmNlIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZGl2aXNpb25zXSAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgZ2V0VXRvVG1hcHBpbmc6IGZ1bmN0aW9uICh1LCBkaXN0YW5jZSwgZGl2aXNpb25zKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBhcmNMZW5ndGhzID0gdGhpcy5nZXRMZW5ndGhzKGRpdmlzaW9ucyk7XHJcblxyXG4gICAgICAgIHZhciBpID0gMDtcclxuICAgICAgICB2YXIgaWwgPSBhcmNMZW5ndGhzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdmFyIHRhcmdldEFyY0xlbmd0aDsgLy8gVGhlIHRhcmdldGVkIHUgZGlzdGFuY2UgdmFsdWUgdG8gZ2V0XHJcblxyXG4gICAgICAgIGlmIChkaXN0YW5jZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBDYW5ub3Qgb3ZlcnNob290IHRoZSBjdXJ2ZVxyXG4gICAgICAgICAgICB0YXJnZXRBcmNMZW5ndGggPSBNYXRoLm1pbihkaXN0YW5jZSwgYXJjTGVuZ3Roc1tpbCAtIDFdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGFyZ2V0QXJjTGVuZ3RoID0gdSAqIGFyY0xlbmd0aHNbaWwgLSAxXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGJpbmFyeSBzZWFyY2ggZm9yIHRoZSBpbmRleCB3aXRoIGxhcmdlc3QgdmFsdWUgc21hbGxlciB0aGFuIHRhcmdldCB1IGRpc3RhbmNlXHJcblxyXG4gICAgICAgIHZhciBsb3cgPSAwO1xyXG4gICAgICAgIHZhciBoaWdoID0gaWwgLSAxO1xyXG4gICAgICAgIHZhciBjb21wYXJpc29uO1xyXG5cclxuICAgICAgICB3aGlsZSAobG93IDw9IGhpZ2gpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpID0gTWF0aC5mbG9vcihsb3cgKyAoaGlnaCAtIGxvdykgLyAyKTsgLy8gbGVzcyBsaWtlbHkgdG8gb3ZlcmZsb3csIHRob3VnaCBwcm9iYWJseSBub3QgaXNzdWUgaGVyZSwgSlMgZG9lc24ndCByZWFsbHkgaGF2ZSBpbnRlZ2VycywgYWxsIG51bWJlcnMgYXJlIGZsb2F0c1xyXG5cclxuICAgICAgICAgICAgY29tcGFyaXNvbiA9IGFyY0xlbmd0aHNbaV0gLSB0YXJnZXRBcmNMZW5ndGg7XHJcblxyXG4gICAgICAgICAgICBpZiAoY29tcGFyaXNvbiA8IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxvdyA9IGkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBhcmlzb24gPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBoaWdoID0gaSAtIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBoaWdoID0gaTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpID0gaGlnaDtcclxuXHJcbiAgICAgICAgaWYgKGFyY0xlbmd0aHNbaV0gPT09IHRhcmdldEFyY0xlbmd0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBpIC8gKGlsIC0gMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB3ZSBjb3VsZCBnZXQgZmluZXIgZ3JhaW4gYXQgbGVuZ3Rocywgb3IgdXNlIHNpbXBsZSBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIHBvaW50c1xyXG5cclxuICAgICAgICB2YXIgbGVuZ3RoQmVmb3JlID0gYXJjTGVuZ3Roc1tpXTtcclxuICAgICAgICB2YXIgbGVuZ3RoQWZ0ZXIgPSBhcmNMZW5ndGhzW2kgKyAxXTtcclxuXHJcbiAgICAgICAgdmFyIHNlZ21lbnRMZW5ndGggPSBsZW5ndGhBZnRlciAtIGxlbmd0aEJlZm9yZTtcclxuXHJcbiAgICAgICAgLy8gZGV0ZXJtaW5lIHdoZXJlIHdlIGFyZSBiZXR3ZWVuIHRoZSAnYmVmb3JlJyBhbmQgJ2FmdGVyJyBwb2ludHNcclxuXHJcbiAgICAgICAgdmFyIHNlZ21lbnRGcmFjdGlvbiA9ICh0YXJnZXRBcmNMZW5ndGggLSBsZW5ndGhCZWZvcmUpIC8gc2VnbWVudExlbmd0aDtcclxuXHJcbiAgICAgICAgLy8gYWRkIHRoYXQgZnJhY3Rpb25hbCBhbW91bnQgdG8gdFxyXG5cclxuICAgICAgICByZXR1cm4gKGkgKyBzZWdtZW50RnJhY3Rpb24pIC8gKGlsIC0gMSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5DdXJ2ZSN1cGRhdGVBcmNMZW5ndGhzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdXBkYXRlQXJjTGVuZ3RoczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRMZW5ndGhzKCk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ3VydmU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/curves/Curve.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/curves/EllipseCurve.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/curves/EllipseCurve.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n// Based on the three.js Curve classes created by [zz85](http://www.lab4games.net/zz85/blog)\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Curve = __webpack_require__(/*! ./Curve */ \"./node_modules/phaser/src/curves/Curve.js\");\r\nvar DegToRad = __webpack_require__(/*! ../math/DegToRad */ \"./node_modules/phaser/src/math/DegToRad.js\");\r\nvar GetValue = __webpack_require__(/*! ../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar RadToDeg = __webpack_require__(/*! ../math/RadToDeg */ \"./node_modules/phaser/src/math/RadToDeg.js\");\r\nvar Vector2 = __webpack_require__(/*! ../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * An Elliptical Curve derived from the Base Curve class.\r\n * \r\n * See https://en.wikipedia.org/wiki/Elliptic_curve for more details.\r\n *\r\n * @class Ellipse\r\n * @extends Phaser.Curves.Curve\r\n * @memberof Phaser.Curves\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {(number|Phaser.Types.Curves.EllipseCurveConfig)} [x=0] - The x coordinate of the ellipse, or an Ellipse Curve configuration object.\r\n * @param {number} [y=0] - The y coordinate of the ellipse.\r\n * @param {number} [xRadius=0] - The horizontal radius of ellipse.\r\n * @param {number} [yRadius=0] - The vertical radius of ellipse.\r\n * @param {integer} [startAngle=0] - The start angle of the ellipse, in degrees.\r\n * @param {integer} [endAngle=360] - The end angle of the ellipse, in degrees.\r\n * @param {boolean} [clockwise=false] - Whether the ellipse angles are given as clockwise (`true`) or counter-clockwise (`false`).\r\n * @param {integer} [rotation=0] - The rotation of the ellipse, in degrees.\r\n */\r\nvar EllipseCurve = new Class({\r\n\r\n Extends: Curve,\r\n\r\n initialize:\r\n\r\n function EllipseCurve (x, y, xRadius, yRadius, startAngle, endAngle, clockwise, rotation)\r\n {\r\n if (typeof x === 'object')\r\n {\r\n var config = x;\r\n\r\n x = GetValue(config, 'x', 0);\r\n y = GetValue(config, 'y', 0);\r\n xRadius = GetValue(config, 'xRadius', 0);\r\n yRadius = GetValue(config, 'yRadius', xRadius);\r\n startAngle = GetValue(config, 'startAngle', 0);\r\n endAngle = GetValue(config, 'endAngle', 360);\r\n clockwise = GetValue(config, 'clockwise', false);\r\n rotation = GetValue(config, 'rotation', 0);\r\n }\r\n else\r\n {\r\n if (yRadius === undefined) { yRadius = xRadius; }\r\n if (startAngle === undefined) { startAngle = 0; }\r\n if (endAngle === undefined) { endAngle = 360; }\r\n if (clockwise === undefined) { clockwise = false; }\r\n if (rotation === undefined) { rotation = 0; }\r\n }\r\n\r\n Curve.call(this, 'EllipseCurve');\r\n\r\n // Center point\r\n\r\n /**\r\n * The center point of the ellipse. Used for calculating rotation.\r\n *\r\n * @name Phaser.Curves.Ellipse#p0\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.0.0\r\n */\r\n this.p0 = new Vector2(x, y);\r\n\r\n /**\r\n * The horizontal radius of the ellipse.\r\n *\r\n * @name Phaser.Curves.Ellipse#_xRadius\r\n * @type {number}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._xRadius = xRadius;\r\n\r\n /**\r\n * The vertical radius of the ellipse.\r\n *\r\n * @name Phaser.Curves.Ellipse#_yRadius\r\n * @type {number}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._yRadius = yRadius;\r\n\r\n // Radians\r\n\r\n /**\r\n * The starting angle of the ellipse in radians.\r\n *\r\n * @name Phaser.Curves.Ellipse#_startAngle\r\n * @type {number}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._startAngle = DegToRad(startAngle);\r\n\r\n /**\r\n * The end angle of the ellipse in radians.\r\n *\r\n * @name Phaser.Curves.Ellipse#_endAngle\r\n * @type {number}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._endAngle = DegToRad(endAngle);\r\n\r\n /**\r\n * Anti-clockwise direction.\r\n *\r\n * @name Phaser.Curves.Ellipse#_clockwise\r\n * @type {boolean}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._clockwise = clockwise;\r\n\r\n /**\r\n * The rotation of the arc.\r\n *\r\n * @name Phaser.Curves.Ellipse#_rotation\r\n * @type {number}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._rotation = DegToRad(rotation);\r\n },\r\n\r\n /**\r\n * Gets the starting point on the curve.\r\n *\r\n * @method Phaser.Curves.Ellipse#getStartPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @param {Phaser.Math.Vector2} [out] - A Vector2 object to store the result in. If not given will be created.\r\n *\r\n * @return {Phaser.Math.Vector2} The coordinates of the point on the curve. If an `out` object was given this will be returned.\r\n */\r\n getStartPoint: function (out)\r\n {\r\n if (out === undefined) { out = new Vector2(); }\r\n\r\n return this.getPoint(0, out);\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Curves.Ellipse#getResolution\r\n * @since 3.0.0\r\n *\r\n * @param {number} divisions - [description]\r\n *\r\n * @return {number} [description]\r\n */\r\n getResolution: function (divisions)\r\n {\r\n return divisions * 2;\r\n },\r\n\r\n /**\r\n * Get point at relative position in curve according to length.\r\n *\r\n * @method Phaser.Curves.Ellipse#getPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @param {number} t - The position along the curve to return. Where 0 is the start and 1 is the end.\r\n * @param {Phaser.Math.Vector2} [out] - A Vector2 object to store the result in. If not given will be created.\r\n *\r\n * @return {Phaser.Math.Vector2} The coordinates of the point on the curve. If an `out` object was given this will be returned.\r\n */\r\n getPoint: function (t, out)\r\n {\r\n if (out === undefined) { out = new Vector2(); }\r\n\r\n var twoPi = Math.PI * 2;\r\n var deltaAngle = this._endAngle - this._startAngle;\r\n var samePoints = Math.abs(deltaAngle) < Number.EPSILON;\r\n\r\n // ensures that deltaAngle is 0 .. 2 PI\r\n while (deltaAngle < 0)\r\n {\r\n deltaAngle += twoPi;\r\n }\r\n\r\n while (deltaAngle > twoPi)\r\n {\r\n deltaAngle -= twoPi;\r\n }\r\n\r\n if (deltaAngle < Number.EPSILON)\r\n {\r\n if (samePoints)\r\n {\r\n deltaAngle = 0;\r\n }\r\n else\r\n {\r\n deltaAngle = twoPi;\r\n }\r\n }\r\n\r\n if (this._clockwise && !samePoints)\r\n {\r\n if (deltaAngle === twoPi)\r\n {\r\n deltaAngle = - twoPi;\r\n }\r\n else\r\n {\r\n deltaAngle = deltaAngle - twoPi;\r\n }\r\n }\r\n\r\n var angle = this._startAngle + t * deltaAngle;\r\n var x = this.p0.x + this._xRadius * Math.cos(angle);\r\n var y = this.p0.y + this._yRadius * Math.sin(angle);\r\n\r\n if (this._rotation !== 0)\r\n {\r\n var cos = Math.cos(this._rotation);\r\n var sin = Math.sin(this._rotation);\r\n\r\n var tx = x - this.p0.x;\r\n var ty = y - this.p0.y;\r\n\r\n // Rotate the point about the center of the ellipse.\r\n x = tx * cos - ty * sin + this.p0.x;\r\n y = tx * sin + ty * cos + this.p0.y;\r\n }\r\n\r\n return out.set(x, y);\r\n },\r\n\r\n /**\r\n * Sets the horizontal radius of this curve.\r\n *\r\n * @method Phaser.Curves.Ellipse#setXRadius\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The horizontal radius of this curve.\r\n *\r\n * @return {Phaser.Curves.Ellipse} This curve object.\r\n */\r\n setXRadius: function (value)\r\n {\r\n this.xRadius = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the vertical radius of this curve.\r\n *\r\n * @method Phaser.Curves.Ellipse#setYRadius\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The vertical radius of this curve.\r\n *\r\n * @return {Phaser.Curves.Ellipse} This curve object.\r\n */\r\n setYRadius: function (value)\r\n {\r\n this.yRadius = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the width of this curve.\r\n *\r\n * @method Phaser.Curves.Ellipse#setWidth\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The width of this curve.\r\n *\r\n * @return {Phaser.Curves.Ellipse} This curve object.\r\n */\r\n setWidth: function (value)\r\n {\r\n this.xRadius = value * 2;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the height of this curve.\r\n *\r\n * @method Phaser.Curves.Ellipse#setHeight\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The height of this curve.\r\n *\r\n * @return {Phaser.Curves.Ellipse} This curve object.\r\n */\r\n setHeight: function (value)\r\n {\r\n this.yRadius = value * 2;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the start angle of this curve.\r\n *\r\n * @method Phaser.Curves.Ellipse#setStartAngle\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The start angle of this curve, in radians.\r\n *\r\n * @return {Phaser.Curves.Ellipse} This curve object.\r\n */\r\n setStartAngle: function (value)\r\n {\r\n this.startAngle = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the end angle of this curve.\r\n *\r\n * @method Phaser.Curves.Ellipse#setEndAngle\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The end angle of this curve, in radians.\r\n *\r\n * @return {Phaser.Curves.Ellipse} This curve object.\r\n */\r\n setEndAngle: function (value)\r\n {\r\n this.endAngle = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets if this curve extends clockwise or anti-clockwise.\r\n *\r\n * @method Phaser.Curves.Ellipse#setClockwise\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} value - The clockwise state of this curve.\r\n *\r\n * @return {Phaser.Curves.Ellipse} This curve object.\r\n */\r\n setClockwise: function (value)\r\n {\r\n this.clockwise = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the rotation of this curve.\r\n *\r\n * @method Phaser.Curves.Ellipse#setRotation\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The rotation of this curve, in radians.\r\n *\r\n * @return {Phaser.Curves.Ellipse} This curve object.\r\n */\r\n setRotation: function (value)\r\n {\r\n this.rotation = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * The x coordinate of the center of the ellipse.\r\n *\r\n * @name Phaser.Curves.Ellipse#x\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n x: {\r\n\r\n get: function ()\r\n {\r\n return this.p0.x;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.p0.x = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The y coordinate of the center of the ellipse.\r\n *\r\n * @name Phaser.Curves.Ellipse#y\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n y: {\r\n\r\n get: function ()\r\n {\r\n return this.p0.y;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.p0.y = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The horizontal radius of the ellipse.\r\n *\r\n * @name Phaser.Curves.Ellipse#xRadius\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n xRadius: {\r\n\r\n get: function ()\r\n {\r\n return this._xRadius;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._xRadius = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The vertical radius of the ellipse.\r\n *\r\n * @name Phaser.Curves.Ellipse#yRadius\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n yRadius: {\r\n\r\n get: function ()\r\n {\r\n return this._yRadius;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._yRadius = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The start angle of the ellipse in degrees.\r\n *\r\n * @name Phaser.Curves.Ellipse#startAngle\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n startAngle: {\r\n\r\n get: function ()\r\n {\r\n return RadToDeg(this._startAngle);\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._startAngle = DegToRad(value);\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The end angle of the ellipse in degrees.\r\n *\r\n * @name Phaser.Curves.Ellipse#endAngle\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n endAngle: {\r\n\r\n get: function ()\r\n {\r\n return RadToDeg(this._endAngle);\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._endAngle = DegToRad(value);\r\n }\r\n\r\n },\r\n\r\n /**\r\n * `true` if the ellipse rotation is clockwise or `false` if anti-clockwise.\r\n *\r\n * @name Phaser.Curves.Ellipse#clockwise\r\n * @type {boolean}\r\n * @since 3.0.0\r\n */\r\n clockwise: {\r\n\r\n get: function ()\r\n {\r\n return this._clockwise;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._clockwise = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The rotation of the ellipse, relative to the center, in degrees.\r\n *\r\n * @name Phaser.Curves.Ellipse#angle\r\n * @type {number}\r\n * @since 3.14.0\r\n */\r\n angle: {\r\n\r\n get: function ()\r\n {\r\n return RadToDeg(this._rotation);\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._rotation = DegToRad(value);\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The rotation of the ellipse, relative to the center, in radians.\r\n *\r\n * @name Phaser.Curves.Ellipse#rotation\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n rotation: {\r\n\r\n get: function ()\r\n {\r\n return this._rotation;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._rotation = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * JSON serialization of the curve.\r\n *\r\n * @method Phaser.Curves.Ellipse#toJSON\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Types.Curves.JSONEllipseCurve} The JSON object containing this curve data.\r\n */\r\n toJSON: function ()\r\n {\r\n return {\r\n type: this.type,\r\n x: this.p0.x,\r\n y: this.p0.y,\r\n xRadius: this._xRadius,\r\n yRadius: this._yRadius,\r\n startAngle: RadToDeg(this._startAngle),\r\n endAngle: RadToDeg(this._endAngle),\r\n clockwise: this._clockwise,\r\n rotation: RadToDeg(this._rotation)\r\n };\r\n }\r\n\r\n});\r\n\r\n/**\r\n * Creates a curve from the provided Ellipse Curve Configuration object.\r\n *\r\n * @function Phaser.Curves.Ellipse.fromJSON\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Curves.JSONEllipseCurve} data - The JSON object containing this curve data.\r\n *\r\n * @return {Phaser.Curves.Ellipse} The ellipse curve constructed from the configuration object.\r\n */\r\nEllipseCurve.fromJSON = function (data)\r\n{\r\n return new EllipseCurve(data);\r\n};\r\n\r\nmodule.exports = EllipseCurve;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jdXJ2ZXMvRWxsaXBzZUN1cnZlLmpzP2ViNTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsWUFBWSxtQkFBTyxDQUFDLDBEQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxvRUFBa0I7QUFDekMsZUFBZSxtQkFBTyxDQUFDLG9GQUEwQjtBQUNqRCxlQUFlLG1CQUFPLENBQUMsb0VBQWtCO0FBQ3pDLGNBQWMsbUJBQU8sQ0FBQyxrRUFBaUI7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0RBQWdEO0FBQzNELFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxtQkFBbUI7QUFDM0QsMkNBQTJDLGdCQUFnQjtBQUMzRCx5Q0FBeUMsZ0JBQWdCO0FBQ3pELDBDQUEwQyxtQkFBbUI7QUFDN0QseUNBQXlDLGNBQWM7QUFDdkQ7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxxQkFBcUI7O0FBRXJEO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLHFCQUFxQjs7QUFFckQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IscUNBQXFDO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUNBQXFDO0FBQ2hEO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2N1cnZlcy9FbGxpcHNlQ3VydmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8vICBCYXNlZCBvbiB0aGUgdGhyZWUuanMgQ3VydmUgY2xhc3NlcyBjcmVhdGVkIGJ5IFt6ejg1XShodHRwOi8vd3d3LmxhYjRnYW1lcy5uZXQveno4NS9ibG9nKVxyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEN1cnZlID0gcmVxdWlyZSgnLi9DdXJ2ZScpO1xyXG52YXIgRGVnVG9SYWQgPSByZXF1aXJlKCcuLi9tYXRoL0RlZ1RvUmFkJyk7XHJcbnZhciBHZXRWYWx1ZSA9IHJlcXVpcmUoJy4uL3V0aWxzL29iamVjdC9HZXRWYWx1ZScpO1xyXG52YXIgUmFkVG9EZWcgPSByZXF1aXJlKCcuLi9tYXRoL1JhZFRvRGVnJyk7XHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vbWF0aC9WZWN0b3IyJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBbiBFbGxpcHRpY2FsIEN1cnZlIGRlcml2ZWQgZnJvbSB0aGUgQmFzZSBDdXJ2ZSBjbGFzcy5cclxuICogXHJcbiAqIFNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FbGxpcHRpY19jdXJ2ZSBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKlxyXG4gKiBAY2xhc3MgRWxsaXBzZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuQ3VydmVzLkN1cnZlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuQ3VydmVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsobnVtYmVyfFBoYXNlci5UeXBlcy5DdXJ2ZXMuRWxsaXBzZUN1cnZlQ29uZmlnKX0gW3g9MF0gLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBlbGxpcHNlLCBvciBhbiBFbGxpcHNlIEN1cnZlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBlbGxpcHNlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3hSYWRpdXM9MF0gLSBUaGUgaG9yaXpvbnRhbCByYWRpdXMgb2YgZWxsaXBzZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5UmFkaXVzPTBdIC0gVGhlIHZlcnRpY2FsIHJhZGl1cyBvZiBlbGxpcHNlLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtzdGFydEFuZ2xlPTBdIC0gVGhlIHN0YXJ0IGFuZ2xlIG9mIHRoZSBlbGxpcHNlLCBpbiBkZWdyZWVzLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtlbmRBbmdsZT0zNjBdIC0gVGhlIGVuZCBhbmdsZSBvZiB0aGUgZWxsaXBzZSwgaW4gZGVncmVlcy5cclxuICogQHBhcmFtIHtib29sZWFufSBbY2xvY2t3aXNlPWZhbHNlXSAtIFdoZXRoZXIgdGhlIGVsbGlwc2UgYW5nbGVzIGFyZSBnaXZlbiBhcyBjbG9ja3dpc2UgKGB0cnVlYCkgb3IgY291bnRlci1jbG9ja3dpc2UgKGBmYWxzZWApLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtyb3RhdGlvbj0wXSAtIFRoZSByb3RhdGlvbiBvZiB0aGUgZWxsaXBzZSwgaW4gZGVncmVlcy5cclxuICovXHJcbnZhciBFbGxpcHNlQ3VydmUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEN1cnZlLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gRWxsaXBzZUN1cnZlICh4LCB5LCB4UmFkaXVzLCB5UmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgY2xvY2t3aXNlLCByb3RhdGlvbilcclxuICAgIHtcclxuICAgICAgICBpZiAodHlwZW9mIHggPT09ICdvYmplY3QnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IHg7XHJcblxyXG4gICAgICAgICAgICB4ID0gR2V0VmFsdWUoY29uZmlnLCAneCcsIDApO1xyXG4gICAgICAgICAgICB5ID0gR2V0VmFsdWUoY29uZmlnLCAneScsIDApO1xyXG4gICAgICAgICAgICB4UmFkaXVzID0gR2V0VmFsdWUoY29uZmlnLCAneFJhZGl1cycsIDApO1xyXG4gICAgICAgICAgICB5UmFkaXVzID0gR2V0VmFsdWUoY29uZmlnLCAneVJhZGl1cycsIHhSYWRpdXMpO1xyXG4gICAgICAgICAgICBzdGFydEFuZ2xlID0gR2V0VmFsdWUoY29uZmlnLCAnc3RhcnRBbmdsZScsIDApO1xyXG4gICAgICAgICAgICBlbmRBbmdsZSA9IEdldFZhbHVlKGNvbmZpZywgJ2VuZEFuZ2xlJywgMzYwKTtcclxuICAgICAgICAgICAgY2xvY2t3aXNlID0gR2V0VmFsdWUoY29uZmlnLCAnY2xvY2t3aXNlJywgZmFsc2UpO1xyXG4gICAgICAgICAgICByb3RhdGlvbiA9IEdldFZhbHVlKGNvbmZpZywgJ3JvdGF0aW9uJywgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh5UmFkaXVzID09PSB1bmRlZmluZWQpIHsgeVJhZGl1cyA9IHhSYWRpdXM7IH1cclxuICAgICAgICAgICAgaWYgKHN0YXJ0QW5nbGUgPT09IHVuZGVmaW5lZCkgeyBzdGFydEFuZ2xlID0gMDsgfVxyXG4gICAgICAgICAgICBpZiAoZW5kQW5nbGUgPT09IHVuZGVmaW5lZCkgeyBlbmRBbmdsZSA9IDM2MDsgfVxyXG4gICAgICAgICAgICBpZiAoY2xvY2t3aXNlID09PSB1bmRlZmluZWQpIHsgY2xvY2t3aXNlID0gZmFsc2U7IH1cclxuICAgICAgICAgICAgaWYgKHJvdGF0aW9uID09PSB1bmRlZmluZWQpIHsgcm90YXRpb24gPSAwOyB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBDdXJ2ZS5jYWxsKHRoaXMsICdFbGxpcHNlQ3VydmUnKTtcclxuXHJcbiAgICAgICAgLy8gIENlbnRlciBwb2ludFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY2VudGVyIHBvaW50IG9mIHRoZSBlbGxpcHNlLiBVc2VkIGZvciBjYWxjdWxhdGluZyByb3RhdGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DdXJ2ZXMuRWxsaXBzZSNwMFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucDAgPSBuZXcgVmVjdG9yMih4LCB5KTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGhvcml6b250YWwgcmFkaXVzIG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5FbGxpcHNlI194UmFkaXVzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3hSYWRpdXMgPSB4UmFkaXVzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmVydGljYWwgcmFkaXVzIG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5FbGxpcHNlI195UmFkaXVzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3lSYWRpdXMgPSB5UmFkaXVzO1xyXG5cclxuICAgICAgICAvLyAgUmFkaWFuc1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc3RhcnRpbmcgYW5nbGUgb2YgdGhlIGVsbGlwc2UgaW4gcmFkaWFucy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DdXJ2ZXMuRWxsaXBzZSNfc3RhcnRBbmdsZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9zdGFydEFuZ2xlID0gRGVnVG9SYWQoc3RhcnRBbmdsZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBlbmQgYW5nbGUgb2YgdGhlIGVsbGlwc2UgaW4gcmFkaWFucy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DdXJ2ZXMuRWxsaXBzZSNfZW5kQW5nbGVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fZW5kQW5nbGUgPSBEZWdUb1JhZChlbmRBbmdsZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFudGktY2xvY2t3aXNlIGRpcmVjdGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DdXJ2ZXMuRWxsaXBzZSNfY2xvY2t3aXNlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9jbG9ja3dpc2UgPSBjbG9ja3dpc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSByb3RhdGlvbiBvZiB0aGUgYXJjLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5FbGxpcHNlI19yb3RhdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IERlZ1RvUmFkKHJvdGF0aW9uKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBzdGFydGluZyBwb2ludCBvbiB0aGUgY3VydmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkVsbGlwc2UjZ2V0U3RhcnRQb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbb3V0XSAtIEEgVmVjdG9yMiBvYmplY3QgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbi4gSWYgbm90IGdpdmVuIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBUaGUgY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50IG9uIHRoZSBjdXJ2ZS4gSWYgYW4gYG91dGAgb2JqZWN0IHdhcyBnaXZlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIGdldFN0YXJ0UG9pbnQ6IGZ1bmN0aW9uIChvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9pbnQoMCwgb3V0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkVsbGlwc2UjZ2V0UmVzb2x1dGlvblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRpdmlzaW9ucyAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgZ2V0UmVzb2x1dGlvbjogZnVuY3Rpb24gKGRpdmlzaW9ucylcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZGl2aXNpb25zICogMjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgcG9pbnQgYXQgcmVsYXRpdmUgcG9zaXRpb24gaW4gY3VydmUgYWNjb3JkaW5nIHRvIGxlbmd0aC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuRWxsaXBzZSNnZXRQb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHQgLSBUaGUgcG9zaXRpb24gYWxvbmcgdGhlIGN1cnZlIHRvIHJldHVybi4gV2hlcmUgMCBpcyB0aGUgc3RhcnQgYW5kIDEgaXMgdGhlIGVuZC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW291dF0gLSBBIFZlY3RvcjIgb2JqZWN0IHRvIHN0b3JlIHRoZSByZXN1bHQgaW4uIElmIG5vdCBnaXZlbiB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gVGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCBvbiB0aGUgY3VydmUuIElmIGFuIGBvdXRgIG9iamVjdCB3YXMgZ2l2ZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICovXHJcbiAgICBnZXRQb2ludDogZnVuY3Rpb24gKHQsIG91dClcclxuICAgIHtcclxuICAgICAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFZlY3RvcjIoKTsgfVxyXG5cclxuICAgICAgICB2YXIgdHdvUGkgPSBNYXRoLlBJICogMjtcclxuICAgICAgICB2YXIgZGVsdGFBbmdsZSA9IHRoaXMuX2VuZEFuZ2xlIC0gdGhpcy5fc3RhcnRBbmdsZTtcclxuICAgICAgICB2YXIgc2FtZVBvaW50cyA9IE1hdGguYWJzKGRlbHRhQW5nbGUpIDwgTnVtYmVyLkVQU0lMT047XHJcblxyXG4gICAgICAgIC8vIGVuc3VyZXMgdGhhdCBkZWx0YUFuZ2xlIGlzIDAgLi4gMiBQSVxyXG4gICAgICAgIHdoaWxlIChkZWx0YUFuZ2xlIDwgMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGRlbHRhQW5nbGUgKz0gdHdvUGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSAoZGVsdGFBbmdsZSA+IHR3b1BpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZGVsdGFBbmdsZSAtPSB0d29QaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkZWx0YUFuZ2xlIDwgTnVtYmVyLkVQU0lMT04pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoc2FtZVBvaW50cylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGVsdGFBbmdsZSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkZWx0YUFuZ2xlID0gdHdvUGk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9jbG9ja3dpc2UgJiYgIXNhbWVQb2ludHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoZGVsdGFBbmdsZSA9PT0gdHdvUGkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGRlbHRhQW5nbGUgPSAtIHR3b1BpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGVsdGFBbmdsZSA9IGRlbHRhQW5nbGUgLSB0d29QaTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGFuZ2xlID0gdGhpcy5fc3RhcnRBbmdsZSArIHQgKiBkZWx0YUFuZ2xlO1xyXG4gICAgICAgIHZhciB4ID0gdGhpcy5wMC54ICsgdGhpcy5feFJhZGl1cyAqIE1hdGguY29zKGFuZ2xlKTtcclxuICAgICAgICB2YXIgeSA9IHRoaXMucDAueSArIHRoaXMuX3lSYWRpdXMgKiBNYXRoLnNpbihhbmdsZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9yb3RhdGlvbiAhPT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjb3MgPSBNYXRoLmNvcyh0aGlzLl9yb3RhdGlvbik7XHJcbiAgICAgICAgICAgIHZhciBzaW4gPSBNYXRoLnNpbih0aGlzLl9yb3RhdGlvbik7XHJcblxyXG4gICAgICAgICAgICB2YXIgdHggPSB4IC0gdGhpcy5wMC54O1xyXG4gICAgICAgICAgICB2YXIgdHkgPSB5IC0gdGhpcy5wMC55O1xyXG5cclxuICAgICAgICAgICAgLy8gUm90YXRlIHRoZSBwb2ludCBhYm91dCB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICAgICAgICB4ID0gdHggKiBjb3MgLSB0eSAqIHNpbiArIHRoaXMucDAueDtcclxuICAgICAgICAgICAgeSA9IHR4ICogc2luICsgdHkgKiBjb3MgKyB0aGlzLnAwLnk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb3V0LnNldCh4LCB5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBob3Jpem9udGFsIHJhZGl1cyBvZiB0aGlzIGN1cnZlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5FbGxpcHNlI3NldFhSYWRpdXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBob3Jpem9udGFsIHJhZGl1cyBvZiB0aGlzIGN1cnZlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DdXJ2ZXMuRWxsaXBzZX0gVGhpcyBjdXJ2ZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFhSYWRpdXM6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnhSYWRpdXMgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdmVydGljYWwgcmFkaXVzIG9mIHRoaXMgY3VydmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkVsbGlwc2Ujc2V0WVJhZGl1c1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHZlcnRpY2FsIHJhZGl1cyBvZiB0aGlzIGN1cnZlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DdXJ2ZXMuRWxsaXBzZX0gVGhpcyBjdXJ2ZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFlSYWRpdXM6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnlSYWRpdXMgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgd2lkdGggb2YgdGhpcyBjdXJ2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuRWxsaXBzZSNzZXRXaWR0aFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHdpZHRoIG9mIHRoaXMgY3VydmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkN1cnZlcy5FbGxpcHNlfSBUaGlzIGN1cnZlIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0V2lkdGg6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnhSYWRpdXMgPSB2YWx1ZSAqIDI7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGhlaWdodCBvZiB0aGlzIGN1cnZlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5FbGxpcHNlI3NldEhlaWdodFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGhlaWdodCBvZiB0aGlzIGN1cnZlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DdXJ2ZXMuRWxsaXBzZX0gVGhpcyBjdXJ2ZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEhlaWdodDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMueVJhZGl1cyA9IHZhbHVlICogMjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgc3RhcnQgYW5nbGUgb2YgdGhpcyBjdXJ2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuRWxsaXBzZSNzZXRTdGFydEFuZ2xlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgc3RhcnQgYW5nbGUgb2YgdGhpcyBjdXJ2ZSwgaW4gcmFkaWFucy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ3VydmVzLkVsbGlwc2V9IFRoaXMgY3VydmUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTdGFydEFuZ2xlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zdGFydEFuZ2xlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGVuZCBhbmdsZSBvZiB0aGlzIGN1cnZlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5FbGxpcHNlI3NldEVuZEFuZ2xlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgZW5kIGFuZ2xlIG9mIHRoaXMgY3VydmUsIGluIHJhZGlhbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkN1cnZlcy5FbGxpcHNlfSBUaGlzIGN1cnZlIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0RW5kQW5nbGU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmVuZEFuZ2xlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgaWYgdGhpcyBjdXJ2ZSBleHRlbmRzIGNsb2Nrd2lzZSBvciBhbnRpLWNsb2Nrd2lzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuRWxsaXBzZSNzZXRDbG9ja3dpc2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBUaGUgY2xvY2t3aXNlIHN0YXRlIG9mIHRoaXMgY3VydmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkN1cnZlcy5FbGxpcHNlfSBUaGlzIGN1cnZlIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Q2xvY2t3aXNlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jbG9ja3dpc2UgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcm90YXRpb24gb2YgdGhpcyBjdXJ2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuRWxsaXBzZSNzZXRSb3RhdGlvblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHJvdGF0aW9uIG9mIHRoaXMgY3VydmUsIGluIHJhZGlhbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkN1cnZlcy5FbGxpcHNlfSBUaGlzIGN1cnZlIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Um90YXRpb246IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnJvdGF0aW9uID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLkVsbGlwc2UjeFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB4OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnAwLng7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnAwLnggPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLkVsbGlwc2UjeVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB5OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnAwLnk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnAwLnkgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBob3Jpem9udGFsIHJhZGl1cyBvZiB0aGUgZWxsaXBzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLkVsbGlwc2UjeFJhZGl1c1xyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB4UmFkaXVzOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl94UmFkaXVzO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5feFJhZGl1cyA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHZlcnRpY2FsIHJhZGl1cyBvZiB0aGUgZWxsaXBzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLkVsbGlwc2UjeVJhZGl1c1xyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB5UmFkaXVzOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl95UmFkaXVzO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5feVJhZGl1cyA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHN0YXJ0IGFuZ2xlIG9mIHRoZSBlbGxpcHNlIGluIGRlZ3JlZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5FbGxpcHNlI3N0YXJ0QW5nbGVcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc3RhcnRBbmdsZToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gUmFkVG9EZWcodGhpcy5fc3RhcnRBbmdsZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydEFuZ2xlID0gRGVnVG9SYWQodmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGVuZCBhbmdsZSBvZiB0aGUgZWxsaXBzZSBpbiBkZWdyZWVzLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5DdXJ2ZXMuRWxsaXBzZSNlbmRBbmdsZVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBlbmRBbmdsZToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gUmFkVG9EZWcodGhpcy5fZW5kQW5nbGUpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fZW5kQW5nbGUgPSBEZWdUb1JhZCh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBgdHJ1ZWAgaWYgdGhlIGVsbGlwc2Ugcm90YXRpb24gaXMgY2xvY2t3aXNlIG9yIGBmYWxzZWAgaWYgYW50aS1jbG9ja3dpc2UuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5FbGxpcHNlI2Nsb2Nrd2lzZVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgY2xvY2t3aXNlOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jbG9ja3dpc2U7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9jbG9ja3dpc2UgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSByb3RhdGlvbiBvZiB0aGUgZWxsaXBzZSwgcmVsYXRpdmUgdG8gdGhlIGNlbnRlciwgaW4gZGVncmVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLkVsbGlwc2UjYW5nbGVcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4xNC4wXHJcbiAgICAgKi9cclxuICAgIGFuZ2xlOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBSYWRUb0RlZyh0aGlzLl9yb3RhdGlvbik7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IERlZ1RvUmFkKHZhbHVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSByb3RhdGlvbiBvZiB0aGUgZWxsaXBzZSwgcmVsYXRpdmUgdG8gdGhlIGNlbnRlciwgaW4gcmFkaWFucy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLkVsbGlwc2Ujcm90YXRpb25cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgcm90YXRpb246IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JvdGF0aW9uO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fcm90YXRpb24gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEpTT04gc2VyaWFsaXphdGlvbiBvZiB0aGUgY3VydmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkVsbGlwc2UjdG9KU09OXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuQ3VydmVzLkpTT05FbGxpcHNlQ3VydmV9IFRoZSBKU09OIG9iamVjdCBjb250YWluaW5nIHRoaXMgY3VydmUgZGF0YS5cclxuICAgICAqL1xyXG4gICAgdG9KU09OOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcclxuICAgICAgICAgICAgeDogdGhpcy5wMC54LFxyXG4gICAgICAgICAgICB5OiB0aGlzLnAwLnksXHJcbiAgICAgICAgICAgIHhSYWRpdXM6IHRoaXMuX3hSYWRpdXMsXHJcbiAgICAgICAgICAgIHlSYWRpdXM6IHRoaXMuX3lSYWRpdXMsXHJcbiAgICAgICAgICAgIHN0YXJ0QW5nbGU6IFJhZFRvRGVnKHRoaXMuX3N0YXJ0QW5nbGUpLFxyXG4gICAgICAgICAgICBlbmRBbmdsZTogUmFkVG9EZWcodGhpcy5fZW5kQW5nbGUpLFxyXG4gICAgICAgICAgICBjbG9ja3dpc2U6IHRoaXMuX2Nsb2Nrd2lzZSxcclxuICAgICAgICAgICAgcm90YXRpb246IFJhZFRvRGVnKHRoaXMuX3JvdGF0aW9uKVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgY3VydmUgZnJvbSB0aGUgcHJvdmlkZWQgRWxsaXBzZSBDdXJ2ZSBDb25maWd1cmF0aW9uIG9iamVjdC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5DdXJ2ZXMuRWxsaXBzZS5mcm9tSlNPTlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuQ3VydmVzLkpTT05FbGxpcHNlQ3VydmV9IGRhdGEgLSBUaGUgSlNPTiBvYmplY3QgY29udGFpbmluZyB0aGlzIGN1cnZlIGRhdGEuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5DdXJ2ZXMuRWxsaXBzZX0gVGhlIGVsbGlwc2UgY3VydmUgY29uc3RydWN0ZWQgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAqL1xyXG5FbGxpcHNlQ3VydmUuZnJvbUpTT04gPSBmdW5jdGlvbiAoZGF0YSlcclxue1xyXG4gICAgcmV0dXJuIG5ldyBFbGxpcHNlQ3VydmUoZGF0YSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEVsbGlwc2VDdXJ2ZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/curves/EllipseCurve.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/curves/LineCurve.js":
/*!*****************************************************!*\
!*** ./node_modules/phaser/src/curves/LineCurve.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n// Based on the three.js Curve classes created by [zz85](http://www.lab4games.net/zz85/blog)\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Curve = __webpack_require__(/*! ./Curve */ \"./node_modules/phaser/src/curves/Curve.js\");\r\nvar FromPoints = __webpack_require__(/*! ../geom/rectangle/FromPoints */ \"./node_modules/phaser/src/geom/rectangle/FromPoints.js\");\r\nvar Rectangle = __webpack_require__(/*! ../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar Vector2 = __webpack_require__(/*! ../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\nvar tmpVec2 = new Vector2();\r\n\r\n/**\r\n * @classdesc\r\n * A LineCurve is a \"curve\" comprising exactly two points (a line segment).\r\n *\r\n * @class Line\r\n * @extends Phaser.Curves.Curve\r\n * @memberof Phaser.Curves\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Math.Vector2|number[])} p0 - The first endpoint.\r\n * @param {Phaser.Math.Vector2} [p1] - The second endpoint.\r\n */\r\nvar LineCurve = new Class({\r\n\r\n Extends: Curve,\r\n\r\n initialize:\r\n\r\n // vec2s or array\r\n function LineCurve (p0, p1)\r\n {\r\n Curve.call(this, 'LineCurve');\r\n\r\n if (Array.isArray(p0))\r\n {\r\n p1 = new Vector2(p0[2], p0[3]);\r\n p0 = new Vector2(p0[0], p0[1]);\r\n }\r\n\r\n /**\r\n * The first endpoint.\r\n *\r\n * @name Phaser.Curves.Line#p0\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.0.0\r\n */\r\n this.p0 = p0;\r\n\r\n /**\r\n * The second endpoint.\r\n *\r\n * @name Phaser.Curves.Line#p1\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.0.0\r\n */\r\n this.p1 = p1;\r\n\r\n // Override default Curve.arcLengthDivisions\r\n\r\n /**\r\n * The quantity of arc length divisions within the curve.\r\n *\r\n * @name Phaser.Curves.Line#arcLengthDivisions\r\n * @type {integer}\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n this.arcLengthDivisions = 1;\r\n },\r\n\r\n /**\r\n * Returns a Rectangle where the position and dimensions match the bounds of this Curve.\r\n *\r\n * @method Phaser.Curves.Line#getBounds\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} [out] - A Rectangle object to store the bounds in. If not given a new Rectangle will be created.\r\n *\r\n * @return {Phaser.Geom.Rectangle} A Rectangle object holding the bounds of this curve. If `out` was given it will be this object.\r\n */\r\n getBounds: function (out)\r\n {\r\n if (out === undefined) { out = new Rectangle(); }\r\n\r\n return FromPoints([ this.p0, this.p1 ], out);\r\n },\r\n\r\n /**\r\n * Gets the starting point on the curve.\r\n *\r\n * @method Phaser.Curves.Line#getStartPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @param {Phaser.Math.Vector2} [out] - A Vector2 object to store the result in. If not given will be created.\r\n *\r\n * @return {Phaser.Math.Vector2} The coordinates of the point on the curve. If an `out` object was given this will be returned.\r\n */\r\n getStartPoint: function (out)\r\n {\r\n if (out === undefined) { out = new Vector2(); }\r\n\r\n return out.copy(this.p0);\r\n },\r\n\r\n /**\r\n * Gets the resolution of the line.\r\n *\r\n * @method Phaser.Curves.Line#getResolution\r\n * @since 3.0.0\r\n *\r\n * @param {number} [divisions=1] - The number of divisions to consider.\r\n *\r\n * @return {number} The resolution. Equal to the number of divisions.\r\n */\r\n getResolution: function (divisions)\r\n {\r\n if (divisions === undefined) { divisions = 1; }\r\n\r\n return divisions;\r\n },\r\n\r\n /**\r\n * Get point at relative position in curve according to length.\r\n *\r\n * @method Phaser.Curves.Line#getPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @param {number} t - The position along the curve to return. Where 0 is the start and 1 is the end.\r\n * @param {Phaser.Math.Vector2} [out] - A Vector2 object to store the result in. If not given will be created.\r\n *\r\n * @return {Phaser.Math.Vector2} The coordinates of the point on the curve. If an `out` object was given this will be returned.\r\n */\r\n getPoint: function (t, out)\r\n {\r\n if (out === undefined) { out = new Vector2(); }\r\n\r\n if (t === 1)\r\n {\r\n return out.copy(this.p1);\r\n }\r\n\r\n out.copy(this.p1).subtract(this.p0).scale(t).add(this.p0);\r\n\r\n return out;\r\n },\r\n\r\n // Line curve is linear, so we can overwrite default getPointAt\r\n\r\n /**\r\n * Gets a point at a given position on the line.\r\n *\r\n * @method Phaser.Curves.Line#getPointAt\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @param {number} u - The position along the curve to return. Where 0 is the start and 1 is the end.\r\n * @param {Phaser.Math.Vector2} [out] - A Vector2 object to store the result in. If not given will be created.\r\n *\r\n * @return {Phaser.Math.Vector2} The coordinates of the point on the curve. If an `out` object was given this will be returned.\r\n */\r\n getPointAt: function (u, out)\r\n {\r\n return this.getPoint(u, out);\r\n },\r\n\r\n /**\r\n * Gets the slope of the line as a unit vector.\r\n *\r\n * @method Phaser.Curves.Line#getTangent\r\n * @since 3.0.0\r\n * \r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @return {Phaser.Math.Vector2} The tangent vector.\r\n */\r\n getTangent: function ()\r\n {\r\n var tangent = tmpVec2.copy(this.p1).subtract(this.p0);\r\n\r\n return tangent.normalize();\r\n },\r\n\r\n // Override default Curve.draw because this is better than calling getPoints on a line!\r\n\r\n /**\r\n * Draws this curve on the given Graphics object.\r\n *\r\n * The curve is drawn using `Graphics.lineBetween` so will be drawn at whatever the present Graphics line color is.\r\n * The Graphics object is not cleared before the draw, so the curve will appear on-top of anything else already rendered to it.\r\n *\r\n * @method Phaser.Curves.Line#draw\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.Graphics} G - [graphics,$return]\r\n *\r\n * @param {Phaser.GameObjects.Graphics} graphics - The Graphics instance onto which this curve will be drawn.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} The Graphics object to which the curve was drawn.\r\n */\r\n draw: function (graphics)\r\n {\r\n graphics.lineBetween(this.p0.x, this.p0.y, this.p1.x, this.p1.y);\r\n\r\n // So you can chain graphics calls\r\n return graphics;\r\n },\r\n\r\n /**\r\n * Gets a JSON representation of the line.\r\n *\r\n * @method Phaser.Curves.Line#toJSON\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Types.Curves.JSONCurve} The JSON object containing this curve data.\r\n */\r\n toJSON: function ()\r\n {\r\n return {\r\n type: this.type,\r\n points: [\r\n this.p0.x, this.p0.y,\r\n this.p1.x, this.p1.y\r\n ]\r\n };\r\n }\r\n\r\n});\r\n\r\n/**\r\n * Configures this line from a JSON representation.\r\n *\r\n * @function Phaser.Curves.Line.fromJSON\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Curves.JSONCurve} data - The JSON object containing this curve data.\r\n *\r\n * @return {Phaser.Curves.Line} A new LineCurve object.\r\n */\r\nLineCurve.fromJSON = function (data)\r\n{\r\n var points = data.points;\r\n\r\n var p0 = new Vector2(points[0], points[1]);\r\n var p1 = new Vector2(points[2], points[3]);\r\n\r\n return new LineCurve(p0, p1);\r\n};\r\n\r\nmodule.exports = LineCurve;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jdXJ2ZXMvTGluZUN1cnZlLmpzPzQ3NWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsWUFBWSxtQkFBTyxDQUFDLDBEQUFTO0FBQzdCLGlCQUFpQixtQkFBTyxDQUFDLDRGQUE4QjtBQUN2RCxnQkFBZ0IsbUJBQU8sQ0FBQywwRkFBNkI7QUFDckQsY0FBYyxtQkFBTyxDQUFDLGtFQUFpQjs7QUFFdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLCtCQUErQjtBQUMxQyxXQUFXLG9CQUFvQjtBQUMvQjtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHNCQUFzQjtBQUN2QztBQUNBLGVBQWUsc0JBQXNCO0FBQ3JDO0FBQ0EsZ0JBQWdCLHNCQUFzQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsdUJBQXVCOztBQUV2RDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MscUJBQXFCOztBQUVyRDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLGVBQWU7O0FBRXJEO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MscUJBQXFCOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixvQkFBb0I7QUFDckM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsNEJBQTRCO0FBQzdDO0FBQ0EsZUFBZSw0QkFBNEI7QUFDM0M7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQThCO0FBQ3pDO0FBQ0EsWUFBWSxtQkFBbUI7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvY3VydmVzL0xpbmVDdXJ2ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLy8gIEJhc2VkIG9uIHRoZSB0aHJlZS5qcyBDdXJ2ZSBjbGFzc2VzIGNyZWF0ZWQgYnkgW3p6ODVdKGh0dHA6Ly93d3cubGFiNGdhbWVzLm5ldC96ejg1L2Jsb2cpXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ3VydmUgPSByZXF1aXJlKCcuL0N1cnZlJyk7XHJcbnZhciBGcm9tUG9pbnRzID0gcmVxdWlyZSgnLi4vZ2VvbS9yZWN0YW5nbGUvRnJvbVBvaW50cycpO1xyXG52YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi4vZ2VvbS9yZWN0YW5nbGUvUmVjdGFuZ2xlJyk7XHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vbWF0aC9WZWN0b3IyJyk7XHJcblxyXG52YXIgdG1wVmVjMiA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIExpbmVDdXJ2ZSBpcyBhIFwiY3VydmVcIiBjb21wcmlzaW5nIGV4YWN0bHkgdHdvIHBvaW50cyAoYSBsaW5lIHNlZ21lbnQpLlxyXG4gKlxyXG4gKiBAY2xhc3MgTGluZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuQ3VydmVzLkN1cnZlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuQ3VydmVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsoUGhhc2VyLk1hdGguVmVjdG9yMnxudW1iZXJbXSl9IHAwIC0gVGhlIGZpcnN0IGVuZHBvaW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFtwMV0gLSBUaGUgc2Vjb25kIGVuZHBvaW50LlxyXG4gKi9cclxudmFyIExpbmVDdXJ2ZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogQ3VydmUsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICAvLyAgdmVjMnMgb3IgYXJyYXlcclxuICAgIGZ1bmN0aW9uIExpbmVDdXJ2ZSAocDAsIHAxKVxyXG4gICAge1xyXG4gICAgICAgIEN1cnZlLmNhbGwodGhpcywgJ0xpbmVDdXJ2ZScpO1xyXG5cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwMCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwMSA9IG5ldyBWZWN0b3IyKHAwWzJdLCBwMFszXSk7XHJcbiAgICAgICAgICAgIHAwID0gbmV3IFZlY3RvcjIocDBbMF0sIHAwWzFdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBmaXJzdCBlbmRwb2ludC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DdXJ2ZXMuTGluZSNwMFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucDAgPSBwMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHNlY29uZCBlbmRwb2ludC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DdXJ2ZXMuTGluZSNwMVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucDEgPSBwMTtcclxuXHJcbiAgICAgICAgLy8gIE92ZXJyaWRlIGRlZmF1bHQgQ3VydmUuYXJjTGVuZ3RoRGl2aXNpb25zXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBxdWFudGl0eSBvZiBhcmMgbGVuZ3RoIGRpdmlzaW9ucyB3aXRoaW4gdGhlIGN1cnZlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5MaW5lI2FyY0xlbmd0aERpdmlzaW9uc1xyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucyA9IDE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIFJlY3RhbmdsZSB3aGVyZSB0aGUgcG9zaXRpb24gYW5kIGRpbWVuc2lvbnMgbWF0Y2ggdGhlIGJvdW5kcyBvZiB0aGlzIEN1cnZlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5MaW5lI2dldEJvdW5kc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gTyAtIFtvdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gW291dF0gLSBBIFJlY3RhbmdsZSBvYmplY3QgdG8gc3RvcmUgdGhlIGJvdW5kcyBpbi4gSWYgbm90IGdpdmVuIGEgbmV3IFJlY3RhbmdsZSB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBBIFJlY3RhbmdsZSBvYmplY3QgaG9sZGluZyB0aGUgYm91bmRzIG9mIHRoaXMgY3VydmUuIElmIGBvdXRgIHdhcyBnaXZlbiBpdCB3aWxsIGJlIHRoaXMgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRCb3VuZHM6IGZ1bmN0aW9uIChvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBSZWN0YW5nbGUoKTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gRnJvbVBvaW50cyhbIHRoaXMucDAsIHRoaXMucDEgXSwgb3V0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBzdGFydGluZyBwb2ludCBvbiB0aGUgY3VydmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkxpbmUjZ2V0U3RhcnRQb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbb3V0XSAtIEEgVmVjdG9yMiBvYmplY3QgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbi4gSWYgbm90IGdpdmVuIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBUaGUgY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50IG9uIHRoZSBjdXJ2ZS4gSWYgYW4gYG91dGAgb2JqZWN0IHdhcyBnaXZlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIGdldFN0YXJ0UG9pbnQ6IGZ1bmN0aW9uIChvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG91dC5jb3B5KHRoaXMucDApO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHJlc29sdXRpb24gb2YgdGhlIGxpbmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkxpbmUjZ2V0UmVzb2x1dGlvblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtkaXZpc2lvbnM9MV0gLSBUaGUgbnVtYmVyIG9mIGRpdmlzaW9ucyB0byBjb25zaWRlci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uLiBFcXVhbCB0byB0aGUgbnVtYmVyIG9mIGRpdmlzaW9ucy5cclxuICAgICAqL1xyXG4gICAgZ2V0UmVzb2x1dGlvbjogZnVuY3Rpb24gKGRpdmlzaW9ucylcclxuICAgIHtcclxuICAgICAgICBpZiAoZGl2aXNpb25zID09PSB1bmRlZmluZWQpIHsgZGl2aXNpb25zID0gMTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gZGl2aXNpb25zO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBwb2ludCBhdCByZWxhdGl2ZSBwb3NpdGlvbiBpbiBjdXJ2ZSBhY2NvcmRpbmcgdG8gbGVuZ3RoLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5MaW5lI2dldFBvaW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLk1hdGguVmVjdG9yMn0gTyAtIFtvdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdCAtIFRoZSBwb3NpdGlvbiBhbG9uZyB0aGUgY3VydmUgdG8gcmV0dXJuLiBXaGVyZSAwIGlzIHRoZSBzdGFydCBhbmQgMSBpcyB0aGUgZW5kLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbb3V0XSAtIEEgVmVjdG9yMiBvYmplY3QgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbi4gSWYgbm90IGdpdmVuIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBUaGUgY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50IG9uIHRoZSBjdXJ2ZS4gSWYgYW4gYG91dGAgb2JqZWN0IHdhcyBnaXZlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIGdldFBvaW50OiBmdW5jdGlvbiAodCwgb3V0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgVmVjdG9yMigpOyB9XHJcblxyXG4gICAgICAgIGlmICh0ID09PSAxKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIG91dC5jb3B5KHRoaXMucDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgb3V0LmNvcHkodGhpcy5wMSkuc3VidHJhY3QodGhpcy5wMCkuc2NhbGUodCkuYWRkKHRoaXMucDApO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBMaW5lIGN1cnZlIGlzIGxpbmVhciwgc28gd2UgY2FuIG92ZXJ3cml0ZSBkZWZhdWx0IGdldFBvaW50QXRcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYSBwb2ludCBhdCBhIGdpdmVuIHBvc2l0aW9uIG9uIHRoZSBsaW5lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5MaW5lI2dldFBvaW50QXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBPIC0gW291dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB1IC0gVGhlIHBvc2l0aW9uIGFsb25nIHRoZSBjdXJ2ZSB0byByZXR1cm4uIFdoZXJlIDAgaXMgdGhlIHN0YXJ0IGFuZCAxIGlzIHRoZSBlbmQuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFtvdXRdIC0gQSBWZWN0b3IyIG9iamVjdCB0byBzdG9yZSB0aGUgcmVzdWx0IGluLiBJZiBub3QgZ2l2ZW4gd2lsbCBiZSBjcmVhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFRoZSBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnQgb24gdGhlIGN1cnZlLiBJZiBhbiBgb3V0YCBvYmplY3Qgd2FzIGdpdmVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqL1xyXG4gICAgZ2V0UG9pbnRBdDogZnVuY3Rpb24gKHUsIG91dClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRQb2ludCh1LCBvdXQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHNsb3BlIG9mIHRoZSBsaW5lIGFzIGEgdW5pdCB2ZWN0b3IuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkxpbmUjZ2V0VGFuZ2VudFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBPIC0gW291dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFRoZSB0YW5nZW50IHZlY3Rvci5cclxuICAgICAqL1xyXG4gICAgZ2V0VGFuZ2VudDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgdGFuZ2VudCA9IHRtcFZlYzIuY29weSh0aGlzLnAxKS5zdWJ0cmFjdCh0aGlzLnAwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRhbmdlbnQubm9ybWFsaXplKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vICBPdmVycmlkZSBkZWZhdWx0IEN1cnZlLmRyYXcgYmVjYXVzZSB0aGlzIGlzIGJldHRlciB0aGFuIGNhbGxpbmcgZ2V0UG9pbnRzIG9uIGEgbGluZSFcclxuXHJcbiAgICAvKipcclxuICAgICAqIERyYXdzIHRoaXMgY3VydmUgb24gdGhlIGdpdmVuIEdyYXBoaWNzIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgY3VydmUgaXMgZHJhd24gdXNpbmcgYEdyYXBoaWNzLmxpbmVCZXR3ZWVuYCBzbyB3aWxsIGJlIGRyYXduIGF0IHdoYXRldmVyIHRoZSBwcmVzZW50IEdyYXBoaWNzIGxpbmUgY29sb3IgaXMuXHJcbiAgICAgKiBUaGUgR3JhcGhpY3Mgb2JqZWN0IGlzIG5vdCBjbGVhcmVkIGJlZm9yZSB0aGUgZHJhdywgc28gdGhlIGN1cnZlIHdpbGwgYXBwZWFyIG9uLXRvcCBvZiBhbnl0aGluZyBlbHNlIGFscmVhZHkgcmVuZGVyZWQgdG8gaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLkxpbmUjZHJhd1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gRyAtIFtncmFwaGljcywkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBncmFwaGljcyAtIFRoZSBHcmFwaGljcyBpbnN0YW5jZSBvbnRvIHdoaWNoIHRoaXMgY3VydmUgd2lsbCBiZSBkcmF3bi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoZSBHcmFwaGljcyBvYmplY3QgdG8gd2hpY2ggdGhlIGN1cnZlIHdhcyBkcmF3bi5cclxuICAgICAqL1xyXG4gICAgZHJhdzogZnVuY3Rpb24gKGdyYXBoaWNzKVxyXG4gICAge1xyXG4gICAgICAgIGdyYXBoaWNzLmxpbmVCZXR3ZWVuKHRoaXMucDAueCwgdGhpcy5wMC55LCB0aGlzLnAxLngsIHRoaXMucDEueSk7XHJcblxyXG4gICAgICAgIC8vICBTbyB5b3UgY2FuIGNoYWluIGdyYXBoaWNzIGNhbGxzXHJcbiAgICAgICAgcmV0dXJuIGdyYXBoaWNzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBsaW5lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5MaW5lI3RvSlNPTlxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlR5cGVzLkN1cnZlcy5KU09OQ3VydmV9IFRoZSBKU09OIG9iamVjdCBjb250YWluaW5nIHRoaXMgY3VydmUgZGF0YS5cclxuICAgICAqL1xyXG4gICAgdG9KU09OOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcclxuICAgICAgICAgICAgcG9pbnRzOiBbXHJcbiAgICAgICAgICAgICAgICB0aGlzLnAwLngsIHRoaXMucDAueSxcclxuICAgICAgICAgICAgICAgIHRoaXMucDEueCwgdGhpcy5wMS55XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG4vKipcclxuICogQ29uZmlndXJlcyB0aGlzIGxpbmUgZnJvbSBhIEpTT04gcmVwcmVzZW50YXRpb24uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQ3VydmVzLkxpbmUuZnJvbUpTT05cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkN1cnZlcy5KU09OQ3VydmV9IGRhdGEgLSBUaGUgSlNPTiBvYmplY3QgY29udGFpbmluZyB0aGlzIGN1cnZlIGRhdGEuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5DdXJ2ZXMuTGluZX0gQSBuZXcgTGluZUN1cnZlIG9iamVjdC5cclxuICovXHJcbkxpbmVDdXJ2ZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChkYXRhKVxyXG57XHJcbiAgICB2YXIgcG9pbnRzID0gZGF0YS5wb2ludHM7XHJcblxyXG4gICAgdmFyIHAwID0gbmV3IFZlY3RvcjIocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xyXG4gICAgdmFyIHAxID0gbmV3IFZlY3RvcjIocG9pbnRzWzJdLCBwb2ludHNbM10pO1xyXG5cclxuICAgIHJldHVybiBuZXcgTGluZUN1cnZlKHAwLCBwMSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IExpbmVDdXJ2ZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/curves/LineCurve.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/curves/QuadraticBezierCurve.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/curves/QuadraticBezierCurve.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Curve = __webpack_require__(/*! ./Curve */ \"./node_modules/phaser/src/curves/Curve.js\");\r\nvar QuadraticBezierInterpolation = __webpack_require__(/*! ../math/interpolation/QuadraticBezierInterpolation */ \"./node_modules/phaser/src/math/interpolation/QuadraticBezierInterpolation.js\");\r\nvar Vector2 = __webpack_require__(/*! ../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * [description]\r\n *\r\n * @class QuadraticBezier\r\n * @extends Phaser.Curves.Curve\r\n * @memberof Phaser.Curves\r\n * @constructor\r\n * @since 3.2.0\r\n *\r\n * @param {(Phaser.Math.Vector2|number[])} p0 - Start point, or an array of point pairs.\r\n * @param {Phaser.Math.Vector2} p1 - Control Point 1.\r\n * @param {Phaser.Math.Vector2} p2 - Control Point 2.\r\n */\r\nvar QuadraticBezier = new Class({\r\n\r\n Extends: Curve,\r\n\r\n initialize:\r\n\r\n function QuadraticBezier (p0, p1, p2)\r\n {\r\n Curve.call(this, 'QuadraticBezier');\r\n\r\n if (Array.isArray(p0))\r\n {\r\n p2 = new Vector2(p0[4], p0[5]);\r\n p1 = new Vector2(p0[2], p0[3]);\r\n p0 = new Vector2(p0[0], p0[1]);\r\n }\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Curves.QuadraticBezier#p0\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.2.0\r\n */\r\n this.p0 = p0;\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Curves.QuadraticBezier#p1\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.2.0\r\n */\r\n this.p1 = p1;\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Curves.QuadraticBezier#p2\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.2.0\r\n */\r\n this.p2 = p2;\r\n },\r\n\r\n /**\r\n * Gets the starting point on the curve.\r\n *\r\n * @method Phaser.Curves.QuadraticBezier#getStartPoint\r\n * @since 3.2.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @param {Phaser.Math.Vector2} [out] - A Vector2 object to store the result in. If not given will be created.\r\n *\r\n * @return {Phaser.Math.Vector2} The coordinates of the point on the curve. If an `out` object was given this will be returned.\r\n */\r\n getStartPoint: function (out)\r\n {\r\n if (out === undefined) { out = new Vector2(); }\r\n\r\n return out.copy(this.p0);\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Curves.QuadraticBezier#getResolution\r\n * @since 3.2.0\r\n *\r\n * @param {number} divisions - [description]\r\n *\r\n * @return {number} [description]\r\n */\r\n getResolution: function (divisions)\r\n {\r\n return divisions;\r\n },\r\n\r\n /**\r\n * Get point at relative position in curve according to length.\r\n *\r\n * @method Phaser.Curves.QuadraticBezier#getPoint\r\n * @since 3.2.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @param {number} t - The position along the curve to return. Where 0 is the start and 1 is the end.\r\n * @param {Phaser.Math.Vector2} [out] - A Vector2 object to store the result in. If not given will be created.\r\n *\r\n * @return {Phaser.Math.Vector2} The coordinates of the point on the curve. If an `out` object was given this will be returned.\r\n */\r\n getPoint: function (t, out)\r\n {\r\n if (out === undefined) { out = new Vector2(); }\r\n\r\n var p0 = this.p0;\r\n var p1 = this.p1;\r\n var p2 = this.p2;\r\n\r\n return out.set(\r\n QuadraticBezierInterpolation(t, p0.x, p1.x, p2.x),\r\n QuadraticBezierInterpolation(t, p0.y, p1.y, p2.y)\r\n );\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Curves.QuadraticBezier#draw\r\n * @since 3.2.0\r\n *\r\n * @generic {Phaser.GameObjects.Graphics} G - [graphics,$return]\r\n *\r\n * @param {Phaser.GameObjects.Graphics} graphics - `Graphics` object to draw onto.\r\n * @param {integer} [pointsTotal=32] - Number of points to be used for drawing the curve. Higher numbers result in smoother curve but require more processing.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} `Graphics` object that was drawn to.\r\n */\r\n draw: function (graphics, pointsTotal)\r\n {\r\n if (pointsTotal === undefined) { pointsTotal = 32; }\r\n\r\n var points = this.getPoints(pointsTotal);\r\n\r\n graphics.beginPath();\r\n graphics.moveTo(this.p0.x, this.p0.y);\r\n\r\n for (var i = 1; i < points.length; i++)\r\n {\r\n graphics.lineTo(points[i].x, points[i].y);\r\n }\r\n\r\n graphics.strokePath();\r\n\r\n // So you can chain graphics calls\r\n return graphics;\r\n },\r\n\r\n /**\r\n * Converts the curve into a JSON compatible object.\r\n *\r\n * @method Phaser.Curves.QuadraticBezier#toJSON\r\n * @since 3.2.0\r\n *\r\n * @return {Phaser.Types.Curves.JSONCurve} The JSON object containing this curve data.\r\n */\r\n toJSON: function ()\r\n {\r\n return {\r\n type: this.type,\r\n points: [\r\n this.p0.x, this.p0.y,\r\n this.p1.x, this.p1.y,\r\n this.p2.x, this.p2.y\r\n ]\r\n };\r\n }\r\n\r\n});\r\n\r\n/**\r\n * Creates a curve from a JSON object, e. g. created by `toJSON`.\r\n *\r\n * @function Phaser.Curves.QuadraticBezier.fromJSON\r\n * @since 3.2.0\r\n *\r\n * @param {Phaser.Types.Curves.JSONCurve} data - The JSON object containing this curve data.\r\n *\r\n * @return {Phaser.Curves.QuadraticBezier} The created curve instance.\r\n */\r\nQuadraticBezier.fromJSON = function (data)\r\n{\r\n var points = data.points;\r\n\r\n var p0 = new Vector2(points[0], points[1]);\r\n var p1 = new Vector2(points[2], points[3]);\r\n var p2 = new Vector2(points[4], points[5]);\r\n\r\n return new QuadraticBezier(p0, p1, p2);\r\n};\r\n\r\nmodule.exports = QuadraticBezier;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jdXJ2ZXMvUXVhZHJhdGljQmV6aWVyQ3VydmUuanM/Y2UyNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGdFQUFnQjtBQUNwQyxZQUFZLG1CQUFPLENBQUMsMERBQVM7QUFDN0IsbUNBQW1DLG1CQUFPLENBQUMsd0lBQW9EO0FBQy9GLGNBQWMsbUJBQU8sQ0FBQyxrRUFBaUI7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywrQkFBK0I7QUFDMUMsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVyxvQkFBb0I7QUFDL0I7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxxQkFBcUI7O0FBRXJEO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLHFCQUFxQjs7QUFFckQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsNEJBQTRCO0FBQzdDO0FBQ0EsZUFBZSw0QkFBNEI7QUFDM0MsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQSx3Q0FBd0Msa0JBQWtCOztBQUUxRDs7QUFFQTtBQUNBOztBQUVBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekM7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2N1cnZlcy9RdWFkcmF0aWNCZXppZXJDdXJ2ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEN1cnZlID0gcmVxdWlyZSgnLi9DdXJ2ZScpO1xyXG52YXIgUXVhZHJhdGljQmV6aWVySW50ZXJwb2xhdGlvbiA9IHJlcXVpcmUoJy4uL21hdGgvaW50ZXJwb2xhdGlvbi9RdWFkcmF0aWNCZXppZXJJbnRlcnBvbGF0aW9uJyk7XHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vbWF0aC9WZWN0b3IyJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBjbGFzcyBRdWFkcmF0aWNCZXppZXJcclxuICogQGV4dGVuZHMgUGhhc2VyLkN1cnZlcy5DdXJ2ZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkN1cnZlc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMi4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5NYXRoLlZlY3RvcjJ8bnVtYmVyW10pfSBwMCAtIFN0YXJ0IHBvaW50LCBvciBhbiBhcnJheSBvZiBwb2ludCBwYWlycy5cclxuICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBwMSAtIENvbnRyb2wgUG9pbnQgMS5cclxuICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBwMiAtIENvbnRyb2wgUG9pbnQgMi5cclxuICovXHJcbnZhciBRdWFkcmF0aWNCZXppZXIgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEN1cnZlLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gUXVhZHJhdGljQmV6aWVyIChwMCwgcDEsIHAyKVxyXG4gICAge1xyXG4gICAgICAgIEN1cnZlLmNhbGwodGhpcywgJ1F1YWRyYXRpY0JlemllcicpO1xyXG5cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwMCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwMiA9IG5ldyBWZWN0b3IyKHAwWzRdLCBwMFs1XSk7XHJcbiAgICAgICAgICAgIHAxID0gbmV3IFZlY3RvcjIocDBbMl0sIHAwWzNdKTtcclxuICAgICAgICAgICAgcDAgPSBuZXcgVmVjdG9yMihwMFswXSwgcDBbMV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5RdWFkcmF0aWNCZXppZXIjcDBcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAc2luY2UgMy4yLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnAwID0gcDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtkZXNjcmlwdGlvbl1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DdXJ2ZXMuUXVhZHJhdGljQmV6aWVyI3AxXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wMSA9IHAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLlF1YWRyYXRpY0JlemllciNwMlxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucDIgPSBwMjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBzdGFydGluZyBwb2ludCBvbiB0aGUgY3VydmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLlF1YWRyYXRpY0JlemllciNnZXRTdGFydFBvaW50XHJcbiAgICAgKiBAc2luY2UgMy4yLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLk1hdGguVmVjdG9yMn0gTyAtIFtvdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFtvdXRdIC0gQSBWZWN0b3IyIG9iamVjdCB0byBzdG9yZSB0aGUgcmVzdWx0IGluLiBJZiBub3QgZ2l2ZW4gd2lsbCBiZSBjcmVhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFRoZSBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnQgb24gdGhlIGN1cnZlLiBJZiBhbiBgb3V0YCBvYmplY3Qgd2FzIGdpdmVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqL1xyXG4gICAgZ2V0U3RhcnRQb2ludDogZnVuY3Rpb24gKG91dClcclxuICAgIHtcclxuICAgICAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFZlY3RvcjIoKTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gb3V0LmNvcHkodGhpcy5wMCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5RdWFkcmF0aWNCZXppZXIjZ2V0UmVzb2x1dGlvblxyXG4gICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRpdmlzaW9ucyAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgZ2V0UmVzb2x1dGlvbjogZnVuY3Rpb24gKGRpdmlzaW9ucylcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZGl2aXNpb25zO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBwb2ludCBhdCByZWxhdGl2ZSBwb3NpdGlvbiBpbiBjdXJ2ZSBhY2NvcmRpbmcgdG8gbGVuZ3RoLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5RdWFkcmF0aWNCZXppZXIjZ2V0UG9pbnRcclxuICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBPIC0gW291dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0IC0gVGhlIHBvc2l0aW9uIGFsb25nIHRoZSBjdXJ2ZSB0byByZXR1cm4uIFdoZXJlIDAgaXMgdGhlIHN0YXJ0IGFuZCAxIGlzIHRoZSBlbmQuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFtvdXRdIC0gQSBWZWN0b3IyIG9iamVjdCB0byBzdG9yZSB0aGUgcmVzdWx0IGluLiBJZiBub3QgZ2l2ZW4gd2lsbCBiZSBjcmVhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFRoZSBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnQgb24gdGhlIGN1cnZlLiBJZiBhbiBgb3V0YCBvYmplY3Qgd2FzIGdpdmVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqL1xyXG4gICAgZ2V0UG9pbnQ6IGZ1bmN0aW9uICh0LCBvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgdmFyIHAwID0gdGhpcy5wMDtcclxuICAgICAgICB2YXIgcDEgPSB0aGlzLnAxO1xyXG4gICAgICAgIHZhciBwMiA9IHRoaXMucDI7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQuc2V0KFxyXG4gICAgICAgICAgICBRdWFkcmF0aWNCZXppZXJJbnRlcnBvbGF0aW9uKHQsIHAwLngsIHAxLngsIHAyLngpLFxyXG4gICAgICAgICAgICBRdWFkcmF0aWNCZXppZXJJbnRlcnBvbGF0aW9uKHQsIHAwLnksIHAxLnksIHAyLnkpXHJcbiAgICAgICAgKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLlF1YWRyYXRpY0JlemllciNkcmF3XHJcbiAgICAgKiBAc2luY2UgMy4yLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBHIC0gW2dyYXBoaWNzLCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IGdyYXBoaWNzIC0gYEdyYXBoaWNzYCBvYmplY3QgdG8gZHJhdyBvbnRvLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbcG9pbnRzVG90YWw9MzJdIC0gTnVtYmVyIG9mIHBvaW50cyB0byBiZSB1c2VkIGZvciBkcmF3aW5nIHRoZSBjdXJ2ZS4gSGlnaGVyIG51bWJlcnMgcmVzdWx0IGluIHNtb290aGVyIGN1cnZlIGJ1dCByZXF1aXJlIG1vcmUgcHJvY2Vzc2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IGBHcmFwaGljc2Agb2JqZWN0IHRoYXQgd2FzIGRyYXduIHRvLlxyXG4gICAgICovXHJcbiAgICBkcmF3OiBmdW5jdGlvbiAoZ3JhcGhpY3MsIHBvaW50c1RvdGFsKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChwb2ludHNUb3RhbCA9PT0gdW5kZWZpbmVkKSB7IHBvaW50c1RvdGFsID0gMzI7IH1cclxuXHJcbiAgICAgICAgdmFyIHBvaW50cyA9IHRoaXMuZ2V0UG9pbnRzKHBvaW50c1RvdGFsKTtcclxuXHJcbiAgICAgICAgZ3JhcGhpY3MuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgZ3JhcGhpY3MubW92ZVRvKHRoaXMucDAueCwgdGhpcy5wMC55KTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBncmFwaGljcy5saW5lVG8ocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdyYXBoaWNzLnN0cm9rZVBhdGgoKTtcclxuXHJcbiAgICAgICAgLy8gIFNvIHlvdSBjYW4gY2hhaW4gZ3JhcGhpY3MgY2FsbHNcclxuICAgICAgICByZXR1cm4gZ3JhcGhpY3M7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydHMgdGhlIGN1cnZlIGludG8gYSBKU09OIGNvbXBhdGlibGUgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5RdWFkcmF0aWNCZXppZXIjdG9KU09OXHJcbiAgICAgKiBAc2luY2UgMy4yLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuQ3VydmVzLkpTT05DdXJ2ZX0gVGhlIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgdGhpcyBjdXJ2ZSBkYXRhLlxyXG4gICAgICovXHJcbiAgICB0b0pTT046IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICAgICAgICBwb2ludHM6IFtcclxuICAgICAgICAgICAgICAgIHRoaXMucDAueCwgdGhpcy5wMC55LFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wMS54LCB0aGlzLnAxLnksXHJcbiAgICAgICAgICAgICAgICB0aGlzLnAyLngsIHRoaXMucDIueVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBjdXJ2ZSBmcm9tIGEgSlNPTiBvYmplY3QsIGUuIGcuIGNyZWF0ZWQgYnkgYHRvSlNPTmAuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQ3VydmVzLlF1YWRyYXRpY0Jlemllci5mcm9tSlNPTlxyXG4gKiBAc2luY2UgMy4yLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuQ3VydmVzLkpTT05DdXJ2ZX0gZGF0YSAtIFRoZSBKU09OIG9iamVjdCBjb250YWluaW5nIHRoaXMgY3VydmUgZGF0YS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkN1cnZlcy5RdWFkcmF0aWNCZXppZXJ9IFRoZSBjcmVhdGVkIGN1cnZlIGluc3RhbmNlLlxyXG4gKi9cclxuUXVhZHJhdGljQmV6aWVyLmZyb21KU09OID0gZnVuY3Rpb24gKGRhdGEpXHJcbntcclxuICAgIHZhciBwb2ludHMgPSBkYXRhLnBvaW50cztcclxuXHJcbiAgICB2YXIgcDAgPSBuZXcgVmVjdG9yMihwb2ludHNbMF0sIHBvaW50c1sxXSk7XHJcbiAgICB2YXIgcDEgPSBuZXcgVmVjdG9yMihwb2ludHNbMl0sIHBvaW50c1szXSk7XHJcbiAgICB2YXIgcDIgPSBuZXcgVmVjdG9yMihwb2ludHNbNF0sIHBvaW50c1s1XSk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBRdWFkcmF0aWNCZXppZXIocDAsIHAxLCBwMik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFF1YWRyYXRpY0JlemllcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/curves/QuadraticBezierCurve.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/curves/SplineCurve.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/curves/SplineCurve.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n// Based on the three.js Curve classes created by [zz85](http://www.lab4games.net/zz85/blog)\r\n\r\nvar CatmullRom = __webpack_require__(/*! ../math/CatmullRom */ \"./node_modules/phaser/src/math/CatmullRom.js\");\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Curve = __webpack_require__(/*! ./Curve */ \"./node_modules/phaser/src/curves/Curve.js\");\r\nvar Vector2 = __webpack_require__(/*! ../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * [description]\r\n *\r\n * @class Spline\r\n * @extends Phaser.Curves.Curve\r\n * @memberof Phaser.Curves\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Math.Vector2[]} [points] - [description]\r\n */\r\nvar SplineCurve = new Class({\r\n\r\n Extends: Curve,\r\n\r\n initialize:\r\n\r\n function SplineCurve (points)\r\n {\r\n if (points === undefined) { points = []; }\r\n\r\n Curve.call(this, 'SplineCurve');\r\n\r\n /**\r\n * [description]\r\n *\r\n * @name Phaser.Curves.Spline#points\r\n * @type {Phaser.Math.Vector2[]}\r\n * @default []\r\n * @since 3.0.0\r\n */\r\n this.points = [];\r\n\r\n this.addPoints(points);\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Curves.Spline#addPoints\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Math.Vector2[]|number[]|number[][])} points - [description]\r\n *\r\n * @return {Phaser.Curves.Spline} This curve object.\r\n */\r\n addPoints: function (points)\r\n {\r\n for (var i = 0; i < points.length; i++)\r\n {\r\n var p = new Vector2();\r\n\r\n if (typeof points[i] === 'number')\r\n {\r\n p.x = points[i];\r\n p.y = points[i + 1];\r\n i++;\r\n }\r\n else if (Array.isArray(points[i]))\r\n {\r\n // An array of arrays?\r\n p.x = points[i][0];\r\n p.y = points[i][1];\r\n }\r\n else\r\n {\r\n p.x = points[i].x;\r\n p.y = points[i].y;\r\n }\r\n\r\n this.points.push(p);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Curves.Spline#addPoint\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - [description]\r\n * @param {number} y - [description]\r\n *\r\n * @return {Phaser.Math.Vector2} [description]\r\n */\r\n addPoint: function (x, y)\r\n {\r\n var vec = new Vector2(x, y);\r\n\r\n this.points.push(vec);\r\n\r\n return vec;\r\n },\r\n\r\n /**\r\n * Gets the starting point on the curve.\r\n *\r\n * @method Phaser.Curves.Spline#getStartPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @param {Phaser.Math.Vector2} [out] - A Vector2 object to store the result in. If not given will be created.\r\n *\r\n * @return {Phaser.Math.Vector2} The coordinates of the point on the curve. If an `out` object was given this will be returned.\r\n */\r\n getStartPoint: function (out)\r\n {\r\n if (out === undefined) { out = new Vector2(); }\r\n\r\n return out.copy(this.points[0]);\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Curves.Spline#getResolution\r\n * @since 3.0.0\r\n *\r\n * @param {number} divisions - [description]\r\n *\r\n * @return {number} [description]\r\n */\r\n getResolution: function (divisions)\r\n {\r\n return divisions * this.points.length;\r\n },\r\n\r\n /**\r\n * Get point at relative position in curve according to length.\r\n *\r\n * @method Phaser.Curves.Spline#getPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @param {number} t - The position along the curve to return. Where 0 is the start and 1 is the end.\r\n * @param {Phaser.Math.Vector2} [out] - A Vector2 object to store the result in. If not given will be created.\r\n *\r\n * @return {Phaser.Math.Vector2} The coordinates of the point on the curve. If an `out` object was given this will be returned.\r\n */\r\n getPoint: function (t, out)\r\n {\r\n if (out === undefined) { out = new Vector2(); }\r\n\r\n var points = this.points;\r\n\r\n var point = (points.length - 1) * t;\r\n\r\n var intPoint = Math.floor(point);\r\n\r\n var weight = point - intPoint;\r\n\r\n var p0 = points[(intPoint === 0) ? intPoint : intPoint - 1];\r\n var p1 = points[intPoint];\r\n var p2 = points[(intPoint > points.length - 2) ? points.length - 1 : intPoint + 1];\r\n var p3 = points[(intPoint > points.length - 3) ? points.length - 1 : intPoint + 2];\r\n\r\n return out.set(CatmullRom(weight, p0.x, p1.x, p2.x, p3.x), CatmullRom(weight, p0.y, p1.y, p2.y, p3.y));\r\n },\r\n\r\n /**\r\n * [description]\r\n *\r\n * @method Phaser.Curves.Spline#toJSON\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Types.Curves.JSONCurve} The JSON object containing this curve data.\r\n */\r\n toJSON: function ()\r\n {\r\n var points = [];\r\n\r\n for (var i = 0; i < this.points.length; i++)\r\n {\r\n points.push(this.points[i].x);\r\n points.push(this.points[i].y);\r\n }\r\n\r\n return {\r\n type: this.type,\r\n points: points\r\n };\r\n }\r\n\r\n});\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Curves.Spline.fromJSON\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Curves.JSONCurve} data - The JSON object containing this curve data.\r\n *\r\n * @return {Phaser.Curves.Spline} [description]\r\n */\r\nSplineCurve.fromJSON = function (data)\r\n{\r\n return new SplineCurve(data.points);\r\n};\r\n\r\nmodule.exports = SplineCurve;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jdXJ2ZXMvU3BsaW5lQ3VydmUuanM/YWIyYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsd0VBQW9CO0FBQzdDLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsWUFBWSxtQkFBTyxDQUFDLDBEQUFTO0FBQzdCLGNBQWMsbUJBQU8sQ0FBQyxrRUFBaUI7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakM7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DLGFBQWE7O0FBRWhEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDRDQUE0QztBQUMzRDtBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixvQkFBb0I7QUFDckM7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLHFCQUFxQjs7QUFFckQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MscUJBQXFCOztBQUVyRDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsd0JBQXdCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QztBQUNBLFlBQVkscUJBQXFCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jdXJ2ZXMvU3BsaW5lQ3VydmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8vICBCYXNlZCBvbiB0aGUgdGhyZWUuanMgQ3VydmUgY2xhc3NlcyBjcmVhdGVkIGJ5IFt6ejg1XShodHRwOi8vd3d3LmxhYjRnYW1lcy5uZXQveno4NS9ibG9nKVxyXG5cclxudmFyIENhdG11bGxSb20gPSByZXF1aXJlKCcuLi9tYXRoL0NhdG11bGxSb20nKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEN1cnZlID0gcmVxdWlyZSgnLi9DdXJ2ZScpO1xyXG52YXIgVmVjdG9yMiA9IHJlcXVpcmUoJy4uL21hdGgvVmVjdG9yMicpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogW2Rlc2NyaXB0aW9uXVxyXG4gKlxyXG4gKiBAY2xhc3MgU3BsaW5lXHJcbiAqIEBleHRlbmRzIFBoYXNlci5DdXJ2ZXMuQ3VydmVcclxuICogQG1lbWJlcm9mIFBoYXNlci5DdXJ2ZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJbXX0gW3BvaW50c10gLSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG52YXIgU3BsaW5lQ3VydmUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEN1cnZlLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gU3BsaW5lQ3VydmUgKHBvaW50cylcclxuICAgIHtcclxuICAgICAgICBpZiAocG9pbnRzID09PSB1bmRlZmluZWQpIHsgcG9pbnRzID0gW107IH1cclxuXHJcbiAgICAgICAgQ3VydmUuY2FsbCh0aGlzLCAnU3BsaW5lQ3VydmUnKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5TcGxpbmUjcG9pbnRzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJbXX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBbXVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucG9pbnRzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuYWRkUG9pbnRzKHBvaW50cyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5TcGxpbmUjYWRkUG9pbnRzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuTWF0aC5WZWN0b3IyW118bnVtYmVyW118bnVtYmVyW11bXSl9IHBvaW50cyAtIFtkZXNjcmlwdGlvbl1cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ3VydmVzLlNwbGluZX0gVGhpcyBjdXJ2ZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGFkZFBvaW50czogZnVuY3Rpb24gKHBvaW50cylcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBwID0gbmV3IFZlY3RvcjIoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcG9pbnRzW2ldID09PSAnbnVtYmVyJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcC54ID0gcG9pbnRzW2ldO1xyXG4gICAgICAgICAgICAgICAgcC55ID0gcG9pbnRzW2kgKyAxXTtcclxuICAgICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHBvaW50c1tpXSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBBbiBhcnJheSBvZiBhcnJheXM/XHJcbiAgICAgICAgICAgICAgICBwLnggPSBwb2ludHNbaV1bMF07XHJcbiAgICAgICAgICAgICAgICBwLnkgPSBwb2ludHNbaV1bMV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwLnggPSBwb2ludHNbaV0ueDtcclxuICAgICAgICAgICAgICAgIHAueSA9IHBvaW50c1tpXS55O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKHApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5TcGxpbmUjYWRkUG9pbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBhZGRQb2ludDogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHZlYyA9IG5ldyBWZWN0b3IyKHgsIHkpO1xyXG5cclxuICAgICAgICB0aGlzLnBvaW50cy5wdXNoKHZlYyk7XHJcblxyXG4gICAgICAgIHJldHVybiB2ZWM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgc3RhcnRpbmcgcG9pbnQgb24gdGhlIGN1cnZlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5TcGxpbmUjZ2V0U3RhcnRQb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbb3V0XSAtIEEgVmVjdG9yMiBvYmplY3QgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbi4gSWYgbm90IGdpdmVuIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBUaGUgY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50IG9uIHRoZSBjdXJ2ZS4gSWYgYW4gYG91dGAgb2JqZWN0IHdhcyBnaXZlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIGdldFN0YXJ0UG9pbnQ6IGZ1bmN0aW9uIChvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG91dC5jb3B5KHRoaXMucG9pbnRzWzBdKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLlNwbGluZSNnZXRSZXNvbHV0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGl2aXNpb25zIC0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBnZXRSZXNvbHV0aW9uOiBmdW5jdGlvbiAoZGl2aXNpb25zKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBkaXZpc2lvbnMgKiB0aGlzLnBvaW50cy5sZW5ndGg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHBvaW50IGF0IHJlbGF0aXZlIHBvc2l0aW9uIGluIGN1cnZlIGFjY29yZGluZyB0byBsZW5ndGguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLlNwbGluZSNnZXRQb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHQgLSBUaGUgcG9zaXRpb24gYWxvbmcgdGhlIGN1cnZlIHRvIHJldHVybi4gV2hlcmUgMCBpcyB0aGUgc3RhcnQgYW5kIDEgaXMgdGhlIGVuZC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW291dF0gLSBBIFZlY3RvcjIgb2JqZWN0IHRvIHN0b3JlIHRoZSByZXN1bHQgaW4uIElmIG5vdCBnaXZlbiB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gVGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCBvbiB0aGUgY3VydmUuIElmIGFuIGBvdXRgIG9iamVjdCB3YXMgZ2l2ZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICovXHJcbiAgICBnZXRQb2ludDogZnVuY3Rpb24gKHQsIG91dClcclxuICAgIHtcclxuICAgICAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFZlY3RvcjIoKTsgfVxyXG5cclxuICAgICAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XHJcblxyXG4gICAgICAgIHZhciBwb2ludCA9IChwb2ludHMubGVuZ3RoIC0gMSkgKiB0O1xyXG5cclxuICAgICAgICB2YXIgaW50UG9pbnQgPSBNYXRoLmZsb29yKHBvaW50KTtcclxuXHJcbiAgICAgICAgdmFyIHdlaWdodCA9IHBvaW50IC0gaW50UG9pbnQ7XHJcblxyXG4gICAgICAgIHZhciBwMCA9IHBvaW50c1soaW50UG9pbnQgPT09IDApID8gaW50UG9pbnQgOiBpbnRQb2ludCAtIDFdO1xyXG4gICAgICAgIHZhciBwMSA9IHBvaW50c1tpbnRQb2ludF07XHJcbiAgICAgICAgdmFyIHAyID0gcG9pbnRzWyhpbnRQb2ludCA+IHBvaW50cy5sZW5ndGggLSAyKSA/IHBvaW50cy5sZW5ndGggLSAxIDogaW50UG9pbnQgKyAxXTtcclxuICAgICAgICB2YXIgcDMgPSBwb2ludHNbKGludFBvaW50ID4gcG9pbnRzLmxlbmd0aCAtIDMpID8gcG9pbnRzLmxlbmd0aCAtIDEgOiBpbnRQb2ludCArIDJdO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0LnNldChDYXRtdWxsUm9tKHdlaWdodCwgcDAueCwgcDEueCwgcDIueCwgcDMueCksIENhdG11bGxSb20od2VpZ2h0LCBwMC55LCBwMS55LCBwMi55LCBwMy55KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyaXB0aW9uXVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5TcGxpbmUjdG9KU09OXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuQ3VydmVzLkpTT05DdXJ2ZX0gVGhlIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgdGhpcyBjdXJ2ZSBkYXRhLlxyXG4gICAgICovXHJcbiAgICB0b0pTT046IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHBvaW50cyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucG9pbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcG9pbnRzLnB1c2godGhpcy5wb2ludHNbaV0ueCk7XHJcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHRoaXMucG9pbnRzW2ldLnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICAgICAgICBwb2ludHM6IHBvaW50c1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuQ3VydmVzLlNwbGluZS5mcm9tSlNPTlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuQ3VydmVzLkpTT05DdXJ2ZX0gZGF0YSAtIFRoZSBKU09OIG9iamVjdCBjb250YWluaW5nIHRoaXMgY3VydmUgZGF0YS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkN1cnZlcy5TcGxpbmV9IFtkZXNjcmlwdGlvbl1cclxuICovXHJcblNwbGluZUN1cnZlLmZyb21KU09OID0gZnVuY3Rpb24gKGRhdGEpXHJcbntcclxuICAgIHJldHVybiBuZXcgU3BsaW5lQ3VydmUoZGF0YS5wb2ludHMpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTcGxpbmVDdXJ2ZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/curves/SplineCurve.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/curves/index.js":
/*!*************************************************!*\
!*** ./node_modules/phaser/src/curves/index.js ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Curves\r\n */\r\n\r\nmodule.exports = {\r\n Path: __webpack_require__(/*! ./path/Path */ \"./node_modules/phaser/src/curves/path/Path.js\"),\r\n\r\n CubicBezier: __webpack_require__(/*! ./CubicBezierCurve */ \"./node_modules/phaser/src/curves/CubicBezierCurve.js\"),\r\n Curve: __webpack_require__(/*! ./Curve */ \"./node_modules/phaser/src/curves/Curve.js\"),\r\n Ellipse: __webpack_require__(/*! ./EllipseCurve */ \"./node_modules/phaser/src/curves/EllipseCurve.js\"),\r\n Line: __webpack_require__(/*! ./LineCurve */ \"./node_modules/phaser/src/curves/LineCurve.js\"),\r\n QuadraticBezier: __webpack_require__(/*! ./QuadraticBezierCurve */ \"./node_modules/phaser/src/curves/QuadraticBezierCurve.js\"),\r\n Spline: __webpack_require__(/*! ./SplineCurve */ \"./node_modules/phaser/src/curves/SplineCurve.js\")\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jdXJ2ZXMvaW5kZXguanM/OTcxNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLGtFQUFhOztBQUUvQixpQkFBaUIsbUJBQU8sQ0FBQyxnRkFBb0I7QUFDN0MsV0FBVyxtQkFBTyxDQUFDLDBEQUFTO0FBQzVCLGFBQWEsbUJBQU8sQ0FBQyx3RUFBZ0I7QUFDckMsVUFBVSxtQkFBTyxDQUFDLGtFQUFhO0FBQy9CLHFCQUFxQixtQkFBTyxDQUFDLHdGQUF3QjtBQUNyRCxZQUFZLG1CQUFPLENBQUMsc0VBQWU7QUFDbkMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jdXJ2ZXMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5DdXJ2ZXNcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuICAgIFBhdGg6IHJlcXVpcmUoJy4vcGF0aC9QYXRoJyksXHJcblxyXG4gICAgQ3ViaWNCZXppZXI6IHJlcXVpcmUoJy4vQ3ViaWNCZXppZXJDdXJ2ZScpLFxyXG4gICAgQ3VydmU6IHJlcXVpcmUoJy4vQ3VydmUnKSxcclxuICAgIEVsbGlwc2U6IHJlcXVpcmUoJy4vRWxsaXBzZUN1cnZlJyksXHJcbiAgICBMaW5lOiByZXF1aXJlKCcuL0xpbmVDdXJ2ZScpLFxyXG4gICAgUXVhZHJhdGljQmV6aWVyOiByZXF1aXJlKCcuL1F1YWRyYXRpY0JlemllckN1cnZlJyksXHJcbiAgICBTcGxpbmU6IHJlcXVpcmUoJy4vU3BsaW5lQ3VydmUnKVxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/curves/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/curves/path/MoveTo.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/curves/path/MoveTo.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A MoveTo Curve is a very simple curve consisting of only a single point. Its intended use is to move the ending point in a Path.\r\n *\r\n * @class MoveTo\r\n * @memberof Phaser.Curves\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x] - `x` pixel coordinate.\r\n * @param {number} [y] - `y` pixel coordinate.\r\n */\r\nvar MoveTo = new Class({\r\n\r\n initialize:\r\n\r\n function MoveTo (x, y)\r\n {\r\n // Skip length calcs in paths\r\n\r\n /**\r\n * Denotes that this Curve does not influence the bounds, points, and drawing of its parent Path. Must be `false` or some methods in the parent Path will throw errors.\r\n *\r\n * @name Phaser.Curves.MoveTo#active\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.active = false;\r\n\r\n /**\r\n * The lone point which this curve consists of.\r\n *\r\n * @name Phaser.Curves.MoveTo#p0\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.0.0\r\n */\r\n this.p0 = new Vector2(x, y);\r\n },\r\n\r\n /**\r\n * Get point at relative position in curve according to length.\r\n *\r\n * @method Phaser.Curves.MoveTo#getPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @param {number} t - The position along the curve to return. Where 0 is the start and 1 is the end.\r\n * @param {Phaser.Math.Vector2} [out] - A Vector2 object to store the result in. If not given will be created.\r\n *\r\n * @return {Phaser.Math.Vector2} The coordinates of the point on the curve. If an `out` object was given this will be returned.\r\n */\r\n getPoint: function (t, out)\r\n {\r\n if (out === undefined) { out = new Vector2(); }\r\n\r\n return out.copy(this.p0);\r\n },\r\n\r\n /**\r\n * Retrieves the point at given position in the curve. This will always return this curve's only point.\r\n *\r\n * @method Phaser.Curves.MoveTo#getPointAt\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @param {number} u - The position in the path to retrieve, between 0 and 1. Not used.\r\n * @param {Phaser.Math.Vector2} [out] - An optional vector in which to store the point.\r\n *\r\n * @return {Phaser.Math.Vector2} The modified `out` vector, or a new `Vector2` if none was provided.\r\n */\r\n getPointAt: function (u, out)\r\n {\r\n return this.getPoint(u, out);\r\n },\r\n\r\n /**\r\n * Gets the resolution of this curve.\r\n *\r\n * @method Phaser.Curves.MoveTo#getResolution\r\n * @since 3.0.0\r\n *\r\n * @return {number} The resolution of this curve. For a MoveTo the value is always 1.\r\n */\r\n getResolution: function ()\r\n {\r\n return 1;\r\n },\r\n\r\n /**\r\n * Gets the length of this curve.\r\n *\r\n * @method Phaser.Curves.MoveTo#getLength\r\n * @since 3.0.0\r\n *\r\n * @return {number} The length of this curve. For a MoveTo the value is always 0.\r\n */\r\n getLength: function ()\r\n {\r\n return 0;\r\n },\r\n\r\n /**\r\n * Converts this curve into a JSON-serializable object.\r\n *\r\n * @method Phaser.Curves.MoveTo#toJSON\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Types.Curves.JSONCurve} A primitive object with the curve's type and only point.\r\n */\r\n toJSON: function ()\r\n {\r\n return {\r\n type: 'MoveTo',\r\n points: [\r\n this.p0.x, this.p0.y\r\n ]\r\n };\r\n }\r\n\r\n});\r\n\r\nmodule.exports = MoveTo;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jdXJ2ZXMvcGF0aC9Nb3ZlVG8uanM/ZDczOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxjQUFjLG1CQUFPLENBQUMscUVBQW9COztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLHFCQUFxQjs7QUFFckQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixvQkFBb0I7QUFDckM7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2N1cnZlcy9wYXRoL01vdmVUby5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIFZlY3RvcjIgPSByZXF1aXJlKCcuLi8uLi9tYXRoL1ZlY3RvcjInKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgTW92ZVRvIEN1cnZlIGlzIGEgdmVyeSBzaW1wbGUgY3VydmUgY29uc2lzdGluZyBvZiBvbmx5IGEgc2luZ2xlIHBvaW50LiBJdHMgaW50ZW5kZWQgdXNlIGlzIHRvIG1vdmUgdGhlIGVuZGluZyBwb2ludCBpbiBhIFBhdGguXHJcbiAqXHJcbiAqIEBjbGFzcyBNb3ZlVG9cclxuICogQG1lbWJlcm9mIFBoYXNlci5DdXJ2ZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3hdIC0gYHhgIHBpeGVsIGNvb3JkaW5hdGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeV0gLSBgeWAgcGl4ZWwgY29vcmRpbmF0ZS5cclxuICovXHJcbnZhciBNb3ZlVG8gPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gTW92ZVRvICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIC8vICBTa2lwIGxlbmd0aCBjYWxjcyBpbiBwYXRoc1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEZW5vdGVzIHRoYXQgdGhpcyBDdXJ2ZSBkb2VzIG5vdCBpbmZsdWVuY2UgdGhlIGJvdW5kcywgcG9pbnRzLCBhbmQgZHJhd2luZyBvZiBpdHMgcGFyZW50IFBhdGguIE11c3QgYmUgYGZhbHNlYCBvciBzb21lIG1ldGhvZHMgaW4gdGhlIHBhcmVudCBQYXRoIHdpbGwgdGhyb3cgZXJyb3JzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5Nb3ZlVG8jYWN0aXZlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbG9uZSBwb2ludCB3aGljaCB0aGlzIGN1cnZlIGNvbnNpc3RzIG9mLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5Nb3ZlVG8jcDBcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnAwID0gbmV3IFZlY3RvcjIoeCwgeSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHBvaW50IGF0IHJlbGF0aXZlIHBvc2l0aW9uIGluIGN1cnZlIGFjY29yZGluZyB0byBsZW5ndGguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLk1vdmVUbyNnZXRQb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHQgLSBUaGUgcG9zaXRpb24gYWxvbmcgdGhlIGN1cnZlIHRvIHJldHVybi4gV2hlcmUgMCBpcyB0aGUgc3RhcnQgYW5kIDEgaXMgdGhlIGVuZC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW291dF0gLSBBIFZlY3RvcjIgb2JqZWN0IHRvIHN0b3JlIHRoZSByZXN1bHQgaW4uIElmIG5vdCBnaXZlbiB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gVGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCBvbiB0aGUgY3VydmUuIElmIGFuIGBvdXRgIG9iamVjdCB3YXMgZ2l2ZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICovXHJcbiAgICBnZXRQb2ludDogZnVuY3Rpb24gKHQsIG91dClcclxuICAgIHtcclxuICAgICAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFZlY3RvcjIoKTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gb3V0LmNvcHkodGhpcy5wMCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIHRoZSBwb2ludCBhdCBnaXZlbiBwb3NpdGlvbiBpbiB0aGUgY3VydmUuIFRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIHRoaXMgY3VydmUncyBvbmx5IHBvaW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5Nb3ZlVG8jZ2V0UG9pbnRBdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHUgLSBUaGUgcG9zaXRpb24gaW4gdGhlIHBhdGggdG8gcmV0cmlldmUsIGJldHdlZW4gMCBhbmQgMS4gTm90IHVzZWQuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFtvdXRdIC0gQW4gb3B0aW9uYWwgdmVjdG9yIGluIHdoaWNoIHRvIHN0b3JlIHRoZSBwb2ludC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBUaGUgbW9kaWZpZWQgYG91dGAgdmVjdG9yLCBvciBhIG5ldyBgVmVjdG9yMmAgaWYgbm9uZSB3YXMgcHJvdmlkZWQuXHJcbiAgICAgKi9cclxuICAgIGdldFBvaW50QXQ6IGZ1bmN0aW9uICh1LCBvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9pbnQodSwgb3V0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSByZXNvbHV0aW9uIG9mIHRoaXMgY3VydmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLk1vdmVUbyNnZXRSZXNvbHV0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoaXMgY3VydmUuIEZvciBhIE1vdmVUbyB0aGUgdmFsdWUgaXMgYWx3YXlzIDEuXHJcbiAgICAgKi9cclxuICAgIGdldFJlc29sdXRpb246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgbGVuZ3RoIG9mIHRoaXMgY3VydmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLk1vdmVUbyNnZXRMZW5ndGhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGxlbmd0aCBvZiB0aGlzIGN1cnZlLiBGb3IgYSBNb3ZlVG8gdGhlIHZhbHVlIGlzIGFsd2F5cyAwLlxyXG4gICAgICovXHJcbiAgICBnZXRMZW5ndGg6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydHMgdGhpcyBjdXJ2ZSBpbnRvIGEgSlNPTi1zZXJpYWxpemFibGUgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5Nb3ZlVG8jdG9KU09OXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuQ3VydmVzLkpTT05DdXJ2ZX0gQSBwcmltaXRpdmUgb2JqZWN0IHdpdGggdGhlIGN1cnZlJ3MgdHlwZSBhbmQgb25seSBwb2ludC5cclxuICAgICAqL1xyXG4gICAgdG9KU09OOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdNb3ZlVG8nLFxyXG4gICAgICAgICAgICBwb2ludHM6IFtcclxuICAgICAgICAgICAgICAgIHRoaXMucDAueCwgdGhpcy5wMC55XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE1vdmVUbztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/curves/path/MoveTo.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/curves/path/Path.js":
/*!*****************************************************!*\
!*** ./node_modules/phaser/src/curves/path/Path.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n// Based on the three.js Curve classes created by [zz85](http://www.lab4games.net/zz85/blog)\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CubicBezierCurve = __webpack_require__(/*! ../CubicBezierCurve */ \"./node_modules/phaser/src/curves/CubicBezierCurve.js\");\r\nvar EllipseCurve = __webpack_require__(/*! ../EllipseCurve */ \"./node_modules/phaser/src/curves/EllipseCurve.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../../gameobjects/GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar LineCurve = __webpack_require__(/*! ../LineCurve */ \"./node_modules/phaser/src/curves/LineCurve.js\");\r\nvar MovePathTo = __webpack_require__(/*! ./MoveTo */ \"./node_modules/phaser/src/curves/path/MoveTo.js\");\r\nvar QuadraticBezierCurve = __webpack_require__(/*! ../QuadraticBezierCurve */ \"./node_modules/phaser/src/curves/QuadraticBezierCurve.js\");\r\nvar Rectangle = __webpack_require__(/*! ../../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar SplineCurve = __webpack_require__(/*! ../SplineCurve */ \"./node_modules/phaser/src/curves/SplineCurve.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Path combines multiple Curves into one continuous compound curve.\r\n * It does not matter how many Curves are in the Path or what type they are.\r\n *\r\n * A Curve in a Path does not have to start where the previous Curve ends - that is to say, a Path does not\r\n * have to be an uninterrupted curve. Only the order of the Curves influences the actual points on the Path.\r\n *\r\n * @class Path\r\n * @memberof Phaser.Curves\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x=0] - The X coordinate of the Path's starting point or a {@link Phaser.Types.Curves.JSONPath}.\r\n * @param {number} [y=0] - The Y coordinate of the Path's starting point.\r\n */\r\nvar Path = new Class({\r\n\r\n initialize:\r\n\r\n function Path (x, y)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n\r\n /**\r\n * The name of this Path.\r\n * Empty by default and never populated by Phaser, this is left for developers to use.\r\n *\r\n * @name Phaser.Curves.Path#name\r\n * @type {string}\r\n * @default ''\r\n * @since 3.0.0\r\n */\r\n this.name = '';\r\n\r\n /**\r\n * The list of Curves which make up this Path.\r\n *\r\n * @name Phaser.Curves.Path#curves\r\n * @type {Phaser.Curves.Curve[]}\r\n * @default []\r\n * @since 3.0.0\r\n */\r\n this.curves = [];\r\n\r\n /**\r\n * The cached length of each Curve in the Path.\r\n *\r\n * Used internally by {@link #getCurveLengths}.\r\n *\r\n * @name Phaser.Curves.Path#cacheLengths\r\n * @type {number[]}\r\n * @default []\r\n * @since 3.0.0\r\n */\r\n this.cacheLengths = [];\r\n\r\n /**\r\n * Automatically closes the path.\r\n *\r\n * @name Phaser.Curves.Path#autoClose\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.autoClose = false;\r\n\r\n /**\r\n * The starting point of the Path.\r\n *\r\n * This is not necessarily equivalent to the starting point of the first Curve in the Path. In an empty Path, it's also treated as the ending point.\r\n *\r\n * @name Phaser.Curves.Path#startPoint\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.0.0\r\n */\r\n this.startPoint = new Vector2();\r\n\r\n /**\r\n * A temporary vector used to avoid object creation when adding a Curve to the Path.\r\n *\r\n * @name Phaser.Curves.Path#_tmpVec2A\r\n * @type {Phaser.Math.Vector2}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._tmpVec2A = new Vector2();\r\n\r\n /**\r\n * A temporary vector used to avoid object creation when adding a Curve to the Path.\r\n *\r\n * @name Phaser.Curves.Path#_tmpVec2B\r\n * @type {Phaser.Math.Vector2}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._tmpVec2B = new Vector2();\r\n\r\n if (typeof x === 'object')\r\n {\r\n this.fromJSON(x);\r\n }\r\n else\r\n {\r\n this.startPoint.set(x, y);\r\n }\r\n },\r\n\r\n /**\r\n * Appends a Curve to the end of the Path.\r\n *\r\n * The Curve does not have to start where the Path ends or, for an empty Path, at its defined starting point.\r\n *\r\n * @method Phaser.Curves.Path#add\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Curves.Curve} curve - The Curve to append.\r\n *\r\n * @return {Phaser.Curves.Path} This Path object.\r\n */\r\n add: function (curve)\r\n {\r\n this.curves.push(curve);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Creates a circular Ellipse Curve positioned at the end of the Path.\r\n *\r\n * @method Phaser.Curves.Path#circleTo\r\n * @since 3.0.0\r\n *\r\n * @param {number} radius - The radius of the circle.\r\n * @param {boolean} [clockwise=false] - `true` to create a clockwise circle as opposed to a counter-clockwise circle.\r\n * @param {number} [rotation=0] - The rotation of the circle in degrees.\r\n *\r\n * @return {Phaser.Curves.Path} This Path object.\r\n */\r\n circleTo: function (radius, clockwise, rotation)\r\n {\r\n if (clockwise === undefined) { clockwise = false; }\r\n\r\n return this.ellipseTo(radius, radius, 0, 360, clockwise, rotation);\r\n },\r\n\r\n /**\r\n * Ensures that the Path is closed.\r\n *\r\n * A closed Path starts and ends at the same point. If the Path is not closed, a straight Line Curve will be created from the ending point directly to the starting point. During the check, the actual starting point of the Path, i.e. the starting point of the first Curve, will be used as opposed to the Path's defined {@link startPoint}, which could differ.\r\n *\r\n * Calling this method on an empty Path will result in an error.\r\n *\r\n * @method Phaser.Curves.Path#closePath\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Curves.Path} This Path object.\r\n */\r\n closePath: function ()\r\n {\r\n // Add a line curve if start and end of lines are not connected\r\n var startPoint = this.curves[0].getPoint(0);\r\n var endPoint = this.curves[this.curves.length - 1].getPoint(1);\r\n\r\n if (!startPoint.equals(endPoint))\r\n {\r\n // This will copy a reference to the vectors, which probably isn't sensible\r\n this.curves.push(new LineCurve(endPoint, startPoint));\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Creates a cubic bezier curve starting at the previous end point and ending at p3, using p1 and p2 as control points.\r\n *\r\n * @method Phaser.Curves.Path#cubicBezierTo\r\n * @since 3.0.0\r\n *\r\n * @param {(number|Phaser.Math.Vector2)} x - The x coordinate of the end point. Or, if a Vec2, the p1 value.\r\n * @param {(number|Phaser.Math.Vector2)} y - The y coordinate of the end point. Or, if a Vec2, the p2 value.\r\n * @param {(number|Phaser.Math.Vector2)} control1X - The x coordinate of the first control point. Or, if a Vec2, the p3 value.\r\n * @param {number} [control1Y] - The y coordinate of the first control point. Not used if vec2s are provided as the first 3 arguments.\r\n * @param {number} [control2X] - The x coordinate of the second control point. Not used if vec2s are provided as the first 3 arguments.\r\n * @param {number} [control2Y] - The y coordinate of the second control point. Not used if vec2s are provided as the first 3 arguments.\r\n *\r\n * @return {Phaser.Curves.Path} This Path object.\r\n */\r\n cubicBezierTo: function (x, y, control1X, control1Y, control2X, control2Y)\r\n {\r\n var p0 = this.getEndPoint();\r\n var p1;\r\n var p2;\r\n var p3;\r\n\r\n // Assume they're all vec2s\r\n if (x instanceof Vector2)\r\n {\r\n p1 = x;\r\n p2 = y;\r\n p3 = control1X;\r\n }\r\n else\r\n {\r\n p1 = new Vector2(control1X, control1Y);\r\n p2 = new Vector2(control2X, control2Y);\r\n p3 = new Vector2(x, y);\r\n }\r\n\r\n return this.add(new CubicBezierCurve(p0, p1, p2, p3));\r\n },\r\n\r\n // Creates a quadratic bezier curve starting at the previous end point and ending at p2, using p1 as a control point\r\n\r\n /**\r\n * Creates a Quadratic Bezier Curve starting at the ending point of the Path.\r\n *\r\n * @method Phaser.Curves.Path#quadraticBezierTo\r\n * @since 3.2.0\r\n *\r\n * @param {(number|Phaser.Math.Vector2[])} x - The X coordinate of the second control point or, if it's a `Vector2`, the first control point.\r\n * @param {number} [y] - The Y coordinate of the second control point or, if `x` is a `Vector2`, the second control point.\r\n * @param {number} [controlX] - If `x` is not a `Vector2`, the X coordinate of the first control point.\r\n * @param {number} [controlY] - If `x` is not a `Vector2`, the Y coordinate of the first control point.\r\n *\r\n * @return {Phaser.Curves.Path} This Path object.\r\n */\r\n quadraticBezierTo: function (x, y, controlX, controlY)\r\n {\r\n var p0 = this.getEndPoint();\r\n var p1;\r\n var p2;\r\n\r\n // Assume they're all vec2s\r\n if (x instanceof Vector2)\r\n {\r\n p1 = x;\r\n p2 = y;\r\n }\r\n else\r\n {\r\n p1 = new Vector2(controlX, controlY);\r\n p2 = new Vector2(x, y);\r\n }\r\n\r\n return this.add(new QuadraticBezierCurve(p0, p1, p2));\r\n },\r\n\r\n /**\r\n * Draws all Curves in the Path to a Graphics Game Object.\r\n *\r\n * @method Phaser.Curves.Path#draw\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.Graphics} G - [out,$return]\r\n *\r\n * @param {Phaser.GameObjects.Graphics} graphics - The Graphics Game Object to draw to.\r\n * @param {integer} [pointsTotal=32] - The number of points to draw for each Curve. Higher numbers result in a smoother curve but require more processing.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} The Graphics object which was drawn to.\r\n */\r\n draw: function (graphics, pointsTotal)\r\n {\r\n for (var i = 0; i < this.curves.length; i++)\r\n {\r\n var curve = this.curves[i];\r\n\r\n if (!curve.active)\r\n {\r\n continue;\r\n }\r\n\r\n curve.draw(graphics, pointsTotal);\r\n }\r\n\r\n return graphics;\r\n },\r\n\r\n /**\r\n * Creates an ellipse curve positioned at the previous end point, using the given parameters.\r\n *\r\n * @method Phaser.Curves.Path#ellipseTo\r\n * @since 3.0.0\r\n *\r\n * @param {number} [xRadius=0] - The horizontal radius of ellipse.\r\n * @param {number} [yRadius=0] - The vertical radius of ellipse.\r\n * @param {integer} [startAngle=0] - The start angle of the ellipse, in degrees.\r\n * @param {integer} [endAngle=360] - The end angle of the ellipse, in degrees.\r\n * @param {boolean} [clockwise=false] - Whether the ellipse angles are given as clockwise (`true`) or counter-clockwise (`false`).\r\n * @param {number} [rotation=0] - The rotation of the ellipse, in degrees.\r\n *\r\n * @return {Phaser.Curves.Path} This Path object.\r\n */\r\n ellipseTo: function (xRadius, yRadius, startAngle, endAngle, clockwise, rotation)\r\n {\r\n var ellipse = new EllipseCurve(0, 0, xRadius, yRadius, startAngle, endAngle, clockwise, rotation);\r\n\r\n var end = this.getEndPoint(this._tmpVec2A);\r\n\r\n // Calculate where to center the ellipse\r\n var start = ellipse.getStartPoint(this._tmpVec2B);\r\n\r\n end.subtract(start);\r\n\r\n ellipse.x = end.x;\r\n ellipse.y = end.y;\r\n\r\n return this.add(ellipse);\r\n },\r\n\r\n /**\r\n * Creates a Path from a Path Configuration object.\r\n *\r\n * The provided object should be a {@link Phaser.Types.Curves.JSONPath}, as returned by {@link #toJSON}. Providing a malformed object may cause errors.\r\n *\r\n * @method Phaser.Curves.Path#fromJSON\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Curves.JSONPath} data - The JSON object containing the Path data.\r\n *\r\n * @return {Phaser.Curves.Path} This Path object.\r\n */\r\n fromJSON: function (data)\r\n {\r\n // data should be an object matching the Path.toJSON object structure.\r\n\r\n this.curves = [];\r\n this.cacheLengths = [];\r\n\r\n this.startPoint.set(data.x, data.y);\r\n\r\n this.autoClose = data.autoClose;\r\n\r\n for (var i = 0; i < data.curves.length; i++)\r\n {\r\n var curve = data.curves[i];\r\n\r\n switch (curve.type)\r\n {\r\n case 'LineCurve':\r\n this.add(LineCurve.fromJSON(curve));\r\n break;\r\n\r\n case 'EllipseCurve':\r\n this.add(EllipseCurve.fromJSON(curve));\r\n break;\r\n\r\n case 'SplineCurve':\r\n this.add(SplineCurve.fromJSON(curve));\r\n break;\r\n\r\n case 'CubicBezierCurve':\r\n this.add(CubicBezierCurve.fromJSON(curve));\r\n break;\r\n\r\n case 'QuadraticBezierCurve':\r\n this.add(QuadraticBezierCurve.fromJSON(curve));\r\n break;\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Returns a Rectangle with a position and size matching the bounds of this Path.\r\n *\r\n * @method Phaser.Curves.Path#getBounds\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} [out] - The Rectangle to store the bounds in.\r\n * @param {integer} [accuracy=16] - The accuracy of the bounds calculations. Higher values are more accurate at the cost of calculation speed.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The modified `out` Rectangle, or a new Rectangle if none was provided.\r\n */\r\n getBounds: function (out, accuracy)\r\n {\r\n if (out === undefined) { out = new Rectangle(); }\r\n if (accuracy === undefined) { accuracy = 16; }\r\n\r\n out.x = Number.MAX_VALUE;\r\n out.y = Number.MAX_VALUE;\r\n\r\n var bounds = new Rectangle();\r\n var maxRight = MATH_CONST.MIN_SAFE_INTEGER;\r\n var maxBottom = MATH_CONST.MIN_SAFE_INTEGER;\r\n\r\n for (var i = 0; i < this.curves.length; i++)\r\n {\r\n var curve = this.curves[i];\r\n\r\n if (!curve.active)\r\n {\r\n continue;\r\n }\r\n\r\n curve.getBounds(bounds, accuracy);\r\n\r\n out.x = Math.min(out.x, bounds.x);\r\n out.y = Math.min(out.y, bounds.y);\r\n\r\n maxRight = Math.max(maxRight, bounds.right);\r\n maxBottom = Math.max(maxBottom, bounds.bottom);\r\n }\r\n\r\n out.right = maxRight;\r\n out.bottom = maxBottom;\r\n\r\n return out;\r\n },\r\n\r\n /**\r\n * Returns an array containing the length of the Path at the end of each Curve.\r\n *\r\n * The result of this method will be cached to avoid recalculating it in subsequent calls. The cache is only invalidated when the {@link #curves} array changes in length, leading to potential inaccuracies if a Curve in the Path is changed, or if a Curve is removed and another is added in its place.\r\n *\r\n * @method Phaser.Curves.Path#getCurveLengths\r\n * @since 3.0.0\r\n *\r\n * @return {number[]} An array containing the length of the Path at the end of each one of its Curves.\r\n */\r\n getCurveLengths: function ()\r\n {\r\n // We use cache values if curves and cache array are same length\r\n\r\n if (this.cacheLengths.length === this.curves.length)\r\n {\r\n return this.cacheLengths;\r\n }\r\n\r\n // Get length of sub-curve\r\n // Push sums into cached array\r\n\r\n var lengths = [];\r\n var sums = 0;\r\n\r\n for (var i = 0; i < this.curves.length; i++)\r\n {\r\n sums += this.curves[i].getLength();\r\n\r\n lengths.push(sums);\r\n }\r\n\r\n this.cacheLengths = lengths;\r\n\r\n return lengths;\r\n },\r\n\r\n /**\r\n * Returns the ending point of the Path.\r\n *\r\n * A Path's ending point is equivalent to the ending point of the last Curve in the Path. For an empty Path, the ending point is at the Path's defined {@link #startPoint}.\r\n *\r\n * @method Phaser.Curves.Path#getEndPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @param {Phaser.Math.Vector2} [out] - The object to store the point in.\r\n *\r\n * @return {Phaser.Math.Vector2} The modified `out` object, or a new Vector2 if none was provided.\r\n */\r\n getEndPoint: function (out)\r\n {\r\n if (out === undefined) { out = new Vector2(); }\r\n\r\n if (this.curves.length > 0)\r\n {\r\n this.curves[this.curves.length - 1].getPoint(1, out);\r\n }\r\n else\r\n {\r\n out.copy(this.startPoint);\r\n }\r\n\r\n return out;\r\n },\r\n\r\n /**\r\n * Returns the total length of the Path.\r\n *\r\n * @see {@link #getCurveLengths}\r\n *\r\n * @method Phaser.Curves.Path#getLength\r\n * @since 3.0.0\r\n *\r\n * @return {number} The total length of the Path.\r\n */\r\n getLength: function ()\r\n {\r\n var lens = this.getCurveLengths();\r\n\r\n return lens[lens.length - 1];\r\n },\r\n\r\n // To get accurate point with reference to\r\n // entire path distance at time t,\r\n // following has to be done:\r\n\r\n // 1. Length of each sub path have to be known\r\n // 2. Locate and identify type of curve\r\n // 3. Get t for the curve\r\n // 4. Return curve.getPointAt(t')\r\n\r\n /**\r\n * Calculates the coordinates of the point at the given normalized location (between 0 and 1) on the Path.\r\n *\r\n * The location is relative to the entire Path, not to an individual Curve. A location of 0.5 is always in the middle of the Path and is thus an equal distance away from both its starting and ending points. In a Path with one Curve, it would be in the middle of the Curve; in a Path with two Curves, it could be anywhere on either one of them depending on their lengths.\r\n *\r\n * @method Phaser.Curves.Path#getPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @param {number} t - The location of the point to return, between 0 and 1.\r\n * @param {Phaser.Math.Vector2} [out] - The object in which to store the calculated point.\r\n *\r\n * @return {?Phaser.Math.Vector2} The modified `out` object, or a new `Vector2` if none was provided.\r\n */\r\n getPoint: function (t, out)\r\n {\r\n if (out === undefined) { out = new Vector2(); }\r\n\r\n var d = t * this.getLength();\r\n var curveLengths = this.getCurveLengths();\r\n var i = 0;\r\n\r\n while (i < curveLengths.length)\r\n {\r\n if (curveLengths[i] >= d)\r\n {\r\n var diff = curveLengths[i] - d;\r\n var curve = this.curves[i];\r\n\r\n var segmentLength = curve.getLength();\r\n var u = (segmentLength === 0) ? 0 : 1 - diff / segmentLength;\r\n\r\n return curve.getPointAt(u, out);\r\n }\r\n\r\n i++;\r\n }\r\n\r\n // loop where sum != 0, sum > d , sum+1 <d\r\n return null;\r\n },\r\n\r\n /**\r\n * Returns the defined starting point of the Path.\r\n *\r\n * This is not necessarily equal to the starting point of the first Curve if it differs from {@link startPoint}.\r\n *\r\n * @method Phaser.Curves.Path#getPoints\r\n * @since 3.0.0\r\n *\r\n * @param {integer} [divisions=12] - The number of points to divide the path in to.\r\n *\r\n * @return {Phaser.Math.Vector2[]} An array of Vector2 objects that containing the points along the Path.\r\n */\r\n getPoints: function (divisions)\r\n {\r\n if (divisions === undefined) { divisions = 12; }\r\n\r\n var points = [];\r\n var last;\r\n\r\n for (var i = 0; i < this.curves.length; i++)\r\n {\r\n var curve = this.curves[i];\r\n\r\n if (!curve.active)\r\n {\r\n continue;\r\n }\r\n\r\n var resolution = curve.getResolution(divisions);\r\n\r\n var pts = curve.getPoints(resolution);\r\n\r\n for (var j = 0; j < pts.length; j++)\r\n {\r\n var point = pts[j];\r\n\r\n if (last && last.equals(point))\r\n {\r\n // ensures no consecutive points are duplicates\r\n continue;\r\n }\r\n\r\n points.push(point);\r\n\r\n last = point;\r\n }\r\n }\r\n\r\n if (this.autoClose && points.length > 1 && !points[points.length - 1].equals(points[0]))\r\n {\r\n points.push(points[0]);\r\n }\r\n\r\n return points;\r\n },\r\n\r\n /**\r\n * Returns a randomly chosen point anywhere on the path. This follows the same rules as `getPoint` in that it may return a point on any Curve inside this path.\r\n * \r\n * When calling this method multiple times, the points are not guaranteed to be equally spaced spatially.\r\n *\r\n * @method Phaser.Curves.Path#getRandomPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @param {Phaser.Math.Vector2} [out] - `Vector2` instance that should be used for storing the result. If `undefined` a new `Vector2` will be created.\r\n *\r\n * @return {Phaser.Math.Vector2} The modified `out` object, or a new `Vector2` if none was provided.\r\n */\r\n getRandomPoint: function (out)\r\n {\r\n if (out === undefined) { out = new Vector2(); }\r\n\r\n return this.getPoint(Math.random(), out);\r\n },\r\n\r\n /**\r\n * Divides this Path into a set of equally spaced points,\r\n * \r\n * The resulting points are equally spaced with respect to the points' position on the path, but not necessarily equally spaced spatially.\r\n *\r\n * @method Phaser.Curves.Path#getSpacedPoints\r\n * @since 3.0.0\r\n *\r\n * @param {integer} [divisions=40] - The amount of points to divide this Path into.\r\n *\r\n * @return {Phaser.Math.Vector2[]} A list of the points this path was subdivided into.\r\n */\r\n getSpacedPoints: function (divisions)\r\n {\r\n if (divisions === undefined) { divisions = 40; }\r\n\r\n var points = [];\r\n\r\n for (var i = 0; i <= divisions; i++)\r\n {\r\n points.push(this.getPoint(i / divisions));\r\n }\r\n\r\n if (this.autoClose)\r\n {\r\n points.push(points[0]);\r\n }\r\n\r\n return points;\r\n },\r\n\r\n /**\r\n * Returns the starting point of the Path.\r\n *\r\n * @method Phaser.Curves.Path#getStartPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @param {Phaser.Math.Vector2} [out] - `Vector2` instance that should be used for storing the result. If `undefined` a new `Vector2` will be created.\r\n *\r\n * @return {Phaser.Math.Vector2} The modified `out` object, or a new Vector2 if none was provided.\r\n */\r\n getStartPoint: function (out)\r\n {\r\n if (out === undefined) { out = new Vector2(); }\r\n\r\n return out.copy(this.startPoint);\r\n },\r\n\r\n /**\r\n * Creates a line curve from the previous end point to x/y.\r\n *\r\n * @method Phaser.Curves.Path#lineTo\r\n * @since 3.0.0\r\n *\r\n * @param {(number|Phaser.Math.Vector2)} x - The X coordinate of the line's end point, or a `Vector2` containing the entire end point.\r\n * @param {number} [y] - The Y coordinate of the line's end point, if a number was passed as the X parameter.\r\n *\r\n * @return {Phaser.Curves.Path} This Path object.\r\n */\r\n lineTo: function (x, y)\r\n {\r\n if (x instanceof Vector2)\r\n {\r\n this._tmpVec2B.copy(x);\r\n }\r\n else\r\n {\r\n this._tmpVec2B.set(x, y);\r\n }\r\n\r\n var end = this.getEndPoint(this._tmpVec2A);\r\n\r\n return this.add(new LineCurve([ end.x, end.y, this._tmpVec2B.x, this._tmpVec2B.y ]));\r\n },\r\n\r\n /**\r\n * Creates a spline curve starting at the previous end point, using the given points on the curve.\r\n *\r\n * @method Phaser.Curves.Path#splineTo\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Math.Vector2[]} points - The points the newly created spline curve should consist of.\r\n *\r\n * @return {Phaser.Curves.Path} This Path object.\r\n */\r\n splineTo: function (points)\r\n {\r\n points.unshift(this.getEndPoint());\r\n\r\n return this.add(new SplineCurve(points));\r\n },\r\n\r\n /**\r\n * Creates a \"gap\" in this path from the path's current end point to the given coordinates.\r\n * \r\n * After calling this function, this Path's end point will be equal to the given coordinates\r\n *\r\n * @method Phaser.Curves.Path#moveTo\r\n * @since 3.0.0\r\n *\r\n * @param {(number|Phaser.Math.Vector2)} x - The X coordinate of the position to move the path's end point to, or a `Vector2` containing the entire new end point.\r\n * @param {number} y - The Y coordinate of the position to move the path's end point to, if a number was passed as the X coordinate.\r\n *\r\n * @return {Phaser.Curves.Path} This Path object.\r\n */\r\n moveTo: function (x, y)\r\n {\r\n if (x instanceof Vector2)\r\n {\r\n return this.add(new MovePathTo(x.x, x.y));\r\n }\r\n else\r\n {\r\n return this.add(new MovePathTo(x, y));\r\n }\r\n },\r\n\r\n /**\r\n * Converts this Path to a JSON object containing the path information and its constituent curves.\r\n *\r\n * @method Phaser.Curves.Path#toJSON\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Types.Curves.JSONPath} The JSON object containing this path's data.\r\n */\r\n toJSON: function ()\r\n {\r\n var out = [];\r\n\r\n for (var i = 0; i < this.curves.length; i++)\r\n {\r\n out.push(this.curves[i].toJSON());\r\n }\r\n\r\n return {\r\n type: 'Path',\r\n x: this.startPoint.x,\r\n y: this.startPoint.y,\r\n autoClose: this.autoClose,\r\n curves: out\r\n };\r\n },\r\n\r\n /**\r\n * cacheLengths must be recalculated.\r\n *\r\n * @method Phaser.Curves.Path#updateArcLengths\r\n * @since 3.0.0\r\n */\r\n updateArcLengths: function ()\r\n {\r\n this.cacheLengths = [];\r\n\r\n this.getCurveLengths();\r\n },\r\n\r\n /**\r\n * Disposes of this Path, clearing its internal references to objects so they can be garbage-collected.\r\n *\r\n * @method Phaser.Curves.Path#destroy\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.curves.length = 0;\r\n this.cacheLengths.length = 0;\r\n this.startPoint = undefined;\r\n }\r\n\r\n});\r\n\r\n/**\r\n * Creates a new Path Object.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#path\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal position of this Path.\r\n * @param {number} y - The vertical position of this Path.\r\n *\r\n * @return {Phaser.Curves.Path} The Path Object that was created.\r\n */\r\nGameObjectFactory.register('path', function (x, y)\r\n{\r\n return new Path(x, y);\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n// There are several properties available to use:\r\n//\r\n// this.scene - a reference to the Scene that owns the GameObjectFactory\r\n// this.displayList - a reference to the Display List the Scene owns\r\n// this.updateList - a reference to the Update List the Scene owns\r\n\r\nmodule.exports = Path;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9jdXJ2ZXMvcGF0aC9QYXRoLmpzPzA2NmUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsdUJBQXVCLG1CQUFPLENBQUMsaUZBQXFCO0FBQ3BELG1CQUFtQixtQkFBTyxDQUFDLHlFQUFpQjtBQUM1Qyx3QkFBd0IsbUJBQU8sQ0FBQyx1R0FBcUM7QUFDckUsZ0JBQWdCLG1CQUFPLENBQUMsbUVBQWM7QUFDdEMsaUJBQWlCLG1CQUFPLENBQUMsaUVBQVU7QUFDbkMsMkJBQTJCLG1CQUFPLENBQUMseUZBQXlCO0FBQzVELGdCQUFnQixtQkFBTyxDQUFDLDZGQUFnQztBQUN4RCxrQkFBa0IsbUJBQU8sQ0FBQyx1RUFBZ0I7QUFDMUMsY0FBYyxtQkFBTyxDQUFDLHFFQUFvQjtBQUMxQyxpQkFBaUIsbUJBQU8sQ0FBQyxpRUFBa0I7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPLDZEQUE2RCxtQ0FBbUM7QUFDbEgsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQix1QkFBdUI7QUFDdEQ7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsbUJBQW1COztBQUV6RDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsbVVBQW1VLGlCQUFpQjtBQUNwVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsbUJBQW1CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDZCQUE2QjtBQUM1QyxlQUFlLDZCQUE2QjtBQUM1QyxlQUFlLDZCQUE2QjtBQUM1QyxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsK0JBQStCO0FBQzlDLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLDRCQUE0QjtBQUM3QztBQUNBLGVBQWUsNEJBQTRCO0FBQzNDLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHdCQUF3QjtBQUMvQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxtQ0FBbUMsa0JBQWtCLGNBQWM7QUFDM0c7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDZCQUE2QjtBQUM1QztBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSx1QkFBdUIsd0JBQXdCO0FBQy9DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSxzQkFBc0I7QUFDckMsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHNCQUFzQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsdUJBQXVCO0FBQ3ZELHFDQUFxQyxlQUFlOztBQUVwRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsd0JBQXdCO0FBQy9DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsdUlBQXVJLGNBQWM7QUFDcko7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsU0FBUztBQUN6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdUJBQXVCLHdCQUF3QjtBQUMvQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLDRKQUE0SixrQkFBa0I7QUFDOUs7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxxQkFBcUI7O0FBRXJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb1JBQW9SO0FBQ3BSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLG9CQUFvQjtBQUNuQztBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLHFCQUFxQjs7QUFFckQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxrR0FBa0csaUJBQWlCO0FBQ25IO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHNCQUFzQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsZ0JBQWdCOztBQUV0RDtBQUNBOztBQUVBLHVCQUF1Qix3QkFBd0I7QUFDL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSwyQkFBMkIsZ0JBQWdCO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxxQkFBcUI7O0FBRXJEO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHNCQUFzQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsZ0JBQWdCOztBQUV0RDs7QUFFQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MscUJBQXFCOztBQUVyRDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw2QkFBNkI7QUFDNUMsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHNCQUFzQjtBQUNyQztBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDZCQUE2QjtBQUM1QyxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsbUJBQW1CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw2QkFBNkI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLHdCQUF3QjtBQUMvQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksbUJBQW1CO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2N1cnZlcy9wYXRoL1BhdGguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8vICBCYXNlZCBvbiB0aGUgdGhyZWUuanMgQ3VydmUgY2xhc3NlcyBjcmVhdGVkIGJ5IFt6ejg1XShodHRwOi8vd3d3LmxhYjRnYW1lcy5uZXQveno4NS9ibG9nKVxyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEN1YmljQmV6aWVyQ3VydmUgPSByZXF1aXJlKCcuLi9DdWJpY0JlemllckN1cnZlJyk7XHJcbnZhciBFbGxpcHNlQ3VydmUgPSByZXF1aXJlKCcuLi9FbGxpcHNlQ3VydmUnKTtcclxudmFyIEdhbWVPYmplY3RGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vZ2FtZW9iamVjdHMvR2FtZU9iamVjdEZhY3RvcnknKTtcclxudmFyIExpbmVDdXJ2ZSA9IHJlcXVpcmUoJy4uL0xpbmVDdXJ2ZScpO1xyXG52YXIgTW92ZVBhdGhUbyA9IHJlcXVpcmUoJy4vTW92ZVRvJyk7XHJcbnZhciBRdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IHJlcXVpcmUoJy4uL1F1YWRyYXRpY0JlemllckN1cnZlJyk7XHJcbnZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuLi8uLi9nZW9tL3JlY3RhbmdsZS9SZWN0YW5nbGUnKTtcclxudmFyIFNwbGluZUN1cnZlID0gcmVxdWlyZSgnLi4vU3BsaW5lQ3VydmUnKTtcclxudmFyIFZlY3RvcjIgPSByZXF1aXJlKCcuLi8uLi9tYXRoL1ZlY3RvcjInKTtcclxudmFyIE1BVEhfQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9tYXRoL2NvbnN0Jyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIFBhdGggY29tYmluZXMgbXVsdGlwbGUgQ3VydmVzIGludG8gb25lIGNvbnRpbnVvdXMgY29tcG91bmQgY3VydmUuXHJcbiAqIEl0IGRvZXMgbm90IG1hdHRlciBob3cgbWFueSBDdXJ2ZXMgYXJlIGluIHRoZSBQYXRoIG9yIHdoYXQgdHlwZSB0aGV5IGFyZS5cclxuICpcclxuICogQSBDdXJ2ZSBpbiBhIFBhdGggZG9lcyBub3QgaGF2ZSB0byBzdGFydCB3aGVyZSB0aGUgcHJldmlvdXMgQ3VydmUgZW5kcyAtIHRoYXQgaXMgdG8gc2F5LCBhIFBhdGggZG9lcyBub3RcclxuICogaGF2ZSB0byBiZSBhbiB1bmludGVycnVwdGVkIGN1cnZlLiBPbmx5IHRoZSBvcmRlciBvZiB0aGUgQ3VydmVzIGluZmx1ZW5jZXMgdGhlIGFjdHVhbCBwb2ludHMgb24gdGhlIFBhdGguXHJcbiAqXHJcbiAqIEBjbGFzcyBQYXRoXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuQ3VydmVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgUGF0aCdzIHN0YXJ0aW5nIHBvaW50IG9yIGEge0BsaW5rIFBoYXNlci5UeXBlcy5DdXJ2ZXMuSlNPTlBhdGh9LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBQYXRoJ3Mgc3RhcnRpbmcgcG9pbnQuXHJcbiAqL1xyXG52YXIgUGF0aCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBQYXRoICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBuYW1lIG9mIHRoaXMgUGF0aC5cclxuICAgICAgICAgKiBFbXB0eSBieSBkZWZhdWx0IGFuZCBuZXZlciBwb3B1bGF0ZWQgYnkgUGhhc2VyLCB0aGlzIGlzIGxlZnQgZm9yIGRldmVsb3BlcnMgdG8gdXNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5QYXRoI25hbWVcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBkZWZhdWx0ICcnXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5uYW1lID0gJyc7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBsaXN0IG9mIEN1cnZlcyB3aGljaCBtYWtlIHVwIHRoaXMgUGF0aC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DdXJ2ZXMuUGF0aCNjdXJ2ZXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkN1cnZlcy5DdXJ2ZVtdfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdXJ2ZXMgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNhY2hlZCBsZW5ndGggb2YgZWFjaCBDdXJ2ZSBpbiB0aGUgUGF0aC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFVzZWQgaW50ZXJuYWxseSBieSB7QGxpbmsgI2dldEN1cnZlTGVuZ3Roc30uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLlBhdGgjY2FjaGVMZW5ndGhzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcltdfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYWNoZUxlbmd0aHMgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQXV0b21hdGljYWxseSBjbG9zZXMgdGhlIHBhdGguXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLlBhdGgjYXV0b0Nsb3NlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmF1dG9DbG9zZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc3RhcnRpbmcgcG9pbnQgb2YgdGhlIFBhdGguXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBUaGlzIGlzIG5vdCBuZWNlc3NhcmlseSBlcXVpdmFsZW50IHRvIHRoZSBzdGFydGluZyBwb2ludCBvZiB0aGUgZmlyc3QgQ3VydmUgaW4gdGhlIFBhdGguIEluIGFuIGVtcHR5IFBhdGgsIGl0J3MgYWxzbyB0cmVhdGVkIGFzIHRoZSBlbmRpbmcgcG9pbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuQ3VydmVzLlBhdGgjc3RhcnRQb2ludFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3RhcnRQb2ludCA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgdGVtcG9yYXJ5IHZlY3RvciB1c2VkIHRvIGF2b2lkIG9iamVjdCBjcmVhdGlvbiB3aGVuIGFkZGluZyBhIEN1cnZlIHRvIHRoZSBQYXRoLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkN1cnZlcy5QYXRoI190bXBWZWMyQVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdG1wVmVjMkEgPSBuZXcgVmVjdG9yMigpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHRlbXBvcmFyeSB2ZWN0b3IgdXNlZCB0byBhdm9pZCBvYmplY3QgY3JlYXRpb24gd2hlbiBhZGRpbmcgYSBDdXJ2ZSB0byB0aGUgUGF0aC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5DdXJ2ZXMuUGF0aCNfdG1wVmVjMkJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RtcFZlYzJCID0gbmV3IFZlY3RvcjIoKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB4ID09PSAnb2JqZWN0JylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbUpTT04oeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRQb2ludC5zZXQoeCwgeSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGVuZHMgYSBDdXJ2ZSB0byB0aGUgZW5kIG9mIHRoZSBQYXRoLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBDdXJ2ZSBkb2VzIG5vdCBoYXZlIHRvIHN0YXJ0IHdoZXJlIHRoZSBQYXRoIGVuZHMgb3IsIGZvciBhbiBlbXB0eSBQYXRoLCBhdCBpdHMgZGVmaW5lZCBzdGFydGluZyBwb2ludC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuUGF0aCNhZGRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkN1cnZlcy5DdXJ2ZX0gY3VydmUgLSBUaGUgQ3VydmUgdG8gYXBwZW5kLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DdXJ2ZXMuUGF0aH0gVGhpcyBQYXRoIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoY3VydmUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jdXJ2ZXMucHVzaChjdXJ2ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBjaXJjdWxhciBFbGxpcHNlIEN1cnZlIHBvc2l0aW9uZWQgYXQgdGhlIGVuZCBvZiB0aGUgUGF0aC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuUGF0aCNjaXJjbGVUb1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZGl1cyAtIFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Nsb2Nrd2lzZT1mYWxzZV0gLSBgdHJ1ZWAgdG8gY3JlYXRlIGEgY2xvY2t3aXNlIGNpcmNsZSBhcyBvcHBvc2VkIHRvIGEgY291bnRlci1jbG9ja3dpc2UgY2lyY2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtyb3RhdGlvbj0wXSAtIFRoZSByb3RhdGlvbiBvZiB0aGUgY2lyY2xlIGluIGRlZ3JlZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkN1cnZlcy5QYXRofSBUaGlzIFBhdGggb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBjaXJjbGVUbzogZnVuY3Rpb24gKHJhZGl1cywgY2xvY2t3aXNlLCByb3RhdGlvbilcclxuICAgIHtcclxuICAgICAgICBpZiAoY2xvY2t3aXNlID09PSB1bmRlZmluZWQpIHsgY2xvY2t3aXNlID0gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxsaXBzZVRvKHJhZGl1cywgcmFkaXVzLCAwLCAzNjAsIGNsb2Nrd2lzZSwgcm90YXRpb24pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVuc3VyZXMgdGhhdCB0aGUgUGF0aCBpcyBjbG9zZWQuXHJcbiAgICAgKlxyXG4gICAgICogQSBjbG9zZWQgUGF0aCBzdGFydHMgYW5kIGVuZHMgYXQgdGhlIHNhbWUgcG9pbnQuIElmIHRoZSBQYXRoIGlzIG5vdCBjbG9zZWQsIGEgc3RyYWlnaHQgTGluZSBDdXJ2ZSB3aWxsIGJlIGNyZWF0ZWQgZnJvbSB0aGUgZW5kaW5nIHBvaW50IGRpcmVjdGx5IHRvIHRoZSBzdGFydGluZyBwb2ludC4gRHVyaW5nIHRoZSBjaGVjaywgdGhlIGFjdHVhbCBzdGFydGluZyBwb2ludCBvZiB0aGUgUGF0aCwgaS5lLiB0aGUgc3RhcnRpbmcgcG9pbnQgb2YgdGhlIGZpcnN0IEN1cnZlLCB3aWxsIGJlIHVzZWQgYXMgb3Bwb3NlZCB0byB0aGUgUGF0aCdzIGRlZmluZWQge0BsaW5rIHN0YXJ0UG9pbnR9LCB3aGljaCBjb3VsZCBkaWZmZXIuXHJcbiAgICAgKlxyXG4gICAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCBvbiBhbiBlbXB0eSBQYXRoIHdpbGwgcmVzdWx0IGluIGFuIGVycm9yLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5QYXRoI2Nsb3NlUGF0aFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkN1cnZlcy5QYXRofSBUaGlzIFBhdGggb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBjbG9zZVBhdGg6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gQWRkIGEgbGluZSBjdXJ2ZSBpZiBzdGFydCBhbmQgZW5kIG9mIGxpbmVzIGFyZSBub3QgY29ubmVjdGVkXHJcbiAgICAgICAgdmFyIHN0YXJ0UG9pbnQgPSB0aGlzLmN1cnZlc1swXS5nZXRQb2ludCgwKTtcclxuICAgICAgICB2YXIgZW5kUG9pbnQgPSB0aGlzLmN1cnZlc1t0aGlzLmN1cnZlcy5sZW5ndGggLSAxXS5nZXRQb2ludCgxKTtcclxuXHJcbiAgICAgICAgaWYgKCFzdGFydFBvaW50LmVxdWFscyhlbmRQb2ludCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgVGhpcyB3aWxsIGNvcHkgYSByZWZlcmVuY2UgdG8gdGhlIHZlY3RvcnMsIHdoaWNoIHByb2JhYmx5IGlzbid0IHNlbnNpYmxlXHJcbiAgICAgICAgICAgIHRoaXMuY3VydmVzLnB1c2gobmV3IExpbmVDdXJ2ZShlbmRQb2ludCwgc3RhcnRQb2ludCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIGN1YmljIGJlemllciBjdXJ2ZSBzdGFydGluZyBhdCB0aGUgcHJldmlvdXMgZW5kIHBvaW50IGFuZCBlbmRpbmcgYXQgcDMsIHVzaW5nIHAxIGFuZCBwMiBhcyBjb250cm9sIHBvaW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuUGF0aCNjdWJpY0JlemllclRvXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhudW1iZXJ8UGhhc2VyLk1hdGguVmVjdG9yMil9IHggLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBlbmQgcG9pbnQuIE9yLCBpZiBhIFZlYzIsIHRoZSBwMSB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7KG51bWJlcnxQaGFzZXIuTWF0aC5WZWN0b3IyKX0geSAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGVuZCBwb2ludC4gT3IsIGlmIGEgVmVjMiwgdGhlIHAyIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHsobnVtYmVyfFBoYXNlci5NYXRoLlZlY3RvcjIpfSBjb250cm9sMVggLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBmaXJzdCBjb250cm9sIHBvaW50LiBPciwgaWYgYSBWZWMyLCB0aGUgcDMgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2NvbnRyb2wxWV0gLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBmaXJzdCBjb250cm9sIHBvaW50LiBOb3QgdXNlZCBpZiB2ZWMycyBhcmUgcHJvdmlkZWQgYXMgdGhlIGZpcnN0IDMgYXJndW1lbnRzLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtjb250cm9sMlhdIC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgc2Vjb25kIGNvbnRyb2wgcG9pbnQuIE5vdCB1c2VkIGlmIHZlYzJzIGFyZSBwcm92aWRlZCBhcyB0aGUgZmlyc3QgMyBhcmd1bWVudHMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2NvbnRyb2wyWV0gLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBzZWNvbmQgY29udHJvbCBwb2ludC4gTm90IHVzZWQgaWYgdmVjMnMgYXJlIHByb3ZpZGVkIGFzIHRoZSBmaXJzdCAzIGFyZ3VtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ3VydmVzLlBhdGh9IFRoaXMgUGF0aCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGN1YmljQmV6aWVyVG86IGZ1bmN0aW9uICh4LCB5LCBjb250cm9sMVgsIGNvbnRyb2wxWSwgY29udHJvbDJYLCBjb250cm9sMlkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHAwID0gdGhpcy5nZXRFbmRQb2ludCgpO1xyXG4gICAgICAgIHZhciBwMTtcclxuICAgICAgICB2YXIgcDI7XHJcbiAgICAgICAgdmFyIHAzO1xyXG5cclxuICAgICAgICAvLyAgQXNzdW1lIHRoZXkncmUgYWxsIHZlYzJzXHJcbiAgICAgICAgaWYgKHggaW5zdGFuY2VvZiBWZWN0b3IyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcDEgPSB4O1xyXG4gICAgICAgICAgICBwMiA9IHk7XHJcbiAgICAgICAgICAgIHAzID0gY29udHJvbDFYO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwMSA9IG5ldyBWZWN0b3IyKGNvbnRyb2wxWCwgY29udHJvbDFZKTtcclxuICAgICAgICAgICAgcDIgPSBuZXcgVmVjdG9yMihjb250cm9sMlgsIGNvbnRyb2wyWSk7XHJcbiAgICAgICAgICAgIHAzID0gbmV3IFZlY3RvcjIoeCwgeSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5hZGQobmV3IEN1YmljQmV6aWVyQ3VydmUocDAsIHAxLCBwMiwgcDMpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gIENyZWF0ZXMgYSBxdWFkcmF0aWMgYmV6aWVyIGN1cnZlIHN0YXJ0aW5nIGF0IHRoZSBwcmV2aW91cyBlbmQgcG9pbnQgYW5kIGVuZGluZyBhdCBwMiwgdXNpbmcgcDEgYXMgYSBjb250cm9sIHBvaW50XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgUXVhZHJhdGljIEJlemllciBDdXJ2ZSBzdGFydGluZyBhdCB0aGUgZW5kaW5nIHBvaW50IG9mIHRoZSBQYXRoLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5QYXRoI3F1YWRyYXRpY0JlemllclRvXHJcbiAgICAgKiBAc2luY2UgMy4yLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhudW1iZXJ8UGhhc2VyLk1hdGguVmVjdG9yMltdKX0geCAtIFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHNlY29uZCBjb250cm9sIHBvaW50IG9yLCBpZiBpdCdzIGEgYFZlY3RvcjJgLCB0aGUgZmlyc3QgY29udHJvbCBwb2ludC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeV0gLSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBzZWNvbmQgY29udHJvbCBwb2ludCBvciwgaWYgYHhgIGlzIGEgYFZlY3RvcjJgLCB0aGUgc2Vjb25kIGNvbnRyb2wgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2NvbnRyb2xYXSAtIElmIGB4YCBpcyBub3QgYSBgVmVjdG9yMmAsIHRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGZpcnN0IGNvbnRyb2wgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2NvbnRyb2xZXSAtIElmIGB4YCBpcyBub3QgYSBgVmVjdG9yMmAsIHRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGZpcnN0IGNvbnRyb2wgcG9pbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkN1cnZlcy5QYXRofSBUaGlzIFBhdGggb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBxdWFkcmF0aWNCZXppZXJUbzogZnVuY3Rpb24gKHgsIHksIGNvbnRyb2xYLCBjb250cm9sWSlcclxuICAgIHtcclxuICAgICAgICB2YXIgcDAgPSB0aGlzLmdldEVuZFBvaW50KCk7XHJcbiAgICAgICAgdmFyIHAxO1xyXG4gICAgICAgIHZhciBwMjtcclxuXHJcbiAgICAgICAgLy8gIEFzc3VtZSB0aGV5J3JlIGFsbCB2ZWMyc1xyXG4gICAgICAgIGlmICh4IGluc3RhbmNlb2YgVmVjdG9yMilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHAxID0geDtcclxuICAgICAgICAgICAgcDIgPSB5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwMSA9IG5ldyBWZWN0b3IyKGNvbnRyb2xYLCBjb250cm9sWSk7XHJcbiAgICAgICAgICAgIHAyID0gbmV3IFZlY3RvcjIoeCwgeSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5hZGQobmV3IFF1YWRyYXRpY0JlemllckN1cnZlKHAwLCBwMSwgcDIpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3cyBhbGwgQ3VydmVzIGluIHRoZSBQYXRoIHRvIGEgR3JhcGhpY3MgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLlBhdGgjZHJhd1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gRyAtIFtvdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gZ3JhcGhpY3MgLSBUaGUgR3JhcGhpY3MgR2FtZSBPYmplY3QgdG8gZHJhdyB0by5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3BvaW50c1RvdGFsPTMyXSAtIFRoZSBudW1iZXIgb2YgcG9pbnRzIHRvIGRyYXcgZm9yIGVhY2ggQ3VydmUuIEhpZ2hlciBudW1iZXJzIHJlc3VsdCBpbiBhIHNtb290aGVyIGN1cnZlIGJ1dCByZXF1aXJlIG1vcmUgcHJvY2Vzc2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoZSBHcmFwaGljcyBvYmplY3Qgd2hpY2ggd2FzIGRyYXduIHRvLlxyXG4gICAgICovXHJcbiAgICBkcmF3OiBmdW5jdGlvbiAoZ3JhcGhpY3MsIHBvaW50c1RvdGFsKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jdXJ2ZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY3VydmUgPSB0aGlzLmN1cnZlc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmICghY3VydmUuYWN0aXZlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY3VydmUuZHJhdyhncmFwaGljcywgcG9pbnRzVG90YWwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGdyYXBoaWNzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYW4gZWxsaXBzZSBjdXJ2ZSBwb3NpdGlvbmVkIGF0IHRoZSBwcmV2aW91cyBlbmQgcG9pbnQsIHVzaW5nIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5QYXRoI2VsbGlwc2VUb1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4UmFkaXVzPTBdIC0gVGhlIGhvcml6b250YWwgcmFkaXVzIG9mIGVsbGlwc2UuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3lSYWRpdXM9MF0gLSBUaGUgdmVydGljYWwgcmFkaXVzIG9mIGVsbGlwc2UuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtzdGFydEFuZ2xlPTBdIC0gVGhlIHN0YXJ0IGFuZ2xlIG9mIHRoZSBlbGxpcHNlLCBpbiBkZWdyZWVzLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZW5kQW5nbGU9MzYwXSAtIFRoZSBlbmQgYW5nbGUgb2YgdGhlIGVsbGlwc2UsIGluIGRlZ3JlZXMuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjbG9ja3dpc2U9ZmFsc2VdIC0gV2hldGhlciB0aGUgZWxsaXBzZSBhbmdsZXMgYXJlIGdpdmVuIGFzIGNsb2Nrd2lzZSAoYHRydWVgKSBvciBjb3VudGVyLWNsb2Nrd2lzZSAoYGZhbHNlYCkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3JvdGF0aW9uPTBdIC0gVGhlIHJvdGF0aW9uIG9mIHRoZSBlbGxpcHNlLCBpbiBkZWdyZWVzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DdXJ2ZXMuUGF0aH0gVGhpcyBQYXRoIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZWxsaXBzZVRvOiBmdW5jdGlvbiAoeFJhZGl1cywgeVJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGNsb2Nrd2lzZSwgcm90YXRpb24pXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGVsbGlwc2UgPSBuZXcgRWxsaXBzZUN1cnZlKDAsIDAsIHhSYWRpdXMsIHlSYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBjbG9ja3dpc2UsIHJvdGF0aW9uKTtcclxuXHJcbiAgICAgICAgdmFyIGVuZCA9IHRoaXMuZ2V0RW5kUG9pbnQodGhpcy5fdG1wVmVjMkEpO1xyXG5cclxuICAgICAgICAvLyAgQ2FsY3VsYXRlIHdoZXJlIHRvIGNlbnRlciB0aGUgZWxsaXBzZVxyXG4gICAgICAgIHZhciBzdGFydCA9IGVsbGlwc2UuZ2V0U3RhcnRQb2ludCh0aGlzLl90bXBWZWMyQik7XHJcblxyXG4gICAgICAgIGVuZC5zdWJ0cmFjdChzdGFydCk7XHJcblxyXG4gICAgICAgIGVsbGlwc2UueCA9IGVuZC54O1xyXG4gICAgICAgIGVsbGlwc2UueSA9IGVuZC55O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5hZGQoZWxsaXBzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIFBhdGggZnJvbSBhIFBhdGggQ29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHByb3ZpZGVkIG9iamVjdCBzaG91bGQgYmUgYSB7QGxpbmsgUGhhc2VyLlR5cGVzLkN1cnZlcy5KU09OUGF0aH0sIGFzIHJldHVybmVkIGJ5IHtAbGluayAjdG9KU09OfS4gUHJvdmlkaW5nIGEgbWFsZm9ybWVkIG9iamVjdCBtYXkgY2F1c2UgZXJyb3JzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5QYXRoI2Zyb21KU09OXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5DdXJ2ZXMuSlNPTlBhdGh9IGRhdGEgLSBUaGUgSlNPTiBvYmplY3QgY29udGFpbmluZyB0aGUgUGF0aCBkYXRhLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DdXJ2ZXMuUGF0aH0gVGhpcyBQYXRoIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZnJvbUpTT046IGZ1bmN0aW9uIChkYXRhKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBkYXRhIHNob3VsZCBiZSBhbiBvYmplY3QgbWF0Y2hpbmcgdGhlIFBhdGgudG9KU09OIG9iamVjdCBzdHJ1Y3R1cmUuXHJcblxyXG4gICAgICAgIHRoaXMuY3VydmVzID0gW107XHJcbiAgICAgICAgdGhpcy5jYWNoZUxlbmd0aHMgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGFydFBvaW50LnNldChkYXRhLngsIGRhdGEueSk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b0Nsb3NlID0gZGF0YS5hdXRvQ2xvc2U7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5jdXJ2ZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY3VydmUgPSBkYXRhLmN1cnZlc1tpXTtcclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCAoY3VydmUudHlwZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnTGluZUN1cnZlJzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZChMaW5lQ3VydmUuZnJvbUpTT04oY3VydmUpKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlICdFbGxpcHNlQ3VydmUnOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkKEVsbGlwc2VDdXJ2ZS5mcm9tSlNPTihjdXJ2ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgJ1NwbGluZUN1cnZlJzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZChTcGxpbmVDdXJ2ZS5mcm9tSlNPTihjdXJ2ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgJ0N1YmljQmV6aWVyQ3VydmUnOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkKEN1YmljQmV6aWVyQ3VydmUuZnJvbUpTT04oY3VydmUpKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlICdRdWFkcmF0aWNCZXppZXJDdXJ2ZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGQoUXVhZHJhdGljQmV6aWVyQ3VydmUuZnJvbUpTT04oY3VydmUpKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIFJlY3RhbmdsZSB3aXRoIGEgcG9zaXRpb24gYW5kIHNpemUgbWF0Y2hpbmcgdGhlIGJvdW5kcyBvZiB0aGlzIFBhdGguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLlBhdGgjZ2V0Qm91bmRzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLk1hdGguVmVjdG9yMn0gTyAtIFtvdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gW291dF0gLSBUaGUgUmVjdGFuZ2xlIHRvIHN0b3JlIHRoZSBib3VuZHMgaW4uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFthY2N1cmFjeT0xNl0gLSBUaGUgYWNjdXJhY3kgb2YgdGhlIGJvdW5kcyBjYWxjdWxhdGlvbnMuIEhpZ2hlciB2YWx1ZXMgYXJlIG1vcmUgYWNjdXJhdGUgYXQgdGhlIGNvc3Qgb2YgY2FsY3VsYXRpb24gc3BlZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBUaGUgbW9kaWZpZWQgYG91dGAgUmVjdGFuZ2xlLCBvciBhIG5ldyBSZWN0YW5nbGUgaWYgbm9uZSB3YXMgcHJvdmlkZWQuXHJcbiAgICAgKi9cclxuICAgIGdldEJvdW5kczogZnVuY3Rpb24gKG91dCwgYWNjdXJhY3kpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBSZWN0YW5nbGUoKTsgfVxyXG4gICAgICAgIGlmIChhY2N1cmFjeSA9PT0gdW5kZWZpbmVkKSB7IGFjY3VyYWN5ID0gMTY7IH1cclxuXHJcbiAgICAgICAgb3V0LnggPSBOdW1iZXIuTUFYX1ZBTFVFO1xyXG4gICAgICAgIG91dC55ID0gTnVtYmVyLk1BWF9WQUxVRTtcclxuXHJcbiAgICAgICAgdmFyIGJvdW5kcyA9IG5ldyBSZWN0YW5nbGUoKTtcclxuICAgICAgICB2YXIgbWF4UmlnaHQgPSBNQVRIX0NPTlNULk1JTl9TQUZFX0lOVEVHRVI7XHJcbiAgICAgICAgdmFyIG1heEJvdHRvbSA9IE1BVEhfQ09OU1QuTUlOX1NBRkVfSU5URUdFUjtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmN1cnZlcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjdXJ2ZSA9IHRoaXMuY3VydmVzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjdXJ2ZS5hY3RpdmUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjdXJ2ZS5nZXRCb3VuZHMoYm91bmRzLCBhY2N1cmFjeSk7XHJcblxyXG4gICAgICAgICAgICBvdXQueCA9IE1hdGgubWluKG91dC54LCBib3VuZHMueCk7XHJcbiAgICAgICAgICAgIG91dC55ID0gTWF0aC5taW4ob3V0LnksIGJvdW5kcy55KTtcclxuXHJcbiAgICAgICAgICAgIG1heFJpZ2h0ID0gTWF0aC5tYXgobWF4UmlnaHQsIGJvdW5kcy5yaWdodCk7XHJcbiAgICAgICAgICAgIG1heEJvdHRvbSA9IE1hdGgubWF4KG1heEJvdHRvbSwgYm91bmRzLmJvdHRvbSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBvdXQucmlnaHQgPSBtYXhSaWdodDtcclxuICAgICAgICBvdXQuYm90dG9tID0gbWF4Qm90dG9tO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgbGVuZ3RoIG9mIHRoZSBQYXRoIGF0IHRoZSBlbmQgb2YgZWFjaCBDdXJ2ZS5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgcmVzdWx0IG9mIHRoaXMgbWV0aG9kIHdpbGwgYmUgY2FjaGVkIHRvIGF2b2lkIHJlY2FsY3VsYXRpbmcgaXQgaW4gc3Vic2VxdWVudCBjYWxscy4gVGhlIGNhY2hlIGlzIG9ubHkgaW52YWxpZGF0ZWQgd2hlbiB0aGUge0BsaW5rICNjdXJ2ZXN9IGFycmF5IGNoYW5nZXMgaW4gbGVuZ3RoLCBsZWFkaW5nIHRvIHBvdGVudGlhbCBpbmFjY3VyYWNpZXMgaWYgYSBDdXJ2ZSBpbiB0aGUgUGF0aCBpcyBjaGFuZ2VkLCBvciBpZiBhIEN1cnZlIGlzIHJlbW92ZWQgYW5kIGFub3RoZXIgaXMgYWRkZWQgaW4gaXRzIHBsYWNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5QYXRoI2dldEN1cnZlTGVuZ3Roc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyW119IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGxlbmd0aCBvZiB0aGUgUGF0aCBhdCB0aGUgZW5kIG9mIGVhY2ggb25lIG9mIGl0cyBDdXJ2ZXMuXHJcbiAgICAgKi9cclxuICAgIGdldEN1cnZlTGVuZ3RoczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICAvLyBXZSB1c2UgY2FjaGUgdmFsdWVzIGlmIGN1cnZlcyBhbmQgY2FjaGUgYXJyYXkgYXJlIHNhbWUgbGVuZ3RoXHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNhY2hlTGVuZ3Rocy5sZW5ndGggPT09IHRoaXMuY3VydmVzLmxlbmd0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlTGVuZ3RocztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEdldCBsZW5ndGggb2Ygc3ViLWN1cnZlXHJcbiAgICAgICAgLy8gUHVzaCBzdW1zIGludG8gY2FjaGVkIGFycmF5XHJcblxyXG4gICAgICAgIHZhciBsZW5ndGhzID0gW107XHJcbiAgICAgICAgdmFyIHN1bXMgPSAwO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VydmVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc3VtcyArPSB0aGlzLmN1cnZlc1tpXS5nZXRMZW5ndGgoKTtcclxuXHJcbiAgICAgICAgICAgIGxlbmd0aHMucHVzaChzdW1zKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2FjaGVMZW5ndGhzID0gbGVuZ3RocztcclxuXHJcbiAgICAgICAgcmV0dXJuIGxlbmd0aHM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgZW5kaW5nIHBvaW50IG9mIHRoZSBQYXRoLlxyXG4gICAgICpcclxuICAgICAqIEEgUGF0aCdzIGVuZGluZyBwb2ludCBpcyBlcXVpdmFsZW50IHRvIHRoZSBlbmRpbmcgcG9pbnQgb2YgdGhlIGxhc3QgQ3VydmUgaW4gdGhlIFBhdGguIEZvciBhbiBlbXB0eSBQYXRoLCB0aGUgZW5kaW5nIHBvaW50IGlzIGF0IHRoZSBQYXRoJ3MgZGVmaW5lZCB7QGxpbmsgI3N0YXJ0UG9pbnR9LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5QYXRoI2dldEVuZFBvaW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLk1hdGguVmVjdG9yMn0gTyAtIFtvdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFtvdXRdIC0gVGhlIG9iamVjdCB0byBzdG9yZSB0aGUgcG9pbnQgaW4uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gVGhlIG1vZGlmaWVkIGBvdXRgIG9iamVjdCwgb3IgYSBuZXcgVmVjdG9yMiBpZiBub25lIHdhcyBwcm92aWRlZC5cclxuICAgICAqL1xyXG4gICAgZ2V0RW5kUG9pbnQ6IGZ1bmN0aW9uIChvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY3VydmVzLmxlbmd0aCA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnZlc1t0aGlzLmN1cnZlcy5sZW5ndGggLSAxXS5nZXRQb2ludCgxLCBvdXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvdXQuY29weSh0aGlzLnN0YXJ0UG9pbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIFBhdGguXHJcbiAgICAgKlxyXG4gICAgICogQHNlZSB7QGxpbmsgI2dldEN1cnZlTGVuZ3Roc31cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuUGF0aCNnZXRMZW5ndGhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIHRvdGFsIGxlbmd0aCBvZiB0aGUgUGF0aC5cclxuICAgICAqL1xyXG4gICAgZ2V0TGVuZ3RoOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBsZW5zID0gdGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGxlbnNbbGVucy5sZW5ndGggLSAxXTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gVG8gZ2V0IGFjY3VyYXRlIHBvaW50IHdpdGggcmVmZXJlbmNlIHRvXHJcbiAgICAvLyBlbnRpcmUgcGF0aCBkaXN0YW5jZSBhdCB0aW1lIHQsXHJcbiAgICAvLyBmb2xsb3dpbmcgaGFzIHRvIGJlIGRvbmU6XHJcblxyXG4gICAgLy8gMS4gTGVuZ3RoIG9mIGVhY2ggc3ViIHBhdGggaGF2ZSB0byBiZSBrbm93blxyXG4gICAgLy8gMi4gTG9jYXRlIGFuZCBpZGVudGlmeSB0eXBlIG9mIGN1cnZlXHJcbiAgICAvLyAzLiBHZXQgdCBmb3IgdGhlIGN1cnZlXHJcbiAgICAvLyA0LiBSZXR1cm4gY3VydmUuZ2V0UG9pbnRBdCh0JylcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCBhdCB0aGUgZ2l2ZW4gbm9ybWFsaXplZCBsb2NhdGlvbiAoYmV0d2VlbiAwIGFuZCAxKSBvbiB0aGUgUGF0aC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgbG9jYXRpb24gaXMgcmVsYXRpdmUgdG8gdGhlIGVudGlyZSBQYXRoLCBub3QgdG8gYW4gaW5kaXZpZHVhbCBDdXJ2ZS4gQSBsb2NhdGlvbiBvZiAwLjUgaXMgYWx3YXlzIGluIHRoZSBtaWRkbGUgb2YgdGhlIFBhdGggYW5kIGlzIHRodXMgYW4gZXF1YWwgZGlzdGFuY2UgYXdheSBmcm9tIGJvdGggaXRzIHN0YXJ0aW5nIGFuZCBlbmRpbmcgcG9pbnRzLiBJbiBhIFBhdGggd2l0aCBvbmUgQ3VydmUsIGl0IHdvdWxkIGJlIGluIHRoZSBtaWRkbGUgb2YgdGhlIEN1cnZlOyBpbiBhIFBhdGggd2l0aCB0d28gQ3VydmVzLCBpdCBjb3VsZCBiZSBhbnl3aGVyZSBvbiBlaXRoZXIgb25lIG9mIHRoZW0gZGVwZW5kaW5nIG9uIHRoZWlyIGxlbmd0aHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLlBhdGgjZ2V0UG9pbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBPIC0gW291dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0IC0gVGhlIGxvY2F0aW9uIG9mIHRoZSBwb2ludCB0byByZXR1cm4sIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW291dF0gLSBUaGUgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSBjYWxjdWxhdGVkIHBvaW50LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuTWF0aC5WZWN0b3IyfSBUaGUgbW9kaWZpZWQgYG91dGAgb2JqZWN0LCBvciBhIG5ldyBgVmVjdG9yMmAgaWYgbm9uZSB3YXMgcHJvdmlkZWQuXHJcbiAgICAgKi9cclxuICAgIGdldFBvaW50OiBmdW5jdGlvbiAodCwgb3V0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgVmVjdG9yMigpOyB9XHJcblxyXG4gICAgICAgIHZhciBkID0gdCAqIHRoaXMuZ2V0TGVuZ3RoKCk7XHJcbiAgICAgICAgdmFyIGN1cnZlTGVuZ3RocyA9IHRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7XHJcbiAgICAgICAgdmFyIGkgPSAwO1xyXG5cclxuICAgICAgICB3aGlsZSAoaSA8IGN1cnZlTGVuZ3Rocy5sZW5ndGgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoY3VydmVMZW5ndGhzW2ldID49IGQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBkaWZmID0gY3VydmVMZW5ndGhzW2ldIC0gZDtcclxuICAgICAgICAgICAgICAgIHZhciBjdXJ2ZSA9IHRoaXMuY3VydmVzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBzZWdtZW50TGVuZ3RoID0gY3VydmUuZ2V0TGVuZ3RoKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgdSA9IChzZWdtZW50TGVuZ3RoID09PSAwKSA/IDAgOiAxIC0gZGlmZiAvIHNlZ21lbnRMZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnZlLmdldFBvaW50QXQodSwgb3V0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbG9vcCB3aGVyZSBzdW0gIT0gMCwgc3VtID4gZCAsIHN1bSsxIDxkXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgZGVmaW5lZCBzdGFydGluZyBwb2ludCBvZiB0aGUgUGF0aC5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGlzIG5vdCBuZWNlc3NhcmlseSBlcXVhbCB0byB0aGUgc3RhcnRpbmcgcG9pbnQgb2YgdGhlIGZpcnN0IEN1cnZlIGlmIGl0IGRpZmZlcnMgZnJvbSB7QGxpbmsgc3RhcnRQb2ludH0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLlBhdGgjZ2V0UG9pbnRzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXZpc2lvbnM9MTJdIC0gVGhlIG51bWJlciBvZiBwb2ludHMgdG8gZGl2aWRlIHRoZSBwYXRoIGluIHRvLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJbXX0gQW4gYXJyYXkgb2YgVmVjdG9yMiBvYmplY3RzIHRoYXQgY29udGFpbmluZyB0aGUgcG9pbnRzIGFsb25nIHRoZSBQYXRoLlxyXG4gICAgICovXHJcbiAgICBnZXRQb2ludHM6IGZ1bmN0aW9uIChkaXZpc2lvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGRpdmlzaW9ucyA9PT0gdW5kZWZpbmVkKSB7IGRpdmlzaW9ucyA9IDEyOyB9XHJcblxyXG4gICAgICAgIHZhciBwb2ludHMgPSBbXTtcclxuICAgICAgICB2YXIgbGFzdDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmN1cnZlcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjdXJ2ZSA9IHRoaXMuY3VydmVzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjdXJ2ZS5hY3RpdmUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IGN1cnZlLmdldFJlc29sdXRpb24oZGl2aXNpb25zKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwdHMgPSBjdXJ2ZS5nZXRQb2ludHMocmVzb2x1dGlvbik7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHB0cy5sZW5ndGg7IGorKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIHBvaW50ID0gcHRzW2pdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChsYXN0ICYmIGxhc3QuZXF1YWxzKHBvaW50KSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBlbnN1cmVzIG5vIGNvbnNlY3V0aXZlIHBvaW50cyBhcmUgZHVwbGljYXRlc1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHBvaW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICBsYXN0ID0gcG9pbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmF1dG9DbG9zZSAmJiBwb2ludHMubGVuZ3RoID4gMSAmJiAhcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXS5lcXVhbHMocG9pbnRzWzBdKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHBvaW50c1swXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcG9pbnRzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSByYW5kb21seSBjaG9zZW4gcG9pbnQgYW55d2hlcmUgb24gdGhlIHBhdGguIFRoaXMgZm9sbG93cyB0aGUgc2FtZSBydWxlcyBhcyBgZ2V0UG9pbnRgIGluIHRoYXQgaXQgbWF5IHJldHVybiBhIHBvaW50IG9uIGFueSBDdXJ2ZSBpbnNpZGUgdGhpcyBwYXRoLlxyXG4gICAgICogXHJcbiAgICAgKiBXaGVuIGNhbGxpbmcgdGhpcyBtZXRob2QgbXVsdGlwbGUgdGltZXMsIHRoZSBwb2ludHMgYXJlIG5vdCBndWFyYW50ZWVkIHRvIGJlIGVxdWFsbHkgc3BhY2VkIHNwYXRpYWxseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuUGF0aCNnZXRSYW5kb21Qb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbb3V0XSAtIGBWZWN0b3IyYCBpbnN0YW5jZSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBzdG9yaW5nIHRoZSByZXN1bHQuIElmIGB1bmRlZmluZWRgIGEgbmV3IGBWZWN0b3IyYCB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gVGhlIG1vZGlmaWVkIGBvdXRgIG9iamVjdCwgb3IgYSBuZXcgYFZlY3RvcjJgIGlmIG5vbmUgd2FzIHByb3ZpZGVkLlxyXG4gICAgICovXHJcbiAgICBnZXRSYW5kb21Qb2ludDogZnVuY3Rpb24gKG91dClcclxuICAgIHtcclxuICAgICAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFZlY3RvcjIoKTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRQb2ludChNYXRoLnJhbmRvbSgpLCBvdXQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpdmlkZXMgdGhpcyBQYXRoIGludG8gYSBzZXQgb2YgZXF1YWxseSBzcGFjZWQgcG9pbnRzLFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgcmVzdWx0aW5nIHBvaW50cyBhcmUgZXF1YWxseSBzcGFjZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBwb2ludHMnIHBvc2l0aW9uIG9uIHRoZSBwYXRoLCBidXQgbm90IG5lY2Vzc2FyaWx5IGVxdWFsbHkgc3BhY2VkIHNwYXRpYWxseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuUGF0aCNnZXRTcGFjZWRQb2ludHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2RpdmlzaW9ucz00MF0gLSBUaGUgYW1vdW50IG9mIHBvaW50cyB0byBkaXZpZGUgdGhpcyBQYXRoIGludG8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMltdfSBBIGxpc3Qgb2YgdGhlIHBvaW50cyB0aGlzIHBhdGggd2FzIHN1YmRpdmlkZWQgaW50by5cclxuICAgICAqL1xyXG4gICAgZ2V0U3BhY2VkUG9pbnRzOiBmdW5jdGlvbiAoZGl2aXNpb25zKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChkaXZpc2lvbnMgPT09IHVuZGVmaW5lZCkgeyBkaXZpc2lvbnMgPSA0MDsgfVxyXG5cclxuICAgICAgICB2YXIgcG9pbnRzID0gW107XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IGRpdmlzaW9uczsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcG9pbnRzLnB1c2godGhpcy5nZXRQb2ludChpIC8gZGl2aXNpb25zKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5hdXRvQ2xvc2UpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwb2ludHMucHVzaChwb2ludHNbMF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHBvaW50cztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBzdGFydGluZyBwb2ludCBvZiB0aGUgUGF0aC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5DdXJ2ZXMuUGF0aCNnZXRTdGFydFBvaW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLk1hdGguVmVjdG9yMn0gTyAtIFtvdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFtvdXRdIC0gYFZlY3RvcjJgIGluc3RhbmNlIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdC4gSWYgYHVuZGVmaW5lZGAgYSBuZXcgYFZlY3RvcjJgIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBUaGUgbW9kaWZpZWQgYG91dGAgb2JqZWN0LCBvciBhIG5ldyBWZWN0b3IyIGlmIG5vbmUgd2FzIHByb3ZpZGVkLlxyXG4gICAgICovXHJcbiAgICBnZXRTdGFydFBvaW50OiBmdW5jdGlvbiAob3V0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgVmVjdG9yMigpOyB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQuY29weSh0aGlzLnN0YXJ0UG9pbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBsaW5lIGN1cnZlIGZyb20gdGhlIHByZXZpb3VzIGVuZCBwb2ludCB0byB4L3kuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLlBhdGgjbGluZVRvXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhudW1iZXJ8UGhhc2VyLk1hdGguVmVjdG9yMil9IHggLSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBsaW5lJ3MgZW5kIHBvaW50LCBvciBhIGBWZWN0b3IyYCBjb250YWluaW5nIHRoZSBlbnRpcmUgZW5kIHBvaW50LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5XSAtIFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGxpbmUncyBlbmQgcG9pbnQsIGlmIGEgbnVtYmVyIHdhcyBwYXNzZWQgYXMgdGhlIFggcGFyYW1ldGVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5DdXJ2ZXMuUGF0aH0gVGhpcyBQYXRoIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgbGluZVRvOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICBpZiAoeCBpbnN0YW5jZW9mIFZlY3RvcjIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl90bXBWZWMyQi5jb3B5KHgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl90bXBWZWMyQi5zZXQoeCwgeSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZW5kID0gdGhpcy5nZXRFbmRQb2ludCh0aGlzLl90bXBWZWMyQSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZChuZXcgTGluZUN1cnZlKFsgZW5kLngsIGVuZC55LCB0aGlzLl90bXBWZWMyQi54LCB0aGlzLl90bXBWZWMyQi55IF0pKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgc3BsaW5lIGN1cnZlIHN0YXJ0aW5nIGF0IHRoZSBwcmV2aW91cyBlbmQgcG9pbnQsIHVzaW5nIHRoZSBnaXZlbiBwb2ludHMgb24gdGhlIGN1cnZlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5QYXRoI3NwbGluZVRvXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJbXX0gcG9pbnRzIC0gVGhlIHBvaW50cyB0aGUgbmV3bHkgY3JlYXRlZCBzcGxpbmUgY3VydmUgc2hvdWxkIGNvbnNpc3Qgb2YuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkN1cnZlcy5QYXRofSBUaGlzIFBhdGggb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzcGxpbmVUbzogZnVuY3Rpb24gKHBvaW50cylcclxuICAgIHtcclxuICAgICAgICBwb2ludHMudW5zaGlmdCh0aGlzLmdldEVuZFBvaW50KCkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5hZGQobmV3IFNwbGluZUN1cnZlKHBvaW50cykpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBcImdhcFwiIGluIHRoaXMgcGF0aCBmcm9tIHRoZSBwYXRoJ3MgY3VycmVudCBlbmQgcG9pbnQgdG8gdGhlIGdpdmVuIGNvb3JkaW5hdGVzLlxyXG4gICAgICogXHJcbiAgICAgKiBBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHRoaXMgUGF0aCdzIGVuZCBwb2ludCB3aWxsIGJlIGVxdWFsIHRvIHRoZSBnaXZlbiBjb29yZGluYXRlc1xyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkN1cnZlcy5QYXRoI21vdmVUb1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsobnVtYmVyfFBoYXNlci5NYXRoLlZlY3RvcjIpfSB4IC0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9zaXRpb24gdG8gbW92ZSB0aGUgcGF0aCdzIGVuZCBwb2ludCB0bywgb3IgYSBgVmVjdG9yMmAgY29udGFpbmluZyB0aGUgZW50aXJlIG5ldyBlbmQgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvc2l0aW9uIHRvIG1vdmUgdGhlIHBhdGgncyBlbmQgcG9pbnQgdG8sIGlmIGEgbnVtYmVyIHdhcyBwYXNzZWQgYXMgdGhlIFggY29vcmRpbmF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuQ3VydmVzLlBhdGh9IFRoaXMgUGF0aCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIG1vdmVUbzogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggaW5zdGFuY2VvZiBWZWN0b3IyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKG5ldyBNb3ZlUGF0aFRvKHgueCwgeC55KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZChuZXcgTW92ZVBhdGhUbyh4LCB5KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRzIHRoaXMgUGF0aCB0byBhIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHBhdGggaW5mb3JtYXRpb24gYW5kIGl0cyBjb25zdGl0dWVudCBjdXJ2ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLlBhdGgjdG9KU09OXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuQ3VydmVzLkpTT05QYXRofSBUaGUgSlNPTiBvYmplY3QgY29udGFpbmluZyB0aGlzIHBhdGgncyBkYXRhLlxyXG4gICAgICovXHJcbiAgICB0b0pTT046IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG91dCA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VydmVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb3V0LnB1c2godGhpcy5jdXJ2ZXNbaV0udG9KU09OKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdHlwZTogJ1BhdGgnLFxyXG4gICAgICAgICAgICB4OiB0aGlzLnN0YXJ0UG9pbnQueCxcclxuICAgICAgICAgICAgeTogdGhpcy5zdGFydFBvaW50LnksXHJcbiAgICAgICAgICAgIGF1dG9DbG9zZTogdGhpcy5hdXRvQ2xvc2UsXHJcbiAgICAgICAgICAgIGN1cnZlczogb3V0XHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBjYWNoZUxlbmd0aHMgbXVzdCBiZSByZWNhbGN1bGF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLlBhdGgjdXBkYXRlQXJjTGVuZ3Roc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUFyY0xlbmd0aHM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jYWNoZUxlbmd0aHMgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlcyBvZiB0aGlzIFBhdGgsIGNsZWFyaW5nIGl0cyBpbnRlcm5hbCByZWZlcmVuY2VzIHRvIG9iamVjdHMgc28gdGhleSBjYW4gYmUgZ2FyYmFnZS1jb2xsZWN0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuQ3VydmVzLlBhdGgjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jdXJ2ZXMubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLmNhY2hlTGVuZ3Rocy5sZW5ndGggPSAwO1xyXG4gICAgICAgIHRoaXMuc3RhcnRQb2ludCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgUGF0aCBPYmplY3QuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I3BhdGhcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBQYXRoLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIFBhdGguXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5DdXJ2ZXMuUGF0aH0gVGhlIFBhdGggT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0RmFjdG9yeS5yZWdpc3RlcigncGF0aCcsIGZ1bmN0aW9uICh4LCB5KVxyXG57XHJcbiAgICByZXR1cm4gbmV3IFBhdGgoeCwgeSk7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RGYWN0b3J5IGNvbnRleHQuXHJcbi8vXHJcbi8vICBUaGVyZSBhcmUgc2V2ZXJhbCBwcm9wZXJ0aWVzIGF2YWlsYWJsZSB0byB1c2U6XHJcbi8vXHJcbi8vICB0aGlzLnNjZW5lIC0gYSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgb3ducyB0aGUgR2FtZU9iamVjdEZhY3RvcnlcclxuLy8gIHRoaXMuZGlzcGxheUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgRGlzcGxheSBMaXN0IHRoZSBTY2VuZSBvd25zXHJcbi8vICB0aGlzLnVwZGF0ZUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgVXBkYXRlIExpc3QgdGhlIFNjZW5lIG93bnNcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGF0aDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/curves/path/Path.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/data/DataManager.js":
/*!*****************************************************!*\
!*** ./node_modules/phaser/src/data/DataManager.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/data/events/index.js\");\r\n\r\n/**\r\n * @callback DataEachCallback\r\n *\r\n * @param {*} parent - The parent object of the DataManager.\r\n * @param {string} key - The key of the value.\r\n * @param {*} value - The value.\r\n * @param {...*} [args] - Additional arguments that will be passed to the callback, after the game object, key, and data.\r\n */\r\n\r\n/**\r\n * @classdesc\r\n * The Data Manager Component features a means to store pieces of data specific to a Game Object, System or Plugin.\r\n * You can then search, query it, and retrieve the data. The parent must either extend EventEmitter,\r\n * or have a property called `events` that is an instance of it.\r\n *\r\n * @class DataManager\r\n * @memberof Phaser.Data\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {object} parent - The object that this DataManager belongs to.\r\n * @param {Phaser.Events.EventEmitter} eventEmitter - The DataManager's event emitter.\r\n */\r\nvar DataManager = new Class({\r\n\r\n initialize:\r\n\r\n function DataManager (parent, eventEmitter)\r\n {\r\n /**\r\n * The object that this DataManager belongs to.\r\n *\r\n * @name Phaser.Data.DataManager#parent\r\n * @type {*}\r\n * @since 3.0.0\r\n */\r\n this.parent = parent;\r\n\r\n /**\r\n * The DataManager's event emitter.\r\n *\r\n * @name Phaser.Data.DataManager#events\r\n * @type {Phaser.Events.EventEmitter}\r\n * @since 3.0.0\r\n */\r\n this.events = eventEmitter;\r\n\r\n if (!eventEmitter)\r\n {\r\n this.events = (parent.events) ? parent.events : parent;\r\n }\r\n\r\n /**\r\n * The data list.\r\n *\r\n * @name Phaser.Data.DataManager#list\r\n * @type {Object.<string, *>}\r\n * @default {}\r\n * @since 3.0.0\r\n */\r\n this.list = {};\r\n\r\n /**\r\n * The public values list. You can use this to access anything you have stored\r\n * in this Data Manager. For example, if you set a value called `gold` you can\r\n * access it via:\r\n *\r\n * ```javascript\r\n * this.data.values.gold;\r\n * ```\r\n *\r\n * You can also modify it directly:\r\n * \r\n * ```javascript\r\n * this.data.values.gold += 1000;\r\n * ```\r\n *\r\n * Doing so will emit a `setdata` event from the parent of this Data Manager.\r\n * \r\n * Do not modify this object directly. Adding properties directly to this object will not\r\n * emit any events. Always use `DataManager.set` to create new items the first time around.\r\n *\r\n * @name Phaser.Data.DataManager#values\r\n * @type {Object.<string, *>}\r\n * @default {}\r\n * @since 3.10.0\r\n */\r\n this.values = {};\r\n\r\n /**\r\n * Whether setting data is frozen for this DataManager.\r\n *\r\n * @name Phaser.Data.DataManager#_frozen\r\n * @type {boolean}\r\n * @private\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this._frozen = false;\r\n\r\n if (!parent.hasOwnProperty('sys') && this.events)\r\n {\r\n this.events.once('destroy', this.destroy, this);\r\n }\r\n },\r\n\r\n /**\r\n * Retrieves the value for the given key, or undefined if it doesn't exist.\r\n *\r\n * You can also access values via the `values` object. For example, if you had a key called `gold` you can do either:\r\n * \r\n * ```javascript\r\n * this.data.get('gold');\r\n * ```\r\n *\r\n * Or access the value directly:\r\n * \r\n * ```javascript\r\n * this.data.values.gold;\r\n * ```\r\n *\r\n * You can also pass in an array of keys, in which case an array of values will be returned:\r\n * \r\n * ```javascript\r\n * this.data.get([ 'gold', 'armor', 'health' ]);\r\n * ```\r\n *\r\n * This approach is useful for destructuring arrays in ES6.\r\n *\r\n * @method Phaser.Data.DataManager#get\r\n * @since 3.0.0\r\n *\r\n * @param {(string|string[])} key - The key of the value to retrieve, or an array of keys.\r\n *\r\n * @return {*} The value belonging to the given key, or an array of values, the order of which will match the input array.\r\n */\r\n get: function (key)\r\n {\r\n var list = this.list;\r\n\r\n if (Array.isArray(key))\r\n {\r\n var output = [];\r\n\r\n for (var i = 0; i < key.length; i++)\r\n {\r\n output.push(list[key[i]]);\r\n }\r\n\r\n return output;\r\n }\r\n else\r\n {\r\n return list[key];\r\n }\r\n },\r\n\r\n /**\r\n * Retrieves all data values in a new object.\r\n *\r\n * @method Phaser.Data.DataManager#getAll\r\n * @since 3.0.0\r\n *\r\n * @return {Object.<string, *>} All data values.\r\n */\r\n getAll: function ()\r\n {\r\n var results = {};\r\n\r\n for (var key in this.list)\r\n {\r\n if (this.list.hasOwnProperty(key))\r\n {\r\n results[key] = this.list[key];\r\n }\r\n }\r\n\r\n return results;\r\n },\r\n\r\n /**\r\n * Queries the DataManager for the values of keys matching the given regular expression.\r\n *\r\n * @method Phaser.Data.DataManager#query\r\n * @since 3.0.0\r\n *\r\n * @param {RegExp} search - A regular expression object. If a non-RegExp object obj is passed, it is implicitly converted to a RegExp by using new RegExp(obj).\r\n *\r\n * @return {Object.<string, *>} The values of the keys matching the search string.\r\n */\r\n query: function (search)\r\n {\r\n var results = {};\r\n\r\n for (var key in this.list)\r\n {\r\n if (this.list.hasOwnProperty(key) && key.match(search))\r\n {\r\n results[key] = this.list[key];\r\n }\r\n }\r\n\r\n return results;\r\n },\r\n\r\n /**\r\n * Sets a value for the given key. If the key doesn't already exist in the Data Manager then it is created.\r\n * \r\n * ```javascript\r\n * data.set('name', 'Red Gem Stone');\r\n * ```\r\n *\r\n * You can also pass in an object of key value pairs as the first argument:\r\n *\r\n * ```javascript\r\n * data.set({ name: 'Red Gem Stone', level: 2, owner: 'Link', gold: 50 });\r\n * ```\r\n *\r\n * To get a value back again you can call `get`:\r\n * \r\n * ```javascript\r\n * data.get('gold');\r\n * ```\r\n * \r\n * Or you can access the value directly via the `values` property, where it works like any other variable:\r\n * \r\n * ```javascript\r\n * data.values.gold += 50;\r\n * ```\r\n *\r\n * When the value is first set, a `setdata` event is emitted.\r\n *\r\n * If the key already exists, a `changedata` event is emitted instead, along an event named after the key.\r\n * For example, if you updated an existing key called `PlayerLives` then it would emit the event `changedata-PlayerLives`.\r\n * These events will be emitted regardless if you use this method to set the value, or the direct `values` setter.\r\n *\r\n * Please note that the data keys are case-sensitive and must be valid JavaScript Object property strings.\r\n * This means the keys `gold` and `Gold` are treated as two unique values within the Data Manager.\r\n *\r\n * @method Phaser.Data.DataManager#set\r\n * @fires Phaser.Data.Events#SET_DATA\r\n * @fires Phaser.Data.Events#CHANGE_DATA\r\n * @fires Phaser.Data.Events#CHANGE_DATA_KEY\r\n * @since 3.0.0\r\n *\r\n * @param {(string|object)} key - The key to set the value for. Or an object or key value pairs. If an object the `data` argument is ignored.\r\n * @param {*} data - The value to set for the given key. If an object is provided as the key this argument is ignored.\r\n *\r\n * @return {Phaser.Data.DataManager} This DataManager object.\r\n */\r\n set: function (key, data)\r\n {\r\n if (this._frozen)\r\n {\r\n return this;\r\n }\r\n\r\n if (typeof key === 'string')\r\n {\r\n return this.setValue(key, data);\r\n }\r\n else\r\n {\r\n for (var entry in key)\r\n {\r\n this.setValue(entry, key[entry]);\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Internal value setter, called automatically by the `set` method.\r\n *\r\n * @method Phaser.Data.DataManager#setValue\r\n * @fires Phaser.Data.Events#SET_DATA\r\n * @fires Phaser.Data.Events#CHANGE_DATA\r\n * @fires Phaser.Data.Events#CHANGE_DATA_KEY\r\n * @private\r\n * @since 3.10.0\r\n *\r\n * @param {string} key - The key to set the value for.\r\n * @param {*} data - The value to set.\r\n *\r\n * @return {Phaser.Data.DataManager} This DataManager object.\r\n */\r\n setValue: function (key, data)\r\n {\r\n if (this._frozen)\r\n {\r\n return this;\r\n }\r\n\r\n if (this.has(key))\r\n {\r\n // Hit the key getter, which will in turn emit the events.\r\n this.values[key] = data;\r\n }\r\n else\r\n {\r\n var _this = this;\r\n var list = this.list;\r\n var events = this.events;\r\n var parent = this.parent;\r\n\r\n Object.defineProperty(this.values, key, {\r\n\r\n enumerable: true,\r\n \r\n configurable: true,\r\n\r\n get: function ()\r\n {\r\n return list[key];\r\n },\r\n\r\n set: function (value)\r\n {\r\n if (!_this._frozen)\r\n {\r\n var previousValue = list[key];\r\n list[key] = value;\r\n\r\n events.emit(Events.CHANGE_DATA, parent, key, value, previousValue);\r\n events.emit(Events.CHANGE_DATA_KEY + key, parent, value, previousValue);\r\n }\r\n }\r\n\r\n });\r\n\r\n list[key] = data;\r\n\r\n events.emit(Events.SET_DATA, parent, key, data);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Passes all data entries to the given callback.\r\n *\r\n * @method Phaser.Data.DataManager#each\r\n * @since 3.0.0\r\n *\r\n * @param {DataEachCallback} callback - The function to call.\r\n * @param {*} [context] - Value to use as `this` when executing callback.\r\n * @param {...*} [args] - Additional arguments that will be passed to the callback, after the game object, key, and data.\r\n *\r\n * @return {Phaser.Data.DataManager} This DataManager object.\r\n */\r\n each: function (callback, context)\r\n {\r\n var args = [ this.parent, null, undefined ];\r\n\r\n for (var i = 1; i < arguments.length; i++)\r\n {\r\n args.push(arguments[i]);\r\n }\r\n\r\n for (var key in this.list)\r\n {\r\n args[1] = key;\r\n args[2] = this.list[key];\r\n\r\n callback.apply(context, args);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Merge the given object of key value pairs into this DataManager.\r\n *\r\n * Any newly created values will emit a `setdata` event. Any updated values (see the `overwrite` argument)\r\n * will emit a `changedata` event.\r\n *\r\n * @method Phaser.Data.DataManager#merge\r\n * @fires Phaser.Data.Events#SET_DATA\r\n * @fires Phaser.Data.Events#CHANGE_DATA\r\n * @fires Phaser.Data.Events#CHANGE_DATA_KEY\r\n * @since 3.0.0\r\n *\r\n * @param {Object.<string, *>} data - The data to merge.\r\n * @param {boolean} [overwrite=true] - Whether to overwrite existing data. Defaults to true.\r\n *\r\n * @return {Phaser.Data.DataManager} This DataManager object.\r\n */\r\n merge: function (data, overwrite)\r\n {\r\n if (overwrite === undefined) { overwrite = true; }\r\n\r\n // Merge data from another component into this one\r\n for (var key in data)\r\n {\r\n if (data.hasOwnProperty(key) && (overwrite || (!overwrite && !this.has(key))))\r\n {\r\n this.setValue(key, data[key]);\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Remove the value for the given key.\r\n *\r\n * If the key is found in this Data Manager it is removed from the internal lists and a\r\n * `removedata` event is emitted.\r\n * \r\n * You can also pass in an array of keys, in which case all keys in the array will be removed:\r\n * \r\n * ```javascript\r\n * this.data.remove([ 'gold', 'armor', 'health' ]);\r\n * ```\r\n *\r\n * @method Phaser.Data.DataManager#remove\r\n * @fires Phaser.Data.Events#REMOVE_DATA\r\n * @since 3.0.0\r\n *\r\n * @param {(string|string[])} key - The key to remove, or an array of keys to remove.\r\n *\r\n * @return {Phaser.Data.DataManager} This DataManager object.\r\n */\r\n remove: function (key)\r\n {\r\n if (this._frozen)\r\n {\r\n return this;\r\n }\r\n\r\n if (Array.isArray(key))\r\n {\r\n for (var i = 0; i < key.length; i++)\r\n {\r\n this.removeValue(key[i]);\r\n }\r\n }\r\n else\r\n {\r\n return this.removeValue(key);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Internal value remover, called automatically by the `remove` method.\r\n *\r\n * @method Phaser.Data.DataManager#removeValue\r\n * @private\r\n * @fires Phaser.Data.Events#REMOVE_DATA\r\n * @since 3.10.0\r\n *\r\n * @param {string} key - The key to set the value for.\r\n *\r\n * @return {Phaser.Data.DataManager} This DataManager object.\r\n */\r\n removeValue: function (key)\r\n {\r\n if (this.has(key))\r\n {\r\n var data = this.list[key];\r\n\r\n delete this.list[key];\r\n delete this.values[key];\r\n\r\n this.events.emit(Events.REMOVE_DATA, this.parent, key, data);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Retrieves the data associated with the given 'key', deletes it from this Data Manager, then returns it.\r\n *\r\n * @method Phaser.Data.DataManager#pop\r\n * @fires Phaser.Data.Events#REMOVE_DATA\r\n * @since 3.0.0\r\n *\r\n * @param {string} key - The key of the value to retrieve and delete.\r\n *\r\n * @return {*} The value of the given key.\r\n */\r\n pop: function (key)\r\n {\r\n var data = undefined;\r\n\r\n if (!this._frozen && this.has(key))\r\n {\r\n data = this.list[key];\r\n\r\n delete this.list[key];\r\n delete this.values[key];\r\n\r\n this.events.emit(Events.REMOVE_DATA, this.parent, key, data);\r\n }\r\n\r\n return data;\r\n },\r\n\r\n /**\r\n * Determines whether the given key is set in this Data Manager.\r\n * \r\n * Please note that the keys are case-sensitive and must be valid JavaScript Object property strings.\r\n * This means the keys `gold` and `Gold` are treated as two unique values within the Data Manager.\r\n *\r\n * @method Phaser.Data.DataManager#has\r\n * @since 3.0.0\r\n *\r\n * @param {string} key - The key to check.\r\n *\r\n * @return {boolean} Returns `true` if the key exists, otherwise `false`.\r\n */\r\n has: function (key)\r\n {\r\n return this.list.hasOwnProperty(key);\r\n },\r\n\r\n /**\r\n * Freeze or unfreeze this Data Manager. A frozen Data Manager will block all attempts\r\n * to create new values or update existing ones.\r\n *\r\n * @method Phaser.Data.DataManager#setFreeze\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} value - Whether to freeze or unfreeze the Data Manager.\r\n *\r\n * @return {Phaser.Data.DataManager} This DataManager object.\r\n */\r\n setFreeze: function (value)\r\n {\r\n this._frozen = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Delete all data in this Data Manager and unfreeze it.\r\n *\r\n * @method Phaser.Data.DataManager#reset\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Data.DataManager} This DataManager object.\r\n */\r\n reset: function ()\r\n {\r\n for (var key in this.list)\r\n {\r\n delete this.list[key];\r\n delete this.values[key];\r\n }\r\n\r\n this._frozen = false;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Destroy this data manager.\r\n *\r\n * @method Phaser.Data.DataManager#destroy\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.reset();\r\n\r\n this.events.off(Events.CHANGE_DATA);\r\n this.events.off(Events.SET_DATA);\r\n this.events.off(Events.REMOVE_DATA);\r\n\r\n this.parent = null;\r\n },\r\n\r\n /**\r\n * Gets or sets the frozen state of this Data Manager.\r\n * A frozen Data Manager will block all attempts to create new values or update existing ones.\r\n *\r\n * @name Phaser.Data.DataManager#freeze\r\n * @type {boolean}\r\n * @since 3.0.0\r\n */\r\n freeze: {\r\n\r\n get: function ()\r\n {\r\n return this._frozen;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._frozen = (value) ? true : false;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Return the total number of entries in this Data Manager.\r\n *\r\n * @name Phaser.Data.DataManager#count\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n count: {\r\n\r\n get: function ()\r\n {\r\n var i = 0;\r\n\r\n for (var key in this.list)\r\n {\r\n if (this.list[key] !== undefined)\r\n {\r\n i++;\r\n }\r\n }\r\n\r\n return i;\r\n }\r\n\r\n }\r\n\r\n});\r\n\r\nmodule.exports = DataManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kYXRhL0RhdGFNYW5hZ2VyLmpzPzQ1MzEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsYUFBYSxtQkFBTyxDQUFDLGdFQUFVOztBQUUvQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYixXQUFXLE9BQU87QUFDbEIsV0FBVyxFQUFFO0FBQ2IsV0FBVyxLQUFLO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVywyQkFBMkI7QUFDdEM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0JBQWtCO0FBQ2pDO0FBQ0EsZ0JBQWdCLEVBQUU7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDJCQUEyQixnQkFBZ0I7QUFDM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsMkRBQTJEO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdCQUFnQjtBQUMvQixlQUFlLEVBQUU7QUFDakI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsRUFBRTtBQUNqQjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhOztBQUViOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDLGVBQWUsRUFBRTtBQUNqQixlQUFlLEtBQUs7QUFDcEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixzQkFBc0I7QUFDN0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQW1CO0FBQ2xDLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLGtCQUFrQjs7QUFFeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGtCQUFrQjtBQUNqQztBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJCQUEyQixnQkFBZ0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsRUFBRTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2RhdGEvRGF0YU1hbmFnZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuL2V2ZW50cycpO1xyXG5cclxuLyoqXHJcbiAqIEBjYWxsYmFjayBEYXRhRWFjaENhbGxiYWNrXHJcbiAqXHJcbiAqIEBwYXJhbSB7Kn0gcGFyZW50IC0gVGhlIHBhcmVudCBvYmplY3Qgb2YgdGhlIERhdGFNYW5hZ2VyLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgdmFsdWUuXHJcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSBUaGUgdmFsdWUuXHJcbiAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2ssIGFmdGVyIHRoZSBnYW1lIG9iamVjdCwga2V5LCBhbmQgZGF0YS5cclxuICovXHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgRGF0YSBNYW5hZ2VyIENvbXBvbmVudCBmZWF0dXJlcyBhIG1lYW5zIHRvIHN0b3JlIHBpZWNlcyBvZiBkYXRhIHNwZWNpZmljIHRvIGEgR2FtZSBPYmplY3QsIFN5c3RlbSBvciBQbHVnaW4uXHJcbiAqIFlvdSBjYW4gdGhlbiBzZWFyY2gsIHF1ZXJ5IGl0LCBhbmQgcmV0cmlldmUgdGhlIGRhdGEuIFRoZSBwYXJlbnQgbXVzdCBlaXRoZXIgZXh0ZW5kIEV2ZW50RW1pdHRlcixcclxuICogb3IgaGF2ZSBhIHByb3BlcnR5IGNhbGxlZCBgZXZlbnRzYCB0aGF0IGlzIGFuIGluc3RhbmNlIG9mIGl0LlxyXG4gKlxyXG4gKiBAY2xhc3MgRGF0YU1hbmFnZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5EYXRhXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtvYmplY3R9IHBhcmVudCAtIFRoZSBvYmplY3QgdGhhdCB0aGlzIERhdGFNYW5hZ2VyIGJlbG9uZ3MgdG8uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXJ9IGV2ZW50RW1pdHRlciAtIFRoZSBEYXRhTWFuYWdlcidzIGV2ZW50IGVtaXR0ZXIuXHJcbiAqL1xyXG52YXIgRGF0YU1hbmFnZXIgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gRGF0YU1hbmFnZXIgKHBhcmVudCwgZXZlbnRFbWl0dGVyKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBvYmplY3QgdGhhdCB0aGlzIERhdGFNYW5hZ2VyIGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRGF0YS5EYXRhTWFuYWdlciNwYXJlbnRcclxuICAgICAgICAgKiBAdHlwZSB7Kn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIERhdGFNYW5hZ2VyJ3MgZXZlbnQgZW1pdHRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5EYXRhLkRhdGFNYW5hZ2VyI2V2ZW50c1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmV2ZW50cyA9IGV2ZW50RW1pdHRlcjtcclxuXHJcbiAgICAgICAgaWYgKCFldmVudEVtaXR0ZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50cyA9IChwYXJlbnQuZXZlbnRzKSA/IHBhcmVudC5ldmVudHMgOiBwYXJlbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZGF0YSBsaXN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXIjbGlzdFxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3QuPHN0cmluZywgKj59XHJcbiAgICAgICAgICogQGRlZmF1bHQge31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxpc3QgPSB7fTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHB1YmxpYyB2YWx1ZXMgbGlzdC4gWW91IGNhbiB1c2UgdGhpcyB0byBhY2Nlc3MgYW55dGhpbmcgeW91IGhhdmUgc3RvcmVkXHJcbiAgICAgICAgICogaW4gdGhpcyBEYXRhIE1hbmFnZXIuIEZvciBleGFtcGxlLCBpZiB5b3Ugc2V0IGEgdmFsdWUgY2FsbGVkIGBnb2xkYCB5b3UgY2FuXHJcbiAgICAgICAgICogYWNjZXNzIGl0IHZpYTpcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAgICAgKiB0aGlzLmRhdGEudmFsdWVzLmdvbGQ7XHJcbiAgICAgICAgICogYGBgXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBZb3UgY2FuIGFsc28gbW9kaWZ5IGl0IGRpcmVjdGx5OlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAgICAgKiB0aGlzLmRhdGEudmFsdWVzLmdvbGQgKz0gMTAwMDtcclxuICAgICAgICAgKiBgYGBcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIERvaW5nIHNvIHdpbGwgZW1pdCBhIGBzZXRkYXRhYCBldmVudCBmcm9tIHRoZSBwYXJlbnQgb2YgdGhpcyBEYXRhIE1hbmFnZXIuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogRG8gbm90IG1vZGlmeSB0aGlzIG9iamVjdCBkaXJlY3RseS4gQWRkaW5nIHByb3BlcnRpZXMgZGlyZWN0bHkgdG8gdGhpcyBvYmplY3Qgd2lsbCBub3RcclxuICAgICAgICAgKiBlbWl0IGFueSBldmVudHMuIEFsd2F5cyB1c2UgYERhdGFNYW5hZ2VyLnNldGAgdG8gY3JlYXRlIG5ldyBpdGVtcyB0aGUgZmlyc3QgdGltZSBhcm91bmQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRGF0YS5EYXRhTWFuYWdlciN2YWx1ZXNcclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsICo+fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHt9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudmFsdWVzID0ge307XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgc2V0dGluZyBkYXRhIGlzIGZyb3plbiBmb3IgdGhpcyBEYXRhTWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5EYXRhLkRhdGFNYW5hZ2VyI19mcm96ZW5cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fZnJvemVuID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICghcGFyZW50Lmhhc093blByb3BlcnR5KCdzeXMnKSAmJiB0aGlzLmV2ZW50cylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzLm9uY2UoJ2Rlc3Ryb3knLCB0aGlzLmRlc3Ryb3ksIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHZhbHVlIGZvciB0aGUgZ2l2ZW4ga2V5LCBvciB1bmRlZmluZWQgaWYgaXQgZG9lc24ndCBleGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIGFsc28gYWNjZXNzIHZhbHVlcyB2aWEgdGhlIGB2YWx1ZXNgIG9iamVjdC4gRm9yIGV4YW1wbGUsIGlmIHlvdSBoYWQgYSBrZXkgY2FsbGVkIGBnb2xkYCB5b3UgY2FuIGRvIGVpdGhlcjpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy5kYXRhLmdldCgnZ29sZCcpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogT3IgYWNjZXNzIHRoZSB2YWx1ZSBkaXJlY3RseTpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy5kYXRhLnZhbHVlcy5nb2xkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBhbHNvIHBhc3MgaW4gYW4gYXJyYXkgb2Yga2V5cywgaW4gd2hpY2ggY2FzZSBhbiBhcnJheSBvZiB2YWx1ZXMgd2lsbCBiZSByZXR1cm5lZDpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy5kYXRhLmdldChbICdnb2xkJywgJ2FybW9yJywgJ2hlYWx0aCcgXSk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGFwcHJvYWNoIGlzIHVzZWZ1bCBmb3IgZGVzdHJ1Y3R1cmluZyBhcnJheXMgaW4gRVM2LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXIjZ2V0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8c3RyaW5nW10pfSBrZXkgLSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZXRyaWV2ZSwgb3IgYW4gYXJyYXkgb2Yga2V5cy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsqfSBUaGUgdmFsdWUgYmVsb25naW5nIHRvIHRoZSBnaXZlbiBrZXksIG9yIGFuIGFycmF5IG9mIHZhbHVlcywgdGhlIG9yZGVyIG9mIHdoaWNoIHdpbGwgbWF0Y2ggdGhlIGlucHV0IGFycmF5LlxyXG4gICAgICovXHJcbiAgICBnZXQ6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGxpc3QgPSB0aGlzLmxpc3Q7XHJcblxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0gW107XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2gobGlzdFtrZXlbaV1dKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxpc3Rba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIGFsbCBkYXRhIHZhbHVlcyBpbiBhIG5ldyBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGF0YS5EYXRhTWFuYWdlciNnZXRBbGxcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge09iamVjdC48c3RyaW5nLCAqPn0gQWxsIGRhdGEgdmFsdWVzLlxyXG4gICAgICovXHJcbiAgICBnZXRBbGw6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMubGlzdClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxpc3QuaGFzT3duUHJvcGVydHkoa2V5KSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0c1trZXldID0gdGhpcy5saXN0W2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFF1ZXJpZXMgdGhlIERhdGFNYW5hZ2VyIGZvciB0aGUgdmFsdWVzIG9mIGtleXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ3VsYXIgZXhwcmVzc2lvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5EYXRhLkRhdGFNYW5hZ2VyI3F1ZXJ5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gc2VhcmNoIC0gQSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0LiBJZiBhIG5vbi1SZWdFeHAgb2JqZWN0IG9iaiBpcyBwYXNzZWQsIGl0IGlzIGltcGxpY2l0bHkgY29udmVydGVkIHRvIGEgUmVnRXhwIGJ5IHVzaW5nIG5ldyBSZWdFeHAob2JqKS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3QuPHN0cmluZywgKj59IFRoZSB2YWx1ZXMgb2YgdGhlIGtleXMgbWF0Y2hpbmcgdGhlIHNlYXJjaCBzdHJpbmcuXHJcbiAgICAgKi9cclxuICAgIHF1ZXJ5OiBmdW5jdGlvbiAoc2VhcmNoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciByZXN1bHRzID0ge307XHJcblxyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmxpc3QpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5saXN0Lmhhc093blByb3BlcnR5KGtleSkgJiYga2V5Lm1hdGNoKHNlYXJjaCkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IHRoaXMubGlzdFtrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGEgdmFsdWUgZm9yIHRoZSBnaXZlbiBrZXkuIElmIHRoZSBrZXkgZG9lc24ndCBhbHJlYWR5IGV4aXN0IGluIHRoZSBEYXRhIE1hbmFnZXIgdGhlbiBpdCBpcyBjcmVhdGVkLlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBkYXRhLnNldCgnbmFtZScsICdSZWQgR2VtIFN0b25lJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIGFsc28gcGFzcyBpbiBhbiBvYmplY3Qgb2Yga2V5IHZhbHVlIHBhaXJzIGFzIHRoZSBmaXJzdCBhcmd1bWVudDpcclxuICAgICAqXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBkYXRhLnNldCh7IG5hbWU6ICdSZWQgR2VtIFN0b25lJywgbGV2ZWw6IDIsIG93bmVyOiAnTGluaycsIGdvbGQ6IDUwIH0pO1xyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogVG8gZ2V0IGEgdmFsdWUgYmFjayBhZ2FpbiB5b3UgY2FuIGNhbGwgYGdldGA6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIGRhdGEuZ2V0KCdnb2xkJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogT3IgeW91IGNhbiBhY2Nlc3MgdGhlIHZhbHVlIGRpcmVjdGx5IHZpYSB0aGUgYHZhbHVlc2AgcHJvcGVydHksIHdoZXJlIGl0IHdvcmtzIGxpa2UgYW55IG90aGVyIHZhcmlhYmxlOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBkYXRhLnZhbHVlcy5nb2xkICs9IDUwO1xyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogV2hlbiB0aGUgdmFsdWUgaXMgZmlyc3Qgc2V0LCBhIGBzZXRkYXRhYCBldmVudCBpcyBlbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBrZXkgYWxyZWFkeSBleGlzdHMsIGEgYGNoYW5nZWRhdGFgIGV2ZW50IGlzIGVtaXR0ZWQgaW5zdGVhZCwgYWxvbmcgYW4gZXZlbnQgbmFtZWQgYWZ0ZXIgdGhlIGtleS5cclxuICAgICAqIEZvciBleGFtcGxlLCBpZiB5b3UgdXBkYXRlZCBhbiBleGlzdGluZyBrZXkgY2FsbGVkIGBQbGF5ZXJMaXZlc2AgdGhlbiBpdCB3b3VsZCBlbWl0IHRoZSBldmVudCBgY2hhbmdlZGF0YS1QbGF5ZXJMaXZlc2AuXHJcbiAgICAgKiBUaGVzZSBldmVudHMgd2lsbCBiZSBlbWl0dGVkIHJlZ2FyZGxlc3MgaWYgeW91IHVzZSB0aGlzIG1ldGhvZCB0byBzZXQgdGhlIHZhbHVlLCBvciB0aGUgZGlyZWN0IGB2YWx1ZXNgIHNldHRlci5cclxuICAgICAqXHJcbiAgICAgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBkYXRhIGtleXMgYXJlIGNhc2Utc2Vuc2l0aXZlIGFuZCBtdXN0IGJlIHZhbGlkIEphdmFTY3JpcHQgT2JqZWN0IHByb3BlcnR5IHN0cmluZ3MuXHJcbiAgICAgKiBUaGlzIG1lYW5zIHRoZSBrZXlzIGBnb2xkYCBhbmQgYEdvbGRgIGFyZSB0cmVhdGVkIGFzIHR3byB1bmlxdWUgdmFsdWVzIHdpdGhpbiB0aGUgRGF0YSBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXIjc2V0XHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkRhdGEuRXZlbnRzI1NFVF9EQVRBXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkRhdGEuRXZlbnRzI0NIQU5HRV9EQVRBXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkRhdGEuRXZlbnRzI0NIQU5HRV9EQVRBX0tFWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfG9iamVjdCl9IGtleSAtIFRoZSBrZXkgdG8gc2V0IHRoZSB2YWx1ZSBmb3IuIE9yIGFuIG9iamVjdCBvciBrZXkgdmFsdWUgcGFpcnMuIElmIGFuIG9iamVjdCB0aGUgYGRhdGFgIGFyZ3VtZW50IGlzIGlnbm9yZWQuXHJcbiAgICAgKiBAcGFyYW0geyp9IGRhdGEgLSBUaGUgdmFsdWUgdG8gc2V0IGZvciB0aGUgZ2l2ZW4ga2V5LiBJZiBhbiBvYmplY3QgaXMgcHJvdmlkZWQgYXMgdGhlIGtleSB0aGlzIGFyZ3VtZW50IGlzIGlnbm9yZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkRhdGEuRGF0YU1hbmFnZXJ9IFRoaXMgRGF0YU1hbmFnZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXQ6IGZ1bmN0aW9uIChrZXksIGRhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2Zyb3plbilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0VmFsdWUoa2V5LCBkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgZW50cnkgaW4ga2V5KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKGVudHJ5LCBrZXlbZW50cnldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgdmFsdWUgc2V0dGVyLCBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgYHNldGAgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXIjc2V0VmFsdWVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuRGF0YS5FdmVudHMjU0VUX0RBVEFcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuRGF0YS5FdmVudHMjQ0hBTkdFX0RBVEFcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuRGF0YS5FdmVudHMjQ0hBTkdFX0RBVEFfS0VZXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IHRvIHNldCB0aGUgdmFsdWUgZm9yLlxyXG4gICAgICogQHBhcmFtIHsqfSBkYXRhIC0gVGhlIHZhbHVlIHRvIHNldC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuRGF0YS5EYXRhTWFuYWdlcn0gVGhpcyBEYXRhTWFuYWdlciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFZhbHVlOiBmdW5jdGlvbiAoa2V5LCBkYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLl9mcm96ZW4pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmhhcyhrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIEhpdCB0aGUga2V5IGdldHRlciwgd2hpY2ggd2lsbCBpbiB0dXJuIGVtaXQgdGhlIGV2ZW50cy5cclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNba2V5XSA9IGRhdGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgICAgIHZhciBsaXN0ID0gdGhpcy5saXN0O1xyXG4gICAgICAgICAgICB2YXIgZXZlbnRzID0gdGhpcy5ldmVudHM7XHJcbiAgICAgICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudDtcclxuXHJcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnZhbHVlcywga2V5LCB7XHJcblxyXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG5cclxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGlzdFtrZXldO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIV90aGlzLl9mcm96ZW4pXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IGxpc3Rba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFtrZXldID0gdmFsdWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudHMuZW1pdChFdmVudHMuQ0hBTkdFX0RBVEEsIHBhcmVudCwga2V5LCB2YWx1ZSwgcHJldmlvdXNWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50cy5lbWl0KEV2ZW50cy5DSEFOR0VfREFUQV9LRVkgKyBrZXksIHBhcmVudCwgdmFsdWUsIHByZXZpb3VzVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgbGlzdFtrZXldID0gZGF0YTtcclxuXHJcbiAgICAgICAgICAgIGV2ZW50cy5lbWl0KEV2ZW50cy5TRVRfREFUQSwgcGFyZW50LCBrZXksIGRhdGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFzc2VzIGFsbCBkYXRhIGVudHJpZXMgdG8gdGhlIGdpdmVuIGNhbGxiYWNrLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXIjZWFjaFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtEYXRhRWFjaENhbGxiYWNrfSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0byBjYWxsLlxyXG4gICAgICogQHBhcmFtIHsqfSBbY29udGV4dF0gLSBWYWx1ZSB0byB1c2UgYXMgYHRoaXNgIHdoZW4gZXhlY3V0aW5nIGNhbGxiYWNrLlxyXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjaywgYWZ0ZXIgdGhlIGdhbWUgb2JqZWN0LCBrZXksIGFuZCBkYXRhLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5EYXRhLkRhdGFNYW5hZ2VyfSBUaGlzIERhdGFNYW5hZ2VyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZWFjaDogZnVuY3Rpb24gKGNhbGxiYWNrLCBjb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBhcmdzID0gWyB0aGlzLnBhcmVudCwgbnVsbCwgdW5kZWZpbmVkIF07XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5saXN0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYXJnc1sxXSA9IGtleTtcclxuICAgICAgICAgICAgYXJnc1syXSA9IHRoaXMubGlzdFtrZXldO1xyXG5cclxuICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkoY29udGV4dCwgYXJncyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXJnZSB0aGUgZ2l2ZW4gb2JqZWN0IG9mIGtleSB2YWx1ZSBwYWlycyBpbnRvIHRoaXMgRGF0YU1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQW55IG5ld2x5IGNyZWF0ZWQgdmFsdWVzIHdpbGwgZW1pdCBhIGBzZXRkYXRhYCBldmVudC4gQW55IHVwZGF0ZWQgdmFsdWVzIChzZWUgdGhlIGBvdmVyd3JpdGVgIGFyZ3VtZW50KVxyXG4gICAgICogd2lsbCBlbWl0IGEgYGNoYW5nZWRhdGFgIGV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXIjbWVyZ2VcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuRGF0YS5FdmVudHMjU0VUX0RBVEFcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuRGF0YS5FdmVudHMjQ0hBTkdFX0RBVEFcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuRGF0YS5FdmVudHMjQ0hBTkdFX0RBVEFfS0VZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCAqPn0gZGF0YSAtIFRoZSBkYXRhIHRvIG1lcmdlLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3ZlcndyaXRlPXRydWVdIC0gV2hldGhlciB0byBvdmVyd3JpdGUgZXhpc3RpbmcgZGF0YS4gRGVmYXVsdHMgdG8gdHJ1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuRGF0YS5EYXRhTWFuYWdlcn0gVGhpcyBEYXRhTWFuYWdlciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIG1lcmdlOiBmdW5jdGlvbiAoZGF0YSwgb3ZlcndyaXRlKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChvdmVyd3JpdGUgPT09IHVuZGVmaW5lZCkgeyBvdmVyd3JpdGUgPSB0cnVlOyB9XHJcblxyXG4gICAgICAgIC8vICBNZXJnZSBkYXRhIGZyb20gYW5vdGhlciBjb21wb25lbnQgaW50byB0aGlzIG9uZVxyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAob3ZlcndyaXRlIHx8ICghb3ZlcndyaXRlICYmICF0aGlzLmhhcyhrZXkpKSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoa2V5LCBkYXRhW2tleV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgdGhlIHZhbHVlIGZvciB0aGUgZ2l2ZW4ga2V5LlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBrZXkgaXMgZm91bmQgaW4gdGhpcyBEYXRhIE1hbmFnZXIgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBpbnRlcm5hbCBsaXN0cyBhbmQgYVxyXG4gICAgICogYHJlbW92ZWRhdGFgIGV2ZW50IGlzIGVtaXR0ZWQuXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBjYW4gYWxzbyBwYXNzIGluIGFuIGFycmF5IG9mIGtleXMsIGluIHdoaWNoIGNhc2UgYWxsIGtleXMgaW4gdGhlIGFycmF5IHdpbGwgYmUgcmVtb3ZlZDpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy5kYXRhLnJlbW92ZShbICdnb2xkJywgJ2FybW9yJywgJ2hlYWx0aCcgXSk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5EYXRhLkRhdGFNYW5hZ2VyI3JlbW92ZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5EYXRhLkV2ZW50cyNSRU1PVkVfREFUQVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfHN0cmluZ1tdKX0ga2V5IC0gVGhlIGtleSB0byByZW1vdmUsIG9yIGFuIGFycmF5IG9mIGtleXMgdG8gcmVtb3ZlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5EYXRhLkRhdGFNYW5hZ2VyfSBUaGlzIERhdGFNYW5hZ2VyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLl9mcm96ZW4pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVWYWx1ZShrZXlbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbW92ZVZhbHVlKGtleSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCB2YWx1ZSByZW1vdmVyLCBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgYHJlbW92ZWAgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXIjcmVtb3ZlVmFsdWVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkRhdGEuRXZlbnRzI1JFTU9WRV9EQVRBXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgdG8gc2V0IHRoZSB2YWx1ZSBmb3IuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkRhdGEuRGF0YU1hbmFnZXJ9IFRoaXMgRGF0YU1hbmFnZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZW1vdmVWYWx1ZTogZnVuY3Rpb24gKGtleSlcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5oYXMoa2V5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5saXN0W2tleV07XHJcblxyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5saXN0W2tleV07XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlc1trZXldO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5ldmVudHMuZW1pdChFdmVudHMuUkVNT1ZFX0RBVEEsIHRoaXMucGFyZW50LCBrZXksIGRhdGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gJ2tleScsIGRlbGV0ZXMgaXQgZnJvbSB0aGlzIERhdGEgTWFuYWdlciwgdGhlbiByZXR1cm5zIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXIjcG9wXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkRhdGEuRXZlbnRzI1JFTU9WRV9EQVRBXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmV0cmlldmUgYW5kIGRlbGV0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsqfSBUaGUgdmFsdWUgb2YgdGhlIGdpdmVuIGtleS5cclxuICAgICAqL1xyXG4gICAgcG9wOiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBkYXRhID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2Zyb3plbiAmJiB0aGlzLmhhcyhrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZGF0YSA9IHRoaXMubGlzdFtrZXldO1xyXG5cclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMubGlzdFtrZXldO1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy52YWx1ZXNba2V5XTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzLmVtaXQoRXZlbnRzLlJFTU9WRV9EQVRBLCB0aGlzLnBhcmVudCwga2V5LCBkYXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgZ2l2ZW4ga2V5IGlzIHNldCBpbiB0aGlzIERhdGEgTWFuYWdlci5cclxuICAgICAqIFxyXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCB0aGUga2V5cyBhcmUgY2FzZS1zZW5zaXRpdmUgYW5kIG11c3QgYmUgdmFsaWQgSmF2YVNjcmlwdCBPYmplY3QgcHJvcGVydHkgc3RyaW5ncy5cclxuICAgICAqIFRoaXMgbWVhbnMgdGhlIGtleXMgYGdvbGRgIGFuZCBgR29sZGAgYXJlIHRyZWF0ZWQgYXMgdHdvIHVuaXF1ZSB2YWx1ZXMgd2l0aGluIHRoZSBEYXRhIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGF0YS5EYXRhTWFuYWdlciNoYXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IHRvIGNoZWNrLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBrZXkgZXhpc3RzLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgaGFzOiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxpc3QuaGFzT3duUHJvcGVydHkoa2V5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGcmVlemUgb3IgdW5mcmVlemUgdGhpcyBEYXRhIE1hbmFnZXIuIEEgZnJvemVuIERhdGEgTWFuYWdlciB3aWxsIGJsb2NrIGFsbCBhdHRlbXB0c1xyXG4gICAgICogdG8gY3JlYXRlIG5ldyB2YWx1ZXMgb3IgdXBkYXRlIGV4aXN0aW5nIG9uZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGF0YS5EYXRhTWFuYWdlciNzZXRGcmVlemVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBXaGV0aGVyIHRvIGZyZWV6ZSBvciB1bmZyZWV6ZSB0aGUgRGF0YSBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5EYXRhLkRhdGFNYW5hZ2VyfSBUaGlzIERhdGFNYW5hZ2VyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0RnJlZXplOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fZnJvemVuID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlbGV0ZSBhbGwgZGF0YSBpbiB0aGlzIERhdGEgTWFuYWdlciBhbmQgdW5mcmVlemUgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGF0YS5EYXRhTWFuYWdlciNyZXNldFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkRhdGEuRGF0YU1hbmFnZXJ9IFRoaXMgRGF0YU1hbmFnZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZXNldDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5saXN0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMubGlzdFtrZXldO1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy52YWx1ZXNba2V5XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2Zyb3plbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95IHRoaXMgZGF0YSBtYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXIjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLmV2ZW50cy5vZmYoRXZlbnRzLkNIQU5HRV9EQVRBKTtcclxuICAgICAgICB0aGlzLmV2ZW50cy5vZmYoRXZlbnRzLlNFVF9EQVRBKTtcclxuICAgICAgICB0aGlzLmV2ZW50cy5vZmYoRXZlbnRzLlJFTU9WRV9EQVRBKTtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgb3Igc2V0cyB0aGUgZnJvemVuIHN0YXRlIG9mIHRoaXMgRGF0YSBNYW5hZ2VyLlxyXG4gICAgICogQSBmcm96ZW4gRGF0YSBNYW5hZ2VyIHdpbGwgYmxvY2sgYWxsIGF0dGVtcHRzIHRvIGNyZWF0ZSBuZXcgdmFsdWVzIG9yIHVwZGF0ZSBleGlzdGluZyBvbmVzLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5EYXRhLkRhdGFNYW5hZ2VyI2ZyZWV6ZVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZnJlZXplOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcm96ZW47XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9mcm96ZW4gPSAodmFsdWUpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIHRoZSB0b3RhbCBudW1iZXIgb2YgZW50cmllcyBpbiB0aGlzIERhdGEgTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuRGF0YS5EYXRhTWFuYWdlciNjb3VudFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgY291bnQ6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGkgPSAwO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMubGlzdClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGlzdFtrZXldICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IERhdGFNYW5hZ2VyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/data/DataManager.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/data/DataManagerPlugin.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/data/DataManagerPlugin.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar DataManager = __webpack_require__(/*! ./DataManager */ \"./node_modules/phaser/src/data/DataManager.js\");\r\nvar PluginCache = __webpack_require__(/*! ../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar SceneEvents = __webpack_require__(/*! ../scene/events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Data Component features a means to store pieces of data specific to a Game Object, System or Plugin.\r\n * You can then search, query it, and retrieve the data. The parent must either extend EventEmitter,\r\n * or have a property called `events` that is an instance of it.\r\n *\r\n * @class DataManagerPlugin\r\n * @extends Phaser.Data.DataManager\r\n * @memberof Phaser.Data\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - A reference to the Scene that this DataManager belongs to.\r\n */\r\nvar DataManagerPlugin = new Class({\r\n\r\n Extends: DataManager,\r\n\r\n initialize:\r\n\r\n function DataManagerPlugin (scene)\r\n {\r\n DataManager.call(this, scene, scene.sys.events);\r\n\r\n /**\r\n * A reference to the Scene that this DataManager belongs to.\r\n *\r\n * @name Phaser.Data.DataManagerPlugin#scene\r\n * @type {Phaser.Scene}\r\n * @since 3.0.0\r\n */\r\n this.scene = scene;\r\n\r\n /**\r\n * A reference to the Scene's Systems.\r\n *\r\n * @name Phaser.Data.DataManagerPlugin#systems\r\n * @type {Phaser.Scenes.Systems}\r\n * @since 3.0.0\r\n */\r\n this.systems = scene.sys;\r\n\r\n scene.sys.events.once(SceneEvents.BOOT, this.boot, this);\r\n scene.sys.events.on(SceneEvents.START, this.start, this);\r\n },\r\n\r\n /**\r\n * This method is called automatically, only once, when the Scene is first created.\r\n * Do not invoke it directly.\r\n *\r\n * @method Phaser.Data.DataManagerPlugin#boot\r\n * @private\r\n * @since 3.5.1\r\n */\r\n boot: function ()\r\n {\r\n this.events = this.systems.events;\r\n\r\n this.events.once(SceneEvents.DESTROY, this.destroy, this);\r\n },\r\n\r\n /**\r\n * This method is called automatically by the Scene when it is starting up.\r\n * It is responsible for creating local systems, properties and listening for Scene events.\r\n * Do not invoke it directly.\r\n *\r\n * @method Phaser.Data.DataManagerPlugin#start\r\n * @private\r\n * @since 3.5.0\r\n */\r\n start: function ()\r\n {\r\n this.events.once(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n },\r\n\r\n /**\r\n * The Scene that owns this plugin is shutting down.\r\n * We need to kill and reset all internal properties as well as stop listening to Scene events.\r\n *\r\n * @method Phaser.Data.DataManagerPlugin#shutdown\r\n * @private\r\n * @since 3.5.0\r\n */\r\n shutdown: function ()\r\n {\r\n this.systems.events.off(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n },\r\n\r\n /**\r\n * The Scene that owns this plugin is being destroyed.\r\n * We need to shutdown and then kill off all external references.\r\n *\r\n * @method Phaser.Data.DataManagerPlugin#destroy\r\n * @since 3.5.0\r\n */\r\n destroy: function ()\r\n {\r\n DataManager.prototype.destroy.call(this);\r\n\r\n this.events.off(SceneEvents.START, this.start, this);\r\n\r\n this.scene = null;\r\n this.systems = null;\r\n }\r\n\r\n});\r\n\r\nPluginCache.register('DataManagerPlugin', DataManagerPlugin, 'data');\r\n\r\nmodule.exports = DataManagerPlugin;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kYXRhL0RhdGFNYW5hZ2VyUGx1Z2luLmpzP2QzMzEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsa0JBQWtCLG1CQUFPLENBQUMsb0VBQWU7QUFDekMsa0JBQWtCLG1CQUFPLENBQUMsZ0ZBQXdCO0FBQ2xELGtCQUFrQixtQkFBTyxDQUFDLHdFQUFpQjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2RhdGEvRGF0YU1hbmFnZXJQbHVnaW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBEYXRhTWFuYWdlciA9IHJlcXVpcmUoJy4vRGF0YU1hbmFnZXInKTtcclxudmFyIFBsdWdpbkNhY2hlID0gcmVxdWlyZSgnLi4vcGx1Z2lucy9QbHVnaW5DYWNoZScpO1xyXG52YXIgU2NlbmVFdmVudHMgPSByZXF1aXJlKCcuLi9zY2VuZS9ldmVudHMnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBEYXRhIENvbXBvbmVudCBmZWF0dXJlcyBhIG1lYW5zIHRvIHN0b3JlIHBpZWNlcyBvZiBkYXRhIHNwZWNpZmljIHRvIGEgR2FtZSBPYmplY3QsIFN5c3RlbSBvciBQbHVnaW4uXHJcbiAqIFlvdSBjYW4gdGhlbiBzZWFyY2gsIHF1ZXJ5IGl0LCBhbmQgcmV0cmlldmUgdGhlIGRhdGEuIFRoZSBwYXJlbnQgbXVzdCBlaXRoZXIgZXh0ZW5kIEV2ZW50RW1pdHRlcixcclxuICogb3IgaGF2ZSBhIHByb3BlcnR5IGNhbGxlZCBgZXZlbnRzYCB0aGF0IGlzIGFuIGluc3RhbmNlIG9mIGl0LlxyXG4gKlxyXG4gKiBAY2xhc3MgRGF0YU1hbmFnZXJQbHVnaW5cclxuICogQGV4dGVuZHMgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5EYXRhXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgdGhpcyBEYXRhTWFuYWdlciBiZWxvbmdzIHRvLlxyXG4gKi9cclxudmFyIERhdGFNYW5hZ2VyUGx1Z2luID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBEYXRhTWFuYWdlcixcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIERhdGFNYW5hZ2VyUGx1Z2luIChzY2VuZSlcclxuICAgIHtcclxuICAgICAgICBEYXRhTWFuYWdlci5jYWxsKHRoaXMsIHNjZW5lLCBzY2VuZS5zeXMuZXZlbnRzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgdGhpcyBEYXRhTWFuYWdlciBiZWxvbmdzIHRvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXJQbHVnaW4jc2NlbmVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lJ3MgU3lzdGVtcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5EYXRhLkRhdGFNYW5hZ2VyUGx1Z2luI3N5c3RlbXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lcy5TeXN0ZW1zfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcyA9IHNjZW5lLnN5cztcclxuXHJcbiAgICAgICAgc2NlbmUuc3lzLmV2ZW50cy5vbmNlKFNjZW5lRXZlbnRzLkJPT1QsIHRoaXMuYm9vdCwgdGhpcyk7XHJcbiAgICAgICAgc2NlbmUuc3lzLmV2ZW50cy5vbihTY2VuZUV2ZW50cy5TVEFSVCwgdGhpcy5zdGFydCwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHksIG9ubHkgb25jZSwgd2hlbiB0aGUgU2NlbmUgaXMgZmlyc3QgY3JlYXRlZC5cclxuICAgICAqIERvIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGF0YS5EYXRhTWFuYWdlclBsdWdpbiNib290XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuNS4xXHJcbiAgICAgKi9cclxuICAgIGJvb3Q6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5ldmVudHMgPSB0aGlzLnN5c3RlbXMuZXZlbnRzO1xyXG5cclxuICAgICAgICB0aGlzLmV2ZW50cy5vbmNlKFNjZW5lRXZlbnRzLkRFU1RST1ksIHRoaXMuZGVzdHJveSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIFNjZW5lIHdoZW4gaXQgaXMgc3RhcnRpbmcgdXAuXHJcbiAgICAgKiBJdCBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgbG9jYWwgc3lzdGVtcywgcHJvcGVydGllcyBhbmQgbGlzdGVuaW5nIGZvciBTY2VuZSBldmVudHMuXHJcbiAgICAgKiBEbyBub3QgaW52b2tlIGl0IGRpcmVjdGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXJQbHVnaW4jc3RhcnRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqL1xyXG4gICAgc3RhcnQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5ldmVudHMub25jZShTY2VuZUV2ZW50cy5TSFVURE9XTiwgdGhpcy5zaHV0ZG93biwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNjZW5lIHRoYXQgb3ducyB0aGlzIHBsdWdpbiBpcyBzaHV0dGluZyBkb3duLlxyXG4gICAgICogV2UgbmVlZCB0byBraWxsIGFuZCByZXNldCBhbGwgaW50ZXJuYWwgcHJvcGVydGllcyBhcyB3ZWxsIGFzIHN0b3AgbGlzdGVuaW5nIHRvIFNjZW5lIGV2ZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5EYXRhLkRhdGFNYW5hZ2VyUGx1Z2luI3NodXRkb3duXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgKi9cclxuICAgIHNodXRkb3duOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcy5ldmVudHMub2ZmKFNjZW5lRXZlbnRzLlNIVVRET1dOLCB0aGlzLnNodXRkb3duLCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgU2NlbmUgdGhhdCBvd25zIHRoaXMgcGx1Z2luIGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuICAgICAqIFdlIG5lZWQgdG8gc2h1dGRvd24gYW5kIHRoZW4ga2lsbCBvZmYgYWxsIGV4dGVybmFsIHJlZmVyZW5jZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGF0YS5EYXRhTWFuYWdlclBsdWdpbiNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBEYXRhTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLmV2ZW50cy5vZmYoU2NlbmVFdmVudHMuU1RBUlQsIHRoaXMuc3RhcnQsIHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcclxuICAgICAgICB0aGlzLnN5c3RlbXMgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5QbHVnaW5DYWNoZS5yZWdpc3RlcignRGF0YU1hbmFnZXJQbHVnaW4nLCBEYXRhTWFuYWdlclBsdWdpbiwgJ2RhdGEnKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRGF0YU1hbmFnZXJQbHVnaW47XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/data/DataManagerPlugin.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/data/events/CHANGE_DATA_EVENT.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/data/events/CHANGE_DATA_EVENT.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Change Data Event.\r\n * \r\n * This event is dispatched by a Data Manager when an item in the data store is changed.\r\n * \r\n * Game Objects with data enabled have an instance of a Data Manager under the `data` property. So, to listen for\r\n * a change data event from a Game Object you would use: `sprite.data.on('changedata', listener)`.\r\n * \r\n * This event is dispatched for all items that change in the Data Manager.\r\n * To listen for the change of a specific item, use the `CHANGE_DATA_KEY_EVENT` event.\r\n *\r\n * @event Phaser.Data.Events#CHANGE_DATA\r\n * @since 3.0.0\r\n * \r\n * @param {any} parent - A reference to the object that the Data Manager responsible for this event belongs to.\r\n * @param {string} key - The unique key of the data item within the Data Manager.\r\n * @param {any} value - The new value of the item in the Data Manager.\r\n * @param {any} previousValue - The previous value of the item in the Data Manager.\r\n */\r\nmodule.exports = 'changedata';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kYXRhL2V2ZW50cy9DSEFOR0VfREFUQV9FVkVOVC5qcz81OTg4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxJQUFJO0FBQ2YsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsSUFBSTtBQUNmLFdBQVcsSUFBSTtBQUNmO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kYXRhL2V2ZW50cy9DSEFOR0VfREFUQV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBDaGFuZ2UgRGF0YSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIERhdGEgTWFuYWdlciB3aGVuIGFuIGl0ZW0gaW4gdGhlIGRhdGEgc3RvcmUgaXMgY2hhbmdlZC5cclxuICogXHJcbiAqIEdhbWUgT2JqZWN0cyB3aXRoIGRhdGEgZW5hYmxlZCBoYXZlIGFuIGluc3RhbmNlIG9mIGEgRGF0YSBNYW5hZ2VyIHVuZGVyIHRoZSBgZGF0YWAgcHJvcGVydHkuIFNvLCB0byBsaXN0ZW4gZm9yXHJcbiAqIGEgY2hhbmdlIGRhdGEgZXZlbnQgZnJvbSBhIEdhbWUgT2JqZWN0IHlvdSB3b3VsZCB1c2U6IGBzcHJpdGUuZGF0YS5vbignY2hhbmdlZGF0YScsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgZm9yIGFsbCBpdGVtcyB0aGF0IGNoYW5nZSBpbiB0aGUgRGF0YSBNYW5hZ2VyLlxyXG4gKiBUbyBsaXN0ZW4gZm9yIHRoZSBjaGFuZ2Ugb2YgYSBzcGVjaWZpYyBpdGVtLCB1c2UgdGhlIGBDSEFOR0VfREFUQV9LRVlfRVZFTlRgIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkRhdGEuRXZlbnRzI0NIQU5HRV9EQVRBXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHthbnl9IHBhcmVudCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgdGhhdCB0aGUgRGF0YSBNYW5hZ2VyIHJlc3BvbnNpYmxlIGZvciB0aGlzIGV2ZW50IGJlbG9uZ3MgdG8uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgdW5pcXVlIGtleSBvZiB0aGUgZGF0YSBpdGVtIHdpdGhpbiB0aGUgRGF0YSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBUaGUgbmV3IHZhbHVlIG9mIHRoZSBpdGVtIGluIHRoZSBEYXRhIE1hbmFnZXIuXHJcbiAqIEBwYXJhbSB7YW55fSBwcmV2aW91c1ZhbHVlIC0gVGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBpdGVtIGluIHRoZSBEYXRhIE1hbmFnZXIuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdjaGFuZ2VkYXRhJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/data/events/CHANGE_DATA_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/data/events/CHANGE_DATA_KEY_EVENT.js":
/*!**********************************************************************!*\
!*** ./node_modules/phaser/src/data/events/CHANGE_DATA_KEY_EVENT.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Change Data Key Event.\r\n * \r\n * This event is dispatched by a Data Manager when an item in the data store is changed.\r\n * \r\n * Game Objects with data enabled have an instance of a Data Manager under the `data` property. So, to listen for\r\n * the change of a specific data item from a Game Object you would use: `sprite.data.on('changedata-key', listener)`,\r\n * where `key` is the unique string key of the data item. For example, if you have a data item stored called `gold`\r\n * then you can listen for `sprite.data.on('changedata-gold')`.\r\n *\r\n * @event Phaser.Data.Events#CHANGE_DATA_KEY\r\n * @since 3.16.1\r\n * \r\n * @param {any} parent - A reference to the object that owns the instance of the Data Manager responsible for this event.\r\n * @param {string} key - The unique key of the data item within the Data Manager.\r\n * @param {any} value - The item that was updated in the Data Manager. This can be of any data type, i.e. a string, boolean, number, object or instance.\r\n * @param {any} previousValue - The previous item that was updated in the Data Manager. This can be of any data type, i.e. a string, boolean, number, object or instance.\r\n */\r\nmodule.exports = 'changedata-';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kYXRhL2V2ZW50cy9DSEFOR0VfREFUQV9LRVlfRVZFTlQuanM/YTQ3ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLElBQUk7QUFDZixXQUFXLE9BQU87QUFDbEIsV0FBVyxJQUFJO0FBQ2YsV0FBVyxJQUFJO0FBQ2Y7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2RhdGEvZXZlbnRzL0NIQU5HRV9EQVRBX0tFWV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBDaGFuZ2UgRGF0YSBLZXkgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYSBEYXRhIE1hbmFnZXIgd2hlbiBhbiBpdGVtIGluIHRoZSBkYXRhIHN0b3JlIGlzIGNoYW5nZWQuXHJcbiAqIFxyXG4gKiBHYW1lIE9iamVjdHMgd2l0aCBkYXRhIGVuYWJsZWQgaGF2ZSBhbiBpbnN0YW5jZSBvZiBhIERhdGEgTWFuYWdlciB1bmRlciB0aGUgYGRhdGFgIHByb3BlcnR5LiBTbywgdG8gbGlzdGVuIGZvclxyXG4gKiB0aGUgY2hhbmdlIG9mIGEgc3BlY2lmaWMgZGF0YSBpdGVtIGZyb20gYSBHYW1lIE9iamVjdCB5b3Ugd291bGQgdXNlOiBgc3ByaXRlLmRhdGEub24oJ2NoYW5nZWRhdGEta2V5JywgbGlzdGVuZXIpYCxcclxuICogd2hlcmUgYGtleWAgaXMgdGhlIHVuaXF1ZSBzdHJpbmcga2V5IG9mIHRoZSBkYXRhIGl0ZW0uIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBhIGRhdGEgaXRlbSBzdG9yZWQgY2FsbGVkIGBnb2xkYFxyXG4gKiB0aGVuIHlvdSBjYW4gbGlzdGVuIGZvciBgc3ByaXRlLmRhdGEub24oJ2NoYW5nZWRhdGEtZ29sZCcpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5EYXRhLkV2ZW50cyNDSEFOR0VfREFUQV9LRVlcclxuICogQHNpbmNlIDMuMTYuMVxyXG4gKiBcclxuICogQHBhcmFtIHthbnl9IHBhcmVudCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgdGhhdCBvd25zIHRoZSBpbnN0YW5jZSBvZiB0aGUgRGF0YSBNYW5hZ2VyIHJlc3BvbnNpYmxlIGZvciB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBrZXkgb2YgdGhlIGRhdGEgaXRlbSB3aXRoaW4gdGhlIERhdGEgTWFuYWdlci5cclxuICogQHBhcmFtIHthbnl9IHZhbHVlIC0gVGhlIGl0ZW0gdGhhdCB3YXMgdXBkYXRlZCBpbiB0aGUgRGF0YSBNYW5hZ2VyLiBUaGlzIGNhbiBiZSBvZiBhbnkgZGF0YSB0eXBlLCBpLmUuIGEgc3RyaW5nLCBib29sZWFuLCBudW1iZXIsIG9iamVjdCBvciBpbnN0YW5jZS5cclxuICogQHBhcmFtIHthbnl9IHByZXZpb3VzVmFsdWUgLSBUaGUgcHJldmlvdXMgaXRlbSB0aGF0IHdhcyB1cGRhdGVkIGluIHRoZSBEYXRhIE1hbmFnZXIuIFRoaXMgY2FuIGJlIG9mIGFueSBkYXRhIHR5cGUsIGkuZS4gYSBzdHJpbmcsIGJvb2xlYW4sIG51bWJlciwgb2JqZWN0IG9yIGluc3RhbmNlLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnY2hhbmdlZGF0YS0nO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/data/events/CHANGE_DATA_KEY_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/data/events/REMOVE_DATA_EVENT.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/data/events/REMOVE_DATA_EVENT.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Remove Data Event.\r\n * \r\n * This event is dispatched by a Data Manager when an item is removed from it.\r\n * \r\n * Game Objects with data enabled have an instance of a Data Manager under the `data` property. So, to listen for\r\n * the removal of a data item on a Game Object you would use: `sprite.data.on('removedata', listener)`.\r\n *\r\n * @event Phaser.Data.Events#REMOVE_DATA\r\n * @since 3.0.0\r\n * \r\n * @param {any} parent - A reference to the object that owns the instance of the Data Manager responsible for this event.\r\n * @param {string} key - The unique key of the data item within the Data Manager.\r\n * @param {any} data - The item that was removed from the Data Manager. This can be of any data type, i.e. a string, boolean, number, object or instance.\r\n */\r\nmodule.exports = 'removedata';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kYXRhL2V2ZW50cy9SRU1PVkVfREFUQV9FVkVOVC5qcz8xZTBkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxJQUFJO0FBQ2YsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsSUFBSTtBQUNmO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kYXRhL2V2ZW50cy9SRU1PVkVfREFUQV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBSZW1vdmUgRGF0YSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIERhdGEgTWFuYWdlciB3aGVuIGFuIGl0ZW0gaXMgcmVtb3ZlZCBmcm9tIGl0LlxyXG4gKiBcclxuICogR2FtZSBPYmplY3RzIHdpdGggZGF0YSBlbmFibGVkIGhhdmUgYW4gaW5zdGFuY2Ugb2YgYSBEYXRhIE1hbmFnZXIgdW5kZXIgdGhlIGBkYXRhYCBwcm9wZXJ0eS4gU28sIHRvIGxpc3RlbiBmb3JcclxuICogdGhlIHJlbW92YWwgb2YgYSBkYXRhIGl0ZW0gb24gYSBHYW1lIE9iamVjdCB5b3Ugd291bGQgdXNlOiBgc3ByaXRlLmRhdGEub24oJ3JlbW92ZWRhdGEnLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkRhdGEuRXZlbnRzI1JFTU9WRV9EQVRBXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHthbnl9IHBhcmVudCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgdGhhdCBvd25zIHRoZSBpbnN0YW5jZSBvZiB0aGUgRGF0YSBNYW5hZ2VyIHJlc3BvbnNpYmxlIGZvciB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBrZXkgb2YgdGhlIGRhdGEgaXRlbSB3aXRoaW4gdGhlIERhdGEgTWFuYWdlci5cclxuICogQHBhcmFtIHthbnl9IGRhdGEgLSBUaGUgaXRlbSB0aGF0IHdhcyByZW1vdmVkIGZyb20gdGhlIERhdGEgTWFuYWdlci4gVGhpcyBjYW4gYmUgb2YgYW55IGRhdGEgdHlwZSwgaS5lLiBhIHN0cmluZywgYm9vbGVhbiwgbnVtYmVyLCBvYmplY3Qgb3IgaW5zdGFuY2UuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdyZW1vdmVkYXRhJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/data/events/REMOVE_DATA_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/data/events/SET_DATA_EVENT.js":
/*!***************************************************************!*\
!*** ./node_modules/phaser/src/data/events/SET_DATA_EVENT.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Set Data Event.\r\n * \r\n * This event is dispatched by a Data Manager when a new item is added to the data store.\r\n * \r\n * Game Objects with data enabled have an instance of a Data Manager under the `data` property. So, to listen for\r\n * the addition of a new data item on a Game Object you would use: `sprite.data.on('setdata', listener)`.\r\n *\r\n * @event Phaser.Data.Events#SET_DATA\r\n * @since 3.0.0\r\n * \r\n * @param {any} parent - A reference to the object that owns the instance of the Data Manager responsible for this event.\r\n * @param {string} key - The unique key of the data item within the Data Manager.\r\n * @param {any} data - The item that was added to the Data Manager. This can be of any data type, i.e. a string, boolean, number, object or instance.\r\n */\r\nmodule.exports = 'setdata';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kYXRhL2V2ZW50cy9TRVRfREFUQV9FVkVOVC5qcz9hMmNhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxJQUFJO0FBQ2YsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsSUFBSTtBQUNmO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kYXRhL2V2ZW50cy9TRVRfREFUQV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBTZXQgRGF0YSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIERhdGEgTWFuYWdlciB3aGVuIGEgbmV3IGl0ZW0gaXMgYWRkZWQgdG8gdGhlIGRhdGEgc3RvcmUuXHJcbiAqIFxyXG4gKiBHYW1lIE9iamVjdHMgd2l0aCBkYXRhIGVuYWJsZWQgaGF2ZSBhbiBpbnN0YW5jZSBvZiBhIERhdGEgTWFuYWdlciB1bmRlciB0aGUgYGRhdGFgIHByb3BlcnR5LiBTbywgdG8gbGlzdGVuIGZvclxyXG4gKiB0aGUgYWRkaXRpb24gb2YgYSBuZXcgZGF0YSBpdGVtIG9uIGEgR2FtZSBPYmplY3QgeW91IHdvdWxkIHVzZTogYHNwcml0ZS5kYXRhLm9uKCdzZXRkYXRhJywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5EYXRhLkV2ZW50cyNTRVRfREFUQVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7YW55fSBwYXJlbnQgLSBBIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IHRoYXQgb3ducyB0aGUgaW5zdGFuY2Ugb2YgdGhlIERhdGEgTWFuYWdlciByZXNwb25zaWJsZSBmb3IgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSB1bmlxdWUga2V5IG9mIHRoZSBkYXRhIGl0ZW0gd2l0aGluIHRoZSBEYXRhIE1hbmFnZXIuXHJcbiAqIEBwYXJhbSB7YW55fSBkYXRhIC0gVGhlIGl0ZW0gdGhhdCB3YXMgYWRkZWQgdG8gdGhlIERhdGEgTWFuYWdlci4gVGhpcyBjYW4gYmUgb2YgYW55IGRhdGEgdHlwZSwgaS5lLiBhIHN0cmluZywgYm9vbGVhbiwgbnVtYmVyLCBvYmplY3Qgb3IgaW5zdGFuY2UuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdzZXRkYXRhJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/data/events/SET_DATA_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/data/events/index.js":
/*!******************************************************!*\
!*** ./node_modules/phaser/src/data/events/index.js ***!
\******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Data.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n CHANGE_DATA: __webpack_require__(/*! ./CHANGE_DATA_EVENT */ \"./node_modules/phaser/src/data/events/CHANGE_DATA_EVENT.js\"),\r\n CHANGE_DATA_KEY: __webpack_require__(/*! ./CHANGE_DATA_KEY_EVENT */ \"./node_modules/phaser/src/data/events/CHANGE_DATA_KEY_EVENT.js\"),\r\n REMOVE_DATA: __webpack_require__(/*! ./REMOVE_DATA_EVENT */ \"./node_modules/phaser/src/data/events/REMOVE_DATA_EVENT.js\"),\r\n SET_DATA: __webpack_require__(/*! ./SET_DATA_EVENT */ \"./node_modules/phaser/src/data/events/SET_DATA_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kYXRhL2V2ZW50cy9pbmRleC5qcz85M2FlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsdUZBQXFCO0FBQzlDLHFCQUFxQixtQkFBTyxDQUFDLCtGQUF5QjtBQUN0RCxpQkFBaUIsbUJBQU8sQ0FBQyx1RkFBcUI7QUFDOUMsY0FBYyxtQkFBTyxDQUFDLGlGQUFrQjs7QUFFeEMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kYXRhL2V2ZW50cy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkRhdGEuRXZlbnRzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQ0hBTkdFX0RBVEE6IHJlcXVpcmUoJy4vQ0hBTkdFX0RBVEFfRVZFTlQnKSxcclxuICAgIENIQU5HRV9EQVRBX0tFWTogcmVxdWlyZSgnLi9DSEFOR0VfREFUQV9LRVlfRVZFTlQnKSxcclxuICAgIFJFTU9WRV9EQVRBOiByZXF1aXJlKCcuL1JFTU9WRV9EQVRBX0VWRU5UJyksXHJcbiAgICBTRVRfREFUQTogcmVxdWlyZSgnLi9TRVRfREFUQV9FVkVOVCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/data/events/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/data/index.js":
/*!***********************************************!*\
!*** ./node_modules/phaser/src/data/index.js ***!
\***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Data\r\n */\r\n\r\nmodule.exports = {\r\n\r\n DataManager: __webpack_require__(/*! ./DataManager */ \"./node_modules/phaser/src/data/DataManager.js\"),\r\n DataManagerPlugin: __webpack_require__(/*! ./DataManagerPlugin */ \"./node_modules/phaser/src/data/DataManagerPlugin.js\"),\r\n Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/data/events/index.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kYXRhL2luZGV4LmpzP2IwOGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyxvRUFBZTtBQUN4Qyx1QkFBdUIsbUJBQU8sQ0FBQyxnRkFBcUI7QUFDcEQsWUFBWSxtQkFBTyxDQUFDLGdFQUFVOztBQUU5QiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2RhdGEvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5EYXRhXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgRGF0YU1hbmFnZXI6IHJlcXVpcmUoJy4vRGF0YU1hbmFnZXInKSxcclxuICAgIERhdGFNYW5hZ2VyUGx1Z2luOiByZXF1aXJlKCcuL0RhdGFNYW5hZ2VyUGx1Z2luJyksXHJcbiAgICBFdmVudHM6IHJlcXVpcmUoJy4vZXZlbnRzJylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/data/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/device/Audio.js":
/*!*************************************************!*\
!*** ./node_modules/phaser/src/device/Audio.js ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Browser = __webpack_require__(/*! ./Browser */ \"./node_modules/phaser/src/device/Browser.js\");\r\n\r\n/**\r\n * Determines the audio playback capabilities of the device running this Phaser Game instance.\r\n * These values are read-only and populated during the boot sequence of the game.\r\n * They are then referenced by internal game systems and are available for you to access\r\n * via `this.sys.game.device.audio` from within any Scene.\r\n * \r\n * @typedef {object} Phaser.Device.Audio\r\n * @since 3.0.0\r\n * \r\n * @property {boolean} audioData - Can this device play HTML Audio tags?\r\n * @property {boolean} dolby - Can this device play EC-3 Dolby Digital Plus files?\r\n * @property {boolean} m4a - Can this device can play m4a files.\r\n * @property {boolean} mp3 - Can this device play mp3 files?\r\n * @property {boolean} ogg - Can this device play ogg files?\r\n * @property {boolean} opus - Can this device play opus files?\r\n * @property {boolean} wav - Can this device play wav files?\r\n * @property {boolean} webAudio - Does this device have the Web Audio API?\r\n * @property {boolean} webm - Can this device play webm files?\r\n */\r\nvar Audio = {\r\n\r\n audioData: false,\r\n dolby: false,\r\n m4a: false,\r\n mp3: false,\r\n ogg: false,\r\n opus: false,\r\n wav: false,\r\n webAudio: false,\r\n webm: false\r\n\r\n};\r\n\r\nfunction init ()\r\n{\r\n Audio.audioData = !!(window['Audio']);\r\n\r\n Audio.webAudio = !!(window['AudioContext'] || window['webkitAudioContext']);\r\n\r\n var audioElement = document.createElement('audio');\r\n\r\n var result = !!audioElement.canPlayType;\r\n\r\n try\r\n {\r\n if (result)\r\n {\r\n if (audioElement.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/^no$/, ''))\r\n {\r\n Audio.ogg = true;\r\n }\r\n\r\n if (audioElement.canPlayType('audio/ogg; codecs=\"opus\"').replace(/^no$/, '') || audioElement.canPlayType('audio/opus;').replace(/^no$/, ''))\r\n {\r\n Audio.opus = true;\r\n }\r\n\r\n if (audioElement.canPlayType('audio/mpeg;').replace(/^no$/, ''))\r\n {\r\n Audio.mp3 = true;\r\n }\r\n\r\n // Mimetypes accepted:\r\n // developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements\r\n // bit.ly/iphoneoscodecs\r\n if (audioElement.canPlayType('audio/wav; codecs=\"1\"').replace(/^no$/, ''))\r\n {\r\n Audio.wav = true;\r\n }\r\n\r\n if (audioElement.canPlayType('audio/x-m4a;') || audioElement.canPlayType('audio/aac;').replace(/^no$/, ''))\r\n {\r\n Audio.m4a = true;\r\n }\r\n\r\n if (audioElement.canPlayType('audio/webm; codecs=\"vorbis\"').replace(/^no$/, ''))\r\n {\r\n Audio.webm = true;\r\n }\r\n\r\n if (audioElement.canPlayType('audio/mp4;codecs=\"ec-3\"') !== '')\r\n {\r\n if (Browser.edge)\r\n {\r\n Audio.dolby = true;\r\n }\r\n else if (Browser.safari && Browser.safariVersion >= 9)\r\n {\r\n if ((/Mac OS X (\\d+)_(\\d+)/).test(navigator.userAgent))\r\n {\r\n var major = parseInt(RegExp.$1, 10);\r\n var minor = parseInt(RegExp.$2, 10);\r\n\r\n if ((major === 10 && minor >= 11) || major > 10)\r\n {\r\n Audio.dolby = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n catch (e)\r\n {\r\n // Nothing to do here\r\n }\r\n\r\n return Audio;\r\n}\r\n\r\nmodule.exports = init();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kZXZpY2UvQXVkaW8uanM/MjU0YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLDhEQUFXOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRDtBQUNBO0FBQ0E7O0FBRUEsb0RBQW9ELDZFQUE2RTtBQUNqSTtBQUNBO0FBQ0E7O0FBRUEscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7QUFDQTtBQUNBOztBQUVBLHNEQUFzRCwwQ0FBMEM7QUFDaEc7QUFDQTtBQUNBOztBQUVBLHFEQUFxRDtBQUNyRDtBQUNBO0FBQ0E7O0FBRUEsb0RBQW9EO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2RldmljZS9BdWRpby5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJyb3dzZXIgPSByZXF1aXJlKCcuL0Jyb3dzZXInKTtcclxuXHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHRoZSBhdWRpbyBwbGF5YmFjayBjYXBhYmlsaXRpZXMgb2YgdGhlIGRldmljZSBydW5uaW5nIHRoaXMgUGhhc2VyIEdhbWUgaW5zdGFuY2UuXHJcbiAqIFRoZXNlIHZhbHVlcyBhcmUgcmVhZC1vbmx5IGFuZCBwb3B1bGF0ZWQgZHVyaW5nIHRoZSBib290IHNlcXVlbmNlIG9mIHRoZSBnYW1lLlxyXG4gKiBUaGV5IGFyZSB0aGVuIHJlZmVyZW5jZWQgYnkgaW50ZXJuYWwgZ2FtZSBzeXN0ZW1zIGFuZCBhcmUgYXZhaWxhYmxlIGZvciB5b3UgdG8gYWNjZXNzXHJcbiAqIHZpYSBgdGhpcy5zeXMuZ2FtZS5kZXZpY2UuYXVkaW9gIGZyb20gd2l0aGluIGFueSBTY2VuZS5cclxuICogXHJcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFBoYXNlci5EZXZpY2UuQXVkaW9cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGF1ZGlvRGF0YSAtIENhbiB0aGlzIGRldmljZSBwbGF5IEhUTUwgQXVkaW8gdGFncz9cclxuICogQHByb3BlcnR5IHtib29sZWFufSBkb2xieSAtIENhbiB0aGlzIGRldmljZSBwbGF5IEVDLTMgRG9sYnkgRGlnaXRhbCBQbHVzIGZpbGVzP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG00YSAtIENhbiB0aGlzIGRldmljZSBjYW4gcGxheSBtNGEgZmlsZXMuXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbXAzIC0gQ2FuIHRoaXMgZGV2aWNlIHBsYXkgbXAzIGZpbGVzP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG9nZyAtIENhbiB0aGlzIGRldmljZSBwbGF5IG9nZyBmaWxlcz9cclxuICogQHByb3BlcnR5IHtib29sZWFufSBvcHVzIC0gQ2FuIHRoaXMgZGV2aWNlIHBsYXkgb3B1cyBmaWxlcz9cclxuICogQHByb3BlcnR5IHtib29sZWFufSB3YXYgLSBDYW4gdGhpcyBkZXZpY2UgcGxheSB3YXYgZmlsZXM/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gd2ViQXVkaW8gLSBEb2VzIHRoaXMgZGV2aWNlIGhhdmUgdGhlIFdlYiBBdWRpbyBBUEk/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gd2VibSAtIENhbiB0aGlzIGRldmljZSBwbGF5IHdlYm0gZmlsZXM/XHJcbiAqL1xyXG52YXIgQXVkaW8gPSB7XHJcblxyXG4gICAgYXVkaW9EYXRhOiBmYWxzZSxcclxuICAgIGRvbGJ5OiBmYWxzZSxcclxuICAgIG00YTogZmFsc2UsXHJcbiAgICBtcDM6IGZhbHNlLFxyXG4gICAgb2dnOiBmYWxzZSxcclxuICAgIG9wdXM6IGZhbHNlLFxyXG4gICAgd2F2OiBmYWxzZSxcclxuICAgIHdlYkF1ZGlvOiBmYWxzZSxcclxuICAgIHdlYm06IGZhbHNlXHJcblxyXG59O1xyXG5cclxuZnVuY3Rpb24gaW5pdCAoKVxyXG57XHJcbiAgICBBdWRpby5hdWRpb0RhdGEgPSAhISh3aW5kb3dbJ0F1ZGlvJ10pO1xyXG5cclxuICAgIEF1ZGlvLndlYkF1ZGlvID0gISEod2luZG93WydBdWRpb0NvbnRleHQnXSB8fCB3aW5kb3dbJ3dlYmtpdEF1ZGlvQ29udGV4dCddKTtcclxuXHJcbiAgICB2YXIgYXVkaW9FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXVkaW8nKTtcclxuXHJcbiAgICB2YXIgcmVzdWx0ID0gISFhdWRpb0VsZW1lbnQuY2FuUGxheVR5cGU7XHJcblxyXG4gICAgdHJ5XHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHJlc3VsdClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChhdWRpb0VsZW1lbnQuY2FuUGxheVR5cGUoJ2F1ZGlvL29nZzsgY29kZWNzPVwidm9yYmlzXCInKS5yZXBsYWNlKC9ebm8kLywgJycpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBBdWRpby5vZ2cgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoYXVkaW9FbGVtZW50LmNhblBsYXlUeXBlKCdhdWRpby9vZ2c7IGNvZGVjcz1cIm9wdXNcIicpLnJlcGxhY2UoL15ubyQvLCAnJykgfHwgYXVkaW9FbGVtZW50LmNhblBsYXlUeXBlKCdhdWRpby9vcHVzOycpLnJlcGxhY2UoL15ubyQvLCAnJykpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIEF1ZGlvLm9wdXMgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoYXVkaW9FbGVtZW50LmNhblBsYXlUeXBlKCdhdWRpby9tcGVnOycpLnJlcGxhY2UoL15ubyQvLCAnJykpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIEF1ZGlvLm1wMyA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vICBNaW1ldHlwZXMgYWNjZXB0ZWQ6XHJcbiAgICAgICAgICAgIC8vICBkZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vTWVkaWFfZm9ybWF0c19zdXBwb3J0ZWRfYnlfdGhlX2F1ZGlvX2FuZF92aWRlb19lbGVtZW50c1xyXG4gICAgICAgICAgICAvLyAgYml0Lmx5L2lwaG9uZW9zY29kZWNzXHJcbiAgICAgICAgICAgIGlmIChhdWRpb0VsZW1lbnQuY2FuUGxheVR5cGUoJ2F1ZGlvL3dhdjsgY29kZWNzPVwiMVwiJykucmVwbGFjZSgvXm5vJC8sICcnKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgQXVkaW8ud2F2ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGF1ZGlvRWxlbWVudC5jYW5QbGF5VHlwZSgnYXVkaW8veC1tNGE7JykgfHwgYXVkaW9FbGVtZW50LmNhblBsYXlUeXBlKCdhdWRpby9hYWM7JykucmVwbGFjZSgvXm5vJC8sICcnKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgQXVkaW8ubTRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGF1ZGlvRWxlbWVudC5jYW5QbGF5VHlwZSgnYXVkaW8vd2VibTsgY29kZWNzPVwidm9yYmlzXCInKS5yZXBsYWNlKC9ebm8kLywgJycpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBBdWRpby53ZWJtID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGF1ZGlvRWxlbWVudC5jYW5QbGF5VHlwZSgnYXVkaW8vbXA0O2NvZGVjcz1cImVjLTNcIicpICE9PSAnJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKEJyb3dzZXIuZWRnZSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBBdWRpby5kb2xieSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChCcm93c2VyLnNhZmFyaSAmJiBCcm93c2VyLnNhZmFyaVZlcnNpb24gPj0gOSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKC9NYWMgT1MgWCAoXFxkKylfKFxcZCspLykudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSlcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYWpvciA9IHBhcnNlSW50KFJlZ0V4cC4kMSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWlub3IgPSBwYXJzZUludChSZWdFeHAuJDIsIDEwKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobWFqb3IgPT09IDEwICYmIG1pbm9yID49IDExKSB8fCBtYWpvciA+IDEwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdWRpby5kb2xieSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSlcclxuICAgIHtcclxuICAgICAgICAvLyAgTm90aGluZyB0byBkbyBoZXJlXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIEF1ZGlvO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGluaXQoKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/device/Audio.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/device/Browser.js":
/*!***************************************************!*\
!*** ./node_modules/phaser/src/device/Browser.js ***!
\***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar OS = __webpack_require__(/*! ./OS */ \"./node_modules/phaser/src/device/OS.js\");\r\n\r\n/**\r\n * Determines the browser type and version running this Phaser Game instance.\r\n * These values are read-only and populated during the boot sequence of the game.\r\n * They are then referenced by internal game systems and are available for you to access\r\n * via `this.sys.game.device.browser` from within any Scene.\r\n * \r\n * @typedef {object} Phaser.Device.Browser\r\n * @since 3.0.0\r\n * \r\n * @property {boolean} chrome - Set to true if running in Chrome.\r\n * @property {boolean} edge - Set to true if running in Microsoft Edge browser.\r\n * @property {boolean} firefox - Set to true if running in Firefox.\r\n * @property {boolean} ie - Set to true if running in Internet Explorer 11 or less (not Edge).\r\n * @property {boolean} mobileSafari - Set to true if running in Mobile Safari.\r\n * @property {boolean} opera - Set to true if running in Opera.\r\n * @property {boolean} safari - Set to true if running in Safari.\r\n * @property {boolean} silk - Set to true if running in the Silk browser (as used on the Amazon Kindle)\r\n * @property {boolean} trident - Set to true if running a Trident version of Internet Explorer (IE11+)\r\n * @property {number} chromeVersion - If running in Chrome this will contain the major version number.\r\n * @property {number} firefoxVersion - If running in Firefox this will contain the major version number.\r\n * @property {number} ieVersion - If running in Internet Explorer this will contain the major version number. Beyond IE10 you should use Browser.trident and Browser.tridentVersion.\r\n * @property {number} safariVersion - If running in Safari this will contain the major version number.\r\n * @property {number} tridentVersion - If running in Internet Explorer 11 this will contain the major version number. See {@link http://msdn.microsoft.com/en-us/library/ie/ms537503(v=vs.85).aspx}\r\n */\r\nvar Browser = {\r\n\r\n chrome: false,\r\n chromeVersion: 0,\r\n edge: false,\r\n firefox: false,\r\n firefoxVersion: 0,\r\n ie: false,\r\n ieVersion: 0,\r\n mobileSafari: false,\r\n opera: false,\r\n safari: false,\r\n safariVersion: 0,\r\n silk: false,\r\n trident: false,\r\n tridentVersion: 0\r\n\r\n};\r\n\r\nfunction init ()\r\n{\r\n var ua = navigator.userAgent;\r\n\r\n if (/Edge\\/\\d+/.test(ua))\r\n {\r\n Browser.edge = true;\r\n }\r\n else if ((/Chrome\\/(\\d+)/).test(ua) && !OS.windowsPhone)\r\n {\r\n Browser.chrome = true;\r\n Browser.chromeVersion = parseInt(RegExp.$1, 10);\r\n }\r\n else if ((/Firefox\\D+(\\d+)/).test(ua))\r\n {\r\n Browser.firefox = true;\r\n Browser.firefoxVersion = parseInt(RegExp.$1, 10);\r\n }\r\n else if ((/AppleWebKit/).test(ua) && OS.iOS)\r\n {\r\n Browser.mobileSafari = true;\r\n }\r\n else if ((/MSIE (\\d+\\.\\d+);/).test(ua))\r\n {\r\n Browser.ie = true;\r\n Browser.ieVersion = parseInt(RegExp.$1, 10);\r\n }\r\n else if ((/Opera/).test(ua))\r\n {\r\n Browser.opera = true;\r\n }\r\n else if ((/Safari/).test(ua) && !OS.windowsPhone)\r\n {\r\n Browser.safari = true;\r\n }\r\n else if ((/Trident\\/(\\d+\\.\\d+)(.*)rv:(\\d+\\.\\d+)/).test(ua))\r\n {\r\n Browser.ie = true;\r\n Browser.trident = true;\r\n Browser.tridentVersion = parseInt(RegExp.$1, 10);\r\n Browser.ieVersion = parseInt(RegExp.$3, 10);\r\n }\r\n\r\n // Silk gets its own if clause because its ua also contains 'Safari'\r\n if ((/Silk/).test(ua))\r\n {\r\n Browser.silk = true;\r\n }\r\n\r\n return Browser;\r\n}\r\n\r\nmodule.exports = init();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kZXZpY2UvQnJvd3Nlci5qcz9hNjJhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxTQUFTLG1CQUFPLENBQUMsb0RBQU07O0FBRXZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0EsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsT0FBTztBQUNyQixjQUFjLE9BQU87QUFDckIsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsT0FBTyxzR0FBc0c7QUFDM0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGV2aWNlL0Jyb3dzZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBPUyA9IHJlcXVpcmUoJy4vT1MnKTtcclxuXHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHRoZSBicm93c2VyIHR5cGUgYW5kIHZlcnNpb24gcnVubmluZyB0aGlzIFBoYXNlciBHYW1lIGluc3RhbmNlLlxyXG4gKiBUaGVzZSB2YWx1ZXMgYXJlIHJlYWQtb25seSBhbmQgcG9wdWxhdGVkIGR1cmluZyB0aGUgYm9vdCBzZXF1ZW5jZSBvZiB0aGUgZ2FtZS5cclxuICogVGhleSBhcmUgdGhlbiByZWZlcmVuY2VkIGJ5IGludGVybmFsIGdhbWUgc3lzdGVtcyBhbmQgYXJlIGF2YWlsYWJsZSBmb3IgeW91IHRvIGFjY2Vzc1xyXG4gKiB2aWEgYHRoaXMuc3lzLmdhbWUuZGV2aWNlLmJyb3dzZXJgIGZyb20gd2l0aGluIGFueSBTY2VuZS5cclxuICogXHJcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFBoYXNlci5EZXZpY2UuQnJvd3NlclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gY2hyb21lIC0gU2V0IHRvIHRydWUgaWYgcnVubmluZyBpbiBDaHJvbWUuXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZWRnZSAtIFNldCB0byB0cnVlIGlmIHJ1bm5pbmcgaW4gTWljcm9zb2Z0IEVkZ2UgYnJvd3Nlci5cclxuICogQHByb3BlcnR5IHtib29sZWFufSBmaXJlZm94IC0gU2V0IHRvIHRydWUgaWYgcnVubmluZyBpbiBGaXJlZm94LlxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGllIC0gU2V0IHRvIHRydWUgaWYgcnVubmluZyBpbiBJbnRlcm5ldCBFeHBsb3JlciAxMSBvciBsZXNzIChub3QgRWRnZSkuXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbW9iaWxlU2FmYXJpIC0gU2V0IHRvIHRydWUgaWYgcnVubmluZyBpbiBNb2JpbGUgU2FmYXJpLlxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG9wZXJhIC0gU2V0IHRvIHRydWUgaWYgcnVubmluZyBpbiBPcGVyYS5cclxuICogQHByb3BlcnR5IHtib29sZWFufSBzYWZhcmkgLSBTZXQgdG8gdHJ1ZSBpZiBydW5uaW5nIGluIFNhZmFyaS5cclxuICogQHByb3BlcnR5IHtib29sZWFufSBzaWxrIC0gU2V0IHRvIHRydWUgaWYgcnVubmluZyBpbiB0aGUgU2lsayBicm93c2VyIChhcyB1c2VkIG9uIHRoZSBBbWF6b24gS2luZGxlKVxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHRyaWRlbnQgLSBTZXQgdG8gdHJ1ZSBpZiBydW5uaW5nIGEgVHJpZGVudCB2ZXJzaW9uIG9mIEludGVybmV0IEV4cGxvcmVyIChJRTExKylcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNocm9tZVZlcnNpb24gLSBJZiBydW5uaW5nIGluIENocm9tZSB0aGlzIHdpbGwgY29udGFpbiB0aGUgbWFqb3IgdmVyc2lvbiBudW1iZXIuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBmaXJlZm94VmVyc2lvbiAtIElmIHJ1bm5pbmcgaW4gRmlyZWZveCB0aGlzIHdpbGwgY29udGFpbiB0aGUgbWFqb3IgdmVyc2lvbiBudW1iZXIuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpZVZlcnNpb24gLSBJZiBydW5uaW5nIGluIEludGVybmV0IEV4cGxvcmVyIHRoaXMgd2lsbCBjb250YWluIHRoZSBtYWpvciB2ZXJzaW9uIG51bWJlci4gQmV5b25kIElFMTAgeW91IHNob3VsZCB1c2UgQnJvd3Nlci50cmlkZW50IGFuZCBCcm93c2VyLnRyaWRlbnRWZXJzaW9uLlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gc2FmYXJpVmVyc2lvbiAtIElmIHJ1bm5pbmcgaW4gU2FmYXJpIHRoaXMgd2lsbCBjb250YWluIHRoZSBtYWpvciB2ZXJzaW9uIG51bWJlci5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRyaWRlbnRWZXJzaW9uIC0gSWYgcnVubmluZyBpbiBJbnRlcm5ldCBFeHBsb3JlciAxMSB0aGlzIHdpbGwgY29udGFpbiB0aGUgbWFqb3IgdmVyc2lvbiBudW1iZXIuIFNlZSB7QGxpbmsgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL21zNTM3NTAzKHY9dnMuODUpLmFzcHh9XHJcbiAqL1xyXG52YXIgQnJvd3NlciA9IHtcclxuXHJcbiAgICBjaHJvbWU6IGZhbHNlLFxyXG4gICAgY2hyb21lVmVyc2lvbjogMCxcclxuICAgIGVkZ2U6IGZhbHNlLFxyXG4gICAgZmlyZWZveDogZmFsc2UsXHJcbiAgICBmaXJlZm94VmVyc2lvbjogMCxcclxuICAgIGllOiBmYWxzZSxcclxuICAgIGllVmVyc2lvbjogMCxcclxuICAgIG1vYmlsZVNhZmFyaTogZmFsc2UsXHJcbiAgICBvcGVyYTogZmFsc2UsXHJcbiAgICBzYWZhcmk6IGZhbHNlLFxyXG4gICAgc2FmYXJpVmVyc2lvbjogMCxcclxuICAgIHNpbGs6IGZhbHNlLFxyXG4gICAgdHJpZGVudDogZmFsc2UsXHJcbiAgICB0cmlkZW50VmVyc2lvbjogMFxyXG5cclxufTtcclxuXHJcbmZ1bmN0aW9uIGluaXQgKClcclxue1xyXG4gICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuXHJcbiAgICBpZiAoL0VkZ2VcXC9cXGQrLy50ZXN0KHVhKSlcclxuICAgIHtcclxuICAgICAgICBCcm93c2VyLmVkZ2UgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoKC9DaHJvbWVcXC8oXFxkKykvKS50ZXN0KHVhKSAmJiAhT1Mud2luZG93c1Bob25lKVxyXG4gICAge1xyXG4gICAgICAgIEJyb3dzZXIuY2hyb21lID0gdHJ1ZTtcclxuICAgICAgICBCcm93c2VyLmNocm9tZVZlcnNpb24gPSBwYXJzZUludChSZWdFeHAuJDEsIDEwKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCgvRmlyZWZveFxcRCsoXFxkKykvKS50ZXN0KHVhKSlcclxuICAgIHtcclxuICAgICAgICBCcm93c2VyLmZpcmVmb3ggPSB0cnVlO1xyXG4gICAgICAgIEJyb3dzZXIuZmlyZWZveFZlcnNpb24gPSBwYXJzZUludChSZWdFeHAuJDEsIDEwKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCgvQXBwbGVXZWJLaXQvKS50ZXN0KHVhKSAmJiBPUy5pT1MpXHJcbiAgICB7XHJcbiAgICAgICAgQnJvd3Nlci5tb2JpbGVTYWZhcmkgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoKC9NU0lFIChcXGQrXFwuXFxkKyk7LykudGVzdCh1YSkpXHJcbiAgICB7XHJcbiAgICAgICAgQnJvd3Nlci5pZSA9IHRydWU7XHJcbiAgICAgICAgQnJvd3Nlci5pZVZlcnNpb24gPSBwYXJzZUludChSZWdFeHAuJDEsIDEwKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCgvT3BlcmEvKS50ZXN0KHVhKSlcclxuICAgIHtcclxuICAgICAgICBCcm93c2VyLm9wZXJhID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCgvU2FmYXJpLykudGVzdCh1YSkgJiYgIU9TLndpbmRvd3NQaG9uZSlcclxuICAgIHtcclxuICAgICAgICBCcm93c2VyLnNhZmFyaSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgoL1RyaWRlbnRcXC8oXFxkK1xcLlxcZCspKC4qKXJ2OihcXGQrXFwuXFxkKykvKS50ZXN0KHVhKSlcclxuICAgIHtcclxuICAgICAgICBCcm93c2VyLmllID0gdHJ1ZTtcclxuICAgICAgICBCcm93c2VyLnRyaWRlbnQgPSB0cnVlO1xyXG4gICAgICAgIEJyb3dzZXIudHJpZGVudFZlcnNpb24gPSBwYXJzZUludChSZWdFeHAuJDEsIDEwKTtcclxuICAgICAgICBCcm93c2VyLmllVmVyc2lvbiA9IHBhcnNlSW50KFJlZ0V4cC4kMywgMTApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBTaWxrIGdldHMgaXRzIG93biBpZiBjbGF1c2UgYmVjYXVzZSBpdHMgdWEgYWxzbyBjb250YWlucyAnU2FmYXJpJ1xyXG4gICAgaWYgKCgvU2lsay8pLnRlc3QodWEpKVxyXG4gICAge1xyXG4gICAgICAgIEJyb3dzZXIuc2lsayA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIEJyb3dzZXI7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gaW5pdCgpO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/device/Browser.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/device/CanvasFeatures.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/device/CanvasFeatures.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CanvasPool = __webpack_require__(/*! ../display/canvas/CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\");\r\n\r\n/**\r\n * Determines the canvas features of the browser running this Phaser Game instance.\r\n * These values are read-only and populated during the boot sequence of the game.\r\n * They are then referenced by internal game systems and are available for you to access\r\n * via `this.sys.game.device.canvasFeatures` from within any Scene.\r\n * \r\n * @typedef {object} Phaser.Device.CanvasFeatures\r\n * @since 3.0.0\r\n * \r\n * @property {boolean} supportInverseAlpha - Set to true if the browser supports inversed alpha.\r\n * @property {boolean} supportNewBlendModes - Set to true if the browser supports new canvas blend modes.\r\n */\r\nvar CanvasFeatures = {\r\n\r\n supportInverseAlpha: false,\r\n supportNewBlendModes: false\r\n\r\n};\r\n\r\nfunction checkBlendMode ()\r\n{\r\n var pngHead = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/';\r\n var pngEnd = 'AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==';\r\n\r\n var magenta = new Image();\r\n\r\n magenta.onload = function ()\r\n {\r\n var yellow = new Image();\r\n\r\n yellow.onload = function ()\r\n {\r\n var canvas = CanvasPool.create(yellow, 6, 1);\r\n var context = canvas.getContext('2d');\r\n\r\n context.globalCompositeOperation = 'multiply';\r\n\r\n context.drawImage(magenta, 0, 0);\r\n context.drawImage(yellow, 2, 0);\r\n\r\n if (!context.getImageData(2, 0, 1, 1))\r\n {\r\n return false;\r\n }\r\n\r\n var data = context.getImageData(2, 0, 1, 1).data;\r\n\r\n CanvasPool.remove(yellow);\r\n\r\n CanvasFeatures.supportNewBlendModes = (data[0] === 255 && data[1] === 0 && data[2] === 0);\r\n };\r\n\r\n yellow.src = pngHead + '/wCKxvRF' + pngEnd;\r\n };\r\n\r\n magenta.src = pngHead + 'AP804Oa6' + pngEnd;\r\n\r\n return false;\r\n}\r\n\r\nfunction checkInverseAlpha ()\r\n{\r\n var canvas = CanvasPool.create(this, 2, 1);\r\n var context = canvas.getContext('2d');\r\n\r\n context.fillStyle = 'rgba(10, 20, 30, 0.5)';\r\n\r\n // Draw a single pixel\r\n context.fillRect(0, 0, 1, 1);\r\n\r\n // Get the color values\r\n var s1 = context.getImageData(0, 0, 1, 1);\r\n\r\n if (s1 === null)\r\n {\r\n return false;\r\n }\r\n\r\n // Plot them to x2\r\n context.putImageData(s1, 1, 0);\r\n\r\n // Get those values\r\n var s2 = context.getImageData(1, 0, 1, 1);\r\n\r\n // Compare and return\r\n return (s2.data[0] === s1.data[0] && s2.data[1] === s1.data[1] && s2.data[2] === s1.data[2] && s2.data[3] === s1.data[3]);\r\n}\r\n\r\nfunction init ()\r\n{\r\n if (document !== undefined)\r\n {\r\n CanvasFeatures.supportNewBlendModes = checkBlendMode();\r\n CanvasFeatures.supportInverseAlpha = checkInverseAlpha();\r\n }\r\n\r\n return CanvasFeatures;\r\n}\r\n\r\nmodule.exports = init();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kZXZpY2UvQ2FudmFzRmVhdHVyZXMuanM/ZTgxMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsNEZBQThCOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2RldmljZS9DYW52YXNGZWF0dXJlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENhbnZhc1Bvb2wgPSByZXF1aXJlKCcuLi9kaXNwbGF5L2NhbnZhcy9DYW52YXNQb29sJyk7XHJcblxyXG4vKipcclxuICogRGV0ZXJtaW5lcyB0aGUgY2FudmFzIGZlYXR1cmVzIG9mIHRoZSBicm93c2VyIHJ1bm5pbmcgdGhpcyBQaGFzZXIgR2FtZSBpbnN0YW5jZS5cclxuICogVGhlc2UgdmFsdWVzIGFyZSByZWFkLW9ubHkgYW5kIHBvcHVsYXRlZCBkdXJpbmcgdGhlIGJvb3Qgc2VxdWVuY2Ugb2YgdGhlIGdhbWUuXHJcbiAqIFRoZXkgYXJlIHRoZW4gcmVmZXJlbmNlZCBieSBpbnRlcm5hbCBnYW1lIHN5c3RlbXMgYW5kIGFyZSBhdmFpbGFibGUgZm9yIHlvdSB0byBhY2Nlc3NcclxuICogdmlhIGB0aGlzLnN5cy5nYW1lLmRldmljZS5jYW52YXNGZWF0dXJlc2AgZnJvbSB3aXRoaW4gYW55IFNjZW5lLlxyXG4gKiBcclxuICogQHR5cGVkZWYge29iamVjdH0gUGhhc2VyLkRldmljZS5DYW52YXNGZWF0dXJlc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc3VwcG9ydEludmVyc2VBbHBoYSAtIFNldCB0byB0cnVlIGlmIHRoZSBicm93c2VyIHN1cHBvcnRzIGludmVyc2VkIGFscGhhLlxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHN1cHBvcnROZXdCbGVuZE1vZGVzIC0gU2V0IHRvIHRydWUgaWYgdGhlIGJyb3dzZXIgc3VwcG9ydHMgbmV3IGNhbnZhcyBibGVuZCBtb2Rlcy5cclxuICovXHJcbnZhciBDYW52YXNGZWF0dXJlcyA9IHtcclxuXHJcbiAgICBzdXBwb3J0SW52ZXJzZUFscGhhOiBmYWxzZSxcclxuICAgIHN1cHBvcnROZXdCbGVuZE1vZGVzOiBmYWxzZVxyXG5cclxufTtcclxuXHJcbmZ1bmN0aW9uIGNoZWNrQmxlbmRNb2RlICgpXHJcbntcclxuICAgIHZhciBwbmdIZWFkID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVFBQUFBQkFRTUFBQUREOHAyT0FBQUFBMUJNVkVYLyc7XHJcbiAgICB2YXIgcG5nRW5kID0gJ0FBQUFDa2xFUVZRSTEyTmdBQUFBQWdBQjRpRzhNd0FBQUFCSlJVNUVya0pnZ2c9PSc7XHJcblxyXG4gICAgdmFyIG1hZ2VudGEgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICBtYWdlbnRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHllbGxvdyA9IG5ldyBJbWFnZSgpO1xyXG5cclxuICAgICAgICB5ZWxsb3cub25sb2FkID0gZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjYW52YXMgPSBDYW52YXNQb29sLmNyZWF0ZSh5ZWxsb3csIDYsIDEpO1xyXG4gICAgICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG5cclxuICAgICAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xyXG5cclxuICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UobWFnZW50YSwgMCwgMCk7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKHllbGxvdywgMiwgMCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNvbnRleHQuZ2V0SW1hZ2VEYXRhKDIsIDAsIDEsIDEpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMiwgMCwgMSwgMSkuZGF0YTtcclxuXHJcbiAgICAgICAgICAgIENhbnZhc1Bvb2wucmVtb3ZlKHllbGxvdyk7XHJcblxyXG4gICAgICAgICAgICBDYW52YXNGZWF0dXJlcy5zdXBwb3J0TmV3QmxlbmRNb2RlcyA9IChkYXRhWzBdID09PSAyNTUgJiYgZGF0YVsxXSA9PT0gMCAmJiBkYXRhWzJdID09PSAwKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB5ZWxsb3cuc3JjID0gcG5nSGVhZCArICcvd0NLeHZSRicgKyBwbmdFbmQ7XHJcbiAgICB9O1xyXG5cclxuICAgIG1hZ2VudGEuc3JjID0gcG5nSGVhZCArICdBUDgwNE9hNicgKyBwbmdFbmQ7XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjaGVja0ludmVyc2VBbHBoYSAoKVxyXG57XHJcbiAgICB2YXIgY2FudmFzID0gQ2FudmFzUG9vbC5jcmVhdGUodGhpcywgMiwgMSk7XHJcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG5cclxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJ3JnYmEoMTAsIDIwLCAzMCwgMC41KSc7XHJcblxyXG4gICAgLy8gIERyYXcgYSBzaW5nbGUgcGl4ZWxcclxuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgMSwgMSk7XHJcblxyXG4gICAgLy8gIEdldCB0aGUgY29sb3IgdmFsdWVzXHJcbiAgICB2YXIgczEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCAxLCAxKTtcclxuXHJcbiAgICBpZiAoczEgPT09IG51bGwpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBQbG90IHRoZW0gdG8geDJcclxuICAgIGNvbnRleHQucHV0SW1hZ2VEYXRhKHMxLCAxLCAwKTtcclxuXHJcbiAgICAvLyAgR2V0IHRob3NlIHZhbHVlc1xyXG4gICAgdmFyIHMyID0gY29udGV4dC5nZXRJbWFnZURhdGEoMSwgMCwgMSwgMSk7XHJcblxyXG4gICAgLy8gIENvbXBhcmUgYW5kIHJldHVyblxyXG4gICAgcmV0dXJuIChzMi5kYXRhWzBdID09PSBzMS5kYXRhWzBdICYmIHMyLmRhdGFbMV0gPT09IHMxLmRhdGFbMV0gJiYgczIuZGF0YVsyXSA9PT0gczEuZGF0YVsyXSAmJiBzMi5kYXRhWzNdID09PSBzMS5kYXRhWzNdKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5pdCAoKVxyXG57XHJcbiAgICBpZiAoZG9jdW1lbnQgIT09IHVuZGVmaW5lZClcclxuICAgIHtcclxuICAgICAgICBDYW52YXNGZWF0dXJlcy5zdXBwb3J0TmV3QmxlbmRNb2RlcyA9IGNoZWNrQmxlbmRNb2RlKCk7XHJcbiAgICAgICAgQ2FudmFzRmVhdHVyZXMuc3VwcG9ydEludmVyc2VBbHBoYSA9IGNoZWNrSW52ZXJzZUFscGhhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIENhbnZhc0ZlYXR1cmVzO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGluaXQoKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/device/CanvasFeatures.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/device/Features.js":
/*!****************************************************!*\
!*** ./node_modules/phaser/src/device/Features.js ***!
\****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar OS = __webpack_require__(/*! ./OS */ \"./node_modules/phaser/src/device/OS.js\");\r\nvar Browser = __webpack_require__(/*! ./Browser */ \"./node_modules/phaser/src/device/Browser.js\");\r\nvar CanvasPool = __webpack_require__(/*! ../display/canvas/CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\");\r\n\r\n/**\r\n * Determines the features of the browser running this Phaser Game instance.\r\n * These values are read-only and populated during the boot sequence of the game.\r\n * They are then referenced by internal game systems and are available for you to access\r\n * via `this.sys.game.device.features` from within any Scene.\r\n * \r\n * @typedef {object} Phaser.Device.Features\r\n * @since 3.0.0\r\n * \r\n * @property {?boolean} canvasBitBltShift - True if canvas supports a 'copy' bitblt onto itself when the source and destination regions overlap.\r\n * @property {boolean} canvas - Is canvas available?\r\n * @property {boolean} file - Is file available?\r\n * @property {boolean} fileSystem - Is fileSystem available?\r\n * @property {boolean} getUserMedia - Does the device support the getUserMedia API?\r\n * @property {boolean} littleEndian - Is the device big or little endian? (only detected if the browser supports TypedArrays)\r\n * @property {boolean} localStorage - Is localStorage available?\r\n * @property {boolean} pointerLock - Is Pointer Lock available?\r\n * @property {boolean} support32bit - Does the device context support 32bit pixel manipulation using array buffer views?\r\n * @property {boolean} vibration - Does the device support the Vibration API?\r\n * @property {boolean} webGL - Is webGL available?\r\n * @property {boolean} worker - Is worker available?\r\n */\r\nvar Features = {\r\n\r\n canvas: false,\r\n canvasBitBltShift: null,\r\n file: false,\r\n fileSystem: false,\r\n getUserMedia: true,\r\n littleEndian: false,\r\n localStorage: false,\r\n pointerLock: false,\r\n support32bit: false,\r\n vibration: false,\r\n webGL: false,\r\n worker: false\r\n\r\n};\r\n\r\n// Check Little or Big Endian system.\r\n// @author Matt DesLauriers (@mattdesl)\r\nfunction checkIsLittleEndian ()\r\n{\r\n var a = new ArrayBuffer(4);\r\n var b = new Uint8Array(a);\r\n var c = new Uint32Array(a);\r\n\r\n b[0] = 0xa1;\r\n b[1] = 0xb2;\r\n b[2] = 0xc3;\r\n b[3] = 0xd4;\r\n\r\n if (c[0] === 0xd4c3b2a1)\r\n {\r\n return true;\r\n }\r\n\r\n if (c[0] === 0xa1b2c3d4)\r\n {\r\n return false;\r\n }\r\n else\r\n {\r\n // Could not determine endianness\r\n return null;\r\n }\r\n}\r\n\r\nfunction init ()\r\n{\r\n Features.canvas = !!window['CanvasRenderingContext2D'];\r\n\r\n try\r\n {\r\n Features.localStorage = !!localStorage.getItem;\r\n }\r\n catch (error)\r\n {\r\n Features.localStorage = false;\r\n }\r\n\r\n Features.file = !!window['File'] && !!window['FileReader'] && !!window['FileList'] && !!window['Blob'];\r\n Features.fileSystem = !!window['requestFileSystem'];\r\n\r\n var isUint8 = false;\r\n\r\n var testWebGL = function ()\r\n {\r\n if (window['WebGLRenderingContext'])\r\n {\r\n try\r\n {\r\n var canvas = CanvasPool.createWebGL(this);\r\n\r\n var ctx = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\r\n\r\n var canvas2D = CanvasPool.create2D(this);\r\n\r\n var ctx2D = canvas2D.getContext('2d');\r\n\r\n // Can't be done on a webgl context\r\n var image = ctx2D.createImageData(1, 1);\r\n\r\n // Test to see if ImageData uses CanvasPixelArray or Uint8ClampedArray.\r\n // @author Matt DesLauriers (@mattdesl)\r\n isUint8 = image.data instanceof Uint8ClampedArray;\r\n\r\n CanvasPool.remove(canvas);\r\n CanvasPool.remove(canvas2D);\r\n\r\n return !!ctx;\r\n }\r\n catch (e)\r\n {\r\n return false;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n Features.webGL = testWebGL();\r\n\r\n Features.worker = !!window['Worker'];\r\n\r\n Features.pointerLock = 'pointerLockElement' in document || 'mozPointerLockElement' in document || 'webkitPointerLockElement' in document;\r\n\r\n navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia || navigator.oGetUserMedia;\r\n\r\n window.URL = window.URL || window.webkitURL || window.mozURL || window.msURL;\r\n\r\n Features.getUserMedia = Features.getUserMedia && !!navigator.getUserMedia && !!window.URL;\r\n\r\n // Older versions of firefox (< 21) apparently claim support but user media does not actually work\r\n if (Browser.firefox && Browser.firefoxVersion < 21)\r\n {\r\n Features.getUserMedia = false;\r\n }\r\n\r\n // Excludes iOS versions as they generally wrap UIWebView (eg. Safari WebKit) and it\r\n // is safer to not try and use the fast copy-over method.\r\n if (!OS.iOS && (Browser.ie || Browser.firefox || Browser.chrome))\r\n {\r\n Features.canvasBitBltShift = true;\r\n }\r\n\r\n // Known not to work\r\n if (Browser.safari || Browser.mobileSafari)\r\n {\r\n Features.canvasBitBltShift = false;\r\n }\r\n\r\n navigator.vibrate = navigator.vibrate || navigator.webkitVibrate || navigator.mozVibrate || navigator.msVibrate;\r\n\r\n if (navigator.vibrate)\r\n {\r\n Features.vibration = true;\r\n }\r\n\r\n if (typeof ArrayBuffer !== 'undefined' && typeof Uint8Array !== 'undefined' && typeof Uint32Array !== 'undefined')\r\n {\r\n Features.littleEndian = checkIsLittleEndian();\r\n }\r\n\r\n Features.support32bit = (\r\n typeof ArrayBuffer !== 'undefined' &&\r\n typeof Uint8ClampedArray !== 'undefined' &&\r\n typeof Int32Array !== 'undefined' &&\r\n Features.littleEndian !== null &&\r\n isUint8\r\n );\r\n\r\n return Features;\r\n}\r\n\r\nmodule.exports = init();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kZXZpY2UvRmVhdHVyZXMuanM/MmJjYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsU0FBUyxtQkFBTyxDQUFDLG9EQUFNO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyw4REFBVztBQUNqQyxpQkFBaUIsbUJBQU8sQ0FBQyw0RkFBOEI7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0EsY0FBYyxTQUFTO0FBQ3ZCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGV2aWNlL0ZlYXR1cmVzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgT1MgPSByZXF1aXJlKCcuL09TJyk7XHJcbnZhciBCcm93c2VyID0gcmVxdWlyZSgnLi9Ccm93c2VyJyk7XHJcbnZhciBDYW52YXNQb29sID0gcmVxdWlyZSgnLi4vZGlzcGxheS9jYW52YXMvQ2FudmFzUG9vbCcpO1xyXG5cclxuLyoqXHJcbiAqIERldGVybWluZXMgdGhlIGZlYXR1cmVzIG9mIHRoZSBicm93c2VyIHJ1bm5pbmcgdGhpcyBQaGFzZXIgR2FtZSBpbnN0YW5jZS5cclxuICogVGhlc2UgdmFsdWVzIGFyZSByZWFkLW9ubHkgYW5kIHBvcHVsYXRlZCBkdXJpbmcgdGhlIGJvb3Qgc2VxdWVuY2Ugb2YgdGhlIGdhbWUuXHJcbiAqIFRoZXkgYXJlIHRoZW4gcmVmZXJlbmNlZCBieSBpbnRlcm5hbCBnYW1lIHN5c3RlbXMgYW5kIGFyZSBhdmFpbGFibGUgZm9yIHlvdSB0byBhY2Nlc3NcclxuICogdmlhIGB0aGlzLnN5cy5nYW1lLmRldmljZS5mZWF0dXJlc2AgZnJvbSB3aXRoaW4gYW55IFNjZW5lLlxyXG4gKiBcclxuICogQHR5cGVkZWYge29iamVjdH0gUGhhc2VyLkRldmljZS5GZWF0dXJlc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwcm9wZXJ0eSB7P2Jvb2xlYW59IGNhbnZhc0JpdEJsdFNoaWZ0IC0gVHJ1ZSBpZiBjYW52YXMgc3VwcG9ydHMgYSAnY29weScgYml0Ymx0IG9udG8gaXRzZWxmIHdoZW4gdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcmVnaW9ucyBvdmVybGFwLlxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGNhbnZhcyAtIElzIGNhbnZhcyBhdmFpbGFibGU/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmlsZSAtIElzIGZpbGUgYXZhaWxhYmxlP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGZpbGVTeXN0ZW0gLSBJcyBmaWxlU3lzdGVtIGF2YWlsYWJsZT9cclxuICogQHByb3BlcnR5IHtib29sZWFufSBnZXRVc2VyTWVkaWEgLSBEb2VzIHRoZSBkZXZpY2Ugc3VwcG9ydCB0aGUgZ2V0VXNlck1lZGlhIEFQST9cclxuICogQHByb3BlcnR5IHtib29sZWFufSBsaXR0bGVFbmRpYW4gLSBJcyB0aGUgZGV2aWNlIGJpZyBvciBsaXR0bGUgZW5kaWFuPyAob25seSBkZXRlY3RlZCBpZiB0aGUgYnJvd3NlciBzdXBwb3J0cyBUeXBlZEFycmF5cylcclxuICogQHByb3BlcnR5IHtib29sZWFufSBsb2NhbFN0b3JhZ2UgLSBJcyBsb2NhbFN0b3JhZ2UgYXZhaWxhYmxlP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBvaW50ZXJMb2NrIC0gSXMgUG9pbnRlciBMb2NrIGF2YWlsYWJsZT9cclxuICogQHByb3BlcnR5IHtib29sZWFufSBzdXBwb3J0MzJiaXQgLSBEb2VzIHRoZSBkZXZpY2UgY29udGV4dCBzdXBwb3J0IDMyYml0IHBpeGVsIG1hbmlwdWxhdGlvbiB1c2luZyBhcnJheSBidWZmZXIgdmlld3M/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdmlicmF0aW9uIC0gRG9lcyB0aGUgZGV2aWNlIHN1cHBvcnQgdGhlIFZpYnJhdGlvbiBBUEk/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gd2ViR0wgLSBJcyB3ZWJHTCBhdmFpbGFibGU/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gd29ya2VyIC0gSXMgd29ya2VyIGF2YWlsYWJsZT9cclxuICovXHJcbnZhciBGZWF0dXJlcyA9IHtcclxuXHJcbiAgICBjYW52YXM6IGZhbHNlLFxyXG4gICAgY2FudmFzQml0Qmx0U2hpZnQ6IG51bGwsXHJcbiAgICBmaWxlOiBmYWxzZSxcclxuICAgIGZpbGVTeXN0ZW06IGZhbHNlLFxyXG4gICAgZ2V0VXNlck1lZGlhOiB0cnVlLFxyXG4gICAgbGl0dGxlRW5kaWFuOiBmYWxzZSxcclxuICAgIGxvY2FsU3RvcmFnZTogZmFsc2UsXHJcbiAgICBwb2ludGVyTG9jazogZmFsc2UsXHJcbiAgICBzdXBwb3J0MzJiaXQ6IGZhbHNlLFxyXG4gICAgdmlicmF0aW9uOiBmYWxzZSxcclxuICAgIHdlYkdMOiBmYWxzZSxcclxuICAgIHdvcmtlcjogZmFsc2VcclxuXHJcbn07XHJcblxyXG4vLyBDaGVjayBMaXR0bGUgb3IgQmlnIEVuZGlhbiBzeXN0ZW0uXHJcbi8vIEBhdXRob3IgTWF0dCBEZXNMYXVyaWVycyAoQG1hdHRkZXNsKVxyXG5mdW5jdGlvbiBjaGVja0lzTGl0dGxlRW5kaWFuICgpXHJcbntcclxuICAgIHZhciBhID0gbmV3IEFycmF5QnVmZmVyKDQpO1xyXG4gICAgdmFyIGIgPSBuZXcgVWludDhBcnJheShhKTtcclxuICAgIHZhciBjID0gbmV3IFVpbnQzMkFycmF5KGEpO1xyXG5cclxuICAgIGJbMF0gPSAweGExO1xyXG4gICAgYlsxXSA9IDB4YjI7XHJcbiAgICBiWzJdID0gMHhjMztcclxuICAgIGJbM10gPSAweGQ0O1xyXG5cclxuICAgIGlmIChjWzBdID09PSAweGQ0YzNiMmExKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjWzBdID09PSAweGExYjJjM2Q0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICAvLyAgQ291bGQgbm90IGRldGVybWluZSBlbmRpYW5uZXNzXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluaXQgKClcclxue1xyXG4gICAgRmVhdHVyZXMuY2FudmFzID0gISF3aW5kb3dbJ0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCddO1xyXG5cclxuICAgIHRyeVxyXG4gICAge1xyXG4gICAgICAgIEZlYXR1cmVzLmxvY2FsU3RvcmFnZSA9ICEhbG9jYWxTdG9yYWdlLmdldEl0ZW07XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpXHJcbiAgICB7XHJcbiAgICAgICAgRmVhdHVyZXMubG9jYWxTdG9yYWdlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgRmVhdHVyZXMuZmlsZSA9ICEhd2luZG93WydGaWxlJ10gJiYgISF3aW5kb3dbJ0ZpbGVSZWFkZXInXSAmJiAhIXdpbmRvd1snRmlsZUxpc3QnXSAmJiAhIXdpbmRvd1snQmxvYiddO1xyXG4gICAgRmVhdHVyZXMuZmlsZVN5c3RlbSA9ICEhd2luZG93WydyZXF1ZXN0RmlsZVN5c3RlbSddO1xyXG5cclxuICAgIHZhciBpc1VpbnQ4ID0gZmFsc2U7XHJcblxyXG4gICAgdmFyIHRlc3RXZWJHTCA9IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHdpbmRvd1snV2ViR0xSZW5kZXJpbmdDb250ZXh0J10pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0cnlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNhbnZhcyA9IENhbnZhc1Bvb2wuY3JlYXRlV2ViR0wodGhpcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgY2FudmFzMkQgPSBDYW52YXNQb29sLmNyZWF0ZTJEKHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBjdHgyRCA9IGNhbnZhczJELmdldENvbnRleHQoJzJkJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIENhbid0IGJlIGRvbmUgb24gYSB3ZWJnbCBjb250ZXh0XHJcbiAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSBjdHgyRC5jcmVhdGVJbWFnZURhdGEoMSwgMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIFRlc3QgdG8gc2VlIGlmIEltYWdlRGF0YSB1c2VzIENhbnZhc1BpeGVsQXJyYXkgb3IgVWludDhDbGFtcGVkQXJyYXkuXHJcbiAgICAgICAgICAgICAgICAvLyAgQGF1dGhvciBNYXR0IERlc0xhdXJpZXJzIChAbWF0dGRlc2wpXHJcbiAgICAgICAgICAgICAgICBpc1VpbnQ4ID0gaW1hZ2UuZGF0YSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5O1xyXG5cclxuICAgICAgICAgICAgICAgIENhbnZhc1Bvb2wucmVtb3ZlKGNhbnZhcyk7XHJcbiAgICAgICAgICAgICAgICBDYW52YXNQb29sLnJlbW92ZShjYW52YXMyRCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICEhY3R4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH07XHJcblxyXG4gICAgRmVhdHVyZXMud2ViR0wgPSB0ZXN0V2ViR0woKTtcclxuXHJcbiAgICBGZWF0dXJlcy53b3JrZXIgPSAhIXdpbmRvd1snV29ya2VyJ107XHJcblxyXG4gICAgRmVhdHVyZXMucG9pbnRlckxvY2sgPSAncG9pbnRlckxvY2tFbGVtZW50JyBpbiBkb2N1bWVudCB8fCAnbW96UG9pbnRlckxvY2tFbGVtZW50JyBpbiBkb2N1bWVudCB8fCAnd2Via2l0UG9pbnRlckxvY2tFbGVtZW50JyBpbiBkb2N1bWVudDtcclxuXHJcbiAgICBuYXZpZ2F0b3IuZ2V0VXNlck1lZGlhID0gbmF2aWdhdG9yLmdldFVzZXJNZWRpYSB8fCBuYXZpZ2F0b3Iud2Via2l0R2V0VXNlck1lZGlhIHx8IG5hdmlnYXRvci5tb3pHZXRVc2VyTWVkaWEgfHwgbmF2aWdhdG9yLm1zR2V0VXNlck1lZGlhIHx8IG5hdmlnYXRvci5vR2V0VXNlck1lZGlhO1xyXG5cclxuICAgIHdpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkwgfHwgd2luZG93Lm1velVSTCB8fCB3aW5kb3cubXNVUkw7XHJcblxyXG4gICAgRmVhdHVyZXMuZ2V0VXNlck1lZGlhID0gRmVhdHVyZXMuZ2V0VXNlck1lZGlhICYmICEhbmF2aWdhdG9yLmdldFVzZXJNZWRpYSAmJiAhIXdpbmRvdy5VUkw7XHJcblxyXG4gICAgLy8gT2xkZXIgdmVyc2lvbnMgb2YgZmlyZWZveCAoPCAyMSkgYXBwYXJlbnRseSBjbGFpbSBzdXBwb3J0IGJ1dCB1c2VyIG1lZGlhIGRvZXMgbm90IGFjdHVhbGx5IHdvcmtcclxuICAgIGlmIChCcm93c2VyLmZpcmVmb3ggJiYgQnJvd3Nlci5maXJlZm94VmVyc2lvbiA8IDIxKVxyXG4gICAge1xyXG4gICAgICAgIEZlYXR1cmVzLmdldFVzZXJNZWRpYSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEV4Y2x1ZGVzIGlPUyB2ZXJzaW9ucyBhcyB0aGV5IGdlbmVyYWxseSB3cmFwIFVJV2ViVmlldyAoZWcuIFNhZmFyaSBXZWJLaXQpIGFuZCBpdFxyXG4gICAgLy8gaXMgc2FmZXIgdG8gbm90IHRyeSBhbmQgdXNlIHRoZSBmYXN0IGNvcHktb3ZlciBtZXRob2QuXHJcbiAgICBpZiAoIU9TLmlPUyAmJiAoQnJvd3Nlci5pZSB8fCBCcm93c2VyLmZpcmVmb3ggfHwgQnJvd3Nlci5jaHJvbWUpKVxyXG4gICAge1xyXG4gICAgICAgIEZlYXR1cmVzLmNhbnZhc0JpdEJsdFNoaWZ0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBLbm93biBub3QgdG8gd29ya1xyXG4gICAgaWYgKEJyb3dzZXIuc2FmYXJpIHx8IEJyb3dzZXIubW9iaWxlU2FmYXJpKVxyXG4gICAge1xyXG4gICAgICAgIEZlYXR1cmVzLmNhbnZhc0JpdEJsdFNoaWZ0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbmF2aWdhdG9yLnZpYnJhdGUgPSBuYXZpZ2F0b3IudmlicmF0ZSB8fCBuYXZpZ2F0b3Iud2Via2l0VmlicmF0ZSB8fCBuYXZpZ2F0b3IubW96VmlicmF0ZSB8fCBuYXZpZ2F0b3IubXNWaWJyYXRlO1xyXG5cclxuICAgIGlmIChuYXZpZ2F0b3IudmlicmF0ZSlcclxuICAgIHtcclxuICAgICAgICBGZWF0dXJlcy52aWJyYXRpb24gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgVWludDMyQXJyYXkgIT09ICd1bmRlZmluZWQnKVxyXG4gICAge1xyXG4gICAgICAgIEZlYXR1cmVzLmxpdHRsZUVuZGlhbiA9IGNoZWNrSXNMaXR0bGVFbmRpYW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBGZWF0dXJlcy5zdXBwb3J0MzJiaXQgPSAoXHJcbiAgICAgICAgdHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxyXG4gICAgICAgIHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiZcclxuICAgICAgICB0eXBlb2YgSW50MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiZcclxuICAgICAgICBGZWF0dXJlcy5saXR0bGVFbmRpYW4gIT09IG51bGwgJiZcclxuICAgICAgICBpc1VpbnQ4XHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBGZWF0dXJlcztcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBpbml0KCk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/device/Features.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/device/Fullscreen.js":
/*!******************************************************!*\
!*** ./node_modules/phaser/src/device/Fullscreen.js ***!
\******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Determines the full screen support of the browser running this Phaser Game instance.\r\n * These values are read-only and populated during the boot sequence of the game.\r\n * They are then referenced by internal game systems and are available for you to access\r\n * via `this.sys.game.device.fullscreen` from within any Scene.\r\n * \r\n * @typedef {object} Phaser.Device.Fullscreen\r\n * @since 3.0.0\r\n * \r\n * @property {boolean} available - Does the browser support the Full Screen API?\r\n * @property {boolean} keyboard - Does the browser support access to the Keyboard during Full Screen mode?\r\n * @property {string} cancel - If the browser supports the Full Screen API this holds the call you need to use to cancel it.\r\n * @property {string} request - If the browser supports the Full Screen API this holds the call you need to use to activate it.\r\n */\r\nvar Fullscreen = {\r\n\r\n available: false,\r\n cancel: '',\r\n keyboard: false,\r\n request: ''\r\n\r\n};\r\n\r\n/**\r\n* Checks for support of the Full Screen API.\r\n* \r\n* @ignore\r\n*/\r\nfunction init ()\r\n{\r\n var i;\r\n\r\n var suffix1 = 'Fullscreen';\r\n var suffix2 = 'FullScreen';\r\n\r\n var fs = [\r\n 'request' + suffix1,\r\n 'request' + suffix2,\r\n 'webkitRequest' + suffix1,\r\n 'webkitRequest' + suffix2,\r\n 'msRequest' + suffix1,\r\n 'msRequest' + suffix2,\r\n 'mozRequest' + suffix2,\r\n 'mozRequest' + suffix1\r\n ];\r\n\r\n for (i = 0; i < fs.length; i++)\r\n {\r\n if (document.documentElement[fs[i]])\r\n {\r\n Fullscreen.available = true;\r\n Fullscreen.request = fs[i];\r\n break;\r\n }\r\n }\r\n\r\n var cfs = [\r\n 'cancel' + suffix2,\r\n 'exit' + suffix1,\r\n 'webkitCancel' + suffix2,\r\n 'webkitExit' + suffix1,\r\n 'msCancel' + suffix2,\r\n 'msExit' + suffix1,\r\n 'mozCancel' + suffix2,\r\n 'mozExit' + suffix1\r\n ];\r\n\r\n if (Fullscreen.available)\r\n {\r\n for (i = 0; i < cfs.length; i++)\r\n {\r\n if (document[cfs[i]])\r\n {\r\n Fullscreen.cancel = cfs[i];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Keyboard Input?\r\n // Safari 5.1 says it supports fullscreen keyboard, but is lying.\r\n if (window['Element'] && Element['ALLOW_KEYBOARD_INPUT'] && !(/ Version\\/5\\.1(?:\\.\\d+)? Safari\\//).test(navigator.userAgent))\r\n {\r\n Fullscreen.keyboard = true;\r\n }\r\n\r\n Object.defineProperty(Fullscreen, 'active', { get: function () { return !!(document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement); } });\r\n\r\n return Fullscreen;\r\n}\r\n\r\nmodule.exports = init();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kZXZpY2UvRnVsbHNjcmVlbi5qcz9kZjAyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsT0FBTztBQUNyQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLGVBQWU7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CLGdCQUFnQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpREFBaUQsbUJBQW1CLDRJQUE0SSxFQUFFLEVBQUU7O0FBRXBOO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kZXZpY2UvRnVsbHNjcmVlbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIERldGVybWluZXMgdGhlIGZ1bGwgc2NyZWVuIHN1cHBvcnQgb2YgdGhlIGJyb3dzZXIgcnVubmluZyB0aGlzIFBoYXNlciBHYW1lIGluc3RhbmNlLlxyXG4gKiBUaGVzZSB2YWx1ZXMgYXJlIHJlYWQtb25seSBhbmQgcG9wdWxhdGVkIGR1cmluZyB0aGUgYm9vdCBzZXF1ZW5jZSBvZiB0aGUgZ2FtZS5cclxuICogVGhleSBhcmUgdGhlbiByZWZlcmVuY2VkIGJ5IGludGVybmFsIGdhbWUgc3lzdGVtcyBhbmQgYXJlIGF2YWlsYWJsZSBmb3IgeW91IHRvIGFjY2Vzc1xyXG4gKiB2aWEgYHRoaXMuc3lzLmdhbWUuZGV2aWNlLmZ1bGxzY3JlZW5gIGZyb20gd2l0aGluIGFueSBTY2VuZS5cclxuICogXHJcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFBoYXNlci5EZXZpY2UuRnVsbHNjcmVlblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYXZhaWxhYmxlIC0gRG9lcyB0aGUgYnJvd3NlciBzdXBwb3J0IHRoZSBGdWxsIFNjcmVlbiBBUEk/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0ga2V5Ym9hcmQgLSBEb2VzIHRoZSBicm93c2VyIHN1cHBvcnQgYWNjZXNzIHRvIHRoZSBLZXlib2FyZCBkdXJpbmcgRnVsbCBTY3JlZW4gbW9kZT9cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNhbmNlbCAtIElmIHRoZSBicm93c2VyIHN1cHBvcnRzIHRoZSBGdWxsIFNjcmVlbiBBUEkgdGhpcyBob2xkcyB0aGUgY2FsbCB5b3UgbmVlZCB0byB1c2UgdG8gY2FuY2VsIGl0LlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcmVxdWVzdCAtIElmIHRoZSBicm93c2VyIHN1cHBvcnRzIHRoZSBGdWxsIFNjcmVlbiBBUEkgdGhpcyBob2xkcyB0aGUgY2FsbCB5b3UgbmVlZCB0byB1c2UgdG8gYWN0aXZhdGUgaXQuXHJcbiAqL1xyXG52YXIgRnVsbHNjcmVlbiA9IHtcclxuXHJcbiAgICBhdmFpbGFibGU6IGZhbHNlLFxyXG4gICAgY2FuY2VsOiAnJyxcclxuICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgIHJlcXVlc3Q6ICcnXHJcblxyXG59O1xyXG5cclxuLyoqXHJcbiogQ2hlY2tzIGZvciBzdXBwb3J0IG9mIHRoZSBGdWxsIFNjcmVlbiBBUEkuXHJcbiogXHJcbiogQGlnbm9yZVxyXG4qL1xyXG5mdW5jdGlvbiBpbml0ICgpXHJcbntcclxuICAgIHZhciBpO1xyXG5cclxuICAgIHZhciBzdWZmaXgxID0gJ0Z1bGxzY3JlZW4nO1xyXG4gICAgdmFyIHN1ZmZpeDIgPSAnRnVsbFNjcmVlbic7XHJcblxyXG4gICAgdmFyIGZzID0gW1xyXG4gICAgICAgICdyZXF1ZXN0JyArIHN1ZmZpeDEsXHJcbiAgICAgICAgJ3JlcXVlc3QnICsgc3VmZml4MixcclxuICAgICAgICAnd2Via2l0UmVxdWVzdCcgKyBzdWZmaXgxLFxyXG4gICAgICAgICd3ZWJraXRSZXF1ZXN0JyArIHN1ZmZpeDIsXHJcbiAgICAgICAgJ21zUmVxdWVzdCcgKyBzdWZmaXgxLFxyXG4gICAgICAgICdtc1JlcXVlc3QnICsgc3VmZml4MixcclxuICAgICAgICAnbW96UmVxdWVzdCcgKyBzdWZmaXgyLFxyXG4gICAgICAgICdtb3pSZXF1ZXN0JyArIHN1ZmZpeDFcclxuICAgIF07XHJcblxyXG4gICAgZm9yIChpID0gMDsgaSA8IGZzLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbZnNbaV1dKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgRnVsbHNjcmVlbi5hdmFpbGFibGUgPSB0cnVlO1xyXG4gICAgICAgICAgICBGdWxsc2NyZWVuLnJlcXVlc3QgPSBmc1tpXTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBjZnMgPSBbXHJcbiAgICAgICAgJ2NhbmNlbCcgKyBzdWZmaXgyLFxyXG4gICAgICAgICdleGl0JyArIHN1ZmZpeDEsXHJcbiAgICAgICAgJ3dlYmtpdENhbmNlbCcgKyBzdWZmaXgyLFxyXG4gICAgICAgICd3ZWJraXRFeGl0JyArIHN1ZmZpeDEsXHJcbiAgICAgICAgJ21zQ2FuY2VsJyArIHN1ZmZpeDIsXHJcbiAgICAgICAgJ21zRXhpdCcgKyBzdWZmaXgxLFxyXG4gICAgICAgICdtb3pDYW5jZWwnICsgc3VmZml4MixcclxuICAgICAgICAnbW96RXhpdCcgKyBzdWZmaXgxXHJcbiAgICBdO1xyXG5cclxuICAgIGlmIChGdWxsc2NyZWVuLmF2YWlsYWJsZSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2ZzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50W2Nmc1tpXV0pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIEZ1bGxzY3JlZW4uY2FuY2VsID0gY2ZzW2ldO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIEtleWJvYXJkIElucHV0P1xyXG4gICAgLy8gIFNhZmFyaSA1LjEgc2F5cyBpdCBzdXBwb3J0cyBmdWxsc2NyZWVuIGtleWJvYXJkLCBidXQgaXMgbHlpbmcuXHJcbiAgICBpZiAod2luZG93WydFbGVtZW50J10gJiYgRWxlbWVudFsnQUxMT1dfS0VZQk9BUkRfSU5QVVQnXSAmJiAhKC8gVmVyc2lvblxcLzVcXC4xKD86XFwuXFxkKyk/IFNhZmFyaVxcLy8pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpXHJcbiAgICB7XHJcbiAgICAgICAgRnVsbHNjcmVlbi5rZXlib2FyZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZ1bGxzY3JlZW4sICdhY3RpdmUnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gISEoZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnQgfHwgZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVsZW1lbnQgfHwgZG9jdW1lbnQubW96RnVsbFNjcmVlbkVsZW1lbnQgfHwgZG9jdW1lbnQubXNGdWxsc2NyZWVuRWxlbWVudCk7IH0gfSk7XHJcblxyXG4gICAgcmV0dXJuIEZ1bGxzY3JlZW47XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gaW5pdCgpO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/device/Fullscreen.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/device/Input.js":
/*!*************************************************!*\
!*** ./node_modules/phaser/src/device/Input.js ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Browser = __webpack_require__(/*! ./Browser */ \"./node_modules/phaser/src/device/Browser.js\");\r\n\r\n/**\r\n * Determines the input support of the browser running this Phaser Game instance.\r\n * These values are read-only and populated during the boot sequence of the game.\r\n * They are then referenced by internal game systems and are available for you to access\r\n * via `this.sys.game.device.input` from within any Scene.\r\n * \r\n * @typedef {object} Phaser.Device.Input\r\n * @since 3.0.0\r\n * \r\n * @property {?string} wheelType - The newest type of Wheel/Scroll event supported: 'wheel', 'mousewheel', 'DOMMouseScroll'\r\n * @property {boolean} gamepads - Is navigator.getGamepads available?\r\n * @property {boolean} mspointer - Is mspointer available?\r\n * @property {boolean} touch - Is touch available?\r\n */\r\nvar Input = {\r\n\r\n gamepads: false,\r\n mspointer: false,\r\n touch: false,\r\n wheelEvent: null\r\n \r\n};\r\n\r\nfunction init ()\r\n{\r\n if ('ontouchstart' in document.documentElement || (navigator.maxTouchPoints && navigator.maxTouchPoints >= 1))\r\n {\r\n Input.touch = true;\r\n }\r\n\r\n if (navigator.msPointerEnabled || navigator.pointerEnabled)\r\n {\r\n Input.mspointer = true;\r\n }\r\n\r\n if (navigator.getGamepads)\r\n {\r\n Input.gamepads = true;\r\n }\r\n\r\n // See https://developer.mozilla.org/en-US/docs/Web/Events/wheel\r\n if ('onwheel' in window || (Browser.ie && 'WheelEvent' in window))\r\n {\r\n // DOM3 Wheel Event: FF 17+, IE 9+, Chrome 31+, Safari 7+\r\n Input.wheelEvent = 'wheel';\r\n }\r\n else if ('onmousewheel' in window)\r\n {\r\n // Non-FF legacy: IE 6-9, Chrome 1-31, Safari 5-7.\r\n Input.wheelEvent = 'mousewheel';\r\n }\r\n else if (Browser.firefox && 'MouseScrollEvent' in window)\r\n {\r\n // FF prior to 17. This should probably be scrubbed.\r\n Input.wheelEvent = 'DOMMouseScroll';\r\n }\r\n\r\n return Input;\r\n}\r\n\r\nmodule.exports = init();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kZXZpY2UvSW5wdXQuanM/MGY0MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLDhEQUFXOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGV2aWNlL0lucHV0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQnJvd3NlciA9IHJlcXVpcmUoJy4vQnJvd3NlcicpO1xyXG5cclxuLyoqXHJcbiAqIERldGVybWluZXMgdGhlIGlucHV0IHN1cHBvcnQgb2YgdGhlIGJyb3dzZXIgcnVubmluZyB0aGlzIFBoYXNlciBHYW1lIGluc3RhbmNlLlxyXG4gKiBUaGVzZSB2YWx1ZXMgYXJlIHJlYWQtb25seSBhbmQgcG9wdWxhdGVkIGR1cmluZyB0aGUgYm9vdCBzZXF1ZW5jZSBvZiB0aGUgZ2FtZS5cclxuICogVGhleSBhcmUgdGhlbiByZWZlcmVuY2VkIGJ5IGludGVybmFsIGdhbWUgc3lzdGVtcyBhbmQgYXJlIGF2YWlsYWJsZSBmb3IgeW91IHRvIGFjY2Vzc1xyXG4gKiB2aWEgYHRoaXMuc3lzLmdhbWUuZGV2aWNlLmlucHV0YCBmcm9tIHdpdGhpbiBhbnkgU2NlbmUuXHJcbiAqIFxyXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBQaGFzZXIuRGV2aWNlLklucHV0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB3aGVlbFR5cGUgLSBUaGUgbmV3ZXN0IHR5cGUgb2YgV2hlZWwvU2Nyb2xsIGV2ZW50IHN1cHBvcnRlZDogJ3doZWVsJywgJ21vdXNld2hlZWwnLCAnRE9NTW91c2VTY3JvbGwnXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZ2FtZXBhZHMgLSBJcyBuYXZpZ2F0b3IuZ2V0R2FtZXBhZHMgYXZhaWxhYmxlP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG1zcG9pbnRlciAtIElzIG1zcG9pbnRlciBhdmFpbGFibGU/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdG91Y2ggLSBJcyB0b3VjaCBhdmFpbGFibGU/XHJcbiAqL1xyXG52YXIgSW5wdXQgPSB7XHJcblxyXG4gICAgZ2FtZXBhZHM6IGZhbHNlLFxyXG4gICAgbXNwb2ludGVyOiBmYWxzZSxcclxuICAgIHRvdWNoOiBmYWxzZSxcclxuICAgIHdoZWVsRXZlbnQ6IG51bGxcclxuICAgIFxyXG59O1xyXG5cclxuZnVuY3Rpb24gaW5pdCAoKVxyXG57XHJcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IChuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgJiYgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID49IDEpKVxyXG4gICAge1xyXG4gICAgICAgIElucHV0LnRvdWNoID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQgfHwgbmF2aWdhdG9yLnBvaW50ZXJFbmFibGVkKVxyXG4gICAge1xyXG4gICAgICAgIElucHV0Lm1zcG9pbnRlciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5hdmlnYXRvci5nZXRHYW1lcGFkcylcclxuICAgIHtcclxuICAgICAgICBJbnB1dC5nYW1lcGFkcyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0V2ZW50cy93aGVlbFxyXG4gICAgaWYgKCdvbndoZWVsJyBpbiB3aW5kb3cgfHwgKEJyb3dzZXIuaWUgJiYgJ1doZWVsRXZlbnQnIGluIHdpbmRvdykpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gRE9NMyBXaGVlbCBFdmVudDogRkYgMTcrLCBJRSA5KywgQ2hyb21lIDMxKywgU2FmYXJpIDcrXHJcbiAgICAgICAgSW5wdXQud2hlZWxFdmVudCA9ICd3aGVlbCc7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgnb25tb3VzZXdoZWVsJyBpbiB3aW5kb3cpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gTm9uLUZGIGxlZ2FjeTogSUUgNi05LCBDaHJvbWUgMS0zMSwgU2FmYXJpIDUtNy5cclxuICAgICAgICBJbnB1dC53aGVlbEV2ZW50ID0gJ21vdXNld2hlZWwnO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoQnJvd3Nlci5maXJlZm94ICYmICdNb3VzZVNjcm9sbEV2ZW50JyBpbiB3aW5kb3cpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gRkYgcHJpb3IgdG8gMTcuIFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIHNjcnViYmVkLlxyXG4gICAgICAgIElucHV0LndoZWVsRXZlbnQgPSAnRE9NTW91c2VTY3JvbGwnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBJbnB1dDtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBpbml0KCk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/device/Input.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/device/OS.js":
/*!**********************************************!*\
!*** ./node_modules/phaser/src/device/OS.js ***!
\**********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/* WEBPACK VAR INJECTION */(function(process) {/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Determines the operating system of the device running this Phaser Game instance.\r\n * These values are read-only and populated during the boot sequence of the game.\r\n * They are then referenced by internal game systems and are available for you to access\r\n * via `this.sys.game.device.os` from within any Scene.\r\n *\r\n * @typedef {object} Phaser.Device.OS\r\n * @since 3.0.0\r\n *\r\n * @property {boolean} android - Is running on android?\r\n * @property {boolean} chromeOS - Is running on chromeOS?\r\n * @property {boolean} cordova - Is the game running under Apache Cordova?\r\n * @property {boolean} crosswalk - Is the game running under the Intel Crosswalk XDK?\r\n * @property {boolean} desktop - Is running on a desktop?\r\n * @property {boolean} ejecta - Is the game running under Ejecta?\r\n * @property {boolean} electron - Is the game running under GitHub Electron?\r\n * @property {boolean} iOS - Is running on iOS?\r\n * @property {boolean} iPad - Is running on iPad?\r\n * @property {boolean} iPhone - Is running on iPhone?\r\n * @property {boolean} kindle - Is running on an Amazon Kindle?\r\n * @property {boolean} linux - Is running on linux?\r\n * @property {boolean} macOS - Is running on macOS?\r\n * @property {boolean} node - Is the game running under Node.js?\r\n * @property {boolean} nodeWebkit - Is the game running under Node-Webkit?\r\n * @property {boolean} webApp - Set to true if running as a WebApp, i.e. within a WebView\r\n * @property {boolean} windows - Is running on windows?\r\n * @property {boolean} windowsPhone - Is running on a Windows Phone?\r\n * @property {number} iOSVersion - If running in iOS this will contain the major version number.\r\n * @property {number} pixelRatio - PixelRatio of the host device?\r\n */\r\nvar OS = {\r\n\r\n android: false,\r\n chromeOS: false,\r\n cordova: false,\r\n crosswalk: false,\r\n desktop: false,\r\n ejecta: false,\r\n electron: false,\r\n iOS: false,\r\n iOSVersion: 0,\r\n iPad: false,\r\n iPhone: false,\r\n kindle: false,\r\n linux: false,\r\n macOS: false,\r\n node: false,\r\n nodeWebkit: false,\r\n pixelRatio: 1,\r\n webApp: false,\r\n windows: false,\r\n windowsPhone: false\r\n\r\n};\r\n\r\nfunction init ()\r\n{\r\n var ua = navigator.userAgent;\r\n\r\n if (/Windows/.test(ua))\r\n {\r\n OS.windows = true;\r\n }\r\n else if (/Mac OS/.test(ua) && !(/like Mac OS/.test(ua)))\r\n {\r\n OS.macOS = true;\r\n }\r\n else if (/Android/.test(ua))\r\n {\r\n OS.android = true;\r\n }\r\n else if (/Linux/.test(ua))\r\n {\r\n OS.linux = true;\r\n }\r\n else if (/iP[ao]d|iPhone/i.test(ua))\r\n {\r\n OS.iOS = true;\r\n\r\n (navigator.appVersion).match(/OS (\\d+)/);\r\n\r\n OS.iOSVersion = parseInt(RegExp.$1, 10);\r\n\r\n OS.iPhone = ua.toLowerCase().indexOf('iphone') !== -1;\r\n OS.iPad = ua.toLowerCase().indexOf('ipad') !== -1;\r\n }\r\n else if (/Kindle/.test(ua) || (/\\bKF[A-Z][A-Z]+/).test(ua) || (/Silk.*Mobile Safari/).test(ua))\r\n {\r\n OS.kindle = true;\r\n\r\n // This will NOT detect early generations of Kindle Fire, I think there is no reliable way...\r\n // E.g. \"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.1.0-80) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true\"\r\n }\r\n else if (/CrOS/.test(ua))\r\n {\r\n OS.chromeOS = true;\r\n }\r\n\r\n if (/Windows Phone/i.test(ua) || (/IEMobile/i).test(ua))\r\n {\r\n OS.android = false;\r\n OS.iOS = false;\r\n OS.macOS = false;\r\n OS.windows = true;\r\n OS.windowsPhone = true;\r\n }\r\n\r\n var silk = (/Silk/).test(ua);\r\n\r\n if (OS.windows || OS.macOS || (OS.linux && !silk) || OS.chromeOS)\r\n {\r\n OS.desktop = true;\r\n }\r\n\r\n // Windows Phone / Table reset\r\n if (OS.windowsPhone || ((/Windows NT/i.test(ua)) && (/Touch/i.test(ua))))\r\n {\r\n OS.desktop = false;\r\n }\r\n\r\n // WebApp mode in iOS\r\n if (navigator.standalone)\r\n {\r\n OS.webApp = true;\r\n }\r\n\r\n if (window.cordova !== undefined)\r\n {\r\n OS.cordova = true;\r\n }\r\n\r\n if (typeof process !== 'undefined' && process.versions && process.versions.node)\r\n {\r\n OS.node = true;\r\n }\r\n\r\n if (OS.node && typeof process.versions === 'object')\r\n {\r\n OS.nodeWebkit = !!process.versions['node-webkit'];\r\n\r\n OS.electron = !!process.versions.electron;\r\n }\r\n\r\n if (window.ejecta !== undefined)\r\n {\r\n OS.ejecta = true;\r\n }\r\n\r\n if ((/Crosswalk/).test(ua))\r\n {\r\n OS.crosswalk = true;\r\n }\r\n\r\n OS.pixelRatio = window['devicePixelRatio'] || 1;\r\n\r\n return OS;\r\n}\r\n\r\nmodule.exports = init();\r\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../process/browser.js */ \"./node_modules/process/browser.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kZXZpY2UvT1MuanM/YTIwZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQSxjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLE9BQU87QUFDckIsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0NBQXdDLEdBQUcsdUJBQXVCLE9BQU87QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGV2aWNlL09TLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogRGV0ZXJtaW5lcyB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvZiB0aGUgZGV2aWNlIHJ1bm5pbmcgdGhpcyBQaGFzZXIgR2FtZSBpbnN0YW5jZS5cclxuICogVGhlc2UgdmFsdWVzIGFyZSByZWFkLW9ubHkgYW5kIHBvcHVsYXRlZCBkdXJpbmcgdGhlIGJvb3Qgc2VxdWVuY2Ugb2YgdGhlIGdhbWUuXHJcbiAqIFRoZXkgYXJlIHRoZW4gcmVmZXJlbmNlZCBieSBpbnRlcm5hbCBnYW1lIHN5c3RlbXMgYW5kIGFyZSBhdmFpbGFibGUgZm9yIHlvdSB0byBhY2Nlc3NcclxuICogdmlhIGB0aGlzLnN5cy5nYW1lLmRldmljZS5vc2AgZnJvbSB3aXRoaW4gYW55IFNjZW5lLlxyXG4gKlxyXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBQaGFzZXIuRGV2aWNlLk9TXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFuZHJvaWQgLSBJcyBydW5uaW5nIG9uIGFuZHJvaWQ/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gY2hyb21lT1MgLSBJcyBydW5uaW5nIG9uIGNocm9tZU9TP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGNvcmRvdmEgLSBJcyB0aGUgZ2FtZSBydW5uaW5nIHVuZGVyIEFwYWNoZSBDb3Jkb3ZhP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGNyb3Nzd2FsayAtIElzIHRoZSBnYW1lIHJ1bm5pbmcgdW5kZXIgdGhlIEludGVsIENyb3Nzd2FsayBYREs/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZGVza3RvcCAtIElzIHJ1bm5pbmcgb24gYSBkZXNrdG9wP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGVqZWN0YSAtIElzIHRoZSBnYW1lIHJ1bm5pbmcgdW5kZXIgRWplY3RhP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGVsZWN0cm9uIC0gSXMgdGhlIGdhbWUgcnVubmluZyB1bmRlciBHaXRIdWIgRWxlY3Ryb24/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaU9TIC0gSXMgcnVubmluZyBvbiBpT1M/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaVBhZCAtIElzIHJ1bm5pbmcgb24gaVBhZD9cclxuICogQHByb3BlcnR5IHtib29sZWFufSBpUGhvbmUgLSBJcyBydW5uaW5nIG9uIGlQaG9uZT9cclxuICogQHByb3BlcnR5IHtib29sZWFufSBraW5kbGUgLSBJcyBydW5uaW5nIG9uIGFuIEFtYXpvbiBLaW5kbGU/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbGludXggLSBJcyBydW5uaW5nIG9uIGxpbnV4P1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG1hY09TIC0gSXMgcnVubmluZyBvbiBtYWNPUz9cclxuICogQHByb3BlcnR5IHtib29sZWFufSBub2RlIC0gSXMgdGhlIGdhbWUgcnVubmluZyB1bmRlciBOb2RlLmpzP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG5vZGVXZWJraXQgLSBJcyB0aGUgZ2FtZSBydW5uaW5nIHVuZGVyIE5vZGUtV2Via2l0P1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHdlYkFwcCAtIFNldCB0byB0cnVlIGlmIHJ1bm5pbmcgYXMgYSBXZWJBcHAsIGkuZS4gd2l0aGluIGEgV2ViVmlld1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHdpbmRvd3MgLSBJcyBydW5uaW5nIG9uIHdpbmRvd3M/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gd2luZG93c1Bob25lIC0gSXMgcnVubmluZyBvbiBhIFdpbmRvd3MgUGhvbmU/XHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpT1NWZXJzaW9uIC0gSWYgcnVubmluZyBpbiBpT1MgdGhpcyB3aWxsIGNvbnRhaW4gdGhlIG1ham9yIHZlcnNpb24gbnVtYmVyLlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gcGl4ZWxSYXRpbyAtIFBpeGVsUmF0aW8gb2YgdGhlIGhvc3QgZGV2aWNlP1xyXG4gKi9cclxudmFyIE9TID0ge1xyXG5cclxuICAgIGFuZHJvaWQ6IGZhbHNlLFxyXG4gICAgY2hyb21lT1M6IGZhbHNlLFxyXG4gICAgY29yZG92YTogZmFsc2UsXHJcbiAgICBjcm9zc3dhbGs6IGZhbHNlLFxyXG4gICAgZGVza3RvcDogZmFsc2UsXHJcbiAgICBlamVjdGE6IGZhbHNlLFxyXG4gICAgZWxlY3Ryb246IGZhbHNlLFxyXG4gICAgaU9TOiBmYWxzZSxcclxuICAgIGlPU1ZlcnNpb246IDAsXHJcbiAgICBpUGFkOiBmYWxzZSxcclxuICAgIGlQaG9uZTogZmFsc2UsXHJcbiAgICBraW5kbGU6IGZhbHNlLFxyXG4gICAgbGludXg6IGZhbHNlLFxyXG4gICAgbWFjT1M6IGZhbHNlLFxyXG4gICAgbm9kZTogZmFsc2UsXHJcbiAgICBub2RlV2Via2l0OiBmYWxzZSxcclxuICAgIHBpeGVsUmF0aW86IDEsXHJcbiAgICB3ZWJBcHA6IGZhbHNlLFxyXG4gICAgd2luZG93czogZmFsc2UsXHJcbiAgICB3aW5kb3dzUGhvbmU6IGZhbHNlXHJcblxyXG59O1xyXG5cclxuZnVuY3Rpb24gaW5pdCAoKVxyXG57XHJcbiAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xyXG5cclxuICAgIGlmICgvV2luZG93cy8udGVzdCh1YSkpXHJcbiAgICB7XHJcbiAgICAgICAgT1Mud2luZG93cyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgvTWFjIE9TLy50ZXN0KHVhKSAmJiAhKC9saWtlIE1hYyBPUy8udGVzdCh1YSkpKVxyXG4gICAge1xyXG4gICAgICAgIE9TLm1hY09TID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKC9BbmRyb2lkLy50ZXN0KHVhKSlcclxuICAgIHtcclxuICAgICAgICBPUy5hbmRyb2lkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKC9MaW51eC8udGVzdCh1YSkpXHJcbiAgICB7XHJcbiAgICAgICAgT1MubGludXggPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoL2lQW2FvXWR8aVBob25lL2kudGVzdCh1YSkpXHJcbiAgICB7XHJcbiAgICAgICAgT1MuaU9TID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgKG5hdmlnYXRvci5hcHBWZXJzaW9uKS5tYXRjaCgvT1MgKFxcZCspLyk7XHJcblxyXG4gICAgICAgIE9TLmlPU1ZlcnNpb24gPSBwYXJzZUludChSZWdFeHAuJDEsIDEwKTtcclxuXHJcbiAgICAgICAgT1MuaVBob25lID0gdWEudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdpcGhvbmUnKSAhPT0gLTE7XHJcbiAgICAgICAgT1MuaVBhZCA9IHVhLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignaXBhZCcpICE9PSAtMTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKC9LaW5kbGUvLnRlc3QodWEpIHx8ICgvXFxiS0ZbQS1aXVtBLVpdKy8pLnRlc3QodWEpIHx8ICgvU2lsay4qTW9iaWxlIFNhZmFyaS8pLnRlc3QodWEpKVxyXG4gICAge1xyXG4gICAgICAgIE9TLmtpbmRsZSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vIFRoaXMgd2lsbCBOT1QgZGV0ZWN0IGVhcmx5IGdlbmVyYXRpb25zIG9mIEtpbmRsZSBGaXJlLCBJIHRoaW5rIHRoZXJlIGlzIG5vIHJlbGlhYmxlIHdheS4uLlxyXG4gICAgICAgIC8vIEUuZy4gXCJNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBVOyBJbnRlbCBNYWMgT1MgWCAxMF82XzM7IGVuLXVzOyBTaWxrLzEuMS4wLTgwKSBBcHBsZVdlYktpdC81MzMuMTYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzUuMCBTYWZhcmkvNTMzLjE2IFNpbGstQWNjZWxlcmF0ZWQ9dHJ1ZVwiXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgvQ3JPUy8udGVzdCh1YSkpXHJcbiAgICB7XHJcbiAgICAgICAgT1MuY2hyb21lT1MgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICgvV2luZG93cyBQaG9uZS9pLnRlc3QodWEpIHx8ICgvSUVNb2JpbGUvaSkudGVzdCh1YSkpXHJcbiAgICB7XHJcbiAgICAgICAgT1MuYW5kcm9pZCA9IGZhbHNlO1xyXG4gICAgICAgIE9TLmlPUyA9IGZhbHNlO1xyXG4gICAgICAgIE9TLm1hY09TID0gZmFsc2U7XHJcbiAgICAgICAgT1Mud2luZG93cyA9IHRydWU7XHJcbiAgICAgICAgT1Mud2luZG93c1Bob25lID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgc2lsayA9ICgvU2lsay8pLnRlc3QodWEpO1xyXG5cclxuICAgIGlmIChPUy53aW5kb3dzIHx8IE9TLm1hY09TIHx8IChPUy5saW51eCAmJiAhc2lsaykgfHwgT1MuY2hyb21lT1MpXHJcbiAgICB7XHJcbiAgICAgICAgT1MuZGVza3RvcCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIFdpbmRvd3MgUGhvbmUgLyBUYWJsZSByZXNldFxyXG4gICAgaWYgKE9TLndpbmRvd3NQaG9uZSB8fCAoKC9XaW5kb3dzIE5UL2kudGVzdCh1YSkpICYmICgvVG91Y2gvaS50ZXN0KHVhKSkpKVxyXG4gICAge1xyXG4gICAgICAgIE9TLmRlc2t0b3AgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgV2ViQXBwIG1vZGUgaW4gaU9TXHJcbiAgICBpZiAobmF2aWdhdG9yLnN0YW5kYWxvbmUpXHJcbiAgICB7XHJcbiAgICAgICAgT1Mud2ViQXBwID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2luZG93LmNvcmRvdmEgIT09IHVuZGVmaW5lZClcclxuICAgIHtcclxuICAgICAgICBPUy5jb3Jkb3ZhID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MudmVyc2lvbnMgJiYgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlKVxyXG4gICAge1xyXG4gICAgICAgIE9TLm5vZGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChPUy5ub2RlICYmIHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zID09PSAnb2JqZWN0JylcclxuICAgIHtcclxuICAgICAgICBPUy5ub2RlV2Via2l0ID0gISFwcm9jZXNzLnZlcnNpb25zWydub2RlLXdlYmtpdCddO1xyXG5cclxuICAgICAgICBPUy5lbGVjdHJvbiA9ICEhcHJvY2Vzcy52ZXJzaW9ucy5lbGVjdHJvbjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2luZG93LmVqZWN0YSAhPT0gdW5kZWZpbmVkKVxyXG4gICAge1xyXG4gICAgICAgIE9TLmVqZWN0YSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCgvQ3Jvc3N3YWxrLykudGVzdCh1YSkpXHJcbiAgICB7XHJcbiAgICAgICAgT1MuY3Jvc3N3YWxrID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBPUy5waXhlbFJhdGlvID0gd2luZG93WydkZXZpY2VQaXhlbFJhdGlvJ10gfHwgMTtcclxuXHJcbiAgICByZXR1cm4gT1M7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gaW5pdCgpO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/device/OS.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/device/Video.js":
/*!*************************************************!*\
!*** ./node_modules/phaser/src/device/Video.js ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Determines the video support of the browser running this Phaser Game instance.\r\n * These values are read-only and populated during the boot sequence of the game.\r\n * They are then referenced by internal game systems and are available for you to access\r\n * via `this.sys.game.device.video` from within any Scene.\r\n * \r\n * In Phaser 3.20 the properties were renamed to drop the 'Video' suffix.\r\n * \r\n * @typedef {object} Phaser.Device.Video\r\n * @since 3.0.0\r\n * \r\n * @property {boolean} h264 - Can this device play h264 mp4 video files?\r\n * @property {boolean} hls - Can this device play hls video files?\r\n * @property {boolean} mp4 - Can this device play h264 mp4 video files?\r\n * @property {boolean} ogg - Can this device play ogg video files?\r\n * @property {boolean} vp9 - Can this device play vp9 video files?\r\n * @property {boolean} webm - Can this device play webm video files?\r\n */\r\nvar Video = {\r\n\r\n h264: false,\r\n hls: false,\r\n mp4: false,\r\n ogg: false,\r\n vp9: false,\r\n webm: false\r\n\r\n};\r\n\r\nfunction init ()\r\n{\r\n var videoElement = document.createElement('video');\r\n var result = !!videoElement.canPlayType;\r\n\r\n try\r\n {\r\n if (result)\r\n {\r\n if (videoElement.canPlayType('video/ogg; codecs=\"theora\"').replace(/^no$/, ''))\r\n {\r\n Video.ogg = true;\r\n }\r\n\r\n if (videoElement.canPlayType('video/mp4; codecs=\"avc1.42E01E\"').replace(/^no$/, ''))\r\n {\r\n // Without QuickTime, this value will be `undefined`. github.com/Modernizr/Modernizr/issues/546\r\n Video.h264 = true;\r\n Video.mp4 = true;\r\n }\r\n\r\n if (videoElement.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/^no$/, ''))\r\n {\r\n Video.webm = true;\r\n }\r\n\r\n if (videoElement.canPlayType('video/webm; codecs=\"vp9\"').replace(/^no$/, ''))\r\n {\r\n Video.vp9 = true;\r\n }\r\n\r\n if (videoElement.canPlayType('application/x-mpegURL; codecs=\"avc1.42E01E\"').replace(/^no$/, ''))\r\n {\r\n Video.hls = true;\r\n }\r\n }\r\n }\r\n catch (e)\r\n {\r\n // Nothing to do\r\n }\r\n\r\n return Video;\r\n}\r\n\r\nmodule.exports = init();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kZXZpY2UvVmlkZW8uanM/OTUxNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0EsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7QUFDQTtBQUNBOztBQUVBLG9EQUFvRDtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFEQUFxRDtBQUNyRDtBQUNBO0FBQ0E7O0FBRUEscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQTs7QUFFQSxnRUFBZ0U7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kZXZpY2UvVmlkZW8uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHRoZSB2aWRlbyBzdXBwb3J0IG9mIHRoZSBicm93c2VyIHJ1bm5pbmcgdGhpcyBQaGFzZXIgR2FtZSBpbnN0YW5jZS5cclxuICogVGhlc2UgdmFsdWVzIGFyZSByZWFkLW9ubHkgYW5kIHBvcHVsYXRlZCBkdXJpbmcgdGhlIGJvb3Qgc2VxdWVuY2Ugb2YgdGhlIGdhbWUuXHJcbiAqIFRoZXkgYXJlIHRoZW4gcmVmZXJlbmNlZCBieSBpbnRlcm5hbCBnYW1lIHN5c3RlbXMgYW5kIGFyZSBhdmFpbGFibGUgZm9yIHlvdSB0byBhY2Nlc3NcclxuICogdmlhIGB0aGlzLnN5cy5nYW1lLmRldmljZS52aWRlb2AgZnJvbSB3aXRoaW4gYW55IFNjZW5lLlxyXG4gKiBcclxuICogSW4gUGhhc2VyIDMuMjAgdGhlIHByb3BlcnRpZXMgd2VyZSByZW5hbWVkIHRvIGRyb3AgdGhlICdWaWRlbycgc3VmZml4LlxyXG4gKiBcclxuICogQHR5cGVkZWYge29iamVjdH0gUGhhc2VyLkRldmljZS5WaWRlb1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaDI2NCAtIENhbiB0aGlzIGRldmljZSBwbGF5IGgyNjQgbXA0IHZpZGVvIGZpbGVzP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGhscyAtIENhbiB0aGlzIGRldmljZSBwbGF5IGhscyB2aWRlbyBmaWxlcz9cclxuICogQHByb3BlcnR5IHtib29sZWFufSBtcDQgLSBDYW4gdGhpcyBkZXZpY2UgcGxheSBoMjY0IG1wNCB2aWRlbyBmaWxlcz9cclxuICogQHByb3BlcnR5IHtib29sZWFufSBvZ2cgLSBDYW4gdGhpcyBkZXZpY2UgcGxheSBvZ2cgdmlkZW8gZmlsZXM/XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdnA5IC0gQ2FuIHRoaXMgZGV2aWNlIHBsYXkgdnA5IHZpZGVvIGZpbGVzP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHdlYm0gLSBDYW4gdGhpcyBkZXZpY2UgcGxheSB3ZWJtIHZpZGVvIGZpbGVzP1xyXG4gKi9cclxudmFyIFZpZGVvID0ge1xyXG5cclxuICAgIGgyNjQ6IGZhbHNlLFxyXG4gICAgaGxzOiBmYWxzZSxcclxuICAgIG1wNDogZmFsc2UsXHJcbiAgICBvZ2c6IGZhbHNlLFxyXG4gICAgdnA5OiBmYWxzZSxcclxuICAgIHdlYm06IGZhbHNlXHJcblxyXG59O1xyXG5cclxuZnVuY3Rpb24gaW5pdCAoKVxyXG57XHJcbiAgICB2YXIgdmlkZW9FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcclxuICAgIHZhciByZXN1bHQgPSAhIXZpZGVvRWxlbWVudC5jYW5QbGF5VHlwZTtcclxuXHJcbiAgICB0cnlcclxuICAgIHtcclxuICAgICAgICBpZiAocmVzdWx0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHZpZGVvRWxlbWVudC5jYW5QbGF5VHlwZSgndmlkZW8vb2dnOyBjb2RlY3M9XCJ0aGVvcmFcIicpLnJlcGxhY2UoL15ubyQvLCAnJykpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIFZpZGVvLm9nZyA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh2aWRlb0VsZW1lbnQuY2FuUGxheVR5cGUoJ3ZpZGVvL21wNDsgY29kZWNzPVwiYXZjMS40MkUwMUVcIicpLnJlcGxhY2UoL15ubyQvLCAnJykpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vIFdpdGhvdXQgUXVpY2tUaW1lLCB0aGlzIHZhbHVlIHdpbGwgYmUgYHVuZGVmaW5lZGAuIGdpdGh1Yi5jb20vTW9kZXJuaXpyL01vZGVybml6ci9pc3N1ZXMvNTQ2XHJcbiAgICAgICAgICAgICAgICBWaWRlby5oMjY0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIFZpZGVvLm1wNCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh2aWRlb0VsZW1lbnQuY2FuUGxheVR5cGUoJ3ZpZGVvL3dlYm07IGNvZGVjcz1cInZwOCwgdm9yYmlzXCInKS5yZXBsYWNlKC9ebm8kLywgJycpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBWaWRlby53ZWJtID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHZpZGVvRWxlbWVudC5jYW5QbGF5VHlwZSgndmlkZW8vd2VibTsgY29kZWNzPVwidnA5XCInKS5yZXBsYWNlKC9ebm8kLywgJycpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBWaWRlby52cDkgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodmlkZW9FbGVtZW50LmNhblBsYXlUeXBlKCdhcHBsaWNhdGlvbi94LW1wZWdVUkw7IGNvZGVjcz1cImF2YzEuNDJFMDFFXCInKS5yZXBsYWNlKC9ebm8kLywgJycpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBWaWRlby5obHMgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIE5vdGhpbmcgdG8gZG9cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gVmlkZW87XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gaW5pdCgpO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/device/Video.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/device/index.js":
/*!*************************************************!*\
!*** ./node_modules/phaser/src/device/index.js ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n// This singleton is instantiated as soon as Phaser loads,\r\n// before a Phaser.Game instance has even been created.\r\n// Which means all instances of Phaser Games can share it,\r\n// without having to re-poll the device all over again\r\n\r\n/**\r\n * @namespace Phaser.Device\r\n * @since 3.0.0\r\n */\r\n\r\n/**\r\n * @typedef {object} Phaser.DeviceConf\r\n *\r\n * @property {Phaser.Device.OS} os - The OS Device functions.\r\n * @property {Phaser.Device.Browser} browser - The Browser Device functions.\r\n * @property {Phaser.Device.Features} features - The Features Device functions.\r\n * @property {Phaser.Device.Input} input - The Input Device functions.\r\n * @property {Phaser.Device.Audio} audio - The Audio Device functions.\r\n * @property {Phaser.Device.Video} video - The Video Device functions.\r\n * @property {Phaser.Device.Fullscreen} fullscreen - The Fullscreen Device functions.\r\n * @property {Phaser.Device.CanvasFeatures} canvasFeatures - The Canvas Device functions.\r\n */\r\n\r\nmodule.exports = {\r\n\r\n os: __webpack_require__(/*! ./OS */ \"./node_modules/phaser/src/device/OS.js\"),\r\n browser: __webpack_require__(/*! ./Browser */ \"./node_modules/phaser/src/device/Browser.js\"),\r\n features: __webpack_require__(/*! ./Features */ \"./node_modules/phaser/src/device/Features.js\"),\r\n input: __webpack_require__(/*! ./Input */ \"./node_modules/phaser/src/device/Input.js\"),\r\n audio: __webpack_require__(/*! ./Audio */ \"./node_modules/phaser/src/device/Audio.js\"),\r\n video: __webpack_require__(/*! ./Video */ \"./node_modules/phaser/src/device/Video.js\"),\r\n fullscreen: __webpack_require__(/*! ./Fullscreen */ \"./node_modules/phaser/src/device/Fullscreen.js\"),\r\n canvasFeatures: __webpack_require__(/*! ./CanvasFeatures */ \"./node_modules/phaser/src/device/CanvasFeatures.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kZXZpY2UvaW5kZXguanM/NGI4ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQSxjQUFjLGlCQUFpQjtBQUMvQixjQUFjLHNCQUFzQjtBQUNwQyxjQUFjLHVCQUF1QjtBQUNyQyxjQUFjLG9CQUFvQjtBQUNsQyxjQUFjLG9CQUFvQjtBQUNsQyxjQUFjLG9CQUFvQjtBQUNsQyxjQUFjLHlCQUF5QjtBQUN2QyxjQUFjLDZCQUE2QjtBQUMzQzs7QUFFQTs7QUFFQSxRQUFRLG1CQUFPLENBQUMsb0RBQU07QUFDdEIsYUFBYSxtQkFBTyxDQUFDLDhEQUFXO0FBQ2hDLGNBQWMsbUJBQU8sQ0FBQyxnRUFBWTtBQUNsQyxXQUFXLG1CQUFPLENBQUMsMERBQVM7QUFDNUIsV0FBVyxtQkFBTyxDQUFDLDBEQUFTO0FBQzVCLFdBQVcsbUJBQU8sQ0FBQywwREFBUztBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxvRUFBYztBQUN0QyxvQkFBb0IsbUJBQU8sQ0FBQyw0RUFBa0I7O0FBRTlDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGV2aWNlL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vLyAgVGhpcyBzaW5nbGV0b24gaXMgaW5zdGFudGlhdGVkIGFzIHNvb24gYXMgUGhhc2VyIGxvYWRzLFxyXG4vLyAgYmVmb3JlIGEgUGhhc2VyLkdhbWUgaW5zdGFuY2UgaGFzIGV2ZW4gYmVlbiBjcmVhdGVkLlxyXG4vLyAgV2hpY2ggbWVhbnMgYWxsIGluc3RhbmNlcyBvZiBQaGFzZXIgR2FtZXMgY2FuIHNoYXJlIGl0LFxyXG4vLyAgd2l0aG91dCBoYXZpbmcgdG8gcmUtcG9sbCB0aGUgZGV2aWNlIGFsbCBvdmVyIGFnYWluXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuRGV2aWNlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBQaGFzZXIuRGV2aWNlQ29uZlxyXG4gKlxyXG4gKiBAcHJvcGVydHkge1BoYXNlci5EZXZpY2UuT1N9IG9zIC0gVGhlIE9TIERldmljZSBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7UGhhc2VyLkRldmljZS5Ccm93c2VyfSBicm93c2VyIC0gVGhlIEJyb3dzZXIgRGV2aWNlIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtQaGFzZXIuRGV2aWNlLkZlYXR1cmVzfSBmZWF0dXJlcyAtIFRoZSBGZWF0dXJlcyBEZXZpY2UgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge1BoYXNlci5EZXZpY2UuSW5wdXR9IGlucHV0IC0gVGhlIElucHV0IERldmljZSBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7UGhhc2VyLkRldmljZS5BdWRpb30gYXVkaW8gLSBUaGUgQXVkaW8gRGV2aWNlIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtQaGFzZXIuRGV2aWNlLlZpZGVvfSB2aWRlbyAtIFRoZSBWaWRlbyBEZXZpY2UgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge1BoYXNlci5EZXZpY2UuRnVsbHNjcmVlbn0gZnVsbHNjcmVlbiAtIFRoZSBGdWxsc2NyZWVuIERldmljZSBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7UGhhc2VyLkRldmljZS5DYW52YXNGZWF0dXJlc30gY2FudmFzRmVhdHVyZXMgLSBUaGUgQ2FudmFzIERldmljZSBmdW5jdGlvbnMuXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgb3M6IHJlcXVpcmUoJy4vT1MnKSxcclxuICAgIGJyb3dzZXI6IHJlcXVpcmUoJy4vQnJvd3NlcicpLFxyXG4gICAgZmVhdHVyZXM6IHJlcXVpcmUoJy4vRmVhdHVyZXMnKSxcclxuICAgIGlucHV0OiByZXF1aXJlKCcuL0lucHV0JyksXHJcbiAgICBhdWRpbzogcmVxdWlyZSgnLi9BdWRpbycpLFxyXG4gICAgdmlkZW86IHJlcXVpcmUoJy4vVmlkZW8nKSxcclxuICAgIGZ1bGxzY3JlZW46IHJlcXVpcmUoJy4vRnVsbHNjcmVlbicpLFxyXG4gICAgY2FudmFzRmVhdHVyZXM6IHJlcXVpcmUoJy4vQ2FudmFzRmVhdHVyZXMnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/device/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/const.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/display/align/const.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar ALIGN_CONST = {\r\n\r\n /**\r\n * A constant representing a top-left alignment or position.\r\n * @constant\r\n * @name Phaser.Display.Align.TOP_LEFT\r\n * @since 3.0.0\r\n * @type {integer}\r\n */\r\n TOP_LEFT: 0,\r\n\r\n /**\r\n * A constant representing a top-center alignment or position.\r\n * @constant\r\n * @name Phaser.Display.Align.TOP_CENTER\r\n * @since 3.0.0\r\n * @type {integer}\r\n */\r\n TOP_CENTER: 1,\r\n\r\n /**\r\n * A constant representing a top-right alignment or position.\r\n * @constant\r\n * @name Phaser.Display.Align.TOP_RIGHT\r\n * @since 3.0.0\r\n * @type {integer}\r\n */\r\n TOP_RIGHT: 2,\r\n\r\n /**\r\n * A constant representing a left-top alignment or position.\r\n * @constant\r\n * @name Phaser.Display.Align.LEFT_TOP\r\n * @since 3.0.0\r\n * @type {integer}\r\n */\r\n LEFT_TOP: 3,\r\n\r\n /**\r\n * A constant representing a left-center alignment or position.\r\n * @constant\r\n * @name Phaser.Display.Align.LEFT_CENTER\r\n * @since 3.0.0\r\n * @type {integer}\r\n */\r\n LEFT_CENTER: 4,\r\n\r\n /**\r\n * A constant representing a left-bottom alignment or position.\r\n * @constant\r\n * @name Phaser.Display.Align.LEFT_BOTTOM\r\n * @since 3.0.0\r\n * @type {integer}\r\n */\r\n LEFT_BOTTOM: 5,\r\n\r\n /**\r\n * A constant representing a center alignment or position.\r\n * @constant\r\n * @name Phaser.Display.Align.CENTER\r\n * @since 3.0.0\r\n * @type {integer}\r\n */\r\n CENTER: 6,\r\n\r\n /**\r\n * A constant representing a right-top alignment or position.\r\n * @constant\r\n * @name Phaser.Display.Align.RIGHT_TOP\r\n * @since 3.0.0\r\n * @type {integer}\r\n */\r\n RIGHT_TOP: 7,\r\n\r\n /**\r\n * A constant representing a right-center alignment or position.\r\n * @constant\r\n * @name Phaser.Display.Align.RIGHT_CENTER\r\n * @since 3.0.0\r\n * @type {integer}\r\n */\r\n RIGHT_CENTER: 8,\r\n\r\n /**\r\n * A constant representing a right-bottom alignment or position.\r\n * @constant\r\n * @name Phaser.Display.Align.RIGHT_BOTTOM\r\n * @since 3.0.0\r\n * @type {integer}\r\n */\r\n RIGHT_BOTTOM: 9,\r\n\r\n /**\r\n * A constant representing a bottom-left alignment or position.\r\n * @constant\r\n * @name Phaser.Display.Align.BOTTOM_LEFT\r\n * @since 3.0.0\r\n * @type {integer}\r\n */\r\n BOTTOM_LEFT: 10,\r\n\r\n /**\r\n * A constant representing a bottom-center alignment or position.\r\n * @constant\r\n * @name Phaser.Display.Align.BOTTOM_CENTER\r\n * @since 3.0.0\r\n * @type {integer}\r\n */\r\n BOTTOM_CENTER: 11,\r\n\r\n /**\r\n * A constant representing a bottom-right alignment or position.\r\n * @constant\r\n * @name Phaser.Display.Align.BOTTOM_RIGHT\r\n * @since 3.0.0\r\n * @type {integer}\r\n */\r\n BOTTOM_RIGHT: 12\r\n\r\n};\r\n\r\nmodule.exports = ALIGN_CONST;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2NvbnN0LmpzP2Y1ZGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYWxpZ24vY29uc3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBBTElHTl9DT05TVCA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICogQSBjb25zdGFudCByZXByZXNlbnRpbmcgYSB0b3AtbGVmdCBhbGlnbm1lbnQgb3IgcG9zaXRpb24uXHJcbiAgICAqIEBjb25zdGFudFxyXG4gICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5BbGlnbi5UT1BfTEVGVFxyXG4gICAgKiBAc2luY2UgMy4wLjBcclxuICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAqL1xyXG4gICAgVE9QX0xFRlQ6IDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEEgY29uc3RhbnQgcmVwcmVzZW50aW5nIGEgdG9wLWNlbnRlciBhbGlnbm1lbnQgb3IgcG9zaXRpb24uXHJcbiAgICAqIEBjb25zdGFudFxyXG4gICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5BbGlnbi5UT1BfQ0VOVEVSXHJcbiAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICovXHJcbiAgICBUT1BfQ0VOVEVSOiAxLFxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBBIGNvbnN0YW50IHJlcHJlc2VudGluZyBhIHRvcC1yaWdodCBhbGlnbm1lbnQgb3IgcG9zaXRpb24uXHJcbiAgICAqIEBjb25zdGFudFxyXG4gICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5BbGlnbi5UT1BfUklHSFRcclxuICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgKi9cclxuICAgIFRPUF9SSUdIVDogMixcclxuXHJcbiAgICAvKipcclxuICAgICogQSBjb25zdGFudCByZXByZXNlbnRpbmcgYSBsZWZ0LXRvcCBhbGlnbm1lbnQgb3IgcG9zaXRpb24uXHJcbiAgICAqIEBjb25zdGFudFxyXG4gICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5BbGlnbi5MRUZUX1RPUFxyXG4gICAgKiBAc2luY2UgMy4wLjBcclxuICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAqL1xyXG4gICAgTEVGVF9UT1A6IDMsXHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEEgY29uc3RhbnQgcmVwcmVzZW50aW5nIGEgbGVmdC1jZW50ZXIgYWxpZ25tZW50IG9yIHBvc2l0aW9uLlxyXG4gICAgKiBAY29uc3RhbnRcclxuICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQWxpZ24uTEVGVF9DRU5URVJcclxuICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgKi9cclxuICAgIExFRlRfQ0VOVEVSOiA0LFxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBBIGNvbnN0YW50IHJlcHJlc2VudGluZyBhIGxlZnQtYm90dG9tIGFsaWdubWVudCBvciBwb3NpdGlvbi5cclxuICAgICogQGNvbnN0YW50XHJcbiAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5LkFsaWduLkxFRlRfQk9UVE9NXHJcbiAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICovXHJcbiAgICBMRUZUX0JPVFRPTTogNSxcclxuXHJcbiAgICAvKipcclxuICAgICogQSBjb25zdGFudCByZXByZXNlbnRpbmcgYSBjZW50ZXIgYWxpZ25tZW50IG9yIHBvc2l0aW9uLlxyXG4gICAgKiBAY29uc3RhbnRcclxuICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQWxpZ24uQ0VOVEVSXHJcbiAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICovXHJcbiAgICBDRU5URVI6IDYsXHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEEgY29uc3RhbnQgcmVwcmVzZW50aW5nIGEgcmlnaHQtdG9wIGFsaWdubWVudCBvciBwb3NpdGlvbi5cclxuICAgICogQGNvbnN0YW50XHJcbiAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5LkFsaWduLlJJR0hUX1RPUFxyXG4gICAgKiBAc2luY2UgMy4wLjBcclxuICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAqL1xyXG4gICAgUklHSFRfVE9QOiA3LFxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBBIGNvbnN0YW50IHJlcHJlc2VudGluZyBhIHJpZ2h0LWNlbnRlciBhbGlnbm1lbnQgb3IgcG9zaXRpb24uXHJcbiAgICAqIEBjb25zdGFudFxyXG4gICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5BbGlnbi5SSUdIVF9DRU5URVJcclxuICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgKi9cclxuICAgIFJJR0hUX0NFTlRFUjogOCxcclxuXHJcbiAgICAvKipcclxuICAgICogQSBjb25zdGFudCByZXByZXNlbnRpbmcgYSByaWdodC1ib3R0b20gYWxpZ25tZW50IG9yIHBvc2l0aW9uLlxyXG4gICAgKiBAY29uc3RhbnRcclxuICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQWxpZ24uUklHSFRfQk9UVE9NXHJcbiAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICovXHJcbiAgICBSSUdIVF9CT1RUT006IDksXHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEEgY29uc3RhbnQgcmVwcmVzZW50aW5nIGEgYm90dG9tLWxlZnQgYWxpZ25tZW50IG9yIHBvc2l0aW9uLlxyXG4gICAgKiBAY29uc3RhbnRcclxuICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQWxpZ24uQk9UVE9NX0xFRlRcclxuICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgKi9cclxuICAgIEJPVFRPTV9MRUZUOiAxMCxcclxuXHJcbiAgICAvKipcclxuICAgICogQSBjb25zdGFudCByZXByZXNlbnRpbmcgYSBib3R0b20tY2VudGVyIGFsaWdubWVudCBvciBwb3NpdGlvbi5cclxuICAgICogQGNvbnN0YW50XHJcbiAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5LkFsaWduLkJPVFRPTV9DRU5URVJcclxuICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgKi9cclxuICAgIEJPVFRPTV9DRU5URVI6IDExLFxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBBIGNvbnN0YW50IHJlcHJlc2VudGluZyBhIGJvdHRvbS1yaWdodCBhbGlnbm1lbnQgb3IgcG9zaXRpb24uXHJcbiAgICAqIEBjb25zdGFudFxyXG4gICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5BbGlnbi5CT1RUT01fUklHSFRcclxuICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgKi9cclxuICAgIEJPVFRPTV9SSUdIVDogMTJcclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEFMSUdOX0NPTlNUO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/const.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/in/BottomCenter.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/display/align/in/BottomCenter.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetBottom = __webpack_require__(/*! ../../bounds/GetBottom */ \"./node_modules/phaser/src/display/bounds/GetBottom.js\");\r\nvar GetCenterX = __webpack_require__(/*! ../../bounds/GetCenterX */ \"./node_modules/phaser/src/display/bounds/GetCenterX.js\");\r\nvar SetBottom = __webpack_require__(/*! ../../bounds/SetBottom */ \"./node_modules/phaser/src/display/bounds/SetBottom.js\");\r\nvar SetCenterX = __webpack_require__(/*! ../../bounds/SetCenterX */ \"./node_modules/phaser/src/display/bounds/SetCenterX.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned in the bottom center of the other.\r\n *\r\n * @function Phaser.Display.Align.In.BottomCenter\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignIn - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar BottomCenter = function (gameObject, alignIn, offsetX, offsetY)\r\n{\r\n if (offsetX === undefined) { offsetX = 0; }\r\n if (offsetY === undefined) { offsetY = 0; }\r\n\r\n SetCenterX(gameObject, GetCenterX(alignIn) + offsetX);\r\n SetBottom(gameObject, GetBottom(alignIn) + offsetY);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = BottomCenter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL0JvdHRvbUNlbnRlci5qcz8xMzVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxxRkFBd0I7QUFDaEQsaUJBQWlCLG1CQUFPLENBQUMsdUZBQXlCO0FBQ2xELGdCQUFnQixtQkFBTyxDQUFDLHFGQUF3QjtBQUNoRCxpQkFBaUIsbUJBQU8sQ0FBQyx1RkFBeUI7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsOEJBQThCO0FBQzNDO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxhQUFhO0FBQzdDLGdDQUFnQyxhQUFhOztBQUU3QztBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL0JvdHRvbUNlbnRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldEJvdHRvbSA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9HZXRCb3R0b20nKTtcclxudmFyIEdldENlbnRlclggPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0Q2VudGVyWCcpO1xyXG52YXIgU2V0Qm90dG9tID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL1NldEJvdHRvbScpO1xyXG52YXIgU2V0Q2VudGVyWCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRDZW50ZXJYJyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgZ2l2ZW4gR2FtZSBPYmplY3QgYW5kIGFsaWducyBpdCBzbyB0aGF0IGl0IGlzIHBvc2l0aW9uZWQgaW4gdGhlIGJvdHRvbSBjZW50ZXIgb2YgdGhlIG90aGVyLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQWxpZ24uSW4uQm90dG9tQ2VudGVyXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSBwb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBhbGlnbkluIC0gVGhlIEdhbWUgT2JqZWN0IHRvIGJhc2UgdGhlIGFsaWdubWVudCBwb3NpdGlvbiBvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRYPTBdIC0gT3B0aW9uYWwgaG9yaXpvbnRhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WT0wXSAtIE9wdGlvbmFsIHZlcnRpY2FsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBhbGlnbmVkLlxyXG4gKi9cclxudmFyIEJvdHRvbUNlbnRlciA9IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCBhbGlnbkluLCBvZmZzZXRYLCBvZmZzZXRZKVxyXG57XHJcbiAgICBpZiAob2Zmc2V0WCA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFggPSAwOyB9XHJcbiAgICBpZiAob2Zmc2V0WSA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFkgPSAwOyB9XHJcblxyXG4gICAgU2V0Q2VudGVyWChnYW1lT2JqZWN0LCBHZXRDZW50ZXJYKGFsaWduSW4pICsgb2Zmc2V0WCk7XHJcbiAgICBTZXRCb3R0b20oZ2FtZU9iamVjdCwgR2V0Qm90dG9tKGFsaWduSW4pICsgb2Zmc2V0WSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJvdHRvbUNlbnRlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/in/BottomCenter.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/in/BottomLeft.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/display/align/in/BottomLeft.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetBottom = __webpack_require__(/*! ../../bounds/GetBottom */ \"./node_modules/phaser/src/display/bounds/GetBottom.js\");\r\nvar GetLeft = __webpack_require__(/*! ../../bounds/GetLeft */ \"./node_modules/phaser/src/display/bounds/GetLeft.js\");\r\nvar SetBottom = __webpack_require__(/*! ../../bounds/SetBottom */ \"./node_modules/phaser/src/display/bounds/SetBottom.js\");\r\nvar SetLeft = __webpack_require__(/*! ../../bounds/SetLeft */ \"./node_modules/phaser/src/display/bounds/SetLeft.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned in the bottom left of the other.\r\n *\r\n * @function Phaser.Display.Align.In.BottomLeft\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignIn - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar BottomLeft = function (gameObject, alignIn, offsetX, offsetY)\r\n{\r\n if (offsetX === undefined) { offsetX = 0; }\r\n if (offsetY === undefined) { offsetY = 0; }\r\n\r\n SetLeft(gameObject, GetLeft(alignIn) - offsetX);\r\n SetBottom(gameObject, GetBottom(alignIn) + offsetY);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = BottomLeft;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL0JvdHRvbUxlZnQuanM/OTllOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMscUZBQXdCO0FBQ2hELGNBQWMsbUJBQU8sQ0FBQyxpRkFBc0I7QUFDNUMsZ0JBQWdCLG1CQUFPLENBQUMscUZBQXdCO0FBQ2hELGNBQWMsbUJBQU8sQ0FBQyxpRkFBc0I7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsOEJBQThCO0FBQzNDO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxhQUFhO0FBQzdDLGdDQUFnQyxhQUFhOztBQUU3QztBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL0JvdHRvbUxlZnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRCb3R0b20gPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0Qm90dG9tJyk7XHJcbnZhciBHZXRMZWZ0ID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldExlZnQnKTtcclxudmFyIFNldEJvdHRvbSA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRCb3R0b20nKTtcclxudmFyIFNldExlZnQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0TGVmdCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGdpdmVuIEdhbWUgT2JqZWN0IGFuZCBhbGlnbnMgaXQgc28gdGhhdCBpdCBpcyBwb3NpdGlvbmVkIGluIHRoZSBib3R0b20gbGVmdCBvZiB0aGUgb3RoZXIuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5BbGlnbi5Jbi5Cb3R0b21MZWZ0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSBwb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBhbGlnbkluIC0gVGhlIEdhbWUgT2JqZWN0IHRvIGJhc2UgdGhlIGFsaWdubWVudCBwb3NpdGlvbiBvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRYPTBdIC0gT3B0aW9uYWwgaG9yaXpvbnRhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WT0wXSAtIE9wdGlvbmFsIHZlcnRpY2FsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBhbGlnbmVkLlxyXG4gKi9cclxudmFyIEJvdHRvbUxlZnQgPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgYWxpZ25Jbiwgb2Zmc2V0WCwgb2Zmc2V0WSlcclxue1xyXG4gICAgaWYgKG9mZnNldFggPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRYID0gMDsgfVxyXG4gICAgaWYgKG9mZnNldFkgPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRZID0gMDsgfVxyXG5cclxuICAgIFNldExlZnQoZ2FtZU9iamVjdCwgR2V0TGVmdChhbGlnbkluKSAtIG9mZnNldFgpO1xyXG4gICAgU2V0Qm90dG9tKGdhbWVPYmplY3QsIEdldEJvdHRvbShhbGlnbkluKSArIG9mZnNldFkpO1xyXG5cclxuICAgIHJldHVybiBnYW1lT2JqZWN0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBCb3R0b21MZWZ0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/in/BottomLeft.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/in/BottomRight.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/display/align/in/BottomRight.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetBottom = __webpack_require__(/*! ../../bounds/GetBottom */ \"./node_modules/phaser/src/display/bounds/GetBottom.js\");\r\nvar GetRight = __webpack_require__(/*! ../../bounds/GetRight */ \"./node_modules/phaser/src/display/bounds/GetRight.js\");\r\nvar SetBottom = __webpack_require__(/*! ../../bounds/SetBottom */ \"./node_modules/phaser/src/display/bounds/SetBottom.js\");\r\nvar SetRight = __webpack_require__(/*! ../../bounds/SetRight */ \"./node_modules/phaser/src/display/bounds/SetRight.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned in the bottom right of the other.\r\n *\r\n * @function Phaser.Display.Align.In.BottomRight\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignIn - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar BottomRight = function (gameObject, alignIn, offsetX, offsetY)\r\n{\r\n if (offsetX === undefined) { offsetX = 0; }\r\n if (offsetY === undefined) { offsetY = 0; }\r\n\r\n SetRight(gameObject, GetRight(alignIn) + offsetX);\r\n SetBottom(gameObject, GetBottom(alignIn) + offsetY);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = BottomRight;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL0JvdHRvbVJpZ2h0LmpzP2M4NDIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLHFGQUF3QjtBQUNoRCxlQUFlLG1CQUFPLENBQUMsbUZBQXVCO0FBQzlDLGdCQUFnQixtQkFBTyxDQUFDLHFGQUF3QjtBQUNoRCxlQUFlLG1CQUFPLENBQUMsbUZBQXVCOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDhCQUE4QjtBQUMzQztBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsYUFBYTtBQUM3QyxnQ0FBZ0MsYUFBYTs7QUFFN0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9hbGlnbi9pbi9Cb3R0b21SaWdodC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldEJvdHRvbSA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9HZXRCb3R0b20nKTtcclxudmFyIEdldFJpZ2h0ID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldFJpZ2h0Jyk7XHJcbnZhciBTZXRCb3R0b20gPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0Qm90dG9tJyk7XHJcbnZhciBTZXRSaWdodCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRSaWdodCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGdpdmVuIEdhbWUgT2JqZWN0IGFuZCBhbGlnbnMgaXQgc28gdGhhdCBpdCBpcyBwb3NpdGlvbmVkIGluIHRoZSBib3R0b20gcmlnaHQgb2YgdGhlIG90aGVyLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQWxpZ24uSW4uQm90dG9tUmlnaHRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gRyAtIFtnYW1lT2JqZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3aWxsIGJlIHBvc2l0aW9uZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGFsaWduSW4gLSBUaGUgR2FtZSBPYmplY3QgdG8gYmFzZSB0aGUgYWxpZ25tZW50IHBvc2l0aW9uIG9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFg9MF0gLSBPcHRpb25hbCBob3Jpem9udGFsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRZPTBdIC0gT3B0aW9uYWwgdmVydGljYWwgb2Zmc2V0IGZyb20gdGhlIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGFsaWduZWQuXHJcbiAqL1xyXG52YXIgQm90dG9tUmlnaHQgPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgYWxpZ25Jbiwgb2Zmc2V0WCwgb2Zmc2V0WSlcclxue1xyXG4gICAgaWYgKG9mZnNldFggPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRYID0gMDsgfVxyXG4gICAgaWYgKG9mZnNldFkgPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRZID0gMDsgfVxyXG5cclxuICAgIFNldFJpZ2h0KGdhbWVPYmplY3QsIEdldFJpZ2h0KGFsaWduSW4pICsgb2Zmc2V0WCk7XHJcbiAgICBTZXRCb3R0b20oZ2FtZU9iamVjdCwgR2V0Qm90dG9tKGFsaWduSW4pICsgb2Zmc2V0WSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJvdHRvbVJpZ2h0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/in/BottomRight.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/in/Center.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/display/align/in/Center.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CenterOn = __webpack_require__(/*! ../../bounds/CenterOn */ \"./node_modules/phaser/src/display/bounds/CenterOn.js\");\r\nvar GetCenterX = __webpack_require__(/*! ../../bounds/GetCenterX */ \"./node_modules/phaser/src/display/bounds/GetCenterX.js\");\r\nvar GetCenterY = __webpack_require__(/*! ../../bounds/GetCenterY */ \"./node_modules/phaser/src/display/bounds/GetCenterY.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned in the center of the other.\r\n *\r\n * @function Phaser.Display.Align.In.Center\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignIn - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar Center = function (gameObject, alignIn, offsetX, offsetY)\r\n{\r\n if (offsetX === undefined) { offsetX = 0; }\r\n if (offsetY === undefined) { offsetY = 0; }\r\n\r\n CenterOn(gameObject, GetCenterX(alignIn) + offsetX, GetCenterY(alignIn) + offsetY);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = Center;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL0NlbnRlci5qcz80Nzc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxlQUFlLG1CQUFPLENBQUMsbUZBQXVCO0FBQzlDLGlCQUFpQixtQkFBTyxDQUFDLHVGQUF5QjtBQUNsRCxpQkFBaUIsbUJBQU8sQ0FBQyx1RkFBeUI7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsOEJBQThCO0FBQzNDO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxhQUFhO0FBQzdDLGdDQUFnQyxhQUFhOztBQUU3Qzs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9hbGlnbi9pbi9DZW50ZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDZW50ZXJPbiA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9DZW50ZXJPbicpO1xyXG52YXIgR2V0Q2VudGVyWCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9HZXRDZW50ZXJYJyk7XHJcbnZhciBHZXRDZW50ZXJZID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldENlbnRlclknKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBnaXZlbiBHYW1lIE9iamVjdCBhbmQgYWxpZ25zIGl0IHNvIHRoYXQgaXQgaXMgcG9zaXRpb25lZCBpbiB0aGUgY2VudGVyIG9mIHRoZSBvdGhlci5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkFsaWduLkluLkNlbnRlclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBHIC0gW2dhbWVPYmplY3QsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0aGF0IHdpbGwgYmUgcG9zaXRpb25lZC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gYWxpZ25JbiAtIFRoZSBHYW1lIE9iamVjdCB0byBiYXNlIHRoZSBhbGlnbm1lbnQgcG9zaXRpb24gb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WD0wXSAtIE9wdGlvbmFsIGhvcml6b250YWwgb2Zmc2V0IGZyb20gdGhlIHBvc2l0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFk9MF0gLSBPcHRpb25hbCB2ZXJ0aWNhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgYWxpZ25lZC5cclxuICovXHJcbnZhciBDZW50ZXIgPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgYWxpZ25Jbiwgb2Zmc2V0WCwgb2Zmc2V0WSlcclxue1xyXG4gICAgaWYgKG9mZnNldFggPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRYID0gMDsgfVxyXG4gICAgaWYgKG9mZnNldFkgPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRZID0gMDsgfVxyXG5cclxuICAgIENlbnRlck9uKGdhbWVPYmplY3QsIEdldENlbnRlclgoYWxpZ25JbikgKyBvZmZzZXRYLCBHZXRDZW50ZXJZKGFsaWduSW4pICsgb2Zmc2V0WSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENlbnRlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/in/Center.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/in/LeftCenter.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/display/align/in/LeftCenter.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetCenterY = __webpack_require__(/*! ../../bounds/GetCenterY */ \"./node_modules/phaser/src/display/bounds/GetCenterY.js\");\r\nvar GetLeft = __webpack_require__(/*! ../../bounds/GetLeft */ \"./node_modules/phaser/src/display/bounds/GetLeft.js\");\r\nvar SetCenterY = __webpack_require__(/*! ../../bounds/SetCenterY */ \"./node_modules/phaser/src/display/bounds/SetCenterY.js\");\r\nvar SetLeft = __webpack_require__(/*! ../../bounds/SetLeft */ \"./node_modules/phaser/src/display/bounds/SetLeft.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned in the left center of the other.\r\n *\r\n * @function Phaser.Display.Align.In.LeftCenter\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignIn - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar LeftCenter = function (gameObject, alignIn, offsetX, offsetY)\r\n{\r\n if (offsetX === undefined) { offsetX = 0; }\r\n if (offsetY === undefined) { offsetY = 0; }\r\n\r\n SetLeft(gameObject, GetLeft(alignIn) - offsetX);\r\n SetCenterY(gameObject, GetCenterY(alignIn) + offsetY);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = LeftCenter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL0xlZnRDZW50ZXIuanM/OGNlMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsdUZBQXlCO0FBQ2xELGNBQWMsbUJBQU8sQ0FBQyxpRkFBc0I7QUFDNUMsaUJBQWlCLG1CQUFPLENBQUMsdUZBQXlCO0FBQ2xELGNBQWMsbUJBQU8sQ0FBQyxpRkFBc0I7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsOEJBQThCO0FBQzNDO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxhQUFhO0FBQzdDLGdDQUFnQyxhQUFhOztBQUU3QztBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL0xlZnRDZW50ZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRDZW50ZXJZID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldENlbnRlclknKTtcclxudmFyIEdldExlZnQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0TGVmdCcpO1xyXG52YXIgU2V0Q2VudGVyWSA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRDZW50ZXJZJyk7XHJcbnZhciBTZXRMZWZ0ID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL1NldExlZnQnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBnaXZlbiBHYW1lIE9iamVjdCBhbmQgYWxpZ25zIGl0IHNvIHRoYXQgaXQgaXMgcG9zaXRpb25lZCBpbiB0aGUgbGVmdCBjZW50ZXIgb2YgdGhlIG90aGVyLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQWxpZ24uSW4uTGVmdENlbnRlclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBHIC0gW2dhbWVPYmplY3QsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0aGF0IHdpbGwgYmUgcG9zaXRpb25lZC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gYWxpZ25JbiAtIFRoZSBHYW1lIE9iamVjdCB0byBiYXNlIHRoZSBhbGlnbm1lbnQgcG9zaXRpb24gb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WD0wXSAtIE9wdGlvbmFsIGhvcml6b250YWwgb2Zmc2V0IGZyb20gdGhlIHBvc2l0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFk9MF0gLSBPcHRpb25hbCB2ZXJ0aWNhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgYWxpZ25lZC5cclxuICovXHJcbnZhciBMZWZ0Q2VudGVyID0gZnVuY3Rpb24gKGdhbWVPYmplY3QsIGFsaWduSW4sIG9mZnNldFgsIG9mZnNldFkpXHJcbntcclxuICAgIGlmIChvZmZzZXRYID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WCA9IDA7IH1cclxuICAgIGlmIChvZmZzZXRZID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WSA9IDA7IH1cclxuXHJcbiAgICBTZXRMZWZ0KGdhbWVPYmplY3QsIEdldExlZnQoYWxpZ25JbikgLSBvZmZzZXRYKTtcclxuICAgIFNldENlbnRlclkoZ2FtZU9iamVjdCwgR2V0Q2VudGVyWShhbGlnbkluKSArIG9mZnNldFkpO1xyXG5cclxuICAgIHJldHVybiBnYW1lT2JqZWN0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBMZWZ0Q2VudGVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/in/LeftCenter.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/in/QuickSet.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/display/align/in/QuickSet.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar ALIGN_CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/display/align/const.js\");\r\n\r\nvar AlignInMap = [];\r\n\r\nAlignInMap[ALIGN_CONST.BOTTOM_CENTER] = __webpack_require__(/*! ./BottomCenter */ \"./node_modules/phaser/src/display/align/in/BottomCenter.js\");\r\nAlignInMap[ALIGN_CONST.BOTTOM_LEFT] = __webpack_require__(/*! ./BottomLeft */ \"./node_modules/phaser/src/display/align/in/BottomLeft.js\");\r\nAlignInMap[ALIGN_CONST.BOTTOM_RIGHT] = __webpack_require__(/*! ./BottomRight */ \"./node_modules/phaser/src/display/align/in/BottomRight.js\");\r\nAlignInMap[ALIGN_CONST.CENTER] = __webpack_require__(/*! ./Center */ \"./node_modules/phaser/src/display/align/in/Center.js\");\r\nAlignInMap[ALIGN_CONST.LEFT_CENTER] = __webpack_require__(/*! ./LeftCenter */ \"./node_modules/phaser/src/display/align/in/LeftCenter.js\");\r\nAlignInMap[ALIGN_CONST.RIGHT_CENTER] = __webpack_require__(/*! ./RightCenter */ \"./node_modules/phaser/src/display/align/in/RightCenter.js\");\r\nAlignInMap[ALIGN_CONST.TOP_CENTER] = __webpack_require__(/*! ./TopCenter */ \"./node_modules/phaser/src/display/align/in/TopCenter.js\");\r\nAlignInMap[ALIGN_CONST.TOP_LEFT] = __webpack_require__(/*! ./TopLeft */ \"./node_modules/phaser/src/display/align/in/TopLeft.js\");\r\nAlignInMap[ALIGN_CONST.TOP_RIGHT] = __webpack_require__(/*! ./TopRight */ \"./node_modules/phaser/src/display/align/in/TopRight.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned relative to the other.\r\n * The alignment used is based on the `position` argument, which is an `ALIGN_CONST` value, such as `LEFT_CENTER` or `TOP_RIGHT`.\r\n *\r\n * @function Phaser.Display.Align.In.QuickSet\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [child,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} child - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignIn - The Game Object to base the alignment position on.\r\n * @param {integer} position - The position to align the Game Object with. This is an align constant, such as `ALIGN_CONST.LEFT_CENTER`.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar QuickSet = function (child, alignIn, position, offsetX, offsetY)\r\n{\r\n return AlignInMap[position](child, alignIn, offsetX, offsetY);\r\n};\r\n\r\nmodule.exports = QuickSet;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL1F1aWNrU2V0LmpzPzA5MmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLGtFQUFVOztBQUVwQzs7QUFFQSx3Q0FBd0MsbUJBQU8sQ0FBQyxrRkFBZ0I7QUFDaEUsc0NBQXNDLG1CQUFPLENBQUMsOEVBQWM7QUFDNUQsdUNBQXVDLG1CQUFPLENBQUMsZ0ZBQWU7QUFDOUQsaUNBQWlDLG1CQUFPLENBQUMsc0VBQVU7QUFDbkQsc0NBQXNDLG1CQUFPLENBQUMsOEVBQWM7QUFDNUQsdUNBQXVDLG1CQUFPLENBQUMsZ0ZBQWU7QUFDOUQscUNBQXFDLG1CQUFPLENBQUMsNEVBQWE7QUFDMUQsbUNBQW1DLG1CQUFPLENBQUMsd0VBQVc7QUFDdEQsb0NBQW9DLG1CQUFPLENBQUMsMEVBQVk7O0FBRXhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSw4QkFBOEI7QUFDM0M7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL1F1aWNrU2V0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQUxJR05fQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xyXG5cclxudmFyIEFsaWduSW5NYXAgPSBbXTtcclxuXHJcbkFsaWduSW5NYXBbQUxJR05fQ09OU1QuQk9UVE9NX0NFTlRFUl0gPSByZXF1aXJlKCcuL0JvdHRvbUNlbnRlcicpO1xyXG5BbGlnbkluTWFwW0FMSUdOX0NPTlNULkJPVFRPTV9MRUZUXSA9IHJlcXVpcmUoJy4vQm90dG9tTGVmdCcpO1xyXG5BbGlnbkluTWFwW0FMSUdOX0NPTlNULkJPVFRPTV9SSUdIVF0gPSByZXF1aXJlKCcuL0JvdHRvbVJpZ2h0Jyk7XHJcbkFsaWduSW5NYXBbQUxJR05fQ09OU1QuQ0VOVEVSXSA9IHJlcXVpcmUoJy4vQ2VudGVyJyk7XHJcbkFsaWduSW5NYXBbQUxJR05fQ09OU1QuTEVGVF9DRU5URVJdID0gcmVxdWlyZSgnLi9MZWZ0Q2VudGVyJyk7XHJcbkFsaWduSW5NYXBbQUxJR05fQ09OU1QuUklHSFRfQ0VOVEVSXSA9IHJlcXVpcmUoJy4vUmlnaHRDZW50ZXInKTtcclxuQWxpZ25Jbk1hcFtBTElHTl9DT05TVC5UT1BfQ0VOVEVSXSA9IHJlcXVpcmUoJy4vVG9wQ2VudGVyJyk7XHJcbkFsaWduSW5NYXBbQUxJR05fQ09OU1QuVE9QX0xFRlRdID0gcmVxdWlyZSgnLi9Ub3BMZWZ0Jyk7XHJcbkFsaWduSW5NYXBbQUxJR05fQ09OU1QuVE9QX1JJR0hUXSA9IHJlcXVpcmUoJy4vVG9wUmlnaHQnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBnaXZlbiBHYW1lIE9iamVjdCBhbmQgYWxpZ25zIGl0IHNvIHRoYXQgaXQgaXMgcG9zaXRpb25lZCByZWxhdGl2ZSB0byB0aGUgb3RoZXIuXHJcbiAqIFRoZSBhbGlnbm1lbnQgdXNlZCBpcyBiYXNlZCBvbiB0aGUgYHBvc2l0aW9uYCBhcmd1bWVudCwgd2hpY2ggaXMgYW4gYEFMSUdOX0NPTlNUYCB2YWx1ZSwgc3VjaCBhcyBgTEVGVF9DRU5URVJgIG9yIGBUT1BfUklHSFRgLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQWxpZ24uSW4uUXVpY2tTZXRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gRyAtIFtjaGlsZCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBjaGlsZCAtIFRoZSBHYW1lIE9iamVjdCB0aGF0IHdpbGwgYmUgcG9zaXRpb25lZC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gYWxpZ25JbiAtIFRoZSBHYW1lIE9iamVjdCB0byBiYXNlIHRoZSBhbGlnbm1lbnQgcG9zaXRpb24gb24uXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gcG9zaXRpb24gLSBUaGUgcG9zaXRpb24gdG8gYWxpZ24gdGhlIEdhbWUgT2JqZWN0IHdpdGguIFRoaXMgaXMgYW4gYWxpZ24gY29uc3RhbnQsIHN1Y2ggYXMgYEFMSUdOX0NPTlNULkxFRlRfQ0VOVEVSYC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRYPTBdIC0gT3B0aW9uYWwgaG9yaXpvbnRhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WT0wXSAtIE9wdGlvbmFsIHZlcnRpY2FsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBhbGlnbmVkLlxyXG4gKi9cclxudmFyIFF1aWNrU2V0ID0gZnVuY3Rpb24gKGNoaWxkLCBhbGlnbkluLCBwb3NpdGlvbiwgb2Zmc2V0WCwgb2Zmc2V0WSlcclxue1xyXG4gICAgcmV0dXJuIEFsaWduSW5NYXBbcG9zaXRpb25dKGNoaWxkLCBhbGlnbkluLCBvZmZzZXRYLCBvZmZzZXRZKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUXVpY2tTZXQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/in/QuickSet.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/in/RightCenter.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/display/align/in/RightCenter.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetCenterY = __webpack_require__(/*! ../../bounds/GetCenterY */ \"./node_modules/phaser/src/display/bounds/GetCenterY.js\");\r\nvar GetRight = __webpack_require__(/*! ../../bounds/GetRight */ \"./node_modules/phaser/src/display/bounds/GetRight.js\");\r\nvar SetCenterY = __webpack_require__(/*! ../../bounds/SetCenterY */ \"./node_modules/phaser/src/display/bounds/SetCenterY.js\");\r\nvar SetRight = __webpack_require__(/*! ../../bounds/SetRight */ \"./node_modules/phaser/src/display/bounds/SetRight.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned in the right center of the other.\r\n *\r\n * @function Phaser.Display.Align.In.RightCenter\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignIn - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar RightCenter = function (gameObject, alignIn, offsetX, offsetY)\r\n{\r\n if (offsetX === undefined) { offsetX = 0; }\r\n if (offsetY === undefined) { offsetY = 0; }\r\n\r\n SetRight(gameObject, GetRight(alignIn) + offsetX);\r\n SetCenterY(gameObject, GetCenterY(alignIn) + offsetY);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = RightCenter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL1JpZ2h0Q2VudGVyLmpzPzI2OWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLHVGQUF5QjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsbUZBQXVCO0FBQzlDLGlCQUFpQixtQkFBTyxDQUFDLHVGQUF5QjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsbUZBQXVCOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDhCQUE4QjtBQUMzQztBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsYUFBYTtBQUM3QyxnQ0FBZ0MsYUFBYTs7QUFFN0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9hbGlnbi9pbi9SaWdodENlbnRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldENlbnRlclkgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0Q2VudGVyWScpO1xyXG52YXIgR2V0UmlnaHQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0UmlnaHQnKTtcclxudmFyIFNldENlbnRlclkgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0Q2VudGVyWScpO1xyXG52YXIgU2V0UmlnaHQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0UmlnaHQnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBnaXZlbiBHYW1lIE9iamVjdCBhbmQgYWxpZ25zIGl0IHNvIHRoYXQgaXQgaXMgcG9zaXRpb25lZCBpbiB0aGUgcmlnaHQgY2VudGVyIG9mIHRoZSBvdGhlci5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkFsaWduLkluLlJpZ2h0Q2VudGVyXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSBwb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBhbGlnbkluIC0gVGhlIEdhbWUgT2JqZWN0IHRvIGJhc2UgdGhlIGFsaWdubWVudCBwb3NpdGlvbiBvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRYPTBdIC0gT3B0aW9uYWwgaG9yaXpvbnRhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WT0wXSAtIE9wdGlvbmFsIHZlcnRpY2FsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBhbGlnbmVkLlxyXG4gKi9cclxudmFyIFJpZ2h0Q2VudGVyID0gZnVuY3Rpb24gKGdhbWVPYmplY3QsIGFsaWduSW4sIG9mZnNldFgsIG9mZnNldFkpXHJcbntcclxuICAgIGlmIChvZmZzZXRYID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WCA9IDA7IH1cclxuICAgIGlmIChvZmZzZXRZID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WSA9IDA7IH1cclxuXHJcbiAgICBTZXRSaWdodChnYW1lT2JqZWN0LCBHZXRSaWdodChhbGlnbkluKSArIG9mZnNldFgpO1xyXG4gICAgU2V0Q2VudGVyWShnYW1lT2JqZWN0LCBHZXRDZW50ZXJZKGFsaWduSW4pICsgb2Zmc2V0WSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJpZ2h0Q2VudGVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/in/RightCenter.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/in/TopCenter.js":
/*!***************************************************************!*\
!*** ./node_modules/phaser/src/display/align/in/TopCenter.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetCenterX = __webpack_require__(/*! ../../bounds/GetCenterX */ \"./node_modules/phaser/src/display/bounds/GetCenterX.js\");\r\nvar GetTop = __webpack_require__(/*! ../../bounds/GetTop */ \"./node_modules/phaser/src/display/bounds/GetTop.js\");\r\nvar SetCenterX = __webpack_require__(/*! ../../bounds/SetCenterX */ \"./node_modules/phaser/src/display/bounds/SetCenterX.js\");\r\nvar SetTop = __webpack_require__(/*! ../../bounds/SetTop */ \"./node_modules/phaser/src/display/bounds/SetTop.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned in the top center of the other.\r\n *\r\n * @function Phaser.Display.Align.In.TopCenter\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignIn - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar TopCenter = function (gameObject, alignIn, offsetX, offsetY)\r\n{\r\n if (offsetX === undefined) { offsetX = 0; }\r\n if (offsetY === undefined) { offsetY = 0; }\r\n\r\n SetCenterX(gameObject, GetCenterX(alignIn) + offsetX);\r\n SetTop(gameObject, GetTop(alignIn) - offsetY);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = TopCenter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL1RvcENlbnRlci5qcz8zYmVmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyx1RkFBeUI7QUFDbEQsYUFBYSxtQkFBTyxDQUFDLCtFQUFxQjtBQUMxQyxpQkFBaUIsbUJBQU8sQ0FBQyx1RkFBeUI7QUFDbEQsYUFBYSxtQkFBTyxDQUFDLCtFQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSw4QkFBOEI7QUFDM0M7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGFBQWE7QUFDN0MsZ0NBQWdDLGFBQWE7O0FBRTdDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYWxpZ24vaW4vVG9wQ2VudGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0Q2VudGVyWCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9HZXRDZW50ZXJYJyk7XHJcbnZhciBHZXRUb3AgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0VG9wJyk7XHJcbnZhciBTZXRDZW50ZXJYID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL1NldENlbnRlclgnKTtcclxudmFyIFNldFRvcCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRUb3AnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBnaXZlbiBHYW1lIE9iamVjdCBhbmQgYWxpZ25zIGl0IHNvIHRoYXQgaXQgaXMgcG9zaXRpb25lZCBpbiB0aGUgdG9wIGNlbnRlciBvZiB0aGUgb3RoZXIuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5BbGlnbi5Jbi5Ub3BDZW50ZXJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gRyAtIFtnYW1lT2JqZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3aWxsIGJlIHBvc2l0aW9uZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGFsaWduSW4gLSBUaGUgR2FtZSBPYmplY3QgdG8gYmFzZSB0aGUgYWxpZ25tZW50IHBvc2l0aW9uIG9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFg9MF0gLSBPcHRpb25hbCBob3Jpem9udGFsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRZPTBdIC0gT3B0aW9uYWwgdmVydGljYWwgb2Zmc2V0IGZyb20gdGhlIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGFsaWduZWQuXHJcbiAqL1xyXG52YXIgVG9wQ2VudGVyID0gZnVuY3Rpb24gKGdhbWVPYmplY3QsIGFsaWduSW4sIG9mZnNldFgsIG9mZnNldFkpXHJcbntcclxuICAgIGlmIChvZmZzZXRYID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WCA9IDA7IH1cclxuICAgIGlmIChvZmZzZXRZID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WSA9IDA7IH1cclxuXHJcbiAgICBTZXRDZW50ZXJYKGdhbWVPYmplY3QsIEdldENlbnRlclgoYWxpZ25JbikgKyBvZmZzZXRYKTtcclxuICAgIFNldFRvcChnYW1lT2JqZWN0LCBHZXRUb3AoYWxpZ25JbikgLSBvZmZzZXRZKTtcclxuXHJcbiAgICByZXR1cm4gZ2FtZU9iamVjdDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVG9wQ2VudGVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/in/TopCenter.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/in/TopLeft.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/display/align/in/TopLeft.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetLeft = __webpack_require__(/*! ../../bounds/GetLeft */ \"./node_modules/phaser/src/display/bounds/GetLeft.js\");\r\nvar GetTop = __webpack_require__(/*! ../../bounds/GetTop */ \"./node_modules/phaser/src/display/bounds/GetTop.js\");\r\nvar SetLeft = __webpack_require__(/*! ../../bounds/SetLeft */ \"./node_modules/phaser/src/display/bounds/SetLeft.js\");\r\nvar SetTop = __webpack_require__(/*! ../../bounds/SetTop */ \"./node_modules/phaser/src/display/bounds/SetTop.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned in the top left of the other.\r\n *\r\n * @function Phaser.Display.Align.In.TopLeft\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignIn - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar TopLeft = function (gameObject, alignIn, offsetX, offsetY)\r\n{\r\n if (offsetX === undefined) { offsetX = 0; }\r\n if (offsetY === undefined) { offsetY = 0; }\r\n\r\n SetLeft(gameObject, GetLeft(alignIn) - offsetX);\r\n SetTop(gameObject, GetTop(alignIn) - offsetY);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = TopLeft;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL1RvcExlZnQuanM/OWVlNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLGlGQUFzQjtBQUM1QyxhQUFhLG1CQUFPLENBQUMsK0VBQXFCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxpRkFBc0I7QUFDNUMsYUFBYSxtQkFBTyxDQUFDLCtFQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSw4QkFBOEI7QUFDM0M7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGFBQWE7QUFDN0MsZ0NBQWdDLGFBQWE7O0FBRTdDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYWxpZ24vaW4vVG9wTGVmdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldExlZnQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0TGVmdCcpO1xyXG52YXIgR2V0VG9wID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldFRvcCcpO1xyXG52YXIgU2V0TGVmdCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRMZWZ0Jyk7XHJcbnZhciBTZXRUb3AgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0VG9wJyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgZ2l2ZW4gR2FtZSBPYmplY3QgYW5kIGFsaWducyBpdCBzbyB0aGF0IGl0IGlzIHBvc2l0aW9uZWQgaW4gdGhlIHRvcCBsZWZ0IG9mIHRoZSBvdGhlci5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkFsaWduLkluLlRvcExlZnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gRyAtIFtnYW1lT2JqZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3aWxsIGJlIHBvc2l0aW9uZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGFsaWduSW4gLSBUaGUgR2FtZSBPYmplY3QgdG8gYmFzZSB0aGUgYWxpZ25tZW50IHBvc2l0aW9uIG9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFg9MF0gLSBPcHRpb25hbCBob3Jpem9udGFsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRZPTBdIC0gT3B0aW9uYWwgdmVydGljYWwgb2Zmc2V0IGZyb20gdGhlIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGFsaWduZWQuXHJcbiAqL1xyXG52YXIgVG9wTGVmdCA9IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCBhbGlnbkluLCBvZmZzZXRYLCBvZmZzZXRZKVxyXG57XHJcbiAgICBpZiAob2Zmc2V0WCA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFggPSAwOyB9XHJcbiAgICBpZiAob2Zmc2V0WSA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFkgPSAwOyB9XHJcblxyXG4gICAgU2V0TGVmdChnYW1lT2JqZWN0LCBHZXRMZWZ0KGFsaWduSW4pIC0gb2Zmc2V0WCk7XHJcbiAgICBTZXRUb3AoZ2FtZU9iamVjdCwgR2V0VG9wKGFsaWduSW4pIC0gb2Zmc2V0WSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRvcExlZnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/in/TopLeft.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/in/TopRight.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/display/align/in/TopRight.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetRight = __webpack_require__(/*! ../../bounds/GetRight */ \"./node_modules/phaser/src/display/bounds/GetRight.js\");\r\nvar GetTop = __webpack_require__(/*! ../../bounds/GetTop */ \"./node_modules/phaser/src/display/bounds/GetTop.js\");\r\nvar SetRight = __webpack_require__(/*! ../../bounds/SetRight */ \"./node_modules/phaser/src/display/bounds/SetRight.js\");\r\nvar SetTop = __webpack_require__(/*! ../../bounds/SetTop */ \"./node_modules/phaser/src/display/bounds/SetTop.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned in the top right of the other.\r\n *\r\n * @function Phaser.Display.Align.In.TopRight\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignIn - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar TopRight = function (gameObject, alignIn, offsetX, offsetY)\r\n{\r\n if (offsetX === undefined) { offsetX = 0; }\r\n if (offsetY === undefined) { offsetY = 0; }\r\n\r\n SetRight(gameObject, GetRight(alignIn) + offsetX);\r\n SetTop(gameObject, GetTop(alignIn) - offsetY);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = TopRight;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL1RvcFJpZ2h0LmpzPzVlNTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxtRkFBdUI7QUFDOUMsYUFBYSxtQkFBTyxDQUFDLCtFQUFxQjtBQUMxQyxlQUFlLG1CQUFPLENBQUMsbUZBQXVCO0FBQzlDLGFBQWEsbUJBQU8sQ0FBQywrRUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsOEJBQThCO0FBQzNDO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxhQUFhO0FBQzdDLGdDQUFnQyxhQUFhOztBQUU3QztBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL1RvcFJpZ2h0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0UmlnaHQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0UmlnaHQnKTtcclxudmFyIEdldFRvcCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9HZXRUb3AnKTtcclxudmFyIFNldFJpZ2h0ID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL1NldFJpZ2h0Jyk7XHJcbnZhciBTZXRUb3AgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0VG9wJyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgZ2l2ZW4gR2FtZSBPYmplY3QgYW5kIGFsaWducyBpdCBzbyB0aGF0IGl0IGlzIHBvc2l0aW9uZWQgaW4gdGhlIHRvcCByaWdodCBvZiB0aGUgb3RoZXIuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5BbGlnbi5Jbi5Ub3BSaWdodFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBHIC0gW2dhbWVPYmplY3QsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0aGF0IHdpbGwgYmUgcG9zaXRpb25lZC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gYWxpZ25JbiAtIFRoZSBHYW1lIE9iamVjdCB0byBiYXNlIHRoZSBhbGlnbm1lbnQgcG9zaXRpb24gb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WD0wXSAtIE9wdGlvbmFsIGhvcml6b250YWwgb2Zmc2V0IGZyb20gdGhlIHBvc2l0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFk9MF0gLSBPcHRpb25hbCB2ZXJ0aWNhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgYWxpZ25lZC5cclxuICovXHJcbnZhciBUb3BSaWdodCA9IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCBhbGlnbkluLCBvZmZzZXRYLCBvZmZzZXRZKVxyXG57XHJcbiAgICBpZiAob2Zmc2V0WCA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFggPSAwOyB9XHJcbiAgICBpZiAob2Zmc2V0WSA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFkgPSAwOyB9XHJcblxyXG4gICAgU2V0UmlnaHQoZ2FtZU9iamVjdCwgR2V0UmlnaHQoYWxpZ25JbikgKyBvZmZzZXRYKTtcclxuICAgIFNldFRvcChnYW1lT2JqZWN0LCBHZXRUb3AoYWxpZ25JbikgLSBvZmZzZXRZKTtcclxuXHJcbiAgICByZXR1cm4gZ2FtZU9iamVjdDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVG9wUmlnaHQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/in/TopRight.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/in/index.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/display/align/in/index.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Display.Align.In\r\n */\r\n\r\nmodule.exports = {\r\n\r\n BottomCenter: __webpack_require__(/*! ./BottomCenter */ \"./node_modules/phaser/src/display/align/in/BottomCenter.js\"),\r\n BottomLeft: __webpack_require__(/*! ./BottomLeft */ \"./node_modules/phaser/src/display/align/in/BottomLeft.js\"),\r\n BottomRight: __webpack_require__(/*! ./BottomRight */ \"./node_modules/phaser/src/display/align/in/BottomRight.js\"),\r\n Center: __webpack_require__(/*! ./Center */ \"./node_modules/phaser/src/display/align/in/Center.js\"),\r\n LeftCenter: __webpack_require__(/*! ./LeftCenter */ \"./node_modules/phaser/src/display/align/in/LeftCenter.js\"),\r\n QuickSet: __webpack_require__(/*! ./QuickSet */ \"./node_modules/phaser/src/display/align/in/QuickSet.js\"),\r\n RightCenter: __webpack_require__(/*! ./RightCenter */ \"./node_modules/phaser/src/display/align/in/RightCenter.js\"),\r\n TopCenter: __webpack_require__(/*! ./TopCenter */ \"./node_modules/phaser/src/display/align/in/TopCenter.js\"),\r\n TopLeft: __webpack_require__(/*! ./TopLeft */ \"./node_modules/phaser/src/display/align/in/TopLeft.js\"),\r\n TopRight: __webpack_require__(/*! ./TopRight */ \"./node_modules/phaser/src/display/align/in/TopRight.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL2luZGV4LmpzPzI1OTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxrRkFBZ0I7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsOEVBQWM7QUFDdEMsaUJBQWlCLG1CQUFPLENBQUMsZ0ZBQWU7QUFDeEMsWUFBWSxtQkFBTyxDQUFDLHNFQUFVO0FBQzlCLGdCQUFnQixtQkFBTyxDQUFDLDhFQUFjO0FBQ3RDLGNBQWMsbUJBQU8sQ0FBQywwRUFBWTtBQUNsQyxpQkFBaUIsbUJBQU8sQ0FBQyxnRkFBZTtBQUN4QyxlQUFlLG1CQUFPLENBQUMsNEVBQWE7QUFDcEMsYUFBYSxtQkFBTyxDQUFDLHdFQUFXO0FBQ2hDLGNBQWMsbUJBQU8sQ0FBQywwRUFBWTs7QUFFbEMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuRGlzcGxheS5BbGlnbi5JblxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEJvdHRvbUNlbnRlcjogcmVxdWlyZSgnLi9Cb3R0b21DZW50ZXInKSxcclxuICAgIEJvdHRvbUxlZnQ6IHJlcXVpcmUoJy4vQm90dG9tTGVmdCcpLFxyXG4gICAgQm90dG9tUmlnaHQ6IHJlcXVpcmUoJy4vQm90dG9tUmlnaHQnKSxcclxuICAgIENlbnRlcjogcmVxdWlyZSgnLi9DZW50ZXInKSxcclxuICAgIExlZnRDZW50ZXI6IHJlcXVpcmUoJy4vTGVmdENlbnRlcicpLFxyXG4gICAgUXVpY2tTZXQ6IHJlcXVpcmUoJy4vUXVpY2tTZXQnKSxcclxuICAgIFJpZ2h0Q2VudGVyOiByZXF1aXJlKCcuL1JpZ2h0Q2VudGVyJyksXHJcbiAgICBUb3BDZW50ZXI6IHJlcXVpcmUoJy4vVG9wQ2VudGVyJyksXHJcbiAgICBUb3BMZWZ0OiByZXF1aXJlKCcuL1RvcExlZnQnKSxcclxuICAgIFRvcFJpZ2h0OiByZXF1aXJlKCcuL1RvcFJpZ2h0JylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/in/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/index.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/display/align/index.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/display/align/const.js\");\r\nvar Extend = __webpack_require__(/*! ../../utils/object/Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\");\r\n\r\n/**\r\n * @namespace Phaser.Display.Align\r\n */\r\n\r\nvar Align = {\r\n\r\n In: __webpack_require__(/*! ./in */ \"./node_modules/phaser/src/display/align/in/index.js\"),\r\n To: __webpack_require__(/*! ./to */ \"./node_modules/phaser/src/display/align/to/index.js\")\r\n\r\n};\r\n\r\n// Merge in the consts\r\nAlign = Extend(false, Align, CONST);\r\n\r\nmodule.exports = Align;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL2luZGV4LmpzPzhjMmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxpRUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsbUZBQTJCOztBQUVoRDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsUUFBUSxtQkFBTyxDQUFDLGlFQUFNO0FBQ3RCLFFBQVEsbUJBQU8sQ0FBQyxpRUFBTTs7QUFFdEI7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYWxpZ24vaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4vY29uc3QnKTtcclxudmFyIEV4dGVuZCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9FeHRlbmQnKTtcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5EaXNwbGF5LkFsaWduXHJcbiAqL1xyXG5cclxudmFyIEFsaWduID0ge1xyXG5cclxuICAgIEluOiByZXF1aXJlKCcuL2luJyksXHJcbiAgICBUbzogcmVxdWlyZSgnLi90bycpXHJcblxyXG59O1xyXG5cclxuLy8gICBNZXJnZSBpbiB0aGUgY29uc3RzXHJcbkFsaWduID0gRXh0ZW5kKGZhbHNlLCBBbGlnbiwgQ09OU1QpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBbGlnbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/to/BottomCenter.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/display/align/to/BottomCenter.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetBottom = __webpack_require__(/*! ../../bounds/GetBottom */ \"./node_modules/phaser/src/display/bounds/GetBottom.js\");\r\nvar GetCenterX = __webpack_require__(/*! ../../bounds/GetCenterX */ \"./node_modules/phaser/src/display/bounds/GetCenterX.js\");\r\nvar SetCenterX = __webpack_require__(/*! ../../bounds/SetCenterX */ \"./node_modules/phaser/src/display/bounds/SetCenterX.js\");\r\nvar SetTop = __webpack_require__(/*! ../../bounds/SetTop */ \"./node_modules/phaser/src/display/bounds/SetTop.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned next to the bottom center position of the other.\r\n *\r\n * @function Phaser.Display.Align.To.BottomCenter\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignTo - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar BottomCenter = function (gameObject, alignTo, offsetX, offsetY)\r\n{\r\n if (offsetX === undefined) { offsetX = 0; }\r\n if (offsetY === undefined) { offsetY = 0; }\r\n\r\n SetCenterX(gameObject, GetCenterX(alignTo) + offsetX);\r\n SetTop(gameObject, GetBottom(alignTo) + offsetY);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = BottomCenter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL0JvdHRvbUNlbnRlci5qcz8xOGM2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxxRkFBd0I7QUFDaEQsaUJBQWlCLG1CQUFPLENBQUMsdUZBQXlCO0FBQ2xELGlCQUFpQixtQkFBTyxDQUFDLHVGQUF5QjtBQUNsRCxhQUFhLG1CQUFPLENBQUMsK0VBQXFCOztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDhCQUE4QjtBQUMzQztBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsYUFBYTtBQUM3QyxnQ0FBZ0MsYUFBYTs7QUFFN0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9hbGlnbi90by9Cb3R0b21DZW50ZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRCb3R0b20gPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0Qm90dG9tJyk7XHJcbnZhciBHZXRDZW50ZXJYID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldENlbnRlclgnKTtcclxudmFyIFNldENlbnRlclggPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0Q2VudGVyWCcpO1xyXG52YXIgU2V0VG9wID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL1NldFRvcCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGdpdmVuIEdhbWUgT2JqZWN0IGFuZCBhbGlnbnMgaXQgc28gdGhhdCBpdCBpcyBwb3NpdGlvbmVkIG5leHQgdG8gdGhlIGJvdHRvbSBjZW50ZXIgcG9zaXRpb24gb2YgdGhlIG90aGVyLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQWxpZ24uVG8uQm90dG9tQ2VudGVyXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSBwb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBhbGlnblRvIC0gVGhlIEdhbWUgT2JqZWN0IHRvIGJhc2UgdGhlIGFsaWdubWVudCBwb3NpdGlvbiBvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRYPTBdIC0gT3B0aW9uYWwgaG9yaXpvbnRhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WT0wXSAtIE9wdGlvbmFsIHZlcnRpY2FsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBhbGlnbmVkLlxyXG4gKi9cclxudmFyIEJvdHRvbUNlbnRlciA9IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCBhbGlnblRvLCBvZmZzZXRYLCBvZmZzZXRZKVxyXG57XHJcbiAgICBpZiAob2Zmc2V0WCA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFggPSAwOyB9XHJcbiAgICBpZiAob2Zmc2V0WSA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFkgPSAwOyB9XHJcblxyXG4gICAgU2V0Q2VudGVyWChnYW1lT2JqZWN0LCBHZXRDZW50ZXJYKGFsaWduVG8pICsgb2Zmc2V0WCk7XHJcbiAgICBTZXRUb3AoZ2FtZU9iamVjdCwgR2V0Qm90dG9tKGFsaWduVG8pICsgb2Zmc2V0WSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJvdHRvbUNlbnRlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/BottomCenter.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/to/BottomLeft.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/display/align/to/BottomLeft.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetBottom = __webpack_require__(/*! ../../bounds/GetBottom */ \"./node_modules/phaser/src/display/bounds/GetBottom.js\");\r\nvar GetLeft = __webpack_require__(/*! ../../bounds/GetLeft */ \"./node_modules/phaser/src/display/bounds/GetLeft.js\");\r\nvar SetLeft = __webpack_require__(/*! ../../bounds/SetLeft */ \"./node_modules/phaser/src/display/bounds/SetLeft.js\");\r\nvar SetTop = __webpack_require__(/*! ../../bounds/SetTop */ \"./node_modules/phaser/src/display/bounds/SetTop.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned next to the bottom left position of the other.\r\n *\r\n * @function Phaser.Display.Align.To.BottomLeft\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignTo - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar BottomLeft = function (gameObject, alignTo, offsetX, offsetY)\r\n{\r\n if (offsetX === undefined) { offsetX = 0; }\r\n if (offsetY === undefined) { offsetY = 0; }\r\n\r\n SetLeft(gameObject, GetLeft(alignTo) - offsetX);\r\n SetTop(gameObject, GetBottom(alignTo) + offsetY);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = BottomLeft;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL0JvdHRvbUxlZnQuanM/NjM3MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMscUZBQXdCO0FBQ2hELGNBQWMsbUJBQU8sQ0FBQyxpRkFBc0I7QUFDNUMsY0FBYyxtQkFBTyxDQUFDLGlGQUFzQjtBQUM1QyxhQUFhLG1CQUFPLENBQUMsK0VBQXFCOztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDhCQUE4QjtBQUMzQztBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsYUFBYTtBQUM3QyxnQ0FBZ0MsYUFBYTs7QUFFN0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9hbGlnbi90by9Cb3R0b21MZWZ0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0Qm90dG9tID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldEJvdHRvbScpO1xyXG52YXIgR2V0TGVmdCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9HZXRMZWZ0Jyk7XHJcbnZhciBTZXRMZWZ0ID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL1NldExlZnQnKTtcclxudmFyIFNldFRvcCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRUb3AnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBnaXZlbiBHYW1lIE9iamVjdCBhbmQgYWxpZ25zIGl0IHNvIHRoYXQgaXQgaXMgcG9zaXRpb25lZCBuZXh0IHRvIHRoZSBib3R0b20gbGVmdCBwb3NpdGlvbiBvZiB0aGUgb3RoZXIuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5BbGlnbi5Uby5Cb3R0b21MZWZ0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSBwb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBhbGlnblRvIC0gVGhlIEdhbWUgT2JqZWN0IHRvIGJhc2UgdGhlIGFsaWdubWVudCBwb3NpdGlvbiBvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRYPTBdIC0gT3B0aW9uYWwgaG9yaXpvbnRhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WT0wXSAtIE9wdGlvbmFsIHZlcnRpY2FsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBhbGlnbmVkLlxyXG4gKi9cclxudmFyIEJvdHRvbUxlZnQgPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgYWxpZ25Ubywgb2Zmc2V0WCwgb2Zmc2V0WSlcclxue1xyXG4gICAgaWYgKG9mZnNldFggPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRYID0gMDsgfVxyXG4gICAgaWYgKG9mZnNldFkgPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRZID0gMDsgfVxyXG5cclxuICAgIFNldExlZnQoZ2FtZU9iamVjdCwgR2V0TGVmdChhbGlnblRvKSAtIG9mZnNldFgpO1xyXG4gICAgU2V0VG9wKGdhbWVPYmplY3QsIEdldEJvdHRvbShhbGlnblRvKSArIG9mZnNldFkpO1xyXG5cclxuICAgIHJldHVybiBnYW1lT2JqZWN0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBCb3R0b21MZWZ0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/BottomLeft.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/to/BottomRight.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/display/align/to/BottomRight.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetBottom = __webpack_require__(/*! ../../bounds/GetBottom */ \"./node_modules/phaser/src/display/bounds/GetBottom.js\");\r\nvar GetRight = __webpack_require__(/*! ../../bounds/GetRight */ \"./node_modules/phaser/src/display/bounds/GetRight.js\");\r\nvar SetRight = __webpack_require__(/*! ../../bounds/SetRight */ \"./node_modules/phaser/src/display/bounds/SetRight.js\");\r\nvar SetTop = __webpack_require__(/*! ../../bounds/SetTop */ \"./node_modules/phaser/src/display/bounds/SetTop.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned next to the bottom right position of the other.\r\n *\r\n * @function Phaser.Display.Align.To.BottomRight\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignTo - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar BottomRight = function (gameObject, alignTo, offsetX, offsetY)\r\n{\r\n if (offsetX === undefined) { offsetX = 0; }\r\n if (offsetY === undefined) { offsetY = 0; }\r\n\r\n SetRight(gameObject, GetRight(alignTo) + offsetX);\r\n SetTop(gameObject, GetBottom(alignTo) + offsetY);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = BottomRight;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL0JvdHRvbVJpZ2h0LmpzPzM3YTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLHFGQUF3QjtBQUNoRCxlQUFlLG1CQUFPLENBQUMsbUZBQXVCO0FBQzlDLGVBQWUsbUJBQU8sQ0FBQyxtRkFBdUI7QUFDOUMsYUFBYSxtQkFBTyxDQUFDLCtFQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSw4QkFBOEI7QUFDM0M7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGFBQWE7QUFDN0MsZ0NBQWdDLGFBQWE7O0FBRTdDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYWxpZ24vdG8vQm90dG9tUmlnaHQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRCb3R0b20gPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0Qm90dG9tJyk7XHJcbnZhciBHZXRSaWdodCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9HZXRSaWdodCcpO1xyXG52YXIgU2V0UmlnaHQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0UmlnaHQnKTtcclxudmFyIFNldFRvcCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRUb3AnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBnaXZlbiBHYW1lIE9iamVjdCBhbmQgYWxpZ25zIGl0IHNvIHRoYXQgaXQgaXMgcG9zaXRpb25lZCBuZXh0IHRvIHRoZSBib3R0b20gcmlnaHQgcG9zaXRpb24gb2YgdGhlIG90aGVyLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQWxpZ24uVG8uQm90dG9tUmlnaHRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gRyAtIFtnYW1lT2JqZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3aWxsIGJlIHBvc2l0aW9uZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGFsaWduVG8gLSBUaGUgR2FtZSBPYmplY3QgdG8gYmFzZSB0aGUgYWxpZ25tZW50IHBvc2l0aW9uIG9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFg9MF0gLSBPcHRpb25hbCBob3Jpem9udGFsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRZPTBdIC0gT3B0aW9uYWwgdmVydGljYWwgb2Zmc2V0IGZyb20gdGhlIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGFsaWduZWQuXHJcbiAqL1xyXG52YXIgQm90dG9tUmlnaHQgPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgYWxpZ25Ubywgb2Zmc2V0WCwgb2Zmc2V0WSlcclxue1xyXG4gICAgaWYgKG9mZnNldFggPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRYID0gMDsgfVxyXG4gICAgaWYgKG9mZnNldFkgPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRZID0gMDsgfVxyXG5cclxuICAgIFNldFJpZ2h0KGdhbWVPYmplY3QsIEdldFJpZ2h0KGFsaWduVG8pICsgb2Zmc2V0WCk7XHJcbiAgICBTZXRUb3AoZ2FtZU9iamVjdCwgR2V0Qm90dG9tKGFsaWduVG8pICsgb2Zmc2V0WSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJvdHRvbVJpZ2h0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/BottomRight.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/to/LeftBottom.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/display/align/to/LeftBottom.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetBottom = __webpack_require__(/*! ../../bounds/GetBottom */ \"./node_modules/phaser/src/display/bounds/GetBottom.js\");\r\nvar GetLeft = __webpack_require__(/*! ../../bounds/GetLeft */ \"./node_modules/phaser/src/display/bounds/GetLeft.js\");\r\nvar SetBottom = __webpack_require__(/*! ../../bounds/SetBottom */ \"./node_modules/phaser/src/display/bounds/SetBottom.js\");\r\nvar SetRight = __webpack_require__(/*! ../../bounds/SetRight */ \"./node_modules/phaser/src/display/bounds/SetRight.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned next to the left bottom position of the other.\r\n *\r\n * @function Phaser.Display.Align.To.LeftBottom\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignTo - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar LeftBottom = function (gameObject, alignTo, offsetX, offsetY)\r\n{\r\n if (offsetX === undefined) { offsetX = 0; }\r\n if (offsetY === undefined) { offsetY = 0; }\r\n\r\n SetRight(gameObject, GetLeft(alignTo) - offsetX);\r\n SetBottom(gameObject, GetBottom(alignTo) + offsetY);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = LeftBottom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL0xlZnRCb3R0b20uanM/M2JjZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMscUZBQXdCO0FBQ2hELGNBQWMsbUJBQU8sQ0FBQyxpRkFBc0I7QUFDNUMsZ0JBQWdCLG1CQUFPLENBQUMscUZBQXdCO0FBQ2hELGVBQWUsbUJBQU8sQ0FBQyxtRkFBdUI7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsOEJBQThCO0FBQzNDO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxhQUFhO0FBQzdDLGdDQUFnQyxhQUFhOztBQUU3QztBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL0xlZnRCb3R0b20uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRCb3R0b20gPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0Qm90dG9tJyk7XHJcbnZhciBHZXRMZWZ0ID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldExlZnQnKTtcclxudmFyIFNldEJvdHRvbSA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRCb3R0b20nKTtcclxudmFyIFNldFJpZ2h0ID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL1NldFJpZ2h0Jyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgZ2l2ZW4gR2FtZSBPYmplY3QgYW5kIGFsaWducyBpdCBzbyB0aGF0IGl0IGlzIHBvc2l0aW9uZWQgbmV4dCB0byB0aGUgbGVmdCBib3R0b20gcG9zaXRpb24gb2YgdGhlIG90aGVyLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQWxpZ24uVG8uTGVmdEJvdHRvbVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBHIC0gW2dhbWVPYmplY3QsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0aGF0IHdpbGwgYmUgcG9zaXRpb25lZC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gYWxpZ25UbyAtIFRoZSBHYW1lIE9iamVjdCB0byBiYXNlIHRoZSBhbGlnbm1lbnQgcG9zaXRpb24gb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WD0wXSAtIE9wdGlvbmFsIGhvcml6b250YWwgb2Zmc2V0IGZyb20gdGhlIHBvc2l0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFk9MF0gLSBPcHRpb25hbCB2ZXJ0aWNhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgYWxpZ25lZC5cclxuICovXHJcbnZhciBMZWZ0Qm90dG9tID0gZnVuY3Rpb24gKGdhbWVPYmplY3QsIGFsaWduVG8sIG9mZnNldFgsIG9mZnNldFkpXHJcbntcclxuICAgIGlmIChvZmZzZXRYID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WCA9IDA7IH1cclxuICAgIGlmIChvZmZzZXRZID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WSA9IDA7IH1cclxuXHJcbiAgICBTZXRSaWdodChnYW1lT2JqZWN0LCBHZXRMZWZ0KGFsaWduVG8pIC0gb2Zmc2V0WCk7XHJcbiAgICBTZXRCb3R0b20oZ2FtZU9iamVjdCwgR2V0Qm90dG9tKGFsaWduVG8pICsgb2Zmc2V0WSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IExlZnRCb3R0b207XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/LeftBottom.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/to/LeftCenter.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/display/align/to/LeftCenter.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetCenterY = __webpack_require__(/*! ../../bounds/GetCenterY */ \"./node_modules/phaser/src/display/bounds/GetCenterY.js\");\r\nvar GetLeft = __webpack_require__(/*! ../../bounds/GetLeft */ \"./node_modules/phaser/src/display/bounds/GetLeft.js\");\r\nvar SetCenterY = __webpack_require__(/*! ../../bounds/SetCenterY */ \"./node_modules/phaser/src/display/bounds/SetCenterY.js\");\r\nvar SetRight = __webpack_require__(/*! ../../bounds/SetRight */ \"./node_modules/phaser/src/display/bounds/SetRight.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned next to the left center position of the other.\r\n *\r\n * @function Phaser.Display.Align.To.LeftCenter\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignTo - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar LeftCenter = function (gameObject, alignTo, offsetX, offsetY)\r\n{\r\n if (offsetX === undefined) { offsetX = 0; }\r\n if (offsetY === undefined) { offsetY = 0; }\r\n\r\n SetRight(gameObject, GetLeft(alignTo) - offsetX);\r\n SetCenterY(gameObject, GetCenterY(alignTo) + offsetY);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = LeftCenter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL0xlZnRDZW50ZXIuanM/MDc4NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsdUZBQXlCO0FBQ2xELGNBQWMsbUJBQU8sQ0FBQyxpRkFBc0I7QUFDNUMsaUJBQWlCLG1CQUFPLENBQUMsdUZBQXlCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxtRkFBdUI7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsOEJBQThCO0FBQzNDO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxhQUFhO0FBQzdDLGdDQUFnQyxhQUFhOztBQUU3QztBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL0xlZnRDZW50ZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRDZW50ZXJZID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldENlbnRlclknKTtcclxudmFyIEdldExlZnQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0TGVmdCcpO1xyXG52YXIgU2V0Q2VudGVyWSA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRDZW50ZXJZJyk7XHJcbnZhciBTZXRSaWdodCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRSaWdodCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGdpdmVuIEdhbWUgT2JqZWN0IGFuZCBhbGlnbnMgaXQgc28gdGhhdCBpdCBpcyBwb3NpdGlvbmVkIG5leHQgdG8gdGhlIGxlZnQgY2VudGVyIHBvc2l0aW9uIG9mIHRoZSBvdGhlci5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkFsaWduLlRvLkxlZnRDZW50ZXJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gRyAtIFtnYW1lT2JqZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3aWxsIGJlIHBvc2l0aW9uZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGFsaWduVG8gLSBUaGUgR2FtZSBPYmplY3QgdG8gYmFzZSB0aGUgYWxpZ25tZW50IHBvc2l0aW9uIG9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFg9MF0gLSBPcHRpb25hbCBob3Jpem9udGFsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRZPTBdIC0gT3B0aW9uYWwgdmVydGljYWwgb2Zmc2V0IGZyb20gdGhlIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGFsaWduZWQuXHJcbiAqL1xyXG52YXIgTGVmdENlbnRlciA9IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCBhbGlnblRvLCBvZmZzZXRYLCBvZmZzZXRZKVxyXG57XHJcbiAgICBpZiAob2Zmc2V0WCA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFggPSAwOyB9XHJcbiAgICBpZiAob2Zmc2V0WSA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFkgPSAwOyB9XHJcblxyXG4gICAgU2V0UmlnaHQoZ2FtZU9iamVjdCwgR2V0TGVmdChhbGlnblRvKSAtIG9mZnNldFgpO1xyXG4gICAgU2V0Q2VudGVyWShnYW1lT2JqZWN0LCBHZXRDZW50ZXJZKGFsaWduVG8pICsgb2Zmc2V0WSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IExlZnRDZW50ZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/LeftCenter.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/to/LeftTop.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/display/align/to/LeftTop.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetLeft = __webpack_require__(/*! ../../bounds/GetLeft */ \"./node_modules/phaser/src/display/bounds/GetLeft.js\");\r\nvar GetTop = __webpack_require__(/*! ../../bounds/GetTop */ \"./node_modules/phaser/src/display/bounds/GetTop.js\");\r\nvar SetRight = __webpack_require__(/*! ../../bounds/SetRight */ \"./node_modules/phaser/src/display/bounds/SetRight.js\");\r\nvar SetTop = __webpack_require__(/*! ../../bounds/SetTop */ \"./node_modules/phaser/src/display/bounds/SetTop.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned next to the left top position of the other.\r\n *\r\n * @function Phaser.Display.Align.To.LeftTop\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignTo - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar LeftTop = function (gameObject, alignTo, offsetX, offsetY)\r\n{\r\n if (offsetX === undefined) { offsetX = 0; }\r\n if (offsetY === undefined) { offsetY = 0; }\r\n\r\n SetRight(gameObject, GetLeft(alignTo) - offsetX);\r\n SetTop(gameObject, GetTop(alignTo) - offsetY);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = LeftTop;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL0xlZnRUb3AuanM/MjlhMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLGlGQUFzQjtBQUM1QyxhQUFhLG1CQUFPLENBQUMsK0VBQXFCO0FBQzFDLGVBQWUsbUJBQU8sQ0FBQyxtRkFBdUI7QUFDOUMsYUFBYSxtQkFBTyxDQUFDLCtFQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSw4QkFBOEI7QUFDM0M7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGFBQWE7QUFDN0MsZ0NBQWdDLGFBQWE7O0FBRTdDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYWxpZ24vdG8vTGVmdFRvcC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldExlZnQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0TGVmdCcpO1xyXG52YXIgR2V0VG9wID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldFRvcCcpO1xyXG52YXIgU2V0UmlnaHQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0UmlnaHQnKTtcclxudmFyIFNldFRvcCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRUb3AnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBnaXZlbiBHYW1lIE9iamVjdCBhbmQgYWxpZ25zIGl0IHNvIHRoYXQgaXQgaXMgcG9zaXRpb25lZCBuZXh0IHRvIHRoZSBsZWZ0IHRvcCBwb3NpdGlvbiBvZiB0aGUgb3RoZXIuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5BbGlnbi5Uby5MZWZ0VG9wXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSBwb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBhbGlnblRvIC0gVGhlIEdhbWUgT2JqZWN0IHRvIGJhc2UgdGhlIGFsaWdubWVudCBwb3NpdGlvbiBvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRYPTBdIC0gT3B0aW9uYWwgaG9yaXpvbnRhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WT0wXSAtIE9wdGlvbmFsIHZlcnRpY2FsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBhbGlnbmVkLlxyXG4gKi9cclxudmFyIExlZnRUb3AgPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgYWxpZ25Ubywgb2Zmc2V0WCwgb2Zmc2V0WSlcclxue1xyXG4gICAgaWYgKG9mZnNldFggPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRYID0gMDsgfVxyXG4gICAgaWYgKG9mZnNldFkgPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRZID0gMDsgfVxyXG5cclxuICAgIFNldFJpZ2h0KGdhbWVPYmplY3QsIEdldExlZnQoYWxpZ25UbykgLSBvZmZzZXRYKTtcclxuICAgIFNldFRvcChnYW1lT2JqZWN0LCBHZXRUb3AoYWxpZ25UbykgLSBvZmZzZXRZKTtcclxuXHJcbiAgICByZXR1cm4gZ2FtZU9iamVjdDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTGVmdFRvcDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/LeftTop.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/to/RightBottom.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/display/align/to/RightBottom.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetBottom = __webpack_require__(/*! ../../bounds/GetBottom */ \"./node_modules/phaser/src/display/bounds/GetBottom.js\");\r\nvar GetRight = __webpack_require__(/*! ../../bounds/GetRight */ \"./node_modules/phaser/src/display/bounds/GetRight.js\");\r\nvar SetBottom = __webpack_require__(/*! ../../bounds/SetBottom */ \"./node_modules/phaser/src/display/bounds/SetBottom.js\");\r\nvar SetLeft = __webpack_require__(/*! ../../bounds/SetLeft */ \"./node_modules/phaser/src/display/bounds/SetLeft.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned next to the right bottom position of the other.\r\n *\r\n * @function Phaser.Display.Align.To.RightBottom\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignTo - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar RightBottom = function (gameObject, alignTo, offsetX, offsetY)\r\n{\r\n if (offsetX === undefined) { offsetX = 0; }\r\n if (offsetY === undefined) { offsetY = 0; }\r\n\r\n SetLeft(gameObject, GetRight(alignTo) + offsetX);\r\n SetBottom(gameObject, GetBottom(alignTo) + offsetY);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = RightBottom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL1JpZ2h0Qm90dG9tLmpzPzE1MjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLHFGQUF3QjtBQUNoRCxlQUFlLG1CQUFPLENBQUMsbUZBQXVCO0FBQzlDLGdCQUFnQixtQkFBTyxDQUFDLHFGQUF3QjtBQUNoRCxjQUFjLG1CQUFPLENBQUMsaUZBQXNCOztBQUU1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDhCQUE4QjtBQUMzQztBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsYUFBYTtBQUM3QyxnQ0FBZ0MsYUFBYTs7QUFFN0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9hbGlnbi90by9SaWdodEJvdHRvbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldEJvdHRvbSA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9HZXRCb3R0b20nKTtcclxudmFyIEdldFJpZ2h0ID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldFJpZ2h0Jyk7XHJcbnZhciBTZXRCb3R0b20gPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0Qm90dG9tJyk7XHJcbnZhciBTZXRMZWZ0ID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL1NldExlZnQnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBnaXZlbiBHYW1lIE9iamVjdCBhbmQgYWxpZ25zIGl0IHNvIHRoYXQgaXQgaXMgcG9zaXRpb25lZCBuZXh0IHRvIHRoZSByaWdodCBib3R0b20gcG9zaXRpb24gb2YgdGhlIG90aGVyLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQWxpZ24uVG8uUmlnaHRCb3R0b21cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gRyAtIFtnYW1lT2JqZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3aWxsIGJlIHBvc2l0aW9uZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGFsaWduVG8gLSBUaGUgR2FtZSBPYmplY3QgdG8gYmFzZSB0aGUgYWxpZ25tZW50IHBvc2l0aW9uIG9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFg9MF0gLSBPcHRpb25hbCBob3Jpem9udGFsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRZPTBdIC0gT3B0aW9uYWwgdmVydGljYWwgb2Zmc2V0IGZyb20gdGhlIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGFsaWduZWQuXHJcbiAqL1xyXG52YXIgUmlnaHRCb3R0b20gPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgYWxpZ25Ubywgb2Zmc2V0WCwgb2Zmc2V0WSlcclxue1xyXG4gICAgaWYgKG9mZnNldFggPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRYID0gMDsgfVxyXG4gICAgaWYgKG9mZnNldFkgPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRZID0gMDsgfVxyXG5cclxuICAgIFNldExlZnQoZ2FtZU9iamVjdCwgR2V0UmlnaHQoYWxpZ25UbykgKyBvZmZzZXRYKTtcclxuICAgIFNldEJvdHRvbShnYW1lT2JqZWN0LCBHZXRCb3R0b20oYWxpZ25UbykgKyBvZmZzZXRZKTtcclxuXHJcbiAgICByZXR1cm4gZ2FtZU9iamVjdDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmlnaHRCb3R0b207XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/RightBottom.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/to/RightCenter.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/display/align/to/RightCenter.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetCenterY = __webpack_require__(/*! ../../bounds/GetCenterY */ \"./node_modules/phaser/src/display/bounds/GetCenterY.js\");\r\nvar GetRight = __webpack_require__(/*! ../../bounds/GetRight */ \"./node_modules/phaser/src/display/bounds/GetRight.js\");\r\nvar SetCenterY = __webpack_require__(/*! ../../bounds/SetCenterY */ \"./node_modules/phaser/src/display/bounds/SetCenterY.js\");\r\nvar SetLeft = __webpack_require__(/*! ../../bounds/SetLeft */ \"./node_modules/phaser/src/display/bounds/SetLeft.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned next to the right center position of the other.\r\n *\r\n * @function Phaser.Display.Align.To.RightCenter\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignTo - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar RightCenter = function (gameObject, alignTo, offsetX, offsetY)\r\n{\r\n if (offsetX === undefined) { offsetX = 0; }\r\n if (offsetY === undefined) { offsetY = 0; }\r\n\r\n SetLeft(gameObject, GetRight(alignTo) + offsetX);\r\n SetCenterY(gameObject, GetCenterY(alignTo) + offsetY);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = RightCenter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL1JpZ2h0Q2VudGVyLmpzPzZiZDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLHVGQUF5QjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsbUZBQXVCO0FBQzlDLGlCQUFpQixtQkFBTyxDQUFDLHVGQUF5QjtBQUNsRCxjQUFjLG1CQUFPLENBQUMsaUZBQXNCOztBQUU1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDhCQUE4QjtBQUMzQztBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsYUFBYTtBQUM3QyxnQ0FBZ0MsYUFBYTs7QUFFN0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9hbGlnbi90by9SaWdodENlbnRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldENlbnRlclkgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0Q2VudGVyWScpO1xyXG52YXIgR2V0UmlnaHQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0UmlnaHQnKTtcclxudmFyIFNldENlbnRlclkgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0Q2VudGVyWScpO1xyXG52YXIgU2V0TGVmdCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRMZWZ0Jyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgZ2l2ZW4gR2FtZSBPYmplY3QgYW5kIGFsaWducyBpdCBzbyB0aGF0IGl0IGlzIHBvc2l0aW9uZWQgbmV4dCB0byB0aGUgcmlnaHQgY2VudGVyIHBvc2l0aW9uIG9mIHRoZSBvdGhlci5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkFsaWduLlRvLlJpZ2h0Q2VudGVyXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSBwb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBhbGlnblRvIC0gVGhlIEdhbWUgT2JqZWN0IHRvIGJhc2UgdGhlIGFsaWdubWVudCBwb3NpdGlvbiBvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRYPTBdIC0gT3B0aW9uYWwgaG9yaXpvbnRhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WT0wXSAtIE9wdGlvbmFsIHZlcnRpY2FsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBhbGlnbmVkLlxyXG4gKi9cclxudmFyIFJpZ2h0Q2VudGVyID0gZnVuY3Rpb24gKGdhbWVPYmplY3QsIGFsaWduVG8sIG9mZnNldFgsIG9mZnNldFkpXHJcbntcclxuICAgIGlmIChvZmZzZXRYID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WCA9IDA7IH1cclxuICAgIGlmIChvZmZzZXRZID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WSA9IDA7IH1cclxuXHJcbiAgICBTZXRMZWZ0KGdhbWVPYmplY3QsIEdldFJpZ2h0KGFsaWduVG8pICsgb2Zmc2V0WCk7XHJcbiAgICBTZXRDZW50ZXJZKGdhbWVPYmplY3QsIEdldENlbnRlclkoYWxpZ25UbykgKyBvZmZzZXRZKTtcclxuXHJcbiAgICByZXR1cm4gZ2FtZU9iamVjdDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmlnaHRDZW50ZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/RightCenter.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/to/RightTop.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/display/align/to/RightTop.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetRight = __webpack_require__(/*! ../../bounds/GetRight */ \"./node_modules/phaser/src/display/bounds/GetRight.js\");\r\nvar GetTop = __webpack_require__(/*! ../../bounds/GetTop */ \"./node_modules/phaser/src/display/bounds/GetTop.js\");\r\nvar SetLeft = __webpack_require__(/*! ../../bounds/SetLeft */ \"./node_modules/phaser/src/display/bounds/SetLeft.js\");\r\nvar SetTop = __webpack_require__(/*! ../../bounds/SetTop */ \"./node_modules/phaser/src/display/bounds/SetTop.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned next to the right top position of the other.\r\n *\r\n * @function Phaser.Display.Align.To.RightTop\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignTo - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar RightTop = function (gameObject, alignTo, offsetX, offsetY)\r\n{\r\n if (offsetX === undefined) { offsetX = 0; }\r\n if (offsetY === undefined) { offsetY = 0; }\r\n\r\n SetLeft(gameObject, GetRight(alignTo) + offsetX);\r\n SetTop(gameObject, GetTop(alignTo) - offsetY);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = RightTop;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL1JpZ2h0VG9wLmpzPzZiNDciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxtRkFBdUI7QUFDOUMsYUFBYSxtQkFBTyxDQUFDLCtFQUFxQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsaUZBQXNCO0FBQzVDLGFBQWEsbUJBQU8sQ0FBQywrRUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsOEJBQThCO0FBQzNDO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxhQUFhO0FBQzdDLGdDQUFnQyxhQUFhOztBQUU3QztBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL1JpZ2h0VG9wLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0UmlnaHQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0UmlnaHQnKTtcclxudmFyIEdldFRvcCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9HZXRUb3AnKTtcclxudmFyIFNldExlZnQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0TGVmdCcpO1xyXG52YXIgU2V0VG9wID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL1NldFRvcCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGdpdmVuIEdhbWUgT2JqZWN0IGFuZCBhbGlnbnMgaXQgc28gdGhhdCBpdCBpcyBwb3NpdGlvbmVkIG5leHQgdG8gdGhlIHJpZ2h0IHRvcCBwb3NpdGlvbiBvZiB0aGUgb3RoZXIuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5BbGlnbi5Uby5SaWdodFRvcFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBHIC0gW2dhbWVPYmplY3QsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0aGF0IHdpbGwgYmUgcG9zaXRpb25lZC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gYWxpZ25UbyAtIFRoZSBHYW1lIE9iamVjdCB0byBiYXNlIHRoZSBhbGlnbm1lbnQgcG9zaXRpb24gb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WD0wXSAtIE9wdGlvbmFsIGhvcml6b250YWwgb2Zmc2V0IGZyb20gdGhlIHBvc2l0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFk9MF0gLSBPcHRpb25hbCB2ZXJ0aWNhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgYWxpZ25lZC5cclxuICovXHJcbnZhciBSaWdodFRvcCA9IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCBhbGlnblRvLCBvZmZzZXRYLCBvZmZzZXRZKVxyXG57XHJcbiAgICBpZiAob2Zmc2V0WCA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFggPSAwOyB9XHJcbiAgICBpZiAob2Zmc2V0WSA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFkgPSAwOyB9XHJcblxyXG4gICAgU2V0TGVmdChnYW1lT2JqZWN0LCBHZXRSaWdodChhbGlnblRvKSArIG9mZnNldFgpO1xyXG4gICAgU2V0VG9wKGdhbWVPYmplY3QsIEdldFRvcChhbGlnblRvKSAtIG9mZnNldFkpO1xyXG5cclxuICAgIHJldHVybiBnYW1lT2JqZWN0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSaWdodFRvcDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/RightTop.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/to/TopCenter.js":
/*!***************************************************************!*\
!*** ./node_modules/phaser/src/display/align/to/TopCenter.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetCenterX = __webpack_require__(/*! ../../bounds/GetCenterX */ \"./node_modules/phaser/src/display/bounds/GetCenterX.js\");\r\nvar GetTop = __webpack_require__(/*! ../../bounds/GetTop */ \"./node_modules/phaser/src/display/bounds/GetTop.js\");\r\nvar SetBottom = __webpack_require__(/*! ../../bounds/SetBottom */ \"./node_modules/phaser/src/display/bounds/SetBottom.js\");\r\nvar SetCenterX = __webpack_require__(/*! ../../bounds/SetCenterX */ \"./node_modules/phaser/src/display/bounds/SetCenterX.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned next to the top center position of the other.\r\n *\r\n * @function Phaser.Display.Align.To.TopCenter\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignTo - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar TopCenter = function (gameObject, alignTo, offsetX, offsetY)\r\n{\r\n if (offsetX === undefined) { offsetX = 0; }\r\n if (offsetY === undefined) { offsetY = 0; }\r\n\r\n SetCenterX(gameObject, GetCenterX(alignTo) + offsetX);\r\n SetBottom(gameObject, GetTop(alignTo) - offsetY);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = TopCenter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL1RvcENlbnRlci5qcz8yNThjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyx1RkFBeUI7QUFDbEQsYUFBYSxtQkFBTyxDQUFDLCtFQUFxQjtBQUMxQyxnQkFBZ0IsbUJBQU8sQ0FBQyxxRkFBd0I7QUFDaEQsaUJBQWlCLG1CQUFPLENBQUMsdUZBQXlCOztBQUVsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDhCQUE4QjtBQUMzQztBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsYUFBYTtBQUM3QyxnQ0FBZ0MsYUFBYTs7QUFFN0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9hbGlnbi90by9Ub3BDZW50ZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRDZW50ZXJYID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldENlbnRlclgnKTtcclxudmFyIEdldFRvcCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9HZXRUb3AnKTtcclxudmFyIFNldEJvdHRvbSA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9TZXRCb3R0b20nKTtcclxudmFyIFNldENlbnRlclggPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0Q2VudGVyWCcpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIGdpdmVuIEdhbWUgT2JqZWN0IGFuZCBhbGlnbnMgaXQgc28gdGhhdCBpdCBpcyBwb3NpdGlvbmVkIG5leHQgdG8gdGhlIHRvcCBjZW50ZXIgcG9zaXRpb24gb2YgdGhlIG90aGVyLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQWxpZ24uVG8uVG9wQ2VudGVyXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSBwb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBhbGlnblRvIC0gVGhlIEdhbWUgT2JqZWN0IHRvIGJhc2UgdGhlIGFsaWdubWVudCBwb3NpdGlvbiBvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRYPTBdIC0gT3B0aW9uYWwgaG9yaXpvbnRhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WT0wXSAtIE9wdGlvbmFsIHZlcnRpY2FsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBhbGlnbmVkLlxyXG4gKi9cclxudmFyIFRvcENlbnRlciA9IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCBhbGlnblRvLCBvZmZzZXRYLCBvZmZzZXRZKVxyXG57XHJcbiAgICBpZiAob2Zmc2V0WCA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFggPSAwOyB9XHJcbiAgICBpZiAob2Zmc2V0WSA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFkgPSAwOyB9XHJcblxyXG4gICAgU2V0Q2VudGVyWChnYW1lT2JqZWN0LCBHZXRDZW50ZXJYKGFsaWduVG8pICsgb2Zmc2V0WCk7XHJcbiAgICBTZXRCb3R0b20oZ2FtZU9iamVjdCwgR2V0VG9wKGFsaWduVG8pIC0gb2Zmc2V0WSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRvcENlbnRlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/TopCenter.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/to/TopLeft.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/display/align/to/TopLeft.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetLeft = __webpack_require__(/*! ../../bounds/GetLeft */ \"./node_modules/phaser/src/display/bounds/GetLeft.js\");\r\nvar GetTop = __webpack_require__(/*! ../../bounds/GetTop */ \"./node_modules/phaser/src/display/bounds/GetTop.js\");\r\nvar SetBottom = __webpack_require__(/*! ../../bounds/SetBottom */ \"./node_modules/phaser/src/display/bounds/SetBottom.js\");\r\nvar SetLeft = __webpack_require__(/*! ../../bounds/SetLeft */ \"./node_modules/phaser/src/display/bounds/SetLeft.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned next to the top left position of the other.\r\n *\r\n * @function Phaser.Display.Align.To.TopLeft\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignTo - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar TopLeft = function (gameObject, alignTo, offsetX, offsetY)\r\n{\r\n if (offsetX === undefined) { offsetX = 0; }\r\n if (offsetY === undefined) { offsetY = 0; }\r\n\r\n SetLeft(gameObject, GetLeft(alignTo) - offsetX);\r\n SetBottom(gameObject, GetTop(alignTo) - offsetY);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = TopLeft;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL1RvcExlZnQuanM/NTk1NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLGlGQUFzQjtBQUM1QyxhQUFhLG1CQUFPLENBQUMsK0VBQXFCO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLHFGQUF3QjtBQUNoRCxjQUFjLG1CQUFPLENBQUMsaUZBQXNCOztBQUU1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDhCQUE4QjtBQUMzQztBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsYUFBYTtBQUM3QyxnQ0FBZ0MsYUFBYTs7QUFFN0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9hbGlnbi90by9Ub3BMZWZ0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0TGVmdCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9HZXRMZWZ0Jyk7XHJcbnZhciBHZXRUb3AgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvR2V0VG9wJyk7XHJcbnZhciBTZXRCb3R0b20gPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0Qm90dG9tJyk7XHJcbnZhciBTZXRMZWZ0ID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL1NldExlZnQnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBnaXZlbiBHYW1lIE9iamVjdCBhbmQgYWxpZ25zIGl0IHNvIHRoYXQgaXQgaXMgcG9zaXRpb25lZCBuZXh0IHRvIHRoZSB0b3AgbGVmdCBwb3NpdGlvbiBvZiB0aGUgb3RoZXIuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5BbGlnbi5Uby5Ub3BMZWZ0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSBwb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBhbGlnblRvIC0gVGhlIEdhbWUgT2JqZWN0IHRvIGJhc2UgdGhlIGFsaWdubWVudCBwb3NpdGlvbiBvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRYPTBdIC0gT3B0aW9uYWwgaG9yaXpvbnRhbCBvZmZzZXQgZnJvbSB0aGUgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0WT0wXSAtIE9wdGlvbmFsIHZlcnRpY2FsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBhbGlnbmVkLlxyXG4gKi9cclxudmFyIFRvcExlZnQgPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgYWxpZ25Ubywgb2Zmc2V0WCwgb2Zmc2V0WSlcclxue1xyXG4gICAgaWYgKG9mZnNldFggPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRYID0gMDsgfVxyXG4gICAgaWYgKG9mZnNldFkgPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRZID0gMDsgfVxyXG5cclxuICAgIFNldExlZnQoZ2FtZU9iamVjdCwgR2V0TGVmdChhbGlnblRvKSAtIG9mZnNldFgpO1xyXG4gICAgU2V0Qm90dG9tKGdhbWVPYmplY3QsIEdldFRvcChhbGlnblRvKSAtIG9mZnNldFkpO1xyXG5cclxuICAgIHJldHVybiBnYW1lT2JqZWN0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUb3BMZWZ0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/TopLeft.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/to/TopRight.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/display/align/to/TopRight.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetRight = __webpack_require__(/*! ../../bounds/GetRight */ \"./node_modules/phaser/src/display/bounds/GetRight.js\");\r\nvar GetTop = __webpack_require__(/*! ../../bounds/GetTop */ \"./node_modules/phaser/src/display/bounds/GetTop.js\");\r\nvar SetBottom = __webpack_require__(/*! ../../bounds/SetBottom */ \"./node_modules/phaser/src/display/bounds/SetBottom.js\");\r\nvar SetRight = __webpack_require__(/*! ../../bounds/SetRight */ \"./node_modules/phaser/src/display/bounds/SetRight.js\");\r\n\r\n/**\r\n * Takes given Game Object and aligns it so that it is positioned next to the top right position of the other.\r\n *\r\n * @function Phaser.Display.Align.To.TopRight\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be positioned.\r\n * @param {Phaser.GameObjects.GameObject} alignTo - The Game Object to base the alignment position on.\r\n * @param {number} [offsetX=0] - Optional horizontal offset from the position.\r\n * @param {number} [offsetY=0] - Optional vertical offset from the position.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was aligned.\r\n */\r\nvar TopRight = function (gameObject, alignTo, offsetX, offsetY)\r\n{\r\n if (offsetX === undefined) { offsetX = 0; }\r\n if (offsetY === undefined) { offsetY = 0; }\r\n\r\n SetRight(gameObject, GetRight(alignTo) + offsetX);\r\n SetBottom(gameObject, GetTop(alignTo) - offsetY);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = TopRight;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL1RvcFJpZ2h0LmpzP2ZiMjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxtRkFBdUI7QUFDOUMsYUFBYSxtQkFBTyxDQUFDLCtFQUFxQjtBQUMxQyxnQkFBZ0IsbUJBQU8sQ0FBQyxxRkFBd0I7QUFDaEQsZUFBZSxtQkFBTyxDQUFDLG1GQUF1Qjs7QUFFOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSw4QkFBOEI7QUFDM0M7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGFBQWE7QUFDN0MsZ0NBQWdDLGFBQWE7O0FBRTdDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYWxpZ24vdG8vVG9wUmlnaHQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRSaWdodCA9IHJlcXVpcmUoJy4uLy4uL2JvdW5kcy9HZXRSaWdodCcpO1xyXG52YXIgR2V0VG9wID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL0dldFRvcCcpO1xyXG52YXIgU2V0Qm90dG9tID0gcmVxdWlyZSgnLi4vLi4vYm91bmRzL1NldEJvdHRvbScpO1xyXG52YXIgU2V0UmlnaHQgPSByZXF1aXJlKCcuLi8uLi9ib3VuZHMvU2V0UmlnaHQnKTtcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBnaXZlbiBHYW1lIE9iamVjdCBhbmQgYWxpZ25zIGl0IHNvIHRoYXQgaXQgaXMgcG9zaXRpb25lZCBuZXh0IHRvIHRoZSB0b3AgcmlnaHQgcG9zaXRpb24gb2YgdGhlIG90aGVyLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQWxpZ24uVG8uVG9wUmlnaHRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gRyAtIFtnYW1lT2JqZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3aWxsIGJlIHBvc2l0aW9uZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGFsaWduVG8gLSBUaGUgR2FtZSBPYmplY3QgdG8gYmFzZSB0aGUgYWxpZ25tZW50IHBvc2l0aW9uIG9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFg9MF0gLSBPcHRpb25hbCBob3Jpem9udGFsIG9mZnNldCBmcm9tIHRoZSBwb3NpdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRZPTBdIC0gT3B0aW9uYWwgdmVydGljYWwgb2Zmc2V0IGZyb20gdGhlIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGFsaWduZWQuXHJcbiAqL1xyXG52YXIgVG9wUmlnaHQgPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgYWxpZ25Ubywgb2Zmc2V0WCwgb2Zmc2V0WSlcclxue1xyXG4gICAgaWYgKG9mZnNldFggPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRYID0gMDsgfVxyXG4gICAgaWYgKG9mZnNldFkgPT09IHVuZGVmaW5lZCkgeyBvZmZzZXRZID0gMDsgfVxyXG5cclxuICAgIFNldFJpZ2h0KGdhbWVPYmplY3QsIEdldFJpZ2h0KGFsaWduVG8pICsgb2Zmc2V0WCk7XHJcbiAgICBTZXRCb3R0b20oZ2FtZU9iamVjdCwgR2V0VG9wKGFsaWduVG8pIC0gb2Zmc2V0WSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRvcFJpZ2h0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/TopRight.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/align/to/index.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/display/align/to/index.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Display.Align.To\r\n */\r\n\r\nmodule.exports = {\r\n\r\n BottomCenter: __webpack_require__(/*! ./BottomCenter */ \"./node_modules/phaser/src/display/align/to/BottomCenter.js\"),\r\n BottomLeft: __webpack_require__(/*! ./BottomLeft */ \"./node_modules/phaser/src/display/align/to/BottomLeft.js\"),\r\n BottomRight: __webpack_require__(/*! ./BottomRight */ \"./node_modules/phaser/src/display/align/to/BottomRight.js\"),\r\n LeftBottom: __webpack_require__(/*! ./LeftBottom */ \"./node_modules/phaser/src/display/align/to/LeftBottom.js\"),\r\n LeftCenter: __webpack_require__(/*! ./LeftCenter */ \"./node_modules/phaser/src/display/align/to/LeftCenter.js\"),\r\n LeftTop: __webpack_require__(/*! ./LeftTop */ \"./node_modules/phaser/src/display/align/to/LeftTop.js\"),\r\n RightBottom: __webpack_require__(/*! ./RightBottom */ \"./node_modules/phaser/src/display/align/to/RightBottom.js\"),\r\n RightCenter: __webpack_require__(/*! ./RightCenter */ \"./node_modules/phaser/src/display/align/to/RightCenter.js\"),\r\n RightTop: __webpack_require__(/*! ./RightTop */ \"./node_modules/phaser/src/display/align/to/RightTop.js\"),\r\n TopCenter: __webpack_require__(/*! ./TopCenter */ \"./node_modules/phaser/src/display/align/to/TopCenter.js\"),\r\n TopLeft: __webpack_require__(/*! ./TopLeft */ \"./node_modules/phaser/src/display/align/to/TopLeft.js\"),\r\n TopRight: __webpack_require__(/*! ./TopRight */ \"./node_modules/phaser/src/display/align/to/TopRight.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL2luZGV4LmpzP2ZiZDIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxrRkFBZ0I7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsOEVBQWM7QUFDdEMsaUJBQWlCLG1CQUFPLENBQUMsZ0ZBQWU7QUFDeEMsZ0JBQWdCLG1CQUFPLENBQUMsOEVBQWM7QUFDdEMsZ0JBQWdCLG1CQUFPLENBQUMsOEVBQWM7QUFDdEMsYUFBYSxtQkFBTyxDQUFDLHdFQUFXO0FBQ2hDLGlCQUFpQixtQkFBTyxDQUFDLGdGQUFlO0FBQ3hDLGlCQUFpQixtQkFBTyxDQUFDLGdGQUFlO0FBQ3hDLGNBQWMsbUJBQU8sQ0FBQywwRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsNEVBQWE7QUFDcEMsYUFBYSxtQkFBTyxDQUFDLHdFQUFXO0FBQ2hDLGNBQWMsbUJBQU8sQ0FBQywwRUFBWTs7QUFFbEMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2FsaWduL3RvL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuRGlzcGxheS5BbGlnbi5Ub1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEJvdHRvbUNlbnRlcjogcmVxdWlyZSgnLi9Cb3R0b21DZW50ZXInKSxcclxuICAgIEJvdHRvbUxlZnQ6IHJlcXVpcmUoJy4vQm90dG9tTGVmdCcpLFxyXG4gICAgQm90dG9tUmlnaHQ6IHJlcXVpcmUoJy4vQm90dG9tUmlnaHQnKSxcclxuICAgIExlZnRCb3R0b206IHJlcXVpcmUoJy4vTGVmdEJvdHRvbScpLFxyXG4gICAgTGVmdENlbnRlcjogcmVxdWlyZSgnLi9MZWZ0Q2VudGVyJyksXHJcbiAgICBMZWZ0VG9wOiByZXF1aXJlKCcuL0xlZnRUb3AnKSxcclxuICAgIFJpZ2h0Qm90dG9tOiByZXF1aXJlKCcuL1JpZ2h0Qm90dG9tJyksXHJcbiAgICBSaWdodENlbnRlcjogcmVxdWlyZSgnLi9SaWdodENlbnRlcicpLFxyXG4gICAgUmlnaHRUb3A6IHJlcXVpcmUoJy4vUmlnaHRUb3AnKSxcclxuICAgIFRvcENlbnRlcjogcmVxdWlyZSgnLi9Ub3BDZW50ZXInKSxcclxuICAgIFRvcExlZnQ6IHJlcXVpcmUoJy4vVG9wTGVmdCcpLFxyXG4gICAgVG9wUmlnaHQ6IHJlcXVpcmUoJy4vVG9wUmlnaHQnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/align/to/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/bounds/CenterOn.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/display/bounds/CenterOn.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar SetCenterX = __webpack_require__(/*! ./SetCenterX */ \"./node_modules/phaser/src/display/bounds/SetCenterX.js\");\r\nvar SetCenterY = __webpack_require__(/*! ./SetCenterY */ \"./node_modules/phaser/src/display/bounds/SetCenterY.js\");\r\n\r\n/**\r\n * Positions the Game Object so that it is centered on the given coordinates.\r\n *\r\n * @function Phaser.Display.Bounds.CenterOn\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be re-positioned.\r\n * @param {number} x - The horizontal coordinate to position the Game Object on.\r\n * @param {number} y - The vertical coordinate to position the Game Object on.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was positioned.\r\n */\r\nvar CenterOn = function (gameObject, x, y)\r\n{\r\n SetCenterX(gameObject, x);\r\n\r\n return SetCenterY(gameObject, y);\r\n};\r\n\r\nmodule.exports = CenterOn;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9DZW50ZXJPbi5qcz8wMmVmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyw0RUFBYztBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyw0RUFBYzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSw4QkFBOEI7QUFDM0M7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYm91bmRzL0NlbnRlck9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgU2V0Q2VudGVyWCA9IHJlcXVpcmUoJy4vU2V0Q2VudGVyWCcpO1xyXG52YXIgU2V0Q2VudGVyWSA9IHJlcXVpcmUoJy4vU2V0Q2VudGVyWScpO1xyXG5cclxuLyoqXHJcbiAqIFBvc2l0aW9ucyB0aGUgR2FtZSBPYmplY3Qgc28gdGhhdCBpdCBpcyBjZW50ZXJlZCBvbiB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5Cb3VuZHMuQ2VudGVyT25cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gRyAtIFtnYW1lT2JqZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3aWxsIGJlIHJlLXBvc2l0aW9uZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgY29vcmRpbmF0ZSB0byBwb3NpdGlvbiB0aGUgR2FtZSBPYmplY3Qgb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIGNvb3JkaW5hdGUgdG8gcG9zaXRpb24gdGhlIEdhbWUgT2JqZWN0IG9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIHBvc2l0aW9uZWQuXHJcbiAqL1xyXG52YXIgQ2VudGVyT24gPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgeCwgeSlcclxue1xyXG4gICAgU2V0Q2VudGVyWChnYW1lT2JqZWN0LCB4KTtcclxuXHJcbiAgICByZXR1cm4gU2V0Q2VudGVyWShnYW1lT2JqZWN0LCB5KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2VudGVyT247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/CenterOn.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/bounds/GetBottom.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/display/bounds/GetBottom.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns the bottom coordinate from the bounds of the Game Object.\r\n *\r\n * @function Phaser.Display.Bounds.GetBottom\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to get the bounds value from.\r\n *\r\n * @return {number} The bottom coordinate of the bounds of the Game Object.\r\n */\r\nvar GetBottom = function (gameObject)\r\n{\r\n return (gameObject.y + gameObject.height) - (gameObject.height * gameObject.originY);\r\n};\r\n\r\nmodule.exports = GetBottom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9HZXRCb3R0b20uanM/MmMxMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekM7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYm91bmRzL0dldEJvdHRvbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGJvdHRvbSBjb29yZGluYXRlIGZyb20gdGhlIGJvdW5kcyBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5Cb3VuZHMuR2V0Qm90dG9tXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRvIGdldCB0aGUgYm91bmRzIHZhbHVlIGZyb20uXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGJvdHRvbSBjb29yZGluYXRlIG9mIHRoZSBib3VuZHMgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKi9cclxudmFyIEdldEJvdHRvbSA9IGZ1bmN0aW9uIChnYW1lT2JqZWN0KVxyXG57XHJcbiAgICByZXR1cm4gKGdhbWVPYmplY3QueSArIGdhbWVPYmplY3QuaGVpZ2h0KSAtIChnYW1lT2JqZWN0LmhlaWdodCAqIGdhbWVPYmplY3Qub3JpZ2luWSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldEJvdHRvbTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/GetBottom.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/bounds/GetCenterX.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/display/bounds/GetCenterX.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns the center x coordinate from the bounds of the Game Object.\r\n *\r\n * @function Phaser.Display.Bounds.GetCenterX\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to get the bounds value from.\r\n *\r\n * @return {number} The center x coordinate of the bounds of the Game Object.\r\n */\r\nvar GetCenterX = function (gameObject)\r\n{\r\n return gameObject.x - (gameObject.width * gameObject.originX) + (gameObject.width * 0.5);\r\n};\r\n\r\nmodule.exports = GetCenterX;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9HZXRDZW50ZXJYLmpzPzgxNzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQThCO0FBQ3pDO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9HZXRDZW50ZXJYLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgY2VudGVyIHggY29vcmRpbmF0ZSBmcm9tIHRoZSBib3VuZHMgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQm91bmRzLkdldENlbnRlclhcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdG8gZ2V0IHRoZSBib3VuZHMgdmFsdWUgZnJvbS5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgY2VudGVyIHggY29vcmRpbmF0ZSBvZiB0aGUgYm91bmRzIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICovXHJcbnZhciBHZXRDZW50ZXJYID0gZnVuY3Rpb24gKGdhbWVPYmplY3QpXHJcbntcclxuICAgIHJldHVybiBnYW1lT2JqZWN0LnggLSAoZ2FtZU9iamVjdC53aWR0aCAqIGdhbWVPYmplY3Qub3JpZ2luWCkgKyAoZ2FtZU9iamVjdC53aWR0aCAqIDAuNSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldENlbnRlclg7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/GetCenterX.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/bounds/GetCenterY.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/display/bounds/GetCenterY.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns the center y coordinate from the bounds of the Game Object.\r\n *\r\n * @function Phaser.Display.Bounds.GetCenterY\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to get the bounds value from.\r\n *\r\n * @return {number} The center y coordinate of the bounds of the Game Object.\r\n */\r\nvar GetCenterY = function (gameObject)\r\n{\r\n return gameObject.y - (gameObject.height * gameObject.originY) + (gameObject.height * 0.5);\r\n};\r\n\r\nmodule.exports = GetCenterY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9HZXRDZW50ZXJZLmpzP2JiNTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQThCO0FBQ3pDO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9HZXRDZW50ZXJZLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgY2VudGVyIHkgY29vcmRpbmF0ZSBmcm9tIHRoZSBib3VuZHMgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQm91bmRzLkdldENlbnRlcllcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdG8gZ2V0IHRoZSBib3VuZHMgdmFsdWUgZnJvbS5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgY2VudGVyIHkgY29vcmRpbmF0ZSBvZiB0aGUgYm91bmRzIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICovXHJcbnZhciBHZXRDZW50ZXJZID0gZnVuY3Rpb24gKGdhbWVPYmplY3QpXHJcbntcclxuICAgIHJldHVybiBnYW1lT2JqZWN0LnkgLSAoZ2FtZU9iamVjdC5oZWlnaHQgKiBnYW1lT2JqZWN0Lm9yaWdpblkpICsgKGdhbWVPYmplY3QuaGVpZ2h0ICogMC41KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0Q2VudGVyWTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/GetCenterY.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/bounds/GetLeft.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/display/bounds/GetLeft.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns the left coordinate from the bounds of the Game Object.\r\n *\r\n * @function Phaser.Display.Bounds.GetLeft\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to get the bounds value from.\r\n *\r\n * @return {number} The left coordinate of the bounds of the Game Object.\r\n */\r\nvar GetLeft = function (gameObject)\r\n{\r\n return gameObject.x - (gameObject.width * gameObject.originX);\r\n};\r\n\r\nmodule.exports = GetLeft;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9HZXRMZWZ0LmpzPzQzOGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQThCO0FBQ3pDO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9HZXRMZWZ0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbGVmdCBjb29yZGluYXRlIGZyb20gdGhlIGJvdW5kcyBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5Cb3VuZHMuR2V0TGVmdFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0byBnZXQgdGhlIGJvdW5kcyB2YWx1ZSBmcm9tLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBsZWZ0IGNvb3JkaW5hdGUgb2YgdGhlIGJvdW5kcyBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAqL1xyXG52YXIgR2V0TGVmdCA9IGZ1bmN0aW9uIChnYW1lT2JqZWN0KVxyXG57XHJcbiAgICByZXR1cm4gZ2FtZU9iamVjdC54IC0gKGdhbWVPYmplY3Qud2lkdGggKiBnYW1lT2JqZWN0Lm9yaWdpblgpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRMZWZ0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/GetLeft.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/bounds/GetOffsetX.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/display/bounds/GetOffsetX.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns the amount the Game Object is visually offset from its x coordinate.\r\n * This is the same as `width * origin.x`.\r\n * This value will only be > 0 if `origin.x` is not equal to zero.\r\n *\r\n * @function Phaser.Display.Bounds.GetOffsetX\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to get the bounds value from.\r\n *\r\n * @return {number} The horizontal offset of the Game Object.\r\n */\r\nvar GetOffsetX = function (gameObject)\r\n{\r\n return gameObject.width * gameObject.originX;\r\n};\r\n\r\nmodule.exports = GetOffsetX;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9HZXRPZmZzZXRYLmpzPzk1MjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QztBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9ib3VuZHMvR2V0T2Zmc2V0WC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGFtb3VudCB0aGUgR2FtZSBPYmplY3QgaXMgdmlzdWFsbHkgb2Zmc2V0IGZyb20gaXRzIHggY29vcmRpbmF0ZS5cclxuICogVGhpcyBpcyB0aGUgc2FtZSBhcyBgd2lkdGggKiBvcmlnaW4ueGAuXHJcbiAqIFRoaXMgdmFsdWUgd2lsbCBvbmx5IGJlID4gMCBpZiBgb3JpZ2luLnhgIGlzIG5vdCBlcXVhbCB0byB6ZXJvLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQm91bmRzLkdldE9mZnNldFhcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdG8gZ2V0IHRoZSBib3VuZHMgdmFsdWUgZnJvbS5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgaG9yaXpvbnRhbCBvZmZzZXQgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKi9cclxudmFyIEdldE9mZnNldFggPSBmdW5jdGlvbiAoZ2FtZU9iamVjdClcclxue1xyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Qud2lkdGggKiBnYW1lT2JqZWN0Lm9yaWdpblg7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldE9mZnNldFg7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/GetOffsetX.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/bounds/GetOffsetY.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/display/bounds/GetOffsetY.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns the amount the Game Object is visually offset from its y coordinate.\r\n * This is the same as `width * origin.y`.\r\n * This value will only be > 0 if `origin.y` is not equal to zero.\r\n *\r\n * @function Phaser.Display.Bounds.GetOffsetY\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to get the bounds value from.\r\n *\r\n * @return {number} The vertical offset of the Game Object.\r\n */\r\nvar GetOffsetY = function (gameObject)\r\n{\r\n return gameObject.height * gameObject.originY;\r\n};\r\n\r\nmodule.exports = GetOffsetY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9HZXRPZmZzZXRZLmpzPzgxNGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QztBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9ib3VuZHMvR2V0T2Zmc2V0WS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGFtb3VudCB0aGUgR2FtZSBPYmplY3QgaXMgdmlzdWFsbHkgb2Zmc2V0IGZyb20gaXRzIHkgY29vcmRpbmF0ZS5cclxuICogVGhpcyBpcyB0aGUgc2FtZSBhcyBgd2lkdGggKiBvcmlnaW4ueWAuXHJcbiAqIFRoaXMgdmFsdWUgd2lsbCBvbmx5IGJlID4gMCBpZiBgb3JpZ2luLnlgIGlzIG5vdCBlcXVhbCB0byB6ZXJvLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQm91bmRzLkdldE9mZnNldFlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdG8gZ2V0IHRoZSBib3VuZHMgdmFsdWUgZnJvbS5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdmVydGljYWwgb2Zmc2V0IG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICovXHJcbnZhciBHZXRPZmZzZXRZID0gZnVuY3Rpb24gKGdhbWVPYmplY3QpXHJcbntcclxuICAgIHJldHVybiBnYW1lT2JqZWN0LmhlaWdodCAqIGdhbWVPYmplY3Qub3JpZ2luWTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0T2Zmc2V0WTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/GetOffsetY.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/bounds/GetRight.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/display/bounds/GetRight.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns the right coordinate from the bounds of the Game Object.\r\n *\r\n * @function Phaser.Display.Bounds.GetRight\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to get the bounds value from.\r\n *\r\n * @return {number} The right coordinate of the bounds of the Game Object.\r\n */\r\nvar GetRight = function (gameObject)\r\n{\r\n return (gameObject.x + gameObject.width) - (gameObject.width * gameObject.originX);\r\n};\r\n\r\nmodule.exports = GetRight;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9HZXRSaWdodC5qcz9iNjMyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QztBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9ib3VuZHMvR2V0UmlnaHQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSByaWdodCBjb29yZGluYXRlIGZyb20gdGhlIGJvdW5kcyBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5Cb3VuZHMuR2V0UmlnaHRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdG8gZ2V0IHRoZSBib3VuZHMgdmFsdWUgZnJvbS5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgcmlnaHQgY29vcmRpbmF0ZSBvZiB0aGUgYm91bmRzIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICovXHJcbnZhciBHZXRSaWdodCA9IGZ1bmN0aW9uIChnYW1lT2JqZWN0KVxyXG57XHJcbiAgICByZXR1cm4gKGdhbWVPYmplY3QueCArIGdhbWVPYmplY3Qud2lkdGgpIC0gKGdhbWVPYmplY3Qud2lkdGggKiBnYW1lT2JqZWN0Lm9yaWdpblgpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRSaWdodDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/GetRight.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/bounds/GetTop.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/display/bounds/GetTop.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns the top coordinate from the bounds of the Game Object.\r\n *\r\n * @function Phaser.Display.Bounds.GetTop\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to get the bounds value from.\r\n *\r\n * @return {number} The top coordinate of the bounds of the Game Object.\r\n */\r\nvar GetTop = function (gameObject)\r\n{\r\n return gameObject.y - (gameObject.height * gameObject.originY);\r\n};\r\n\r\nmodule.exports = GetTop;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9HZXRUb3AuanM/NGFmZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekM7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYm91bmRzL0dldFRvcC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIHRvcCBjb29yZGluYXRlIGZyb20gdGhlIGJvdW5kcyBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5Cb3VuZHMuR2V0VG9wXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRvIGdldCB0aGUgYm91bmRzIHZhbHVlIGZyb20uXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHRvcCBjb29yZGluYXRlIG9mIHRoZSBib3VuZHMgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKi9cclxudmFyIEdldFRvcCA9IGZ1bmN0aW9uIChnYW1lT2JqZWN0KVxyXG57XHJcbiAgICByZXR1cm4gZ2FtZU9iamVjdC55IC0gKGdhbWVPYmplY3QuaGVpZ2h0ICogZ2FtZU9iamVjdC5vcmlnaW5ZKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0VG9wO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/GetTop.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/bounds/SetBottom.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/display/bounds/SetBottom.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Positions the Game Object so that the bottom of its bounds aligns with the given coordinate.\r\n *\r\n * @function Phaser.Display.Bounds.SetBottom\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be re-positioned.\r\n * @param {number} value - The coordinate to position the Game Object bounds on.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was positioned.\r\n */\r\nvar SetBottom = function (gameObject, value)\r\n{\r\n gameObject.y = (value - gameObject.height) + (gameObject.height * gameObject.originY);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = SetBottom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9TZXRCb3R0b20uanM/YzNlNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSw4QkFBOEI7QUFDM0M7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9ib3VuZHMvU2V0Qm90dG9tLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUG9zaXRpb25zIHRoZSBHYW1lIE9iamVjdCBzbyB0aGF0IHRoZSBib3R0b20gb2YgaXRzIGJvdW5kcyBhbGlnbnMgd2l0aCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkJvdW5kcy5TZXRCb3R0b21cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gRyAtIFtnYW1lT2JqZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3aWxsIGJlIHJlLXBvc2l0aW9uZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBjb29yZGluYXRlIHRvIHBvc2l0aW9uIHRoZSBHYW1lIE9iamVjdCBib3VuZHMgb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgcG9zaXRpb25lZC5cclxuICovXHJcbnZhciBTZXRCb3R0b20gPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgdmFsdWUpXHJcbntcclxuICAgIGdhbWVPYmplY3QueSA9ICh2YWx1ZSAtIGdhbWVPYmplY3QuaGVpZ2h0KSArIChnYW1lT2JqZWN0LmhlaWdodCAqIGdhbWVPYmplY3Qub3JpZ2luWSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNldEJvdHRvbTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/SetBottom.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/bounds/SetCenterX.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/display/bounds/SetCenterX.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Positions the Game Object so that the center top of its bounds aligns with the given coordinate.\r\n *\r\n * @function Phaser.Display.Bounds.SetCenterX\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be re-positioned.\r\n * @param {number} x - The coordinate to position the Game Object bounds on.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was positioned.\r\n */\r\nvar SetCenterX = function (gameObject, x)\r\n{\r\n var offsetX = gameObject.width * gameObject.originX;\r\n\r\n gameObject.x = (x + offsetX) - (gameObject.width * 0.5);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = SetCenterX;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9TZXRDZW50ZXJYLmpzP2M0NDkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsOEJBQThCO0FBQzNDO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYm91bmRzL1NldENlbnRlclguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBQb3NpdGlvbnMgdGhlIEdhbWUgT2JqZWN0IHNvIHRoYXQgdGhlIGNlbnRlciB0b3Agb2YgaXRzIGJvdW5kcyBhbGlnbnMgd2l0aCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkJvdW5kcy5TZXRDZW50ZXJYXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSByZS1wb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBjb29yZGluYXRlIHRvIHBvc2l0aW9uIHRoZSBHYW1lIE9iamVjdCBib3VuZHMgb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgcG9zaXRpb25lZC5cclxuICovXHJcbnZhciBTZXRDZW50ZXJYID0gZnVuY3Rpb24gKGdhbWVPYmplY3QsIHgpXHJcbntcclxuICAgIHZhciBvZmZzZXRYID0gZ2FtZU9iamVjdC53aWR0aCAqIGdhbWVPYmplY3Qub3JpZ2luWDtcclxuXHJcbiAgICBnYW1lT2JqZWN0LnggPSAoeCArIG9mZnNldFgpIC0gKGdhbWVPYmplY3Qud2lkdGggKiAwLjUpO1xyXG5cclxuICAgIHJldHVybiBnYW1lT2JqZWN0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRDZW50ZXJYO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/SetCenterX.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/bounds/SetCenterY.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/display/bounds/SetCenterY.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Positions the Game Object so that the center top of its bounds aligns with the given coordinate.\r\n *\r\n * @function Phaser.Display.Bounds.SetCenterY\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be re-positioned.\r\n * @param {number} y - The coordinate to position the Game Object bounds on.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was positioned.\r\n */\r\nvar SetCenterY = function (gameObject, y)\r\n{\r\n var offsetY = gameObject.height * gameObject.originY;\r\n\r\n gameObject.y = (y + offsetY) - (gameObject.height * 0.5);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = SetCenterY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9TZXRDZW50ZXJZLmpzPzU4MDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsOEJBQThCO0FBQzNDO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYm91bmRzL1NldENlbnRlclkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBQb3NpdGlvbnMgdGhlIEdhbWUgT2JqZWN0IHNvIHRoYXQgdGhlIGNlbnRlciB0b3Agb2YgaXRzIGJvdW5kcyBhbGlnbnMgd2l0aCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkJvdW5kcy5TZXRDZW50ZXJZXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSByZS1wb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSBjb29yZGluYXRlIHRvIHBvc2l0aW9uIHRoZSBHYW1lIE9iamVjdCBib3VuZHMgb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgcG9zaXRpb25lZC5cclxuICovXHJcbnZhciBTZXRDZW50ZXJZID0gZnVuY3Rpb24gKGdhbWVPYmplY3QsIHkpXHJcbntcclxuICAgIHZhciBvZmZzZXRZID0gZ2FtZU9iamVjdC5oZWlnaHQgKiBnYW1lT2JqZWN0Lm9yaWdpblk7XHJcblxyXG4gICAgZ2FtZU9iamVjdC55ID0gKHkgKyBvZmZzZXRZKSAtIChnYW1lT2JqZWN0LmhlaWdodCAqIDAuNSk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNldENlbnRlclk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/SetCenterY.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/bounds/SetLeft.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/display/bounds/SetLeft.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Positions the Game Object so that the left of its bounds aligns with the given coordinate.\r\n *\r\n * @function Phaser.Display.Bounds.SetLeft\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be re-positioned.\r\n * @param {number} value - The coordinate to position the Game Object bounds on.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was positioned.\r\n */\r\nvar SetLeft = function (gameObject, value)\r\n{\r\n gameObject.x = value + (gameObject.width * gameObject.originX);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = SetLeft;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9TZXRMZWZ0LmpzP2Y3N2EiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsOEJBQThCO0FBQzNDO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvYm91bmRzL1NldExlZnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBQb3NpdGlvbnMgdGhlIEdhbWUgT2JqZWN0IHNvIHRoYXQgdGhlIGxlZnQgb2YgaXRzIGJvdW5kcyBhbGlnbnMgd2l0aCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkJvdW5kcy5TZXRMZWZ0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSByZS1wb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgY29vcmRpbmF0ZSB0byBwb3NpdGlvbiB0aGUgR2FtZSBPYmplY3QgYm91bmRzIG9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIHBvc2l0aW9uZWQuXHJcbiAqL1xyXG52YXIgU2V0TGVmdCA9IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCB2YWx1ZSlcclxue1xyXG4gICAgZ2FtZU9iamVjdC54ID0gdmFsdWUgKyAoZ2FtZU9iamVjdC53aWR0aCAqIGdhbWVPYmplY3Qub3JpZ2luWCk7XHJcblxyXG4gICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNldExlZnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/SetLeft.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/bounds/SetRight.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/display/bounds/SetRight.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Positions the Game Object so that the left of its bounds aligns with the given coordinate.\r\n *\r\n * @function Phaser.Display.Bounds.SetRight\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be re-positioned.\r\n * @param {number} value - The coordinate to position the Game Object bounds on.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was positioned.\r\n */\r\nvar SetRight = function (gameObject, value)\r\n{\r\n gameObject.x = (value - gameObject.width) + (gameObject.width * gameObject.originX);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = SetRight;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9TZXRSaWdodC5qcz9kODEwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDhCQUE4QjtBQUMzQztBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9TZXRSaWdodC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFBvc2l0aW9ucyB0aGUgR2FtZSBPYmplY3Qgc28gdGhhdCB0aGUgbGVmdCBvZiBpdHMgYm91bmRzIGFsaWducyB3aXRoIHRoZSBnaXZlbiBjb29yZGluYXRlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQm91bmRzLlNldFJpZ2h0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IEcgLSBbZ2FtZU9iamVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2lsbCBiZSByZS1wb3NpdGlvbmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgY29vcmRpbmF0ZSB0byBwb3NpdGlvbiB0aGUgR2FtZSBPYmplY3QgYm91bmRzIG9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIHBvc2l0aW9uZWQuXHJcbiAqL1xyXG52YXIgU2V0UmlnaHQgPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgdmFsdWUpXHJcbntcclxuICAgIGdhbWVPYmplY3QueCA9ICh2YWx1ZSAtIGdhbWVPYmplY3Qud2lkdGgpICsgKGdhbWVPYmplY3Qud2lkdGggKiBnYW1lT2JqZWN0Lm9yaWdpblgpO1xyXG5cclxuICAgIHJldHVybiBnYW1lT2JqZWN0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTZXRSaWdodDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/SetRight.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/bounds/SetTop.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/display/bounds/SetTop.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Positions the Game Object so that the top of its bounds aligns with the given coordinate.\r\n *\r\n * @function Phaser.Display.Bounds.SetTop\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.GameObjects.GameObject} G - [gameObject,$return]\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will be re-positioned.\r\n * @param {number} value - The coordinate to position the Game Object bounds on.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was positioned.\r\n */\r\nvar SetTop = function (gameObject, value)\r\n{\r\n gameObject.y = value + (gameObject.height * gameObject.originY);\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = SetTop;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9TZXRUb3AuanM/YTBhZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSw4QkFBOEI7QUFDM0M7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9ib3VuZHMvU2V0VG9wLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUG9zaXRpb25zIHRoZSBHYW1lIE9iamVjdCBzbyB0aGF0IHRoZSB0b3Agb2YgaXRzIGJvdW5kcyBhbGlnbnMgd2l0aCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkJvdW5kcy5TZXRUb3BcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gRyAtIFtnYW1lT2JqZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3aWxsIGJlIHJlLXBvc2l0aW9uZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBjb29yZGluYXRlIHRvIHBvc2l0aW9uIHRoZSBHYW1lIE9iamVjdCBib3VuZHMgb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgcG9zaXRpb25lZC5cclxuICovXHJcbnZhciBTZXRUb3AgPSBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgdmFsdWUpXHJcbntcclxuICAgIGdhbWVPYmplY3QueSA9IHZhbHVlICsgKGdhbWVPYmplY3QuaGVpZ2h0ICogZ2FtZU9iamVjdC5vcmlnaW5ZKTtcclxuXHJcbiAgICByZXR1cm4gZ2FtZU9iamVjdDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2V0VG9wO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/SetTop.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/bounds/index.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/display/bounds/index.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Display.Bounds\r\n */\r\n\r\nmodule.exports = {\r\n\r\n CenterOn: __webpack_require__(/*! ./CenterOn */ \"./node_modules/phaser/src/display/bounds/CenterOn.js\"),\r\n GetBottom: __webpack_require__(/*! ./GetBottom */ \"./node_modules/phaser/src/display/bounds/GetBottom.js\"),\r\n GetCenterX: __webpack_require__(/*! ./GetCenterX */ \"./node_modules/phaser/src/display/bounds/GetCenterX.js\"),\r\n GetCenterY: __webpack_require__(/*! ./GetCenterY */ \"./node_modules/phaser/src/display/bounds/GetCenterY.js\"),\r\n GetLeft: __webpack_require__(/*! ./GetLeft */ \"./node_modules/phaser/src/display/bounds/GetLeft.js\"),\r\n GetOffsetX: __webpack_require__(/*! ./GetOffsetX */ \"./node_modules/phaser/src/display/bounds/GetOffsetX.js\"),\r\n GetOffsetY: __webpack_require__(/*! ./GetOffsetY */ \"./node_modules/phaser/src/display/bounds/GetOffsetY.js\"),\r\n GetRight: __webpack_require__(/*! ./GetRight */ \"./node_modules/phaser/src/display/bounds/GetRight.js\"),\r\n GetTop: __webpack_require__(/*! ./GetTop */ \"./node_modules/phaser/src/display/bounds/GetTop.js\"),\r\n SetBottom: __webpack_require__(/*! ./SetBottom */ \"./node_modules/phaser/src/display/bounds/SetBottom.js\"),\r\n SetCenterX: __webpack_require__(/*! ./SetCenterX */ \"./node_modules/phaser/src/display/bounds/SetCenterX.js\"),\r\n SetCenterY: __webpack_require__(/*! ./SetCenterY */ \"./node_modules/phaser/src/display/bounds/SetCenterY.js\"),\r\n SetLeft: __webpack_require__(/*! ./SetLeft */ \"./node_modules/phaser/src/display/bounds/SetLeft.js\"),\r\n SetRight: __webpack_require__(/*! ./SetRight */ \"./node_modules/phaser/src/display/bounds/SetRight.js\"),\r\n SetTop: __webpack_require__(/*! ./SetTop */ \"./node_modules/phaser/src/display/bounds/SetTop.js\")\r\n \r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2JvdW5kcy9pbmRleC5qcz82MjU3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLHdFQUFZO0FBQ2xDLGVBQWUsbUJBQU8sQ0FBQywwRUFBYTtBQUNwQyxnQkFBZ0IsbUJBQU8sQ0FBQyw0RUFBYztBQUN0QyxnQkFBZ0IsbUJBQU8sQ0FBQyw0RUFBYztBQUN0QyxhQUFhLG1CQUFPLENBQUMsc0VBQVc7QUFDaEMsZ0JBQWdCLG1CQUFPLENBQUMsNEVBQWM7QUFDdEMsZ0JBQWdCLG1CQUFPLENBQUMsNEVBQWM7QUFDdEMsY0FBYyxtQkFBTyxDQUFDLHdFQUFZO0FBQ2xDLFlBQVksbUJBQU8sQ0FBQyxvRUFBVTtBQUM5QixlQUFlLG1CQUFPLENBQUMsMEVBQWE7QUFDcEMsZ0JBQWdCLG1CQUFPLENBQUMsNEVBQWM7QUFDdEMsZ0JBQWdCLG1CQUFPLENBQUMsNEVBQWM7QUFDdEMsYUFBYSxtQkFBTyxDQUFDLHNFQUFXO0FBQ2hDLGNBQWMsbUJBQU8sQ0FBQyx3RUFBWTtBQUNsQyxZQUFZLG1CQUFPLENBQUMsb0VBQVU7O0FBRTlCIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9ib3VuZHMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5EaXNwbGF5LkJvdW5kc1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIENlbnRlck9uOiByZXF1aXJlKCcuL0NlbnRlck9uJyksXHJcbiAgICBHZXRCb3R0b206IHJlcXVpcmUoJy4vR2V0Qm90dG9tJyksXHJcbiAgICBHZXRDZW50ZXJYOiByZXF1aXJlKCcuL0dldENlbnRlclgnKSxcclxuICAgIEdldENlbnRlclk6IHJlcXVpcmUoJy4vR2V0Q2VudGVyWScpLFxyXG4gICAgR2V0TGVmdDogcmVxdWlyZSgnLi9HZXRMZWZ0JyksXHJcbiAgICBHZXRPZmZzZXRYOiByZXF1aXJlKCcuL0dldE9mZnNldFgnKSxcclxuICAgIEdldE9mZnNldFk6IHJlcXVpcmUoJy4vR2V0T2Zmc2V0WScpLFxyXG4gICAgR2V0UmlnaHQ6IHJlcXVpcmUoJy4vR2V0UmlnaHQnKSxcclxuICAgIEdldFRvcDogcmVxdWlyZSgnLi9HZXRUb3AnKSxcclxuICAgIFNldEJvdHRvbTogcmVxdWlyZSgnLi9TZXRCb3R0b20nKSxcclxuICAgIFNldENlbnRlclg6IHJlcXVpcmUoJy4vU2V0Q2VudGVyWCcpLFxyXG4gICAgU2V0Q2VudGVyWTogcmVxdWlyZSgnLi9TZXRDZW50ZXJZJyksXHJcbiAgICBTZXRMZWZ0OiByZXF1aXJlKCcuL1NldExlZnQnKSxcclxuICAgIFNldFJpZ2h0OiByZXF1aXJlKCcuL1NldFJpZ2h0JyksXHJcbiAgICBTZXRUb3A6IHJlcXVpcmUoJy4vU2V0VG9wJylcclxuICAgIFxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/bounds/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/canvas/CanvasInterpolation.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/src/display/canvas/CanvasInterpolation.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Display.Canvas.CanvasInterpolation\r\n * @since 3.0.0\r\n */\r\nvar CanvasInterpolation = {\r\n\r\n /**\r\n * Sets the CSS image-rendering property on the given canvas to be 'crisp' (aka 'optimize contrast' on webkit).\r\n *\r\n * @function Phaser.Display.Canvas.CanvasInterpolation.setCrisp\r\n * @since 3.0.0\r\n * \r\n * @param {HTMLCanvasElement} canvas - The canvas object to have the style set on.\r\n * \r\n * @return {HTMLCanvasElement} The canvas.\r\n */\r\n setCrisp: function (canvas)\r\n {\r\n var types = [ 'optimizeSpeed', '-moz-crisp-edges', '-o-crisp-edges', '-webkit-optimize-contrast', 'optimize-contrast', 'crisp-edges', 'pixelated' ];\r\n\r\n types.forEach(function (type)\r\n {\r\n canvas.style['image-rendering'] = type;\r\n });\r\n\r\n canvas.style.msInterpolationMode = 'nearest-neighbor';\r\n\r\n return canvas;\r\n },\r\n\r\n /**\r\n * Sets the CSS image-rendering property on the given canvas to be 'bicubic' (aka 'auto').\r\n *\r\n * @function Phaser.Display.Canvas.CanvasInterpolation.setBicubic\r\n * @since 3.0.0\r\n * \r\n * @param {HTMLCanvasElement} canvas - The canvas object to have the style set on.\r\n * \r\n * @return {HTMLCanvasElement} The canvas.\r\n */\r\n setBicubic: function (canvas)\r\n {\r\n canvas.style['image-rendering'] = 'auto';\r\n canvas.style.msInterpolationMode = 'bicubic';\r\n\r\n return canvas;\r\n }\r\n\r\n};\r\n\r\nmodule.exports = CanvasInterpolation;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NhbnZhcy9DYW52YXNJbnRlcnBvbGF0aW9uLmpzP2JiYjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxrQkFBa0I7QUFDakM7QUFDQSxnQkFBZ0Isa0JBQWtCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0JBQWtCO0FBQ2pDO0FBQ0EsZ0JBQWdCLGtCQUFrQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NhbnZhcy9DYW52YXNJbnRlcnBvbGF0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuRGlzcGxheS5DYW52YXMuQ2FudmFzSW50ZXJwb2xhdGlvblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbnZhciBDYW52YXNJbnRlcnBvbGF0aW9uID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgQ1NTIGltYWdlLXJlbmRlcmluZyBwcm9wZXJ0eSBvbiB0aGUgZ2l2ZW4gY2FudmFzIHRvIGJlICdjcmlzcCcgKGFrYSAnb3B0aW1pemUgY29udHJhc3QnIG9uIHdlYmtpdCkuXHJcbiAgICAgKlxyXG4gICAgICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNhbnZhcy5DYW52YXNJbnRlcnBvbGF0aW9uLnNldENyaXNwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtIVE1MQ2FudmFzRWxlbWVudH0gY2FudmFzIC0gVGhlIGNhbnZhcyBvYmplY3QgdG8gaGF2ZSB0aGUgc3R5bGUgc2V0IG9uLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIGNhbnZhcy5cclxuICAgICAqL1xyXG4gICAgc2V0Q3Jpc3A6IGZ1bmN0aW9uIChjYW52YXMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHR5cGVzID0gWyAnb3B0aW1pemVTcGVlZCcsICctbW96LWNyaXNwLWVkZ2VzJywgJy1vLWNyaXNwLWVkZ2VzJywgJy13ZWJraXQtb3B0aW1pemUtY29udHJhc3QnLCAnb3B0aW1pemUtY29udHJhc3QnLCAnY3Jpc3AtZWRnZXMnLCAncGl4ZWxhdGVkJyBdO1xyXG5cclxuICAgICAgICB0eXBlcy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2FudmFzLnN0eWxlWydpbWFnZS1yZW5kZXJpbmcnXSA9IHR5cGU7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNhbnZhcy5zdHlsZS5tc0ludGVycG9sYXRpb25Nb2RlID0gJ25lYXJlc3QtbmVpZ2hib3InO1xyXG5cclxuICAgICAgICByZXR1cm4gY2FudmFzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIENTUyBpbWFnZS1yZW5kZXJpbmcgcHJvcGVydHkgb24gdGhlIGdpdmVuIGNhbnZhcyB0byBiZSAnYmljdWJpYycgKGFrYSAnYXV0bycpLlxyXG4gICAgICpcclxuICAgICAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5DYW52YXMuQ2FudmFzSW50ZXJwb2xhdGlvbi5zZXRCaWN1YmljXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtIVE1MQ2FudmFzRWxlbWVudH0gY2FudmFzIC0gVGhlIGNhbnZhcyBvYmplY3QgdG8gaGF2ZSB0aGUgc3R5bGUgc2V0IG9uLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIGNhbnZhcy5cclxuICAgICAqL1xyXG4gICAgc2V0QmljdWJpYzogZnVuY3Rpb24gKGNhbnZhcylcclxuICAgIHtcclxuICAgICAgICBjYW52YXMuc3R5bGVbJ2ltYWdlLXJlbmRlcmluZyddID0gJ2F1dG8nO1xyXG4gICAgICAgIGNhbnZhcy5zdHlsZS5tc0ludGVycG9sYXRpb25Nb2RlID0gJ2JpY3ViaWMnO1xyXG5cclxuICAgICAgICByZXR1cm4gY2FudmFzO1xyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzSW50ZXJwb2xhdGlvbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/canvas/CanvasInterpolation.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/canvas/CanvasPool.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/display/canvas/CanvasPool.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CONST = __webpack_require__(/*! ../../const */ \"./node_modules/phaser/src/const.js\");\r\nvar Smoothing = __webpack_require__(/*! ./Smoothing */ \"./node_modules/phaser/src/display/canvas/Smoothing.js\");\r\n\r\n// The pool into which the canvas elements are placed.\r\nvar pool = [];\r\n\r\n// Automatically apply smoothing(false) to created Canvas elements\r\nvar _disableContextSmoothing = false;\r\n\r\n/**\r\n * The CanvasPool is a global static object, that allows Phaser to recycle and pool 2D Context Canvas DOM elements.\r\n * It does not pool WebGL Contexts, because once the context options are set they cannot be modified again, \r\n * which is useless for some of the Phaser pipelines / renderer.\r\n *\r\n * This singleton is instantiated as soon as Phaser loads, before a Phaser.Game instance has even been created.\r\n * Which means all instances of Phaser Games on the same page can share the one single pool.\r\n *\r\n * @namespace Phaser.Display.Canvas.CanvasPool\r\n * @since 3.0.0\r\n */\r\nvar CanvasPool = function ()\r\n{\r\n /**\r\n * Creates a new Canvas DOM element, or pulls one from the pool if free.\r\n *\r\n * @function Phaser.Display.Canvas.CanvasPool.create\r\n * @since 3.0.0\r\n *\r\n * @param {*} parent - The parent of the Canvas object.\r\n * @param {integer} [width=1] - The width of the Canvas.\r\n * @param {integer} [height=1] - The height of the Canvas.\r\n * @param {integer} [canvasType=Phaser.CANVAS] - The type of the Canvas. Either `Phaser.CANVAS` or `Phaser.WEBGL`.\r\n * @param {boolean} [selfParent=false] - Use the generated Canvas element as the parent?\r\n *\r\n * @return {HTMLCanvasElement} The canvas element that was created or pulled from the pool\r\n */\r\n var create = function (parent, width, height, canvasType, selfParent)\r\n {\r\n if (width === undefined) { width = 1; }\r\n if (height === undefined) { height = 1; }\r\n if (canvasType === undefined) { canvasType = CONST.CANVAS; }\r\n if (selfParent === undefined) { selfParent = false; }\r\n\r\n var canvas;\r\n var container = first(canvasType);\r\n\r\n if (container === null)\r\n {\r\n container = {\r\n parent: parent,\r\n canvas: document.createElement('canvas'),\r\n type: canvasType\r\n };\r\n\r\n if (canvasType === CONST.CANVAS)\r\n {\r\n pool.push(container);\r\n }\r\n\r\n canvas = container.canvas;\r\n }\r\n else\r\n {\r\n container.parent = parent;\r\n\r\n canvas = container.canvas;\r\n }\r\n\r\n if (selfParent)\r\n {\r\n container.parent = canvas;\r\n }\r\n\r\n canvas.width = width;\r\n canvas.height = height;\r\n\r\n if (_disableContextSmoothing && canvasType === CONST.CANVAS)\r\n {\r\n Smoothing.disable(canvas.getContext('2d'));\r\n }\r\n\r\n return canvas;\r\n };\r\n\r\n /**\r\n * Creates a new Canvas DOM element, or pulls one from the pool if free.\r\n *\r\n * @function Phaser.Display.Canvas.CanvasPool.create2D\r\n * @since 3.0.0\r\n *\r\n * @param {*} parent - The parent of the Canvas object.\r\n * @param {integer} [width=1] - The width of the Canvas.\r\n * @param {integer} [height=1] - The height of the Canvas.\r\n *\r\n * @return {HTMLCanvasElement} The created canvas.\r\n */\r\n var create2D = function (parent, width, height)\r\n {\r\n return create(parent, width, height, CONST.CANVAS);\r\n };\r\n\r\n /**\r\n * Creates a new Canvas DOM element, or pulls one from the pool if free.\r\n *\r\n * @function Phaser.Display.Canvas.CanvasPool.createWebGL\r\n * @since 3.0.0\r\n *\r\n * @param {*} parent - The parent of the Canvas object.\r\n * @param {integer} [width=1] - The width of the Canvas.\r\n * @param {integer} [height=1] - The height of the Canvas.\r\n *\r\n * @return {HTMLCanvasElement} The created WebGL canvas.\r\n */\r\n var createWebGL = function (parent, width, height)\r\n {\r\n return create(parent, width, height, CONST.WEBGL);\r\n };\r\n\r\n /**\r\n * Gets the first free canvas index from the pool.\r\n *\r\n * @function Phaser.Display.Canvas.CanvasPool.first\r\n * @since 3.0.0\r\n *\r\n * @param {integer} [canvasType=Phaser.CANVAS] - The type of the Canvas. Either `Phaser.CANVAS` or `Phaser.WEBGL`.\r\n *\r\n * @return {HTMLCanvasElement} The first free canvas, or `null` if a WebGL canvas was requested or if the pool doesn't have free canvases.\r\n */\r\n var first = function (canvasType)\r\n {\r\n if (canvasType === undefined) { canvasType = CONST.CANVAS; }\r\n\r\n if (canvasType === CONST.WEBGL)\r\n {\r\n return null;\r\n }\r\n\r\n for (var i = 0; i < pool.length; i++)\r\n {\r\n var container = pool[i];\r\n\r\n if (!container.parent && container.type === canvasType)\r\n {\r\n return container;\r\n }\r\n }\r\n\r\n return null;\r\n };\r\n\r\n /**\r\n * Looks up a canvas based on its parent, and if found puts it back in the pool, freeing it up for re-use.\r\n * The canvas has its width and height set to 1, and its parent attribute nulled.\r\n *\r\n * @function Phaser.Display.Canvas.CanvasPool.remove\r\n * @since 3.0.0\r\n *\r\n * @param {*} parent - The canvas or the parent of the canvas to free.\r\n */\r\n var remove = function (parent)\r\n {\r\n // Check to see if the parent is a canvas object\r\n var isCanvas = parent instanceof HTMLCanvasElement;\r\n\r\n pool.forEach(function (container)\r\n {\r\n if ((isCanvas && container.canvas === parent) || (!isCanvas && container.parent === parent))\r\n {\r\n container.parent = null;\r\n container.canvas.width = 1;\r\n container.canvas.height = 1;\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * Gets the total number of used canvas elements in the pool.\r\n *\r\n * @function Phaser.Display.Canvas.CanvasPool.total\r\n * @since 3.0.0\r\n *\r\n * @return {integer} The number of used canvases.\r\n */\r\n var total = function ()\r\n {\r\n var c = 0;\r\n\r\n pool.forEach(function (container)\r\n {\r\n if (container.parent)\r\n {\r\n c++;\r\n }\r\n });\r\n\r\n return c;\r\n };\r\n\r\n /**\r\n * Gets the total number of free canvas elements in the pool.\r\n *\r\n * @function Phaser.Display.Canvas.CanvasPool.free\r\n * @since 3.0.0\r\n *\r\n * @return {integer} The number of free canvases.\r\n */\r\n var free = function ()\r\n {\r\n return pool.length - total();\r\n };\r\n\r\n /**\r\n * Disable context smoothing on any new Canvas element created.\r\n *\r\n * @function Phaser.Display.Canvas.CanvasPool.disableSmoothing\r\n * @since 3.0.0\r\n */\r\n var disableSmoothing = function ()\r\n {\r\n _disableContextSmoothing = true;\r\n };\r\n\r\n /**\r\n * Enable context smoothing on any new Canvas element created.\r\n *\r\n * @function Phaser.Display.Canvas.CanvasPool.enableSmoothing\r\n * @since 3.0.0\r\n */\r\n var enableSmoothing = function ()\r\n {\r\n _disableContextSmoothing = false;\r\n };\r\n\r\n return {\r\n create2D: create2D,\r\n create: create,\r\n createWebGL: createWebGL,\r\n disableSmoothing: disableSmoothing,\r\n enableSmoothing: enableSmoothing,\r\n first: first,\r\n free: free,\r\n pool: pool,\r\n remove: remove,\r\n total: total\r\n };\r\n};\r\n\r\n// If we export the called function here, it'll only be invoked once (not every time it's required).\r\nmodule.exports = CanvasPool();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NhbnZhcy9DYW52YXNQb29sLmpzPzMwODEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyx1REFBYTtBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQywwRUFBYTs7QUFFckM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixrQkFBa0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLFdBQVc7QUFDN0MsbUNBQW1DLFlBQVk7QUFDL0MsdUNBQXVDLDJCQUEyQjtBQUNsRSx1Q0FBdUMsb0JBQW9COztBQUUzRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isa0JBQWtCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isa0JBQWtCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLGtCQUFrQjtBQUNsQztBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsMkJBQTJCOztBQUVsRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsaUJBQWlCO0FBQ3hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9jYW52YXMvQ2FudmFzUG9vbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcclxudmFyIFNtb290aGluZyA9IHJlcXVpcmUoJy4vU21vb3RoaW5nJyk7XHJcblxyXG4vLyBUaGUgcG9vbCBpbnRvIHdoaWNoIHRoZSBjYW52YXMgZWxlbWVudHMgYXJlIHBsYWNlZC5cclxudmFyIHBvb2wgPSBbXTtcclxuXHJcbi8vICBBdXRvbWF0aWNhbGx5IGFwcGx5IHNtb290aGluZyhmYWxzZSkgdG8gY3JlYXRlZCBDYW52YXMgZWxlbWVudHNcclxudmFyIF9kaXNhYmxlQ29udGV4dFNtb290aGluZyA9IGZhbHNlO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBDYW52YXNQb29sIGlzIGEgZ2xvYmFsIHN0YXRpYyBvYmplY3QsIHRoYXQgYWxsb3dzIFBoYXNlciB0byByZWN5Y2xlIGFuZCBwb29sIDJEIENvbnRleHQgQ2FudmFzIERPTSBlbGVtZW50cy5cclxuICogSXQgZG9lcyBub3QgcG9vbCBXZWJHTCBDb250ZXh0cywgYmVjYXVzZSBvbmNlIHRoZSBjb250ZXh0IG9wdGlvbnMgYXJlIHNldCB0aGV5IGNhbm5vdCBiZSBtb2RpZmllZCBhZ2FpbiwgXHJcbiAqIHdoaWNoIGlzIHVzZWxlc3MgZm9yIHNvbWUgb2YgdGhlIFBoYXNlciBwaXBlbGluZXMgLyByZW5kZXJlci5cclxuICpcclxuICogVGhpcyBzaW5nbGV0b24gaXMgaW5zdGFudGlhdGVkIGFzIHNvb24gYXMgUGhhc2VyIGxvYWRzLCBiZWZvcmUgYSBQaGFzZXIuR2FtZSBpbnN0YW5jZSBoYXMgZXZlbiBiZWVuIGNyZWF0ZWQuXHJcbiAqIFdoaWNoIG1lYW5zIGFsbCBpbnN0YW5jZXMgb2YgUGhhc2VyIEdhbWVzIG9uIHRoZSBzYW1lIHBhZ2UgY2FuIHNoYXJlIHRoZSBvbmUgc2luZ2xlIHBvb2wuXHJcbiAqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkRpc3BsYXkuQ2FudmFzLkNhbnZhc1Bvb2xcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG52YXIgQ2FudmFzUG9vbCA9IGZ1bmN0aW9uICgpXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBDYW52YXMgRE9NIGVsZW1lbnQsIG9yIHB1bGxzIG9uZSBmcm9tIHRoZSBwb29sIGlmIGZyZWUuXHJcbiAgICAgKlxyXG4gICAgICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNhbnZhcy5DYW52YXNQb29sLmNyZWF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsqfSBwYXJlbnQgLSBUaGUgcGFyZW50IG9mIHRoZSBDYW52YXMgb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9MV0gLSBUaGUgd2lkdGggb2YgdGhlIENhbnZhcy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodD0xXSAtIFRoZSBoZWlnaHQgb2YgdGhlIENhbnZhcy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2NhbnZhc1R5cGU9UGhhc2VyLkNBTlZBU10gLSBUaGUgdHlwZSBvZiB0aGUgQ2FudmFzLiBFaXRoZXIgYFBoYXNlci5DQU5WQVNgIG9yIGBQaGFzZXIuV0VCR0xgLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbc2VsZlBhcmVudD1mYWxzZV0gLSBVc2UgdGhlIGdlbmVyYXRlZCBDYW52YXMgZWxlbWVudCBhcyB0aGUgcGFyZW50P1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCB3YXMgY3JlYXRlZCBvciBwdWxsZWQgZnJvbSB0aGUgcG9vbFxyXG4gICAgICovXHJcbiAgICB2YXIgY3JlYXRlID0gZnVuY3Rpb24gKHBhcmVudCwgd2lkdGgsIGhlaWdodCwgY2FudmFzVHlwZSwgc2VsZlBhcmVudClcclxuICAgIHtcclxuICAgICAgICBpZiAod2lkdGggPT09IHVuZGVmaW5lZCkgeyB3aWR0aCA9IDE7IH1cclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gMTsgfVxyXG4gICAgICAgIGlmIChjYW52YXNUeXBlID09PSB1bmRlZmluZWQpIHsgY2FudmFzVHlwZSA9IENPTlNULkNBTlZBUzsgfVxyXG4gICAgICAgIGlmIChzZWxmUGFyZW50ID09PSB1bmRlZmluZWQpIHsgc2VsZlBhcmVudCA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIHZhciBjYW52YXM7XHJcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IGZpcnN0KGNhbnZhc1R5cGUpO1xyXG5cclxuICAgICAgICBpZiAoY29udGFpbmVyID09PSBudWxsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29udGFpbmVyID0ge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50OiBwYXJlbnQsXHJcbiAgICAgICAgICAgICAgICBjYW52YXM6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogY2FudmFzVHlwZVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKGNhbnZhc1R5cGUgPT09IENPTlNULkNBTlZBUylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcG9vbC5wdXNoKGNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNhbnZhcyA9IGNvbnRhaW5lci5jYW52YXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5wYXJlbnQgPSBwYXJlbnQ7XHJcblxyXG4gICAgICAgICAgICBjYW52YXMgPSBjb250YWluZXIuY2FudmFzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNlbGZQYXJlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb250YWluZXIucGFyZW50ID0gY2FudmFzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgaWYgKF9kaXNhYmxlQ29udGV4dFNtb290aGluZyAmJiBjYW52YXNUeXBlID09PSBDT05TVC5DQU5WQVMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBTbW9vdGhpbmcuZGlzYWJsZShjYW52YXMuZ2V0Q29udGV4dCgnMmQnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2FudmFzO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgQ2FudmFzIERPTSBlbGVtZW50LCBvciBwdWxscyBvbmUgZnJvbSB0aGUgcG9vbCBpZiBmcmVlLlxyXG4gICAgICpcclxuICAgICAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5DYW52YXMuQ2FudmFzUG9vbC5jcmVhdGUyRFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsqfSBwYXJlbnQgLSBUaGUgcGFyZW50IG9mIHRoZSBDYW52YXMgb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9MV0gLSBUaGUgd2lkdGggb2YgdGhlIENhbnZhcy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodD0xXSAtIFRoZSBoZWlnaHQgb2YgdGhlIENhbnZhcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIGNyZWF0ZWQgY2FudmFzLlxyXG4gICAgICovXHJcbiAgICB2YXIgY3JlYXRlMkQgPSBmdW5jdGlvbiAocGFyZW50LCB3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBjcmVhdGUocGFyZW50LCB3aWR0aCwgaGVpZ2h0LCBDT05TVC5DQU5WQVMpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgQ2FudmFzIERPTSBlbGVtZW50LCBvciBwdWxscyBvbmUgZnJvbSB0aGUgcG9vbCBpZiBmcmVlLlxyXG4gICAgICpcclxuICAgICAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5DYW52YXMuQ2FudmFzUG9vbC5jcmVhdGVXZWJHTFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsqfSBwYXJlbnQgLSBUaGUgcGFyZW50IG9mIHRoZSBDYW52YXMgb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9MV0gLSBUaGUgd2lkdGggb2YgdGhlIENhbnZhcy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodD0xXSAtIFRoZSBoZWlnaHQgb2YgdGhlIENhbnZhcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIGNyZWF0ZWQgV2ViR0wgY2FudmFzLlxyXG4gICAgICovXHJcbiAgICB2YXIgY3JlYXRlV2ViR0wgPSBmdW5jdGlvbiAocGFyZW50LCB3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBjcmVhdGUocGFyZW50LCB3aWR0aCwgaGVpZ2h0LCBDT05TVC5XRUJHTCk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgZmlyc3QgZnJlZSBjYW52YXMgaW5kZXggZnJvbSB0aGUgcG9vbC5cclxuICAgICAqXHJcbiAgICAgKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQ2FudmFzLkNhbnZhc1Bvb2wuZmlyc3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2NhbnZhc1R5cGU9UGhhc2VyLkNBTlZBU10gLSBUaGUgdHlwZSBvZiB0aGUgQ2FudmFzLiBFaXRoZXIgYFBoYXNlci5DQU5WQVNgIG9yIGBQaGFzZXIuV0VCR0xgLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBUaGUgZmlyc3QgZnJlZSBjYW52YXMsIG9yIGBudWxsYCBpZiBhIFdlYkdMIGNhbnZhcyB3YXMgcmVxdWVzdGVkIG9yIGlmIHRoZSBwb29sIGRvZXNuJ3QgaGF2ZSBmcmVlIGNhbnZhc2VzLlxyXG4gICAgICovXHJcbiAgICB2YXIgZmlyc3QgPSBmdW5jdGlvbiAoY2FudmFzVHlwZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoY2FudmFzVHlwZSA9PT0gdW5kZWZpbmVkKSB7IGNhbnZhc1R5cGUgPSBDT05TVC5DQU5WQVM7IH1cclxuXHJcbiAgICAgICAgaWYgKGNhbnZhc1R5cGUgPT09IENPTlNULldFQkdMKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvb2wubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY29udGFpbmVyID0gcG9vbFtpXTtcclxuXHJcbiAgICAgICAgICAgIGlmICghY29udGFpbmVyLnBhcmVudCAmJiBjb250YWluZXIudHlwZSA9PT0gY2FudmFzVHlwZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTG9va3MgdXAgYSBjYW52YXMgYmFzZWQgb24gaXRzIHBhcmVudCwgYW5kIGlmIGZvdW5kIHB1dHMgaXQgYmFjayBpbiB0aGUgcG9vbCwgZnJlZWluZyBpdCB1cCBmb3IgcmUtdXNlLlxyXG4gICAgICogVGhlIGNhbnZhcyBoYXMgaXRzIHdpZHRoIGFuZCBoZWlnaHQgc2V0IHRvIDEsIGFuZCBpdHMgcGFyZW50IGF0dHJpYnV0ZSBudWxsZWQuXHJcbiAgICAgKlxyXG4gICAgICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNhbnZhcy5DYW52YXNQb29sLnJlbW92ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsqfSBwYXJlbnQgLSBUaGUgY2FudmFzIG9yIHRoZSBwYXJlbnQgb2YgdGhlIGNhbnZhcyB0byBmcmVlLlxyXG4gICAgICovXHJcbiAgICB2YXIgcmVtb3ZlID0gZnVuY3Rpb24gKHBhcmVudClcclxuICAgIHtcclxuICAgICAgICAvLyAgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwYXJlbnQgaXMgYSBjYW52YXMgb2JqZWN0XHJcbiAgICAgICAgdmFyIGlzQ2FudmFzID0gcGFyZW50IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQ7XHJcblxyXG4gICAgICAgIHBvb2wuZm9yRWFjaChmdW5jdGlvbiAoY29udGFpbmVyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKChpc0NhbnZhcyAmJiBjb250YWluZXIuY2FudmFzID09PSBwYXJlbnQpIHx8ICghaXNDYW52YXMgJiYgY29udGFpbmVyLnBhcmVudCA9PT0gcGFyZW50KSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyLnBhcmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBjb250YWluZXIuY2FudmFzLndpZHRoID0gMTtcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5jYW52YXMuaGVpZ2h0ID0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHRvdGFsIG51bWJlciBvZiB1c2VkIGNhbnZhcyBlbGVtZW50cyBpbiB0aGUgcG9vbC5cclxuICAgICAqXHJcbiAgICAgKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQ2FudmFzLkNhbnZhc1Bvb2wudG90YWxcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSBudW1iZXIgb2YgdXNlZCBjYW52YXNlcy5cclxuICAgICAqL1xyXG4gICAgdmFyIHRvdGFsID0gZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgYyA9IDA7XHJcblxyXG4gICAgICAgIHBvb2wuZm9yRWFjaChmdW5jdGlvbiAoY29udGFpbmVyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRhaW5lci5wYXJlbnQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGMrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gYztcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJlZSBjYW52YXMgZWxlbWVudHMgaW4gdGhlIHBvb2wuXHJcbiAgICAgKlxyXG4gICAgICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNhbnZhcy5DYW52YXNQb29sLmZyZWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSBudW1iZXIgb2YgZnJlZSBjYW52YXNlcy5cclxuICAgICAqL1xyXG4gICAgdmFyIGZyZWUgPSBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBwb29sLmxlbmd0aCAtIHRvdGFsKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzYWJsZSBjb250ZXh0IHNtb290aGluZyBvbiBhbnkgbmV3IENhbnZhcyBlbGVtZW50IGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNhbnZhcy5DYW52YXNQb29sLmRpc2FibGVTbW9vdGhpbmdcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB2YXIgZGlzYWJsZVNtb290aGluZyA9IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgX2Rpc2FibGVDb250ZXh0U21vb3RoaW5nID0gdHJ1ZTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbmFibGUgY29udGV4dCBzbW9vdGhpbmcgb24gYW55IG5ldyBDYW52YXMgZWxlbWVudCBjcmVhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5DYW52YXMuQ2FudmFzUG9vbC5lbmFibGVTbW9vdGhpbmdcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB2YXIgZW5hYmxlU21vb3RoaW5nID0gZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBfZGlzYWJsZUNvbnRleHRTbW9vdGhpbmcgPSBmYWxzZTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBjcmVhdGUyRDogY3JlYXRlMkQsXHJcbiAgICAgICAgY3JlYXRlOiBjcmVhdGUsXHJcbiAgICAgICAgY3JlYXRlV2ViR0w6IGNyZWF0ZVdlYkdMLFxyXG4gICAgICAgIGRpc2FibGVTbW9vdGhpbmc6IGRpc2FibGVTbW9vdGhpbmcsXHJcbiAgICAgICAgZW5hYmxlU21vb3RoaW5nOiBlbmFibGVTbW9vdGhpbmcsXHJcbiAgICAgICAgZmlyc3Q6IGZpcnN0LFxyXG4gICAgICAgIGZyZWU6IGZyZWUsXHJcbiAgICAgICAgcG9vbDogcG9vbCxcclxuICAgICAgICByZW1vdmU6IHJlbW92ZSxcclxuICAgICAgICB0b3RhbDogdG90YWxcclxuICAgIH07XHJcbn07XHJcblxyXG4vLyAgSWYgd2UgZXhwb3J0IHRoZSBjYWxsZWQgZnVuY3Rpb24gaGVyZSwgaXQnbGwgb25seSBiZSBpbnZva2VkIG9uY2UgKG5vdCBldmVyeSB0aW1lIGl0J3MgcmVxdWlyZWQpLlxyXG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc1Bvb2woKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/canvas/CanvasPool.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/canvas/Smoothing.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/display/canvas/Smoothing.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n// Browser specific prefix, so not going to change between contexts, only between browsers\r\nvar prefix = '';\r\n\r\n/**\r\n * @namespace Phaser.Display.Canvas.Smoothing\r\n * @since 3.0.0\r\n */\r\nvar Smoothing = function ()\r\n{\r\n /**\r\n * Gets the Smoothing Enabled vendor prefix being used on the given context, or null if not set.\r\n *\r\n * @function Phaser.Display.Canvas.Smoothing.getPrefix\r\n * @since 3.0.0\r\n *\r\n * @param {(CanvasRenderingContext2D|WebGLRenderingContext)} context - The canvas context to check.\r\n *\r\n * @return {string} The name of the property on the context which controls image smoothing (either `imageSmoothingEnabled` or a vendor-prefixed version thereof), or `null` if not supported.\r\n */\r\n var getPrefix = function (context)\r\n {\r\n var vendors = [ 'i', 'webkitI', 'msI', 'mozI', 'oI' ];\r\n\r\n for (var i = 0; i < vendors.length; i++)\r\n {\r\n var s = vendors[i] + 'mageSmoothingEnabled';\r\n\r\n if (s in context)\r\n {\r\n return s;\r\n }\r\n }\r\n\r\n return null;\r\n };\r\n\r\n /**\r\n * Sets the Image Smoothing property on the given context. Set to false to disable image smoothing.\r\n * By default browsers have image smoothing enabled, which isn't always what you visually want, especially\r\n * when using pixel art in a game. Note that this sets the property on the context itself, so that any image\r\n * drawn to the context will be affected. This sets the property across all current browsers but support is\r\n * patchy on earlier browsers, especially on mobile.\r\n *\r\n * @function Phaser.Display.Canvas.Smoothing.enable\r\n * @since 3.0.0\r\n *\r\n * @param {(CanvasRenderingContext2D|WebGLRenderingContext)} context - The context on which to enable smoothing.\r\n *\r\n * @return {(CanvasRenderingContext2D|WebGLRenderingContext)} The provided context.\r\n */\r\n var enable = function (context)\r\n {\r\n if (prefix === '')\r\n {\r\n prefix = getPrefix(context);\r\n }\r\n\r\n if (prefix)\r\n {\r\n context[prefix] = true;\r\n }\r\n\r\n return context;\r\n };\r\n\r\n /**\r\n * Sets the Image Smoothing property on the given context. Set to false to disable image smoothing.\r\n * By default browsers have image smoothing enabled, which isn't always what you visually want, especially\r\n * when using pixel art in a game. Note that this sets the property on the context itself, so that any image\r\n * drawn to the context will be affected. This sets the property across all current browsers but support is\r\n * patchy on earlier browsers, especially on mobile.\r\n *\r\n * @function Phaser.Display.Canvas.Smoothing.disable\r\n * @since 3.0.0\r\n *\r\n * @param {(CanvasRenderingContext2D|WebGLRenderingContext)} context - The context on which to disable smoothing.\r\n *\r\n * @return {(CanvasRenderingContext2D|WebGLRenderingContext)} The provided context.\r\n */\r\n var disable = function (context)\r\n {\r\n if (prefix === '')\r\n {\r\n prefix = getPrefix(context);\r\n }\r\n\r\n if (prefix)\r\n {\r\n context[prefix] = false;\r\n }\r\n\r\n return context;\r\n };\r\n\r\n /**\r\n * Returns `true` if the given context has image smoothing enabled, otherwise returns `false`.\r\n * Returns null if no smoothing prefix is available.\r\n *\r\n * @function Phaser.Display.Canvas.Smoothing.isEnabled\r\n * @since 3.0.0\r\n *\r\n * @param {(CanvasRenderingContext2D|WebGLRenderingContext)} context - The context to check.\r\n *\r\n * @return {?boolean} `true` if smoothing is enabled on the context, otherwise `false`. `null` if not supported.\r\n */\r\n var isEnabled = function (context)\r\n {\r\n return (prefix !== null) ? context[prefix] : null;\r\n };\r\n\r\n return {\r\n disable: disable,\r\n enable: enable,\r\n getPrefix: getPrefix,\r\n isEnabled: isEnabled\r\n };\r\n\r\n};\r\n\r\nmodule.exports = Smoothing();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NhbnZhcy9TbW9vdGhpbmcuanM/NzZkYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlEQUFpRDtBQUNoRTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixvQkFBb0I7QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlEQUFpRDtBQUNoRTtBQUNBLGdCQUFnQixpREFBaUQ7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaURBQWlEO0FBQ2hFO0FBQ0EsZ0JBQWdCLGlEQUFpRDtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpREFBaUQ7QUFDaEU7QUFDQSxnQkFBZ0IsU0FBUztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvY2FudmFzL1Ntb290aGluZy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLy8gIEJyb3dzZXIgc3BlY2lmaWMgcHJlZml4LCBzbyBub3QgZ29pbmcgdG8gY2hhbmdlIGJldHdlZW4gY29udGV4dHMsIG9ubHkgYmV0d2VlbiBicm93c2Vyc1xyXG52YXIgcHJlZml4ID0gJyc7XHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuRGlzcGxheS5DYW52YXMuU21vb3RoaW5nXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxudmFyIFNtb290aGluZyA9IGZ1bmN0aW9uICgpXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgU21vb3RoaW5nIEVuYWJsZWQgdmVuZG9yIHByZWZpeCBiZWluZyB1c2VkIG9uIHRoZSBnaXZlbiBjb250ZXh0LCBvciBudWxsIGlmIG5vdCBzZXQuXHJcbiAgICAgKlxyXG4gICAgICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNhbnZhcy5TbW9vdGhpbmcuZ2V0UHJlZml4XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR8V2ViR0xSZW5kZXJpbmdDb250ZXh0KX0gY29udGV4dCAtIFRoZSBjYW52YXMgY29udGV4dCB0byBjaGVjay5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBvbiB0aGUgY29udGV4dCB3aGljaCBjb250cm9scyBpbWFnZSBzbW9vdGhpbmcgKGVpdGhlciBgaW1hZ2VTbW9vdGhpbmdFbmFibGVkYCBvciBhIHZlbmRvci1wcmVmaXhlZCB2ZXJzaW9uIHRoZXJlb2YpLCBvciBgbnVsbGAgaWYgbm90IHN1cHBvcnRlZC5cclxuICAgICAqL1xyXG4gICAgdmFyIGdldFByZWZpeCA9IGZ1bmN0aW9uIChjb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIHZhciB2ZW5kb3JzID0gWyAnaScsICd3ZWJraXRJJywgJ21zSScsICdtb3pJJywgJ29JJyBdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZlbmRvcnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgcyA9IHZlbmRvcnNbaV0gKyAnbWFnZVNtb290aGluZ0VuYWJsZWQnO1xyXG5cclxuICAgICAgICAgICAgaWYgKHMgaW4gY29udGV4dClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIEltYWdlIFNtb290aGluZyBwcm9wZXJ0eSBvbiB0aGUgZ2l2ZW4gY29udGV4dC4gU2V0IHRvIGZhbHNlIHRvIGRpc2FibGUgaW1hZ2Ugc21vb3RoaW5nLlxyXG4gICAgICogQnkgZGVmYXVsdCBicm93c2VycyBoYXZlIGltYWdlIHNtb290aGluZyBlbmFibGVkLCB3aGljaCBpc24ndCBhbHdheXMgd2hhdCB5b3UgdmlzdWFsbHkgd2FudCwgZXNwZWNpYWxseVxyXG4gICAgICogd2hlbiB1c2luZyBwaXhlbCBhcnQgaW4gYSBnYW1lLiBOb3RlIHRoYXQgdGhpcyBzZXRzIHRoZSBwcm9wZXJ0eSBvbiB0aGUgY29udGV4dCBpdHNlbGYsIHNvIHRoYXQgYW55IGltYWdlXHJcbiAgICAgKiBkcmF3biB0byB0aGUgY29udGV4dCB3aWxsIGJlIGFmZmVjdGVkLiBUaGlzIHNldHMgdGhlIHByb3BlcnR5IGFjcm9zcyBhbGwgY3VycmVudCBicm93c2VycyBidXQgc3VwcG9ydCBpc1xyXG4gICAgICogcGF0Y2h5IG9uIGVhcmxpZXIgYnJvd3NlcnMsIGVzcGVjaWFsbHkgb24gbW9iaWxlLlxyXG4gICAgICpcclxuICAgICAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5DYW52YXMuU21vb3RoaW5nLmVuYWJsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfFdlYkdMUmVuZGVyaW5nQ29udGV4dCl9IGNvbnRleHQgLSBUaGUgY29udGV4dCBvbiB3aGljaCB0byBlbmFibGUgc21vb3RoaW5nLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR8V2ViR0xSZW5kZXJpbmdDb250ZXh0KX0gVGhlIHByb3ZpZGVkIGNvbnRleHQuXHJcbiAgICAgKi9cclxuICAgIHZhciBlbmFibGUgPSBmdW5jdGlvbiAoY29udGV4dClcclxuICAgIHtcclxuICAgICAgICBpZiAocHJlZml4ID09PSAnJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByZWZpeCA9IGdldFByZWZpeChjb250ZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwcmVmaXgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb250ZXh0W3ByZWZpeF0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgSW1hZ2UgU21vb3RoaW5nIHByb3BlcnR5IG9uIHRoZSBnaXZlbiBjb250ZXh0LiBTZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSBpbWFnZSBzbW9vdGhpbmcuXHJcbiAgICAgKiBCeSBkZWZhdWx0IGJyb3dzZXJzIGhhdmUgaW1hZ2Ugc21vb3RoaW5nIGVuYWJsZWQsIHdoaWNoIGlzbid0IGFsd2F5cyB3aGF0IHlvdSB2aXN1YWxseSB3YW50LCBlc3BlY2lhbGx5XHJcbiAgICAgKiB3aGVuIHVzaW5nIHBpeGVsIGFydCBpbiBhIGdhbWUuIE5vdGUgdGhhdCB0aGlzIHNldHMgdGhlIHByb3BlcnR5IG9uIHRoZSBjb250ZXh0IGl0c2VsZiwgc28gdGhhdCBhbnkgaW1hZ2VcclxuICAgICAqIGRyYXduIHRvIHRoZSBjb250ZXh0IHdpbGwgYmUgYWZmZWN0ZWQuIFRoaXMgc2V0cyB0aGUgcHJvcGVydHkgYWNyb3NzIGFsbCBjdXJyZW50IGJyb3dzZXJzIGJ1dCBzdXBwb3J0IGlzXHJcbiAgICAgKiBwYXRjaHkgb24gZWFybGllciBicm93c2VycywgZXNwZWNpYWxseSBvbiBtb2JpbGUuXHJcbiAgICAgKlxyXG4gICAgICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNhbnZhcy5TbW9vdGhpbmcuZGlzYWJsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfFdlYkdMUmVuZGVyaW5nQ29udGV4dCl9IGNvbnRleHQgLSBUaGUgY29udGV4dCBvbiB3aGljaCB0byBkaXNhYmxlIHNtb290aGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfFdlYkdMUmVuZGVyaW5nQ29udGV4dCl9IFRoZSBwcm92aWRlZCBjb250ZXh0LlxyXG4gICAgICovXHJcbiAgICB2YXIgZGlzYWJsZSA9IGZ1bmN0aW9uIChjb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChwcmVmaXggPT09ICcnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJlZml4ID0gZ2V0UHJlZml4KGNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHByZWZpeClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRleHRbcHJlZml4XSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGdpdmVuIGNvbnRleHQgaGFzIGltYWdlIHNtb290aGluZyBlbmFibGVkLCBvdGhlcndpc2UgcmV0dXJucyBgZmFsc2VgLlxyXG4gICAgICogUmV0dXJucyBudWxsIGlmIG5vIHNtb290aGluZyBwcmVmaXggaXMgYXZhaWxhYmxlLlxyXG4gICAgICpcclxuICAgICAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5DYW52YXMuU21vb3RoaW5nLmlzRW5hYmxlZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfFdlYkdMUmVuZGVyaW5nQ29udGV4dCl9IGNvbnRleHQgLSBUaGUgY29udGV4dCB0byBjaGVjay5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/Ym9vbGVhbn0gYHRydWVgIGlmIHNtb290aGluZyBpcyBlbmFibGVkIG9uIHRoZSBjb250ZXh0LCBvdGhlcndpc2UgYGZhbHNlYC4gYG51bGxgIGlmIG5vdCBzdXBwb3J0ZWQuXHJcbiAgICAgKi9cclxuICAgIHZhciBpc0VuYWJsZWQgPSBmdW5jdGlvbiAoY29udGV4dClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHByZWZpeCAhPT0gbnVsbCkgPyBjb250ZXh0W3ByZWZpeF0gOiBudWxsO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRpc2FibGU6IGRpc2FibGUsXHJcbiAgICAgICAgZW5hYmxlOiBlbmFibGUsXHJcbiAgICAgICAgZ2V0UHJlZml4OiBnZXRQcmVmaXgsXHJcbiAgICAgICAgaXNFbmFibGVkOiBpc0VuYWJsZWRcclxuICAgIH07XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTbW9vdGhpbmcoKTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/canvas/Smoothing.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/canvas/TouchAction.js":
/*!***************************************************************!*\
!*** ./node_modules/phaser/src/display/canvas/TouchAction.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Sets the touch-action property on the canvas style. Can be used to disable default browser touch actions.\r\n *\r\n * @function Phaser.Display.Canvas.TouchAction\r\n * @since 3.0.0\r\n *\r\n * @param {HTMLCanvasElement} canvas - The canvas element to have the style applied to.\r\n * @param {string} [value='none'] - The touch action value to set on the canvas. Set to `none` to disable touch actions.\r\n *\r\n * @return {HTMLCanvasElement} The canvas element.\r\n */\r\nvar TouchAction = function (canvas, value)\r\n{\r\n if (value === undefined) { value = 'none'; }\r\n\r\n canvas.style['msTouchAction'] = value;\r\n canvas.style['ms-touch-action'] = value;\r\n canvas.style['touch-action'] = value;\r\n\r\n return canvas;\r\n};\r\n\r\nmodule.exports = TouchAction;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NhbnZhcy9Ub3VjaEFjdGlvbi5qcz9kNzMyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLGtCQUFrQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsZ0JBQWdCOztBQUU5QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvY2FudmFzL1RvdWNoQWN0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogU2V0cyB0aGUgdG91Y2gtYWN0aW9uIHByb3BlcnR5IG9uIHRoZSBjYW52YXMgc3R5bGUuIENhbiBiZSB1c2VkIHRvIGRpc2FibGUgZGVmYXVsdCBicm93c2VyIHRvdWNoIGFjdGlvbnMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5DYW52YXMuVG91Y2hBY3Rpb25cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7SFRNTENhbnZhc0VsZW1lbnR9IGNhbnZhcyAtIFRoZSBjYW52YXMgZWxlbWVudCB0byBoYXZlIHRoZSBzdHlsZSBhcHBsaWVkIHRvLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlPSdub25lJ10gLSBUaGUgdG91Y2ggYWN0aW9uIHZhbHVlIHRvIHNldCBvbiB0aGUgY2FudmFzLiBTZXQgdG8gYG5vbmVgIHRvIGRpc2FibGUgdG91Y2ggYWN0aW9ucy5cclxuICpcclxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSBjYW52YXMgZWxlbWVudC5cclxuICovXHJcbnZhciBUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIChjYW52YXMsIHZhbHVlKVxyXG57XHJcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9ICdub25lJzsgfVxyXG5cclxuICAgIGNhbnZhcy5zdHlsZVsnbXNUb3VjaEFjdGlvbiddID0gdmFsdWU7XHJcbiAgICBjYW52YXMuc3R5bGVbJ21zLXRvdWNoLWFjdGlvbiddID0gdmFsdWU7XHJcbiAgICBjYW52YXMuc3R5bGVbJ3RvdWNoLWFjdGlvbiddID0gdmFsdWU7XHJcblxyXG4gICAgcmV0dXJuIGNhbnZhcztcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVG91Y2hBY3Rpb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/canvas/TouchAction.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/canvas/UserSelect.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/display/canvas/UserSelect.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Sets the user-select property on the canvas style. Can be used to disable default browser selection actions.\r\n *\r\n * @function Phaser.Display.Canvas.UserSelect\r\n * @since 3.0.0\r\n *\r\n * @param {HTMLCanvasElement} canvas - The canvas element to have the style applied to.\r\n * @param {string} [value='none'] - The touch callout value to set on the canvas. Set to `none` to disable touch callouts.\r\n *\r\n * @return {HTMLCanvasElement} The canvas element.\r\n */\r\nvar UserSelect = function (canvas, value)\r\n{\r\n if (value === undefined) { value = 'none'; }\r\n\r\n var vendors = [\r\n '-webkit-',\r\n '-khtml-',\r\n '-moz-',\r\n '-ms-',\r\n ''\r\n ];\r\n\r\n vendors.forEach(function (vendor)\r\n {\r\n canvas.style[vendor + 'user-select'] = value;\r\n });\r\n\r\n canvas.style['-webkit-touch-callout'] = value;\r\n canvas.style['-webkit-tap-highlight-color'] = 'rgba(0, 0, 0, 0)';\r\n\r\n return canvas;\r\n};\r\n\r\nmodule.exports = UserSelect;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NhbnZhcy9Vc2VyU2VsZWN0LmpzPzA5ZWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsa0JBQWtCO0FBQzdCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksa0JBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixnQkFBZ0I7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9jYW52YXMvVXNlclNlbGVjdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFNldHMgdGhlIHVzZXItc2VsZWN0IHByb3BlcnR5IG9uIHRoZSBjYW52YXMgc3R5bGUuIENhbiBiZSB1c2VkIHRvIGRpc2FibGUgZGVmYXVsdCBicm93c2VyIHNlbGVjdGlvbiBhY3Rpb25zLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQ2FudmFzLlVzZXJTZWxlY3RcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7SFRNTENhbnZhc0VsZW1lbnR9IGNhbnZhcyAtIFRoZSBjYW52YXMgZWxlbWVudCB0byBoYXZlIHRoZSBzdHlsZSBhcHBsaWVkIHRvLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlPSdub25lJ10gLSBUaGUgdG91Y2ggY2FsbG91dCB2YWx1ZSB0byBzZXQgb24gdGhlIGNhbnZhcy4gU2V0IHRvIGBub25lYCB0byBkaXNhYmxlIHRvdWNoIGNhbGxvdXRzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIGNhbnZhcyBlbGVtZW50LlxyXG4gKi9cclxudmFyIFVzZXJTZWxlY3QgPSBmdW5jdGlvbiAoY2FudmFzLCB2YWx1ZSlcclxue1xyXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsgdmFsdWUgPSAnbm9uZSc7IH1cclxuXHJcbiAgICB2YXIgdmVuZG9ycyA9IFtcclxuICAgICAgICAnLXdlYmtpdC0nLFxyXG4gICAgICAgICcta2h0bWwtJyxcclxuICAgICAgICAnLW1vei0nLFxyXG4gICAgICAgICctbXMtJyxcclxuICAgICAgICAnJ1xyXG4gICAgXTtcclxuXHJcbiAgICB2ZW5kb3JzLmZvckVhY2goZnVuY3Rpb24gKHZlbmRvcilcclxuICAgIHtcclxuICAgICAgICBjYW52YXMuc3R5bGVbdmVuZG9yICsgJ3VzZXItc2VsZWN0J10gPSB2YWx1ZTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNhbnZhcy5zdHlsZVsnLXdlYmtpdC10b3VjaC1jYWxsb3V0J10gPSB2YWx1ZTtcclxuICAgIGNhbnZhcy5zdHlsZVsnLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yJ10gPSAncmdiYSgwLCAwLCAwLCAwKSc7XHJcblxyXG4gICAgcmV0dXJuIGNhbnZhcztcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVXNlclNlbGVjdDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/canvas/UserSelect.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/canvas/index.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/display/canvas/index.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Display.Canvas\r\n */\r\n\r\nmodule.exports = {\r\n\r\n CanvasInterpolation: __webpack_require__(/*! ./CanvasInterpolation */ \"./node_modules/phaser/src/display/canvas/CanvasInterpolation.js\"),\r\n CanvasPool: __webpack_require__(/*! ./CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\"),\r\n Smoothing: __webpack_require__(/*! ./Smoothing */ \"./node_modules/phaser/src/display/canvas/Smoothing.js\"),\r\n TouchAction: __webpack_require__(/*! ./TouchAction */ \"./node_modules/phaser/src/display/canvas/TouchAction.js\"),\r\n UserSelect: __webpack_require__(/*! ./UserSelect */ \"./node_modules/phaser/src/display/canvas/UserSelect.js\")\r\n \r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NhbnZhcy9pbmRleC5qcz85ZTM1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEseUJBQXlCLG1CQUFPLENBQUMsOEZBQXVCO0FBQ3hELGdCQUFnQixtQkFBTyxDQUFDLDRFQUFjO0FBQ3RDLGVBQWUsbUJBQU8sQ0FBQywwRUFBYTtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyw4RUFBZTtBQUN4QyxnQkFBZ0IsbUJBQU8sQ0FBQyw0RUFBYzs7QUFFdEMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NhbnZhcy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkRpc3BsYXkuQ2FudmFzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQ2FudmFzSW50ZXJwb2xhdGlvbjogcmVxdWlyZSgnLi9DYW52YXNJbnRlcnBvbGF0aW9uJyksXHJcbiAgICBDYW52YXNQb29sOiByZXF1aXJlKCcuL0NhbnZhc1Bvb2wnKSxcclxuICAgIFNtb290aGluZzogcmVxdWlyZSgnLi9TbW9vdGhpbmcnKSxcclxuICAgIFRvdWNoQWN0aW9uOiByZXF1aXJlKCcuL1RvdWNoQWN0aW9uJyksXHJcbiAgICBVc2VyU2VsZWN0OiByZXF1aXJlKCcuL1VzZXJTZWxlY3QnKVxyXG4gICAgXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/canvas/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/color/Color.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/display/color/Color.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GetColor = __webpack_require__(/*! ./GetColor */ \"./node_modules/phaser/src/display/color/GetColor.js\");\r\nvar GetColor32 = __webpack_require__(/*! ./GetColor32 */ \"./node_modules/phaser/src/display/color/GetColor32.js\");\r\nvar HSVToRGB = __webpack_require__(/*! ./HSVToRGB */ \"./node_modules/phaser/src/display/color/HSVToRGB.js\");\r\nvar RGBToHSV = __webpack_require__(/*! ./RGBToHSV */ \"./node_modules/phaser/src/display/color/RGBToHSV.js\");\r\n\r\n/**\r\n * @namespace Phaser.Display.Color\r\n */\r\n\r\n/**\r\n * @classdesc\r\n * The Color class holds a single color value and allows for easy modification and reading of it.\r\n *\r\n * @class Color\r\n * @memberof Phaser.Display\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {integer} [red=0] - The red color value. A number between 0 and 255.\r\n * @param {integer} [green=0] - The green color value. A number between 0 and 255.\r\n * @param {integer} [blue=0] - The blue color value. A number between 0 and 255.\r\n * @param {integer} [alpha=255] - The alpha value. A number between 0 and 255.\r\n */\r\nvar Color = new Class({\r\n\r\n initialize:\r\n\r\n function Color (red, green, blue, alpha)\r\n {\r\n if (red === undefined) { red = 0; }\r\n if (green === undefined) { green = 0; }\r\n if (blue === undefined) { blue = 0; }\r\n if (alpha === undefined) { alpha = 255; }\r\n\r\n /**\r\n * The internal red color value.\r\n *\r\n * @name Phaser.Display.Color#r\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.r = 0;\r\n\r\n /**\r\n * The internal green color value.\r\n *\r\n * @name Phaser.Display.Color#g\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.g = 0;\r\n\r\n /**\r\n * The internal blue color value.\r\n *\r\n * @name Phaser.Display.Color#b\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.b = 0;\r\n\r\n /**\r\n * The internal alpha color value.\r\n *\r\n * @name Phaser.Display.Color#a\r\n * @type {number}\r\n * @private\r\n * @default 255\r\n * @since 3.0.0\r\n */\r\n this.a = 255;\r\n\r\n /**\r\n * The hue color value. A number between 0 and 1.\r\n * This is the base color.\r\n *\r\n * @name Phaser.Display.Color#_h\r\n * @type {number}\r\n * @default 0\r\n * @private\r\n * @since 3.13.0\r\n */\r\n this._h = 0;\r\n\r\n /**\r\n * The saturation color value. A number between 0 and 1.\r\n * This controls how much of the hue will be in the final color, where 1 is fully saturated and 0 will give you white.\r\n *\r\n * @name Phaser.Display.Color#_s\r\n * @type {number}\r\n * @default 0\r\n * @private\r\n * @since 3.13.0\r\n */\r\n this._s = 0;\r\n\r\n /**\r\n * The lightness color value. A number between 0 and 1.\r\n * This controls how dark the color is. Where 1 is as bright as possible and 0 is black.\r\n *\r\n * @name Phaser.Display.Color#_v\r\n * @type {number}\r\n * @default 0\r\n * @private\r\n * @since 3.13.0\r\n */\r\n this._v = 0;\r\n\r\n /**\r\n * Is this color update locked?\r\n *\r\n * @name Phaser.Display.Color#_locked\r\n * @type {boolean}\r\n * @private\r\n * @since 3.13.0\r\n */\r\n this._locked = false;\r\n\r\n /**\r\n * An array containing the calculated color values for WebGL use.\r\n *\r\n * @name Phaser.Display.Color#gl\r\n * @type {number[]}\r\n * @since 3.0.0\r\n */\r\n this.gl = [ 0, 0, 0, 1 ];\r\n\r\n /**\r\n * Pre-calculated internal color value.\r\n *\r\n * @name Phaser.Display.Color#_color\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this._color = 0;\r\n\r\n /**\r\n * Pre-calculated internal color32 value.\r\n *\r\n * @name Phaser.Display.Color#_color32\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this._color32 = 0;\r\n\r\n /**\r\n * Pre-calculated internal color rgb string value.\r\n *\r\n * @name Phaser.Display.Color#_rgba\r\n * @type {string}\r\n * @private\r\n * @default ''\r\n * @since 3.0.0\r\n */\r\n this._rgba = '';\r\n\r\n this.setTo(red, green, blue, alpha);\r\n },\r\n\r\n /**\r\n * Sets this color to be transparent. Sets all values to zero.\r\n *\r\n * @method Phaser.Display.Color#transparent\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Display.Color} This Color object.\r\n */\r\n transparent: function ()\r\n {\r\n this._locked = true;\r\n\r\n this.red = 0;\r\n this.green = 0;\r\n this.blue = 0;\r\n this.alpha = 0;\r\n\r\n this._locked = false;\r\n\r\n return this.update(true);\r\n },\r\n\r\n /**\r\n * Sets the color of this Color component.\r\n *\r\n * @method Phaser.Display.Color#setTo\r\n * @since 3.0.0\r\n *\r\n * @param {integer} red - The red color value. A number between 0 and 255.\r\n * @param {integer} green - The green color value. A number between 0 and 255.\r\n * @param {integer} blue - The blue color value. A number between 0 and 255.\r\n * @param {integer} [alpha=255] - The alpha value. A number between 0 and 255.\r\n * @param {boolean} [updateHSV=true] - Update the HSV values after setting the RGB values?\r\n *\r\n * @return {Phaser.Display.Color} This Color object.\r\n */\r\n setTo: function (red, green, blue, alpha, updateHSV)\r\n {\r\n if (alpha === undefined) { alpha = 255; }\r\n if (updateHSV === undefined) { updateHSV = true; }\r\n\r\n this._locked = true;\r\n\r\n this.red = red;\r\n this.green = green;\r\n this.blue = blue;\r\n this.alpha = alpha;\r\n\r\n this._locked = false;\r\n\r\n return this.update(updateHSV);\r\n },\r\n\r\n /**\r\n * Sets the red, green, blue and alpha GL values of this Color component.\r\n *\r\n * @method Phaser.Display.Color#setGLTo\r\n * @since 3.0.0\r\n *\r\n * @param {number} red - The red color value. A number between 0 and 1.\r\n * @param {number} green - The green color value. A number between 0 and 1.\r\n * @param {number} blue - The blue color value. A number between 0 and 1.\r\n * @param {number} [alpha=1] - The alpha value. A number between 0 and 1.\r\n *\r\n * @return {Phaser.Display.Color} This Color object.\r\n */\r\n setGLTo: function (red, green, blue, alpha)\r\n {\r\n if (alpha === undefined) { alpha = 1; }\r\n\r\n this._locked = true;\r\n\r\n this.redGL = red;\r\n this.greenGL = green;\r\n this.blueGL = blue;\r\n this.alphaGL = alpha;\r\n\r\n this._locked = false;\r\n\r\n return this.update(true);\r\n },\r\n\r\n /**\r\n * Sets the color based on the color object given.\r\n *\r\n * @method Phaser.Display.Color#setFromRGB\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Display.InputColorObject} color - An object containing `r`, `g`, `b` and optionally `a` values in the range 0 to 255.\r\n *\r\n * @return {Phaser.Display.Color} This Color object.\r\n */\r\n setFromRGB: function (color)\r\n {\r\n this._locked = true;\r\n\r\n this.red = color.r;\r\n this.green = color.g;\r\n this.blue = color.b;\r\n\r\n if (color.hasOwnProperty('a'))\r\n {\r\n this.alpha = color.a;\r\n }\r\n\r\n this._locked = false;\r\n\r\n return this.update(true);\r\n },\r\n\r\n /**\r\n * Sets the color based on the hue, saturation and lightness values given.\r\n *\r\n * @method Phaser.Display.Color#setFromHSV\r\n * @since 3.13.0\r\n *\r\n * @param {number} h - The hue, in the range 0 - 1. This is the base color.\r\n * @param {number} s - The saturation, in the range 0 - 1. This controls how much of the hue will be in the final color, where 1 is fully saturated and 0 will give you white.\r\n * @param {number} v - The value, in the range 0 - 1. This controls how dark the color is. Where 1 is as bright as possible and 0 is black.\r\n *\r\n * @return {Phaser.Display.Color} This Color object.\r\n */\r\n setFromHSV: function (h, s, v)\r\n {\r\n return HSVToRGB(h, s, v, this);\r\n },\r\n\r\n /**\r\n * Updates the internal cache values.\r\n *\r\n * @method Phaser.Display.Color#update\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Display.Color} This Color object.\r\n */\r\n update: function (updateHSV)\r\n {\r\n if (updateHSV === undefined) { updateHSV = false; }\r\n\r\n if (this._locked)\r\n {\r\n return this;\r\n }\r\n\r\n var r = this.r;\r\n var g = this.g;\r\n var b = this.b;\r\n var a = this.a;\r\n\r\n this._color = GetColor(r, g, b);\r\n this._color32 = GetColor32(r, g, b, a);\r\n this._rgba = 'rgba(' + r + ',' + g + ',' + b + ',' + (a / 255) + ')';\r\n\r\n if (updateHSV)\r\n {\r\n RGBToHSV(r, g, b, this);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Updates the internal hsv cache values.\r\n *\r\n * @method Phaser.Display.Color#updateHSV\r\n * @private\r\n * @since 3.13.0\r\n *\r\n * @return {Phaser.Display.Color} This Color object.\r\n */\r\n updateHSV: function ()\r\n {\r\n var r = this.r;\r\n var g = this.g;\r\n var b = this.b;\r\n\r\n RGBToHSV(r, g, b, this);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Returns a new Color component using the values from this one.\r\n *\r\n * @method Phaser.Display.Color#clone\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Display.Color} A new Color object.\r\n */\r\n clone: function ()\r\n {\r\n return new Color(this.r, this.g, this.b, this.a);\r\n },\r\n\r\n /**\r\n * Sets this Color object to be grayscaled based on the shade value given.\r\n *\r\n * @method Phaser.Display.Color#gray\r\n * @since 3.13.0\r\n * \r\n * @param {integer} shade - A value between 0 and 255.\r\n *\r\n * @return {Phaser.Display.Color} This Color object.\r\n */\r\n gray: function (shade)\r\n {\r\n return this.setTo(shade, shade, shade);\r\n },\r\n\r\n /**\r\n * Sets this Color object to be a random color between the `min` and `max` values given.\r\n *\r\n * @method Phaser.Display.Color#random\r\n * @since 3.13.0\r\n * \r\n * @param {integer} [min=0] - The minimum random color value. Between 0 and 255.\r\n * @param {integer} [max=255] - The maximum random color value. Between 0 and 255.\r\n *\r\n * @return {Phaser.Display.Color} This Color object.\r\n */\r\n random: function (min, max)\r\n {\r\n if (min === undefined) { min = 0; }\r\n if (max === undefined) { max = 255; }\r\n\r\n var r = Math.floor(min + Math.random() * (max - min));\r\n var g = Math.floor(min + Math.random() * (max - min));\r\n var b = Math.floor(min + Math.random() * (max - min));\r\n\r\n return this.setTo(r, g, b);\r\n },\r\n\r\n /**\r\n * Sets this Color object to be a random grayscale color between the `min` and `max` values given.\r\n *\r\n * @method Phaser.Display.Color#randomGray\r\n * @since 3.13.0\r\n * \r\n * @param {integer} [min=0] - The minimum random color value. Between 0 and 255.\r\n * @param {integer} [max=255] - The maximum random color value. Between 0 and 255.\r\n *\r\n * @return {Phaser.Display.Color} This Color object.\r\n */\r\n randomGray: function (min, max)\r\n {\r\n if (min === undefined) { min = 0; }\r\n if (max === undefined) { max = 255; }\r\n\r\n var s = Math.floor(min + Math.random() * (max - min));\r\n\r\n return this.setTo(s, s, s);\r\n },\r\n\r\n /**\r\n * Increase the saturation of this Color by the percentage amount given.\r\n * The saturation is the amount of the base color in the hue.\r\n *\r\n * @method Phaser.Display.Color#saturate\r\n * @since 3.13.0\r\n * \r\n * @param {integer} amount - The percentage amount to change this color by. A value between 0 and 100.\r\n *\r\n * @return {Phaser.Display.Color} This Color object.\r\n */\r\n saturate: function (amount)\r\n {\r\n this.s += amount / 100;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Decrease the saturation of this Color by the percentage amount given.\r\n * The saturation is the amount of the base color in the hue.\r\n *\r\n * @method Phaser.Display.Color#desaturate\r\n * @since 3.13.0\r\n * \r\n * @param {integer} amount - The percentage amount to change this color by. A value between 0 and 100.\r\n *\r\n * @return {Phaser.Display.Color} This Color object.\r\n */\r\n desaturate: function (amount)\r\n {\r\n this.s -= amount / 100;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Increase the lightness of this Color by the percentage amount given.\r\n *\r\n * @method Phaser.Display.Color#lighten\r\n * @since 3.13.0\r\n * \r\n * @param {integer} amount - The percentage amount to change this color by. A value between 0 and 100.\r\n *\r\n * @return {Phaser.Display.Color} This Color object.\r\n */\r\n lighten: function (amount)\r\n {\r\n this.v += amount / 100;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Decrease the lightness of this Color by the percentage amount given.\r\n *\r\n * @method Phaser.Display.Color#darken\r\n * @since 3.13.0\r\n * \r\n * @param {integer} amount - The percentage amount to change this color by. A value between 0 and 100.\r\n *\r\n * @return {Phaser.Display.Color} This Color object.\r\n */\r\n darken: function (amount)\r\n {\r\n this.v -= amount / 100;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Brighten this Color by the percentage amount given.\r\n *\r\n * @method Phaser.Display.Color#brighten\r\n * @since 3.13.0\r\n * \r\n * @param {integer} amount - The percentage amount to change this color by. A value between 0 and 100.\r\n *\r\n * @return {Phaser.Display.Color} This Color object.\r\n */\r\n brighten: function (amount)\r\n {\r\n var r = this.r;\r\n var g = this.g;\r\n var b = this.b;\r\n\r\n r = Math.max(0, Math.min(255, r - Math.round(255 * - (amount / 100))));\r\n g = Math.max(0, Math.min(255, g - Math.round(255 * - (amount / 100))));\r\n b = Math.max(0, Math.min(255, b - Math.round(255 * - (amount / 100))));\r\n\r\n return this.setTo(r, g, b);\r\n },\r\n\r\n /**\r\n * The color of this Color component, not including the alpha channel.\r\n *\r\n * @name Phaser.Display.Color#color\r\n * @type {number}\r\n * @readonly\r\n * @since 3.0.0\r\n */\r\n color: {\r\n\r\n get: function ()\r\n {\r\n return this._color;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The color of this Color component, including the alpha channel.\r\n *\r\n * @name Phaser.Display.Color#color32\r\n * @type {number}\r\n * @readonly\r\n * @since 3.0.0\r\n */\r\n color32: {\r\n\r\n get: function ()\r\n {\r\n return this._color32;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The color of this Color component as a string which can be used in CSS color values.\r\n *\r\n * @name Phaser.Display.Color#rgba\r\n * @type {string}\r\n * @readonly\r\n * @since 3.0.0\r\n */\r\n rgba: {\r\n\r\n get: function ()\r\n {\r\n return this._rgba;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The red color value, normalized to the range 0 to 1.\r\n *\r\n * @name Phaser.Display.Color#redGL\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n redGL: {\r\n\r\n get: function ()\r\n {\r\n return this.gl[0];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.gl[0] = Math.min(Math.abs(value), 1);\r\n\r\n this.r = Math.floor(this.gl[0] * 255);\r\n\r\n this.update(true);\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The green color value, normalized to the range 0 to 1.\r\n *\r\n * @name Phaser.Display.Color#greenGL\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n greenGL: {\r\n\r\n get: function ()\r\n {\r\n return this.gl[1];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.gl[1] = Math.min(Math.abs(value), 1);\r\n\r\n this.g = Math.floor(this.gl[1] * 255);\r\n\r\n this.update(true);\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The blue color value, normalized to the range 0 to 1.\r\n *\r\n * @name Phaser.Display.Color#blueGL\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n blueGL: {\r\n\r\n get: function ()\r\n {\r\n return this.gl[2];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.gl[2] = Math.min(Math.abs(value), 1);\r\n\r\n this.b = Math.floor(this.gl[2] * 255);\r\n\r\n this.update(true);\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The alpha color value, normalized to the range 0 to 1.\r\n *\r\n * @name Phaser.Display.Color#alphaGL\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n alphaGL: {\r\n\r\n get: function ()\r\n {\r\n return this.gl[3];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.gl[3] = Math.min(Math.abs(value), 1);\r\n\r\n this.a = Math.floor(this.gl[3] * 255);\r\n\r\n this.update();\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The red color value, normalized to the range 0 to 255.\r\n *\r\n * @name Phaser.Display.Color#red\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n red: {\r\n\r\n get: function ()\r\n {\r\n return this.r;\r\n },\r\n\r\n set: function (value)\r\n {\r\n value = Math.floor(Math.abs(value));\r\n\r\n this.r = Math.min(value, 255);\r\n\r\n this.gl[0] = value / 255;\r\n\r\n this.update(true);\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The green color value, normalized to the range 0 to 255.\r\n *\r\n * @name Phaser.Display.Color#green\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n green: {\r\n\r\n get: function ()\r\n {\r\n return this.g;\r\n },\r\n\r\n set: function (value)\r\n {\r\n value = Math.floor(Math.abs(value));\r\n\r\n this.g = Math.min(value, 255);\r\n\r\n this.gl[1] = value / 255;\r\n\r\n this.update(true);\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The blue color value, normalized to the range 0 to 255.\r\n *\r\n * @name Phaser.Display.Color#blue\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n blue: {\r\n\r\n get: function ()\r\n {\r\n return this.b;\r\n },\r\n\r\n set: function (value)\r\n {\r\n value = Math.floor(Math.abs(value));\r\n\r\n this.b = Math.min(value, 255);\r\n\r\n this.gl[2] = value / 255;\r\n\r\n this.update(true);\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The alpha color value, normalized to the range 0 to 255.\r\n *\r\n * @name Phaser.Display.Color#alpha\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n alpha: {\r\n\r\n get: function ()\r\n {\r\n return this.a;\r\n },\r\n\r\n set: function (value)\r\n {\r\n value = Math.floor(Math.abs(value));\r\n\r\n this.a = Math.min(value, 255);\r\n\r\n this.gl[3] = value / 255;\r\n\r\n this.update();\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The hue color value. A number between 0 and 1.\r\n * This is the base color.\r\n *\r\n * @name Phaser.Display.Color#h\r\n * @type {number}\r\n * @since 3.13.0\r\n */\r\n h: {\r\n\r\n get: function ()\r\n {\r\n return this._h;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._h = value;\r\n\r\n HSVToRGB(value, this._s, this._v, this);\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The saturation color value. A number between 0 and 1.\r\n * This controls how much of the hue will be in the final color, where 1 is fully saturated and 0 will give you white.\r\n *\r\n * @name Phaser.Display.Color#s\r\n * @type {number}\r\n * @since 3.13.0\r\n */\r\n s: {\r\n\r\n get: function ()\r\n {\r\n return this._s;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._s = value;\r\n\r\n HSVToRGB(this._h, value, this._v, this);\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The lightness color value. A number between 0 and 1.\r\n * This controls how dark the color is. Where 1 is as bright as possible and 0 is black.\r\n *\r\n * @name Phaser.Display.Color#v\r\n * @type {number}\r\n * @since 3.13.0\r\n */\r\n v: {\r\n\r\n get: function ()\r\n {\r\n return this._v;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._v = value;\r\n\r\n HSVToRGB(this._h, this._s, value, this);\r\n }\r\n\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Color;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0NvbG9yLmpzPzM4NDkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLHVFQUFZO0FBQ25DLGlCQUFpQixtQkFBTyxDQUFDLDJFQUFjO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyx1RUFBWTtBQUNuQyxlQUFlLG1CQUFPLENBQUMsdUVBQVk7O0FBRW5DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDLFNBQVM7QUFDekMsa0NBQWtDLFdBQVc7QUFDN0MsaUNBQWlDLFVBQVU7QUFDM0Msa0NBQWtDLGFBQWE7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IscUJBQXFCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsYUFBYTtBQUMvQyxzQ0FBc0Msa0JBQWtCOztBQUV4RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsV0FBVzs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsc0NBQXNDO0FBQ3JEO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IscUJBQXFCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxtQkFBbUI7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IscUJBQXFCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLFNBQVM7QUFDekMsZ0NBQWdDLFdBQVc7O0FBRTNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLFNBQVM7QUFDekMsZ0NBQWdDLFdBQVc7O0FBRTNDOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0NvbG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgR2V0Q29sb3IgPSByZXF1aXJlKCcuL0dldENvbG9yJyk7XHJcbnZhciBHZXRDb2xvcjMyID0gcmVxdWlyZSgnLi9HZXRDb2xvcjMyJyk7XHJcbnZhciBIU1ZUb1JHQiA9IHJlcXVpcmUoJy4vSFNWVG9SR0InKTtcclxudmFyIFJHQlRvSFNWID0gcmVxdWlyZSgnLi9SR0JUb0hTVicpO1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkRpc3BsYXkuQ29sb3JcclxuICovXHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgQ29sb3IgY2xhc3MgaG9sZHMgYSBzaW5nbGUgY29sb3IgdmFsdWUgYW5kIGFsbG93cyBmb3IgZWFzeSBtb2RpZmljYXRpb24gYW5kIHJlYWRpbmcgb2YgaXQuXHJcbiAqXHJcbiAqIEBjbGFzcyBDb2xvclxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkRpc3BsYXlcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtyZWQ9MF0gLSBUaGUgcmVkIGNvbG9yIHZhbHVlLiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbZ3JlZW49MF0gLSBUaGUgZ3JlZW4gY29sb3IgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtibHVlPTBdIC0gVGhlIGJsdWUgY29sb3IgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFthbHBoYT0yNTVdIC0gVGhlIGFscGhhIHZhbHVlLiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICovXHJcbnZhciBDb2xvciA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBDb2xvciAocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHJlZCA9PT0gdW5kZWZpbmVkKSB7IHJlZCA9IDA7IH1cclxuICAgICAgICBpZiAoZ3JlZW4gPT09IHVuZGVmaW5lZCkgeyBncmVlbiA9IDA7IH1cclxuICAgICAgICBpZiAoYmx1ZSA9PT0gdW5kZWZpbmVkKSB7IGJsdWUgPSAwOyB9XHJcbiAgICAgICAgaWYgKGFscGhhID09PSB1bmRlZmluZWQpIHsgYWxwaGEgPSAyNTU7IH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGludGVybmFsIHJlZCBjb2xvciB2YWx1ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5LkNvbG9yI3JcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuciA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBpbnRlcm5hbCBncmVlbiBjb2xvciB2YWx1ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5LkNvbG9yI2dcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZyA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBpbnRlcm5hbCBibHVlIGNvbG9yIHZhbHVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3IjYlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5iID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGludGVybmFsIGFscGhhIGNvbG9yIHZhbHVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3IjYVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAyNTVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmEgPSAyNTU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBodWUgY29sb3IgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAgICAgKiBUaGlzIGlzIHRoZSBiYXNlIGNvbG9yLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3IjX2hcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9oID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHNhdHVyYXRpb24gY29sb3IgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAgICAgKiBUaGlzIGNvbnRyb2xzIGhvdyBtdWNoIG9mIHRoZSBodWUgd2lsbCBiZSBpbiB0aGUgZmluYWwgY29sb3IsIHdoZXJlIDEgaXMgZnVsbHkgc2F0dXJhdGVkIGFuZCAwIHdpbGwgZ2l2ZSB5b3Ugd2hpdGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5Db2xvciNfc1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3MgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbGlnaHRuZXNzIGNvbG9yIHZhbHVlLiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAgICAgICAgICogVGhpcyBjb250cm9scyBob3cgZGFyayB0aGUgY29sb3IgaXMuIFdoZXJlIDEgaXMgYXMgYnJpZ2h0IGFzIHBvc3NpYmxlIGFuZCAwIGlzIGJsYWNrLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3IjX3ZcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl92ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXMgdGhpcyBjb2xvciB1cGRhdGUgbG9ja2VkP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3IjX2xvY2tlZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2xvY2tlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjYWxjdWxhdGVkIGNvbG9yIHZhbHVlcyBmb3IgV2ViR0wgdXNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3IjZ2xcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyW119XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nbCA9IFsgMCwgMCwgMCwgMSBdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQcmUtY2FsY3VsYXRlZCBpbnRlcm5hbCBjb2xvciB2YWx1ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5LkNvbG9yI19jb2xvclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fY29sb3IgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQcmUtY2FsY3VsYXRlZCBpbnRlcm5hbCBjb2xvcjMyIHZhbHVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3IjX2NvbG9yMzJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2NvbG9yMzIgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQcmUtY2FsY3VsYXRlZCBpbnRlcm5hbCBjb2xvciByZ2Igc3RyaW5nIHZhbHVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3IjX3JnYmFcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgJydcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9yZ2JhID0gJyc7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG8ocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhpcyBjb2xvciB0byBiZSB0cmFuc3BhcmVudC4gU2V0cyBhbGwgdmFsdWVzIHRvIHplcm8uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5Db2xvciN0cmFuc3BhcmVudFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkRpc3BsYXkuQ29sb3J9IFRoaXMgQ29sb3Igb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICB0cmFuc3BhcmVudDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9sb2NrZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnJlZCA9IDA7XHJcbiAgICAgICAgdGhpcy5ncmVlbiA9IDA7XHJcbiAgICAgICAgdGhpcy5ibHVlID0gMDtcclxuICAgICAgICB0aGlzLmFscGhhID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5fbG9ja2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBjb2xvciBvZiB0aGlzIENvbG9yIGNvbXBvbmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5EaXNwbGF5LkNvbG9yI3NldFRvXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHJlZCAtIFRoZSByZWQgY29sb3IgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBncmVlbiAtIFRoZSBncmVlbiBjb2xvciB2YWx1ZS4gQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGJsdWUgLSBUaGUgYmx1ZSBjb2xvciB2YWx1ZS4gQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFthbHBoYT0yNTVdIC0gVGhlIGFscGhhIHZhbHVlLiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3VwZGF0ZUhTVj10cnVlXSAtIFVwZGF0ZSB0aGUgSFNWIHZhbHVlcyBhZnRlciBzZXR0aW5nIHRoZSBSR0IgdmFsdWVzP1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5EaXNwbGF5LkNvbG9yfSBUaGlzIENvbG9yIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0VG86IGZ1bmN0aW9uIChyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSwgdXBkYXRlSFNWKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChhbHBoYSA9PT0gdW5kZWZpbmVkKSB7IGFscGhhID0gMjU1OyB9XHJcbiAgICAgICAgaWYgKHVwZGF0ZUhTViA9PT0gdW5kZWZpbmVkKSB7IHVwZGF0ZUhTViA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdGhpcy5fbG9ja2VkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5yZWQgPSByZWQ7XHJcbiAgICAgICAgdGhpcy5ncmVlbiA9IGdyZWVuO1xyXG4gICAgICAgIHRoaXMuYmx1ZSA9IGJsdWU7XHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IGFscGhhO1xyXG5cclxuICAgICAgICB0aGlzLl9sb2NrZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKHVwZGF0ZUhTVik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcmVkLCBncmVlbiwgYmx1ZSBhbmQgYWxwaGEgR0wgdmFsdWVzIG9mIHRoaXMgQ29sb3IgY29tcG9uZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRpc3BsYXkuQ29sb3Ijc2V0R0xUb1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJlZCAtIFRoZSByZWQgY29sb3IgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBncmVlbiAtIFRoZSBncmVlbiBjb2xvciB2YWx1ZS4gQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJsdWUgLSBUaGUgYmx1ZSBjb2xvciB2YWx1ZS4gQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthbHBoYT0xXSAtIFRoZSBhbHBoYSB2YWx1ZS4gQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5EaXNwbGF5LkNvbG9yfSBUaGlzIENvbG9yIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0R0xUbzogZnVuY3Rpb24gKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChhbHBoYSA9PT0gdW5kZWZpbmVkKSB7IGFscGhhID0gMTsgfVxyXG5cclxuICAgICAgICB0aGlzLl9sb2NrZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnJlZEdMID0gcmVkO1xyXG4gICAgICAgIHRoaXMuZ3JlZW5HTCA9IGdyZWVuO1xyXG4gICAgICAgIHRoaXMuYmx1ZUdMID0gYmx1ZTtcclxuICAgICAgICB0aGlzLmFscGhhR0wgPSBhbHBoYTtcclxuXHJcbiAgICAgICAgdGhpcy5fbG9ja2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBjb2xvciBiYXNlZCBvbiB0aGUgY29sb3Igb2JqZWN0IGdpdmVuLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRpc3BsYXkuQ29sb3Ijc2V0RnJvbVJHQlxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuRGlzcGxheS5JbnB1dENvbG9yT2JqZWN0fSBjb2xvciAtIEFuIG9iamVjdCBjb250YWluaW5nIGByYCwgYGdgLCBgYmAgYW5kIG9wdGlvbmFsbHkgYGFgIHZhbHVlcyBpbiB0aGUgcmFuZ2UgMCB0byAyNTUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkRpc3BsYXkuQ29sb3J9IFRoaXMgQ29sb3Igb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRGcm9tUkdCOiBmdW5jdGlvbiAoY29sb3IpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fbG9ja2VkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5yZWQgPSBjb2xvci5yO1xyXG4gICAgICAgIHRoaXMuZ3JlZW4gPSBjb2xvci5nO1xyXG4gICAgICAgIHRoaXMuYmx1ZSA9IGNvbG9yLmI7XHJcblxyXG4gICAgICAgIGlmIChjb2xvci5oYXNPd25Qcm9wZXJ0eSgnYScpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5hbHBoYSA9IGNvbG9yLmE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9sb2NrZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGNvbG9yIGJhc2VkIG9uIHRoZSBodWUsIHNhdHVyYXRpb24gYW5kIGxpZ2h0bmVzcyB2YWx1ZXMgZ2l2ZW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5Db2xvciNzZXRGcm9tSFNWXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGggLSBUaGUgaHVlLCBpbiB0aGUgcmFuZ2UgMCAtIDEuIFRoaXMgaXMgdGhlIGJhc2UgY29sb3IuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcyAtIFRoZSBzYXR1cmF0aW9uLCBpbiB0aGUgcmFuZ2UgMCAtIDEuIFRoaXMgY29udHJvbHMgaG93IG11Y2ggb2YgdGhlIGh1ZSB3aWxsIGJlIGluIHRoZSBmaW5hbCBjb2xvciwgd2hlcmUgMSBpcyBmdWxseSBzYXR1cmF0ZWQgYW5kIDAgd2lsbCBnaXZlIHlvdSB3aGl0ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2IC0gVGhlIHZhbHVlLCBpbiB0aGUgcmFuZ2UgMCAtIDEuIFRoaXMgY29udHJvbHMgaG93IGRhcmsgdGhlIGNvbG9yIGlzLiBXaGVyZSAxIGlzIGFzIGJyaWdodCBhcyBwb3NzaWJsZSBhbmQgMCBpcyBibGFjay5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuRGlzcGxheS5Db2xvcn0gVGhpcyBDb2xvciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEZyb21IU1Y6IGZ1bmN0aW9uIChoLCBzLCB2KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBIU1ZUb1JHQihoLCBzLCB2LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBjYWNoZSB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5Db2xvciN1cGRhdGVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuRGlzcGxheS5Db2xvcn0gVGhpcyBDb2xvciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKHVwZGF0ZUhTVilcclxuICAgIHtcclxuICAgICAgICBpZiAodXBkYXRlSFNWID09PSB1bmRlZmluZWQpIHsgdXBkYXRlSFNWID0gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2xvY2tlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHIgPSB0aGlzLnI7XHJcbiAgICAgICAgdmFyIGcgPSB0aGlzLmc7XHJcbiAgICAgICAgdmFyIGIgPSB0aGlzLmI7XHJcbiAgICAgICAgdmFyIGEgPSB0aGlzLmE7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbG9yID0gR2V0Q29sb3IociwgZywgYik7XHJcbiAgICAgICAgdGhpcy5fY29sb3IzMiA9IEdldENvbG9yMzIociwgZywgYiwgYSk7XHJcbiAgICAgICAgdGhpcy5fcmdiYSA9ICdyZ2JhKCcgKyByICsgJywnICsgZyArICcsJyArIGIgKyAnLCcgKyAoYSAvIDI1NSkgKyAnKSc7XHJcblxyXG4gICAgICAgIGlmICh1cGRhdGVIU1YpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBSR0JUb0hTVihyLCBnLCBiLCB0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIGludGVybmFsIGhzdiBjYWNoZSB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5Db2xvciN1cGRhdGVIU1ZcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkRpc3BsYXkuQ29sb3J9IFRoaXMgQ29sb3Igb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVIU1Y6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHIgPSB0aGlzLnI7XHJcbiAgICAgICAgdmFyIGcgPSB0aGlzLmc7XHJcbiAgICAgICAgdmFyIGIgPSB0aGlzLmI7XHJcblxyXG4gICAgICAgIFJHQlRvSFNWKHIsIGcsIGIsIHRoaXMpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgbmV3IENvbG9yIGNvbXBvbmVudCB1c2luZyB0aGUgdmFsdWVzIGZyb20gdGhpcyBvbmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5Db2xvciNjbG9uZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkRpc3BsYXkuQ29sb3J9IEEgbmV3IENvbG9yIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvcih0aGlzLnIsIHRoaXMuZywgdGhpcy5iLCB0aGlzLmEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhpcyBDb2xvciBvYmplY3QgdG8gYmUgZ3JheXNjYWxlZCBiYXNlZCBvbiB0aGUgc2hhZGUgdmFsdWUgZ2l2ZW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5Db2xvciNncmF5XHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gc2hhZGUgLSBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5EaXNwbGF5LkNvbG9yfSBUaGlzIENvbG9yIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ3JheTogZnVuY3Rpb24gKHNoYWRlKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldFRvKHNoYWRlLCBzaGFkZSwgc2hhZGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhpcyBDb2xvciBvYmplY3QgdG8gYmUgYSByYW5kb20gY29sb3IgYmV0d2VlbiB0aGUgYG1pbmAgYW5kIGBtYXhgIHZhbHVlcyBnaXZlbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5EaXNwbGF5LkNvbG9yI3JhbmRvbVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFttaW49MF0gLSBUaGUgbWluaW11bSByYW5kb20gY29sb3IgdmFsdWUuIEJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbbWF4PTI1NV0gLSBUaGUgbWF4aW11bSByYW5kb20gY29sb3IgdmFsdWUuIEJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5EaXNwbGF5LkNvbG9yfSBUaGlzIENvbG9yIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcmFuZG9tOiBmdW5jdGlvbiAobWluLCBtYXgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG1pbiA9PT0gdW5kZWZpbmVkKSB7IG1pbiA9IDA7IH1cclxuICAgICAgICBpZiAobWF4ID09PSB1bmRlZmluZWQpIHsgbWF4ID0gMjU1OyB9XHJcblxyXG4gICAgICAgIHZhciByID0gTWF0aC5mbG9vcihtaW4gKyBNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpO1xyXG4gICAgICAgIHZhciBnID0gTWF0aC5mbG9vcihtaW4gKyBNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpO1xyXG4gICAgICAgIHZhciBiID0gTWF0aC5mbG9vcihtaW4gKyBNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRUbyhyLCBnLCBiKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoaXMgQ29sb3Igb2JqZWN0IHRvIGJlIGEgcmFuZG9tIGdyYXlzY2FsZSBjb2xvciBiZXR3ZWVuIHRoZSBgbWluYCBhbmQgYG1heGAgdmFsdWVzIGdpdmVuLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRpc3BsYXkuQ29sb3IjcmFuZG9tR3JheVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFttaW49MF0gLSBUaGUgbWluaW11bSByYW5kb20gY29sb3IgdmFsdWUuIEJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbbWF4PTI1NV0gLSBUaGUgbWF4aW11bSByYW5kb20gY29sb3IgdmFsdWUuIEJldHdlZW4gMCBhbmQgMjU1LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5EaXNwbGF5LkNvbG9yfSBUaGlzIENvbG9yIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcmFuZG9tR3JheTogZnVuY3Rpb24gKG1pbiwgbWF4KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChtaW4gPT09IHVuZGVmaW5lZCkgeyBtaW4gPSAwOyB9XHJcbiAgICAgICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkKSB7IG1heCA9IDI1NTsgfVxyXG5cclxuICAgICAgICB2YXIgcyA9IE1hdGguZmxvb3IobWluICsgTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0VG8ocywgcywgcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5jcmVhc2UgdGhlIHNhdHVyYXRpb24gb2YgdGhpcyBDb2xvciBieSB0aGUgcGVyY2VudGFnZSBhbW91bnQgZ2l2ZW4uXHJcbiAgICAgKiBUaGUgc2F0dXJhdGlvbiBpcyB0aGUgYW1vdW50IG9mIHRoZSBiYXNlIGNvbG9yIGluIHRoZSBodWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5Db2xvciNzYXR1cmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGFtb3VudCAtIFRoZSBwZXJjZW50YWdlIGFtb3VudCB0byBjaGFuZ2UgdGhpcyBjb2xvciBieS4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEwMC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuRGlzcGxheS5Db2xvcn0gVGhpcyBDb2xvciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNhdHVyYXRlOiBmdW5jdGlvbiAoYW1vdW50KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucyArPSBhbW91bnQgLyAxMDA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlY3JlYXNlIHRoZSBzYXR1cmF0aW9uIG9mIHRoaXMgQ29sb3IgYnkgdGhlIHBlcmNlbnRhZ2UgYW1vdW50IGdpdmVuLlxyXG4gICAgICogVGhlIHNhdHVyYXRpb24gaXMgdGhlIGFtb3VudCBvZiB0aGUgYmFzZSBjb2xvciBpbiB0aGUgaHVlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRpc3BsYXkuQ29sb3IjZGVzYXR1cmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGFtb3VudCAtIFRoZSBwZXJjZW50YWdlIGFtb3VudCB0byBjaGFuZ2UgdGhpcyBjb2xvciBieS4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEwMC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuRGlzcGxheS5Db2xvcn0gVGhpcyBDb2xvciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGRlc2F0dXJhdGU6IGZ1bmN0aW9uIChhbW91bnQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zIC09IGFtb3VudCAvIDEwMDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5jcmVhc2UgdGhlIGxpZ2h0bmVzcyBvZiB0aGlzIENvbG9yIGJ5IHRoZSBwZXJjZW50YWdlIGFtb3VudCBnaXZlbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5EaXNwbGF5LkNvbG9yI2xpZ2h0ZW5cclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBhbW91bnQgLSBUaGUgcGVyY2VudGFnZSBhbW91bnQgdG8gY2hhbmdlIHRoaXMgY29sb3IgYnkuIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxMDAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkRpc3BsYXkuQ29sb3J9IFRoaXMgQ29sb3Igb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBsaWdodGVuOiBmdW5jdGlvbiAoYW1vdW50KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMudiArPSBhbW91bnQgLyAxMDA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlY3JlYXNlIHRoZSBsaWdodG5lc3Mgb2YgdGhpcyBDb2xvciBieSB0aGUgcGVyY2VudGFnZSBhbW91bnQgZ2l2ZW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5Db2xvciNkYXJrZW5cclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBhbW91bnQgLSBUaGUgcGVyY2VudGFnZSBhbW91bnQgdG8gY2hhbmdlIHRoaXMgY29sb3IgYnkuIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxMDAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkRpc3BsYXkuQ29sb3J9IFRoaXMgQ29sb3Igb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBkYXJrZW46IGZ1bmN0aW9uIChhbW91bnQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy52IC09IGFtb3VudCAvIDEwMDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQnJpZ2h0ZW4gdGhpcyBDb2xvciBieSB0aGUgcGVyY2VudGFnZSBhbW91bnQgZ2l2ZW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5Db2xvciNicmlnaHRlblxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGFtb3VudCAtIFRoZSBwZXJjZW50YWdlIGFtb3VudCB0byBjaGFuZ2UgdGhpcyBjb2xvciBieS4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEwMC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuRGlzcGxheS5Db2xvcn0gVGhpcyBDb2xvciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGJyaWdodGVuOiBmdW5jdGlvbiAoYW1vdW50KVxyXG4gICAge1xyXG4gICAgICAgIHZhciByID0gdGhpcy5yO1xyXG4gICAgICAgIHZhciBnID0gdGhpcy5nO1xyXG4gICAgICAgIHZhciBiID0gdGhpcy5iO1xyXG5cclxuICAgICAgICByID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCByIC0gTWF0aC5yb3VuZCgyNTUgKiAtIChhbW91bnQgLyAxMDApKSkpO1xyXG4gICAgICAgIGcgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIGcgLSBNYXRoLnJvdW5kKDI1NSAqIC0gKGFtb3VudCAvIDEwMCkpKSk7XHJcbiAgICAgICAgYiA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgYiAtIE1hdGgucm91bmQoMjU1ICogLSAoYW1vdW50IC8gMTAwKSkpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0VG8ociwgZywgYik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNvbG9yIG9mIHRoaXMgQ29sb3IgY29tcG9uZW50LCBub3QgaW5jbHVkaW5nIHRoZSBhbHBoYSBjaGFubmVsLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5LkNvbG9yI2NvbG9yXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgY29sb3I6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbG9yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNvbG9yIG9mIHRoaXMgQ29sb3IgY29tcG9uZW50LCBpbmNsdWRpbmcgdGhlIGFscGhhIGNoYW5uZWwuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3IjY29sb3IzMlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGNvbG9yMzI6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbG9yMzI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY29sb3Igb2YgdGhpcyBDb2xvciBjb21wb25lbnQgYXMgYSBzdHJpbmcgd2hpY2ggY2FuIGJlIHVzZWQgaW4gQ1NTIGNvbG9yIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5Db2xvciNyZ2JhXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgcmdiYToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmdiYTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSByZWQgY29sb3IgdmFsdWUsIG5vcm1hbGl6ZWQgdG8gdGhlIHJhbmdlIDAgdG8gMS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5Db2xvciNyZWRHTFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICByZWRHTDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nbFswXTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2xbMF0gPSBNYXRoLm1pbihNYXRoLmFicyh2YWx1ZSksIDEpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yID0gTWF0aC5mbG9vcih0aGlzLmdsWzBdICogMjU1KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGdyZWVuIGNvbG9yIHZhbHVlLCBub3JtYWxpemVkIHRvIHRoZSByYW5nZSAwIHRvIDEuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3IjZ3JlZW5HTFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBncmVlbkdMOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdsWzFdO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5nbFsxXSA9IE1hdGgubWluKE1hdGguYWJzKHZhbHVlKSwgMSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmcgPSBNYXRoLmZsb29yKHRoaXMuZ2xbMV0gKiAyNTUpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYmx1ZSBjb2xvciB2YWx1ZSwgbm9ybWFsaXplZCB0byB0aGUgcmFuZ2UgMCB0byAxLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5LkNvbG9yI2JsdWVHTFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBibHVlR0w6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2xbMl07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmdsWzJdID0gTWF0aC5taW4oTWF0aC5hYnModmFsdWUpLCAxKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYiA9IE1hdGguZmxvb3IodGhpcy5nbFsyXSAqIDI1NSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBhbHBoYSBjb2xvciB2YWx1ZSwgbm9ybWFsaXplZCB0byB0aGUgcmFuZ2UgMCB0byAxLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5LkNvbG9yI2FscGhhR0xcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgYWxwaGFHTDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nbFszXTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2xbM10gPSBNYXRoLm1pbihNYXRoLmFicyh2YWx1ZSksIDEpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hID0gTWF0aC5mbG9vcih0aGlzLmdsWzNdICogMjU1KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcmVkIGNvbG9yIHZhbHVlLCBub3JtYWxpemVkIHRvIHRoZSByYW5nZSAwIHRvIDI1NS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5Db2xvciNyZWRcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgcmVkOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnI7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IE1hdGguZmxvb3IoTWF0aC5hYnModmFsdWUpKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuciA9IE1hdGgubWluKHZhbHVlLCAyNTUpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nbFswXSA9IHZhbHVlIC8gMjU1O1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZ3JlZW4gY29sb3IgdmFsdWUsIG5vcm1hbGl6ZWQgdG8gdGhlIHJhbmdlIDAgdG8gMjU1LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5LkNvbG9yI2dyZWVuXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGdyZWVuOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmc7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IE1hdGguZmxvb3IoTWF0aC5hYnModmFsdWUpKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZyA9IE1hdGgubWluKHZhbHVlLCAyNTUpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nbFsxXSA9IHZhbHVlIC8gMjU1O1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYmx1ZSBjb2xvciB2YWx1ZSwgbm9ybWFsaXplZCB0byB0aGUgcmFuZ2UgMCB0byAyNTUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3IjYmx1ZVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBibHVlOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmI7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IE1hdGguZmxvb3IoTWF0aC5hYnModmFsdWUpKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYiA9IE1hdGgubWluKHZhbHVlLCAyNTUpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nbFsyXSA9IHZhbHVlIC8gMjU1O1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYWxwaGEgY29sb3IgdmFsdWUsIG5vcm1hbGl6ZWQgdG8gdGhlIHJhbmdlIDAgdG8gMjU1LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5LkNvbG9yI2FscGhhXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGFscGhhOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmE7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IE1hdGguZmxvb3IoTWF0aC5hYnModmFsdWUpKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYSA9IE1hdGgubWluKHZhbHVlLCAyNTUpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nbFszXSA9IHZhbHVlIC8gMjU1O1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBodWUgY29sb3IgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqIFRoaXMgaXMgdGhlIGJhc2UgY29sb3IuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3IjaFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqL1xyXG4gICAgaDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2ggPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIEhTVlRvUkdCKHZhbHVlLCB0aGlzLl9zLCB0aGlzLl92LCB0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzYXR1cmF0aW9uIGNvbG9yIHZhbHVlLiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAgICAgKiBUaGlzIGNvbnRyb2xzIGhvdyBtdWNoIG9mIHRoZSBodWUgd2lsbCBiZSBpbiB0aGUgZmluYWwgY29sb3IsIHdoZXJlIDEgaXMgZnVsbHkgc2F0dXJhdGVkIGFuZCAwIHdpbGwgZ2l2ZSB5b3Ugd2hpdGUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQ29sb3Ijc1xyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqL1xyXG4gICAgczoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3MgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIEhTVlRvUkdCKHRoaXMuX2gsIHZhbHVlLCB0aGlzLl92LCB0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBsaWdodG5lc3MgY29sb3IgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqIFRoaXMgY29udHJvbHMgaG93IGRhcmsgdGhlIGNvbG9yIGlzLiBXaGVyZSAxIGlzIGFzIGJyaWdodCBhcyBwb3NzaWJsZSBhbmQgMCBpcyBibGFjay5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5Db2xvciN2XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICovXHJcbiAgICB2OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fdiA9IHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgSFNWVG9SR0IodGhpcy5faCwgdGhpcy5fcywgdmFsdWUsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ29sb3I7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/Color.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/color/ColorToRGBA.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/display/color/ColorToRGBA.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Converts the given color value into an Object containing r,g,b and a properties.\r\n *\r\n * @function Phaser.Display.Color.ColorToRGBA\r\n * @since 3.0.0\r\n *\r\n * @param {number} color - A color value, optionally including the alpha value.\r\n *\r\n * @return {Phaser.Types.Display.ColorObject} An object containing the parsed color values.\r\n */\r\nvar ColorToRGBA = function (color)\r\n{\r\n var output = {\r\n r: color >> 16 & 0xFF,\r\n g: color >> 8 & 0xFF,\r\n b: color & 0xFF,\r\n a: 255\r\n };\r\n\r\n if (color > 16777215)\r\n {\r\n output.a = color >>> 24;\r\n }\r\n\r\n return output;\r\n};\r\n\r\nmodule.exports = ColorToRGBA;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0NvbG9yVG9SR0JBLmpzP2RmMmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksaUNBQWlDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9jb2xvci9Db2xvclRvUkdCQS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIHRoZSBnaXZlbiBjb2xvciB2YWx1ZSBpbnRvIGFuIE9iamVjdCBjb250YWluaW5nIHIsZyxiIGFuZCBhIHByb3BlcnRpZXMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5Db2xvci5Db2xvclRvUkdCQVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IGNvbG9yIC0gQSBjb2xvciB2YWx1ZSwgb3B0aW9uYWxseSBpbmNsdWRpbmcgdGhlIGFscGhhIHZhbHVlLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuRGlzcGxheS5Db2xvck9iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHBhcnNlZCBjb2xvciB2YWx1ZXMuXHJcbiAqL1xyXG52YXIgQ29sb3JUb1JHQkEgPSBmdW5jdGlvbiAoY29sb3IpXHJcbntcclxuICAgIHZhciBvdXRwdXQgPSB7XHJcbiAgICAgICAgcjogY29sb3IgPj4gMTYgJiAweEZGLFxyXG4gICAgICAgIGc6IGNvbG9yID4+IDggJiAweEZGLFxyXG4gICAgICAgIGI6IGNvbG9yICYgMHhGRixcclxuICAgICAgICBhOiAyNTVcclxuICAgIH07XHJcblxyXG4gICAgaWYgKGNvbG9yID4gMTY3NzcyMTUpXHJcbiAgICB7XHJcbiAgICAgICAgb3V0cHV0LmEgPSBjb2xvciA+Pj4gMjQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dHB1dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JUb1JHQkE7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/ColorToRGBA.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/color/ComponentToHex.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/display/color/ComponentToHex.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns a string containing a hex representation of the given color component.\r\n *\r\n * @function Phaser.Display.Color.ComponentToHex\r\n * @since 3.0.0\r\n *\r\n * @param {integer} color - The color channel to get the hex value for, must be a value between 0 and 255.\r\n *\r\n * @return {string} A string of length 2 characters, i.e. 255 = ff, 100 = 64.\r\n */\r\nvar ComponentToHex = function (color)\r\n{\r\n var hex = color.toString(16);\r\n\r\n return (hex.length === 1) ? '0' + hex : hex;\r\n};\r\n\r\nmodule.exports = ComponentToHex;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0NvbXBvbmVudFRvSGV4LmpzP2FmZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9jb2xvci9Db21wb25lbnRUb0hleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyBhIGhleCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gY29sb3IgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQ29sb3IuQ29tcG9uZW50VG9IZXhcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gY29sb3IgLSBUaGUgY29sb3IgY2hhbm5lbCB0byBnZXQgdGhlIGhleCB2YWx1ZSBmb3IsIG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICpcclxuICogQHJldHVybiB7c3RyaW5nfSBBIHN0cmluZyBvZiBsZW5ndGggMiBjaGFyYWN0ZXJzLCBpLmUuIDI1NSA9IGZmLCAxMDAgPSA2NC5cclxuICovXHJcbnZhciBDb21wb25lbnRUb0hleCA9IGZ1bmN0aW9uIChjb2xvcilcclxue1xyXG4gICAgdmFyIGhleCA9IGNvbG9yLnRvU3RyaW5nKDE2KTtcclxuXHJcbiAgICByZXR1cm4gKGhleC5sZW5ndGggPT09IDEpID8gJzAnICsgaGV4IDogaGV4O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnRUb0hleDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/ComponentToHex.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/color/GetColor.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/display/color/GetColor.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Given 3 separate color values this will return an integer representation of it.\r\n *\r\n * @function Phaser.Display.Color.GetColor\r\n * @since 3.0.0\r\n *\r\n * @param {integer} red - The red color value. A number between 0 and 255.\r\n * @param {integer} green - The green color value. A number between 0 and 255.\r\n * @param {integer} blue - The blue color value. A number between 0 and 255.\r\n *\r\n * @return {number} The combined color value.\r\n */\r\nvar GetColor = function (red, green, blue)\r\n{\r\n return red << 16 | green << 8 | blue;\r\n};\r\n\r\nmodule.exports = GetColor;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0dldENvbG9yLmpzPzE2N2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0dldENvbG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogR2l2ZW4gMyBzZXBhcmF0ZSBjb2xvciB2YWx1ZXMgdGhpcyB3aWxsIHJldHVybiBhbiBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uIG9mIGl0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQ29sb3IuR2V0Q29sb3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gcmVkIC0gVGhlIHJlZCBjb2xvciB2YWx1ZS4gQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gZ3JlZW4gLSBUaGUgZ3JlZW4gY29sb3IgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGJsdWUgLSBUaGUgYmx1ZSBjb2xvciB2YWx1ZS4gQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGNvbWJpbmVkIGNvbG9yIHZhbHVlLlxyXG4gKi9cclxudmFyIEdldENvbG9yID0gZnVuY3Rpb24gKHJlZCwgZ3JlZW4sIGJsdWUpXHJcbntcclxuICAgIHJldHVybiByZWQgPDwgMTYgfCBncmVlbiA8PCA4IHwgYmx1ZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0Q29sb3I7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/GetColor.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/color/GetColor32.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/display/color/GetColor32.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Given an alpha and 3 color values this will return an integer representation of it.\r\n *\r\n * @function Phaser.Display.Color.GetColor32\r\n * @since 3.0.0\r\n *\r\n * @param {integer} red - The red color value. A number between 0 and 255.\r\n * @param {integer} green - The green color value. A number between 0 and 255.\r\n * @param {integer} blue - The blue color value. A number between 0 and 255.\r\n * @param {integer} alpha - The alpha color value. A number between 0 and 255.\r\n *\r\n * @return {number} The combined color value.\r\n */\r\nvar GetColor32 = function (red, green, blue, alpha)\r\n{\r\n return alpha << 24 | red << 16 | green << 8 | blue;\r\n};\r\n\r\nmodule.exports = GetColor32;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0dldENvbG9yMzIuanM/NTk0ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0dldENvbG9yMzIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBHaXZlbiBhbiBhbHBoYSBhbmQgMyBjb2xvciB2YWx1ZXMgdGhpcyB3aWxsIHJldHVybiBhbiBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uIG9mIGl0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQ29sb3IuR2V0Q29sb3IzMlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtpbnRlZ2VyfSByZWQgLSBUaGUgcmVkIGNvbG9yIHZhbHVlLiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBncmVlbiAtIFRoZSBncmVlbiBjb2xvciB2YWx1ZS4gQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gYmx1ZSAtIFRoZSBibHVlIGNvbG9yIHZhbHVlLiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBhbHBoYSAtIFRoZSBhbHBoYSBjb2xvciB2YWx1ZS4gQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGNvbWJpbmVkIGNvbG9yIHZhbHVlLlxyXG4gKi9cclxudmFyIEdldENvbG9yMzIgPSBmdW5jdGlvbiAocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpXHJcbntcclxuICAgIHJldHVybiBhbHBoYSA8PCAyNCB8IHJlZCA8PCAxNiB8IGdyZWVuIDw8IDggfCBibHVlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRDb2xvcjMyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/GetColor32.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/color/HSLToColor.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/display/color/HSLToColor.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Color = __webpack_require__(/*! ./Color */ \"./node_modules/phaser/src/display/color/Color.js\");\r\nvar HueToComponent = __webpack_require__(/*! ./HueToComponent */ \"./node_modules/phaser/src/display/color/HueToComponent.js\");\r\n\r\n/**\r\n * Converts HSL (hue, saturation and lightness) values to a Phaser Color object.\r\n *\r\n * @function Phaser.Display.Color.HSLToColor\r\n * @since 3.0.0\r\n *\r\n * @param {number} h - The hue value in the range 0 to 1.\r\n * @param {number} s - The saturation value in the range 0 to 1.\r\n * @param {number} l - The lightness value in the range 0 to 1.\r\n *\r\n * @return {Phaser.Display.Color} A Color object created from the results of the h, s and l values.\r\n */\r\nvar HSLToColor = function (h, s, l)\r\n{\r\n // achromatic by default\r\n var r = l;\r\n var g = l;\r\n var b = l;\r\n\r\n if (s !== 0)\r\n {\r\n var q = (l < 0.5) ? l * (1 + s) : l + s - l * s;\r\n var p = 2 * l - q;\r\n\r\n r = HueToComponent(p, q, h + 1 / 3);\r\n g = HueToComponent(p, q, h);\r\n b = HueToComponent(p, q, h - 1 / 3);\r\n }\r\n\r\n var color = new Color();\r\n\r\n return color.setGLTo(r, g, b, 1);\r\n};\r\n\r\nmodule.exports = HSLToColor;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0hTTFRvQ29sb3IuanM/NmM1YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGlFQUFTO0FBQzdCLHFCQUFxQixtQkFBTyxDQUFDLG1GQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHFCQUFxQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9jb2xvci9IU0xUb0NvbG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ29sb3IgPSByZXF1aXJlKCcuL0NvbG9yJyk7XHJcbnZhciBIdWVUb0NvbXBvbmVudCA9IHJlcXVpcmUoJy4vSHVlVG9Db21wb25lbnQnKTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyBIU0wgKGh1ZSwgc2F0dXJhdGlvbiBhbmQgbGlnaHRuZXNzKSB2YWx1ZXMgdG8gYSBQaGFzZXIgQ29sb3Igb2JqZWN0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQ29sb3IuSFNMVG9Db2xvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IGggLSBUaGUgaHVlIHZhbHVlIGluIHRoZSByYW5nZSAwIHRvIDEuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzIC0gVGhlIHNhdHVyYXRpb24gdmFsdWUgaW4gdGhlIHJhbmdlIDAgdG8gMS5cclxuICogQHBhcmFtIHtudW1iZXJ9IGwgLSBUaGUgbGlnaHRuZXNzIHZhbHVlIGluIHRoZSByYW5nZSAwIHRvIDEuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5EaXNwbGF5LkNvbG9yfSBBIENvbG9yIG9iamVjdCBjcmVhdGVkIGZyb20gdGhlIHJlc3VsdHMgb2YgdGhlIGgsIHMgYW5kIGwgdmFsdWVzLlxyXG4gKi9cclxudmFyIEhTTFRvQ29sb3IgPSBmdW5jdGlvbiAoaCwgcywgbClcclxue1xyXG4gICAgLy8gYWNocm9tYXRpYyBieSBkZWZhdWx0XHJcbiAgICB2YXIgciA9IGw7XHJcbiAgICB2YXIgZyA9IGw7XHJcbiAgICB2YXIgYiA9IGw7XHJcblxyXG4gICAgaWYgKHMgIT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHEgPSAobCA8IDAuNSkgPyBsICogKDEgKyBzKSA6IGwgKyBzIC0gbCAqIHM7XHJcbiAgICAgICAgdmFyIHAgPSAyICogbCAtIHE7XHJcblxyXG4gICAgICAgIHIgPSBIdWVUb0NvbXBvbmVudChwLCBxLCBoICsgMSAvIDMpO1xyXG4gICAgICAgIGcgPSBIdWVUb0NvbXBvbmVudChwLCBxLCBoKTtcclxuICAgICAgICBiID0gSHVlVG9Db21wb25lbnQocCwgcSwgaCAtIDEgLyAzKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgY29sb3IgPSBuZXcgQ29sb3IoKTtcclxuXHJcbiAgICByZXR1cm4gY29sb3Iuc2V0R0xUbyhyLCBnLCBiLCAxKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSFNMVG9Db2xvcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/HSLToColor.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/color/HSVColorWheel.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/display/color/HSVColorWheel.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar HSVToRGB = __webpack_require__(/*! ./HSVToRGB */ \"./node_modules/phaser/src/display/color/HSVToRGB.js\");\r\n\r\n/**\r\n * Get HSV color wheel values in an array which will be 360 elements in size.\r\n *\r\n * @function Phaser.Display.Color.HSVColorWheel\r\n * @since 3.0.0\r\n *\r\n * @param {number} [s=1] - The saturation, in the range 0 - 1.\r\n * @param {number} [v=1] - The value, in the range 0 - 1.\r\n *\r\n * @return {Phaser.Types.Display.ColorObject[]} An array containing 360 elements, where each contains a single numeric value corresponding to the color at that point in the HSV color wheel.\r\n */\r\nvar HSVColorWheel = function (s, v)\r\n{\r\n if (s === undefined) { s = 1; }\r\n if (v === undefined) { v = 1; }\r\n\r\n var colors = [];\r\n\r\n for (var c = 0; c <= 359; c++)\r\n {\r\n colors.push(HSVToRGB(c / 359, s, v));\r\n }\r\n\r\n return colors;\r\n};\r\n\r\nmodule.exports = HSVColorWheel;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0hTVkNvbG9yV2hlZWwuanM/ZjY0ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLHVFQUFZOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxtQ0FBbUM7QUFDL0M7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLE9BQU87QUFDakMsMEJBQTBCLE9BQU87O0FBRWpDOztBQUVBLG1CQUFtQixVQUFVO0FBQzdCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9jb2xvci9IU1ZDb2xvcldoZWVsLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgSFNWVG9SR0IgPSByZXF1aXJlKCcuL0hTVlRvUkdCJyk7XHJcblxyXG4vKipcclxuICogR2V0IEhTViBjb2xvciB3aGVlbCB2YWx1ZXMgaW4gYW4gYXJyYXkgd2hpY2ggd2lsbCBiZSAzNjAgZWxlbWVudHMgaW4gc2l6ZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNvbG9yLkhTVkNvbG9yV2hlZWxcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcz0xXSAtIFRoZSBzYXR1cmF0aW9uLCBpbiB0aGUgcmFuZ2UgMCAtIDEuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbdj0xXSAtIFRoZSB2YWx1ZSwgaW4gdGhlIHJhbmdlIDAgLSAxLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuRGlzcGxheS5Db2xvck9iamVjdFtdfSBBbiBhcnJheSBjb250YWluaW5nIDM2MCBlbGVtZW50cywgd2hlcmUgZWFjaCBjb250YWlucyBhIHNpbmdsZSBudW1lcmljIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNvbG9yIGF0IHRoYXQgcG9pbnQgaW4gdGhlIEhTViBjb2xvciB3aGVlbC5cclxuICovXHJcbnZhciBIU1ZDb2xvcldoZWVsID0gZnVuY3Rpb24gKHMsIHYpXHJcbntcclxuICAgIGlmIChzID09PSB1bmRlZmluZWQpIHsgcyA9IDE7IH1cclxuICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHsgdiA9IDE7IH1cclxuXHJcbiAgICB2YXIgY29sb3JzID0gW107XHJcblxyXG4gICAgZm9yICh2YXIgYyA9IDA7IGMgPD0gMzU5OyBjKyspXHJcbiAgICB7XHJcbiAgICAgICAgY29sb3JzLnB1c2goSFNWVG9SR0IoYyAvIDM1OSwgcywgdikpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb2xvcnM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEhTVkNvbG9yV2hlZWw7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/HSVColorWheel.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/color/HSVToRGB.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/display/color/HSVToRGB.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetColor = __webpack_require__(/*! ./GetColor */ \"./node_modules/phaser/src/display/color/GetColor.js\");\r\n\r\n/**\r\n * Converts an HSV (hue, saturation and value) color value to RGB.\r\n * Conversion formula from http://en.wikipedia.org/wiki/HSL_color_space.\r\n * Assumes HSV values are contained in the set [0, 1].\r\n * Based on code by Michael Jackson (https://github.com/mjijackson)\r\n *\r\n * @function Phaser.Display.Color.HSVToRGB\r\n * @since 3.0.0\r\n *\r\n * @param {number} h - The hue, in the range 0 - 1. This is the base color.\r\n * @param {number} s - The saturation, in the range 0 - 1. This controls how much of the hue will be in the final color, where 1 is fully saturated and 0 will give you white.\r\n * @param {number} v - The value, in the range 0 - 1. This controls how dark the color is. Where 1 is as bright as possible and 0 is black.\r\n * @param {(Phaser.Types.Display.ColorObject|Phaser.Display.Color)} [out] - A Color object to store the results in. If not given a new ColorObject will be created.\r\n *\r\n * @return {(Phaser.Types.Display.ColorObject|Phaser.Display.Color)} An object with the red, green and blue values set in the r, g and b properties.\r\n */\r\nvar HSVToRGB = function (h, s, v, out)\r\n{\r\n if (s === undefined) { s = 1; }\r\n if (v === undefined) { v = 1; }\r\n\r\n var i = Math.floor(h * 6);\r\n var f = h * 6 - i;\r\n\r\n var p = Math.floor((v * (1 - s)) * 255);\r\n var q = Math.floor((v * (1 - f * s)) * 255);\r\n var t = Math.floor((v * (1 - (1 - f) * s)) * 255);\r\n\r\n v = Math.floor(v *= 255);\r\n\r\n var r = v;\r\n var g = v;\r\n var b = v;\r\n\r\n var c = i % 6;\r\n\r\n if (c === 0)\r\n {\r\n g = t;\r\n b = p;\r\n }\r\n else if (c === 1)\r\n {\r\n r = q;\r\n b = p;\r\n }\r\n else if (c === 2)\r\n {\r\n r = p;\r\n b = t;\r\n }\r\n else if (c === 3)\r\n {\r\n r = p;\r\n g = q;\r\n }\r\n else if (c === 4)\r\n {\r\n r = t;\r\n g = p;\r\n }\r\n else if (c === 5)\r\n {\r\n g = p;\r\n b = q;\r\n }\r\n\r\n if (!out)\r\n {\r\n return { r: r, g: g, b: b, color: GetColor(r, g, b) };\r\n }\r\n else if (out.setTo)\r\n {\r\n return out.setTo(r, g, b, out.alpha, false);\r\n }\r\n else\r\n {\r\n out.r = r;\r\n out.g = g;\r\n out.b = b;\r\n out.color = GetColor(r, g, b);\r\n\r\n return out;\r\n }\r\n};\r\n\r\nmodule.exports = HSVToRGB;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0hTVlRvUkdCLmpzP2YxYTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyx1RUFBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyx3REFBd0Q7QUFDbkU7QUFDQSxZQUFZLHdEQUF3RDtBQUNwRTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsT0FBTztBQUNqQywwQkFBMEIsT0FBTzs7QUFFakM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9jb2xvci9IU1ZUb1JHQi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldENvbG9yID0gcmVxdWlyZSgnLi9HZXRDb2xvcicpO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIGFuIEhTViAoaHVlLCBzYXR1cmF0aW9uIGFuZCB2YWx1ZSkgY29sb3IgdmFsdWUgdG8gUkdCLlxyXG4gKiBDb252ZXJzaW9uIGZvcm11bGEgZnJvbSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hTTF9jb2xvcl9zcGFjZS5cclxuICogQXNzdW1lcyBIU1YgdmFsdWVzIGFyZSBjb250YWluZWQgaW4gdGhlIHNldCBbMCwgMV0uXHJcbiAqIEJhc2VkIG9uIGNvZGUgYnkgTWljaGFlbCBKYWNrc29uIChodHRwczovL2dpdGh1Yi5jb20vbWppamFja3NvbilcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNvbG9yLkhTVlRvUkdCXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaCAtIFRoZSBodWUsIGluIHRoZSByYW5nZSAwIC0gMS4gVGhpcyBpcyB0aGUgYmFzZSBjb2xvci5cclxuICogQHBhcmFtIHtudW1iZXJ9IHMgLSBUaGUgc2F0dXJhdGlvbiwgaW4gdGhlIHJhbmdlIDAgLSAxLiBUaGlzIGNvbnRyb2xzIGhvdyBtdWNoIG9mIHRoZSBodWUgd2lsbCBiZSBpbiB0aGUgZmluYWwgY29sb3IsIHdoZXJlIDEgaXMgZnVsbHkgc2F0dXJhdGVkIGFuZCAwIHdpbGwgZ2l2ZSB5b3Ugd2hpdGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2IC0gVGhlIHZhbHVlLCBpbiB0aGUgcmFuZ2UgMCAtIDEuIFRoaXMgY29udHJvbHMgaG93IGRhcmsgdGhlIGNvbG9yIGlzLiBXaGVyZSAxIGlzIGFzIGJyaWdodCBhcyBwb3NzaWJsZSBhbmQgMCBpcyBibGFjay5cclxuICogQHBhcmFtIHsoUGhhc2VyLlR5cGVzLkRpc3BsYXkuQ29sb3JPYmplY3R8UGhhc2VyLkRpc3BsYXkuQ29sb3IpfSBbb3V0XSAtIEEgQ29sb3Igb2JqZWN0IHRvIHN0b3JlIHRoZSByZXN1bHRzIGluLiBJZiBub3QgZ2l2ZW4gYSBuZXcgQ29sb3JPYmplY3Qgd2lsbCBiZSBjcmVhdGVkLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoUGhhc2VyLlR5cGVzLkRpc3BsYXkuQ29sb3JPYmplY3R8UGhhc2VyLkRpc3BsYXkuQ29sb3IpfSBBbiBvYmplY3Qgd2l0aCB0aGUgcmVkLCBncmVlbiBhbmQgYmx1ZSB2YWx1ZXMgc2V0IGluIHRoZSByLCBnIGFuZCBiIHByb3BlcnRpZXMuXHJcbiAqL1xyXG52YXIgSFNWVG9SR0IgPSBmdW5jdGlvbiAoaCwgcywgdiwgb3V0KVxyXG57XHJcbiAgICBpZiAocyA9PT0gdW5kZWZpbmVkKSB7IHMgPSAxOyB9XHJcbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7IHYgPSAxOyB9XHJcblxyXG4gICAgdmFyIGkgPSBNYXRoLmZsb29yKGggKiA2KTtcclxuICAgIHZhciBmID0gaCAqIDYgLSBpO1xyXG5cclxuICAgIHZhciBwID0gTWF0aC5mbG9vcigodiAqICgxIC0gcykpICogMjU1KTtcclxuICAgIHZhciBxID0gTWF0aC5mbG9vcigodiAqICgxIC0gZiAqIHMpKSAqIDI1NSk7XHJcbiAgICB2YXIgdCA9IE1hdGguZmxvb3IoKHYgKiAoMSAtICgxIC0gZikgKiBzKSkgKiAyNTUpO1xyXG5cclxuICAgIHYgPSBNYXRoLmZsb29yKHYgKj0gMjU1KTtcclxuXHJcbiAgICB2YXIgciA9IHY7XHJcbiAgICB2YXIgZyA9IHY7XHJcbiAgICB2YXIgYiA9IHY7XHJcblxyXG4gICAgdmFyIGMgPSBpICUgNjtcclxuXHJcbiAgICBpZiAoYyA9PT0gMClcclxuICAgIHtcclxuICAgICAgICBnID0gdDtcclxuICAgICAgICBiID0gcDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGMgPT09IDEpXHJcbiAgICB7XHJcbiAgICAgICAgciA9IHE7XHJcbiAgICAgICAgYiA9IHA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjID09PSAyKVxyXG4gICAge1xyXG4gICAgICAgIHIgPSBwO1xyXG4gICAgICAgIGIgPSB0O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoYyA9PT0gMylcclxuICAgIHtcclxuICAgICAgICByID0gcDtcclxuICAgICAgICBnID0gcTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGMgPT09IDQpXHJcbiAgICB7XHJcbiAgICAgICAgciA9IHQ7XHJcbiAgICAgICAgZyA9IHA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjID09PSA1KVxyXG4gICAge1xyXG4gICAgICAgIGcgPSBwO1xyXG4gICAgICAgIGIgPSBxO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghb3V0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB7IHI6IHIsIGc6IGcsIGI6IGIsIGNvbG9yOiBHZXRDb2xvcihyLCBnLCBiKSB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAob3V0LnNldFRvKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBvdXQuc2V0VG8ociwgZywgYiwgb3V0LmFscGhhLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgb3V0LnIgPSByO1xyXG4gICAgICAgIG91dC5nID0gZztcclxuICAgICAgICBvdXQuYiA9IGI7XHJcbiAgICAgICAgb3V0LmNvbG9yID0gR2V0Q29sb3IociwgZywgYik7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEhTVlRvUkdCO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/HSVToRGB.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/color/HexStringToColor.js":
/*!*******************************************************************!*\
!*** ./node_modules/phaser/src/display/color/HexStringToColor.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Color = __webpack_require__(/*! ./Color */ \"./node_modules/phaser/src/display/color/Color.js\");\r\n\r\n/**\r\n * Converts a hex string into a Phaser Color object.\r\n * \r\n * The hex string can supplied as `'#0033ff'` or the short-hand format of `'#03f'`; it can begin with an optional \"#\" or \"0x\", or be unprefixed.\r\n *\r\n * An alpha channel is _not_ supported.\r\n *\r\n * @function Phaser.Display.Color.HexStringToColor\r\n * @since 3.0.0\r\n *\r\n * @param {string} hex - The hex color value to convert, such as `#0033ff` or the short-hand format: `#03f`.\r\n *\r\n * @return {Phaser.Display.Color} A Color object populated by the values of the given string.\r\n */\r\nvar HexStringToColor = function (hex)\r\n{\r\n var color = new Color();\r\n\r\n // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\r\n hex = hex.replace(/^(?:#|0x)?([a-f\\d])([a-f\\d])([a-f\\d])$/i, function (m, r, g, b)\r\n {\r\n return r + r + g + g + b + b;\r\n });\r\n\r\n var result = (/^(?:#|0x)?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i).exec(hex);\r\n\r\n if (result)\r\n {\r\n var r = parseInt(result[1], 16);\r\n var g = parseInt(result[2], 16);\r\n var b = parseInt(result[3], 16);\r\n\r\n color.setTo(r, g, b);\r\n }\r\n\r\n return color;\r\n};\r\n\r\nmodule.exports = HexStringToColor;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0hleFN0cmluZ1RvQ29sb3IuanM/MzUwMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGlFQUFTOztBQUU3QjtBQUNBO0FBQ0E7QUFDQSxtRkFBbUY7QUFDbkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxxQkFBcUI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMLHNDQUFzQyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUU7O0FBRWhFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9jb2xvci9IZXhTdHJpbmdUb0NvbG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ29sb3IgPSByZXF1aXJlKCcuL0NvbG9yJyk7XHJcblxyXG4vKipcclxuICogQ29udmVydHMgYSBoZXggc3RyaW5nIGludG8gYSBQaGFzZXIgQ29sb3Igb2JqZWN0LlxyXG4gKiBcclxuICogVGhlIGhleCBzdHJpbmcgY2FuIHN1cHBsaWVkIGFzIGAnIzAwMzNmZidgIG9yIHRoZSBzaG9ydC1oYW5kIGZvcm1hdCBvZiBgJyMwM2YnYDsgaXQgY2FuIGJlZ2luIHdpdGggYW4gb3B0aW9uYWwgXCIjXCIgb3IgXCIweFwiLCBvciBiZSB1bnByZWZpeGVkLlxyXG4gKlxyXG4gKiBBbiBhbHBoYSBjaGFubmVsIGlzIF9ub3RfIHN1cHBvcnRlZC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNvbG9yLkhleFN0cmluZ1RvQ29sb3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZXggLSBUaGUgaGV4IGNvbG9yIHZhbHVlIHRvIGNvbnZlcnQsIHN1Y2ggYXMgYCMwMDMzZmZgIG9yIHRoZSBzaG9ydC1oYW5kIGZvcm1hdDogYCMwM2ZgLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuRGlzcGxheS5Db2xvcn0gQSBDb2xvciBvYmplY3QgcG9wdWxhdGVkIGJ5IHRoZSB2YWx1ZXMgb2YgdGhlIGdpdmVuIHN0cmluZy5cclxuICovXHJcbnZhciBIZXhTdHJpbmdUb0NvbG9yID0gZnVuY3Rpb24gKGhleClcclxue1xyXG4gICAgdmFyIGNvbG9yID0gbmV3IENvbG9yKCk7XHJcblxyXG4gICAgLy8gRXhwYW5kIHNob3J0aGFuZCBmb3JtIChlLmcuIFwiMDNGXCIpIHRvIGZ1bGwgZm9ybSAoZS5nLiBcIjAwMzNGRlwiKVxyXG4gICAgaGV4ID0gaGV4LnJlcGxhY2UoL14oPzojfDB4KT8oW2EtZlxcZF0pKFthLWZcXGRdKShbYS1mXFxkXSkkL2ksIGZ1bmN0aW9uIChtLCByLCBnLCBiKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiByICsgciArIGcgKyBnICsgYiArIGI7XHJcbiAgICB9KTtcclxuXHJcbiAgICB2YXIgcmVzdWx0ID0gKC9eKD86I3wweCk/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pKS5leGVjKGhleCk7XHJcblxyXG4gICAgaWYgKHJlc3VsdClcclxuICAgIHtcclxuICAgICAgICB2YXIgciA9IHBhcnNlSW50KHJlc3VsdFsxXSwgMTYpO1xyXG4gICAgICAgIHZhciBnID0gcGFyc2VJbnQocmVzdWx0WzJdLCAxNik7XHJcbiAgICAgICAgdmFyIGIgPSBwYXJzZUludChyZXN1bHRbM10sIDE2KTtcclxuXHJcbiAgICAgICAgY29sb3Iuc2V0VG8ociwgZywgYik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbG9yO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBIZXhTdHJpbmdUb0NvbG9yO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/HexStringToColor.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/color/HueToComponent.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/display/color/HueToComponent.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Converts a hue to an RGB color.\r\n * Based on code by Michael Jackson (https://github.com/mjijackson)\r\n *\r\n * @function Phaser.Display.Color.HueToComponent\r\n * @since 3.0.0\r\n *\r\n * @param {number} p\r\n * @param {number} q\r\n * @param {number} t\r\n *\r\n * @return {number} The combined color value.\r\n */\r\nvar HueToComponent = function (p, q, t)\r\n{\r\n if (t < 0)\r\n {\r\n t += 1;\r\n }\r\n\r\n if (t > 1)\r\n {\r\n t -= 1;\r\n }\r\n\r\n if (t < 1 / 6)\r\n {\r\n return p + (q - p) * 6 * t;\r\n }\r\n\r\n if (t < 1 / 2)\r\n {\r\n return q;\r\n }\r\n\r\n if (t < 2 / 3)\r\n {\r\n return p + (q - p) * (2 / 3 - t) * 6;\r\n }\r\n\r\n return p;\r\n};\r\n\r\nmodule.exports = HueToComponent;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0h1ZVRvQ29tcG9uZW50LmpzP2RiZGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvY29sb3IvSHVlVG9Db21wb25lbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyBhIGh1ZSB0byBhbiBSR0IgY29sb3IuXHJcbiAqIEJhc2VkIG9uIGNvZGUgYnkgTWljaGFlbCBKYWNrc29uIChodHRwczovL2dpdGh1Yi5jb20vbWppamFja3NvbilcclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNvbG9yLkh1ZVRvQ29tcG9uZW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gcFxyXG4gKiBAcGFyYW0ge251bWJlcn0gcVxyXG4gKiBAcGFyYW0ge251bWJlcn0gdFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb21iaW5lZCBjb2xvciB2YWx1ZS5cclxuICovXHJcbnZhciBIdWVUb0NvbXBvbmVudCA9IGZ1bmN0aW9uIChwLCBxLCB0KVxyXG57XHJcbiAgICBpZiAodCA8IDApXHJcbiAgICB7XHJcbiAgICAgICAgdCArPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0ID4gMSlcclxuICAgIHtcclxuICAgICAgICB0IC09IDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHQgPCAxIC8gNilcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gcCArIChxIC0gcCkgKiA2ICogdDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodCA8IDEgLyAyKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBxO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0IDwgMiAvIDMpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHAgKyAocSAtIHApICogKDIgLyAzIC0gdCkgKiA2O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBIdWVUb0NvbXBvbmVudDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/HueToComponent.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/color/IntegerToColor.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/display/color/IntegerToColor.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Color = __webpack_require__(/*! ./Color */ \"./node_modules/phaser/src/display/color/Color.js\");\r\nvar IntegerToRGB = __webpack_require__(/*! ./IntegerToRGB */ \"./node_modules/phaser/src/display/color/IntegerToRGB.js\");\r\n\r\n/**\r\n * Converts the given color value into an instance of a Color object.\r\n *\r\n * @function Phaser.Display.Color.IntegerToColor\r\n * @since 3.0.0\r\n *\r\n * @param {integer} input - The color value to convert into a Color object.\r\n *\r\n * @return {Phaser.Display.Color} A Color object.\r\n */\r\nvar IntegerToColor = function (input)\r\n{\r\n var rgb = IntegerToRGB(input);\r\n\r\n return new Color(rgb.r, rgb.g, rgb.b, rgb.a);\r\n};\r\n\r\nmodule.exports = IntegerToColor;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0ludGVnZXJUb0NvbG9yLmpzPzYwMWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxpRUFBUztBQUM3QixtQkFBbUIsbUJBQU8sQ0FBQywrRUFBZ0I7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVkscUJBQXFCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0ludGVnZXJUb0NvbG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ29sb3IgPSByZXF1aXJlKCcuL0NvbG9yJyk7XHJcbnZhciBJbnRlZ2VyVG9SR0IgPSByZXF1aXJlKCcuL0ludGVnZXJUb1JHQicpO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIHRoZSBnaXZlbiBjb2xvciB2YWx1ZSBpbnRvIGFuIGluc3RhbmNlIG9mIGEgQ29sb3Igb2JqZWN0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQ29sb3IuSW50ZWdlclRvQ29sb3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gaW5wdXQgLSBUaGUgY29sb3IgdmFsdWUgdG8gY29udmVydCBpbnRvIGEgQ29sb3Igb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuRGlzcGxheS5Db2xvcn0gQSBDb2xvciBvYmplY3QuXHJcbiAqL1xyXG52YXIgSW50ZWdlclRvQ29sb3IgPSBmdW5jdGlvbiAoaW5wdXQpXHJcbntcclxuICAgIHZhciByZ2IgPSBJbnRlZ2VyVG9SR0IoaW5wdXQpO1xyXG5cclxuICAgIHJldHVybiBuZXcgQ29sb3IocmdiLnIsIHJnYi5nLCByZ2IuYiwgcmdiLmEpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbnRlZ2VyVG9Db2xvcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/IntegerToColor.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/color/IntegerToRGB.js":
/*!***************************************************************!*\
!*** ./node_modules/phaser/src/display/color/IntegerToRGB.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Return the component parts of a color as an Object with the properties alpha, red, green, blue.\r\n *\r\n * Alpha will only be set if it exists in the given color (0xAARRGGBB)\r\n *\r\n * @function Phaser.Display.Color.IntegerToRGB\r\n * @since 3.0.0\r\n *\r\n * @param {integer} input - The color value to convert into a Color object.\r\n *\r\n * @return {Phaser.Types.Display.ColorObject} An object with the red, green and blue values set in the r, g and b properties.\r\n */\r\nvar IntegerToRGB = function (color)\r\n{\r\n if (color > 16777215)\r\n {\r\n // The color value has an alpha component\r\n return {\r\n a: color >>> 24,\r\n r: color >> 16 & 0xFF,\r\n g: color >> 8 & 0xFF,\r\n b: color & 0xFF\r\n };\r\n }\r\n else\r\n {\r\n return {\r\n a: 255,\r\n r: color >> 16 & 0xFF,\r\n g: color >> 8 & 0xFF,\r\n b: color & 0xFF\r\n };\r\n }\r\n};\r\n\r\nmodule.exports = IntegerToRGB;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0ludGVnZXJUb1JHQi5qcz9iYzdkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxpQ0FBaUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvY29sb3IvSW50ZWdlclRvUkdCLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmV0dXJuIHRoZSBjb21wb25lbnQgcGFydHMgb2YgYSBjb2xvciBhcyBhbiBPYmplY3Qgd2l0aCB0aGUgcHJvcGVydGllcyBhbHBoYSwgcmVkLCBncmVlbiwgYmx1ZS5cclxuICpcclxuICogQWxwaGEgd2lsbCBvbmx5IGJlIHNldCBpZiBpdCBleGlzdHMgaW4gdGhlIGdpdmVuIGNvbG9yICgweEFBUlJHR0JCKVxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQ29sb3IuSW50ZWdlclRvUkdCXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGlucHV0IC0gVGhlIGNvbG9yIHZhbHVlIHRvIGNvbnZlcnQgaW50byBhIENvbG9yIG9iamVjdC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLlR5cGVzLkRpc3BsYXkuQ29sb3JPYmplY3R9IEFuIG9iamVjdCB3aXRoIHRoZSByZWQsIGdyZWVuIGFuZCBibHVlIHZhbHVlcyBzZXQgaW4gdGhlIHIsIGcgYW5kIGIgcHJvcGVydGllcy5cclxuICovXHJcbnZhciBJbnRlZ2VyVG9SR0IgPSBmdW5jdGlvbiAoY29sb3IpXHJcbntcclxuICAgIGlmIChjb2xvciA+IDE2Nzc3MjE1KVxyXG4gICAge1xyXG4gICAgICAgIC8vICBUaGUgY29sb3IgdmFsdWUgaGFzIGFuIGFscGhhIGNvbXBvbmVudFxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGE6IGNvbG9yID4+PiAyNCxcclxuICAgICAgICAgICAgcjogY29sb3IgPj4gMTYgJiAweEZGLFxyXG4gICAgICAgICAgICBnOiBjb2xvciA+PiA4ICYgMHhGRixcclxuICAgICAgICAgICAgYjogY29sb3IgJiAweEZGXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhOiAyNTUsXHJcbiAgICAgICAgICAgIHI6IGNvbG9yID4+IDE2ICYgMHhGRixcclxuICAgICAgICAgICAgZzogY29sb3IgPj4gOCAmIDB4RkYsXHJcbiAgICAgICAgICAgIGI6IGNvbG9yICYgMHhGRlxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEludGVnZXJUb1JHQjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/IntegerToRGB.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/color/Interpolate.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/display/color/Interpolate.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Linear = __webpack_require__(/*! ../../math/Linear */ \"./node_modules/phaser/src/math/Linear.js\");\r\n\r\n/**\r\n * @namespace Phaser.Display.Color.Interpolate\r\n * @memberof Phaser.Display.Color\r\n * @since 3.0.0\r\n */\r\n\r\n/**\r\n * Interpolates between the two given color ranges over the length supplied.\r\n *\r\n * @function Phaser.Display.Color.Interpolate.RGBWithRGB\r\n * @memberof Phaser.Display.Color.Interpolate\r\n * @static\r\n * @since 3.0.0\r\n *\r\n * @param {number} r1 - Red value.\r\n * @param {number} g1 - Blue value.\r\n * @param {number} b1 - Green value.\r\n * @param {number} r2 - Red value.\r\n * @param {number} g2 - Blue value.\r\n * @param {number} b2 - Green value.\r\n * @param {number} [length=100] - Distance to interpolate over.\r\n * @param {number} [index=0] - Index to start from.\r\n *\r\n * @return {Phaser.Types.Display.ColorObject} An object containing the interpolated color values.\r\n */\r\nvar RGBWithRGB = function (r1, g1, b1, r2, g2, b2, length, index)\r\n{\r\n if (length === undefined) { length = 100; }\r\n if (index === undefined) { index = 0; }\r\n\r\n var t = index / length;\r\n\r\n return {\r\n r: Linear(r1, r2, t),\r\n g: Linear(g1, g2, t),\r\n b: Linear(b1, b2, t)\r\n };\r\n};\r\n\r\n/**\r\n * Interpolates between the two given color objects over the length supplied.\r\n *\r\n * @function Phaser.Display.Color.Interpolate.ColorWithColor\r\n * @memberof Phaser.Display.Color.Interpolate\r\n * @static\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Display.Color} color1 - The first Color object.\r\n * @param {Phaser.Display.Color} color2 - The second Color object.\r\n * @param {number} [length=100] - Distance to interpolate over.\r\n * @param {number} [index=0] - Index to start from.\r\n *\r\n * @return {Phaser.Types.Display.ColorObject} An object containing the interpolated color values.\r\n */\r\nvar ColorWithColor = function (color1, color2, length, index)\r\n{\r\n if (length === undefined) { length = 100; }\r\n if (index === undefined) { index = 0; }\r\n\r\n return RGBWithRGB(color1.r, color1.g, color1.b, color2.r, color2.g, color2.b, length, index);\r\n};\r\n\r\n/**\r\n * Interpolates between the Color object and color values over the length supplied.\r\n *\r\n * @function Phaser.Display.Color.Interpolate.ColorWithRGB\r\n * @memberof Phaser.Display.Color.Interpolate\r\n * @static\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Display.Color} color1 - The first Color object.\r\n * @param {number} r - Red value.\r\n * @param {number} g - Blue value.\r\n * @param {number} b - Green value.\r\n * @param {number} [length=100] - Distance to interpolate over.\r\n * @param {number} [index=0] - Index to start from.\r\n *\r\n * @return {Phaser.Types.Display.ColorObject} An object containing the interpolated color values.\r\n */\r\nvar ColorWithRGB = function (color, r, g, b, length, index)\r\n{\r\n if (length === undefined) { length = 100; }\r\n if (index === undefined) { index = 0; }\r\n\r\n return RGBWithRGB(color.r, color.g, color.b, r, g, b, length, index);\r\n};\r\n\r\nmodule.exports = {\r\n\r\n RGBWithRGB: RGBWithRGB,\r\n ColorWithRGB: ColorWithRGB,\r\n ColorWithColor: ColorWithColor\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0ludGVycG9sYXRlLmpzPzZjNGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyxtRUFBbUI7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLGlDQUFpQztBQUM3QztBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsY0FBYztBQUM3Qyw4QkFBOEIsV0FBVzs7QUFFekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxpQ0FBaUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGNBQWM7QUFDN0MsOEJBQThCLFdBQVc7O0FBRXpDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLGlDQUFpQztBQUM3QztBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsY0FBYztBQUM3Qyw4QkFBOEIsV0FBVzs7QUFFekM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL0ludGVycG9sYXRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTGluZWFyID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9MaW5lYXInKTtcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5EaXNwbGF5LkNvbG9yLkludGVycG9sYXRlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuRGlzcGxheS5Db2xvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcblxyXG4vKipcclxuICogSW50ZXJwb2xhdGVzIGJldHdlZW4gdGhlIHR3byBnaXZlbiBjb2xvciByYW5nZXMgb3ZlciB0aGUgbGVuZ3RoIHN1cHBsaWVkLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQ29sb3IuSW50ZXJwb2xhdGUuUkdCV2l0aFJHQlxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkRpc3BsYXkuQ29sb3IuSW50ZXJwb2xhdGVcclxuICogQHN0YXRpY1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHIxIC0gUmVkIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZzEgLSBCbHVlIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gYjEgLSBHcmVlbiB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHIyIC0gUmVkIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZzIgLSBCbHVlIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gYjIgLSBHcmVlbiB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MTAwXSAtIERpc3RhbmNlIHRvIGludGVycG9sYXRlIG92ZXIuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW5kZXg9MF0gLSBJbmRleCB0byBzdGFydCBmcm9tLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuRGlzcGxheS5Db2xvck9iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGludGVycG9sYXRlZCBjb2xvciB2YWx1ZXMuXHJcbiAqL1xyXG52YXIgUkdCV2l0aFJHQiA9IGZ1bmN0aW9uIChyMSwgZzEsIGIxLCByMiwgZzIsIGIyLCBsZW5ndGgsIGluZGV4KVxyXG57XHJcbiAgICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHsgbGVuZ3RoID0gMTAwOyB9XHJcbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkgeyBpbmRleCA9IDA7IH1cclxuXHJcbiAgICB2YXIgdCA9IGluZGV4IC8gbGVuZ3RoO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcjogTGluZWFyKHIxLCByMiwgdCksXHJcbiAgICAgICAgZzogTGluZWFyKGcxLCBnMiwgdCksXHJcbiAgICAgICAgYjogTGluZWFyKGIxLCBiMiwgdClcclxuICAgIH07XHJcbn07XHJcblxyXG4vKipcclxuICogSW50ZXJwb2xhdGVzIGJldHdlZW4gdGhlIHR3byBnaXZlbiBjb2xvciBvYmplY3RzIG92ZXIgdGhlIGxlbmd0aCBzdXBwbGllZC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNvbG9yLkludGVycG9sYXRlLkNvbG9yV2l0aENvbG9yXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuRGlzcGxheS5Db2xvci5JbnRlcnBvbGF0ZVxyXG4gKiBAc3RhdGljXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5EaXNwbGF5LkNvbG9yfSBjb2xvcjEgLSBUaGUgZmlyc3QgQ29sb3Igb2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5EaXNwbGF5LkNvbG9yfSBjb2xvcjIgLSBUaGUgc2Vjb25kIENvbG9yIG9iamVjdC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MTAwXSAtIERpc3RhbmNlIHRvIGludGVycG9sYXRlIG92ZXIuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW5kZXg9MF0gLSBJbmRleCB0byBzdGFydCBmcm9tLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuRGlzcGxheS5Db2xvck9iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGludGVycG9sYXRlZCBjb2xvciB2YWx1ZXMuXHJcbiAqL1xyXG52YXIgQ29sb3JXaXRoQ29sb3IgPSBmdW5jdGlvbiAoY29sb3IxLCBjb2xvcjIsIGxlbmd0aCwgaW5kZXgpXHJcbntcclxuICAgIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkgeyBsZW5ndGggPSAxMDA7IH1cclxuICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7IGluZGV4ID0gMDsgfVxyXG5cclxuICAgIHJldHVybiBSR0JXaXRoUkdCKGNvbG9yMS5yLCBjb2xvcjEuZywgY29sb3IxLmIsIGNvbG9yMi5yLCBjb2xvcjIuZywgY29sb3IyLmIsIGxlbmd0aCwgaW5kZXgpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEludGVycG9sYXRlcyBiZXR3ZWVuIHRoZSBDb2xvciBvYmplY3QgYW5kIGNvbG9yIHZhbHVlcyBvdmVyIHRoZSBsZW5ndGggc3VwcGxpZWQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5Db2xvci5JbnRlcnBvbGF0ZS5Db2xvcldpdGhSR0JcclxuICogQG1lbWJlcm9mIFBoYXNlci5EaXNwbGF5LkNvbG9yLkludGVycG9sYXRlXHJcbiAqIEBzdGF0aWNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkRpc3BsYXkuQ29sb3J9IGNvbG9yMSAtIFRoZSBmaXJzdCBDb2xvciBvYmplY3QuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByIC0gUmVkIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZyAtIEJsdWUgdmFsdWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBiIC0gR3JlZW4gdmFsdWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPTEwMF0gLSBEaXN0YW5jZSB0byBpbnRlcnBvbGF0ZSBvdmVyLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2luZGV4PTBdIC0gSW5kZXggdG8gc3RhcnQgZnJvbS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLlR5cGVzLkRpc3BsYXkuQ29sb3JPYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBpbnRlcnBvbGF0ZWQgY29sb3IgdmFsdWVzLlxyXG4gKi9cclxudmFyIENvbG9yV2l0aFJHQiA9IGZ1bmN0aW9uIChjb2xvciwgciwgZywgYiwgbGVuZ3RoLCBpbmRleClcclxue1xyXG4gICAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7IGxlbmd0aCA9IDEwMDsgfVxyXG4gICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHsgaW5kZXggPSAwOyB9XHJcblxyXG4gICAgcmV0dXJuIFJHQldpdGhSR0IoY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgciwgZywgYiwgbGVuZ3RoLCBpbmRleCk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBSR0JXaXRoUkdCOiBSR0JXaXRoUkdCLFxyXG4gICAgQ29sb3JXaXRoUkdCOiBDb2xvcldpdGhSR0IsXHJcbiAgICBDb2xvcldpdGhDb2xvcjogQ29sb3JXaXRoQ29sb3JcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/Interpolate.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/color/ObjectToColor.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/display/color/ObjectToColor.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Color = __webpack_require__(/*! ./Color */ \"./node_modules/phaser/src/display/color/Color.js\");\r\n\r\n/**\r\n * Converts an object containing `r`, `g`, `b` and `a` properties into a Color class instance.\r\n *\r\n * @function Phaser.Display.Color.ObjectToColor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Display.InputColorObject} input - An object containing `r`, `g`, `b` and `a` properties in the range 0 to 255.\r\n *\r\n * @return {Phaser.Display.Color} A Color object.\r\n */\r\nvar ObjectToColor = function (input)\r\n{\r\n return new Color(input.r, input.g, input.b, input.a);\r\n};\r\n\r\nmodule.exports = ObjectToColor;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL09iamVjdFRvQ29sb3IuanM/MWNmNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGlFQUFTOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNDQUFzQztBQUNqRDtBQUNBLFlBQVkscUJBQXFCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL09iamVjdFRvQ29sb3IuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDb2xvciA9IHJlcXVpcmUoJy4vQ29sb3InKTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyBhbiBvYmplY3QgY29udGFpbmluZyBgcmAsIGBnYCwgYGJgIGFuZCBgYWAgcHJvcGVydGllcyBpbnRvIGEgQ29sb3IgY2xhc3MgaW5zdGFuY2UuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRGlzcGxheS5Db2xvci5PYmplY3RUb0NvbG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5EaXNwbGF5LklucHV0Q29sb3JPYmplY3R9IGlucHV0IC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgYHJgLCBgZ2AsIGBiYCBhbmQgYGFgIHByb3BlcnRpZXMgaW4gdGhlIHJhbmdlIDAgdG8gMjU1LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuRGlzcGxheS5Db2xvcn0gQSBDb2xvciBvYmplY3QuXHJcbiAqL1xyXG52YXIgT2JqZWN0VG9Db2xvciA9IGZ1bmN0aW9uIChpbnB1dClcclxue1xyXG4gICAgcmV0dXJuIG5ldyBDb2xvcihpbnB1dC5yLCBpbnB1dC5nLCBpbnB1dC5iLCBpbnB1dC5hKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0VG9Db2xvcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/ObjectToColor.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/color/RGBStringToColor.js":
/*!*******************************************************************!*\
!*** ./node_modules/phaser/src/display/color/RGBStringToColor.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Color = __webpack_require__(/*! ./Color */ \"./node_modules/phaser/src/display/color/Color.js\");\r\n\r\n/**\r\n * Converts a CSS 'web' string into a Phaser Color object.\r\n * \r\n * The web string can be in the format `'rgb(r,g,b)'` or `'rgba(r,g,b,a)'` where r/g/b are in the range [0..255] and a is in the range [0..1].\r\n *\r\n * @function Phaser.Display.Color.RGBStringToColor\r\n * @since 3.0.0\r\n *\r\n * @param {string} rgb - The CSS format color string, using the `rgb` or `rgba` format.\r\n *\r\n * @return {Phaser.Display.Color} A Color object.\r\n */\r\nvar RGBStringToColor = function (rgb)\r\n{\r\n var color = new Color();\r\n\r\n var result = (/^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d+(?:\\.\\d+)?))?\\s*\\)$/).exec(rgb.toLowerCase());\r\n\r\n if (result)\r\n {\r\n var r = parseInt(result[1], 10);\r\n var g = parseInt(result[2], 10);\r\n var b = parseInt(result[3], 10);\r\n var a = (result[4] !== undefined) ? parseFloat(result[4]) : 1;\r\n\r\n color.setTo(r, g, b, a * 255);\r\n }\r\n\r\n return color;\r\n};\r\n\r\nmodule.exports = RGBStringToColor;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL1JHQlN0cmluZ1RvQ29sb3IuanM/Zjk3OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGlFQUFTOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxxQkFBcUI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvY29sb3IvUkdCU3RyaW5nVG9Db2xvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENvbG9yID0gcmVxdWlyZSgnLi9Db2xvcicpO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIGEgQ1NTICd3ZWInIHN0cmluZyBpbnRvIGEgUGhhc2VyIENvbG9yIG9iamVjdC5cclxuICogXHJcbiAqIFRoZSB3ZWIgc3RyaW5nIGNhbiBiZSBpbiB0aGUgZm9ybWF0IGAncmdiKHIsZyxiKSdgIG9yIGAncmdiYShyLGcsYixhKSdgIHdoZXJlIHIvZy9iIGFyZSBpbiB0aGUgcmFuZ2UgWzAuLjI1NV0gYW5kIGEgaXMgaW4gdGhlIHJhbmdlIFswLi4xXS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNvbG9yLlJHQlN0cmluZ1RvQ29sb3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSByZ2IgLSBUaGUgQ1NTIGZvcm1hdCBjb2xvciBzdHJpbmcsIHVzaW5nIHRoZSBgcmdiYCBvciBgcmdiYWAgZm9ybWF0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuRGlzcGxheS5Db2xvcn0gQSBDb2xvciBvYmplY3QuXHJcbiAqL1xyXG52YXIgUkdCU3RyaW5nVG9Db2xvciA9IGZ1bmN0aW9uIChyZ2IpXHJcbntcclxuICAgIHZhciBjb2xvciA9IG5ldyBDb2xvcigpO1xyXG5cclxuICAgIHZhciByZXN1bHQgPSAoL15yZ2JhP1xcKFxccyooXFxkKylcXHMqLFxccyooXFxkKylcXHMqLFxccyooXFxkKylcXHMqKD86LFxccyooXFxkKyg/OlxcLlxcZCspPykpP1xccypcXCkkLykuZXhlYyhyZ2IudG9Mb3dlckNhc2UoKSk7XHJcblxyXG4gICAgaWYgKHJlc3VsdClcclxuICAgIHtcclxuICAgICAgICB2YXIgciA9IHBhcnNlSW50KHJlc3VsdFsxXSwgMTApO1xyXG4gICAgICAgIHZhciBnID0gcGFyc2VJbnQocmVzdWx0WzJdLCAxMCk7XHJcbiAgICAgICAgdmFyIGIgPSBwYXJzZUludChyZXN1bHRbM10sIDEwKTtcclxuICAgICAgICB2YXIgYSA9IChyZXN1bHRbNF0gIT09IHVuZGVmaW5lZCkgPyBwYXJzZUZsb2F0KHJlc3VsdFs0XSkgOiAxO1xyXG5cclxuICAgICAgICBjb2xvci5zZXRUbyhyLCBnLCBiLCBhICogMjU1KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29sb3I7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJHQlN0cmluZ1RvQ29sb3I7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/RGBStringToColor.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/color/RGBToHSV.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/display/color/RGBToHSV.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Converts an RGB color value to HSV (hue, saturation and value).\r\n * Conversion formula from http://en.wikipedia.org/wiki/HSL_color_space.\r\n * Assumes RGB values are contained in the set [0, 255] and returns h, s and v in the set [0, 1].\r\n * Based on code by Michael Jackson (https://github.com/mjijackson)\r\n *\r\n * @function Phaser.Display.Color.RGBToHSV\r\n * @since 3.0.0\r\n *\r\n * @param {integer} r - The red color value. A number between 0 and 255.\r\n * @param {integer} g - The green color value. A number between 0 and 255.\r\n * @param {integer} b - The blue color value. A number between 0 and 255.\r\n * @param {(Phaser.Types.Display.HSVColorObject|Phaser.Display.Color)} [out] - An object to store the color values in. If not given an HSV Color Object will be created.\r\n *\r\n * @return {(Phaser.Types.Display.HSVColorObject|Phaser.Display.Color)} An object with the properties `h`, `s` and `v` set.\r\n */\r\nvar RGBToHSV = function (r, g, b, out)\r\n{\r\n if (out === undefined) { out = { h: 0, s: 0, v: 0 }; }\r\n\r\n r /= 255;\r\n g /= 255;\r\n b /= 255;\r\n\r\n var min = Math.min(r, g, b);\r\n var max = Math.max(r, g, b);\r\n var d = max - min;\r\n\r\n // achromatic by default\r\n var h = 0;\r\n var s = (max === 0) ? 0 : d / max;\r\n var v = max;\r\n\r\n if (max !== min)\r\n {\r\n if (max === r)\r\n {\r\n h = (g - b) / d + ((g < b) ? 6 : 0);\r\n }\r\n else if (max === g)\r\n {\r\n h = (b - r) / d + 2;\r\n }\r\n else if (max === b)\r\n {\r\n h = (r - g) / d + 4;\r\n }\r\n\r\n h /= 6;\r\n }\r\n\r\n if (out.hasOwnProperty('_h'))\r\n {\r\n out._h = h;\r\n out._s = s;\r\n out._v = v;\r\n }\r\n else\r\n {\r\n out.h = h;\r\n out.s = s;\r\n out.v = v;\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = RGBToHSV;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL1JHQlRvSFNWLmpzPzc3OTQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsMkRBQTJEO0FBQ3RFO0FBQ0EsWUFBWSwyREFBMkQ7QUFDdkU7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFFBQVEsb0JBQW9COztBQUV4RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2Rpc3BsYXkvY29sb3IvUkdCVG9IU1YuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyBhbiBSR0IgY29sb3IgdmFsdWUgdG8gSFNWIChodWUsIHNhdHVyYXRpb24gYW5kIHZhbHVlKS5cclxuICogQ29udmVyc2lvbiBmb3JtdWxhIGZyb20gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IU0xfY29sb3Jfc3BhY2UuXHJcbiAqIEFzc3VtZXMgUkdCIHZhbHVlcyBhcmUgY29udGFpbmVkIGluIHRoZSBzZXQgWzAsIDI1NV0gYW5kIHJldHVybnMgaCwgcyBhbmQgdiBpbiB0aGUgc2V0IFswLCAxXS5cclxuICogQmFzZWQgb24gY29kZSBieSBNaWNoYWVsIEphY2tzb24gKGh0dHBzOi8vZ2l0aHViLmNvbS9tamlqYWNrc29uKVxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRpc3BsYXkuQ29sb3IuUkdCVG9IU1ZcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gciAtIFRoZSByZWQgY29sb3IgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGcgLSBUaGUgZ3JlZW4gY29sb3IgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGIgLSBUaGUgYmx1ZSBjb2xvciB2YWx1ZS4gQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAyNTUuXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5UeXBlcy5EaXNwbGF5LkhTVkNvbG9yT2JqZWN0fFBoYXNlci5EaXNwbGF5LkNvbG9yKX0gW291dF0gLSBBbiBvYmplY3QgdG8gc3RvcmUgdGhlIGNvbG9yIHZhbHVlcyBpbi4gSWYgbm90IGdpdmVuIGFuIEhTViBDb2xvciBPYmplY3Qgd2lsbCBiZSBjcmVhdGVkLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoUGhhc2VyLlR5cGVzLkRpc3BsYXkuSFNWQ29sb3JPYmplY3R8UGhhc2VyLkRpc3BsYXkuQ29sb3IpfSBBbiBvYmplY3Qgd2l0aCB0aGUgcHJvcGVydGllcyBgaGAsIGBzYCBhbmQgYHZgIHNldC5cclxuICovXHJcbnZhciBSR0JUb0hTViA9IGZ1bmN0aW9uIChyLCBnLCBiLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSB7IGg6IDAsIHM6IDAsIHY6IDAgfTsgfVxyXG5cclxuICAgIHIgLz0gMjU1O1xyXG4gICAgZyAvPSAyNTU7XHJcbiAgICBiIC89IDI1NTtcclxuXHJcbiAgICB2YXIgbWluID0gTWF0aC5taW4ociwgZywgYik7XHJcbiAgICB2YXIgbWF4ID0gTWF0aC5tYXgociwgZywgYik7XHJcbiAgICB2YXIgZCA9IG1heCAtIG1pbjtcclxuXHJcbiAgICAvLyBhY2hyb21hdGljIGJ5IGRlZmF1bHRcclxuICAgIHZhciBoID0gMDtcclxuICAgIHZhciBzID0gKG1heCA9PT0gMCkgPyAwIDogZCAvIG1heDtcclxuICAgIHZhciB2ID0gbWF4O1xyXG5cclxuICAgIGlmIChtYXggIT09IG1pbilcclxuICAgIHtcclxuICAgICAgICBpZiAobWF4ID09PSByKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaCA9IChnIC0gYikgLyBkICsgKChnIDwgYikgPyA2IDogMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG1heCA9PT0gZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGggPSAoYiAtIHIpIC8gZCArIDI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG1heCA9PT0gYilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGggPSAociAtIGcpIC8gZCArIDQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBoIC89IDY7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG91dC5oYXNPd25Qcm9wZXJ0eSgnX2gnKSlcclxuICAgIHtcclxuICAgICAgICBvdXQuX2ggPSBoO1xyXG4gICAgICAgIG91dC5fcyA9IHM7XHJcbiAgICAgICAgb3V0Ll92ID0gdjtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBvdXQuaCA9IGg7XHJcbiAgICAgICAgb3V0LnMgPSBzO1xyXG4gICAgICAgIG91dC52ID0gdjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSR0JUb0hTVjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/RGBToHSV.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/color/RGBToString.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/display/color/RGBToString.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar ComponentToHex = __webpack_require__(/*! ./ComponentToHex */ \"./node_modules/phaser/src/display/color/ComponentToHex.js\");\r\n\r\n/**\r\n * Converts the color values into an HTML compatible color string, prefixed with either `#` or `0x`.\r\n *\r\n * @function Phaser.Display.Color.RGBToString\r\n * @since 3.0.0\r\n *\r\n * @param {integer} r - The red color value. A number between 0 and 255.\r\n * @param {integer} g - The green color value. A number between 0 and 255.\r\n * @param {integer} b - The blue color value. A number between 0 and 255.\r\n * @param {integer} [a=255] - The alpha value. A number between 0 and 255.\r\n * @param {string} [prefix=#] - The prefix of the string. Either `#` or `0x`.\r\n *\r\n * @return {string} A string-based representation of the color values.\r\n */\r\nvar RGBToString = function (r, g, b, a, prefix)\r\n{\r\n if (a === undefined) { a = 255; }\r\n if (prefix === undefined) { prefix = '#'; }\r\n\r\n if (prefix === '#')\r\n {\r\n return '#' + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);\r\n }\r\n else\r\n {\r\n return '0x' + ComponentToHex(a) + ComponentToHex(r) + ComponentToHex(g) + ComponentToHex(b);\r\n }\r\n};\r\n\r\nmodule.exports = RGBToString;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL1JHQlRvU3RyaW5nLmpzPzM0NzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHFCQUFxQixtQkFBTyxDQUFDLG1GQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsU0FBUztBQUNuQywrQkFBK0IsY0FBYzs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9jb2xvci9SR0JUb1N0cmluZy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENvbXBvbmVudFRvSGV4ID0gcmVxdWlyZSgnLi9Db21wb25lbnRUb0hleCcpO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIHRoZSBjb2xvciB2YWx1ZXMgaW50byBhbiBIVE1MIGNvbXBhdGlibGUgY29sb3Igc3RyaW5nLCBwcmVmaXhlZCB3aXRoIGVpdGhlciBgI2Agb3IgYDB4YC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNvbG9yLlJHQlRvU3RyaW5nXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHIgLSBUaGUgcmVkIGNvbG9yIHZhbHVlLiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBnIC0gVGhlIGdyZWVuIGNvbG9yIHZhbHVlLiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBiIC0gVGhlIGJsdWUgY29sb3IgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFthPTI1NV0gLSBUaGUgYWxwaGEgdmFsdWUuIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMjU1LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3ByZWZpeD0jXSAtIFRoZSBwcmVmaXggb2YgdGhlIHN0cmluZy4gRWl0aGVyIGAjYCBvciBgMHhgLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEEgc3RyaW5nLWJhc2VkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb2xvciB2YWx1ZXMuXHJcbiAqL1xyXG52YXIgUkdCVG9TdHJpbmcgPSBmdW5jdGlvbiAociwgZywgYiwgYSwgcHJlZml4KVxyXG57XHJcbiAgICBpZiAoYSA9PT0gdW5kZWZpbmVkKSB7IGEgPSAyNTU7IH1cclxuICAgIGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkgeyBwcmVmaXggPSAnIyc7IH1cclxuXHJcbiAgICBpZiAocHJlZml4ID09PSAnIycpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICcjJyArICgoMSA8PCAyNCkgKyAociA8PCAxNikgKyAoZyA8PCA4KSArIGIpLnRvU3RyaW5nKDE2KS5zbGljZSgxKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gJzB4JyArIENvbXBvbmVudFRvSGV4KGEpICsgQ29tcG9uZW50VG9IZXgocikgKyBDb21wb25lbnRUb0hleChnKSArIENvbXBvbmVudFRvSGV4KGIpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSR0JUb1N0cmluZztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/RGBToString.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/color/RandomRGB.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/display/color/RandomRGB.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Between = __webpack_require__(/*! ../../math/Between */ \"./node_modules/phaser/src/math/Between.js\");\r\nvar Color = __webpack_require__(/*! ./Color */ \"./node_modules/phaser/src/display/color/Color.js\");\r\n\r\n/**\r\n * Creates a new Color object where the r, g, and b values have been set to random values\r\n * based on the given min max values.\r\n *\r\n * @function Phaser.Display.Color.RandomRGB\r\n * @since 3.0.0\r\n *\r\n * @param {integer} [min=0] - The minimum value to set the random range from (between 0 and 255)\r\n * @param {integer} [max=255] - The maximum value to set the random range from (between 0 and 255)\r\n *\r\n * @return {Phaser.Display.Color} A Color object.\r\n */\r\nvar RandomRGB = function (min, max)\r\n{\r\n if (min === undefined) { min = 0; }\r\n if (max === undefined) { max = 255; }\r\n\r\n return new Color(Between(min, max), Between(min, max), Between(min, max));\r\n};\r\n\r\nmodule.exports = RandomRGB;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL1JhbmRvbVJHQi5qcz83MjQ3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxjQUFjLG1CQUFPLENBQUMscUVBQW9CO0FBQzFDLFlBQVksbUJBQU8sQ0FBQyxpRUFBUzs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxxQkFBcUI7QUFDakM7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFNBQVM7QUFDckMsNEJBQTRCLFdBQVc7O0FBRXZDO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL1JhbmRvbVJHQi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJldHdlZW4gPSByZXF1aXJlKCcuLi8uLi9tYXRoL0JldHdlZW4nKTtcclxudmFyIENvbG9yID0gcmVxdWlyZSgnLi9Db2xvcicpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgQ29sb3Igb2JqZWN0IHdoZXJlIHRoZSByLCBnLCBhbmQgYiB2YWx1ZXMgaGF2ZSBiZWVuIHNldCB0byByYW5kb20gdmFsdWVzXHJcbiAqIGJhc2VkIG9uIHRoZSBnaXZlbiBtaW4gbWF4IHZhbHVlcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNvbG9yLlJhbmRvbVJHQlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbbWluPTBdIC0gVGhlIG1pbmltdW0gdmFsdWUgdG8gc2V0IHRoZSByYW5kb20gcmFuZ2UgZnJvbSAoYmV0d2VlbiAwIGFuZCAyNTUpXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW21heD0yNTVdIC0gVGhlIG1heGltdW0gdmFsdWUgdG8gc2V0IHRoZSByYW5kb20gcmFuZ2UgZnJvbSAoYmV0d2VlbiAwIGFuZCAyNTUpXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5EaXNwbGF5LkNvbG9yfSBBIENvbG9yIG9iamVjdC5cclxuICovXHJcbnZhciBSYW5kb21SR0IgPSBmdW5jdGlvbiAobWluLCBtYXgpXHJcbntcclxuICAgIGlmIChtaW4gPT09IHVuZGVmaW5lZCkgeyBtaW4gPSAwOyB9XHJcbiAgICBpZiAobWF4ID09PSB1bmRlZmluZWQpIHsgbWF4ID0gMjU1OyB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBDb2xvcihCZXR3ZWVuKG1pbiwgbWF4KSwgQmV0d2VlbihtaW4sIG1heCksIEJldHdlZW4obWluLCBtYXgpKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmFuZG9tUkdCO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/RandomRGB.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/color/ValueToColor.js":
/*!***************************************************************!*\
!*** ./node_modules/phaser/src/display/color/ValueToColor.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar HexStringToColor = __webpack_require__(/*! ./HexStringToColor */ \"./node_modules/phaser/src/display/color/HexStringToColor.js\");\r\nvar IntegerToColor = __webpack_require__(/*! ./IntegerToColor */ \"./node_modules/phaser/src/display/color/IntegerToColor.js\");\r\nvar ObjectToColor = __webpack_require__(/*! ./ObjectToColor */ \"./node_modules/phaser/src/display/color/ObjectToColor.js\");\r\nvar RGBStringToColor = __webpack_require__(/*! ./RGBStringToColor */ \"./node_modules/phaser/src/display/color/RGBStringToColor.js\");\r\n\r\n/**\r\n * Converts the given source color value into an instance of a Color class.\r\n * The value can be either a string, prefixed with `rgb` or a hex string, a number or an Object.\r\n *\r\n * @function Phaser.Display.Color.ValueToColor\r\n * @since 3.0.0\r\n *\r\n * @param {(string|number|Phaser.Types.Display.InputColorObject)} input - The source color value to convert.\r\n *\r\n * @return {Phaser.Display.Color} A Color object.\r\n */\r\nvar ValueToColor = function (input)\r\n{\r\n var t = typeof input;\r\n\r\n switch (t)\r\n {\r\n case 'string':\r\n\r\n if (input.substr(0, 3).toLowerCase() === 'rgb')\r\n {\r\n return RGBStringToColor(input);\r\n }\r\n else\r\n {\r\n return HexStringToColor(input);\r\n }\r\n\r\n case 'number':\r\n\r\n return IntegerToColor(input);\r\n\r\n case 'object':\r\n\r\n return ObjectToColor(input);\r\n }\r\n};\r\n\r\nmodule.exports = ValueToColor;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL1ZhbHVlVG9Db2xvci5qcz82Mjg0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQyx1RkFBb0I7QUFDbkQscUJBQXFCLG1CQUFPLENBQUMsbUZBQWtCO0FBQy9DLG9CQUFvQixtQkFBTyxDQUFDLGlGQUFpQjtBQUM3Qyx1QkFBdUIsbUJBQU8sQ0FBQyx1RkFBb0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzREFBc0Q7QUFDakU7QUFDQSxZQUFZLHFCQUFxQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL1ZhbHVlVG9Db2xvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEhleFN0cmluZ1RvQ29sb3IgPSByZXF1aXJlKCcuL0hleFN0cmluZ1RvQ29sb3InKTtcclxudmFyIEludGVnZXJUb0NvbG9yID0gcmVxdWlyZSgnLi9JbnRlZ2VyVG9Db2xvcicpO1xyXG52YXIgT2JqZWN0VG9Db2xvciA9IHJlcXVpcmUoJy4vT2JqZWN0VG9Db2xvcicpO1xyXG52YXIgUkdCU3RyaW5nVG9Db2xvciA9IHJlcXVpcmUoJy4vUkdCU3RyaW5nVG9Db2xvcicpO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIHRoZSBnaXZlbiBzb3VyY2UgY29sb3IgdmFsdWUgaW50byBhbiBpbnN0YW5jZSBvZiBhIENvbG9yIGNsYXNzLlxyXG4gKiBUaGUgdmFsdWUgY2FuIGJlIGVpdGhlciBhIHN0cmluZywgcHJlZml4ZWQgd2l0aCBgcmdiYCBvciBhIGhleCBzdHJpbmcsIGEgbnVtYmVyIG9yIGFuIE9iamVjdC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5EaXNwbGF5LkNvbG9yLlZhbHVlVG9Db2xvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsoc3RyaW5nfG51bWJlcnxQaGFzZXIuVHlwZXMuRGlzcGxheS5JbnB1dENvbG9yT2JqZWN0KX0gaW5wdXQgLSBUaGUgc291cmNlIGNvbG9yIHZhbHVlIHRvIGNvbnZlcnQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5EaXNwbGF5LkNvbG9yfSBBIENvbG9yIG9iamVjdC5cclxuICovXHJcbnZhciBWYWx1ZVRvQ29sb3IgPSBmdW5jdGlvbiAoaW5wdXQpXHJcbntcclxuICAgIHZhciB0ID0gdHlwZW9mIGlucHV0O1xyXG5cclxuICAgIHN3aXRjaCAodClcclxuICAgIHtcclxuICAgICAgICBjYXNlICdzdHJpbmcnOlxyXG5cclxuICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cigwLCAzKS50b0xvd2VyQ2FzZSgpID09PSAncmdiJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFJHQlN0cmluZ1RvQ29sb3IoaW5wdXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEhleFN0cmluZ1RvQ29sb3IoaW5wdXQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIGNhc2UgJ251bWJlcic6XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gSW50ZWdlclRvQ29sb3IoaW5wdXQpO1xyXG5cclxuICAgICAgICBjYXNlICdvYmplY3QnOlxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdFRvQ29sb3IoaW5wdXQpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBWYWx1ZVRvQ29sb3I7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/ValueToColor.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/color/index.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/display/color/index.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Color = __webpack_require__(/*! ./Color */ \"./node_modules/phaser/src/display/color/Color.js\");\r\n\r\nColor.ColorToRGBA = __webpack_require__(/*! ./ColorToRGBA */ \"./node_modules/phaser/src/display/color/ColorToRGBA.js\");\r\nColor.ComponentToHex = __webpack_require__(/*! ./ComponentToHex */ \"./node_modules/phaser/src/display/color/ComponentToHex.js\");\r\nColor.GetColor = __webpack_require__(/*! ./GetColor */ \"./node_modules/phaser/src/display/color/GetColor.js\");\r\nColor.GetColor32 = __webpack_require__(/*! ./GetColor32 */ \"./node_modules/phaser/src/display/color/GetColor32.js\");\r\nColor.HexStringToColor = __webpack_require__(/*! ./HexStringToColor */ \"./node_modules/phaser/src/display/color/HexStringToColor.js\");\r\nColor.HSLToColor = __webpack_require__(/*! ./HSLToColor */ \"./node_modules/phaser/src/display/color/HSLToColor.js\");\r\nColor.HSVColorWheel = __webpack_require__(/*! ./HSVColorWheel */ \"./node_modules/phaser/src/display/color/HSVColorWheel.js\");\r\nColor.HSVToRGB = __webpack_require__(/*! ./HSVToRGB */ \"./node_modules/phaser/src/display/color/HSVToRGB.js\");\r\nColor.HueToComponent = __webpack_require__(/*! ./HueToComponent */ \"./node_modules/phaser/src/display/color/HueToComponent.js\");\r\nColor.IntegerToColor = __webpack_require__(/*! ./IntegerToColor */ \"./node_modules/phaser/src/display/color/IntegerToColor.js\");\r\nColor.IntegerToRGB = __webpack_require__(/*! ./IntegerToRGB */ \"./node_modules/phaser/src/display/color/IntegerToRGB.js\");\r\nColor.Interpolate = __webpack_require__(/*! ./Interpolate */ \"./node_modules/phaser/src/display/color/Interpolate.js\");\r\nColor.ObjectToColor = __webpack_require__(/*! ./ObjectToColor */ \"./node_modules/phaser/src/display/color/ObjectToColor.js\");\r\nColor.RandomRGB = __webpack_require__(/*! ./RandomRGB */ \"./node_modules/phaser/src/display/color/RandomRGB.js\");\r\nColor.RGBStringToColor = __webpack_require__(/*! ./RGBStringToColor */ \"./node_modules/phaser/src/display/color/RGBStringToColor.js\");\r\nColor.RGBToHSV = __webpack_require__(/*! ./RGBToHSV */ \"./node_modules/phaser/src/display/color/RGBToHSV.js\");\r\nColor.RGBToString = __webpack_require__(/*! ./RGBToString */ \"./node_modules/phaser/src/display/color/RGBToString.js\");\r\nColor.ValueToColor = __webpack_require__(/*! ./ValueToColor */ \"./node_modules/phaser/src/display/color/ValueToColor.js\");\r\n\r\nmodule.exports = Color;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2NvbG9yL2luZGV4LmpzPzYzYTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxpRUFBUzs7QUFFN0Isb0JBQW9CLG1CQUFPLENBQUMsNkVBQWU7QUFDM0MsdUJBQXVCLG1CQUFPLENBQUMsbUZBQWtCO0FBQ2pELGlCQUFpQixtQkFBTyxDQUFDLHVFQUFZO0FBQ3JDLG1CQUFtQixtQkFBTyxDQUFDLDJFQUFjO0FBQ3pDLHlCQUF5QixtQkFBTyxDQUFDLHVGQUFvQjtBQUNyRCxtQkFBbUIsbUJBQU8sQ0FBQywyRUFBYztBQUN6QyxzQkFBc0IsbUJBQU8sQ0FBQyxpRkFBaUI7QUFDL0MsaUJBQWlCLG1CQUFPLENBQUMsdUVBQVk7QUFDckMsdUJBQXVCLG1CQUFPLENBQUMsbUZBQWtCO0FBQ2pELHVCQUF1QixtQkFBTyxDQUFDLG1GQUFrQjtBQUNqRCxxQkFBcUIsbUJBQU8sQ0FBQywrRUFBZ0I7QUFDN0Msb0JBQW9CLG1CQUFPLENBQUMsNkVBQWU7QUFDM0Msc0JBQXNCLG1CQUFPLENBQUMsaUZBQWlCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLHlFQUFhO0FBQ3ZDLHlCQUF5QixtQkFBTyxDQUFDLHVGQUFvQjtBQUNyRCxpQkFBaUIsbUJBQU8sQ0FBQyx1RUFBWTtBQUNyQyxvQkFBb0IsbUJBQU8sQ0FBQyw2RUFBZTtBQUMzQyxxQkFBcUIsbUJBQU8sQ0FBQywrRUFBZ0I7O0FBRTdDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9jb2xvci9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENvbG9yID0gcmVxdWlyZSgnLi9Db2xvcicpO1xyXG5cclxuQ29sb3IuQ29sb3JUb1JHQkEgPSByZXF1aXJlKCcuL0NvbG9yVG9SR0JBJyk7XHJcbkNvbG9yLkNvbXBvbmVudFRvSGV4ID0gcmVxdWlyZSgnLi9Db21wb25lbnRUb0hleCcpO1xyXG5Db2xvci5HZXRDb2xvciA9IHJlcXVpcmUoJy4vR2V0Q29sb3InKTtcclxuQ29sb3IuR2V0Q29sb3IzMiA9IHJlcXVpcmUoJy4vR2V0Q29sb3IzMicpO1xyXG5Db2xvci5IZXhTdHJpbmdUb0NvbG9yID0gcmVxdWlyZSgnLi9IZXhTdHJpbmdUb0NvbG9yJyk7XHJcbkNvbG9yLkhTTFRvQ29sb3IgPSByZXF1aXJlKCcuL0hTTFRvQ29sb3InKTtcclxuQ29sb3IuSFNWQ29sb3JXaGVlbCA9IHJlcXVpcmUoJy4vSFNWQ29sb3JXaGVlbCcpO1xyXG5Db2xvci5IU1ZUb1JHQiA9IHJlcXVpcmUoJy4vSFNWVG9SR0InKTtcclxuQ29sb3IuSHVlVG9Db21wb25lbnQgPSByZXF1aXJlKCcuL0h1ZVRvQ29tcG9uZW50Jyk7XHJcbkNvbG9yLkludGVnZXJUb0NvbG9yID0gcmVxdWlyZSgnLi9JbnRlZ2VyVG9Db2xvcicpO1xyXG5Db2xvci5JbnRlZ2VyVG9SR0IgPSByZXF1aXJlKCcuL0ludGVnZXJUb1JHQicpO1xyXG5Db2xvci5JbnRlcnBvbGF0ZSA9IHJlcXVpcmUoJy4vSW50ZXJwb2xhdGUnKTtcclxuQ29sb3IuT2JqZWN0VG9Db2xvciA9IHJlcXVpcmUoJy4vT2JqZWN0VG9Db2xvcicpO1xyXG5Db2xvci5SYW5kb21SR0IgPSByZXF1aXJlKCcuL1JhbmRvbVJHQicpO1xyXG5Db2xvci5SR0JTdHJpbmdUb0NvbG9yID0gcmVxdWlyZSgnLi9SR0JTdHJpbmdUb0NvbG9yJyk7XHJcbkNvbG9yLlJHQlRvSFNWID0gcmVxdWlyZSgnLi9SR0JUb0hTVicpO1xyXG5Db2xvci5SR0JUb1N0cmluZyA9IHJlcXVpcmUoJy4vUkdCVG9TdHJpbmcnKTtcclxuQ29sb3IuVmFsdWVUb0NvbG9yID0gcmVxdWlyZSgnLi9WYWx1ZVRvQ29sb3InKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ29sb3I7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/color/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/index.js":
/*!**************************************************!*\
!*** ./node_modules/phaser/src/display/index.js ***!
\**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Display\r\n */\r\n\r\nmodule.exports = {\r\n\r\n Align: __webpack_require__(/*! ./align */ \"./node_modules/phaser/src/display/align/index.js\"),\r\n BaseShader: __webpack_require__(/*! ./shader/BaseShader */ \"./node_modules/phaser/src/display/shader/BaseShader.js\"),\r\n Bounds: __webpack_require__(/*! ./bounds */ \"./node_modules/phaser/src/display/bounds/index.js\"),\r\n Canvas: __webpack_require__(/*! ./canvas */ \"./node_modules/phaser/src/display/canvas/index.js\"),\r\n Color: __webpack_require__(/*! ./color */ \"./node_modules/phaser/src/display/color/index.js\"),\r\n Masks: __webpack_require__(/*! ./mask */ \"./node_modules/phaser/src/display/mask/index.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2luZGV4LmpzP2VhNTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxXQUFXLG1CQUFPLENBQUMsaUVBQVM7QUFDNUIsZ0JBQWdCLG1CQUFPLENBQUMsbUZBQXFCO0FBQzdDLFlBQVksbUJBQU8sQ0FBQyxtRUFBVTtBQUM5QixZQUFZLG1CQUFPLENBQUMsbUVBQVU7QUFDOUIsV0FBVyxtQkFBTyxDQUFDLGlFQUFTO0FBQzVCLFdBQVcsbUJBQU8sQ0FBQywrREFBUTs7QUFFM0IiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuRGlzcGxheVxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEFsaWduOiByZXF1aXJlKCcuL2FsaWduJyksXHJcbiAgICBCYXNlU2hhZGVyOiByZXF1aXJlKCcuL3NoYWRlci9CYXNlU2hhZGVyJyksXHJcbiAgICBCb3VuZHM6IHJlcXVpcmUoJy4vYm91bmRzJyksXHJcbiAgICBDYW52YXM6IHJlcXVpcmUoJy4vY2FudmFzJyksXHJcbiAgICBDb2xvcjogcmVxdWlyZSgnLi9jb2xvcicpLFxyXG4gICAgTWFza3M6IHJlcXVpcmUoJy4vbWFzaycpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/mask/BitmapMask.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/display/mask/BitmapMask.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GameEvents = __webpack_require__(/*! ../../core/events */ \"./node_modules/phaser/src/core/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Bitmap Mask combines the alpha (opacity) of a masked pixel with the alpha of another pixel.\r\n * Unlike the Geometry Mask, which is a clipping path, a Bitmap Mask behaves like an alpha mask,\r\n * not a clipping path. It is only available when using the WebGL Renderer.\r\n *\r\n * A Bitmap Mask can use any Game Object to determine the alpha of each pixel of the masked Game Object(s).\r\n * For any given point of a masked Game Object's texture, the pixel's alpha will be multiplied by the alpha\r\n * of the pixel at the same position in the Bitmap Mask's Game Object. The color of the pixel from the\r\n * Bitmap Mask doesn't matter.\r\n *\r\n * For example, if a pure blue pixel with an alpha of 0.95 is masked with a pure red pixel with an\r\n * alpha of 0.5, the resulting pixel will be pure blue with an alpha of 0.475. Naturally, this means\r\n * that a pixel in the mask with an alpha of 0 will hide the corresponding pixel in all masked Game Objects\r\n * A pixel with an alpha of 1 in the masked Game Object will receive the same alpha as the\r\n * corresponding pixel in the mask.\r\n *\r\n * The Bitmap Mask's location matches the location of its Game Object, not the location of the\r\n * masked objects. Moving or transforming the underlying Game Object will change the mask\r\n * (and affect the visibility of any masked objects), whereas moving or transforming a masked object\r\n * will not affect the mask.\r\n *\r\n * The Bitmap Mask will not render its Game Object by itself. If the Game Object is not in a\r\n * Scene's display list, it will only be used for the mask and its full texture will not be directly\r\n * visible. Adding the underlying Game Object to a Scene will not cause any problems - it will\r\n * render as a normal Game Object and will also serve as a mask.\r\n *\r\n * @class BitmapMask\r\n * @memberof Phaser.Display.Masks\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene which this Bitmap Mask will be used in.\r\n * @param {Phaser.GameObjects.GameObject} renderable - A renderable Game Object that uses a texture, such as a Sprite.\r\n */\r\nvar BitmapMask = new Class({\r\n\r\n initialize:\r\n\r\n function BitmapMask (scene, renderable)\r\n {\r\n var renderer = scene.sys.game.renderer;\r\n\r\n /**\r\n * A reference to either the Canvas or WebGL Renderer that this Mask is using.\r\n *\r\n * @name Phaser.Display.Masks.BitmapMask#renderer\r\n * @type {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)}\r\n * @since 3.11.0\r\n */\r\n this.renderer = renderer;\r\n\r\n /**\r\n * A renderable Game Object that uses a texture, such as a Sprite.\r\n *\r\n * @name Phaser.Display.Masks.BitmapMask#bitmapMask\r\n * @type {Phaser.GameObjects.GameObject}\r\n * @since 3.0.0\r\n */\r\n this.bitmapMask = renderable;\r\n\r\n /**\r\n * The texture used for the mask's framebuffer.\r\n *\r\n * @name Phaser.Display.Masks.BitmapMask#maskTexture\r\n * @type {WebGLTexture}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.maskTexture = null;\r\n\r\n /**\r\n * The texture used for the main framebuffer.\r\n *\r\n * @name Phaser.Display.Masks.BitmapMask#mainTexture\r\n * @type {WebGLTexture}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.mainTexture = null;\r\n\r\n /**\r\n * Whether the Bitmap Mask is dirty and needs to be updated.\r\n *\r\n * @name Phaser.Display.Masks.BitmapMask#dirty\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.dirty = true;\r\n\r\n /**\r\n * The framebuffer to which a masked Game Object is rendered.\r\n *\r\n * @name Phaser.Display.Masks.BitmapMask#mainFramebuffer\r\n * @type {WebGLFramebuffer}\r\n * @since 3.0.0\r\n */\r\n this.mainFramebuffer = null;\r\n\r\n /**\r\n * The framebuffer to which the Bitmap Mask's masking Game Object is rendered.\r\n *\r\n * @name Phaser.Display.Masks.BitmapMask#maskFramebuffer\r\n * @type {WebGLFramebuffer}\r\n * @since 3.0.0\r\n */\r\n this.maskFramebuffer = null;\r\n\r\n /**\r\n * The previous framebuffer set in the renderer before this one was enabled.\r\n *\r\n * @name Phaser.Display.Masks.BitmapMask#prevFramebuffer\r\n * @type {WebGLFramebuffer}\r\n * @since 3.17.0\r\n */\r\n this.prevFramebuffer = null;\r\n\r\n /**\r\n * Whether to invert the masks alpha.\r\n *\r\n * If `true`, the alpha of the masking pixel will be inverted before it's multiplied with the masked pixel. Essentially, this means that a masked area will be visible only if the corresponding area in the mask is invisible.\r\n *\r\n * @name Phaser.Display.Masks.BitmapMask#invertAlpha\r\n * @type {boolean}\r\n * @since 3.1.2\r\n */\r\n this.invertAlpha = false;\r\n\r\n /**\r\n * Is this mask a stencil mask?\r\n *\r\n * @name Phaser.Display.Masks.BitmapMask#isStencil\r\n * @type {boolean}\r\n * @readonly\r\n * @since 3.17.0\r\n */\r\n this.isStencil = false;\r\n\r\n if (renderer && renderer.gl)\r\n {\r\n var width = renderer.width;\r\n var height = renderer.height;\r\n var pot = ((width & (width - 1)) === 0 && (height & (height - 1)) === 0);\r\n var gl = renderer.gl;\r\n var wrap = pot ? gl.REPEAT : gl.CLAMP_TO_EDGE;\r\n var filter = gl.LINEAR;\r\n\r\n this.mainTexture = renderer.createTexture2D(0, filter, filter, wrap, wrap, gl.RGBA, null, width, height);\r\n this.maskTexture = renderer.createTexture2D(0, filter, filter, wrap, wrap, gl.RGBA, null, width, height);\r\n this.mainFramebuffer = renderer.createFramebuffer(width, height, this.mainTexture, true);\r\n this.maskFramebuffer = renderer.createFramebuffer(width, height, this.maskTexture, true);\r\n\r\n scene.sys.game.events.on(GameEvents.CONTEXT_RESTORED, function (renderer)\r\n {\r\n var width = renderer.width;\r\n var height = renderer.height;\r\n var pot = ((width & (width - 1)) === 0 && (height & (height - 1)) === 0);\r\n var gl = renderer.gl;\r\n var wrap = pot ? gl.REPEAT : gl.CLAMP_TO_EDGE;\r\n var filter = gl.LINEAR;\r\n\r\n this.mainTexture = renderer.createTexture2D(0, filter, filter, wrap, wrap, gl.RGBA, null, width, height);\r\n this.maskTexture = renderer.createTexture2D(0, filter, filter, wrap, wrap, gl.RGBA, null, width, height);\r\n this.mainFramebuffer = renderer.createFramebuffer(width, height, this.mainTexture, true);\r\n this.maskFramebuffer = renderer.createFramebuffer(width, height, this.maskTexture, true);\r\n\r\n }, this);\r\n }\r\n },\r\n\r\n /**\r\n * Sets a new masking Game Object for the Bitmap Mask.\r\n *\r\n * @method Phaser.Display.Masks.BitmapMask#setBitmap\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} renderable - A renderable Game Object that uses a texture, such as a Sprite.\r\n */\r\n setBitmap: function (renderable)\r\n {\r\n this.bitmapMask = renderable;\r\n },\r\n\r\n /**\r\n * Prepares the WebGL Renderer to render a Game Object with this mask applied.\r\n *\r\n * This renders the masking Game Object to the mask framebuffer and switches to the main framebuffer so that the masked Game Object will be rendered to it instead of being rendered directly to the frame.\r\n *\r\n * @method Phaser.Display.Masks.BitmapMask#preRenderWebGL\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)} renderer - The WebGL Renderer to prepare.\r\n * @param {Phaser.GameObjects.GameObject} maskedObject - The masked Game Object which will be drawn.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera to render to.\r\n */\r\n preRenderWebGL: function (renderer, maskedObject, camera)\r\n {\r\n renderer.pipelines.BitmapMaskPipeline.beginMask(this, maskedObject, camera);\r\n },\r\n\r\n /**\r\n * Finalizes rendering of a masked Game Object.\r\n *\r\n * This resets the previously bound framebuffer and switches the WebGL Renderer to the Bitmap Mask Pipeline, which uses a special fragment shader to apply the masking effect.\r\n *\r\n * @method Phaser.Display.Masks.BitmapMask#postRenderWebGL\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)} renderer - The WebGL Renderer to clean up.\r\n */\r\n postRenderWebGL: function (renderer, camera)\r\n {\r\n renderer.pipelines.BitmapMaskPipeline.endMask(this, camera);\r\n },\r\n\r\n /**\r\n * This is a NOOP method. Bitmap Masks are not supported by the Canvas Renderer.\r\n *\r\n * @method Phaser.Display.Masks.BitmapMask#preRenderCanvas\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)} renderer - The Canvas Renderer which would be rendered to.\r\n * @param {Phaser.GameObjects.GameObject} mask - The masked Game Object which would be rendered.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera to render to.\r\n */\r\n preRenderCanvas: function ()\r\n {\r\n // NOOP\r\n },\r\n\r\n /**\r\n * This is a NOOP method. Bitmap Masks are not supported by the Canvas Renderer.\r\n *\r\n * @method Phaser.Display.Masks.BitmapMask#postRenderCanvas\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)} renderer - The Canvas Renderer which would be rendered to.\r\n */\r\n postRenderCanvas: function ()\r\n {\r\n // NOOP\r\n },\r\n\r\n /**\r\n * Destroys this BitmapMask and nulls any references it holds.\r\n * \r\n * Note that if a Game Object is currently using this mask it will _not_ automatically detect you have destroyed it,\r\n * so be sure to call `clearMask` on any Game Object using it, before destroying it.\r\n *\r\n * @method Phaser.Display.Masks.BitmapMask#destroy\r\n * @since 3.7.0\r\n */\r\n destroy: function ()\r\n {\r\n this.bitmapMask = null;\r\n\r\n var renderer = this.renderer;\r\n\r\n if (renderer && renderer.gl)\r\n {\r\n renderer.deleteTexture(this.mainTexture);\r\n renderer.deleteTexture(this.maskTexture);\r\n renderer.deleteFramebuffer(this.mainFramebuffer);\r\n renderer.deleteFramebuffer(this.maskFramebuffer);\r\n }\r\n\r\n this.mainTexture = null;\r\n this.maskTexture = null;\r\n this.mainFramebuffer = null;\r\n this.maskFramebuffer = null;\r\n this.prevFramebuffer = null;\r\n this.renderer = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = BitmapMask;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L21hc2svQml0bWFwTWFzay5qcz8yZGFlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLHlFQUFtQjs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLDhCQUE4QjtBQUN6QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGFBQWE7QUFDYjtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDRFQUE0RTtBQUMzRixlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLDhCQUE4QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNEVBQTRFO0FBQzNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDRFQUE0RTtBQUMzRixlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLDhCQUE4QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw0RUFBNEU7QUFDM0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9tYXNrL0JpdG1hcE1hc2suanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBHYW1lRXZlbnRzID0gcmVxdWlyZSgnLi4vLi4vY29yZS9ldmVudHMnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgQml0bWFwIE1hc2sgY29tYmluZXMgdGhlIGFscGhhIChvcGFjaXR5KSBvZiBhIG1hc2tlZCBwaXhlbCB3aXRoIHRoZSBhbHBoYSBvZiBhbm90aGVyIHBpeGVsLlxyXG4gKiBVbmxpa2UgdGhlIEdlb21ldHJ5IE1hc2ssIHdoaWNoIGlzIGEgY2xpcHBpbmcgcGF0aCwgYSBCaXRtYXAgTWFzayBiZWhhdmVzIGxpa2UgYW4gYWxwaGEgbWFzayxcclxuICogbm90IGEgY2xpcHBpbmcgcGF0aC4gSXQgaXMgb25seSBhdmFpbGFibGUgd2hlbiB1c2luZyB0aGUgV2ViR0wgUmVuZGVyZXIuXHJcbiAqXHJcbiAqIEEgQml0bWFwIE1hc2sgY2FuIHVzZSBhbnkgR2FtZSBPYmplY3QgdG8gZGV0ZXJtaW5lIHRoZSBhbHBoYSBvZiBlYWNoIHBpeGVsIG9mIHRoZSBtYXNrZWQgR2FtZSBPYmplY3QocykuXHJcbiAqIEZvciBhbnkgZ2l2ZW4gcG9pbnQgb2YgYSBtYXNrZWQgR2FtZSBPYmplY3QncyB0ZXh0dXJlLCB0aGUgcGl4ZWwncyBhbHBoYSB3aWxsIGJlIG11bHRpcGxpZWQgYnkgdGhlIGFscGhhXHJcbiAqIG9mIHRoZSBwaXhlbCBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpbiB0aGUgQml0bWFwIE1hc2sncyBHYW1lIE9iamVjdC4gVGhlIGNvbG9yIG9mIHRoZSBwaXhlbCBmcm9tIHRoZVxyXG4gKiBCaXRtYXAgTWFzayBkb2Vzbid0IG1hdHRlci5cclxuICpcclxuICogRm9yIGV4YW1wbGUsIGlmIGEgcHVyZSBibHVlIHBpeGVsIHdpdGggYW4gYWxwaGEgb2YgMC45NSBpcyBtYXNrZWQgd2l0aCBhIHB1cmUgcmVkIHBpeGVsIHdpdGggYW5cclxuICogYWxwaGEgb2YgMC41LCB0aGUgcmVzdWx0aW5nIHBpeGVsIHdpbGwgYmUgcHVyZSBibHVlIHdpdGggYW4gYWxwaGEgb2YgMC40NzUuIE5hdHVyYWxseSwgdGhpcyBtZWFuc1xyXG4gKiB0aGF0IGEgcGl4ZWwgaW4gdGhlIG1hc2sgd2l0aCBhbiBhbHBoYSBvZiAwIHdpbGwgaGlkZSB0aGUgY29ycmVzcG9uZGluZyBwaXhlbCBpbiBhbGwgbWFza2VkIEdhbWUgT2JqZWN0c1xyXG4gKiAgQSBwaXhlbCB3aXRoIGFuIGFscGhhIG9mIDEgaW4gdGhlIG1hc2tlZCBHYW1lIE9iamVjdCB3aWxsIHJlY2VpdmUgdGhlIHNhbWUgYWxwaGEgYXMgdGhlXHJcbiAqIGNvcnJlc3BvbmRpbmcgcGl4ZWwgaW4gdGhlIG1hc2suXHJcbiAqXHJcbiAqIFRoZSBCaXRtYXAgTWFzaydzIGxvY2F0aW9uIG1hdGNoZXMgdGhlIGxvY2F0aW9uIG9mIGl0cyBHYW1lIE9iamVjdCwgbm90IHRoZSBsb2NhdGlvbiBvZiB0aGVcclxuICogbWFza2VkIG9iamVjdHMuIE1vdmluZyBvciB0cmFuc2Zvcm1pbmcgdGhlIHVuZGVybHlpbmcgR2FtZSBPYmplY3Qgd2lsbCBjaGFuZ2UgdGhlIG1hc2tcclxuICogKGFuZCBhZmZlY3QgdGhlIHZpc2liaWxpdHkgb2YgYW55IG1hc2tlZCBvYmplY3RzKSwgd2hlcmVhcyBtb3Zpbmcgb3IgdHJhbnNmb3JtaW5nIGEgbWFza2VkIG9iamVjdFxyXG4gKiB3aWxsIG5vdCBhZmZlY3QgdGhlIG1hc2suXHJcbiAqXHJcbiAqIFRoZSBCaXRtYXAgTWFzayB3aWxsIG5vdCByZW5kZXIgaXRzIEdhbWUgT2JqZWN0IGJ5IGl0c2VsZi4gSWYgdGhlIEdhbWUgT2JqZWN0IGlzIG5vdCBpbiBhXHJcbiAqIFNjZW5lJ3MgZGlzcGxheSBsaXN0LCBpdCB3aWxsIG9ubHkgYmUgdXNlZCBmb3IgdGhlIG1hc2sgYW5kIGl0cyBmdWxsIHRleHR1cmUgd2lsbCBub3QgYmUgZGlyZWN0bHlcclxuICogdmlzaWJsZS4gQWRkaW5nIHRoZSB1bmRlcmx5aW5nIEdhbWUgT2JqZWN0IHRvIGEgU2NlbmUgd2lsbCBub3QgY2F1c2UgYW55IHByb2JsZW1zIC0gaXQgd2lsbFxyXG4gKiByZW5kZXIgYXMgYSBub3JtYWwgR2FtZSBPYmplY3QgYW5kIHdpbGwgYWxzbyBzZXJ2ZSBhcyBhIG1hc2suXHJcbiAqXHJcbiAqIEBjbGFzcyBCaXRtYXBNYXNrXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuRGlzcGxheS5NYXNrc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB3aGljaCB0aGlzIEJpdG1hcCBNYXNrIHdpbGwgYmUgdXNlZCBpbi5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gcmVuZGVyYWJsZSAtIEEgcmVuZGVyYWJsZSBHYW1lIE9iamVjdCB0aGF0IHVzZXMgYSB0ZXh0dXJlLCBzdWNoIGFzIGEgU3ByaXRlLlxyXG4gKi9cclxudmFyIEJpdG1hcE1hc2sgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gQml0bWFwTWFzayAoc2NlbmUsIHJlbmRlcmFibGUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHJlbmRlcmVyID0gc2NlbmUuc3lzLmdhbWUucmVuZGVyZXI7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIGVpdGhlciB0aGUgQ2FudmFzIG9yIFdlYkdMIFJlbmRlcmVyIHRoYXQgdGhpcyBNYXNrIGlzIHVzaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuTWFza3MuQml0bWFwTWFzayNyZW5kZXJlclxyXG4gICAgICAgICAqIEB0eXBlIHsoUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcnxQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcil9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZW5kZXJhYmxlIEdhbWUgT2JqZWN0IHRoYXQgdXNlcyBhIHRleHR1cmUsIHN1Y2ggYXMgYSBTcHJpdGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5NYXNrcy5CaXRtYXBNYXNrI2JpdG1hcE1hc2tcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5iaXRtYXBNYXNrID0gcmVuZGVyYWJsZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIG1hc2sncyBmcmFtZWJ1ZmZlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5Lk1hc2tzLkJpdG1hcE1hc2sjbWFza1RleHR1cmVcclxuICAgICAgICAgKiBAdHlwZSB7V2ViR0xUZXh0dXJlfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1hc2tUZXh0dXJlID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIG1haW4gZnJhbWVidWZmZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5NYXNrcy5CaXRtYXBNYXNrI21haW5UZXh0dXJlXHJcbiAgICAgICAgICogQHR5cGUge1dlYkdMVGV4dHVyZX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYWluVGV4dHVyZSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhlIEJpdG1hcCBNYXNrIGlzIGRpcnR5IGFuZCBuZWVkcyB0byBiZSB1cGRhdGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuTWFza3MuQml0bWFwTWFzayNkaXJ0eVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGZyYW1lYnVmZmVyIHRvIHdoaWNoIGEgbWFza2VkIEdhbWUgT2JqZWN0IGlzIHJlbmRlcmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuTWFza3MuQml0bWFwTWFzayNtYWluRnJhbWVidWZmZXJcclxuICAgICAgICAgKiBAdHlwZSB7V2ViR0xGcmFtZWJ1ZmZlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1haW5GcmFtZWJ1ZmZlciA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBmcmFtZWJ1ZmZlciB0byB3aGljaCB0aGUgQml0bWFwIE1hc2sncyBtYXNraW5nIEdhbWUgT2JqZWN0IGlzIHJlbmRlcmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuTWFza3MuQml0bWFwTWFzayNtYXNrRnJhbWVidWZmZXJcclxuICAgICAgICAgKiBAdHlwZSB7V2ViR0xGcmFtZWJ1ZmZlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1hc2tGcmFtZWJ1ZmZlciA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBwcmV2aW91cyBmcmFtZWJ1ZmZlciBzZXQgaW4gdGhlIHJlbmRlcmVyIGJlZm9yZSB0aGlzIG9uZSB3YXMgZW5hYmxlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5Lk1hc2tzLkJpdG1hcE1hc2sjcHJldkZyYW1lYnVmZmVyXHJcbiAgICAgICAgICogQHR5cGUge1dlYkdMRnJhbWVidWZmZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucHJldkZyYW1lYnVmZmVyID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0byBpbnZlcnQgdGhlIG1hc2tzIGFscGhhLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogSWYgYHRydWVgLCB0aGUgYWxwaGEgb2YgdGhlIG1hc2tpbmcgcGl4ZWwgd2lsbCBiZSBpbnZlcnRlZCBiZWZvcmUgaXQncyBtdWx0aXBsaWVkIHdpdGggdGhlIG1hc2tlZCBwaXhlbC4gRXNzZW50aWFsbHksIHRoaXMgbWVhbnMgdGhhdCBhIG1hc2tlZCBhcmVhIHdpbGwgYmUgdmlzaWJsZSBvbmx5IGlmIHRoZSBjb3JyZXNwb25kaW5nIGFyZWEgaW4gdGhlIG1hc2sgaXMgaW52aXNpYmxlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuTWFza3MuQml0bWFwTWFzayNpbnZlcnRBbHBoYVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEuMlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW52ZXJ0QWxwaGEgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXMgdGhpcyBtYXNrIGEgc3RlbmNpbCBtYXNrP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuTWFza3MuQml0bWFwTWFzayNpc1N0ZW5jaWxcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc1N0ZW5jaWwgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLmdsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHdpZHRoID0gcmVuZGVyZXIud2lkdGg7XHJcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSByZW5kZXJlci5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHZhciBwb3QgPSAoKHdpZHRoICYgKHdpZHRoIC0gMSkpID09PSAwICYmIChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09PSAwKTtcclxuICAgICAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgICAgIHZhciB3cmFwID0gcG90ID8gZ2wuUkVQRUFUIDogZ2wuQ0xBTVBfVE9fRURHRTtcclxuICAgICAgICAgICAgdmFyIGZpbHRlciA9IGdsLkxJTkVBUjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubWFpblRleHR1cmUgPSByZW5kZXJlci5jcmVhdGVUZXh0dXJlMkQoMCwgZmlsdGVyLCBmaWx0ZXIsIHdyYXAsIHdyYXAsIGdsLlJHQkEsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgICAgICB0aGlzLm1hc2tUZXh0dXJlID0gcmVuZGVyZXIuY3JlYXRlVGV4dHVyZTJEKDAsIGZpbHRlciwgZmlsdGVyLCB3cmFwLCB3cmFwLCBnbC5SR0JBLCBudWxsLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICAgICAgdGhpcy5tYWluRnJhbWVidWZmZXIgPSByZW5kZXJlci5jcmVhdGVGcmFtZWJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCB0aGlzLm1haW5UZXh0dXJlLCB0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5tYXNrRnJhbWVidWZmZXIgPSByZW5kZXJlci5jcmVhdGVGcmFtZWJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCB0aGlzLm1hc2tUZXh0dXJlLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIHNjZW5lLnN5cy5nYW1lLmV2ZW50cy5vbihHYW1lRXZlbnRzLkNPTlRFWFRfUkVTVE9SRUQsIGZ1bmN0aW9uIChyZW5kZXJlcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gcmVuZGVyZXIud2lkdGg7XHJcbiAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gcmVuZGVyZXIuaGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgdmFyIHBvdCA9ICgod2lkdGggJiAod2lkdGggLSAxKSkgPT09IDAgJiYgKGhlaWdodCAmIChoZWlnaHQgLSAxKSkgPT09IDApO1xyXG4gICAgICAgICAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgICAgICAgICB2YXIgd3JhcCA9IHBvdCA/IGdsLlJFUEVBVCA6IGdsLkNMQU1QX1RPX0VER0U7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmlsdGVyID0gZ2wuTElORUFSO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubWFpblRleHR1cmUgPSByZW5kZXJlci5jcmVhdGVUZXh0dXJlMkQoMCwgZmlsdGVyLCBmaWx0ZXIsIHdyYXAsIHdyYXAsIGdsLlJHQkEsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXNrVGV4dHVyZSA9IHJlbmRlcmVyLmNyZWF0ZVRleHR1cmUyRCgwLCBmaWx0ZXIsIGZpbHRlciwgd3JhcCwgd3JhcCwgZ2wuUkdCQSwgbnVsbCwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1haW5GcmFtZWJ1ZmZlciA9IHJlbmRlcmVyLmNyZWF0ZUZyYW1lYnVmZmVyKHdpZHRoLCBoZWlnaHQsIHRoaXMubWFpblRleHR1cmUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXNrRnJhbWVidWZmZXIgPSByZW5kZXJlci5jcmVhdGVGcmFtZWJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCB0aGlzLm1hc2tUZXh0dXJlLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIH0sIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGEgbmV3IG1hc2tpbmcgR2FtZSBPYmplY3QgZm9yIHRoZSBCaXRtYXAgTWFzay5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5EaXNwbGF5Lk1hc2tzLkJpdG1hcE1hc2sjc2V0Qml0bWFwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSByZW5kZXJhYmxlIC0gQSByZW5kZXJhYmxlIEdhbWUgT2JqZWN0IHRoYXQgdXNlcyBhIHRleHR1cmUsIHN1Y2ggYXMgYSBTcHJpdGUuXHJcbiAgICAgKi9cclxuICAgIHNldEJpdG1hcDogZnVuY3Rpb24gKHJlbmRlcmFibGUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5iaXRtYXBNYXNrID0gcmVuZGVyYWJsZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcmVwYXJlcyB0aGUgV2ViR0wgUmVuZGVyZXIgdG8gcmVuZGVyIGEgR2FtZSBPYmplY3Qgd2l0aCB0aGlzIG1hc2sgYXBwbGllZC5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIHJlbmRlcnMgdGhlIG1hc2tpbmcgR2FtZSBPYmplY3QgdG8gdGhlIG1hc2sgZnJhbWVidWZmZXIgYW5kIHN3aXRjaGVzIHRvIHRoZSBtYWluIGZyYW1lYnVmZmVyIHNvIHRoYXQgdGhlIG1hc2tlZCBHYW1lIE9iamVjdCB3aWxsIGJlIHJlbmRlcmVkIHRvIGl0IGluc3RlYWQgb2YgYmVpbmcgcmVuZGVyZWQgZGlyZWN0bHkgdG8gdGhlIGZyYW1lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRpc3BsYXkuTWFza3MuQml0bWFwTWFzayNwcmVSZW5kZXJXZWJHTFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcnxQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcil9IHJlbmRlcmVyIC0gVGhlIFdlYkdMIFJlbmRlcmVyIHRvIHByZXBhcmUuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBtYXNrZWRPYmplY3QgLSBUaGUgbWFza2VkIEdhbWUgT2JqZWN0IHdoaWNoIHdpbGwgYmUgZHJhd24uXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRvIHJlbmRlciB0by5cclxuICAgICAqL1xyXG4gICAgcHJlUmVuZGVyV2ViR0w6IGZ1bmN0aW9uIChyZW5kZXJlciwgbWFza2VkT2JqZWN0LCBjYW1lcmEpXHJcbiAgICB7XHJcbiAgICAgICAgcmVuZGVyZXIucGlwZWxpbmVzLkJpdG1hcE1hc2tQaXBlbGluZS5iZWdpbk1hc2sodGhpcywgbWFza2VkT2JqZWN0LCBjYW1lcmEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmFsaXplcyByZW5kZXJpbmcgb2YgYSBtYXNrZWQgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyByZXNldHMgdGhlIHByZXZpb3VzbHkgYm91bmQgZnJhbWVidWZmZXIgYW5kIHN3aXRjaGVzIHRoZSBXZWJHTCBSZW5kZXJlciB0byB0aGUgQml0bWFwIE1hc2sgUGlwZWxpbmUsIHdoaWNoIHVzZXMgYSBzcGVjaWFsIGZyYWdtZW50IHNoYWRlciB0byBhcHBseSB0aGUgbWFza2luZyBlZmZlY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5NYXNrcy5CaXRtYXBNYXNrI3Bvc3RSZW5kZXJXZWJHTFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcnxQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcil9IHJlbmRlcmVyIC0gVGhlIFdlYkdMIFJlbmRlcmVyIHRvIGNsZWFuIHVwLlxyXG4gICAgICovXHJcbiAgICBwb3N0UmVuZGVyV2ViR0w6IGZ1bmN0aW9uIChyZW5kZXJlciwgY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHJlbmRlcmVyLnBpcGVsaW5lcy5CaXRtYXBNYXNrUGlwZWxpbmUuZW5kTWFzayh0aGlzLCBjYW1lcmEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaXMgYSBOT09QIG1ldGhvZC4gQml0bWFwIE1hc2tzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBDYW52YXMgUmVuZGVyZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5NYXNrcy5CaXRtYXBNYXNrI3ByZVJlbmRlckNhbnZhc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcnxQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcil9IHJlbmRlcmVyIC0gVGhlIENhbnZhcyBSZW5kZXJlciB3aGljaCB3b3VsZCBiZSByZW5kZXJlZCB0by5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IG1hc2sgLSBUaGUgbWFza2VkIEdhbWUgT2JqZWN0IHdoaWNoIHdvdWxkIGJlIHJlbmRlcmVkLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0byByZW5kZXIgdG8uXHJcbiAgICAgKi9cclxuICAgIHByZVJlbmRlckNhbnZhczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICAvLyBOT09QXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpcyBhIE5PT1AgbWV0aG9kLiBCaXRtYXAgTWFza3MgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIENhbnZhcyBSZW5kZXJlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5EaXNwbGF5Lk1hc2tzLkJpdG1hcE1hc2sjcG9zdFJlbmRlckNhbnZhc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcnxQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcil9IHJlbmRlcmVyIC0gVGhlIENhbnZhcyBSZW5kZXJlciB3aGljaCB3b3VsZCBiZSByZW5kZXJlZCB0by5cclxuICAgICAqL1xyXG4gICAgcG9zdFJlbmRlckNhbnZhczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICAvLyBOT09QXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhpcyBCaXRtYXBNYXNrIGFuZCBudWxscyBhbnkgcmVmZXJlbmNlcyBpdCBob2xkcy5cclxuICAgICAqIFxyXG4gICAgICogTm90ZSB0aGF0IGlmIGEgR2FtZSBPYmplY3QgaXMgY3VycmVudGx5IHVzaW5nIHRoaXMgbWFzayBpdCB3aWxsIF9ub3RfIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHlvdSBoYXZlIGRlc3Ryb3llZCBpdCxcclxuICAgICAqIHNvIGJlIHN1cmUgdG8gY2FsbCBgY2xlYXJNYXNrYCBvbiBhbnkgR2FtZSBPYmplY3QgdXNpbmcgaXQsIGJlZm9yZSBkZXN0cm95aW5nIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRpc3BsYXkuTWFza3MuQml0bWFwTWFzayNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJpdG1hcE1hc2sgPSBudWxsO1xyXG5cclxuICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xyXG5cclxuICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXIuZ2wpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZW5kZXJlci5kZWxldGVUZXh0dXJlKHRoaXMubWFpblRleHR1cmUpO1xyXG4gICAgICAgICAgICByZW5kZXJlci5kZWxldGVUZXh0dXJlKHRoaXMubWFza1RleHR1cmUpO1xyXG4gICAgICAgICAgICByZW5kZXJlci5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLm1haW5GcmFtZWJ1ZmZlcik7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLmRlbGV0ZUZyYW1lYnVmZmVyKHRoaXMubWFza0ZyYW1lYnVmZmVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWFpblRleHR1cmUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubWFza1RleHR1cmUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubWFpbkZyYW1lYnVmZmVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1hc2tGcmFtZWJ1ZmZlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5wcmV2RnJhbWVidWZmZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJpdG1hcE1hc2s7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/mask/BitmapMask.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/mask/GeometryMask.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/display/mask/GeometryMask.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Geometry Mask can be applied to a Game Object to hide any pixels of it which don't intersect\r\n * a visible pixel from the geometry mask. The mask is essentially a clipping path which can only\r\n * make a masked pixel fully visible or fully invisible without changing its alpha (opacity).\r\n *\r\n * A Geometry Mask uses a Graphics Game Object to determine which pixels of the masked Game Object(s)\r\n * should be clipped. For any given point of a masked Game Object's texture, the pixel will only be displayed\r\n * if the Graphics Game Object of the Geometry Mask has a visible pixel at the same position. The color and\r\n * alpha of the pixel from the Geometry Mask do not matter.\r\n *\r\n * The Geometry Mask's location matches the location of its Graphics object, not the location of the masked objects.\r\n * Moving or transforming the underlying Graphics object will change the mask (and affect the visibility\r\n * of any masked objects), whereas moving or transforming a masked object will not affect the mask.\r\n * You can think of the Geometry Mask (or rather, of its Graphics object) as an invisible curtain placed\r\n * in front of all masked objects which has its own visual properties and, naturally, respects the camera's\r\n * visual properties, but isn't affected by and doesn't follow the masked objects by itself.\r\n *\r\n * @class GeometryMask\r\n * @memberof Phaser.Display.Masks\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - This parameter is not used.\r\n * @param {Phaser.GameObjects.Graphics} graphicsGeometry - The Graphics Game Object to use for the Geometry Mask. Doesn't have to be in the Display List.\r\n */\r\nvar GeometryMask = new Class({\r\n\r\n initialize:\r\n\r\n function GeometryMask (scene, graphicsGeometry)\r\n {\r\n /**\r\n * The Graphics object which describes the Geometry Mask.\r\n *\r\n * @name Phaser.Display.Masks.GeometryMask#geometryMask\r\n * @type {Phaser.GameObjects.Graphics}\r\n * @since 3.0.0\r\n */\r\n this.geometryMask = graphicsGeometry;\r\n\r\n /**\r\n * Similar to the BitmapMasks invertAlpha setting this to true will then hide all pixels\r\n * drawn to the Geometry Mask.\r\n *\r\n * @name Phaser.Display.Masks.GeometryMask#invertAlpha\r\n * @type {boolean}\r\n * @since 3.16.0\r\n */\r\n this.invertAlpha = false;\r\n\r\n /**\r\n * Is this mask a stencil mask?\r\n *\r\n * @name Phaser.Display.Masks.GeometryMask#isStencil\r\n * @type {boolean}\r\n * @readonly\r\n * @since 3.17.0\r\n */\r\n this.isStencil = true;\r\n\r\n /**\r\n * The current stencil level.\r\n *\r\n * @name Phaser.Display.Masks.GeometryMask#level\r\n * @type {boolean}\r\n * @private\r\n * @since 3.17.0\r\n */\r\n this.level = 0;\r\n },\r\n\r\n /**\r\n * Sets a new Graphics object for the Geometry Mask.\r\n *\r\n * @method Phaser.Display.Masks.GeometryMask#setShape\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Graphics} graphicsGeometry - The Graphics object which will be used for the Geometry Mask.\r\n * \r\n * @return {this} This Geometry Mask\r\n */\r\n setShape: function (graphicsGeometry)\r\n {\r\n this.geometryMask = graphicsGeometry;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the `invertAlpha` property of this Geometry Mask.\r\n * Inverting the alpha essentially flips the way the mask works.\r\n *\r\n * @method Phaser.Display.Masks.GeometryMask#setInvertAlpha\r\n * @since 3.17.0\r\n *\r\n * @param {boolean} [value=true] - Invert the alpha of this mask?\r\n * \r\n * @return {this} This Geometry Mask\r\n */\r\n setInvertAlpha: function (value)\r\n {\r\n if (value === undefined) { value = true; }\r\n\r\n this.invertAlpha = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Renders the Geometry Mask's underlying Graphics object to the OpenGL stencil buffer and enables the stencil test, which clips rendered pixels according to the mask.\r\n *\r\n * @method Phaser.Display.Masks.GeometryMask#preRenderWebGL\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - The WebGL Renderer instance to draw to.\r\n * @param {Phaser.GameObjects.GameObject} child - The Game Object being rendered.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera the Game Object is being rendered through.\r\n */\r\n preRenderWebGL: function (renderer, child, camera)\r\n {\r\n var gl = renderer.gl;\r\n\r\n // Force flushing before drawing to stencil buffer\r\n renderer.flush();\r\n\r\n if (renderer.maskStack.length === 0)\r\n {\r\n gl.enable(gl.STENCIL_TEST);\r\n gl.clear(gl.STENCIL_BUFFER_BIT);\r\n\r\n renderer.maskCount = 0;\r\n }\r\n\r\n if (renderer.currentCameraMask.mask !== this)\r\n {\r\n renderer.currentMask.mask = this;\r\n }\r\n\r\n renderer.maskStack.push({ mask: this, camera: camera });\r\n\r\n this.applyStencil(renderer, camera, true);\r\n\r\n renderer.maskCount++;\r\n },\r\n\r\n /**\r\n * Applies the current stencil mask to the renderer.\r\n *\r\n * @method Phaser.Display.Masks.GeometryMask#applyStencil\r\n * @since 3.17.0\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - The WebGL Renderer instance to draw to.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera the Game Object is being rendered through.\r\n * @param {boolean} inc - Is this an INCR stencil or a DECR stencil?\r\n */\r\n applyStencil: function (renderer, camera, inc)\r\n {\r\n var gl = renderer.gl;\r\n var geometryMask = this.geometryMask;\r\n var level = renderer.maskCount;\r\n\r\n gl.colorMask(false, false, false, false);\r\n\r\n if (inc)\r\n {\r\n gl.stencilFunc(gl.EQUAL, level, 0xFF);\r\n gl.stencilOp(gl.KEEP, gl.KEEP, gl.INCR);\r\n }\r\n else\r\n {\r\n gl.stencilFunc(gl.EQUAL, level + 1, 0xFF);\r\n gl.stencilOp(gl.KEEP, gl.KEEP, gl.DECR);\r\n }\r\n\r\n // Write stencil buffer\r\n geometryMask.renderWebGL(renderer, geometryMask, 0, camera);\r\n\r\n renderer.flush();\r\n\r\n gl.colorMask(true, true, true, true);\r\n gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);\r\n\r\n if (inc)\r\n {\r\n if (this.invertAlpha)\r\n {\r\n gl.stencilFunc(gl.NOTEQUAL, level + 1, 0xFF);\r\n }\r\n else\r\n {\r\n gl.stencilFunc(gl.EQUAL, level + 1, 0xFF);\r\n }\r\n }\r\n else if (this.invertAlpha)\r\n {\r\n gl.stencilFunc(gl.NOTEQUAL, level, 0xFF);\r\n }\r\n else\r\n {\r\n gl.stencilFunc(gl.EQUAL, level, 0xFF);\r\n }\r\n },\r\n\r\n /**\r\n * Flushes all rendered pixels and disables the stencil test of a WebGL context, thus disabling the mask for it.\r\n *\r\n * @method Phaser.Display.Masks.GeometryMask#postRenderWebGL\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - The WebGL Renderer instance to draw flush.\r\n */\r\n postRenderWebGL: function (renderer)\r\n {\r\n var gl = renderer.gl;\r\n\r\n renderer.maskStack.pop();\r\n\r\n renderer.maskCount--;\r\n\r\n if (renderer.maskStack.length === 0)\r\n {\r\n // If this is the only mask in the stack, flush and disable\r\n renderer.flush();\r\n\r\n renderer.currentMask.mask = null;\r\n\r\n gl.disable(gl.STENCIL_TEST);\r\n }\r\n else\r\n {\r\n // Force flush before disabling stencil test\r\n renderer.flush();\r\n\r\n var prev = renderer.maskStack[renderer.maskStack.length - 1];\r\n\r\n prev.mask.applyStencil(renderer, prev.camera, false);\r\n\r\n if (renderer.currentCameraMask.mask !== prev.mask)\r\n {\r\n renderer.currentMask.mask = prev.mask;\r\n renderer.currentMask.camera = prev.camera;\r\n }\r\n else\r\n {\r\n renderer.currentMask.mask = null;\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Sets the clipping path of a 2D canvas context to the Geometry Mask's underlying Graphics object.\r\n *\r\n * @method Phaser.Display.Masks.GeometryMask#preRenderCanvas\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - The Canvas Renderer instance to set the clipping path on.\r\n * @param {Phaser.GameObjects.GameObject} mask - The Game Object being rendered.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The camera the Game Object is being rendered through.\r\n */\r\n preRenderCanvas: function (renderer, mask, camera)\r\n {\r\n var geometryMask = this.geometryMask;\r\n\r\n renderer.currentContext.save();\r\n\r\n geometryMask.renderCanvas(renderer, geometryMask, 0, camera, null, null, true);\r\n\r\n renderer.currentContext.clip();\r\n },\r\n\r\n /**\r\n * Restore the canvas context's previous clipping path, thus turning off the mask for it.\r\n *\r\n * @method Phaser.Display.Masks.GeometryMask#postRenderCanvas\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - The Canvas Renderer instance being restored.\r\n */\r\n postRenderCanvas: function (renderer)\r\n {\r\n renderer.currentContext.restore();\r\n },\r\n\r\n /**\r\n * Destroys this GeometryMask and nulls any references it holds.\r\n *\r\n * Note that if a Game Object is currently using this mask it will _not_ automatically detect you have destroyed it,\r\n * so be sure to call `clearMask` on any Game Object using it, before destroying it.\r\n *\r\n * @method Phaser.Display.Masks.GeometryMask#destroy\r\n * @since 3.7.0\r\n */\r\n destroy: function ()\r\n {\r\n this.geometryMask = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = GeometryMask;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L21hc2svR2VvbWV0cnlNYXNrLmpzPzYyOTAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyw0QkFBNEI7QUFDdkM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDRCQUE0QjtBQUMzQztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxjQUFjOztBQUVoRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQ0FBb0M7QUFDbkQsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyw2QkFBNkI7O0FBRTlEOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9DQUFvQztBQUNuRCxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQ0FBb0M7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHNDQUFzQztBQUNyRCxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLDhCQUE4QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxzQ0FBc0M7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L21hc2svR2VvbWV0cnlNYXNrLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBHZW9tZXRyeSBNYXNrIGNhbiBiZSBhcHBsaWVkIHRvIGEgR2FtZSBPYmplY3QgdG8gaGlkZSBhbnkgcGl4ZWxzIG9mIGl0IHdoaWNoIGRvbid0IGludGVyc2VjdFxyXG4gKiBhIHZpc2libGUgcGl4ZWwgZnJvbSB0aGUgZ2VvbWV0cnkgbWFzay4gVGhlIG1hc2sgaXMgZXNzZW50aWFsbHkgYSBjbGlwcGluZyBwYXRoIHdoaWNoIGNhbiBvbmx5XHJcbiAqIG1ha2UgYSBtYXNrZWQgcGl4ZWwgZnVsbHkgdmlzaWJsZSBvciBmdWxseSBpbnZpc2libGUgd2l0aG91dCBjaGFuZ2luZyBpdHMgYWxwaGEgKG9wYWNpdHkpLlxyXG4gKlxyXG4gKiBBIEdlb21ldHJ5IE1hc2sgdXNlcyBhIEdyYXBoaWNzIEdhbWUgT2JqZWN0IHRvIGRldGVybWluZSB3aGljaCBwaXhlbHMgb2YgdGhlIG1hc2tlZCBHYW1lIE9iamVjdChzKVxyXG4gKiBzaG91bGQgYmUgY2xpcHBlZC4gRm9yIGFueSBnaXZlbiBwb2ludCBvZiBhIG1hc2tlZCBHYW1lIE9iamVjdCdzIHRleHR1cmUsIHRoZSBwaXhlbCB3aWxsIG9ubHkgYmUgZGlzcGxheWVkXHJcbiAqIGlmIHRoZSBHcmFwaGljcyBHYW1lIE9iamVjdCBvZiB0aGUgR2VvbWV0cnkgTWFzayBoYXMgYSB2aXNpYmxlIHBpeGVsIGF0IHRoZSBzYW1lIHBvc2l0aW9uLiBUaGUgY29sb3IgYW5kXHJcbiAqIGFscGhhIG9mIHRoZSBwaXhlbCBmcm9tIHRoZSBHZW9tZXRyeSBNYXNrIGRvIG5vdCBtYXR0ZXIuXHJcbiAqXHJcbiAqIFRoZSBHZW9tZXRyeSBNYXNrJ3MgbG9jYXRpb24gbWF0Y2hlcyB0aGUgbG9jYXRpb24gb2YgaXRzIEdyYXBoaWNzIG9iamVjdCwgbm90IHRoZSBsb2NhdGlvbiBvZiB0aGUgbWFza2VkIG9iamVjdHMuXHJcbiAqIE1vdmluZyBvciB0cmFuc2Zvcm1pbmcgdGhlIHVuZGVybHlpbmcgR3JhcGhpY3Mgb2JqZWN0IHdpbGwgY2hhbmdlIHRoZSBtYXNrIChhbmQgYWZmZWN0IHRoZSB2aXNpYmlsaXR5XHJcbiAqIG9mIGFueSBtYXNrZWQgb2JqZWN0cyksIHdoZXJlYXMgbW92aW5nIG9yIHRyYW5zZm9ybWluZyBhIG1hc2tlZCBvYmplY3Qgd2lsbCBub3QgYWZmZWN0IHRoZSBtYXNrLlxyXG4gKiBZb3UgY2FuIHRoaW5rIG9mIHRoZSBHZW9tZXRyeSBNYXNrIChvciByYXRoZXIsIG9mIGl0cyBHcmFwaGljcyBvYmplY3QpIGFzIGFuIGludmlzaWJsZSBjdXJ0YWluIHBsYWNlZFxyXG4gKiBpbiBmcm9udCBvZiBhbGwgbWFza2VkIG9iamVjdHMgd2hpY2ggaGFzIGl0cyBvd24gdmlzdWFsIHByb3BlcnRpZXMgYW5kLCBuYXR1cmFsbHksIHJlc3BlY3RzIHRoZSBjYW1lcmEnc1xyXG4gKiB2aXN1YWwgcHJvcGVydGllcywgYnV0IGlzbid0IGFmZmVjdGVkIGJ5IGFuZCBkb2Vzbid0IGZvbGxvdyB0aGUgbWFza2VkIG9iamVjdHMgYnkgaXRzZWxmLlxyXG4gKlxyXG4gKiBAY2xhc3MgR2VvbWV0cnlNYXNrXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuRGlzcGxheS5NYXNrc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gZ3JhcGhpY3NHZW9tZXRyeSAtIFRoZSBHcmFwaGljcyBHYW1lIE9iamVjdCB0byB1c2UgZm9yIHRoZSBHZW9tZXRyeSBNYXNrLiBEb2Vzbid0IGhhdmUgdG8gYmUgaW4gdGhlIERpc3BsYXkgTGlzdC5cclxuICovXHJcbnZhciBHZW9tZXRyeU1hc2sgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gR2VvbWV0cnlNYXNrIChzY2VuZSwgZ3JhcGhpY3NHZW9tZXRyeSlcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgR3JhcGhpY3Mgb2JqZWN0IHdoaWNoIGRlc2NyaWJlcyB0aGUgR2VvbWV0cnkgTWFzay5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5EaXNwbGF5Lk1hc2tzLkdlb21ldHJ5TWFzayNnZW9tZXRyeU1hc2tcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZ2VvbWV0cnlNYXNrID0gZ3JhcGhpY3NHZW9tZXRyeTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2ltaWxhciB0byB0aGUgQml0bWFwTWFza3MgaW52ZXJ0QWxwaGEgc2V0dGluZyB0aGlzIHRvIHRydWUgd2lsbCB0aGVuIGhpZGUgYWxsIHBpeGVsc1xyXG4gICAgICAgICAqIGRyYXduIHRvIHRoZSBHZW9tZXRyeSBNYXNrLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuTWFza3MuR2VvbWV0cnlNYXNrI2ludmVydEFscGhhXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW52ZXJ0QWxwaGEgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXMgdGhpcyBtYXNrIGEgc3RlbmNpbCBtYXNrP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuTWFza3MuR2VvbWV0cnlNYXNrI2lzU3RlbmNpbFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlzU3RlbmNpbCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjdXJyZW50IHN0ZW5jaWwgbGV2ZWwuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5NYXNrcy5HZW9tZXRyeU1hc2sjbGV2ZWxcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxldmVsID0gMDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGEgbmV3IEdyYXBoaWNzIG9iamVjdCBmb3IgdGhlIEdlb21ldHJ5IE1hc2suXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5NYXNrcy5HZW9tZXRyeU1hc2sjc2V0U2hhcGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBncmFwaGljc0dlb21ldHJ5IC0gVGhlIEdyYXBoaWNzIG9iamVjdCB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBHZW9tZXRyeSBNYXNrLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdlb21ldHJ5IE1hc2tcclxuICAgICAqL1xyXG4gICAgc2V0U2hhcGU6IGZ1bmN0aW9uIChncmFwaGljc0dlb21ldHJ5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZ2VvbWV0cnlNYXNrID0gZ3JhcGhpY3NHZW9tZXRyeTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYGludmVydEFscGhhYCBwcm9wZXJ0eSBvZiB0aGlzIEdlb21ldHJ5IE1hc2suXHJcbiAgICAgKiBJbnZlcnRpbmcgdGhlIGFscGhhIGVzc2VudGlhbGx5IGZsaXBzIHRoZSB3YXkgdGhlIG1hc2sgd29ya3MuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5NYXNrcy5HZW9tZXRyeU1hc2sjc2V0SW52ZXJ0QWxwaGFcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt2YWx1ZT10cnVlXSAtIEludmVydCB0aGUgYWxwaGEgb2YgdGhpcyBtYXNrP1xyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdlb21ldHJ5IE1hc2tcclxuICAgICAqL1xyXG4gICAgc2V0SW52ZXJ0QWxwaGE6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdGhpcy5pbnZlcnRBbHBoYSA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW5kZXJzIHRoZSBHZW9tZXRyeSBNYXNrJ3MgdW5kZXJseWluZyBHcmFwaGljcyBvYmplY3QgdG8gdGhlIE9wZW5HTCBzdGVuY2lsIGJ1ZmZlciBhbmQgZW5hYmxlcyB0aGUgc3RlbmNpbCB0ZXN0LCB3aGljaCBjbGlwcyByZW5kZXJlZCBwaXhlbHMgYWNjb3JkaW5nIHRvIHRoZSBtYXNrLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRpc3BsYXkuTWFza3MuR2VvbWV0cnlNYXNrI3ByZVJlbmRlcldlYkdMXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIFRoZSBXZWJHTCBSZW5kZXJlciBpbnN0YW5jZSB0byBkcmF3IHRvLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gY2hpbGQgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgY2FtZXJhIHRoZSBHYW1lIE9iamVjdCBpcyBiZWluZyByZW5kZXJlZCB0aHJvdWdoLlxyXG4gICAgICovXHJcbiAgICBwcmVSZW5kZXJXZWJHTDogZnVuY3Rpb24gKHJlbmRlcmVyLCBjaGlsZCwgY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICAvLyAgRm9yY2UgZmx1c2hpbmcgYmVmb3JlIGRyYXdpbmcgdG8gc3RlbmNpbCBidWZmZXJcclxuICAgICAgICByZW5kZXJlci5mbHVzaCgpO1xyXG5cclxuICAgICAgICBpZiAocmVuZGVyZXIubWFza1N0YWNrLmxlbmd0aCA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xyXG4gICAgICAgICAgICBnbC5jbGVhcihnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpO1xyXG5cclxuICAgICAgICAgICAgcmVuZGVyZXIubWFza0NvdW50ID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZW5kZXJlci5jdXJyZW50Q2FtZXJhTWFzay5tYXNrICE9PSB0aGlzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmVuZGVyZXIuY3VycmVudE1hc2subWFzayA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW5kZXJlci5tYXNrU3RhY2sucHVzaCh7IG1hc2s6IHRoaXMsIGNhbWVyYTogY2FtZXJhIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmFwcGx5U3RlbmNpbChyZW5kZXJlciwgY2FtZXJhLCB0cnVlKTtcclxuXHJcbiAgICAgICAgcmVuZGVyZXIubWFza0NvdW50Kys7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbGllcyB0aGUgY3VycmVudCBzdGVuY2lsIG1hc2sgdG8gdGhlIHJlbmRlcmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRpc3BsYXkuTWFza3MuR2VvbWV0cnlNYXNrI2FwcGx5U3RlbmNpbFxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXJ9IHJlbmRlcmVyIC0gVGhlIFdlYkdMIFJlbmRlcmVyIGluc3RhbmNlIHRvIGRyYXcgdG8uXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgY2FtZXJhIHRoZSBHYW1lIE9iamVjdCBpcyBiZWluZyByZW5kZXJlZCB0aHJvdWdoLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBpbmMgLSBJcyB0aGlzIGFuIElOQ1Igc3RlbmNpbCBvciBhIERFQ1Igc3RlbmNpbD9cclxuICAgICAqL1xyXG4gICAgYXBwbHlTdGVuY2lsOiBmdW5jdGlvbiAocmVuZGVyZXIsIGNhbWVyYSwgaW5jKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIHZhciBnZW9tZXRyeU1hc2sgPSB0aGlzLmdlb21ldHJ5TWFzaztcclxuICAgICAgICB2YXIgbGV2ZWwgPSByZW5kZXJlci5tYXNrQ291bnQ7XHJcblxyXG4gICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIGlmIChpbmMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgbGV2ZWwsIDB4RkYpO1xyXG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCwgZ2wuS0VFUCwgZ2wuSU5DUik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCBsZXZlbCArIDEsIDB4RkYpO1xyXG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCwgZ2wuS0VFUCwgZ2wuREVDUik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgV3JpdGUgc3RlbmNpbCBidWZmZXJcclxuICAgICAgICBnZW9tZXRyeU1hc2sucmVuZGVyV2ViR0wocmVuZGVyZXIsIGdlb21ldHJ5TWFzaywgMCwgY2FtZXJhKTtcclxuXHJcbiAgICAgICAgcmVuZGVyZXIuZmx1c2goKTtcclxuXHJcbiAgICAgICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xyXG4gICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLCBnbC5LRUVQLCBnbC5LRUVQKTtcclxuXHJcbiAgICAgICAgaWYgKGluYylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmludmVydEFscGhhKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5OT1RFUVVBTCwgbGV2ZWwgKyAxLCAweEZGKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCBsZXZlbCArIDEsIDB4RkYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuaW52ZXJ0QWxwaGEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5OT1RFUVVBTCwgbGV2ZWwsIDB4RkYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgbGV2ZWwsIDB4RkYpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGbHVzaGVzIGFsbCByZW5kZXJlZCBwaXhlbHMgYW5kIGRpc2FibGVzIHRoZSBzdGVuY2lsIHRlc3Qgb2YgYSBXZWJHTCBjb250ZXh0LCB0aHVzIGRpc2FibGluZyB0aGUgbWFzayBmb3IgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5NYXNrcy5HZW9tZXRyeU1hc2sjcG9zdFJlbmRlcldlYkdMXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIFRoZSBXZWJHTCBSZW5kZXJlciBpbnN0YW5jZSB0byBkcmF3IGZsdXNoLlxyXG4gICAgICovXHJcbiAgICBwb3N0UmVuZGVyV2ViR0w6IGZ1bmN0aW9uIChyZW5kZXJlcilcclxuICAgIHtcclxuICAgICAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcclxuXHJcbiAgICAgICAgcmVuZGVyZXIubWFza1N0YWNrLnBvcCgpO1xyXG5cclxuICAgICAgICByZW5kZXJlci5tYXNrQ291bnQtLTtcclxuXHJcbiAgICAgICAgaWYgKHJlbmRlcmVyLm1hc2tTdGFjay5sZW5ndGggPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgSWYgdGhpcyBpcyB0aGUgb25seSBtYXNrIGluIHRoZSBzdGFjaywgZmx1c2ggYW5kIGRpc2FibGVcclxuICAgICAgICAgICAgcmVuZGVyZXIuZmx1c2goKTtcclxuXHJcbiAgICAgICAgICAgIHJlbmRlcmVyLmN1cnJlbnRNYXNrLm1hc2sgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgRm9yY2UgZmx1c2ggYmVmb3JlIGRpc2FibGluZyBzdGVuY2lsIHRlc3RcclxuICAgICAgICAgICAgcmVuZGVyZXIuZmx1c2goKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwcmV2ID0gcmVuZGVyZXIubWFza1N0YWNrW3JlbmRlcmVyLm1hc2tTdGFjay5sZW5ndGggLSAxXTtcclxuXHJcbiAgICAgICAgICAgIHByZXYubWFzay5hcHBseVN0ZW5jaWwocmVuZGVyZXIsIHByZXYuY2FtZXJhLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIuY3VycmVudENhbWVyYU1hc2subWFzayAhPT0gcHJldi5tYXNrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZW5kZXJlci5jdXJyZW50TWFzay5tYXNrID0gcHJldi5tYXNrO1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyZXIuY3VycmVudE1hc2suY2FtZXJhID0gcHJldi5jYW1lcmE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZW5kZXJlci5jdXJyZW50TWFzay5tYXNrID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBjbGlwcGluZyBwYXRoIG9mIGEgMkQgY2FudmFzIGNvbnRleHQgdG8gdGhlIEdlb21ldHJ5IE1hc2sncyB1bmRlcmx5aW5nIEdyYXBoaWNzIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5EaXNwbGF5Lk1hc2tzLkdlb21ldHJ5TWFzayNwcmVSZW5kZXJDYW52YXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBUaGUgQ2FudmFzIFJlbmRlcmVyIGluc3RhbmNlIHRvIHNldCB0aGUgY2xpcHBpbmcgcGF0aCBvbi5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IG1hc2sgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgY2FtZXJhIHRoZSBHYW1lIE9iamVjdCBpcyBiZWluZyByZW5kZXJlZCB0aHJvdWdoLlxyXG4gICAgICovXHJcbiAgICBwcmVSZW5kZXJDYW52YXM6IGZ1bmN0aW9uIChyZW5kZXJlciwgbWFzaywgY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBnZW9tZXRyeU1hc2sgPSB0aGlzLmdlb21ldHJ5TWFzaztcclxuXHJcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudENvbnRleHQuc2F2ZSgpO1xyXG5cclxuICAgICAgICBnZW9tZXRyeU1hc2sucmVuZGVyQ2FudmFzKHJlbmRlcmVyLCBnZW9tZXRyeU1hc2ssIDAsIGNhbWVyYSwgbnVsbCwgbnVsbCwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRDb250ZXh0LmNsaXAoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXN0b3JlIHRoZSBjYW52YXMgY29udGV4dCdzIHByZXZpb3VzIGNsaXBwaW5nIHBhdGgsIHRodXMgdHVybmluZyBvZmYgdGhlIG1hc2sgZm9yIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRpc3BsYXkuTWFza3MuR2VvbWV0cnlNYXNrI3Bvc3RSZW5kZXJDYW52YXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBUaGUgQ2FudmFzIFJlbmRlcmVyIGluc3RhbmNlIGJlaW5nIHJlc3RvcmVkLlxyXG4gICAgICovXHJcbiAgICBwb3N0UmVuZGVyQ2FudmFzOiBmdW5jdGlvbiAocmVuZGVyZXIpXHJcbiAgICB7XHJcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudENvbnRleHQucmVzdG9yZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoaXMgR2VvbWV0cnlNYXNrIGFuZCBudWxscyBhbnkgcmVmZXJlbmNlcyBpdCBob2xkcy5cclxuICAgICAqXHJcbiAgICAgKiBOb3RlIHRoYXQgaWYgYSBHYW1lIE9iamVjdCBpcyBjdXJyZW50bHkgdXNpbmcgdGhpcyBtYXNrIGl0IHdpbGwgX25vdF8gYXV0b21hdGljYWxseSBkZXRlY3QgeW91IGhhdmUgZGVzdHJveWVkIGl0LFxyXG4gICAgICogc28gYmUgc3VyZSB0byBjYWxsIGBjbGVhck1hc2tgIG9uIGFueSBHYW1lIE9iamVjdCB1c2luZyBpdCwgYmVmb3JlIGRlc3Ryb3lpbmcgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRGlzcGxheS5NYXNrcy5HZW9tZXRyeU1hc2sjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5nZW9tZXRyeU1hc2sgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdlb21ldHJ5TWFzaztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/mask/GeometryMask.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/mask/index.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/display/mask/index.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Display.Masks\r\n */\r\n\r\nmodule.exports = {\r\n\r\n BitmapMask: __webpack_require__(/*! ./BitmapMask */ \"./node_modules/phaser/src/display/mask/BitmapMask.js\"),\r\n GeometryMask: __webpack_require__(/*! ./GeometryMask */ \"./node_modules/phaser/src/display/mask/GeometryMask.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L21hc2svaW5kZXguanM/YzRiYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLDBFQUFjO0FBQ3RDLGtCQUFrQixtQkFBTyxDQUFDLDhFQUFnQjs7QUFFMUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L21hc2svaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5EaXNwbGF5Lk1hc2tzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQml0bWFwTWFzazogcmVxdWlyZSgnLi9CaXRtYXBNYXNrJyksXHJcbiAgICBHZW9tZXRyeU1hc2s6IHJlcXVpcmUoJy4vR2VvbWV0cnlNYXNrJylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/mask/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/display/shader/BaseShader.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/display/shader/BaseShader.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A BaseShader is a small resource class that contains the data required for a WebGL Shader to be created.\r\n * \r\n * It contains the raw source code to the fragment and vertex shader, as well as an object that defines\r\n * the uniforms the shader requires, if any.\r\n * \r\n * BaseShaders are stored in the Shader Cache, available in a Scene via `this.cache.shaders` and are referenced\r\n * by a unique key-based string. Retrieve them via `this.cache.shaders.get(key)`.\r\n * \r\n * BaseShaders are created automatically by the GLSL File Loader when loading an external shader resource.\r\n * They can also be created at runtime, allowing you to use dynamically generated shader source code.\r\n * \r\n * Default fragment and vertex source is used if not provided in the constructor, setting-up a basic shader,\r\n * suitable for debug rendering.\r\n *\r\n * @class BaseShader\r\n * @memberof Phaser.Display\r\n * @constructor\r\n * @since 3.17.0\r\n *\r\n * @param {string} key - The key of this shader. Must be unique within the shader cache.\r\n * @param {string} [fragmentSrc] - The fragment source for the shader.\r\n * @param {string} [vertexSrc] - The vertex source for the shader.\r\n * @param {any} [uniforms] - Optional object defining the uniforms the shader uses.\r\n */\r\nvar BaseShader = new Class({\r\n\r\n initialize:\r\n\r\n function BaseShader (key, fragmentSrc, vertexSrc, uniforms)\r\n {\r\n if (!fragmentSrc || fragmentSrc === '')\r\n {\r\n fragmentSrc = [\r\n 'precision mediump float;',\r\n\r\n 'uniform vec2 resolution;',\r\n\r\n 'varying vec2 fragCoord;',\r\n\r\n 'void main () {',\r\n ' vec2 uv = fragCoord / resolution.xy;',\r\n ' gl_FragColor = vec4(uv.xyx, 1.0);',\r\n '}'\r\n ].join('\\n');\r\n }\r\n\r\n if (!vertexSrc || vertexSrc === '')\r\n {\r\n vertexSrc = [\r\n 'precision mediump float;',\r\n\r\n 'uniform mat4 uProjectionMatrix;',\r\n 'uniform mat4 uViewMatrix;',\r\n 'uniform vec2 uResolution;',\r\n\r\n 'attribute vec2 inPosition;',\r\n\r\n 'varying vec2 fragCoord;',\r\n\r\n 'void main () {',\r\n 'gl_Position = uProjectionMatrix * uViewMatrix * vec4(inPosition, 1.0, 1.0);',\r\n 'fragCoord = vec2(inPosition.x, uResolution.y - inPosition.y);',\r\n '}'\r\n ].join('\\n');\r\n }\r\n\r\n if (uniforms === undefined) { uniforms = null; }\r\n\r\n /**\r\n * The key of this shader, unique within the shader cache of this Phaser game instance.\r\n *\r\n * @name Phaser.Display.BaseShader#key\r\n * @type {string}\r\n * @since 3.17.0\r\n */\r\n this.key = key;\r\n\r\n /**\r\n * The source code, as a string, of the fragment shader being used.\r\n *\r\n * @name Phaser.Display.BaseShader#fragmentSrc\r\n * @type {string}\r\n * @since 3.17.0\r\n */\r\n this.fragmentSrc = fragmentSrc;\r\n\r\n /**\r\n * The source code, as a string, of the vertex shader being used.\r\n *\r\n * @name Phaser.Display.BaseShader#vertexSrc\r\n * @type {string}\r\n * @since 3.17.0\r\n */\r\n this.vertexSrc = vertexSrc;\r\n\r\n /**\r\n * The default uniforms for this shader.\r\n *\r\n * @name Phaser.Display.BaseShader#uniforms\r\n * @type {?any}\r\n * @since 3.17.0\r\n */\r\n this.uniforms = uniforms;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = BaseShader;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kaXNwbGF5L3NoYWRlci9CYXNlU2hhZGVyLmpzP2FmODgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsSUFBSTtBQUNmO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qzs7QUFFekMseUNBQXlDOztBQUV6Qyx3Q0FBd0M7O0FBRXhDLCtCQUErQjtBQUMvQix5REFBeUQ7QUFDekQsc0RBQXNEO0FBQ3RELGtCQUFrQjtBQUNsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qzs7QUFFekMsZ0RBQWdEO0FBQ2hELDBDQUEwQztBQUMxQywwQ0FBMEM7O0FBRTFDLDJDQUEyQzs7QUFFM0Msd0NBQXdDOztBQUV4QywrQkFBK0I7QUFDL0IsNEZBQTRGO0FBQzVGLDhFQUE4RTtBQUM5RSxrQkFBa0I7QUFDbEI7QUFDQTs7QUFFQSxxQ0FBcUMsaUJBQWlCOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZGlzcGxheS9zaGFkZXIvQmFzZVNoYWRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgQmFzZVNoYWRlciBpcyBhIHNtYWxsIHJlc291cmNlIGNsYXNzIHRoYXQgY29udGFpbnMgdGhlIGRhdGEgcmVxdWlyZWQgZm9yIGEgV2ViR0wgU2hhZGVyIHRvIGJlIGNyZWF0ZWQuXHJcbiAqIFxyXG4gKiBJdCBjb250YWlucyB0aGUgcmF3IHNvdXJjZSBjb2RlIHRvIHRoZSBmcmFnbWVudCBhbmQgdmVydGV4IHNoYWRlciwgYXMgd2VsbCBhcyBhbiBvYmplY3QgdGhhdCBkZWZpbmVzXHJcbiAqIHRoZSB1bmlmb3JtcyB0aGUgc2hhZGVyIHJlcXVpcmVzLCBpZiBhbnkuXHJcbiAqIFxyXG4gKiBCYXNlU2hhZGVycyBhcmUgc3RvcmVkIGluIHRoZSBTaGFkZXIgQ2FjaGUsIGF2YWlsYWJsZSBpbiBhIFNjZW5lIHZpYSBgdGhpcy5jYWNoZS5zaGFkZXJzYCBhbmQgYXJlIHJlZmVyZW5jZWRcclxuICogYnkgYSB1bmlxdWUga2V5LWJhc2VkIHN0cmluZy4gUmV0cmlldmUgdGhlbSB2aWEgYHRoaXMuY2FjaGUuc2hhZGVycy5nZXQoa2V5KWAuXHJcbiAqIFxyXG4gKiBCYXNlU2hhZGVycyBhcmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBHTFNMIEZpbGUgTG9hZGVyIHdoZW4gbG9hZGluZyBhbiBleHRlcm5hbCBzaGFkZXIgcmVzb3VyY2UuXHJcbiAqIFRoZXkgY2FuIGFsc28gYmUgY3JlYXRlZCBhdCBydW50aW1lLCBhbGxvd2luZyB5b3UgdG8gdXNlIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBzaGFkZXIgc291cmNlIGNvZGUuXHJcbiAqIFxyXG4gKiBEZWZhdWx0IGZyYWdtZW50IGFuZCB2ZXJ0ZXggc291cmNlIGlzIHVzZWQgaWYgbm90IHByb3ZpZGVkIGluIHRoZSBjb25zdHJ1Y3Rvciwgc2V0dGluZy11cCBhIGJhc2ljIHNoYWRlcixcclxuICogc3VpdGFibGUgZm9yIGRlYnVnIHJlbmRlcmluZy5cclxuICpcclxuICogQGNsYXNzIEJhc2VTaGFkZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5EaXNwbGF5XHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4xNy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoaXMgc2hhZGVyLiBNdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIHNoYWRlciBjYWNoZS5cclxuICogQHBhcmFtIHtzdHJpbmd9IFtmcmFnbWVudFNyY10gLSBUaGUgZnJhZ21lbnQgc291cmNlIGZvciB0aGUgc2hhZGVyLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3ZlcnRleFNyY10gLSBUaGUgdmVydGV4IHNvdXJjZSBmb3IgdGhlIHNoYWRlci5cclxuICogQHBhcmFtIHthbnl9IFt1bmlmb3Jtc10gLSBPcHRpb25hbCBvYmplY3QgZGVmaW5pbmcgdGhlIHVuaWZvcm1zIHRoZSBzaGFkZXIgdXNlcy5cclxuICovXHJcbnZhciBCYXNlU2hhZGVyID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEJhc2VTaGFkZXIgKGtleSwgZnJhZ21lbnRTcmMsIHZlcnRleFNyYywgdW5pZm9ybXMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCFmcmFnbWVudFNyYyB8fCBmcmFnbWVudFNyYyA9PT0gJycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmcmFnbWVudFNyYyA9IFtcclxuICAgICAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxyXG5cclxuICAgICAgICAgICAgICAgICd1bmlmb3JtIHZlYzIgcmVzb2x1dGlvbjsnLFxyXG5cclxuICAgICAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgZnJhZ0Nvb3JkOycsXHJcblxyXG4gICAgICAgICAgICAgICAgJ3ZvaWQgbWFpbiAoKSB7JyxcclxuICAgICAgICAgICAgICAgICcgICAgdmVjMiB1diA9IGZyYWdDb29yZCAvIHJlc29sdXRpb24ueHk7JyxcclxuICAgICAgICAgICAgICAgICcgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh1di54eXgsIDEuMCk7JyxcclxuICAgICAgICAgICAgICAgICd9J1xyXG4gICAgICAgICAgICBdLmpvaW4oJ1xcbicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF2ZXJ0ZXhTcmMgfHwgdmVydGV4U3JjID09PSAnJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZlcnRleFNyYyA9IFtcclxuICAgICAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxyXG5cclxuICAgICAgICAgICAgICAgICd1bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7JyxcclxuICAgICAgICAgICAgICAgICd1bmlmb3JtIG1hdDQgdVZpZXdNYXRyaXg7JyxcclxuICAgICAgICAgICAgICAgICd1bmlmb3JtIHZlYzIgdVJlc29sdXRpb247JyxcclxuXHJcbiAgICAgICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgaW5Qb3NpdGlvbjsnLFxyXG5cclxuICAgICAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgZnJhZ0Nvb3JkOycsXHJcblxyXG4gICAgICAgICAgICAgICAgJ3ZvaWQgbWFpbiAoKSB7JyxcclxuICAgICAgICAgICAgICAgICdnbF9Qb3NpdGlvbiA9IHVQcm9qZWN0aW9uTWF0cml4ICogdVZpZXdNYXRyaXggKiB2ZWM0KGluUG9zaXRpb24sIDEuMCwgMS4wKTsnLFxyXG4gICAgICAgICAgICAgICAgJ2ZyYWdDb29yZCA9IHZlYzIoaW5Qb3NpdGlvbi54LCB1UmVzb2x1dGlvbi55IC0gaW5Qb3NpdGlvbi55KTsnLFxyXG4gICAgICAgICAgICAgICAgJ30nXHJcbiAgICAgICAgICAgIF0uam9pbignXFxuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodW5pZm9ybXMgPT09IHVuZGVmaW5lZCkgeyB1bmlmb3JtcyA9IG51bGw7IH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGtleSBvZiB0aGlzIHNoYWRlciwgdW5pcXVlIHdpdGhpbiB0aGUgc2hhZGVyIGNhY2hlIG9mIHRoaXMgUGhhc2VyIGdhbWUgaW5zdGFuY2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5CYXNlU2hhZGVyI2tleVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMua2V5ID0ga2V5O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc291cmNlIGNvZGUsIGFzIGEgc3RyaW5nLCBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyIGJlaW5nIHVzZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRGlzcGxheS5CYXNlU2hhZGVyI2ZyYWdtZW50U3JjXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc291cmNlIGNvZGUsIGFzIGEgc3RyaW5nLCBvZiB0aGUgdmVydGV4IHNoYWRlciBiZWluZyB1c2VkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQmFzZVNoYWRlciN2ZXJ0ZXhTcmNcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZlcnRleFNyYyA9IHZlcnRleFNyYztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHQgdW5pZm9ybXMgZm9yIHRoaXMgc2hhZGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRpc3BsYXkuQmFzZVNoYWRlciN1bmlmb3Jtc1xyXG4gICAgICAgICAqIEB0eXBlIHs/YW55fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnVuaWZvcm1zID0gdW5pZm9ybXM7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQmFzZVNoYWRlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/display/shader/BaseShader.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/dom/AddToDOM.js":
/*!*************************************************!*\
!*** ./node_modules/phaser/src/dom/AddToDOM.js ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Adds the given element to the DOM. If a parent is provided the element is added as a child of the parent, providing it was able to access it.\r\n * If no parent was given it falls back to using `document.body`.\r\n *\r\n * @function Phaser.DOM.AddToDOM\r\n * @since 3.0.0\r\n *\r\n * @param {HTMLElement} element - The element to be added to the DOM. Usually a Canvas object.\r\n * @param {(string|HTMLElement)} [parent] - The parent in which to add the element. Can be a string which is passed to `getElementById` or an actual DOM object.\r\n *\r\n * @return {HTMLElement} The element that was added to the DOM.\r\n */\r\nvar AddToDOM = function (element, parent)\r\n{\r\n var target;\r\n\r\n if (parent)\r\n {\r\n if (typeof parent === 'string')\r\n {\r\n // Hopefully an element ID\r\n target = document.getElementById(parent);\r\n }\r\n else if (typeof parent === 'object' && parent.nodeType === 1)\r\n {\r\n // Quick test for a HTMLElement\r\n target = parent;\r\n }\r\n }\r\n else if (element.parentElement)\r\n {\r\n return element;\r\n }\r\n\r\n // Fallback, covers an invalid ID and a non HTMLElement object\r\n if (!target)\r\n {\r\n target = document.body;\r\n }\r\n\r\n target.appendChild(element);\r\n\r\n return element;\r\n};\r\n\r\nmodule.exports = AddToDOM;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vQWRkVG9ET00uanM/MWFkOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkIsV0FBVyxxQkFBcUI7QUFDaEM7QUFDQSxZQUFZLFlBQVk7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vQWRkVG9ET00uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBZGRzIHRoZSBnaXZlbiBlbGVtZW50IHRvIHRoZSBET00uIElmIGEgcGFyZW50IGlzIHByb3ZpZGVkIHRoZSBlbGVtZW50IGlzIGFkZGVkIGFzIGEgY2hpbGQgb2YgdGhlIHBhcmVudCwgcHJvdmlkaW5nIGl0IHdhcyBhYmxlIHRvIGFjY2VzcyBpdC5cclxuICogSWYgbm8gcGFyZW50IHdhcyBnaXZlbiBpdCBmYWxscyBiYWNrIHRvIHVzaW5nIGBkb2N1bWVudC5ib2R5YC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5ET00uQWRkVG9ET01cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBiZSBhZGRlZCB0byB0aGUgRE9NLiBVc3VhbGx5IGEgQ2FudmFzIG9iamVjdC5cclxuICogQHBhcmFtIHsoc3RyaW5nfEhUTUxFbGVtZW50KX0gW3BhcmVudF0gLSBUaGUgcGFyZW50IGluIHdoaWNoIHRvIGFkZCB0aGUgZWxlbWVudC4gQ2FuIGJlIGEgc3RyaW5nIHdoaWNoIGlzIHBhc3NlZCB0byBgZ2V0RWxlbWVudEJ5SWRgIG9yIGFuIGFjdHVhbCBET00gb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH0gVGhlIGVsZW1lbnQgdGhhdCB3YXMgYWRkZWQgdG8gdGhlIERPTS5cclxuICovXHJcbnZhciBBZGRUb0RPTSA9IGZ1bmN0aW9uIChlbGVtZW50LCBwYXJlbnQpXHJcbntcclxuICAgIHZhciB0YXJnZXQ7XHJcblxyXG4gICAgaWYgKHBhcmVudClcclxuICAgIHtcclxuICAgICAgICBpZiAodHlwZW9mIHBhcmVudCA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgSG9wZWZ1bGx5IGFuIGVsZW1lbnQgSURcclxuICAgICAgICAgICAgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocGFyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHBhcmVudCA9PT0gJ29iamVjdCcgJiYgcGFyZW50Lm5vZGVUeXBlID09PSAxKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFF1aWNrIHRlc3QgZm9yIGEgSFRNTEVsZW1lbnRcclxuICAgICAgICAgICAgdGFyZ2V0ID0gcGFyZW50O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGVsZW1lbnQucGFyZW50RWxlbWVudClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgRmFsbGJhY2ssIGNvdmVycyBhbiBpbnZhbGlkIElEIGFuZCBhIG5vbiBIVE1MRWxlbWVudCBvYmplY3RcclxuICAgIGlmICghdGFyZ2V0KVxyXG4gICAge1xyXG4gICAgICAgIHRhcmdldCA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgdGFyZ2V0LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xyXG5cclxuICAgIHJldHVybiBlbGVtZW50O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBZGRUb0RPTTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/dom/AddToDOM.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/dom/CreateDOMContainer.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/dom/CreateDOMContainer.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar AddToDOM = __webpack_require__(/*! ../dom/AddToDOM */ \"./node_modules/phaser/src/dom/AddToDOM.js\");\r\n\r\nvar CreateDOMContainer = function (game)\r\n{\r\n var config = game.config;\r\n\r\n if (!config.parent || !config.domCreateContainer)\r\n {\r\n return;\r\n }\r\n\r\n // DOM Element Container\r\n var div = document.createElement('div');\r\n\r\n div.style.cssText = [\r\n 'display: block;',\r\n 'width: ' + game.scale.width + 'px;',\r\n 'height: ' + game.scale.height + 'px;',\r\n 'padding: 0; margin: 0;',\r\n 'position: absolute;',\r\n 'overflow: hidden;',\r\n 'pointer-events: none;',\r\n 'transform: scale(1);',\r\n 'transform-origin: left top;'\r\n ].join(' ');\r\n\r\n game.domContainer = div;\r\n\r\n AddToDOM(div, config.parent);\r\n};\r\n\r\nmodule.exports = CreateDOMContainer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vQ3JlYXRlRE9NQ29udGFpbmVyLmpzPzJjZWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxrRUFBaUI7O0FBRXhDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCO0FBQ3hCLDJDQUEyQztBQUMzQyw2Q0FBNkM7QUFDN0Msb0JBQW9CLFdBQVc7QUFDL0IsNEJBQTRCO0FBQzVCLDBCQUEwQjtBQUMxQiw4QkFBOEI7QUFDOUIsNkJBQTZCO0FBQzdCLG9DQUFvQztBQUNwQzs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZG9tL0NyZWF0ZURPTUNvbnRhaW5lci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEFkZFRvRE9NID0gcmVxdWlyZSgnLi4vZG9tL0FkZFRvRE9NJyk7XHJcblxyXG52YXIgQ3JlYXRlRE9NQ29udGFpbmVyID0gZnVuY3Rpb24gKGdhbWUpXHJcbntcclxuICAgIHZhciBjb25maWcgPSBnYW1lLmNvbmZpZztcclxuXHJcbiAgICBpZiAoIWNvbmZpZy5wYXJlbnQgfHwgIWNvbmZpZy5kb21DcmVhdGVDb250YWluZXIpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBET00gRWxlbWVudCBDb250YWluZXJcclxuICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuXHJcbiAgICBkaXYuc3R5bGUuY3NzVGV4dCA9IFtcclxuICAgICAgICAnZGlzcGxheTogYmxvY2s7JyxcclxuICAgICAgICAnd2lkdGg6ICcgKyBnYW1lLnNjYWxlLndpZHRoICsgJ3B4OycsXHJcbiAgICAgICAgJ2hlaWdodDogJyArIGdhbWUuc2NhbGUuaGVpZ2h0ICsgJ3B4OycsXHJcbiAgICAgICAgJ3BhZGRpbmc6IDA7IG1hcmdpbjogMDsnLFxyXG4gICAgICAgICdwb3NpdGlvbjogYWJzb2x1dGU7JyxcclxuICAgICAgICAnb3ZlcmZsb3c6IGhpZGRlbjsnLFxyXG4gICAgICAgICdwb2ludGVyLWV2ZW50czogbm9uZTsnLFxyXG4gICAgICAgICd0cmFuc2Zvcm06IHNjYWxlKDEpOycsXHJcbiAgICAgICAgJ3RyYW5zZm9ybS1vcmlnaW46IGxlZnQgdG9wOydcclxuICAgIF0uam9pbignICcpO1xyXG5cclxuICAgIGdhbWUuZG9tQ29udGFpbmVyID0gZGl2O1xyXG5cclxuICAgIEFkZFRvRE9NKGRpdiwgY29uZmlnLnBhcmVudCk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENyZWF0ZURPTUNvbnRhaW5lcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/dom/CreateDOMContainer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/dom/DOMContentLoaded.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/dom/DOMContentLoaded.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar OS = __webpack_require__(/*! ../device/OS */ \"./node_modules/phaser/src/device/OS.js\");\r\n\r\n/**\r\n * @callback ContentLoadedCallback\r\n */\r\n\r\n/**\r\n * Inspects the readyState of the document. If the document is already complete then it invokes the given callback.\r\n * If not complete it sets up several event listeners such as `deviceready`, and once those fire, it invokes the callback.\r\n * Called automatically by the Phaser.Game instance. Should not usually be accessed directly.\r\n *\r\n * @function Phaser.DOM.DOMContentLoaded\r\n * @since 3.0.0\r\n *\r\n * @param {ContentLoadedCallback} callback - The callback to be invoked when the device is ready and the DOM content is loaded.\r\n */\r\nvar DOMContentLoaded = function (callback)\r\n{\r\n if (document.readyState === 'complete' || document.readyState === 'interactive')\r\n {\r\n callback();\r\n\r\n return;\r\n }\r\n\r\n var check = function ()\r\n {\r\n document.removeEventListener('deviceready', check, true);\r\n document.removeEventListener('DOMContentLoaded', check, true);\r\n window.removeEventListener('load', check, true);\r\n\r\n callback();\r\n };\r\n\r\n if (!document.body)\r\n {\r\n window.setTimeout(check, 20);\r\n }\r\n else if (OS.cordova)\r\n {\r\n // Ref. http://docs.phonegap.com/en/3.5.0/cordova_events_events.md.html#deviceready\r\n document.addEventListener('deviceready', check, false);\r\n }\r\n else\r\n {\r\n document.addEventListener('DOMContentLoaded', check, true);\r\n window.addEventListener('load', check, true);\r\n }\r\n};\r\n\r\nmodule.exports = DOMContentLoaded;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vRE9NQ29udGVudExvYWRlZC5qcz9kOTRjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxTQUFTLG1CQUFPLENBQUMsNERBQWM7O0FBRS9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2RvbS9ET01Db250ZW50TG9hZGVkLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgT1MgPSByZXF1aXJlKCcuLi9kZXZpY2UvT1MnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2FsbGJhY2sgQ29udGVudExvYWRlZENhbGxiYWNrXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEluc3BlY3RzIHRoZSByZWFkeVN0YXRlIG9mIHRoZSBkb2N1bWVudC4gSWYgdGhlIGRvY3VtZW50IGlzIGFscmVhZHkgY29tcGxldGUgdGhlbiBpdCBpbnZva2VzIHRoZSBnaXZlbiBjYWxsYmFjay5cclxuICogSWYgbm90IGNvbXBsZXRlIGl0IHNldHMgdXAgc2V2ZXJhbCBldmVudCBsaXN0ZW5lcnMgc3VjaCBhcyBgZGV2aWNlcmVhZHlgLCBhbmQgb25jZSB0aG9zZSBmaXJlLCBpdCBpbnZva2VzIHRoZSBjYWxsYmFjay5cclxuICogQ2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIFBoYXNlci5HYW1lIGluc3RhbmNlLiBTaG91bGQgbm90IHVzdWFsbHkgYmUgYWNjZXNzZWQgZGlyZWN0bHkuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRE9NLkRPTUNvbnRlbnRMb2FkZWRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7Q29udGVudExvYWRlZENhbGxiYWNrfSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBiZSBpbnZva2VkIHdoZW4gdGhlIGRldmljZSBpcyByZWFkeSBhbmQgdGhlIERPTSBjb250ZW50IGlzIGxvYWRlZC5cclxuICovXHJcbnZhciBET01Db250ZW50TG9hZGVkID0gZnVuY3Rpb24gKGNhbGxiYWNrKVxyXG57XHJcbiAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJyB8fCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnKVxyXG4gICAge1xyXG4gICAgICAgIGNhbGxiYWNrKCk7XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgY2hlY2sgPSBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RldmljZXJlYWR5JywgY2hlY2ssIHRydWUpO1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBjaGVjaywgdHJ1ZSk7XHJcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBjaGVjaywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGlmICghZG9jdW1lbnQuYm9keSlcclxuICAgIHtcclxuICAgICAgICB3aW5kb3cuc2V0VGltZW91dChjaGVjaywgMjApO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoT1MuY29yZG92YSlcclxuICAgIHtcclxuICAgICAgICAvLyAgUmVmLiBodHRwOi8vZG9jcy5waG9uZWdhcC5jb20vZW4vMy41LjAvY29yZG92YV9ldmVudHNfZXZlbnRzLm1kLmh0bWwjZGV2aWNlcmVhZHlcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdkZXZpY2VyZWFkeScsIGNoZWNrLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGNoZWNrLCB0cnVlKTtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGNoZWNrLCB0cnVlKTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRE9NQ29udGVudExvYWRlZDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/dom/DOMContentLoaded.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/dom/GetInnerHeight.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/dom/GetInnerHeight.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Attempts to determine the document inner height across iOS and standard devices.\r\n * Based on code by @tylerjpeterson\r\n *\r\n * @function Phaser.DOM.GetInnerHeight\r\n * @since 3.16.0\r\n *\r\n * @param {boolean} iOS - Is this running on iOS?\r\n *\r\n * @return {number} The inner height value.\r\n */\r\nvar GetInnerHeight = function (iOS)\r\n{\r\n\r\n if (!iOS)\r\n {\r\n return window.innerHeight;\r\n }\r\n\r\n var axis = Math.abs(window.orientation);\r\n\r\n var size = { w: 0, h: 0 };\r\n \r\n var ruler = document.createElement('div');\r\n\r\n ruler.setAttribute('style', 'position: fixed; height: 100vh; width: 0; top: 0');\r\n\r\n document.documentElement.appendChild(ruler);\r\n\r\n size.w = (axis === 90) ? ruler.offsetHeight : window.innerWidth;\r\n size.h = (axis === 90) ? window.innerWidth : ruler.offsetHeight;\r\n\r\n document.documentElement.removeChild(ruler);\r\n\r\n ruler = null;\r\n\r\n if (Math.abs(window.orientation) !== 90)\r\n {\r\n return size.h;\r\n }\r\n else\r\n {\r\n return size.w;\r\n }\r\n};\r\n\r\nmodule.exports = GetInnerHeight;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vR2V0SW5uZXJIZWlnaHQuanM/ZGI2OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGdCQUFnQjs7QUFFaEI7O0FBRUEsaURBQWlELGVBQWUsVUFBVTs7QUFFMUU7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vR2V0SW5uZXJIZWlnaHQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBdHRlbXB0cyB0byBkZXRlcm1pbmUgdGhlIGRvY3VtZW50IGlubmVyIGhlaWdodCBhY3Jvc3MgaU9TIGFuZCBzdGFuZGFyZCBkZXZpY2VzLlxyXG4gKiBCYXNlZCBvbiBjb2RlIGJ5IEB0eWxlcmpwZXRlcnNvblxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRPTS5HZXRJbm5lckhlaWdodFxyXG4gKiBAc2luY2UgMy4xNi4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaU9TIC0gSXMgdGhpcyBydW5uaW5nIG9uIGlPUz9cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgaW5uZXIgaGVpZ2h0IHZhbHVlLlxyXG4gKi9cclxudmFyIEdldElubmVySGVpZ2h0ID0gZnVuY3Rpb24gKGlPUylcclxue1xyXG5cclxuICAgIGlmICghaU9TKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGF4aXMgPSBNYXRoLmFicyh3aW5kb3cub3JpZW50YXRpb24pO1xyXG5cclxuICAgIHZhciBzaXplID0geyB3OiAwLCBoOiAwIH07XHJcbiAgICBcclxuICAgIHZhciBydWxlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG5cclxuICAgIHJ1bGVyLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAncG9zaXRpb246IGZpeGVkOyBoZWlnaHQ6IDEwMHZoOyB3aWR0aDogMDsgdG9wOiAwJyk7XHJcblxyXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHJ1bGVyKTtcclxuXHJcbiAgICBzaXplLncgPSAoYXhpcyA9PT0gOTApID8gcnVsZXIub2Zmc2V0SGVpZ2h0IDogd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICBzaXplLmggPSAoYXhpcyA9PT0gOTApID8gd2luZG93LmlubmVyV2lkdGggOiBydWxlci5vZmZzZXRIZWlnaHQ7XHJcblxyXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKHJ1bGVyKTtcclxuXHJcbiAgICBydWxlciA9IG51bGw7XHJcblxyXG4gICAgaWYgKE1hdGguYWJzKHdpbmRvdy5vcmllbnRhdGlvbikgIT09IDkwKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBzaXplLmg7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHNpemUudztcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0SW5uZXJIZWlnaHQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/dom/GetInnerHeight.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/dom/GetScreenOrientation.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/dom/GetScreenOrientation.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CONST = __webpack_require__(/*! ../scale/const */ \"./node_modules/phaser/src/scale/const/index.js\");\r\n\r\n/**\r\n * Attempts to determine the screen orientation using the Orientation API.\r\n *\r\n * @function Phaser.DOM.GetScreenOrientation\r\n * @since 3.16.0\r\n *\r\n * @param {number} width - The width of the viewport.\r\n * @param {number} height - The height of the viewport.\r\n *\r\n * @return {string} The orientation.\r\n */\r\nvar GetScreenOrientation = function (width, height)\r\n{\r\n var screen = window.screen;\r\n var orientation = (screen) ? screen.orientation || screen.mozOrientation || screen.msOrientation : false;\r\n\r\n if (orientation && typeof orientation.type === 'string')\r\n {\r\n // Screen Orientation API specification\r\n return orientation.type;\r\n }\r\n else if (typeof orientation === 'string')\r\n {\r\n // moz / ms-orientation are strings\r\n return orientation;\r\n }\r\n\r\n if (screen)\r\n {\r\n return (screen.height > screen.width) ? CONST.ORIENTATION.PORTRAIT : CONST.ORIENTATION.LANDSCAPE;\r\n }\r\n else if (typeof window.orientation === 'number')\r\n {\r\n // This may change by device based on \"natural\" orientation.\r\n return (window.orientation === 0 || window.orientation === 180) ? CONST.ORIENTATION.PORTRAIT : CONST.ORIENTATION.LANDSCAPE;\r\n }\r\n else if (window.matchMedia)\r\n {\r\n if (window.matchMedia('(orientation: portrait)').matches)\r\n {\r\n return CONST.ORIENTATION.PORTRAIT;\r\n }\r\n else if (window.matchMedia('(orientation: landscape)').matches)\r\n {\r\n return CONST.ORIENTATION.LANDSCAPE;\r\n }\r\n }\r\n \r\n return (height > width) ? CONST.ORIENTATION.PORTRAIT : CONST.ORIENTATION.LANDSCAPE;\r\n};\r\n\r\nmodule.exports = GetScreenOrientation;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vR2V0U2NyZWVuT3JpZW50YXRpb24uanM/MTVmOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHNFQUFnQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2RvbS9HZXRTY3JlZW5PcmllbnRhdGlvbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi4vc2NhbGUvY29uc3QnKTtcclxuXHJcbi8qKlxyXG4gKiBBdHRlbXB0cyB0byBkZXRlcm1pbmUgdGhlIHNjcmVlbiBvcmllbnRhdGlvbiB1c2luZyB0aGUgT3JpZW50YXRpb24gQVBJLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRPTS5HZXRTY3JlZW5PcmllbnRhdGlvblxyXG4gKiBAc2luY2UgMy4xNi4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgdmlld3BvcnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydC5cclxuICpcclxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgb3JpZW50YXRpb24uXHJcbiAqL1xyXG52YXIgR2V0U2NyZWVuT3JpZW50YXRpb24gPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcclxue1xyXG4gICAgdmFyIHNjcmVlbiA9IHdpbmRvdy5zY3JlZW47XHJcbiAgICB2YXIgb3JpZW50YXRpb24gPSAoc2NyZWVuKSA/IHNjcmVlbi5vcmllbnRhdGlvbiB8fCBzY3JlZW4ubW96T3JpZW50YXRpb24gfHwgc2NyZWVuLm1zT3JpZW50YXRpb24gOiBmYWxzZTtcclxuXHJcbiAgICBpZiAob3JpZW50YXRpb24gJiYgdHlwZW9mIG9yaWVudGF0aW9uLnR5cGUgPT09ICdzdHJpbmcnKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBTY3JlZW4gT3JpZW50YXRpb24gQVBJIHNwZWNpZmljYXRpb25cclxuICAgICAgICByZXR1cm4gb3JpZW50YXRpb24udHlwZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBvcmllbnRhdGlvbiA9PT0gJ3N0cmluZycpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIG1veiAvIG1zLW9yaWVudGF0aW9uIGFyZSBzdHJpbmdzXHJcbiAgICAgICAgcmV0dXJuIG9yaWVudGF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzY3JlZW4pXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIChzY3JlZW4uaGVpZ2h0ID4gc2NyZWVuLndpZHRoKSA/IENPTlNULk9SSUVOVEFUSU9OLlBPUlRSQUlUIDogQ09OU1QuT1JJRU5UQVRJT04uTEFORFNDQVBFO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIHdpbmRvdy5vcmllbnRhdGlvbiA9PT0gJ251bWJlcicpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFRoaXMgbWF5IGNoYW5nZSBieSBkZXZpY2UgYmFzZWQgb24gXCJuYXR1cmFsXCIgb3JpZW50YXRpb24uXHJcbiAgICAgICAgcmV0dXJuICh3aW5kb3cub3JpZW50YXRpb24gPT09IDAgfHwgd2luZG93Lm9yaWVudGF0aW9uID09PSAxODApID8gQ09OU1QuT1JJRU5UQVRJT04uUE9SVFJBSVQgOiBDT05TVC5PUklFTlRBVElPTi5MQU5EU0NBUEU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh3aW5kb3cubWF0Y2hNZWRpYSlcclxuICAgIHtcclxuICAgICAgICBpZiAod2luZG93Lm1hdGNoTWVkaWEoJyhvcmllbnRhdGlvbjogcG9ydHJhaXQpJykubWF0Y2hlcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBDT05TVC5PUklFTlRBVElPTi5QT1JUUkFJVDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAod2luZG93Lm1hdGNoTWVkaWEoJyhvcmllbnRhdGlvbjogbGFuZHNjYXBlKScpLm1hdGNoZXMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gQ09OU1QuT1JJRU5UQVRJT04uTEFORFNDQVBFO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgcmV0dXJuIChoZWlnaHQgPiB3aWR0aCkgPyBDT05TVC5PUklFTlRBVElPTi5QT1JUUkFJVCA6IENPTlNULk9SSUVOVEFUSU9OLkxBTkRTQ0FQRTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0U2NyZWVuT3JpZW50YXRpb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/dom/GetScreenOrientation.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/dom/GetTarget.js":
/*!**************************************************!*\
!*** ./node_modules/phaser/src/dom/GetTarget.js ***!
\**************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Attempts to get the target DOM element based on the given value, which can be either\r\n * a string, in which case it will be looked-up by ID, or an element node. If nothing\r\n * can be found it will return a reference to the document.body.\r\n *\r\n * @function Phaser.DOM.GetTarget\r\n * @since 3.16.0\r\n *\r\n * @param {HTMLElement} element - The DOM element to look-up.\r\n */\r\nvar GetTarget = function (element)\r\n{\r\n var target;\r\n\r\n if (element !== '')\r\n {\r\n if (typeof element === 'string')\r\n {\r\n // Hopefully an element ID\r\n target = document.getElementById(element);\r\n }\r\n else if (element && element.nodeType === 1)\r\n {\r\n // Quick test for a HTMLElement\r\n target = element;\r\n }\r\n }\r\n\r\n // Fallback to the document body. Covers an invalid ID and a non HTMLElement object.\r\n if (!target)\r\n {\r\n // Use the full window\r\n target = document.body;\r\n }\r\n\r\n return target;\r\n};\r\n\r\nmodule.exports = GetTarget;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vR2V0VGFyZ2V0LmpzPzM1MTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vR2V0VGFyZ2V0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQXR0ZW1wdHMgdG8gZ2V0IHRoZSB0YXJnZXQgRE9NIGVsZW1lbnQgYmFzZWQgb24gdGhlIGdpdmVuIHZhbHVlLCB3aGljaCBjYW4gYmUgZWl0aGVyXHJcbiAqIGEgc3RyaW5nLCBpbiB3aGljaCBjYXNlIGl0IHdpbGwgYmUgbG9va2VkLXVwIGJ5IElELCBvciBhbiBlbGVtZW50IG5vZGUuIElmIG5vdGhpbmdcclxuICogY2FuIGJlIGZvdW5kIGl0IHdpbGwgcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoZSBkb2N1bWVudC5ib2R5LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkRPTS5HZXRUYXJnZXRcclxuICogQHNpbmNlIDMuMTYuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gVGhlIERPTSBlbGVtZW50IHRvIGxvb2stdXAuXHJcbiAqL1xyXG52YXIgR2V0VGFyZ2V0ID0gZnVuY3Rpb24gKGVsZW1lbnQpXHJcbntcclxuICAgIHZhciB0YXJnZXQ7XHJcblxyXG4gICAgaWYgKGVsZW1lbnQgIT09ICcnKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgSG9wZWZ1bGx5IGFuIGVsZW1lbnQgSURcclxuICAgICAgICAgICAgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlwZSA9PT0gMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBRdWljayB0ZXN0IGZvciBhIEhUTUxFbGVtZW50XHJcbiAgICAgICAgICAgIHRhcmdldCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vICBGYWxsYmFjayB0byB0aGUgZG9jdW1lbnQgYm9keS4gQ292ZXJzIGFuIGludmFsaWQgSUQgYW5kIGEgbm9uIEhUTUxFbGVtZW50IG9iamVjdC5cclxuICAgIGlmICghdGFyZ2V0KVxyXG4gICAge1xyXG4gICAgICAgIC8vICBVc2UgdGhlIGZ1bGwgd2luZG93XHJcbiAgICAgICAgdGFyZ2V0ID0gZG9jdW1lbnQuYm9keTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGFyZ2V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRUYXJnZXQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/dom/GetTarget.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/dom/ParseXML.js":
/*!*************************************************!*\
!*** ./node_modules/phaser/src/dom/ParseXML.js ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Takes the given data string and parses it as XML.\r\n * First tries to use the window.DOMParser and reverts to the Microsoft.XMLDOM if that fails.\r\n * The parsed XML object is returned, or `null` if there was an error while parsing the data.\r\n *\r\n * @function Phaser.DOM.ParseXML\r\n * @since 3.0.0\r\n *\r\n * @param {string} data - The XML source stored in a string.\r\n *\r\n * @return {?(DOMParser|ActiveXObject)} The parsed XML data, or `null` if the data could not be parsed.\r\n */\r\nvar ParseXML = function (data)\r\n{\r\n var xml = '';\r\n\r\n try\r\n {\r\n if (window['DOMParser'])\r\n {\r\n var domparser = new DOMParser();\r\n xml = domparser.parseFromString(data, 'text/xml');\r\n }\r\n else\r\n {\r\n xml = new ActiveXObject('Microsoft.XMLDOM');\r\n xml.loadXML(data);\r\n }\r\n }\r\n catch (e)\r\n {\r\n xml = null;\r\n }\r\n\r\n if (!xml || !xml.documentElement || xml.getElementsByTagName('parsererror').length)\r\n {\r\n return null;\r\n }\r\n else\r\n {\r\n return xml;\r\n }\r\n};\r\n\r\nmodule.exports = ParseXML;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vUGFyc2VYTUwuanM/MWU1OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZG9tL1BhcnNlWE1MLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGFrZXMgdGhlIGdpdmVuIGRhdGEgc3RyaW5nIGFuZCBwYXJzZXMgaXQgYXMgWE1MLlxyXG4gKiBGaXJzdCB0cmllcyB0byB1c2UgdGhlIHdpbmRvdy5ET01QYXJzZXIgYW5kIHJldmVydHMgdG8gdGhlIE1pY3Jvc29mdC5YTUxET00gaWYgdGhhdCBmYWlscy5cclxuICogVGhlIHBhcnNlZCBYTUwgb2JqZWN0IGlzIHJldHVybmVkLCBvciBgbnVsbGAgaWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHBhcnNpbmcgdGhlIGRhdGEuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuRE9NLlBhcnNlWE1MXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0YSAtIFRoZSBYTUwgc291cmNlIHN0b3JlZCBpbiBhIHN0cmluZy5cclxuICpcclxuICogQHJldHVybiB7PyhET01QYXJzZXJ8QWN0aXZlWE9iamVjdCl9IFRoZSBwYXJzZWQgWE1MIGRhdGEsIG9yIGBudWxsYCBpZiB0aGUgZGF0YSBjb3VsZCBub3QgYmUgcGFyc2VkLlxyXG4gKi9cclxudmFyIFBhcnNlWE1MID0gZnVuY3Rpb24gKGRhdGEpXHJcbntcclxuICAgIHZhciB4bWwgPSAnJztcclxuXHJcbiAgICB0cnlcclxuICAgIHtcclxuICAgICAgICBpZiAod2luZG93WydET01QYXJzZXInXSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XHJcbiAgICAgICAgICAgIHhtbCA9IGRvbXBhcnNlci5wYXJzZUZyb21TdHJpbmcoZGF0YSwgJ3RleHQveG1sJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHhtbCA9IG5ldyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MRE9NJyk7XHJcbiAgICAgICAgICAgIHhtbC5sb2FkWE1MKGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChlKVxyXG4gICAge1xyXG4gICAgICAgIHhtbCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF4bWwgfHwgIXhtbC5kb2N1bWVudEVsZW1lbnQgfHwgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYXJzZXJlcnJvcicpLmxlbmd0aClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICByZXR1cm4geG1sO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQYXJzZVhNTDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/dom/ParseXML.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/dom/RemoveFromDOM.js":
/*!******************************************************!*\
!*** ./node_modules/phaser/src/dom/RemoveFromDOM.js ***!
\******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Attempts to remove the element from its parentNode in the DOM.\r\n *\r\n * @function Phaser.DOM.RemoveFromDOM\r\n * @since 3.0.0\r\n *\r\n * @param {HTMLElement} element - The DOM element to remove from its parent node.\r\n */\r\nvar RemoveFromDOM = function (element)\r\n{\r\n if (element.parentNode)\r\n {\r\n element.parentNode.removeChild(element);\r\n }\r\n};\r\n\r\nmodule.exports = RemoveFromDOM;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vUmVtb3ZlRnJvbURPTS5qcz8zYjRjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2RvbS9SZW1vdmVGcm9tRE9NLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQXR0ZW1wdHMgdG8gcmVtb3ZlIHRoZSBlbGVtZW50IGZyb20gaXRzIHBhcmVudE5vZGUgaW4gdGhlIERPTS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5ET00uUmVtb3ZlRnJvbURPTVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFRoZSBET00gZWxlbWVudCB0byByZW1vdmUgZnJvbSBpdHMgcGFyZW50IG5vZGUuXHJcbiAqL1xyXG52YXIgUmVtb3ZlRnJvbURPTSA9IGZ1bmN0aW9uIChlbGVtZW50KVxyXG57XHJcbiAgICBpZiAoZWxlbWVudC5wYXJlbnROb2RlKVxyXG4gICAge1xyXG4gICAgICAgIGVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtZW50KTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmVtb3ZlRnJvbURPTTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/dom/RemoveFromDOM.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/dom/RequestAnimationFrame.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/dom/RequestAnimationFrame.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar NOOP = __webpack_require__(/*! ../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\n/**\r\n * @classdesc\r\n * Abstracts away the use of RAF or setTimeOut for the core game update loop.\r\n * This is invoked automatically by the Phaser.Game instance.\r\n *\r\n * @class RequestAnimationFrame\r\n * @memberof Phaser.DOM\r\n * @constructor\r\n * @since 3.0.0\r\n */\r\nvar RequestAnimationFrame = new Class({\r\n\r\n initialize:\r\n\r\n function RequestAnimationFrame ()\r\n {\r\n /**\r\n * True if RequestAnimationFrame is running, otherwise false.\r\n *\r\n * @name Phaser.DOM.RequestAnimationFrame#isRunning\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.isRunning = false;\r\n\r\n /**\r\n * The callback to be invoked each step.\r\n *\r\n * @name Phaser.DOM.RequestAnimationFrame#callback\r\n * @type {FrameRequestCallback}\r\n * @since 3.0.0\r\n */\r\n this.callback = NOOP;\r\n\r\n /**\r\n * The most recent timestamp. Either a DOMHighResTimeStamp under RAF or `Date.now` under SetTimeout.\r\n *\r\n * @name Phaser.DOM.RequestAnimationFrame#tick\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.tick = 0;\r\n\r\n /**\r\n * True if the step is using setTimeout instead of RAF.\r\n *\r\n * @name Phaser.DOM.RequestAnimationFrame#isSetTimeOut\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.isSetTimeOut = false;\r\n\r\n /**\r\n * The setTimeout or RAF callback ID used when canceling them.\r\n *\r\n * @name Phaser.DOM.RequestAnimationFrame#timeOutID\r\n * @type {?number}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.timeOutID = null;\r\n\r\n /**\r\n * The previous time the step was called.\r\n *\r\n * @name Phaser.DOM.RequestAnimationFrame#lastTime\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.lastTime = 0;\r\n\r\n /**\r\n * The target FPS rate in ms.\r\n * Only used when setTimeout is used instead of RAF.\r\n *\r\n * @name Phaser.DOM.RequestAnimationFrame#target\r\n * @type {number}\r\n * @default 0\r\n * @since 3.21.0\r\n */\r\n this.target = 0;\r\n\r\n var _this = this;\r\n\r\n /**\r\n * The RAF step function.\r\n * Updates the local tick value, invokes the callback and schedules another call to requestAnimationFrame.\r\n *\r\n * @name Phaser.DOM.RequestAnimationFrame#step\r\n * @type {FrameRequestCallback}\r\n * @since 3.0.0\r\n */\r\n this.step = function step ()\r\n {\r\n // Because we cannot trust the time passed to this callback from the browser and need it kept in sync with event times\r\n var timestamp = window.performance.now();\r\n\r\n // DOMHighResTimeStamp\r\n _this.lastTime = _this.tick;\r\n\r\n _this.tick = timestamp;\r\n\r\n _this.callback(timestamp);\r\n\r\n _this.timeOutID = window.requestAnimationFrame(step);\r\n };\r\n\r\n /**\r\n * The SetTimeout step function.\r\n * Updates the local tick value, invokes the callback and schedules another call to setTimeout.\r\n *\r\n * @name Phaser.DOM.RequestAnimationFrame#stepTimeout\r\n * @type {function}\r\n * @since 3.0.0\r\n */\r\n this.stepTimeout = function stepTimeout ()\r\n {\r\n var d = Date.now();\r\n\r\n var delay = Math.min(Math.max(_this.target * 2 + _this.tick - d, 0), _this.target);\r\n\r\n _this.lastTime = _this.tick;\r\n\r\n _this.tick = d;\r\n\r\n _this.callback(d);\r\n\r\n _this.timeOutID = window.setTimeout(stepTimeout, delay);\r\n };\r\n },\r\n\r\n /**\r\n * Starts the requestAnimationFrame or setTimeout process running.\r\n *\r\n * @method Phaser.DOM.RequestAnimationFrame#start\r\n * @since 3.0.0\r\n *\r\n * @param {FrameRequestCallback} callback - The callback to invoke each step.\r\n * @param {boolean} forceSetTimeOut - Should it use SetTimeout, even if RAF is available?\r\n * @param {number} targetFPS - The target fps rate (in ms). Only used when setTimeout is used.\r\n */\r\n start: function (callback, forceSetTimeOut, targetFPS)\r\n {\r\n if (this.isRunning)\r\n {\r\n return;\r\n }\r\n\r\n this.callback = callback;\r\n\r\n this.isSetTimeOut = forceSetTimeOut;\r\n\r\n this.target = targetFPS;\r\n\r\n this.isRunning = true;\r\n\r\n this.timeOutID = (forceSetTimeOut) ? window.setTimeout(this.stepTimeout, 0) : window.requestAnimationFrame(this.step);\r\n },\r\n\r\n /**\r\n * Stops the requestAnimationFrame or setTimeout from running.\r\n *\r\n * @method Phaser.DOM.RequestAnimationFrame#stop\r\n * @since 3.0.0\r\n */\r\n stop: function ()\r\n {\r\n this.isRunning = false;\r\n\r\n if (this.isSetTimeOut)\r\n {\r\n clearTimeout(this.timeOutID);\r\n }\r\n else\r\n {\r\n window.cancelAnimationFrame(this.timeOutID);\r\n }\r\n },\r\n\r\n /**\r\n * Stops the step from running and clears the callback reference.\r\n *\r\n * @method Phaser.DOM.RequestAnimationFrame#destroy\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.stop();\r\n\r\n this.callback = NOOP;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = RequestAnimationFrame;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vUmVxdWVzdEFuaW1hdGlvbkZyYW1lLmpzPzdkMzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsV0FBVyxtQkFBTyxDQUFDLDhEQUFlOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUJBQXFCO0FBQ3BDLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZG9tL1JlcXVlc3RBbmltYXRpb25GcmFtZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIE5PT1AgPSByZXF1aXJlKCcuLi91dGlscy9OT09QJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBYnN0cmFjdHMgYXdheSB0aGUgdXNlIG9mIFJBRiBvciBzZXRUaW1lT3V0IGZvciB0aGUgY29yZSBnYW1lIHVwZGF0ZSBsb29wLlxyXG4gKiBUaGlzIGlzIGludm9rZWQgYXV0b21hdGljYWxseSBieSB0aGUgUGhhc2VyLkdhbWUgaW5zdGFuY2UuXHJcbiAqXHJcbiAqIEBjbGFzcyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcclxuICogQG1lbWJlcm9mIFBoYXNlci5ET01cclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxudmFyIFJlcXVlc3RBbmltYXRpb25GcmFtZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgKClcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUcnVlIGlmIFJlcXVlc3RBbmltYXRpb25GcmFtZSBpcyBydW5uaW5nLCBvdGhlcndpc2UgZmFsc2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRE9NLlJlcXVlc3RBbmltYXRpb25GcmFtZSNpc1J1bm5pbmdcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaXNSdW5uaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjYWxsYmFjayB0byBiZSBpbnZva2VkIGVhY2ggc3RlcC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5ET00uUmVxdWVzdEFuaW1hdGlvbkZyYW1lI2NhbGxiYWNrXHJcbiAgICAgICAgICogQHR5cGUge0ZyYW1lUmVxdWVzdENhbGxiYWNrfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FsbGJhY2sgPSBOT09QO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbW9zdCByZWNlbnQgdGltZXN0YW1wLiBFaXRoZXIgYSBET01IaWdoUmVzVGltZVN0YW1wIHVuZGVyIFJBRiBvciBgRGF0ZS5ub3dgIHVuZGVyIFNldFRpbWVvdXQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRE9NLlJlcXVlc3RBbmltYXRpb25GcmFtZSN0aWNrXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aWNrID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVHJ1ZSBpZiB0aGUgc3RlcCBpcyB1c2luZyBzZXRUaW1lb3V0IGluc3RlYWQgb2YgUkFGLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRPTS5SZXF1ZXN0QW5pbWF0aW9uRnJhbWUjaXNTZXRUaW1lT3V0XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlzU2V0VGltZU91dCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc2V0VGltZW91dCBvciBSQUYgY2FsbGJhY2sgSUQgdXNlZCB3aGVuIGNhbmNlbGluZyB0aGVtLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRPTS5SZXF1ZXN0QW5pbWF0aW9uRnJhbWUjdGltZU91dElEXHJcbiAgICAgICAgICogQHR5cGUgez9udW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGltZU91dElEID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHByZXZpb3VzIHRpbWUgdGhlIHN0ZXAgd2FzIGNhbGxlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5ET00uUmVxdWVzdEFuaW1hdGlvbkZyYW1lI2xhc3RUaW1lXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB0YXJnZXQgRlBTIHJhdGUgaW4gbXMuXHJcbiAgICAgICAgICogT25seSB1c2VkIHdoZW4gc2V0VGltZW91dCBpcyB1c2VkIGluc3RlYWQgb2YgUkFGLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkRPTS5SZXF1ZXN0QW5pbWF0aW9uRnJhbWUjdGFyZ2V0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGFyZ2V0ID0gMDtcclxuXHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFJBRiBzdGVwIGZ1bmN0aW9uLlxyXG4gICAgICAgICAqIFVwZGF0ZXMgdGhlIGxvY2FsIHRpY2sgdmFsdWUsIGludm9rZXMgdGhlIGNhbGxiYWNrIGFuZCBzY2hlZHVsZXMgYW5vdGhlciBjYWxsIHRvIHJlcXVlc3RBbmltYXRpb25GcmFtZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5ET00uUmVxdWVzdEFuaW1hdGlvbkZyYW1lI3N0ZXBcclxuICAgICAgICAgKiBAdHlwZSB7RnJhbWVSZXF1ZXN0Q2FsbGJhY2t9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zdGVwID0gZnVuY3Rpb24gc3RlcCAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIEJlY2F1c2Ugd2UgY2Fubm90IHRydXN0IHRoZSB0aW1lIHBhc3NlZCB0byB0aGlzIGNhbGxiYWNrIGZyb20gdGhlIGJyb3dzZXIgYW5kIG5lZWQgaXQga2VwdCBpbiBzeW5jIHdpdGggZXZlbnQgdGltZXNcclxuICAgICAgICAgICAgdmFyIHRpbWVzdGFtcCA9IHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTtcclxuXHJcbiAgICAgICAgICAgIC8vICBET01IaWdoUmVzVGltZVN0YW1wXHJcbiAgICAgICAgICAgIF90aGlzLmxhc3RUaW1lID0gX3RoaXMudGljaztcclxuXHJcbiAgICAgICAgICAgIF90aGlzLnRpY2sgPSB0aW1lc3RhbXA7XHJcblxyXG4gICAgICAgICAgICBfdGhpcy5jYWxsYmFjayh0aW1lc3RhbXApO1xyXG5cclxuICAgICAgICAgICAgX3RoaXMudGltZU91dElEID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgU2V0VGltZW91dCBzdGVwIGZ1bmN0aW9uLlxyXG4gICAgICAgICAqIFVwZGF0ZXMgdGhlIGxvY2FsIHRpY2sgdmFsdWUsIGludm9rZXMgdGhlIGNhbGxiYWNrIGFuZCBzY2hlZHVsZXMgYW5vdGhlciBjYWxsIHRvIHNldFRpbWVvdXQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuRE9NLlJlcXVlc3RBbmltYXRpb25GcmFtZSNzdGVwVGltZW91dFxyXG4gICAgICAgICAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnN0ZXBUaW1lb3V0ID0gZnVuY3Rpb24gc3RlcFRpbWVvdXQgKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBkID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBkZWxheSA9IE1hdGgubWluKE1hdGgubWF4KF90aGlzLnRhcmdldCAqIDIgKyBfdGhpcy50aWNrIC0gZCwgMCksIF90aGlzLnRhcmdldCk7XHJcblxyXG4gICAgICAgICAgICBfdGhpcy5sYXN0VGltZSA9IF90aGlzLnRpY2s7XHJcblxyXG4gICAgICAgICAgICBfdGhpcy50aWNrID0gZDtcclxuXHJcbiAgICAgICAgICAgIF90aGlzLmNhbGxiYWNrKGQpO1xyXG5cclxuICAgICAgICAgICAgX3RoaXMudGltZU91dElEID0gd2luZG93LnNldFRpbWVvdXQoc3RlcFRpbWVvdXQsIGRlbGF5KTtcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YXJ0cyB0aGUgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIG9yIHNldFRpbWVvdXQgcHJvY2VzcyBydW5uaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkRPTS5SZXF1ZXN0QW5pbWF0aW9uRnJhbWUjc3RhcnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7RnJhbWVSZXF1ZXN0Q2FsbGJhY2t9IGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBlYWNoIHN0ZXAuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlU2V0VGltZU91dCAtIFNob3VsZCBpdCB1c2UgU2V0VGltZW91dCwgZXZlbiBpZiBSQUYgaXMgYXZhaWxhYmxlP1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRhcmdldEZQUyAtIFRoZSB0YXJnZXQgZnBzIHJhdGUgKGluIG1zKS4gT25seSB1c2VkIHdoZW4gc2V0VGltZW91dCBpcyB1c2VkLlxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKGNhbGxiYWNrLCBmb3JjZVNldFRpbWVPdXQsIHRhcmdldEZQUylcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5pc1J1bm5pbmcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTZXRUaW1lT3V0ID0gZm9yY2VTZXRUaW1lT3V0O1xyXG5cclxuICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldEZQUztcclxuXHJcbiAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnRpbWVPdXRJRCA9IChmb3JjZVNldFRpbWVPdXQpID8gd2luZG93LnNldFRpbWVvdXQodGhpcy5zdGVwVGltZW91dCwgMCkgOiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuc3RlcCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcHMgdGhlIHJlcXVlc3RBbmltYXRpb25GcmFtZSBvciBzZXRUaW1lb3V0IGZyb20gcnVubmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5ET00uUmVxdWVzdEFuaW1hdGlvbkZyYW1lI3N0b3BcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBzdG9wOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuaXNSdW5uaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzU2V0VGltZU91dClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVPdXRJRCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnRpbWVPdXRJRCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIHRoZSBzdGVwIGZyb20gcnVubmluZyBhbmQgY2xlYXJzIHRoZSBjYWxsYmFjayByZWZlcmVuY2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRE9NLlJlcXVlc3RBbmltYXRpb25GcmFtZSNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN0b3AoKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IE5PT1A7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/dom/RequestAnimationFrame.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/dom/index.js":
/*!**********************************************!*\
!*** ./node_modules/phaser/src/dom/index.js ***!
\**********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.DOM\r\n */\r\n\r\nvar Dom = {\r\n\r\n AddToDOM: __webpack_require__(/*! ./AddToDOM */ \"./node_modules/phaser/src/dom/AddToDOM.js\"),\r\n DOMContentLoaded: __webpack_require__(/*! ./DOMContentLoaded */ \"./node_modules/phaser/src/dom/DOMContentLoaded.js\"),\r\n GetScreenOrientation: __webpack_require__(/*! ./GetScreenOrientation */ \"./node_modules/phaser/src/dom/GetScreenOrientation.js\"),\r\n GetTarget: __webpack_require__(/*! ./GetTarget */ \"./node_modules/phaser/src/dom/GetTarget.js\"),\r\n ParseXML: __webpack_require__(/*! ./ParseXML */ \"./node_modules/phaser/src/dom/ParseXML.js\"),\r\n RemoveFromDOM: __webpack_require__(/*! ./RemoveFromDOM */ \"./node_modules/phaser/src/dom/RemoveFromDOM.js\"),\r\n RequestAnimationFrame: __webpack_require__(/*! ./RequestAnimationFrame */ \"./node_modules/phaser/src/dom/RequestAnimationFrame.js\")\r\n\r\n};\r\n\r\nmodule.exports = Dom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vaW5kZXguanM/YTcxMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyw2REFBWTtBQUNsQyxzQkFBc0IsbUJBQU8sQ0FBQyw2RUFBb0I7QUFDbEQsMEJBQTBCLG1CQUFPLENBQUMscUZBQXdCO0FBQzFELGVBQWUsbUJBQU8sQ0FBQywrREFBYTtBQUNwQyxjQUFjLG1CQUFPLENBQUMsNkRBQVk7QUFDbEMsbUJBQW1CLG1CQUFPLENBQUMsdUVBQWlCO0FBQzVDLDJCQUEyQixtQkFBTyxDQUFDLHVGQUF5Qjs7QUFFNUQ7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9kb20vaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5ET01cclxuICovXHJcblxyXG52YXIgRG9tID0ge1xyXG5cclxuICAgIEFkZFRvRE9NOiByZXF1aXJlKCcuL0FkZFRvRE9NJyksXHJcbiAgICBET01Db250ZW50TG9hZGVkOiByZXF1aXJlKCcuL0RPTUNvbnRlbnRMb2FkZWQnKSxcclxuICAgIEdldFNjcmVlbk9yaWVudGF0aW9uOiByZXF1aXJlKCcuL0dldFNjcmVlbk9yaWVudGF0aW9uJyksXHJcbiAgICBHZXRUYXJnZXQ6IHJlcXVpcmUoJy4vR2V0VGFyZ2V0JyksXHJcbiAgICBQYXJzZVhNTDogcmVxdWlyZSgnLi9QYXJzZVhNTCcpLFxyXG4gICAgUmVtb3ZlRnJvbURPTTogcmVxdWlyZSgnLi9SZW1vdmVGcm9tRE9NJyksXHJcbiAgICBSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6IHJlcXVpcmUoJy4vUmVxdWVzdEFuaW1hdGlvbkZyYW1lJylcclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IERvbTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/dom/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/events/EventEmitter.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/events/EventEmitter.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar EE = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar PluginCache = __webpack_require__(/*! ../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\n\r\n/**\r\n * @classdesc\r\n * EventEmitter is a Scene Systems plugin compatible version of eventemitter3.\r\n *\r\n * @class EventEmitter\r\n * @memberof Phaser.Events\r\n * @constructor\r\n * @since 3.0.0\r\n */\r\nvar EventEmitter = new Class({\r\n\r\n Extends: EE,\r\n\r\n initialize:\r\n\r\n function EventEmitter ()\r\n {\r\n EE.call(this);\r\n },\r\n\r\n /**\r\n * Removes all listeners.\r\n *\r\n * @method Phaser.Events.EventEmitter#shutdown\r\n * @since 3.0.0\r\n */\r\n shutdown: function ()\r\n {\r\n this.removeAllListeners();\r\n },\r\n\r\n /**\r\n * Removes all listeners.\r\n *\r\n * @method Phaser.Events.EventEmitter#destroy\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.removeAllListeners();\r\n }\r\n\r\n});\r\n\r\n/**\r\n * Return an array listing the events for which the emitter has registered listeners.\r\n *\r\n * @method Phaser.Events.EventEmitter#eventNames\r\n * @since 3.0.0\r\n *\r\n * @return {array}\r\n */\r\n\r\n/**\r\n * Return the listeners registered for a given event.\r\n *\r\n * @method Phaser.Events.EventEmitter#listeners\r\n * @since 3.0.0\r\n *\r\n * @param {(string|symbol)} event - The event name.\r\n *\r\n * @return {array} The registered listeners.\r\n */\r\n\r\n/**\r\n * Return the number of listeners listening to a given event.\r\n *\r\n * @method Phaser.Events.EventEmitter#listenerCount\r\n * @since 3.0.0\r\n *\r\n * @param {(string|symbol)} event - The event name.\r\n *\r\n * @return {number} The number of listeners.\r\n */\r\n\r\n/**\r\n * Calls each of the listeners registered for a given event.\r\n *\r\n * @method Phaser.Events.EventEmitter#emit\r\n * @since 3.0.0\r\n *\r\n * @param {(string|symbol)} event - The event name.\r\n * @param {...*} [args] - Additional arguments that will be passed to the event handler.\r\n *\r\n * @return {boolean} `true` if the event had listeners, else `false`.\r\n */\r\n\r\n/**\r\n * Add a listener for a given event.\r\n *\r\n * @method Phaser.Events.EventEmitter#on\r\n * @since 3.0.0\r\n *\r\n * @param {(string|symbol)} event - The event name.\r\n * @param {function} fn - The listener function.\r\n * @param {*} [context=this] - The context to invoke the listener with.\r\n *\r\n * @return {Phaser.Events.EventEmitter} `this`.\r\n */\r\n\r\n/**\r\n * Add a listener for a given event.\r\n *\r\n * @method Phaser.Events.EventEmitter#addListener\r\n * @since 3.0.0\r\n *\r\n * @param {(string|symbol)} event - The event name.\r\n * @param {function} fn - The listener function.\r\n * @param {*} [context=this] - The context to invoke the listener with.\r\n *\r\n * @return {Phaser.Events.EventEmitter} `this`.\r\n */\r\n\r\n/**\r\n * Add a one-time listener for a given event.\r\n *\r\n * @method Phaser.Events.EventEmitter#once\r\n * @since 3.0.0\r\n *\r\n * @param {(string|symbol)} event - The event name.\r\n * @param {function} fn - The listener function.\r\n * @param {*} [context=this] - The context to invoke the listener with.\r\n *\r\n * @return {Phaser.Events.EventEmitter} `this`.\r\n */\r\n\r\n/**\r\n * Remove the listeners of a given event.\r\n *\r\n * @method Phaser.Events.EventEmitter#removeListener\r\n * @since 3.0.0\r\n *\r\n * @param {(string|symbol)} event - The event name.\r\n * @param {function} [fn] - Only remove the listeners that match this function.\r\n * @param {*} [context] - Only remove the listeners that have this context.\r\n * @param {boolean} [once] - Only remove one-time listeners.\r\n *\r\n * @return {Phaser.Events.EventEmitter} `this`.\r\n */\r\n\r\n/**\r\n * Remove the listeners of a given event.\r\n *\r\n * @method Phaser.Events.EventEmitter#off\r\n * @since 3.0.0\r\n *\r\n * @param {(string|symbol)} event - The event name.\r\n * @param {function} [fn] - Only remove the listeners that match this function.\r\n * @param {*} [context] - Only remove the listeners that have this context.\r\n * @param {boolean} [once] - Only remove one-time listeners.\r\n *\r\n * @return {Phaser.Events.EventEmitter} `this`.\r\n */\r\n\r\n/**\r\n * Remove all listeners, or those of the specified event.\r\n *\r\n * @method Phaser.Events.EventEmitter#removeAllListeners\r\n * @since 3.0.0\r\n *\r\n * @param {(string|symbol)} [event] - The event name.\r\n *\r\n * @return {Phaser.Events.EventEmitter} `this`.\r\n */\r\n\r\nPluginCache.register('EventEmitter', EventEmitter, 'events');\r\n\r\nmodule.exports = EventEmitter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9ldmVudHMvRXZlbnRFbWl0dGVyLmpzP2NjY2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsU0FBUyxtQkFBTyxDQUFDLDREQUFlO0FBQ2hDLGtCQUFrQixtQkFBTyxDQUFDLGdGQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0EsWUFBWSxPQUFPO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCLFdBQVcsS0FBSztBQUNoQjtBQUNBLFlBQVksUUFBUTtBQUNwQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxFQUFFO0FBQ2I7QUFDQSxZQUFZLDJCQUEyQjtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxFQUFFO0FBQ2I7QUFDQSxZQUFZLDJCQUEyQjtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxFQUFFO0FBQ2I7QUFDQSxZQUFZLDJCQUEyQjtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxFQUFFO0FBQ2IsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsRUFBRTtBQUNiLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9ldmVudHMvRXZlbnRFbWl0dGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG52YXIgRUUgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XHJcbnZhciBQbHVnaW5DYWNoZSA9IHJlcXVpcmUoJy4uL3BsdWdpbnMvUGx1Z2luQ2FjaGUnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEV2ZW50RW1pdHRlciBpcyBhIFNjZW5lIFN5c3RlbXMgcGx1Z2luIGNvbXBhdGlibGUgdmVyc2lvbiBvZiBldmVudGVtaXR0ZXIzLlxyXG4gKlxyXG4gKiBAY2xhc3MgRXZlbnRFbWl0dGVyXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuRXZlbnRzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbnZhciBFdmVudEVtaXR0ZXIgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEVFLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gRXZlbnRFbWl0dGVyICgpXHJcbiAgICB7XHJcbiAgICAgICAgRUUuY2FsbCh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGFsbCBsaXN0ZW5lcnMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlciNzaHV0ZG93blxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHNodXRkb3duOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhbGwgbGlzdGVuZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXIjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybiBhbiBhcnJheSBsaXN0aW5nIHRoZSBldmVudHMgZm9yIHdoaWNoIHRoZSBlbWl0dGVyIGhhcyByZWdpc3RlcmVkIGxpc3RlbmVycy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlciNldmVudE5hbWVzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcmV0dXJuIHthcnJheX1cclxuICovXHJcblxyXG4vKipcclxuICogUmV0dXJuIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlciNsaXN0ZW5lcnNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xzeW1ib2wpfSBldmVudCAtIFRoZSBldmVudCBuYW1lLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHthcnJheX0gVGhlIHJlZ2lzdGVyZWQgbGlzdGVuZXJzLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBsaXN0ZW5lcnMgbGlzdGVuaW5nIHRvIGEgZ2l2ZW4gZXZlbnQuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXIjbGlzdGVuZXJDb3VudFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsoc3RyaW5nfHN5bWJvbCl9IGV2ZW50IC0gVGhlIGV2ZW50IG5hbWUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBsaXN0ZW5lcnMuXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENhbGxzIGVhY2ggb2YgdGhlIGxpc3RlbmVycyByZWdpc3RlcmVkIGZvciBhIGdpdmVuIGV2ZW50LlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5FdmVudHMuRXZlbnRFbWl0dGVyI2VtaXRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xzeW1ib2wpfSBldmVudCAtIFRoZSBldmVudCBuYW1lLlxyXG4gKiBAcGFyYW0gey4uLip9IFthcmdzXSAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZXZlbnQgaGFkIGxpc3RlbmVycywgZWxzZSBgZmFsc2VgLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBZGQgYSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlciNvblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsoc3RyaW5nfHN5bWJvbCl9IGV2ZW50IC0gVGhlIGV2ZW50IG5hbWUuXHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIC0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxyXG4gKiBAcGFyYW0geyp9IFtjb250ZXh0PXRoaXNdIC0gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlcn0gYHRoaXNgLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBZGQgYSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlciNhZGRMaXN0ZW5lclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsoc3RyaW5nfHN5bWJvbCl9IGV2ZW50IC0gVGhlIGV2ZW50IG5hbWUuXHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIC0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxyXG4gKiBAcGFyYW0geyp9IFtjb250ZXh0PXRoaXNdIC0gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlcn0gYHRoaXNgLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBZGQgYSBvbmUtdGltZSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlciNvbmNlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8c3ltYm9sKX0gZXZlbnQgLSBUaGUgZXZlbnQgbmFtZS5cclxuICogQHBhcmFtIHtmdW5jdGlvbn0gZm4gLSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXHJcbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHQ9dGhpc10gLSBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5FdmVudHMuRXZlbnRFbWl0dGVyfSBgdGhpc2AuXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlbW92ZSB0aGUgbGlzdGVuZXJzIG9mIGEgZ2l2ZW4gZXZlbnQuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXIjcmVtb3ZlTGlzdGVuZXJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xzeW1ib2wpfSBldmVudCAtIFRoZSBldmVudCBuYW1lLlxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbZm5dIC0gT25seSByZW1vdmUgdGhlIGxpc3RlbmVycyB0aGF0IG1hdGNoIHRoaXMgZnVuY3Rpb24uXHJcbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHRdIC0gT25seSByZW1vdmUgdGhlIGxpc3RlbmVycyB0aGF0IGhhdmUgdGhpcyBjb250ZXh0LlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvbmNlXSAtIE9ubHkgcmVtb3ZlIG9uZS10aW1lIGxpc3RlbmVycy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXJ9IGB0aGlzYC5cclxuICovXHJcblxyXG4vKipcclxuICogUmVtb3ZlIHRoZSBsaXN0ZW5lcnMgb2YgYSBnaXZlbiBldmVudC5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlciNvZmZcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xzeW1ib2wpfSBldmVudCAtIFRoZSBldmVudCBuYW1lLlxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbZm5dIC0gT25seSByZW1vdmUgdGhlIGxpc3RlbmVycyB0aGF0IG1hdGNoIHRoaXMgZnVuY3Rpb24uXHJcbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHRdIC0gT25seSByZW1vdmUgdGhlIGxpc3RlbmVycyB0aGF0IGhhdmUgdGhpcyBjb250ZXh0LlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvbmNlXSAtIE9ubHkgcmVtb3ZlIG9uZS10aW1lIGxpc3RlbmVycy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXJ9IGB0aGlzYC5cclxuICovXHJcblxyXG4vKipcclxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMsIG9yIHRob3NlIG9mIHRoZSBzcGVjaWZpZWQgZXZlbnQuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXIjcmVtb3ZlQWxsTGlzdGVuZXJzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8c3ltYm9sKX0gW2V2ZW50XSAtIFRoZSBldmVudCBuYW1lLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlcn0gYHRoaXNgLlxyXG4gKi9cclxuXHJcblBsdWdpbkNhY2hlLnJlZ2lzdGVyKCdFdmVudEVtaXR0ZXInLCBFdmVudEVtaXR0ZXIsICdldmVudHMnKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/events/EventEmitter.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/events/index.js":
/*!*************************************************!*\
!*** ./node_modules/phaser/src/events/index.js ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Events\r\n */\r\n\r\nmodule.exports = { EventEmitter: __webpack_require__(/*! ./EventEmitter */ \"./node_modules/phaser/src/events/EventEmitter.js\") };\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9ldmVudHMvaW5kZXguanM/NDNmNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixlQUFlLG1CQUFPLENBQUMsd0VBQWdCIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZXZlbnRzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuRXZlbnRzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7IEV2ZW50RW1pdHRlcjogcmVxdWlyZSgnLi9FdmVudEVtaXR0ZXInKSB9O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/events/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/BuildGameObject.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/BuildGameObject.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BlendModes = __webpack_require__(/*! ../renderer/BlendModes */ \"./node_modules/phaser/src/renderer/BlendModes.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\n\r\n/**\r\n * Builds a Game Object using the provided configuration object.\r\n *\r\n * @function Phaser.GameObjects.BuildGameObject\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - A reference to the Scene.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The initial GameObject.\r\n * @param {Phaser.Types.GameObjects.GameObjectConfig} config - The config to build the GameObject with.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The built Game Object.\r\n */\r\nvar BuildGameObject = function (scene, gameObject, config)\r\n{\r\n // Position\r\n\r\n gameObject.x = GetAdvancedValue(config, 'x', 0);\r\n gameObject.y = GetAdvancedValue(config, 'y', 0);\r\n gameObject.depth = GetAdvancedValue(config, 'depth', 0);\r\n\r\n // Flip\r\n\r\n gameObject.flipX = GetAdvancedValue(config, 'flipX', false);\r\n gameObject.flipY = GetAdvancedValue(config, 'flipY', false);\r\n\r\n // Scale\r\n // Either: { scale: 2 } or { scale: { x: 2, y: 2 }}\r\n\r\n var scale = GetAdvancedValue(config, 'scale', null);\r\n\r\n if (typeof scale === 'number')\r\n {\r\n gameObject.setScale(scale);\r\n }\r\n else if (scale !== null)\r\n {\r\n gameObject.scaleX = GetAdvancedValue(scale, 'x', 1);\r\n gameObject.scaleY = GetAdvancedValue(scale, 'y', 1);\r\n }\r\n\r\n // ScrollFactor\r\n // Either: { scrollFactor: 2 } or { scrollFactor: { x: 2, y: 2 }}\r\n\r\n var scrollFactor = GetAdvancedValue(config, 'scrollFactor', null);\r\n\r\n if (typeof scrollFactor === 'number')\r\n {\r\n gameObject.setScrollFactor(scrollFactor);\r\n }\r\n else if (scrollFactor !== null)\r\n {\r\n gameObject.scrollFactorX = GetAdvancedValue(scrollFactor, 'x', 1);\r\n gameObject.scrollFactorY = GetAdvancedValue(scrollFactor, 'y', 1);\r\n }\r\n\r\n // Rotation\r\n\r\n gameObject.rotation = GetAdvancedValue(config, 'rotation', 0);\r\n\r\n var angle = GetAdvancedValue(config, 'angle', null);\r\n\r\n if (angle !== null)\r\n {\r\n gameObject.angle = angle;\r\n }\r\n\r\n // Alpha\r\n\r\n gameObject.alpha = GetAdvancedValue(config, 'alpha', 1);\r\n\r\n // Origin\r\n // Either: { origin: 0.5 } or { origin: { x: 0.5, y: 0.5 }}\r\n\r\n var origin = GetAdvancedValue(config, 'origin', null);\r\n\r\n if (typeof origin === 'number')\r\n {\r\n gameObject.setOrigin(origin);\r\n }\r\n else if (origin !== null)\r\n {\r\n var ox = GetAdvancedValue(origin, 'x', 0.5);\r\n var oy = GetAdvancedValue(origin, 'y', 0.5);\r\n\r\n gameObject.setOrigin(ox, oy);\r\n }\r\n\r\n // BlendMode\r\n\r\n gameObject.blendMode = GetAdvancedValue(config, 'blendMode', BlendModes.NORMAL);\r\n\r\n // Visible\r\n\r\n gameObject.visible = GetAdvancedValue(config, 'visible', true);\r\n\r\n // Add to Scene\r\n\r\n var add = GetAdvancedValue(config, 'add', true);\r\n\r\n if (add)\r\n {\r\n scene.sys.displayList.add(gameObject);\r\n }\r\n\r\n if (gameObject.preUpdate)\r\n {\r\n scene.sys.updateList.add(gameObject);\r\n }\r\n\r\n return gameObject;\r\n};\r\n\r\nmodule.exports = BuildGameObject;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9CdWlsZEdhbWVPYmplY3QuanM/YzBhYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsZ0ZBQXdCO0FBQ2pELHVCQUF1QixtQkFBTyxDQUFDLG9HQUFrQzs7QUFFakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsMENBQTBDO0FBQ3JEO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsV0FBVyxLQUFLLFNBQVM7O0FBRTFDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixrQkFBa0IsS0FBSyxnQkFBZ0I7O0FBRXhEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLGlCQUFpQixjQUFjLEtBQUssVUFBVTs7QUFFOUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9CdWlsZEdhbWVPYmplY3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCbGVuZE1vZGVzID0gcmVxdWlyZSgnLi4vcmVuZGVyZXIvQmxlbmRNb2RlcycpO1xyXG52YXIgR2V0QWR2YW5jZWRWYWx1ZSA9IHJlcXVpcmUoJy4uL3V0aWxzL29iamVjdC9HZXRBZHZhbmNlZFZhbHVlJyk7XHJcblxyXG4vKipcclxuICogQnVpbGRzIGEgR2FtZSBPYmplY3QgdXNpbmcgdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdhbWVPYmplY3RzLkJ1aWxkR2FtZU9iamVjdFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIGluaXRpYWwgR2FtZU9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuR2FtZU9iamVjdENvbmZpZ30gY29uZmlnIC0gVGhlIGNvbmZpZyB0byBidWlsZCB0aGUgR2FtZU9iamVjdCB3aXRoLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIGJ1aWx0IEdhbWUgT2JqZWN0LlxyXG4gKi9cclxudmFyIEJ1aWxkR2FtZU9iamVjdCA9IGZ1bmN0aW9uIChzY2VuZSwgZ2FtZU9iamVjdCwgY29uZmlnKVxyXG57XHJcbiAgICAvLyAgUG9zaXRpb25cclxuXHJcbiAgICBnYW1lT2JqZWN0LnggPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ3gnLCAwKTtcclxuICAgIGdhbWVPYmplY3QueSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAneScsIDApO1xyXG4gICAgZ2FtZU9iamVjdC5kZXB0aCA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnZGVwdGgnLCAwKTtcclxuXHJcbiAgICAvLyAgRmxpcFxyXG5cclxuICAgIGdhbWVPYmplY3QuZmxpcFggPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ2ZsaXBYJywgZmFsc2UpO1xyXG4gICAgZ2FtZU9iamVjdC5mbGlwWSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnZmxpcFknLCBmYWxzZSk7XHJcblxyXG4gICAgLy8gIFNjYWxlXHJcbiAgICAvLyAgRWl0aGVyOiB7IHNjYWxlOiAyIH0gb3IgeyBzY2FsZTogeyB4OiAyLCB5OiAyIH19XHJcblxyXG4gICAgdmFyIHNjYWxlID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdzY2FsZScsIG51bGwpO1xyXG5cclxuICAgIGlmICh0eXBlb2Ygc2NhbGUgPT09ICdudW1iZXInKVxyXG4gICAge1xyXG4gICAgICAgIGdhbWVPYmplY3Quc2V0U2NhbGUoc2NhbGUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoc2NhbGUgIT09IG51bGwpXHJcbiAgICB7XHJcbiAgICAgICAgZ2FtZU9iamVjdC5zY2FsZVggPSBHZXRBZHZhbmNlZFZhbHVlKHNjYWxlLCAneCcsIDEpO1xyXG4gICAgICAgIGdhbWVPYmplY3Quc2NhbGVZID0gR2V0QWR2YW5jZWRWYWx1ZShzY2FsZSwgJ3knLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgU2Nyb2xsRmFjdG9yXHJcbiAgICAvLyAgRWl0aGVyOiB7IHNjcm9sbEZhY3RvcjogMiB9IG9yIHsgc2Nyb2xsRmFjdG9yOiB7IHg6IDIsIHk6IDIgfX1cclxuXHJcbiAgICB2YXIgc2Nyb2xsRmFjdG9yID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdzY3JvbGxGYWN0b3InLCBudWxsKTtcclxuXHJcbiAgICBpZiAodHlwZW9mIHNjcm9sbEZhY3RvciA9PT0gJ251bWJlcicpXHJcbiAgICB7XHJcbiAgICAgICAgZ2FtZU9iamVjdC5zZXRTY3JvbGxGYWN0b3Ioc2Nyb2xsRmFjdG9yKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHNjcm9sbEZhY3RvciAhPT0gbnVsbClcclxuICAgIHtcclxuICAgICAgICBnYW1lT2JqZWN0LnNjcm9sbEZhY3RvclggPSBHZXRBZHZhbmNlZFZhbHVlKHNjcm9sbEZhY3RvciwgJ3gnLCAxKTtcclxuICAgICAgICBnYW1lT2JqZWN0LnNjcm9sbEZhY3RvclkgPSBHZXRBZHZhbmNlZFZhbHVlKHNjcm9sbEZhY3RvciwgJ3knLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgUm90YXRpb25cclxuXHJcbiAgICBnYW1lT2JqZWN0LnJvdGF0aW9uID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdyb3RhdGlvbicsIDApO1xyXG5cclxuICAgIHZhciBhbmdsZSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnYW5nbGUnLCBudWxsKTtcclxuXHJcbiAgICBpZiAoYW5nbGUgIT09IG51bGwpXHJcbiAgICB7XHJcbiAgICAgICAgZ2FtZU9iamVjdC5hbmdsZSA9IGFuZ2xlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBBbHBoYVxyXG5cclxuICAgIGdhbWVPYmplY3QuYWxwaGEgPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ2FscGhhJywgMSk7XHJcblxyXG4gICAgLy8gIE9yaWdpblxyXG4gICAgLy8gIEVpdGhlcjogeyBvcmlnaW46IDAuNSB9IG9yIHsgb3JpZ2luOiB7IHg6IDAuNSwgeTogMC41IH19XHJcblxyXG4gICAgdmFyIG9yaWdpbiA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnb3JpZ2luJywgbnVsbCk7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBvcmlnaW4gPT09ICdudW1iZXInKVxyXG4gICAge1xyXG4gICAgICAgIGdhbWVPYmplY3Quc2V0T3JpZ2luKG9yaWdpbik7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChvcmlnaW4gIT09IG51bGwpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG94ID0gR2V0QWR2YW5jZWRWYWx1ZShvcmlnaW4sICd4JywgMC41KTtcclxuICAgICAgICB2YXIgb3kgPSBHZXRBZHZhbmNlZFZhbHVlKG9yaWdpbiwgJ3knLCAwLjUpO1xyXG5cclxuICAgICAgICBnYW1lT2JqZWN0LnNldE9yaWdpbihveCwgb3kpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBCbGVuZE1vZGVcclxuXHJcbiAgICBnYW1lT2JqZWN0LmJsZW5kTW9kZSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnYmxlbmRNb2RlJywgQmxlbmRNb2Rlcy5OT1JNQUwpO1xyXG5cclxuICAgIC8vICBWaXNpYmxlXHJcblxyXG4gICAgZ2FtZU9iamVjdC52aXNpYmxlID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICd2aXNpYmxlJywgdHJ1ZSk7XHJcblxyXG4gICAgLy8gIEFkZCB0byBTY2VuZVxyXG5cclxuICAgIHZhciBhZGQgPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ2FkZCcsIHRydWUpO1xyXG5cclxuICAgIGlmIChhZGQpXHJcbiAgICB7XHJcbiAgICAgICAgc2NlbmUuc3lzLmRpc3BsYXlMaXN0LmFkZChnYW1lT2JqZWN0KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZ2FtZU9iamVjdC5wcmVVcGRhdGUpXHJcbiAgICB7XHJcbiAgICAgICAgc2NlbmUuc3lzLnVwZGF0ZUxpc3QuYWRkKGdhbWVPYmplY3QpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBnYW1lT2JqZWN0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBCdWlsZEdhbWVPYmplY3Q7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/BuildGameObject.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/BuildGameObjectAnimation.js":
/*!*************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/BuildGameObjectAnimation.js ***!
\*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetAdvancedValue = __webpack_require__(/*! ../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\n\r\n/**\r\n * Adds an Animation component to a Sprite and populates it based on the given config.\r\n *\r\n * @function Phaser.GameObjects.BuildGameObjectAnimation\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Sprite} sprite - The sprite to add an Animation component to.\r\n * @param {object} config - The animation config.\r\n *\r\n * @return {Phaser.GameObjects.Sprite} The updated Sprite.\r\n */\r\nvar BuildGameObjectAnimation = function (sprite, config)\r\n{\r\n var animConfig = GetAdvancedValue(config, 'anims', null);\r\n\r\n if (animConfig === null)\r\n {\r\n return sprite;\r\n }\r\n\r\n if (typeof animConfig === 'string')\r\n {\r\n // { anims: 'key' }\r\n sprite.anims.play(animConfig);\r\n }\r\n else if (typeof animConfig === 'object')\r\n {\r\n // { anims: {\r\n // key: string\r\n // startFrame: [string|integer]\r\n // delay: [float]\r\n // repeat: [integer]\r\n // repeatDelay: [float]\r\n // yoyo: [boolean]\r\n // play: [boolean]\r\n // delayedPlay: [boolean]\r\n // }\r\n // }\r\n\r\n var anims = sprite.anims;\r\n\r\n var key = GetAdvancedValue(animConfig, 'key', undefined);\r\n var startFrame = GetAdvancedValue(animConfig, 'startFrame', undefined);\r\n\r\n var delay = GetAdvancedValue(animConfig, 'delay', 0);\r\n var repeat = GetAdvancedValue(animConfig, 'repeat', 0);\r\n var repeatDelay = GetAdvancedValue(animConfig, 'repeatDelay', 0);\r\n var yoyo = GetAdvancedValue(animConfig, 'yoyo', false);\r\n\r\n var play = GetAdvancedValue(animConfig, 'play', false);\r\n var delayedPlay = GetAdvancedValue(animConfig, 'delayedPlay', 0);\r\n\r\n anims.setDelay(delay);\r\n anims.setRepeat(repeat);\r\n anims.setRepeatDelay(repeatDelay);\r\n anims.setYoyo(yoyo);\r\n\r\n if (play)\r\n {\r\n anims.play(key, startFrame);\r\n }\r\n else if (delayedPlay > 0)\r\n {\r\n anims.delayedPlay(delayedPlay, key, startFrame);\r\n }\r\n else\r\n {\r\n anims.load(key);\r\n }\r\n }\r\n\r\n return sprite;\r\n};\r\n\r\nmodule.exports = BuildGameObjectAnimation;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9CdWlsZEdhbWVPYmplY3RBbmltYXRpb24uanM/NDJlMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsdUJBQXVCLG1CQUFPLENBQUMsb0dBQWtDOztBQUVqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDBCQUEwQjtBQUNyQyxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDBCQUEwQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvQnVpbGRHYW1lT2JqZWN0QW5pbWF0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0QWR2YW5jZWRWYWx1ZSA9IHJlcXVpcmUoJy4uL3V0aWxzL29iamVjdC9HZXRBZHZhbmNlZFZhbHVlJyk7XHJcblxyXG4vKipcclxuICogQWRkcyBhbiBBbmltYXRpb24gY29tcG9uZW50IHRvIGEgU3ByaXRlIGFuZCBwb3B1bGF0ZXMgaXQgYmFzZWQgb24gdGhlIGdpdmVuIGNvbmZpZy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HYW1lT2JqZWN0cy5CdWlsZEdhbWVPYmplY3RBbmltYXRpb25cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZX0gc3ByaXRlIC0gVGhlIHNwcml0ZSB0byBhZGQgYW4gQW5pbWF0aW9uIGNvbXBvbmVudCB0by5cclxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyAtIFRoZSBhbmltYXRpb24gY29uZmlnLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlfSBUaGUgdXBkYXRlZCBTcHJpdGUuXHJcbiAqL1xyXG52YXIgQnVpbGRHYW1lT2JqZWN0QW5pbWF0aW9uID0gZnVuY3Rpb24gKHNwcml0ZSwgY29uZmlnKVxyXG57XHJcbiAgICB2YXIgYW5pbUNvbmZpZyA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnYW5pbXMnLCBudWxsKTtcclxuXHJcbiAgICBpZiAoYW5pbUNvbmZpZyA9PT0gbnVsbClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gc3ByaXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgYW5pbUNvbmZpZyA9PT0gJ3N0cmluZycpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIHsgYW5pbXM6ICdrZXknIH1cclxuICAgICAgICBzcHJpdGUuYW5pbXMucGxheShhbmltQ29uZmlnKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBhbmltQ29uZmlnID09PSAnb2JqZWN0JylcclxuICAgIHtcclxuICAgICAgICAvLyAgeyBhbmltczoge1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICBrZXk6IHN0cmluZ1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICBzdGFydEZyYW1lOiBbc3RyaW5nfGludGVnZXJdXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgIGRlbGF5OiBbZmxvYXRdXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgIHJlcGVhdDogW2ludGVnZXJdXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgIHJlcGVhdERlbGF5OiBbZmxvYXRdXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgIHlveW86IFtib29sZWFuXVxyXG4gICAgICAgIC8vICAgICAgICAgICAgICBwbGF5OiBbYm9vbGVhbl1cclxuICAgICAgICAvLyAgICAgICAgICAgICAgZGVsYXllZFBsYXk6IFtib29sZWFuXVxyXG4gICAgICAgIC8vICAgICAgICAgICB9XHJcbiAgICAgICAgLy8gIH1cclxuXHJcbiAgICAgICAgdmFyIGFuaW1zID0gc3ByaXRlLmFuaW1zO1xyXG5cclxuICAgICAgICB2YXIga2V5ID0gR2V0QWR2YW5jZWRWYWx1ZShhbmltQ29uZmlnLCAna2V5JywgdW5kZWZpbmVkKTtcclxuICAgICAgICB2YXIgc3RhcnRGcmFtZSA9IEdldEFkdmFuY2VkVmFsdWUoYW5pbUNvbmZpZywgJ3N0YXJ0RnJhbWUnLCB1bmRlZmluZWQpO1xyXG5cclxuICAgICAgICB2YXIgZGVsYXkgPSBHZXRBZHZhbmNlZFZhbHVlKGFuaW1Db25maWcsICdkZWxheScsIDApO1xyXG4gICAgICAgIHZhciByZXBlYXQgPSBHZXRBZHZhbmNlZFZhbHVlKGFuaW1Db25maWcsICdyZXBlYXQnLCAwKTtcclxuICAgICAgICB2YXIgcmVwZWF0RGVsYXkgPSBHZXRBZHZhbmNlZFZhbHVlKGFuaW1Db25maWcsICdyZXBlYXREZWxheScsIDApO1xyXG4gICAgICAgIHZhciB5b3lvID0gR2V0QWR2YW5jZWRWYWx1ZShhbmltQ29uZmlnLCAneW95bycsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgdmFyIHBsYXkgPSBHZXRBZHZhbmNlZFZhbHVlKGFuaW1Db25maWcsICdwbGF5JywgZmFsc2UpO1xyXG4gICAgICAgIHZhciBkZWxheWVkUGxheSA9IEdldEFkdmFuY2VkVmFsdWUoYW5pbUNvbmZpZywgJ2RlbGF5ZWRQbGF5JywgMCk7XHJcblxyXG4gICAgICAgIGFuaW1zLnNldERlbGF5KGRlbGF5KTtcclxuICAgICAgICBhbmltcy5zZXRSZXBlYXQocmVwZWF0KTtcclxuICAgICAgICBhbmltcy5zZXRSZXBlYXREZWxheShyZXBlYXREZWxheSk7XHJcbiAgICAgICAgYW5pbXMuc2V0WW95byh5b3lvKTtcclxuXHJcbiAgICAgICAgaWYgKHBsYXkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBhbmltcy5wbGF5KGtleSwgc3RhcnRGcmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGRlbGF5ZWRQbGF5ID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGFuaW1zLmRlbGF5ZWRQbGF5KGRlbGF5ZWRQbGF5LCBrZXksIHN0YXJ0RnJhbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBhbmltcy5sb2FkKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzcHJpdGU7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJ1aWxkR2FtZU9iamVjdEFuaW1hdGlvbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/BuildGameObjectAnimation.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/DisplayList.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/DisplayList.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar List = __webpack_require__(/*! ../structs/List */ \"./node_modules/phaser/src/structs/List.js\");\r\nvar PluginCache = __webpack_require__(/*! ../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar SceneEvents = __webpack_require__(/*! ../scene/events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\nvar StableSort = __webpack_require__(/*! ../utils/array/StableSort */ \"./node_modules/phaser/src/utils/array/StableSort.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Display List plugin.\r\n *\r\n * Display Lists belong to a Scene and maintain the list of Game Objects to render every frame.\r\n *\r\n * Some of these Game Objects may also be part of the Scene's [Update List]{@link Phaser.GameObjects.UpdateList}, for updating.\r\n *\r\n * @class DisplayList\r\n * @extends Phaser.Structs.List.<Phaser.GameObjects.GameObject>\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene that this Display List belongs to.\r\n */\r\nvar DisplayList = new Class({\r\n\r\n Extends: List,\r\n\r\n initialize:\r\n\r\n function DisplayList (scene)\r\n {\r\n List.call(this, scene);\r\n\r\n /**\r\n * The flag the determines whether Game Objects should be sorted when `depthSort()` is called.\r\n *\r\n * @name Phaser.GameObjects.DisplayList#sortChildrenFlag\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.sortChildrenFlag = false;\r\n\r\n /**\r\n * The Scene that this Display List belongs to.\r\n *\r\n * @name Phaser.GameObjects.DisplayList#scene\r\n * @type {Phaser.Scene}\r\n * @since 3.0.0\r\n */\r\n this.scene = scene;\r\n\r\n /**\r\n * The Scene's Systems.\r\n *\r\n * @name Phaser.GameObjects.DisplayList#systems\r\n * @type {Phaser.Scenes.Systems}\r\n * @since 3.0.0\r\n */\r\n this.systems = scene.sys;\r\n\r\n scene.sys.events.once(SceneEvents.BOOT, this.boot, this);\r\n scene.sys.events.on(SceneEvents.START, this.start, this);\r\n },\r\n\r\n /**\r\n * This method is called automatically, only once, when the Scene is first created.\r\n * Do not invoke it directly.\r\n *\r\n * @method Phaser.GameObjects.DisplayList#boot\r\n * @private\r\n * @since 3.5.1\r\n */\r\n boot: function ()\r\n {\r\n this.systems.events.once(SceneEvents.DESTROY, this.destroy, this);\r\n },\r\n\r\n /**\r\n * This method is called automatically by the Scene when it is starting up.\r\n * It is responsible for creating local systems, properties and listening for Scene events.\r\n * Do not invoke it directly.\r\n *\r\n * @method Phaser.GameObjects.DisplayList#start\r\n * @private\r\n * @since 3.5.0\r\n */\r\n start: function ()\r\n {\r\n this.systems.events.once(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n },\r\n\r\n /**\r\n * Force a sort of the display list on the next call to depthSort.\r\n *\r\n * @method Phaser.GameObjects.DisplayList#queueDepthSort\r\n * @since 3.0.0\r\n */\r\n queueDepthSort: function ()\r\n {\r\n this.sortChildrenFlag = true;\r\n },\r\n\r\n /**\r\n * Immediately sorts the display list if the flag is set.\r\n *\r\n * @method Phaser.GameObjects.DisplayList#depthSort\r\n * @since 3.0.0\r\n */\r\n depthSort: function ()\r\n {\r\n if (this.sortChildrenFlag)\r\n {\r\n StableSort.inplace(this.list, this.sortByDepth);\r\n\r\n this.sortChildrenFlag = false;\r\n }\r\n },\r\n\r\n /**\r\n * Compare the depth of two Game Objects.\r\n *\r\n * @method Phaser.GameObjects.DisplayList#sortByDepth\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} childA - The first Game Object.\r\n * @param {Phaser.GameObjects.GameObject} childB - The second Game Object.\r\n *\r\n * @return {integer} The difference between the depths of each Game Object.\r\n */\r\n sortByDepth: function (childA, childB)\r\n {\r\n return childA._depth - childB._depth;\r\n },\r\n\r\n /**\r\n * Returns an array which contains all objects currently on the Display List.\r\n * This is a reference to the main list array, not a copy of it, so be careful not to modify it.\r\n *\r\n * @method Phaser.GameObjects.DisplayList#getChildren\r\n * @since 3.12.0\r\n *\r\n * @return {Phaser.GameObjects.GameObject[]} The group members.\r\n */\r\n getChildren: function ()\r\n {\r\n return this.list;\r\n },\r\n\r\n /**\r\n * The Scene that owns this plugin is shutting down.\r\n * We need to kill and reset all internal properties as well as stop listening to Scene events.\r\n *\r\n * @method Phaser.GameObjects.DisplayList#shutdown\r\n * @private\r\n * @since 3.0.0\r\n */\r\n shutdown: function ()\r\n {\r\n var i = this.list.length;\r\n\r\n while (i--)\r\n {\r\n this.list[i].destroy(true);\r\n }\r\n\r\n this.list.length = 0;\r\n\r\n this.systems.events.off(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n },\r\n\r\n /**\r\n * The Scene that owns this plugin is being destroyed.\r\n * We need to shutdown and then kill off all external references.\r\n *\r\n * @method Phaser.GameObjects.DisplayList#destroy\r\n * @private\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.shutdown();\r\n\r\n this.scene.sys.events.off(SceneEvents.START, this.start, this);\r\n\r\n this.scene = null;\r\n this.systems = null;\r\n }\r\n\r\n});\r\n\r\nPluginCache.register('DisplayList', DisplayList, 'displayList');\r\n\r\nmodule.exports = DisplayList;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9EaXNwbGF5TGlzdC5qcz8wOTNlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ3BDLFdBQVcsbUJBQU8sQ0FBQyxrRUFBaUI7QUFDcEMsa0JBQWtCLG1CQUFPLENBQUMsZ0ZBQXdCO0FBQ2xELGtCQUFrQixtQkFBTyxDQUFDLHdFQUFpQjtBQUMzQyxpQkFBaUIsbUJBQU8sQ0FBQyxzRkFBMkI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRFQUE0RSxvQ0FBb0M7QUFDaEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEI7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLDhCQUE4QjtBQUM3QztBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixnQ0FBZ0M7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9EaXNwbGF5TGlzdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIExpc3QgPSByZXF1aXJlKCcuLi9zdHJ1Y3RzL0xpc3QnKTtcclxudmFyIFBsdWdpbkNhY2hlID0gcmVxdWlyZSgnLi4vcGx1Z2lucy9QbHVnaW5DYWNoZScpO1xyXG52YXIgU2NlbmVFdmVudHMgPSByZXF1aXJlKCcuLi9zY2VuZS9ldmVudHMnKTtcclxudmFyIFN0YWJsZVNvcnQgPSByZXF1aXJlKCcuLi91dGlscy9hcnJheS9TdGFibGVTb3J0Jyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgRGlzcGxheSBMaXN0IHBsdWdpbi5cclxuICpcclxuICogRGlzcGxheSBMaXN0cyBiZWxvbmcgdG8gYSBTY2VuZSBhbmQgbWFpbnRhaW4gdGhlIGxpc3Qgb2YgR2FtZSBPYmplY3RzIHRvIHJlbmRlciBldmVyeSBmcmFtZS5cclxuICpcclxuICogU29tZSBvZiB0aGVzZSBHYW1lIE9iamVjdHMgbWF5IGFsc28gYmUgcGFydCBvZiB0aGUgU2NlbmUncyBbVXBkYXRlIExpc3Rde0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5VcGRhdGVMaXN0fSwgZm9yIHVwZGF0aW5nLlxyXG4gKlxyXG4gKiBAY2xhc3MgRGlzcGxheUxpc3RcclxuICogQGV4dGVuZHMgUGhhc2VyLlN0cnVjdHMuTGlzdC48UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Q+XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdGhhdCB0aGlzIERpc3BsYXkgTGlzdCBiZWxvbmdzIHRvLlxyXG4gKi9cclxudmFyIERpc3BsYXlMaXN0ID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBMaXN0LFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gRGlzcGxheUxpc3QgKHNjZW5lKVxyXG4gICAge1xyXG4gICAgICAgIExpc3QuY2FsbCh0aGlzLCBzY2VuZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBmbGFnIHRoZSBkZXRlcm1pbmVzIHdoZXRoZXIgR2FtZSBPYmplY3RzIHNob3VsZCBiZSBzb3J0ZWQgd2hlbiBgZGVwdGhTb3J0KClgIGlzIGNhbGxlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5EaXNwbGF5TGlzdCNzb3J0Q2hpbGRyZW5GbGFnXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNvcnRDaGlsZHJlbkZsYWcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFNjZW5lIHRoYXQgdGhpcyBEaXNwbGF5IExpc3QgYmVsb25ncyB0by5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5EaXNwbGF5TGlzdCNzY2VuZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgU2NlbmUncyBTeXN0ZW1zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkRpc3BsYXlMaXN0I3N5c3RlbXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lcy5TeXN0ZW1zfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcyA9IHNjZW5lLnN5cztcclxuXHJcbiAgICAgICAgc2NlbmUuc3lzLmV2ZW50cy5vbmNlKFNjZW5lRXZlbnRzLkJPT1QsIHRoaXMuYm9vdCwgdGhpcyk7XHJcbiAgICAgICAgc2NlbmUuc3lzLmV2ZW50cy5vbihTY2VuZUV2ZW50cy5TVEFSVCwgdGhpcy5zdGFydCwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHksIG9ubHkgb25jZSwgd2hlbiB0aGUgU2NlbmUgaXMgZmlyc3QgY3JlYXRlZC5cclxuICAgICAqIERvIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRGlzcGxheUxpc3QjYm9vdFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjUuMVxyXG4gICAgICovXHJcbiAgICBib290OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcy5ldmVudHMub25jZShTY2VuZUV2ZW50cy5ERVNUUk9ZLCB0aGlzLmRlc3Ryb3ksIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBTY2VuZSB3aGVuIGl0IGlzIHN0YXJ0aW5nIHVwLlxyXG4gICAgICogSXQgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGxvY2FsIHN5c3RlbXMsIHByb3BlcnRpZXMgYW5kIGxpc3RlbmluZyBmb3IgU2NlbmUgZXZlbnRzLlxyXG4gICAgICogRG8gbm90IGludm9rZSBpdCBkaXJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5EaXNwbGF5TGlzdCNzdGFydFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN5c3RlbXMuZXZlbnRzLm9uY2UoU2NlbmVFdmVudHMuU0hVVERPV04sIHRoaXMuc2h1dGRvd24sIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZvcmNlIGEgc29ydCBvZiB0aGUgZGlzcGxheSBsaXN0IG9uIHRoZSBuZXh0IGNhbGwgdG8gZGVwdGhTb3J0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkRpc3BsYXlMaXN0I3F1ZXVlRGVwdGhTb3J0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgcXVldWVEZXB0aFNvcnQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zb3J0Q2hpbGRyZW5GbGFnID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbW1lZGlhdGVseSBzb3J0cyB0aGUgZGlzcGxheSBsaXN0IGlmIHRoZSBmbGFnIGlzIHNldC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5EaXNwbGF5TGlzdCNkZXB0aFNvcnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXB0aFNvcnQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuc29ydENoaWxkcmVuRmxhZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIFN0YWJsZVNvcnQuaW5wbGFjZSh0aGlzLmxpc3QsIHRoaXMuc29ydEJ5RGVwdGgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zb3J0Q2hpbGRyZW5GbGFnID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbXBhcmUgdGhlIGRlcHRoIG9mIHR3byBHYW1lIE9iamVjdHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRGlzcGxheUxpc3Qjc29ydEJ5RGVwdGhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGNoaWxkQSAtIFRoZSBmaXJzdCBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGNoaWxkQiAtIFRoZSBzZWNvbmQgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZGVwdGhzIG9mIGVhY2ggR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNvcnRCeURlcHRoOiBmdW5jdGlvbiAoY2hpbGRBLCBjaGlsZEIpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGNoaWxkQS5fZGVwdGggLSBjaGlsZEIuX2RlcHRoO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgd2hpY2ggY29udGFpbnMgYWxsIG9iamVjdHMgY3VycmVudGx5IG9uIHRoZSBEaXNwbGF5IExpc3QuXHJcbiAgICAgKiBUaGlzIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBtYWluIGxpc3QgYXJyYXksIG5vdCBhIGNvcHkgb2YgaXQsIHNvIGJlIGNhcmVmdWwgbm90IHRvIG1vZGlmeSBpdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5EaXNwbGF5TGlzdCNnZXRDaGlsZHJlblxyXG4gICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IFRoZSBncm91cCBtZW1iZXJzLlxyXG4gICAgICovXHJcbiAgICBnZXRDaGlsZHJlbjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5saXN0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBTY2VuZSB0aGF0IG93bnMgdGhpcyBwbHVnaW4gaXMgc2h1dHRpbmcgZG93bi5cclxuICAgICAqIFdlIG5lZWQgdG8ga2lsbCBhbmQgcmVzZXQgYWxsIGludGVybmFsIHByb3BlcnRpZXMgYXMgd2VsbCBhcyBzdG9wIGxpc3RlbmluZyB0byBTY2VuZSBldmVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRGlzcGxheUxpc3Qjc2h1dGRvd25cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc2h1dGRvd246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGkgPSB0aGlzLmxpc3QubGVuZ3RoO1xyXG5cclxuICAgICAgICB3aGlsZSAoaS0tKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5saXN0W2ldLmRlc3Ryb3kodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxpc3QubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zLmV2ZW50cy5vZmYoU2NlbmVFdmVudHMuU0hVVERPV04sIHRoaXMuc2h1dGRvd24sIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBTY2VuZSB0aGF0IG93bnMgdGhpcyBwbHVnaW4gaXMgYmVpbmcgZGVzdHJveWVkLlxyXG4gICAgICogV2UgbmVlZCB0byBzaHV0ZG93biBhbmQgdGhlbiBraWxsIG9mZiBhbGwgZXh0ZXJuYWwgcmVmZXJlbmNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5EaXNwbGF5TGlzdCNkZXN0cm95XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zaHV0ZG93bigpO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lLnN5cy5ldmVudHMub2ZmKFNjZW5lRXZlbnRzLlNUQVJULCB0aGlzLnN0YXJ0LCB0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuUGx1Z2luQ2FjaGUucmVnaXN0ZXIoJ0Rpc3BsYXlMaXN0JywgRGlzcGxheUxpc3QsICdkaXNwbGF5TGlzdCcpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBEaXNwbGF5TGlzdDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/DisplayList.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/GameObject.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/GameObject.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar ComponentsToJSON = __webpack_require__(/*! ./components/ToJSON */ \"./node_modules/phaser/src/gameobjects/components/ToJSON.js\");\r\nvar DataManager = __webpack_require__(/*! ../data/DataManager */ \"./node_modules/phaser/src/data/DataManager.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/gameobjects/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The base class that all Game Objects extend.\r\n * You don't create GameObjects directly and they cannot be added to the display list.\r\n * Instead, use them as the base for your own custom classes.\r\n *\r\n * @class GameObject\r\n * @memberof Phaser.GameObjects\r\n * @extends Phaser.Events.EventEmitter\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs.\r\n * @param {string} type - A textual representation of the type of Game Object, i.e. `sprite`.\r\n */\r\nvar GameObject = new Class({\r\n\r\n Extends: EventEmitter,\r\n\r\n initialize:\r\n\r\n function GameObject (scene, type)\r\n {\r\n EventEmitter.call(this);\r\n\r\n /**\r\n * The Scene to which this Game Object belongs.\r\n * Game Objects can only belong to one Scene.\r\n *\r\n * @name Phaser.GameObjects.GameObject#scene\r\n * @type {Phaser.Scene}\r\n * @protected\r\n * @since 3.0.0\r\n */\r\n this.scene = scene;\r\n\r\n /**\r\n * A textual representation of this Game Object, i.e. `sprite`.\r\n * Used internally by Phaser but is available for your own custom classes to populate.\r\n *\r\n * @name Phaser.GameObjects.GameObject#type\r\n * @type {string}\r\n * @since 3.0.0\r\n */\r\n this.type = type;\r\n\r\n /**\r\n * The current state of this Game Object.\r\n * \r\n * Phaser itself will never modify this value, although plugins may do so.\r\n * \r\n * Use this property to track the state of a Game Object during its lifetime. For example, it could move from\r\n * a state of 'moving', to 'attacking', to 'dead'. The state value should be an integer (ideally mapped to a constant\r\n * in your game code), or a string. These are recommended to keep it light and simple, with fast comparisons.\r\n * If you need to store complex data about your Game Object, look at using the Data Component instead.\r\n *\r\n * @name Phaser.GameObjects.GameObject#state\r\n * @type {(integer|string)}\r\n * @since 3.16.0\r\n */\r\n this.state = 0;\r\n\r\n /**\r\n * The parent Container of this Game Object, if it has one.\r\n *\r\n * @name Phaser.GameObjects.GameObject#parentContainer\r\n * @type {Phaser.GameObjects.Container}\r\n * @since 3.4.0\r\n */\r\n this.parentContainer = null;\r\n\r\n /**\r\n * The name of this Game Object.\r\n * Empty by default and never populated by Phaser, this is left for developers to use.\r\n *\r\n * @name Phaser.GameObjects.GameObject#name\r\n * @type {string}\r\n * @default ''\r\n * @since 3.0.0\r\n */\r\n this.name = '';\r\n\r\n /**\r\n * The active state of this Game Object.\r\n * A Game Object with an active state of `true` is processed by the Scenes UpdateList, if added to it.\r\n * An active object is one which is having its logic and internal systems updated.\r\n *\r\n * @name Phaser.GameObjects.GameObject#active\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.active = true;\r\n\r\n /**\r\n * The Tab Index of the Game Object.\r\n * Reserved for future use by plugins and the Input Manager.\r\n *\r\n * @name Phaser.GameObjects.GameObject#tabIndex\r\n * @type {integer}\r\n * @default -1\r\n * @since 3.0.0\r\n */\r\n this.tabIndex = -1;\r\n\r\n /**\r\n * A Data Manager.\r\n * It allows you to store, query and get key/value paired information specific to this Game Object.\r\n * `null` by default. Automatically created if you use `getData` or `setData` or `setDataEnabled`.\r\n *\r\n * @name Phaser.GameObjects.GameObject#data\r\n * @type {Phaser.Data.DataManager}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.data = null;\r\n\r\n /**\r\n * The flags that are compared against `RENDER_MASK` to determine if this Game Object will render or not.\r\n * The bits are 0001 | 0010 | 0100 | 1000 set by the components Visible, Alpha, Transform and Texture respectively.\r\n * If those components are not used by your custom class then you can use this bitmask as you wish.\r\n *\r\n * @name Phaser.GameObjects.GameObject#renderFlags\r\n * @type {integer}\r\n * @default 15\r\n * @since 3.0.0\r\n */\r\n this.renderFlags = 15;\r\n\r\n /**\r\n * A bitmask that controls if this Game Object is drawn by a Camera or not.\r\n * Not usually set directly, instead call `Camera.ignore`, however you can\r\n * set this property directly using the Camera.id property:\r\n *\r\n * @example\r\n * this.cameraFilter |= camera.id\r\n *\r\n * @name Phaser.GameObjects.GameObject#cameraFilter\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.cameraFilter = 0;\r\n\r\n /**\r\n * If this Game Object is enabled for input then this property will contain an InteractiveObject instance.\r\n * Not usually set directly. Instead call `GameObject.setInteractive()`.\r\n *\r\n * @name Phaser.GameObjects.GameObject#input\r\n * @type {?Phaser.Types.Input.InteractiveObject}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.input = null;\r\n\r\n /**\r\n * If this Game Object is enabled for physics then this property will contain a reference to a Physics Body.\r\n *\r\n * @name Phaser.GameObjects.GameObject#body\r\n * @type {?(object|Phaser.Physics.Arcade.Body|Phaser.Physics.Impact.Body)}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.body = null;\r\n\r\n /**\r\n * This Game Object will ignore all calls made to its destroy method if this flag is set to `true`.\r\n * This includes calls that may come from a Group, Container or the Scene itself.\r\n * While it allows you to persist a Game Object across Scenes, please understand you are entirely\r\n * responsible for managing references to and from this Game Object.\r\n *\r\n * @name Phaser.GameObjects.GameObject#ignoreDestroy\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.5.0\r\n */\r\n this.ignoreDestroy = false;\r\n\r\n // Tell the Scene to re-sort the children\r\n scene.sys.queueDepthSort();\r\n },\r\n\r\n /**\r\n * Sets the `active` property of this Game Object and returns this Game Object for further chaining.\r\n * A Game Object with its `active` property set to `true` will be updated by the Scenes UpdateList.\r\n *\r\n * @method Phaser.GameObjects.GameObject#setActive\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} value - True if this Game Object should be set as active, false if not.\r\n *\r\n * @return {this} This GameObject.\r\n */\r\n setActive: function (value)\r\n {\r\n this.active = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the `name` property of this Game Object and returns this Game Object for further chaining.\r\n * The `name` property is not populated by Phaser and is presented for your own use.\r\n *\r\n * @method Phaser.GameObjects.GameObject#setName\r\n * @since 3.0.0\r\n *\r\n * @param {string} value - The name to be given to this Game Object.\r\n *\r\n * @return {this} This GameObject.\r\n */\r\n setName: function (value)\r\n {\r\n this.name = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the current state of this Game Object.\r\n * \r\n * Phaser itself will never modify the State of a Game Object, although plugins may do so.\r\n * \r\n * For example, a Game Object could change from a state of 'moving', to 'attacking', to 'dead'.\r\n * The state value should typically be an integer (ideally mapped to a constant\r\n * in your game code), but could also be a string. It is recommended to keep it light and simple.\r\n * If you need to store complex data about your Game Object, look at using the Data Component instead.\r\n *\r\n * @method Phaser.GameObjects.GameObject#setState\r\n * @since 3.16.0\r\n *\r\n * @param {(integer|string)} value - The state of the Game Object.\r\n *\r\n * @return {this} This GameObject.\r\n */\r\n setState: function (value)\r\n {\r\n this.state = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Adds a Data Manager component to this Game Object.\r\n *\r\n * @method Phaser.GameObjects.GameObject#setDataEnabled\r\n * @since 3.0.0\r\n * @see Phaser.Data.DataManager\r\n *\r\n * @return {this} This GameObject.\r\n */\r\n setDataEnabled: function ()\r\n {\r\n if (!this.data)\r\n {\r\n this.data = new DataManager(this);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Allows you to store a key value pair within this Game Objects Data Manager.\r\n *\r\n * If the Game Object has not been enabled for data (via `setDataEnabled`) then it will be enabled\r\n * before setting the value.\r\n *\r\n * If the key doesn't already exist in the Data Manager then it is created.\r\n *\r\n * ```javascript\r\n * sprite.setData('name', 'Red Gem Stone');\r\n * ```\r\n *\r\n * You can also pass in an object of key value pairs as the first argument:\r\n *\r\n * ```javascript\r\n * sprite.setData({ name: 'Red Gem Stone', level: 2, owner: 'Link', gold: 50 });\r\n * ```\r\n *\r\n * To get a value back again you can call `getData`:\r\n *\r\n * ```javascript\r\n * sprite.getData('gold');\r\n * ```\r\n *\r\n * Or you can access the value directly via the `values` property, where it works like any other variable:\r\n *\r\n * ```javascript\r\n * sprite.data.values.gold += 50;\r\n * ```\r\n *\r\n * When the value is first set, a `setdata` event is emitted from this Game Object.\r\n *\r\n * If the key already exists, a `changedata` event is emitted instead, along an event named after the key.\r\n * For example, if you updated an existing key called `PlayerLives` then it would emit the event `changedata-PlayerLives`.\r\n * These events will be emitted regardless if you use this method to set the value, or the direct `values` setter.\r\n *\r\n * Please note that the data keys are case-sensitive and must be valid JavaScript Object property strings.\r\n * This means the keys `gold` and `Gold` are treated as two unique values within the Data Manager.\r\n *\r\n * @method Phaser.GameObjects.GameObject#setData\r\n * @since 3.0.0\r\n *\r\n * @param {(string|object)} key - The key to set the value for. Or an object of key value pairs. If an object the `data` argument is ignored.\r\n * @param {*} [data] - The value to set for the given key. If an object is provided as the key this argument is ignored.\r\n *\r\n * @return {this} This GameObject.\r\n */\r\n setData: function (key, value)\r\n {\r\n if (!this.data)\r\n {\r\n this.data = new DataManager(this);\r\n }\r\n\r\n this.data.set(key, value);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Retrieves the value for the given key in this Game Objects Data Manager, or undefined if it doesn't exist.\r\n *\r\n * You can also access values via the `values` object. For example, if you had a key called `gold` you can do either:\r\n *\r\n * ```javascript\r\n * sprite.getData('gold');\r\n * ```\r\n *\r\n * Or access the value directly:\r\n *\r\n * ```javascript\r\n * sprite.data.values.gold;\r\n * ```\r\n *\r\n * You can also pass in an array of keys, in which case an array of values will be returned:\r\n *\r\n * ```javascript\r\n * sprite.getData([ 'gold', 'armor', 'health' ]);\r\n * ```\r\n *\r\n * This approach is useful for destructuring arrays in ES6.\r\n *\r\n * @method Phaser.GameObjects.GameObject#getData\r\n * @since 3.0.0\r\n *\r\n * @param {(string|string[])} key - The key of the value to retrieve, or an array of keys.\r\n *\r\n * @return {*} The value belonging to the given key, or an array of values, the order of which will match the input array.\r\n */\r\n getData: function (key)\r\n {\r\n if (!this.data)\r\n {\r\n this.data = new DataManager(this);\r\n }\r\n\r\n return this.data.get(key);\r\n },\r\n\r\n /**\r\n * Pass this Game Object to the Input Manager to enable it for Input.\r\n *\r\n * Input works by using hit areas, these are nearly always geometric shapes, such as rectangles or circles, that act as the hit area\r\n * for the Game Object. However, you can provide your own hit area shape and callback, should you wish to handle some more advanced\r\n * input detection.\r\n *\r\n * If no arguments are provided it will try and create a rectangle hit area based on the texture frame the Game Object is using. If\r\n * this isn't a texture-bound object, such as a Graphics or BitmapText object, this will fail, and you'll need to provide a specific\r\n * shape for it to use.\r\n *\r\n * You can also provide an Input Configuration Object as the only argument to this method.\r\n *\r\n * @method Phaser.GameObjects.GameObject#setInteractive\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Types.Input.InputConfiguration|any)} [shape] - Either an input configuration object, or a geometric shape that defines the hit area for the Game Object. If not specified a Rectangle will be used.\r\n * @param {Phaser.Types.Input.HitAreaCallback} [callback] - A callback to be invoked when the Game Object is interacted with. If you provide a shape you must also provide a callback.\r\n * @param {boolean} [dropZone=false] - Should this Game Object be treated as a drop zone target?\r\n *\r\n * @return {this} This GameObject.\r\n */\r\n setInteractive: function (shape, callback, dropZone)\r\n {\r\n this.scene.sys.input.enable(this, shape, callback, dropZone);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * If this Game Object has previously been enabled for input, this will disable it.\r\n *\r\n * An object that is disabled for input stops processing or being considered for\r\n * input events, but can be turned back on again at any time by simply calling\r\n * `setInteractive()` with no arguments provided.\r\n *\r\n * If want to completely remove interaction from this Game Object then use `removeInteractive` instead.\r\n *\r\n * @method Phaser.GameObjects.GameObject#disableInteractive\r\n * @since 3.7.0\r\n *\r\n * @return {this} This GameObject.\r\n */\r\n disableInteractive: function ()\r\n {\r\n if (this.input)\r\n {\r\n this.input.enabled = false;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * If this Game Object has previously been enabled for input, this will queue it\r\n * for removal, causing it to no longer be interactive. The removal happens on\r\n * the next game step, it is not immediate.\r\n *\r\n * The Interactive Object that was assigned to this Game Object will be destroyed,\r\n * removed from the Input Manager and cleared from this Game Object.\r\n *\r\n * If you wish to re-enable this Game Object at a later date you will need to\r\n * re-create its InteractiveObject by calling `setInteractive` again.\r\n *\r\n * If you wish to only temporarily stop an object from receiving input then use\r\n * `disableInteractive` instead, as that toggles the interactive state, where-as\r\n * this erases it completely.\r\n * \r\n * If you wish to resize a hit area, don't remove and then set it as being\r\n * interactive. Instead, access the hitarea object directly and resize the shape\r\n * being used. I.e.: `sprite.input.hitArea.setSize(width, height)` (assuming the\r\n * shape is a Rectangle, which it is by default.)\r\n *\r\n * @method Phaser.GameObjects.GameObject#removeInteractive\r\n * @since 3.7.0\r\n *\r\n * @return {this} This GameObject.\r\n */\r\n removeInteractive: function ()\r\n {\r\n this.scene.sys.input.clear(this);\r\n\r\n this.input = undefined;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * To be overridden by custom GameObjects. Allows base objects to be used in a Pool.\r\n *\r\n * @method Phaser.GameObjects.GameObject#update\r\n * @since 3.0.0\r\n *\r\n * @param {...*} [args] - args\r\n */\r\n update: function ()\r\n {\r\n },\r\n\r\n /**\r\n * Returns a JSON representation of the Game Object.\r\n *\r\n * @method Phaser.GameObjects.GameObject#toJSON\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Types.GameObjects.JSONGameObject} A JSON representation of the Game Object.\r\n */\r\n toJSON: function ()\r\n {\r\n return ComponentsToJSON(this);\r\n },\r\n\r\n /**\r\n * Compares the renderMask with the renderFlags to see if this Game Object will render or not.\r\n * Also checks the Game Object against the given Cameras exclusion list.\r\n *\r\n * @method Phaser.GameObjects.GameObject#willRender\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera to check against this Game Object.\r\n *\r\n * @return {boolean} True if the Game Object should be rendered, otherwise false.\r\n */\r\n willRender: function (camera)\r\n {\r\n return !(GameObject.RENDER_MASK !== this.renderFlags || (this.cameraFilter !== 0 && (this.cameraFilter & camera.id)));\r\n },\r\n\r\n /**\r\n * Returns an array containing the display list index of either this Game Object, or if it has one,\r\n * its parent Container. It then iterates up through all of the parent containers until it hits the\r\n * root of the display list (which is index 0 in the returned array).\r\n *\r\n * Used internally by the InputPlugin but also useful if you wish to find out the display depth of\r\n * this Game Object and all of its ancestors.\r\n *\r\n * @method Phaser.GameObjects.GameObject#getIndexList\r\n * @since 3.4.0\r\n *\r\n * @return {integer[]} An array of display list position indexes.\r\n */\r\n getIndexList: function ()\r\n {\r\n // eslint-disable-next-line consistent-this\r\n var child = this;\r\n var parent = this.parentContainer;\r\n\r\n var indexes = [];\r\n\r\n while (parent)\r\n {\r\n // indexes.unshift([parent.getIndex(child), parent.name]);\r\n indexes.unshift(parent.getIndex(child));\r\n\r\n child = parent;\r\n\r\n if (!parent.parentContainer)\r\n {\r\n break;\r\n }\r\n else\r\n {\r\n parent = parent.parentContainer;\r\n }\r\n }\r\n\r\n // indexes.unshift([this.scene.sys.displayList.getIndex(child), 'root']);\r\n indexes.unshift(this.scene.sys.displayList.getIndex(child));\r\n\r\n return indexes;\r\n },\r\n\r\n /**\r\n * Destroys this Game Object removing it from the Display List and Update List and\r\n * severing all ties to parent resources.\r\n *\r\n * Also removes itself from the Input Manager and Physics Manager if previously enabled.\r\n *\r\n * Use this to remove a Game Object from your game if you don't ever plan to use it again.\r\n * As long as no reference to it exists within your own code it should become free for\r\n * garbage collection by the browser.\r\n *\r\n * If you just want to temporarily disable an object then look at using the\r\n * Game Object Pool instead of destroying it, as destroyed objects cannot be resurrected.\r\n *\r\n * @method Phaser.GameObjects.GameObject#destroy\r\n * @fires Phaser.GameObjects.Events#DESTROY\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} [fromScene=false] - Is this Game Object being destroyed as the result of a Scene shutdown?\r\n */\r\n destroy: function (fromScene)\r\n {\r\n if (fromScene === undefined) { fromScene = false; }\r\n\r\n // This Game Object has already been destroyed\r\n if (!this.scene || this.ignoreDestroy)\r\n {\r\n return;\r\n }\r\n\r\n if (this.preDestroy)\r\n {\r\n this.preDestroy.call(this);\r\n }\r\n\r\n this.emit(Events.DESTROY, this);\r\n\r\n var sys = this.scene.sys;\r\n\r\n if (!fromScene)\r\n {\r\n sys.displayList.remove(this);\r\n sys.updateList.remove(this);\r\n }\r\n\r\n if (this.input)\r\n {\r\n sys.input.clear(this);\r\n this.input = undefined;\r\n }\r\n\r\n if (this.data)\r\n {\r\n this.data.destroy();\r\n\r\n this.data = undefined;\r\n }\r\n\r\n if (this.body)\r\n {\r\n this.body.destroy();\r\n this.body = undefined;\r\n }\r\n\r\n // Tell the Scene to re-sort the children\r\n if (!fromScene)\r\n {\r\n sys.queueDepthSort();\r\n }\r\n\r\n this.active = false;\r\n this.visible = false;\r\n\r\n this.scene = undefined;\r\n\r\n this.parentContainer = undefined;\r\n\r\n this.removeAllListeners();\r\n }\r\n\r\n});\r\n\r\n/**\r\n * The bitmask that `GameObject.renderFlags` is compared against to determine if the Game Object will render or not.\r\n *\r\n * @constant {integer} RENDER_MASK\r\n * @memberof Phaser.GameObjects.GameObject\r\n * @default\r\n */\r\nGameObject.RENDER_MASK = 15;\r\n\r\nmodule.exports = GameObject;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9HYW1lT2JqZWN0LmpzPzE1NzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsdUJBQXVCLG1CQUFPLENBQUMsdUZBQXFCO0FBQ3BELGtCQUFrQixtQkFBTyxDQUFDLDBFQUFxQjtBQUMvQyxtQkFBbUIsbUJBQU8sQ0FBQyw0REFBZTtBQUMxQyxhQUFhLG1CQUFPLENBQUMsdUVBQVU7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQkFBaUI7QUFDaEM7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLDJEQUEyRDtBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnQkFBZ0I7QUFDL0IsZUFBZSxFQUFFO0FBQ2pCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGtCQUFrQjtBQUNqQztBQUNBLGdCQUFnQixFQUFFO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNENBQTRDO0FBQzNELGVBQWUsbUNBQW1DO0FBQ2xELGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEtBQUs7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isd0NBQXdDO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsVUFBVTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLG1CQUFtQjs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLGNBQWMsUUFBUTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL0dhbWVPYmplY3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzVG9KU09OID0gcmVxdWlyZSgnLi9jb21wb25lbnRzL1RvSlNPTicpO1xyXG52YXIgRGF0YU1hbmFnZXIgPSByZXF1aXJlKCcuLi9kYXRhL0RhdGFNYW5hZ2VyJyk7XHJcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuL2V2ZW50cycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIGJhc2UgY2xhc3MgdGhhdCBhbGwgR2FtZSBPYmplY3RzIGV4dGVuZC5cclxuICogWW91IGRvbid0IGNyZWF0ZSBHYW1lT2JqZWN0cyBkaXJlY3RseSBhbmQgdGhleSBjYW5ub3QgYmUgYWRkZWQgdG8gdGhlIGRpc3BsYXkgbGlzdC5cclxuICogSW5zdGVhZCwgdXNlIHRoZW0gYXMgdGhlIGJhc2UgZm9yIHlvdXIgb3duIGN1c3RvbSBjbGFzc2VzLlxyXG4gKlxyXG4gKiBAY2xhc3MgR2FtZU9iamVjdFxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBleHRlbmRzIFBoYXNlci5FdmVudHMuRXZlbnRFbWl0dGVyXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgYmVsb25ncy5cclxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBBIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHR5cGUgb2YgR2FtZSBPYmplY3QsIGkuZS4gYHNwcml0ZWAuXHJcbiAqL1xyXG52YXIgR2FtZU9iamVjdCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogRXZlbnRFbWl0dGVyLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gR2FtZU9iamVjdCAoc2NlbmUsIHR5cGUpXHJcbiAgICB7XHJcbiAgICAgICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuXHJcbiAgICAgICAgICogR2FtZSBPYmplY3RzIGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgU2NlbmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNzY2VuZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmV9XHJcbiAgICAgICAgICogQHByb3RlY3RlZFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QsIGkuZS4gYHNwcml0ZWAuXHJcbiAgICAgICAgICogVXNlZCBpbnRlcm5hbGx5IGJ5IFBoYXNlciBidXQgaXMgYXZhaWxhYmxlIGZvciB5b3VyIG93biBjdXN0b20gY2xhc3NlcyB0byBwb3B1bGF0ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I3R5cGVcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogUGhhc2VyIGl0c2VsZiB3aWxsIG5ldmVyIG1vZGlmeSB0aGlzIHZhbHVlLCBhbHRob3VnaCBwbHVnaW5zIG1heSBkbyBzby5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byB0cmFjayB0aGUgc3RhdGUgb2YgYSBHYW1lIE9iamVjdCBkdXJpbmcgaXRzIGxpZmV0aW1lLiBGb3IgZXhhbXBsZSwgaXQgY291bGQgbW92ZSBmcm9tXHJcbiAgICAgICAgICogYSBzdGF0ZSBvZiAnbW92aW5nJywgdG8gJ2F0dGFja2luZycsIHRvICdkZWFkJy4gVGhlIHN0YXRlIHZhbHVlIHNob3VsZCBiZSBhbiBpbnRlZ2VyIChpZGVhbGx5IG1hcHBlZCB0byBhIGNvbnN0YW50XHJcbiAgICAgICAgICogaW4geW91ciBnYW1lIGNvZGUpLCBvciBhIHN0cmluZy4gVGhlc2UgYXJlIHJlY29tbWVuZGVkIHRvIGtlZXAgaXQgbGlnaHQgYW5kIHNpbXBsZSwgd2l0aCBmYXN0IGNvbXBhcmlzb25zLlxyXG4gICAgICAgICAqIElmIHlvdSBuZWVkIHRvIHN0b3JlIGNvbXBsZXggZGF0YSBhYm91dCB5b3VyIEdhbWUgT2JqZWN0LCBsb29rIGF0IHVzaW5nIHRoZSBEYXRhIENvbXBvbmVudCBpbnN0ZWFkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Qjc3RhdGVcclxuICAgICAgICAgKiBAdHlwZSB7KGludGVnZXJ8c3RyaW5nKX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBwYXJlbnQgQ29udGFpbmVyIG9mIHRoaXMgR2FtZSBPYmplY3QsIGlmIGl0IGhhcyBvbmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNwYXJlbnRDb250YWluZXJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lcn1cclxuICAgICAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBhcmVudENvbnRhaW5lciA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBuYW1lIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgICAgICogRW1wdHkgYnkgZGVmYXVsdCBhbmQgbmV2ZXIgcG9wdWxhdGVkIGJ5IFBoYXNlciwgdGhpcyBpcyBsZWZ0IGZvciBkZXZlbG9wZXJzIHRvIHVzZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I25hbWVcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBkZWZhdWx0ICcnXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5uYW1lID0gJyc7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBhY3RpdmUgc3RhdGUgb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAgICAgKiBBIEdhbWUgT2JqZWN0IHdpdGggYW4gYWN0aXZlIHN0YXRlIG9mIGB0cnVlYCBpcyBwcm9jZXNzZWQgYnkgdGhlIFNjZW5lcyBVcGRhdGVMaXN0LCBpZiBhZGRlZCB0byBpdC5cclxuICAgICAgICAgKiBBbiBhY3RpdmUgb2JqZWN0IGlzIG9uZSB3aGljaCBpcyBoYXZpbmcgaXRzIGxvZ2ljIGFuZCBpbnRlcm5hbCBzeXN0ZW1zIHVwZGF0ZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNhY3RpdmVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgVGFiIEluZGV4IG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAgICAgKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBieSBwbHVnaW5zIGFuZCB0aGUgSW5wdXQgTWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I3RhYkluZGV4XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgLTFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRhYkluZGV4ID0gLTE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgRGF0YSBNYW5hZ2VyLlxyXG4gICAgICAgICAqIEl0IGFsbG93cyB5b3UgdG8gc3RvcmUsIHF1ZXJ5IGFuZCBnZXQga2V5L3ZhbHVlIHBhaXJlZCBpbmZvcm1hdGlvbiBzcGVjaWZpYyB0byB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICAgICAqIGBudWxsYCBieSBkZWZhdWx0LiBBdXRvbWF0aWNhbGx5IGNyZWF0ZWQgaWYgeW91IHVzZSBgZ2V0RGF0YWAgb3IgYHNldERhdGFgIG9yIGBzZXREYXRhRW5hYmxlZGAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNkYXRhXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5EYXRhLkRhdGFNYW5hZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRhdGEgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZmxhZ3MgdGhhdCBhcmUgY29tcGFyZWQgYWdhaW5zdCBgUkVOREVSX01BU0tgIHRvIGRldGVybWluZSBpZiB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgcmVuZGVyIG9yIG5vdC5cclxuICAgICAgICAgKiBUaGUgYml0cyBhcmUgMDAwMSB8IDAwMTAgfCAwMTAwIHwgMTAwMCBzZXQgYnkgdGhlIGNvbXBvbmVudHMgVmlzaWJsZSwgQWxwaGEsIFRyYW5zZm9ybSBhbmQgVGV4dHVyZSByZXNwZWN0aXZlbHkuXHJcbiAgICAgICAgICogSWYgdGhvc2UgY29tcG9uZW50cyBhcmUgbm90IHVzZWQgYnkgeW91ciBjdXN0b20gY2xhc3MgdGhlbiB5b3UgY2FuIHVzZSB0aGlzIGJpdG1hc2sgYXMgeW91IHdpc2guXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNyZW5kZXJGbGFnc1xyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDE1XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZW5kZXJGbGFncyA9IDE1O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGJpdG1hc2sgdGhhdCBjb250cm9scyBpZiB0aGlzIEdhbWUgT2JqZWN0IGlzIGRyYXduIGJ5IGEgQ2FtZXJhIG9yIG5vdC5cclxuICAgICAgICAgKiBOb3QgdXN1YWxseSBzZXQgZGlyZWN0bHksIGluc3RlYWQgY2FsbCBgQ2FtZXJhLmlnbm9yZWAsIGhvd2V2ZXIgeW91IGNhblxyXG4gICAgICAgICAqIHNldCB0aGlzIHByb3BlcnR5IGRpcmVjdGx5IHVzaW5nIHRoZSBDYW1lcmEuaWQgcHJvcGVydHk6XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAqIHRoaXMuY2FtZXJhRmlsdGVyIHw9IGNhbWVyYS5pZFxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjY2FtZXJhRmlsdGVyXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYW1lcmFGaWx0ZXIgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiB0aGlzIEdhbWUgT2JqZWN0IGlzIGVuYWJsZWQgZm9yIGlucHV0IHRoZW4gdGhpcyBwcm9wZXJ0eSB3aWxsIGNvbnRhaW4gYW4gSW50ZXJhY3RpdmVPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgICAgICogTm90IHVzdWFsbHkgc2V0IGRpcmVjdGx5LiBJbnN0ZWFkIGNhbGwgYEdhbWVPYmplY3Quc2V0SW50ZXJhY3RpdmUoKWAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNpbnB1dFxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLlR5cGVzLklucHV0LkludGVyYWN0aXZlT2JqZWN0fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlucHV0ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgdGhpcyBHYW1lIE9iamVjdCBpcyBlbmFibGVkIGZvciBwaHlzaWNzIHRoZW4gdGhpcyBwcm9wZXJ0eSB3aWxsIGNvbnRhaW4gYSByZWZlcmVuY2UgdG8gYSBQaHlzaWNzIEJvZHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNib2R5XHJcbiAgICAgICAgICogQHR5cGUgez8ob2JqZWN0fFBoYXNlci5QaHlzaWNzLkFyY2FkZS5Cb2R5fFBoYXNlci5QaHlzaWNzLkltcGFjdC5Cb2R5KX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5ib2R5ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhpcyBHYW1lIE9iamVjdCB3aWxsIGlnbm9yZSBhbGwgY2FsbHMgbWFkZSB0byBpdHMgZGVzdHJveSBtZXRob2QgaWYgdGhpcyBmbGFnIGlzIHNldCB0byBgdHJ1ZWAuXHJcbiAgICAgICAgICogVGhpcyBpbmNsdWRlcyBjYWxscyB0aGF0IG1heSBjb21lIGZyb20gYSBHcm91cCwgQ29udGFpbmVyIG9yIHRoZSBTY2VuZSBpdHNlbGYuXHJcbiAgICAgICAgICogV2hpbGUgaXQgYWxsb3dzIHlvdSB0byBwZXJzaXN0IGEgR2FtZSBPYmplY3QgYWNyb3NzIFNjZW5lcywgcGxlYXNlIHVuZGVyc3RhbmQgeW91IGFyZSBlbnRpcmVseVxyXG4gICAgICAgICAqIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyByZWZlcmVuY2VzIHRvIGFuZCBmcm9tIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNpZ25vcmVEZXN0cm95XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlnbm9yZURlc3Ryb3kgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gIFRlbGwgdGhlIFNjZW5lIHRvIHJlLXNvcnQgdGhlIGNoaWxkcmVuXHJcbiAgICAgICAgc2NlbmUuc3lzLnF1ZXVlRGVwdGhTb3J0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYGFjdGl2ZWAgcHJvcGVydHkgb2YgdGhpcyBHYW1lIE9iamVjdCBhbmQgcmV0dXJucyB0aGlzIEdhbWUgT2JqZWN0IGZvciBmdXJ0aGVyIGNoYWluaW5nLlxyXG4gICAgICogQSBHYW1lIE9iamVjdCB3aXRoIGl0cyBgYWN0aXZlYCBwcm9wZXJ0eSBzZXQgdG8gYHRydWVgIHdpbGwgYmUgdXBkYXRlZCBieSB0aGUgU2NlbmVzIFVwZGF0ZUxpc3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNzZXRBY3RpdmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBUcnVlIGlmIHRoaXMgR2FtZSBPYmplY3Qgc2hvdWxkIGJlIHNldCBhcyBhY3RpdmUsIGZhbHNlIGlmIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWVPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEFjdGl2ZTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGBuYW1lYCBwcm9wZXJ0eSBvZiB0aGlzIEdhbWUgT2JqZWN0IGFuZCByZXR1cm5zIHRoaXMgR2FtZSBPYmplY3QgZm9yIGZ1cnRoZXIgY2hhaW5pbmcuXHJcbiAgICAgKiBUaGUgYG5hbWVgIHByb3BlcnR5IGlzIG5vdCBwb3B1bGF0ZWQgYnkgUGhhc2VyIGFuZCBpcyBwcmVzZW50ZWQgZm9yIHlvdXIgb3duIHVzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I3NldE5hbWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIFRoZSBuYW1lIHRvIGJlIGdpdmVuIHRvIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXROYW1lOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogUGhhc2VyIGl0c2VsZiB3aWxsIG5ldmVyIG1vZGlmeSB0aGUgU3RhdGUgb2YgYSBHYW1lIE9iamVjdCwgYWx0aG91Z2ggcGx1Z2lucyBtYXkgZG8gc28uXHJcbiAgICAgKiBcclxuICAgICAqIEZvciBleGFtcGxlLCBhIEdhbWUgT2JqZWN0IGNvdWxkIGNoYW5nZSBmcm9tIGEgc3RhdGUgb2YgJ21vdmluZycsIHRvICdhdHRhY2tpbmcnLCB0byAnZGVhZCcuXHJcbiAgICAgKiBUaGUgc3RhdGUgdmFsdWUgc2hvdWxkIHR5cGljYWxseSBiZSBhbiBpbnRlZ2VyIChpZGVhbGx5IG1hcHBlZCB0byBhIGNvbnN0YW50XHJcbiAgICAgKiBpbiB5b3VyIGdhbWUgY29kZSksIGJ1dCBjb3VsZCBhbHNvIGJlIGEgc3RyaW5nLiBJdCBpcyByZWNvbW1lbmRlZCB0byBrZWVwIGl0IGxpZ2h0IGFuZCBzaW1wbGUuXHJcbiAgICAgKiBJZiB5b3UgbmVlZCB0byBzdG9yZSBjb21wbGV4IGRhdGEgYWJvdXQgeW91ciBHYW1lIE9iamVjdCwgbG9vayBhdCB1c2luZyB0aGUgRGF0YSBDb21wb25lbnQgaW5zdGVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I3NldFN0YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoaW50ZWdlcnxzdHJpbmcpfSB2YWx1ZSAtIFRoZSBzdGF0ZSBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTdGF0ZTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIERhdGEgTWFuYWdlciBjb21wb25lbnQgdG8gdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I3NldERhdGFFbmFibGVkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqIEBzZWUgUGhhc2VyLkRhdGEuRGF0YU1hbmFnZXJcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWVPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldERhdGFFbmFibGVkOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5kYXRhKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhID0gbmV3IERhdGFNYW5hZ2VyKHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxsb3dzIHlvdSB0byBzdG9yZSBhIGtleSB2YWx1ZSBwYWlyIHdpdGhpbiB0aGlzIEdhbWUgT2JqZWN0cyBEYXRhIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogSWYgdGhlIEdhbWUgT2JqZWN0IGhhcyBub3QgYmVlbiBlbmFibGVkIGZvciBkYXRhICh2aWEgYHNldERhdGFFbmFibGVkYCkgdGhlbiBpdCB3aWxsIGJlIGVuYWJsZWRcclxuICAgICAqIGJlZm9yZSBzZXR0aW5nIHRoZSB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUga2V5IGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgRGF0YSBNYW5hZ2VyIHRoZW4gaXQgaXMgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBzcHJpdGUuc2V0RGF0YSgnbmFtZScsICdSZWQgR2VtIFN0b25lJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIGFsc28gcGFzcyBpbiBhbiBvYmplY3Qgb2Yga2V5IHZhbHVlIHBhaXJzIGFzIHRoZSBmaXJzdCBhcmd1bWVudDpcclxuICAgICAqXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBzcHJpdGUuc2V0RGF0YSh7IG5hbWU6ICdSZWQgR2VtIFN0b25lJywgbGV2ZWw6IDIsIG93bmVyOiAnTGluaycsIGdvbGQ6IDUwIH0pO1xyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogVG8gZ2V0IGEgdmFsdWUgYmFjayBhZ2FpbiB5b3UgY2FuIGNhbGwgYGdldERhdGFgOlxyXG4gICAgICpcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHNwcml0ZS5nZXREYXRhKCdnb2xkJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBPciB5b3UgY2FuIGFjY2VzcyB0aGUgdmFsdWUgZGlyZWN0bHkgdmlhIHRoZSBgdmFsdWVzYCBwcm9wZXJ0eSwgd2hlcmUgaXQgd29ya3MgbGlrZSBhbnkgb3RoZXIgdmFyaWFibGU6XHJcbiAgICAgKlxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogc3ByaXRlLmRhdGEudmFsdWVzLmdvbGQgKz0gNTA7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBXaGVuIHRoZSB2YWx1ZSBpcyBmaXJzdCBzZXQsIGEgYHNldGRhdGFgIGV2ZW50IGlzIGVtaXR0ZWQgZnJvbSB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBrZXkgYWxyZWFkeSBleGlzdHMsIGEgYGNoYW5nZWRhdGFgIGV2ZW50IGlzIGVtaXR0ZWQgaW5zdGVhZCwgYWxvbmcgYW4gZXZlbnQgbmFtZWQgYWZ0ZXIgdGhlIGtleS5cclxuICAgICAqIEZvciBleGFtcGxlLCBpZiB5b3UgdXBkYXRlZCBhbiBleGlzdGluZyBrZXkgY2FsbGVkIGBQbGF5ZXJMaXZlc2AgdGhlbiBpdCB3b3VsZCBlbWl0IHRoZSBldmVudCBgY2hhbmdlZGF0YS1QbGF5ZXJMaXZlc2AuXHJcbiAgICAgKiBUaGVzZSBldmVudHMgd2lsbCBiZSBlbWl0dGVkIHJlZ2FyZGxlc3MgaWYgeW91IHVzZSB0aGlzIG1ldGhvZCB0byBzZXQgdGhlIHZhbHVlLCBvciB0aGUgZGlyZWN0IGB2YWx1ZXNgIHNldHRlci5cclxuICAgICAqXHJcbiAgICAgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBkYXRhIGtleXMgYXJlIGNhc2Utc2Vuc2l0aXZlIGFuZCBtdXN0IGJlIHZhbGlkIEphdmFTY3JpcHQgT2JqZWN0IHByb3BlcnR5IHN0cmluZ3MuXHJcbiAgICAgKiBUaGlzIG1lYW5zIHRoZSBrZXlzIGBnb2xkYCBhbmQgYEdvbGRgIGFyZSB0cmVhdGVkIGFzIHR3byB1bmlxdWUgdmFsdWVzIHdpdGhpbiB0aGUgRGF0YSBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Qjc2V0RGF0YVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfG9iamVjdCl9IGtleSAtIFRoZSBrZXkgdG8gc2V0IHRoZSB2YWx1ZSBmb3IuIE9yIGFuIG9iamVjdCBvZiBrZXkgdmFsdWUgcGFpcnMuIElmIGFuIG9iamVjdCB0aGUgYGRhdGFgIGFyZ3VtZW50IGlzIGlnbm9yZWQuXHJcbiAgICAgKiBAcGFyYW0geyp9IFtkYXRhXSAtIFRoZSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBnaXZlbiBrZXkuIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZCBhcyB0aGUga2V5IHRoaXMgYXJndW1lbnQgaXMgaWdub3JlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWVPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldERhdGE6IGZ1bmN0aW9uIChrZXksIHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5kYXRhKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhID0gbmV3IERhdGFNYW5hZ2VyKHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kYXRhLnNldChrZXksIHZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGtleSBpbiB0aGlzIEdhbWUgT2JqZWN0cyBEYXRhIE1hbmFnZXIsIG9yIHVuZGVmaW5lZCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gYWxzbyBhY2Nlc3MgdmFsdWVzIHZpYSB0aGUgYHZhbHVlc2Agb2JqZWN0LiBGb3IgZXhhbXBsZSwgaWYgeW91IGhhZCBhIGtleSBjYWxsZWQgYGdvbGRgIHlvdSBjYW4gZG8gZWl0aGVyOlxyXG4gICAgICpcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHNwcml0ZS5nZXREYXRhKCdnb2xkJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBPciBhY2Nlc3MgdGhlIHZhbHVlIGRpcmVjdGx5OlxyXG4gICAgICpcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHNwcml0ZS5kYXRhLnZhbHVlcy5nb2xkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBhbHNvIHBhc3MgaW4gYW4gYXJyYXkgb2Yga2V5cywgaW4gd2hpY2ggY2FzZSBhbiBhcnJheSBvZiB2YWx1ZXMgd2lsbCBiZSByZXR1cm5lZDpcclxuICAgICAqXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBzcHJpdGUuZ2V0RGF0YShbICdnb2xkJywgJ2FybW9yJywgJ2hlYWx0aCcgXSk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGFwcHJvYWNoIGlzIHVzZWZ1bCBmb3IgZGVzdHJ1Y3R1cmluZyBhcnJheXMgaW4gRVM2LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjZ2V0RGF0YVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfHN0cmluZ1tdKX0ga2V5IC0gVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmV0cmlldmUsIG9yIGFuIGFycmF5IG9mIGtleXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Kn0gVGhlIHZhbHVlIGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4ga2V5LCBvciBhbiBhcnJheSBvZiB2YWx1ZXMsIHRoZSBvcmRlciBvZiB3aGljaCB3aWxsIG1hdGNoIHRoZSBpbnB1dCBhcnJheS5cclxuICAgICAqL1xyXG4gICAgZ2V0RGF0YTogZnVuY3Rpb24gKGtleSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGF0YSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IG5ldyBEYXRhTWFuYWdlcih0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0KGtleSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFzcyB0aGlzIEdhbWUgT2JqZWN0IHRvIHRoZSBJbnB1dCBNYW5hZ2VyIHRvIGVuYWJsZSBpdCBmb3IgSW5wdXQuXHJcbiAgICAgKlxyXG4gICAgICogSW5wdXQgd29ya3MgYnkgdXNpbmcgaGl0IGFyZWFzLCB0aGVzZSBhcmUgbmVhcmx5IGFsd2F5cyBnZW9tZXRyaWMgc2hhcGVzLCBzdWNoIGFzIHJlY3RhbmdsZXMgb3IgY2lyY2xlcywgdGhhdCBhY3QgYXMgdGhlIGhpdCBhcmVhXHJcbiAgICAgKiBmb3IgdGhlIEdhbWUgT2JqZWN0LiBIb3dldmVyLCB5b3UgY2FuIHByb3ZpZGUgeW91ciBvd24gaGl0IGFyZWEgc2hhcGUgYW5kIGNhbGxiYWNrLCBzaG91bGQgeW91IHdpc2ggdG8gaGFuZGxlIHNvbWUgbW9yZSBhZHZhbmNlZFxyXG4gICAgICogaW5wdXQgZGV0ZWN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgaXQgd2lsbCB0cnkgYW5kIGNyZWF0ZSBhIHJlY3RhbmdsZSBoaXQgYXJlYSBiYXNlZCBvbiB0aGUgdGV4dHVyZSBmcmFtZSB0aGUgR2FtZSBPYmplY3QgaXMgdXNpbmcuIElmXHJcbiAgICAgKiB0aGlzIGlzbid0IGEgdGV4dHVyZS1ib3VuZCBvYmplY3QsIHN1Y2ggYXMgYSBHcmFwaGljcyBvciBCaXRtYXBUZXh0IG9iamVjdCwgdGhpcyB3aWxsIGZhaWwsIGFuZCB5b3UnbGwgbmVlZCB0byBwcm92aWRlIGEgc3BlY2lmaWNcclxuICAgICAqIHNoYXBlIGZvciBpdCB0byB1c2UuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYW4gSW5wdXQgQ29uZmlndXJhdGlvbiBPYmplY3QgYXMgdGhlIG9ubHkgYXJndW1lbnQgdG8gdGhpcyBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNzZXRJbnRlcmFjdGl2ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLlR5cGVzLklucHV0LklucHV0Q29uZmlndXJhdGlvbnxhbnkpfSBbc2hhcGVdIC0gRWl0aGVyIGFuIGlucHV0IGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhIGdlb21ldHJpYyBzaGFwZSB0aGF0IGRlZmluZXMgdGhlIGhpdCBhcmVhIGZvciB0aGUgR2FtZSBPYmplY3QuIElmIG5vdCBzcGVjaWZpZWQgYSBSZWN0YW5nbGUgd2lsbCBiZSB1c2VkLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuSW5wdXQuSGl0QXJlYUNhbGxiYWNrfSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB0byBiZSBpbnZva2VkIHdoZW4gdGhlIEdhbWUgT2JqZWN0IGlzIGludGVyYWN0ZWQgd2l0aC4gSWYgeW91IHByb3ZpZGUgYSBzaGFwZSB5b3UgbXVzdCBhbHNvIHByb3ZpZGUgYSBjYWxsYmFjay5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Ryb3Bab25lPWZhbHNlXSAtIFNob3VsZCB0aGlzIEdhbWUgT2JqZWN0IGJlIHRyZWF0ZWQgYXMgYSBkcm9wIHpvbmUgdGFyZ2V0P1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZU9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0SW50ZXJhY3RpdmU6IGZ1bmN0aW9uIChzaGFwZSwgY2FsbGJhY2ssIGRyb3Bab25lKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2NlbmUuc3lzLmlucHV0LmVuYWJsZSh0aGlzLCBzaGFwZSwgY2FsbGJhY2ssIGRyb3Bab25lKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgdGhpcyBHYW1lIE9iamVjdCBoYXMgcHJldmlvdXNseSBiZWVuIGVuYWJsZWQgZm9yIGlucHV0LCB0aGlzIHdpbGwgZGlzYWJsZSBpdC5cclxuICAgICAqXHJcbiAgICAgKiBBbiBvYmplY3QgdGhhdCBpcyBkaXNhYmxlZCBmb3IgaW5wdXQgc3RvcHMgcHJvY2Vzc2luZyBvciBiZWluZyBjb25zaWRlcmVkIGZvclxyXG4gICAgICogaW5wdXQgZXZlbnRzLCBidXQgY2FuIGJlIHR1cm5lZCBiYWNrIG9uIGFnYWluIGF0IGFueSB0aW1lIGJ5IHNpbXBseSBjYWxsaW5nXHJcbiAgICAgKiBgc2V0SW50ZXJhY3RpdmUoKWAgd2l0aCBubyBhcmd1bWVudHMgcHJvdmlkZWQuXHJcbiAgICAgKlxyXG4gICAgICogSWYgd2FudCB0byBjb21wbGV0ZWx5IHJlbW92ZSBpbnRlcmFjdGlvbiBmcm9tIHRoaXMgR2FtZSBPYmplY3QgdGhlbiB1c2UgYHJlbW92ZUludGVyYWN0aXZlYCBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjZGlzYWJsZUludGVyYWN0aXZlXHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWVPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGRpc2FibGVJbnRlcmFjdGl2ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5pbnB1dClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgdGhpcyBHYW1lIE9iamVjdCBoYXMgcHJldmlvdXNseSBiZWVuIGVuYWJsZWQgZm9yIGlucHV0LCB0aGlzIHdpbGwgcXVldWUgaXRcclxuICAgICAqIGZvciByZW1vdmFsLCBjYXVzaW5nIGl0IHRvIG5vIGxvbmdlciBiZSBpbnRlcmFjdGl2ZS4gVGhlIHJlbW92YWwgaGFwcGVucyBvblxyXG4gICAgICogdGhlIG5leHQgZ2FtZSBzdGVwLCBpdCBpcyBub3QgaW1tZWRpYXRlLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBJbnRlcmFjdGl2ZSBPYmplY3QgdGhhdCB3YXMgYXNzaWduZWQgdG8gdGhpcyBHYW1lIE9iamVjdCB3aWxsIGJlIGRlc3Ryb3llZCxcclxuICAgICAqIHJlbW92ZWQgZnJvbSB0aGUgSW5wdXQgTWFuYWdlciBhbmQgY2xlYXJlZCBmcm9tIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogSWYgeW91IHdpc2ggdG8gcmUtZW5hYmxlIHRoaXMgR2FtZSBPYmplY3QgYXQgYSBsYXRlciBkYXRlIHlvdSB3aWxsIG5lZWQgdG9cclxuICAgICAqIHJlLWNyZWF0ZSBpdHMgSW50ZXJhY3RpdmVPYmplY3QgYnkgY2FsbGluZyBgc2V0SW50ZXJhY3RpdmVgIGFnYWluLlxyXG4gICAgICpcclxuICAgICAqIElmIHlvdSB3aXNoIHRvIG9ubHkgdGVtcG9yYXJpbHkgc3RvcCBhbiBvYmplY3QgZnJvbSByZWNlaXZpbmcgaW5wdXQgdGhlbiB1c2VcclxuICAgICAqIGBkaXNhYmxlSW50ZXJhY3RpdmVgIGluc3RlYWQsIGFzIHRoYXQgdG9nZ2xlcyB0aGUgaW50ZXJhY3RpdmUgc3RhdGUsIHdoZXJlLWFzXHJcbiAgICAgKiB0aGlzIGVyYXNlcyBpdCBjb21wbGV0ZWx5LlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB5b3Ugd2lzaCB0byByZXNpemUgYSBoaXQgYXJlYSwgZG9uJ3QgcmVtb3ZlIGFuZCB0aGVuIHNldCBpdCBhcyBiZWluZ1xyXG4gICAgICogaW50ZXJhY3RpdmUuIEluc3RlYWQsIGFjY2VzcyB0aGUgaGl0YXJlYSBvYmplY3QgZGlyZWN0bHkgYW5kIHJlc2l6ZSB0aGUgc2hhcGVcclxuICAgICAqIGJlaW5nIHVzZWQuIEkuZS46IGBzcHJpdGUuaW5wdXQuaGl0QXJlYS5zZXRTaXplKHdpZHRoLCBoZWlnaHQpYCAoYXNzdW1pbmcgdGhlXHJcbiAgICAgKiBzaGFwZSBpcyBhIFJlY3RhbmdsZSwgd2hpY2ggaXQgaXMgYnkgZGVmYXVsdC4pXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNyZW1vdmVJbnRlcmFjdGl2ZVxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZW1vdmVJbnRlcmFjdGl2ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNjZW5lLnN5cy5pbnB1dC5jbGVhcih0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnB1dCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVG8gYmUgb3ZlcnJpZGRlbiBieSBjdXN0b20gR2FtZU9iamVjdHMuIEFsbG93cyBiYXNlIG9iamVjdHMgdG8gYmUgdXNlZCBpbiBhIFBvb2wuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCN1cGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIC0gYXJnc1xyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjdG9KU09OXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuSlNPTkdhbWVPYmplY3R9IEEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHRvSlNPTjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gQ29tcG9uZW50c1RvSlNPTih0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb21wYXJlcyB0aGUgcmVuZGVyTWFzayB3aXRoIHRoZSByZW5kZXJGbGFncyB0byBzZWUgaWYgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHJlbmRlciBvciBub3QuXHJcbiAgICAgKiBBbHNvIGNoZWNrcyB0aGUgR2FtZSBPYmplY3QgYWdhaW5zdCB0aGUgZ2l2ZW4gQ2FtZXJhcyBleGNsdXNpb24gbGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I3dpbGxSZW5kZXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdG8gY2hlY2sgYWdhaW5zdCB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIEdhbWUgT2JqZWN0IHNob3VsZCBiZSByZW5kZXJlZCwgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICB3aWxsUmVuZGVyOiBmdW5jdGlvbiAoY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAhKEdhbWVPYmplY3QuUkVOREVSX01BU0sgIT09IHRoaXMucmVuZGVyRmxhZ3MgfHwgKHRoaXMuY2FtZXJhRmlsdGVyICE9PSAwICYmICh0aGlzLmNhbWVyYUZpbHRlciAmIGNhbWVyYS5pZCkpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGRpc3BsYXkgbGlzdCBpbmRleCBvZiBlaXRoZXIgdGhpcyBHYW1lIE9iamVjdCwgb3IgaWYgaXQgaGFzIG9uZSxcclxuICAgICAqIGl0cyBwYXJlbnQgQ29udGFpbmVyLiBJdCB0aGVuIGl0ZXJhdGVzIHVwIHRocm91Z2ggYWxsIG9mIHRoZSBwYXJlbnQgY29udGFpbmVycyB1bnRpbCBpdCBoaXRzIHRoZVxyXG4gICAgICogcm9vdCBvZiB0aGUgZGlzcGxheSBsaXN0ICh3aGljaCBpcyBpbmRleCAwIGluIHRoZSByZXR1cm5lZCBhcnJheSkuXHJcbiAgICAgKlxyXG4gICAgICogVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBJbnB1dFBsdWdpbiBidXQgYWxzbyB1c2VmdWwgaWYgeW91IHdpc2ggdG8gZmluZCBvdXQgdGhlIGRpc3BsYXkgZGVwdGggb2ZcclxuICAgICAqIHRoaXMgR2FtZSBPYmplY3QgYW5kIGFsbCBvZiBpdHMgYW5jZXN0b3JzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjZ2V0SW5kZXhMaXN0XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyW119IEFuIGFycmF5IG9mIGRpc3BsYXkgbGlzdCBwb3NpdGlvbiBpbmRleGVzLlxyXG4gICAgICovXHJcbiAgICBnZXRJbmRleExpc3Q6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtdGhpc1xyXG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Q29udGFpbmVyO1xyXG5cclxuICAgICAgICB2YXIgaW5kZXhlcyA9IFtdO1xyXG5cclxuICAgICAgICB3aGlsZSAocGFyZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gaW5kZXhlcy51bnNoaWZ0KFtwYXJlbnQuZ2V0SW5kZXgoY2hpbGQpLCBwYXJlbnQubmFtZV0pO1xyXG4gICAgICAgICAgICBpbmRleGVzLnVuc2hpZnQocGFyZW50LmdldEluZGV4KGNoaWxkKSk7XHJcblxyXG4gICAgICAgICAgICBjaGlsZCA9IHBhcmVudDtcclxuXHJcbiAgICAgICAgICAgIGlmICghcGFyZW50LnBhcmVudENvbnRhaW5lcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Q29udGFpbmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBpbmRleGVzLnVuc2hpZnQoW3RoaXMuc2NlbmUuc3lzLmRpc3BsYXlMaXN0LmdldEluZGV4KGNoaWxkKSwgJ3Jvb3QnXSk7XHJcbiAgICAgICAgaW5kZXhlcy51bnNoaWZ0KHRoaXMuc2NlbmUuc3lzLmRpc3BsYXlMaXN0LmdldEluZGV4KGNoaWxkKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBpbmRleGVzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoaXMgR2FtZSBPYmplY3QgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgRGlzcGxheSBMaXN0IGFuZCBVcGRhdGUgTGlzdCBhbmRcclxuICAgICAqIHNldmVyaW5nIGFsbCB0aWVzIHRvIHBhcmVudCByZXNvdXJjZXMuXHJcbiAgICAgKlxyXG4gICAgICogQWxzbyByZW1vdmVzIGl0c2VsZiBmcm9tIHRoZSBJbnB1dCBNYW5hZ2VyIGFuZCBQaHlzaWNzIE1hbmFnZXIgaWYgcHJldmlvdXNseSBlbmFibGVkLlxyXG4gICAgICpcclxuICAgICAqIFVzZSB0aGlzIHRvIHJlbW92ZSBhIEdhbWUgT2JqZWN0IGZyb20geW91ciBnYW1lIGlmIHlvdSBkb24ndCBldmVyIHBsYW4gdG8gdXNlIGl0IGFnYWluLlxyXG4gICAgICogQXMgbG9uZyBhcyBubyByZWZlcmVuY2UgdG8gaXQgZXhpc3RzIHdpdGhpbiB5b3VyIG93biBjb2RlIGl0IHNob3VsZCBiZWNvbWUgZnJlZSBmb3JcclxuICAgICAqIGdhcmJhZ2UgY29sbGVjdGlvbiBieSB0aGUgYnJvd3Nlci5cclxuICAgICAqXHJcbiAgICAgKiBJZiB5b3UganVzdCB3YW50IHRvIHRlbXBvcmFyaWx5IGRpc2FibGUgYW4gb2JqZWN0IHRoZW4gbG9vayBhdCB1c2luZyB0aGVcclxuICAgICAqIEdhbWUgT2JqZWN0IFBvb2wgaW5zdGVhZCBvZiBkZXN0cm95aW5nIGl0LCBhcyBkZXN0cm95ZWQgb2JqZWN0cyBjYW5ub3QgYmUgcmVzdXJyZWN0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNkZXN0cm95XHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkdhbWVPYmplY3RzLkV2ZW50cyNERVNUUk9ZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tU2NlbmU9ZmFsc2VdIC0gSXMgdGhpcyBHYW1lIE9iamVjdCBiZWluZyBkZXN0cm95ZWQgYXMgdGhlIHJlc3VsdCBvZiBhIFNjZW5lIHNodXRkb3duP1xyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoZnJvbVNjZW5lKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChmcm9tU2NlbmUgPT09IHVuZGVmaW5lZCkgeyBmcm9tU2NlbmUgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICAvLyAgVGhpcyBHYW1lIE9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZFxyXG4gICAgICAgIGlmICghdGhpcy5zY2VuZSB8fCB0aGlzLmlnbm9yZURlc3Ryb3kpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5wcmVEZXN0cm95KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wcmVEZXN0cm95LmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkRFU1RST1ksIHRoaXMpO1xyXG5cclxuICAgICAgICB2YXIgc3lzID0gdGhpcy5zY2VuZS5zeXM7XHJcblxyXG4gICAgICAgIGlmICghZnJvbVNjZW5lKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc3lzLmRpc3BsYXlMaXN0LnJlbW92ZSh0aGlzKTtcclxuICAgICAgICAgICAgc3lzLnVwZGF0ZUxpc3QucmVtb3ZlKHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzeXMuaW5wdXQuY2xlYXIodGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wdXQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5kYXRhKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhLmRlc3Ryb3koKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmJvZHkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmJvZHkuZGVzdHJveSgpO1xyXG4gICAgICAgICAgICB0aGlzLmJvZHkgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgVGVsbCB0aGUgU2NlbmUgdG8gcmUtc29ydCB0aGUgY2hpbGRyZW5cclxuICAgICAgICBpZiAoIWZyb21TY2VuZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHN5cy5xdWV1ZURlcHRoU29ydCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRDb250YWluZXIgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBUaGUgYml0bWFzayB0aGF0IGBHYW1lT2JqZWN0LnJlbmRlckZsYWdzYCBpcyBjb21wYXJlZCBhZ2FpbnN0IHRvIGRldGVybWluZSBpZiB0aGUgR2FtZSBPYmplY3Qgd2lsbCByZW5kZXIgb3Igbm90LlxyXG4gKlxyXG4gKiBAY29uc3RhbnQge2ludGVnZXJ9IFJFTkRFUl9NQVNLXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFxyXG4gKiBAZGVmYXVsdFxyXG4gKi9cclxuR2FtZU9iamVjdC5SRU5ERVJfTUFTSyA9IDE1O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHYW1lT2JqZWN0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/GameObject.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/GameObjectCreator.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/GameObjectCreator.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar PluginCache = __webpack_require__(/*! ../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar SceneEvents = __webpack_require__(/*! ../scene/events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Game Object Creator is a Scene plugin that allows you to quickly create many common\r\n * types of Game Objects and return them. Unlike the Game Object Factory, they are not automatically\r\n * added to the Scene.\r\n *\r\n * Game Objects directly register themselves with the Creator and inject their own creation\r\n * methods into the class.\r\n *\r\n * @class GameObjectCreator\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object Factory belongs.\r\n */\r\nvar GameObjectCreator = new Class({\r\n\r\n initialize:\r\n\r\n function GameObjectCreator (scene)\r\n {\r\n /**\r\n * The Scene to which this Game Object Creator belongs.\r\n *\r\n * @name Phaser.GameObjects.GameObjectCreator#scene\r\n * @type {Phaser.Scene}\r\n * @protected\r\n * @since 3.0.0\r\n */\r\n this.scene = scene;\r\n\r\n /**\r\n * A reference to the Scene.Systems.\r\n *\r\n * @name Phaser.GameObjects.GameObjectCreator#systems\r\n * @type {Phaser.Scenes.Systems}\r\n * @protected\r\n * @since 3.0.0\r\n */\r\n this.systems = scene.sys;\r\n\r\n /**\r\n * A reference to the Scene Display List.\r\n *\r\n * @name Phaser.GameObjects.GameObjectCreator#displayList\r\n * @type {Phaser.GameObjects.DisplayList}\r\n * @protected\r\n * @since 3.0.0\r\n */\r\n this.displayList;\r\n\r\n /**\r\n * A reference to the Scene Update List.\r\n *\r\n * @name Phaser.GameObjects.GameObjectCreator#updateList;\r\n * @type {Phaser.GameObjects.UpdateList}\r\n * @protected\r\n * @since 3.0.0\r\n */\r\n this.updateList;\r\n\r\n scene.sys.events.once(SceneEvents.BOOT, this.boot, this);\r\n scene.sys.events.on(SceneEvents.START, this.start, this);\r\n },\r\n\r\n /**\r\n * This method is called automatically, only once, when the Scene is first created.\r\n * Do not invoke it directly.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#boot\r\n * @private\r\n * @since 3.5.1\r\n */\r\n boot: function ()\r\n {\r\n this.displayList = this.systems.displayList;\r\n this.updateList = this.systems.updateList;\r\n\r\n this.systems.events.once(SceneEvents.DESTROY, this.destroy, this);\r\n },\r\n\r\n /**\r\n * This method is called automatically by the Scene when it is starting up.\r\n * It is responsible for creating local systems, properties and listening for Scene events.\r\n * Do not invoke it directly.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#start\r\n * @private\r\n * @since 3.5.0\r\n */\r\n start: function ()\r\n {\r\n this.systems.events.once(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n },\r\n\r\n /**\r\n * The Scene that owns this plugin is shutting down.\r\n * We need to kill and reset all internal properties as well as stop listening to Scene events.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#shutdown\r\n * @private\r\n * @since 3.0.0\r\n */\r\n shutdown: function ()\r\n {\r\n this.systems.events.off(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n },\r\n\r\n /**\r\n * The Scene that owns this plugin is being destroyed.\r\n * We need to shutdown and then kill off all external references.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#destroy\r\n * @private\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.shutdown();\r\n\r\n this.scene.sys.events.off(SceneEvents.START, this.start, this);\r\n\r\n this.scene = null;\r\n this.systems = null;\r\n this.displayList = null;\r\n this.updateList = null;\r\n }\r\n\r\n});\r\n\r\n// Static method called directly by the Game Object creator functions\r\n\r\nGameObjectCreator.register = function (factoryType, factoryFunction)\r\n{\r\n if (!GameObjectCreator.prototype.hasOwnProperty(factoryType))\r\n {\r\n GameObjectCreator.prototype[factoryType] = factoryFunction;\r\n }\r\n};\r\n\r\nGameObjectCreator.remove = function (factoryType)\r\n{\r\n if (GameObjectCreator.prototype.hasOwnProperty(factoryType))\r\n {\r\n delete GameObjectCreator.prototype[factoryType];\r\n }\r\n};\r\n\r\nPluginCache.register('GameObjectCreator', GameObjectCreator, 'make');\r\n\r\nmodule.exports = GameObjectCreator;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9HYW1lT2JqZWN0Q3JlYXRvci5qcz8wN2ZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ3BDLGtCQUFrQixtQkFBTyxDQUFDLGdGQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyx3RUFBaUI7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvR2FtZU9iamVjdENyZWF0b3IuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBQbHVnaW5DYWNoZSA9IHJlcXVpcmUoJy4uL3BsdWdpbnMvUGx1Z2luQ2FjaGUnKTtcclxudmFyIFNjZW5lRXZlbnRzID0gcmVxdWlyZSgnLi4vc2NlbmUvZXZlbnRzJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgR2FtZSBPYmplY3QgQ3JlYXRvciBpcyBhIFNjZW5lIHBsdWdpbiB0aGF0IGFsbG93cyB5b3UgdG8gcXVpY2tseSBjcmVhdGUgbWFueSBjb21tb25cclxuICogdHlwZXMgb2YgR2FtZSBPYmplY3RzIGFuZCByZXR1cm4gdGhlbS4gVW5saWtlIHRoZSBHYW1lIE9iamVjdCBGYWN0b3J5LCB0aGV5IGFyZSBub3QgYXV0b21hdGljYWxseVxyXG4gKiBhZGRlZCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIEdhbWUgT2JqZWN0cyBkaXJlY3RseSByZWdpc3RlciB0aGVtc2VsdmVzIHdpdGggdGhlIENyZWF0b3IgYW5kIGluamVjdCB0aGVpciBvd24gY3JlYXRpb25cclxuICogbWV0aG9kcyBpbnRvIHRoZSBjbGFzcy5cclxuICpcclxuICogQGNsYXNzIEdhbWVPYmplY3RDcmVhdG9yXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBHYW1lIE9iamVjdCBGYWN0b3J5IGJlbG9uZ3MuXHJcbiAqL1xyXG52YXIgR2FtZU9iamVjdENyZWF0b3IgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gR2FtZU9iamVjdENyZWF0b3IgKHNjZW5lKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IENyZWF0b3IgYmVsb25ncy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0Q3JlYXRvciNzY2VuZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmV9XHJcbiAgICAgICAgICogQHByb3RlY3RlZFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lLlN5c3RlbXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdENyZWF0b3Ijc3lzdGVtc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmVzLlN5c3RlbXN9XHJcbiAgICAgICAgICogQHByb3RlY3RlZFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcyA9IHNjZW5lLnN5cztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIERpc3BsYXkgTGlzdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0Q3JlYXRvciNkaXNwbGF5TGlzdFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuRGlzcGxheUxpc3R9XHJcbiAgICAgICAgICogQHByb3RlY3RlZFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUxpc3Q7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSBVcGRhdGUgTGlzdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0Q3JlYXRvciN1cGRhdGVMaXN0O1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuVXBkYXRlTGlzdH1cclxuICAgICAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy51cGRhdGVMaXN0O1xyXG5cclxuICAgICAgICBzY2VuZS5zeXMuZXZlbnRzLm9uY2UoU2NlbmVFdmVudHMuQk9PVCwgdGhpcy5ib290LCB0aGlzKTtcclxuICAgICAgICBzY2VuZS5zeXMuZXZlbnRzLm9uKFNjZW5lRXZlbnRzLlNUQVJULCB0aGlzLnN0YXJ0LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSwgb25seSBvbmNlLCB3aGVuIHRoZSBTY2VuZSBpcyBmaXJzdCBjcmVhdGVkLlxyXG4gICAgICogRG8gbm90IGludm9rZSBpdCBkaXJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0Q3JlYXRvciNib290XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuNS4xXHJcbiAgICAgKi9cclxuICAgIGJvb3Q6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5TGlzdCA9IHRoaXMuc3lzdGVtcy5kaXNwbGF5TGlzdDtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpc3QgPSB0aGlzLnN5c3RlbXMudXBkYXRlTGlzdDtcclxuXHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zLmV2ZW50cy5vbmNlKFNjZW5lRXZlbnRzLkRFU1RST1ksIHRoaXMuZGVzdHJveSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIFNjZW5lIHdoZW4gaXQgaXMgc3RhcnRpbmcgdXAuXHJcbiAgICAgKiBJdCBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgbG9jYWwgc3lzdGVtcywgcHJvcGVydGllcyBhbmQgbGlzdGVuaW5nIGZvciBTY2VuZSBldmVudHMuXHJcbiAgICAgKiBEbyBub3QgaW52b2tlIGl0IGRpcmVjdGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI3N0YXJ0XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcy5ldmVudHMub25jZShTY2VuZUV2ZW50cy5TSFVURE9XTiwgdGhpcy5zaHV0ZG93biwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNjZW5lIHRoYXQgb3ducyB0aGlzIHBsdWdpbiBpcyBzaHV0dGluZyBkb3duLlxyXG4gICAgICogV2UgbmVlZCB0byBraWxsIGFuZCByZXNldCBhbGwgaW50ZXJuYWwgcHJvcGVydGllcyBhcyB3ZWxsIGFzIHN0b3AgbGlzdGVuaW5nIHRvIFNjZW5lIGV2ZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0Q3JlYXRvciNzaHV0ZG93blxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBzaHV0ZG93bjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN5c3RlbXMuZXZlbnRzLm9mZihTY2VuZUV2ZW50cy5TSFVURE9XTiwgdGhpcy5zaHV0ZG93biwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNjZW5lIHRoYXQgb3ducyB0aGlzIHBsdWdpbiBpcyBiZWluZyBkZXN0cm95ZWQuXHJcbiAgICAgKiBXZSBuZWVkIHRvIHNodXRkb3duIGFuZCB0aGVuIGtpbGwgb2ZmIGFsbCBleHRlcm5hbCByZWZlcmVuY2VzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI2Rlc3Ryb3lcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNodXRkb3duKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUuc3lzLmV2ZW50cy5vZmYoU2NlbmVFdmVudHMuU1RBUlQsIHRoaXMuc3RhcnQsIHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcclxuICAgICAgICB0aGlzLnN5c3RlbXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUxpc3QgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlzdCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8vICBTdGF0aWMgbWV0aG9kIGNhbGxlZCBkaXJlY3RseSBieSB0aGUgR2FtZSBPYmplY3QgY3JlYXRvciBmdW5jdGlvbnNcclxuXHJcbkdhbWVPYmplY3RDcmVhdG9yLnJlZ2lzdGVyID0gZnVuY3Rpb24gKGZhY3RvcnlUeXBlLCBmYWN0b3J5RnVuY3Rpb24pXHJcbntcclxuICAgIGlmICghR2FtZU9iamVjdENyZWF0b3IucHJvdG90eXBlLmhhc093blByb3BlcnR5KGZhY3RvcnlUeXBlKSlcclxuICAgIHtcclxuICAgICAgICBHYW1lT2JqZWN0Q3JlYXRvci5wcm90b3R5cGVbZmFjdG9yeVR5cGVdID0gZmFjdG9yeUZ1bmN0aW9uO1xyXG4gICAgfVxyXG59O1xyXG5cclxuR2FtZU9iamVjdENyZWF0b3IucmVtb3ZlID0gZnVuY3Rpb24gKGZhY3RvcnlUeXBlKVxyXG57XHJcbiAgICBpZiAoR2FtZU9iamVjdENyZWF0b3IucHJvdG90eXBlLmhhc093blByb3BlcnR5KGZhY3RvcnlUeXBlKSlcclxuICAgIHtcclxuICAgICAgICBkZWxldGUgR2FtZU9iamVjdENyZWF0b3IucHJvdG90eXBlW2ZhY3RvcnlUeXBlXTtcclxuICAgIH1cclxufTtcclxuXHJcblBsdWdpbkNhY2hlLnJlZ2lzdGVyKCdHYW1lT2JqZWN0Q3JlYXRvcicsIEdhbWVPYmplY3RDcmVhdG9yLCAnbWFrZScpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHYW1lT2JqZWN0Q3JlYXRvcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/GameObjectCreator.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/GameObjectFactory.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/GameObjectFactory.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar PluginCache = __webpack_require__(/*! ../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar SceneEvents = __webpack_require__(/*! ../scene/events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Game Object Factory is a Scene plugin that allows you to quickly create many common\r\n * types of Game Objects and have them automatically registered with the Scene.\r\n *\r\n * Game Objects directly register themselves with the Factory and inject their own creation\r\n * methods into the class.\r\n *\r\n * @class GameObjectFactory\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object Factory belongs.\r\n */\r\nvar GameObjectFactory = new Class({\r\n\r\n initialize:\r\n\r\n function GameObjectFactory (scene)\r\n {\r\n /**\r\n * The Scene to which this Game Object Factory belongs.\r\n *\r\n * @name Phaser.GameObjects.GameObjectFactory#scene\r\n * @type {Phaser.Scene}\r\n * @protected\r\n * @since 3.0.0\r\n */\r\n this.scene = scene;\r\n\r\n /**\r\n * A reference to the Scene.Systems.\r\n *\r\n * @name Phaser.GameObjects.GameObjectFactory#systems\r\n * @type {Phaser.Scenes.Systems}\r\n * @protected\r\n * @since 3.0.0\r\n */\r\n this.systems = scene.sys;\r\n\r\n /**\r\n * A reference to the Scene Display List.\r\n *\r\n * @name Phaser.GameObjects.GameObjectFactory#displayList\r\n * @type {Phaser.GameObjects.DisplayList}\r\n * @protected\r\n * @since 3.0.0\r\n */\r\n this.displayList;\r\n\r\n /**\r\n * A reference to the Scene Update List.\r\n *\r\n * @name Phaser.GameObjects.GameObjectFactory#updateList;\r\n * @type {Phaser.GameObjects.UpdateList}\r\n * @protected\r\n * @since 3.0.0\r\n */\r\n this.updateList;\r\n\r\n scene.sys.events.once(SceneEvents.BOOT, this.boot, this);\r\n scene.sys.events.on(SceneEvents.START, this.start, this);\r\n },\r\n\r\n /**\r\n * This method is called automatically, only once, when the Scene is first created.\r\n * Do not invoke it directly.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#boot\r\n * @private\r\n * @since 3.5.1\r\n */\r\n boot: function ()\r\n {\r\n this.displayList = this.systems.displayList;\r\n this.updateList = this.systems.updateList;\r\n\r\n this.systems.events.once(SceneEvents.DESTROY, this.destroy, this);\r\n },\r\n\r\n /**\r\n * This method is called automatically by the Scene when it is starting up.\r\n * It is responsible for creating local systems, properties and listening for Scene events.\r\n * Do not invoke it directly.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#start\r\n * @private\r\n * @since 3.5.0\r\n */\r\n start: function ()\r\n {\r\n this.systems.events.once(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n },\r\n\r\n /**\r\n * Adds an existing Game Object to this Scene.\r\n * \r\n * If the Game Object renders, it will be added to the Display List.\r\n * If it has a `preUpdate` method, it will be added to the Update List.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#existing\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} child - The child to be added to this Scene.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that was added.\r\n */\r\n existing: function (child)\r\n {\r\n if (child.renderCanvas || child.renderWebGL)\r\n {\r\n this.displayList.add(child);\r\n }\r\n\r\n if (child.preUpdate)\r\n {\r\n this.updateList.add(child);\r\n }\r\n\r\n return child;\r\n },\r\n\r\n /**\r\n * The Scene that owns this plugin is shutting down.\r\n * We need to kill and reset all internal properties as well as stop listening to Scene events.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#shutdown\r\n * @private\r\n * @since 3.0.0\r\n */\r\n shutdown: function ()\r\n {\r\n this.systems.events.off(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n },\r\n\r\n /**\r\n * The Scene that owns this plugin is being destroyed.\r\n * We need to shutdown and then kill off all external references.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#destroy\r\n * @private\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.shutdown();\r\n\r\n this.scene.sys.events.off(SceneEvents.START, this.start, this);\r\n\r\n this.scene = null;\r\n this.systems = null;\r\n\r\n this.displayList = null;\r\n this.updateList = null;\r\n }\r\n\r\n});\r\n\r\n// Static method called directly by the Game Object factory functions\r\n\r\nGameObjectFactory.register = function (factoryType, factoryFunction)\r\n{\r\n if (!GameObjectFactory.prototype.hasOwnProperty(factoryType))\r\n {\r\n GameObjectFactory.prototype[factoryType] = factoryFunction;\r\n }\r\n};\r\n\r\nGameObjectFactory.remove = function (factoryType)\r\n{\r\n if (GameObjectFactory.prototype.hasOwnProperty(factoryType))\r\n {\r\n delete GameObjectFactory.prototype[factoryType];\r\n }\r\n};\r\n\r\nPluginCache.register('GameObjectFactory', GameObjectFactory, 'add');\r\n\r\nmodule.exports = GameObjectFactory;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9HYW1lT2JqZWN0RmFjdG9yeS5qcz9jNWY1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ3BDLGtCQUFrQixtQkFBTyxDQUFDLGdGQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyx3RUFBaUI7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QztBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL0dhbWVPYmplY3RGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG52YXIgUGx1Z2luQ2FjaGUgPSByZXF1aXJlKCcuLi9wbHVnaW5zL1BsdWdpbkNhY2hlJyk7XHJcbnZhciBTY2VuZUV2ZW50cyA9IHJlcXVpcmUoJy4uL3NjZW5lL2V2ZW50cycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIEdhbWUgT2JqZWN0IEZhY3RvcnkgaXMgYSBTY2VuZSBwbHVnaW4gdGhhdCBhbGxvd3MgeW91IHRvIHF1aWNrbHkgY3JlYXRlIG1hbnkgY29tbW9uXHJcbiAqIHR5cGVzIG9mIEdhbWUgT2JqZWN0cyBhbmQgaGF2ZSB0aGVtIGF1dG9tYXRpY2FsbHkgcmVnaXN0ZXJlZCB3aXRoIHRoZSBTY2VuZS5cclxuICpcclxuICogR2FtZSBPYmplY3RzIGRpcmVjdGx5IHJlZ2lzdGVyIHRoZW1zZWx2ZXMgd2l0aCB0aGUgRmFjdG9yeSBhbmQgaW5qZWN0IHRoZWlyIG93biBjcmVhdGlvblxyXG4gKiBtZXRob2RzIGludG8gdGhlIGNsYXNzLlxyXG4gKlxyXG4gKiBAY2xhc3MgR2FtZU9iamVjdEZhY3RvcnlcclxuICogQG1lbWJlcm9mIFBoYXNlci5HYW1lT2JqZWN0c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IEZhY3RvcnkgYmVsb25ncy5cclxuICovXHJcbnZhciBHYW1lT2JqZWN0RmFjdG9yeSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBHYW1lT2JqZWN0RmFjdG9yeSAoc2NlbmUpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgRmFjdG9yeSBiZWxvbmdzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I3NjZW5lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2VuZX1cclxuICAgICAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUuU3lzdGVtcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0RmFjdG9yeSNzeXN0ZW1zXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2VuZXMuU3lzdGVtc31cclxuICAgICAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zID0gc2NlbmUuc3lzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgRGlzcGxheSBMaXN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I2Rpc3BsYXlMaXN0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5EaXNwbGF5TGlzdH1cclxuICAgICAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kaXNwbGF5TGlzdDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIFVwZGF0ZSBMaXN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I3VwZGF0ZUxpc3Q7XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5VcGRhdGVMaXN0fVxyXG4gICAgICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnVwZGF0ZUxpc3Q7XHJcblxyXG4gICAgICAgIHNjZW5lLnN5cy5ldmVudHMub25jZShTY2VuZUV2ZW50cy5CT09ULCB0aGlzLmJvb3QsIHRoaXMpO1xyXG4gICAgICAgIHNjZW5lLnN5cy5ldmVudHMub24oU2NlbmVFdmVudHMuU1RBUlQsIHRoaXMuc3RhcnQsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5LCBvbmx5IG9uY2UsIHdoZW4gdGhlIFNjZW5lIGlzIGZpcnN0IGNyZWF0ZWQuXHJcbiAgICAgKiBEbyBub3QgaW52b2tlIGl0IGRpcmVjdGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I2Jvb3RcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy41LjFcclxuICAgICAqL1xyXG4gICAgYm9vdDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlMaXN0ID0gdGhpcy5zeXN0ZW1zLmRpc3BsYXlMaXN0O1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlzdCA9IHRoaXMuc3lzdGVtcy51cGRhdGVMaXN0O1xyXG5cclxuICAgICAgICB0aGlzLnN5c3RlbXMuZXZlbnRzLm9uY2UoU2NlbmVFdmVudHMuREVTVFJPWSwgdGhpcy5kZXN0cm95LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgU2NlbmUgd2hlbiBpdCBpcyBzdGFydGluZyB1cC5cclxuICAgICAqIEl0IGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBsb2NhbCBzeXN0ZW1zLCBwcm9wZXJ0aWVzIGFuZCBsaXN0ZW5pbmcgZm9yIFNjZW5lIGV2ZW50cy5cclxuICAgICAqIERvIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3Rvcnkjc3RhcnRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqL1xyXG4gICAgc3RhcnQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zLmV2ZW50cy5vbmNlKFNjZW5lRXZlbnRzLlNIVVRET1dOLCB0aGlzLnNodXRkb3duLCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGFuIGV4aXN0aW5nIEdhbWUgT2JqZWN0IHRvIHRoaXMgU2NlbmUuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZSBHYW1lIE9iamVjdCByZW5kZXJzLCBpdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBEaXNwbGF5IExpc3QuXHJcbiAgICAgKiBJZiBpdCBoYXMgYSBgcHJlVXBkYXRlYCBtZXRob2QsIGl0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIFVwZGF0ZSBMaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I2V4aXN0aW5nXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBjaGlsZCAtIFRoZSBjaGlsZCB0byBiZSBhZGRlZCB0byB0aGlzIFNjZW5lLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgYWRkZWQuXHJcbiAgICAgKi9cclxuICAgIGV4aXN0aW5nOiBmdW5jdGlvbiAoY2hpbGQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNoaWxkLnJlbmRlckNhbnZhcyB8fCBjaGlsZC5yZW5kZXJXZWJHTClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheUxpc3QuYWRkKGNoaWxkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjaGlsZC5wcmVVcGRhdGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxpc3QuYWRkKGNoaWxkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgU2NlbmUgdGhhdCBvd25zIHRoaXMgcGx1Z2luIGlzIHNodXR0aW5nIGRvd24uXHJcbiAgICAgKiBXZSBuZWVkIHRvIGtpbGwgYW5kIHJlc2V0IGFsbCBpbnRlcm5hbCBwcm9wZXJ0aWVzIGFzIHdlbGwgYXMgc3RvcCBsaXN0ZW5pbmcgdG8gU2NlbmUgZXZlbnRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I3NodXRkb3duXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHNodXRkb3duOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcy5ldmVudHMub2ZmKFNjZW5lRXZlbnRzLlNIVVRET1dOLCB0aGlzLnNodXRkb3duLCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgU2NlbmUgdGhhdCBvd25zIHRoaXMgcGx1Z2luIGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuICAgICAqIFdlIG5lZWQgdG8gc2h1dGRvd24gYW5kIHRoZW4ga2lsbCBvZmYgYWxsIGV4dGVybmFsIHJlZmVyZW5jZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3RvcnkjZGVzdHJveVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2h1dGRvd24oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZS5zeXMuZXZlbnRzLm9mZihTY2VuZUV2ZW50cy5TVEFSVCwgdGhpcy5zdGFydCwgdGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcyA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuZGlzcGxheUxpc3QgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlzdCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8vICBTdGF0aWMgbWV0aG9kIGNhbGxlZCBkaXJlY3RseSBieSB0aGUgR2FtZSBPYmplY3QgZmFjdG9yeSBmdW5jdGlvbnNcclxuXHJcbkdhbWVPYmplY3RGYWN0b3J5LnJlZ2lzdGVyID0gZnVuY3Rpb24gKGZhY3RvcnlUeXBlLCBmYWN0b3J5RnVuY3Rpb24pXHJcbntcclxuICAgIGlmICghR2FtZU9iamVjdEZhY3RvcnkucHJvdG90eXBlLmhhc093blByb3BlcnR5KGZhY3RvcnlUeXBlKSlcclxuICAgIHtcclxuICAgICAgICBHYW1lT2JqZWN0RmFjdG9yeS5wcm90b3R5cGVbZmFjdG9yeVR5cGVdID0gZmFjdG9yeUZ1bmN0aW9uO1xyXG4gICAgfVxyXG59O1xyXG5cclxuR2FtZU9iamVjdEZhY3RvcnkucmVtb3ZlID0gZnVuY3Rpb24gKGZhY3RvcnlUeXBlKVxyXG57XHJcbiAgICBpZiAoR2FtZU9iamVjdEZhY3RvcnkucHJvdG90eXBlLmhhc093blByb3BlcnR5KGZhY3RvcnlUeXBlKSlcclxuICAgIHtcclxuICAgICAgICBkZWxldGUgR2FtZU9iamVjdEZhY3RvcnkucHJvdG90eXBlW2ZhY3RvcnlUeXBlXTtcclxuICAgIH1cclxufTtcclxuXHJcblBsdWdpbkNhY2hlLnJlZ2lzdGVyKCdHYW1lT2JqZWN0RmFjdG9yeScsIEdhbWVPYmplY3RGYWN0b3J5LCAnYWRkJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdhbWVPYmplY3RGYWN0b3J5O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/GameObjectFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/UpdateList.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/UpdateList.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar ProcessQueue = __webpack_require__(/*! ../structs/ProcessQueue */ \"./node_modules/phaser/src/structs/ProcessQueue.js\");\r\nvar PluginCache = __webpack_require__(/*! ../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar SceneEvents = __webpack_require__(/*! ../scene/events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Update List plugin.\r\n *\r\n * Update Lists belong to a Scene and maintain the list Game Objects to be updated every frame.\r\n *\r\n * Some or all of these Game Objects may also be part of the Scene's [Display List]{@link Phaser.GameObjects.DisplayList}, for Rendering.\r\n *\r\n * @class UpdateList\r\n * @extends Phaser.Structs.ProcessQueue.<Phaser.GameObjects.GameObject>\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene that the Update List belongs to.\r\n */\r\nvar UpdateList = new Class({\r\n\r\n Extends: ProcessQueue,\r\n\r\n initialize:\r\n\r\n function UpdateList (scene)\r\n {\r\n ProcessQueue.call(this);\r\n\r\n /**\r\n * The Scene that the Update List belongs to.\r\n *\r\n * @name Phaser.GameObjects.UpdateList#scene\r\n * @type {Phaser.Scene}\r\n * @since 3.0.0\r\n */\r\n this.scene = scene;\r\n\r\n /**\r\n * The Scene's Systems.\r\n *\r\n * @name Phaser.GameObjects.UpdateList#systems\r\n * @type {Phaser.Scenes.Systems}\r\n * @since 3.0.0\r\n */\r\n this.systems = scene.sys;\r\n\r\n /**\r\n * The `pending` list is a selection of items which are due to be made 'active' in the next update.\r\n *\r\n * @name Phaser.GameObjects.UpdateList#_pending\r\n * @type {Array.<*>}\r\n * @private\r\n * @default []\r\n * @since 3.20.0\r\n */\r\n\r\n /**\r\n * The `active` list is a selection of items which are considered active and should be updated.\r\n *\r\n * @name Phaser.GameObjects.UpdateList#_active\r\n * @type {Array.<*>}\r\n * @private\r\n * @default []\r\n * @since 3.20.0\r\n */\r\n\r\n /**\r\n * The `destroy` list is a selection of items that were active and are awaiting being destroyed in the next update.\r\n *\r\n * @name Phaser.GameObjects.UpdateList#_destroy\r\n * @type {Array.<*>}\r\n * @private\r\n * @default []\r\n * @since 3.20.0\r\n */\r\n\r\n /**\r\n * The total number of items awaiting processing.\r\n *\r\n * @name Phaser.GameObjects.UpdateList#_toProcess\r\n * @type {integer}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n\r\n scene.sys.events.once(SceneEvents.BOOT, this.boot, this);\r\n scene.sys.events.on(SceneEvents.START, this.start, this);\r\n },\r\n\r\n /**\r\n * This method is called automatically, only once, when the Scene is first created.\r\n * Do not invoke it directly.\r\n *\r\n * @method Phaser.GameObjects.UpdateList#boot\r\n * @private\r\n * @since 3.5.1\r\n */\r\n boot: function ()\r\n {\r\n this.systems.events.once(SceneEvents.DESTROY, this.destroy, this);\r\n },\r\n\r\n /**\r\n * This method is called automatically by the Scene when it is starting up.\r\n * It is responsible for creating local systems, properties and listening for Scene events.\r\n * Do not invoke it directly.\r\n *\r\n * @method Phaser.GameObjects.UpdateList#start\r\n * @private\r\n * @since 3.5.0\r\n */\r\n start: function ()\r\n {\r\n var eventEmitter = this.systems.events;\r\n\r\n eventEmitter.on(SceneEvents.PRE_UPDATE, this.update, this);\r\n eventEmitter.on(SceneEvents.UPDATE, this.sceneUpdate, this);\r\n eventEmitter.once(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n },\r\n\r\n /**\r\n * The update step.\r\n *\r\n * Pre-updates every active Game Object in the list.\r\n *\r\n * @method Phaser.GameObjects.UpdateList#sceneUpdate\r\n * @since 3.20.0\r\n *\r\n * @param {number} time - The current timestamp.\r\n * @param {number} delta - The delta time elapsed since the last frame.\r\n */\r\n sceneUpdate: function (time, delta)\r\n {\r\n var list = this._active;\r\n var length = list.length;\r\n\r\n for (var i = 0; i < length; i++)\r\n {\r\n var gameObject = list[i];\r\n\r\n if (gameObject.active)\r\n {\r\n gameObject.preUpdate.call(gameObject, time, delta);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * The Scene that owns this plugin is shutting down.\r\n * \r\n * We need to kill and reset all internal properties as well as stop listening to Scene events.\r\n *\r\n * @method Phaser.GameObjects.UpdateList#shutdown\r\n * @since 3.0.0\r\n */\r\n shutdown: function ()\r\n {\r\n var i = this._active.length;\r\n\r\n while (i--)\r\n {\r\n this._active[i].destroy(true);\r\n }\r\n\r\n i = this._pending.length;\r\n\r\n while (i--)\r\n {\r\n this._pending[i].destroy(true);\r\n }\r\n\r\n i = this._destroy.length;\r\n\r\n while (i--)\r\n {\r\n this._destroy[i].destroy(true);\r\n }\r\n\r\n this._toProcess = 0;\r\n\r\n this._pending = [];\r\n this._active = [];\r\n this._destroy = [];\r\n\r\n this.removeAllListeners();\r\n\r\n var eventEmitter = this.systems.events;\r\n\r\n eventEmitter.off(SceneEvents.PRE_UPDATE, this.preUpdate, this);\r\n eventEmitter.off(SceneEvents.UPDATE, this.sceneUpdate, this);\r\n eventEmitter.off(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n },\r\n\r\n /**\r\n * The Scene that owns this plugin is being destroyed.\r\n * \r\n * We need to shutdown and then kill off all external references.\r\n *\r\n * @method Phaser.GameObjects.UpdateList#destroy\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.shutdown();\r\n\r\n this.systems.events.off(SceneEvents.START, this.start, this);\r\n\r\n this.scene = null;\r\n this.systems = null;\r\n }\r\n\r\n /**\r\n * Adds a new item to the Update List.\r\n * \r\n * The item is added to the pending list and made active in the next update.\r\n *\r\n * @method Phaser.GameObjects.UpdateList#add\r\n * @since 3.0.0\r\n *\r\n * @param {*} item - The item to add to the queue.\r\n *\r\n * @return {*} The item that was added.\r\n */\r\n\r\n /**\r\n * Removes an item from the Update List.\r\n * \r\n * The item is added to the pending destroy and fully removed in the next update.\r\n *\r\n * @method Phaser.GameObjects.UpdateList#remove\r\n * @since 3.0.0\r\n *\r\n * @param {*} item - The item to be removed from the queue.\r\n *\r\n * @return {*} The item that was removed.\r\n */\r\n\r\n /**\r\n * Removes all active items from this Update List.\r\n * \r\n * All the items are marked as 'pending destroy' and fully removed in the next update.\r\n *\r\n * @method Phaser.GameObjects.UpdateList#removeAll\r\n * @since 3.20.0\r\n *\r\n * @return {this} This Update List object.\r\n */\r\n\r\n /**\r\n * Update this queue. First it will process any items awaiting destruction, and remove them.\r\n * \r\n * Then it will check to see if there are any items pending insertion, and move them to an\r\n * active state. Finally, it will return a list of active items for further processing.\r\n *\r\n * @method Phaser.GameObjects.UpdateList#update\r\n * @since 3.0.0\r\n *\r\n * @return {Array.<*>} A list of active items.\r\n */\r\n\r\n /**\r\n * Returns the current list of active items.\r\n * \r\n * This method returns a reference to the active list array, not a copy of it.\r\n * Therefore, be careful to not modify this array outside of the ProcessQueue.\r\n *\r\n * @method Phaser.GameObjects.UpdateList#getActive\r\n * @since 3.0.0\r\n *\r\n * @return {Array.<*>} A list of active items.\r\n */\r\n\r\n /**\r\n * The number of entries in the active list.\r\n *\r\n * @name Phaser.GameObjects.UpdateList#length\r\n * @type {integer}\r\n * @readonly\r\n * @since 3.20.0\r\n */\r\n});\r\n\r\nPluginCache.register('UpdateList', UpdateList, 'updateList');\r\n\r\nmodule.exports = UpdateList;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9VcGRhdGVMaXN0LmpzPzEzZjAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsbUJBQW1CLG1CQUFPLENBQUMsa0ZBQXlCO0FBQ3BELGtCQUFrQixtQkFBTyxDQUFDLGdGQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyx3RUFBaUI7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9GQUFvRixxQ0FBcUM7QUFDekg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEI7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixZQUFZO0FBQ25DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCO0FBQ0EsZ0JBQWdCLEVBQUU7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRTtBQUNqQjtBQUNBLGdCQUFnQixFQUFFO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsVUFBVTtBQUMxQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsVUFBVTtBQUMxQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvVXBkYXRlTGlzdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIFByb2Nlc3NRdWV1ZSA9IHJlcXVpcmUoJy4uL3N0cnVjdHMvUHJvY2Vzc1F1ZXVlJyk7XHJcbnZhciBQbHVnaW5DYWNoZSA9IHJlcXVpcmUoJy4uL3BsdWdpbnMvUGx1Z2luQ2FjaGUnKTtcclxudmFyIFNjZW5lRXZlbnRzID0gcmVxdWlyZSgnLi4vc2NlbmUvZXZlbnRzJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgVXBkYXRlIExpc3QgcGx1Z2luLlxyXG4gKlxyXG4gKiBVcGRhdGUgTGlzdHMgYmVsb25nIHRvIGEgU2NlbmUgYW5kIG1haW50YWluIHRoZSBsaXN0IEdhbWUgT2JqZWN0cyB0byBiZSB1cGRhdGVkIGV2ZXJ5IGZyYW1lLlxyXG4gKlxyXG4gKiBTb21lIG9yIGFsbCBvZiB0aGVzZSBHYW1lIE9iamVjdHMgbWF5IGFsc28gYmUgcGFydCBvZiB0aGUgU2NlbmUncyBbRGlzcGxheSBMaXN0XXtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuRGlzcGxheUxpc3R9LCBmb3IgUmVuZGVyaW5nLlxyXG4gKlxyXG4gKiBAY2xhc3MgVXBkYXRlTGlzdFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuU3RydWN0cy5Qcm9jZXNzUXVldWUuPFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0PlxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRoYXQgdGhlIFVwZGF0ZSBMaXN0IGJlbG9uZ3MgdG8uXHJcbiAqL1xyXG52YXIgVXBkYXRlTGlzdCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogUHJvY2Vzc1F1ZXVlLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gVXBkYXRlTGlzdCAoc2NlbmUpXHJcbiAgICB7XHJcbiAgICAgICAgUHJvY2Vzc1F1ZXVlLmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBTY2VuZSB0aGF0IHRoZSBVcGRhdGUgTGlzdCBiZWxvbmdzIHRvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlVwZGF0ZUxpc3Qjc2NlbmVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFNjZW5lJ3MgU3lzdGVtcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5VcGRhdGVMaXN0I3N5c3RlbXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lcy5TeXN0ZW1zfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcyA9IHNjZW5lLnN5cztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGBwZW5kaW5nYCBsaXN0IGlzIGEgc2VsZWN0aW9uIG9mIGl0ZW1zIHdoaWNoIGFyZSBkdWUgdG8gYmUgbWFkZSAnYWN0aXZlJyBpbiB0aGUgbmV4dCB1cGRhdGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVXBkYXRlTGlzdCNfcGVuZGluZ1xyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48Kj59XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCBbXVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGBhY3RpdmVgIGxpc3QgaXMgYSBzZWxlY3Rpb24gb2YgaXRlbXMgd2hpY2ggYXJlIGNvbnNpZGVyZWQgYWN0aXZlIGFuZCBzaG91bGQgYmUgdXBkYXRlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5VcGRhdGVMaXN0I19hY3RpdmVcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPCo+fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgW11cclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBgZGVzdHJveWAgbGlzdCBpcyBhIHNlbGVjdGlvbiBvZiBpdGVtcyB0aGF0IHdlcmUgYWN0aXZlIGFuZCBhcmUgYXdhaXRpbmcgYmVpbmcgZGVzdHJveWVkIGluIHRoZSBuZXh0IHVwZGF0ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5VcGRhdGVMaXN0I19kZXN0cm95XHJcbiAgICAgICAgICogQHR5cGUge0FycmF5LjwqPn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICAgICAqL1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIGF3YWl0aW5nIHByb2Nlc3NpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVXBkYXRlTGlzdCNfdG9Qcm9jZXNzXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcblxyXG4gICAgICAgIHNjZW5lLnN5cy5ldmVudHMub25jZShTY2VuZUV2ZW50cy5CT09ULCB0aGlzLmJvb3QsIHRoaXMpO1xyXG4gICAgICAgIHNjZW5lLnN5cy5ldmVudHMub24oU2NlbmVFdmVudHMuU1RBUlQsIHRoaXMuc3RhcnQsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5LCBvbmx5IG9uY2UsIHdoZW4gdGhlIFNjZW5lIGlzIGZpcnN0IGNyZWF0ZWQuXHJcbiAgICAgKiBEbyBub3QgaW52b2tlIGl0IGRpcmVjdGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlVwZGF0ZUxpc3QjYm9vdFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjUuMVxyXG4gICAgICovXHJcbiAgICBib290OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcy5ldmVudHMub25jZShTY2VuZUV2ZW50cy5ERVNUUk9ZLCB0aGlzLmRlc3Ryb3ksIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBTY2VuZSB3aGVuIGl0IGlzIHN0YXJ0aW5nIHVwLlxyXG4gICAgICogSXQgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGxvY2FsIHN5c3RlbXMsIHByb3BlcnRpZXMgYW5kIGxpc3RlbmluZyBmb3IgU2NlbmUgZXZlbnRzLlxyXG4gICAgICogRG8gbm90IGludm9rZSBpdCBkaXJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5VcGRhdGVMaXN0I3N0YXJ0XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBldmVudEVtaXR0ZXIgPSB0aGlzLnN5c3RlbXMuZXZlbnRzO1xyXG5cclxuICAgICAgICBldmVudEVtaXR0ZXIub24oU2NlbmVFdmVudHMuUFJFX1VQREFURSwgdGhpcy51cGRhdGUsIHRoaXMpO1xyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vbihTY2VuZUV2ZW50cy5VUERBVEUsIHRoaXMuc2NlbmVVcGRhdGUsIHRoaXMpO1xyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vbmNlKFNjZW5lRXZlbnRzLlNIVVRET1dOLCB0aGlzLnNodXRkb3duLCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdXBkYXRlIHN0ZXAuXHJcbiAgICAgKlxyXG4gICAgICogUHJlLXVwZGF0ZXMgZXZlcnkgYWN0aXZlIEdhbWUgT2JqZWN0IGluIHRoZSBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlVwZGF0ZUxpc3Qjc2NlbmVVcGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGltZSAtIFRoZSBjdXJyZW50IHRpbWVzdGFtcC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgZnJhbWUuXHJcbiAgICAgKi9cclxuICAgIHNjZW5lVXBkYXRlOiBmdW5jdGlvbiAodGltZSwgZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGxpc3QgPSB0aGlzLl9hY3RpdmU7XHJcbiAgICAgICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGdhbWVPYmplY3QgPSBsaXN0W2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGdhbWVPYmplY3QuYWN0aXZlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBnYW1lT2JqZWN0LnByZVVwZGF0ZS5jYWxsKGdhbWVPYmplY3QsIHRpbWUsIGRlbHRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgU2NlbmUgdGhhdCBvd25zIHRoaXMgcGx1Z2luIGlzIHNodXR0aW5nIGRvd24uXHJcbiAgICAgKiBcclxuICAgICAqIFdlIG5lZWQgdG8ga2lsbCBhbmQgcmVzZXQgYWxsIGludGVybmFsIHByb3BlcnRpZXMgYXMgd2VsbCBhcyBzdG9wIGxpc3RlbmluZyB0byBTY2VuZSBldmVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVXBkYXRlTGlzdCNzaHV0ZG93blxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHNodXRkb3duOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpID0gdGhpcy5fYWN0aXZlLmxlbmd0aDtcclxuXHJcbiAgICAgICAgd2hpbGUgKGktLSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVtpXS5kZXN0cm95KHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaSA9IHRoaXMuX3BlbmRpbmcubGVuZ3RoO1xyXG5cclxuICAgICAgICB3aGlsZSAoaS0tKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fcGVuZGluZ1tpXS5kZXN0cm95KHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaSA9IHRoaXMuX2Rlc3Ryb3kubGVuZ3RoO1xyXG5cclxuICAgICAgICB3aGlsZSAoaS0tKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fZGVzdHJveVtpXS5kZXN0cm95KHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdG9Qcm9jZXNzID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IFtdO1xyXG4gICAgICAgIHRoaXMuX2Rlc3Ryb3kgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcclxuXHJcbiAgICAgICAgdmFyIGV2ZW50RW1pdHRlciA9IHRoaXMuc3lzdGVtcy5ldmVudHM7XHJcblxyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vZmYoU2NlbmVFdmVudHMuUFJFX1VQREFURSwgdGhpcy5wcmVVcGRhdGUsIHRoaXMpO1xyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vZmYoU2NlbmVFdmVudHMuVVBEQVRFLCB0aGlzLnNjZW5lVXBkYXRlLCB0aGlzKTtcclxuICAgICAgICBldmVudEVtaXR0ZXIub2ZmKFNjZW5lRXZlbnRzLlNIVVRET1dOLCB0aGlzLnNodXRkb3duLCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgU2NlbmUgdGhhdCBvd25zIHRoaXMgcGx1Z2luIGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuICAgICAqIFxyXG4gICAgICogV2UgbmVlZCB0byBzaHV0ZG93biBhbmQgdGhlbiBraWxsIG9mZiBhbGwgZXh0ZXJuYWwgcmVmZXJlbmNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5VcGRhdGVMaXN0I2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2h1dGRvd24oKTtcclxuXHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zLmV2ZW50cy5vZmYoU2NlbmVFdmVudHMuU1RBUlQsIHRoaXMuc3RhcnQsIHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcclxuICAgICAgICB0aGlzLnN5c3RlbXMgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIG5ldyBpdGVtIHRvIHRoZSBVcGRhdGUgTGlzdC5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGl0ZW0gaXMgYWRkZWQgdG8gdGhlIHBlbmRpbmcgbGlzdCBhbmQgbWFkZSBhY3RpdmUgaW4gdGhlIG5leHQgdXBkYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlVwZGF0ZUxpc3QjYWRkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyp9IGl0ZW0gLSBUaGUgaXRlbSB0byBhZGQgdG8gdGhlIHF1ZXVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyp9IFRoZSBpdGVtIHRoYXQgd2FzIGFkZGVkLlxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGFuIGl0ZW0gZnJvbSB0aGUgVXBkYXRlIExpc3QuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBpdGVtIGlzIGFkZGVkIHRvIHRoZSBwZW5kaW5nIGRlc3Ryb3kgYW5kIGZ1bGx5IHJlbW92ZWQgaW4gdGhlIG5leHQgdXBkYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlVwZGF0ZUxpc3QjcmVtb3ZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyp9IGl0ZW0gLSBUaGUgaXRlbSB0byBiZSByZW1vdmVkIGZyb20gdGhlIHF1ZXVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyp9IFRoZSBpdGVtIHRoYXQgd2FzIHJlbW92ZWQuXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYWxsIGFjdGl2ZSBpdGVtcyBmcm9tIHRoaXMgVXBkYXRlIExpc3QuXHJcbiAgICAgKiBcclxuICAgICAqIEFsbCB0aGUgaXRlbXMgYXJlIG1hcmtlZCBhcyAncGVuZGluZyBkZXN0cm95JyBhbmQgZnVsbHkgcmVtb3ZlZCBpbiB0aGUgbmV4dCB1cGRhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVXBkYXRlTGlzdCNyZW1vdmVBbGxcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFVwZGF0ZSBMaXN0IG9iamVjdC5cclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHRoaXMgcXVldWUuIEZpcnN0IGl0IHdpbGwgcHJvY2VzcyBhbnkgaXRlbXMgYXdhaXRpbmcgZGVzdHJ1Y3Rpb24sIGFuZCByZW1vdmUgdGhlbS5cclxuICAgICAqIFxyXG4gICAgICogVGhlbiBpdCB3aWxsIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGl0ZW1zIHBlbmRpbmcgaW5zZXJ0aW9uLCBhbmQgbW92ZSB0aGVtIHRvIGFuXHJcbiAgICAgKiBhY3RpdmUgc3RhdGUuIEZpbmFsbHksIGl0IHdpbGwgcmV0dXJuIGEgbGlzdCBvZiBhY3RpdmUgaXRlbXMgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5VcGRhdGVMaXN0I3VwZGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7QXJyYXkuPCo+fSBBIGxpc3Qgb2YgYWN0aXZlIGl0ZW1zLlxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGxpc3Qgb2YgYWN0aXZlIGl0ZW1zLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBhY3RpdmUgbGlzdCBhcnJheSwgbm90IGEgY29weSBvZiBpdC5cclxuICAgICAqIFRoZXJlZm9yZSwgYmUgY2FyZWZ1bCB0byBub3QgbW9kaWZ5IHRoaXMgYXJyYXkgb3V0c2lkZSBvZiB0aGUgUHJvY2Vzc1F1ZXVlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlVwZGF0ZUxpc3QjZ2V0QWN0aXZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtBcnJheS48Kj59IEEgbGlzdCBvZiBhY3RpdmUgaXRlbXMuXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgYWN0aXZlIGxpc3QuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlVwZGF0ZUxpc3QjbGVuZ3RoXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICovXHJcbn0pO1xyXG5cclxuUGx1Z2luQ2FjaGUucmVnaXN0ZXIoJ1VwZGF0ZUxpc3QnLCBVcGRhdGVMaXN0LCAndXBkYXRlTGlzdCcpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBVcGRhdGVMaXN0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/UpdateList.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/GetBitmapTextSize.js":
/*!*****************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/bitmaptext/GetBitmapTextSize.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculate the position, width and height of a BitmapText Game Object.\r\n *\r\n * Returns a BitmapTextSize object that contains global and local variants of the Game Objects x and y coordinates and\r\n * its width and height.\r\n *\r\n * The global position and size take into account the Game Object's position and scale.\r\n *\r\n * The local position and size just takes into account the font data.\r\n *\r\n * @function GetBitmapTextSize\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {(Phaser.GameObjects.DynamicBitmapText|Phaser.GameObjects.BitmapText)} src - The BitmapText to calculate the position, width and height of.\r\n * @param {boolean} [round] - Whether to round the results to the nearest integer.\r\n * @param {object} [out] - Optional object to store the results in, to save constant object creation.\r\n *\r\n * @return {Phaser.Types.GameObjects.BitmapText.BitmapTextSize} The calculated position, width and height of the BitmapText.\r\n */\r\nvar GetBitmapTextSize = function (src, round, out)\r\n{\r\n if (out === undefined)\r\n {\r\n out = {\r\n local: {\r\n x: 0,\r\n y: 0,\r\n width: 0,\r\n height: 0\r\n },\r\n global: {\r\n x: 0,\r\n y: 0,\r\n width: 0,\r\n height: 0\r\n },\r\n lines: {\r\n shortest: 0,\r\n longest: 0,\r\n lengths: null,\r\n height: 0\r\n },\r\n wrappedText: '',\r\n words: [],\r\n maxWidth: 0,\r\n scaleX: 0,\r\n scaleY: 0\r\n };\r\n\r\n return out;\r\n }\r\n\r\n var text = src.text;\r\n var textLength = text.length;\r\n var maxWidth = src.maxWidth;\r\n var wordWrapCharCode = src.wordWrapCharCode;\r\n\r\n var bx = Number.MAX_VALUE;\r\n var by = Number.MAX_VALUE;\r\n var bw = 0;\r\n var bh = 0;\r\n\r\n var chars = src.fontData.chars;\r\n var lineHeight = src.fontData.lineHeight;\r\n var letterSpacing = src.letterSpacing;\r\n\r\n var xAdvance = 0;\r\n var yAdvance = 0;\r\n\r\n var charCode = 0;\r\n\r\n var glyph = null;\r\n\r\n var x = 0;\r\n var y = 0;\r\n\r\n var scale = (src.fontSize / src.fontData.size);\r\n var sx = scale * src.scaleX;\r\n var sy = scale * src.scaleY;\r\n\r\n var lastGlyph = null;\r\n var lastCharCode = 0;\r\n var lineWidths = [];\r\n var shortestLine = Number.MAX_VALUE;\r\n var longestLine = 0;\r\n var currentLine = 0;\r\n var currentLineWidth = 0;\r\n\r\n var i;\r\n var words = [];\r\n var current = null;\r\n\r\n // Scan for breach of maxWidth and insert carriage-returns\r\n if (maxWidth > 0 && out.maxWidth !== maxWidth)\r\n {\r\n for (i = 0; i < textLength; i++)\r\n {\r\n charCode = text.charCodeAt(i);\r\n\r\n if (charCode === 10)\r\n {\r\n if (current !== null)\r\n {\r\n words.push({\r\n word: current.word,\r\n i: current.i,\r\n x: current.x * sx,\r\n y: current.y * sy,\r\n w: current.w * sx,\r\n h: current.h * sy,\r\n cr: true\r\n });\r\n\r\n current = null;\r\n }\r\n\r\n xAdvance = 0;\r\n yAdvance += lineHeight;\r\n lastGlyph = null;\r\n\r\n continue;\r\n }\r\n\r\n glyph = chars[charCode];\r\n\r\n if (!glyph)\r\n {\r\n continue;\r\n }\r\n\r\n if (lastGlyph !== null)\r\n {\r\n var glyphKerningOffset = glyph.kerning[lastCharCode];\r\n }\r\n\r\n if (charCode === wordWrapCharCode)\r\n {\r\n if (current !== null)\r\n {\r\n words.push({\r\n word: current.word,\r\n i: current.i,\r\n x: current.x * sx,\r\n y: current.y * sy,\r\n w: current.w * sx,\r\n h: current.h * sy,\r\n cr: false\r\n });\r\n \r\n current = null;\r\n }\r\n }\r\n else\r\n {\r\n if (current === null)\r\n {\r\n // We're starting a new word, recording the starting index, etc\r\n current = { word: '', i: i, x: xAdvance, y: yAdvance, w: 0, h: lineHeight, cr: false };\r\n }\r\n\r\n current.word = current.word.concat(text[i]);\r\n current.w += glyph.xOffset + glyph.xAdvance + ((glyphKerningOffset !== undefined) ? glyphKerningOffset : 0);\r\n }\r\n\r\n xAdvance += glyph.xAdvance + letterSpacing;\r\n lastGlyph = glyph;\r\n lastCharCode = charCode;\r\n }\r\n\r\n // Last word\r\n if (current !== null)\r\n {\r\n words.push({\r\n word: current.word,\r\n i: current.i,\r\n x: current.x * sx,\r\n y: current.y * sy,\r\n w: current.w * sx,\r\n h: current.h * sy,\r\n cr: false\r\n });\r\n }\r\n\r\n // Reset for the next loop\r\n xAdvance = 0;\r\n yAdvance = 0;\r\n lastGlyph = null;\r\n lastCharCode = 0;\r\n\r\n // Loop through the words array and see if we've got any > maxWidth\r\n var prev;\r\n var offset = 0;\r\n var crs = [];\r\n\r\n for (i = 0; i < words.length; i++)\r\n {\r\n var entry = words[i];\r\n var left = entry.x;\r\n var right = entry.x + entry.w;\r\n\r\n if (prev)\r\n {\r\n var diff = left - (prev.x + prev.w);\r\n\r\n offset = left - (diff + prev.w);\r\n\r\n prev = null;\r\n }\r\n\r\n var checkLeft = left - offset;\r\n var checkRight = right - offset;\r\n\r\n if (checkLeft > maxWidth || checkRight > maxWidth)\r\n {\r\n crs.push(entry.i - 1);\r\n\r\n if (entry.cr)\r\n {\r\n crs.push(entry.i + entry.word.length);\r\n\r\n offset = 0;\r\n prev = null;\r\n }\r\n else\r\n {\r\n prev = entry;\r\n }\r\n }\r\n else if (entry.cr)\r\n {\r\n crs.push(entry.i + entry.word.length);\r\n\r\n offset = 0;\r\n prev = null;\r\n }\r\n }\r\n\r\n var stringInsert = function (str, index, value)\r\n {\r\n return str.substr(0, index) + value + str.substr(index + 1);\r\n };\r\n\r\n for (i = crs.length - 1; i >= 0; i--)\r\n {\r\n // eslint-disable-next-line quotes\r\n text = stringInsert(text, crs[i], \"\\n\");\r\n }\r\n\r\n out.maxWidth = maxWidth;\r\n out.wrappedText = text;\r\n\r\n textLength = text.length;\r\n\r\n // Recalculated in the next loop\r\n words = [];\r\n current = null;\r\n }\r\n\r\n for (i = 0; i < textLength; i++)\r\n {\r\n charCode = text.charCodeAt(i);\r\n\r\n if (charCode === 10)\r\n {\r\n if (current !== null)\r\n {\r\n words.push({\r\n word: current.word,\r\n i: current.i,\r\n x: current.x * sx,\r\n y: current.y * sy,\r\n w: current.w * sx,\r\n h: current.h * sy\r\n });\r\n\r\n current = null;\r\n }\r\n\r\n xAdvance = 0;\r\n yAdvance += lineHeight;\r\n lastGlyph = null;\r\n\r\n lineWidths[currentLine] = currentLineWidth;\r\n\r\n if (currentLineWidth > longestLine)\r\n {\r\n longestLine = currentLineWidth;\r\n }\r\n\r\n if (currentLineWidth < shortestLine)\r\n {\r\n shortestLine = currentLineWidth;\r\n }\r\n\r\n currentLine++;\r\n currentLineWidth = 0;\r\n\r\n continue;\r\n }\r\n\r\n glyph = chars[charCode];\r\n\r\n if (!glyph)\r\n {\r\n continue;\r\n }\r\n\r\n x = xAdvance;\r\n y = yAdvance;\r\n\r\n if (lastGlyph !== null)\r\n {\r\n var kerningOffset = glyph.kerning[lastCharCode];\r\n\r\n x += (kerningOffset !== undefined) ? kerningOffset : 0;\r\n }\r\n\r\n if (bx > x)\r\n {\r\n bx = x;\r\n }\r\n\r\n if (by > y)\r\n {\r\n by = y;\r\n }\r\n\r\n var gw = x + glyph.xAdvance;\r\n var gh = y + lineHeight;\r\n\r\n if (bw < gw)\r\n {\r\n bw = gw;\r\n }\r\n\r\n if (bh < gh)\r\n {\r\n bh = gh;\r\n }\r\n\r\n if (charCode === wordWrapCharCode)\r\n {\r\n if (current !== null)\r\n {\r\n words.push({\r\n word: current.word,\r\n i: current.i,\r\n x: current.x * sx,\r\n y: current.y * sy,\r\n w: current.w * sx,\r\n h: current.h * sy\r\n });\r\n \r\n current = null;\r\n }\r\n }\r\n else\r\n {\r\n if (current === null)\r\n {\r\n // We're starting a new word, recording the starting index, etc\r\n current = { word: '', i: i, x: xAdvance, y: yAdvance, w: 0, h: lineHeight };\r\n }\r\n\r\n current.word = current.word.concat(text[i]);\r\n current.w += glyph.xOffset + glyph.xAdvance + ((kerningOffset !== undefined) ? kerningOffset : 0);\r\n }\r\n\r\n xAdvance += glyph.xAdvance + letterSpacing;\r\n lastGlyph = glyph;\r\n lastCharCode = charCode;\r\n currentLineWidth = gw * scale;\r\n }\r\n\r\n // Last word\r\n if (current !== null)\r\n {\r\n words.push({\r\n word: current.word,\r\n i: current.i,\r\n x: current.x * sx,\r\n y: current.y * sy,\r\n w: current.w * sx,\r\n h: current.h * sy\r\n });\r\n }\r\n\r\n lineWidths[currentLine] = currentLineWidth;\r\n\r\n if (currentLineWidth > longestLine)\r\n {\r\n longestLine = currentLineWidth;\r\n }\r\n\r\n if (currentLineWidth < shortestLine)\r\n {\r\n shortestLine = currentLineWidth;\r\n }\r\n\r\n var local = out.local;\r\n var global = out.global;\r\n var lines = out.lines;\r\n\r\n local.x = bx * scale;\r\n local.y = by * scale;\r\n local.width = bw * scale;\r\n local.height = bh * scale;\r\n\r\n global.x = (src.x - src.displayOriginX) + (bx * sx);\r\n global.y = (src.y - src.displayOriginY) + (by * sy);\r\n global.width = bw * sx;\r\n global.height = bh * sy;\r\n\r\n lines.shortest = shortestLine;\r\n lines.longest = longestLine;\r\n lines.lengths = lineWidths;\r\n\r\n if (round)\r\n {\r\n local.x = Math.round(local.x);\r\n local.y = Math.round(local.y);\r\n local.width = Math.round(local.width);\r\n local.height = Math.round(local.height);\r\n\r\n global.x = Math.round(global.x);\r\n global.y = Math.round(global.y);\r\n global.width = Math.round(global.width);\r\n global.height = Math.round(global.height);\r\n\r\n lines.shortest = Math.round(shortestLine);\r\n lines.longest = Math.round(longestLine);\r\n }\r\n\r\n out.words = words;\r\n out.lines.height = lineHeight;\r\n out.scaleX = src.scaleX;\r\n out.scaleY = src.scaleY;\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetBitmapTextSize;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L0dldEJpdG1hcFRleHRTaXplLmpzPzM4NjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFFQUFxRTtBQUNoRixXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxtREFBbUQ7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixnQkFBZ0I7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9COztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQ0FBZ0MsUUFBUTtBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGVBQWUsZ0JBQWdCO0FBQy9CO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvYml0bWFwdGV4dC9HZXRCaXRtYXBUZXh0U2l6ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZSB0aGUgcG9zaXRpb24sIHdpZHRoIGFuZCBoZWlnaHQgb2YgYSBCaXRtYXBUZXh0IEdhbWUgT2JqZWN0LlxyXG4gKlxyXG4gKiBSZXR1cm5zIGEgQml0bWFwVGV4dFNpemUgb2JqZWN0IHRoYXQgY29udGFpbnMgZ2xvYmFsIGFuZCBsb2NhbCB2YXJpYW50cyBvZiB0aGUgR2FtZSBPYmplY3RzIHggYW5kIHkgY29vcmRpbmF0ZXMgYW5kXHJcbiAqIGl0cyB3aWR0aCBhbmQgaGVpZ2h0LlxyXG4gKlxyXG4gKiBUaGUgZ2xvYmFsIHBvc2l0aW9uIGFuZCBzaXplIHRha2UgaW50byBhY2NvdW50IHRoZSBHYW1lIE9iamVjdCdzIHBvc2l0aW9uIGFuZCBzY2FsZS5cclxuICpcclxuICogVGhlIGxvY2FsIHBvc2l0aW9uIGFuZCBzaXplIGp1c3QgdGFrZXMgaW50byBhY2NvdW50IHRoZSBmb250IGRhdGEuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBHZXRCaXRtYXBUZXh0U2l6ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHsoUGhhc2VyLkdhbWVPYmplY3RzLkR5bmFtaWNCaXRtYXBUZXh0fFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0KX0gc3JjIC0gVGhlIEJpdG1hcFRleHQgdG8gY2FsY3VsYXRlIHRoZSBwb3NpdGlvbiwgd2lkdGggYW5kIGhlaWdodCBvZi5cclxuICogQHBhcmFtIHtib29sZWFufSBbcm91bmRdIC0gV2hldGhlciB0byByb3VuZCB0aGUgcmVzdWx0cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLlxyXG4gKiBAcGFyYW0ge29iamVjdH0gW291dF0gLSBPcHRpb25hbCBvYmplY3QgdG8gc3RvcmUgdGhlIHJlc3VsdHMgaW4sIHRvIHNhdmUgY29uc3RhbnQgb2JqZWN0IGNyZWF0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuQml0bWFwVGV4dC5CaXRtYXBUZXh0U2l6ZX0gVGhlIGNhbGN1bGF0ZWQgcG9zaXRpb24sIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIEJpdG1hcFRleHQuXHJcbiAqL1xyXG52YXIgR2V0Qml0bWFwVGV4dFNpemUgPSBmdW5jdGlvbiAoc3JjLCByb3VuZCwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpXHJcbiAgICB7XHJcbiAgICAgICAgb3V0ID0ge1xyXG4gICAgICAgICAgICBsb2NhbDoge1xyXG4gICAgICAgICAgICAgICAgeDogMCxcclxuICAgICAgICAgICAgICAgIHk6IDAsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogMCxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogMFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBnbG9iYWw6IHtcclxuICAgICAgICAgICAgICAgIHg6IDAsXHJcbiAgICAgICAgICAgICAgICB5OiAwLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IDAsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDBcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbGluZXM6IHtcclxuICAgICAgICAgICAgICAgIHNob3J0ZXN0OiAwLFxyXG4gICAgICAgICAgICAgICAgbG9uZ2VzdDogMCxcclxuICAgICAgICAgICAgICAgIGxlbmd0aHM6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDBcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgd3JhcHBlZFRleHQ6ICcnLFxyXG4gICAgICAgICAgICB3b3JkczogW10sXHJcbiAgICAgICAgICAgIG1heFdpZHRoOiAwLFxyXG4gICAgICAgICAgICBzY2FsZVg6IDAsXHJcbiAgICAgICAgICAgIHNjYWxlWTogMFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHRleHQgPSBzcmMudGV4dDtcclxuICAgIHZhciB0ZXh0TGVuZ3RoID0gdGV4dC5sZW5ndGg7XHJcbiAgICB2YXIgbWF4V2lkdGggPSBzcmMubWF4V2lkdGg7XHJcbiAgICB2YXIgd29yZFdyYXBDaGFyQ29kZSA9IHNyYy53b3JkV3JhcENoYXJDb2RlO1xyXG5cclxuICAgIHZhciBieCA9IE51bWJlci5NQVhfVkFMVUU7XHJcbiAgICB2YXIgYnkgPSBOdW1iZXIuTUFYX1ZBTFVFO1xyXG4gICAgdmFyIGJ3ID0gMDtcclxuICAgIHZhciBiaCA9IDA7XHJcblxyXG4gICAgdmFyIGNoYXJzID0gc3JjLmZvbnREYXRhLmNoYXJzO1xyXG4gICAgdmFyIGxpbmVIZWlnaHQgPSBzcmMuZm9udERhdGEubGluZUhlaWdodDtcclxuICAgIHZhciBsZXR0ZXJTcGFjaW5nID0gc3JjLmxldHRlclNwYWNpbmc7XHJcblxyXG4gICAgdmFyIHhBZHZhbmNlID0gMDtcclxuICAgIHZhciB5QWR2YW5jZSA9IDA7XHJcblxyXG4gICAgdmFyIGNoYXJDb2RlID0gMDtcclxuXHJcbiAgICB2YXIgZ2x5cGggPSBudWxsO1xyXG5cclxuICAgIHZhciB4ID0gMDtcclxuICAgIHZhciB5ID0gMDtcclxuXHJcbiAgICB2YXIgc2NhbGUgPSAoc3JjLmZvbnRTaXplIC8gc3JjLmZvbnREYXRhLnNpemUpO1xyXG4gICAgdmFyIHN4ID0gc2NhbGUgKiBzcmMuc2NhbGVYO1xyXG4gICAgdmFyIHN5ID0gc2NhbGUgKiBzcmMuc2NhbGVZO1xyXG5cclxuICAgIHZhciBsYXN0R2x5cGggPSBudWxsO1xyXG4gICAgdmFyIGxhc3RDaGFyQ29kZSA9IDA7XHJcbiAgICB2YXIgbGluZVdpZHRocyA9IFtdO1xyXG4gICAgdmFyIHNob3J0ZXN0TGluZSA9IE51bWJlci5NQVhfVkFMVUU7XHJcbiAgICB2YXIgbG9uZ2VzdExpbmUgPSAwO1xyXG4gICAgdmFyIGN1cnJlbnRMaW5lID0gMDtcclxuICAgIHZhciBjdXJyZW50TGluZVdpZHRoID0gMDtcclxuXHJcbiAgICB2YXIgaTtcclxuICAgIHZhciB3b3JkcyA9IFtdO1xyXG4gICAgdmFyIGN1cnJlbnQgPSBudWxsO1xyXG5cclxuICAgIC8vICBTY2FuIGZvciBicmVhY2ggb2YgbWF4V2lkdGggYW5kIGluc2VydCBjYXJyaWFnZS1yZXR1cm5zXHJcbiAgICBpZiAobWF4V2lkdGggPiAwICYmIG91dC5tYXhXaWR0aCAhPT0gbWF4V2lkdGgpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRleHRMZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNoYXJDb2RlID0gdGV4dC5jaGFyQ29kZUF0KGkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNoYXJDb2RlID09PSAxMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgd29yZHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQ6IGN1cnJlbnQud29yZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaTogY3VycmVudC5pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBjdXJyZW50LnggKiBzeCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeTogY3VycmVudC55ICogc3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHc6IGN1cnJlbnQudyAqIHN4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoOiBjdXJyZW50LmggKiBzeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3I6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgeEFkdmFuY2UgPSAwO1xyXG4gICAgICAgICAgICAgICAgeUFkdmFuY2UgKz0gbGluZUhlaWdodDtcclxuICAgICAgICAgICAgICAgIGxhc3RHbHlwaCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGdseXBoID0gY2hhcnNbY2hhckNvZGVdO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFnbHlwaClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChsYXN0R2x5cGggIT09IG51bGwpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBnbHlwaEtlcm5pbmdPZmZzZXQgPSBnbHlwaC5rZXJuaW5nW2xhc3RDaGFyQ29kZV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjaGFyQ29kZSA9PT0gd29yZFdyYXBDaGFyQ29kZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgd29yZHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQ6IGN1cnJlbnQud29yZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaTogY3VycmVudC5pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBjdXJyZW50LnggKiBzeCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeTogY3VycmVudC55ICogc3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHc6IGN1cnJlbnQudyAqIHN4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoOiBjdXJyZW50LmggKiBzeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3I6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICBXZSdyZSBzdGFydGluZyBhIG5ldyB3b3JkLCByZWNvcmRpbmcgdGhlIHN0YXJ0aW5nIGluZGV4LCBldGNcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0geyB3b3JkOiAnJywgaTogaSwgeDogeEFkdmFuY2UsIHk6IHlBZHZhbmNlLCB3OiAwLCBoOiBsaW5lSGVpZ2h0LCBjcjogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50LndvcmQgPSBjdXJyZW50LndvcmQuY29uY2F0KHRleHRbaV0pO1xyXG4gICAgICAgICAgICAgICAgY3VycmVudC53ICs9IGdseXBoLnhPZmZzZXQgKyBnbHlwaC54QWR2YW5jZSArICgoZ2x5cGhLZXJuaW5nT2Zmc2V0ICE9PSB1bmRlZmluZWQpID8gZ2x5cGhLZXJuaW5nT2Zmc2V0IDogMCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHhBZHZhbmNlICs9IGdseXBoLnhBZHZhbmNlICsgbGV0dGVyU3BhY2luZztcclxuICAgICAgICAgICAgbGFzdEdseXBoID0gZ2x5cGg7XHJcbiAgICAgICAgICAgIGxhc3RDaGFyQ29kZSA9IGNoYXJDb2RlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIExhc3Qgd29yZFxyXG4gICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgd29yZHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB3b3JkOiBjdXJyZW50LndvcmQsXHJcbiAgICAgICAgICAgICAgICBpOiBjdXJyZW50LmksXHJcbiAgICAgICAgICAgICAgICB4OiBjdXJyZW50LnggKiBzeCxcclxuICAgICAgICAgICAgICAgIHk6IGN1cnJlbnQueSAqIHN5LFxyXG4gICAgICAgICAgICAgICAgdzogY3VycmVudC53ICogc3gsXHJcbiAgICAgICAgICAgICAgICBoOiBjdXJyZW50LmggKiBzeSxcclxuICAgICAgICAgICAgICAgIGNyOiBmYWxzZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBSZXNldCBmb3IgdGhlIG5leHQgbG9vcFxyXG4gICAgICAgIHhBZHZhbmNlID0gMDtcclxuICAgICAgICB5QWR2YW5jZSA9IDA7XHJcbiAgICAgICAgbGFzdEdseXBoID0gbnVsbDtcclxuICAgICAgICBsYXN0Q2hhckNvZGUgPSAwO1xyXG5cclxuICAgICAgICAvLyAgTG9vcCB0aHJvdWdoIHRoZSB3b3JkcyBhcnJheSBhbmQgc2VlIGlmIHdlJ3ZlIGdvdCBhbnkgPiBtYXhXaWR0aFxyXG4gICAgICAgIHZhciBwcmV2O1xyXG4gICAgICAgIHZhciBvZmZzZXQgPSAwO1xyXG4gICAgICAgIHZhciBjcnMgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHdvcmRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGVudHJ5ID0gd29yZHNbaV07XHJcbiAgICAgICAgICAgIHZhciBsZWZ0ID0gZW50cnkueDtcclxuICAgICAgICAgICAgdmFyIHJpZ2h0ID0gZW50cnkueCArIGVudHJ5Lnc7XHJcblxyXG4gICAgICAgICAgICBpZiAocHJldilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRpZmYgPSBsZWZ0IC0gKHByZXYueCArIHByZXYudyk7XHJcblxyXG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gbGVmdCAtIChkaWZmICsgcHJldi53KTtcclxuXHJcbiAgICAgICAgICAgICAgICBwcmV2ID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGNoZWNrTGVmdCA9IGxlZnQgLSBvZmZzZXQ7XHJcbiAgICAgICAgICAgIHZhciBjaGVja1JpZ2h0ID0gcmlnaHQgLSBvZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoY2hlY2tMZWZ0ID4gbWF4V2lkdGggfHwgY2hlY2tSaWdodCA+IG1heFdpZHRoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjcnMucHVzaChlbnRyeS5pIC0gMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5LmNyKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNycy5wdXNoKGVudHJ5LmkgKyBlbnRyeS53b3JkLmxlbmd0aCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJldiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJldiA9IGVudHJ5O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGVudHJ5LmNyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjcnMucHVzaChlbnRyeS5pICsgZW50cnkud29yZC5sZW5ndGgpO1xyXG5cclxuICAgICAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICBwcmV2ID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHN0cmluZ0luc2VydCA9IGZ1bmN0aW9uIChzdHIsIGluZGV4LCB2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdHIuc3Vic3RyKDAsIGluZGV4KSArIHZhbHVlICsgc3RyLnN1YnN0cihpbmRleCArIDEpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGZvciAoaSA9IGNycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBxdW90ZXNcclxuICAgICAgICAgICAgdGV4dCA9IHN0cmluZ0luc2VydCh0ZXh0LCBjcnNbaV0sIFwiXFxuXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgb3V0Lm1heFdpZHRoID0gbWF4V2lkdGg7XHJcbiAgICAgICAgb3V0LndyYXBwZWRUZXh0ID0gdGV4dDtcclxuXHJcbiAgICAgICAgdGV4dExlbmd0aCA9IHRleHQubGVuZ3RoO1xyXG5cclxuICAgICAgICAvLyAgUmVjYWxjdWxhdGVkIGluIHRoZSBuZXh0IGxvb3BcclxuICAgICAgICB3b3JkcyA9IFtdO1xyXG4gICAgICAgIGN1cnJlbnQgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAoaSA9IDA7IGkgPCB0ZXh0TGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgY2hhckNvZGUgPSB0ZXh0LmNoYXJDb2RlQXQoaSk7XHJcblxyXG4gICAgICAgIGlmIChjaGFyQ29kZSA9PT0gMTApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgd29yZHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgd29yZDogY3VycmVudC53b3JkLFxyXG4gICAgICAgICAgICAgICAgICAgIGk6IGN1cnJlbnQuaSxcclxuICAgICAgICAgICAgICAgICAgICB4OiBjdXJyZW50LnggKiBzeCxcclxuICAgICAgICAgICAgICAgICAgICB5OiBjdXJyZW50LnkgKiBzeSxcclxuICAgICAgICAgICAgICAgICAgICB3OiBjdXJyZW50LncgKiBzeCxcclxuICAgICAgICAgICAgICAgICAgICBoOiBjdXJyZW50LmggKiBzeVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHhBZHZhbmNlID0gMDtcclxuICAgICAgICAgICAgeUFkdmFuY2UgKz0gbGluZUhlaWdodDtcclxuICAgICAgICAgICAgbGFzdEdseXBoID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGxpbmVXaWR0aHNbY3VycmVudExpbmVdID0gY3VycmVudExpbmVXaWR0aDtcclxuXHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50TGluZVdpZHRoID4gbG9uZ2VzdExpbmUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxvbmdlc3RMaW5lID0gY3VycmVudExpbmVXaWR0aDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRMaW5lV2lkdGggPCBzaG9ydGVzdExpbmUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNob3J0ZXN0TGluZSA9IGN1cnJlbnRMaW5lV2lkdGg7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGN1cnJlbnRMaW5lKys7XHJcbiAgICAgICAgICAgIGN1cnJlbnRMaW5lV2lkdGggPSAwO1xyXG5cclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnbHlwaCA9IGNoYXJzW2NoYXJDb2RlXTtcclxuXHJcbiAgICAgICAgaWYgKCFnbHlwaClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgeCA9IHhBZHZhbmNlO1xyXG4gICAgICAgIHkgPSB5QWR2YW5jZTtcclxuXHJcbiAgICAgICAgaWYgKGxhc3RHbHlwaCAhPT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBrZXJuaW5nT2Zmc2V0ID0gZ2x5cGgua2VybmluZ1tsYXN0Q2hhckNvZGVdO1xyXG5cclxuICAgICAgICAgICAgeCArPSAoa2VybmluZ09mZnNldCAhPT0gdW5kZWZpbmVkKSA/IGtlcm5pbmdPZmZzZXQgOiAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJ4ID4geClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGJ4ID0geDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChieSA+IHkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBieSA9IHk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZ3cgPSB4ICsgZ2x5cGgueEFkdmFuY2U7XHJcbiAgICAgICAgdmFyIGdoID0geSArIGxpbmVIZWlnaHQ7XHJcblxyXG4gICAgICAgIGlmIChidyA8IGd3KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYncgPSBndztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChiaCA8IGdoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYmggPSBnaDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjaGFyQ29kZSA9PT0gd29yZFdyYXBDaGFyQ29kZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB3b3Jkcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICB3b3JkOiBjdXJyZW50LndvcmQsXHJcbiAgICAgICAgICAgICAgICAgICAgaTogY3VycmVudC5pLFxyXG4gICAgICAgICAgICAgICAgICAgIHg6IGN1cnJlbnQueCAqIHN4LFxyXG4gICAgICAgICAgICAgICAgICAgIHk6IGN1cnJlbnQueSAqIHN5LFxyXG4gICAgICAgICAgICAgICAgICAgIHc6IGN1cnJlbnQudyAqIHN4LFxyXG4gICAgICAgICAgICAgICAgICAgIGg6IGN1cnJlbnQuaCAqIHN5XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBXZSdyZSBzdGFydGluZyBhIG5ldyB3b3JkLCByZWNvcmRpbmcgdGhlIHN0YXJ0aW5nIGluZGV4LCBldGNcclxuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB7IHdvcmQ6ICcnLCBpOiBpLCB4OiB4QWR2YW5jZSwgeTogeUFkdmFuY2UsIHc6IDAsIGg6IGxpbmVIZWlnaHQgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY3VycmVudC53b3JkID0gY3VycmVudC53b3JkLmNvbmNhdCh0ZXh0W2ldKTtcclxuICAgICAgICAgICAgY3VycmVudC53ICs9IGdseXBoLnhPZmZzZXQgKyBnbHlwaC54QWR2YW5jZSArICgoa2VybmluZ09mZnNldCAhPT0gdW5kZWZpbmVkKSA/IGtlcm5pbmdPZmZzZXQgOiAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHhBZHZhbmNlICs9IGdseXBoLnhBZHZhbmNlICsgbGV0dGVyU3BhY2luZztcclxuICAgICAgICBsYXN0R2x5cGggPSBnbHlwaDtcclxuICAgICAgICBsYXN0Q2hhckNvZGUgPSBjaGFyQ29kZTtcclxuICAgICAgICBjdXJyZW50TGluZVdpZHRoID0gZ3cgKiBzY2FsZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgTGFzdCB3b3JkXHJcbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbClcclxuICAgIHtcclxuICAgICAgICB3b3Jkcy5wdXNoKHtcclxuICAgICAgICAgICAgd29yZDogY3VycmVudC53b3JkLFxyXG4gICAgICAgICAgICBpOiBjdXJyZW50LmksXHJcbiAgICAgICAgICAgIHg6IGN1cnJlbnQueCAqIHN4LFxyXG4gICAgICAgICAgICB5OiBjdXJyZW50LnkgKiBzeSxcclxuICAgICAgICAgICAgdzogY3VycmVudC53ICogc3gsXHJcbiAgICAgICAgICAgIGg6IGN1cnJlbnQuaCAqIHN5XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGluZVdpZHRoc1tjdXJyZW50TGluZV0gPSBjdXJyZW50TGluZVdpZHRoO1xyXG5cclxuICAgIGlmIChjdXJyZW50TGluZVdpZHRoID4gbG9uZ2VzdExpbmUpXHJcbiAgICB7XHJcbiAgICAgICAgbG9uZ2VzdExpbmUgPSBjdXJyZW50TGluZVdpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjdXJyZW50TGluZVdpZHRoIDwgc2hvcnRlc3RMaW5lKVxyXG4gICAge1xyXG4gICAgICAgIHNob3J0ZXN0TGluZSA9IGN1cnJlbnRMaW5lV2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGxvY2FsID0gb3V0LmxvY2FsO1xyXG4gICAgdmFyIGdsb2JhbCA9IG91dC5nbG9iYWw7XHJcbiAgICB2YXIgbGluZXMgPSBvdXQubGluZXM7XHJcblxyXG4gICAgbG9jYWwueCA9IGJ4ICogc2NhbGU7XHJcbiAgICBsb2NhbC55ID0gYnkgKiBzY2FsZTtcclxuICAgIGxvY2FsLndpZHRoID0gYncgKiBzY2FsZTtcclxuICAgIGxvY2FsLmhlaWdodCA9IGJoICogc2NhbGU7XHJcblxyXG4gICAgZ2xvYmFsLnggPSAoc3JjLnggLSBzcmMuZGlzcGxheU9yaWdpblgpICsgKGJ4ICogc3gpO1xyXG4gICAgZ2xvYmFsLnkgPSAoc3JjLnkgLSBzcmMuZGlzcGxheU9yaWdpblkpICsgKGJ5ICogc3kpO1xyXG4gICAgZ2xvYmFsLndpZHRoID0gYncgKiBzeDtcclxuICAgIGdsb2JhbC5oZWlnaHQgPSBiaCAqIHN5O1xyXG5cclxuICAgIGxpbmVzLnNob3J0ZXN0ID0gc2hvcnRlc3RMaW5lO1xyXG4gICAgbGluZXMubG9uZ2VzdCA9IGxvbmdlc3RMaW5lO1xyXG4gICAgbGluZXMubGVuZ3RocyA9IGxpbmVXaWR0aHM7XHJcblxyXG4gICAgaWYgKHJvdW5kKVxyXG4gICAge1xyXG4gICAgICAgIGxvY2FsLnggPSBNYXRoLnJvdW5kKGxvY2FsLngpO1xyXG4gICAgICAgIGxvY2FsLnkgPSBNYXRoLnJvdW5kKGxvY2FsLnkpO1xyXG4gICAgICAgIGxvY2FsLndpZHRoID0gTWF0aC5yb3VuZChsb2NhbC53aWR0aCk7XHJcbiAgICAgICAgbG9jYWwuaGVpZ2h0ID0gTWF0aC5yb3VuZChsb2NhbC5oZWlnaHQpO1xyXG5cclxuICAgICAgICBnbG9iYWwueCA9IE1hdGgucm91bmQoZ2xvYmFsLngpO1xyXG4gICAgICAgIGdsb2JhbC55ID0gTWF0aC5yb3VuZChnbG9iYWwueSk7XHJcbiAgICAgICAgZ2xvYmFsLndpZHRoID0gTWF0aC5yb3VuZChnbG9iYWwud2lkdGgpO1xyXG4gICAgICAgIGdsb2JhbC5oZWlnaHQgPSBNYXRoLnJvdW5kKGdsb2JhbC5oZWlnaHQpO1xyXG5cclxuICAgICAgICBsaW5lcy5zaG9ydGVzdCA9IE1hdGgucm91bmQoc2hvcnRlc3RMaW5lKTtcclxuICAgICAgICBsaW5lcy5sb25nZXN0ID0gTWF0aC5yb3VuZChsb25nZXN0TGluZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb3V0LndvcmRzID0gd29yZHM7XHJcbiAgICBvdXQubGluZXMuaGVpZ2h0ID0gbGluZUhlaWdodDtcclxuICAgIG91dC5zY2FsZVggPSBzcmMuc2NhbGVYO1xyXG4gICAgb3V0LnNjYWxlWSA9IHNyYy5zY2FsZVk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0Qml0bWFwVGV4dFNpemU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/GetBitmapTextSize.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/ParseFromAtlas.js":
/*!**************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/bitmaptext/ParseFromAtlas.js ***!
\**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar ParseXMLBitmapFont = __webpack_require__(/*! ./ParseXMLBitmapFont */ \"./node_modules/phaser/src/gameobjects/bitmaptext/ParseXMLBitmapFont.js\");\r\n\r\n/**\r\n * Parse an XML Bitmap Font from an Atlas.\r\n *\r\n * Adds the parsed Bitmap Font data to the cache with the `fontName` key.\r\n *\r\n * @function ParseFromAtlas\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to parse the Bitmap Font for.\r\n * @param {string} fontName - The key of the font to add to the Bitmap Font cache.\r\n * @param {string} textureKey - The key of the BitmapFont's texture.\r\n * @param {string} frameKey - The key of the BitmapFont texture's frame.\r\n * @param {string} xmlKey - The key of the XML data of the font to parse.\r\n * @param {integer} xSpacing - The x-axis spacing to add between each letter.\r\n * @param {integer} ySpacing - The y-axis spacing to add to the line height.\r\n *\r\n * @return {boolean} Whether the parsing was successful or not.\r\n */\r\nvar ParseFromAtlas = function (scene, fontName, textureKey, frameKey, xmlKey, xSpacing, ySpacing)\r\n{\r\n var frame = scene.sys.textures.getFrame(textureKey, frameKey);\r\n var xml = scene.sys.cache.xml.get(xmlKey);\r\n\r\n if (frame && xml)\r\n {\r\n var data = ParseXMLBitmapFont(xml, xSpacing, ySpacing, frame);\r\n\r\n scene.sys.cache.bitmapFont.add(fontName, { data: data, texture: textureKey, frame: frameKey });\r\n\r\n return true;\r\n }\r\n else\r\n {\r\n return false;\r\n }\r\n};\r\n\r\nmodule.exports = ParseFromAtlas;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L1BhcnNlRnJvbUF0bGFzLmpzPzc3MWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLG9HQUFzQjs7QUFFdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGtEQUFrRCxtREFBbUQ7O0FBRXJHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvYml0bWFwdGV4dC9QYXJzZUZyb21BdGxhcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBhcnNlWE1MQml0bWFwRm9udCA9IHJlcXVpcmUoJy4vUGFyc2VYTUxCaXRtYXBGb250Jyk7XHJcblxyXG4vKipcclxuICogUGFyc2UgYW4gWE1MIEJpdG1hcCBGb250IGZyb20gYW4gQXRsYXMuXHJcbiAqXHJcbiAqIEFkZHMgdGhlIHBhcnNlZCBCaXRtYXAgRm9udCBkYXRhIHRvIHRoZSBjYWNoZSB3aXRoIHRoZSBgZm9udE5hbWVgIGtleS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBhcnNlRnJvbUF0bGFzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gcGFyc2UgdGhlIEJpdG1hcCBGb250IGZvci5cclxuICogQHBhcmFtIHtzdHJpbmd9IGZvbnROYW1lIC0gVGhlIGtleSBvZiB0aGUgZm9udCB0byBhZGQgdG8gdGhlIEJpdG1hcCBGb250IGNhY2hlLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dHVyZUtleSAtIFRoZSBrZXkgb2YgdGhlIEJpdG1hcEZvbnQncyB0ZXh0dXJlLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZnJhbWVLZXkgLSBUaGUga2V5IG9mIHRoZSBCaXRtYXBGb250IHRleHR1cmUncyBmcmFtZS5cclxuICogQHBhcmFtIHtzdHJpbmd9IHhtbEtleSAtIFRoZSBrZXkgb2YgdGhlIFhNTCBkYXRhIG9mIHRoZSBmb250IHRvIHBhcnNlLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHhTcGFjaW5nIC0gVGhlIHgtYXhpcyBzcGFjaW5nIHRvIGFkZCBiZXR3ZWVuIGVhY2ggbGV0dGVyLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHlTcGFjaW5nIC0gVGhlIHktYXhpcyBzcGFjaW5nIHRvIGFkZCB0byB0aGUgbGluZSBoZWlnaHQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHBhcnNpbmcgd2FzIHN1Y2Nlc3NmdWwgb3Igbm90LlxyXG4gKi9cclxudmFyIFBhcnNlRnJvbUF0bGFzID0gZnVuY3Rpb24gKHNjZW5lLCBmb250TmFtZSwgdGV4dHVyZUtleSwgZnJhbWVLZXksIHhtbEtleSwgeFNwYWNpbmcsIHlTcGFjaW5nKVxyXG57XHJcbiAgICB2YXIgZnJhbWUgPSBzY2VuZS5zeXMudGV4dHVyZXMuZ2V0RnJhbWUodGV4dHVyZUtleSwgZnJhbWVLZXkpO1xyXG4gICAgdmFyIHhtbCA9IHNjZW5lLnN5cy5jYWNoZS54bWwuZ2V0KHhtbEtleSk7XHJcblxyXG4gICAgaWYgKGZyYW1lICYmIHhtbClcclxuICAgIHtcclxuICAgICAgICB2YXIgZGF0YSA9IFBhcnNlWE1MQml0bWFwRm9udCh4bWwsIHhTcGFjaW5nLCB5U3BhY2luZywgZnJhbWUpO1xyXG5cclxuICAgICAgICBzY2VuZS5zeXMuY2FjaGUuYml0bWFwRm9udC5hZGQoZm9udE5hbWUsIHsgZGF0YTogZGF0YSwgdGV4dHVyZTogdGV4dHVyZUtleSwgZnJhbWU6IGZyYW1lS2V5IH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnNlRnJvbUF0bGFzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/ParseFromAtlas.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/ParseRetroFont.js":
/*!**************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/bitmaptext/ParseRetroFont.js ***!
\**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\n\r\n/**\r\n * Parses a Retro Font configuration object so you can pass it to the BitmapText constructor\r\n * and create a BitmapText object using a fixed-width retro font.\r\n *\r\n * @function Phaser.GameObjects.RetroFont.Parse\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - A reference to the Phaser Scene.\r\n * @param {Phaser.Types.GameObjects.BitmapText.RetroFontConfig} config - The font configuration object.\r\n *\r\n * @return {object} A parsed Bitmap Font data entry for the Bitmap Font cache.\r\n */\r\nvar ParseRetroFont = function (scene, config)\r\n{\r\n var w = config.width;\r\n var h = config.height;\r\n var cx = Math.floor(w / 2);\r\n var cy = Math.floor(h / 2);\r\n var letters = GetValue(config, 'chars', '');\r\n\r\n if (letters === '')\r\n {\r\n return;\r\n }\r\n\r\n var key = GetValue(config, 'image', '');\r\n var offsetX = GetValue(config, 'offset.x', 0);\r\n var offsetY = GetValue(config, 'offset.y', 0);\r\n var spacingX = GetValue(config, 'spacing.x', 0);\r\n var spacingY = GetValue(config, 'spacing.y', 0);\r\n var lineSpacing = GetValue(config, 'lineSpacing', 0);\r\n\r\n var charsPerRow = GetValue(config, 'charsPerRow', null);\r\n\r\n if (charsPerRow === null)\r\n {\r\n charsPerRow = scene.sys.textures.getFrame(key).width / w;\r\n\r\n if (charsPerRow > letters.length)\r\n {\r\n charsPerRow = letters.length;\r\n }\r\n }\r\n\r\n var x = offsetX;\r\n var y = offsetY;\r\n\r\n var data = {\r\n retroFont: true,\r\n font: key,\r\n size: w,\r\n lineHeight: h + lineSpacing,\r\n chars: {}\r\n };\r\n\r\n var r = 0;\r\n\r\n for (var i = 0; i < letters.length; i++)\r\n {\r\n // var node = letters[i];\r\n\r\n var charCode = letters.charCodeAt(i);\r\n\r\n data.chars[charCode] =\r\n {\r\n x: x,\r\n y: y,\r\n width: w,\r\n height: h,\r\n centerX: cx,\r\n centerY: cy,\r\n xOffset: 0,\r\n yOffset: 0,\r\n xAdvance: w,\r\n data: {},\r\n kerning: {}\r\n };\r\n\r\n r++;\r\n\r\n if (r === charsPerRow)\r\n {\r\n r = 0;\r\n x = offsetX;\r\n y += h + spacingY;\r\n }\r\n else\r\n {\r\n x += w + spacingX;\r\n }\r\n }\r\n\r\n var entry = {\r\n data: data,\r\n frame: null,\r\n texture: key\r\n };\r\n\r\n return entry;\r\n};\r\n\r\nmodule.exports = ParseRetroFont;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L1BhcnNlUmV0cm9Gb250LmpzP2ZlNjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyx1RkFBNkI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsb0RBQW9EO0FBQy9EO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLG9CQUFvQjtBQUN2QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2JpdG1hcHRleHQvUGFyc2VSZXRyb0ZvbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRWYWx1ZScpO1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlcyBhIFJldHJvIEZvbnQgY29uZmlndXJhdGlvbiBvYmplY3Qgc28geW91IGNhbiBwYXNzIGl0IHRvIHRoZSBCaXRtYXBUZXh0IGNvbnN0cnVjdG9yXHJcbiAqIGFuZCBjcmVhdGUgYSBCaXRtYXBUZXh0IG9iamVjdCB1c2luZyBhIGZpeGVkLXdpZHRoIHJldHJvIGZvbnQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2FtZU9iamVjdHMuUmV0cm9Gb250LlBhcnNlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBBIHJlZmVyZW5jZSB0byB0aGUgUGhhc2VyIFNjZW5lLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0LlJldHJvRm9udENvbmZpZ30gY29uZmlnIC0gVGhlIGZvbnQgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge29iamVjdH0gQSBwYXJzZWQgQml0bWFwIEZvbnQgZGF0YSBlbnRyeSBmb3IgdGhlIEJpdG1hcCBGb250IGNhY2hlLlxyXG4gKi9cclxudmFyIFBhcnNlUmV0cm9Gb250ID0gZnVuY3Rpb24gKHNjZW5lLCBjb25maWcpXHJcbntcclxuICAgIHZhciB3ID0gY29uZmlnLndpZHRoO1xyXG4gICAgdmFyIGggPSBjb25maWcuaGVpZ2h0O1xyXG4gICAgdmFyIGN4ID0gTWF0aC5mbG9vcih3IC8gMik7XHJcbiAgICB2YXIgY3kgPSBNYXRoLmZsb29yKGggLyAyKTtcclxuICAgIHZhciBsZXR0ZXJzID0gR2V0VmFsdWUoY29uZmlnLCAnY2hhcnMnLCAnJyk7XHJcblxyXG4gICAgaWYgKGxldHRlcnMgPT09ICcnKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIga2V5ID0gR2V0VmFsdWUoY29uZmlnLCAnaW1hZ2UnLCAnJyk7XHJcbiAgICB2YXIgb2Zmc2V0WCA9IEdldFZhbHVlKGNvbmZpZywgJ29mZnNldC54JywgMCk7XHJcbiAgICB2YXIgb2Zmc2V0WSA9IEdldFZhbHVlKGNvbmZpZywgJ29mZnNldC55JywgMCk7XHJcbiAgICB2YXIgc3BhY2luZ1ggPSBHZXRWYWx1ZShjb25maWcsICdzcGFjaW5nLngnLCAwKTtcclxuICAgIHZhciBzcGFjaW5nWSA9IEdldFZhbHVlKGNvbmZpZywgJ3NwYWNpbmcueScsIDApO1xyXG4gICAgdmFyIGxpbmVTcGFjaW5nID0gR2V0VmFsdWUoY29uZmlnLCAnbGluZVNwYWNpbmcnLCAwKTtcclxuXHJcbiAgICB2YXIgY2hhcnNQZXJSb3cgPSBHZXRWYWx1ZShjb25maWcsICdjaGFyc1BlclJvdycsIG51bGwpO1xyXG5cclxuICAgIGlmIChjaGFyc1BlclJvdyA9PT0gbnVsbClcclxuICAgIHtcclxuICAgICAgICBjaGFyc1BlclJvdyA9IHNjZW5lLnN5cy50ZXh0dXJlcy5nZXRGcmFtZShrZXkpLndpZHRoIC8gdztcclxuXHJcbiAgICAgICAgaWYgKGNoYXJzUGVyUm93ID4gbGV0dGVycy5sZW5ndGgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjaGFyc1BlclJvdyA9IGxldHRlcnMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIgeCA9IG9mZnNldFg7XHJcbiAgICB2YXIgeSA9IG9mZnNldFk7XHJcblxyXG4gICAgdmFyIGRhdGEgPSB7XHJcbiAgICAgICAgcmV0cm9Gb250OiB0cnVlLFxyXG4gICAgICAgIGZvbnQ6IGtleSxcclxuICAgICAgICBzaXplOiB3LFxyXG4gICAgICAgIGxpbmVIZWlnaHQ6IGggKyBsaW5lU3BhY2luZyxcclxuICAgICAgICBjaGFyczoge31cclxuICAgIH07XHJcblxyXG4gICAgdmFyIHIgPSAwO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICAvLyB2YXIgbm9kZSA9IGxldHRlcnNbaV07XHJcblxyXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IGxldHRlcnMuY2hhckNvZGVBdChpKTtcclxuXHJcbiAgICAgICAgZGF0YS5jaGFyc1tjaGFyQ29kZV0gPVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgeDogeCxcclxuICAgICAgICAgICAgeTogeSxcclxuICAgICAgICAgICAgd2lkdGg6IHcsXHJcbiAgICAgICAgICAgIGhlaWdodDogaCxcclxuICAgICAgICAgICAgY2VudGVyWDogY3gsXHJcbiAgICAgICAgICAgIGNlbnRlclk6IGN5LFxyXG4gICAgICAgICAgICB4T2Zmc2V0OiAwLFxyXG4gICAgICAgICAgICB5T2Zmc2V0OiAwLFxyXG4gICAgICAgICAgICB4QWR2YW5jZTogdyxcclxuICAgICAgICAgICAgZGF0YToge30sXHJcbiAgICAgICAgICAgIGtlcm5pbmc6IHt9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcisrO1xyXG5cclxuICAgICAgICBpZiAociA9PT0gY2hhcnNQZXJSb3cpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByID0gMDtcclxuICAgICAgICAgICAgeCA9IG9mZnNldFg7XHJcbiAgICAgICAgICAgIHkgKz0gaCArIHNwYWNpbmdZO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB4ICs9IHcgKyBzcGFjaW5nWDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGVudHJ5ID0ge1xyXG4gICAgICAgIGRhdGE6IGRhdGEsXHJcbiAgICAgICAgZnJhbWU6IG51bGwsXHJcbiAgICAgICAgdGV4dHVyZToga2V5XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBlbnRyeTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGFyc2VSZXRyb0ZvbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/ParseRetroFont.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/ParseXMLBitmapFont.js":
/*!******************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/bitmaptext/ParseXMLBitmapFont.js ***!
\******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Read an integer value from an XML Node.\r\n *\r\n * @function getValue\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Node} node - The XML Node.\r\n * @param {string} attribute - The attribute to read.\r\n *\r\n * @return {integer} The parsed value.\r\n */\r\nfunction getValue (node, attribute)\r\n{\r\n return parseInt(node.getAttribute(attribute), 10);\r\n}\r\n\r\n/**\r\n * Parse an XML font to Bitmap Font data for the Bitmap Font cache.\r\n *\r\n * @function ParseXMLBitmapFont\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {XMLDocument} xml - The XML Document to parse the font from.\r\n * @param {integer} [xSpacing=0] - The x-axis spacing to add between each letter.\r\n * @param {integer} [ySpacing=0] - The y-axis spacing to add to the line height.\r\n * @param {Phaser.Textures.Frame} [frame] - The texture frame to take into account while parsing.\r\n *\r\n * @return {Phaser.Types.GameObjects.BitmapText.BitmapFontData} The parsed Bitmap Font data.\r\n */\r\nvar ParseXMLBitmapFont = function (xml, xSpacing, ySpacing, frame)\r\n{\r\n if (xSpacing === undefined) { xSpacing = 0; }\r\n if (ySpacing === undefined) { ySpacing = 0; }\r\n\r\n var data = {};\r\n var info = xml.getElementsByTagName('info')[0];\r\n var common = xml.getElementsByTagName('common')[0];\r\n\r\n data.font = info.getAttribute('face');\r\n data.size = getValue(info, 'size');\r\n data.lineHeight = getValue(common, 'lineHeight') + ySpacing;\r\n data.chars = {};\r\n\r\n var letters = xml.getElementsByTagName('char');\r\n\r\n var adjustForTrim = (frame !== undefined && frame.trimmed);\r\n\r\n if (adjustForTrim)\r\n {\r\n var top = frame.height;\r\n var left = frame.width;\r\n }\r\n\r\n for (var i = 0; i < letters.length; i++)\r\n {\r\n var node = letters[i];\r\n\r\n var charCode = getValue(node, 'id');\r\n var gx = getValue(node, 'x');\r\n var gy = getValue(node, 'y');\r\n var gw = getValue(node, 'width');\r\n var gh = getValue(node, 'height');\r\n\r\n // Handle frame trim issues\r\n\r\n if (adjustForTrim)\r\n {\r\n if (gx < left)\r\n {\r\n left = gx;\r\n }\r\n\r\n if (gy < top)\r\n {\r\n top = gy;\r\n }\r\n }\r\n\r\n data.chars[charCode] =\r\n {\r\n x: gx,\r\n y: gy,\r\n width: gw,\r\n height: gh,\r\n centerX: Math.floor(gw / 2),\r\n centerY: Math.floor(gh / 2),\r\n xOffset: getValue(node, 'xoffset'),\r\n yOffset: getValue(node, 'yoffset'),\r\n xAdvance: getValue(node, 'xadvance') + xSpacing,\r\n data: {},\r\n kerning: {}\r\n };\r\n }\r\n\r\n if (adjustForTrim && top !== 0 && left !== 0)\r\n {\r\n // Now we know the top and left coordinates of the glyphs in the original data\r\n // so we can work out how much to adjust the glyphs by\r\n\r\n for (var code in data.chars)\r\n {\r\n var glyph = data.chars[code];\r\n\r\n glyph.x -= frame.x;\r\n glyph.y -= frame.y;\r\n }\r\n }\r\n\r\n var kernings = xml.getElementsByTagName('kerning');\r\n\r\n for (i = 0; i < kernings.length; i++)\r\n {\r\n var kern = kernings[i];\r\n\r\n var first = getValue(kern, 'first');\r\n var second = getValue(kern, 'second');\r\n var amount = getValue(kern, 'amount');\r\n\r\n data.chars[second].kerning[first] = amount;\r\n }\r\n\r\n return data;\r\n};\r\n\r\nmodule.exports = ParseXMLBitmapFont;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L1BhcnNlWE1MQml0bWFwRm9udC5qcz8wYWU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsWUFBWTtBQUN2QixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsc0JBQXNCO0FBQ2pDO0FBQ0EsWUFBWSxtREFBbUQ7QUFDL0Q7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLGNBQWM7QUFDL0MsaUNBQWlDLGNBQWM7O0FBRS9DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixvQkFBb0I7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxlQUFlLHFCQUFxQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L1BhcnNlWE1MQml0bWFwRm9udC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlYWQgYW4gaW50ZWdlciB2YWx1ZSBmcm9tIGFuIFhNTCBOb2RlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gZ2V0VmFsdWVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBYTUwgTm9kZS5cclxuICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZSAtIFRoZSBhdHRyaWJ1dGUgdG8gcmVhZC5cclxuICpcclxuICogQHJldHVybiB7aW50ZWdlcn0gVGhlIHBhcnNlZCB2YWx1ZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldFZhbHVlIChub2RlLCBhdHRyaWJ1dGUpXHJcbntcclxuICAgIHJldHVybiBwYXJzZUludChub2RlLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpLCAxMCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBhbiBYTUwgZm9udCB0byBCaXRtYXAgRm9udCBkYXRhIGZvciB0aGUgQml0bWFwIEZvbnQgY2FjaGUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQYXJzZVhNTEJpdG1hcEZvbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7WE1MRG9jdW1lbnR9IHhtbCAtIFRoZSBYTUwgRG9jdW1lbnQgdG8gcGFyc2UgdGhlIGZvbnQgZnJvbS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbeFNwYWNpbmc9MF0gLSBUaGUgeC1heGlzIHNwYWNpbmcgdG8gYWRkIGJldHdlZW4gZWFjaCBsZXR0ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW3lTcGFjaW5nPTBdIC0gVGhlIHktYXhpcyBzcGFjaW5nIHRvIGFkZCB0byB0aGUgbGluZSBoZWlnaHQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRleHR1cmVzLkZyYW1lfSBbZnJhbWVdIC0gVGhlIHRleHR1cmUgZnJhbWUgdG8gdGFrZSBpbnRvIGFjY291bnQgd2hpbGUgcGFyc2luZy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkJpdG1hcFRleHQuQml0bWFwRm9udERhdGF9IFRoZSBwYXJzZWQgQml0bWFwIEZvbnQgZGF0YS5cclxuICovXHJcbnZhciBQYXJzZVhNTEJpdG1hcEZvbnQgPSBmdW5jdGlvbiAoeG1sLCB4U3BhY2luZywgeVNwYWNpbmcsIGZyYW1lKVxyXG57XHJcbiAgICBpZiAoeFNwYWNpbmcgPT09IHVuZGVmaW5lZCkgeyB4U3BhY2luZyA9IDA7IH1cclxuICAgIGlmICh5U3BhY2luZyA9PT0gdW5kZWZpbmVkKSB7IHlTcGFjaW5nID0gMDsgfVxyXG5cclxuICAgIHZhciBkYXRhID0ge307XHJcbiAgICB2YXIgaW5mbyA9IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpWzBdO1xyXG4gICAgdmFyIGNvbW1vbiA9IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29tbW9uJylbMF07XHJcblxyXG4gICAgZGF0YS5mb250ID0gaW5mby5nZXRBdHRyaWJ1dGUoJ2ZhY2UnKTtcclxuICAgIGRhdGEuc2l6ZSA9IGdldFZhbHVlKGluZm8sICdzaXplJyk7XHJcbiAgICBkYXRhLmxpbmVIZWlnaHQgPSBnZXRWYWx1ZShjb21tb24sICdsaW5lSGVpZ2h0JykgKyB5U3BhY2luZztcclxuICAgIGRhdGEuY2hhcnMgPSB7fTtcclxuXHJcbiAgICB2YXIgbGV0dGVycyA9IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY2hhcicpO1xyXG5cclxuICAgIHZhciBhZGp1c3RGb3JUcmltID0gKGZyYW1lICE9PSB1bmRlZmluZWQgJiYgZnJhbWUudHJpbW1lZCk7XHJcblxyXG4gICAgaWYgKGFkanVzdEZvclRyaW0pXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHRvcCA9IGZyYW1lLmhlaWdodDtcclxuICAgICAgICB2YXIgbGVmdCA9IGZyYW1lLndpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgbm9kZSA9IGxldHRlcnNbaV07XHJcblxyXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IGdldFZhbHVlKG5vZGUsICdpZCcpO1xyXG4gICAgICAgIHZhciBneCA9IGdldFZhbHVlKG5vZGUsICd4Jyk7XHJcbiAgICAgICAgdmFyIGd5ID0gZ2V0VmFsdWUobm9kZSwgJ3knKTtcclxuICAgICAgICB2YXIgZ3cgPSBnZXRWYWx1ZShub2RlLCAnd2lkdGgnKTtcclxuICAgICAgICB2YXIgZ2ggPSBnZXRWYWx1ZShub2RlLCAnaGVpZ2h0Jyk7XHJcblxyXG4gICAgICAgIC8vICBIYW5kbGUgZnJhbWUgdHJpbSBpc3N1ZXNcclxuXHJcbiAgICAgICAgaWYgKGFkanVzdEZvclRyaW0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoZ3ggPCBsZWZ0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0ID0gZ3g7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChneSA8IHRvcClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdG9wID0gZ3k7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRhdGEuY2hhcnNbY2hhckNvZGVdID1cclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHg6IGd4LFxyXG4gICAgICAgICAgICB5OiBneSxcclxuICAgICAgICAgICAgd2lkdGg6IGd3LFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGdoLFxyXG4gICAgICAgICAgICBjZW50ZXJYOiBNYXRoLmZsb29yKGd3IC8gMiksXHJcbiAgICAgICAgICAgIGNlbnRlclk6IE1hdGguZmxvb3IoZ2ggLyAyKSxcclxuICAgICAgICAgICAgeE9mZnNldDogZ2V0VmFsdWUobm9kZSwgJ3hvZmZzZXQnKSxcclxuICAgICAgICAgICAgeU9mZnNldDogZ2V0VmFsdWUobm9kZSwgJ3lvZmZzZXQnKSxcclxuICAgICAgICAgICAgeEFkdmFuY2U6IGdldFZhbHVlKG5vZGUsICd4YWR2YW5jZScpICsgeFNwYWNpbmcsXHJcbiAgICAgICAgICAgIGRhdGE6IHt9LFxyXG4gICAgICAgICAgICBrZXJuaW5nOiB7fVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFkanVzdEZvclRyaW0gJiYgdG9wICE9PSAwICYmIGxlZnQgIT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIE5vdyB3ZSBrbm93IHRoZSB0b3AgYW5kIGxlZnQgY29vcmRpbmF0ZXMgb2YgdGhlIGdseXBocyBpbiB0aGUgb3JpZ2luYWwgZGF0YVxyXG4gICAgICAgIC8vICBzbyB3ZSBjYW4gd29yayBvdXQgaG93IG11Y2ggdG8gYWRqdXN0IHRoZSBnbHlwaHMgYnlcclxuXHJcbiAgICAgICAgZm9yICh2YXIgY29kZSBpbiBkYXRhLmNoYXJzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGdseXBoID0gZGF0YS5jaGFyc1tjb2RlXTtcclxuXHJcbiAgICAgICAgICAgIGdseXBoLnggLT0gZnJhbWUueDtcclxuICAgICAgICAgICAgZ2x5cGgueSAtPSBmcmFtZS55O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIga2VybmluZ3MgPSB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2tlcm5pbmcnKTtcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwga2VybmluZ3MubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGtlcm4gPSBrZXJuaW5nc1tpXTtcclxuXHJcbiAgICAgICAgdmFyIGZpcnN0ID0gZ2V0VmFsdWUoa2VybiwgJ2ZpcnN0Jyk7XHJcbiAgICAgICAgdmFyIHNlY29uZCA9IGdldFZhbHVlKGtlcm4sICdzZWNvbmQnKTtcclxuICAgICAgICB2YXIgYW1vdW50ID0gZ2V0VmFsdWUoa2VybiwgJ2Ftb3VudCcpO1xyXG5cclxuICAgICAgICBkYXRhLmNoYXJzW3NlY29uZF0ua2VybmluZ1tmaXJzdF0gPSBhbW91bnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnNlWE1MQml0bWFwRm9udDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/ParseXMLBitmapFont.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/RetroFont.js":
/*!*********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/bitmaptext/RetroFont.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar RETRO_FONT_CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/gameobjects/bitmaptext/const.js\");\r\nvar Extend = __webpack_require__(/*! ../../utils/object/Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\");\r\n\r\n/**\r\n * @namespace Phaser.GameObjects.RetroFont\r\n * @since 3.6.0\r\n */\r\n\r\nvar RetroFont = { Parse: __webpack_require__(/*! ./ParseRetroFont */ \"./node_modules/phaser/src/gameobjects/bitmaptext/ParseRetroFont.js\") };\r\n\r\n// Merge in the consts\r\nRetroFont = Extend(false, RetroFont, RETRO_FONT_CONST);\r\n\r\nmodule.exports = RetroFont;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L1JldHJvRm9udC5qcz9jNTk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx1QkFBdUIsbUJBQU8sQ0FBQywwRUFBUztBQUN4QyxhQUFhLG1CQUFPLENBQUMsbUZBQTJCOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsUUFBUSxtQkFBTyxDQUFDLDRGQUFrQjs7QUFFbkQ7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2JpdG1hcHRleHQvUmV0cm9Gb250LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUkVUUk9fRk9OVF9DT05TVCA9IHJlcXVpcmUoJy4vY29uc3QnKTtcclxudmFyIEV4dGVuZCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9FeHRlbmQnKTtcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0cy5SZXRyb0ZvbnRcclxuICogQHNpbmNlIDMuNi4wXHJcbiAqL1xyXG5cclxudmFyIFJldHJvRm9udCA9IHsgUGFyc2U6IHJlcXVpcmUoJy4vUGFyc2VSZXRyb0ZvbnQnKSB9O1xyXG5cclxuLy8gICBNZXJnZSBpbiB0aGUgY29uc3RzXHJcblJldHJvRm9udCA9IEV4dGVuZChmYWxzZSwgUmV0cm9Gb250LCBSRVRST19GT05UX0NPTlNUKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmV0cm9Gb250O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/RetroFont.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/const.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/bitmaptext/const.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar RETRO_FONT_CONST = {\r\n\r\n /**\r\n * Text Set 1 = !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\r\n * \r\n * @name Phaser.GameObjects.RetroFont.TEXT_SET1\r\n * @type {string}\r\n * @since 3.6.0\r\n */\r\n TEXT_SET1: ' !\"#$%&\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~',\r\n\r\n /**\r\n * Text Set 2 = !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n * \r\n * @name Phaser.GameObjects.RetroFont.TEXT_SET2\r\n * @type {string}\r\n * @since 3.6.0\r\n */\r\n TEXT_SET2: ' !\"#$%&\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ',\r\n\r\n /**\r\n * Text Set 3 = ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 \r\n * \r\n * @name Phaser.GameObjects.RetroFont.TEXT_SET3\r\n * @type {string}\r\n * @since 3.6.0\r\n */\r\n TEXT_SET3: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ',\r\n\r\n /**\r\n * Text Set 4 = ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789\r\n * \r\n * @name Phaser.GameObjects.RetroFont.TEXT_SET4\r\n * @type {string}\r\n * @since 3.6.0\r\n */\r\n TEXT_SET4: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789',\r\n\r\n /**\r\n * Text Set 5 = ABCDEFGHIJKLMNOPQRSTUVWXYZ.,/() '!?-*:0123456789\r\n * \r\n * @name Phaser.GameObjects.RetroFont.TEXT_SET5\r\n * @type {string}\r\n * @since 3.6.0\r\n */\r\n TEXT_SET5: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ.,/() \\'!?-*:0123456789',\r\n\r\n /**\r\n * Text Set 6 = ABCDEFGHIJKLMNOPQRSTUVWXYZ!?:;0123456789\"(),-.' \r\n * \r\n * @name Phaser.GameObjects.RetroFont.TEXT_SET6\r\n * @type {string}\r\n * @since 3.6.0\r\n */\r\n TEXT_SET6: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ!?:;0123456789\"(),-.\\' ',\r\n\r\n /**\r\n * Text Set 7 = AGMSY+:4BHNTZ!;5CIOU.?06DJPV,(17EKQW\")28FLRX-'39\r\n * \r\n * @name Phaser.GameObjects.RetroFont.TEXT_SET7\r\n * @type {string}\r\n * @since 3.6.0\r\n */\r\n TEXT_SET7: 'AGMSY+:4BHNTZ!;5CIOU.?06DJPV,(17EKQW\")28FLRX-\\'39',\r\n\r\n /**\r\n * Text Set 8 = 0123456789 .ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n * \r\n * @name Phaser.GameObjects.RetroFont.TEXT_SET8\r\n * @type {string}\r\n * @since 3.6.0\r\n */\r\n TEXT_SET8: '0123456789 .ABCDEFGHIJKLMNOPQRSTUVWXYZ',\r\n\r\n /**\r\n * Text Set 9 = ABCDEFGHIJKLMNOPQRSTUVWXYZ()-0123456789.:,'\"?!\r\n * \r\n * @name Phaser.GameObjects.RetroFont.TEXT_SET9\r\n * @type {string}\r\n * @since 3.6.0\r\n */\r\n TEXT_SET9: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ()-0123456789.:,\\'\"?!',\r\n\r\n /**\r\n * Text Set 10 = ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n * \r\n * @name Phaser.GameObjects.RetroFont.TEXT_SET10\r\n * @type {string}\r\n * @since 3.6.0\r\n */\r\n TEXT_SET10: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',\r\n\r\n /**\r\n * Text Set 11 = ABCDEFGHIJKLMNOPQRSTUVWXYZ.,\"-+!?()':;0123456789\r\n * \r\n * @name Phaser.GameObjects.RetroFont.TEXT_SET11\r\n * @since 3.6.0\r\n * @type {string}\r\n */\r\n TEXT_SET11: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ.,\"-+!?()\\':;0123456789'\r\n\r\n};\r\n\r\nmodule.exports = RETRO_FONT_CONST;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L2NvbnN0LmpzPzI5MTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBOztBQUVBO0FBQ0EsaURBQWlELGlFQUFpRSxFQUFFO0FBQ3BIO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLDZDQUE2QyxpRUFBaUUsRUFBRTs7QUFFaEg7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsNkNBQTZDOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSw4Q0FBOEM7O0FBRTlDO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLCtCQUErQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyREFBMkQ7QUFDM0Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0Esd0RBQXdEOztBQUV4RDs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2JpdG1hcHRleHQvY29uc3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBSRVRST19GT05UX0NPTlNUID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGV4dCBTZXQgMSA9ICAhXFxcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5SZXRyb0ZvbnQuVEVYVF9TRVQxXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICogQHNpbmNlIDMuNi4wXHJcbiAgICAgKi9cclxuICAgIFRFWFRfU0VUMTogJyAhXCIjJCUmXFwnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+JyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRleHQgU2V0IDIgPSAgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJldHJvRm9udC5URVhUX1NFVDJcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKiBAc2luY2UgMy42LjBcclxuICAgICAqL1xyXG4gICAgVEVYVF9TRVQyOiAnICFcIiMkJSZcXCcoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGV4dCBTZXQgMyA9IEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OSBcclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJldHJvRm9udC5URVhUX1NFVDNcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKiBAc2luY2UgMy42LjBcclxuICAgICAqL1xyXG4gICAgVEVYVF9TRVQzOiAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5ICcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXh0IFNldCA0ID0gQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogMDEyMzQ1Njc4OVxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUmV0cm9Gb250LlRFWFRfU0VUNFxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqIEBzaW5jZSAzLjYuMFxyXG4gICAgICovXHJcbiAgICBURVhUX1NFVDQ6ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiAwMTIzNDU2Nzg5JyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRleHQgU2V0IDUgPSBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi4sLygpICchPy0qOjAxMjM0NTY3ODlcclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJldHJvRm9udC5URVhUX1NFVDVcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKiBAc2luY2UgMy42LjBcclxuICAgICAqL1xyXG4gICAgVEVYVF9TRVQ1OiAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVouLC8oKSBcXCchPy0qOjAxMjM0NTY3ODknLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGV4dCBTZXQgNiA9IEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIT86OzAxMjM0NTY3ODlcIigpLC0uJyBcclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJldHJvRm9udC5URVhUX1NFVDZcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKiBAc2luY2UgMy42LjBcclxuICAgICAqL1xyXG4gICAgVEVYVF9TRVQ2OiAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVohPzo7MDEyMzQ1Njc4OVwiKCksLS5cXCcgJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRleHQgU2V0IDcgPSBBR01TWSs6NEJITlRaITs1Q0lPVS4/MDZESlBWLCgxN0VLUVdcIikyOEZMUlgtJzM5XHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5SZXRyb0ZvbnQuVEVYVF9TRVQ3XHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICogQHNpbmNlIDMuNi4wXHJcbiAgICAgKi9cclxuICAgIFRFWFRfU0VUNzogJ0FHTVNZKzo0QkhOVFohOzVDSU9VLj8wNkRKUFYsKDE3RUtRV1wiKTI4RkxSWC1cXCczOScsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXh0IFNldCA4ID0gMDEyMzQ1Njc4OSAuQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJldHJvRm9udC5URVhUX1NFVDhcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKiBAc2luY2UgMy42LjBcclxuICAgICAqL1xyXG4gICAgVEVYVF9TRVQ4OiAnMDEyMzQ1Njc4OSAuQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGV4dCBTZXQgOSA9IEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaKCktMDEyMzQ1Njc4OS46LCdcIj8hXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5SZXRyb0ZvbnQuVEVYVF9TRVQ5XHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICogQHNpbmNlIDMuNi4wXHJcbiAgICAgKi9cclxuICAgIFRFWFRfU0VUOTogJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaKCktMDEyMzQ1Njc4OS46LFxcJ1wiPyEnLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGV4dCBTZXQgMTAgPSBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUmV0cm9Gb250LlRFWFRfU0VUMTBcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKiBAc2luY2UgMy42LjBcclxuICAgICAqL1xyXG4gICAgVEVYVF9TRVQxMDogJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRleHQgU2V0IDExID0gQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVouLFwiLSshPygpJzo7MDEyMzQ1Njc4OVxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUmV0cm9Gb250LlRFWFRfU0VUMTFcclxuICAgICAqIEBzaW5jZSAzLjYuMFxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgVEVYVF9TRVQxMTogJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLixcIi0rIT8oKVxcJzo7MDEyMzQ1Njc4OSdcclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJFVFJPX0ZPTlRfQ09OU1Q7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/const.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapText.js":
/*!*************************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapText.js ***!
\*************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BitmapText = __webpack_require__(/*! ../static/BitmapText */ \"./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapText.js\");\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Render = __webpack_require__(/*! ./DynamicBitmapTextRender */ \"./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextRender.js\");\r\n\r\n/**\r\n * @classdesc\r\n * BitmapText objects work by taking a texture file and an XML or JSON file that describes the font structure.\r\n * \r\n * During rendering for each letter of the text is rendered to the display, proportionally spaced out and aligned to\r\n * match the font structure.\r\n * \r\n * Dynamic Bitmap Text objects are different from Static Bitmap Text in that they invoke a callback for each\r\n * letter being rendered during the render pass. This callback allows you to manipulate the properties of\r\n * each letter being rendered, such as its position, scale or tint, allowing you to create interesting effects\r\n * like jiggling text, which can't be done with Static text. This means that Dynamic Text takes more processing\r\n * time, so only use them if you require the callback ability they have.\r\n *\r\n * BitmapText objects are less flexible than Text objects, in that they have less features such as shadows, fills and the ability\r\n * to use Web Fonts, however you trade this flexibility for rendering speed. You can also create visually compelling BitmapTexts by\r\n * processing the font texture in an image editor, applying fills and any other effects required.\r\n *\r\n * To create multi-line text insert \\r, \\n or \\r\\n escape codes into the text string.\r\n *\r\n * To create a BitmapText data files you need a 3rd party app such as:\r\n *\r\n * BMFont (Windows, free): http://www.angelcode.com/products/bmfont/\r\n * Glyph Designer (OS X, commercial): http://www.71squared.com/en/glyphdesigner\r\n * Littera (Web-based, free): http://kvazars.com/littera/\r\n *\r\n * For most use cases it is recommended to use XML. If you wish to use JSON, the formatting should be equal to the result of\r\n * converting a valid XML file through the popular X2JS library. An online tool for conversion can be found here: http://codebeautify.org/xmltojson\r\n *\r\n * @class DynamicBitmapText\r\n * @extends Phaser.GameObjects.BitmapText\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. It can only belong to one Scene at any given time.\r\n * @param {number} x - The x coordinate of this Game Object in world space.\r\n * @param {number} y - The y coordinate of this Game Object in world space.\r\n * @param {string} font - The key of the font to use from the Bitmap Font cache.\r\n * @param {(string|string[])} [text] - The string, or array of strings, to be set as the content of this Bitmap Text.\r\n * @param {number} [size] - The font size of this Bitmap Text.\r\n * @param {integer} [align=0] - The alignment of the text in a multi-line BitmapText object.\r\n */\r\nvar DynamicBitmapText = new Class({\r\n\r\n Extends: BitmapText,\r\n\r\n Mixins: [\r\n Render\r\n ],\r\n\r\n initialize:\r\n\r\n function DynamicBitmapText (scene, x, y, font, text, size, align)\r\n {\r\n BitmapText.call(this, scene, x, y, font, text, size, align);\r\n\r\n this.type = 'DynamicBitmapText';\r\n\r\n /**\r\n * The horizontal scroll position of the Bitmap Text.\r\n *\r\n * @name Phaser.GameObjects.DynamicBitmapText#scrollX\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.scrollX = 0;\r\n\r\n /**\r\n * The vertical scroll position of the Bitmap Text.\r\n *\r\n * @name Phaser.GameObjects.DynamicBitmapText#scrollY\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.scrollY = 0;\r\n\r\n /**\r\n * The crop width of the Bitmap Text.\r\n *\r\n * @name Phaser.GameObjects.DynamicBitmapText#cropWidth\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.cropWidth = 0;\r\n\r\n /**\r\n * The crop height of the Bitmap Text.\r\n *\r\n * @name Phaser.GameObjects.DynamicBitmapText#cropHeight\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.cropHeight = 0;\r\n\r\n /**\r\n * A callback that alters how each character of the Bitmap Text is rendered.\r\n *\r\n * @name Phaser.GameObjects.DynamicBitmapText#displayCallback\r\n * @type {Phaser.Types.GameObjects.BitmapText.DisplayCallback}\r\n * @since 3.0.0\r\n */\r\n this.displayCallback;\r\n\r\n /**\r\n * The data object that is populated during rendering, then passed to the displayCallback.\r\n * You should modify this object then return it back from the callback. It's updated values\r\n * will be used to render the specific glyph.\r\n * \r\n * Please note that if you need a reference to this object locally in your game code then you\r\n * should shallow copy it, as it's updated and re-used for every glyph in the text.\r\n *\r\n * @name Phaser.GameObjects.DynamicBitmapText#callbackData\r\n * @type {Phaser.Types.GameObjects.BitmapText.DisplayCallbackConfig}\r\n * @since 3.11.0\r\n */\r\n this.callbackData = {\r\n parent: this,\r\n color: 0,\r\n tint: {\r\n topLeft: 0,\r\n topRight: 0,\r\n bottomLeft: 0,\r\n bottomRight: 0\r\n },\r\n index: 0,\r\n charCode: 0,\r\n x: 0,\r\n y: 0,\r\n scale: 0,\r\n rotation: 0,\r\n data: 0\r\n };\r\n },\r\n\r\n /**\r\n * Set the crop size of this Bitmap Text.\r\n *\r\n * @method Phaser.GameObjects.DynamicBitmapText#setSize\r\n * @since 3.0.0\r\n *\r\n * @param {number} width - The width of the crop.\r\n * @param {number} height - The height of the crop.\r\n *\r\n * @return {Phaser.GameObjects.DynamicBitmapText} This Game Object.\r\n */\r\n setSize: function (width, height)\r\n {\r\n this.cropWidth = width;\r\n this.cropHeight = height;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set a callback that alters how each character of the Bitmap Text is rendered.\r\n *\r\n * The callback receives a {@link Phaser.Types.GameObjects.BitmapText.DisplayCallbackConfig} object that contains information about the character that's\r\n * about to be rendered.\r\n *\r\n * It should return an object with `x`, `y`, `scale` and `rotation` properties that will be used instead of the\r\n * usual values when rendering.\r\n *\r\n * @method Phaser.GameObjects.DynamicBitmapText#setDisplayCallback\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.BitmapText.DisplayCallback} callback - The display callback to set.\r\n *\r\n * @return {Phaser.GameObjects.DynamicBitmapText} This Game Object.\r\n */\r\n setDisplayCallback: function (callback)\r\n {\r\n this.displayCallback = callback;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the horizontal scroll position of this Bitmap Text.\r\n *\r\n * @method Phaser.GameObjects.DynamicBitmapText#setScrollX\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The horizontal scroll position to set.\r\n *\r\n * @return {Phaser.GameObjects.DynamicBitmapText} This Game Object.\r\n */\r\n setScrollX: function (value)\r\n {\r\n this.scrollX = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the vertical scroll position of this Bitmap Text.\r\n *\r\n * @method Phaser.GameObjects.DynamicBitmapText#setScrollY\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The vertical scroll position to set.\r\n *\r\n * @return {Phaser.GameObjects.DynamicBitmapText} This Game Object.\r\n */\r\n setScrollY: function (value)\r\n {\r\n this.scrollY = value;\r\n\r\n return this;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = DynamicBitmapText;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L2R5bmFtaWMvRHluYW1pY0JpdG1hcFRleHQuanM/MTc3OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsbUdBQXNCO0FBQy9DLFlBQVksbUJBQU8sQ0FBQyxzRUFBc0I7QUFDMUMsYUFBYSxtQkFBTyxDQUFDLHNIQUEyQjs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHFDQUFxQztBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsZ0VBQWdFO0FBQ2hHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9EQUFvRDtBQUNuRTtBQUNBLGdCQUFnQixxQ0FBcUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixxQ0FBcUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixxQ0FBcUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvYml0bWFwdGV4dC9keW5hbWljL0R5bmFtaWNCaXRtYXBUZXh0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQml0bWFwVGV4dCA9IHJlcXVpcmUoJy4uL3N0YXRpYy9CaXRtYXBUZXh0Jyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBSZW5kZXIgPSByZXF1aXJlKCcuL0R5bmFtaWNCaXRtYXBUZXh0UmVuZGVyJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBCaXRtYXBUZXh0IG9iamVjdHMgd29yayBieSB0YWtpbmcgYSB0ZXh0dXJlIGZpbGUgYW5kIGFuIFhNTCBvciBKU09OIGZpbGUgdGhhdCBkZXNjcmliZXMgdGhlIGZvbnQgc3RydWN0dXJlLlxyXG4gKiBcclxuICogRHVyaW5nIHJlbmRlcmluZyBmb3IgZWFjaCBsZXR0ZXIgb2YgdGhlIHRleHQgaXMgcmVuZGVyZWQgdG8gdGhlIGRpc3BsYXksIHByb3BvcnRpb25hbGx5IHNwYWNlZCBvdXQgYW5kIGFsaWduZWQgdG9cclxuICogbWF0Y2ggdGhlIGZvbnQgc3RydWN0dXJlLlxyXG4gKiBcclxuICogRHluYW1pYyBCaXRtYXAgVGV4dCBvYmplY3RzIGFyZSBkaWZmZXJlbnQgZnJvbSBTdGF0aWMgQml0bWFwIFRleHQgaW4gdGhhdCB0aGV5IGludm9rZSBhIGNhbGxiYWNrIGZvciBlYWNoXHJcbiAqIGxldHRlciBiZWluZyByZW5kZXJlZCBkdXJpbmcgdGhlIHJlbmRlciBwYXNzLiBUaGlzIGNhbGxiYWNrIGFsbG93cyB5b3UgdG8gbWFuaXB1bGF0ZSB0aGUgcHJvcGVydGllcyBvZlxyXG4gKiBlYWNoIGxldHRlciBiZWluZyByZW5kZXJlZCwgc3VjaCBhcyBpdHMgcG9zaXRpb24sIHNjYWxlIG9yIHRpbnQsIGFsbG93aW5nIHlvdSB0byBjcmVhdGUgaW50ZXJlc3RpbmcgZWZmZWN0c1xyXG4gKiBsaWtlIGppZ2dsaW5nIHRleHQsIHdoaWNoIGNhbid0IGJlIGRvbmUgd2l0aCBTdGF0aWMgdGV4dC4gVGhpcyBtZWFucyB0aGF0IER5bmFtaWMgVGV4dCB0YWtlcyBtb3JlIHByb2Nlc3NpbmdcclxuICogdGltZSwgc28gb25seSB1c2UgdGhlbSBpZiB5b3UgcmVxdWlyZSB0aGUgY2FsbGJhY2sgYWJpbGl0eSB0aGV5IGhhdmUuXHJcbiAqXHJcbiAqIEJpdG1hcFRleHQgb2JqZWN0cyBhcmUgbGVzcyBmbGV4aWJsZSB0aGFuIFRleHQgb2JqZWN0cywgaW4gdGhhdCB0aGV5IGhhdmUgbGVzcyBmZWF0dXJlcyBzdWNoIGFzIHNoYWRvd3MsIGZpbGxzIGFuZCB0aGUgYWJpbGl0eVxyXG4gKiB0byB1c2UgV2ViIEZvbnRzLCBob3dldmVyIHlvdSB0cmFkZSB0aGlzIGZsZXhpYmlsaXR5IGZvciByZW5kZXJpbmcgc3BlZWQuIFlvdSBjYW4gYWxzbyBjcmVhdGUgdmlzdWFsbHkgY29tcGVsbGluZyBCaXRtYXBUZXh0cyBieVxyXG4gKiBwcm9jZXNzaW5nIHRoZSBmb250IHRleHR1cmUgaW4gYW4gaW1hZ2UgZWRpdG9yLCBhcHBseWluZyBmaWxscyBhbmQgYW55IG90aGVyIGVmZmVjdHMgcmVxdWlyZWQuXHJcbiAqXHJcbiAqIFRvIGNyZWF0ZSBtdWx0aS1saW5lIHRleHQgaW5zZXJ0IFxcciwgXFxuIG9yIFxcclxcbiBlc2NhcGUgY29kZXMgaW50byB0aGUgdGV4dCBzdHJpbmcuXHJcbiAqXHJcbiAqIFRvIGNyZWF0ZSBhIEJpdG1hcFRleHQgZGF0YSBmaWxlcyB5b3UgbmVlZCBhIDNyZCBwYXJ0eSBhcHAgc3VjaCBhczpcclxuICpcclxuICogQk1Gb250IChXaW5kb3dzLCBmcmVlKTogaHR0cDovL3d3dy5hbmdlbGNvZGUuY29tL3Byb2R1Y3RzL2JtZm9udC9cclxuICogR2x5cGggRGVzaWduZXIgKE9TIFgsIGNvbW1lcmNpYWwpOiBodHRwOi8vd3d3Ljcxc3F1YXJlZC5jb20vZW4vZ2x5cGhkZXNpZ25lclxyXG4gKiBMaXR0ZXJhIChXZWItYmFzZWQsIGZyZWUpOiBodHRwOi8va3ZhemFycy5jb20vbGl0dGVyYS9cclxuICpcclxuICogRm9yIG1vc3QgdXNlIGNhc2VzIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBYTUwuIElmIHlvdSB3aXNoIHRvIHVzZSBKU09OLCB0aGUgZm9ybWF0dGluZyBzaG91bGQgYmUgZXF1YWwgdG8gdGhlIHJlc3VsdCBvZlxyXG4gKiBjb252ZXJ0aW5nIGEgdmFsaWQgWE1MIGZpbGUgdGhyb3VnaCB0aGUgcG9wdWxhciBYMkpTIGxpYnJhcnkuIEFuIG9ubGluZSB0b29sIGZvciBjb252ZXJzaW9uIGNhbiBiZSBmb3VuZCBoZXJlOiBodHRwOi8vY29kZWJlYXV0aWZ5Lm9yZy94bWx0b2pzb25cclxuICpcclxuICogQGNsYXNzIER5bmFtaWNCaXRtYXBUZXh0XHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBHYW1lIE9iamVjdCBiZWxvbmdzLiBJdCBjYW4gb25seSBiZWxvbmcgdG8gb25lIFNjZW5lIGF0IGFueSBnaXZlbiB0aW1lLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB3b3JsZCBzcGFjZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gd29ybGQgc3BhY2UuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb250IC0gVGhlIGtleSBvZiB0aGUgZm9udCB0byB1c2UgZnJvbSB0aGUgQml0bWFwIEZvbnQgY2FjaGUuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xzdHJpbmdbXSl9IFt0ZXh0XSAtIFRoZSBzdHJpbmcsIG9yIGFycmF5IG9mIHN0cmluZ3MsIHRvIGJlIHNldCBhcyB0aGUgY29udGVudCBvZiB0aGlzIEJpdG1hcCBUZXh0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3NpemVdIC0gVGhlIGZvbnQgc2l6ZSBvZiB0aGlzIEJpdG1hcCBUZXh0LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFthbGlnbj0wXSAtIFRoZSBhbGlnbm1lbnQgb2YgdGhlIHRleHQgaW4gYSBtdWx0aS1saW5lIEJpdG1hcFRleHQgb2JqZWN0LlxyXG4gKi9cclxudmFyIER5bmFtaWNCaXRtYXBUZXh0ID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBCaXRtYXBUZXh0LFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIFJlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIER5bmFtaWNCaXRtYXBUZXh0IChzY2VuZSwgeCwgeSwgZm9udCwgdGV4dCwgc2l6ZSwgYWxpZ24pXHJcbiAgICB7XHJcbiAgICAgICAgQml0bWFwVGV4dC5jYWxsKHRoaXMsIHNjZW5lLCB4LCB5LCBmb250LCB0ZXh0LCBzaXplLCBhbGlnbik7XHJcblxyXG4gICAgICAgIHRoaXMudHlwZSA9ICdEeW5hbWljQml0bWFwVGV4dCc7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBob3Jpem9udGFsIHNjcm9sbCBwb3NpdGlvbiBvZiB0aGUgQml0bWFwIFRleHQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuRHluYW1pY0JpdG1hcFRleHQjc2Nyb2xsWFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsWCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB2ZXJ0aWNhbCBzY3JvbGwgcG9zaXRpb24gb2YgdGhlIEJpdG1hcCBUZXh0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkR5bmFtaWNCaXRtYXBUZXh0I3Njcm9sbFlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjcm9sbFkgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY3JvcCB3aWR0aCBvZiB0aGUgQml0bWFwIFRleHQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuRHluYW1pY0JpdG1hcFRleHQjY3JvcFdpZHRoXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jcm9wV2lkdGggPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY3JvcCBoZWlnaHQgb2YgdGhlIEJpdG1hcCBUZXh0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkR5bmFtaWNCaXRtYXBUZXh0I2Nyb3BIZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNyb3BIZWlnaHQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgYWx0ZXJzIGhvdyBlYWNoIGNoYXJhY3RlciBvZiB0aGUgQml0bWFwIFRleHQgaXMgcmVuZGVyZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuRHluYW1pY0JpdG1hcFRleHQjZGlzcGxheUNhbGxiYWNrXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0LkRpc3BsYXlDYWxsYmFja31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRpc3BsYXlDYWxsYmFjaztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRhdGEgb2JqZWN0IHRoYXQgaXMgcG9wdWxhdGVkIGR1cmluZyByZW5kZXJpbmcsIHRoZW4gcGFzc2VkIHRvIHRoZSBkaXNwbGF5Q2FsbGJhY2suXHJcbiAgICAgICAgICogWW91IHNob3VsZCBtb2RpZnkgdGhpcyBvYmplY3QgdGhlbiByZXR1cm4gaXQgYmFjayBmcm9tIHRoZSBjYWxsYmFjay4gSXQncyB1cGRhdGVkIHZhbHVlc1xyXG4gICAgICAgICAqIHdpbGwgYmUgdXNlZCB0byByZW5kZXIgdGhlIHNwZWNpZmljIGdseXBoLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFBsZWFzZSBub3RlIHRoYXQgaWYgeW91IG5lZWQgYSByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgbG9jYWxseSBpbiB5b3VyIGdhbWUgY29kZSB0aGVuIHlvdVxyXG4gICAgICAgICAqIHNob3VsZCBzaGFsbG93IGNvcHkgaXQsIGFzIGl0J3MgdXBkYXRlZCBhbmQgcmUtdXNlZCBmb3IgZXZlcnkgZ2x5cGggaW4gdGhlIHRleHQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuRHluYW1pY0JpdG1hcFRleHQjY2FsbGJhY2tEYXRhXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0LkRpc3BsYXlDYWxsYmFja0NvbmZpZ31cclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYWxsYmFja0RhdGEgPSB7XHJcbiAgICAgICAgICAgIHBhcmVudDogdGhpcyxcclxuICAgICAgICAgICAgY29sb3I6IDAsXHJcbiAgICAgICAgICAgIHRpbnQ6IHtcclxuICAgICAgICAgICAgICAgIHRvcExlZnQ6IDAsXHJcbiAgICAgICAgICAgICAgICB0b3BSaWdodDogMCxcclxuICAgICAgICAgICAgICAgIGJvdHRvbUxlZnQ6IDAsXHJcbiAgICAgICAgICAgICAgICBib3R0b21SaWdodDogMFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBpbmRleDogMCxcclxuICAgICAgICAgICAgY2hhckNvZGU6IDAsXHJcbiAgICAgICAgICAgIHg6IDAsXHJcbiAgICAgICAgICAgIHk6IDAsXHJcbiAgICAgICAgICAgIHNjYWxlOiAwLFxyXG4gICAgICAgICAgICByb3RhdGlvbjogMCxcclxuICAgICAgICAgICAgZGF0YTogMFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBjcm9wIHNpemUgb2YgdGhpcyBCaXRtYXAgVGV4dC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5EeW5hbWljQml0bWFwVGV4dCNzZXRTaXplXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIGNyb3AuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgY3JvcC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuRHluYW1pY0JpdG1hcFRleHR9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFNpemU6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuY3JvcFdpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGhpcy5jcm9wSGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYSBjYWxsYmFjayB0aGF0IGFsdGVycyBob3cgZWFjaCBjaGFyYWN0ZXIgb2YgdGhlIEJpdG1hcCBUZXh0IGlzIHJlbmRlcmVkLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBjYWxsYmFjayByZWNlaXZlcyBhIHtAbGluayBQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuQml0bWFwVGV4dC5EaXNwbGF5Q2FsbGJhY2tDb25maWd9IG9iamVjdCB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjaGFyYWN0ZXIgdGhhdCdzXHJcbiAgICAgKiBhYm91dCB0byBiZSByZW5kZXJlZC5cclxuICAgICAqXHJcbiAgICAgKiBJdCBzaG91bGQgcmV0dXJuIGFuIG9iamVjdCB3aXRoIGB4YCwgYHlgLCBgc2NhbGVgIGFuZCBgcm90YXRpb25gIHByb3BlcnRpZXMgdGhhdCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGVcclxuICAgICAqIHVzdWFsIHZhbHVlcyB3aGVuIHJlbmRlcmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5EeW5hbWljQml0bWFwVGV4dCNzZXREaXNwbGF5Q2FsbGJhY2tcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkJpdG1hcFRleHQuRGlzcGxheUNhbGxiYWNrfSBjYWxsYmFjayAtIFRoZSBkaXNwbGF5IGNhbGxiYWNrIHRvIHNldC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuRHluYW1pY0JpdG1hcFRleHR9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldERpc3BsYXlDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUNhbGxiYWNrID0gY2FsbGJhY2s7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgaG9yaXpvbnRhbCBzY3JvbGwgcG9zaXRpb24gb2YgdGhpcyBCaXRtYXAgVGV4dC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5EeW5hbWljQml0bWFwVGV4dCNzZXRTY3JvbGxYXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgaG9yaXpvbnRhbCBzY3JvbGwgcG9zaXRpb24gdG8gc2V0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5EeW5hbWljQml0bWFwVGV4dH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U2Nyb2xsWDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsWCA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHZlcnRpY2FsIHNjcm9sbCBwb3NpdGlvbiBvZiB0aGlzIEJpdG1hcCBUZXh0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkR5bmFtaWNCaXRtYXBUZXh0I3NldFNjcm9sbFlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSB2ZXJ0aWNhbCBzY3JvbGwgcG9zaXRpb24gdG8gc2V0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5EeW5hbWljQml0bWFwVGV4dH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U2Nyb2xsWTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsWSA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBEeW5hbWljQml0bWFwVGV4dDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapText.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextCanvasRenderer.js":
/*!***************************************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextCanvasRenderer.js ***!
\***************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.DynamicBitmapText#renderCanvas\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.DynamicBitmapText} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar DynamicBitmapTextCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var text = src._text;\r\n var textLength = text.length;\r\n\r\n var ctx = renderer.currentContext;\r\n\r\n if (textLength === 0 || !SetTransform(renderer, ctx, src, camera, parentMatrix))\r\n {\r\n return;\r\n }\r\n \r\n var textureFrame = src.frame;\r\n\r\n var displayCallback = src.displayCallback;\r\n var callbackData = src.callbackData;\r\n\r\n var chars = src.fontData.chars;\r\n var lineHeight = src.fontData.lineHeight;\r\n var letterSpacing = src._letterSpacing;\r\n\r\n var xAdvance = 0;\r\n var yAdvance = 0;\r\n\r\n var charCode = 0;\r\n\r\n var glyph = null;\r\n var glyphX = 0;\r\n var glyphY = 0;\r\n var glyphW = 0;\r\n var glyphH = 0;\r\n\r\n var x = 0;\r\n var y = 0;\r\n\r\n var lastGlyph = null;\r\n var lastCharCode = 0;\r\n\r\n var image = src.frame.source.image;\r\n\r\n var textureX = textureFrame.cutX;\r\n var textureY = textureFrame.cutY;\r\n\r\n var rotation = 0;\r\n var scale = 0;\r\n var baseScale = (src._fontSize / src.fontData.size);\r\n\r\n var align = src._align;\r\n var currentLine = 0;\r\n var lineOffsetX = 0;\r\n\r\n // Update the bounds - skipped internally if not dirty\r\n src.getTextBounds(false);\r\n\r\n var lineData = src._bounds.lines;\r\n\r\n if (align === 1)\r\n {\r\n lineOffsetX = (lineData.longest - lineData.lengths[0]) / 2;\r\n }\r\n else if (align === 2)\r\n {\r\n lineOffsetX = (lineData.longest - lineData.lengths[0]);\r\n }\r\n\r\n ctx.translate(-src.displayOriginX, -src.displayOriginY);\r\n\r\n var roundPixels = camera.roundPixels;\r\n\r\n if (src.cropWidth > 0 && src.cropHeight > 0)\r\n {\r\n ctx.beginPath();\r\n ctx.rect(0, 0, src.cropWidth, src.cropHeight);\r\n ctx.clip();\r\n }\r\n\r\n for (var i = 0; i < textLength; i++)\r\n {\r\n // Reset the scale (in case the callback changed it)\r\n scale = baseScale;\r\n rotation = 0;\r\n\r\n charCode = text.charCodeAt(i);\r\n\r\n if (charCode === 10)\r\n {\r\n currentLine++;\r\n\r\n if (align === 1)\r\n {\r\n lineOffsetX = (lineData.longest - lineData.lengths[currentLine]) / 2;\r\n }\r\n else if (align === 2)\r\n {\r\n lineOffsetX = (lineData.longest - lineData.lengths[currentLine]);\r\n }\r\n\r\n xAdvance = 0;\r\n yAdvance += lineHeight;\r\n lastGlyph = null;\r\n\r\n continue;\r\n }\r\n\r\n glyph = chars[charCode];\r\n\r\n if (!glyph)\r\n {\r\n continue;\r\n }\r\n\r\n glyphX = textureX + glyph.x;\r\n glyphY = textureY + glyph.y;\r\n\r\n glyphW = glyph.width;\r\n glyphH = glyph.height;\r\n\r\n x = (glyph.xOffset + xAdvance) - src.scrollX;\r\n y = (glyph.yOffset + yAdvance) - src.scrollY;\r\n\r\n if (lastGlyph !== null)\r\n {\r\n var kerningOffset = glyph.kerning[lastCharCode];\r\n x += (kerningOffset !== undefined) ? kerningOffset : 0;\r\n }\r\n\r\n if (displayCallback)\r\n {\r\n callbackData.index = i;\r\n callbackData.charCode = charCode;\r\n callbackData.x = x;\r\n callbackData.y = y;\r\n callbackData.scale = scale;\r\n callbackData.rotation = rotation;\r\n callbackData.data = glyph.data;\r\n\r\n var output = displayCallback(callbackData);\r\n\r\n x = output.x;\r\n y = output.y;\r\n scale = output.scale;\r\n rotation = output.rotation;\r\n }\r\n\r\n x *= scale;\r\n y *= scale;\r\n\r\n x += lineOffsetX;\r\n\r\n xAdvance += glyph.xAdvance + letterSpacing;\r\n lastGlyph = glyph;\r\n lastCharCode = charCode;\r\n\r\n // Nothing to render or a space? Then skip to the next glyph\r\n if (glyphW === 0 || glyphH === 0 || charCode === 32)\r\n {\r\n continue;\r\n }\r\n\r\n if (roundPixels)\r\n {\r\n x = Math.round(x);\r\n y = Math.round(y);\r\n }\r\n\r\n ctx.save();\r\n\r\n ctx.translate(x, y);\r\n\r\n ctx.rotate(rotation);\r\n\r\n ctx.scale(scale, scale);\r\n\r\n ctx.drawImage(image, glyphX, glyphY, glyphW, glyphH, 0, 0, glyphW, glyphH);\r\n\r\n ctx.restore();\r\n }\r\n\r\n ctx.restore();\r\n};\r\n\r\nmodule.exports = DynamicBitmapTextCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L2R5bmFtaWMvRHluYW1pY0JpdG1hcFRleHRDYW52YXNSZW5kZXJlci5qcz80YWQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxtQkFBbUIsbUJBQU8sQ0FBQyxvSEFBNkM7O0FBRXhFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcscUNBQXFDO0FBQ2hELFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGdCQUFnQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L2R5bmFtaWMvRHluYW1pY0JpdG1hcFRleHRDYW52YXNSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFNldFRyYW5zZm9ybSA9IHJlcXVpcmUoJy4uLy4uLy4uL3JlbmRlcmVyL2NhbnZhcy91dGlscy9TZXRUcmFuc2Zvcm0nKTtcclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgQ2FudmFzIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRHluYW1pY0JpdG1hcFRleHQjcmVuZGVyQ2FudmFzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIENhbnZhcyByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuRHluYW1pY0JpdG1hcFRleHR9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBEeW5hbWljQml0bWFwVGV4dENhbnZhc1JlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgdmFyIHRleHQgPSBzcmMuX3RleHQ7XHJcbiAgICB2YXIgdGV4dExlbmd0aCA9IHRleHQubGVuZ3RoO1xyXG5cclxuICAgIHZhciBjdHggPSByZW5kZXJlci5jdXJyZW50Q29udGV4dDtcclxuXHJcbiAgICBpZiAodGV4dExlbmd0aCA9PT0gMCB8fCAhU2V0VHJhbnNmb3JtKHJlbmRlcmVyLCBjdHgsIHNyYywgY2FtZXJhLCBwYXJlbnRNYXRyaXgpKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdmFyIHRleHR1cmVGcmFtZSA9IHNyYy5mcmFtZTtcclxuXHJcbiAgICB2YXIgZGlzcGxheUNhbGxiYWNrID0gc3JjLmRpc3BsYXlDYWxsYmFjaztcclxuICAgIHZhciBjYWxsYmFja0RhdGEgPSBzcmMuY2FsbGJhY2tEYXRhO1xyXG5cclxuICAgIHZhciBjaGFycyA9IHNyYy5mb250RGF0YS5jaGFycztcclxuICAgIHZhciBsaW5lSGVpZ2h0ID0gc3JjLmZvbnREYXRhLmxpbmVIZWlnaHQ7XHJcbiAgICB2YXIgbGV0dGVyU3BhY2luZyA9IHNyYy5fbGV0dGVyU3BhY2luZztcclxuXHJcbiAgICB2YXIgeEFkdmFuY2UgPSAwO1xyXG4gICAgdmFyIHlBZHZhbmNlID0gMDtcclxuXHJcbiAgICB2YXIgY2hhckNvZGUgPSAwO1xyXG5cclxuICAgIHZhciBnbHlwaCA9IG51bGw7XHJcbiAgICB2YXIgZ2x5cGhYID0gMDtcclxuICAgIHZhciBnbHlwaFkgPSAwO1xyXG4gICAgdmFyIGdseXBoVyA9IDA7XHJcbiAgICB2YXIgZ2x5cGhIID0gMDtcclxuXHJcbiAgICB2YXIgeCA9IDA7XHJcbiAgICB2YXIgeSA9IDA7XHJcblxyXG4gICAgdmFyIGxhc3RHbHlwaCA9IG51bGw7XHJcbiAgICB2YXIgbGFzdENoYXJDb2RlID0gMDtcclxuXHJcbiAgICB2YXIgaW1hZ2UgPSBzcmMuZnJhbWUuc291cmNlLmltYWdlO1xyXG5cclxuICAgIHZhciB0ZXh0dXJlWCA9IHRleHR1cmVGcmFtZS5jdXRYO1xyXG4gICAgdmFyIHRleHR1cmVZID0gdGV4dHVyZUZyYW1lLmN1dFk7XHJcblxyXG4gICAgdmFyIHJvdGF0aW9uID0gMDtcclxuICAgIHZhciBzY2FsZSA9IDA7XHJcbiAgICB2YXIgYmFzZVNjYWxlID0gKHNyYy5fZm9udFNpemUgLyBzcmMuZm9udERhdGEuc2l6ZSk7XHJcblxyXG4gICAgdmFyIGFsaWduID0gc3JjLl9hbGlnbjtcclxuICAgIHZhciBjdXJyZW50TGluZSA9IDA7XHJcbiAgICB2YXIgbGluZU9mZnNldFggPSAwO1xyXG5cclxuICAgIC8vICBVcGRhdGUgdGhlIGJvdW5kcyAtIHNraXBwZWQgaW50ZXJuYWxseSBpZiBub3QgZGlydHlcclxuICAgIHNyYy5nZXRUZXh0Qm91bmRzKGZhbHNlKTtcclxuXHJcbiAgICB2YXIgbGluZURhdGEgPSBzcmMuX2JvdW5kcy5saW5lcztcclxuXHJcbiAgICBpZiAoYWxpZ24gPT09IDEpXHJcbiAgICB7XHJcbiAgICAgICAgbGluZU9mZnNldFggPSAobGluZURhdGEubG9uZ2VzdCAtIGxpbmVEYXRhLmxlbmd0aHNbMF0pIC8gMjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGFsaWduID09PSAyKVxyXG4gICAge1xyXG4gICAgICAgIGxpbmVPZmZzZXRYID0gKGxpbmVEYXRhLmxvbmdlc3QgLSBsaW5lRGF0YS5sZW5ndGhzWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBjdHgudHJhbnNsYXRlKC1zcmMuZGlzcGxheU9yaWdpblgsIC1zcmMuZGlzcGxheU9yaWdpblkpO1xyXG5cclxuICAgIHZhciByb3VuZFBpeGVscyA9IGNhbWVyYS5yb3VuZFBpeGVscztcclxuXHJcbiAgICBpZiAoc3JjLmNyb3BXaWR0aCA+IDAgJiYgc3JjLmNyb3BIZWlnaHQgPiAwKVxyXG4gICAge1xyXG4gICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuICAgICAgICBjdHgucmVjdCgwLCAwLCBzcmMuY3JvcFdpZHRoLCBzcmMuY3JvcEhlaWdodCk7XHJcbiAgICAgICAgY3R4LmNsaXAoKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHRMZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICAvLyAgUmVzZXQgdGhlIHNjYWxlIChpbiBjYXNlIHRoZSBjYWxsYmFjayBjaGFuZ2VkIGl0KVxyXG4gICAgICAgIHNjYWxlID0gYmFzZVNjYWxlO1xyXG4gICAgICAgIHJvdGF0aW9uID0gMDtcclxuXHJcbiAgICAgICAgY2hhckNvZGUgPSB0ZXh0LmNoYXJDb2RlQXQoaSk7XHJcblxyXG4gICAgICAgIGlmIChjaGFyQ29kZSA9PT0gMTApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjdXJyZW50TGluZSsrO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFsaWduID09PSAxKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsaW5lT2Zmc2V0WCA9IChsaW5lRGF0YS5sb25nZXN0IC0gbGluZURhdGEubGVuZ3Roc1tjdXJyZW50TGluZV0pIC8gMjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChhbGlnbiA9PT0gMilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGluZU9mZnNldFggPSAobGluZURhdGEubG9uZ2VzdCAtIGxpbmVEYXRhLmxlbmd0aHNbY3VycmVudExpbmVdKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgeEFkdmFuY2UgPSAwO1xyXG4gICAgICAgICAgICB5QWR2YW5jZSArPSBsaW5lSGVpZ2h0O1xyXG4gICAgICAgICAgICBsYXN0R2x5cGggPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnbHlwaCA9IGNoYXJzW2NoYXJDb2RlXTtcclxuXHJcbiAgICAgICAgaWYgKCFnbHlwaClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2x5cGhYID0gdGV4dHVyZVggKyBnbHlwaC54O1xyXG4gICAgICAgIGdseXBoWSA9IHRleHR1cmVZICsgZ2x5cGgueTtcclxuXHJcbiAgICAgICAgZ2x5cGhXID0gZ2x5cGgud2lkdGg7XHJcbiAgICAgICAgZ2x5cGhIID0gZ2x5cGguaGVpZ2h0O1xyXG5cclxuICAgICAgICB4ID0gKGdseXBoLnhPZmZzZXQgKyB4QWR2YW5jZSkgLSBzcmMuc2Nyb2xsWDtcclxuICAgICAgICB5ID0gKGdseXBoLnlPZmZzZXQgKyB5QWR2YW5jZSkgLSBzcmMuc2Nyb2xsWTtcclxuXHJcbiAgICAgICAgaWYgKGxhc3RHbHlwaCAhPT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBrZXJuaW5nT2Zmc2V0ID0gZ2x5cGgua2VybmluZ1tsYXN0Q2hhckNvZGVdO1xyXG4gICAgICAgICAgICB4ICs9IChrZXJuaW5nT2Zmc2V0ICE9PSB1bmRlZmluZWQpID8ga2VybmluZ09mZnNldCA6IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGlzcGxheUNhbGxiYWNrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2FsbGJhY2tEYXRhLmluZGV4ID0gaTtcclxuICAgICAgICAgICAgY2FsbGJhY2tEYXRhLmNoYXJDb2RlID0gY2hhckNvZGU7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrRGF0YS54ID0geDtcclxuICAgICAgICAgICAgY2FsbGJhY2tEYXRhLnkgPSB5O1xyXG4gICAgICAgICAgICBjYWxsYmFja0RhdGEuc2NhbGUgPSBzY2FsZTtcclxuICAgICAgICAgICAgY2FsbGJhY2tEYXRhLnJvdGF0aW9uID0gcm90YXRpb247XHJcbiAgICAgICAgICAgIGNhbGxiYWNrRGF0YS5kYXRhID0gZ2x5cGguZGF0YTtcclxuXHJcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSBkaXNwbGF5Q2FsbGJhY2soY2FsbGJhY2tEYXRhKTtcclxuXHJcbiAgICAgICAgICAgIHggPSBvdXRwdXQueDtcclxuICAgICAgICAgICAgeSA9IG91dHB1dC55O1xyXG4gICAgICAgICAgICBzY2FsZSA9IG91dHB1dC5zY2FsZTtcclxuICAgICAgICAgICAgcm90YXRpb24gPSBvdXRwdXQucm90YXRpb247XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB4ICo9IHNjYWxlO1xyXG4gICAgICAgIHkgKj0gc2NhbGU7XHJcblxyXG4gICAgICAgIHggKz0gbGluZU9mZnNldFg7XHJcblxyXG4gICAgICAgIHhBZHZhbmNlICs9IGdseXBoLnhBZHZhbmNlICsgbGV0dGVyU3BhY2luZztcclxuICAgICAgICBsYXN0R2x5cGggPSBnbHlwaDtcclxuICAgICAgICBsYXN0Q2hhckNvZGUgPSBjaGFyQ29kZTtcclxuXHJcbiAgICAgICAgLy8gIE5vdGhpbmcgdG8gcmVuZGVyIG9yIGEgc3BhY2U/IFRoZW4gc2tpcCB0byB0aGUgbmV4dCBnbHlwaFxyXG4gICAgICAgIGlmIChnbHlwaFcgPT09IDAgfHwgZ2x5cGhIID09PSAwIHx8IGNoYXJDb2RlID09PSAzMilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJvdW5kUGl4ZWxzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgeCA9IE1hdGgucm91bmQoeCk7XHJcbiAgICAgICAgICAgIHkgPSBNYXRoLnJvdW5kKHkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY3R4LnNhdmUoKTtcclxuXHJcbiAgICAgICAgY3R4LnRyYW5zbGF0ZSh4LCB5KTtcclxuXHJcbiAgICAgICAgY3R4LnJvdGF0ZShyb3RhdGlvbik7XHJcblxyXG4gICAgICAgIGN0eC5zY2FsZShzY2FsZSwgc2NhbGUpO1xyXG5cclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCBnbHlwaFgsIGdseXBoWSwgZ2x5cGhXLCBnbHlwaEgsIDAsIDAsIGdseXBoVywgZ2x5cGhIKTtcclxuXHJcbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBjdHgucmVzdG9yZSgpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBEeW5hbWljQml0bWFwVGV4dENhbnZhc1JlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextCreator.js":
/*!********************************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextCreator.js ***!
\********************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BitmapText = __webpack_require__(/*! ./DynamicBitmapText */ \"./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapText.js\");\r\nvar BuildGameObject = __webpack_require__(/*! ../../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\n\r\n/**\r\n * Creates a new Dynamic Bitmap Text Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Dynamic Bitmap Text Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#dynamicBitmapText\r\n * @since 3.0.0\r\n *²\r\n * @param {Phaser.Types.GameObjects.BitmapText.BitmapTextConfig} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.DynamicBitmapText} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('dynamicBitmapText', function (config, addToScene)\r\n{\r\n if (config === undefined) { config = {}; }\r\n\r\n var font = GetAdvancedValue(config, 'font', '');\r\n var text = GetAdvancedValue(config, 'text', '');\r\n var size = GetAdvancedValue(config, 'size', false);\r\n\r\n var bitmapText = new BitmapText(this.scene, 0, 0, font, text, size);\r\n\r\n if (addToScene !== undefined)\r\n {\r\n config.add = addToScene;\r\n }\r\n\r\n BuildGameObject(this.scene, bitmapText, config);\r\n\r\n return bitmapText;\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectCreator context.\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L2R5bmFtaWMvRHluYW1pY0JpdG1hcFRleHRDcmVhdG9yLmpzPzQzNWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLDBHQUFxQjtBQUM5QyxzQkFBc0IsbUJBQU8sQ0FBQyx1RkFBdUI7QUFDckQsd0JBQXdCLG1CQUFPLENBQUMsMkZBQXlCO0FBQ3pELHVCQUF1QixtQkFBTyxDQUFDLDBHQUF3Qzs7QUFFdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscURBQXFEO0FBQ2hFLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVkscUNBQXFDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixhQUFhOztBQUU1QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvYml0bWFwdGV4dC9keW5hbWljL0R5bmFtaWNCaXRtYXBUZXh0Q3JlYXRvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJpdG1hcFRleHQgPSByZXF1aXJlKCcuL0R5bmFtaWNCaXRtYXBUZXh0Jyk7XHJcbnZhciBCdWlsZEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi8uLi9CdWlsZEdhbWVPYmplY3QnKTtcclxudmFyIEdhbWVPYmplY3RDcmVhdG9yID0gcmVxdWlyZSgnLi4vLi4vR2FtZU9iamVjdENyZWF0b3InKTtcclxudmFyIEdldEFkdmFuY2VkVmFsdWUgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9vYmplY3QvR2V0QWR2YW5jZWRWYWx1ZScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgRHluYW1pYyBCaXRtYXAgVGV4dCBHYW1lIE9iamVjdCBhbmQgcmV0dXJucyBpdC5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgRHluYW1pYyBCaXRtYXAgVGV4dCBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdENyZWF0b3IjZHluYW1pY0JpdG1hcFRleHRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqwrJcclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuQml0bWFwVGV4dC5CaXRtYXBUZXh0Q29uZmlnfSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byBjcmVhdGUgaXRzZWxmLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthZGRUb1NjZW5lXSAtIEFkZCB0aGlzIEdhbWUgT2JqZWN0IHRvIHRoZSBTY2VuZSBhZnRlciBjcmVhdGluZyBpdD8gSWYgc2V0IHRoaXMgYXJndW1lbnQgb3ZlcnJpZGVzIHRoZSBgYWRkYCBwcm9wZXJ0eSBpbiB0aGUgY29uZmlnIG9iamVjdC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkR5bmFtaWNCaXRtYXBUZXh0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RDcmVhdG9yLnJlZ2lzdGVyKCdkeW5hbWljQml0bWFwVGV4dCcsIGZ1bmN0aW9uIChjb25maWcsIGFkZFRvU2NlbmUpXHJcbntcclxuICAgIGlmIChjb25maWcgPT09IHVuZGVmaW5lZCkgeyBjb25maWcgPSB7fTsgfVxyXG5cclxuICAgIHZhciBmb250ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdmb250JywgJycpO1xyXG4gICAgdmFyIHRleHQgPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ3RleHQnLCAnJyk7XHJcbiAgICB2YXIgc2l6ZSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnc2l6ZScsIGZhbHNlKTtcclxuXHJcbiAgICB2YXIgYml0bWFwVGV4dCA9IG5ldyBCaXRtYXBUZXh0KHRoaXMuc2NlbmUsIDAsIDAsIGZvbnQsIHRleHQsIHNpemUpO1xyXG5cclxuICAgIGlmIChhZGRUb1NjZW5lICE9PSB1bmRlZmluZWQpXHJcbiAgICB7XHJcbiAgICAgICAgY29uZmlnLmFkZCA9IGFkZFRvU2NlbmU7XHJcbiAgICB9XHJcblxyXG4gICAgQnVpbGRHYW1lT2JqZWN0KHRoaXMuc2NlbmUsIGJpdG1hcFRleHQsIGNvbmZpZyk7XHJcblxyXG4gICAgcmV0dXJuIGJpdG1hcFRleHQ7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RDcmVhdG9yIGNvbnRleHQuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextCreator.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextFactory.js":
/*!********************************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextFactory.js ***!
\********************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar DynamicBitmapText = __webpack_require__(/*! ./DynamicBitmapText */ \"./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapText.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Dynamic Bitmap Text Game Object and adds it to the Scene.\r\n * \r\n * BitmapText objects work by taking a texture file and an XML or JSON file that describes the font structure.\r\n * \r\n * During rendering for each letter of the text is rendered to the display, proportionally spaced out and aligned to\r\n * match the font structure.\r\n * \r\n * Dynamic Bitmap Text objects are different from Static Bitmap Text in that they invoke a callback for each\r\n * letter being rendered during the render pass. This callback allows you to manipulate the properties of\r\n * each letter being rendered, such as its position, scale or tint, allowing you to create interesting effects\r\n * like jiggling text, which can't be done with Static text. This means that Dynamic Text takes more processing\r\n * time, so only use them if you require the callback ability they have.\r\n *\r\n * BitmapText objects are less flexible than Text objects, in that they have less features such as shadows, fills and the ability\r\n * to use Web Fonts, however you trade this flexibility for rendering speed. You can also create visually compelling BitmapTexts by\r\n * processing the font texture in an image editor, applying fills and any other effects required.\r\n *\r\n * To create multi-line text insert \\r, \\n or \\r\\n escape codes into the text string.\r\n *\r\n * To create a BitmapText data files you need a 3rd party app such as:\r\n *\r\n * BMFont (Windows, free): http://www.angelcode.com/products/bmfont/\r\n * Glyph Designer (OS X, commercial): http://www.71squared.com/en/glyphdesigner\r\n * Littera (Web-based, free): http://kvazars.com/littera/\r\n *\r\n * For most use cases it is recommended to use XML. If you wish to use JSON, the formatting should be equal to the result of\r\n * converting a valid XML file through the popular X2JS library. An online tool for conversion can be found here: http://codebeautify.org/xmltojson\r\n *\r\n * Note: This method will only be available if the Dynamic Bitmap Text Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#dynamicBitmapText\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x position of the Game Object.\r\n * @param {number} y - The y position of the Game Object.\r\n * @param {string} font - The key of the font to use from the BitmapFont cache.\r\n * @param {(string|string[])} [text] - The string, or array of strings, to be set as the content of this Bitmap Text.\r\n * @param {number} [size] - The font size to set.\r\n *\r\n * @return {Phaser.GameObjects.DynamicBitmapText} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('dynamicBitmapText', function (x, y, font, text, size)\r\n{\r\n return this.displayList.add(new DynamicBitmapText(this.scene, x, y, font, text, size));\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n// There are several properties available to use:\r\n//\r\n// this.scene - a reference to the Scene that owns the GameObjectFactory\r\n// this.displayList - a reference to the Display List the Scene owns\r\n// this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L2R5bmFtaWMvRHluYW1pY0JpdG1hcFRleHRGYWN0b3J5LmpzPzcyNWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHdCQUF3QixtQkFBTyxDQUFDLDBHQUFxQjtBQUNyRCx3QkFBd0IsbUJBQU8sQ0FBQywyRkFBeUI7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxxQ0FBcUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvYml0bWFwdGV4dC9keW5hbWljL0R5bmFtaWNCaXRtYXBUZXh0RmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIER5bmFtaWNCaXRtYXBUZXh0ID0gcmVxdWlyZSgnLi9EeW5hbWljQml0bWFwVGV4dCcpO1xyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgRHluYW1pYyBCaXRtYXAgVGV4dCBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqIFxyXG4gKiBCaXRtYXBUZXh0IG9iamVjdHMgd29yayBieSB0YWtpbmcgYSB0ZXh0dXJlIGZpbGUgYW5kIGFuIFhNTCBvciBKU09OIGZpbGUgdGhhdCBkZXNjcmliZXMgdGhlIGZvbnQgc3RydWN0dXJlLlxyXG4gKiBcclxuICogRHVyaW5nIHJlbmRlcmluZyBmb3IgZWFjaCBsZXR0ZXIgb2YgdGhlIHRleHQgaXMgcmVuZGVyZWQgdG8gdGhlIGRpc3BsYXksIHByb3BvcnRpb25hbGx5IHNwYWNlZCBvdXQgYW5kIGFsaWduZWQgdG9cclxuICogbWF0Y2ggdGhlIGZvbnQgc3RydWN0dXJlLlxyXG4gKiBcclxuICogRHluYW1pYyBCaXRtYXAgVGV4dCBvYmplY3RzIGFyZSBkaWZmZXJlbnQgZnJvbSBTdGF0aWMgQml0bWFwIFRleHQgaW4gdGhhdCB0aGV5IGludm9rZSBhIGNhbGxiYWNrIGZvciBlYWNoXHJcbiAqIGxldHRlciBiZWluZyByZW5kZXJlZCBkdXJpbmcgdGhlIHJlbmRlciBwYXNzLiBUaGlzIGNhbGxiYWNrIGFsbG93cyB5b3UgdG8gbWFuaXB1bGF0ZSB0aGUgcHJvcGVydGllcyBvZlxyXG4gKiBlYWNoIGxldHRlciBiZWluZyByZW5kZXJlZCwgc3VjaCBhcyBpdHMgcG9zaXRpb24sIHNjYWxlIG9yIHRpbnQsIGFsbG93aW5nIHlvdSB0byBjcmVhdGUgaW50ZXJlc3RpbmcgZWZmZWN0c1xyXG4gKiBsaWtlIGppZ2dsaW5nIHRleHQsIHdoaWNoIGNhbid0IGJlIGRvbmUgd2l0aCBTdGF0aWMgdGV4dC4gVGhpcyBtZWFucyB0aGF0IER5bmFtaWMgVGV4dCB0YWtlcyBtb3JlIHByb2Nlc3NpbmdcclxuICogdGltZSwgc28gb25seSB1c2UgdGhlbSBpZiB5b3UgcmVxdWlyZSB0aGUgY2FsbGJhY2sgYWJpbGl0eSB0aGV5IGhhdmUuXHJcbiAqXHJcbiAqIEJpdG1hcFRleHQgb2JqZWN0cyBhcmUgbGVzcyBmbGV4aWJsZSB0aGFuIFRleHQgb2JqZWN0cywgaW4gdGhhdCB0aGV5IGhhdmUgbGVzcyBmZWF0dXJlcyBzdWNoIGFzIHNoYWRvd3MsIGZpbGxzIGFuZCB0aGUgYWJpbGl0eVxyXG4gKiB0byB1c2UgV2ViIEZvbnRzLCBob3dldmVyIHlvdSB0cmFkZSB0aGlzIGZsZXhpYmlsaXR5IGZvciByZW5kZXJpbmcgc3BlZWQuIFlvdSBjYW4gYWxzbyBjcmVhdGUgdmlzdWFsbHkgY29tcGVsbGluZyBCaXRtYXBUZXh0cyBieVxyXG4gKiBwcm9jZXNzaW5nIHRoZSBmb250IHRleHR1cmUgaW4gYW4gaW1hZ2UgZWRpdG9yLCBhcHBseWluZyBmaWxscyBhbmQgYW55IG90aGVyIGVmZmVjdHMgcmVxdWlyZWQuXHJcbiAqXHJcbiAqIFRvIGNyZWF0ZSBtdWx0aS1saW5lIHRleHQgaW5zZXJ0IFxcciwgXFxuIG9yIFxcclxcbiBlc2NhcGUgY29kZXMgaW50byB0aGUgdGV4dCBzdHJpbmcuXHJcbiAqXHJcbiAqIFRvIGNyZWF0ZSBhIEJpdG1hcFRleHQgZGF0YSBmaWxlcyB5b3UgbmVlZCBhIDNyZCBwYXJ0eSBhcHAgc3VjaCBhczpcclxuICpcclxuICogQk1Gb250IChXaW5kb3dzLCBmcmVlKTogaHR0cDovL3d3dy5hbmdlbGNvZGUuY29tL3Byb2R1Y3RzL2JtZm9udC9cclxuICogR2x5cGggRGVzaWduZXIgKE9TIFgsIGNvbW1lcmNpYWwpOiBodHRwOi8vd3d3Ljcxc3F1YXJlZC5jb20vZW4vZ2x5cGhkZXNpZ25lclxyXG4gKiBMaXR0ZXJhIChXZWItYmFzZWQsIGZyZWUpOiBodHRwOi8va3ZhemFycy5jb20vbGl0dGVyYS9cclxuICpcclxuICogRm9yIG1vc3QgdXNlIGNhc2VzIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBYTUwuIElmIHlvdSB3aXNoIHRvIHVzZSBKU09OLCB0aGUgZm9ybWF0dGluZyBzaG91bGQgYmUgZXF1YWwgdG8gdGhlIHJlc3VsdCBvZlxyXG4gKiBjb252ZXJ0aW5nIGEgdmFsaWQgWE1MIGZpbGUgdGhyb3VnaCB0aGUgcG9wdWxhciBYMkpTIGxpYnJhcnkuIEFuIG9ubGluZSB0b29sIGZvciBjb252ZXJzaW9uIGNhbiBiZSBmb3VuZCBoZXJlOiBodHRwOi8vY29kZWJlYXV0aWZ5Lm9yZy94bWx0b2pzb25cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgRHluYW1pYyBCaXRtYXAgVGV4dCBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3RvcnkjZHluYW1pY0JpdG1hcFRleHRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggcG9zaXRpb24gb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IHBvc2l0aW9uIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd9IGZvbnQgLSBUaGUga2V5IG9mIHRoZSBmb250IHRvIHVzZSBmcm9tIHRoZSBCaXRtYXBGb250IGNhY2hlLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8c3RyaW5nW10pfSBbdGV4dF0gLSBUaGUgc3RyaW5nLCBvciBhcnJheSBvZiBzdHJpbmdzLCB0byBiZSBzZXQgYXMgdGhlIGNvbnRlbnQgb2YgdGhpcyBCaXRtYXAgVGV4dC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzaXplXSAtIFRoZSBmb250IHNpemUgdG8gc2V0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuRHluYW1pY0JpdG1hcFRleHR9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdEZhY3RvcnkucmVnaXN0ZXIoJ2R5bmFtaWNCaXRtYXBUZXh0JywgZnVuY3Rpb24gKHgsIHksIGZvbnQsIHRleHQsIHNpemUpXHJcbntcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXlMaXN0LmFkZChuZXcgRHluYW1pY0JpdG1hcFRleHQodGhpcy5zY2VuZSwgeCwgeSwgZm9udCwgdGV4dCwgc2l6ZSkpO1xyXG59KTtcclxuXHJcbi8vICBXaGVuIHJlZ2lzdGVyaW5nIGEgZmFjdG9yeSBmdW5jdGlvbiAndGhpcycgcmVmZXJzIHRvIHRoZSBHYW1lT2JqZWN0RmFjdG9yeSBjb250ZXh0LlxyXG4vL1xyXG4vLyAgVGhlcmUgYXJlIHNldmVyYWwgcHJvcGVydGllcyBhdmFpbGFibGUgdG8gdXNlOlxyXG4vL1xyXG4vLyAgdGhpcy5zY2VuZSAtIGEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSB0aGF0IG93bnMgdGhlIEdhbWVPYmplY3RGYWN0b3J5XHJcbi8vICB0aGlzLmRpc3BsYXlMaXN0IC0gYSByZWZlcmVuY2UgdG8gdGhlIERpc3BsYXkgTGlzdCB0aGUgU2NlbmUgb3duc1xyXG4vLyAgdGhpcy51cGRhdGVMaXN0IC0gYSByZWZlcmVuY2UgdG8gdGhlIFVwZGF0ZSBMaXN0IHRoZSBTY2VuZSBvd25zXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextRender.js":
/*!*******************************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextRender.js ***!
\*******************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./DynamicBitmapTextWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./DynamicBitmapTextCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L2R5bmFtaWMvRHluYW1pY0JpdG1hcFRleHRSZW5kZXIuanM/ODc5YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsb0VBQXFCO0FBQy9DLG1CQUFtQixtQkFBTyxDQUFDLG9FQUFxQjs7QUFFaEQsSUFBSSxJQUFxQjtBQUN6QjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLG9JQUFrQztBQUM1RDs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsc0lBQW1DO0FBQzlEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L2R5bmFtaWMvRHluYW1pY0JpdG1hcFRleHRSZW5kZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL05PT1AnKTtcclxudmFyIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL05PT1AnKTtcclxuXHJcbmlmICh0eXBlb2YgV0VCR0xfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi9EeW5hbWljQml0bWFwVGV4dFdlYkdMUmVuZGVyZXInKTtcclxufVxyXG5cclxuaWYgKHR5cGVvZiBDQU5WQVNfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4vRHluYW1pY0JpdG1hcFRleHRDYW52YXNSZW5kZXJlcicpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICByZW5kZXJXZWJHTDogcmVuZGVyV2ViR0wsXHJcbiAgICByZW5kZXJDYW52YXM6IHJlbmRlckNhbnZhc1xyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextWebGLRenderer.js":
/*!**************************************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextWebGLRenderer.js ***!
\**************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.DynamicBitmapText#renderWebGL\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.DynamicBitmapText} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar DynamicBitmapTextWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var text = src.text;\r\n var textLength = text.length;\r\n\r\n if (textLength === 0)\r\n {\r\n return;\r\n }\r\n\r\n var pipeline = this.pipeline;\r\n\r\n renderer.setPipeline(pipeline, src);\r\n\r\n var crop = (src.cropWidth > 0 || src.cropHeight > 0);\r\n\r\n if (crop)\r\n {\r\n pipeline.flush();\r\n\r\n renderer.pushScissor(\r\n src.x,\r\n src.y,\r\n src.cropWidth * src.scaleX,\r\n src.cropHeight * src.scaleY\r\n );\r\n }\r\n\r\n var camMatrix = pipeline._tempMatrix1;\r\n var spriteMatrix = pipeline._tempMatrix2;\r\n var calcMatrix = pipeline._tempMatrix3;\r\n var fontMatrix = pipeline._tempMatrix4;\r\n\r\n spriteMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n camMatrix.copyFrom(camera.matrix);\r\n\r\n if (parentMatrix)\r\n {\r\n // Multiply the camera by the parent matrix\r\n camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n // Undo the camera scroll\r\n spriteMatrix.e = src.x;\r\n spriteMatrix.f = src.y;\r\n\r\n // Multiply by the Sprite matrix, store result in calcMatrix\r\n camMatrix.multiply(spriteMatrix, calcMatrix);\r\n }\r\n else\r\n {\r\n spriteMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n spriteMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n\r\n // Multiply by the Sprite matrix, store result in calcMatrix\r\n camMatrix.multiply(spriteMatrix, calcMatrix);\r\n }\r\n\r\n var frame = src.frame;\r\n var texture = frame.glTexture;\r\n var textureX = frame.cutX;\r\n var textureY = frame.cutY;\r\n var textureWidth = texture.width;\r\n var textureHeight = texture.height;\r\n\r\n var tintEffect = (src._isTinted && src.tintFill);\r\n var tintTL = Utils.getTintAppendFloatAlpha(src._tintTL, camera.alpha * src._alphaTL);\r\n var tintTR = Utils.getTintAppendFloatAlpha(src._tintTR, camera.alpha * src._alphaTR);\r\n var tintBL = Utils.getTintAppendFloatAlpha(src._tintBL, camera.alpha * src._alphaBL);\r\n var tintBR = Utils.getTintAppendFloatAlpha(src._tintBR, camera.alpha * src._alphaBR);\r\n\r\n pipeline.setTexture2D(texture, 0);\r\n\r\n var xAdvance = 0;\r\n var yAdvance = 0;\r\n var charCode = 0;\r\n var lastCharCode = 0;\r\n var letterSpacing = src.letterSpacing;\r\n var glyph;\r\n var glyphX = 0;\r\n var glyphY = 0;\r\n var glyphW = 0;\r\n var glyphH = 0;\r\n var lastGlyph;\r\n var scrollX = src.scrollX;\r\n var scrollY = src.scrollY;\r\n\r\n var fontData = src.fontData;\r\n var chars = fontData.chars;\r\n var lineHeight = fontData.lineHeight;\r\n var scale = (src.fontSize / fontData.size);\r\n var rotation = 0;\r\n\r\n var align = src._align;\r\n var currentLine = 0;\r\n var lineOffsetX = 0;\r\n\r\n // Update the bounds - skipped internally if not dirty\r\n src.getTextBounds(false);\r\n\r\n var lineData = src._bounds.lines;\r\n\r\n if (align === 1)\r\n {\r\n lineOffsetX = (lineData.longest - lineData.lengths[0]) / 2;\r\n }\r\n else if (align === 2)\r\n {\r\n lineOffsetX = (lineData.longest - lineData.lengths[0]);\r\n }\r\n\r\n var roundPixels = camera.roundPixels;\r\n var displayCallback = src.displayCallback;\r\n var callbackData = src.callbackData;\r\n\r\n for (var i = 0; i < textLength; i++)\r\n {\r\n charCode = text.charCodeAt(i);\r\n\r\n // Carriage-return\r\n if (charCode === 10)\r\n {\r\n currentLine++;\r\n\r\n if (align === 1)\r\n {\r\n lineOffsetX = (lineData.longest - lineData.lengths[currentLine]) / 2;\r\n }\r\n else if (align === 2)\r\n {\r\n lineOffsetX = (lineData.longest - lineData.lengths[currentLine]);\r\n }\r\n\r\n xAdvance = 0;\r\n yAdvance += lineHeight;\r\n lastGlyph = null;\r\n\r\n continue;\r\n }\r\n\r\n glyph = chars[charCode];\r\n\r\n if (!glyph)\r\n {\r\n continue;\r\n }\r\n\r\n glyphX = textureX + glyph.x;\r\n glyphY = textureY + glyph.y;\r\n\r\n glyphW = glyph.width;\r\n glyphH = glyph.height;\r\n\r\n var x = (glyph.xOffset + xAdvance) - scrollX;\r\n var y = (glyph.yOffset + yAdvance) - scrollY;\r\n\r\n if (lastGlyph !== null)\r\n {\r\n var kerningOffset = glyph.kerning[lastCharCode];\r\n x += (kerningOffset !== undefined) ? kerningOffset : 0;\r\n }\r\n\r\n xAdvance += glyph.xAdvance + letterSpacing;\r\n lastGlyph = glyph;\r\n lastCharCode = charCode;\r\n\r\n // Nothing to render or a space? Then skip to the next glyph\r\n if (glyphW === 0 || glyphH === 0 || charCode === 32)\r\n {\r\n continue;\r\n }\r\n\r\n scale = (src.fontSize / src.fontData.size);\r\n rotation = 0;\r\n\r\n if (displayCallback)\r\n {\r\n callbackData.color = 0;\r\n callbackData.tint.topLeft = tintTL;\r\n callbackData.tint.topRight = tintTR;\r\n callbackData.tint.bottomLeft = tintBL;\r\n callbackData.tint.bottomRight = tintBR;\r\n callbackData.index = i;\r\n callbackData.charCode = charCode;\r\n callbackData.x = x;\r\n callbackData.y = y;\r\n callbackData.scale = scale;\r\n callbackData.rotation = rotation;\r\n callbackData.data = glyph.data;\r\n\r\n var output = displayCallback(callbackData);\r\n\r\n x = output.x;\r\n y = output.y;\r\n scale = output.scale;\r\n rotation = output.rotation;\r\n\r\n if (output.color)\r\n {\r\n tintTL = output.color;\r\n tintTR = output.color;\r\n tintBL = output.color;\r\n tintBR = output.color;\r\n }\r\n else\r\n {\r\n tintTL = output.tint.topLeft;\r\n tintTR = output.tint.topRight;\r\n tintBL = output.tint.bottomLeft;\r\n tintBR = output.tint.bottomRight;\r\n }\r\n\r\n tintTL = Utils.getTintAppendFloatAlpha(tintTL, camera.alpha * src._alphaTL);\r\n tintTR = Utils.getTintAppendFloatAlpha(tintTR, camera.alpha * src._alphaTR);\r\n tintBL = Utils.getTintAppendFloatAlpha(tintBL, camera.alpha * src._alphaBL);\r\n tintBR = Utils.getTintAppendFloatAlpha(tintBR, camera.alpha * src._alphaBR);\r\n }\r\n\r\n x *= scale;\r\n y *= scale;\r\n\r\n x -= src.displayOriginX;\r\n y -= src.displayOriginY;\r\n\r\n x += lineOffsetX;\r\n\r\n fontMatrix.applyITRS(x, y, rotation, scale, scale);\r\n\r\n calcMatrix.multiply(fontMatrix, spriteMatrix);\r\n\r\n var u0 = glyphX / textureWidth;\r\n var v0 = glyphY / textureHeight;\r\n var u1 = (glyphX + glyphW) / textureWidth;\r\n var v1 = (glyphY + glyphH) / textureHeight;\r\n\r\n var xw = glyphW;\r\n var yh = glyphH;\r\n\r\n var tx0 = spriteMatrix.e;\r\n var ty0 = spriteMatrix.f;\r\n\r\n var tx1 = yh * spriteMatrix.c + spriteMatrix.e;\r\n var ty1 = yh * spriteMatrix.d + spriteMatrix.f;\r\n\r\n var tx2 = xw * spriteMatrix.a + yh * spriteMatrix.c + spriteMatrix.e;\r\n var ty2 = xw * spriteMatrix.b + yh * spriteMatrix.d + spriteMatrix.f;\r\n\r\n var tx3 = xw * spriteMatrix.a + spriteMatrix.e;\r\n var ty3 = xw * spriteMatrix.b + spriteMatrix.f;\r\n\r\n if (roundPixels)\r\n {\r\n tx0 = Math.round(tx0);\r\n ty0 = Math.round(ty0);\r\n\r\n tx1 = Math.round(tx1);\r\n ty1 = Math.round(ty1);\r\n\r\n tx2 = Math.round(tx2);\r\n ty2 = Math.round(ty2);\r\n\r\n tx3 = Math.round(tx3);\r\n ty3 = Math.round(ty3);\r\n }\r\n\r\n pipeline.batchQuad(tx0, ty0, tx1, ty1, tx2, ty2, tx3, ty3, u0, v0, u1, v1, tintTL, tintTR, tintBL, tintBR, tintEffect, texture, 0);\r\n }\r\n\r\n if (crop)\r\n {\r\n pipeline.flush();\r\n\r\n renderer.popScissor();\r\n }\r\n};\r\n\r\nmodule.exports = DynamicBitmapTextWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L2R5bmFtaWMvRHluYW1pY0JpdG1hcFRleHRXZWJHTFJlbmRlcmVyLmpzP2ViZjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyx3RkFBK0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcscUNBQXFDO0FBQ2hELFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGdCQUFnQjtBQUNuQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L2R5bmFtaWMvRHluYW1pY0JpdG1hcFRleHRXZWJHTFJlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgVXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi9yZW5kZXJlci93ZWJnbC9VdGlscycpO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBXZWJHTCBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkR5bmFtaWNCaXRtYXBUZXh0I3JlbmRlcldlYkdMXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBXZWJHTCByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuRHluYW1pY0JpdG1hcFRleHR9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBEeW5hbWljQml0bWFwVGV4dFdlYkdMUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgdGV4dCA9IHNyYy50ZXh0O1xyXG4gICAgdmFyIHRleHRMZW5ndGggPSB0ZXh0Lmxlbmd0aDtcclxuXHJcbiAgICBpZiAodGV4dExlbmd0aCA9PT0gMClcclxuICAgIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHBpcGVsaW5lID0gdGhpcy5waXBlbGluZTtcclxuXHJcbiAgICByZW5kZXJlci5zZXRQaXBlbGluZShwaXBlbGluZSwgc3JjKTtcclxuXHJcbiAgICB2YXIgY3JvcCA9IChzcmMuY3JvcFdpZHRoID4gMCB8fCBzcmMuY3JvcEhlaWdodCA+IDApO1xyXG5cclxuICAgIGlmIChjcm9wKVxyXG4gICAge1xyXG4gICAgICAgIHBpcGVsaW5lLmZsdXNoKCk7XHJcblxyXG4gICAgICAgIHJlbmRlcmVyLnB1c2hTY2lzc29yKFxyXG4gICAgICAgICAgICBzcmMueCxcclxuICAgICAgICAgICAgc3JjLnksXHJcbiAgICAgICAgICAgIHNyYy5jcm9wV2lkdGggKiBzcmMuc2NhbGVYLFxyXG4gICAgICAgICAgICBzcmMuY3JvcEhlaWdodCAqIHNyYy5zY2FsZVlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjYW1NYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDE7XHJcbiAgICB2YXIgc3ByaXRlTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgyO1xyXG4gICAgdmFyIGNhbGNNYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDM7XHJcbiAgICB2YXIgZm9udE1hdHJpeCA9IHBpcGVsaW5lLl90ZW1wTWF0cml4NDtcclxuXHJcbiAgICBzcHJpdGVNYXRyaXguYXBwbHlJVFJTKHNyYy54LCBzcmMueSwgc3JjLnJvdGF0aW9uLCBzcmMuc2NhbGVYLCBzcmMuc2NhbGVZKTtcclxuXHJcbiAgICBjYW1NYXRyaXguY29weUZyb20oY2FtZXJhLm1hdHJpeCk7XHJcblxyXG4gICAgaWYgKHBhcmVudE1hdHJpeClcclxuICAgIHtcclxuICAgICAgICAvLyAgTXVsdGlwbHkgdGhlIGNhbWVyYSBieSB0aGUgcGFyZW50IG1hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseVdpdGhPZmZzZXQocGFyZW50TWF0cml4LCAtY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWCwgLWNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3RvclkpO1xyXG5cclxuICAgICAgICAvLyAgVW5kbyB0aGUgY2FtZXJhIHNjcm9sbFxyXG4gICAgICAgIHNwcml0ZU1hdHJpeC5lID0gc3JjLng7XHJcbiAgICAgICAgc3ByaXRlTWF0cml4LmYgPSBzcmMueTtcclxuXHJcbiAgICAgICAgLy8gIE11bHRpcGx5IGJ5IHRoZSBTcHJpdGUgbWF0cml4LCBzdG9yZSByZXN1bHQgaW4gY2FsY01hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseShzcHJpdGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHNwcml0ZU1hdHJpeC5lIC09IGNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3Rvclg7XHJcbiAgICAgICAgc3ByaXRlTWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuXHJcbiAgICAgICAgLy8gIE11bHRpcGx5IGJ5IHRoZSBTcHJpdGUgbWF0cml4LCBzdG9yZSByZXN1bHQgaW4gY2FsY01hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseShzcHJpdGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBmcmFtZSA9IHNyYy5mcmFtZTtcclxuICAgIHZhciB0ZXh0dXJlID0gZnJhbWUuZ2xUZXh0dXJlO1xyXG4gICAgdmFyIHRleHR1cmVYID0gZnJhbWUuY3V0WDtcclxuICAgIHZhciB0ZXh0dXJlWSA9IGZyYW1lLmN1dFk7XHJcbiAgICB2YXIgdGV4dHVyZVdpZHRoID0gdGV4dHVyZS53aWR0aDtcclxuICAgIHZhciB0ZXh0dXJlSGVpZ2h0ID0gdGV4dHVyZS5oZWlnaHQ7XHJcblxyXG4gICAgdmFyIHRpbnRFZmZlY3QgPSAoc3JjLl9pc1RpbnRlZCAmJiBzcmMudGludEZpbGwpO1xyXG4gICAgdmFyIHRpbnRUTCA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhKHNyYy5fdGludFRMLCBjYW1lcmEuYWxwaGEgKiBzcmMuX2FscGhhVEwpO1xyXG4gICAgdmFyIHRpbnRUUiA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhKHNyYy5fdGludFRSLCBjYW1lcmEuYWxwaGEgKiBzcmMuX2FscGhhVFIpO1xyXG4gICAgdmFyIHRpbnRCTCA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhKHNyYy5fdGludEJMLCBjYW1lcmEuYWxwaGEgKiBzcmMuX2FscGhhQkwpO1xyXG4gICAgdmFyIHRpbnRCUiA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhKHNyYy5fdGludEJSLCBjYW1lcmEuYWxwaGEgKiBzcmMuX2FscGhhQlIpO1xyXG5cclxuICAgIHBpcGVsaW5lLnNldFRleHR1cmUyRCh0ZXh0dXJlLCAwKTtcclxuXHJcbiAgICB2YXIgeEFkdmFuY2UgPSAwO1xyXG4gICAgdmFyIHlBZHZhbmNlID0gMDtcclxuICAgIHZhciBjaGFyQ29kZSA9IDA7XHJcbiAgICB2YXIgbGFzdENoYXJDb2RlID0gMDtcclxuICAgIHZhciBsZXR0ZXJTcGFjaW5nID0gc3JjLmxldHRlclNwYWNpbmc7XHJcbiAgICB2YXIgZ2x5cGg7XHJcbiAgICB2YXIgZ2x5cGhYID0gMDtcclxuICAgIHZhciBnbHlwaFkgPSAwO1xyXG4gICAgdmFyIGdseXBoVyA9IDA7XHJcbiAgICB2YXIgZ2x5cGhIID0gMDtcclxuICAgIHZhciBsYXN0R2x5cGg7XHJcbiAgICB2YXIgc2Nyb2xsWCA9IHNyYy5zY3JvbGxYO1xyXG4gICAgdmFyIHNjcm9sbFkgPSBzcmMuc2Nyb2xsWTtcclxuXHJcbiAgICB2YXIgZm9udERhdGEgPSBzcmMuZm9udERhdGE7XHJcbiAgICB2YXIgY2hhcnMgPSBmb250RGF0YS5jaGFycztcclxuICAgIHZhciBsaW5lSGVpZ2h0ID0gZm9udERhdGEubGluZUhlaWdodDtcclxuICAgIHZhciBzY2FsZSA9IChzcmMuZm9udFNpemUgLyBmb250RGF0YS5zaXplKTtcclxuICAgIHZhciByb3RhdGlvbiA9IDA7XHJcblxyXG4gICAgdmFyIGFsaWduID0gc3JjLl9hbGlnbjtcclxuICAgIHZhciBjdXJyZW50TGluZSA9IDA7XHJcbiAgICB2YXIgbGluZU9mZnNldFggPSAwO1xyXG5cclxuICAgIC8vICBVcGRhdGUgdGhlIGJvdW5kcyAtIHNraXBwZWQgaW50ZXJuYWxseSBpZiBub3QgZGlydHlcclxuICAgIHNyYy5nZXRUZXh0Qm91bmRzKGZhbHNlKTtcclxuXHJcbiAgICB2YXIgbGluZURhdGEgPSBzcmMuX2JvdW5kcy5saW5lcztcclxuXHJcbiAgICBpZiAoYWxpZ24gPT09IDEpXHJcbiAgICB7XHJcbiAgICAgICAgbGluZU9mZnNldFggPSAobGluZURhdGEubG9uZ2VzdCAtIGxpbmVEYXRhLmxlbmd0aHNbMF0pIC8gMjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGFsaWduID09PSAyKVxyXG4gICAge1xyXG4gICAgICAgIGxpbmVPZmZzZXRYID0gKGxpbmVEYXRhLmxvbmdlc3QgLSBsaW5lRGF0YS5sZW5ndGhzWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgcm91bmRQaXhlbHMgPSBjYW1lcmEucm91bmRQaXhlbHM7XHJcbiAgICB2YXIgZGlzcGxheUNhbGxiYWNrID0gc3JjLmRpc3BsYXlDYWxsYmFjaztcclxuICAgIHZhciBjYWxsYmFja0RhdGEgPSBzcmMuY2FsbGJhY2tEYXRhO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dExlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIGNoYXJDb2RlID0gdGV4dC5jaGFyQ29kZUF0KGkpO1xyXG5cclxuICAgICAgICAvLyAgQ2FycmlhZ2UtcmV0dXJuXHJcbiAgICAgICAgaWYgKGNoYXJDb2RlID09PSAxMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRMaW5lKys7XHJcblxyXG4gICAgICAgICAgICBpZiAoYWxpZ24gPT09IDEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxpbmVPZmZzZXRYID0gKGxpbmVEYXRhLmxvbmdlc3QgLSBsaW5lRGF0YS5sZW5ndGhzW2N1cnJlbnRMaW5lXSkgLyAyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGFsaWduID09PSAyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsaW5lT2Zmc2V0WCA9IChsaW5lRGF0YS5sb25nZXN0IC0gbGluZURhdGEubGVuZ3Roc1tjdXJyZW50TGluZV0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB4QWR2YW5jZSA9IDA7XHJcbiAgICAgICAgICAgIHlBZHZhbmNlICs9IGxpbmVIZWlnaHQ7XHJcbiAgICAgICAgICAgIGxhc3RHbHlwaCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdseXBoID0gY2hhcnNbY2hhckNvZGVdO1xyXG5cclxuICAgICAgICBpZiAoIWdseXBoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnbHlwaFggPSB0ZXh0dXJlWCArIGdseXBoLng7XHJcbiAgICAgICAgZ2x5cGhZID0gdGV4dHVyZVkgKyBnbHlwaC55O1xyXG5cclxuICAgICAgICBnbHlwaFcgPSBnbHlwaC53aWR0aDtcclxuICAgICAgICBnbHlwaEggPSBnbHlwaC5oZWlnaHQ7XHJcblxyXG4gICAgICAgIHZhciB4ID0gKGdseXBoLnhPZmZzZXQgKyB4QWR2YW5jZSkgLSBzY3JvbGxYO1xyXG4gICAgICAgIHZhciB5ID0gKGdseXBoLnlPZmZzZXQgKyB5QWR2YW5jZSkgLSBzY3JvbGxZO1xyXG5cclxuICAgICAgICBpZiAobGFzdEdseXBoICE9PSBudWxsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGtlcm5pbmdPZmZzZXQgPSBnbHlwaC5rZXJuaW5nW2xhc3RDaGFyQ29kZV07XHJcbiAgICAgICAgICAgIHggKz0gKGtlcm5pbmdPZmZzZXQgIT09IHVuZGVmaW5lZCkgPyBrZXJuaW5nT2Zmc2V0IDogMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHhBZHZhbmNlICs9IGdseXBoLnhBZHZhbmNlICsgbGV0dGVyU3BhY2luZztcclxuICAgICAgICBsYXN0R2x5cGggPSBnbHlwaDtcclxuICAgICAgICBsYXN0Q2hhckNvZGUgPSBjaGFyQ29kZTtcclxuXHJcbiAgICAgICAgLy8gIE5vdGhpbmcgdG8gcmVuZGVyIG9yIGEgc3BhY2U/IFRoZW4gc2tpcCB0byB0aGUgbmV4dCBnbHlwaFxyXG4gICAgICAgIGlmIChnbHlwaFcgPT09IDAgfHwgZ2x5cGhIID09PSAwIHx8IGNoYXJDb2RlID09PSAzMilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2NhbGUgPSAoc3JjLmZvbnRTaXplIC8gc3JjLmZvbnREYXRhLnNpemUpO1xyXG4gICAgICAgIHJvdGF0aW9uID0gMDtcclxuXHJcbiAgICAgICAgaWYgKGRpc3BsYXlDYWxsYmFjaylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrRGF0YS5jb2xvciA9IDA7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrRGF0YS50aW50LnRvcExlZnQgPSB0aW50VEw7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrRGF0YS50aW50LnRvcFJpZ2h0ID0gdGludFRSO1xyXG4gICAgICAgICAgICBjYWxsYmFja0RhdGEudGludC5ib3R0b21MZWZ0ID0gdGludEJMO1xyXG4gICAgICAgICAgICBjYWxsYmFja0RhdGEudGludC5ib3R0b21SaWdodCA9IHRpbnRCUjtcclxuICAgICAgICAgICAgY2FsbGJhY2tEYXRhLmluZGV4ID0gaTtcclxuICAgICAgICAgICAgY2FsbGJhY2tEYXRhLmNoYXJDb2RlID0gY2hhckNvZGU7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrRGF0YS54ID0geDtcclxuICAgICAgICAgICAgY2FsbGJhY2tEYXRhLnkgPSB5O1xyXG4gICAgICAgICAgICBjYWxsYmFja0RhdGEuc2NhbGUgPSBzY2FsZTtcclxuICAgICAgICAgICAgY2FsbGJhY2tEYXRhLnJvdGF0aW9uID0gcm90YXRpb247XHJcbiAgICAgICAgICAgIGNhbGxiYWNrRGF0YS5kYXRhID0gZ2x5cGguZGF0YTtcclxuXHJcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSBkaXNwbGF5Q2FsbGJhY2soY2FsbGJhY2tEYXRhKTtcclxuXHJcbiAgICAgICAgICAgIHggPSBvdXRwdXQueDtcclxuICAgICAgICAgICAgeSA9IG91dHB1dC55O1xyXG4gICAgICAgICAgICBzY2FsZSA9IG91dHB1dC5zY2FsZTtcclxuICAgICAgICAgICAgcm90YXRpb24gPSBvdXRwdXQucm90YXRpb247XHJcblxyXG4gICAgICAgICAgICBpZiAob3V0cHV0LmNvbG9yKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aW50VEwgPSBvdXRwdXQuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB0aW50VFIgPSBvdXRwdXQuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB0aW50QkwgPSBvdXRwdXQuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB0aW50QlIgPSBvdXRwdXQuY29sb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aW50VEwgPSBvdXRwdXQudGludC50b3BMZWZ0O1xyXG4gICAgICAgICAgICAgICAgdGludFRSID0gb3V0cHV0LnRpbnQudG9wUmlnaHQ7XHJcbiAgICAgICAgICAgICAgICB0aW50QkwgPSBvdXRwdXQudGludC5ib3R0b21MZWZ0O1xyXG4gICAgICAgICAgICAgICAgdGludEJSID0gb3V0cHV0LnRpbnQuYm90dG9tUmlnaHQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRpbnRUTCA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhKHRpbnRUTCwgY2FtZXJhLmFscGhhICogc3JjLl9hbHBoYVRMKTtcclxuICAgICAgICAgICAgdGludFRSID0gVXRpbHMuZ2V0VGludEFwcGVuZEZsb2F0QWxwaGEodGludFRSLCBjYW1lcmEuYWxwaGEgKiBzcmMuX2FscGhhVFIpO1xyXG4gICAgICAgICAgICB0aW50QkwgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYSh0aW50QkwsIGNhbWVyYS5hbHBoYSAqIHNyYy5fYWxwaGFCTCk7XHJcbiAgICAgICAgICAgIHRpbnRCUiA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhKHRpbnRCUiwgY2FtZXJhLmFscGhhICogc3JjLl9hbHBoYUJSKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHggKj0gc2NhbGU7XHJcbiAgICAgICAgeSAqPSBzY2FsZTtcclxuXHJcbiAgICAgICAgeCAtPSBzcmMuZGlzcGxheU9yaWdpblg7XHJcbiAgICAgICAgeSAtPSBzcmMuZGlzcGxheU9yaWdpblk7XHJcblxyXG4gICAgICAgIHggKz0gbGluZU9mZnNldFg7XHJcblxyXG4gICAgICAgIGZvbnRNYXRyaXguYXBwbHlJVFJTKHgsIHksIHJvdGF0aW9uLCBzY2FsZSwgc2NhbGUpO1xyXG5cclxuICAgICAgICBjYWxjTWF0cml4Lm11bHRpcGx5KGZvbnRNYXRyaXgsIHNwcml0ZU1hdHJpeCk7XHJcblxyXG4gICAgICAgIHZhciB1MCA9IGdseXBoWCAvIHRleHR1cmVXaWR0aDtcclxuICAgICAgICB2YXIgdjAgPSBnbHlwaFkgLyB0ZXh0dXJlSGVpZ2h0O1xyXG4gICAgICAgIHZhciB1MSA9IChnbHlwaFggKyBnbHlwaFcpIC8gdGV4dHVyZVdpZHRoO1xyXG4gICAgICAgIHZhciB2MSA9IChnbHlwaFkgKyBnbHlwaEgpIC8gdGV4dHVyZUhlaWdodDtcclxuXHJcbiAgICAgICAgdmFyIHh3ID0gZ2x5cGhXO1xyXG4gICAgICAgIHZhciB5aCA9IGdseXBoSDtcclxuXHJcbiAgICAgICAgdmFyIHR4MCA9IHNwcml0ZU1hdHJpeC5lO1xyXG4gICAgICAgIHZhciB0eTAgPSBzcHJpdGVNYXRyaXguZjtcclxuXHJcbiAgICAgICAgdmFyIHR4MSA9IHloICogc3ByaXRlTWF0cml4LmMgKyBzcHJpdGVNYXRyaXguZTtcclxuICAgICAgICB2YXIgdHkxID0geWggKiBzcHJpdGVNYXRyaXguZCArIHNwcml0ZU1hdHJpeC5mO1xyXG5cclxuICAgICAgICB2YXIgdHgyID0geHcgKiBzcHJpdGVNYXRyaXguYSArIHloICogc3ByaXRlTWF0cml4LmMgKyBzcHJpdGVNYXRyaXguZTtcclxuICAgICAgICB2YXIgdHkyID0geHcgKiBzcHJpdGVNYXRyaXguYiArIHloICogc3ByaXRlTWF0cml4LmQgKyBzcHJpdGVNYXRyaXguZjtcclxuXHJcbiAgICAgICAgdmFyIHR4MyA9IHh3ICogc3ByaXRlTWF0cml4LmEgKyBzcHJpdGVNYXRyaXguZTtcclxuICAgICAgICB2YXIgdHkzID0geHcgKiBzcHJpdGVNYXRyaXguYiArIHNwcml0ZU1hdHJpeC5mO1xyXG5cclxuICAgICAgICBpZiAocm91bmRQaXhlbHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0eDAgPSBNYXRoLnJvdW5kKHR4MCk7XHJcbiAgICAgICAgICAgIHR5MCA9IE1hdGgucm91bmQodHkwKTtcclxuXHJcbiAgICAgICAgICAgIHR4MSA9IE1hdGgucm91bmQodHgxKTtcclxuICAgICAgICAgICAgdHkxID0gTWF0aC5yb3VuZCh0eTEpO1xyXG5cclxuICAgICAgICAgICAgdHgyID0gTWF0aC5yb3VuZCh0eDIpO1xyXG4gICAgICAgICAgICB0eTIgPSBNYXRoLnJvdW5kKHR5Mik7XHJcblxyXG4gICAgICAgICAgICB0eDMgPSBNYXRoLnJvdW5kKHR4Myk7XHJcbiAgICAgICAgICAgIHR5MyA9IE1hdGgucm91bmQodHkzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHBpcGVsaW5lLmJhdGNoUXVhZCh0eDAsIHR5MCwgdHgxLCB0eTEsIHR4MiwgdHkyLCB0eDMsIHR5MywgdTAsIHYwLCB1MSwgdjEsIHRpbnRUTCwgdGludFRSLCB0aW50QkwsIHRpbnRCUiwgdGludEVmZmVjdCwgdGV4dHVyZSwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNyb3ApXHJcbiAgICB7XHJcbiAgICAgICAgcGlwZWxpbmUuZmx1c2goKTtcclxuXHJcbiAgICAgICAgcmVuZGVyZXIucG9wU2Npc3NvcigpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBEeW5hbWljQml0bWFwVGV4dFdlYkdMUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapText.js":
/*!*****************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapText.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar GetBitmapTextSize = __webpack_require__(/*! ../GetBitmapTextSize */ \"./node_modules/phaser/src/gameobjects/bitmaptext/GetBitmapTextSize.js\");\r\nvar ParseFromAtlas = __webpack_require__(/*! ../ParseFromAtlas */ \"./node_modules/phaser/src/gameobjects/bitmaptext/ParseFromAtlas.js\");\r\nvar ParseXMLBitmapFont = __webpack_require__(/*! ../ParseXMLBitmapFont */ \"./node_modules/phaser/src/gameobjects/bitmaptext/ParseXMLBitmapFont.js\");\r\nvar Render = __webpack_require__(/*! ./BitmapTextRender */ \"./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextRender.js\");\r\n\r\n/**\r\n * @classdesc\r\n * BitmapText objects work by taking a texture file and an XML or JSON file that describes the font structure.\r\n * \r\n * During rendering for each letter of the text is rendered to the display, proportionally spaced out and aligned to\r\n * match the font structure.\r\n *\r\n * BitmapText objects are less flexible than Text objects, in that they have less features such as shadows, fills and the ability\r\n * to use Web Fonts, however you trade this flexibility for rendering speed. You can also create visually compelling BitmapTexts by\r\n * processing the font texture in an image editor, applying fills and any other effects required.\r\n *\r\n * To create multi-line text insert \\r, \\n or \\r\\n escape codes into the text string.\r\n *\r\n * To create a BitmapText data files you need a 3rd party app such as:\r\n *\r\n * BMFont (Windows, free): {@link http://www.angelcode.com/products/bmfont/|http://www.angelcode.com/products/bmfont/}\r\n * Glyph Designer (OS X, commercial): {@link http://www.71squared.com/en/glyphdesigner|http://www.71squared.com/en/glyphdesigner}\r\n * Littera (Web-based, free): {@link http://kvazars.com/littera/|http://kvazars.com/littera/}\r\n *\r\n * For most use cases it is recommended to use XML. If you wish to use JSON, the formatting should be equal to the result of\r\n * converting a valid XML file through the popular X2JS library. An online tool for conversion can be found here: {@link http://codebeautify.org/xmltojson|http://codebeautify.org/xmltojson}\r\n *\r\n * @class BitmapText\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Texture\r\n * @extends Phaser.GameObjects.Components.Tint\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. It can only belong to one Scene at any given time.\r\n * @param {number} x - The x coordinate of this Game Object in world space.\r\n * @param {number} y - The y coordinate of this Game Object in world space.\r\n * @param {string} font - The key of the font to use from the Bitmap Font cache.\r\n * @param {(string|string[])} [text] - The string, or array of strings, to be set as the content of this Bitmap Text.\r\n * @param {number} [size] - The font size of this Bitmap Text.\r\n * @param {integer} [align=0] - The alignment of the text in a multi-line BitmapText object.\r\n */\r\nvar BitmapText = new Class({\r\n\r\n Extends: GameObject,\r\n\r\n Mixins: [\r\n Components.Alpha,\r\n Components.BlendMode,\r\n Components.Depth,\r\n Components.Mask,\r\n Components.Origin,\r\n Components.Pipeline,\r\n Components.ScrollFactor,\r\n Components.Texture,\r\n Components.Tint,\r\n Components.Transform,\r\n Components.Visible,\r\n Render\r\n ],\r\n\r\n initialize:\r\n\r\n function BitmapText (scene, x, y, font, text, size, align)\r\n {\r\n if (text === undefined) { text = ''; }\r\n if (align === undefined) { align = 0; }\r\n\r\n GameObject.call(this, scene, 'BitmapText');\r\n\r\n /**\r\n * The key of the Bitmap Font used by this Bitmap Text.\r\n * To change the font after creation please use `setFont`.\r\n *\r\n * @name Phaser.GameObjects.BitmapText#font\r\n * @type {string}\r\n * @readonly\r\n * @since 3.0.0\r\n */\r\n this.font = font;\r\n\r\n var entry = this.scene.sys.cache.bitmapFont.get(font);\r\n\r\n /**\r\n * The data of the Bitmap Font used by this Bitmap Text.\r\n *\r\n * @name Phaser.GameObjects.BitmapText#fontData\r\n * @type {Phaser.Types.GameObjects.BitmapText.BitmapFontData}\r\n * @readonly\r\n * @since 3.0.0\r\n */\r\n this.fontData = entry.data;\r\n\r\n /**\r\n * The text that this Bitmap Text object displays.\r\n *\r\n * @name Phaser.GameObjects.BitmapText#_text\r\n * @type {string}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._text = '';\r\n\r\n /**\r\n * The font size of this Bitmap Text.\r\n *\r\n * @name Phaser.GameObjects.BitmapText#_fontSize\r\n * @type {number}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._fontSize = size || this.fontData.size;\r\n\r\n /**\r\n * Adds / Removes spacing between characters.\r\n *\r\n * Can be a negative or positive number.\r\n *\r\n * @name Phaser.GameObjects.BitmapText#_letterSpacing\r\n * @type {number}\r\n * @private\r\n * @since 3.4.0\r\n */\r\n this._letterSpacing = 0;\r\n\r\n /**\r\n * Controls the alignment of each line of text in this BitmapText object.\r\n * Only has any effect when this BitmapText contains multiple lines of text, split with carriage-returns.\r\n * Has no effect with single-lines of text.\r\n *\r\n * See the methods `setLeftAlign`, `setCenterAlign` and `setRightAlign`.\r\n *\r\n * 0 = Left aligned (default)\r\n * 1 = Middle aligned\r\n * 2 = Right aligned\r\n *\r\n * The alignment position is based on the longest line of text.\r\n *\r\n * @name Phaser.GameObjects.BitmapText#_align\r\n * @type {integer}\r\n * @private\r\n * @since 3.11.0\r\n */\r\n this._align = align;\r\n\r\n /**\r\n * An object that describes the size of this Bitmap Text.\r\n *\r\n * @name Phaser.GameObjects.BitmapText#_bounds\r\n * @type {Phaser.Types.GameObjects.BitmapText.BitmapTextSize}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._bounds = GetBitmapTextSize();\r\n\r\n /**\r\n * An internal dirty flag for bounds calculation.\r\n *\r\n * @name Phaser.GameObjects.BitmapText#_dirty\r\n * @type {boolean}\r\n * @private\r\n * @since 3.11.0\r\n */\r\n this._dirty = true;\r\n\r\n /**\r\n * Internal cache var holding the maxWidth.\r\n * \r\n * @name Phaser.GameObjects.BitmapText#_maxWidth\r\n * @type {number}\r\n * @private\r\n * @since 3.21.0\r\n */\r\n this._maxWidth = 0;\r\n\r\n /**\r\n * The character code used to detect for word wrapping.\r\n * Defaults to 32 (a space character).\r\n *\r\n * @name Phaser.GameObjects.BitmapText#wordWrapCharCode\r\n * @type {number}\r\n * @since 3.21.0\r\n */\r\n this.wordWrapCharCode = 32;\r\n\r\n this.setTexture(entry.texture, entry.frame);\r\n this.setPosition(x, y);\r\n this.setOrigin(0, 0);\r\n this.initPipeline();\r\n\r\n this.setText(text);\r\n },\r\n\r\n /**\r\n * Set the lines of text in this BitmapText to be left-aligned.\r\n * This only has any effect if this BitmapText contains more than one line of text.\r\n *\r\n * @method Phaser.GameObjects.BitmapText#setLeftAlign\r\n * @since 3.11.0\r\n *\r\n * @return {this} This BitmapText Object.\r\n */\r\n setLeftAlign: function ()\r\n {\r\n this._align = BitmapText.ALIGN_LEFT;\r\n\r\n this._dirty = true;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the lines of text in this BitmapText to be center-aligned.\r\n * This only has any effect if this BitmapText contains more than one line of text.\r\n *\r\n * @method Phaser.GameObjects.BitmapText#setCenterAlign\r\n * @since 3.11.0\r\n *\r\n * @return {this} This BitmapText Object.\r\n */\r\n setCenterAlign: function ()\r\n {\r\n this._align = BitmapText.ALIGN_CENTER;\r\n\r\n this._dirty = true;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the lines of text in this BitmapText to be right-aligned.\r\n * This only has any effect if this BitmapText contains more than one line of text.\r\n *\r\n * @method Phaser.GameObjects.BitmapText#setRightAlign\r\n * @since 3.11.0\r\n *\r\n * @return {this} This BitmapText Object.\r\n */\r\n setRightAlign: function ()\r\n {\r\n this._align = BitmapText.ALIGN_RIGHT;\r\n\r\n this._dirty = true;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the font size of this Bitmap Text.\r\n *\r\n * @method Phaser.GameObjects.BitmapText#setFontSize\r\n * @since 3.0.0\r\n *\r\n * @param {number} size - The font size to set.\r\n *\r\n * @return {this} This BitmapText Object.\r\n */\r\n setFontSize: function (size)\r\n {\r\n this._fontSize = size;\r\n\r\n this._dirty = true;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the letter spacing between each character of this Bitmap Text.\r\n * Can be a positive value to increase the space, or negative to reduce it.\r\n * Spacing is applied after the kerning values have been set.\r\n *\r\n * @method Phaser.GameObjects.BitmapText#setLetterSpacing\r\n * @since 3.4.0\r\n *\r\n * @param {number} [spacing=0] - The amount of horizontal space to add between each character.\r\n *\r\n * @return {this} This BitmapText Object.\r\n */\r\n setLetterSpacing: function (spacing)\r\n {\r\n if (spacing === undefined) { spacing = 0; }\r\n\r\n this._letterSpacing = spacing;\r\n\r\n this._dirty = true;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the textual content of this BitmapText.\r\n *\r\n * An array of strings will be converted into multi-line text. Use the align methods to change multi-line alignment.\r\n *\r\n * @method Phaser.GameObjects.BitmapText#setText\r\n * @since 3.0.0\r\n *\r\n * @param {(string|string[])} value - The string, or array of strings, to be set as the content of this BitmapText.\r\n *\r\n * @return {this} This BitmapText Object.\r\n */\r\n setText: function (value)\r\n {\r\n if (!value && value !== 0)\r\n {\r\n value = '';\r\n }\r\n\r\n if (Array.isArray(value))\r\n {\r\n value = value.join('\\n');\r\n }\r\n\r\n if (value !== this.text)\r\n {\r\n this._text = value.toString();\r\n\r\n this._dirty = true;\r\n\r\n this.updateDisplayOrigin();\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Calculate the bounds of this Bitmap Text.\r\n *\r\n * An object is returned that contains the position, width and height of the Bitmap Text in local and global\r\n * contexts.\r\n *\r\n * Local size is based on just the font size and a [0, 0] position.\r\n *\r\n * Global size takes into account the Game Object's scale, world position and display origin.\r\n *\r\n * Also in the object is data regarding the length of each line, should this be a multi-line BitmapText.\r\n *\r\n * @method Phaser.GameObjects.BitmapText#getTextBounds\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} [round] - Whether to round the results to the nearest integer.\r\n *\r\n * @return {Phaser.Types.GameObjects.BitmapText.BitmapTextSize} An object that describes the size of this Bitmap Text.\r\n */\r\n getTextBounds: function (round)\r\n {\r\n // local = The BitmapText based on fontSize and 0x0 coords\r\n // global = The BitmapText, taking into account scale and world position\r\n // lines = The BitmapText line data\r\n\r\n var bounds = this._bounds;\r\n\r\n if (this._dirty || this.scaleX !== bounds.scaleX || this.scaleY !== bounds.scaleY)\r\n {\r\n GetBitmapTextSize(this, round, bounds);\r\n\r\n this._dirty = false;\r\n\r\n this.updateDisplayOrigin();\r\n }\r\n\r\n return bounds;\r\n },\r\n\r\n /**\r\n * Changes the font this BitmapText is using to render.\r\n *\r\n * The new texture is loaded and applied to the BitmapText. The existing test, size and alignment are preserved,\r\n * unless overridden via the arguments.\r\n *\r\n * @method Phaser.GameObjects.BitmapText#setFont\r\n * @since 3.11.0\r\n *\r\n * @param {string} font - The key of the font to use from the Bitmap Font cache.\r\n * @param {number} [size] - The font size of this Bitmap Text. If not specified the current size will be used.\r\n * @param {integer} [align=0] - The alignment of the text in a multi-line BitmapText object. If not specified the current alignment will be used.\r\n *\r\n * @return {this} This BitmapText Object.\r\n */\r\n setFont: function (key, size, align)\r\n {\r\n if (size === undefined) { size = this._fontSize; }\r\n if (align === undefined) { align = this._align; }\r\n\r\n if (key !== this.font)\r\n {\r\n var entry = this.scene.sys.cache.bitmapFont.get(key);\r\n\r\n if (entry)\r\n {\r\n this.font = key;\r\n this.fontData = entry.data;\r\n this._fontSize = size;\r\n this._align = align;\r\n\r\n this.setTexture(entry.texture, entry.frame);\r\n\r\n GetBitmapTextSize(this, false, this._bounds);\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the maximum display width of this BitmapText in pixels.\r\n *\r\n * If `BitmapText.text` is longer than `maxWidth` then the lines will be automatically wrapped\r\n * based on the previous whitespace character found in the line.\r\n *\r\n * If no whitespace was found then no wrapping will take place and consequently the `maxWidth` value will not be honored.\r\n *\r\n * Disable maxWidth by setting the value to 0.\r\n * \r\n * You can set the whitespace character to be searched for by setting the `wordWrapCharCode` parameter or property.\r\n *\r\n * @method Phaser.GameObjects.BitmapText#setMaxWidth\r\n * @since 3.21.0\r\n *\r\n * @param {number} value - The maximum display width of this BitmapText in pixels. Set to zero to disable.\r\n * @param {number} [wordWrapCharCode] - The character code to check for when word wrapping. Defaults to 32 (the space character).\r\n *\r\n * @return {this} This BitmapText Object.\r\n */\r\n setMaxWidth: function (value, wordWrapCharCode)\r\n {\r\n this._maxWidth = value;\r\n\r\n this._dirty = true;\r\n\r\n if (wordWrapCharCode !== undefined)\r\n {\r\n this.wordWrapCharCode = wordWrapCharCode;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Controls the alignment of each line of text in this BitmapText object.\r\n *\r\n * Only has any effect when this BitmapText contains multiple lines of text, split with carriage-returns.\r\n * Has no effect with single-lines of text.\r\n *\r\n * See the methods `setLeftAlign`, `setCenterAlign` and `setRightAlign`.\r\n *\r\n * 0 = Left aligned (default)\r\n * 1 = Middle aligned\r\n * 2 = Right aligned\r\n *\r\n * The alignment position is based on the longest line of text.\r\n *\r\n * @name Phaser.GameObjects.BitmapText#align\r\n * @type {integer}\r\n * @since 3.11.0\r\n */\r\n align: {\r\n\r\n set: function (value)\r\n {\r\n this._align = value;\r\n this._dirty = true;\r\n },\r\n\r\n get: function ()\r\n {\r\n return this._align;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The text that this Bitmap Text object displays.\r\n *\r\n * You can also use the method `setText` if you want a chainable way to change the text content.\r\n *\r\n * @name Phaser.GameObjects.BitmapText#text\r\n * @type {string}\r\n * @since 3.0.0\r\n */\r\n text: {\r\n\r\n set: function (value)\r\n {\r\n this.setText(value);\r\n },\r\n\r\n get: function ()\r\n {\r\n return this._text;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The font size of this Bitmap Text.\r\n *\r\n * You can also use the method `setFontSize` if you want a chainable way to change the font size.\r\n *\r\n * @name Phaser.GameObjects.BitmapText#fontSize\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n fontSize: {\r\n\r\n set: function (value)\r\n {\r\n this._fontSize = value;\r\n this._dirty = true;\r\n },\r\n\r\n get: function ()\r\n {\r\n return this._fontSize;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Adds / Removes spacing between characters.\r\n *\r\n * Can be a negative or positive number.\r\n *\r\n * You can also use the method `setLetterSpacing` if you want a chainable way to change the letter spacing.\r\n *\r\n * @name Phaser.GameObjects.BitmapText#letterSpacing\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n letterSpacing: {\r\n\r\n set: function (value)\r\n {\r\n this._letterSpacing = value;\r\n this._dirty = true;\r\n },\r\n\r\n get: function ()\r\n {\r\n return this._letterSpacing;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The maximum display width of this BitmapText in pixels.\r\n *\r\n * If BitmapText.text is longer than maxWidth then the lines will be automatically wrapped\r\n * based on the last whitespace character found in the line.\r\n *\r\n * If no whitespace was found then no wrapping will take place and consequently the maxWidth value will not be honored.\r\n *\r\n * Disable maxWidth by setting the value to 0.\r\n *\r\n * @name Phaser.GameObjects.BitmapText#maxWidth\r\n * @type {number}\r\n * @since 3.21.0\r\n */\r\n maxWidth: {\r\n\r\n set: function (value)\r\n {\r\n this._maxWidth = value;\r\n this._dirty = true;\r\n },\r\n\r\n get: function ()\r\n {\r\n return this._maxWidth;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The width of this Bitmap Text.\r\n *\r\n * @name Phaser.GameObjects.BitmapText#width\r\n * @type {number}\r\n * @readonly\r\n * @since 3.0.0\r\n */\r\n width: {\r\n\r\n get: function ()\r\n {\r\n this.getTextBounds(false);\r\n\r\n return this._bounds.global.width;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The height of this bitmap text.\r\n *\r\n * @name Phaser.GameObjects.BitmapText#height\r\n * @type {number}\r\n * @readonly\r\n * @since 3.0.0\r\n */\r\n height: {\r\n\r\n get: function ()\r\n {\r\n this.getTextBounds(false);\r\n\r\n return this._bounds.global.height;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Build a JSON representation of this Bitmap Text.\r\n *\r\n * @method Phaser.GameObjects.BitmapText#toJSON\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Types.GameObjects.BitmapText.JSONBitmapText} A JSON representation of this Bitmap Text.\r\n */\r\n toJSON: function ()\r\n {\r\n var out = Components.ToJSON(this);\r\n\r\n // Extra data is added here\r\n\r\n var data = {\r\n font: this.font,\r\n text: this.text,\r\n fontSize: this.fontSize,\r\n letterSpacing: this.letterSpacing,\r\n align: this.align\r\n };\r\n\r\n out.data = data;\r\n\r\n return out;\r\n }\r\n\r\n});\r\n\r\n/**\r\n * Left align the text characters in a multi-line BitmapText object.\r\n *\r\n * @name Phaser.GameObjects.BitmapText.ALIGN_LEFT\r\n * @type {integer}\r\n * @since 3.11.0\r\n */\r\nBitmapText.ALIGN_LEFT = 0;\r\n\r\n/**\r\n * Center align the text characters in a multi-line BitmapText object.\r\n *\r\n * @name Phaser.GameObjects.BitmapText.ALIGN_CENTER\r\n * @type {integer}\r\n * @since 3.11.0\r\n */\r\nBitmapText.ALIGN_CENTER = 1;\r\n\r\n/**\r\n * Right align the text characters in a multi-line BitmapText object.\r\n *\r\n * @name Phaser.GameObjects.BitmapText.ALIGN_RIGHT\r\n * @type {integer}\r\n * @since 3.11.0\r\n */\r\nBitmapText.ALIGN_RIGHT = 2;\r\n\r\n/**\r\n * Parse an XML Bitmap Font from an Atlas.\r\n *\r\n * Adds the parsed Bitmap Font data to the cache with the `fontName` key.\r\n *\r\n * @name Phaser.GameObjects.BitmapText.ParseFromAtlas\r\n * @type {function}\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to parse the Bitmap Font for.\r\n * @param {string} fontName - The key of the font to add to the Bitmap Font cache.\r\n * @param {string} textureKey - The key of the BitmapFont's texture.\r\n * @param {string} frameKey - The key of the BitmapFont texture's frame.\r\n * @param {string} xmlKey - The key of the XML data of the font to parse.\r\n * @param {integer} [xSpacing] - The x-axis spacing to add between each letter.\r\n * @param {integer} [ySpacing] - The y-axis spacing to add to the line height.\r\n *\r\n * @return {boolean} Whether the parsing was successful or not.\r\n */\r\nBitmapText.ParseFromAtlas = ParseFromAtlas;\r\n\r\n/**\r\n * Parse an XML font to Bitmap Font data for the Bitmap Font cache.\r\n *\r\n * @name Phaser.GameObjects.BitmapText.ParseXMLBitmapFont\r\n * @type {function}\r\n * @since 3.17.0\r\n *\r\n * @param {XMLDocument} xml - The XML Document to parse the font from.\r\n * @param {integer} [xSpacing=0] - The x-axis spacing to add between each letter.\r\n * @param {integer} [ySpacing=0] - The y-axis spacing to add to the line height.\r\n * @param {Phaser.Textures.Frame} [frame] - The texture frame to take into account while parsing.\r\n *\r\n * @return {Phaser.Types.GameObjects.BitmapText.BitmapFontData} The parsed Bitmap Font data.\r\n */\r\nBitmapText.ParseXMLBitmapFont = ParseXMLBitmapFont;\r\n\r\nmodule.exports = BitmapText;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L3N0YXRpYy9CaXRtYXBUZXh0LmpzPzM3NGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxzRUFBc0I7QUFDMUMsaUJBQWlCLG1CQUFPLENBQUMsbUZBQWtCO0FBQzNDLGlCQUFpQixtQkFBTyxDQUFDLDZFQUFrQjtBQUMzQyx3QkFBd0IsbUJBQU8sQ0FBQyxtR0FBc0I7QUFDdEQscUJBQXFCLG1CQUFPLENBQUMsNkZBQW1CO0FBQ2hELHlCQUF5QixtQkFBTyxDQUFDLHFHQUF1QjtBQUN4RCxhQUFhLG1CQUFPLENBQUMsdUdBQW9COztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUIsdUNBQXVDO0FBQ3ZDLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0EsbUhBQW1IO0FBQ25IO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsa0JBQWtCO0FBQzdCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxpQ0FBaUMsV0FBVztBQUM1QyxrQ0FBa0MsV0FBVzs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsYUFBYTs7QUFFakQ7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGtCQUFrQjtBQUNqQztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsbURBQW1EO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsdUJBQXVCO0FBQ3hELGtDQUFrQyxxQkFBcUI7O0FBRXZEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1EQUFtRDtBQUNuRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxzQkFBc0I7QUFDakM7QUFDQSxZQUFZLG1EQUFtRDtBQUMvRDtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvYml0bWFwdGV4dC9zdGF0aWMvQml0bWFwVGV4dC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENvbXBvbmVudHMgPSByZXF1aXJlKCcuLi8uLi9jb21wb25lbnRzJyk7XHJcbnZhciBHYW1lT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vR2FtZU9iamVjdCcpO1xyXG52YXIgR2V0Qml0bWFwVGV4dFNpemUgPSByZXF1aXJlKCcuLi9HZXRCaXRtYXBUZXh0U2l6ZScpO1xyXG52YXIgUGFyc2VGcm9tQXRsYXMgPSByZXF1aXJlKCcuLi9QYXJzZUZyb21BdGxhcycpO1xyXG52YXIgUGFyc2VYTUxCaXRtYXBGb250ID0gcmVxdWlyZSgnLi4vUGFyc2VYTUxCaXRtYXBGb250Jyk7XHJcbnZhciBSZW5kZXIgPSByZXF1aXJlKCcuL0JpdG1hcFRleHRSZW5kZXInKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEJpdG1hcFRleHQgb2JqZWN0cyB3b3JrIGJ5IHRha2luZyBhIHRleHR1cmUgZmlsZSBhbmQgYW4gWE1MIG9yIEpTT04gZmlsZSB0aGF0IGRlc2NyaWJlcyB0aGUgZm9udCBzdHJ1Y3R1cmUuXHJcbiAqIFxyXG4gKiBEdXJpbmcgcmVuZGVyaW5nIGZvciBlYWNoIGxldHRlciBvZiB0aGUgdGV4dCBpcyByZW5kZXJlZCB0byB0aGUgZGlzcGxheSwgcHJvcG9ydGlvbmFsbHkgc3BhY2VkIG91dCBhbmQgYWxpZ25lZCB0b1xyXG4gKiBtYXRjaCB0aGUgZm9udCBzdHJ1Y3R1cmUuXHJcbiAqXHJcbiAqIEJpdG1hcFRleHQgb2JqZWN0cyBhcmUgbGVzcyBmbGV4aWJsZSB0aGFuIFRleHQgb2JqZWN0cywgaW4gdGhhdCB0aGV5IGhhdmUgbGVzcyBmZWF0dXJlcyBzdWNoIGFzIHNoYWRvd3MsIGZpbGxzIGFuZCB0aGUgYWJpbGl0eVxyXG4gKiB0byB1c2UgV2ViIEZvbnRzLCBob3dldmVyIHlvdSB0cmFkZSB0aGlzIGZsZXhpYmlsaXR5IGZvciByZW5kZXJpbmcgc3BlZWQuIFlvdSBjYW4gYWxzbyBjcmVhdGUgdmlzdWFsbHkgY29tcGVsbGluZyBCaXRtYXBUZXh0cyBieVxyXG4gKiBwcm9jZXNzaW5nIHRoZSBmb250IHRleHR1cmUgaW4gYW4gaW1hZ2UgZWRpdG9yLCBhcHBseWluZyBmaWxscyBhbmQgYW55IG90aGVyIGVmZmVjdHMgcmVxdWlyZWQuXHJcbiAqXHJcbiAqIFRvIGNyZWF0ZSBtdWx0aS1saW5lIHRleHQgaW5zZXJ0IFxcciwgXFxuIG9yIFxcclxcbiBlc2NhcGUgY29kZXMgaW50byB0aGUgdGV4dCBzdHJpbmcuXHJcbiAqXHJcbiAqIFRvIGNyZWF0ZSBhIEJpdG1hcFRleHQgZGF0YSBmaWxlcyB5b3UgbmVlZCBhIDNyZCBwYXJ0eSBhcHAgc3VjaCBhczpcclxuICpcclxuICogQk1Gb250IChXaW5kb3dzLCBmcmVlKToge0BsaW5rIGh0dHA6Ly93d3cuYW5nZWxjb2RlLmNvbS9wcm9kdWN0cy9ibWZvbnQvfGh0dHA6Ly93d3cuYW5nZWxjb2RlLmNvbS9wcm9kdWN0cy9ibWZvbnQvfVxyXG4gKiBHbHlwaCBEZXNpZ25lciAoT1MgWCwgY29tbWVyY2lhbCk6IHtAbGluayBodHRwOi8vd3d3Ljcxc3F1YXJlZC5jb20vZW4vZ2x5cGhkZXNpZ25lcnxodHRwOi8vd3d3Ljcxc3F1YXJlZC5jb20vZW4vZ2x5cGhkZXNpZ25lcn1cclxuICogTGl0dGVyYSAoV2ViLWJhc2VkLCBmcmVlKToge0BsaW5rIGh0dHA6Ly9rdmF6YXJzLmNvbS9saXR0ZXJhL3xodHRwOi8va3ZhemFycy5jb20vbGl0dGVyYS99XHJcbiAqXHJcbiAqIEZvciBtb3N0IHVzZSBjYXNlcyBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgWE1MLiBJZiB5b3Ugd2lzaCB0byB1c2UgSlNPTiwgdGhlIGZvcm1hdHRpbmcgc2hvdWxkIGJlIGVxdWFsIHRvIHRoZSByZXN1bHQgb2ZcclxuICogY29udmVydGluZyBhIHZhbGlkIFhNTCBmaWxlIHRocm91Z2ggdGhlIHBvcHVsYXIgWDJKUyBsaWJyYXJ5LiBBbiBvbmxpbmUgdG9vbCBmb3IgY29udmVyc2lvbiBjYW4gYmUgZm91bmQgaGVyZToge0BsaW5rIGh0dHA6Ly9jb2RlYmVhdXRpZnkub3JnL3htbHRvanNvbnxodHRwOi8vY29kZWJlYXV0aWZ5Lm9yZy94bWx0b2pzb259XHJcbiAqXHJcbiAqIEBjbGFzcyBCaXRtYXBUZXh0XHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbHBoYVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5CbGVuZE1vZGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGhcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuTWFza1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5PcmlnaW5cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGlwZWxpbmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2Nyb2xsRmFjdG9yXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRleHR1cmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGludFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVmlzaWJsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBHYW1lIE9iamVjdCBiZWxvbmdzLiBJdCBjYW4gb25seSBiZWxvbmcgdG8gb25lIFNjZW5lIGF0IGFueSBnaXZlbiB0aW1lLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB3b3JsZCBzcGFjZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gd29ybGQgc3BhY2UuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb250IC0gVGhlIGtleSBvZiB0aGUgZm9udCB0byB1c2UgZnJvbSB0aGUgQml0bWFwIEZvbnQgY2FjaGUuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xzdHJpbmdbXSl9IFt0ZXh0XSAtIFRoZSBzdHJpbmcsIG9yIGFycmF5IG9mIHN0cmluZ3MsIHRvIGJlIHNldCBhcyB0aGUgY29udGVudCBvZiB0aGlzIEJpdG1hcCBUZXh0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3NpemVdIC0gVGhlIGZvbnQgc2l6ZSBvZiB0aGlzIEJpdG1hcCBUZXh0LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFthbGlnbj0wXSAtIFRoZSBhbGlnbm1lbnQgb2YgdGhlIHRleHQgaW4gYSBtdWx0aS1saW5lIEJpdG1hcFRleHQgb2JqZWN0LlxyXG4gKi9cclxudmFyIEJpdG1hcFRleHQgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEdhbWVPYmplY3QsXHJcblxyXG4gICAgTWl4aW5zOiBbXHJcbiAgICAgICAgQ29tcG9uZW50cy5BbHBoYSxcclxuICAgICAgICBDb21wb25lbnRzLkJsZW5kTW9kZSxcclxuICAgICAgICBDb21wb25lbnRzLkRlcHRoLFxyXG4gICAgICAgIENvbXBvbmVudHMuTWFzayxcclxuICAgICAgICBDb21wb25lbnRzLk9yaWdpbixcclxuICAgICAgICBDb21wb25lbnRzLlBpcGVsaW5lLFxyXG4gICAgICAgIENvbXBvbmVudHMuU2Nyb2xsRmFjdG9yLFxyXG4gICAgICAgIENvbXBvbmVudHMuVGV4dHVyZSxcclxuICAgICAgICBDb21wb25lbnRzLlRpbnQsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UcmFuc2Zvcm0sXHJcbiAgICAgICAgQ29tcG9uZW50cy5WaXNpYmxlLFxyXG4gICAgICAgIFJlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEJpdG1hcFRleHQgKHNjZW5lLCB4LCB5LCBmb250LCB0ZXh0LCBzaXplLCBhbGlnbilcclxuICAgIHtcclxuICAgICAgICBpZiAodGV4dCA9PT0gdW5kZWZpbmVkKSB7IHRleHQgPSAnJzsgfVxyXG4gICAgICAgIGlmIChhbGlnbiA9PT0gdW5kZWZpbmVkKSB7IGFsaWduID0gMDsgfVxyXG5cclxuICAgICAgICBHYW1lT2JqZWN0LmNhbGwodGhpcywgc2NlbmUsICdCaXRtYXBUZXh0Jyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBrZXkgb2YgdGhlIEJpdG1hcCBGb250IHVzZWQgYnkgdGhpcyBCaXRtYXAgVGV4dC5cclxuICAgICAgICAgKiBUbyBjaGFuZ2UgdGhlIGZvbnQgYWZ0ZXIgY3JlYXRpb24gcGxlYXNlIHVzZSBgc2V0Rm9udGAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dCNmb250XHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZvbnQgPSBmb250O1xyXG5cclxuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnNjZW5lLnN5cy5jYWNoZS5iaXRtYXBGb250LmdldChmb250KTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRhdGEgb2YgdGhlIEJpdG1hcCBGb250IHVzZWQgYnkgdGhpcyBCaXRtYXAgVGV4dC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0I2ZvbnREYXRhXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0LkJpdG1hcEZvbnREYXRhfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZm9udERhdGEgPSBlbnRyeS5kYXRhO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGV4dCB0aGF0IHRoaXMgQml0bWFwIFRleHQgb2JqZWN0IGRpc3BsYXlzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkJpdG1hcFRleHQjX3RleHRcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGV4dCA9ICcnO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZm9udCBzaXplIG9mIHRoaXMgQml0bWFwIFRleHQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dCNfZm9udFNpemVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fZm9udFNpemUgPSBzaXplIHx8IHRoaXMuZm9udERhdGEuc2l6ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQWRkcyAvIFJlbW92ZXMgc3BhY2luZyBiZXR3ZWVuIGNoYXJhY3RlcnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBDYW4gYmUgYSBuZWdhdGl2ZSBvciBwb3NpdGl2ZSBudW1iZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dCNfbGV0dGVyU3BhY2luZ1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9sZXR0ZXJTcGFjaW5nID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ29udHJvbHMgdGhlIGFsaWdubWVudCBvZiBlYWNoIGxpbmUgb2YgdGV4dCBpbiB0aGlzIEJpdG1hcFRleHQgb2JqZWN0LlxyXG4gICAgICAgICAqIE9ubHkgaGFzIGFueSBlZmZlY3Qgd2hlbiB0aGlzIEJpdG1hcFRleHQgY29udGFpbnMgbXVsdGlwbGUgbGluZXMgb2YgdGV4dCwgc3BsaXQgd2l0aCBjYXJyaWFnZS1yZXR1cm5zLlxyXG4gICAgICAgICAqIEhhcyBubyBlZmZlY3Qgd2l0aCBzaW5nbGUtbGluZXMgb2YgdGV4dC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFNlZSB0aGUgbWV0aG9kcyBgc2V0TGVmdEFsaWduYCwgYHNldENlbnRlckFsaWduYCBhbmQgYHNldFJpZ2h0QWxpZ25gLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogMCA9IExlZnQgYWxpZ25lZCAoZGVmYXVsdClcclxuICAgICAgICAgKiAxID0gTWlkZGxlIGFsaWduZWRcclxuICAgICAgICAgKiAyID0gUmlnaHQgYWxpZ25lZFxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhlIGFsaWdubWVudCBwb3NpdGlvbiBpcyBiYXNlZCBvbiB0aGUgbG9uZ2VzdCBsaW5lIG9mIHRleHQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dCNfYWxpZ25cclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9hbGlnbiA9IGFsaWduO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBkZXNjcmliZXMgdGhlIHNpemUgb2YgdGhpcyBCaXRtYXAgVGV4dC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0I19ib3VuZHNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkJpdG1hcFRleHQuQml0bWFwVGV4dFNpemV9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9ib3VuZHMgPSBHZXRCaXRtYXBUZXh0U2l6ZSgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBpbnRlcm5hbCBkaXJ0eSBmbGFnIGZvciBib3VuZHMgY2FsY3VsYXRpb24uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dCNfZGlydHlcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIGNhY2hlIHZhciBob2xkaW5nIHRoZSBtYXhXaWR0aC5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dCNfbWF4V2lkdGhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX21heFdpZHRoID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNoYXJhY3RlciBjb2RlIHVzZWQgdG8gZGV0ZWN0IGZvciB3b3JkIHdyYXBwaW5nLlxyXG4gICAgICAgICAqIERlZmF1bHRzIHRvIDMyIChhIHNwYWNlIGNoYXJhY3RlcikuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dCN3b3JkV3JhcENoYXJDb2RlXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4yMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy53b3JkV3JhcENoYXJDb2RlID0gMzI7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VGV4dHVyZShlbnRyeS50ZXh0dXJlLCBlbnRyeS5mcmFtZSk7XHJcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcclxuICAgICAgICB0aGlzLnNldE9yaWdpbigwLCAwKTtcclxuICAgICAgICB0aGlzLmluaXRQaXBlbGluZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFRleHQodGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBsaW5lcyBvZiB0ZXh0IGluIHRoaXMgQml0bWFwVGV4dCB0byBiZSBsZWZ0LWFsaWduZWQuXHJcbiAgICAgKiBUaGlzIG9ubHkgaGFzIGFueSBlZmZlY3QgaWYgdGhpcyBCaXRtYXBUZXh0IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgbGluZSBvZiB0ZXh0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkJpdG1hcFRleHQjc2V0TGVmdEFsaWduXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBCaXRtYXBUZXh0IE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0TGVmdEFsaWduOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX2FsaWduID0gQml0bWFwVGV4dC5BTElHTl9MRUZUO1xyXG5cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgbGluZXMgb2YgdGV4dCBpbiB0aGlzIEJpdG1hcFRleHQgdG8gYmUgY2VudGVyLWFsaWduZWQuXHJcbiAgICAgKiBUaGlzIG9ubHkgaGFzIGFueSBlZmZlY3QgaWYgdGhpcyBCaXRtYXBUZXh0IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgbGluZSBvZiB0ZXh0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkJpdG1hcFRleHQjc2V0Q2VudGVyQWxpZ25cclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEJpdG1hcFRleHQgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRDZW50ZXJBbGlnbjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9hbGlnbiA9IEJpdG1hcFRleHQuQUxJR05fQ0VOVEVSO1xyXG5cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgbGluZXMgb2YgdGV4dCBpbiB0aGlzIEJpdG1hcFRleHQgdG8gYmUgcmlnaHQtYWxpZ25lZC5cclxuICAgICAqIFRoaXMgb25seSBoYXMgYW55IGVmZmVjdCBpZiB0aGlzIEJpdG1hcFRleHQgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBsaW5lIG9mIHRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dCNzZXRSaWdodEFsaWduXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBCaXRtYXBUZXh0IE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0UmlnaHRBbGlnbjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9hbGlnbiA9IEJpdG1hcFRleHQuQUxJR05fUklHSFQ7XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBmb250IHNpemUgb2YgdGhpcyBCaXRtYXAgVGV4dC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0I3NldEZvbnRTaXplXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZSAtIFRoZSBmb250IHNpemUgdG8gc2V0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgQml0bWFwVGV4dCBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEZvbnRTaXplOiBmdW5jdGlvbiAoc2l6ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9mb250U2l6ZSA9IHNpemU7XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgbGV0dGVyIHNwYWNpbmcgYmV0d2VlbiBlYWNoIGNoYXJhY3RlciBvZiB0aGlzIEJpdG1hcCBUZXh0LlxyXG4gICAgICogQ2FuIGJlIGEgcG9zaXRpdmUgdmFsdWUgdG8gaW5jcmVhc2UgdGhlIHNwYWNlLCBvciBuZWdhdGl2ZSB0byByZWR1Y2UgaXQuXHJcbiAgICAgKiBTcGFjaW5nIGlzIGFwcGxpZWQgYWZ0ZXIgdGhlIGtlcm5pbmcgdmFsdWVzIGhhdmUgYmVlbiBzZXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dCNzZXRMZXR0ZXJTcGFjaW5nXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3NwYWNpbmc9MF0gLSBUaGUgYW1vdW50IG9mIGhvcml6b250YWwgc3BhY2UgdG8gYWRkIGJldHdlZW4gZWFjaCBjaGFyYWN0ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBCaXRtYXBUZXh0IE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0TGV0dGVyU3BhY2luZzogZnVuY3Rpb24gKHNwYWNpbmcpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHNwYWNpbmcgPT09IHVuZGVmaW5lZCkgeyBzcGFjaW5nID0gMDsgfVxyXG5cclxuICAgICAgICB0aGlzLl9sZXR0ZXJTcGFjaW5nID0gc3BhY2luZztcclxuXHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHRleHR1YWwgY29udGVudCBvZiB0aGlzIEJpdG1hcFRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQW4gYXJyYXkgb2Ygc3RyaW5ncyB3aWxsIGJlIGNvbnZlcnRlZCBpbnRvIG11bHRpLWxpbmUgdGV4dC4gVXNlIHRoZSBhbGlnbiBtZXRob2RzIHRvIGNoYW5nZSBtdWx0aS1saW5lIGFsaWdubWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0I3NldFRleHRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xzdHJpbmdbXSl9IHZhbHVlIC0gVGhlIHN0cmluZywgb3IgYXJyYXkgb2Ygc3RyaW5ncywgdG8gYmUgc2V0IGFzIHRoZSBjb250ZW50IG9mIHRoaXMgQml0bWFwVGV4dC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEJpdG1hcFRleHQgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmpvaW4oJ1xcbicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLnRleHQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdmFsdWUudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzcGxheU9yaWdpbigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBib3VuZHMgb2YgdGhpcyBCaXRtYXAgVGV4dC5cclxuICAgICAqXHJcbiAgICAgKiBBbiBvYmplY3QgaXMgcmV0dXJuZWQgdGhhdCBjb250YWlucyB0aGUgcG9zaXRpb24sIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIEJpdG1hcCBUZXh0IGluIGxvY2FsIGFuZCBnbG9iYWxcclxuICAgICAqIGNvbnRleHRzLlxyXG4gICAgICpcclxuICAgICAqIExvY2FsIHNpemUgaXMgYmFzZWQgb24ganVzdCB0aGUgZm9udCBzaXplIGFuZCBhIFswLCAwXSBwb3NpdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBHbG9iYWwgc2l6ZSB0YWtlcyBpbnRvIGFjY291bnQgdGhlIEdhbWUgT2JqZWN0J3Mgc2NhbGUsIHdvcmxkIHBvc2l0aW9uIGFuZCBkaXNwbGF5IG9yaWdpbi5cclxuICAgICAqXHJcbiAgICAgKiBBbHNvIGluIHRoZSBvYmplY3QgaXMgZGF0YSByZWdhcmRpbmcgdGhlIGxlbmd0aCBvZiBlYWNoIGxpbmUsIHNob3VsZCB0aGlzIGJlIGEgbXVsdGktbGluZSBCaXRtYXBUZXh0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkJpdG1hcFRleHQjZ2V0VGV4dEJvdW5kc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcm91bmRdIC0gV2hldGhlciB0byByb3VuZCB0aGUgcmVzdWx0cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0LkJpdG1hcFRleHRTaXplfSBBbiBvYmplY3QgdGhhdCBkZXNjcmliZXMgdGhlIHNpemUgb2YgdGhpcyBCaXRtYXAgVGV4dC5cclxuICAgICAqL1xyXG4gICAgZ2V0VGV4dEJvdW5kczogZnVuY3Rpb24gKHJvdW5kKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBsb2NhbCA9IFRoZSBCaXRtYXBUZXh0IGJhc2VkIG9uIGZvbnRTaXplIGFuZCAweDAgY29vcmRzXHJcbiAgICAgICAgLy8gIGdsb2JhbCA9IFRoZSBCaXRtYXBUZXh0LCB0YWtpbmcgaW50byBhY2NvdW50IHNjYWxlIGFuZCB3b3JsZCBwb3NpdGlvblxyXG4gICAgICAgIC8vICBsaW5lcyA9IFRoZSBCaXRtYXBUZXh0IGxpbmUgZGF0YVxyXG5cclxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZGlydHkgfHwgdGhpcy5zY2FsZVggIT09IGJvdW5kcy5zY2FsZVggfHwgdGhpcy5zY2FsZVkgIT09IGJvdW5kcy5zY2FsZVkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBHZXRCaXRtYXBUZXh0U2l6ZSh0aGlzLCByb3VuZCwgYm91bmRzKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXlPcmlnaW4oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBib3VuZHM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hhbmdlcyB0aGUgZm9udCB0aGlzIEJpdG1hcFRleHQgaXMgdXNpbmcgdG8gcmVuZGVyLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBuZXcgdGV4dHVyZSBpcyBsb2FkZWQgYW5kIGFwcGxpZWQgdG8gdGhlIEJpdG1hcFRleHQuIFRoZSBleGlzdGluZyB0ZXN0LCBzaXplIGFuZCBhbGlnbm1lbnQgYXJlIHByZXNlcnZlZCxcclxuICAgICAqIHVubGVzcyBvdmVycmlkZGVuIHZpYSB0aGUgYXJndW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkJpdG1hcFRleHQjc2V0Rm9udFxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmb250IC0gVGhlIGtleSBvZiB0aGUgZm9udCB0byB1c2UgZnJvbSB0aGUgQml0bWFwIEZvbnQgY2FjaGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3NpemVdIC0gVGhlIGZvbnQgc2l6ZSBvZiB0aGlzIEJpdG1hcCBUZXh0LiBJZiBub3Qgc3BlY2lmaWVkIHRoZSBjdXJyZW50IHNpemUgd2lsbCBiZSB1c2VkLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbYWxpZ249MF0gLSBUaGUgYWxpZ25tZW50IG9mIHRoZSB0ZXh0IGluIGEgbXVsdGktbGluZSBCaXRtYXBUZXh0IG9iamVjdC4gSWYgbm90IHNwZWNpZmllZCB0aGUgY3VycmVudCBhbGlnbm1lbnQgd2lsbCBiZSB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgQml0bWFwVGV4dCBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEZvbnQ6IGZ1bmN0aW9uIChrZXksIHNpemUsIGFsaWduKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChzaXplID09PSB1bmRlZmluZWQpIHsgc2l6ZSA9IHRoaXMuX2ZvbnRTaXplOyB9XHJcbiAgICAgICAgaWYgKGFsaWduID09PSB1bmRlZmluZWQpIHsgYWxpZ24gPSB0aGlzLl9hbGlnbjsgfVxyXG5cclxuICAgICAgICBpZiAoa2V5ICE9PSB0aGlzLmZvbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnNjZW5lLnN5cy5jYWNoZS5iaXRtYXBGb250LmdldChrZXkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVudHJ5KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvbnQgPSBrZXk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvbnREYXRhID0gZW50cnkuZGF0YTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnRTaXplID0gc2l6ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2FsaWduID0gYWxpZ247XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUZXh0dXJlKGVudHJ5LnRleHR1cmUsIGVudHJ5LmZyYW1lKTtcclxuXHJcbiAgICAgICAgICAgICAgICBHZXRCaXRtYXBUZXh0U2l6ZSh0aGlzLCBmYWxzZSwgdGhpcy5fYm91bmRzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgbWF4aW11bSBkaXNwbGF5IHdpZHRoIG9mIHRoaXMgQml0bWFwVGV4dCBpbiBwaXhlbHMuXHJcbiAgICAgKlxyXG4gICAgICogSWYgYEJpdG1hcFRleHQudGV4dGAgaXMgbG9uZ2VyIHRoYW4gYG1heFdpZHRoYCB0aGVuIHRoZSBsaW5lcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgd3JhcHBlZFxyXG4gICAgICogYmFzZWQgb24gdGhlIHByZXZpb3VzIHdoaXRlc3BhY2UgY2hhcmFjdGVyIGZvdW5kIGluIHRoZSBsaW5lLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIHdoaXRlc3BhY2Ugd2FzIGZvdW5kIHRoZW4gbm8gd3JhcHBpbmcgd2lsbCB0YWtlIHBsYWNlIGFuZCBjb25zZXF1ZW50bHkgdGhlIGBtYXhXaWR0aGAgdmFsdWUgd2lsbCBub3QgYmUgaG9ub3JlZC5cclxuICAgICAqXHJcbiAgICAgKiBEaXNhYmxlIG1heFdpZHRoIGJ5IHNldHRpbmcgdGhlIHZhbHVlIHRvIDAuXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSB3aGl0ZXNwYWNlIGNoYXJhY3RlciB0byBiZSBzZWFyY2hlZCBmb3IgYnkgc2V0dGluZyB0aGUgYHdvcmRXcmFwQ2hhckNvZGVgIHBhcmFtZXRlciBvciBwcm9wZXJ0eS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0I3NldE1heFdpZHRoXHJcbiAgICAgKiBAc2luY2UgMy4yMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIG1heGltdW0gZGlzcGxheSB3aWR0aCBvZiB0aGlzIEJpdG1hcFRleHQgaW4gcGl4ZWxzLiBTZXQgdG8gemVybyB0byBkaXNhYmxlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3b3JkV3JhcENoYXJDb2RlXSAtIFRoZSBjaGFyYWN0ZXIgY29kZSB0byBjaGVjayBmb3Igd2hlbiB3b3JkIHdyYXBwaW5nLiBEZWZhdWx0cyB0byAzMiAodGhlIHNwYWNlIGNoYXJhY3RlcikuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBCaXRtYXBUZXh0IE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0TWF4V2lkdGg6IGZ1bmN0aW9uICh2YWx1ZSwgd29yZFdyYXBDaGFyQ29kZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9tYXhXaWR0aCA9IHZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh3b3JkV3JhcENoYXJDb2RlICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLndvcmRXcmFwQ2hhckNvZGUgPSB3b3JkV3JhcENoYXJDb2RlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udHJvbHMgdGhlIGFsaWdubWVudCBvZiBlYWNoIGxpbmUgb2YgdGV4dCBpbiB0aGlzIEJpdG1hcFRleHQgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIE9ubHkgaGFzIGFueSBlZmZlY3Qgd2hlbiB0aGlzIEJpdG1hcFRleHQgY29udGFpbnMgbXVsdGlwbGUgbGluZXMgb2YgdGV4dCwgc3BsaXQgd2l0aCBjYXJyaWFnZS1yZXR1cm5zLlxyXG4gICAgICogSGFzIG5vIGVmZmVjdCB3aXRoIHNpbmdsZS1saW5lcyBvZiB0ZXh0LlxyXG4gICAgICpcclxuICAgICAqIFNlZSB0aGUgbWV0aG9kcyBgc2V0TGVmdEFsaWduYCwgYHNldENlbnRlckFsaWduYCBhbmQgYHNldFJpZ2h0QWxpZ25gLlxyXG4gICAgICpcclxuICAgICAqIDAgPSBMZWZ0IGFsaWduZWQgKGRlZmF1bHQpXHJcbiAgICAgKiAxID0gTWlkZGxlIGFsaWduZWRcclxuICAgICAqIDIgPSBSaWdodCBhbGlnbmVkXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGFsaWdubWVudCBwb3NpdGlvbiBpcyBiYXNlZCBvbiB0aGUgbG9uZ2VzdCBsaW5lIG9mIHRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkJpdG1hcFRleHQjYWxpZ25cclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICovXHJcbiAgICBhbGlnbjoge1xyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FsaWduID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYWxpZ247XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdGV4dCB0aGF0IHRoaXMgQml0bWFwIFRleHQgb2JqZWN0IGRpc3BsYXlzLlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gYWxzbyB1c2UgdGhlIG1ldGhvZCBgc2V0VGV4dGAgaWYgeW91IHdhbnQgYSBjaGFpbmFibGUgd2F5IHRvIGNoYW5nZSB0aGUgdGV4dCBjb250ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0I3RleHRcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdGV4dDoge1xyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VGV4dCh2YWx1ZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZm9udCBzaXplIG9mIHRoaXMgQml0bWFwIFRleHQuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBhbHNvIHVzZSB0aGUgbWV0aG9kIGBzZXRGb250U2l6ZWAgaWYgeW91IHdhbnQgYSBjaGFpbmFibGUgd2F5IHRvIGNoYW5nZSB0aGUgZm9udCBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0I2ZvbnRTaXplXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGZvbnRTaXplOiB7XHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fZm9udFNpemUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250U2l6ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgLyBSZW1vdmVzIHNwYWNpbmcgYmV0d2VlbiBjaGFyYWN0ZXJzLlxyXG4gICAgICpcclxuICAgICAqIENhbiBiZSBhIG5lZ2F0aXZlIG9yIHBvc2l0aXZlIG51bWJlci5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIGFsc28gdXNlIHRoZSBtZXRob2QgYHNldExldHRlclNwYWNpbmdgIGlmIHlvdSB3YW50IGEgY2hhaW5hYmxlIHdheSB0byBjaGFuZ2UgdGhlIGxldHRlciBzcGFjaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0I2xldHRlclNwYWNpbmdcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgbGV0dGVyU3BhY2luZzoge1xyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xldHRlclNwYWNpbmcgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZXR0ZXJTcGFjaW5nO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1heGltdW0gZGlzcGxheSB3aWR0aCBvZiB0aGlzIEJpdG1hcFRleHQgaW4gcGl4ZWxzLlxyXG4gICAgICpcclxuICAgICAqIElmIEJpdG1hcFRleHQudGV4dCBpcyBsb25nZXIgdGhhbiBtYXhXaWR0aCB0aGVuIHRoZSBsaW5lcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgd3JhcHBlZFxyXG4gICAgICogYmFzZWQgb24gdGhlIGxhc3Qgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgZm91bmQgaW4gdGhlIGxpbmUuXHJcbiAgICAgKlxyXG4gICAgICogSWYgbm8gd2hpdGVzcGFjZSB3YXMgZm91bmQgdGhlbiBubyB3cmFwcGluZyB3aWxsIHRha2UgcGxhY2UgYW5kIGNvbnNlcXVlbnRseSB0aGUgbWF4V2lkdGggdmFsdWUgd2lsbCBub3QgYmUgaG9ub3JlZC5cclxuICAgICAqXHJcbiAgICAgKiBEaXNhYmxlIG1heFdpZHRoIGJ5IHNldHRpbmcgdGhlIHZhbHVlIHRvIDAuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkJpdG1hcFRleHQjbWF4V2lkdGhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4yMS4wXHJcbiAgICAgKi9cclxuICAgIG1heFdpZHRoOiB7XHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fbWF4V2lkdGggPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXhXaWR0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGlzIEJpdG1hcCBUZXh0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0I3dpZHRoXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgd2lkdGg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRUZXh0Qm91bmRzKGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ib3VuZHMuZ2xvYmFsLndpZHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGlzIGJpdG1hcCB0ZXh0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0I2hlaWdodFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGhlaWdodDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmdldFRleHRCb3VuZHMoZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JvdW5kcy5nbG9iYWwuaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQnVpbGQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgQml0bWFwIFRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dCN0b0pTT05cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0LkpTT05CaXRtYXBUZXh0fSBBIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhpcyBCaXRtYXAgVGV4dC5cclxuICAgICAqL1xyXG4gICAgdG9KU09OOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBvdXQgPSBDb21wb25lbnRzLlRvSlNPTih0aGlzKTtcclxuXHJcbiAgICAgICAgLy8gIEV4dHJhIGRhdGEgaXMgYWRkZWQgaGVyZVxyXG5cclxuICAgICAgICB2YXIgZGF0YSA9IHtcclxuICAgICAgICAgICAgZm9udDogdGhpcy5mb250LFxyXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHQsXHJcbiAgICAgICAgICAgIGZvbnRTaXplOiB0aGlzLmZvbnRTaXplLFxyXG4gICAgICAgICAgICBsZXR0ZXJTcGFjaW5nOiB0aGlzLmxldHRlclNwYWNpbmcsXHJcbiAgICAgICAgICAgIGFsaWduOiB0aGlzLmFsaWduXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgb3V0LmRhdGEgPSBkYXRhO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG4vKipcclxuICogTGVmdCBhbGlnbiB0aGUgdGV4dCBjaGFyYWN0ZXJzIGluIGEgbXVsdGktbGluZSBCaXRtYXBUZXh0IG9iamVjdC5cclxuICpcclxuICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkJpdG1hcFRleHQuQUxJR05fTEVGVFxyXG4gKiBAdHlwZSB7aW50ZWdlcn1cclxuICogQHNpbmNlIDMuMTEuMFxyXG4gKi9cclxuQml0bWFwVGV4dC5BTElHTl9MRUZUID0gMDtcclxuXHJcbi8qKlxyXG4gKiBDZW50ZXIgYWxpZ24gdGhlIHRleHQgY2hhcmFjdGVycyBpbiBhIG11bHRpLWxpbmUgQml0bWFwVGV4dCBvYmplY3QuXHJcbiAqXHJcbiAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0LkFMSUdOX0NFTlRFUlxyXG4gKiBAdHlwZSB7aW50ZWdlcn1cclxuICogQHNpbmNlIDMuMTEuMFxyXG4gKi9cclxuQml0bWFwVGV4dC5BTElHTl9DRU5URVIgPSAxO1xyXG5cclxuLyoqXHJcbiAqIFJpZ2h0IGFsaWduIHRoZSB0ZXh0IGNoYXJhY3RlcnMgaW4gYSBtdWx0aS1saW5lIEJpdG1hcFRleHQgb2JqZWN0LlxyXG4gKlxyXG4gKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dC5BTElHTl9SSUdIVFxyXG4gKiBAdHlwZSB7aW50ZWdlcn1cclxuICogQHNpbmNlIDMuMTEuMFxyXG4gKi9cclxuQml0bWFwVGV4dC5BTElHTl9SSUdIVCA9IDI7XHJcblxyXG4vKipcclxuICogUGFyc2UgYW4gWE1MIEJpdG1hcCBGb250IGZyb20gYW4gQXRsYXMuXHJcbiAqXHJcbiAqIEFkZHMgdGhlIHBhcnNlZCBCaXRtYXAgRm9udCBkYXRhIHRvIHRoZSBjYWNoZSB3aXRoIHRoZSBgZm9udE5hbWVgIGtleS5cclxuICpcclxuICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkJpdG1hcFRleHQuUGFyc2VGcm9tQXRsYXNcclxuICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRvIHBhcnNlIHRoZSBCaXRtYXAgRm9udCBmb3IuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb250TmFtZSAtIFRoZSBrZXkgb2YgdGhlIGZvbnQgdG8gYWRkIHRvIHRoZSBCaXRtYXAgRm9udCBjYWNoZS5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRleHR1cmVLZXkgLSBUaGUga2V5IG9mIHRoZSBCaXRtYXBGb250J3MgdGV4dHVyZS5cclxuICogQHBhcmFtIHtzdHJpbmd9IGZyYW1lS2V5IC0gVGhlIGtleSBvZiB0aGUgQml0bWFwRm9udCB0ZXh0dXJlJ3MgZnJhbWUuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB4bWxLZXkgLSBUaGUga2V5IG9mIHRoZSBYTUwgZGF0YSBvZiB0aGUgZm9udCB0byBwYXJzZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbeFNwYWNpbmddIC0gVGhlIHgtYXhpcyBzcGFjaW5nIHRvIGFkZCBiZXR3ZWVuIGVhY2ggbGV0dGVyLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFt5U3BhY2luZ10gLSBUaGUgeS1heGlzIHNwYWNpbmcgdG8gYWRkIHRvIHRoZSBsaW5lIGhlaWdodC5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgcGFyc2luZyB3YXMgc3VjY2Vzc2Z1bCBvciBub3QuXHJcbiAqL1xyXG5CaXRtYXBUZXh0LlBhcnNlRnJvbUF0bGFzID0gUGFyc2VGcm9tQXRsYXM7XHJcblxyXG4vKipcclxuICogUGFyc2UgYW4gWE1MIGZvbnQgdG8gQml0bWFwIEZvbnQgZGF0YSBmb3IgdGhlIEJpdG1hcCBGb250IGNhY2hlLlxyXG4gKlxyXG4gKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dC5QYXJzZVhNTEJpdG1hcEZvbnRcclxuICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gKiBAc2luY2UgMy4xNy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7WE1MRG9jdW1lbnR9IHhtbCAtIFRoZSBYTUwgRG9jdW1lbnQgdG8gcGFyc2UgdGhlIGZvbnQgZnJvbS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbeFNwYWNpbmc9MF0gLSBUaGUgeC1heGlzIHNwYWNpbmcgdG8gYWRkIGJldHdlZW4gZWFjaCBsZXR0ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW3lTcGFjaW5nPTBdIC0gVGhlIHktYXhpcyBzcGFjaW5nIHRvIGFkZCB0byB0aGUgbGluZSBoZWlnaHQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlRleHR1cmVzLkZyYW1lfSBbZnJhbWVdIC0gVGhlIHRleHR1cmUgZnJhbWUgdG8gdGFrZSBpbnRvIGFjY291bnQgd2hpbGUgcGFyc2luZy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkJpdG1hcFRleHQuQml0bWFwRm9udERhdGF9IFRoZSBwYXJzZWQgQml0bWFwIEZvbnQgZGF0YS5cclxuICovXHJcbkJpdG1hcFRleHQuUGFyc2VYTUxCaXRtYXBGb250ID0gUGFyc2VYTUxCaXRtYXBGb250O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBCaXRtYXBUZXh0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapText.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextCanvasRenderer.js":
/*!*******************************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextCanvasRenderer.js ***!
\*******************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.BitmapText#renderCanvas\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.BitmapText} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar BitmapTextCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var text = src._text;\r\n var textLength = text.length;\r\n\r\n var ctx = renderer.currentContext;\r\n\r\n if (textLength === 0 || !SetTransform(renderer, ctx, src, camera, parentMatrix))\r\n {\r\n return;\r\n }\r\n \r\n var textureFrame = src.frame;\r\n\r\n var chars = src.fontData.chars;\r\n var lineHeight = src.fontData.lineHeight;\r\n var letterSpacing = src._letterSpacing;\r\n\r\n var xAdvance = 0;\r\n var yAdvance = 0;\r\n\r\n var charCode = 0;\r\n\r\n var glyph = null;\r\n var glyphX = 0;\r\n var glyphY = 0;\r\n var glyphW = 0;\r\n var glyphH = 0;\r\n\r\n var x = 0;\r\n var y = 0;\r\n\r\n var lastGlyph = null;\r\n var lastCharCode = 0;\r\n\r\n var image = src.frame.source.image;\r\n\r\n var textureX = textureFrame.cutX;\r\n var textureY = textureFrame.cutY;\r\n\r\n var scale = (src._fontSize / src.fontData.size);\r\n\r\n var align = src._align;\r\n var currentLine = 0;\r\n var lineOffsetX = 0;\r\n\r\n // Update the bounds - skipped internally if not dirty\r\n var bounds = src.getTextBounds(false);\r\n\r\n // In case the method above changed it (word wrapping)\r\n if (src.maxWidth > 0)\r\n {\r\n text = bounds.wrappedText;\r\n textLength = text.length;\r\n }\r\n\r\n var lineData = src._bounds.lines;\r\n\r\n if (align === 1)\r\n {\r\n lineOffsetX = (lineData.longest - lineData.lengths[0]) / 2;\r\n }\r\n else if (align === 2)\r\n {\r\n lineOffsetX = (lineData.longest - lineData.lengths[0]);\r\n }\r\n\r\n ctx.translate(-src.displayOriginX, -src.displayOriginY);\r\n\r\n var roundPixels = camera.roundPixels;\r\n\r\n for (var i = 0; i < textLength; i++)\r\n {\r\n charCode = text.charCodeAt(i);\r\n\r\n if (charCode === 10)\r\n {\r\n currentLine++;\r\n\r\n if (align === 1)\r\n {\r\n lineOffsetX = (lineData.longest - lineData.lengths[currentLine]) / 2;\r\n }\r\n else if (align === 2)\r\n {\r\n lineOffsetX = (lineData.longest - lineData.lengths[currentLine]);\r\n }\r\n\r\n xAdvance = 0;\r\n yAdvance += lineHeight;\r\n lastGlyph = null;\r\n\r\n continue;\r\n }\r\n\r\n glyph = chars[charCode];\r\n\r\n if (!glyph)\r\n {\r\n continue;\r\n }\r\n\r\n glyphX = textureX + glyph.x;\r\n glyphY = textureY + glyph.y;\r\n\r\n glyphW = glyph.width;\r\n glyphH = glyph.height;\r\n\r\n x = glyph.xOffset + xAdvance;\r\n y = glyph.yOffset + yAdvance;\r\n\r\n if (lastGlyph !== null)\r\n {\r\n var kerningOffset = glyph.kerning[lastCharCode];\r\n x += (kerningOffset !== undefined) ? kerningOffset : 0;\r\n }\r\n\r\n x *= scale;\r\n y *= scale;\r\n\r\n x += lineOffsetX;\r\n\r\n xAdvance += glyph.xAdvance + letterSpacing;\r\n lastGlyph = glyph;\r\n lastCharCode = charCode;\r\n\r\n // Nothing to render or a space? Then skip to the next glyph\r\n if (glyphW === 0 || glyphH === 0 || charCode === 32)\r\n {\r\n continue;\r\n }\r\n\r\n if (roundPixels)\r\n {\r\n x = Math.round(x);\r\n y = Math.round(y);\r\n }\r\n\r\n ctx.save();\r\n\r\n ctx.translate(x, y);\r\n\r\n ctx.scale(scale, scale);\r\n\r\n ctx.drawImage(image, glyphX, glyphY, glyphW, glyphH, 0, 0, glyphW, glyphH);\r\n\r\n ctx.restore();\r\n }\r\n\r\n ctx.restore();\r\n};\r\n\r\nmodule.exports = BitmapTextCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L3N0YXRpYy9CaXRtYXBUZXh0Q2FudmFzUmVuZGVyZXIuanM/NDc3YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsbUJBQW1CLG1CQUFPLENBQUMsb0hBQTZDOztBQUV4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNDQUFzQztBQUNqRCxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixnQkFBZ0I7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L3N0YXRpYy9CaXRtYXBUZXh0Q2FudmFzUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBTZXRUcmFuc2Zvcm0gPSByZXF1aXJlKCcuLi8uLi8uLi9yZW5kZXJlci9jYW52YXMvdXRpbHMvU2V0VHJhbnNmb3JtJyk7XHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIENhbnZhcyBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkJpdG1hcFRleHQjcmVuZGVyQ2FudmFzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIENhbnZhcyByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dH0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIEJpdG1hcFRleHRDYW52YXNSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHZhciB0ZXh0ID0gc3JjLl90ZXh0O1xyXG4gICAgdmFyIHRleHRMZW5ndGggPSB0ZXh0Lmxlbmd0aDtcclxuXHJcbiAgICB2YXIgY3R4ID0gcmVuZGVyZXIuY3VycmVudENvbnRleHQ7XHJcblxyXG4gICAgaWYgKHRleHRMZW5ndGggPT09IDAgfHwgIVNldFRyYW5zZm9ybShyZW5kZXJlciwgY3R4LCBzcmMsIGNhbWVyYSwgcGFyZW50TWF0cml4KSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHZhciB0ZXh0dXJlRnJhbWUgPSBzcmMuZnJhbWU7XHJcblxyXG4gICAgdmFyIGNoYXJzID0gc3JjLmZvbnREYXRhLmNoYXJzO1xyXG4gICAgdmFyIGxpbmVIZWlnaHQgPSBzcmMuZm9udERhdGEubGluZUhlaWdodDtcclxuICAgIHZhciBsZXR0ZXJTcGFjaW5nID0gc3JjLl9sZXR0ZXJTcGFjaW5nO1xyXG5cclxuICAgIHZhciB4QWR2YW5jZSA9IDA7XHJcbiAgICB2YXIgeUFkdmFuY2UgPSAwO1xyXG5cclxuICAgIHZhciBjaGFyQ29kZSA9IDA7XHJcblxyXG4gICAgdmFyIGdseXBoID0gbnVsbDtcclxuICAgIHZhciBnbHlwaFggPSAwO1xyXG4gICAgdmFyIGdseXBoWSA9IDA7XHJcbiAgICB2YXIgZ2x5cGhXID0gMDtcclxuICAgIHZhciBnbHlwaEggPSAwO1xyXG5cclxuICAgIHZhciB4ID0gMDtcclxuICAgIHZhciB5ID0gMDtcclxuXHJcbiAgICB2YXIgbGFzdEdseXBoID0gbnVsbDtcclxuICAgIHZhciBsYXN0Q2hhckNvZGUgPSAwO1xyXG5cclxuICAgIHZhciBpbWFnZSA9IHNyYy5mcmFtZS5zb3VyY2UuaW1hZ2U7XHJcblxyXG4gICAgdmFyIHRleHR1cmVYID0gdGV4dHVyZUZyYW1lLmN1dFg7XHJcbiAgICB2YXIgdGV4dHVyZVkgPSB0ZXh0dXJlRnJhbWUuY3V0WTtcclxuXHJcbiAgICB2YXIgc2NhbGUgPSAoc3JjLl9mb250U2l6ZSAvIHNyYy5mb250RGF0YS5zaXplKTtcclxuXHJcbiAgICB2YXIgYWxpZ24gPSBzcmMuX2FsaWduO1xyXG4gICAgdmFyIGN1cnJlbnRMaW5lID0gMDtcclxuICAgIHZhciBsaW5lT2Zmc2V0WCA9IDA7XHJcblxyXG4gICAgLy8gIFVwZGF0ZSB0aGUgYm91bmRzIC0gc2tpcHBlZCBpbnRlcm5hbGx5IGlmIG5vdCBkaXJ0eVxyXG4gICAgdmFyIGJvdW5kcyA9IHNyYy5nZXRUZXh0Qm91bmRzKGZhbHNlKTtcclxuXHJcbiAgICAvLyAgSW4gY2FzZSB0aGUgbWV0aG9kIGFib3ZlIGNoYW5nZWQgaXQgKHdvcmQgd3JhcHBpbmcpXHJcbiAgICBpZiAoc3JjLm1heFdpZHRoID4gMClcclxuICAgIHtcclxuICAgICAgICB0ZXh0ID0gYm91bmRzLndyYXBwZWRUZXh0O1xyXG4gICAgICAgIHRleHRMZW5ndGggPSB0ZXh0Lmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbGluZURhdGEgPSBzcmMuX2JvdW5kcy5saW5lcztcclxuXHJcbiAgICBpZiAoYWxpZ24gPT09IDEpXHJcbiAgICB7XHJcbiAgICAgICAgbGluZU9mZnNldFggPSAobGluZURhdGEubG9uZ2VzdCAtIGxpbmVEYXRhLmxlbmd0aHNbMF0pIC8gMjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGFsaWduID09PSAyKVxyXG4gICAge1xyXG4gICAgICAgIGxpbmVPZmZzZXRYID0gKGxpbmVEYXRhLmxvbmdlc3QgLSBsaW5lRGF0YS5sZW5ndGhzWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBjdHgudHJhbnNsYXRlKC1zcmMuZGlzcGxheU9yaWdpblgsIC1zcmMuZGlzcGxheU9yaWdpblkpO1xyXG5cclxuICAgIHZhciByb3VuZFBpeGVscyA9IGNhbWVyYS5yb3VuZFBpeGVscztcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHRMZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChpKTtcclxuXHJcbiAgICAgICAgaWYgKGNoYXJDb2RlID09PSAxMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRMaW5lKys7XHJcblxyXG4gICAgICAgICAgICBpZiAoYWxpZ24gPT09IDEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxpbmVPZmZzZXRYID0gKGxpbmVEYXRhLmxvbmdlc3QgLSBsaW5lRGF0YS5sZW5ndGhzW2N1cnJlbnRMaW5lXSkgLyAyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGFsaWduID09PSAyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsaW5lT2Zmc2V0WCA9IChsaW5lRGF0YS5sb25nZXN0IC0gbGluZURhdGEubGVuZ3Roc1tjdXJyZW50TGluZV0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB4QWR2YW5jZSA9IDA7XHJcbiAgICAgICAgICAgIHlBZHZhbmNlICs9IGxpbmVIZWlnaHQ7XHJcbiAgICAgICAgICAgIGxhc3RHbHlwaCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdseXBoID0gY2hhcnNbY2hhckNvZGVdO1xyXG5cclxuICAgICAgICBpZiAoIWdseXBoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnbHlwaFggPSB0ZXh0dXJlWCArIGdseXBoLng7XHJcbiAgICAgICAgZ2x5cGhZID0gdGV4dHVyZVkgKyBnbHlwaC55O1xyXG5cclxuICAgICAgICBnbHlwaFcgPSBnbHlwaC53aWR0aDtcclxuICAgICAgICBnbHlwaEggPSBnbHlwaC5oZWlnaHQ7XHJcblxyXG4gICAgICAgIHggPSBnbHlwaC54T2Zmc2V0ICsgeEFkdmFuY2U7XHJcbiAgICAgICAgeSA9IGdseXBoLnlPZmZzZXQgKyB5QWR2YW5jZTtcclxuXHJcbiAgICAgICAgaWYgKGxhc3RHbHlwaCAhPT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBrZXJuaW5nT2Zmc2V0ID0gZ2x5cGgua2VybmluZ1tsYXN0Q2hhckNvZGVdO1xyXG4gICAgICAgICAgICB4ICs9IChrZXJuaW5nT2Zmc2V0ICE9PSB1bmRlZmluZWQpID8ga2VybmluZ09mZnNldCA6IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB4ICo9IHNjYWxlO1xyXG4gICAgICAgIHkgKj0gc2NhbGU7XHJcblxyXG4gICAgICAgIHggKz0gbGluZU9mZnNldFg7XHJcblxyXG4gICAgICAgIHhBZHZhbmNlICs9IGdseXBoLnhBZHZhbmNlICsgbGV0dGVyU3BhY2luZztcclxuICAgICAgICBsYXN0R2x5cGggPSBnbHlwaDtcclxuICAgICAgICBsYXN0Q2hhckNvZGUgPSBjaGFyQ29kZTtcclxuXHJcbiAgICAgICAgLy8gIE5vdGhpbmcgdG8gcmVuZGVyIG9yIGEgc3BhY2U/IFRoZW4gc2tpcCB0byB0aGUgbmV4dCBnbHlwaFxyXG4gICAgICAgIGlmIChnbHlwaFcgPT09IDAgfHwgZ2x5cGhIID09PSAwIHx8IGNoYXJDb2RlID09PSAzMilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJvdW5kUGl4ZWxzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgeCA9IE1hdGgucm91bmQoeCk7XHJcbiAgICAgICAgICAgIHkgPSBNYXRoLnJvdW5kKHkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY3R4LnNhdmUoKTtcclxuXHJcbiAgICAgICAgY3R4LnRyYW5zbGF0ZSh4LCB5KTtcclxuXHJcbiAgICAgICAgY3R4LnNjYWxlKHNjYWxlLCBzY2FsZSk7XHJcblxyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1hZ2UsIGdseXBoWCwgZ2x5cGhZLCBnbHlwaFcsIGdseXBoSCwgMCwgMCwgZ2x5cGhXLCBnbHlwaEgpO1xyXG5cclxuICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGN0eC5yZXN0b3JlKCk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJpdG1hcFRleHRDYW52YXNSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextCreator.js":
/*!************************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextCreator.js ***!
\************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BitmapText = __webpack_require__(/*! ./BitmapText */ \"./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapText.js\");\r\nvar BuildGameObject = __webpack_require__(/*! ../../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar GetValue = __webpack_require__(/*! ../../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\n\r\n/**\r\n * Creates a new Bitmap Text Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Bitmap Text Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#bitmapText\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.BitmapText.BitmapTextConfig} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n * \r\n * @return {Phaser.GameObjects.BitmapText} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('bitmapText', function (config, addToScene)\r\n{\r\n if (config === undefined) { config = {}; }\r\n\r\n var font = GetValue(config, 'font', '');\r\n var text = GetAdvancedValue(config, 'text', '');\r\n var size = GetAdvancedValue(config, 'size', false);\r\n var align = GetValue(config, 'align', 0);\r\n\r\n var bitmapText = new BitmapText(this.scene, 0, 0, font, text, size, align);\r\n\r\n if (addToScene !== undefined)\r\n {\r\n config.add = addToScene;\r\n }\r\n\r\n BuildGameObject(this.scene, bitmapText, config);\r\n\r\n return bitmapText;\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectCreator context.\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L3N0YXRpYy9CaXRtYXBUZXh0Q3JlYXRvci5qcz9jOGQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQywyRkFBYztBQUN2QyxzQkFBc0IsbUJBQU8sQ0FBQyx1RkFBdUI7QUFDckQsd0JBQXdCLG1CQUFPLENBQUMsMkZBQXlCO0FBQ3pELHVCQUF1QixtQkFBTyxDQUFDLDBHQUF3QztBQUN2RSxlQUFlLG1CQUFPLENBQUMsMEZBQWdDOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxREFBcUQ7QUFDaEUsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGFBQWE7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2JpdG1hcHRleHQvc3RhdGljL0JpdG1hcFRleHRDcmVhdG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQml0bWFwVGV4dCA9IHJlcXVpcmUoJy4vQml0bWFwVGV4dCcpO1xyXG52YXIgQnVpbGRHYW1lT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vQnVpbGRHYW1lT2JqZWN0Jyk7XHJcbnZhciBHYW1lT2JqZWN0Q3JlYXRvciA9IHJlcXVpcmUoJy4uLy4uL0dhbWVPYmplY3RDcmVhdG9yJyk7XHJcbnZhciBHZXRBZHZhbmNlZFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvb2JqZWN0L0dldEFkdmFuY2VkVmFsdWUnKTtcclxudmFyIEdldFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvb2JqZWN0L0dldFZhbHVlJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBCaXRtYXAgVGV4dCBHYW1lIE9iamVjdCBhbmQgcmV0dXJucyBpdC5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgQml0bWFwIFRleHQgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI2JpdG1hcFRleHRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkJpdG1hcFRleHQuQml0bWFwVGV4dENvbmZpZ30gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gY3JlYXRlIGl0c2VsZi5cclxuICogQHBhcmFtIHtib29sZWFufSBbYWRkVG9TY2VuZV0gLSBBZGQgdGhpcyBHYW1lIE9iamVjdCB0byB0aGUgU2NlbmUgYWZ0ZXIgY3JlYXRpbmcgaXQ/IElmIHNldCB0aGlzIGFyZ3VtZW50IG92ZXJyaWRlcyB0aGUgYGFkZGAgcHJvcGVydHkgaW4gdGhlIGNvbmZpZyBvYmplY3QuXHJcbiAqIFxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0Q3JlYXRvci5yZWdpc3RlcignYml0bWFwVGV4dCcsIGZ1bmN0aW9uIChjb25maWcsIGFkZFRvU2NlbmUpXHJcbntcclxuICAgIGlmIChjb25maWcgPT09IHVuZGVmaW5lZCkgeyBjb25maWcgPSB7fTsgfVxyXG5cclxuICAgIHZhciBmb250ID0gR2V0VmFsdWUoY29uZmlnLCAnZm9udCcsICcnKTtcclxuICAgIHZhciB0ZXh0ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICd0ZXh0JywgJycpO1xyXG4gICAgdmFyIHNpemUgPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ3NpemUnLCBmYWxzZSk7XHJcbiAgICB2YXIgYWxpZ24gPSBHZXRWYWx1ZShjb25maWcsICdhbGlnbicsIDApO1xyXG5cclxuICAgIHZhciBiaXRtYXBUZXh0ID0gbmV3IEJpdG1hcFRleHQodGhpcy5zY2VuZSwgMCwgMCwgZm9udCwgdGV4dCwgc2l6ZSwgYWxpZ24pO1xyXG5cclxuICAgIGlmIChhZGRUb1NjZW5lICE9PSB1bmRlZmluZWQpXHJcbiAgICB7XHJcbiAgICAgICAgY29uZmlnLmFkZCA9IGFkZFRvU2NlbmU7XHJcbiAgICB9XHJcblxyXG4gICAgQnVpbGRHYW1lT2JqZWN0KHRoaXMuc2NlbmUsIGJpdG1hcFRleHQsIGNvbmZpZyk7XHJcblxyXG4gICAgcmV0dXJuIGJpdG1hcFRleHQ7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RDcmVhdG9yIGNvbnRleHQuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextCreator.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextFactory.js":
/*!************************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextFactory.js ***!
\************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BitmapText = __webpack_require__(/*! ./BitmapText */ \"./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapText.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Bitmap Text Game Object and adds it to the Scene.\r\n * \r\n * BitmapText objects work by taking a texture file and an XML or JSON file that describes the font structure.\r\n * \r\n * During rendering for each letter of the text is rendered to the display, proportionally spaced out and aligned to\r\n * match the font structure.\r\n * \r\n * BitmapText objects are less flexible than Text objects, in that they have less features such as shadows, fills and the ability\r\n * to use Web Fonts, however you trade this flexibility for rendering speed. You can also create visually compelling BitmapTexts by\r\n * processing the font texture in an image editor, applying fills and any other effects required.\r\n *\r\n * To create multi-line text insert \\r, \\n or \\r\\n escape codes into the text string.\r\n *\r\n * To create a BitmapText data files you need a 3rd party app such as:\r\n *\r\n * BMFont (Windows, free): http://www.angelcode.com/products/bmfont/\r\n * Glyph Designer (OS X, commercial): http://www.71squared.com/en/glyphdesigner\r\n * Littera (Web-based, free): http://kvazars.com/littera/\r\n *\r\n * For most use cases it is recommended to use XML. If you wish to use JSON, the formatting should be equal to the result of\r\n * converting a valid XML file through the popular X2JS library. An online tool for conversion can be found here: http://codebeautify.org/xmltojson\r\n *\r\n * Note: This method will only be available if the Bitmap Text Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#bitmapText\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x position of the Game Object.\r\n * @param {number} y - The y position of the Game Object.\r\n * @param {string} font - The key of the font to use from the BitmapFont cache.\r\n * @param {(string|string[])} [text] - The string, or array of strings, to be set as the content of this Bitmap Text.\r\n * @param {number} [size] - The font size to set.\r\n * @param {integer} [align=0] - The alignment of the text in a multi-line BitmapText object.\r\n *\r\n * @return {Phaser.GameObjects.BitmapText} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('bitmapText', function (x, y, font, text, size, align)\r\n{\r\n return this.displayList.add(new BitmapText(this.scene, x, y, font, text, size, align));\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n// There are several properties available to use:\r\n//\r\n// this.scene - a reference to the Scene that owns the GameObjectFactory\r\n// this.displayList - a reference to the Display List the Scene owns\r\n// this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L3N0YXRpYy9CaXRtYXBUZXh0RmFjdG9yeS5qcz80MjEwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQywyRkFBYztBQUN2Qyx3QkFBd0IsbUJBQU8sQ0FBQywyRkFBeUI7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2JpdG1hcHRleHQvc3RhdGljL0JpdG1hcFRleHRGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQml0bWFwVGV4dCA9IHJlcXVpcmUoJy4vQml0bWFwVGV4dCcpO1xyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgQml0bWFwIFRleHQgR2FtZSBPYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIFNjZW5lLlxyXG4gKiBcclxuICogQml0bWFwVGV4dCBvYmplY3RzIHdvcmsgYnkgdGFraW5nIGEgdGV4dHVyZSBmaWxlIGFuZCBhbiBYTUwgb3IgSlNPTiBmaWxlIHRoYXQgZGVzY3JpYmVzIHRoZSBmb250IHN0cnVjdHVyZS5cclxuICogXHJcbiAqIER1cmluZyByZW5kZXJpbmcgZm9yIGVhY2ggbGV0dGVyIG9mIHRoZSB0ZXh0IGlzIHJlbmRlcmVkIHRvIHRoZSBkaXNwbGF5LCBwcm9wb3J0aW9uYWxseSBzcGFjZWQgb3V0IGFuZCBhbGlnbmVkIHRvXHJcbiAqIG1hdGNoIHRoZSBmb250IHN0cnVjdHVyZS5cclxuICogXHJcbiAqIEJpdG1hcFRleHQgb2JqZWN0cyBhcmUgbGVzcyBmbGV4aWJsZSB0aGFuIFRleHQgb2JqZWN0cywgaW4gdGhhdCB0aGV5IGhhdmUgbGVzcyBmZWF0dXJlcyBzdWNoIGFzIHNoYWRvd3MsIGZpbGxzIGFuZCB0aGUgYWJpbGl0eVxyXG4gKiB0byB1c2UgV2ViIEZvbnRzLCBob3dldmVyIHlvdSB0cmFkZSB0aGlzIGZsZXhpYmlsaXR5IGZvciByZW5kZXJpbmcgc3BlZWQuIFlvdSBjYW4gYWxzbyBjcmVhdGUgdmlzdWFsbHkgY29tcGVsbGluZyBCaXRtYXBUZXh0cyBieVxyXG4gKiBwcm9jZXNzaW5nIHRoZSBmb250IHRleHR1cmUgaW4gYW4gaW1hZ2UgZWRpdG9yLCBhcHBseWluZyBmaWxscyBhbmQgYW55IG90aGVyIGVmZmVjdHMgcmVxdWlyZWQuXHJcbiAqXHJcbiAqIFRvIGNyZWF0ZSBtdWx0aS1saW5lIHRleHQgaW5zZXJ0IFxcciwgXFxuIG9yIFxcclxcbiBlc2NhcGUgY29kZXMgaW50byB0aGUgdGV4dCBzdHJpbmcuXHJcbiAqXHJcbiAqIFRvIGNyZWF0ZSBhIEJpdG1hcFRleHQgZGF0YSBmaWxlcyB5b3UgbmVlZCBhIDNyZCBwYXJ0eSBhcHAgc3VjaCBhczpcclxuICpcclxuICogQk1Gb250IChXaW5kb3dzLCBmcmVlKTogaHR0cDovL3d3dy5hbmdlbGNvZGUuY29tL3Byb2R1Y3RzL2JtZm9udC9cclxuICogR2x5cGggRGVzaWduZXIgKE9TIFgsIGNvbW1lcmNpYWwpOiBodHRwOi8vd3d3Ljcxc3F1YXJlZC5jb20vZW4vZ2x5cGhkZXNpZ25lclxyXG4gKiBMaXR0ZXJhIChXZWItYmFzZWQsIGZyZWUpOiBodHRwOi8va3ZhemFycy5jb20vbGl0dGVyYS9cclxuICpcclxuICogRm9yIG1vc3QgdXNlIGNhc2VzIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBYTUwuIElmIHlvdSB3aXNoIHRvIHVzZSBKU09OLCB0aGUgZm9ybWF0dGluZyBzaG91bGQgYmUgZXF1YWwgdG8gdGhlIHJlc3VsdCBvZlxyXG4gKiBjb252ZXJ0aW5nIGEgdmFsaWQgWE1MIGZpbGUgdGhyb3VnaCB0aGUgcG9wdWxhciBYMkpTIGxpYnJhcnkuIEFuIG9ubGluZSB0b29sIGZvciBjb252ZXJzaW9uIGNhbiBiZSBmb3VuZCBoZXJlOiBodHRwOi8vY29kZWJlYXV0aWZ5Lm9yZy94bWx0b2pzb25cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgQml0bWFwIFRleHQgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I2JpdG1hcFRleHRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggcG9zaXRpb24gb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IHBvc2l0aW9uIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd9IGZvbnQgLSBUaGUga2V5IG9mIHRoZSBmb250IHRvIHVzZSBmcm9tIHRoZSBCaXRtYXBGb250IGNhY2hlLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8c3RyaW5nW10pfSBbdGV4dF0gLSBUaGUgc3RyaW5nLCBvciBhcnJheSBvZiBzdHJpbmdzLCB0byBiZSBzZXQgYXMgdGhlIGNvbnRlbnQgb2YgdGhpcyBCaXRtYXAgVGV4dC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzaXplXSAtIFRoZSBmb250IHNpemUgdG8gc2V0LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFthbGlnbj0wXSAtIFRoZSBhbGlnbm1lbnQgb2YgdGhlIHRleHQgaW4gYSBtdWx0aS1saW5lIEJpdG1hcFRleHQgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQml0bWFwVGV4dH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0RmFjdG9yeS5yZWdpc3RlcignYml0bWFwVGV4dCcsIGZ1bmN0aW9uICh4LCB5LCBmb250LCB0ZXh0LCBzaXplLCBhbGlnbilcclxue1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheUxpc3QuYWRkKG5ldyBCaXRtYXBUZXh0KHRoaXMuc2NlbmUsIHgsIHksIGZvbnQsIHRleHQsIHNpemUsIGFsaWduKSk7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RGYWN0b3J5IGNvbnRleHQuXHJcbi8vXHJcbi8vICBUaGVyZSBhcmUgc2V2ZXJhbCBwcm9wZXJ0aWVzIGF2YWlsYWJsZSB0byB1c2U6XHJcbi8vXHJcbi8vICB0aGlzLnNjZW5lIC0gYSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgb3ducyB0aGUgR2FtZU9iamVjdEZhY3RvcnlcclxuLy8gIHRoaXMuZGlzcGxheUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgRGlzcGxheSBMaXN0IHRoZSBTY2VuZSBvd25zXHJcbi8vICB0aGlzLnVwZGF0ZUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgVXBkYXRlIExpc3QgdGhlIFNjZW5lIG93bnNcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextRender.js":
/*!***********************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextRender.js ***!
\***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./BitmapTextWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./BitmapTextCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L3N0YXRpYy9CaXRtYXBUZXh0UmVuZGVyLmpzP2RkYjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLG9FQUFxQjtBQUMvQyxtQkFBbUIsbUJBQU8sQ0FBQyxvRUFBcUI7O0FBRWhELElBQUksSUFBcUI7QUFDekI7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxxSEFBMkI7QUFDckQ7O0FBRUEsSUFBSSxJQUFzQjtBQUMxQjtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLHVIQUE0QjtBQUN2RDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvYml0bWFwdGV4dC9zdGF0aWMvQml0bWFwVGV4dFJlbmRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG52YXIgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG5cclxuaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuL0JpdG1hcFRleHRXZWJHTFJlbmRlcmVyJyk7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgQ0FOVkFTX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuL0JpdG1hcFRleHRDYW52YXNSZW5kZXJlcicpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICByZW5kZXJXZWJHTDogcmVuZGVyV2ViR0wsXHJcbiAgICByZW5kZXJDYW52YXM6IHJlbmRlckNhbnZhc1xyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextWebGLRenderer.js":
/*!******************************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextWebGLRenderer.js ***!
\******************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.BitmapText#renderWebGL\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.BitmapText} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar BitmapTextWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var text = src._text;\r\n var textLength = text.length;\r\n\r\n if (textLength === 0)\r\n {\r\n return;\r\n }\r\n \r\n var pipeline = this.pipeline;\r\n\r\n renderer.setPipeline(pipeline, src);\r\n\r\n var camMatrix = pipeline._tempMatrix1;\r\n var spriteMatrix = pipeline._tempMatrix2;\r\n var calcMatrix = pipeline._tempMatrix3;\r\n\r\n spriteMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n camMatrix.copyFrom(camera.matrix);\r\n\r\n if (parentMatrix)\r\n {\r\n // Multiply the camera by the parent matrix\r\n camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n // Undo the camera scroll\r\n spriteMatrix.e = src.x;\r\n spriteMatrix.f = src.y;\r\n\r\n // Multiply by the Sprite matrix, store result in calcMatrix\r\n camMatrix.multiply(spriteMatrix, calcMatrix);\r\n }\r\n else\r\n {\r\n spriteMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n spriteMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n\r\n // Multiply by the Sprite matrix, store result in calcMatrix\r\n camMatrix.multiply(spriteMatrix, calcMatrix);\r\n }\r\n\r\n var frame = src.frame;\r\n var texture = frame.glTexture;\r\n var textureX = frame.cutX;\r\n var textureY = frame.cutY;\r\n var textureWidth = texture.width;\r\n var textureHeight = texture.height;\r\n\r\n var tintEffect = (src._isTinted && src.tintFill);\r\n var tintTL = Utils.getTintAppendFloatAlpha(src._tintTL, camera.alpha * src._alphaTL);\r\n var tintTR = Utils.getTintAppendFloatAlpha(src._tintTR, camera.alpha * src._alphaTR);\r\n var tintBL = Utils.getTintAppendFloatAlpha(src._tintBL, camera.alpha * src._alphaBL);\r\n var tintBR = Utils.getTintAppendFloatAlpha(src._tintBR, camera.alpha * src._alphaBR);\r\n\r\n pipeline.setTexture2D(texture, 0);\r\n\r\n var xAdvance = 0;\r\n var yAdvance = 0;\r\n var charCode = 0;\r\n var lastCharCode = 0;\r\n var letterSpacing = src._letterSpacing;\r\n var glyph;\r\n var glyphX = 0;\r\n var glyphY = 0;\r\n var glyphW = 0;\r\n var glyphH = 0;\r\n var lastGlyph;\r\n\r\n var fontData = src.fontData;\r\n var chars = fontData.chars;\r\n var lineHeight = fontData.lineHeight;\r\n var scale = (src._fontSize / fontData.size);\r\n\r\n var align = src._align;\r\n var currentLine = 0;\r\n var lineOffsetX = 0;\r\n\r\n // Update the bounds - skipped internally if not dirty\r\n var bounds = src.getTextBounds(false);\r\n\r\n // In case the method above changed it (word wrapping)\r\n if (src.maxWidth > 0)\r\n {\r\n text = bounds.wrappedText;\r\n textLength = text.length;\r\n }\r\n\r\n var lineData = src._bounds.lines;\r\n\r\n if (align === 1)\r\n {\r\n lineOffsetX = (lineData.longest - lineData.lengths[0]) / 2;\r\n }\r\n else if (align === 2)\r\n {\r\n lineOffsetX = (lineData.longest - lineData.lengths[0]);\r\n }\r\n\r\n var roundPixels = camera.roundPixels;\r\n\r\n for (var i = 0; i < textLength; i++)\r\n {\r\n charCode = text.charCodeAt(i);\r\n\r\n // Carriage-return\r\n if (charCode === 10)\r\n {\r\n currentLine++;\r\n\r\n if (align === 1)\r\n {\r\n lineOffsetX = (lineData.longest - lineData.lengths[currentLine]) / 2;\r\n }\r\n else if (align === 2)\r\n {\r\n lineOffsetX = (lineData.longest - lineData.lengths[currentLine]);\r\n }\r\n \r\n xAdvance = 0;\r\n yAdvance += lineHeight;\r\n lastGlyph = null;\r\n \r\n continue;\r\n }\r\n\r\n glyph = chars[charCode];\r\n\r\n if (!glyph)\r\n {\r\n continue;\r\n }\r\n\r\n glyphX = textureX + glyph.x;\r\n glyphY = textureY + glyph.y;\r\n\r\n glyphW = glyph.width;\r\n glyphH = glyph.height;\r\n\r\n var x = glyph.xOffset + xAdvance;\r\n var y = glyph.yOffset + yAdvance;\r\n\r\n if (lastGlyph !== null)\r\n {\r\n var kerningOffset = glyph.kerning[lastCharCode];\r\n x += (kerningOffset !== undefined) ? kerningOffset : 0;\r\n }\r\n\r\n xAdvance += glyph.xAdvance + letterSpacing;\r\n lastGlyph = glyph;\r\n lastCharCode = charCode;\r\n\r\n // Nothing to render or a space? Then skip to the next glyph\r\n if (glyphW === 0 || glyphH === 0 || charCode === 32)\r\n {\r\n continue;\r\n }\r\n\r\n x *= scale;\r\n y *= scale;\r\n\r\n x -= src.displayOriginX;\r\n y -= src.displayOriginY;\r\n\r\n x += lineOffsetX;\r\n\r\n var u0 = glyphX / textureWidth;\r\n var v0 = glyphY / textureHeight;\r\n var u1 = (glyphX + glyphW) / textureWidth;\r\n var v1 = (glyphY + glyphH) / textureHeight;\r\n\r\n var xw = x + (glyphW * scale);\r\n var yh = y + (glyphH * scale);\r\n\r\n var tx0 = calcMatrix.getX(x, y);\r\n var ty0 = calcMatrix.getY(x, y);\r\n\r\n var tx1 = calcMatrix.getX(x, yh);\r\n var ty1 = calcMatrix.getY(x, yh);\r\n\r\n var tx2 = calcMatrix.getX(xw, yh);\r\n var ty2 = calcMatrix.getY(xw, yh);\r\n\r\n var tx3 = calcMatrix.getX(xw, y);\r\n var ty3 = calcMatrix.getY(xw, y);\r\n\r\n if (roundPixels)\r\n {\r\n tx0 = Math.round(tx0);\r\n ty0 = Math.round(ty0);\r\n\r\n tx1 = Math.round(tx1);\r\n ty1 = Math.round(ty1);\r\n\r\n tx2 = Math.round(tx2);\r\n ty2 = Math.round(ty2);\r\n\r\n tx3 = Math.round(tx3);\r\n ty3 = Math.round(ty3);\r\n }\r\n\r\n pipeline.batchQuad(tx0, ty0, tx1, ty1, tx2, ty2, tx3, ty3, u0, v0, u1, v1, tintTL, tintTR, tintBL, tintBR, tintEffect, texture, 0);\r\n }\r\n};\r\n\r\nmodule.exports = BitmapTextWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9iaXRtYXB0ZXh0L3N0YXRpYy9CaXRtYXBUZXh0V2ViR0xSZW5kZXJlci5qcz9kOWJlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsd0ZBQStCOztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9DQUFvQztBQUMvQyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLG1CQUFtQixnQkFBZ0I7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2JpdG1hcHRleHQvc3RhdGljL0JpdG1hcFRleHRXZWJHTFJlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgVXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi9yZW5kZXJlci93ZWJnbC9VdGlscycpO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBXZWJHTCBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkJpdG1hcFRleHQjcmVuZGVyV2ViR0xcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIFdlYkdMIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5CaXRtYXBUZXh0fSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgQml0bWFwVGV4dFdlYkdMUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgdGV4dCA9IHNyYy5fdGV4dDtcclxuICAgIHZhciB0ZXh0TGVuZ3RoID0gdGV4dC5sZW5ndGg7XHJcblxyXG4gICAgaWYgKHRleHRMZW5ndGggPT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gXHJcbiAgICB2YXIgcGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lO1xyXG5cclxuICAgIHJlbmRlcmVyLnNldFBpcGVsaW5lKHBpcGVsaW5lLCBzcmMpO1xyXG5cclxuICAgIHZhciBjYW1NYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDE7XHJcbiAgICB2YXIgc3ByaXRlTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgyO1xyXG4gICAgdmFyIGNhbGNNYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDM7XHJcblxyXG4gICAgc3ByaXRlTWF0cml4LmFwcGx5SVRSUyhzcmMueCwgc3JjLnksIHNyYy5yb3RhdGlvbiwgc3JjLnNjYWxlWCwgc3JjLnNjYWxlWSk7XHJcblxyXG4gICAgY2FtTWF0cml4LmNvcHlGcm9tKGNhbWVyYS5tYXRyaXgpO1xyXG5cclxuICAgIGlmIChwYXJlbnRNYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIE11bHRpcGx5IHRoZSBjYW1lcmEgYnkgdGhlIHBhcmVudCBtYXRyaXhcclxuICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHlXaXRoT2Zmc2V0KHBhcmVudE1hdHJpeCwgLWNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3RvclgsIC1jYW1lcmEuc2Nyb2xsWSAqIHNyYy5zY3JvbGxGYWN0b3JZKTtcclxuXHJcbiAgICAgICAgLy8gIFVuZG8gdGhlIGNhbWVyYSBzY3JvbGxcclxuICAgICAgICBzcHJpdGVNYXRyaXguZSA9IHNyYy54O1xyXG4gICAgICAgIHNwcml0ZU1hdHJpeC5mID0gc3JjLnk7XHJcblxyXG4gICAgICAgIC8vICBNdWx0aXBseSBieSB0aGUgU3ByaXRlIG1hdHJpeCwgc3RvcmUgcmVzdWx0IGluIGNhbGNNYXRyaXhcclxuICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHkoc3ByaXRlTWF0cml4LCBjYWxjTWF0cml4KTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBzcHJpdGVNYXRyaXguZSAtPSBjYW1lcmEuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYO1xyXG4gICAgICAgIHNwcml0ZU1hdHJpeC5mIC09IGNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3Rvclk7XHJcblxyXG4gICAgICAgIC8vICBNdWx0aXBseSBieSB0aGUgU3ByaXRlIG1hdHJpeCwgc3RvcmUgcmVzdWx0IGluIGNhbGNNYXRyaXhcclxuICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHkoc3ByaXRlTWF0cml4LCBjYWxjTWF0cml4KTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZnJhbWUgPSBzcmMuZnJhbWU7XHJcbiAgICB2YXIgdGV4dHVyZSA9IGZyYW1lLmdsVGV4dHVyZTtcclxuICAgIHZhciB0ZXh0dXJlWCA9IGZyYW1lLmN1dFg7XHJcbiAgICB2YXIgdGV4dHVyZVkgPSBmcmFtZS5jdXRZO1xyXG4gICAgdmFyIHRleHR1cmVXaWR0aCA9IHRleHR1cmUud2lkdGg7XHJcbiAgICB2YXIgdGV4dHVyZUhlaWdodCA9IHRleHR1cmUuaGVpZ2h0O1xyXG5cclxuICAgIHZhciB0aW50RWZmZWN0ID0gKHNyYy5faXNUaW50ZWQgJiYgc3JjLnRpbnRGaWxsKTtcclxuICAgIHZhciB0aW50VEwgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYShzcmMuX3RpbnRUTCwgY2FtZXJhLmFscGhhICogc3JjLl9hbHBoYVRMKTtcclxuICAgIHZhciB0aW50VFIgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYShzcmMuX3RpbnRUUiwgY2FtZXJhLmFscGhhICogc3JjLl9hbHBoYVRSKTtcclxuICAgIHZhciB0aW50QkwgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYShzcmMuX3RpbnRCTCwgY2FtZXJhLmFscGhhICogc3JjLl9hbHBoYUJMKTtcclxuICAgIHZhciB0aW50QlIgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYShzcmMuX3RpbnRCUiwgY2FtZXJhLmFscGhhICogc3JjLl9hbHBoYUJSKTtcclxuXHJcbiAgICBwaXBlbGluZS5zZXRUZXh0dXJlMkQodGV4dHVyZSwgMCk7XHJcblxyXG4gICAgdmFyIHhBZHZhbmNlID0gMDtcclxuICAgIHZhciB5QWR2YW5jZSA9IDA7XHJcbiAgICB2YXIgY2hhckNvZGUgPSAwO1xyXG4gICAgdmFyIGxhc3RDaGFyQ29kZSA9IDA7XHJcbiAgICB2YXIgbGV0dGVyU3BhY2luZyA9IHNyYy5fbGV0dGVyU3BhY2luZztcclxuICAgIHZhciBnbHlwaDtcclxuICAgIHZhciBnbHlwaFggPSAwO1xyXG4gICAgdmFyIGdseXBoWSA9IDA7XHJcbiAgICB2YXIgZ2x5cGhXID0gMDtcclxuICAgIHZhciBnbHlwaEggPSAwO1xyXG4gICAgdmFyIGxhc3RHbHlwaDtcclxuXHJcbiAgICB2YXIgZm9udERhdGEgPSBzcmMuZm9udERhdGE7XHJcbiAgICB2YXIgY2hhcnMgPSBmb250RGF0YS5jaGFycztcclxuICAgIHZhciBsaW5lSGVpZ2h0ID0gZm9udERhdGEubGluZUhlaWdodDtcclxuICAgIHZhciBzY2FsZSA9IChzcmMuX2ZvbnRTaXplIC8gZm9udERhdGEuc2l6ZSk7XHJcblxyXG4gICAgdmFyIGFsaWduID0gc3JjLl9hbGlnbjtcclxuICAgIHZhciBjdXJyZW50TGluZSA9IDA7XHJcbiAgICB2YXIgbGluZU9mZnNldFggPSAwO1xyXG5cclxuICAgIC8vICBVcGRhdGUgdGhlIGJvdW5kcyAtIHNraXBwZWQgaW50ZXJuYWxseSBpZiBub3QgZGlydHlcclxuICAgIHZhciBib3VuZHMgPSBzcmMuZ2V0VGV4dEJvdW5kcyhmYWxzZSk7XHJcblxyXG4gICAgLy8gIEluIGNhc2UgdGhlIG1ldGhvZCBhYm92ZSBjaGFuZ2VkIGl0ICh3b3JkIHdyYXBwaW5nKVxyXG4gICAgaWYgKHNyYy5tYXhXaWR0aCA+IDApXHJcbiAgICB7XHJcbiAgICAgICAgdGV4dCA9IGJvdW5kcy53cmFwcGVkVGV4dDtcclxuICAgICAgICB0ZXh0TGVuZ3RoID0gdGV4dC5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGxpbmVEYXRhID0gc3JjLl9ib3VuZHMubGluZXM7XHJcblxyXG4gICAgaWYgKGFsaWduID09PSAxKVxyXG4gICAge1xyXG4gICAgICAgIGxpbmVPZmZzZXRYID0gKGxpbmVEYXRhLmxvbmdlc3QgLSBsaW5lRGF0YS5sZW5ndGhzWzBdKSAvIDI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChhbGlnbiA9PT0gMilcclxuICAgIHtcclxuICAgICAgICBsaW5lT2Zmc2V0WCA9IChsaW5lRGF0YS5sb25nZXN0IC0gbGluZURhdGEubGVuZ3Roc1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJvdW5kUGl4ZWxzID0gY2FtZXJhLnJvdW5kUGl4ZWxzO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dExlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIGNoYXJDb2RlID0gdGV4dC5jaGFyQ29kZUF0KGkpO1xyXG5cclxuICAgICAgICAvLyAgQ2FycmlhZ2UtcmV0dXJuXHJcbiAgICAgICAgaWYgKGNoYXJDb2RlID09PSAxMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRMaW5lKys7XHJcblxyXG4gICAgICAgICAgICBpZiAoYWxpZ24gPT09IDEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxpbmVPZmZzZXRYID0gKGxpbmVEYXRhLmxvbmdlc3QgLSBsaW5lRGF0YS5sZW5ndGhzW2N1cnJlbnRMaW5lXSkgLyAyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGFsaWduID09PSAyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsaW5lT2Zmc2V0WCA9IChsaW5lRGF0YS5sb25nZXN0IC0gbGluZURhdGEubGVuZ3Roc1tjdXJyZW50TGluZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHhBZHZhbmNlID0gMDtcclxuICAgICAgICAgICAgeUFkdmFuY2UgKz0gbGluZUhlaWdodDtcclxuICAgICAgICAgICAgbGFzdEdseXBoID0gbnVsbDtcclxuICAgICAgICBcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnbHlwaCA9IGNoYXJzW2NoYXJDb2RlXTtcclxuXHJcbiAgICAgICAgaWYgKCFnbHlwaClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2x5cGhYID0gdGV4dHVyZVggKyBnbHlwaC54O1xyXG4gICAgICAgIGdseXBoWSA9IHRleHR1cmVZICsgZ2x5cGgueTtcclxuXHJcbiAgICAgICAgZ2x5cGhXID0gZ2x5cGgud2lkdGg7XHJcbiAgICAgICAgZ2x5cGhIID0gZ2x5cGguaGVpZ2h0O1xyXG5cclxuICAgICAgICB2YXIgeCA9IGdseXBoLnhPZmZzZXQgKyB4QWR2YW5jZTtcclxuICAgICAgICB2YXIgeSA9IGdseXBoLnlPZmZzZXQgKyB5QWR2YW5jZTtcclxuXHJcbiAgICAgICAgaWYgKGxhc3RHbHlwaCAhPT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBrZXJuaW5nT2Zmc2V0ID0gZ2x5cGgua2VybmluZ1tsYXN0Q2hhckNvZGVdO1xyXG4gICAgICAgICAgICB4ICs9IChrZXJuaW5nT2Zmc2V0ICE9PSB1bmRlZmluZWQpID8ga2VybmluZ09mZnNldCA6IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB4QWR2YW5jZSArPSBnbHlwaC54QWR2YW5jZSArIGxldHRlclNwYWNpbmc7XHJcbiAgICAgICAgbGFzdEdseXBoID0gZ2x5cGg7XHJcbiAgICAgICAgbGFzdENoYXJDb2RlID0gY2hhckNvZGU7XHJcblxyXG4gICAgICAgIC8vICBOb3RoaW5nIHRvIHJlbmRlciBvciBhIHNwYWNlPyBUaGVuIHNraXAgdG8gdGhlIG5leHQgZ2x5cGhcclxuICAgICAgICBpZiAoZ2x5cGhXID09PSAwIHx8IGdseXBoSCA9PT0gMCB8fCBjaGFyQ29kZSA9PT0gMzIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHggKj0gc2NhbGU7XHJcbiAgICAgICAgeSAqPSBzY2FsZTtcclxuXHJcbiAgICAgICAgeCAtPSBzcmMuZGlzcGxheU9yaWdpblg7XHJcbiAgICAgICAgeSAtPSBzcmMuZGlzcGxheU9yaWdpblk7XHJcblxyXG4gICAgICAgIHggKz0gbGluZU9mZnNldFg7XHJcblxyXG4gICAgICAgIHZhciB1MCA9IGdseXBoWCAvIHRleHR1cmVXaWR0aDtcclxuICAgICAgICB2YXIgdjAgPSBnbHlwaFkgLyB0ZXh0dXJlSGVpZ2h0O1xyXG4gICAgICAgIHZhciB1MSA9IChnbHlwaFggKyBnbHlwaFcpIC8gdGV4dHVyZVdpZHRoO1xyXG4gICAgICAgIHZhciB2MSA9IChnbHlwaFkgKyBnbHlwaEgpIC8gdGV4dHVyZUhlaWdodDtcclxuXHJcbiAgICAgICAgdmFyIHh3ID0geCArIChnbHlwaFcgKiBzY2FsZSk7XHJcbiAgICAgICAgdmFyIHloID0geSArIChnbHlwaEggKiBzY2FsZSk7XHJcblxyXG4gICAgICAgIHZhciB0eDAgPSBjYWxjTWF0cml4LmdldFgoeCwgeSk7XHJcbiAgICAgICAgdmFyIHR5MCA9IGNhbGNNYXRyaXguZ2V0WSh4LCB5KTtcclxuXHJcbiAgICAgICAgdmFyIHR4MSA9IGNhbGNNYXRyaXguZ2V0WCh4LCB5aCk7XHJcbiAgICAgICAgdmFyIHR5MSA9IGNhbGNNYXRyaXguZ2V0WSh4LCB5aCk7XHJcblxyXG4gICAgICAgIHZhciB0eDIgPSBjYWxjTWF0cml4LmdldFgoeHcsIHloKTtcclxuICAgICAgICB2YXIgdHkyID0gY2FsY01hdHJpeC5nZXRZKHh3LCB5aCk7XHJcblxyXG4gICAgICAgIHZhciB0eDMgPSBjYWxjTWF0cml4LmdldFgoeHcsIHkpO1xyXG4gICAgICAgIHZhciB0eTMgPSBjYWxjTWF0cml4LmdldFkoeHcsIHkpO1xyXG5cclxuICAgICAgICBpZiAocm91bmRQaXhlbHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0eDAgPSBNYXRoLnJvdW5kKHR4MCk7XHJcbiAgICAgICAgICAgIHR5MCA9IE1hdGgucm91bmQodHkwKTtcclxuXHJcbiAgICAgICAgICAgIHR4MSA9IE1hdGgucm91bmQodHgxKTtcclxuICAgICAgICAgICAgdHkxID0gTWF0aC5yb3VuZCh0eTEpO1xyXG5cclxuICAgICAgICAgICAgdHgyID0gTWF0aC5yb3VuZCh0eDIpO1xyXG4gICAgICAgICAgICB0eTIgPSBNYXRoLnJvdW5kKHR5Mik7XHJcblxyXG4gICAgICAgICAgICB0eDMgPSBNYXRoLnJvdW5kKHR4Myk7XHJcbiAgICAgICAgICAgIHR5MyA9IE1hdGgucm91bmQodHkzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHBpcGVsaW5lLmJhdGNoUXVhZCh0eDAsIHR5MCwgdHgxLCB0eTEsIHR4MiwgdHkyLCB0eDMsIHR5MywgdTAsIHYwLCB1MSwgdjEsIHRpbnRUTCwgdGludFRSLCB0aW50QkwsIHRpbnRCUiwgdGludEVmZmVjdCwgdGV4dHVyZSwgMCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJpdG1hcFRleHRXZWJHTFJlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/blitter/Blitter.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/blitter/Blitter.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BlitterRender = __webpack_require__(/*! ./BlitterRender */ \"./node_modules/phaser/src/gameobjects/blitter/BlitterRender.js\");\r\nvar Bob = __webpack_require__(/*! ./Bob */ \"./node_modules/phaser/src/gameobjects/blitter/Bob.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar Frame = __webpack_require__(/*! ../../textures/Frame */ \"./node_modules/phaser/src/textures/Frame.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar List = __webpack_require__(/*! ../../structs/List */ \"./node_modules/phaser/src/structs/List.js\");\r\n\r\n/**\r\n * @callback CreateCallback\r\n *\r\n * @param {Phaser.GameObjects.Bob} bob - The Bob that was created by the Blitter.\r\n * @param {integer} index - The position of the Bob within the Blitter display list.\r\n */\r\n\r\n/**\r\n * @classdesc\r\n * A Blitter Game Object.\r\n *\r\n * The Blitter Game Object is a special kind of container that creates, updates and manages Bob objects.\r\n * Bobs are designed for rendering speed rather than flexibility. They consist of a texture, or frame from a texture,\r\n * a position and an alpha value. You cannot scale or rotate them. They use a batched drawing method for speed\r\n * during rendering.\r\n *\r\n * A Blitter Game Object has one texture bound to it. Bobs created by the Blitter can use any Frame from this\r\n * Texture to render with, but they cannot use any other Texture. It is this single texture-bind that allows\r\n * them their speed.\r\n *\r\n * If you have a need to blast a large volume of frames around the screen then Blitter objects are well worth\r\n * investigating. They are especially useful for using as a base for your own special effects systems.\r\n *\r\n * @class Blitter\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Size\r\n * @extends Phaser.GameObjects.Components.Texture\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. It can only belong to one Scene at any given time.\r\n * @param {number} [x=0] - The x coordinate of this Game Object in world space.\r\n * @param {number} [y=0] - The y coordinate of this Game Object in world space.\r\n * @param {string} [texture='__DEFAULT'] - The key of the texture this Game Object will use for rendering. The Texture must already exist in the Texture Manager.\r\n * @param {(string|integer)} [frame=0] - The Frame of the Texture that this Game Object will use. Only set if the Texture has multiple frames, such as a Texture Atlas or Sprite Sheet.\r\n */\r\nvar Blitter = new Class({\r\n\r\n Extends: GameObject,\r\n\r\n Mixins: [\r\n Components.Alpha,\r\n Components.BlendMode,\r\n Components.Depth,\r\n Components.Mask,\r\n Components.Pipeline,\r\n Components.ScrollFactor,\r\n Components.Size,\r\n Components.Texture,\r\n Components.Transform,\r\n Components.Visible,\r\n BlitterRender\r\n ],\r\n\r\n initialize:\r\n\r\n function Blitter (scene, x, y, texture, frame)\r\n {\r\n GameObject.call(this, scene, 'Blitter');\r\n\r\n this.setTexture(texture, frame);\r\n this.setPosition(x, y);\r\n this.initPipeline();\r\n\r\n /**\r\n * The children of this Blitter.\r\n * This List contains all of the Bob objects created by the Blitter.\r\n *\r\n * @name Phaser.GameObjects.Blitter#children\r\n * @type {Phaser.Structs.List.<Phaser.GameObjects.Bob>}\r\n * @since 3.0.0\r\n */\r\n this.children = new List();\r\n\r\n /**\r\n * A transient array that holds all of the Bobs that will be rendered this frame.\r\n * The array is re-populated whenever the dirty flag is set.\r\n *\r\n * @name Phaser.GameObjects.Blitter#renderList\r\n * @type {Phaser.GameObjects.Bob[]}\r\n * @default []\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this.renderList = [];\r\n\r\n /**\r\n * Is the Blitter considered dirty?\r\n * A 'dirty' Blitter has had its child count changed since the last frame.\r\n *\r\n * @name Phaser.GameObjects.Blitter#dirty\r\n * @type {boolean}\r\n * @since 3.0.0\r\n */\r\n this.dirty = false;\r\n },\r\n\r\n /**\r\n * Creates a new Bob in this Blitter.\r\n *\r\n * The Bob is created at the given coordinates, relative to the Blitter and uses the given frame.\r\n * A Bob can use any frame belonging to the texture bound to the Blitter.\r\n *\r\n * @method Phaser.GameObjects.Blitter#create\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x position of the Bob. Bob coordinate are relative to the position of the Blitter object.\r\n * @param {number} y - The y position of the Bob. Bob coordinate are relative to the position of the Blitter object.\r\n * @param {(string|integer|Phaser.Textures.Frame)} [frame] - The Frame the Bob will use. It _must_ be part of the Texture the parent Blitter object is using.\r\n * @param {boolean} [visible=true] - Should the created Bob render or not?\r\n * @param {integer} [index] - The position in the Blitters Display List to add the new Bob at. Defaults to the top of the list.\r\n *\r\n * @return {Phaser.GameObjects.Bob} The newly created Bob object.\r\n */\r\n create: function (x, y, frame, visible, index)\r\n {\r\n if (visible === undefined) { visible = true; }\r\n if (index === undefined) { index = this.children.length; }\r\n\r\n if (frame === undefined)\r\n {\r\n frame = this.frame;\r\n }\r\n else if (!(frame instanceof Frame))\r\n {\r\n frame = this.texture.get(frame);\r\n }\r\n\r\n var bob = new Bob(this, x, y, frame, visible);\r\n\r\n this.children.addAt(bob, index, false);\r\n\r\n this.dirty = true;\r\n\r\n return bob;\r\n },\r\n\r\n /**\r\n * Creates multiple Bob objects within this Blitter and then passes each of them to the specified callback.\r\n *\r\n * @method Phaser.GameObjects.Blitter#createFromCallback\r\n * @since 3.0.0\r\n *\r\n * @param {CreateCallback} callback - The callback to invoke after creating a bob. It will be sent two arguments: The Bob and the index of the Bob.\r\n * @param {integer} quantity - The quantity of Bob objects to create.\r\n * @param {(string|integer|Phaser.Textures.Frame|string[]|integer[]|Phaser.Textures.Frame[])} [frame] - The Frame the Bobs will use. It must be part of the Blitter Texture.\r\n * @param {boolean} [visible=true] - Should the created Bob render or not?\r\n *\r\n * @return {Phaser.GameObjects.Bob[]} An array of Bob objects that were created.\r\n */\r\n createFromCallback: function (callback, quantity, frame, visible)\r\n {\r\n var bobs = this.createMultiple(quantity, frame, visible);\r\n\r\n for (var i = 0; i < bobs.length; i++)\r\n {\r\n var bob = bobs[i];\r\n\r\n callback.call(this, bob, i);\r\n }\r\n\r\n return bobs;\r\n },\r\n\r\n /**\r\n * Creates multiple Bobs in one call.\r\n *\r\n * The amount created is controlled by a combination of the `quantity` argument and the number of frames provided.\r\n *\r\n * If the quantity is set to 10 and you provide 2 frames, then 20 Bobs will be created. 10 with the first\r\n * frame and 10 with the second.\r\n *\r\n * @method Phaser.GameObjects.Blitter#createMultiple\r\n * @since 3.0.0\r\n *\r\n * @param {integer} quantity - The quantity of Bob objects to create.\r\n * @param {(string|integer|Phaser.Textures.Frame|string[]|integer[]|Phaser.Textures.Frame[])} [frame] - The Frame the Bobs will use. It must be part of the Blitter Texture.\r\n * @param {boolean} [visible=true] - Should the created Bob render or not?\r\n *\r\n * @return {Phaser.GameObjects.Bob[]} An array of Bob objects that were created.\r\n */\r\n createMultiple: function (quantity, frame, visible)\r\n {\r\n if (frame === undefined) { frame = this.frame.name; }\r\n if (visible === undefined) { visible = true; }\r\n\r\n if (!Array.isArray(frame))\r\n {\r\n frame = [ frame ];\r\n }\r\n\r\n var bobs = [];\r\n var _this = this;\r\n\r\n frame.forEach(function (singleFrame)\r\n {\r\n for (var i = 0; i < quantity; i++)\r\n {\r\n bobs.push(_this.create(0, 0, singleFrame, visible));\r\n }\r\n });\r\n\r\n return bobs;\r\n },\r\n\r\n /**\r\n * Checks if the given child can render or not, by checking its `visible` and `alpha` values.\r\n *\r\n * @method Phaser.GameObjects.Blitter#childCanRender\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Bob} child - The Bob to check for rendering.\r\n *\r\n * @return {boolean} Returns `true` if the given child can render, otherwise `false`.\r\n */\r\n childCanRender: function (child)\r\n {\r\n return (child.visible && child.alpha > 0);\r\n },\r\n\r\n /**\r\n * Returns an array of Bobs to be rendered.\r\n * If the Blitter is dirty then a new list is generated and stored in `renderList`.\r\n *\r\n * @method Phaser.GameObjects.Blitter#getRenderList\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Bob[]} An array of Bob objects that will be rendered this frame.\r\n */\r\n getRenderList: function ()\r\n {\r\n if (this.dirty)\r\n {\r\n this.renderList = this.children.list.filter(this.childCanRender, this);\r\n this.dirty = false;\r\n }\r\n\r\n return this.renderList;\r\n },\r\n\r\n /**\r\n * Removes all Bobs from the children List and clears the dirty flag.\r\n *\r\n * @method Phaser.GameObjects.Blitter#clear\r\n * @since 3.0.0\r\n */\r\n clear: function ()\r\n {\r\n this.children.removeAll();\r\n this.dirty = true;\r\n },\r\n\r\n /**\r\n * Internal destroy handler, called as part of the destroy process.\r\n *\r\n * @method Phaser.GameObjects.Blitter#preDestroy\r\n * @protected\r\n * @since 3.9.0\r\n */\r\n preDestroy: function ()\r\n {\r\n this.children.destroy();\r\n\r\n this.renderList = [];\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Blitter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ibGl0dGVyL0JsaXR0ZXIuanM/NDI2ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsb0JBQW9CLG1CQUFPLENBQUMsdUZBQWlCO0FBQzdDLFVBQVUsbUJBQU8sQ0FBQyxtRUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLGdGQUFlO0FBQ3hDLFlBQVksbUJBQU8sQ0FBQyx5RUFBc0I7QUFDMUMsaUJBQWlCLG1CQUFPLENBQUMsMEVBQWU7QUFDeEMsV0FBVyxtQkFBTyxDQUFDLHFFQUFvQjs7QUFFdkM7QUFDQTtBQUNBO0FBQ0EsV0FBVyx1QkFBdUI7QUFDbEMsV0FBVyxRQUFRO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLGlCQUFpQjtBQUM1QjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsdUNBQXVDO0FBQ3RELGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxnQkFBZ0I7QUFDcEQsa0NBQWtDLDhCQUE4Qjs7QUFFaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxlQUFlO0FBQzlCLGVBQWUsUUFBUTtBQUN2QixlQUFlLGtGQUFrRjtBQUNqRyxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsa0ZBQWtGO0FBQ2pHLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHlCQUF5QjtBQUMzRCxvQ0FBb0MsZ0JBQWdCOztBQUVwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkIsY0FBYztBQUN6QztBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHVCQUF1QjtBQUN0QztBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2JsaXR0ZXIvQmxpdHRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJsaXR0ZXJSZW5kZXIgPSByZXF1aXJlKCcuL0JsaXR0ZXJSZW5kZXInKTtcclxudmFyIEJvYiA9IHJlcXVpcmUoJy4vQm9iJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cycpO1xyXG52YXIgRnJhbWUgPSByZXF1aXJlKCcuLi8uLi90ZXh0dXJlcy9GcmFtZScpO1xyXG52YXIgR2FtZU9iamVjdCA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3QnKTtcclxudmFyIExpc3QgPSByZXF1aXJlKCcuLi8uLi9zdHJ1Y3RzL0xpc3QnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2FsbGJhY2sgQ3JlYXRlQ2FsbGJhY2tcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQm9ifSBib2IgLSBUaGUgQm9iIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlIEJsaXR0ZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gaW5kZXggLSBUaGUgcG9zaXRpb24gb2YgdGhlIEJvYiB3aXRoaW4gdGhlIEJsaXR0ZXIgZGlzcGxheSBsaXN0LlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgQmxpdHRlciBHYW1lIE9iamVjdC5cclxuICpcclxuICogVGhlIEJsaXR0ZXIgR2FtZSBPYmplY3QgaXMgYSBzcGVjaWFsIGtpbmQgb2YgY29udGFpbmVyIHRoYXQgY3JlYXRlcywgdXBkYXRlcyBhbmQgbWFuYWdlcyBCb2Igb2JqZWN0cy5cclxuICogQm9icyBhcmUgZGVzaWduZWQgZm9yIHJlbmRlcmluZyBzcGVlZCByYXRoZXIgdGhhbiBmbGV4aWJpbGl0eS4gVGhleSBjb25zaXN0IG9mIGEgdGV4dHVyZSwgb3IgZnJhbWUgZnJvbSBhIHRleHR1cmUsXHJcbiAqIGEgcG9zaXRpb24gYW5kIGFuIGFscGhhIHZhbHVlLiBZb3UgY2Fubm90IHNjYWxlIG9yIHJvdGF0ZSB0aGVtLiBUaGV5IHVzZSBhIGJhdGNoZWQgZHJhd2luZyBtZXRob2QgZm9yIHNwZWVkXHJcbiAqIGR1cmluZyByZW5kZXJpbmcuXHJcbiAqXHJcbiAqIEEgQmxpdHRlciBHYW1lIE9iamVjdCBoYXMgb25lIHRleHR1cmUgYm91bmQgdG8gaXQuIEJvYnMgY3JlYXRlZCBieSB0aGUgQmxpdHRlciBjYW4gdXNlIGFueSBGcmFtZSBmcm9tIHRoaXNcclxuICogVGV4dHVyZSB0byByZW5kZXIgd2l0aCwgYnV0IHRoZXkgY2Fubm90IHVzZSBhbnkgb3RoZXIgVGV4dHVyZS4gSXQgaXMgdGhpcyBzaW5nbGUgdGV4dHVyZS1iaW5kIHRoYXQgYWxsb3dzXHJcbiAqIHRoZW0gdGhlaXIgc3BlZWQuXHJcbiAqXHJcbiAqIElmIHlvdSBoYXZlIGEgbmVlZCB0byBibGFzdCBhIGxhcmdlIHZvbHVtZSBvZiBmcmFtZXMgYXJvdW5kIHRoZSBzY3JlZW4gdGhlbiBCbGl0dGVyIG9iamVjdHMgYXJlIHdlbGwgd29ydGhcclxuICogaW52ZXN0aWdhdGluZy4gVGhleSBhcmUgZXNwZWNpYWxseSB1c2VmdWwgZm9yIHVzaW5nIGFzIGEgYmFzZSBmb3IgeW91ciBvd24gc3BlY2lhbCBlZmZlY3RzIHN5c3RlbXMuXHJcbiAqXHJcbiAqIEBjbGFzcyBCbGl0dGVyXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbHBoYVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5CbGVuZE1vZGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGhcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuTWFza1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5QaXBlbGluZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5TY3JvbGxGYWN0b3JcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2l6ZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UZXh0dXJlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5WaXNpYmxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuIEl0IGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgU2NlbmUgYXQgYW55IGdpdmVuIHRpbWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB3b3JsZCBzcGFjZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHdvcmxkIHNwYWNlLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3RleHR1cmU9J19fREVGQVVMVCddIC0gVGhlIGtleSBvZiB0aGUgdGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIGZvciByZW5kZXJpbmcuIFRoZSBUZXh0dXJlIG11c3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZT0wXSAtIFRoZSBGcmFtZSBvZiB0aGUgVGV4dHVyZSB0aGF0IHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UuIE9ubHkgc2V0IGlmIHRoZSBUZXh0dXJlIGhhcyBtdWx0aXBsZSBmcmFtZXMsIHN1Y2ggYXMgYSBUZXh0dXJlIEF0bGFzIG9yIFNwcml0ZSBTaGVldC5cclxuICovXHJcbnZhciBCbGl0dGVyID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBHYW1lT2JqZWN0LFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIENvbXBvbmVudHMuQWxwaGEsXHJcbiAgICAgICAgQ29tcG9uZW50cy5CbGVuZE1vZGUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5EZXB0aCxcclxuICAgICAgICBDb21wb25lbnRzLk1hc2ssXHJcbiAgICAgICAgQ29tcG9uZW50cy5QaXBlbGluZSxcclxuICAgICAgICBDb21wb25lbnRzLlNjcm9sbEZhY3RvcixcclxuICAgICAgICBDb21wb25lbnRzLlNpemUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UZXh0dXJlLFxyXG4gICAgICAgIENvbXBvbmVudHMuVHJhbnNmb3JtLFxyXG4gICAgICAgIENvbXBvbmVudHMuVmlzaWJsZSxcclxuICAgICAgICBCbGl0dGVyUmVuZGVyXHJcbiAgICBdLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gQmxpdHRlciAoc2NlbmUsIHgsIHksIHRleHR1cmUsIGZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIEdhbWVPYmplY3QuY2FsbCh0aGlzLCBzY2VuZSwgJ0JsaXR0ZXInKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUZXh0dXJlKHRleHR1cmUsIGZyYW1lKTtcclxuICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHgsIHkpO1xyXG4gICAgICAgIHRoaXMuaW5pdFBpcGVsaW5lKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjaGlsZHJlbiBvZiB0aGlzIEJsaXR0ZXIuXHJcbiAgICAgICAgICogVGhpcyBMaXN0IGNvbnRhaW5zIGFsbCBvZiB0aGUgQm9iIG9iamVjdHMgY3JlYXRlZCBieSB0aGUgQmxpdHRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5CbGl0dGVyI2NoaWxkcmVuXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TdHJ1Y3RzLkxpc3QuPFBoYXNlci5HYW1lT2JqZWN0cy5Cb2I+fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBuZXcgTGlzdCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHRyYW5zaWVudCBhcnJheSB0aGF0IGhvbGRzIGFsbCBvZiB0aGUgQm9icyB0aGF0IHdpbGwgYmUgcmVuZGVyZWQgdGhpcyBmcmFtZS5cclxuICAgICAgICAgKiBUaGUgYXJyYXkgaXMgcmUtcG9wdWxhdGVkIHdoZW5ldmVyIHRoZSBkaXJ0eSBmbGFnIGlzIHNldC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5CbGl0dGVyI3JlbmRlckxpc3RcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLkJvYltdfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJlbmRlckxpc3QgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXMgdGhlIEJsaXR0ZXIgY29uc2lkZXJlZCBkaXJ0eT9cclxuICAgICAgICAgKiBBICdkaXJ0eScgQmxpdHRlciBoYXMgaGFkIGl0cyBjaGlsZCBjb3VudCBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IGZyYW1lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkJsaXR0ZXIjZGlydHlcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBCb2IgaW4gdGhpcyBCbGl0dGVyLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBCb2IgaXMgY3JlYXRlZCBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMsIHJlbGF0aXZlIHRvIHRoZSBCbGl0dGVyIGFuZCB1c2VzIHRoZSBnaXZlbiBmcmFtZS5cclxuICAgICAqIEEgQm9iIGNhbiB1c2UgYW55IGZyYW1lIGJlbG9uZ2luZyB0byB0aGUgdGV4dHVyZSBib3VuZCB0byB0aGUgQmxpdHRlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5CbGl0dGVyI2NyZWF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgQm9iLiBCb2IgY29vcmRpbmF0ZSBhcmUgcmVsYXRpdmUgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSBCbGl0dGVyIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgcG9zaXRpb24gb2YgdGhlIEJvYi4gQm9iIGNvb3JkaW5hdGUgYXJlIHJlbGF0aXZlIHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUgQmxpdHRlciBvYmplY3QuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcnxQaGFzZXIuVGV4dHVyZXMuRnJhbWUpfSBbZnJhbWVdIC0gVGhlIEZyYW1lIHRoZSBCb2Igd2lsbCB1c2UuIEl0IF9tdXN0XyBiZSBwYXJ0IG9mIHRoZSBUZXh0dXJlIHRoZSBwYXJlbnQgQmxpdHRlciBvYmplY3QgaXMgdXNpbmcuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt2aXNpYmxlPXRydWVdIC0gU2hvdWxkIHRoZSBjcmVhdGVkIEJvYiByZW5kZXIgb3Igbm90P1xyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbaW5kZXhdIC0gVGhlIHBvc2l0aW9uIGluIHRoZSBCbGl0dGVycyBEaXNwbGF5IExpc3QgdG8gYWRkIHRoZSBuZXcgQm9iIGF0LiBEZWZhdWx0cyB0byB0aGUgdG9wIG9mIHRoZSBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Cb2J9IFRoZSBuZXdseSBjcmVhdGVkIEJvYiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZTogZnVuY3Rpb24gKHgsIHksIGZyYW1lLCB2aXNpYmxlLCBpbmRleClcclxuICAgIHtcclxuICAgICAgICBpZiAodmlzaWJsZSA9PT0gdW5kZWZpbmVkKSB7IHZpc2libGUgPSB0cnVlOyB9XHJcbiAgICAgICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHsgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgfVxyXG5cclxuICAgICAgICBpZiAoZnJhbWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZyYW1lID0gdGhpcy5mcmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIShmcmFtZSBpbnN0YW5jZW9mIEZyYW1lKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZyYW1lID0gdGhpcy50ZXh0dXJlLmdldChmcmFtZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgYm9iID0gbmV3IEJvYih0aGlzLCB4LCB5LCBmcmFtZSwgdmlzaWJsZSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uYWRkQXQoYm9iLCBpbmRleCwgZmFsc2UpO1xyXG5cclxuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGJvYjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIG11bHRpcGxlIEJvYiBvYmplY3RzIHdpdGhpbiB0aGlzIEJsaXR0ZXIgYW5kIHRoZW4gcGFzc2VzIGVhY2ggb2YgdGhlbSB0byB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkJsaXR0ZXIjY3JlYXRlRnJvbUNhbGxiYWNrXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0NyZWF0ZUNhbGxiYWNrfSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgY3JlYXRpbmcgYSBib2IuIEl0IHdpbGwgYmUgc2VudCB0d28gYXJndW1lbnRzOiBUaGUgQm9iIGFuZCB0aGUgaW5kZXggb2YgdGhlIEJvYi5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gcXVhbnRpdHkgLSBUaGUgcXVhbnRpdHkgb2YgQm9iIG9iamVjdHMgdG8gY3JlYXRlLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXJ8UGhhc2VyLlRleHR1cmVzLkZyYW1lfHN0cmluZ1tdfGludGVnZXJbXXxQaGFzZXIuVGV4dHVyZXMuRnJhbWVbXSl9IFtmcmFtZV0gLSBUaGUgRnJhbWUgdGhlIEJvYnMgd2lsbCB1c2UuIEl0IG11c3QgYmUgcGFydCBvZiB0aGUgQmxpdHRlciBUZXh0dXJlLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdmlzaWJsZT10cnVlXSAtIFNob3VsZCB0aGUgY3JlYXRlZCBCb2IgcmVuZGVyIG9yIG5vdD9cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQm9iW119IEFuIGFycmF5IG9mIEJvYiBvYmplY3RzIHRoYXQgd2VyZSBjcmVhdGVkLlxyXG4gICAgICovXHJcbiAgICBjcmVhdGVGcm9tQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgcXVhbnRpdHksIGZyYW1lLCB2aXNpYmxlKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBib2JzID0gdGhpcy5jcmVhdGVNdWx0aXBsZShxdWFudGl0eSwgZnJhbWUsIHZpc2libGUpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvYnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgYm9iID0gYm9ic1tpXTtcclxuXHJcbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcywgYm9iLCBpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBib2JzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgbXVsdGlwbGUgQm9icyBpbiBvbmUgY2FsbC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgYW1vdW50IGNyZWF0ZWQgaXMgY29udHJvbGxlZCBieSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBgcXVhbnRpdHlgIGFyZ3VtZW50IGFuZCB0aGUgbnVtYmVyIG9mIGZyYW1lcyBwcm92aWRlZC5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgcXVhbnRpdHkgaXMgc2V0IHRvIDEwIGFuZCB5b3UgcHJvdmlkZSAyIGZyYW1lcywgdGhlbiAyMCBCb2JzIHdpbGwgYmUgY3JlYXRlZC4gMTAgd2l0aCB0aGUgZmlyc3RcclxuICAgICAqIGZyYW1lIGFuZCAxMCB3aXRoIHRoZSBzZWNvbmQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQmxpdHRlciNjcmVhdGVNdWx0aXBsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBxdWFudGl0eSAtIFRoZSBxdWFudGl0eSBvZiBCb2Igb2JqZWN0cyB0byBjcmVhdGUuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcnxQaGFzZXIuVGV4dHVyZXMuRnJhbWV8c3RyaW5nW118aW50ZWdlcltdfFBoYXNlci5UZXh0dXJlcy5GcmFtZVtdKX0gW2ZyYW1lXSAtIFRoZSBGcmFtZSB0aGUgQm9icyB3aWxsIHVzZS4gSXQgbXVzdCBiZSBwYXJ0IG9mIHRoZSBCbGl0dGVyIFRleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt2aXNpYmxlPXRydWVdIC0gU2hvdWxkIHRoZSBjcmVhdGVkIEJvYiByZW5kZXIgb3Igbm90P1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Cb2JbXX0gQW4gYXJyYXkgb2YgQm9iIG9iamVjdHMgdGhhdCB3ZXJlIGNyZWF0ZWQuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZU11bHRpcGxlOiBmdW5jdGlvbiAocXVhbnRpdHksIGZyYW1lLCB2aXNpYmxlKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChmcmFtZSA9PT0gdW5kZWZpbmVkKSB7IGZyYW1lID0gdGhpcy5mcmFtZS5uYW1lOyB9XHJcbiAgICAgICAgaWYgKHZpc2libGUgPT09IHVuZGVmaW5lZCkgeyB2aXNpYmxlID0gdHJ1ZTsgfVxyXG5cclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZnJhbWUpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZnJhbWUgPSBbIGZyYW1lIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgYm9icyA9IFtdO1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIGZyYW1lLmZvckVhY2goZnVuY3Rpb24gKHNpbmdsZUZyYW1lKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWFudGl0eTsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBib2JzLnB1c2goX3RoaXMuY3JlYXRlKDAsIDAsIHNpbmdsZUZyYW1lLCB2aXNpYmxlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGJvYnM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBjaGlsZCBjYW4gcmVuZGVyIG9yIG5vdCwgYnkgY2hlY2tpbmcgaXRzIGB2aXNpYmxlYCBhbmQgYGFscGhhYCB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQmxpdHRlciNjaGlsZENhblJlbmRlclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQm9ifSBjaGlsZCAtIFRoZSBCb2IgdG8gY2hlY2sgZm9yIHJlbmRlcmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZ2l2ZW4gY2hpbGQgY2FuIHJlbmRlciwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGNoaWxkQ2FuUmVuZGVyOiBmdW5jdGlvbiAoY2hpbGQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIChjaGlsZC52aXNpYmxlICYmIGNoaWxkLmFscGhhID4gMCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBCb2JzIHRvIGJlIHJlbmRlcmVkLlxyXG4gICAgICogSWYgdGhlIEJsaXR0ZXIgaXMgZGlydHkgdGhlbiBhIG5ldyBsaXN0IGlzIGdlbmVyYXRlZCBhbmQgc3RvcmVkIGluIGByZW5kZXJMaXN0YC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5CbGl0dGVyI2dldFJlbmRlckxpc3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Cb2JbXX0gQW4gYXJyYXkgb2YgQm9iIG9iamVjdHMgdGhhdCB3aWxsIGJlIHJlbmRlcmVkIHRoaXMgZnJhbWUuXHJcbiAgICAgKi9cclxuICAgIGdldFJlbmRlckxpc3Q6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlydHkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckxpc3QgPSB0aGlzLmNoaWxkcmVuLmxpc3QuZmlsdGVyKHRoaXMuY2hpbGRDYW5SZW5kZXIsIHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYWxsIEJvYnMgZnJvbSB0aGUgY2hpbGRyZW4gTGlzdCBhbmQgY2xlYXJzIHRoZSBkaXJ0eSBmbGFnLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkJsaXR0ZXIjY2xlYXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBjbGVhcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNoaWxkcmVuLnJlbW92ZUFsbCgpO1xyXG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIGRlc3Ryb3kgaGFuZGxlciwgY2FsbGVkIGFzIHBhcnQgb2YgdGhlIGRlc3Ryb3kgcHJvY2Vzcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5CbGl0dGVyI3ByZURlc3Ryb3lcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjkuMFxyXG4gICAgICovXHJcbiAgICBwcmVEZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uZGVzdHJveSgpO1xyXG5cclxuICAgICAgICB0aGlzLnJlbmRlckxpc3QgPSBbXTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBCbGl0dGVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/blitter/Blitter.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/blitter/BlitterCanvasRenderer.js":
/*!******************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/blitter/BlitterCanvasRenderer.js ***!
\******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Blitter#renderCanvas\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Blitter} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar BlitterCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var list = src.getRenderList();\r\n\r\n if (list.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n var ctx = renderer.currentContext;\r\n\r\n var alpha = camera.alpha * src.alpha;\r\n\r\n if (alpha === 0)\r\n {\r\n // Nothing to see, so abort early\r\n return;\r\n }\r\n\r\n // Blend Mode + Scale Mode\r\n ctx.globalCompositeOperation = renderer.blendModes[src.blendMode];\r\n\r\n ctx.imageSmoothingEnabled = !(!renderer.antialias || src.frame.source.scaleMode);\r\n\r\n var cameraScrollX = src.x - camera.scrollX * src.scrollFactorX;\r\n var cameraScrollY = src.y - camera.scrollY * src.scrollFactorY;\r\n\r\n ctx.save();\r\n\r\n if (parentMatrix)\r\n {\r\n parentMatrix.copyToContext(ctx);\r\n }\r\n\r\n var roundPixels = camera.roundPixels;\r\n\r\n // Render bobs\r\n for (var i = 0; i < list.length; i++)\r\n {\r\n var bob = list[i];\r\n var flip = (bob.flipX || bob.flipY);\r\n var frame = bob.frame;\r\n var cd = frame.canvasData;\r\n var dx = frame.x;\r\n var dy = frame.y;\r\n var fx = 1;\r\n var fy = 1;\r\n\r\n var bobAlpha = bob.alpha * alpha;\r\n\r\n if (bobAlpha === 0)\r\n {\r\n continue;\r\n }\r\n\r\n ctx.globalAlpha = bobAlpha;\r\n \r\n if (!flip)\r\n {\r\n if (roundPixels)\r\n {\r\n dx = Math.round(dx);\r\n dy = Math.round(dy);\r\n }\r\n\r\n ctx.drawImage(\r\n frame.source.image,\r\n cd.x,\r\n cd.y,\r\n cd.width,\r\n cd.height,\r\n dx + bob.x + cameraScrollX,\r\n dy + bob.y + cameraScrollY,\r\n cd.width,\r\n cd.height\r\n );\r\n }\r\n else\r\n {\r\n if (bob.flipX)\r\n {\r\n fx = -1;\r\n dx -= cd.width;\r\n }\r\n\r\n if (bob.flipY)\r\n {\r\n fy = -1;\r\n dy -= cd.height;\r\n }\r\n\r\n ctx.save();\r\n ctx.translate(bob.x + cameraScrollX, bob.y + cameraScrollY);\r\n ctx.scale(fx, fy);\r\n ctx.drawImage(frame.source.image, cd.x, cd.y, cd.width, cd.height, dx, dy, cd.width, cd.height);\r\n ctx.restore();\r\n }\r\n }\r\n \r\n ctx.restore();\r\n};\r\n\r\nmodule.exports = BlitterCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ibGl0dGVyL0JsaXR0ZXJDYW52YXNSZW5kZXJlci5qcz80MzkxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNDQUFzQztBQUNqRCxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ibGl0dGVyL0JsaXR0ZXJDYW52YXNSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBDYW52YXMgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5CbGl0dGVyI3JlbmRlckNhbnZhc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBDYW52YXMgcmVuZGVyZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkJsaXR0ZXJ9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBCbGl0dGVyQ2FudmFzUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgbGlzdCA9IHNyYy5nZXRSZW5kZXJMaXN0KCk7XHJcblxyXG4gICAgaWYgKGxpc3QubGVuZ3RoID09PSAwKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgY3R4ID0gcmVuZGVyZXIuY3VycmVudENvbnRleHQ7XHJcblxyXG4gICAgdmFyIGFscGhhID0gY2FtZXJhLmFscGhhICogc3JjLmFscGhhO1xyXG5cclxuICAgIGlmIChhbHBoYSA9PT0gMClcclxuICAgIHtcclxuICAgICAgICAvLyAgTm90aGluZyB0byBzZWUsIHNvIGFib3J0IGVhcmx5XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBCbGVuZCBNb2RlICsgU2NhbGUgTW9kZVxyXG4gICAgY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbc3JjLmJsZW5kTW9kZV07XHJcblxyXG4gICAgY3R4LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9ICEoIXJlbmRlcmVyLmFudGlhbGlhcyB8fCBzcmMuZnJhbWUuc291cmNlLnNjYWxlTW9kZSk7XHJcblxyXG4gICAgdmFyIGNhbWVyYVNjcm9sbFggPSBzcmMueCAtIGNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3Rvclg7XHJcbiAgICB2YXIgY2FtZXJhU2Nyb2xsWSA9IHNyYy55IC0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuXHJcbiAgICBjdHguc2F2ZSgpO1xyXG5cclxuICAgIGlmIChwYXJlbnRNYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgcGFyZW50TWF0cml4LmNvcHlUb0NvbnRleHQoY3R4KTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgcm91bmRQaXhlbHMgPSBjYW1lcmEucm91bmRQaXhlbHM7XHJcblxyXG4gICAgLy8gIFJlbmRlciBib2JzXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGJvYiA9IGxpc3RbaV07XHJcbiAgICAgICAgdmFyIGZsaXAgPSAoYm9iLmZsaXBYIHx8IGJvYi5mbGlwWSk7XHJcbiAgICAgICAgdmFyIGZyYW1lID0gYm9iLmZyYW1lO1xyXG4gICAgICAgIHZhciBjZCA9IGZyYW1lLmNhbnZhc0RhdGE7XHJcbiAgICAgICAgdmFyIGR4ID0gZnJhbWUueDtcclxuICAgICAgICB2YXIgZHkgPSBmcmFtZS55O1xyXG4gICAgICAgIHZhciBmeCA9IDE7XHJcbiAgICAgICAgdmFyIGZ5ID0gMTtcclxuXHJcbiAgICAgICAgdmFyIGJvYkFscGhhID0gYm9iLmFscGhhICogYWxwaGE7XHJcblxyXG4gICAgICAgIGlmIChib2JBbHBoYSA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gYm9iQWxwaGE7XHJcbiAgICBcclxuICAgICAgICBpZiAoIWZsaXApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAocm91bmRQaXhlbHMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGR4ID0gTWF0aC5yb3VuZChkeCk7XHJcbiAgICAgICAgICAgICAgICBkeSA9IE1hdGgucm91bmQoZHkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjdHguZHJhd0ltYWdlKFxyXG4gICAgICAgICAgICAgICAgZnJhbWUuc291cmNlLmltYWdlLFxyXG4gICAgICAgICAgICAgICAgY2QueCxcclxuICAgICAgICAgICAgICAgIGNkLnksXHJcbiAgICAgICAgICAgICAgICBjZC53aWR0aCxcclxuICAgICAgICAgICAgICAgIGNkLmhlaWdodCxcclxuICAgICAgICAgICAgICAgIGR4ICsgYm9iLnggKyBjYW1lcmFTY3JvbGxYLFxyXG4gICAgICAgICAgICAgICAgZHkgKyBib2IueSArIGNhbWVyYVNjcm9sbFksXHJcbiAgICAgICAgICAgICAgICBjZC53aWR0aCxcclxuICAgICAgICAgICAgICAgIGNkLmhlaWdodFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoYm9iLmZsaXBYKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmeCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgZHggLT0gY2Qud2lkdGg7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChib2IuZmxpcFkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGZ5ID0gLTE7XHJcbiAgICAgICAgICAgICAgICBkeSAtPSBjZC5oZWlnaHQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGN0eC5zYXZlKCk7XHJcbiAgICAgICAgICAgIGN0eC50cmFuc2xhdGUoYm9iLnggKyBjYW1lcmFTY3JvbGxYLCBib2IueSArIGNhbWVyYVNjcm9sbFkpO1xyXG4gICAgICAgICAgICBjdHguc2NhbGUoZngsIGZ5KTtcclxuICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShmcmFtZS5zb3VyY2UuaW1hZ2UsIGNkLngsIGNkLnksIGNkLndpZHRoLCBjZC5oZWlnaHQsIGR4LCBkeSwgY2Qud2lkdGgsIGNkLmhlaWdodCk7XHJcbiAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBjdHgucmVzdG9yZSgpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBCbGl0dGVyQ2FudmFzUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/blitter/BlitterCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/blitter/BlitterCreator.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/blitter/BlitterCreator.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Blitter = __webpack_require__(/*! ./Blitter */ \"./node_modules/phaser/src/gameobjects/blitter/Blitter.js\");\r\nvar BuildGameObject = __webpack_require__(/*! ../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\n\r\n/**\r\n * Creates a new Blitter Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Blitter Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#blitter\r\n * @since 3.0.0\r\n *\r\n * @param {object} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.Blitter} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('blitter', function (config, addToScene)\r\n{\r\n if (config === undefined) { config = {}; }\r\n\r\n var key = GetAdvancedValue(config, 'key', null);\r\n var frame = GetAdvancedValue(config, 'frame', null);\r\n\r\n var blitter = new Blitter(this.scene, 0, 0, key, frame);\r\n\r\n if (addToScene !== undefined)\r\n {\r\n config.add = addToScene;\r\n }\r\n\r\n BuildGameObject(this.scene, blitter, config);\r\n\r\n return blitter;\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectCreator context.\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ibGl0dGVyL0JsaXR0ZXJDcmVhdG9yLmpzP2E0MTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGNBQWMsbUJBQU8sQ0FBQywyRUFBVztBQUNqQyxzQkFBc0IsbUJBQU8sQ0FBQyxvRkFBb0I7QUFDbEQsd0JBQXdCLG1CQUFPLENBQUMsd0ZBQXNCO0FBQ3RELHVCQUF1QixtQkFBTyxDQUFDLHVHQUFxQzs7QUFFcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsYUFBYTs7QUFFNUM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ibGl0dGVyL0JsaXR0ZXJDcmVhdG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQmxpdHRlciA9IHJlcXVpcmUoJy4vQmxpdHRlcicpO1xyXG52YXIgQnVpbGRHYW1lT2JqZWN0ID0gcmVxdWlyZSgnLi4vQnVpbGRHYW1lT2JqZWN0Jyk7XHJcbnZhciBHYW1lT2JqZWN0Q3JlYXRvciA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3RDcmVhdG9yJyk7XHJcbnZhciBHZXRBZHZhbmNlZFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEFkdmFuY2VkVmFsdWUnKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IEJsaXR0ZXIgR2FtZSBPYmplY3QgYW5kIHJldHVybnMgaXQuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIEJsaXR0ZXIgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI2JsaXR0ZXJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byBjcmVhdGUgaXRzZWxmLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthZGRUb1NjZW5lXSAtIEFkZCB0aGlzIEdhbWUgT2JqZWN0IHRvIHRoZSBTY2VuZSBhZnRlciBjcmVhdGluZyBpdD8gSWYgc2V0IHRoaXMgYXJndW1lbnQgb3ZlcnJpZGVzIHRoZSBgYWRkYCBwcm9wZXJ0eSBpbiB0aGUgY29uZmlnIG9iamVjdC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkJsaXR0ZXJ9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdENyZWF0b3IucmVnaXN0ZXIoJ2JsaXR0ZXInLCBmdW5jdGlvbiAoY29uZmlnLCBhZGRUb1NjZW5lKVxyXG57XHJcbiAgICBpZiAoY29uZmlnID09PSB1bmRlZmluZWQpIHsgY29uZmlnID0ge307IH1cclxuXHJcbiAgICB2YXIga2V5ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdrZXknLCBudWxsKTtcclxuICAgIHZhciBmcmFtZSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnZnJhbWUnLCBudWxsKTtcclxuXHJcbiAgICB2YXIgYmxpdHRlciA9IG5ldyBCbGl0dGVyKHRoaXMuc2NlbmUsIDAsIDAsIGtleSwgZnJhbWUpO1xyXG5cclxuICAgIGlmIChhZGRUb1NjZW5lICE9PSB1bmRlZmluZWQpXHJcbiAgICB7XHJcbiAgICAgICAgY29uZmlnLmFkZCA9IGFkZFRvU2NlbmU7XHJcbiAgICB9XHJcblxyXG4gICAgQnVpbGRHYW1lT2JqZWN0KHRoaXMuc2NlbmUsIGJsaXR0ZXIsIGNvbmZpZyk7XHJcblxyXG4gICAgcmV0dXJuIGJsaXR0ZXI7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RDcmVhdG9yIGNvbnRleHQuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/blitter/BlitterCreator.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/blitter/BlitterFactory.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/blitter/BlitterFactory.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Blitter = __webpack_require__(/*! ./Blitter */ \"./node_modules/phaser/src/gameobjects/blitter/Blitter.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Blitter Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Blitter Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#blitter\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x position of the Game Object.\r\n * @param {number} y - The y position of the Game Object.\r\n * @param {string} key - The key of the Texture the Blitter object will use.\r\n * @param {(string|integer)} [frame] - The default Frame children of the Blitter will use.\r\n * \r\n * @return {Phaser.GameObjects.Blitter} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('blitter', function (x, y, key, frame)\r\n{\r\n return this.displayList.add(new Blitter(this.scene, x, y, key, frame));\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectFactory context.\r\n// \r\n// There are several properties available to use:\r\n// \r\n// this.scene - a reference to the Scene that owns the GameObjectFactory\r\n// this.displayList - a reference to the Display List the Scene owns\r\n// this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ibGl0dGVyL0JsaXR0ZXJGYWN0b3J5LmpzPzE1NjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGNBQWMsbUJBQU8sQ0FBQywyRUFBVztBQUNqQyx3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7O0FBRXREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLGlCQUFpQjtBQUM1QjtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2JsaXR0ZXIvQmxpdHRlckZhY3RvcnkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCbGl0dGVyID0gcmVxdWlyZSgnLi9CbGl0dGVyJyk7XHJcbnZhciBHYW1lT2JqZWN0RmFjdG9yeSA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3RGYWN0b3J5Jyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBCbGl0dGVyIEdhbWUgT2JqZWN0IGFuZCBhZGRzIGl0IHRvIHRoZSBTY2VuZS5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgQmxpdHRlciBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3RvcnkjYmxpdHRlclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgcG9zaXRpb24gb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgVGV4dHVyZSB0aGUgQmxpdHRlciBvYmplY3Qgd2lsbCB1c2UuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lXSAtIFRoZSBkZWZhdWx0IEZyYW1lIGNoaWxkcmVuIG9mIHRoZSBCbGl0dGVyIHdpbGwgdXNlLlxyXG4gKiBcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkJsaXR0ZXJ9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdEZhY3RvcnkucmVnaXN0ZXIoJ2JsaXR0ZXInLCBmdW5jdGlvbiAoeCwgeSwga2V5LCBmcmFtZSlcclxue1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheUxpc3QuYWRkKG5ldyBCbGl0dGVyKHRoaXMuc2NlbmUsIHgsIHksIGtleSwgZnJhbWUpKTtcclxufSk7XHJcblxyXG4vLyAgV2hlbiByZWdpc3RlcmluZyBhIGZhY3RvcnkgZnVuY3Rpb24gJ3RoaXMnIHJlZmVycyB0byB0aGUgR2FtZU9iamVjdEZhY3RvcnkgY29udGV4dC5cclxuLy8gIFxyXG4vLyAgVGhlcmUgYXJlIHNldmVyYWwgcHJvcGVydGllcyBhdmFpbGFibGUgdG8gdXNlOlxyXG4vLyAgXHJcbi8vICB0aGlzLnNjZW5lIC0gYSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgb3ducyB0aGUgR2FtZU9iamVjdEZhY3RvcnlcclxuLy8gIHRoaXMuZGlzcGxheUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgRGlzcGxheSBMaXN0IHRoZSBTY2VuZSBvd25zXHJcbi8vICB0aGlzLnVwZGF0ZUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgVXBkYXRlIExpc3QgdGhlIFNjZW5lIG93bnNcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/blitter/BlitterFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/blitter/BlitterRender.js":
/*!**********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/blitter/BlitterRender.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./BlitterWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/blitter/BlitterWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./BlitterCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/blitter/BlitterCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ibGl0dGVyL0JsaXR0ZXJSZW5kZXIuanM/MmNjYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsaUVBQWtCO0FBQzVDLG1CQUFtQixtQkFBTyxDQUFDLGlFQUFrQjs7QUFFN0MsSUFBSSxJQUFxQjtBQUN6QjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLHFHQUF3QjtBQUNsRDs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsdUdBQXlCO0FBQ3BEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ibGl0dGVyL0JsaXR0ZXJSZW5kZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL05PT1AnKTtcclxudmFyIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL05PT1AnKTtcclxuXHJcbmlmICh0eXBlb2YgV0VCR0xfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi9CbGl0dGVyV2ViR0xSZW5kZXJlcicpO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIENBTlZBU19SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi9CbGl0dGVyQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/blitter/BlitterRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/blitter/BlitterWebGLRenderer.js":
/*!*****************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/blitter/BlitterWebGLRenderer.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Blitter#renderWebGL\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Blitter} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar BlitterWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var list = src.getRenderList();\r\n\r\n if (list.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n var pipeline = this.pipeline;\r\n\r\n renderer.setPipeline(pipeline, src);\r\n\r\n var cameraScrollX = camera.scrollX * src.scrollFactorX;\r\n var cameraScrollY = camera.scrollY * src.scrollFactorY;\r\n\r\n var calcMatrix = pipeline._tempMatrix1;\r\n\r\n calcMatrix.copyFrom(camera.matrix);\r\n\r\n if (parentMatrix)\r\n {\r\n calcMatrix.multiplyWithOffset(parentMatrix, -cameraScrollX, -cameraScrollY);\r\n\r\n cameraScrollX = 0;\r\n cameraScrollY = 0;\r\n }\r\n\r\n var blitterX = src.x - cameraScrollX;\r\n var blitterY = src.y - cameraScrollY;\r\n var prevTextureSourceIndex = -1;\r\n var tintEffect = false;\r\n var alpha = camera.alpha * src.alpha;\r\n var roundPixels = camera.roundPixels;\r\n\r\n for (var index = 0; index < list.length; index++)\r\n {\r\n var bob = list[index];\r\n var frame = bob.frame;\r\n var bobAlpha = bob.alpha * alpha;\r\n\r\n if (bobAlpha === 0)\r\n {\r\n continue;\r\n }\r\n\r\n var width = frame.width;\r\n var height = frame.height;\r\n\r\n var x = blitterX + bob.x + frame.x;\r\n var y = blitterY + bob.y + frame.y;\r\n\r\n if (bob.flipX)\r\n {\r\n width *= -1;\r\n x += frame.width;\r\n }\r\n\r\n if (bob.flipY)\r\n {\r\n height *= -1;\r\n y += frame.height;\r\n }\r\n\r\n var xw = x + width;\r\n var yh = y + height;\r\n\r\n var tx0 = calcMatrix.getX(x, y);\r\n var ty0 = calcMatrix.getY(x, y);\r\n\r\n var tx1 = calcMatrix.getX(xw, yh);\r\n var ty1 = calcMatrix.getY(xw, yh);\r\n\r\n var tint = Utils.getTintAppendFloatAlpha(bob.tint, bobAlpha);\r\n\r\n // Bind texture only if the Texture Source is different from before\r\n if (frame.sourceIndex !== prevTextureSourceIndex)\r\n {\r\n pipeline.setTexture2D(frame.glTexture, 0);\r\n\r\n prevTextureSourceIndex = frame.sourceIndex;\r\n }\r\n\r\n if (roundPixels)\r\n {\r\n tx0 = Math.round(tx0);\r\n ty0 = Math.round(ty0);\r\n\r\n tx1 = Math.round(tx1);\r\n ty1 = Math.round(ty1);\r\n }\r\n\r\n // TL x/y, BL x/y, BR x/y, TR x/y\r\n if (pipeline.batchQuad(tx0, ty0, tx0, ty1, tx1, ty1, tx1, ty0, frame.u0, frame.v0, frame.u1, frame.v1, tint, tint, tint, tint, tintEffect, frame.glTexture, 0))\r\n {\r\n prevTextureSourceIndex = -1;\r\n }\r\n }\r\n};\r\n\r\nmodule.exports = BlitterWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ibGl0dGVyL0JsaXR0ZXJXZWJHTFJlbmRlcmVyLmpzP2Q1MDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRkFBNEI7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2JsaXR0ZXIvQmxpdHRlcldlYkdMUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBVdGlscyA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVyL3dlYmdsL1V0aWxzJyk7XHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIFdlYkdMIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQmxpdHRlciNyZW5kZXJXZWJHTFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgV2ViR0wgcmVuZGVyZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkJsaXR0ZXJ9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBCbGl0dGVyV2ViR0xSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHZhciBsaXN0ID0gc3JjLmdldFJlbmRlckxpc3QoKTtcclxuXHJcbiAgICBpZiAobGlzdC5sZW5ndGggPT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBwaXBlbGluZSA9IHRoaXMucGlwZWxpbmU7XHJcblxyXG4gICAgcmVuZGVyZXIuc2V0UGlwZWxpbmUocGlwZWxpbmUsIHNyYyk7XHJcblxyXG4gICAgdmFyIGNhbWVyYVNjcm9sbFggPSBjYW1lcmEuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYO1xyXG4gICAgdmFyIGNhbWVyYVNjcm9sbFkgPSBjYW1lcmEuc2Nyb2xsWSAqIHNyYy5zY3JvbGxGYWN0b3JZO1xyXG5cclxuICAgIHZhciBjYWxjTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgxO1xyXG5cclxuICAgIGNhbGNNYXRyaXguY29weUZyb20oY2FtZXJhLm1hdHJpeCk7XHJcblxyXG4gICAgaWYgKHBhcmVudE1hdHJpeClcclxuICAgIHtcclxuICAgICAgICBjYWxjTWF0cml4Lm11bHRpcGx5V2l0aE9mZnNldChwYXJlbnRNYXRyaXgsIC1jYW1lcmFTY3JvbGxYLCAtY2FtZXJhU2Nyb2xsWSk7XHJcblxyXG4gICAgICAgIGNhbWVyYVNjcm9sbFggPSAwO1xyXG4gICAgICAgIGNhbWVyYVNjcm9sbFkgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBibGl0dGVyWCA9IHNyYy54IC0gY2FtZXJhU2Nyb2xsWDtcclxuICAgIHZhciBibGl0dGVyWSA9IHNyYy55IC0gY2FtZXJhU2Nyb2xsWTtcclxuICAgIHZhciBwcmV2VGV4dHVyZVNvdXJjZUluZGV4ID0gLTE7XHJcbiAgICB2YXIgdGludEVmZmVjdCA9IGZhbHNlO1xyXG4gICAgdmFyIGFscGhhID0gY2FtZXJhLmFscGhhICogc3JjLmFscGhhO1xyXG4gICAgdmFyIHJvdW5kUGl4ZWxzID0gY2FtZXJhLnJvdW5kUGl4ZWxzO1xyXG5cclxuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgYm9iID0gbGlzdFtpbmRleF07XHJcbiAgICAgICAgdmFyIGZyYW1lID0gYm9iLmZyYW1lO1xyXG4gICAgICAgIHZhciBib2JBbHBoYSA9IGJvYi5hbHBoYSAqIGFscGhhO1xyXG5cclxuICAgICAgICBpZiAoYm9iQWxwaGEgPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB3aWR0aCA9IGZyYW1lLndpZHRoO1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XHJcblxyXG4gICAgICAgIHZhciB4ID0gYmxpdHRlclggKyBib2IueCArIGZyYW1lLng7XHJcbiAgICAgICAgdmFyIHkgPSBibGl0dGVyWSArIGJvYi55ICsgZnJhbWUueTtcclxuXHJcbiAgICAgICAgaWYgKGJvYi5mbGlwWClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHdpZHRoICo9IC0xO1xyXG4gICAgICAgICAgICB4ICs9IGZyYW1lLndpZHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJvYi5mbGlwWSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGhlaWdodCAqPSAtMTtcclxuICAgICAgICAgICAgeSArPSBmcmFtZS5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgeHcgPSB4ICsgd2lkdGg7XHJcbiAgICAgICAgdmFyIHloID0geSArIGhlaWdodDtcclxuXHJcbiAgICAgICAgdmFyIHR4MCA9IGNhbGNNYXRyaXguZ2V0WCh4LCB5KTtcclxuICAgICAgICB2YXIgdHkwID0gY2FsY01hdHJpeC5nZXRZKHgsIHkpO1xyXG5cclxuICAgICAgICB2YXIgdHgxID0gY2FsY01hdHJpeC5nZXRYKHh3LCB5aCk7XHJcbiAgICAgICAgdmFyIHR5MSA9IGNhbGNNYXRyaXguZ2V0WSh4dywgeWgpO1xyXG5cclxuICAgICAgICB2YXIgdGludCA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhKGJvYi50aW50LCBib2JBbHBoYSk7XHJcblxyXG4gICAgICAgIC8vICBCaW5kIHRleHR1cmUgb25seSBpZiB0aGUgVGV4dHVyZSBTb3VyY2UgaXMgZGlmZmVyZW50IGZyb20gYmVmb3JlXHJcbiAgICAgICAgaWYgKGZyYW1lLnNvdXJjZUluZGV4ICE9PSBwcmV2VGV4dHVyZVNvdXJjZUluZGV4KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcGlwZWxpbmUuc2V0VGV4dHVyZTJEKGZyYW1lLmdsVGV4dHVyZSwgMCk7XHJcblxyXG4gICAgICAgICAgICBwcmV2VGV4dHVyZVNvdXJjZUluZGV4ID0gZnJhbWUuc291cmNlSW5kZXg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocm91bmRQaXhlbHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0eDAgPSBNYXRoLnJvdW5kKHR4MCk7XHJcbiAgICAgICAgICAgIHR5MCA9IE1hdGgucm91bmQodHkwKTtcclxuXHJcbiAgICAgICAgICAgIHR4MSA9IE1hdGgucm91bmQodHgxKTtcclxuICAgICAgICAgICAgdHkxID0gTWF0aC5yb3VuZCh0eTEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFRMIHgveSwgQkwgeC95LCBCUiB4L3ksIFRSIHgveVxyXG4gICAgICAgIGlmIChwaXBlbGluZS5iYXRjaFF1YWQodHgwLCB0eTAsIHR4MCwgdHkxLCB0eDEsIHR5MSwgdHgxLCB0eTAsIGZyYW1lLnUwLCBmcmFtZS52MCwgZnJhbWUudTEsIGZyYW1lLnYxLCB0aW50LCB0aW50LCB0aW50LCB0aW50LCB0aW50RWZmZWN0LCBmcmFtZS5nbFRleHR1cmUsIDApKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJldlRleHR1cmVTb3VyY2VJbmRleCA9IC0xO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQmxpdHRlcldlYkdMUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/blitter/BlitterWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/blitter/Bob.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/blitter/Bob.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Frame = __webpack_require__(/*! ../../textures/Frame */ \"./node_modules/phaser/src/textures/Frame.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Bob Game Object.\r\n *\r\n * A Bob belongs to a Blitter Game Object. The Blitter is responsible for managing and rendering this object.\r\n *\r\n * A Bob has a position, alpha value and a frame from a texture that it uses to render with. You can also toggle\r\n * the flipped and visible state of the Bob. The Frame the Bob uses to render can be changed dynamically, but it\r\n * must be a Frame within the Texture used by the parent Blitter.\r\n *\r\n * Bob positions are relative to the Blitter parent. So if you move the Blitter parent, all Bob children will\r\n * have their positions impacted by this change as well.\r\n *\r\n * You can manipulate Bob objects directly from your game code, but the creation and destruction of them should be\r\n * handled via the Blitter parent.\r\n *\r\n * @class Bob\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Blitter} blitter - The parent Blitter object is responsible for updating this Bob.\r\n * @param {number} x - The horizontal position of this Game Object in the world, relative to the parent Blitter position.\r\n * @param {number} y - The vertical position of this Game Object in the world, relative to the parent Blitter position.\r\n * @param {(string|integer)} frame - The Frame this Bob will render with, as defined in the Texture the parent Blitter is using.\r\n * @param {boolean} visible - Should the Bob render visible or not to start with?\r\n */\r\nvar Bob = new Class({\r\n\r\n initialize:\r\n\r\n function Bob (blitter, x, y, frame, visible)\r\n {\r\n /**\r\n * The Blitter object that this Bob belongs to.\r\n *\r\n * @name Phaser.GameObjects.Bob#parent\r\n * @type {Phaser.GameObjects.Blitter}\r\n * @since 3.0.0\r\n */\r\n this.parent = blitter;\r\n\r\n /**\r\n * The x position of this Bob, relative to the x position of the Blitter.\r\n *\r\n * @name Phaser.GameObjects.Bob#x\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.x = x;\r\n\r\n /**\r\n * The y position of this Bob, relative to the y position of the Blitter.\r\n *\r\n * @name Phaser.GameObjects.Bob#y\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.y = y;\r\n\r\n /**\r\n * The frame that the Bob uses to render with.\r\n * To change the frame use the `Bob.setFrame` method.\r\n *\r\n * @name Phaser.GameObjects.Bob#frame\r\n * @type {Phaser.Textures.Frame}\r\n * @protected\r\n * @since 3.0.0\r\n */\r\n this.frame = frame;\r\n\r\n /**\r\n * A blank object which can be used to store data related to this Bob in.\r\n *\r\n * @name Phaser.GameObjects.Bob#data\r\n * @type {object}\r\n * @default {}\r\n * @since 3.0.0\r\n */\r\n this.data = {};\r\n\r\n /**\r\n * The tint value of this Bob.\r\n *\r\n * @name Phaser.GameObjects.Bob#tint\r\n * @type {number}\r\n * @default 0xffffff\r\n * @since 3.20.0\r\n */\r\n this.tint = 0xffffff;\r\n\r\n /**\r\n * The visible state of this Bob.\r\n *\r\n * @name Phaser.GameObjects.Bob#_visible\r\n * @type {boolean}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._visible = visible;\r\n\r\n /**\r\n * The alpha value of this Bob.\r\n *\r\n * @name Phaser.GameObjects.Bob#_alpha\r\n * @type {number}\r\n * @private\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n this._alpha = 1;\r\n\r\n /**\r\n * The horizontally flipped state of the Bob.\r\n * A Bob that is flipped horizontally will render inversed on the horizontal axis.\r\n * Flipping always takes place from the middle of the texture.\r\n *\r\n * @name Phaser.GameObjects.Bob#flipX\r\n * @type {boolean}\r\n * @since 3.0.0\r\n */\r\n this.flipX = false;\r\n\r\n /**\r\n * The vertically flipped state of the Bob.\r\n * A Bob that is flipped vertically will render inversed on the vertical axis (i.e. upside down)\r\n * Flipping always takes place from the middle of the texture.\r\n *\r\n * @name Phaser.GameObjects.Bob#flipY\r\n * @type {boolean}\r\n * @since 3.0.0\r\n */\r\n this.flipY = false;\r\n },\r\n\r\n /**\r\n * Changes the Texture Frame being used by this Bob.\r\n * The frame must be part of the Texture the parent Blitter is using.\r\n * If no value is given it will use the default frame of the Blitter parent.\r\n *\r\n * @method Phaser.GameObjects.Bob#setFrame\r\n * @since 3.0.0\r\n *\r\n * @param {(string|integer|Phaser.Textures.Frame)} [frame] - The frame to be used during rendering.\r\n *\r\n * @return {Phaser.GameObjects.Bob} This Bob Game Object.\r\n */\r\n setFrame: function (frame)\r\n {\r\n if (frame === undefined)\r\n {\r\n this.frame = this.parent.frame;\r\n }\r\n else if (frame instanceof Frame && frame.texture === this.parent.texture)\r\n {\r\n this.frame = frame;\r\n }\r\n else\r\n {\r\n this.frame = this.parent.texture.get(frame);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Resets the horizontal and vertical flipped state of this Bob back to their default un-flipped state.\r\n *\r\n * @method Phaser.GameObjects.Bob#resetFlip\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Bob} This Bob Game Object.\r\n */\r\n resetFlip: function ()\r\n {\r\n this.flipX = false;\r\n this.flipY = false;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Resets this Bob.\r\n *\r\n * Changes the position to the values given, and optionally changes the frame.\r\n *\r\n * Also resets the flipX and flipY values, sets alpha back to 1 and visible to true.\r\n *\r\n * @method Phaser.GameObjects.Bob#reset\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x position of the Bob. Bob coordinate are relative to the position of the Blitter object.\r\n * @param {number} y - The y position of the Bob. Bob coordinate are relative to the position of the Blitter object.\r\n * @param {(string|integer|Phaser.Textures.Frame)} [frame] - The Frame the Bob will use. It _must_ be part of the Texture the parent Blitter object is using.\r\n *\r\n * @return {Phaser.GameObjects.Bob} This Bob Game Object.\r\n */\r\n reset: function (x, y, frame)\r\n {\r\n this.x = x;\r\n this.y = y;\r\n\r\n this.flipX = false;\r\n this.flipY = false;\r\n\r\n this._alpha = 1;\r\n this._visible = true;\r\n\r\n this.parent.dirty = true;\r\n\r\n if (frame)\r\n {\r\n this.setFrame(frame);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Changes the position of this Bob to the values given.\r\n *\r\n * @method Phaser.GameObjects.Bob#setPosition\r\n * @since 3.20.0\r\n *\r\n * @param {number} x - The x position of the Bob. Bob coordinate are relative to the position of the Blitter object.\r\n * @param {number} y - The y position of the Bob. Bob coordinate are relative to the position of the Blitter object.\r\n *\r\n * @return {Phaser.GameObjects.Bob} This Bob Game Object.\r\n */\r\n setPosition: function (x, y)\r\n {\r\n this.x = x;\r\n this.y = y;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the horizontal flipped state of this Bob.\r\n *\r\n * @method Phaser.GameObjects.Bob#setFlipX\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} value - The flipped state. `false` for no flip, or `true` to be flipped.\r\n *\r\n * @return {Phaser.GameObjects.Bob} This Bob Game Object.\r\n */\r\n setFlipX: function (value)\r\n {\r\n this.flipX = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the vertical flipped state of this Bob.\r\n *\r\n * @method Phaser.GameObjects.Bob#setFlipY\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} value - The flipped state. `false` for no flip, or `true` to be flipped.\r\n *\r\n * @return {Phaser.GameObjects.Bob} This Bob Game Object.\r\n */\r\n setFlipY: function (value)\r\n {\r\n this.flipY = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the horizontal and vertical flipped state of this Bob.\r\n *\r\n * @method Phaser.GameObjects.Bob#setFlip\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} x - The horizontal flipped state. `false` for no flip, or `true` to be flipped.\r\n * @param {boolean} y - The horizontal flipped state. `false` for no flip, or `true` to be flipped.\r\n *\r\n * @return {Phaser.GameObjects.Bob} This Bob Game Object.\r\n */\r\n setFlip: function (x, y)\r\n {\r\n this.flipX = x;\r\n this.flipY = y;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the visibility of this Bob.\r\n * \r\n * An invisible Bob will skip rendering.\r\n *\r\n * @method Phaser.GameObjects.Bob#setVisible\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} value - The visible state of the Game Object.\r\n *\r\n * @return {Phaser.GameObjects.Bob} This Bob Game Object.\r\n */\r\n setVisible: function (value)\r\n {\r\n this.visible = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the Alpha level of this Bob. The alpha controls the opacity of the Game Object as it renders.\r\n * Alpha values are provided as a float between 0, fully transparent, and 1, fully opaque.\r\n * \r\n * A Bob with alpha 0 will skip rendering.\r\n *\r\n * @method Phaser.GameObjects.Bob#setAlpha\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The alpha value used for this Bob. Between 0 and 1.\r\n *\r\n * @return {Phaser.GameObjects.Bob} This Bob Game Object.\r\n */\r\n setAlpha: function (value)\r\n {\r\n this.alpha = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the tint of this Bob.\r\n *\r\n * @method Phaser.GameObjects.Bob#setTint\r\n * @since 3.20.0\r\n *\r\n * @param {number} value - The tint value used for this Bob. Between 0 and 0xffffff.\r\n *\r\n * @return {Phaser.GameObjects.Bob} This Bob Game Object.\r\n */\r\n setTint: function (value)\r\n {\r\n this.tint = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Destroys this Bob instance.\r\n * Removes itself from the Blitter and clears the parent, frame and data properties.\r\n *\r\n * @method Phaser.GameObjects.Bob#destroy\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.parent.dirty = true;\r\n\r\n this.parent.children.remove(this);\r\n\r\n this.parent = undefined;\r\n this.frame = undefined;\r\n this.data = undefined;\r\n },\r\n\r\n /**\r\n * The visible state of the Bob.\r\n * \r\n * An invisible Bob will skip rendering.\r\n *\r\n * @name Phaser.GameObjects.Bob#visible\r\n * @type {boolean}\r\n * @since 3.0.0\r\n */\r\n visible: {\r\n\r\n get: function ()\r\n {\r\n return this._visible;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.parent.dirty |= (this._visible !== value);\r\n this._visible = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The alpha value of the Bob, between 0 and 1.\r\n * \r\n * A Bob with alpha 0 will skip rendering.\r\n *\r\n * @name Phaser.GameObjects.Bob#alpha\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n alpha: {\r\n\r\n get: function ()\r\n {\r\n return this._alpha;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.parent.dirty |= ((this._alpha > 0) !== (value > 0));\r\n this._alpha = value;\r\n }\r\n\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Bob;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ibGl0dGVyL0JvYi5qcz8zNDIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLFlBQVksbUJBQU8sQ0FBQyx5RUFBc0I7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHVDQUF1QztBQUN0RDtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLHVDQUF1QztBQUN0RDtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2JsaXR0ZXIvQm9iLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgRnJhbWUgPSByZXF1aXJlKCcuLi8uLi90ZXh0dXJlcy9GcmFtZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBCb2IgR2FtZSBPYmplY3QuXHJcbiAqXHJcbiAqIEEgQm9iIGJlbG9uZ3MgdG8gYSBCbGl0dGVyIEdhbWUgT2JqZWN0LiBUaGUgQmxpdHRlciBpcyByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgYW5kIHJlbmRlcmluZyB0aGlzIG9iamVjdC5cclxuICpcclxuICogQSBCb2IgaGFzIGEgcG9zaXRpb24sIGFscGhhIHZhbHVlIGFuZCBhIGZyYW1lIGZyb20gYSB0ZXh0dXJlIHRoYXQgaXQgdXNlcyB0byByZW5kZXIgd2l0aC4gWW91IGNhbiBhbHNvIHRvZ2dsZVxyXG4gKiB0aGUgZmxpcHBlZCBhbmQgdmlzaWJsZSBzdGF0ZSBvZiB0aGUgQm9iLiBUaGUgRnJhbWUgdGhlIEJvYiB1c2VzIHRvIHJlbmRlciBjYW4gYmUgY2hhbmdlZCBkeW5hbWljYWxseSwgYnV0IGl0XHJcbiAqIG11c3QgYmUgYSBGcmFtZSB3aXRoaW4gdGhlIFRleHR1cmUgdXNlZCBieSB0aGUgcGFyZW50IEJsaXR0ZXIuXHJcbiAqXHJcbiAqIEJvYiBwb3NpdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBCbGl0dGVyIHBhcmVudC4gU28gaWYgeW91IG1vdmUgdGhlIEJsaXR0ZXIgcGFyZW50LCBhbGwgQm9iIGNoaWxkcmVuIHdpbGxcclxuICogaGF2ZSB0aGVpciBwb3NpdGlvbnMgaW1wYWN0ZWQgYnkgdGhpcyBjaGFuZ2UgYXMgd2VsbC5cclxuICpcclxuICogWW91IGNhbiBtYW5pcHVsYXRlIEJvYiBvYmplY3RzIGRpcmVjdGx5IGZyb20geW91ciBnYW1lIGNvZGUsIGJ1dCB0aGUgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uIG9mIHRoZW0gc2hvdWxkIGJlXHJcbiAqIGhhbmRsZWQgdmlhIHRoZSBCbGl0dGVyIHBhcmVudC5cclxuICpcclxuICogQGNsYXNzIEJvYlxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQmxpdHRlcn0gYmxpdHRlciAtIFRoZSBwYXJlbnQgQmxpdHRlciBvYmplY3QgaXMgcmVzcG9uc2libGUgZm9yIHVwZGF0aW5nIHRoaXMgQm9iLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLCByZWxhdGl2ZSB0byB0aGUgcGFyZW50IEJsaXR0ZXIgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLCByZWxhdGl2ZSB0byB0aGUgcGFyZW50IEJsaXR0ZXIgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gZnJhbWUgLSBUaGUgRnJhbWUgdGhpcyBCb2Igd2lsbCByZW5kZXIgd2l0aCwgYXMgZGVmaW5lZCBpbiB0aGUgVGV4dHVyZSB0aGUgcGFyZW50IEJsaXR0ZXIgaXMgdXNpbmcuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmlzaWJsZSAtIFNob3VsZCB0aGUgQm9iIHJlbmRlciB2aXNpYmxlIG9yIG5vdCB0byBzdGFydCB3aXRoP1xyXG4gKi9cclxudmFyIEJvYiA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBCb2IgKGJsaXR0ZXIsIHgsIHksIGZyYW1lLCB2aXNpYmxlKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBCbGl0dGVyIG9iamVjdCB0aGF0IHRoaXMgQm9iIGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQm9iI3BhcmVudFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQmxpdHRlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBhcmVudCA9IGJsaXR0ZXI7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB4IHBvc2l0aW9uIG9mIHRoaXMgQm9iLCByZWxhdGl2ZSB0byB0aGUgeCBwb3NpdGlvbiBvZiB0aGUgQmxpdHRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Cb2IjeFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy54ID0geDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHkgcG9zaXRpb24gb2YgdGhpcyBCb2IsIHJlbGF0aXZlIHRvIHRoZSB5IHBvc2l0aW9uIG9mIHRoZSBCbGl0dGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkJvYiN5XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnkgPSB5O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZnJhbWUgdGhhdCB0aGUgQm9iIHVzZXMgdG8gcmVuZGVyIHdpdGguXHJcbiAgICAgICAgICogVG8gY2hhbmdlIHRoZSBmcmFtZSB1c2UgdGhlIGBCb2Iuc2V0RnJhbWVgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Cb2IjZnJhbWVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlRleHR1cmVzLkZyYW1lfVxyXG4gICAgICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgYmxhbmsgb2JqZWN0IHdoaWNoIGNhbiBiZSB1c2VkIHRvIHN0b3JlIGRhdGEgcmVsYXRlZCB0byB0aGlzIEJvYiBpbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Cb2IjZGF0YVxyXG4gICAgICAgICAqIEB0eXBlIHtvYmplY3R9XHJcbiAgICAgICAgICogQGRlZmF1bHQge31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRhdGEgPSB7fTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRpbnQgdmFsdWUgb2YgdGhpcyBCb2IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQm9iI3RpbnRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDB4ZmZmZmZmXHJcbiAgICAgICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGludCA9IDB4ZmZmZmZmO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmlzaWJsZSBzdGF0ZSBvZiB0aGlzIEJvYi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Cb2IjX3Zpc2libGVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3Zpc2libGUgPSB2aXNpYmxlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYWxwaGEgdmFsdWUgb2YgdGhpcyBCb2IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQm9iI19hbHBoYVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fYWxwaGEgPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaG9yaXpvbnRhbGx5IGZsaXBwZWQgc3RhdGUgb2YgdGhlIEJvYi5cclxuICAgICAgICAgKiBBIEJvYiB0aGF0IGlzIGZsaXBwZWQgaG9yaXpvbnRhbGx5IHdpbGwgcmVuZGVyIGludmVyc2VkIG9uIHRoZSBob3Jpem9udGFsIGF4aXMuXHJcbiAgICAgICAgICogRmxpcHBpbmcgYWx3YXlzIHRha2VzIHBsYWNlIGZyb20gdGhlIG1pZGRsZSBvZiB0aGUgdGV4dHVyZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Cb2IjZmxpcFhcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZsaXBYID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB2ZXJ0aWNhbGx5IGZsaXBwZWQgc3RhdGUgb2YgdGhlIEJvYi5cclxuICAgICAgICAgKiBBIEJvYiB0aGF0IGlzIGZsaXBwZWQgdmVydGljYWxseSB3aWxsIHJlbmRlciBpbnZlcnNlZCBvbiB0aGUgdmVydGljYWwgYXhpcyAoaS5lLiB1cHNpZGUgZG93bilcclxuICAgICAgICAgKiBGbGlwcGluZyBhbHdheXMgdGFrZXMgcGxhY2UgZnJvbSB0aGUgbWlkZGxlIG9mIHRoZSB0ZXh0dXJlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkJvYiNmbGlwWVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZmxpcFkgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGFuZ2VzIHRoZSBUZXh0dXJlIEZyYW1lIGJlaW5nIHVzZWQgYnkgdGhpcyBCb2IuXHJcbiAgICAgKiBUaGUgZnJhbWUgbXVzdCBiZSBwYXJ0IG9mIHRoZSBUZXh0dXJlIHRoZSBwYXJlbnQgQmxpdHRlciBpcyB1c2luZy5cclxuICAgICAqIElmIG5vIHZhbHVlIGlzIGdpdmVuIGl0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IGZyYW1lIG9mIHRoZSBCbGl0dGVyIHBhcmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Cb2Ijc2V0RnJhbWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyfFBoYXNlci5UZXh0dXJlcy5GcmFtZSl9IFtmcmFtZV0gLSBUaGUgZnJhbWUgdG8gYmUgdXNlZCBkdXJpbmcgcmVuZGVyaW5nLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Cb2J9IFRoaXMgQm9iIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRGcmFtZTogZnVuY3Rpb24gKGZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChmcmFtZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZSA9IHRoaXMucGFyZW50LmZyYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChmcmFtZSBpbnN0YW5jZW9mIEZyYW1lICYmIGZyYW1lLnRleHR1cmUgPT09IHRoaXMucGFyZW50LnRleHR1cmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUgPSB0aGlzLnBhcmVudC50ZXh0dXJlLmdldChmcmFtZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldHMgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGZsaXBwZWQgc3RhdGUgb2YgdGhpcyBCb2IgYmFjayB0byB0aGVpciBkZWZhdWx0IHVuLWZsaXBwZWQgc3RhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQm9iI3Jlc2V0RmxpcFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkJvYn0gVGhpcyBCb2IgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0RmxpcDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmZsaXBYID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5mbGlwWSA9IGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldHMgdGhpcyBCb2IuXHJcbiAgICAgKlxyXG4gICAgICogQ2hhbmdlcyB0aGUgcG9zaXRpb24gdG8gdGhlIHZhbHVlcyBnaXZlbiwgYW5kIG9wdGlvbmFsbHkgY2hhbmdlcyB0aGUgZnJhbWUuXHJcbiAgICAgKlxyXG4gICAgICogQWxzbyByZXNldHMgdGhlIGZsaXBYIGFuZCBmbGlwWSB2YWx1ZXMsIHNldHMgYWxwaGEgYmFjayB0byAxIGFuZCB2aXNpYmxlIHRvIHRydWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQm9iI3Jlc2V0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IHBvc2l0aW9uIG9mIHRoZSBCb2IuIEJvYiBjb29yZGluYXRlIGFyZSByZWxhdGl2ZSB0byB0aGUgcG9zaXRpb24gb2YgdGhlIEJsaXR0ZXIgb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgQm9iLiBCb2IgY29vcmRpbmF0ZSBhcmUgcmVsYXRpdmUgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSBCbGl0dGVyIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyfFBoYXNlci5UZXh0dXJlcy5GcmFtZSl9IFtmcmFtZV0gLSBUaGUgRnJhbWUgdGhlIEJvYiB3aWxsIHVzZS4gSXQgX211c3RfIGJlIHBhcnQgb2YgdGhlIFRleHR1cmUgdGhlIHBhcmVudCBCbGl0dGVyIG9iamVjdCBpcyB1c2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQm9ifSBUaGlzIEJvYiBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcmVzZXQ6IGZ1bmN0aW9uICh4LCB5LCBmcmFtZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnggPSB4O1xyXG4gICAgICAgIHRoaXMueSA9IHk7XHJcblxyXG4gICAgICAgIHRoaXMuZmxpcFggPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmZsaXBZID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuX2FscGhhID0gMTtcclxuICAgICAgICB0aGlzLl92aXNpYmxlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnQuZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAoZnJhbWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldEZyYW1lKGZyYW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoYW5nZXMgdGhlIHBvc2l0aW9uIG9mIHRoaXMgQm9iIHRvIHRoZSB2YWx1ZXMgZ2l2ZW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQm9iI3NldFBvc2l0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgQm9iLiBCb2IgY29vcmRpbmF0ZSBhcmUgcmVsYXRpdmUgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSBCbGl0dGVyIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgcG9zaXRpb24gb2YgdGhlIEJvYi4gQm9iIGNvb3JkaW5hdGUgYXJlIHJlbGF0aXZlIHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUgQmxpdHRlciBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkJvYn0gVGhpcyBCb2IgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFBvc2l0aW9uOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnggPSB4O1xyXG4gICAgICAgIHRoaXMueSA9IHk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGhvcml6b250YWwgZmxpcHBlZCBzdGF0ZSBvZiB0aGlzIEJvYi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Cb2Ijc2V0RmxpcFhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBUaGUgZmxpcHBlZCBzdGF0ZS4gYGZhbHNlYCBmb3Igbm8gZmxpcCwgb3IgYHRydWVgIHRvIGJlIGZsaXBwZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkJvYn0gVGhpcyBCb2IgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEZsaXBYOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5mbGlwWCA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB2ZXJ0aWNhbCBmbGlwcGVkIHN0YXRlIG9mIHRoaXMgQm9iLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkJvYiNzZXRGbGlwWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB2YWx1ZSAtIFRoZSBmbGlwcGVkIHN0YXRlLiBgZmFsc2VgIGZvciBubyBmbGlwLCBvciBgdHJ1ZWAgdG8gYmUgZmxpcHBlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQm9ifSBUaGlzIEJvYiBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0RmxpcFk6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmZsaXBZID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGZsaXBwZWQgc3RhdGUgb2YgdGhpcyBCb2IuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQm9iI3NldEZsaXBcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0geCAtIFRoZSBob3Jpem9udGFsIGZsaXBwZWQgc3RhdGUuIGBmYWxzZWAgZm9yIG5vIGZsaXAsIG9yIGB0cnVlYCB0byBiZSBmbGlwcGVkLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB5IC0gVGhlIGhvcml6b250YWwgZmxpcHBlZCBzdGF0ZS4gYGZhbHNlYCBmb3Igbm8gZmxpcCwgb3IgYHRydWVgIHRvIGJlIGZsaXBwZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkJvYn0gVGhpcyBCb2IgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEZsaXA6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZmxpcFggPSB4O1xyXG4gICAgICAgIHRoaXMuZmxpcFkgPSB5O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB2aXNpYmlsaXR5IG9mIHRoaXMgQm9iLlxyXG4gICAgICogXHJcbiAgICAgKiBBbiBpbnZpc2libGUgQm9iIHdpbGwgc2tpcCByZW5kZXJpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQm9iI3NldFZpc2libGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBUaGUgdmlzaWJsZSBzdGF0ZSBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkJvYn0gVGhpcyBCb2IgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFZpc2libGU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnZpc2libGUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBBbHBoYSBsZXZlbCBvZiB0aGlzIEJvYi4gVGhlIGFscGhhIGNvbnRyb2xzIHRoZSBvcGFjaXR5IG9mIHRoZSBHYW1lIE9iamVjdCBhcyBpdCByZW5kZXJzLlxyXG4gICAgICogQWxwaGEgdmFsdWVzIGFyZSBwcm92aWRlZCBhcyBhIGZsb2F0IGJldHdlZW4gMCwgZnVsbHkgdHJhbnNwYXJlbnQsIGFuZCAxLCBmdWxseSBvcGFxdWUuXHJcbiAgICAgKiBcclxuICAgICAqIEEgQm9iIHdpdGggYWxwaGEgMCB3aWxsIHNraXAgcmVuZGVyaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkJvYiNzZXRBbHBoYVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFscGhhIHZhbHVlIHVzZWQgZm9yIHRoaXMgQm9iLiBCZXR3ZWVuIDAgYW5kIDEuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkJvYn0gVGhpcyBCb2IgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEFscGhhOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB0aW50IG9mIHRoaXMgQm9iLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkJvYiNzZXRUaW50XHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHRpbnQgdmFsdWUgdXNlZCBmb3IgdGhpcyBCb2IuIEJldHdlZW4gMCBhbmQgMHhmZmZmZmYuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkJvYn0gVGhpcyBCb2IgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFRpbnQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnRpbnQgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhpcyBCb2IgaW5zdGFuY2UuXHJcbiAgICAgKiBSZW1vdmVzIGl0c2VsZiBmcm9tIHRoZSBCbGl0dGVyIGFuZCBjbGVhcnMgdGhlIHBhcmVudCwgZnJhbWUgYW5kIGRhdGEgcHJvcGVydGllcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Cb2IjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5wYXJlbnQuZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudC5jaGlsZHJlbi5yZW1vdmUodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuZnJhbWUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2aXNpYmxlIHN0YXRlIG9mIHRoZSBCb2IuXHJcbiAgICAgKiBcclxuICAgICAqIEFuIGludmlzaWJsZSBCb2Igd2lsbCBza2lwIHJlbmRlcmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQm9iI3Zpc2libGVcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHZpc2libGU6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2libGU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5kaXJ0eSB8PSAodGhpcy5fdmlzaWJsZSAhPT0gdmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLl92aXNpYmxlID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYWxwaGEgdmFsdWUgb2YgdGhlIEJvYiwgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICogXHJcbiAgICAgKiBBIEJvYiB3aXRoIGFscGhhIDAgd2lsbCBza2lwIHJlbmRlcmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQm9iI2FscGhhXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGFscGhhOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbHBoYTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmRpcnR5IHw9ICgodGhpcy5fYWxwaGEgPiAwKSAhPT0gKHZhbHVlID4gMCkpO1xyXG4gICAgICAgICAgICB0aGlzLl9hbHBoYSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQm9iO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/blitter/Bob.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/components/Alpha.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/components/Alpha.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Clamp = __webpack_require__(/*! ../../math/Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\n\r\n// bitmask flag for GameObject.renderMask\r\nvar _FLAG = 2; // 0010\r\n\r\n/**\r\n * Provides methods used for setting the alpha properties of a Game Object.\r\n * Should be applied as a mixin and not used directly.\r\n *\r\n * @namespace Phaser.GameObjects.Components.Alpha\r\n * @since 3.0.0\r\n */\r\n\r\nvar Alpha = {\r\n\r\n /**\r\n * Private internal value. Holds the global alpha value.\r\n *\r\n * @name Phaser.GameObjects.Components.Alpha#_alpha\r\n * @type {number}\r\n * @private\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n _alpha: 1,\r\n\r\n /**\r\n * Private internal value. Holds the top-left alpha value.\r\n *\r\n * @name Phaser.GameObjects.Components.Alpha#_alphaTL\r\n * @type {number}\r\n * @private\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n _alphaTL: 1,\r\n\r\n /**\r\n * Private internal value. Holds the top-right alpha value.\r\n *\r\n * @name Phaser.GameObjects.Components.Alpha#_alphaTR\r\n * @type {number}\r\n * @private\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n _alphaTR: 1,\r\n\r\n /**\r\n * Private internal value. Holds the bottom-left alpha value.\r\n *\r\n * @name Phaser.GameObjects.Components.Alpha#_alphaBL\r\n * @type {number}\r\n * @private\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n _alphaBL: 1,\r\n\r\n /**\r\n * Private internal value. Holds the bottom-right alpha value.\r\n *\r\n * @name Phaser.GameObjects.Components.Alpha#_alphaBR\r\n * @type {number}\r\n * @private\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n _alphaBR: 1,\r\n\r\n /**\r\n * Clears all alpha values associated with this Game Object.\r\n *\r\n * Immediately sets the alpha levels back to 1 (fully opaque).\r\n *\r\n * @method Phaser.GameObjects.Components.Alpha#clearAlpha\r\n * @since 3.0.0\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n clearAlpha: function ()\r\n {\r\n return this.setAlpha(1);\r\n },\r\n\r\n /**\r\n * Set the Alpha level of this Game Object. The alpha controls the opacity of the Game Object as it renders.\r\n * Alpha values are provided as a float between 0, fully transparent, and 1, fully opaque.\r\n *\r\n * If your game is running under WebGL you can optionally specify four different alpha values, each of which\r\n * correspond to the four corners of the Game Object. Under Canvas only the `topLeft` value given is used.\r\n *\r\n * @method Phaser.GameObjects.Components.Alpha#setAlpha\r\n * @since 3.0.0\r\n *\r\n * @param {number} [topLeft=1] - The alpha value used for the top-left of the Game Object. If this is the only value given it's applied across the whole Game Object.\r\n * @param {number} [topRight] - The alpha value used for the top-right of the Game Object. WebGL only.\r\n * @param {number} [bottomLeft] - The alpha value used for the bottom-left of the Game Object. WebGL only.\r\n * @param {number} [bottomRight] - The alpha value used for the bottom-right of the Game Object. WebGL only.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setAlpha: function (topLeft, topRight, bottomLeft, bottomRight)\r\n {\r\n if (topLeft === undefined) { topLeft = 1; }\r\n\r\n // Treat as if there is only one alpha value for the whole Game Object\r\n if (topRight === undefined)\r\n {\r\n this.alpha = topLeft;\r\n }\r\n else\r\n {\r\n this._alphaTL = Clamp(topLeft, 0, 1);\r\n this._alphaTR = Clamp(topRight, 0, 1);\r\n this._alphaBL = Clamp(bottomLeft, 0, 1);\r\n this._alphaBR = Clamp(bottomRight, 0, 1);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * The alpha value of the Game Object.\r\n *\r\n * This is a global value, impacting the entire Game Object, not just a region of it.\r\n *\r\n * @name Phaser.GameObjects.Components.Alpha#alpha\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n alpha: {\r\n\r\n get: function ()\r\n {\r\n return this._alpha;\r\n },\r\n\r\n set: function (value)\r\n {\r\n var v = Clamp(value, 0, 1);\r\n\r\n this._alpha = v;\r\n this._alphaTL = v;\r\n this._alphaTR = v;\r\n this._alphaBL = v;\r\n this._alphaBR = v;\r\n\r\n if (v === 0)\r\n {\r\n this.renderFlags &= ~_FLAG;\r\n }\r\n else\r\n {\r\n this.renderFlags |= _FLAG;\r\n }\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The alpha value starting from the top-left of the Game Object.\r\n * This value is interpolated from the corner to the center of the Game Object.\r\n *\r\n * @name Phaser.GameObjects.Components.Alpha#alphaTopLeft\r\n * @type {number}\r\n * @webglOnly\r\n * @since 3.0.0\r\n */\r\n alphaTopLeft: {\r\n\r\n get: function ()\r\n {\r\n return this._alphaTL;\r\n },\r\n\r\n set: function (value)\r\n {\r\n var v = Clamp(value, 0, 1);\r\n\r\n this._alphaTL = v;\r\n\r\n if (v !== 0)\r\n {\r\n this.renderFlags |= _FLAG;\r\n }\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The alpha value starting from the top-right of the Game Object.\r\n * This value is interpolated from the corner to the center of the Game Object.\r\n *\r\n * @name Phaser.GameObjects.Components.Alpha#alphaTopRight\r\n * @type {number}\r\n * @webglOnly\r\n * @since 3.0.0\r\n */\r\n alphaTopRight: {\r\n\r\n get: function ()\r\n {\r\n return this._alphaTR;\r\n },\r\n\r\n set: function (value)\r\n {\r\n var v = Clamp(value, 0, 1);\r\n\r\n this._alphaTR = v;\r\n\r\n if (v !== 0)\r\n {\r\n this.renderFlags |= _FLAG;\r\n }\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The alpha value starting from the bottom-left of the Game Object.\r\n * This value is interpolated from the corner to the center of the Game Object.\r\n *\r\n * @name Phaser.GameObjects.Components.Alpha#alphaBottomLeft\r\n * @type {number}\r\n * @webglOnly\r\n * @since 3.0.0\r\n */\r\n alphaBottomLeft: {\r\n\r\n get: function ()\r\n {\r\n return this._alphaBL;\r\n },\r\n\r\n set: function (value)\r\n {\r\n var v = Clamp(value, 0, 1);\r\n\r\n this._alphaBL = v;\r\n\r\n if (v !== 0)\r\n {\r\n this.renderFlags |= _FLAG;\r\n }\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The alpha value starting from the bottom-right of the Game Object.\r\n * This value is interpolated from the corner to the center of the Game Object.\r\n *\r\n * @name Phaser.GameObjects.Components.Alpha#alphaBottomRight\r\n * @type {number}\r\n * @webglOnly\r\n * @since 3.0.0\r\n */\r\n alphaBottomRight: {\r\n\r\n get: function ()\r\n {\r\n return this._alphaBR;\r\n },\r\n\r\n set: function (value)\r\n {\r\n var v = Clamp(value, 0, 1);\r\n\r\n this._alphaBR = v;\r\n\r\n if (v !== 0)\r\n {\r\n this.renderFlags |= _FLAG;\r\n }\r\n }\r\n\r\n }\r\n\r\n};\r\n\r\nmodule.exports = Alpha;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0FscGhhLmpzPzg2ZTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxpRUFBa0I7O0FBRXRDO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxhQUFhOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0FscGhhLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhbXAgPSByZXF1aXJlKCcuLi8uLi9tYXRoL0NsYW1wJyk7XHJcblxyXG4vLyAgYml0bWFzayBmbGFnIGZvciBHYW1lT2JqZWN0LnJlbmRlck1hc2tcclxudmFyIF9GTEFHID0gMjsgLy8gMDAxMFxyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgdXNlZCBmb3Igc2V0dGluZyB0aGUgYWxwaGEgcHJvcGVydGllcyBvZiBhIEdhbWUgT2JqZWN0LlxyXG4gKiBTaG91bGQgYmUgYXBwbGllZCBhcyBhIG1peGluIGFuZCBub3QgdXNlZCBkaXJlY3RseS5cclxuICpcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbHBoYVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcblxyXG52YXIgQWxwaGEgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcml2YXRlIGludGVybmFsIHZhbHVlLiBIb2xkcyB0aGUgZ2xvYmFsIGFscGhhIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFscGhhI19hbHBoYVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgX2FscGhhOiAxLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS4gSG9sZHMgdGhlIHRvcC1sZWZ0IGFscGhhIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFscGhhI19hbHBoYVRMXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBfYWxwaGFUTDogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByaXZhdGUgaW50ZXJuYWwgdmFsdWUuIEhvbGRzIHRoZSB0b3AtcmlnaHQgYWxwaGEgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQWxwaGEjX2FscGhhVFJcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGRlZmF1bHQgMVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIF9hbHBoYVRSOiAxLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS4gSG9sZHMgdGhlIGJvdHRvbS1sZWZ0IGFscGhhIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFscGhhI19hbHBoYUJMXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBfYWxwaGFCTDogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByaXZhdGUgaW50ZXJuYWwgdmFsdWUuIEhvbGRzIHRoZSBib3R0b20tcmlnaHQgYWxwaGEgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQWxwaGEjX2FscGhhQlJcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGRlZmF1bHQgMVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIF9hbHBoYUJSOiAxLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xlYXJzIGFsbCBhbHBoYSB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogSW1tZWRpYXRlbHkgc2V0cyB0aGUgYWxwaGEgbGV2ZWxzIGJhY2sgdG8gMSAoZnVsbHkgb3BhcXVlKS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFscGhhI2NsZWFyQWxwaGFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGNsZWFyQWxwaGE6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0QWxwaGEoMSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBBbHBoYSBsZXZlbCBvZiB0aGlzIEdhbWUgT2JqZWN0LiBUaGUgYWxwaGEgY29udHJvbHMgdGhlIG9wYWNpdHkgb2YgdGhlIEdhbWUgT2JqZWN0IGFzIGl0IHJlbmRlcnMuXHJcbiAgICAgKiBBbHBoYSB2YWx1ZXMgYXJlIHByb3ZpZGVkIGFzIGEgZmxvYXQgYmV0d2VlbiAwLCBmdWxseSB0cmFuc3BhcmVudCwgYW5kIDEsIGZ1bGx5IG9wYXF1ZS5cclxuICAgICAqXHJcbiAgICAgKiBJZiB5b3VyIGdhbWUgaXMgcnVubmluZyB1bmRlciBXZWJHTCB5b3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBmb3VyIGRpZmZlcmVudCBhbHBoYSB2YWx1ZXMsIGVhY2ggb2Ygd2hpY2hcclxuICAgICAqIGNvcnJlc3BvbmQgdG8gdGhlIGZvdXIgY29ybmVycyBvZiB0aGUgR2FtZSBPYmplY3QuIFVuZGVyIENhbnZhcyBvbmx5IHRoZSBgdG9wTGVmdGAgdmFsdWUgZ2l2ZW4gaXMgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFscGhhI3NldEFscGhhXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3RvcExlZnQ9MV0gLSBUaGUgYWxwaGEgdmFsdWUgdXNlZCBmb3IgdGhlIHRvcC1sZWZ0IG9mIHRoZSBHYW1lIE9iamVjdC4gSWYgdGhpcyBpcyB0aGUgb25seSB2YWx1ZSBnaXZlbiBpdCdzIGFwcGxpZWQgYWNyb3NzIHRoZSB3aG9sZSBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdG9wUmlnaHRdIC0gVGhlIGFscGhhIHZhbHVlIHVzZWQgZm9yIHRoZSB0b3AtcmlnaHQgb2YgdGhlIEdhbWUgT2JqZWN0LiBXZWJHTCBvbmx5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtib3R0b21MZWZ0XSAtIFRoZSBhbHBoYSB2YWx1ZSB1c2VkIGZvciB0aGUgYm90dG9tLWxlZnQgb2YgdGhlIEdhbWUgT2JqZWN0LiBXZWJHTCBvbmx5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtib3R0b21SaWdodF0gLSBUaGUgYWxwaGEgdmFsdWUgdXNlZCBmb3IgdGhlIGJvdHRvbS1yaWdodCBvZiB0aGUgR2FtZSBPYmplY3QuIFdlYkdMIG9ubHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0QWxwaGE6IGZ1bmN0aW9uICh0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRvcExlZnQgPT09IHVuZGVmaW5lZCkgeyB0b3BMZWZ0ID0gMTsgfVxyXG5cclxuICAgICAgICAvLyAgVHJlYXQgYXMgaWYgdGhlcmUgaXMgb25seSBvbmUgYWxwaGEgdmFsdWUgZm9yIHRoZSB3aG9sZSBHYW1lIE9iamVjdFxyXG4gICAgICAgIGlmICh0b3BSaWdodCA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5hbHBoYSA9IHRvcExlZnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FscGhhVEwgPSBDbGFtcCh0b3BMZWZ0LCAwLCAxKTtcclxuICAgICAgICAgICAgdGhpcy5fYWxwaGFUUiA9IENsYW1wKHRvcFJpZ2h0LCAwLCAxKTtcclxuICAgICAgICAgICAgdGhpcy5fYWxwaGFCTCA9IENsYW1wKGJvdHRvbUxlZnQsIDAsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLl9hbHBoYUJSID0gQ2xhbXAoYm90dG9tUmlnaHQsIDAsIDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFscGhhIHZhbHVlIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGlzIGEgZ2xvYmFsIHZhbHVlLCBpbXBhY3RpbmcgdGhlIGVudGlyZSBHYW1lIE9iamVjdCwgbm90IGp1c3QgYSByZWdpb24gb2YgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQWxwaGEjYWxwaGFcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgYWxwaGE6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FscGhhO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHYgPSBDbGFtcCh2YWx1ZSwgMCwgMSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9hbHBoYSA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMuX2FscGhhVEwgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLl9hbHBoYVRSID0gdjtcclxuICAgICAgICAgICAgdGhpcy5fYWxwaGFCTCA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMuX2FscGhhQlIgPSB2O1xyXG5cclxuICAgICAgICAgICAgaWYgKHYgPT09IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyRmxhZ3MgJj0gfl9GTEFHO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJGbGFncyB8PSBfRkxBRztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHN0YXJ0aW5nIGZyb20gdGhlIHRvcC1sZWZ0IG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIFRoaXMgdmFsdWUgaXMgaW50ZXJwb2xhdGVkIGZyb20gdGhlIGNvcm5lciB0byB0aGUgY2VudGVyIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbHBoYSNhbHBoYVRvcExlZnRcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAd2ViZ2xPbmx5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgYWxwaGFUb3BMZWZ0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbHBoYVRMO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHYgPSBDbGFtcCh2YWx1ZSwgMCwgMSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9hbHBoYVRMID0gdjtcclxuXHJcbiAgICAgICAgICAgIGlmICh2ICE9PSAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckZsYWdzIHw9IF9GTEFHO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYWxwaGEgdmFsdWUgc3RhcnRpbmcgZnJvbSB0aGUgdG9wLXJpZ2h0IG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIFRoaXMgdmFsdWUgaXMgaW50ZXJwb2xhdGVkIGZyb20gdGhlIGNvcm5lciB0byB0aGUgY2VudGVyIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbHBoYSNhbHBoYVRvcFJpZ2h0XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHdlYmdsT25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGFscGhhVG9wUmlnaHQ6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FscGhhVFI7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgdiA9IENsYW1wKHZhbHVlLCAwLCAxKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2FscGhhVFIgPSB2O1xyXG5cclxuICAgICAgICAgICAgaWYgKHYgIT09IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyRmxhZ3MgfD0gX0ZMQUc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBhbHBoYSB2YWx1ZSBzdGFydGluZyBmcm9tIHRoZSBib3R0b20tbGVmdCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBUaGlzIHZhbHVlIGlzIGludGVycG9sYXRlZCBmcm9tIHRoZSBjb3JuZXIgdG8gdGhlIGNlbnRlciBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQWxwaGEjYWxwaGFCb3R0b21MZWZ0XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHdlYmdsT25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGFscGhhQm90dG9tTGVmdDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYWxwaGFCTDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB2ID0gQ2xhbXAodmFsdWUsIDAsIDEpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fYWxwaGFCTCA9IHY7XHJcblxyXG4gICAgICAgICAgICBpZiAodiAhPT0gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJGbGFncyB8PSBfRkxBRztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHN0YXJ0aW5nIGZyb20gdGhlIGJvdHRvbS1yaWdodCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBUaGlzIHZhbHVlIGlzIGludGVycG9sYXRlZCBmcm9tIHRoZSBjb3JuZXIgdG8gdGhlIGNlbnRlciBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQWxwaGEjYWxwaGFCb3R0b21SaWdodFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEB3ZWJnbE9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBhbHBoYUJvdHRvbVJpZ2h0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbHBoYUJSO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHYgPSBDbGFtcCh2YWx1ZSwgMCwgMSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9hbHBoYUJSID0gdjtcclxuXHJcbiAgICAgICAgICAgIGlmICh2ICE9PSAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckZsYWdzIHw9IF9GTEFHO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEFscGhhO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Alpha.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/components/Animation.js":
/*!*********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/components/Animation.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BaseAnimation = __webpack_require__(/*! ../../animations/Animation */ \"./node_modules/phaser/src/animations/Animation.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Events = __webpack_require__(/*! ../../animations/events */ \"./node_modules/phaser/src/animations/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Game Object Animation Controller.\r\n *\r\n * This controller lives as an instance within a Game Object, accessible as `sprite.anims`.\r\n *\r\n * @class Animation\r\n * @memberof Phaser.GameObjects.Components\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} parent - The Game Object to which this animation controller belongs.\r\n */\r\nvar Animation = new Class({\r\n\r\n initialize:\r\n\r\n function Animation (parent)\r\n {\r\n /**\r\n * The Game Object to which this animation controller belongs.\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#parent\r\n * @type {Phaser.GameObjects.GameObject}\r\n * @since 3.0.0\r\n */\r\n this.parent = parent;\r\n\r\n /**\r\n * A reference to the global Animation Manager.\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#animationManager\r\n * @type {Phaser.Animations.AnimationManager}\r\n * @since 3.0.0\r\n */\r\n this.animationManager = parent.scene.sys.anims;\r\n\r\n this.animationManager.once(Events.REMOVE_ANIMATION, this.remove, this);\r\n\r\n /**\r\n * Is an animation currently playing or not?\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#isPlaying\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.isPlaying = false;\r\n\r\n /**\r\n * The current Animation loaded into this Animation Controller.\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#currentAnim\r\n * @type {?Phaser.Animations.Animation}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.currentAnim = null;\r\n\r\n /**\r\n * The current AnimationFrame being displayed by this Animation Controller.\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#currentFrame\r\n * @type {?Phaser.Animations.AnimationFrame}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.currentFrame = null;\r\n\r\n /**\r\n * The key of the next Animation to be loaded into this Animation Controller when the current animation completes.\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#nextAnim\r\n * @type {?string}\r\n * @default null\r\n * @since 3.16.0\r\n */\r\n this.nextAnim = null;\r\n\r\n /**\r\n * Time scale factor.\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#_timeScale\r\n * @type {number}\r\n * @private\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n this._timeScale = 1;\r\n\r\n /**\r\n * The frame rate of playback in frames per second.\r\n * The default is 24 if the `duration` property is `null`.\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#frameRate\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.frameRate = 0;\r\n\r\n /**\r\n * How long the animation should play for, in milliseconds.\r\n * If the `frameRate` property has been set then it overrides this value,\r\n * otherwise the `frameRate` is derived from `duration`.\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#duration\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.duration = 0;\r\n\r\n /**\r\n * ms per frame, not including frame specific modifiers that may be present in the Animation data.\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#msPerFrame\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.msPerFrame = 0;\r\n\r\n /**\r\n * Skip frames if the time lags, or always advanced anyway?\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#skipMissedFrames\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.skipMissedFrames = true;\r\n\r\n /**\r\n * A delay before starting playback, in milliseconds.\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#_delay\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this._delay = 0;\r\n\r\n /**\r\n * Number of times to repeat the animation (-1 for infinity)\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#_repeat\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this._repeat = 0;\r\n\r\n /**\r\n * Delay before the repeat starts, in milliseconds.\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#_repeatDelay\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this._repeatDelay = 0;\r\n\r\n /**\r\n * Should the animation yoyo? (reverse back down to the start) before repeating?\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#_yoyo\r\n * @type {boolean}\r\n * @private\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this._yoyo = false;\r\n\r\n /**\r\n * Will the playhead move forwards (`true`) or in reverse (`false`).\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#forward\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.forward = true;\r\n\r\n /**\r\n * An Internal trigger that's play the animation in reverse mode ('true') or not ('false'),\r\n * needed because forward can be changed by yoyo feature.\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#_reverse\r\n * @type {boolean}\r\n * @default false\r\n * @private\r\n * @since 3.12.0\r\n */\r\n this._reverse = false;\r\n\r\n /**\r\n * Internal time overflow accumulator.\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#accumulator\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.accumulator = 0;\r\n\r\n /**\r\n * The time point at which the next animation frame will change.\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#nextTick\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.nextTick = 0;\r\n\r\n /**\r\n * An internal counter keeping track of how many repeats are left to play.\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#repeatCounter\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.repeatCounter = 0;\r\n\r\n /**\r\n * An internal flag keeping track of pending repeats.\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#pendingRepeat\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.pendingRepeat = false;\r\n\r\n /**\r\n * Is the Animation paused?\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#_paused\r\n * @type {boolean}\r\n * @private\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this._paused = false;\r\n\r\n /**\r\n * Was the animation previously playing before being paused?\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#_wasPlaying\r\n * @type {boolean}\r\n * @private\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this._wasPlaying = false;\r\n\r\n /**\r\n * Internal property tracking if this Animation is waiting to stop.\r\n *\r\n * 0 = No\r\n * 1 = Waiting for ms to pass\r\n * 2 = Waiting for repeat\r\n * 3 = Waiting for specific frame\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#_pendingStop\r\n * @type {integer}\r\n * @private\r\n * @since 3.4.0\r\n */\r\n this._pendingStop = 0;\r\n\r\n /**\r\n * Internal property used by _pendingStop.\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#_pendingStopValue\r\n * @type {any}\r\n * @private\r\n * @since 3.4.0\r\n */\r\n this._pendingStopValue;\r\n },\r\n\r\n /**\r\n * Sets an animation to be played immediately after the current one completes.\r\n * \r\n * The current animation must enter a 'completed' state for this to happen, i.e. finish all of its repeats, delays, etc, or have the `stop` method called directly on it.\r\n * \r\n * An animation set to repeat forever will never enter a completed state.\r\n * \r\n * You can chain a new animation at any point, including before the current one starts playing, during it, or when it ends (via its `animationcomplete` callback).\r\n * Chained animations are specific to a Game Object, meaning different Game Objects can have different chained animations without impacting the global animation they're playing.\r\n * \r\n * Call this method with no arguments to reset the chained animation.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#chain\r\n * @since 3.16.0\r\n *\r\n * @param {(string|Phaser.Animations.Animation)} [key] - The string-based key of the animation to play next, as defined previously in the Animation Manager. Or an Animation instance.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n */\r\n chain: function (key)\r\n {\r\n if (key instanceof BaseAnimation)\r\n {\r\n key = key.key;\r\n }\r\n\r\n this.nextAnim = key;\r\n\r\n return this.parent;\r\n },\r\n\r\n /**\r\n * Sets the amount of time, in milliseconds, that the animation will be delayed before starting playback.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#setDelay\r\n * @since 3.4.0\r\n *\r\n * @param {integer} [value=0] - The amount of time, in milliseconds, to wait before starting playback.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n */\r\n setDelay: function (value)\r\n {\r\n if (value === undefined) { value = 0; }\r\n\r\n this._delay = value;\r\n\r\n return this.parent;\r\n },\r\n\r\n /**\r\n * Gets the amount of time, in milliseconds that the animation will be delayed before starting playback.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#getDelay\r\n * @since 3.4.0\r\n *\r\n * @return {integer} The amount of time, in milliseconds, the Animation will wait before starting playback.\r\n */\r\n getDelay: function ()\r\n {\r\n return this._delay;\r\n },\r\n\r\n /**\r\n * Waits for the specified delay, in milliseconds, then starts playback of the requested animation.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#delayedPlay\r\n * @since 3.0.0\r\n *\r\n * @param {integer} delay - The delay, in milliseconds, to wait before starting the animation playing.\r\n * @param {string} key - The key of the animation to play.\r\n * @param {integer} [startFrame=0] - The frame of the animation to start from.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n */\r\n delayedPlay: function (delay, key, startFrame)\r\n {\r\n this.play(key, true, startFrame);\r\n\r\n this.nextTick += delay;\r\n\r\n return this.parent;\r\n },\r\n\r\n /**\r\n * Returns the key of the animation currently loaded into this component.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#getCurrentKey\r\n * @since 3.0.0\r\n *\r\n * @return {string} The key of the Animation loaded into this component.\r\n */\r\n getCurrentKey: function ()\r\n {\r\n if (this.currentAnim)\r\n {\r\n return this.currentAnim.key;\r\n }\r\n },\r\n\r\n /**\r\n * Internal method used to load an animation into this component.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#load\r\n * @protected\r\n * @since 3.0.0\r\n *\r\n * @param {string} key - The key of the animation to load.\r\n * @param {integer} [startFrame=0] - The start frame of the animation to load.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n */\r\n load: function (key, startFrame)\r\n {\r\n if (startFrame === undefined) { startFrame = 0; }\r\n\r\n if (this.isPlaying)\r\n {\r\n this.stop();\r\n }\r\n\r\n // Load the new animation in\r\n this.animationManager.load(this, key, startFrame);\r\n\r\n return this.parent;\r\n },\r\n\r\n /**\r\n * Pause the current animation and set the `isPlaying` property to `false`.\r\n * You can optionally pause it at a specific frame.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#pause\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Animations.AnimationFrame} [atFrame] - An optional frame to set after pausing the animation.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n */\r\n pause: function (atFrame)\r\n {\r\n if (!this._paused)\r\n {\r\n this._paused = true;\r\n this._wasPlaying = this.isPlaying;\r\n this.isPlaying = false;\r\n }\r\n\r\n if (atFrame !== undefined)\r\n {\r\n this.updateFrame(atFrame);\r\n }\r\n\r\n return this.parent;\r\n },\r\n\r\n /**\r\n * Resumes playback of a paused animation and sets the `isPlaying` property to `true`.\r\n * You can optionally tell it to start playback from a specific frame.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#resume\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Animations.AnimationFrame} [fromFrame] - An optional frame to set before restarting playback.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n */\r\n resume: function (fromFrame)\r\n {\r\n if (this._paused)\r\n {\r\n this._paused = false;\r\n this.isPlaying = this._wasPlaying;\r\n }\r\n\r\n if (fromFrame !== undefined)\r\n {\r\n this.updateFrame(fromFrame);\r\n }\r\n\r\n return this.parent;\r\n },\r\n\r\n /**\r\n * `true` if the current animation is paused, otherwise `false`.\r\n *\r\n * @name Phaser.GameObjects.Components.Animation#isPaused\r\n * @readonly\r\n * @type {boolean}\r\n * @since 3.4.0\r\n */\r\n isPaused: {\r\n\r\n get: function ()\r\n {\r\n return this._paused;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Plays an Animation on a Game Object that has the Animation component, such as a Sprite.\r\n * \r\n * Animations are stored in the global Animation Manager and are referenced by a unique string-based key.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#play\r\n * @fires Phaser.GameObjects.Components.Animation#onStartEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Animations.Animation)} key - The string-based key of the animation to play, as defined previously in the Animation Manager. Or an Animation instance.\r\n * @param {boolean} [ignoreIfPlaying=false] - If this animation is already playing then ignore this call.\r\n * @param {integer} [startFrame=0] - Optionally start the animation playing from this frame index.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n */\r\n play: function (key, ignoreIfPlaying, startFrame)\r\n {\r\n if (ignoreIfPlaying === undefined) { ignoreIfPlaying = false; }\r\n if (startFrame === undefined) { startFrame = 0; }\r\n\r\n if (key instanceof BaseAnimation)\r\n {\r\n key = key.key;\r\n }\r\n\r\n if (ignoreIfPlaying && this.isPlaying && this.currentAnim.key === key)\r\n {\r\n return this.parent;\r\n }\r\n\r\n this.forward = true;\r\n this._reverse = false;\r\n\r\n return this._startAnimation(key, startFrame);\r\n },\r\n\r\n /**\r\n * Plays an Animation (in reverse mode) on the Game Object that owns this Animation Component.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#playReverse\r\n * @fires Phaser.GameObjects.Components.Animation#onStartEvent\r\n * @since 3.12.0\r\n *\r\n * @param {(string|Phaser.Animations.Animation)} key - The string-based key of the animation to play, as defined previously in the Animation Manager. Or an Animation instance.\r\n * @param {boolean} [ignoreIfPlaying=false] - If an animation is already playing then ignore this call.\r\n * @param {integer} [startFrame=0] - Optionally start the animation playing from this frame index.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n */\r\n playReverse: function (key, ignoreIfPlaying, startFrame)\r\n {\r\n if (ignoreIfPlaying === undefined) { ignoreIfPlaying = false; }\r\n if (startFrame === undefined) { startFrame = 0; }\r\n\r\n if (key instanceof BaseAnimation)\r\n {\r\n key = key.key;\r\n }\r\n\r\n if (ignoreIfPlaying && this.isPlaying && this.currentAnim.key === key)\r\n {\r\n return this.parent;\r\n }\r\n\r\n this.forward = false;\r\n this._reverse = true;\r\n\r\n return this._startAnimation(key, startFrame);\r\n },\r\n\r\n /**\r\n * Load an Animation and fires 'onStartEvent' event, extracted from 'play' method.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#_startAnimation\r\n * @fires Phaser.Animations.Events#START_ANIMATION_EVENT\r\n * @fires Phaser.Animations.Events#SPRITE_START_ANIMATION_EVENT\r\n * @fires Phaser.Animations.Events#SPRITE_START_KEY_ANIMATION_EVENT\r\n * @since 3.12.0\r\n *\r\n * @param {string} key - The string-based key of the animation to play, as defined previously in the Animation Manager.\r\n * @param {integer} [startFrame=0] - Optionally start the animation playing from this frame index.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n */\r\n _startAnimation: function (key, startFrame)\r\n {\r\n this.load(key, startFrame);\r\n\r\n var anim = this.currentAnim;\r\n var gameObject = this.parent;\r\n\r\n if (!anim)\r\n {\r\n return gameObject;\r\n }\r\n\r\n // Should give us 9,007,199,254,740,991 safe repeats\r\n this.repeatCounter = (this._repeat === -1) ? Number.MAX_VALUE : this._repeat;\r\n\r\n anim.getFirstTick(this);\r\n\r\n this.isPlaying = true;\r\n this.pendingRepeat = false;\r\n\r\n if (anim.showOnStart)\r\n {\r\n gameObject.visible = true;\r\n }\r\n\r\n var frame = this.currentFrame;\r\n\r\n anim.emit(Events.ANIMATION_START, anim, frame, gameObject);\r\n\r\n gameObject.emit(Events.SPRITE_ANIMATION_KEY_START + key, anim, frame, gameObject);\r\n\r\n gameObject.emit(Events.SPRITE_ANIMATION_START, anim, frame, gameObject);\r\n\r\n return gameObject;\r\n },\r\n\r\n /**\r\n * Reverse the Animation that is already playing on the Game Object.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#reverse\r\n * @since 3.12.0\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n */\r\n reverse: function ()\r\n {\r\n if (this.isPlaying)\r\n {\r\n this._reverse = !this._reverse;\r\n\r\n this.forward = !this.forward;\r\n }\r\n\r\n return this.parent;\r\n },\r\n\r\n /**\r\n * Returns a value between 0 and 1 indicating how far this animation is through, ignoring repeats and yoyos.\r\n * If the animation has a non-zero repeat defined, `getProgress` and `getTotalProgress` will be different\r\n * because `getProgress` doesn't include any repeats or repeat delays, whereas `getTotalProgress` does.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#getProgress\r\n * @since 3.4.0\r\n *\r\n * @return {number} The progress of the current animation, between 0 and 1.\r\n */\r\n getProgress: function ()\r\n {\r\n var p = this.currentFrame.progress;\r\n\r\n if (!this.forward)\r\n {\r\n p = 1 - p;\r\n }\r\n\r\n return p;\r\n },\r\n\r\n /**\r\n * Takes a value between 0 and 1 and uses it to set how far this animation is through playback.\r\n * Does not factor in repeats or yoyos, but does handle playing forwards or backwards.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#setProgress\r\n * @since 3.4.0\r\n *\r\n * @param {number} [value=0] - The progress value, between 0 and 1.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n */\r\n setProgress: function (value)\r\n {\r\n if (!this.forward)\r\n {\r\n value = 1 - value;\r\n }\r\n\r\n this.setCurrentFrame(this.currentAnim.getFrameByProgress(value));\r\n\r\n return this.parent;\r\n },\r\n\r\n /**\r\n * Handle the removal of an animation from the Animation Manager.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#remove\r\n * @since 3.0.0\r\n *\r\n * @param {string} [key] - The key of the removed Animation.\r\n * @param {Phaser.Animations.Animation} [animation] - The removed Animation.\r\n */\r\n remove: function (key, animation)\r\n {\r\n if (animation === undefined) { animation = this.currentAnim; }\r\n\r\n if (this.isPlaying && animation.key === this.currentAnim.key)\r\n {\r\n this.stop();\r\n\r\n this.setCurrentFrame(this.currentAnim.frames[0]);\r\n }\r\n },\r\n\r\n /**\r\n * Gets the number of times that the animation will repeat\r\n * after its first iteration. For example, if returns 1, the animation will\r\n * play a total of twice (the initial play plus 1 repeat).\r\n * A value of -1 means the animation will repeat indefinitely.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#getRepeat\r\n * @since 3.4.0\r\n *\r\n * @return {integer} The number of times that the animation will repeat.\r\n */\r\n getRepeat: function ()\r\n {\r\n return this._repeat;\r\n },\r\n\r\n /**\r\n * Sets the number of times that the animation should repeat\r\n * after its first iteration. For example, if repeat is 1, the animation will\r\n * play a total of twice (the initial play plus 1 repeat).\r\n * To repeat indefinitely, use -1. repeat should always be an integer.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#setRepeat\r\n * @since 3.4.0\r\n *\r\n * @param {integer} value - The number of times that the animation should repeat.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n */\r\n setRepeat: function (value)\r\n {\r\n this._repeat = value;\r\n\r\n this.repeatCounter = (value === -1) ? Number.MAX_VALUE : value;\r\n\r\n return this.parent;\r\n },\r\n\r\n /**\r\n * Gets the amount of delay between repeats, if any.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#getRepeatDelay\r\n * @since 3.4.0\r\n *\r\n * @return {number} The delay between repeats.\r\n */\r\n getRepeatDelay: function ()\r\n {\r\n return this._repeatDelay;\r\n },\r\n\r\n /**\r\n * Sets the amount of time in seconds between repeats.\r\n * For example, if `repeat` is 2 and `repeatDelay` is 10, the animation will play initially,\r\n * then wait for 10 seconds before repeating, then play again, then wait another 10 seconds\r\n * before doing its final repeat.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#setRepeatDelay\r\n * @since 3.4.0\r\n *\r\n * @param {number} value - The delay to wait between repeats, in seconds.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n */\r\n setRepeatDelay: function (value)\r\n {\r\n this._repeatDelay = value;\r\n\r\n return this.parent;\r\n },\r\n\r\n /**\r\n * Restarts the current animation from its beginning, optionally including its delay value.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#restart\r\n * @fires Phaser.Animations.Events#RESTART_ANIMATION_EVENT\r\n * @fires Phaser.Animations.Events#SPRITE_RESTART_ANIMATION_EVENT\r\n * @fires Phaser.Animations.Events#SPRITE_RESTART_KEY_ANIMATION_EVENT\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} [includeDelay=false] - Whether to include the delay value of the animation when restarting.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n */\r\n restart: function (includeDelay)\r\n {\r\n if (includeDelay === undefined) { includeDelay = false; }\r\n\r\n var anim = this.currentAnim;\r\n\r\n anim.getFirstTick(this, includeDelay);\r\n\r\n this.forward = true;\r\n this.isPlaying = true;\r\n this.pendingRepeat = false;\r\n this._paused = false;\r\n\r\n // Set frame\r\n this.updateFrame(anim.frames[0]);\r\n\r\n var gameObject = this.parent;\r\n var frame = this.currentFrame;\r\n\r\n anim.emit(Events.ANIMATION_RESTART, anim, frame, gameObject);\r\n\r\n gameObject.emit(Events.SPRITE_ANIMATION_KEY_RESTART + anim.key, anim, frame, gameObject);\r\n\r\n gameObject.emit(Events.SPRITE_ANIMATION_RESTART, anim, frame, gameObject);\r\n\r\n return this.parent;\r\n },\r\n\r\n /**\r\n * Immediately stops the current animation from playing and dispatches the `animationcomplete` event.\r\n * \r\n * If no animation is set, no event will be dispatched.\r\n * \r\n * If there is another animation queued (via the `chain` method) then it will start playing immediately.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#stop\r\n * @fires Phaser.GameObjects.Components.Animation#onCompleteEvent\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n */\r\n stop: function ()\r\n {\r\n this._pendingStop = 0;\r\n\r\n this.isPlaying = false;\r\n\r\n var gameObject = this.parent;\r\n var anim = this.currentAnim;\r\n var frame = this.currentFrame;\r\n\r\n if (anim)\r\n {\r\n anim.emit(Events.ANIMATION_COMPLETE, anim, frame, gameObject);\r\n\r\n gameObject.emit(Events.SPRITE_ANIMATION_KEY_COMPLETE + anim.key, anim, frame, gameObject);\r\n \r\n gameObject.emit(Events.SPRITE_ANIMATION_COMPLETE, anim, frame, gameObject);\r\n }\r\n\r\n if (this.nextAnim)\r\n {\r\n var key = this.nextAnim;\r\n\r\n this.nextAnim = null;\r\n\r\n this.play(key);\r\n }\r\n\r\n return gameObject;\r\n },\r\n\r\n /**\r\n * Stops the current animation from playing after the specified time delay, given in milliseconds.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#stopAfterDelay\r\n * @fires Phaser.GameObjects.Components.Animation#onCompleteEvent\r\n * @since 3.4.0\r\n *\r\n * @param {integer} delay - The number of milliseconds to wait before stopping this animation.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n */\r\n stopAfterDelay: function (delay)\r\n {\r\n this._pendingStop = 1;\r\n this._pendingStopValue = delay;\r\n\r\n return this.parent;\r\n },\r\n\r\n /**\r\n * Stops the current animation from playing when it next repeats.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#stopOnRepeat\r\n * @fires Phaser.GameObjects.Components.Animation#onCompleteEvent\r\n * @since 3.4.0\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n */\r\n stopOnRepeat: function ()\r\n {\r\n this._pendingStop = 2;\r\n\r\n return this.parent;\r\n },\r\n\r\n /**\r\n * Stops the current animation from playing when it next sets the given frame.\r\n * If this frame doesn't exist within the animation it will not stop it from playing.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#stopOnFrame\r\n * @fires Phaser.GameObjects.Components.Animation#onCompleteEvent\r\n * @since 3.4.0\r\n *\r\n * @param {Phaser.Animations.AnimationFrame} frame - The frame to check before stopping this animation.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n */\r\n stopOnFrame: function (frame)\r\n {\r\n this._pendingStop = 3;\r\n this._pendingStopValue = frame;\r\n\r\n return this.parent;\r\n },\r\n\r\n /**\r\n * Sets the Time Scale factor, allowing you to make the animation go go faster or slower than default.\r\n * Where 1 = normal speed (the default), 0.5 = half speed, 2 = double speed, etc.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#setTimeScale\r\n * @since 3.4.0\r\n *\r\n * @param {number} [value=1] - The time scale factor, where 1 is no change, 0.5 is half speed, etc.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that owns this Animation Component.\r\n */\r\n setTimeScale: function (value)\r\n {\r\n if (value === undefined) { value = 1; }\r\n\r\n this._timeScale = value;\r\n\r\n return this.parent;\r\n },\r\n\r\n /**\r\n * Gets the Time Scale factor.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#getTimeScale\r\n * @since 3.4.0\r\n *\r\n * @return {number} The Time Scale value.\r\n */\r\n getTimeScale: function ()\r\n {\r\n return this._timeScale;\r\n },\r\n\r\n /**\r\n * Returns the total number of frames in this animation.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#getTotalFrames\r\n * @since 3.4.0\r\n *\r\n * @return {integer} The total number of frames in this animation.\r\n */\r\n getTotalFrames: function ()\r\n {\r\n return this.currentAnim.frames.length;\r\n },\r\n\r\n /**\r\n * The internal update loop for the Animation Component.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#update\r\n * @since 3.0.0\r\n *\r\n * @param {number} time - The current timestamp.\r\n * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n */\r\n update: function (time, delta)\r\n {\r\n if (!this.currentAnim || !this.isPlaying || this.currentAnim.paused)\r\n {\r\n return;\r\n }\r\n\r\n this.accumulator += delta * this._timeScale;\r\n\r\n if (this._pendingStop === 1)\r\n {\r\n this._pendingStopValue -= delta;\r\n\r\n if (this._pendingStopValue <= 0)\r\n {\r\n return this.currentAnim.completeAnimation(this);\r\n }\r\n }\r\n\r\n if (this.accumulator >= this.nextTick)\r\n {\r\n this.currentAnim.setFrame(this);\r\n }\r\n },\r\n\r\n /**\r\n * Sets the given Animation Frame as being the current frame\r\n * and applies it to the parent Game Object, adjusting its size and origin as needed.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#setCurrentFrame\r\n * @since 3.4.0\r\n *\r\n * @param {Phaser.Animations.AnimationFrame} animationFrame - The Animation Frame to set as being current.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object this Animation Component belongs to.\r\n */\r\n setCurrentFrame: function (animationFrame)\r\n {\r\n var gameObject = this.parent;\r\n\r\n this.currentFrame = animationFrame;\r\n\r\n gameObject.texture = animationFrame.frame.texture;\r\n gameObject.frame = animationFrame.frame;\r\n\r\n if (gameObject.isCropped)\r\n {\r\n gameObject.frame.updateCropUVs(gameObject._crop, gameObject.flipX, gameObject.flipY);\r\n }\r\n\r\n gameObject.setSizeToFrame();\r\n\r\n if (animationFrame.frame.customPivot)\r\n {\r\n gameObject.setOrigin(animationFrame.frame.pivotX, animationFrame.frame.pivotY);\r\n }\r\n else\r\n {\r\n gameObject.updateDisplayOrigin();\r\n }\r\n\r\n return gameObject;\r\n },\r\n\r\n /**\r\n * Internal frame change handler.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#updateFrame\r\n * @fires Phaser.Animations.Events#SPRITE_ANIMATION_UPDATE_EVENT\r\n * @fires Phaser.Animations.Events#SPRITE_ANIMATION_KEY_UPDATE_EVENT\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Animations.AnimationFrame} animationFrame - The animation frame to change to.\r\n */\r\n updateFrame: function (animationFrame)\r\n {\r\n var gameObject = this.setCurrentFrame(animationFrame);\r\n\r\n if (this.isPlaying)\r\n {\r\n if (animationFrame.setAlpha)\r\n {\r\n gameObject.alpha = animationFrame.alpha;\r\n }\r\n\r\n var anim = this.currentAnim;\r\n\r\n gameObject.emit(Events.SPRITE_ANIMATION_KEY_UPDATE + anim.key, anim, animationFrame, gameObject);\r\n\r\n gameObject.emit(Events.SPRITE_ANIMATION_UPDATE, anim, animationFrame, gameObject);\r\n\r\n if (this._pendingStop === 3 && this._pendingStopValue === animationFrame)\r\n {\r\n this.currentAnim.completeAnimation(this);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Advances the animation to the next frame, regardless of the time or animation state.\r\n * If the animation is set to repeat, or yoyo, this will still take effect.\r\n * \r\n * Calling this does not change the direction of the animation. I.e. if it was currently\r\n * playing in reverse, calling this method doesn't then change the direction to forwards.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#nextFrame\r\n * @since 3.16.0\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object this Animation Component belongs to.\r\n */\r\n nextFrame: function ()\r\n {\r\n if (this.currentAnim)\r\n {\r\n this.currentAnim.nextFrame(this);\r\n }\r\n\r\n return this.parent;\r\n },\r\n\r\n /**\r\n * Advances the animation to the previous frame, regardless of the time or animation state.\r\n * If the animation is set to repeat, or yoyo, this will still take effect.\r\n * \r\n * Calling this does not change the direction of the animation. I.e. if it was currently\r\n * playing in forwards, calling this method doesn't then change the direction to backwards.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#previousFrame\r\n * @since 3.16.0\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object this Animation Component belongs to.\r\n */\r\n previousFrame: function ()\r\n {\r\n if (this.currentAnim)\r\n {\r\n this.currentAnim.previousFrame(this);\r\n }\r\n\r\n return this.parent;\r\n },\r\n\r\n /**\r\n * Sets if the current Animation will yoyo when it reaches the end.\r\n * A yoyo'ing animation will play through consecutively, and then reverse-play back to the start again.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#setYoyo\r\n * @since 3.4.0\r\n *\r\n * @param {boolean} [value=false] - `true` if the animation should yoyo, `false` to not.\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object this Animation Component belongs to.\r\n */\r\n setYoyo: function (value)\r\n {\r\n if (value === undefined) { value = false; }\r\n\r\n this._yoyo = value;\r\n\r\n return this.parent;\r\n },\r\n\r\n /**\r\n * Gets if the current Animation will yoyo when it reaches the end.\r\n * A yoyo'ing animation will play through consecutively, and then reverse-play back to the start again.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#getYoyo\r\n * @since 3.4.0\r\n *\r\n * @return {boolean} `true` if the animation is set to yoyo, `false` if not.\r\n */\r\n getYoyo: function ()\r\n {\r\n return this._yoyo;\r\n },\r\n\r\n /**\r\n * Destroy this Animation component.\r\n *\r\n * Unregisters event listeners and cleans up its references.\r\n *\r\n * @method Phaser.GameObjects.Components.Animation#destroy\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.animationManager.off(Events.REMOVE_ANIMATION, this.remove, this);\r\n\r\n this.animationManager = null;\r\n this.parent = null;\r\n\r\n this.currentAnim = null;\r\n this.currentFrame = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Animation;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0FuaW1hdGlvbi5qcz9lYTg1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxxRkFBNEI7QUFDeEQsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxhQUFhLG1CQUFPLENBQUMscUZBQXlCOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUNBQXFDO0FBQ3BEO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsV0FBVzs7QUFFN0M7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxnQkFBZ0I7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQ0FBaUM7QUFDaEQ7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlDQUFpQztBQUNoRDtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFDQUFxQztBQUNwRCxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMseUJBQXlCO0FBQ3JFLHVDQUF1QyxnQkFBZ0I7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQ0FBcUM7QUFDcEQsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLHlCQUF5QjtBQUNyRSx1Q0FBdUMsZ0JBQWdCOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLDRCQUE0QjtBQUMzQztBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsOEJBQThCOztBQUVwRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxzQkFBc0I7O0FBRS9EOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQ0FBaUM7QUFDaEQ7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsV0FBVzs7QUFFN0M7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlDQUFpQztBQUNoRDtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlDQUFpQztBQUNoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QztBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsZUFBZTs7QUFFakQ7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2NvbXBvbmVudHMvQW5pbWF0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQmFzZUFuaW1hdGlvbiA9IHJlcXVpcmUoJy4uLy4uL2FuaW1hdGlvbnMvQW5pbWF0aW9uJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuLi8uLi9hbmltYXRpb25zL2V2ZW50cycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBHYW1lIE9iamVjdCBBbmltYXRpb24gQ29udHJvbGxlci5cclxuICpcclxuICogVGhpcyBjb250cm9sbGVyIGxpdmVzIGFzIGFuIGluc3RhbmNlIHdpdGhpbiBhIEdhbWUgT2JqZWN0LCBhY2Nlc3NpYmxlIGFzIGBzcHJpdGUuYW5pbXNgLlxyXG4gKlxyXG4gKiBAY2xhc3MgQW5pbWF0aW9uXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IHBhcmVudCAtIFRoZSBHYW1lIE9iamVjdCB0byB3aGljaCB0aGlzIGFuaW1hdGlvbiBjb250cm9sbGVyIGJlbG9uZ3MuXHJcbiAqL1xyXG52YXIgQW5pbWF0aW9uID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEFuaW1hdGlvbiAocGFyZW50KVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBHYW1lIE9iamVjdCB0byB3aGljaCB0aGlzIGFuaW1hdGlvbiBjb250cm9sbGVyIGJlbG9uZ3MuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jcGFyZW50XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIEFuaW1hdGlvbiBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI2FuaW1hdGlvbk1hbmFnZXJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFuaW1hdGlvbk1hbmFnZXIgPSBwYXJlbnQuc2NlbmUuc3lzLmFuaW1zO1xyXG5cclxuICAgICAgICB0aGlzLmFuaW1hdGlvbk1hbmFnZXIub25jZShFdmVudHMuUkVNT1ZFX0FOSU1BVElPTiwgdGhpcy5yZW1vdmUsIHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJcyBhbiBhbmltYXRpb24gY3VycmVudGx5IHBsYXlpbmcgb3Igbm90P1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI2lzUGxheWluZ1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGN1cnJlbnQgQW5pbWF0aW9uIGxvYWRlZCBpbnRvIHRoaXMgQW5pbWF0aW9uIENvbnRyb2xsZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jY3VycmVudEFuaW1cclxuICAgICAgICAgKiBAdHlwZSB7P1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QW5pbSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjdXJyZW50IEFuaW1hdGlvbkZyYW1lIGJlaW5nIGRpc3BsYXllZCBieSB0aGlzIEFuaW1hdGlvbiBDb250cm9sbGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI2N1cnJlbnRGcmFtZVxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWV9XHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGtleSBvZiB0aGUgbmV4dCBBbmltYXRpb24gdG8gYmUgbG9hZGVkIGludG8gdGhpcyBBbmltYXRpb24gQ29udHJvbGxlciB3aGVuIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBjb21wbGV0ZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jbmV4dEFuaW1cclxuICAgICAgICAgKiBAdHlwZSB7P3N0cmluZ31cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubmV4dEFuaW0gPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaW1lIHNjYWxlIGZhY3Rvci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNfdGltZVNjYWxlXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl90aW1lU2NhbGUgPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZnJhbWUgcmF0ZSBvZiBwbGF5YmFjayBpbiBmcmFtZXMgcGVyIHNlY29uZC5cclxuICAgICAgICAgKiBUaGUgZGVmYXVsdCBpcyAyNCBpZiB0aGUgYGR1cmF0aW9uYCBwcm9wZXJ0eSBpcyBgbnVsbGAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jZnJhbWVSYXRlXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mcmFtZVJhdGUgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBIb3cgbG9uZyB0aGUgYW5pbWF0aW9uIHNob3VsZCBwbGF5IGZvciwgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAgICAgICAqIElmIHRoZSBgZnJhbWVSYXRlYCBwcm9wZXJ0eSBoYXMgYmVlbiBzZXQgdGhlbiBpdCBvdmVycmlkZXMgdGhpcyB2YWx1ZSxcclxuICAgICAgICAgKiBvdGhlcndpc2UgdGhlIGBmcmFtZVJhdGVgIGlzIGRlcml2ZWQgZnJvbSBgZHVyYXRpb25gLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI2R1cmF0aW9uXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kdXJhdGlvbiA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIG1zIHBlciBmcmFtZSwgbm90IGluY2x1ZGluZyBmcmFtZSBzcGVjaWZpYyBtb2RpZmllcnMgdGhhdCBtYXkgYmUgcHJlc2VudCBpbiB0aGUgQW5pbWF0aW9uIGRhdGEuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jbXNQZXJGcmFtZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubXNQZXJGcmFtZSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNraXAgZnJhbWVzIGlmIHRoZSB0aW1lIGxhZ3MsIG9yIGFsd2F5cyBhZHZhbmNlZCBhbnl3YXk/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jc2tpcE1pc3NlZEZyYW1lc1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNraXBNaXNzZWRGcmFtZXMgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGRlbGF5IGJlZm9yZSBzdGFydGluZyBwbGF5YmFjaywgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI19kZWxheVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fZGVsYXkgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBOdW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBhbmltYXRpb24gKC0xIGZvciBpbmZpbml0eSlcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNfcmVwZWF0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9yZXBlYXQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEZWxheSBiZWZvcmUgdGhlIHJlcGVhdCBzdGFydHMsIGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNfcmVwZWF0RGVsYXlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3JlcGVhdERlbGF5ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2hvdWxkIHRoZSBhbmltYXRpb24geW95bz8gKHJldmVyc2UgYmFjayBkb3duIHRvIHRoZSBzdGFydCkgYmVmb3JlIHJlcGVhdGluZz9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNfeW95b1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl95b3lvID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdpbGwgdGhlIHBsYXloZWFkIG1vdmUgZm9yd2FyZHMgKGB0cnVlYCkgb3IgaW4gcmV2ZXJzZSAoYGZhbHNlYCkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jZm9yd2FyZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZvcndhcmQgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBJbnRlcm5hbCB0cmlnZ2VyIHRoYXQncyBwbGF5IHRoZSBhbmltYXRpb24gaW4gcmV2ZXJzZSBtb2RlICgndHJ1ZScpIG9yIG5vdCAoJ2ZhbHNlJyksXHJcbiAgICAgICAgICogbmVlZGVkIGJlY2F1c2UgZm9yd2FyZCBjYW4gYmUgY2hhbmdlZCBieSB5b3lvIGZlYXR1cmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jX3JldmVyc2VcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3JldmVyc2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgdGltZSBvdmVyZmxvdyBhY2N1bXVsYXRvci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNhY2N1bXVsYXRvclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWNjdW11bGF0b3IgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGltZSBwb2ludCBhdCB3aGljaCB0aGUgbmV4dCBhbmltYXRpb24gZnJhbWUgd2lsbCBjaGFuZ2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jbmV4dFRpY2tcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm5leHRUaWNrID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gaW50ZXJuYWwgY291bnRlciBrZWVwaW5nIHRyYWNrIG9mIGhvdyBtYW55IHJlcGVhdHMgYXJlIGxlZnQgdG8gcGxheS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNyZXBlYXRDb3VudGVyXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZXBlYXRDb3VudGVyID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gaW50ZXJuYWwgZmxhZyBrZWVwaW5nIHRyYWNrIG9mIHBlbmRpbmcgcmVwZWF0cy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNwZW5kaW5nUmVwZWF0XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBlbmRpbmdSZXBlYXQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXMgdGhlIEFuaW1hdGlvbiBwYXVzZWQ/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jX3BhdXNlZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2FzIHRoZSBhbmltYXRpb24gcHJldmlvdXNseSBwbGF5aW5nIGJlZm9yZSBiZWluZyBwYXVzZWQ/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jX3dhc1BsYXlpbmdcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fd2FzUGxheWluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCBwcm9wZXJ0eSB0cmFja2luZyBpZiB0aGlzIEFuaW1hdGlvbiBpcyB3YWl0aW5nIHRvIHN0b3AuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiAwID0gTm9cclxuICAgICAgICAgKiAxID0gV2FpdGluZyBmb3IgbXMgdG8gcGFzc1xyXG4gICAgICAgICAqIDIgPSBXYWl0aW5nIGZvciByZXBlYXRcclxuICAgICAgICAgKiAzID0gV2FpdGluZyBmb3Igc3BlY2lmaWMgZnJhbWVcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNfcGVuZGluZ1N0b3BcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3BlbmRpbmdTdG9wID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgcHJvcGVydHkgdXNlZCBieSBfcGVuZGluZ1N0b3AuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jX3BlbmRpbmdTdG9wVmFsdWVcclxuICAgICAgICAgKiBAdHlwZSB7YW55fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fcGVuZGluZ1N0b3BWYWx1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGFuIGFuaW1hdGlvbiB0byBiZSBwbGF5ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIGNvbXBsZXRlcy5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGN1cnJlbnQgYW5pbWF0aW9uIG11c3QgZW50ZXIgYSAnY29tcGxldGVkJyBzdGF0ZSBmb3IgdGhpcyB0byBoYXBwZW4sIGkuZS4gZmluaXNoIGFsbCBvZiBpdHMgcmVwZWF0cywgZGVsYXlzLCBldGMsIG9yIGhhdmUgdGhlIGBzdG9wYCBtZXRob2QgY2FsbGVkIGRpcmVjdGx5IG9uIGl0LlxyXG4gICAgICogXHJcbiAgICAgKiBBbiBhbmltYXRpb24gc2V0IHRvIHJlcGVhdCBmb3JldmVyIHdpbGwgbmV2ZXIgZW50ZXIgYSBjb21wbGV0ZWQgc3RhdGUuXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBjYW4gY2hhaW4gYSBuZXcgYW5pbWF0aW9uIGF0IGFueSBwb2ludCwgaW5jbHVkaW5nIGJlZm9yZSB0aGUgY3VycmVudCBvbmUgc3RhcnRzIHBsYXlpbmcsIGR1cmluZyBpdCwgb3Igd2hlbiBpdCBlbmRzICh2aWEgaXRzIGBhbmltYXRpb25jb21wbGV0ZWAgY2FsbGJhY2spLlxyXG4gICAgICogQ2hhaW5lZCBhbmltYXRpb25zIGFyZSBzcGVjaWZpYyB0byBhIEdhbWUgT2JqZWN0LCBtZWFuaW5nIGRpZmZlcmVudCBHYW1lIE9iamVjdHMgY2FuIGhhdmUgZGlmZmVyZW50IGNoYWluZWQgYW5pbWF0aW9ucyB3aXRob3V0IGltcGFjdGluZyB0aGUgZ2xvYmFsIGFuaW1hdGlvbiB0aGV5J3JlIHBsYXlpbmcuXHJcbiAgICAgKiBcclxuICAgICAqIENhbGwgdGhpcyBtZXRob2Qgd2l0aCBubyBhcmd1bWVudHMgdG8gcmVzZXQgdGhlIGNoYWluZWQgYW5pbWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI2NoYWluXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbil9IFtrZXldIC0gVGhlIHN0cmluZy1iYXNlZCBrZXkgb2YgdGhlIGFuaW1hdGlvbiB0byBwbGF5IG5leHQsIGFzIGRlZmluZWQgcHJldmlvdXNseSBpbiB0aGUgQW5pbWF0aW9uIE1hbmFnZXIuIE9yIGFuIEFuaW1hdGlvbiBpbnN0YW5jZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgb3ducyB0aGlzIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIGNoYWluOiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChrZXkgaW5zdGFuY2VvZiBCYXNlQW5pbWF0aW9uKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAga2V5ID0ga2V5LmtleTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubmV4dEFuaW0gPSBrZXk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBhbW91bnQgb2YgdGltZSwgaW4gbWlsbGlzZWNvbmRzLCB0aGF0IHRoZSBhbmltYXRpb24gd2lsbCBiZSBkZWxheWVkIGJlZm9yZSBzdGFydGluZyBwbGF5YmFjay5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNzZXREZWxheVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbdmFsdWU9MF0gLSBUaGUgYW1vdW50IG9mIHRpbWUsIGluIG1pbGxpc2Vjb25kcywgdG8gd2FpdCBiZWZvcmUgc3RhcnRpbmcgcGxheWJhY2suXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IG93bnMgdGhpcyBBbmltYXRpb24gQ29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBzZXREZWxheTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7IHZhbHVlID0gMDsgfVxyXG5cclxuICAgICAgICB0aGlzLl9kZWxheSA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgYW1vdW50IG9mIHRpbWUsIGluIG1pbGxpc2Vjb25kcyB0aGF0IHRoZSBhbmltYXRpb24gd2lsbCBiZSBkZWxheWVkIGJlZm9yZSBzdGFydGluZyBwbGF5YmFjay5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNnZXREZWxheVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gVGhlIGFtb3VudCBvZiB0aW1lLCBpbiBtaWxsaXNlY29uZHMsIHRoZSBBbmltYXRpb24gd2lsbCB3YWl0IGJlZm9yZSBzdGFydGluZyBwbGF5YmFjay5cclxuICAgICAqL1xyXG4gICAgZ2V0RGVsYXk6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGF5O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdhaXRzIGZvciB0aGUgc3BlY2lmaWVkIGRlbGF5LCBpbiBtaWxsaXNlY29uZHMsIHRoZW4gc3RhcnRzIHBsYXliYWNrIG9mIHRoZSByZXF1ZXN0ZWQgYW5pbWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI2RlbGF5ZWRQbGF5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGRlbGF5IC0gVGhlIGRlbGF5LCBpbiBtaWxsaXNlY29uZHMsIHRvIHdhaXQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBhbmltYXRpb24gcGxheWluZy5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBhbmltYXRpb24gdG8gcGxheS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3N0YXJ0RnJhbWU9MF0gLSBUaGUgZnJhbWUgb2YgdGhlIGFuaW1hdGlvbiB0byBzdGFydCBmcm9tLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCBvd25zIHRoaXMgQW5pbWF0aW9uIENvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgZGVsYXllZFBsYXk6IGZ1bmN0aW9uIChkZWxheSwga2V5LCBzdGFydEZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucGxheShrZXksIHRydWUsIHN0YXJ0RnJhbWUpO1xyXG5cclxuICAgICAgICB0aGlzLm5leHRUaWNrICs9IGRlbGF5O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUga2V5IG9mIHRoZSBhbmltYXRpb24gY3VycmVudGx5IGxvYWRlZCBpbnRvIHRoaXMgY29tcG9uZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI2dldEN1cnJlbnRLZXlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGtleSBvZiB0aGUgQW5pbWF0aW9uIGxvYWRlZCBpbnRvIHRoaXMgY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBnZXRDdXJyZW50S2V5OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRBbmltKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEFuaW0ua2V5O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdXNlZCB0byBsb2FkIGFuIGFuaW1hdGlvbiBpbnRvIHRoaXMgY29tcG9uZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI2xvYWRcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBhbmltYXRpb24gdG8gbG9hZC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3N0YXJ0RnJhbWU9MF0gLSBUaGUgc3RhcnQgZnJhbWUgb2YgdGhlIGFuaW1hdGlvbiB0byBsb2FkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCBvd25zIHRoaXMgQW5pbWF0aW9uIENvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgbG9hZDogZnVuY3Rpb24gKGtleSwgc3RhcnRGcmFtZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoc3RhcnRGcmFtZSA9PT0gdW5kZWZpbmVkKSB7IHN0YXJ0RnJhbWUgPSAwOyB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzUGxheWluZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIExvYWQgdGhlIG5ldyBhbmltYXRpb24gaW5cclxuICAgICAgICB0aGlzLmFuaW1hdGlvbk1hbmFnZXIubG9hZCh0aGlzLCBrZXksIHN0YXJ0RnJhbWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGF1c2UgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIGFuZCBzZXQgdGhlIGBpc1BsYXlpbmdgIHByb3BlcnR5IHRvIGBmYWxzZWAuXHJcbiAgICAgKiBZb3UgY2FuIG9wdGlvbmFsbHkgcGF1c2UgaXQgYXQgYSBzcGVjaWZpYyBmcmFtZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNwYXVzZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZX0gW2F0RnJhbWVdIC0gQW4gb3B0aW9uYWwgZnJhbWUgdG8gc2V0IGFmdGVyIHBhdXNpbmcgdGhlIGFuaW1hdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgb3ducyB0aGlzIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHBhdXNlOiBmdW5jdGlvbiAoYXRGcmFtZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3BhdXNlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3dhc1BsYXlpbmcgPSB0aGlzLmlzUGxheWluZztcclxuICAgICAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChhdEZyYW1lICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZyYW1lKGF0RnJhbWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3VtZXMgcGxheWJhY2sgb2YgYSBwYXVzZWQgYW5pbWF0aW9uIGFuZCBzZXRzIHRoZSBgaXNQbGF5aW5nYCBwcm9wZXJ0eSB0byBgdHJ1ZWAuXHJcbiAgICAgKiBZb3UgY2FuIG9wdGlvbmFsbHkgdGVsbCBpdCB0byBzdGFydCBwbGF5YmFjayBmcm9tIGEgc3BlY2lmaWMgZnJhbWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jcmVzdW1lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbkZyYW1lfSBbZnJvbUZyYW1lXSAtIEFuIG9wdGlvbmFsIGZyYW1lIHRvIHNldCBiZWZvcmUgcmVzdGFydGluZyBwbGF5YmFjay5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgb3ducyB0aGlzIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHJlc3VtZTogZnVuY3Rpb24gKGZyb21GcmFtZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5fcGF1c2VkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gdGhpcy5fd2FzUGxheWluZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmcm9tRnJhbWUgIT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRnJhbWUoZnJvbUZyYW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBgdHJ1ZWAgaWYgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIGlzIHBhdXNlZCwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI2lzUGF1c2VkXHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKi9cclxuICAgIGlzUGF1c2VkOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXVzZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQbGF5cyBhbiBBbmltYXRpb24gb24gYSBHYW1lIE9iamVjdCB0aGF0IGhhcyB0aGUgQW5pbWF0aW9uIGNvbXBvbmVudCwgc3VjaCBhcyBhIFNwcml0ZS5cclxuICAgICAqIFxyXG4gICAgICogQW5pbWF0aW9ucyBhcmUgc3RvcmVkIGluIHRoZSBnbG9iYWwgQW5pbWF0aW9uIE1hbmFnZXIgYW5kIGFyZSByZWZlcmVuY2VkIGJ5IGEgdW5pcXVlIHN0cmluZy1iYXNlZCBrZXkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jcGxheVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNvblN0YXJ0RXZlbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb24pfSBrZXkgLSBUaGUgc3RyaW5nLWJhc2VkIGtleSBvZiB0aGUgYW5pbWF0aW9uIHRvIHBsYXksIGFzIGRlZmluZWQgcHJldmlvdXNseSBpbiB0aGUgQW5pbWF0aW9uIE1hbmFnZXIuIE9yIGFuIEFuaW1hdGlvbiBpbnN0YW5jZS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lnbm9yZUlmUGxheWluZz1mYWxzZV0gLSBJZiB0aGlzIGFuaW1hdGlvbiBpcyBhbHJlYWR5IHBsYXlpbmcgdGhlbiBpZ25vcmUgdGhpcyBjYWxsLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbc3RhcnRGcmFtZT0wXSAtIE9wdGlvbmFsbHkgc3RhcnQgdGhlIGFuaW1hdGlvbiBwbGF5aW5nIGZyb20gdGhpcyBmcmFtZSBpbmRleC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgb3ducyB0aGlzIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHBsYXk6IGZ1bmN0aW9uIChrZXksIGlnbm9yZUlmUGxheWluZywgc3RhcnRGcmFtZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoaWdub3JlSWZQbGF5aW5nID09PSB1bmRlZmluZWQpIHsgaWdub3JlSWZQbGF5aW5nID0gZmFsc2U7IH1cclxuICAgICAgICBpZiAoc3RhcnRGcmFtZSA9PT0gdW5kZWZpbmVkKSB7IHN0YXJ0RnJhbWUgPSAwOyB9XHJcblxyXG4gICAgICAgIGlmIChrZXkgaW5zdGFuY2VvZiBCYXNlQW5pbWF0aW9uKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAga2V5ID0ga2V5LmtleTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZ25vcmVJZlBsYXlpbmcgJiYgdGhpcy5pc1BsYXlpbmcgJiYgdGhpcy5jdXJyZW50QW5pbS5rZXkgPT09IGtleSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZm9yd2FyZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fcmV2ZXJzZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRBbmltYXRpb24oa2V5LCBzdGFydEZyYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQbGF5cyBhbiBBbmltYXRpb24gKGluIHJldmVyc2UgbW9kZSkgb24gdGhlIEdhbWUgT2JqZWN0IHRoYXQgb3ducyB0aGlzIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jcGxheVJldmVyc2VcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jb25TdGFydEV2ZW50XHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5BbmltYXRpb25zLkFuaW1hdGlvbil9IGtleSAtIFRoZSBzdHJpbmctYmFzZWQga2V5IG9mIHRoZSBhbmltYXRpb24gdG8gcGxheSwgYXMgZGVmaW5lZCBwcmV2aW91c2x5IGluIHRoZSBBbmltYXRpb24gTWFuYWdlci4gT3IgYW4gQW5pbWF0aW9uIGluc3RhbmNlLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaWdub3JlSWZQbGF5aW5nPWZhbHNlXSAtIElmIGFuIGFuaW1hdGlvbiBpcyBhbHJlYWR5IHBsYXlpbmcgdGhlbiBpZ25vcmUgdGhpcyBjYWxsLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbc3RhcnRGcmFtZT0wXSAtIE9wdGlvbmFsbHkgc3RhcnQgdGhlIGFuaW1hdGlvbiBwbGF5aW5nIGZyb20gdGhpcyBmcmFtZSBpbmRleC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgb3ducyB0aGlzIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHBsYXlSZXZlcnNlOiBmdW5jdGlvbiAoa2V5LCBpZ25vcmVJZlBsYXlpbmcsIHN0YXJ0RnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGlnbm9yZUlmUGxheWluZyA9PT0gdW5kZWZpbmVkKSB7IGlnbm9yZUlmUGxheWluZyA9IGZhbHNlOyB9XHJcbiAgICAgICAgaWYgKHN0YXJ0RnJhbWUgPT09IHVuZGVmaW5lZCkgeyBzdGFydEZyYW1lID0gMDsgfVxyXG5cclxuICAgICAgICBpZiAoa2V5IGluc3RhbmNlb2YgQmFzZUFuaW1hdGlvbilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGtleSA9IGtleS5rZXk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWdub3JlSWZQbGF5aW5nICYmIHRoaXMuaXNQbGF5aW5nICYmIHRoaXMuY3VycmVudEFuaW0ua2V5ID09PSBrZXkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZvcndhcmQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9yZXZlcnNlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0QW5pbWF0aW9uKGtleSwgc3RhcnRGcmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTG9hZCBhbiBBbmltYXRpb24gYW5kIGZpcmVzICdvblN0YXJ0RXZlbnQnIGV2ZW50LCBleHRyYWN0ZWQgZnJvbSAncGxheScgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI19zdGFydEFuaW1hdGlvblxyXG4gICAgICogQGZpcmVzIFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNTVEFSVF9BTklNQVRJT05fRVZFTlRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQW5pbWF0aW9ucy5FdmVudHMjU1BSSVRFX1NUQVJUX0FOSU1BVElPTl9FVkVOVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNTUFJJVEVfU1RBUlRfS0VZX0FOSU1BVElPTl9FVkVOVFxyXG4gICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgc3RyaW5nLWJhc2VkIGtleSBvZiB0aGUgYW5pbWF0aW9uIHRvIHBsYXksIGFzIGRlZmluZWQgcHJldmlvdXNseSBpbiB0aGUgQW5pbWF0aW9uIE1hbmFnZXIuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtzdGFydEZyYW1lPTBdIC0gT3B0aW9uYWxseSBzdGFydCB0aGUgYW5pbWF0aW9uIHBsYXlpbmcgZnJvbSB0aGlzIGZyYW1lIGluZGV4LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCBvd25zIHRoaXMgQW5pbWF0aW9uIENvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgX3N0YXJ0QW5pbWF0aW9uOiBmdW5jdGlvbiAoa2V5LCBzdGFydEZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMubG9hZChrZXksIHN0YXJ0RnJhbWUpO1xyXG5cclxuICAgICAgICB2YXIgYW5pbSA9IHRoaXMuY3VycmVudEFuaW07XHJcbiAgICAgICAgdmFyIGdhbWVPYmplY3QgPSB0aGlzLnBhcmVudDtcclxuXHJcbiAgICAgICAgaWYgKCFhbmltKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgU2hvdWxkIGdpdmUgdXMgOSwwMDcsMTk5LDI1NCw3NDAsOTkxIHNhZmUgcmVwZWF0c1xyXG4gICAgICAgIHRoaXMucmVwZWF0Q291bnRlciA9ICh0aGlzLl9yZXBlYXQgPT09IC0xKSA/IE51bWJlci5NQVhfVkFMVUUgOiB0aGlzLl9yZXBlYXQ7XHJcblxyXG4gICAgICAgIGFuaW0uZ2V0Rmlyc3RUaWNrKHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLmlzUGxheWluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nUmVwZWF0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChhbmltLnNob3dPblN0YXJ0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZ2FtZU9iamVjdC52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xyXG5cclxuICAgICAgICBhbmltLmVtaXQoRXZlbnRzLkFOSU1BVElPTl9TVEFSVCwgYW5pbSwgZnJhbWUsIGdhbWVPYmplY3QpO1xyXG5cclxuICAgICAgICBnYW1lT2JqZWN0LmVtaXQoRXZlbnRzLlNQUklURV9BTklNQVRJT05fS0VZX1NUQVJUICsga2V5LCBhbmltLCBmcmFtZSwgZ2FtZU9iamVjdCk7XHJcblxyXG4gICAgICAgIGdhbWVPYmplY3QuZW1pdChFdmVudHMuU1BSSVRFX0FOSU1BVElPTl9TVEFSVCwgYW5pbSwgZnJhbWUsIGdhbWVPYmplY3QpO1xyXG5cclxuICAgICAgICByZXR1cm4gZ2FtZU9iamVjdDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXZlcnNlIHRoZSBBbmltYXRpb24gdGhhdCBpcyBhbHJlYWR5IHBsYXlpbmcgb24gdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI3JldmVyc2VcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgb3ducyB0aGlzIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHJldmVyc2U6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNQbGF5aW5nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fcmV2ZXJzZSA9ICF0aGlzLl9yZXZlcnNlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mb3J3YXJkID0gIXRoaXMuZm9yd2FyZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxIGluZGljYXRpbmcgaG93IGZhciB0aGlzIGFuaW1hdGlvbiBpcyB0aHJvdWdoLCBpZ25vcmluZyByZXBlYXRzIGFuZCB5b3lvcy5cclxuICAgICAqIElmIHRoZSBhbmltYXRpb24gaGFzIGEgbm9uLXplcm8gcmVwZWF0IGRlZmluZWQsIGBnZXRQcm9ncmVzc2AgYW5kIGBnZXRUb3RhbFByb2dyZXNzYCB3aWxsIGJlIGRpZmZlcmVudFxyXG4gICAgICogYmVjYXVzZSBgZ2V0UHJvZ3Jlc3NgIGRvZXNuJ3QgaW5jbHVkZSBhbnkgcmVwZWF0cyBvciByZXBlYXQgZGVsYXlzLCB3aGVyZWFzIGBnZXRUb3RhbFByb2dyZXNzYCBkb2VzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI2dldFByb2dyZXNzXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBwcm9ncmVzcyBvZiB0aGUgY3VycmVudCBhbmltYXRpb24sIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqL1xyXG4gICAgZ2V0UHJvZ3Jlc3M6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHAgPSB0aGlzLmN1cnJlbnRGcmFtZS5wcm9ncmVzcztcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmZvcndhcmQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwID0gMSAtIHA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMSBhbmQgdXNlcyBpdCB0byBzZXQgaG93IGZhciB0aGlzIGFuaW1hdGlvbiBpcyB0aHJvdWdoIHBsYXliYWNrLlxyXG4gICAgICogRG9lcyBub3QgZmFjdG9yIGluIHJlcGVhdHMgb3IgeW95b3MsIGJ1dCBkb2VzIGhhbmRsZSBwbGF5aW5nIGZvcndhcmRzIG9yIGJhY2t3YXJkcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNzZXRQcm9ncmVzc1xyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt2YWx1ZT0wXSAtIFRoZSBwcm9ncmVzcyB2YWx1ZSwgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCBvd25zIHRoaXMgQW5pbWF0aW9uIENvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgc2V0UHJvZ3Jlc3M6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuZm9yd2FyZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gMSAtIHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50RnJhbWUodGhpcy5jdXJyZW50QW5pbS5nZXRGcmFtZUJ5UHJvZ3Jlc3ModmFsdWUpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZSB0aGUgcmVtb3ZhbCBvZiBhbiBhbmltYXRpb24gZnJvbSB0aGUgQW5pbWF0aW9uIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jcmVtb3ZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gLSBUaGUga2V5IG9mIHRoZSByZW1vdmVkIEFuaW1hdGlvbi5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9ufSBbYW5pbWF0aW9uXSAtIFRoZSByZW1vdmVkIEFuaW1hdGlvbi5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAoa2V5LCBhbmltYXRpb24pXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGFuaW1hdGlvbiA9PT0gdW5kZWZpbmVkKSB7IGFuaW1hdGlvbiA9IHRoaXMuY3VycmVudEFuaW07IH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNQbGF5aW5nICYmIGFuaW1hdGlvbi5rZXkgPT09IHRoaXMuY3VycmVudEFuaW0ua2V5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9wKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldEN1cnJlbnRGcmFtZSh0aGlzLmN1cnJlbnRBbmltLmZyYW1lc1swXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IHRoZSBhbmltYXRpb24gd2lsbCByZXBlYXRcclxuICAgICAqIGFmdGVyIGl0cyBmaXJzdCBpdGVyYXRpb24uIEZvciBleGFtcGxlLCBpZiByZXR1cm5zIDEsIHRoZSBhbmltYXRpb24gd2lsbFxyXG4gICAgICogcGxheSBhIHRvdGFsIG9mIHR3aWNlICh0aGUgaW5pdGlhbCBwbGF5IHBsdXMgMSByZXBlYXQpLlxyXG4gICAgICogQSB2YWx1ZSBvZiAtMSBtZWFucyB0aGUgYW5pbWF0aW9uIHdpbGwgcmVwZWF0IGluZGVmaW5pdGVseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNnZXRSZXBlYXRcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGUgYW5pbWF0aW9uIHdpbGwgcmVwZWF0LlxyXG4gICAgICovXHJcbiAgICBnZXRSZXBlYXQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcGVhdDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGUgYW5pbWF0aW9uIHNob3VsZCByZXBlYXRcclxuICAgICAqIGFmdGVyIGl0cyBmaXJzdCBpdGVyYXRpb24uIEZvciBleGFtcGxlLCBpZiByZXBlYXQgaXMgMSwgdGhlIGFuaW1hdGlvbiB3aWxsXHJcbiAgICAgKiBwbGF5IGEgdG90YWwgb2YgdHdpY2UgKHRoZSBpbml0aWFsIHBsYXkgcGx1cyAxIHJlcGVhdCkuXHJcbiAgICAgKiBUbyByZXBlYXQgaW5kZWZpbml0ZWx5LCB1c2UgLTEuIHJlcGVhdCBzaG91bGQgYWx3YXlzIGJlIGFuIGludGVnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jc2V0UmVwZWF0XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHZhbHVlIC0gVGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IHRoZSBhbmltYXRpb24gc2hvdWxkIHJlcGVhdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgb3ducyB0aGlzIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHNldFJlcGVhdDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX3JlcGVhdCA9IHZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnJlcGVhdENvdW50ZXIgPSAodmFsdWUgPT09IC0xKSA/IE51bWJlci5NQVhfVkFMVUUgOiB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGFtb3VudCBvZiBkZWxheSBiZXR3ZWVuIHJlcGVhdHMsIGlmIGFueS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNnZXRSZXBlYXREZWxheVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgZGVsYXkgYmV0d2VlbiByZXBlYXRzLlxyXG4gICAgICovXHJcbiAgICBnZXRSZXBlYXREZWxheTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVwZWF0RGVsYXk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyBiZXR3ZWVuIHJlcGVhdHMuXHJcbiAgICAgKiBGb3IgZXhhbXBsZSwgaWYgYHJlcGVhdGAgaXMgMiBhbmQgYHJlcGVhdERlbGF5YCBpcyAxMCwgdGhlIGFuaW1hdGlvbiB3aWxsIHBsYXkgaW5pdGlhbGx5LFxyXG4gICAgICogdGhlbiB3YWl0IGZvciAxMCBzZWNvbmRzIGJlZm9yZSByZXBlYXRpbmcsIHRoZW4gcGxheSBhZ2FpbiwgdGhlbiB3YWl0IGFub3RoZXIgMTAgc2Vjb25kc1xyXG4gICAgICogYmVmb3JlIGRvaW5nIGl0cyBmaW5hbCByZXBlYXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jc2V0UmVwZWF0RGVsYXlcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBkZWxheSB0byB3YWl0IGJldHdlZW4gcmVwZWF0cywgaW4gc2Vjb25kcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgb3ducyB0aGlzIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHNldFJlcGVhdERlbGF5OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fcmVwZWF0RGVsYXkgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3RhcnRzIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBmcm9tIGl0cyBiZWdpbm5pbmcsIG9wdGlvbmFsbHkgaW5jbHVkaW5nIGl0cyBkZWxheSB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNyZXN0YXJ0XHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkFuaW1hdGlvbnMuRXZlbnRzI1JFU1RBUlRfQU5JTUFUSU9OX0VWRU5UXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkFuaW1hdGlvbnMuRXZlbnRzI1NQUklURV9SRVNUQVJUX0FOSU1BVElPTl9FVkVOVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5BbmltYXRpb25zLkV2ZW50cyNTUFJJVEVfUkVTVEFSVF9LRVlfQU5JTUFUSU9OX0VWRU5UXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmNsdWRlRGVsYXk9ZmFsc2VdIC0gV2hldGhlciB0byBpbmNsdWRlIHRoZSBkZWxheSB2YWx1ZSBvZiB0aGUgYW5pbWF0aW9uIHdoZW4gcmVzdGFydGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgb3ducyB0aGlzIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHJlc3RhcnQ6IGZ1bmN0aW9uIChpbmNsdWRlRGVsYXkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGluY2x1ZGVEZWxheSA9PT0gdW5kZWZpbmVkKSB7IGluY2x1ZGVEZWxheSA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIHZhciBhbmltID0gdGhpcy5jdXJyZW50QW5pbTtcclxuXHJcbiAgICAgICAgYW5pbS5nZXRGaXJzdFRpY2sodGhpcywgaW5jbHVkZURlbGF5KTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3J3YXJkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzUGxheWluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nUmVwZWF0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vICBTZXQgZnJhbWVcclxuICAgICAgICB0aGlzLnVwZGF0ZUZyYW1lKGFuaW0uZnJhbWVzWzBdKTtcclxuXHJcbiAgICAgICAgdmFyIGdhbWVPYmplY3QgPSB0aGlzLnBhcmVudDtcclxuICAgICAgICB2YXIgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcclxuXHJcbiAgICAgICAgYW5pbS5lbWl0KEV2ZW50cy5BTklNQVRJT05fUkVTVEFSVCwgYW5pbSwgZnJhbWUsIGdhbWVPYmplY3QpO1xyXG5cclxuICAgICAgICBnYW1lT2JqZWN0LmVtaXQoRXZlbnRzLlNQUklURV9BTklNQVRJT05fS0VZX1JFU1RBUlQgKyBhbmltLmtleSwgYW5pbSwgZnJhbWUsIGdhbWVPYmplY3QpO1xyXG5cclxuICAgICAgICBnYW1lT2JqZWN0LmVtaXQoRXZlbnRzLlNQUklURV9BTklNQVRJT05fUkVTVEFSVCwgYW5pbSwgZnJhbWUsIGdhbWVPYmplY3QpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW1tZWRpYXRlbHkgc3RvcHMgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIGZyb20gcGxheWluZyBhbmQgZGlzcGF0Y2hlcyB0aGUgYGFuaW1hdGlvbmNvbXBsZXRlYCBldmVudC5cclxuICAgICAqIFxyXG4gICAgICogSWYgbm8gYW5pbWF0aW9uIGlzIHNldCwgbm8gZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGVyZSBpcyBhbm90aGVyIGFuaW1hdGlvbiBxdWV1ZWQgKHZpYSB0aGUgYGNoYWluYCBtZXRob2QpIHRoZW4gaXQgd2lsbCBzdGFydCBwbGF5aW5nIGltbWVkaWF0ZWx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI3N0b3BcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jb25Db21wbGV0ZUV2ZW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgb3ducyB0aGlzIEFuaW1hdGlvbiBDb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fcGVuZGluZ1N0b3AgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICB2YXIgZ2FtZU9iamVjdCA9IHRoaXMucGFyZW50O1xyXG4gICAgICAgIHZhciBhbmltID0gdGhpcy5jdXJyZW50QW5pbTtcclxuICAgICAgICB2YXIgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcclxuXHJcbiAgICAgICAgaWYgKGFuaW0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBhbmltLmVtaXQoRXZlbnRzLkFOSU1BVElPTl9DT01QTEVURSwgYW5pbSwgZnJhbWUsIGdhbWVPYmplY3QpO1xyXG5cclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5lbWl0KEV2ZW50cy5TUFJJVEVfQU5JTUFUSU9OX0tFWV9DT01QTEVURSArIGFuaW0ua2V5LCBhbmltLCBmcmFtZSwgZ2FtZU9iamVjdCk7XHJcbiAgICBcclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5lbWl0KEV2ZW50cy5TUFJJVEVfQU5JTUFUSU9OX0NPTVBMRVRFLCBhbmltLCBmcmFtZSwgZ2FtZU9iamVjdCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5uZXh0QW5pbSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSB0aGlzLm5leHRBbmltO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5uZXh0QW5pbSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBsYXkoa2V5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBnYW1lT2JqZWN0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBmcm9tIHBsYXlpbmcgYWZ0ZXIgdGhlIHNwZWNpZmllZCB0aW1lIGRlbGF5LCBnaXZlbiBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jc3RvcEFmdGVyRGVsYXlcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jb25Db21wbGV0ZUV2ZW50XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGRlbGF5IC0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgc3RvcHBpbmcgdGhpcyBhbmltYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCB0aGF0IG93bnMgdGhpcyBBbmltYXRpb24gQ29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBzdG9wQWZ0ZXJEZWxheTogZnVuY3Rpb24gKGRlbGF5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX3BlbmRpbmdTdG9wID0gMTtcclxuICAgICAgICB0aGlzLl9wZW5kaW5nU3RvcFZhbHVlID0gZGVsYXk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9wcyB0aGUgY3VycmVudCBhbmltYXRpb24gZnJvbSBwbGF5aW5nIHdoZW4gaXQgbmV4dCByZXBlYXRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI3N0b3BPblJlcGVhdFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNvbkNvbXBsZXRlRXZlbnRcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCBvd25zIHRoaXMgQW5pbWF0aW9uIENvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgc3RvcE9uUmVwZWF0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX3BlbmRpbmdTdG9wID0gMjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBmcm9tIHBsYXlpbmcgd2hlbiBpdCBuZXh0IHNldHMgdGhlIGdpdmVuIGZyYW1lLlxyXG4gICAgICogSWYgdGhpcyBmcmFtZSBkb2Vzbid0IGV4aXN0IHdpdGhpbiB0aGUgYW5pbWF0aW9uIGl0IHdpbGwgbm90IHN0b3AgaXQgZnJvbSBwbGF5aW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI3N0b3BPbkZyYW1lXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI29uQ29tcGxldGVFdmVudFxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZX0gZnJhbWUgLSBUaGUgZnJhbWUgdG8gY2hlY2sgYmVmb3JlIHN0b3BwaW5nIHRoaXMgYW5pbWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCBvd25zIHRoaXMgQW5pbWF0aW9uIENvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgc3RvcE9uRnJhbWU6IGZ1bmN0aW9uIChmcmFtZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9wZW5kaW5nU3RvcCA9IDM7XHJcbiAgICAgICAgdGhpcy5fcGVuZGluZ1N0b3BWYWx1ZSA9IGZyYW1lO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgVGltZSBTY2FsZSBmYWN0b3IsIGFsbG93aW5nIHlvdSB0byBtYWtlIHRoZSBhbmltYXRpb24gZ28gZ28gZmFzdGVyIG9yIHNsb3dlciB0aGFuIGRlZmF1bHQuXHJcbiAgICAgKiBXaGVyZSAxID0gbm9ybWFsIHNwZWVkICh0aGUgZGVmYXVsdCksIDAuNSA9IGhhbGYgc3BlZWQsIDIgPSBkb3VibGUgc3BlZWQsIGV0Yy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNzZXRUaW1lU2NhbGVcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdmFsdWU9MV0gLSBUaGUgdGltZSBzY2FsZSBmYWN0b3IsIHdoZXJlIDEgaXMgbm8gY2hhbmdlLCAwLjUgaXMgaGFsZiBzcGVlZCwgZXRjLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhhdCBvd25zIHRoaXMgQW5pbWF0aW9uIENvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgc2V0VGltZVNjYWxlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsgdmFsdWUgPSAxOyB9XHJcblxyXG4gICAgICAgIHRoaXMuX3RpbWVTY2FsZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgVGltZSBTY2FsZSBmYWN0b3IuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jZ2V0VGltZVNjYWxlXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBUaW1lIFNjYWxlIHZhbHVlLlxyXG4gICAgICovXHJcbiAgICBnZXRUaW1lU2NhbGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVTY2FsZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGluIHRoaXMgYW5pbWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI2dldFRvdGFsRnJhbWVzXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgdG90YWwgbnVtYmVyIG9mIGZyYW1lcyBpbiB0aGlzIGFuaW1hdGlvbi5cclxuICAgICAqL1xyXG4gICAgZ2V0VG90YWxGcmFtZXM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEFuaW0uZnJhbWVzLmxlbmd0aDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3AgZm9yIHRoZSBBbmltYXRpb24gQ29tcG9uZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI3VwZGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lc3RhbXAuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGEgLSBUaGUgZGVsdGEgdGltZSwgaW4gbXMsIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgZnJhbWUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKHRpbWUsIGRlbHRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50QW5pbSB8fCAhdGhpcy5pc1BsYXlpbmcgfHwgdGhpcy5jdXJyZW50QW5pbS5wYXVzZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmFjY3VtdWxhdG9yICs9IGRlbHRhICogdGhpcy5fdGltZVNjYWxlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fcGVuZGluZ1N0b3AgPT09IDEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nU3RvcFZhbHVlIC09IGRlbHRhO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdTdG9wVmFsdWUgPD0gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEFuaW0uY29tcGxldGVBbmltYXRpb24odGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFjY3VtdWxhdG9yID49IHRoaXMubmV4dFRpY2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRBbmltLnNldEZyYW1lKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBnaXZlbiBBbmltYXRpb24gRnJhbWUgYXMgYmVpbmcgdGhlIGN1cnJlbnQgZnJhbWVcclxuICAgICAqIGFuZCBhcHBsaWVzIGl0IHRvIHRoZSBwYXJlbnQgR2FtZSBPYmplY3QsIGFkanVzdGluZyBpdHMgc2l6ZSBhbmQgb3JpZ2luIGFzIG5lZWRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNzZXRDdXJyZW50RnJhbWVcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkFuaW1hdGlvbnMuQW5pbWF0aW9uRnJhbWV9IGFuaW1hdGlvbkZyYW1lIC0gVGhlIEFuaW1hdGlvbiBGcmFtZSB0byBzZXQgYXMgYmVpbmcgY3VycmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoaXMgQW5pbWF0aW9uIENvbXBvbmVudCBiZWxvbmdzIHRvLlxyXG4gICAgICovXHJcbiAgICBzZXRDdXJyZW50RnJhbWU6IGZ1bmN0aW9uIChhbmltYXRpb25GcmFtZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgZ2FtZU9iamVjdCA9IHRoaXMucGFyZW50O1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGFuaW1hdGlvbkZyYW1lO1xyXG5cclxuICAgICAgICBnYW1lT2JqZWN0LnRleHR1cmUgPSBhbmltYXRpb25GcmFtZS5mcmFtZS50ZXh0dXJlO1xyXG4gICAgICAgIGdhbWVPYmplY3QuZnJhbWUgPSBhbmltYXRpb25GcmFtZS5mcmFtZTtcclxuXHJcbiAgICAgICAgaWYgKGdhbWVPYmplY3QuaXNDcm9wcGVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5mcmFtZS51cGRhdGVDcm9wVVZzKGdhbWVPYmplY3QuX2Nyb3AsIGdhbWVPYmplY3QuZmxpcFgsIGdhbWVPYmplY3QuZmxpcFkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2FtZU9iamVjdC5zZXRTaXplVG9GcmFtZSgpO1xyXG5cclxuICAgICAgICBpZiAoYW5pbWF0aW9uRnJhbWUuZnJhbWUuY3VzdG9tUGl2b3QpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBnYW1lT2JqZWN0LnNldE9yaWdpbihhbmltYXRpb25GcmFtZS5mcmFtZS5waXZvdFgsIGFuaW1hdGlvbkZyYW1lLmZyYW1lLnBpdm90WSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdhbWVPYmplY3QudXBkYXRlRGlzcGxheU9yaWdpbigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgZnJhbWUgY2hhbmdlIGhhbmRsZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jdXBkYXRlRnJhbWVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQW5pbWF0aW9ucy5FdmVudHMjU1BSSVRFX0FOSU1BVElPTl9VUERBVEVfRVZFTlRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuQW5pbWF0aW9ucy5FdmVudHMjU1BSSVRFX0FOSU1BVElPTl9LRVlfVVBEQVRFX0VWRU5UXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQW5pbWF0aW9ucy5BbmltYXRpb25GcmFtZX0gYW5pbWF0aW9uRnJhbWUgLSBUaGUgYW5pbWF0aW9uIGZyYW1lIHRvIGNoYW5nZSB0by5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlRnJhbWU6IGZ1bmN0aW9uIChhbmltYXRpb25GcmFtZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgZ2FtZU9iamVjdCA9IHRoaXMuc2V0Q3VycmVudEZyYW1lKGFuaW1hdGlvbkZyYW1lKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNQbGF5aW5nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGFuaW1hdGlvbkZyYW1lLnNldEFscGhhKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBnYW1lT2JqZWN0LmFscGhhID0gYW5pbWF0aW9uRnJhbWUuYWxwaGE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBhbmltID0gdGhpcy5jdXJyZW50QW5pbTtcclxuXHJcbiAgICAgICAgICAgIGdhbWVPYmplY3QuZW1pdChFdmVudHMuU1BSSVRFX0FOSU1BVElPTl9LRVlfVVBEQVRFICsgYW5pbS5rZXksIGFuaW0sIGFuaW1hdGlvbkZyYW1lLCBnYW1lT2JqZWN0KTtcclxuXHJcbiAgICAgICAgICAgIGdhbWVPYmplY3QuZW1pdChFdmVudHMuU1BSSVRFX0FOSU1BVElPTl9VUERBVEUsIGFuaW0sIGFuaW1hdGlvbkZyYW1lLCBnYW1lT2JqZWN0KTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9wZW5kaW5nU3RvcCA9PT0gMyAmJiB0aGlzLl9wZW5kaW5nU3RvcFZhbHVlID09PSBhbmltYXRpb25GcmFtZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QW5pbS5jb21wbGV0ZUFuaW1hdGlvbih0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZHZhbmNlcyB0aGUgYW5pbWF0aW9uIHRvIHRoZSBuZXh0IGZyYW1lLCByZWdhcmRsZXNzIG9mIHRoZSB0aW1lIG9yIGFuaW1hdGlvbiBzdGF0ZS5cclxuICAgICAqIElmIHRoZSBhbmltYXRpb24gaXMgc2V0IHRvIHJlcGVhdCwgb3IgeW95bywgdGhpcyB3aWxsIHN0aWxsIHRha2UgZWZmZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBDYWxsaW5nIHRoaXMgZG9lcyBub3QgY2hhbmdlIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGFuaW1hdGlvbi4gSS5lLiBpZiBpdCB3YXMgY3VycmVudGx5XHJcbiAgICAgKiBwbGF5aW5nIGluIHJldmVyc2UsIGNhbGxpbmcgdGhpcyBtZXRob2QgZG9lc24ndCB0aGVuIGNoYW5nZSB0aGUgZGlyZWN0aW9uIHRvIGZvcndhcmRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI25leHRGcmFtZVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhpcyBBbmltYXRpb24gQ29tcG9uZW50IGJlbG9uZ3MgdG8uXHJcbiAgICAgKi9cclxuICAgIG5leHRGcmFtZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50QW5pbSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEFuaW0ubmV4dEZyYW1lKHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkdmFuY2VzIHRoZSBhbmltYXRpb24gdG8gdGhlIHByZXZpb3VzIGZyYW1lLCByZWdhcmRsZXNzIG9mIHRoZSB0aW1lIG9yIGFuaW1hdGlvbiBzdGF0ZS5cclxuICAgICAqIElmIHRoZSBhbmltYXRpb24gaXMgc2V0IHRvIHJlcGVhdCwgb3IgeW95bywgdGhpcyB3aWxsIHN0aWxsIHRha2UgZWZmZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBDYWxsaW5nIHRoaXMgZG9lcyBub3QgY2hhbmdlIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGFuaW1hdGlvbi4gSS5lLiBpZiBpdCB3YXMgY3VycmVudGx5XHJcbiAgICAgKiBwbGF5aW5nIGluIGZvcndhcmRzLCBjYWxsaW5nIHRoaXMgbWV0aG9kIGRvZXNuJ3QgdGhlbiBjaGFuZ2UgdGhlIGRpcmVjdGlvbiB0byBiYWNrd2FyZHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jcHJldmlvdXNGcmFtZVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgR2FtZSBPYmplY3QgdGhpcyBBbmltYXRpb24gQ29tcG9uZW50IGJlbG9uZ3MgdG8uXHJcbiAgICAgKi9cclxuICAgIHByZXZpb3VzRnJhbWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEFuaW0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRBbmltLnByZXZpb3VzRnJhbWUodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBpZiB0aGUgY3VycmVudCBBbmltYXRpb24gd2lsbCB5b3lvIHdoZW4gaXQgcmVhY2hlcyB0aGUgZW5kLlxyXG4gICAgICogQSB5b3lvJ2luZyBhbmltYXRpb24gd2lsbCBwbGF5IHRocm91Z2ggY29uc2VjdXRpdmVseSwgYW5kIHRoZW4gcmV2ZXJzZS1wbGF5IGJhY2sgdG8gdGhlIHN0YXJ0IGFnYWluLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI3NldFlveW9cclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ZhbHVlPWZhbHNlXSAtIGB0cnVlYCBpZiB0aGUgYW5pbWF0aW9uIHNob3VsZCB5b3lvLCBgZmFsc2VgIHRvIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoaXMgQW5pbWF0aW9uIENvbXBvbmVudCBiZWxvbmdzIHRvLlxyXG4gICAgICovXHJcbiAgICBzZXRZb3lvOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsgdmFsdWUgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICB0aGlzLl95b3lvID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGlmIHRoZSBjdXJyZW50IEFuaW1hdGlvbiB3aWxsIHlveW8gd2hlbiBpdCByZWFjaGVzIHRoZSBlbmQuXHJcbiAgICAgKiBBIHlveW8naW5nIGFuaW1hdGlvbiB3aWxsIHBsYXkgdGhyb3VnaCBjb25zZWN1dGl2ZWx5LCBhbmQgdGhlbiByZXZlcnNlLXBsYXkgYmFjayB0byB0aGUgc3RhcnQgYWdhaW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb24jZ2V0WW95b1xyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBhbmltYXRpb24gaXMgc2V0IHRvIHlveW8sIGBmYWxzZWAgaWYgbm90LlxyXG4gICAgICovXHJcbiAgICBnZXRZb3lvOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl95b3lvO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3kgdGhpcyBBbmltYXRpb24gY29tcG9uZW50LlxyXG4gICAgICpcclxuICAgICAqIFVucmVnaXN0ZXJzIGV2ZW50IGxpc3RlbmVycyBhbmQgY2xlYW5zIHVwIGl0cyByZWZlcmVuY2VzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQW5pbWF0aW9uI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYW5pbWF0aW9uTWFuYWdlci5vZmYoRXZlbnRzLlJFTU9WRV9BTklNQVRJT04sIHRoaXMucmVtb3ZlLCB0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbmltYXRpb25NYW5hZ2VyID0gbnVsbDtcclxuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudEFuaW0gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBbmltYXRpb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Animation.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/components/BlendMode.js":
/*!*********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/components/BlendMode.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BlendModes = __webpack_require__(/*! ../../renderer/BlendModes */ \"./node_modules/phaser/src/renderer/BlendModes.js\");\r\n\r\n/**\r\n * Provides methods used for setting the blend mode of a Game Object.\r\n * Should be applied as a mixin and not used directly.\r\n *\r\n * @namespace Phaser.GameObjects.Components.BlendMode\r\n * @since 3.0.0\r\n */\r\n\r\nvar BlendMode = {\r\n\r\n /**\r\n * Private internal value. Holds the current blend mode.\r\n * \r\n * @name Phaser.GameObjects.Components.BlendMode#_blendMode\r\n * @type {integer}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n _blendMode: BlendModes.NORMAL,\r\n\r\n /**\r\n * Sets the Blend Mode being used by this Game Object.\r\n *\r\n * This can be a const, such as `Phaser.BlendModes.SCREEN`, or an integer, such as 4 (for Overlay)\r\n *\r\n * Under WebGL only the following Blend Modes are available:\r\n *\r\n * * ADD\r\n * * MULTIPLY\r\n * * SCREEN\r\n * * ERASE\r\n *\r\n * Canvas has more available depending on browser support.\r\n *\r\n * You can also create your own custom Blend Modes in WebGL.\r\n *\r\n * Blend modes have different effects under Canvas and WebGL, and from browser to browser, depending\r\n * on support. Blend Modes also cause a WebGL batch flush should it encounter a new blend mode. For these\r\n * reasons try to be careful about the construction of your Scene and the frequency of which blend modes\r\n * are used.\r\n *\r\n * @name Phaser.GameObjects.Components.BlendMode#blendMode\r\n * @type {(Phaser.BlendModes|string)}\r\n * @since 3.0.0\r\n */\r\n blendMode: {\r\n\r\n get: function ()\r\n {\r\n return this._blendMode;\r\n },\r\n\r\n set: function (value)\r\n {\r\n if (typeof value === 'string')\r\n {\r\n value = BlendModes[value];\r\n }\r\n\r\n value |= 0;\r\n\r\n if (value >= -1)\r\n {\r\n this._blendMode = value;\r\n }\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Sets the Blend Mode being used by this Game Object.\r\n *\r\n * This can be a const, such as `Phaser.BlendModes.SCREEN`, or an integer, such as 4 (for Overlay)\r\n *\r\n * Under WebGL only the following Blend Modes are available:\r\n *\r\n * * ADD\r\n * * MULTIPLY\r\n * * SCREEN\r\n * * ERASE (only works when rendering to a framebuffer, like a Render Texture)\r\n *\r\n * Canvas has more available depending on browser support.\r\n *\r\n * You can also create your own custom Blend Modes in WebGL.\r\n *\r\n * Blend modes have different effects under Canvas and WebGL, and from browser to browser, depending\r\n * on support. Blend Modes also cause a WebGL batch flush should it encounter a new blend mode. For these\r\n * reasons try to be careful about the construction of your Scene and the frequency in which blend modes\r\n * are used.\r\n *\r\n * @method Phaser.GameObjects.Components.BlendMode#setBlendMode\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.BlendModes)} value - The BlendMode value. Either a string or a CONST.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setBlendMode: function (value)\r\n {\r\n this.blendMode = value;\r\n\r\n return this;\r\n }\r\n\r\n};\r\n\r\nmodule.exports = BlendMode;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0JsZW5kTW9kZS5qcz9iM2U1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyxtRkFBMkI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDJCQUEyQjtBQUMxQztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0JsZW5kTW9kZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJsZW5kTW9kZXMgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlci9CbGVuZE1vZGVzJyk7XHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgbWV0aG9kcyB1c2VkIGZvciBzZXR0aW5nIHRoZSBibGVuZCBtb2RlIG9mIGEgR2FtZSBPYmplY3QuXHJcbiAqIFNob3VsZCBiZSBhcHBsaWVkIGFzIGEgbWl4aW4gYW5kIG5vdCB1c2VkIGRpcmVjdGx5LlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkJsZW5kTW9kZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcblxyXG52YXIgQmxlbmRNb2RlID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS4gSG9sZHMgdGhlIGN1cnJlbnQgYmxlbmQgbW9kZS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQmxlbmRNb2RlI19ibGVuZE1vZGVcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBfYmxlbmRNb2RlOiBCbGVuZE1vZGVzLk5PUk1BTCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIEJsZW5kIE1vZGUgYmVpbmcgdXNlZCBieSB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgY2FuIGJlIGEgY29uc3QsIHN1Y2ggYXMgYFBoYXNlci5CbGVuZE1vZGVzLlNDUkVFTmAsIG9yIGFuIGludGVnZXIsIHN1Y2ggYXMgNCAoZm9yIE92ZXJsYXkpXHJcbiAgICAgKlxyXG4gICAgICogVW5kZXIgV2ViR0wgb25seSB0aGUgZm9sbG93aW5nIEJsZW5kIE1vZGVzIGFyZSBhdmFpbGFibGU6XHJcbiAgICAgKlxyXG4gICAgICogKiBBRERcclxuICAgICAqICogTVVMVElQTFlcclxuICAgICAqICogU0NSRUVOXHJcbiAgICAgKiAqIEVSQVNFXHJcbiAgICAgKlxyXG4gICAgICogQ2FudmFzIGhhcyBtb3JlIGF2YWlsYWJsZSBkZXBlbmRpbmcgb24gYnJvd3NlciBzdXBwb3J0LlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gYWxzbyBjcmVhdGUgeW91ciBvd24gY3VzdG9tIEJsZW5kIE1vZGVzIGluIFdlYkdMLlxyXG4gICAgICpcclxuICAgICAqIEJsZW5kIG1vZGVzIGhhdmUgZGlmZmVyZW50IGVmZmVjdHMgdW5kZXIgQ2FudmFzIGFuZCBXZWJHTCwgYW5kIGZyb20gYnJvd3NlciB0byBicm93c2VyLCBkZXBlbmRpbmdcclxuICAgICAqIG9uIHN1cHBvcnQuIEJsZW5kIE1vZGVzIGFsc28gY2F1c2UgYSBXZWJHTCBiYXRjaCBmbHVzaCBzaG91bGQgaXQgZW5jb3VudGVyIGEgbmV3IGJsZW5kIG1vZGUuIEZvciB0aGVzZVxyXG4gICAgICogcmVhc29ucyB0cnkgdG8gYmUgY2FyZWZ1bCBhYm91dCB0aGUgY29uc3RydWN0aW9uIG9mIHlvdXIgU2NlbmUgYW5kIHRoZSBmcmVxdWVuY3kgb2Ygd2hpY2ggYmxlbmQgbW9kZXNcclxuICAgICAqIGFyZSB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkJsZW5kTW9kZSNibGVuZE1vZGVcclxuICAgICAqIEB0eXBlIHsoUGhhc2VyLkJsZW5kTW9kZXN8c3RyaW5nKX1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBibGVuZE1vZGU6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JsZW5kTW9kZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IEJsZW5kTW9kZXNbdmFsdWVdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YWx1ZSB8PSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKHZhbHVlID49IC0xKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ibGVuZE1vZGUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgQmxlbmQgTW9kZSBiZWluZyB1c2VkIGJ5IHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBjYW4gYmUgYSBjb25zdCwgc3VjaCBhcyBgUGhhc2VyLkJsZW5kTW9kZXMuU0NSRUVOYCwgb3IgYW4gaW50ZWdlciwgc3VjaCBhcyA0IChmb3IgT3ZlcmxheSlcclxuICAgICAqXHJcbiAgICAgKiBVbmRlciBXZWJHTCBvbmx5IHRoZSBmb2xsb3dpbmcgQmxlbmQgTW9kZXMgYXJlIGF2YWlsYWJsZTpcclxuICAgICAqXHJcbiAgICAgKiAqIEFERFxyXG4gICAgICogKiBNVUxUSVBMWVxyXG4gICAgICogKiBTQ1JFRU5cclxuICAgICAqICogRVJBU0UgKG9ubHkgd29ya3Mgd2hlbiByZW5kZXJpbmcgdG8gYSBmcmFtZWJ1ZmZlciwgbGlrZSBhIFJlbmRlciBUZXh0dXJlKVxyXG4gICAgICpcclxuICAgICAqIENhbnZhcyBoYXMgbW9yZSBhdmFpbGFibGUgZGVwZW5kaW5nIG9uIGJyb3dzZXIgc3VwcG9ydC5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIGFsc28gY3JlYXRlIHlvdXIgb3duIGN1c3RvbSBCbGVuZCBNb2RlcyBpbiBXZWJHTC5cclxuICAgICAqXHJcbiAgICAgKiBCbGVuZCBtb2RlcyBoYXZlIGRpZmZlcmVudCBlZmZlY3RzIHVuZGVyIENhbnZhcyBhbmQgV2ViR0wsIGFuZCBmcm9tIGJyb3dzZXIgdG8gYnJvd3NlciwgZGVwZW5kaW5nXHJcbiAgICAgKiBvbiBzdXBwb3J0LiBCbGVuZCBNb2RlcyBhbHNvIGNhdXNlIGEgV2ViR0wgYmF0Y2ggZmx1c2ggc2hvdWxkIGl0IGVuY291bnRlciBhIG5ldyBibGVuZCBtb2RlLiBGb3IgdGhlc2VcclxuICAgICAqIHJlYXNvbnMgdHJ5IHRvIGJlIGNhcmVmdWwgYWJvdXQgdGhlIGNvbnN0cnVjdGlvbiBvZiB5b3VyIFNjZW5lIGFuZCB0aGUgZnJlcXVlbmN5IGluIHdoaWNoIGJsZW5kIG1vZGVzXHJcbiAgICAgKiBhcmUgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkJsZW5kTW9kZSNzZXRCbGVuZE1vZGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuQmxlbmRNb2Rlcyl9IHZhbHVlIC0gVGhlIEJsZW5kTW9kZSB2YWx1ZS4gRWl0aGVyIGEgc3RyaW5nIG9yIGEgQ09OU1QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0QmxlbmRNb2RlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5ibGVuZE1vZGUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBCbGVuZE1vZGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/BlendMode.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/components/ComputedSize.js":
/*!************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/components/ComputedSize.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods used for calculating and setting the size of a non-Frame based Game Object.\r\n * Should be applied as a mixin and not used directly.\r\n * \r\n * @namespace Phaser.GameObjects.Components.ComputedSize\r\n * @since 3.0.0\r\n */\r\n\r\nvar ComputedSize = {\r\n\r\n /**\r\n * The native (un-scaled) width of this Game Object.\r\n * \r\n * Changing this value will not change the size that the Game Object is rendered in-game.\r\n * For that you need to either set the scale of the Game Object (`setScale`) or use\r\n * the `displayWidth` property.\r\n * \r\n * @name Phaser.GameObjects.Components.ComputedSize#width\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n width: 0,\r\n\r\n /**\r\n * The native (un-scaled) height of this Game Object.\r\n * \r\n * Changing this value will not change the size that the Game Object is rendered in-game.\r\n * For that you need to either set the scale of the Game Object (`setScale`) or use\r\n * the `displayHeight` property.\r\n * \r\n * @name Phaser.GameObjects.Components.ComputedSize#height\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n height: 0,\r\n\r\n /**\r\n * The displayed width of this Game Object.\r\n * \r\n * This value takes into account the scale factor.\r\n * \r\n * Setting this value will adjust the Game Object's scale property.\r\n * \r\n * @name Phaser.GameObjects.Components.ComputedSize#displayWidth\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n displayWidth: {\r\n\r\n get: function ()\r\n {\r\n return this.scaleX * this.width;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.scaleX = value / this.width;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The displayed height of this Game Object.\r\n * \r\n * This value takes into account the scale factor.\r\n * \r\n * Setting this value will adjust the Game Object's scale property.\r\n * \r\n * @name Phaser.GameObjects.Components.ComputedSize#displayHeight\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n displayHeight: {\r\n\r\n get: function ()\r\n {\r\n return this.scaleY * this.height;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.scaleY = value / this.height;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Sets the internal size of this Game Object, as used for frame or physics body creation.\r\n * \r\n * This will not change the size that the Game Object is rendered in-game.\r\n * For that you need to either set the scale of the Game Object (`setScale`) or call the\r\n * `setDisplaySize` method, which is the same thing as changing the scale but allows you\r\n * to do so by giving pixel values.\r\n * \r\n * If you have enabled this Game Object for input, changing the size will _not_ change the\r\n * size of the hit area. To do this you should adjust the `input.hitArea` object directly.\r\n * \r\n * @method Phaser.GameObjects.Components.ComputedSize#setSize\r\n * @since 3.4.0\r\n *\r\n * @param {number} width - The width of this Game Object.\r\n * @param {number} height - The height of this Game Object.\r\n * \r\n * @return {this} This Game Object instance.\r\n */\r\n setSize: function (width, height)\r\n {\r\n this.width = width;\r\n this.height = height;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the display size of this Game Object.\r\n * \r\n * Calling this will adjust the scale.\r\n * \r\n * @method Phaser.GameObjects.Components.ComputedSize#setDisplaySize\r\n * @since 3.4.0\r\n *\r\n * @param {number} width - The width of this Game Object.\r\n * @param {number} height - The height of this Game Object.\r\n * \r\n * @return {this} This Game Object instance.\r\n */\r\n setDisplaySize: function (width, height)\r\n {\r\n this.displayWidth = width;\r\n this.displayHeight = height;\r\n\r\n return this;\r\n }\r\n\r\n};\r\n\r\nmodule.exports = ComputedSize;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0NvbXB1dGVkU2l6ZS5qcz8wZmU4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0NvbXB1dGVkU2l6ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgdXNlZCBmb3IgY2FsY3VsYXRpbmcgYW5kIHNldHRpbmcgdGhlIHNpemUgb2YgYSBub24tRnJhbWUgYmFzZWQgR2FtZSBPYmplY3QuXHJcbiAqIFNob3VsZCBiZSBhcHBsaWVkIGFzIGEgbWl4aW4gYW5kIG5vdCB1c2VkIGRpcmVjdGx5LlxyXG4gKiBcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5Db21wdXRlZFNpemVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5cclxudmFyIENvbXB1dGVkU2l6ZSA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBuYXRpdmUgKHVuLXNjYWxlZCkgd2lkdGggb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogQ2hhbmdpbmcgdGhpcyB2YWx1ZSB3aWxsIG5vdCBjaGFuZ2UgdGhlIHNpemUgdGhhdCB0aGUgR2FtZSBPYmplY3QgaXMgcmVuZGVyZWQgaW4tZ2FtZS5cclxuICAgICAqIEZvciB0aGF0IHlvdSBuZWVkIHRvIGVpdGhlciBzZXQgdGhlIHNjYWxlIG9mIHRoZSBHYW1lIE9iamVjdCAoYHNldFNjYWxlYCkgb3IgdXNlXHJcbiAgICAgKiB0aGUgYGRpc3BsYXlXaWR0aGAgcHJvcGVydHkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkNvbXB1dGVkU2l6ZSN3aWR0aFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB3aWR0aDogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBuYXRpdmUgKHVuLXNjYWxlZCkgaGVpZ2h0IG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIENoYW5naW5nIHRoaXMgdmFsdWUgd2lsbCBub3QgY2hhbmdlIHRoZSBzaXplIHRoYXQgdGhlIEdhbWUgT2JqZWN0IGlzIHJlbmRlcmVkIGluLWdhbWUuXHJcbiAgICAgKiBGb3IgdGhhdCB5b3UgbmVlZCB0byBlaXRoZXIgc2V0IHRoZSBzY2FsZSBvZiB0aGUgR2FtZSBPYmplY3QgKGBzZXRTY2FsZWApIG9yIHVzZVxyXG4gICAgICogdGhlIGBkaXNwbGF5SGVpZ2h0YCBwcm9wZXJ0eS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQ29tcHV0ZWRTaXplI2hlaWdodFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBoZWlnaHQ6IDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZGlzcGxheWVkIHdpZHRoIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgdmFsdWUgdGFrZXMgaW50byBhY2NvdW50IHRoZSBzY2FsZSBmYWN0b3IuXHJcbiAgICAgKiBcclxuICAgICAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGFkanVzdCB0aGUgR2FtZSBPYmplY3QncyBzY2FsZSBwcm9wZXJ0eS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQ29tcHV0ZWRTaXplI2Rpc3BsYXlXaWR0aFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkaXNwbGF5V2lkdGg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGVYICogdGhpcy53aWR0aDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NhbGVYID0gdmFsdWUgLyB0aGlzLndpZHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRpc3BsYXllZCBoZWlnaHQgb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyB2YWx1ZSB0YWtlcyBpbnRvIGFjY291bnQgdGhlIHNjYWxlIGZhY3Rvci5cclxuICAgICAqIFxyXG4gICAgICogU2V0dGluZyB0aGlzIHZhbHVlIHdpbGwgYWRqdXN0IHRoZSBHYW1lIE9iamVjdCdzIHNjYWxlIHByb3BlcnR5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5Db21wdXRlZFNpemUjZGlzcGxheUhlaWdodFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkaXNwbGF5SGVpZ2h0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlWSAqIHRoaXMuaGVpZ2h0O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zY2FsZVkgPSB2YWx1ZSAvIHRoaXMuaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaW50ZXJuYWwgc2l6ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LCBhcyB1c2VkIGZvciBmcmFtZSBvciBwaHlzaWNzIGJvZHkgY3JlYXRpb24uXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgd2lsbCBub3QgY2hhbmdlIHRoZSBzaXplIHRoYXQgdGhlIEdhbWUgT2JqZWN0IGlzIHJlbmRlcmVkIGluLWdhbWUuXHJcbiAgICAgKiBGb3IgdGhhdCB5b3UgbmVlZCB0byBlaXRoZXIgc2V0IHRoZSBzY2FsZSBvZiB0aGUgR2FtZSBPYmplY3QgKGBzZXRTY2FsZWApIG9yIGNhbGwgdGhlXHJcbiAgICAgKiBgc2V0RGlzcGxheVNpemVgIG1ldGhvZCwgd2hpY2ggaXMgdGhlIHNhbWUgdGhpbmcgYXMgY2hhbmdpbmcgdGhlIHNjYWxlIGJ1dCBhbGxvd3MgeW91XHJcbiAgICAgKiB0byBkbyBzbyBieSBnaXZpbmcgcGl4ZWwgdmFsdWVzLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB5b3UgaGF2ZSBlbmFibGVkIHRoaXMgR2FtZSBPYmplY3QgZm9yIGlucHV0LCBjaGFuZ2luZyB0aGUgc2l6ZSB3aWxsIF9ub3RfIGNoYW5nZSB0aGVcclxuICAgICAqIHNpemUgb2YgdGhlIGhpdCBhcmVhLiBUbyBkbyB0aGlzIHlvdSBzaG91bGQgYWRqdXN0IHRoZSBgaW5wdXQuaGl0QXJlYWAgb2JqZWN0IGRpcmVjdGx5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkNvbXB1dGVkU2l6ZSNzZXRTaXplXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFNpemU6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgZGlzcGxheSBzaXplIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIENhbGxpbmcgdGhpcyB3aWxsIGFkanVzdCB0aGUgc2NhbGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQ29tcHV0ZWRTaXplI3NldERpc3BsYXlTaXplXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldERpc3BsYXlTaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlXaWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb21wdXRlZFNpemU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/ComputedSize.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/components/Crop.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/components/Crop.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods used for getting and setting the texture of a Game Object.\r\n *\r\n * @namespace Phaser.GameObjects.Components.Crop\r\n * @since 3.12.0\r\n */\r\n\r\nvar Crop = {\r\n\r\n /**\r\n * The Texture this Game Object is using to render with.\r\n *\r\n * @name Phaser.GameObjects.Components.Crop#texture\r\n * @type {Phaser.Textures.Texture|Phaser.Textures.CanvasTexture}\r\n * @since 3.0.0\r\n */\r\n texture: null,\r\n\r\n /**\r\n * The Texture Frame this Game Object is using to render with.\r\n *\r\n * @name Phaser.GameObjects.Components.Crop#frame\r\n * @type {Phaser.Textures.Frame}\r\n * @since 3.0.0\r\n */\r\n frame: null,\r\n\r\n /**\r\n * A boolean flag indicating if this Game Object is being cropped or not.\r\n * You can toggle this at any time after `setCrop` has been called, to turn cropping on or off.\r\n * Equally, calling `setCrop` with no arguments will reset the crop and disable it.\r\n *\r\n * @name Phaser.GameObjects.Components.Crop#isCropped\r\n * @type {boolean}\r\n * @since 3.11.0\r\n */\r\n isCropped: false,\r\n\r\n /**\r\n * Applies a crop to a texture based Game Object, such as a Sprite or Image.\r\n * \r\n * The crop is a rectangle that limits the area of the texture frame that is visible during rendering.\r\n * \r\n * Cropping a Game Object does not change its size, dimensions, physics body or hit area, it just\r\n * changes what is shown when rendered.\r\n * \r\n * The crop coordinates are relative to the texture frame, not the Game Object, meaning 0 x 0 is the top-left.\r\n * \r\n * Therefore, if you had a Game Object that had an 800x600 sized texture, and you wanted to show only the left\r\n * half of it, you could call `setCrop(0, 0, 400, 600)`.\r\n * \r\n * It is also scaled to match the Game Object scale automatically. Therefore a crop rect of 100x50 would crop\r\n * an area of 200x100 when applied to a Game Object that had a scale factor of 2.\r\n * \r\n * You can either pass in numeric values directly, or you can provide a single Rectangle object as the first argument.\r\n * \r\n * Call this method with no arguments at all to reset the crop, or toggle the property `isCropped` to `false`.\r\n * \r\n * You should do this if the crop rectangle becomes the same size as the frame itself, as it will allow\r\n * the renderer to skip several internal calculations.\r\n *\r\n * @method Phaser.GameObjects.Components.Crop#setCrop\r\n * @since 3.11.0\r\n *\r\n * @param {(number|Phaser.Geom.Rectangle)} [x] - The x coordinate to start the crop from. Or a Phaser.Geom.Rectangle object, in which case the rest of the arguments are ignored.\r\n * @param {number} [y] - The y coordinate to start the crop from.\r\n * @param {number} [width] - The width of the crop rectangle in pixels.\r\n * @param {number} [height] - The height of the crop rectangle in pixels.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setCrop: function (x, y, width, height)\r\n {\r\n if (x === undefined)\r\n {\r\n this.isCropped = false;\r\n }\r\n else if (this.frame)\r\n {\r\n if (typeof x === 'number')\r\n {\r\n this.frame.setCropUVs(this._crop, x, y, width, height, this.flipX, this.flipY);\r\n }\r\n else\r\n {\r\n var rect = x;\r\n\r\n this.frame.setCropUVs(this._crop, rect.x, rect.y, rect.width, rect.height, this.flipX, this.flipY);\r\n }\r\n\r\n this.isCropped = true;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Internal method that returns a blank, well-formed crop object for use by a Game Object.\r\n *\r\n * @method Phaser.GameObjects.Components.Crop#resetCropObject\r\n * @private\r\n * @since 3.12.0\r\n * \r\n * @return {object} The crop object.\r\n */\r\n resetCropObject: function ()\r\n {\r\n return { u0: 0, v0: 0, u1: 0, v1: 0, width: 0, height: 0, x: 0, y: 0, flipX: false, flipY: false, cx: 0, cy: 0, cw: 0, ch: 0 };\r\n }\r\n\r\n};\r\n\r\nmodule.exports = Crop;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0Nyb3AuanM/YTBlZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwrQkFBK0I7QUFDOUMsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvY29tcG9uZW50cy9Dcm9wLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgbWV0aG9kcyB1c2VkIGZvciBnZXR0aW5nIGFuZCBzZXR0aW5nIHRoZSB0ZXh0dXJlIG9mIGEgR2FtZSBPYmplY3QuXHJcbiAqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQ3JvcFxyXG4gKiBAc2luY2UgMy4xMi4wXHJcbiAqL1xyXG5cclxudmFyIENyb3AgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHVzaW5nIHRvIHJlbmRlciB3aXRoLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkNyb3AjdGV4dHVyZVxyXG4gICAgICogQHR5cGUge1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlfFBoYXNlci5UZXh0dXJlcy5DYW52YXNUZXh0dXJlfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHRleHR1cmU6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgVGV4dHVyZSBGcmFtZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHVzaW5nIHRvIHJlbmRlciB3aXRoLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkNyb3AjZnJhbWVcclxuICAgICAqIEB0eXBlIHtQaGFzZXIuVGV4dHVyZXMuRnJhbWV9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZnJhbWU6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGJvb2xlYW4gZmxhZyBpbmRpY2F0aW5nIGlmIHRoaXMgR2FtZSBPYmplY3QgaXMgYmVpbmcgY3JvcHBlZCBvciBub3QuXHJcbiAgICAgKiBZb3UgY2FuIHRvZ2dsZSB0aGlzIGF0IGFueSB0aW1lIGFmdGVyIGBzZXRDcm9wYCBoYXMgYmVlbiBjYWxsZWQsIHRvIHR1cm4gY3JvcHBpbmcgb24gb3Igb2ZmLlxyXG4gICAgICogRXF1YWxseSwgY2FsbGluZyBgc2V0Q3JvcGAgd2l0aCBubyBhcmd1bWVudHMgd2lsbCByZXNldCB0aGUgY3JvcCBhbmQgZGlzYWJsZSBpdC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5Dcm9wI2lzQ3JvcHBlZFxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKi9cclxuICAgIGlzQ3JvcHBlZDogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBsaWVzIGEgY3JvcCB0byBhIHRleHR1cmUgYmFzZWQgR2FtZSBPYmplY3QsIHN1Y2ggYXMgYSBTcHJpdGUgb3IgSW1hZ2UuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBjcm9wIGlzIGEgcmVjdGFuZ2xlIHRoYXQgbGltaXRzIHRoZSBhcmVhIG9mIHRoZSB0ZXh0dXJlIGZyYW1lIHRoYXQgaXMgdmlzaWJsZSBkdXJpbmcgcmVuZGVyaW5nLlxyXG4gICAgICogXHJcbiAgICAgKiBDcm9wcGluZyBhIEdhbWUgT2JqZWN0IGRvZXMgbm90IGNoYW5nZSBpdHMgc2l6ZSwgZGltZW5zaW9ucywgcGh5c2ljcyBib2R5IG9yIGhpdCBhcmVhLCBpdCBqdXN0XHJcbiAgICAgKiBjaGFuZ2VzIHdoYXQgaXMgc2hvd24gd2hlbiByZW5kZXJlZC5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGNyb3AgY29vcmRpbmF0ZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSB0ZXh0dXJlIGZyYW1lLCBub3QgdGhlIEdhbWUgT2JqZWN0LCBtZWFuaW5nIDAgeCAwIGlzIHRoZSB0b3AtbGVmdC5cclxuICAgICAqIFxyXG4gICAgICogVGhlcmVmb3JlLCBpZiB5b3UgaGFkIGEgR2FtZSBPYmplY3QgdGhhdCBoYWQgYW4gODAweDYwMCBzaXplZCB0ZXh0dXJlLCBhbmQgeW91IHdhbnRlZCB0byBzaG93IG9ubHkgdGhlIGxlZnRcclxuICAgICAqIGhhbGYgb2YgaXQsIHlvdSBjb3VsZCBjYWxsIGBzZXRDcm9wKDAsIDAsIDQwMCwgNjAwKWAuXHJcbiAgICAgKiBcclxuICAgICAqIEl0IGlzIGFsc28gc2NhbGVkIHRvIG1hdGNoIHRoZSBHYW1lIE9iamVjdCBzY2FsZSBhdXRvbWF0aWNhbGx5LiBUaGVyZWZvcmUgYSBjcm9wIHJlY3Qgb2YgMTAweDUwIHdvdWxkIGNyb3BcclxuICAgICAqIGFuIGFyZWEgb2YgMjAweDEwMCB3aGVuIGFwcGxpZWQgdG8gYSBHYW1lIE9iamVjdCB0aGF0IGhhZCBhIHNjYWxlIGZhY3RvciBvZiAyLlxyXG4gICAgICogXHJcbiAgICAgKiBZb3UgY2FuIGVpdGhlciBwYXNzIGluIG51bWVyaWMgdmFsdWVzIGRpcmVjdGx5LCBvciB5b3UgY2FuIHByb3ZpZGUgYSBzaW5nbGUgUmVjdGFuZ2xlIG9iamVjdCBhcyB0aGUgZmlyc3QgYXJndW1lbnQuXHJcbiAgICAgKiBcclxuICAgICAqIENhbGwgdGhpcyBtZXRob2Qgd2l0aCBubyBhcmd1bWVudHMgYXQgYWxsIHRvIHJlc2V0IHRoZSBjcm9wLCBvciB0b2dnbGUgdGhlIHByb3BlcnR5IGBpc0Nyb3BwZWRgIHRvIGBmYWxzZWAuXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBzaG91bGQgZG8gdGhpcyBpZiB0aGUgY3JvcCByZWN0YW5nbGUgYmVjb21lcyB0aGUgc2FtZSBzaXplIGFzIHRoZSBmcmFtZSBpdHNlbGYsIGFzIGl0IHdpbGwgYWxsb3dcclxuICAgICAqIHRoZSByZW5kZXJlciB0byBza2lwIHNldmVyYWwgaW50ZXJuYWwgY2FsY3VsYXRpb25zLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQ3JvcCNzZXRDcm9wXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsobnVtYmVyfFBoYXNlci5HZW9tLlJlY3RhbmdsZSl9IFt4XSAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gc3RhcnQgdGhlIGNyb3AgZnJvbS4gT3IgYSBQaGFzZXIuR2VvbS5SZWN0YW5nbGUgb2JqZWN0LCBpbiB3aGljaCBjYXNlIHRoZSByZXN0IG9mIHRoZSBhcmd1bWVudHMgYXJlIGlnbm9yZWQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ldIC0gVGhlIHkgY29vcmRpbmF0ZSB0byBzdGFydCB0aGUgY3JvcCBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3aWR0aF0gLSBUaGUgd2lkdGggb2YgdGhlIGNyb3AgcmVjdGFuZ2xlIGluIHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0XSAtIFRoZSBoZWlnaHQgb2YgdGhlIGNyb3AgcmVjdGFuZ2xlIGluIHBpeGVscy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRDcm9wOiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5pc0Nyb3BwZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5mcmFtZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUuc2V0Q3JvcFVWcyh0aGlzLl9jcm9wLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0aGlzLmZsaXBYLCB0aGlzLmZsaXBZKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciByZWN0ID0geDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyYW1lLnNldENyb3BVVnModGhpcy5fY3JvcCwgcmVjdC54LCByZWN0LnksIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0LCB0aGlzLmZsaXBYLCB0aGlzLmZsaXBZKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Nyb3BwZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRoYXQgcmV0dXJucyBhIGJsYW5rLCB3ZWxsLWZvcm1lZCBjcm9wIG9iamVjdCBmb3IgdXNlIGJ5IGEgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5Dcm9wI3Jlc2V0Q3JvcE9iamVjdFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7b2JqZWN0fSBUaGUgY3JvcCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0Q3JvcE9iamVjdDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4geyB1MDogMCwgdjA6IDAsIHUxOiAwLCB2MTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCwgeDogMCwgeTogMCwgZmxpcFg6IGZhbHNlLCBmbGlwWTogZmFsc2UsIGN4OiAwLCBjeTogMCwgY3c6IDAsIGNoOiAwIH07XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDcm9wO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Crop.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/components/Depth.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/components/Depth.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods used for setting the depth of a Game Object.\r\n * Should be applied as a mixin and not used directly.\r\n * \r\n * @namespace Phaser.GameObjects.Components.Depth\r\n * @since 3.0.0\r\n */\r\n\r\nvar Depth = {\r\n\r\n /**\r\n * Private internal value. Holds the depth of the Game Object.\r\n * \r\n * @name Phaser.GameObjects.Components.Depth#_depth\r\n * @type {integer}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n _depth: 0,\r\n\r\n /**\r\n * The depth of this Game Object within the Scene.\r\n * \r\n * The depth is also known as the 'z-index' in some environments, and allows you to change the rendering order\r\n * of Game Objects, without actually moving their position in the display list.\r\n *\r\n * The depth starts from zero (the default value) and increases from that point. A Game Object with a higher depth\r\n * value will always render in front of one with a lower value.\r\n *\r\n * Setting the depth will queue a depth sort event within the Scene.\r\n * \r\n * @name Phaser.GameObjects.Components.Depth#depth\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n depth: {\r\n\r\n get: function ()\r\n {\r\n return this._depth;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.scene.sys.queueDepthSort();\r\n this._depth = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The depth of this Game Object within the Scene.\r\n * \r\n * The depth is also known as the 'z-index' in some environments, and allows you to change the rendering order\r\n * of Game Objects, without actually moving their position in the display list.\r\n *\r\n * The depth starts from zero (the default value) and increases from that point. A Game Object with a higher depth\r\n * value will always render in front of one with a lower value.\r\n *\r\n * Setting the depth will queue a depth sort event within the Scene.\r\n * \r\n * @method Phaser.GameObjects.Components.Depth#setDepth\r\n * @since 3.0.0\r\n *\r\n * @param {integer} value - The depth of this Game Object.\r\n * \r\n * @return {this} This Game Object instance.\r\n */\r\n setDepth: function (value)\r\n {\r\n if (value === undefined) { value = 0; }\r\n\r\n this.depth = value;\r\n\r\n return this;\r\n }\r\n\r\n};\r\n\r\nmodule.exports = Depth;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0RlcHRoLmpzP2IwYTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLFdBQVc7O0FBRTdDOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0RlcHRoLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgbWV0aG9kcyB1c2VkIGZvciBzZXR0aW5nIHRoZSBkZXB0aCBvZiBhIEdhbWUgT2JqZWN0LlxyXG4gKiBTaG91bGQgYmUgYXBwbGllZCBhcyBhIG1peGluIGFuZCBub3QgdXNlZCBkaXJlY3RseS5cclxuICogXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGhcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5cclxudmFyIERlcHRoID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS4gSG9sZHMgdGhlIGRlcHRoIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGgjX2RlcHRoXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgX2RlcHRoOiAwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRlcHRoIG9mIHRoaXMgR2FtZSBPYmplY3Qgd2l0aGluIHRoZSBTY2VuZS5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGRlcHRoIGlzIGFsc28ga25vd24gYXMgdGhlICd6LWluZGV4JyBpbiBzb21lIGVudmlyb25tZW50cywgYW5kIGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSByZW5kZXJpbmcgb3JkZXJcclxuICAgICAqIG9mIEdhbWUgT2JqZWN0cywgd2l0aG91dCBhY3R1YWxseSBtb3ZpbmcgdGhlaXIgcG9zaXRpb24gaW4gdGhlIGRpc3BsYXkgbGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgZGVwdGggc3RhcnRzIGZyb20gemVybyAodGhlIGRlZmF1bHQgdmFsdWUpIGFuZCBpbmNyZWFzZXMgZnJvbSB0aGF0IHBvaW50LiBBIEdhbWUgT2JqZWN0IHdpdGggYSBoaWdoZXIgZGVwdGhcclxuICAgICAqIHZhbHVlIHdpbGwgYWx3YXlzIHJlbmRlciBpbiBmcm9udCBvZiBvbmUgd2l0aCBhIGxvd2VyIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIFNldHRpbmcgdGhlIGRlcHRoIHdpbGwgcXVldWUgYSBkZXB0aCBzb3J0IGV2ZW50IHdpdGhpbiB0aGUgU2NlbmUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkRlcHRoI2RlcHRoXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlcHRoOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXB0aDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuc3lzLnF1ZXVlRGVwdGhTb3J0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlcHRoID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZGVwdGggb2YgdGhpcyBHYW1lIE9iamVjdCB3aXRoaW4gdGhlIFNjZW5lLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZGVwdGggaXMgYWxzbyBrbm93biBhcyB0aGUgJ3otaW5kZXgnIGluIHNvbWUgZW52aXJvbm1lbnRzLCBhbmQgYWxsb3dzIHlvdSB0byBjaGFuZ2UgdGhlIHJlbmRlcmluZyBvcmRlclxyXG4gICAgICogb2YgR2FtZSBPYmplY3RzLCB3aXRob3V0IGFjdHVhbGx5IG1vdmluZyB0aGVpciBwb3NpdGlvbiBpbiB0aGUgZGlzcGxheSBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIFRoZSBkZXB0aCBzdGFydHMgZnJvbSB6ZXJvICh0aGUgZGVmYXVsdCB2YWx1ZSkgYW5kIGluY3JlYXNlcyBmcm9tIHRoYXQgcG9pbnQuIEEgR2FtZSBPYmplY3Qgd2l0aCBhIGhpZ2hlciBkZXB0aFxyXG4gICAgICogdmFsdWUgd2lsbCBhbHdheXMgcmVuZGVyIGluIGZyb250IG9mIG9uZSB3aXRoIGEgbG93ZXIgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogU2V0dGluZyB0aGUgZGVwdGggd2lsbCBxdWV1ZSBhIGRlcHRoIHNvcnQgZXZlbnQgd2l0aGluIHRoZSBTY2VuZS5cclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5EZXB0aCNzZXREZXB0aFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB2YWx1ZSAtIFRoZSBkZXB0aCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXREZXB0aDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7IHZhbHVlID0gMDsgfVxyXG5cclxuICAgICAgICB0aGlzLmRlcHRoID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRGVwdGg7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Depth.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/components/Flip.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/components/Flip.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods used for visually flipping a Game Object.\r\n * Should be applied as a mixin and not used directly.\r\n * \r\n * @namespace Phaser.GameObjects.Components.Flip\r\n * @since 3.0.0\r\n */\r\n\r\nvar Flip = {\r\n\r\n /**\r\n * The horizontally flipped state of the Game Object.\r\n * \r\n * A Game Object that is flipped horizontally will render inversed on the horizontal axis.\r\n * Flipping always takes place from the middle of the texture and does not impact the scale value.\r\n * If this Game Object has a physics body, it will not change the body. This is a rendering toggle only.\r\n * \r\n * @name Phaser.GameObjects.Components.Flip#flipX\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n flipX: false,\r\n\r\n /**\r\n * The vertically flipped state of the Game Object.\r\n * \r\n * A Game Object that is flipped vertically will render inversed on the vertical axis (i.e. upside down)\r\n * Flipping always takes place from the middle of the texture and does not impact the scale value.\r\n * If this Game Object has a physics body, it will not change the body. This is a rendering toggle only.\r\n * \r\n * @name Phaser.GameObjects.Components.Flip#flipY\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n flipY: false,\r\n\r\n /**\r\n * Toggles the horizontal flipped state of this Game Object.\r\n * \r\n * A Game Object that is flipped horizontally will render inversed on the horizontal axis.\r\n * Flipping always takes place from the middle of the texture and does not impact the scale value.\r\n * If this Game Object has a physics body, it will not change the body. This is a rendering toggle only.\r\n * \r\n * @method Phaser.GameObjects.Components.Flip#toggleFlipX\r\n * @since 3.0.0\r\n * \r\n * @return {this} This Game Object instance.\r\n */\r\n toggleFlipX: function ()\r\n {\r\n this.flipX = !this.flipX;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Toggles the vertical flipped state of this Game Object.\r\n * \r\n * @method Phaser.GameObjects.Components.Flip#toggleFlipY\r\n * @since 3.0.0\r\n * \r\n * @return {this} This Game Object instance.\r\n */\r\n toggleFlipY: function ()\r\n {\r\n this.flipY = !this.flipY;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the horizontal flipped state of this Game Object.\r\n * \r\n * A Game Object that is flipped horizontally will render inversed on the horizontal axis.\r\n * Flipping always takes place from the middle of the texture and does not impact the scale value.\r\n * If this Game Object has a physics body, it will not change the body. This is a rendering toggle only.\r\n * \r\n * @method Phaser.GameObjects.Components.Flip#setFlipX\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} value - The flipped state. `false` for no flip, or `true` to be flipped.\r\n * \r\n * @return {this} This Game Object instance.\r\n */\r\n setFlipX: function (value)\r\n {\r\n this.flipX = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the vertical flipped state of this Game Object.\r\n * \r\n * @method Phaser.GameObjects.Components.Flip#setFlipY\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} value - The flipped state. `false` for no flip, or `true` to be flipped.\r\n * \r\n * @return {this} This Game Object instance.\r\n */\r\n setFlipY: function (value)\r\n {\r\n this.flipY = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the horizontal and vertical flipped state of this Game Object.\r\n * \r\n * A Game Object that is flipped will render inversed on the flipped axis.\r\n * Flipping always takes place from the middle of the texture and does not impact the scale value.\r\n * If this Game Object has a physics body, it will not change the body. This is a rendering toggle only.\r\n * \r\n * @method Phaser.GameObjects.Components.Flip#setFlip\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} x - The horizontal flipped state. `false` for no flip, or `true` to be flipped.\r\n * @param {boolean} y - The horizontal flipped state. `false` for no flip, or `true` to be flipped.\r\n * \r\n * @return {this} This Game Object instance.\r\n */\r\n setFlip: function (x, y)\r\n {\r\n this.flipX = x;\r\n this.flipY = y;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Resets the horizontal and vertical flipped state of this Game Object back to their default un-flipped state.\r\n * \r\n * @method Phaser.GameObjects.Components.Flip#resetFlip\r\n * @since 3.0.0\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n resetFlip: function ()\r\n {\r\n this.flipX = false;\r\n this.flipY = false;\r\n\r\n return this;\r\n }\r\n\r\n};\r\n\r\nmodule.exports = Flip;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0ZsaXAuanM/ZmM4NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvY29tcG9uZW50cy9GbGlwLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgbWV0aG9kcyB1c2VkIGZvciB2aXN1YWxseSBmbGlwcGluZyBhIEdhbWUgT2JqZWN0LlxyXG4gKiBTaG91bGQgYmUgYXBwbGllZCBhcyBhIG1peGluIGFuZCBub3QgdXNlZCBkaXJlY3RseS5cclxuICogXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRmxpcFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcblxyXG52YXIgRmxpcCA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBob3Jpem9udGFsbHkgZmxpcHBlZCBzdGF0ZSBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIEEgR2FtZSBPYmplY3QgdGhhdCBpcyBmbGlwcGVkIGhvcml6b250YWxseSB3aWxsIHJlbmRlciBpbnZlcnNlZCBvbiB0aGUgaG9yaXpvbnRhbCBheGlzLlxyXG4gICAgICogRmxpcHBpbmcgYWx3YXlzIHRha2VzIHBsYWNlIGZyb20gdGhlIG1pZGRsZSBvZiB0aGUgdGV4dHVyZSBhbmQgZG9lcyBub3QgaW1wYWN0IHRoZSBzY2FsZSB2YWx1ZS5cclxuICAgICAqIElmIHRoaXMgR2FtZSBPYmplY3QgaGFzIGEgcGh5c2ljcyBib2R5LCBpdCB3aWxsIG5vdCBjaGFuZ2UgdGhlIGJvZHkuIFRoaXMgaXMgYSByZW5kZXJpbmcgdG9nZ2xlIG9ubHkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkZsaXAjZmxpcFhcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBmbGlwWDogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdmVydGljYWxseSBmbGlwcGVkIHN0YXRlIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogQSBHYW1lIE9iamVjdCB0aGF0IGlzIGZsaXBwZWQgdmVydGljYWxseSB3aWxsIHJlbmRlciBpbnZlcnNlZCBvbiB0aGUgdmVydGljYWwgYXhpcyAoaS5lLiB1cHNpZGUgZG93bilcclxuICAgICAqIEZsaXBwaW5nIGFsd2F5cyB0YWtlcyBwbGFjZSBmcm9tIHRoZSBtaWRkbGUgb2YgdGhlIHRleHR1cmUgYW5kIGRvZXMgbm90IGltcGFjdCB0aGUgc2NhbGUgdmFsdWUuXHJcbiAgICAgKiBJZiB0aGlzIEdhbWUgT2JqZWN0IGhhcyBhIHBoeXNpY3MgYm9keSwgaXQgd2lsbCBub3QgY2hhbmdlIHRoZSBib2R5LiBUaGlzIGlzIGEgcmVuZGVyaW5nIHRvZ2dsZSBvbmx5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5GbGlwI2ZsaXBZXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZmxpcFk6IGZhbHNlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVG9nZ2xlcyB0aGUgaG9yaXpvbnRhbCBmbGlwcGVkIHN0YXRlIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIEEgR2FtZSBPYmplY3QgdGhhdCBpcyBmbGlwcGVkIGhvcml6b250YWxseSB3aWxsIHJlbmRlciBpbnZlcnNlZCBvbiB0aGUgaG9yaXpvbnRhbCBheGlzLlxyXG4gICAgICogRmxpcHBpbmcgYWx3YXlzIHRha2VzIHBsYWNlIGZyb20gdGhlIG1pZGRsZSBvZiB0aGUgdGV4dHVyZSBhbmQgZG9lcyBub3QgaW1wYWN0IHRoZSBzY2FsZSB2YWx1ZS5cclxuICAgICAqIElmIHRoaXMgR2FtZSBPYmplY3QgaGFzIGEgcGh5c2ljcyBib2R5LCBpdCB3aWxsIG5vdCBjaGFuZ2UgdGhlIGJvZHkuIFRoaXMgaXMgYSByZW5kZXJpbmcgdG9nZ2xlIG9ubHkuXHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRmxpcCN0b2dnbGVGbGlwWFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHRvZ2dsZUZsaXBYOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZmxpcFggPSAhdGhpcy5mbGlwWDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVG9nZ2xlcyB0aGUgdmVydGljYWwgZmxpcHBlZCBzdGF0ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkZsaXAjdG9nZ2xlRmxpcFlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICB0b2dnbGVGbGlwWTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmZsaXBZID0gIXRoaXMuZmxpcFk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGhvcml6b250YWwgZmxpcHBlZCBzdGF0ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBBIEdhbWUgT2JqZWN0IHRoYXQgaXMgZmxpcHBlZCBob3Jpem9udGFsbHkgd2lsbCByZW5kZXIgaW52ZXJzZWQgb24gdGhlIGhvcml6b250YWwgYXhpcy5cclxuICAgICAqIEZsaXBwaW5nIGFsd2F5cyB0YWtlcyBwbGFjZSBmcm9tIHRoZSBtaWRkbGUgb2YgdGhlIHRleHR1cmUgYW5kIGRvZXMgbm90IGltcGFjdCB0aGUgc2NhbGUgdmFsdWUuXHJcbiAgICAgKiBJZiB0aGlzIEdhbWUgT2JqZWN0IGhhcyBhIHBoeXNpY3MgYm9keSwgaXQgd2lsbCBub3QgY2hhbmdlIHRoZSBib2R5LiBUaGlzIGlzIGEgcmVuZGVyaW5nIHRvZ2dsZSBvbmx5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkZsaXAjc2V0RmxpcFhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBUaGUgZmxpcHBlZCBzdGF0ZS4gYGZhbHNlYCBmb3Igbm8gZmxpcCwgb3IgYHRydWVgIHRvIGJlIGZsaXBwZWQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEZsaXBYOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5mbGlwWCA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB2ZXJ0aWNhbCBmbGlwcGVkIHN0YXRlIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRmxpcCNzZXRGbGlwWVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB2YWx1ZSAtIFRoZSBmbGlwcGVkIHN0YXRlLiBgZmFsc2VgIGZvciBubyBmbGlwLCBvciBgdHJ1ZWAgdG8gYmUgZmxpcHBlZC5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0RmxpcFk6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmZsaXBZID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGZsaXBwZWQgc3RhdGUgb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogQSBHYW1lIE9iamVjdCB0aGF0IGlzIGZsaXBwZWQgd2lsbCByZW5kZXIgaW52ZXJzZWQgb24gdGhlIGZsaXBwZWQgYXhpcy5cclxuICAgICAqIEZsaXBwaW5nIGFsd2F5cyB0YWtlcyBwbGFjZSBmcm9tIHRoZSBtaWRkbGUgb2YgdGhlIHRleHR1cmUgYW5kIGRvZXMgbm90IGltcGFjdCB0aGUgc2NhbGUgdmFsdWUuXHJcbiAgICAgKiBJZiB0aGlzIEdhbWUgT2JqZWN0IGhhcyBhIHBoeXNpY3MgYm9keSwgaXQgd2lsbCBub3QgY2hhbmdlIHRoZSBib2R5LiBUaGlzIGlzIGEgcmVuZGVyaW5nIHRvZ2dsZSBvbmx5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkZsaXAjc2V0RmxpcFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB4IC0gVGhlIGhvcml6b250YWwgZmxpcHBlZCBzdGF0ZS4gYGZhbHNlYCBmb3Igbm8gZmxpcCwgb3IgYHRydWVgIHRvIGJlIGZsaXBwZWQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHkgLSBUaGUgaG9yaXpvbnRhbCBmbGlwcGVkIHN0YXRlLiBgZmFsc2VgIGZvciBubyBmbGlwLCBvciBgdHJ1ZWAgdG8gYmUgZmxpcHBlZC5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0RmxpcDogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5mbGlwWCA9IHg7XHJcbiAgICAgICAgdGhpcy5mbGlwWSA9IHk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgZmxpcHBlZCBzdGF0ZSBvZiB0aGlzIEdhbWUgT2JqZWN0IGJhY2sgdG8gdGhlaXIgZGVmYXVsdCB1bi1mbGlwcGVkIHN0YXRlLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkZsaXAjcmVzZXRGbGlwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICByZXNldEZsaXA6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5mbGlwWCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmxpcFkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBGbGlwO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Flip.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/components/GetBounds.js":
/*!*********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/components/GetBounds.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Rectangle = __webpack_require__(/*! ../../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar RotateAround = __webpack_require__(/*! ../../math/RotateAround */ \"./node_modules/phaser/src/math/RotateAround.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * Provides methods used for obtaining the bounds of a Game Object.\r\n * Should be applied as a mixin and not used directly.\r\n *\r\n * @namespace Phaser.GameObjects.Components.GetBounds\r\n * @since 3.0.0\r\n */\r\n\r\nvar GetBounds = {\r\n\r\n /**\r\n * Processes the bounds output vector before returning it.\r\n *\r\n * @method Phaser.GameObjects.Components.GetBounds#prepareBoundsOutput\r\n * @private\r\n * @since 3.18.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [output,$return]\r\n *\r\n * @param {(Phaser.Math.Vector2|object)} output - An object to store the values in. If not provided a new Vector2 will be created.\r\n * @param {boolean} [includeParent=false] - If this Game Object has a parent Container, include it (and all other ancestors) in the resulting vector?\r\n *\r\n * @return {(Phaser.Math.Vector2|object)} The values stored in the output object.\r\n */\r\n prepareBoundsOutput: function (output, includeParent)\r\n {\r\n if (includeParent === undefined) { includeParent = false; }\r\n\r\n if (this.rotation !== 0)\r\n {\r\n RotateAround(output, this.x, this.y, this.rotation);\r\n }\r\n\r\n if (includeParent && this.parentContainer)\r\n {\r\n var parentMatrix = this.parentContainer.getBoundsTransformMatrix();\r\n\r\n parentMatrix.transformPoint(output.x, output.y, output);\r\n }\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Gets the center coordinate of this Game Object, regardless of origin.\r\n * The returned point is calculated in local space and does not factor in any parent containers\r\n *\r\n * @method Phaser.GameObjects.Components.GetBounds#getCenter\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [output,$return]\r\n *\r\n * @param {(Phaser.Math.Vector2|object)} [output] - An object to store the values in. If not provided a new Vector2 will be created.\r\n *\r\n * @return {(Phaser.Math.Vector2|object)} The values stored in the output object.\r\n */\r\n getCenter: function (output)\r\n {\r\n if (output === undefined) { output = new Vector2(); }\r\n\r\n output.x = this.x - (this.displayWidth * this.originX) + (this.displayWidth / 2);\r\n output.y = this.y - (this.displayHeight * this.originY) + (this.displayHeight / 2);\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Gets the top-left corner coordinate of this Game Object, regardless of origin.\r\n * The returned point is calculated in local space and does not factor in any parent containers\r\n *\r\n * @method Phaser.GameObjects.Components.GetBounds#getTopLeft\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [output,$return]\r\n *\r\n * @param {(Phaser.Math.Vector2|object)} [output] - An object to store the values in. If not provided a new Vector2 will be created.\r\n * @param {boolean} [includeParent=false] - If this Game Object has a parent Container, include it (and all other ancestors) in the resulting vector?\r\n *\r\n * @return {(Phaser.Math.Vector2|object)} The values stored in the output object.\r\n */\r\n getTopLeft: function (output, includeParent)\r\n {\r\n if (!output) { output = new Vector2(); }\r\n\r\n output.x = this.x - (this.displayWidth * this.originX);\r\n output.y = this.y - (this.displayHeight * this.originY);\r\n\r\n return this.prepareBoundsOutput(output, includeParent);\r\n },\r\n\r\n /**\r\n * Gets the top-center coordinate of this Game Object, regardless of origin.\r\n * The returned point is calculated in local space and does not factor in any parent containers\r\n *\r\n * @method Phaser.GameObjects.Components.GetBounds#getTopCenter\r\n * @since 3.18.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [output,$return]\r\n *\r\n * @param {(Phaser.Math.Vector2|object)} [output] - An object to store the values in. If not provided a new Vector2 will be created.\r\n * @param {boolean} [includeParent=false] - If this Game Object has a parent Container, include it (and all other ancestors) in the resulting vector?\r\n *\r\n * @return {(Phaser.Math.Vector2|object)} The values stored in the output object.\r\n */\r\n getTopCenter: function (output, includeParent)\r\n {\r\n if (!output) { output = new Vector2(); }\r\n\r\n output.x = (this.x - (this.displayWidth * this.originX)) + (this.displayWidth / 2);\r\n output.y = this.y - (this.displayHeight * this.originY);\r\n\r\n return this.prepareBoundsOutput(output, includeParent);\r\n },\r\n\r\n /**\r\n * Gets the top-right corner coordinate of this Game Object, regardless of origin.\r\n * The returned point is calculated in local space and does not factor in any parent containers\r\n *\r\n * @method Phaser.GameObjects.Components.GetBounds#getTopRight\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [output,$return]\r\n *\r\n * @param {(Phaser.Math.Vector2|object)} [output] - An object to store the values in. If not provided a new Vector2 will be created.\r\n * @param {boolean} [includeParent=false] - If this Game Object has a parent Container, include it (and all other ancestors) in the resulting vector?\r\n *\r\n * @return {(Phaser.Math.Vector2|object)} The values stored in the output object.\r\n */\r\n getTopRight: function (output, includeParent)\r\n {\r\n if (!output) { output = new Vector2(); }\r\n\r\n output.x = (this.x - (this.displayWidth * this.originX)) + this.displayWidth;\r\n output.y = this.y - (this.displayHeight * this.originY);\r\n\r\n return this.prepareBoundsOutput(output, includeParent);\r\n },\r\n\r\n /**\r\n * Gets the left-center coordinate of this Game Object, regardless of origin.\r\n * The returned point is calculated in local space and does not factor in any parent containers\r\n *\r\n * @method Phaser.GameObjects.Components.GetBounds#getLeftCenter\r\n * @since 3.18.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [output,$return]\r\n *\r\n * @param {(Phaser.Math.Vector2|object)} [output] - An object to store the values in. If not provided a new Vector2 will be created.\r\n * @param {boolean} [includeParent=false] - If this Game Object has a parent Container, include it (and all other ancestors) in the resulting vector?\r\n *\r\n * @return {(Phaser.Math.Vector2|object)} The values stored in the output object.\r\n */\r\n getLeftCenter: function (output, includeParent)\r\n {\r\n if (!output) { output = new Vector2(); }\r\n\r\n output.x = this.x - (this.displayWidth * this.originX);\r\n output.y = (this.y - (this.displayHeight * this.originY)) + (this.displayHeight / 2);\r\n\r\n return this.prepareBoundsOutput(output, includeParent);\r\n },\r\n\r\n /**\r\n * Gets the right-center coordinate of this Game Object, regardless of origin.\r\n * The returned point is calculated in local space and does not factor in any parent containers\r\n *\r\n * @method Phaser.GameObjects.Components.GetBounds#getRightCenter\r\n * @since 3.18.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [output,$return]\r\n *\r\n * @param {(Phaser.Math.Vector2|object)} [output] - An object to store the values in. If not provided a new Vector2 will be created.\r\n * @param {boolean} [includeParent=false] - If this Game Object has a parent Container, include it (and all other ancestors) in the resulting vector?\r\n *\r\n * @return {(Phaser.Math.Vector2|object)} The values stored in the output object.\r\n */\r\n getRightCenter: function (output, includeParent)\r\n {\r\n if (!output) { output = new Vector2(); }\r\n\r\n output.x = (this.x - (this.displayWidth * this.originX)) + this.displayWidth;\r\n output.y = (this.y - (this.displayHeight * this.originY)) + (this.displayHeight / 2);\r\n\r\n return this.prepareBoundsOutput(output, includeParent);\r\n },\r\n\r\n /**\r\n * Gets the bottom-left corner coordinate of this Game Object, regardless of origin.\r\n * The returned point is calculated in local space and does not factor in any parent containers\r\n *\r\n * @method Phaser.GameObjects.Components.GetBounds#getBottomLeft\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [output,$return]\r\n *\r\n * @param {(Phaser.Math.Vector2|object)} [output] - An object to store the values in. If not provided a new Vector2 will be created.\r\n * @param {boolean} [includeParent=false] - If this Game Object has a parent Container, include it (and all other ancestors) in the resulting vector?\r\n *\r\n * @return {(Phaser.Math.Vector2|object)} The values stored in the output object.\r\n */\r\n getBottomLeft: function (output, includeParent)\r\n {\r\n if (!output) { output = new Vector2(); }\r\n\r\n output.x = this.x - (this.displayWidth * this.originX);\r\n output.y = (this.y - (this.displayHeight * this.originY)) + this.displayHeight;\r\n\r\n return this.prepareBoundsOutput(output, includeParent);\r\n },\r\n\r\n /**\r\n * Gets the bottom-center coordinate of this Game Object, regardless of origin.\r\n * The returned point is calculated in local space and does not factor in any parent containers\r\n *\r\n * @method Phaser.GameObjects.Components.GetBounds#getBottomCenter\r\n * @since 3.18.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [output,$return]\r\n *\r\n * @param {(Phaser.Math.Vector2|object)} [output] - An object to store the values in. If not provided a new Vector2 will be created.\r\n * @param {boolean} [includeParent=false] - If this Game Object has a parent Container, include it (and all other ancestors) in the resulting vector?\r\n *\r\n * @return {(Phaser.Math.Vector2|object)} The values stored in the output object.\r\n */\r\n getBottomCenter: function (output, includeParent)\r\n {\r\n if (!output) { output = new Vector2(); }\r\n\r\n output.x = (this.x - (this.displayWidth * this.originX)) + (this.displayWidth / 2);\r\n output.y = (this.y - (this.displayHeight * this.originY)) + this.displayHeight;\r\n\r\n return this.prepareBoundsOutput(output, includeParent);\r\n },\r\n\r\n /**\r\n * Gets the bottom-right corner coordinate of this Game Object, regardless of origin.\r\n * The returned point is calculated in local space and does not factor in any parent containers\r\n *\r\n * @method Phaser.GameObjects.Components.GetBounds#getBottomRight\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [output,$return]\r\n *\r\n * @param {(Phaser.Math.Vector2|object)} [output] - An object to store the values in. If not provided a new Vector2 will be created.\r\n * @param {boolean} [includeParent=false] - If this Game Object has a parent Container, include it (and all other ancestors) in the resulting vector?\r\n *\r\n * @return {(Phaser.Math.Vector2|object)} The values stored in the output object.\r\n */\r\n getBottomRight: function (output, includeParent)\r\n {\r\n if (!output) { output = new Vector2(); }\r\n\r\n output.x = (this.x - (this.displayWidth * this.originX)) + this.displayWidth;\r\n output.y = (this.y - (this.displayHeight * this.originY)) + this.displayHeight;\r\n\r\n return this.prepareBoundsOutput(output, includeParent);\r\n },\r\n\r\n /**\r\n * Gets the bounds of this Game Object, regardless of origin.\r\n * The values are stored and returned in a Rectangle, or Rectangle-like, object.\r\n *\r\n * @method Phaser.GameObjects.Components.GetBounds#getBounds\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [output,$return]\r\n *\r\n * @param {(Phaser.Geom.Rectangle|object)} [output] - An object to store the values in. If not provided a new Rectangle will be created.\r\n *\r\n * @return {(Phaser.Geom.Rectangle|object)} The values stored in the output object.\r\n */\r\n getBounds: function (output)\r\n {\r\n if (output === undefined) { output = new Rectangle(); }\r\n\r\n // We can use the output object to temporarily store the x/y coords in:\r\n\r\n var TLx, TLy, TRx, TRy, BLx, BLy, BRx, BRy;\r\n\r\n // Instead of doing a check if parent container is \r\n // defined per corner we only do it once.\r\n if (this.parentContainer)\r\n {\r\n var parentMatrix = this.parentContainer.getBoundsTransformMatrix();\r\n\r\n this.getTopLeft(output);\r\n parentMatrix.transformPoint(output.x, output.y, output);\r\n\r\n TLx = output.x;\r\n TLy = output.y;\r\n\r\n this.getTopRight(output);\r\n parentMatrix.transformPoint(output.x, output.y, output);\r\n\r\n TRx = output.x;\r\n TRy = output.y;\r\n\r\n this.getBottomLeft(output);\r\n parentMatrix.transformPoint(output.x, output.y, output);\r\n\r\n BLx = output.x;\r\n BLy = output.y;\r\n\r\n this.getBottomRight(output);\r\n parentMatrix.transformPoint(output.x, output.y, output);\r\n\r\n BRx = output.x;\r\n BRy = output.y;\r\n }\r\n else\r\n {\r\n this.getTopLeft(output);\r\n\r\n TLx = output.x;\r\n TLy = output.y;\r\n\r\n this.getTopRight(output);\r\n\r\n TRx = output.x;\r\n TRy = output.y;\r\n\r\n this.getBottomLeft(output);\r\n\r\n BLx = output.x;\r\n BLy = output.y;\r\n\r\n this.getBottomRight(output);\r\n\r\n BRx = output.x;\r\n BRy = output.y;\r\n }\r\n\r\n output.x = Math.min(TLx, TRx, BLx, BRx);\r\n output.y = Math.min(TLy, TRy, BLy, BRy);\r\n output.width = Math.max(TLx, TRx, BLx, BRx) - output.x;\r\n output.height = Math.max(TLy, TRy, BLy, BRy) - output.y;\r\n\r\n return output;\r\n }\r\n\r\n};\r\n\r\nmodule.exports = GetBounds;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0dldEJvdW5kcy5qcz83MGMzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyw2RkFBZ0M7QUFDeEQsbUJBQW1CLG1CQUFPLENBQUMsK0VBQXlCO0FBQ3BELGNBQWMsbUJBQU8sQ0FBQyxxRUFBb0I7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsNkJBQTZCO0FBQzVDLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw2QkFBNkI7QUFDN0M7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLHVCQUF1Qjs7QUFFakU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsNkJBQTZCO0FBQzVDO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsd0JBQXdCOztBQUUzRDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixvQkFBb0I7QUFDckM7QUFDQSxlQUFlLDZCQUE2QjtBQUM1QyxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQix3QkFBd0I7O0FBRTlDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsNkJBQTZCO0FBQzVDLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw2QkFBNkI7QUFDN0M7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHdCQUF3Qjs7QUFFOUM7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSw2QkFBNkI7QUFDNUMsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isd0JBQXdCOztBQUU5QztBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixvQkFBb0I7QUFDckM7QUFDQSxlQUFlLDZCQUE2QjtBQUM1QyxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQix3QkFBd0I7O0FBRTlDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsNkJBQTZCO0FBQzVDLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw2QkFBNkI7QUFDN0M7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHdCQUF3Qjs7QUFFOUM7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSw2QkFBNkI7QUFDNUMsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isd0JBQXdCOztBQUU5QztBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixvQkFBb0I7QUFDckM7QUFDQSxlQUFlLDZCQUE2QjtBQUM1QyxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQix3QkFBd0I7O0FBRTlDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsNkJBQTZCO0FBQzVDLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw2QkFBNkI7QUFDN0M7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHdCQUF3Qjs7QUFFOUM7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsc0JBQXNCO0FBQ3ZDO0FBQ0EsZUFBZSwrQkFBK0I7QUFDOUM7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQywwQkFBMEI7O0FBRTdEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL0dldEJvdW5kcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4uLy4uL2dlb20vcmVjdGFuZ2xlL1JlY3RhbmdsZScpO1xyXG52YXIgUm90YXRlQXJvdW5kID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9Sb3RhdGVBcm91bmQnKTtcclxudmFyIFZlY3RvcjIgPSByZXF1aXJlKCcuLi8uLi9tYXRoL1ZlY3RvcjInKTtcclxuXHJcbi8qKlxyXG4gKiBQcm92aWRlcyBtZXRob2RzIHVzZWQgZm9yIG9idGFpbmluZyB0aGUgYm91bmRzIG9mIGEgR2FtZSBPYmplY3QuXHJcbiAqIFNob3VsZCBiZSBhcHBsaWVkIGFzIGEgbWl4aW4gYW5kIG5vdCB1c2VkIGRpcmVjdGx5LlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkdldEJvdW5kc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcblxyXG52YXIgR2V0Qm91bmRzID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvY2Vzc2VzIHRoZSBib3VuZHMgb3V0cHV0IHZlY3RvciBiZWZvcmUgcmV0dXJuaW5nIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuR2V0Qm91bmRzI3ByZXBhcmVCb3VuZHNPdXRwdXRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0cHV0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLk1hdGguVmVjdG9yMnxvYmplY3QpfSBvdXRwdXQgLSBBbiBvYmplY3QgdG8gc3RvcmUgdGhlIHZhbHVlcyBpbi4gSWYgbm90IHByb3ZpZGVkIGEgbmV3IFZlY3RvcjIgd2lsbCBiZSBjcmVhdGVkLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaW5jbHVkZVBhcmVudD1mYWxzZV0gLSBJZiB0aGlzIEdhbWUgT2JqZWN0IGhhcyBhIHBhcmVudCBDb250YWluZXIsIGluY2x1ZGUgaXQgKGFuZCBhbGwgb3RoZXIgYW5jZXN0b3JzKSBpbiB0aGUgcmVzdWx0aW5nIHZlY3Rvcj9cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsoUGhhc2VyLk1hdGguVmVjdG9yMnxvYmplY3QpfSBUaGUgdmFsdWVzIHN0b3JlZCBpbiB0aGUgb3V0cHV0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHJlcGFyZUJvdW5kc091dHB1dDogZnVuY3Rpb24gKG91dHB1dCwgaW5jbHVkZVBhcmVudClcclxuICAgIHtcclxuICAgICAgICBpZiAoaW5jbHVkZVBhcmVudCA9PT0gdW5kZWZpbmVkKSB7IGluY2x1ZGVQYXJlbnQgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5yb3RhdGlvbiAhPT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIFJvdGF0ZUFyb3VuZChvdXRwdXQsIHRoaXMueCwgdGhpcy55LCB0aGlzLnJvdGF0aW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpbmNsdWRlUGFyZW50ICYmIHRoaXMucGFyZW50Q29udGFpbmVyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHBhcmVudE1hdHJpeCA9IHRoaXMucGFyZW50Q29udGFpbmVyLmdldEJvdW5kc1RyYW5zZm9ybU1hdHJpeCgpO1xyXG5cclxuICAgICAgICAgICAgcGFyZW50TWF0cml4LnRyYW5zZm9ybVBvaW50KG91dHB1dC54LCBvdXRwdXQueSwgb3V0cHV0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgY2VudGVyIGNvb3JkaW5hdGUgb2YgdGhpcyBHYW1lIE9iamVjdCwgcmVnYXJkbGVzcyBvZiBvcmlnaW4uXHJcbiAgICAgKiBUaGUgcmV0dXJuZWQgcG9pbnQgaXMgY2FsY3VsYXRlZCBpbiBsb2NhbCBzcGFjZSBhbmQgZG9lcyBub3QgZmFjdG9yIGluIGFueSBwYXJlbnQgY29udGFpbmVyc1xyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuR2V0Qm91bmRzI2dldENlbnRlclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0cHV0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLk1hdGguVmVjdG9yMnxvYmplY3QpfSBbb3V0cHV0XSAtIEFuIG9iamVjdCB0byBzdG9yZSB0aGUgdmFsdWVzIGluLiBJZiBub3QgcHJvdmlkZWQgYSBuZXcgVmVjdG9yMiB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7KFBoYXNlci5NYXRoLlZlY3RvcjJ8b2JqZWN0KX0gVGhlIHZhbHVlcyBzdG9yZWQgaW4gdGhlIG91dHB1dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGdldENlbnRlcjogZnVuY3Rpb24gKG91dHB1dClcclxuICAgIHtcclxuICAgICAgICBpZiAob3V0cHV0ID09PSB1bmRlZmluZWQpIHsgb3V0cHV0ID0gbmV3IFZlY3RvcjIoKTsgfVxyXG5cclxuICAgICAgICBvdXRwdXQueCA9IHRoaXMueCAtICh0aGlzLmRpc3BsYXlXaWR0aCAqIHRoaXMub3JpZ2luWCkgKyAodGhpcy5kaXNwbGF5V2lkdGggLyAyKTtcclxuICAgICAgICBvdXRwdXQueSA9IHRoaXMueSAtICh0aGlzLmRpc3BsYXlIZWlnaHQgKiB0aGlzLm9yaWdpblkpICsgKHRoaXMuZGlzcGxheUhlaWdodCAvIDIpO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHRvcC1sZWZ0IGNvcm5lciBjb29yZGluYXRlIG9mIHRoaXMgR2FtZSBPYmplY3QsIHJlZ2FyZGxlc3Mgb2Ygb3JpZ2luLlxyXG4gICAgICogVGhlIHJldHVybmVkIHBvaW50IGlzIGNhbGN1bGF0ZWQgaW4gbG9jYWwgc3BhY2UgYW5kIGRvZXMgbm90IGZhY3RvciBpbiBhbnkgcGFyZW50IGNvbnRhaW5lcnNcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkdldEJvdW5kcyNnZXRUb3BMZWZ0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLk1hdGguVmVjdG9yMn0gTyAtIFtvdXRwdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuTWF0aC5WZWN0b3IyfG9iamVjdCl9IFtvdXRwdXRdIC0gQW4gb2JqZWN0IHRvIHN0b3JlIHRoZSB2YWx1ZXMgaW4uIElmIG5vdCBwcm92aWRlZCBhIG5ldyBWZWN0b3IyIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luY2x1ZGVQYXJlbnQ9ZmFsc2VdIC0gSWYgdGhpcyBHYW1lIE9iamVjdCBoYXMgYSBwYXJlbnQgQ29udGFpbmVyLCBpbmNsdWRlIGl0IChhbmQgYWxsIG90aGVyIGFuY2VzdG9ycykgaW4gdGhlIHJlc3VsdGluZyB2ZWN0b3I/XHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7KFBoYXNlci5NYXRoLlZlY3RvcjJ8b2JqZWN0KX0gVGhlIHZhbHVlcyBzdG9yZWQgaW4gdGhlIG91dHB1dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGdldFRvcExlZnQ6IGZ1bmN0aW9uIChvdXRwdXQsIGluY2x1ZGVQYXJlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCFvdXRwdXQpIHsgb3V0cHV0ID0gbmV3IFZlY3RvcjIoKTsgfVxyXG5cclxuICAgICAgICBvdXRwdXQueCA9IHRoaXMueCAtICh0aGlzLmRpc3BsYXlXaWR0aCAqIHRoaXMub3JpZ2luWCk7XHJcbiAgICAgICAgb3V0cHV0LnkgPSB0aGlzLnkgLSAodGhpcy5kaXNwbGF5SGVpZ2h0ICogdGhpcy5vcmlnaW5ZKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlcGFyZUJvdW5kc091dHB1dChvdXRwdXQsIGluY2x1ZGVQYXJlbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHRvcC1jZW50ZXIgY29vcmRpbmF0ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LCByZWdhcmRsZXNzIG9mIG9yaWdpbi5cclxuICAgICAqIFRoZSByZXR1cm5lZCBwb2ludCBpcyBjYWxjdWxhdGVkIGluIGxvY2FsIHNwYWNlIGFuZCBkb2VzIG5vdCBmYWN0b3IgaW4gYW55IHBhcmVudCBjb250YWluZXJzXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHMjZ2V0VG9wQ2VudGVyXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0cHV0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLk1hdGguVmVjdG9yMnxvYmplY3QpfSBbb3V0cHV0XSAtIEFuIG9iamVjdCB0byBzdG9yZSB0aGUgdmFsdWVzIGluLiBJZiBub3QgcHJvdmlkZWQgYSBuZXcgVmVjdG9yMiB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmNsdWRlUGFyZW50PWZhbHNlXSAtIElmIHRoaXMgR2FtZSBPYmplY3QgaGFzIGEgcGFyZW50IENvbnRhaW5lciwgaW5jbHVkZSBpdCAoYW5kIGFsbCBvdGhlciBhbmNlc3RvcnMpIGluIHRoZSByZXN1bHRpbmcgdmVjdG9yP1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhQaGFzZXIuTWF0aC5WZWN0b3IyfG9iamVjdCl9IFRoZSB2YWx1ZXMgc3RvcmVkIGluIHRoZSBvdXRwdXQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRUb3BDZW50ZXI6IGZ1bmN0aW9uIChvdXRwdXQsIGluY2x1ZGVQYXJlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCFvdXRwdXQpIHsgb3V0cHV0ID0gbmV3IFZlY3RvcjIoKTsgfVxyXG5cclxuICAgICAgICBvdXRwdXQueCA9ICh0aGlzLnggLSAodGhpcy5kaXNwbGF5V2lkdGggKiB0aGlzLm9yaWdpblgpKSArICh0aGlzLmRpc3BsYXlXaWR0aCAvIDIpO1xyXG4gICAgICAgIG91dHB1dC55ID0gdGhpcy55IC0gKHRoaXMuZGlzcGxheUhlaWdodCAqIHRoaXMub3JpZ2luWSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnByZXBhcmVCb3VuZHNPdXRwdXQob3V0cHV0LCBpbmNsdWRlUGFyZW50KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSB0b3AtcmlnaHQgY29ybmVyIGNvb3JkaW5hdGUgb2YgdGhpcyBHYW1lIE9iamVjdCwgcmVnYXJkbGVzcyBvZiBvcmlnaW4uXHJcbiAgICAgKiBUaGUgcmV0dXJuZWQgcG9pbnQgaXMgY2FsY3VsYXRlZCBpbiBsb2NhbCBzcGFjZSBhbmQgZG9lcyBub3QgZmFjdG9yIGluIGFueSBwYXJlbnQgY29udGFpbmVyc1xyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuR2V0Qm91bmRzI2dldFRvcFJpZ2h0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLk1hdGguVmVjdG9yMn0gTyAtIFtvdXRwdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuTWF0aC5WZWN0b3IyfG9iamVjdCl9IFtvdXRwdXRdIC0gQW4gb2JqZWN0IHRvIHN0b3JlIHRoZSB2YWx1ZXMgaW4uIElmIG5vdCBwcm92aWRlZCBhIG5ldyBWZWN0b3IyIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luY2x1ZGVQYXJlbnQ9ZmFsc2VdIC0gSWYgdGhpcyBHYW1lIE9iamVjdCBoYXMgYSBwYXJlbnQgQ29udGFpbmVyLCBpbmNsdWRlIGl0IChhbmQgYWxsIG90aGVyIGFuY2VzdG9ycykgaW4gdGhlIHJlc3VsdGluZyB2ZWN0b3I/XHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7KFBoYXNlci5NYXRoLlZlY3RvcjJ8b2JqZWN0KX0gVGhlIHZhbHVlcyBzdG9yZWQgaW4gdGhlIG91dHB1dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGdldFRvcFJpZ2h0OiBmdW5jdGlvbiAob3V0cHV0LCBpbmNsdWRlUGFyZW50KVxyXG4gICAge1xyXG4gICAgICAgIGlmICghb3V0cHV0KSB7IG91dHB1dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgb3V0cHV0LnggPSAodGhpcy54IC0gKHRoaXMuZGlzcGxheVdpZHRoICogdGhpcy5vcmlnaW5YKSkgKyB0aGlzLmRpc3BsYXlXaWR0aDtcclxuICAgICAgICBvdXRwdXQueSA9IHRoaXMueSAtICh0aGlzLmRpc3BsYXlIZWlnaHQgKiB0aGlzLm9yaWdpblkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wcmVwYXJlQm91bmRzT3V0cHV0KG91dHB1dCwgaW5jbHVkZVBhcmVudCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgbGVmdC1jZW50ZXIgY29vcmRpbmF0ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LCByZWdhcmRsZXNzIG9mIG9yaWdpbi5cclxuICAgICAqIFRoZSByZXR1cm5lZCBwb2ludCBpcyBjYWxjdWxhdGVkIGluIGxvY2FsIHNwYWNlIGFuZCBkb2VzIG5vdCBmYWN0b3IgaW4gYW55IHBhcmVudCBjb250YWluZXJzXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHMjZ2V0TGVmdENlbnRlclxyXG4gICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBPIC0gW291dHB1dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5NYXRoLlZlY3RvcjJ8b2JqZWN0KX0gW291dHB1dF0gLSBBbiBvYmplY3QgdG8gc3RvcmUgdGhlIHZhbHVlcyBpbi4gSWYgbm90IHByb3ZpZGVkIGEgbmV3IFZlY3RvcjIgd2lsbCBiZSBjcmVhdGVkLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaW5jbHVkZVBhcmVudD1mYWxzZV0gLSBJZiB0aGlzIEdhbWUgT2JqZWN0IGhhcyBhIHBhcmVudCBDb250YWluZXIsIGluY2x1ZGUgaXQgKGFuZCBhbGwgb3RoZXIgYW5jZXN0b3JzKSBpbiB0aGUgcmVzdWx0aW5nIHZlY3Rvcj9cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsoUGhhc2VyLk1hdGguVmVjdG9yMnxvYmplY3QpfSBUaGUgdmFsdWVzIHN0b3JlZCBpbiB0aGUgb3V0cHV0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ2V0TGVmdENlbnRlcjogZnVuY3Rpb24gKG91dHB1dCwgaW5jbHVkZVBhcmVudClcclxuICAgIHtcclxuICAgICAgICBpZiAoIW91dHB1dCkgeyBvdXRwdXQgPSBuZXcgVmVjdG9yMigpOyB9XHJcblxyXG4gICAgICAgIG91dHB1dC54ID0gdGhpcy54IC0gKHRoaXMuZGlzcGxheVdpZHRoICogdGhpcy5vcmlnaW5YKTtcclxuICAgICAgICBvdXRwdXQueSA9ICh0aGlzLnkgLSAodGhpcy5kaXNwbGF5SGVpZ2h0ICogdGhpcy5vcmlnaW5ZKSkgKyAodGhpcy5kaXNwbGF5SGVpZ2h0IC8gMik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnByZXBhcmVCb3VuZHNPdXRwdXQob3V0cHV0LCBpbmNsdWRlUGFyZW50KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSByaWdodC1jZW50ZXIgY29vcmRpbmF0ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LCByZWdhcmRsZXNzIG9mIG9yaWdpbi5cclxuICAgICAqIFRoZSByZXR1cm5lZCBwb2ludCBpcyBjYWxjdWxhdGVkIGluIGxvY2FsIHNwYWNlIGFuZCBkb2VzIG5vdCBmYWN0b3IgaW4gYW55IHBhcmVudCBjb250YWluZXJzXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHMjZ2V0UmlnaHRDZW50ZXJcclxuICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLk1hdGguVmVjdG9yMn0gTyAtIFtvdXRwdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuTWF0aC5WZWN0b3IyfG9iamVjdCl9IFtvdXRwdXRdIC0gQW4gb2JqZWN0IHRvIHN0b3JlIHRoZSB2YWx1ZXMgaW4uIElmIG5vdCBwcm92aWRlZCBhIG5ldyBWZWN0b3IyIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luY2x1ZGVQYXJlbnQ9ZmFsc2VdIC0gSWYgdGhpcyBHYW1lIE9iamVjdCBoYXMgYSBwYXJlbnQgQ29udGFpbmVyLCBpbmNsdWRlIGl0IChhbmQgYWxsIG90aGVyIGFuY2VzdG9ycykgaW4gdGhlIHJlc3VsdGluZyB2ZWN0b3I/XHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7KFBoYXNlci5NYXRoLlZlY3RvcjJ8b2JqZWN0KX0gVGhlIHZhbHVlcyBzdG9yZWQgaW4gdGhlIG91dHB1dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGdldFJpZ2h0Q2VudGVyOiBmdW5jdGlvbiAob3V0cHV0LCBpbmNsdWRlUGFyZW50KVxyXG4gICAge1xyXG4gICAgICAgIGlmICghb3V0cHV0KSB7IG91dHB1dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgb3V0cHV0LnggPSAodGhpcy54IC0gKHRoaXMuZGlzcGxheVdpZHRoICogdGhpcy5vcmlnaW5YKSkgKyB0aGlzLmRpc3BsYXlXaWR0aDtcclxuICAgICAgICBvdXRwdXQueSA9ICh0aGlzLnkgLSAodGhpcy5kaXNwbGF5SGVpZ2h0ICogdGhpcy5vcmlnaW5ZKSkgKyAodGhpcy5kaXNwbGF5SGVpZ2h0IC8gMik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnByZXBhcmVCb3VuZHNPdXRwdXQob3V0cHV0LCBpbmNsdWRlUGFyZW50KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBib3R0b20tbGVmdCBjb3JuZXIgY29vcmRpbmF0ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LCByZWdhcmRsZXNzIG9mIG9yaWdpbi5cclxuICAgICAqIFRoZSByZXR1cm5lZCBwb2ludCBpcyBjYWxjdWxhdGVkIGluIGxvY2FsIHNwYWNlIGFuZCBkb2VzIG5vdCBmYWN0b3IgaW4gYW55IHBhcmVudCBjb250YWluZXJzXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHMjZ2V0Qm90dG9tTGVmdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0cHV0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLk1hdGguVmVjdG9yMnxvYmplY3QpfSBbb3V0cHV0XSAtIEFuIG9iamVjdCB0byBzdG9yZSB0aGUgdmFsdWVzIGluLiBJZiBub3QgcHJvdmlkZWQgYSBuZXcgVmVjdG9yMiB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmNsdWRlUGFyZW50PWZhbHNlXSAtIElmIHRoaXMgR2FtZSBPYmplY3QgaGFzIGEgcGFyZW50IENvbnRhaW5lciwgaW5jbHVkZSBpdCAoYW5kIGFsbCBvdGhlciBhbmNlc3RvcnMpIGluIHRoZSByZXN1bHRpbmcgdmVjdG9yP1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhQaGFzZXIuTWF0aC5WZWN0b3IyfG9iamVjdCl9IFRoZSB2YWx1ZXMgc3RvcmVkIGluIHRoZSBvdXRwdXQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRCb3R0b21MZWZ0OiBmdW5jdGlvbiAob3V0cHV0LCBpbmNsdWRlUGFyZW50KVxyXG4gICAge1xyXG4gICAgICAgIGlmICghb3V0cHV0KSB7IG91dHB1dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgb3V0cHV0LnggPSB0aGlzLnggLSAodGhpcy5kaXNwbGF5V2lkdGggKiB0aGlzLm9yaWdpblgpO1xyXG4gICAgICAgIG91dHB1dC55ID0gKHRoaXMueSAtICh0aGlzLmRpc3BsYXlIZWlnaHQgKiB0aGlzLm9yaWdpblkpKSArIHRoaXMuZGlzcGxheUhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlcGFyZUJvdW5kc091dHB1dChvdXRwdXQsIGluY2x1ZGVQYXJlbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGJvdHRvbS1jZW50ZXIgY29vcmRpbmF0ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LCByZWdhcmRsZXNzIG9mIG9yaWdpbi5cclxuICAgICAqIFRoZSByZXR1cm5lZCBwb2ludCBpcyBjYWxjdWxhdGVkIGluIGxvY2FsIHNwYWNlIGFuZCBkb2VzIG5vdCBmYWN0b3IgaW4gYW55IHBhcmVudCBjb250YWluZXJzXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHMjZ2V0Qm90dG9tQ2VudGVyXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5NYXRoLlZlY3RvcjJ9IE8gLSBbb3V0cHV0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLk1hdGguVmVjdG9yMnxvYmplY3QpfSBbb3V0cHV0XSAtIEFuIG9iamVjdCB0byBzdG9yZSB0aGUgdmFsdWVzIGluLiBJZiBub3QgcHJvdmlkZWQgYSBuZXcgVmVjdG9yMiB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmNsdWRlUGFyZW50PWZhbHNlXSAtIElmIHRoaXMgR2FtZSBPYmplY3QgaGFzIGEgcGFyZW50IENvbnRhaW5lciwgaW5jbHVkZSBpdCAoYW5kIGFsbCBvdGhlciBhbmNlc3RvcnMpIGluIHRoZSByZXN1bHRpbmcgdmVjdG9yP1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhQaGFzZXIuTWF0aC5WZWN0b3IyfG9iamVjdCl9IFRoZSB2YWx1ZXMgc3RvcmVkIGluIHRoZSBvdXRwdXQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRCb3R0b21DZW50ZXI6IGZ1bmN0aW9uIChvdXRwdXQsIGluY2x1ZGVQYXJlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCFvdXRwdXQpIHsgb3V0cHV0ID0gbmV3IFZlY3RvcjIoKTsgfVxyXG5cclxuICAgICAgICBvdXRwdXQueCA9ICh0aGlzLnggLSAodGhpcy5kaXNwbGF5V2lkdGggKiB0aGlzLm9yaWdpblgpKSArICh0aGlzLmRpc3BsYXlXaWR0aCAvIDIpO1xyXG4gICAgICAgIG91dHB1dC55ID0gKHRoaXMueSAtICh0aGlzLmRpc3BsYXlIZWlnaHQgKiB0aGlzLm9yaWdpblkpKSArIHRoaXMuZGlzcGxheUhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlcGFyZUJvdW5kc091dHB1dChvdXRwdXQsIGluY2x1ZGVQYXJlbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGJvdHRvbS1yaWdodCBjb3JuZXIgY29vcmRpbmF0ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LCByZWdhcmRsZXNzIG9mIG9yaWdpbi5cclxuICAgICAqIFRoZSByZXR1cm5lZCBwb2ludCBpcyBjYWxjdWxhdGVkIGluIGxvY2FsIHNwYWNlIGFuZCBkb2VzIG5vdCBmYWN0b3IgaW4gYW55IHBhcmVudCBjb250YWluZXJzXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHMjZ2V0Qm90dG9tUmlnaHRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBPIC0gW291dHB1dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5NYXRoLlZlY3RvcjJ8b2JqZWN0KX0gW291dHB1dF0gLSBBbiBvYmplY3QgdG8gc3RvcmUgdGhlIHZhbHVlcyBpbi4gSWYgbm90IHByb3ZpZGVkIGEgbmV3IFZlY3RvcjIgd2lsbCBiZSBjcmVhdGVkLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaW5jbHVkZVBhcmVudD1mYWxzZV0gLSBJZiB0aGlzIEdhbWUgT2JqZWN0IGhhcyBhIHBhcmVudCBDb250YWluZXIsIGluY2x1ZGUgaXQgKGFuZCBhbGwgb3RoZXIgYW5jZXN0b3JzKSBpbiB0aGUgcmVzdWx0aW5nIHZlY3Rvcj9cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsoUGhhc2VyLk1hdGguVmVjdG9yMnxvYmplY3QpfSBUaGUgdmFsdWVzIHN0b3JlZCBpbiB0aGUgb3V0cHV0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ2V0Qm90dG9tUmlnaHQ6IGZ1bmN0aW9uIChvdXRwdXQsIGluY2x1ZGVQYXJlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCFvdXRwdXQpIHsgb3V0cHV0ID0gbmV3IFZlY3RvcjIoKTsgfVxyXG5cclxuICAgICAgICBvdXRwdXQueCA9ICh0aGlzLnggLSAodGhpcy5kaXNwbGF5V2lkdGggKiB0aGlzLm9yaWdpblgpKSArIHRoaXMuZGlzcGxheVdpZHRoO1xyXG4gICAgICAgIG91dHB1dC55ID0gKHRoaXMueSAtICh0aGlzLmRpc3BsYXlIZWlnaHQgKiB0aGlzLm9yaWdpblkpKSArIHRoaXMuZGlzcGxheUhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlcGFyZUJvdW5kc091dHB1dChvdXRwdXQsIGluY2x1ZGVQYXJlbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGJvdW5kcyBvZiB0aGlzIEdhbWUgT2JqZWN0LCByZWdhcmRsZXNzIG9mIG9yaWdpbi5cclxuICAgICAqIFRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBhbmQgcmV0dXJuZWQgaW4gYSBSZWN0YW5nbGUsIG9yIFJlY3RhbmdsZS1saWtlLCBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHMjZ2V0Qm91bmRzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBPIC0gW291dHB1dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlJlY3RhbmdsZXxvYmplY3QpfSBbb3V0cHV0XSAtIEFuIG9iamVjdCB0byBzdG9yZSB0aGUgdmFsdWVzIGluLiBJZiBub3QgcHJvdmlkZWQgYSBuZXcgUmVjdGFuZ2xlIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsoUGhhc2VyLkdlb20uUmVjdGFuZ2xlfG9iamVjdCl9IFRoZSB2YWx1ZXMgc3RvcmVkIGluIHRoZSBvdXRwdXQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRCb3VuZHM6IGZ1bmN0aW9uIChvdXRwdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dHB1dCA9PT0gdW5kZWZpbmVkKSB7IG91dHB1dCA9IG5ldyBSZWN0YW5nbGUoKTsgfVxyXG5cclxuICAgICAgICAvLyAgV2UgY2FuIHVzZSB0aGUgb3V0cHV0IG9iamVjdCB0byB0ZW1wb3JhcmlseSBzdG9yZSB0aGUgeC95IGNvb3JkcyBpbjpcclxuXHJcbiAgICAgICAgdmFyIFRMeCwgVEx5LCBUUngsIFRSeSwgQkx4LCBCTHksIEJSeCwgQlJ5O1xyXG5cclxuICAgICAgICAvLyBJbnN0ZWFkIG9mIGRvaW5nIGEgY2hlY2sgaWYgcGFyZW50IGNvbnRhaW5lciBpcyBcclxuICAgICAgICAvLyBkZWZpbmVkIHBlciBjb3JuZXIgd2Ugb25seSBkbyBpdCBvbmNlLlxyXG4gICAgICAgIGlmICh0aGlzLnBhcmVudENvbnRhaW5lcilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBwYXJlbnRNYXRyaXggPSB0aGlzLnBhcmVudENvbnRhaW5lci5nZXRCb3VuZHNUcmFuc2Zvcm1NYXRyaXgoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VG9wTGVmdChvdXRwdXQpO1xyXG4gICAgICAgICAgICBwYXJlbnRNYXRyaXgudHJhbnNmb3JtUG9pbnQob3V0cHV0LngsIG91dHB1dC55LCBvdXRwdXQpO1xyXG5cclxuICAgICAgICAgICAgVEx4ID0gb3V0cHV0Lng7XHJcbiAgICAgICAgICAgIFRMeSA9IG91dHB1dC55O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nZXRUb3BSaWdodChvdXRwdXQpO1xyXG4gICAgICAgICAgICBwYXJlbnRNYXRyaXgudHJhbnNmb3JtUG9pbnQob3V0cHV0LngsIG91dHB1dC55LCBvdXRwdXQpO1xyXG5cclxuICAgICAgICAgICAgVFJ4ID0gb3V0cHV0Lng7XHJcbiAgICAgICAgICAgIFRSeSA9IG91dHB1dC55O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nZXRCb3R0b21MZWZ0KG91dHB1dCk7XHJcbiAgICAgICAgICAgIHBhcmVudE1hdHJpeC50cmFuc2Zvcm1Qb2ludChvdXRwdXQueCwgb3V0cHV0LnksIG91dHB1dCk7XHJcblxyXG4gICAgICAgICAgICBCTHggPSBvdXRwdXQueDtcclxuICAgICAgICAgICAgQkx5ID0gb3V0cHV0Lnk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmdldEJvdHRvbVJpZ2h0KG91dHB1dCk7XHJcbiAgICAgICAgICAgIHBhcmVudE1hdHJpeC50cmFuc2Zvcm1Qb2ludChvdXRwdXQueCwgb3V0cHV0LnksIG91dHB1dCk7XHJcblxyXG4gICAgICAgICAgICBCUnggPSBvdXRwdXQueDtcclxuICAgICAgICAgICAgQlJ5ID0gb3V0cHV0Lnk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VG9wTGVmdChvdXRwdXQpO1xyXG5cclxuICAgICAgICAgICAgVEx4ID0gb3V0cHV0Lng7XHJcbiAgICAgICAgICAgIFRMeSA9IG91dHB1dC55O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nZXRUb3BSaWdodChvdXRwdXQpO1xyXG5cclxuICAgICAgICAgICAgVFJ4ID0gb3V0cHV0Lng7XHJcbiAgICAgICAgICAgIFRSeSA9IG91dHB1dC55O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nZXRCb3R0b21MZWZ0KG91dHB1dCk7XHJcblxyXG4gICAgICAgICAgICBCTHggPSBvdXRwdXQueDtcclxuICAgICAgICAgICAgQkx5ID0gb3V0cHV0Lnk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmdldEJvdHRvbVJpZ2h0KG91dHB1dCk7XHJcblxyXG4gICAgICAgICAgICBCUnggPSBvdXRwdXQueDtcclxuICAgICAgICAgICAgQlJ5ID0gb3V0cHV0Lnk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBvdXRwdXQueCA9IE1hdGgubWluKFRMeCwgVFJ4LCBCTHgsIEJSeCk7XHJcbiAgICAgICAgb3V0cHV0LnkgPSBNYXRoLm1pbihUTHksIFRSeSwgQkx5LCBCUnkpO1xyXG4gICAgICAgIG91dHB1dC53aWR0aCA9IE1hdGgubWF4KFRMeCwgVFJ4LCBCTHgsIEJSeCkgLSBvdXRwdXQueDtcclxuICAgICAgICBvdXRwdXQuaGVpZ2h0ID0gTWF0aC5tYXgoVEx5LCBUUnksIEJMeSwgQlJ5KSAtIG91dHB1dC55O1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0Qm91bmRzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/GetBounds.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/components/Mask.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/components/Mask.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BitmapMask = __webpack_require__(/*! ../../display/mask/BitmapMask */ \"./node_modules/phaser/src/display/mask/BitmapMask.js\");\r\nvar GeometryMask = __webpack_require__(/*! ../../display/mask/GeometryMask */ \"./node_modules/phaser/src/display/mask/GeometryMask.js\");\r\n\r\n/**\r\n * Provides methods used for getting and setting the mask of a Game Object.\r\n *\r\n * @namespace Phaser.GameObjects.Components.Mask\r\n * @since 3.0.0\r\n */\r\n\r\nvar Mask = {\r\n\r\n /**\r\n * The Mask this Game Object is using during render.\r\n *\r\n * @name Phaser.GameObjects.Components.Mask#mask\r\n * @type {Phaser.Display.Masks.BitmapMask|Phaser.Display.Masks.GeometryMask}\r\n * @since 3.0.0\r\n */\r\n mask: null,\r\n\r\n /**\r\n * Sets the mask that this Game Object will use to render with.\r\n *\r\n * The mask must have been previously created and can be either a GeometryMask or a BitmapMask.\r\n * Note: Bitmap Masks only work on WebGL. Geometry Masks work on both WebGL and Canvas.\r\n *\r\n * If a mask is already set on this Game Object it will be immediately replaced.\r\n * \r\n * Masks are positioned in global space and are not relative to the Game Object to which they\r\n * are applied. The reason for this is that multiple Game Objects can all share the same mask.\r\n * \r\n * Masks have no impact on physics or input detection. They are purely a rendering component\r\n * that allows you to limit what is visible during the render pass.\r\n *\r\n * @method Phaser.GameObjects.Components.Mask#setMask\r\n * @since 3.6.2\r\n *\r\n * @param {Phaser.Display.Masks.BitmapMask|Phaser.Display.Masks.GeometryMask} mask - The mask this Game Object will use when rendering.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setMask: function (mask)\r\n {\r\n this.mask = mask;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Clears the mask that this Game Object was using.\r\n *\r\n * @method Phaser.GameObjects.Components.Mask#clearMask\r\n * @since 3.6.2\r\n *\r\n * @param {boolean} [destroyMask=false] - Destroy the mask before clearing it?\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n clearMask: function (destroyMask)\r\n {\r\n if (destroyMask === undefined) { destroyMask = false; }\r\n\r\n if (destroyMask && this.mask)\r\n {\r\n this.mask.destroy();\r\n }\r\n\r\n this.mask = null;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Creates and returns a Bitmap Mask. This mask can be used by any Game Object,\r\n * including this one.\r\n *\r\n * To create the mask you need to pass in a reference to a renderable Game Object.\r\n * A renderable Game Object is one that uses a texture to render with, such as an\r\n * Image, Sprite, Render Texture or BitmapText.\r\n *\r\n * If you do not provide a renderable object, and this Game Object has a texture,\r\n * it will use itself as the object. This means you can call this method to create\r\n * a Bitmap Mask from any renderable Game Object.\r\n *\r\n * @method Phaser.GameObjects.Components.Mask#createBitmapMask\r\n * @since 3.6.2\r\n * \r\n * @param {Phaser.GameObjects.GameObject} [renderable] - A renderable Game Object that uses a texture, such as a Sprite.\r\n *\r\n * @return {Phaser.Display.Masks.BitmapMask} This Bitmap Mask that was created.\r\n */\r\n createBitmapMask: function (renderable)\r\n {\r\n if (renderable === undefined && (this.texture || this.shader))\r\n {\r\n // eslint-disable-next-line consistent-this\r\n renderable = this;\r\n }\r\n\r\n return new BitmapMask(this.scene, renderable);\r\n },\r\n\r\n /**\r\n * Creates and returns a Geometry Mask. This mask can be used by any Game Object,\r\n * including this one.\r\n *\r\n * To create the mask you need to pass in a reference to a Graphics Game Object.\r\n *\r\n * If you do not provide a graphics object, and this Game Object is an instance\r\n * of a Graphics object, then it will use itself to create the mask.\r\n * \r\n * This means you can call this method to create a Geometry Mask from any Graphics Game Object.\r\n *\r\n * @method Phaser.GameObjects.Components.Mask#createGeometryMask\r\n * @since 3.6.2\r\n * \r\n * @param {Phaser.GameObjects.Graphics} [graphics] - A Graphics Game Object. The geometry within it will be used as the mask.\r\n *\r\n * @return {Phaser.Display.Masks.GeometryMask} This Geometry Mask that was created.\r\n */\r\n createGeometryMask: function (graphics)\r\n {\r\n if (graphics === undefined && this.type === 'Graphics')\r\n {\r\n // eslint-disable-next-line consistent-this\r\n graphics = this;\r\n }\r\n\r\n return new GeometryMask(this.scene, graphics);\r\n }\r\n\r\n};\r\n\r\nmodule.exports = Mask;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL01hc2suanM/ZTVkZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsMkZBQStCO0FBQ3hELG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQzs7QUFFNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxrRUFBa0U7QUFDakY7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLHFCQUFxQjs7QUFFN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLGdDQUFnQztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw0QkFBNEI7QUFDM0M7QUFDQSxnQkFBZ0Isa0NBQWtDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2NvbXBvbmVudHMvTWFzay5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJpdG1hcE1hc2sgPSByZXF1aXJlKCcuLi8uLi9kaXNwbGF5L21hc2svQml0bWFwTWFzaycpO1xyXG52YXIgR2VvbWV0cnlNYXNrID0gcmVxdWlyZSgnLi4vLi4vZGlzcGxheS9tYXNrL0dlb21ldHJ5TWFzaycpO1xyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgdXNlZCBmb3IgZ2V0dGluZyBhbmQgc2V0dGluZyB0aGUgbWFzayBvZiBhIEdhbWUgT2JqZWN0LlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk1hc2tcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5cclxudmFyIE1hc2sgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgTWFzayB0aGlzIEdhbWUgT2JqZWN0IGlzIHVzaW5nIGR1cmluZyByZW5kZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuTWFzayNtYXNrXHJcbiAgICAgKiBAdHlwZSB7UGhhc2VyLkRpc3BsYXkuTWFza3MuQml0bWFwTWFza3xQaGFzZXIuRGlzcGxheS5NYXNrcy5HZW9tZXRyeU1hc2t9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgbWFzazogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIG1hc2sgdGhhdCB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIHJlbmRlciB3aXRoLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBtYXNrIG11c3QgaGF2ZSBiZWVuIHByZXZpb3VzbHkgY3JlYXRlZCBhbmQgY2FuIGJlIGVpdGhlciBhIEdlb21ldHJ5TWFzayBvciBhIEJpdG1hcE1hc2suXHJcbiAgICAgKiBOb3RlOiBCaXRtYXAgTWFza3Mgb25seSB3b3JrIG9uIFdlYkdMLiBHZW9tZXRyeSBNYXNrcyB3b3JrIG9uIGJvdGggV2ViR0wgYW5kIENhbnZhcy5cclxuICAgICAqXHJcbiAgICAgKiBJZiBhIG1hc2sgaXMgYWxyZWFkeSBzZXQgb24gdGhpcyBHYW1lIE9iamVjdCBpdCB3aWxsIGJlIGltbWVkaWF0ZWx5IHJlcGxhY2VkLlxyXG4gICAgICogXHJcbiAgICAgKiBNYXNrcyBhcmUgcG9zaXRpb25lZCBpbiBnbG9iYWwgc3BhY2UgYW5kIGFyZSBub3QgcmVsYXRpdmUgdG8gdGhlIEdhbWUgT2JqZWN0IHRvIHdoaWNoIHRoZXlcclxuICAgICAqIGFyZSBhcHBsaWVkLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgbXVsdGlwbGUgR2FtZSBPYmplY3RzIGNhbiBhbGwgc2hhcmUgdGhlIHNhbWUgbWFzay5cclxuICAgICAqIFxyXG4gICAgICogTWFza3MgaGF2ZSBubyBpbXBhY3Qgb24gcGh5c2ljcyBvciBpbnB1dCBkZXRlY3Rpb24uIFRoZXkgYXJlIHB1cmVseSBhIHJlbmRlcmluZyBjb21wb25lbnRcclxuICAgICAqIHRoYXQgYWxsb3dzIHlvdSB0byBsaW1pdCB3aGF0IGlzIHZpc2libGUgZHVyaW5nIHRoZSByZW5kZXIgcGFzcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk1hc2sjc2V0TWFza1xyXG4gICAgICogQHNpbmNlIDMuNi4yXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuRGlzcGxheS5NYXNrcy5CaXRtYXBNYXNrfFBoYXNlci5EaXNwbGF5Lk1hc2tzLkdlb21ldHJ5TWFza30gbWFzayAtIFRoZSBtYXNrIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2Ugd2hlbiByZW5kZXJpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0TWFzazogZnVuY3Rpb24gKG1hc2spXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5tYXNrID0gbWFzaztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xlYXJzIHRoZSBtYXNrIHRoYXQgdGhpcyBHYW1lIE9iamVjdCB3YXMgdXNpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5NYXNrI2NsZWFyTWFza1xyXG4gICAgICogQHNpbmNlIDMuNi4yXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZGVzdHJveU1hc2s9ZmFsc2VdIC0gRGVzdHJveSB0aGUgbWFzayBiZWZvcmUgY2xlYXJpbmcgaXQ/XHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgY2xlYXJNYXNrOiBmdW5jdGlvbiAoZGVzdHJveU1hc2spXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGRlc3Ryb3lNYXNrID09PSB1bmRlZmluZWQpIHsgZGVzdHJveU1hc2sgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICBpZiAoZGVzdHJveU1hc2sgJiYgdGhpcy5tYXNrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tYXNrLmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWFzayA9IG51bGw7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBCaXRtYXAgTWFzay4gVGhpcyBtYXNrIGNhbiBiZSB1c2VkIGJ5IGFueSBHYW1lIE9iamVjdCxcclxuICAgICAqIGluY2x1ZGluZyB0aGlzIG9uZS5cclxuICAgICAqXHJcbiAgICAgKiBUbyBjcmVhdGUgdGhlIG1hc2sgeW91IG5lZWQgdG8gcGFzcyBpbiBhIHJlZmVyZW5jZSB0byBhIHJlbmRlcmFibGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBBIHJlbmRlcmFibGUgR2FtZSBPYmplY3QgaXMgb25lIHRoYXQgdXNlcyBhIHRleHR1cmUgdG8gcmVuZGVyIHdpdGgsIHN1Y2ggYXMgYW5cclxuICAgICAqIEltYWdlLCBTcHJpdGUsIFJlbmRlciBUZXh0dXJlIG9yIEJpdG1hcFRleHQuXHJcbiAgICAgKlxyXG4gICAgICogSWYgeW91IGRvIG5vdCBwcm92aWRlIGEgcmVuZGVyYWJsZSBvYmplY3QsIGFuZCB0aGlzIEdhbWUgT2JqZWN0IGhhcyBhIHRleHR1cmUsXHJcbiAgICAgKiBpdCB3aWxsIHVzZSBpdHNlbGYgYXMgdGhlIG9iamVjdC4gVGhpcyBtZWFucyB5b3UgY2FuIGNhbGwgdGhpcyBtZXRob2QgdG8gY3JlYXRlXHJcbiAgICAgKiBhIEJpdG1hcCBNYXNrIGZyb20gYW55IHJlbmRlcmFibGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5NYXNrI2NyZWF0ZUJpdG1hcE1hc2tcclxuICAgICAqIEBzaW5jZSAzLjYuMlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBbcmVuZGVyYWJsZV0gLSBBIHJlbmRlcmFibGUgR2FtZSBPYmplY3QgdGhhdCB1c2VzIGEgdGV4dHVyZSwgc3VjaCBhcyBhIFNwcml0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuRGlzcGxheS5NYXNrcy5CaXRtYXBNYXNrfSBUaGlzIEJpdG1hcCBNYXNrIHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUJpdG1hcE1hc2s6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChyZW5kZXJhYmxlID09PSB1bmRlZmluZWQgJiYgKHRoaXMudGV4dHVyZSB8fCB0aGlzLnNoYWRlcikpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC10aGlzXHJcbiAgICAgICAgICAgIHJlbmRlcmFibGUgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBCaXRtYXBNYXNrKHRoaXMuc2NlbmUsIHJlbmRlcmFibGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBHZW9tZXRyeSBNYXNrLiBUaGlzIG1hc2sgY2FuIGJlIHVzZWQgYnkgYW55IEdhbWUgT2JqZWN0LFxyXG4gICAgICogaW5jbHVkaW5nIHRoaXMgb25lLlxyXG4gICAgICpcclxuICAgICAqIFRvIGNyZWF0ZSB0aGUgbWFzayB5b3UgbmVlZCB0byBwYXNzIGluIGEgcmVmZXJlbmNlIHRvIGEgR3JhcGhpY3MgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogSWYgeW91IGRvIG5vdCBwcm92aWRlIGEgZ3JhcGhpY3Mgb2JqZWN0LCBhbmQgdGhpcyBHYW1lIE9iamVjdCBpcyBhbiBpbnN0YW5jZVxyXG4gICAgICogb2YgYSBHcmFwaGljcyBvYmplY3QsIHRoZW4gaXQgd2lsbCB1c2UgaXRzZWxmIHRvIGNyZWF0ZSB0aGUgbWFzay5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBtZWFucyB5b3UgY2FuIGNhbGwgdGhpcyBtZXRob2QgdG8gY3JlYXRlIGEgR2VvbWV0cnkgTWFzayBmcm9tIGFueSBHcmFwaGljcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk1hc2sjY3JlYXRlR2VvbWV0cnlNYXNrXHJcbiAgICAgKiBAc2luY2UgMy42LjJcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFtncmFwaGljc10gLSBBIEdyYXBoaWNzIEdhbWUgT2JqZWN0LiBUaGUgZ2VvbWV0cnkgd2l0aGluIGl0IHdpbGwgYmUgdXNlZCBhcyB0aGUgbWFzay5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuRGlzcGxheS5NYXNrcy5HZW9tZXRyeU1hc2t9IFRoaXMgR2VvbWV0cnkgTWFzayB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gICAgICovXHJcbiAgICBjcmVhdGVHZW9tZXRyeU1hc2s6IGZ1bmN0aW9uIChncmFwaGljcylcclxuICAgIHtcclxuICAgICAgICBpZiAoZ3JhcGhpY3MgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnR5cGUgPT09ICdHcmFwaGljcycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC10aGlzXHJcbiAgICAgICAgICAgIGdyYXBoaWNzID0gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgR2VvbWV0cnlNYXNrKHRoaXMuc2NlbmUsIGdyYXBoaWNzKTtcclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE1hc2s7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Mask.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/components/Origin.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/components/Origin.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods used for getting and setting the origin of a Game Object.\r\n * Values are normalized, given in the range 0 to 1.\r\n * Display values contain the calculated pixel values.\r\n * Should be applied as a mixin and not used directly.\r\n *\r\n * @namespace Phaser.GameObjects.Components.Origin\r\n * @since 3.0.0\r\n */\r\n\r\nvar Origin = {\r\n\r\n /**\r\n * A property indicating that a Game Object has this component.\r\n *\r\n * @name Phaser.GameObjects.Components.Origin#_originComponent\r\n * @type {boolean}\r\n * @private\r\n * @default true\r\n * @since 3.2.0\r\n */\r\n _originComponent: true,\r\n\r\n /**\r\n * The horizontal origin of this Game Object.\r\n * The origin maps the relationship between the size and position of the Game Object.\r\n * The default value is 0.5, meaning all Game Objects are positioned based on their center.\r\n * Setting the value to 0 means the position now relates to the left of the Game Object.\r\n *\r\n * @name Phaser.GameObjects.Components.Origin#originX\r\n * @type {number}\r\n * @default 0.5\r\n * @since 3.0.0\r\n */\r\n originX: 0.5,\r\n\r\n /**\r\n * The vertical origin of this Game Object.\r\n * The origin maps the relationship between the size and position of the Game Object.\r\n * The default value is 0.5, meaning all Game Objects are positioned based on their center.\r\n * Setting the value to 0 means the position now relates to the top of the Game Object.\r\n *\r\n * @name Phaser.GameObjects.Components.Origin#originY\r\n * @type {number}\r\n * @default 0.5\r\n * @since 3.0.0\r\n */\r\n originY: 0.5,\r\n\r\n // private + read only\r\n _displayOriginX: 0,\r\n _displayOriginY: 0,\r\n\r\n /**\r\n * The horizontal display origin of this Game Object.\r\n * The origin is a normalized value between 0 and 1.\r\n * The displayOrigin is a pixel value, based on the size of the Game Object combined with the origin.\r\n *\r\n * @name Phaser.GameObjects.Components.Origin#displayOriginX\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n displayOriginX: {\r\n\r\n get: function ()\r\n {\r\n return this._displayOriginX;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._displayOriginX = value;\r\n this.originX = value / this.width;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The vertical display origin of this Game Object.\r\n * The origin is a normalized value between 0 and 1.\r\n * The displayOrigin is a pixel value, based on the size of the Game Object combined with the origin.\r\n *\r\n * @name Phaser.GameObjects.Components.Origin#displayOriginY\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n displayOriginY: {\r\n\r\n get: function ()\r\n {\r\n return this._displayOriginY;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._displayOriginY = value;\r\n this.originY = value / this.height;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Sets the origin of this Game Object.\r\n *\r\n * The values are given in the range 0 to 1.\r\n *\r\n * @method Phaser.GameObjects.Components.Origin#setOrigin\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x=0.5] - The horizontal origin value.\r\n * @param {number} [y=x] - The vertical origin value. If not defined it will be set to the value of `x`.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setOrigin: function (x, y)\r\n {\r\n if (x === undefined) { x = 0.5; }\r\n if (y === undefined) { y = x; }\r\n\r\n this.originX = x;\r\n this.originY = y;\r\n\r\n return this.updateDisplayOrigin();\r\n },\r\n\r\n /**\r\n * Sets the origin of this Game Object based on the Pivot values in its Frame.\r\n *\r\n * @method Phaser.GameObjects.Components.Origin#setOriginFromFrame\r\n * @since 3.0.0\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setOriginFromFrame: function ()\r\n {\r\n if (!this.frame || !this.frame.customPivot)\r\n {\r\n return this.setOrigin();\r\n }\r\n else\r\n {\r\n this.originX = this.frame.pivotX;\r\n this.originY = this.frame.pivotY;\r\n }\r\n\r\n return this.updateDisplayOrigin();\r\n },\r\n\r\n /**\r\n * Sets the display origin of this Game Object.\r\n * The difference between this and setting the origin is that you can use pixel values for setting the display origin.\r\n *\r\n * @method Phaser.GameObjects.Components.Origin#setDisplayOrigin\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x=0] - The horizontal display origin value.\r\n * @param {number} [y=x] - The vertical display origin value. If not defined it will be set to the value of `x`.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setDisplayOrigin: function (x, y)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = x; }\r\n\r\n this.displayOriginX = x;\r\n this.displayOriginY = y;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Updates the Display Origin cached values internally stored on this Game Object.\r\n * You don't usually call this directly, but it is exposed for edge-cases where you may.\r\n *\r\n * @method Phaser.GameObjects.Components.Origin#updateDisplayOrigin\r\n * @since 3.0.0\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n updateDisplayOrigin: function ()\r\n {\r\n this._displayOriginX = this.originX * this.width;\r\n this._displayOriginY = this.originY * this.height;\r\n\r\n return this;\r\n }\r\n\r\n};\r\n\r\nmodule.exports = Origin;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL09yaWdpbi5qcz9iNDY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLFNBQVM7QUFDdkMsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvY29tcG9uZW50cy9PcmlnaW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBQcm92aWRlcyBtZXRob2RzIHVzZWQgZm9yIGdldHRpbmcgYW5kIHNldHRpbmcgdGhlIG9yaWdpbiBvZiBhIEdhbWUgT2JqZWN0LlxyXG4gKiBWYWx1ZXMgYXJlIG5vcm1hbGl6ZWQsIGdpdmVuIGluIHRoZSByYW5nZSAwIHRvIDEuXHJcbiAqIERpc3BsYXkgdmFsdWVzIGNvbnRhaW4gdGhlIGNhbGN1bGF0ZWQgcGl4ZWwgdmFsdWVzLlxyXG4gKiBTaG91bGQgYmUgYXBwbGllZCBhcyBhIG1peGluIGFuZCBub3QgdXNlZCBkaXJlY3RseS5cclxuICpcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5PcmlnaW5cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5cclxudmFyIE9yaWdpbiA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgcHJvcGVydHkgaW5kaWNhdGluZyB0aGF0IGEgR2FtZSBPYmplY3QgaGFzIHRoaXMgY29tcG9uZW50LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk9yaWdpbiNfb3JpZ2luQ29tcG9uZW50XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgKiBAc2luY2UgMy4yLjBcclxuICAgICAqL1xyXG4gICAgX29yaWdpbkNvbXBvbmVudDogdHJ1ZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBob3Jpem9udGFsIG9yaWdpbiBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogVGhlIG9yaWdpbiBtYXBzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgc2l6ZSBhbmQgcG9zaXRpb24gb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgMC41LCBtZWFuaW5nIGFsbCBHYW1lIE9iamVjdHMgYXJlIHBvc2l0aW9uZWQgYmFzZWQgb24gdGhlaXIgY2VudGVyLlxyXG4gICAgICogU2V0dGluZyB0aGUgdmFsdWUgdG8gMCBtZWFucyB0aGUgcG9zaXRpb24gbm93IHJlbGF0ZXMgdG8gdGhlIGxlZnQgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk9yaWdpbiNvcmlnaW5YXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGRlZmF1bHQgMC41XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgb3JpZ2luWDogMC41LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHZlcnRpY2FsIG9yaWdpbiBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogVGhlIG9yaWdpbiBtYXBzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgc2l6ZSBhbmQgcG9zaXRpb24gb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgMC41LCBtZWFuaW5nIGFsbCBHYW1lIE9iamVjdHMgYXJlIHBvc2l0aW9uZWQgYmFzZWQgb24gdGhlaXIgY2VudGVyLlxyXG4gICAgICogU2V0dGluZyB0aGUgdmFsdWUgdG8gMCBtZWFucyB0aGUgcG9zaXRpb24gbm93IHJlbGF0ZXMgdG8gdGhlIHRvcCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuT3JpZ2luI29yaWdpbllcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCAwLjVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBvcmlnaW5ZOiAwLjUsXHJcblxyXG4gICAgLy8gIHByaXZhdGUgKyByZWFkIG9ubHlcclxuICAgIF9kaXNwbGF5T3JpZ2luWDogMCxcclxuICAgIF9kaXNwbGF5T3JpZ2luWTogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBob3Jpem9udGFsIGRpc3BsYXkgb3JpZ2luIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBUaGUgb3JpZ2luIGlzIGEgbm9ybWFsaXplZCB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAgICAgKiBUaGUgZGlzcGxheU9yaWdpbiBpcyBhIHBpeGVsIHZhbHVlLCBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgR2FtZSBPYmplY3QgY29tYmluZWQgd2l0aCB0aGUgb3JpZ2luLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk9yaWdpbiNkaXNwbGF5T3JpZ2luWFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkaXNwbGF5T3JpZ2luWDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheU9yaWdpblg7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9kaXNwbGF5T3JpZ2luWCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm9yaWdpblggPSB2YWx1ZSAvIHRoaXMud2lkdGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdmVydGljYWwgZGlzcGxheSBvcmlnaW4gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFRoZSBvcmlnaW4gaXMgYSBub3JtYWxpemVkIHZhbHVlIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqIFRoZSBkaXNwbGF5T3JpZ2luIGlzIGEgcGl4ZWwgdmFsdWUsIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSBHYW1lIE9iamVjdCBjb21iaW5lZCB3aXRoIHRoZSBvcmlnaW4uXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuT3JpZ2luI2Rpc3BsYXlPcmlnaW5ZXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRpc3BsYXlPcmlnaW5ZOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5T3JpZ2luWTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Rpc3BsYXlPcmlnaW5ZID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub3JpZ2luWSA9IHZhbHVlIC8gdGhpcy5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBvcmlnaW4gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgdmFsdWVzIGFyZSBnaXZlbiBpbiB0aGUgcmFuZ2UgMCB0byAxLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuT3JpZ2luI3NldE9yaWdpblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4PTAuNV0gLSBUaGUgaG9yaXpvbnRhbCBvcmlnaW4gdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9eF0gLSBUaGUgdmVydGljYWwgb3JpZ2luIHZhbHVlLiBJZiBub3QgZGVmaW5lZCBpdCB3aWxsIGJlIHNldCB0byB0aGUgdmFsdWUgb2YgYHhgLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldE9yaWdpbjogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMC41OyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0geDsgfVxyXG5cclxuICAgICAgICB0aGlzLm9yaWdpblggPSB4O1xyXG4gICAgICAgIHRoaXMub3JpZ2luWSA9IHk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZURpc3BsYXlPcmlnaW4oKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBvcmlnaW4gb2YgdGhpcyBHYW1lIE9iamVjdCBiYXNlZCBvbiB0aGUgUGl2b3QgdmFsdWVzIGluIGl0cyBGcmFtZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk9yaWdpbiNzZXRPcmlnaW5Gcm9tRnJhbWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldE9yaWdpbkZyb21GcmFtZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuZnJhbWUgfHwgIXRoaXMuZnJhbWUuY3VzdG9tUGl2b3QpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRPcmlnaW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5vcmlnaW5YID0gdGhpcy5mcmFtZS5waXZvdFg7XHJcbiAgICAgICAgICAgIHRoaXMub3JpZ2luWSA9IHRoaXMuZnJhbWUucGl2b3RZO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlRGlzcGxheU9yaWdpbigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGRpc3BsYXkgb3JpZ2luIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgYW5kIHNldHRpbmcgdGhlIG9yaWdpbiBpcyB0aGF0IHlvdSBjYW4gdXNlIHBpeGVsIHZhbHVlcyBmb3Igc2V0dGluZyB0aGUgZGlzcGxheSBvcmlnaW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5PcmlnaW4jc2V0RGlzcGxheU9yaWdpblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgZGlzcGxheSBvcmlnaW4gdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9eF0gLSBUaGUgdmVydGljYWwgZGlzcGxheSBvcmlnaW4gdmFsdWUuIElmIG5vdCBkZWZpbmVkIGl0IHdpbGwgYmUgc2V0IHRvIHRoZSB2YWx1ZSBvZiBgeGAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0RGlzcGxheU9yaWdpbjogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IHg7IH1cclxuXHJcbiAgICAgICAgdGhpcy5kaXNwbGF5T3JpZ2luWCA9IHg7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5T3JpZ2luWSA9IHk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIERpc3BsYXkgT3JpZ2luIGNhY2hlZCB2YWx1ZXMgaW50ZXJuYWxseSBzdG9yZWQgb24gdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFlvdSBkb24ndCB1c3VhbGx5IGNhbGwgdGhpcyBkaXJlY3RseSwgYnV0IGl0IGlzIGV4cG9zZWQgZm9yIGVkZ2UtY2FzZXMgd2hlcmUgeW91IG1heS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk9yaWdpbiN1cGRhdGVEaXNwbGF5T3JpZ2luXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVEaXNwbGF5T3JpZ2luOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX2Rpc3BsYXlPcmlnaW5YID0gdGhpcy5vcmlnaW5YICogdGhpcy53aWR0aDtcclxuICAgICAgICB0aGlzLl9kaXNwbGF5T3JpZ2luWSA9IHRoaXMub3JpZ2luWSAqIHRoaXMuaGVpZ2h0O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE9yaWdpbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Origin.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/components/PathFollower.js":
/*!************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/components/PathFollower.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar DegToRad = __webpack_require__(/*! ../../math/DegToRad */ \"./node_modules/phaser/src/math/DegToRad.js\");\r\nvar GetBoolean = __webpack_require__(/*! ../../tweens/builders/GetBoolean */ \"./node_modules/phaser/src/tweens/builders/GetBoolean.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar TWEEN_CONST = __webpack_require__(/*! ../../tweens/tween/const */ \"./node_modules/phaser/src/tweens/tween/const.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * Provides methods used for managing a Game Object following a Path.\r\n * Should be applied as a mixin and not used directly.\r\n *\r\n * @namespace Phaser.GameObjects.Components.PathFollower\r\n * @since 3.17.0\r\n */\r\n\r\nvar PathFollower = {\r\n\r\n /**\r\n * The Path this PathFollower is following. It can only follow one Path at a time.\r\n *\r\n * @name Phaser.GameObjects.Components.PathFollower#path\r\n * @type {Phaser.Curves.Path}\r\n * @since 3.0.0\r\n */\r\n path: null,\r\n\r\n /**\r\n * Should the PathFollower automatically rotate to point in the direction of the Path?\r\n *\r\n * @name Phaser.GameObjects.Components.PathFollower#rotateToPath\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n rotateToPath: false,\r\n\r\n /**\r\n * If the PathFollower is rotating to match the Path (@see Phaser.GameObjects.PathFollower#rotateToPath)\r\n * this value is added to the rotation value. This allows you to rotate objects to a path but control\r\n * the angle of the rotation as well.\r\n *\r\n * @name Phaser.GameObjects.PathFollower#pathRotationOffset\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n pathRotationOffset: 0,\r\n\r\n /**\r\n * An additional vector to add to the PathFollowers position, allowing you to offset it from the\r\n * Path coordinates.\r\n *\r\n * @name Phaser.GameObjects.PathFollower#pathOffset\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.0.0\r\n */\r\n pathOffset: null,\r\n\r\n /**\r\n * A Vector2 that stores the current point of the path the follower is on.\r\n *\r\n * @name Phaser.GameObjects.PathFollower#pathVector\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.0.0\r\n */\r\n pathVector: null,\r\n\r\n /**\r\n * The Tween used for following the Path.\r\n *\r\n * @name Phaser.GameObjects.PathFollower#pathTween\r\n * @type {Phaser.Tweens.Tween}\r\n * @since 3.0.0\r\n */\r\n pathTween: null,\r\n\r\n /**\r\n * Settings for the PathFollower.\r\n *\r\n * @name Phaser.GameObjects.PathFollower#pathConfig\r\n * @type {?Phaser.Types.GameObjects.PathFollower.PathConfig}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n pathConfig: null,\r\n\r\n /**\r\n * Records the direction of the follower so it can change direction.\r\n *\r\n * @name Phaser.GameObjects.PathFollower#_prevDirection\r\n * @type {integer}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n _prevDirection: TWEEN_CONST.PLAYING_FORWARD,\r\n\r\n /**\r\n * Set the Path that this PathFollower should follow.\r\n *\r\n * Optionally accepts {@link Phaser.Types.GameObjects.PathFollower.PathConfig} settings.\r\n *\r\n * @method Phaser.GameObjects.Components.PathFollower#setPath\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Curves.Path} path - The Path this PathFollower is following. It can only follow one Path at a time.\r\n * @param {(number|Phaser.Types.GameObjects.PathFollower.PathConfig|Phaser.Types.Tweens.NumberTweenBuilderConfig)} [config] - Settings for the PathFollower.\r\n *\r\n * @return {Phaser.GameObjects.PathFollower} This Game Object.\r\n */\r\n setPath: function (path, config)\r\n {\r\n if (config === undefined) { config = this.pathConfig; }\r\n\r\n var tween = this.pathTween;\r\n\r\n if (tween && tween.isPlaying())\r\n {\r\n tween.stop();\r\n }\r\n\r\n this.path = path;\r\n\r\n if (config)\r\n {\r\n this.startFollow(config);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set whether the PathFollower should automatically rotate to point in the direction of the Path.\r\n *\r\n * @method Phaser.GameObjects.Components.PathFollower#setRotateToPath\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} value - Whether the PathFollower should automatically rotate to point in the direction of the Path.\r\n * @param {number} [offset=0] - Rotation offset in degrees.\r\n *\r\n * @return {Phaser.GameObjects.PathFollower} This Game Object.\r\n */\r\n setRotateToPath: function (value, offset)\r\n {\r\n if (offset === undefined) { offset = 0; }\r\n\r\n this.rotateToPath = value;\r\n\r\n this.pathRotationOffset = offset;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Is this PathFollower actively following a Path or not?\r\n *\r\n * To be considered as `isFollowing` it must be currently moving on a Path, and not paused.\r\n *\r\n * @method Phaser.GameObjects.Components.PathFollower#isFollowing\r\n * @since 3.0.0\r\n *\r\n * @return {boolean} `true` is this PathFollower is actively following a Path, otherwise `false`.\r\n */\r\n isFollowing: function ()\r\n {\r\n var tween = this.pathTween;\r\n\r\n return (tween && tween.isPlaying());\r\n },\r\n\r\n /**\r\n * Starts this PathFollower following its given Path.\r\n *\r\n * @method Phaser.GameObjects.Components.PathFollower#startFollow\r\n * @since 3.3.0\r\n *\r\n * @param {(number|Phaser.Types.GameObjects.PathFollower.PathConfig|Phaser.Types.Tweens.NumberTweenBuilderConfig)} [config={}] - The duration of the follow, or a PathFollower config object.\r\n * @param {number} [startAt=0] - Optional start position of the follow, between 0 and 1.\r\n *\r\n * @return {Phaser.GameObjects.PathFollower} This Game Object.\r\n */\r\n startFollow: function (config, startAt)\r\n {\r\n if (config === undefined) { config = {}; }\r\n if (startAt === undefined) { startAt = 0; }\r\n\r\n var tween = this.pathTween;\r\n\r\n if (tween && tween.isPlaying())\r\n {\r\n tween.stop();\r\n }\r\n\r\n if (typeof config === 'number')\r\n {\r\n config = { duration: config };\r\n }\r\n\r\n // Override in case they've been specified in the config\r\n config.from = GetValue(config, 'from', 0);\r\n config.to = GetValue(config, 'to', 1);\r\n\r\n var positionOnPath = GetBoolean(config, 'positionOnPath', false);\r\n\r\n this.rotateToPath = GetBoolean(config, 'rotateToPath', false);\r\n this.pathRotationOffset = GetValue(config, 'rotationOffset', 0);\r\n\r\n // This works, but it's not an ideal way of doing it as the follower jumps position\r\n var seek = GetValue(config, 'startAt', startAt);\r\n\r\n if (seek)\r\n {\r\n config.onStart = function (tween)\r\n {\r\n var tweenData = tween.data[0];\r\n tweenData.progress = seek;\r\n tweenData.elapsed = tweenData.duration * seek;\r\n var v = tweenData.ease(tweenData.progress);\r\n tweenData.current = tweenData.start + ((tweenData.end - tweenData.start) * v);\r\n tweenData.target[tweenData.key] = tweenData.current;\r\n };\r\n }\r\n\r\n if (!this.pathOffset)\r\n {\r\n this.pathOffset = new Vector2(this.x, this.y);\r\n }\r\n\r\n if (!this.pathVector)\r\n {\r\n this.pathVector = new Vector2();\r\n }\r\n\r\n this.pathTween = this.scene.sys.tweens.addCounter(config);\r\n\r\n // The starting point of the path, relative to this follower\r\n this.path.getStartPoint(this.pathOffset);\r\n\r\n if (positionOnPath)\r\n {\r\n this.x = this.pathOffset.x;\r\n this.y = this.pathOffset.y;\r\n }\r\n\r\n this.pathOffset.x = this.x - this.pathOffset.x;\r\n this.pathOffset.y = this.y - this.pathOffset.y;\r\n\r\n this._prevDirection = TWEEN_CONST.PLAYING_FORWARD;\r\n\r\n if (this.rotateToPath)\r\n {\r\n // Set the rotation now (in case the tween has a delay on it, etc)\r\n var nextPoint = this.path.getPoint(0.1);\r\n\r\n this.rotation = Math.atan2(nextPoint.y - this.y, nextPoint.x - this.x) + DegToRad(this.pathRotationOffset);\r\n }\r\n\r\n this.pathConfig = config;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Pauses this PathFollower. It will still continue to render, but it will remain motionless at the\r\n * point on the Path at which you paused it.\r\n *\r\n * @method Phaser.GameObjects.Components.PathFollower#pauseFollow\r\n * @since 3.3.0\r\n *\r\n * @return {Phaser.GameObjects.PathFollower} This Game Object.\r\n */\r\n pauseFollow: function ()\r\n {\r\n var tween = this.pathTween;\r\n\r\n if (tween && tween.isPlaying())\r\n {\r\n tween.pause();\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Resumes a previously paused PathFollower.\r\n *\r\n * If the PathFollower was not paused this has no effect.\r\n *\r\n * @method Phaser.GameObjects.Components.PathFollower#resumeFollow\r\n * @since 3.3.0\r\n *\r\n * @return {Phaser.GameObjects.PathFollower} This Game Object.\r\n */\r\n resumeFollow: function ()\r\n {\r\n var tween = this.pathTween;\r\n\r\n if (tween && tween.isPaused())\r\n {\r\n tween.resume();\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Stops this PathFollower from following the path any longer.\r\n *\r\n * This will invoke any 'stop' conditions that may exist on the Path, or for the follower.\r\n *\r\n * @method Phaser.GameObjects.Components.PathFollower#stopFollow\r\n * @since 3.3.0\r\n *\r\n * @return {Phaser.GameObjects.PathFollower} This Game Object.\r\n */\r\n stopFollow: function ()\r\n {\r\n var tween = this.pathTween;\r\n\r\n if (tween && tween.isPlaying())\r\n {\r\n tween.stop();\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Internal update handler that advances this PathFollower along the path.\r\n *\r\n * Called automatically by the Scene step, should not typically be called directly.\r\n *\r\n * @method Phaser.GameObjects.Components.PathFollower#pathUpdate\r\n * @since 3.17.0\r\n */\r\n pathUpdate: function ()\r\n {\r\n var tween = this.pathTween;\r\n\r\n if (tween)\r\n {\r\n var tweenData = tween.data[0];\r\n\r\n if (tweenData.state !== TWEEN_CONST.PLAYING_FORWARD && tweenData.state !== TWEEN_CONST.PLAYING_BACKWARD)\r\n {\r\n // If delayed, etc then bail out\r\n return;\r\n }\r\n\r\n var pathVector = this.pathVector;\r\n\r\n this.path.getPoint(tween.getValue(), pathVector);\r\n\r\n pathVector.add(this.pathOffset);\r\n\r\n var oldX = this.x;\r\n var oldY = this.y;\r\n\r\n this.setPosition(pathVector.x, pathVector.y);\r\n\r\n var speedX = this.x - oldX;\r\n var speedY = this.y - oldY;\r\n\r\n if (speedX === 0 && speedY === 0)\r\n {\r\n // Bail out early\r\n return;\r\n }\r\n\r\n if (tweenData.state !== this._prevDirection)\r\n {\r\n // We've changed direction, so don't do a rotate this frame\r\n this._prevDirection = tweenData.state;\r\n\r\n return;\r\n }\r\n\r\n if (this.rotateToPath)\r\n {\r\n this.rotation = Math.atan2(speedY, speedX) + DegToRad(this.pathRotationOffset);\r\n }\r\n }\r\n }\r\n\r\n};\r\n\r\nmodule.exports = PathFollower;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1BhdGhGb2xsb3dlci5qcz9lYmY0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxlQUFlLG1CQUFPLENBQUMsdUVBQXFCO0FBQzVDLGlCQUFpQixtQkFBTyxDQUFDLGlHQUFrQztBQUMzRCxlQUFlLG1CQUFPLENBQUMsdUZBQTZCO0FBQ3BELGtCQUFrQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNwRCxjQUFjLG1CQUFPLENBQUMscUVBQW9COztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLHVEQUF1RDtBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQW1CO0FBQ2xDLGVBQWUsdUdBQXVHO0FBQ3RIO0FBQ0EsZ0JBQWdCLGdDQUFnQztBQUNoRDtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsMEJBQTBCOztBQUU3RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixnQ0FBZ0M7QUFDaEQ7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLFlBQVk7O0FBRS9DOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsdUdBQXVHLFdBQVc7QUFDakksZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLGdDQUFnQztBQUNoRDtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsYUFBYTtBQUNoRCxvQ0FBb0MsYUFBYTs7QUFFakQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNCQUFzQjtBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixnQ0FBZ0M7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsZ0NBQWdDO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGdDQUFnQztBQUNoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2NvbXBvbmVudHMvUGF0aEZvbGxvd2VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgRGVnVG9SYWQgPSByZXF1aXJlKCcuLi8uLi9tYXRoL0RlZ1RvUmFkJyk7XHJcbnZhciBHZXRCb29sZWFuID0gcmVxdWlyZSgnLi4vLi4vdHdlZW5zL2J1aWxkZXJzL0dldEJvb2xlYW4nKTtcclxudmFyIEdldFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldFZhbHVlJyk7XHJcbnZhciBUV0VFTl9DT05TVCA9IHJlcXVpcmUoJy4uLy4uL3R3ZWVucy90d2Vlbi9jb25zdCcpO1xyXG52YXIgVmVjdG9yMiA9IHJlcXVpcmUoJy4uLy4uL21hdGgvVmVjdG9yMicpO1xyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgdXNlZCBmb3IgbWFuYWdpbmcgYSBHYW1lIE9iamVjdCBmb2xsb3dpbmcgYSBQYXRoLlxyXG4gKiBTaG91bGQgYmUgYXBwbGllZCBhcyBhIG1peGluIGFuZCBub3QgdXNlZCBkaXJlY3RseS5cclxuICpcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5QYXRoRm9sbG93ZXJcclxuICogQHNpbmNlIDMuMTcuMFxyXG4gKi9cclxuXHJcbnZhciBQYXRoRm9sbG93ZXIgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgUGF0aCB0aGlzIFBhdGhGb2xsb3dlciBpcyBmb2xsb3dpbmcuIEl0IGNhbiBvbmx5IGZvbGxvdyBvbmUgUGF0aCBhdCBhIHRpbWUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGF0aEZvbGxvd2VyI3BhdGhcclxuICAgICAqIEB0eXBlIHtQaGFzZXIuQ3VydmVzLlBhdGh9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgcGF0aDogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3VsZCB0aGUgUGF0aEZvbGxvd2VyIGF1dG9tYXRpY2FsbHkgcm90YXRlIHRvIHBvaW50IGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIFBhdGg/XHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGF0aEZvbGxvd2VyI3JvdGF0ZVRvUGF0aFxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZVRvUGF0aDogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB0aGUgUGF0aEZvbGxvd2VyIGlzIHJvdGF0aW5nIHRvIG1hdGNoIHRoZSBQYXRoIChAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXRoRm9sbG93ZXIjcm90YXRlVG9QYXRoKVxyXG4gICAgICogdGhpcyB2YWx1ZSBpcyBhZGRlZCB0byB0aGUgcm90YXRpb24gdmFsdWUuIFRoaXMgYWxsb3dzIHlvdSB0byByb3RhdGUgb2JqZWN0cyB0byBhIHBhdGggYnV0IGNvbnRyb2xcclxuICAgICAqIHRoZSBhbmdsZSBvZiB0aGUgcm90YXRpb24gYXMgd2VsbC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGF0aEZvbGxvd2VyI3BhdGhSb3RhdGlvbk9mZnNldFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBwYXRoUm90YXRpb25PZmZzZXQ6IDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBhZGRpdGlvbmFsIHZlY3RvciB0byBhZGQgdG8gdGhlIFBhdGhGb2xsb3dlcnMgcG9zaXRpb24sIGFsbG93aW5nIHlvdSB0byBvZmZzZXQgaXQgZnJvbSB0aGVcclxuICAgICAqIFBhdGggY29vcmRpbmF0ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhdGhGb2xsb3dlciNwYXRoT2Zmc2V0XHJcbiAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBwYXRoT2Zmc2V0OiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBWZWN0b3IyIHRoYXQgc3RvcmVzIHRoZSBjdXJyZW50IHBvaW50IG9mIHRoZSBwYXRoIHRoZSBmb2xsb3dlciBpcyBvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGF0aEZvbGxvd2VyI3BhdGhWZWN0b3JcclxuICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHBhdGhWZWN0b3I6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgVHdlZW4gdXNlZCBmb3IgZm9sbG93aW5nIHRoZSBQYXRoLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXRoRm9sbG93ZXIjcGF0aFR3ZWVuXHJcbiAgICAgKiBAdHlwZSB7UGhhc2VyLlR3ZWVucy5Ud2Vlbn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBwYXRoVHdlZW46IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXR0aW5ncyBmb3IgdGhlIFBhdGhGb2xsb3dlci5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGF0aEZvbGxvd2VyI3BhdGhDb25maWdcclxuICAgICAqIEB0eXBlIHs/UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhdGhGb2xsb3dlci5QYXRoQ29uZmlnfVxyXG4gICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHBhdGhDb25maWc6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWNvcmRzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGZvbGxvd2VyIHNvIGl0IGNhbiBjaGFuZ2UgZGlyZWN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXRoRm9sbG93ZXIjX3ByZXZEaXJlY3Rpb25cclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBfcHJldkRpcmVjdGlvbjogVFdFRU5fQ09OU1QuUExBWUlOR19GT1JXQVJELFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBQYXRoIHRoYXQgdGhpcyBQYXRoRm9sbG93ZXIgc2hvdWxkIGZvbGxvdy5cclxuICAgICAqXHJcbiAgICAgKiBPcHRpb25hbGx5IGFjY2VwdHMge0BsaW5rIFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXRoRm9sbG93ZXIuUGF0aENvbmZpZ30gc2V0dGluZ3MuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5QYXRoRm9sbG93ZXIjc2V0UGF0aFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ3VydmVzLlBhdGh9IHBhdGggLSBUaGUgUGF0aCB0aGlzIFBhdGhGb2xsb3dlciBpcyBmb2xsb3dpbmcuIEl0IGNhbiBvbmx5IGZvbGxvdyBvbmUgUGF0aCBhdCBhIHRpbWUuXHJcbiAgICAgKiBAcGFyYW0geyhudW1iZXJ8UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhdGhGb2xsb3dlci5QYXRoQ29uZmlnfFBoYXNlci5UeXBlcy5Ud2VlbnMuTnVtYmVyVHdlZW5CdWlsZGVyQ29uZmlnKX0gW2NvbmZpZ10gLSBTZXR0aW5ncyBmb3IgdGhlIFBhdGhGb2xsb3dlci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGF0aEZvbGxvd2VyfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRQYXRoOiBmdW5jdGlvbiAocGF0aCwgY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChjb25maWcgPT09IHVuZGVmaW5lZCkgeyBjb25maWcgPSB0aGlzLnBhdGhDb25maWc7IH1cclxuXHJcbiAgICAgICAgdmFyIHR3ZWVuID0gdGhpcy5wYXRoVHdlZW47XHJcblxyXG4gICAgICAgIGlmICh0d2VlbiAmJiB0d2Vlbi5pc1BsYXlpbmcoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHR3ZWVuLnN0b3AoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGF0aCA9IHBhdGg7XHJcblxyXG4gICAgICAgIGlmIChjb25maWcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0Rm9sbG93KGNvbmZpZyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgd2hldGhlciB0aGUgUGF0aEZvbGxvd2VyIHNob3VsZCBhdXRvbWF0aWNhbGx5IHJvdGF0ZSB0byBwb2ludCBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBQYXRoLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGF0aEZvbGxvd2VyI3NldFJvdGF0ZVRvUGF0aFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB2YWx1ZSAtIFdoZXRoZXIgdGhlIFBhdGhGb2xsb3dlciBzaG91bGQgYXV0b21hdGljYWxseSByb3RhdGUgdG8gcG9pbnQgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgUGF0aC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0PTBdIC0gUm90YXRpb24gb2Zmc2V0IGluIGRlZ3JlZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhdGhGb2xsb3dlcn0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Um90YXRlVG9QYXRoOiBmdW5jdGlvbiAodmFsdWUsIG9mZnNldClcclxuICAgIHtcclxuICAgICAgICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0ID0gMDsgfVxyXG5cclxuICAgICAgICB0aGlzLnJvdGF0ZVRvUGF0aCA9IHZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLnBhdGhSb3RhdGlvbk9mZnNldCA9IG9mZnNldDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXMgdGhpcyBQYXRoRm9sbG93ZXIgYWN0aXZlbHkgZm9sbG93aW5nIGEgUGF0aCBvciBub3Q/XHJcbiAgICAgKlxyXG4gICAgICogVG8gYmUgY29uc2lkZXJlZCBhcyBgaXNGb2xsb3dpbmdgIGl0IG11c3QgYmUgY3VycmVudGx5IG1vdmluZyBvbiBhIFBhdGgsIGFuZCBub3QgcGF1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGF0aEZvbGxvd2VyI2lzRm9sbG93aW5nXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaXMgdGhpcyBQYXRoRm9sbG93ZXIgaXMgYWN0aXZlbHkgZm9sbG93aW5nIGEgUGF0aCwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGlzRm9sbG93aW5nOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB0d2VlbiA9IHRoaXMucGF0aFR3ZWVuO1xyXG5cclxuICAgICAgICByZXR1cm4gKHR3ZWVuICYmIHR3ZWVuLmlzUGxheWluZygpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGFydHMgdGhpcyBQYXRoRm9sbG93ZXIgZm9sbG93aW5nIGl0cyBnaXZlbiBQYXRoLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGF0aEZvbGxvd2VyI3N0YXJ0Rm9sbG93XHJcbiAgICAgKiBAc2luY2UgMy4zLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhudW1iZXJ8UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhdGhGb2xsb3dlci5QYXRoQ29uZmlnfFBoYXNlci5UeXBlcy5Ud2VlbnMuTnVtYmVyVHdlZW5CdWlsZGVyQ29uZmlnKX0gW2NvbmZpZz17fV0gLSBUaGUgZHVyYXRpb24gb2YgdGhlIGZvbGxvdywgb3IgYSBQYXRoRm9sbG93ZXIgY29uZmlnIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnRBdD0wXSAtIE9wdGlvbmFsIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBmb2xsb3csIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGF0aEZvbGxvd2VyfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzdGFydEZvbGxvdzogZnVuY3Rpb24gKGNvbmZpZywgc3RhcnRBdClcclxuICAgIHtcclxuICAgICAgICBpZiAoY29uZmlnID09PSB1bmRlZmluZWQpIHsgY29uZmlnID0ge307IH1cclxuICAgICAgICBpZiAoc3RhcnRBdCA9PT0gdW5kZWZpbmVkKSB7IHN0YXJ0QXQgPSAwOyB9XHJcblxyXG4gICAgICAgIHZhciB0d2VlbiA9IHRoaXMucGF0aFR3ZWVuO1xyXG5cclxuICAgICAgICBpZiAodHdlZW4gJiYgdHdlZW4uaXNQbGF5aW5nKCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0d2Vlbi5zdG9wKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25maWcgPSB7IGR1cmF0aW9uOiBjb25maWcgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBPdmVycmlkZSBpbiBjYXNlIHRoZXkndmUgYmVlbiBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ1xyXG4gICAgICAgIGNvbmZpZy5mcm9tID0gR2V0VmFsdWUoY29uZmlnLCAnZnJvbScsIDApO1xyXG4gICAgICAgIGNvbmZpZy50byA9IEdldFZhbHVlKGNvbmZpZywgJ3RvJywgMSk7XHJcblxyXG4gICAgICAgIHZhciBwb3NpdGlvbk9uUGF0aCA9IEdldEJvb2xlYW4oY29uZmlnLCAncG9zaXRpb25PblBhdGgnLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHRoaXMucm90YXRlVG9QYXRoID0gR2V0Qm9vbGVhbihjb25maWcsICdyb3RhdGVUb1BhdGgnLCBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5wYXRoUm90YXRpb25PZmZzZXQgPSBHZXRWYWx1ZShjb25maWcsICdyb3RhdGlvbk9mZnNldCcsIDApO1xyXG5cclxuICAgICAgICAvLyAgVGhpcyB3b3JrcywgYnV0IGl0J3Mgbm90IGFuIGlkZWFsIHdheSBvZiBkb2luZyBpdCBhcyB0aGUgZm9sbG93ZXIganVtcHMgcG9zaXRpb25cclxuICAgICAgICB2YXIgc2VlayA9IEdldFZhbHVlKGNvbmZpZywgJ3N0YXJ0QXQnLCBzdGFydEF0KTtcclxuXHJcbiAgICAgICAgaWYgKHNlZWspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25maWcub25TdGFydCA9IGZ1bmN0aW9uICh0d2VlbilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIHR3ZWVuRGF0YSA9IHR3ZWVuLmRhdGFbMF07XHJcbiAgICAgICAgICAgICAgICB0d2VlbkRhdGEucHJvZ3Jlc3MgPSBzZWVrO1xyXG4gICAgICAgICAgICAgICAgdHdlZW5EYXRhLmVsYXBzZWQgPSB0d2VlbkRhdGEuZHVyYXRpb24gKiBzZWVrO1xyXG4gICAgICAgICAgICAgICAgdmFyIHYgPSB0d2VlbkRhdGEuZWFzZSh0d2VlbkRhdGEucHJvZ3Jlc3MpO1xyXG4gICAgICAgICAgICAgICAgdHdlZW5EYXRhLmN1cnJlbnQgPSB0d2VlbkRhdGEuc3RhcnQgKyAoKHR3ZWVuRGF0YS5lbmQgLSB0d2VlbkRhdGEuc3RhcnQpICogdik7XHJcbiAgICAgICAgICAgICAgICB0d2VlbkRhdGEudGFyZ2V0W3R3ZWVuRGF0YS5rZXldID0gdHdlZW5EYXRhLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMucGF0aE9mZnNldClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGF0aE9mZnNldCA9IG5ldyBWZWN0b3IyKHRoaXMueCwgdGhpcy55KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5wYXRoVmVjdG9yKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wYXRoVmVjdG9yID0gbmV3IFZlY3RvcjIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGF0aFR3ZWVuID0gdGhpcy5zY2VuZS5zeXMudHdlZW5zLmFkZENvdW50ZXIoY29uZmlnKTtcclxuXHJcbiAgICAgICAgLy8gIFRoZSBzdGFydGluZyBwb2ludCBvZiB0aGUgcGF0aCwgcmVsYXRpdmUgdG8gdGhpcyBmb2xsb3dlclxyXG4gICAgICAgIHRoaXMucGF0aC5nZXRTdGFydFBvaW50KHRoaXMucGF0aE9mZnNldCk7XHJcblxyXG4gICAgICAgIGlmIChwb3NpdGlvbk9uUGF0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueCA9IHRoaXMucGF0aE9mZnNldC54O1xyXG4gICAgICAgICAgICB0aGlzLnkgPSB0aGlzLnBhdGhPZmZzZXQueTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGF0aE9mZnNldC54ID0gdGhpcy54IC0gdGhpcy5wYXRoT2Zmc2V0Lng7XHJcbiAgICAgICAgdGhpcy5wYXRoT2Zmc2V0LnkgPSB0aGlzLnkgLSB0aGlzLnBhdGhPZmZzZXQueTtcclxuXHJcbiAgICAgICAgdGhpcy5fcHJldkRpcmVjdGlvbiA9IFRXRUVOX0NPTlNULlBMQVlJTkdfRk9SV0FSRDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucm90YXRlVG9QYXRoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFNldCB0aGUgcm90YXRpb24gbm93IChpbiBjYXNlIHRoZSB0d2VlbiBoYXMgYSBkZWxheSBvbiBpdCwgZXRjKVxyXG4gICAgICAgICAgICB2YXIgbmV4dFBvaW50ID0gdGhpcy5wYXRoLmdldFBvaW50KDAuMSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJvdGF0aW9uID0gTWF0aC5hdGFuMihuZXh0UG9pbnQueSAtIHRoaXMueSwgbmV4dFBvaW50LnggLSB0aGlzLngpICsgRGVnVG9SYWQodGhpcy5wYXRoUm90YXRpb25PZmZzZXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wYXRoQ29uZmlnID0gY29uZmlnO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXVzZXMgdGhpcyBQYXRoRm9sbG93ZXIuIEl0IHdpbGwgc3RpbGwgY29udGludWUgdG8gcmVuZGVyLCBidXQgaXQgd2lsbCByZW1haW4gbW90aW9ubGVzcyBhdCB0aGVcclxuICAgICAqIHBvaW50IG9uIHRoZSBQYXRoIGF0IHdoaWNoIHlvdSBwYXVzZWQgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5QYXRoRm9sbG93ZXIjcGF1c2VGb2xsb3dcclxuICAgICAqIEBzaW5jZSAzLjMuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXRoRm9sbG93ZXJ9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHBhdXNlRm9sbG93OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB0d2VlbiA9IHRoaXMucGF0aFR3ZWVuO1xyXG5cclxuICAgICAgICBpZiAodHdlZW4gJiYgdHdlZW4uaXNQbGF5aW5nKCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0d2Vlbi5wYXVzZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzdW1lcyBhIHByZXZpb3VzbHkgcGF1c2VkIFBhdGhGb2xsb3dlci5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgUGF0aEZvbGxvd2VyIHdhcyBub3QgcGF1c2VkIHRoaXMgaGFzIG5vIGVmZmVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlBhdGhGb2xsb3dlciNyZXN1bWVGb2xsb3dcclxuICAgICAqIEBzaW5jZSAzLjMuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXRoRm9sbG93ZXJ9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlc3VtZUZvbGxvdzogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgdHdlZW4gPSB0aGlzLnBhdGhUd2VlbjtcclxuXHJcbiAgICAgICAgaWYgKHR3ZWVuICYmIHR3ZWVuLmlzUGF1c2VkKCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0d2Vlbi5yZXN1bWUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIHRoaXMgUGF0aEZvbGxvd2VyIGZyb20gZm9sbG93aW5nIHRoZSBwYXRoIGFueSBsb25nZXIuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyB3aWxsIGludm9rZSBhbnkgJ3N0b3AnIGNvbmRpdGlvbnMgdGhhdCBtYXkgZXhpc3Qgb24gdGhlIFBhdGgsIG9yIGZvciB0aGUgZm9sbG93ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5QYXRoRm9sbG93ZXIjc3RvcEZvbGxvd1xyXG4gICAgICogQHNpbmNlIDMuMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhdGhGb2xsb3dlcn0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc3RvcEZvbGxvdzogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgdHdlZW4gPSB0aGlzLnBhdGhUd2VlbjtcclxuXHJcbiAgICAgICAgaWYgKHR3ZWVuICYmIHR3ZWVuLmlzUGxheWluZygpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdHdlZW4uc3RvcCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgdXBkYXRlIGhhbmRsZXIgdGhhdCBhZHZhbmNlcyB0aGlzIFBhdGhGb2xsb3dlciBhbG9uZyB0aGUgcGF0aC5cclxuICAgICAqXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgU2NlbmUgc3RlcCwgc2hvdWxkIG5vdCB0eXBpY2FsbHkgYmUgY2FsbGVkIGRpcmVjdGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGF0aEZvbGxvd2VyI3BhdGhVcGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqL1xyXG4gICAgcGF0aFVwZGF0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgdHdlZW4gPSB0aGlzLnBhdGhUd2VlbjtcclxuXHJcbiAgICAgICAgaWYgKHR3ZWVuKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHR3ZWVuRGF0YSA9IHR3ZWVuLmRhdGFbMF07XHJcblxyXG4gICAgICAgICAgICBpZiAodHdlZW5EYXRhLnN0YXRlICE9PSBUV0VFTl9DT05TVC5QTEFZSU5HX0ZPUldBUkQgJiYgdHdlZW5EYXRhLnN0YXRlICE9PSBUV0VFTl9DT05TVC5QTEFZSU5HX0JBQ0tXQVJEKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgSWYgZGVsYXllZCwgZXRjIHRoZW4gYmFpbCBvdXRcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHBhdGhWZWN0b3IgPSB0aGlzLnBhdGhWZWN0b3I7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBhdGguZ2V0UG9pbnQodHdlZW4uZ2V0VmFsdWUoKSwgcGF0aFZlY3Rvcik7XHJcblxyXG4gICAgICAgICAgICBwYXRoVmVjdG9yLmFkZCh0aGlzLnBhdGhPZmZzZXQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIG9sZFggPSB0aGlzLng7XHJcbiAgICAgICAgICAgIHZhciBvbGRZID0gdGhpcy55O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbihwYXRoVmVjdG9yLngsIHBhdGhWZWN0b3IueSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgc3BlZWRYID0gdGhpcy54IC0gb2xkWDtcclxuICAgICAgICAgICAgdmFyIHNwZWVkWSA9IHRoaXMueSAtIG9sZFk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc3BlZWRYID09PSAwICYmIHNwZWVkWSA9PT0gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIEJhaWwgb3V0IGVhcmx5XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0d2VlbkRhdGEuc3RhdGUgIT09IHRoaXMuX3ByZXZEaXJlY3Rpb24pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBXZSd2ZSBjaGFuZ2VkIGRpcmVjdGlvbiwgc28gZG9uJ3QgZG8gYSByb3RhdGUgdGhpcyBmcmFtZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJldkRpcmVjdGlvbiA9IHR3ZWVuRGF0YS5zdGF0ZTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJvdGF0ZVRvUGF0aClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGlvbiA9IE1hdGguYXRhbjIoc3BlZWRZLCBzcGVlZFgpICsgRGVnVG9SYWQodGhpcy5wYXRoUm90YXRpb25PZmZzZXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGF0aEZvbGxvd2VyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/PathFollower.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/components/Pipeline.js":
/*!********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/components/Pipeline.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods used for setting the WebGL rendering pipeline of a Game Object.\r\n *\r\n * @namespace Phaser.GameObjects.Components.Pipeline\r\n * @webglOnly\r\n * @since 3.0.0\r\n */\r\n\r\nvar Pipeline = {\r\n\r\n /**\r\n * The initial WebGL pipeline of this Game Object.\r\n *\r\n * @name Phaser.GameObjects.Components.Pipeline#defaultPipeline\r\n * @type {Phaser.Renderer.WebGL.WebGLPipeline}\r\n * @default null\r\n * @webglOnly\r\n * @since 3.0.0\r\n */\r\n defaultPipeline: null,\r\n\r\n /**\r\n * The current WebGL pipeline of this Game Object.\r\n *\r\n * @name Phaser.GameObjects.Components.Pipeline#pipeline\r\n * @type {Phaser.Renderer.WebGL.WebGLPipeline}\r\n * @default null\r\n * @webglOnly\r\n * @since 3.0.0\r\n */\r\n pipeline: null,\r\n\r\n /**\r\n * Sets the initial WebGL Pipeline of this Game Object.\r\n * This should only be called during the instantiation of the Game Object.\r\n *\r\n * @method Phaser.GameObjects.Components.Pipeline#initPipeline\r\n * @webglOnly\r\n * @since 3.0.0\r\n *\r\n * @param {string} [pipelineName=TextureTintPipeline] - The name of the pipeline to set on this Game Object. Defaults to the Texture Tint Pipeline.\r\n *\r\n * @return {boolean} `true` if the pipeline was set successfully, otherwise `false`.\r\n */\r\n initPipeline: function (pipelineName)\r\n {\r\n if (pipelineName === undefined) { pipelineName = 'TextureTintPipeline'; }\r\n\r\n var renderer = this.scene.sys.game.renderer;\r\n\r\n if (renderer && renderer.gl && renderer.hasPipeline(pipelineName))\r\n {\r\n this.defaultPipeline = renderer.getPipeline(pipelineName);\r\n this.pipeline = this.defaultPipeline;\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n\r\n /**\r\n * Sets the active WebGL Pipeline of this Game Object.\r\n *\r\n * @method Phaser.GameObjects.Components.Pipeline#setPipeline\r\n * @webglOnly\r\n * @since 3.0.0\r\n *\r\n * @param {string} pipelineName - The name of the pipeline to set on this Game Object.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setPipeline: function (pipelineName)\r\n {\r\n var renderer = this.scene.sys.game.renderer;\r\n\r\n if (renderer && renderer.gl && renderer.hasPipeline(pipelineName))\r\n {\r\n this.pipeline = renderer.getPipeline(pipelineName);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Resets the WebGL Pipeline of this Game Object back to the default it was created with.\r\n *\r\n * @method Phaser.GameObjects.Components.Pipeline#resetPipeline\r\n * @webglOnly\r\n * @since 3.0.0\r\n *\r\n * @return {boolean} `true` if the pipeline was set successfully, otherwise `false`.\r\n */\r\n resetPipeline: function ()\r\n {\r\n this.pipeline = this.defaultPipeline;\r\n\r\n return (this.pipeline !== null);\r\n },\r\n\r\n /**\r\n * Gets the name of the WebGL Pipeline this Game Object is currently using.\r\n *\r\n * @method Phaser.GameObjects.Components.Pipeline#getPipelineName\r\n * @webglOnly\r\n * @since 3.0.0\r\n *\r\n * @return {string} The string-based name of the pipeline being used by this Game Object.\r\n */\r\n getPipelineName: function ()\r\n {\r\n return this.pipeline.name;\r\n }\r\n\r\n};\r\n\r\nmodule.exports = Pipeline;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1BpcGVsaW5lLmpzP2UwYTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLHNDQUFzQzs7QUFFL0U7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvY29tcG9uZW50cy9QaXBlbGluZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgdXNlZCBmb3Igc2V0dGluZyB0aGUgV2ViR0wgcmVuZGVyaW5nIHBpcGVsaW5lIG9mIGEgR2FtZSBPYmplY3QuXHJcbiAqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGlwZWxpbmVcclxuICogQHdlYmdsT25seVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcblxyXG52YXIgUGlwZWxpbmUgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaW5pdGlhbCBXZWJHTCBwaXBlbGluZSBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlBpcGVsaW5lI2RlZmF1bHRQaXBlbGluZVxyXG4gICAgICogQHR5cGUge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFBpcGVsaW5lfVxyXG4gICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICogQHdlYmdsT25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlZmF1bHRQaXBlbGluZTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIHBpcGVsaW5lIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGlwZWxpbmUjcGlwZWxpbmVcclxuICAgICAqIEB0eXBlIHtQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZX1cclxuICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAqIEB3ZWJnbE9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBwaXBlbGluZTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGluaXRpYWwgV2ViR0wgUGlwZWxpbmUgb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyB0aGUgaW5zdGFudGlhdGlvbiBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5QaXBlbGluZSNpbml0UGlwZWxpbmVcclxuICAgICAqIEB3ZWJnbE9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbcGlwZWxpbmVOYW1lPVRleHR1cmVUaW50UGlwZWxpbmVdIC0gVGhlIG5hbWUgb2YgdGhlIHBpcGVsaW5lIHRvIHNldCBvbiB0aGlzIEdhbWUgT2JqZWN0LiBEZWZhdWx0cyB0byB0aGUgVGV4dHVyZSBUaW50IFBpcGVsaW5lLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgcGlwZWxpbmUgd2FzIHNldCBzdWNjZXNzZnVsbHksIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBpbml0UGlwZWxpbmU6IGZ1bmN0aW9uIChwaXBlbGluZU5hbWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHBpcGVsaW5lTmFtZSA9PT0gdW5kZWZpbmVkKSB7IHBpcGVsaW5lTmFtZSA9ICdUZXh0dXJlVGludFBpcGVsaW5lJzsgfVxyXG5cclxuICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnNjZW5lLnN5cy5nYW1lLnJlbmRlcmVyO1xyXG5cclxuICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXIuZ2wgJiYgcmVuZGVyZXIuaGFzUGlwZWxpbmUocGlwZWxpbmVOYW1lKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFBpcGVsaW5lID0gcmVuZGVyZXIuZ2V0UGlwZWxpbmUocGlwZWxpbmVOYW1lKTtcclxuICAgICAgICAgICAgdGhpcy5waXBlbGluZSA9IHRoaXMuZGVmYXVsdFBpcGVsaW5lO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYWN0aXZlIFdlYkdMIFBpcGVsaW5lIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5QaXBlbGluZSNzZXRQaXBlbGluZVxyXG4gICAgICogQHdlYmdsT25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBpcGVsaW5lTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwaXBlbGluZSB0byBzZXQgb24gdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRQaXBlbGluZTogZnVuY3Rpb24gKHBpcGVsaW5lTmFtZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnNjZW5lLnN5cy5nYW1lLnJlbmRlcmVyO1xyXG5cclxuICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXIuZ2wgJiYgcmVuZGVyZXIuaGFzUGlwZWxpbmUocGlwZWxpbmVOYW1lKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGlwZWxpbmUgPSByZW5kZXJlci5nZXRQaXBlbGluZShwaXBlbGluZU5hbWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXRzIHRoZSBXZWJHTCBQaXBlbGluZSBvZiB0aGlzIEdhbWUgT2JqZWN0IGJhY2sgdG8gdGhlIGRlZmF1bHQgaXQgd2FzIGNyZWF0ZWQgd2l0aC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlBpcGVsaW5lI3Jlc2V0UGlwZWxpbmVcclxuICAgICAqIEB3ZWJnbE9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgcGlwZWxpbmUgd2FzIHNldCBzdWNjZXNzZnVsbHksIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICByZXNldFBpcGVsaW5lOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucGlwZWxpbmUgPSB0aGlzLmRlZmF1bHRQaXBlbGluZTtcclxuXHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnBpcGVsaW5lICE9PSBudWxsKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBXZWJHTCBQaXBlbGluZSB0aGlzIEdhbWUgT2JqZWN0IGlzIGN1cnJlbnRseSB1c2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlBpcGVsaW5lI2dldFBpcGVsaW5lTmFtZVxyXG4gICAgICogQHdlYmdsT25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5nLWJhc2VkIG5hbWUgb2YgdGhlIHBpcGVsaW5lIGJlaW5nIHVzZWQgYnkgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ2V0UGlwZWxpbmVOYW1lOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBpcGVsaW5lLm5hbWU7XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQaXBlbGluZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Pipeline.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/components/ScrollFactor.js":
/*!************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/components/ScrollFactor.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods used for getting and setting the Scroll Factor of a Game Object.\r\n *\r\n * @namespace Phaser.GameObjects.Components.ScrollFactor\r\n * @since 3.0.0\r\n */\r\n\r\nvar ScrollFactor = {\r\n\r\n /**\r\n * The horizontal scroll factor of this Game Object.\r\n *\r\n * The scroll factor controls the influence of the movement of a Camera upon this Game Object.\r\n *\r\n * When a camera scrolls it will change the location at which this Game Object is rendered on-screen.\r\n * It does not change the Game Objects actual position values.\r\n *\r\n * A value of 1 means it will move exactly in sync with a camera.\r\n * A value of 0 means it will not move at all, even if the camera moves.\r\n * Other values control the degree to which the camera movement is mapped to this Game Object.\r\n * \r\n * Please be aware that scroll factor values other than 1 are not taken in to consideration when\r\n * calculating physics collisions. Bodies always collide based on their world position, but changing\r\n * the scroll factor is a visual adjustment to where the textures are rendered, which can offset\r\n * them from physics bodies if not accounted for in your code.\r\n *\r\n * @name Phaser.GameObjects.Components.ScrollFactor#scrollFactorX\r\n * @type {number}\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n scrollFactorX: 1,\r\n\r\n /**\r\n * The vertical scroll factor of this Game Object.\r\n *\r\n * The scroll factor controls the influence of the movement of a Camera upon this Game Object.\r\n *\r\n * When a camera scrolls it will change the location at which this Game Object is rendered on-screen.\r\n * It does not change the Game Objects actual position values.\r\n *\r\n * A value of 1 means it will move exactly in sync with a camera.\r\n * A value of 0 means it will not move at all, even if the camera moves.\r\n * Other values control the degree to which the camera movement is mapped to this Game Object.\r\n * \r\n * Please be aware that scroll factor values other than 1 are not taken in to consideration when\r\n * calculating physics collisions. Bodies always collide based on their world position, but changing\r\n * the scroll factor is a visual adjustment to where the textures are rendered, which can offset\r\n * them from physics bodies if not accounted for in your code.\r\n *\r\n * @name Phaser.GameObjects.Components.ScrollFactor#scrollFactorY\r\n * @type {number}\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n scrollFactorY: 1,\r\n\r\n /**\r\n * Sets the scroll factor of this Game Object.\r\n *\r\n * The scroll factor controls the influence of the movement of a Camera upon this Game Object.\r\n *\r\n * When a camera scrolls it will change the location at which this Game Object is rendered on-screen.\r\n * It does not change the Game Objects actual position values.\r\n *\r\n * A value of 1 means it will move exactly in sync with a camera.\r\n * A value of 0 means it will not move at all, even if the camera moves.\r\n * Other values control the degree to which the camera movement is mapped to this Game Object.\r\n * \r\n * Please be aware that scroll factor values other than 1 are not taken in to consideration when\r\n * calculating physics collisions. Bodies always collide based on their world position, but changing\r\n * the scroll factor is a visual adjustment to where the textures are rendered, which can offset\r\n * them from physics bodies if not accounted for in your code.\r\n *\r\n * @method Phaser.GameObjects.Components.ScrollFactor#setScrollFactor\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal scroll factor of this Game Object.\r\n * @param {number} [y=x] - The vertical scroll factor of this Game Object. If not set it will use the `x` value.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setScrollFactor: function (x, y)\r\n {\r\n if (y === undefined) { y = x; }\r\n\r\n this.scrollFactorX = x;\r\n this.scrollFactorY = y;\r\n\r\n return this;\r\n }\r\n\r\n};\r\n\r\nmodule.exports = ScrollFactor;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1Njcm9sbEZhY3Rvci5qcz84NTg5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixPQUFPOztBQUVyQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1Njcm9sbEZhY3Rvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgdXNlZCBmb3IgZ2V0dGluZyBhbmQgc2V0dGluZyB0aGUgU2Nyb2xsIEZhY3RvciBvZiBhIEdhbWUgT2JqZWN0LlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNjcm9sbEZhY3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcblxyXG52YXIgU2Nyb2xsRmFjdG9yID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGhvcml6b250YWwgc2Nyb2xsIGZhY3RvciBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIFRoZSBzY3JvbGwgZmFjdG9yIGNvbnRyb2xzIHRoZSBpbmZsdWVuY2Ugb2YgdGhlIG1vdmVtZW50IG9mIGEgQ2FtZXJhIHVwb24gdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBXaGVuIGEgY2FtZXJhIHNjcm9sbHMgaXQgd2lsbCBjaGFuZ2UgdGhlIGxvY2F0aW9uIGF0IHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyZWQgb24tc2NyZWVuLlxyXG4gICAgICogSXQgZG9lcyBub3QgY2hhbmdlIHRoZSBHYW1lIE9iamVjdHMgYWN0dWFsIHBvc2l0aW9uIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBBIHZhbHVlIG9mIDEgbWVhbnMgaXQgd2lsbCBtb3ZlIGV4YWN0bHkgaW4gc3luYyB3aXRoIGEgY2FtZXJhLlxyXG4gICAgICogQSB2YWx1ZSBvZiAwIG1lYW5zIGl0IHdpbGwgbm90IG1vdmUgYXQgYWxsLCBldmVuIGlmIHRoZSBjYW1lcmEgbW92ZXMuXHJcbiAgICAgKiBPdGhlciB2YWx1ZXMgY29udHJvbCB0aGUgZGVncmVlIHRvIHdoaWNoIHRoZSBjYW1lcmEgbW92ZW1lbnQgaXMgbWFwcGVkIHRvIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIFBsZWFzZSBiZSBhd2FyZSB0aGF0IHNjcm9sbCBmYWN0b3IgdmFsdWVzIG90aGVyIHRoYW4gMSBhcmUgbm90IHRha2VuIGluIHRvIGNvbnNpZGVyYXRpb24gd2hlblxyXG4gICAgICogY2FsY3VsYXRpbmcgcGh5c2ljcyBjb2xsaXNpb25zLiBCb2RpZXMgYWx3YXlzIGNvbGxpZGUgYmFzZWQgb24gdGhlaXIgd29ybGQgcG9zaXRpb24sIGJ1dCBjaGFuZ2luZ1xyXG4gICAgICogdGhlIHNjcm9sbCBmYWN0b3IgaXMgYSB2aXN1YWwgYWRqdXN0bWVudCB0byB3aGVyZSB0aGUgdGV4dHVyZXMgYXJlIHJlbmRlcmVkLCB3aGljaCBjYW4gb2Zmc2V0XHJcbiAgICAgKiB0aGVtIGZyb20gcGh5c2ljcyBib2RpZXMgaWYgbm90IGFjY291bnRlZCBmb3IgaW4geW91ciBjb2RlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNjcm9sbEZhY3RvciNzY3JvbGxGYWN0b3JYXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGRlZmF1bHQgMVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHNjcm9sbEZhY3Rvclg6IDEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdmVydGljYWwgc2Nyb2xsIGZhY3RvciBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIFRoZSBzY3JvbGwgZmFjdG9yIGNvbnRyb2xzIHRoZSBpbmZsdWVuY2Ugb2YgdGhlIG1vdmVtZW50IG9mIGEgQ2FtZXJhIHVwb24gdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBXaGVuIGEgY2FtZXJhIHNjcm9sbHMgaXQgd2lsbCBjaGFuZ2UgdGhlIGxvY2F0aW9uIGF0IHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyZWQgb24tc2NyZWVuLlxyXG4gICAgICogSXQgZG9lcyBub3QgY2hhbmdlIHRoZSBHYW1lIE9iamVjdHMgYWN0dWFsIHBvc2l0aW9uIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBBIHZhbHVlIG9mIDEgbWVhbnMgaXQgd2lsbCBtb3ZlIGV4YWN0bHkgaW4gc3luYyB3aXRoIGEgY2FtZXJhLlxyXG4gICAgICogQSB2YWx1ZSBvZiAwIG1lYW5zIGl0IHdpbGwgbm90IG1vdmUgYXQgYWxsLCBldmVuIGlmIHRoZSBjYW1lcmEgbW92ZXMuXHJcbiAgICAgKiBPdGhlciB2YWx1ZXMgY29udHJvbCB0aGUgZGVncmVlIHRvIHdoaWNoIHRoZSBjYW1lcmEgbW92ZW1lbnQgaXMgbWFwcGVkIHRvIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIFBsZWFzZSBiZSBhd2FyZSB0aGF0IHNjcm9sbCBmYWN0b3IgdmFsdWVzIG90aGVyIHRoYW4gMSBhcmUgbm90IHRha2VuIGluIHRvIGNvbnNpZGVyYXRpb24gd2hlblxyXG4gICAgICogY2FsY3VsYXRpbmcgcGh5c2ljcyBjb2xsaXNpb25zLiBCb2RpZXMgYWx3YXlzIGNvbGxpZGUgYmFzZWQgb24gdGhlaXIgd29ybGQgcG9zaXRpb24sIGJ1dCBjaGFuZ2luZ1xyXG4gICAgICogdGhlIHNjcm9sbCBmYWN0b3IgaXMgYSB2aXN1YWwgYWRqdXN0bWVudCB0byB3aGVyZSB0aGUgdGV4dHVyZXMgYXJlIHJlbmRlcmVkLCB3aGljaCBjYW4gb2Zmc2V0XHJcbiAgICAgKiB0aGVtIGZyb20gcGh5c2ljcyBib2RpZXMgaWYgbm90IGFjY291bnRlZCBmb3IgaW4geW91ciBjb2RlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNjcm9sbEZhY3RvciNzY3JvbGxGYWN0b3JZXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGRlZmF1bHQgMVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHNjcm9sbEZhY3Rvclk6IDEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBzY3JvbGwgZmFjdG9yIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHNjcm9sbCBmYWN0b3IgY29udHJvbHMgdGhlIGluZmx1ZW5jZSBvZiB0aGUgbW92ZW1lbnQgb2YgYSBDYW1lcmEgdXBvbiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIFdoZW4gYSBjYW1lcmEgc2Nyb2xscyBpdCB3aWxsIGNoYW5nZSB0aGUgbG9jYXRpb24gYXQgd2hpY2ggdGhpcyBHYW1lIE9iamVjdCBpcyByZW5kZXJlZCBvbi1zY3JlZW4uXHJcbiAgICAgKiBJdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIEdhbWUgT2JqZWN0cyBhY3R1YWwgcG9zaXRpb24gdmFsdWVzLlxyXG4gICAgICpcclxuICAgICAqIEEgdmFsdWUgb2YgMSBtZWFucyBpdCB3aWxsIG1vdmUgZXhhY3RseSBpbiBzeW5jIHdpdGggYSBjYW1lcmEuXHJcbiAgICAgKiBBIHZhbHVlIG9mIDAgbWVhbnMgaXQgd2lsbCBub3QgbW92ZSBhdCBhbGwsIGV2ZW4gaWYgdGhlIGNhbWVyYSBtb3Zlcy5cclxuICAgICAqIE90aGVyIHZhbHVlcyBjb250cm9sIHRoZSBkZWdyZWUgdG8gd2hpY2ggdGhlIGNhbWVyYSBtb3ZlbWVudCBpcyBtYXBwZWQgdG8gdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogUGxlYXNlIGJlIGF3YXJlIHRoYXQgc2Nyb2xsIGZhY3RvciB2YWx1ZXMgb3RoZXIgdGhhbiAxIGFyZSBub3QgdGFrZW4gaW4gdG8gY29uc2lkZXJhdGlvbiB3aGVuXHJcbiAgICAgKiBjYWxjdWxhdGluZyBwaHlzaWNzIGNvbGxpc2lvbnMuIEJvZGllcyBhbHdheXMgY29sbGlkZSBiYXNlZCBvbiB0aGVpciB3b3JsZCBwb3NpdGlvbiwgYnV0IGNoYW5naW5nXHJcbiAgICAgKiB0aGUgc2Nyb2xsIGZhY3RvciBpcyBhIHZpc3VhbCBhZGp1c3RtZW50IHRvIHdoZXJlIHRoZSB0ZXh0dXJlcyBhcmUgcmVuZGVyZWQsIHdoaWNoIGNhbiBvZmZzZXRcclxuICAgICAqIHRoZW0gZnJvbSBwaHlzaWNzIGJvZGllcyBpZiBub3QgYWNjb3VudGVkIGZvciBpbiB5b3VyIGNvZGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5TY3JvbGxGYWN0b3Ijc2V0U2Nyb2xsRmFjdG9yXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHNjcm9sbCBmYWN0b3Igb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT14XSAtIFRoZSB2ZXJ0aWNhbCBzY3JvbGwgZmFjdG9yIG9mIHRoaXMgR2FtZSBPYmplY3QuIElmIG5vdCBzZXQgaXQgd2lsbCB1c2UgdGhlIGB4YCB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRTY3JvbGxGYWN0b3I6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IHg7IH1cclxuXHJcbiAgICAgICAgdGhpcy5zY3JvbGxGYWN0b3JYID0geDtcclxuICAgICAgICB0aGlzLnNjcm9sbEZhY3RvclkgPSB5O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNjcm9sbEZhY3RvcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/ScrollFactor.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/components/Size.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/components/Size.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Provides methods used for getting and setting the size of a Game Object.\r\n * \r\n * @namespace Phaser.GameObjects.Components.Size\r\n * @since 3.0.0\r\n */\r\n\r\nvar Size = {\r\n\r\n /**\r\n * A property indicating that a Game Object has this component.\r\n * \r\n * @name Phaser.GameObjects.Components.Size#_sizeComponent\r\n * @type {boolean}\r\n * @private\r\n * @default true\r\n * @since 3.2.0\r\n */\r\n _sizeComponent: true,\r\n\r\n /**\r\n * The native (un-scaled) width of this Game Object.\r\n * \r\n * Changing this value will not change the size that the Game Object is rendered in-game.\r\n * For that you need to either set the scale of the Game Object (`setScale`) or use\r\n * the `displayWidth` property.\r\n * \r\n * @name Phaser.GameObjects.Components.Size#width\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n width: 0,\r\n\r\n /**\r\n * The native (un-scaled) height of this Game Object.\r\n * \r\n * Changing this value will not change the size that the Game Object is rendered in-game.\r\n * For that you need to either set the scale of the Game Object (`setScale`) or use\r\n * the `displayHeight` property.\r\n * \r\n * @name Phaser.GameObjects.Components.Size#height\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n height: 0,\r\n\r\n /**\r\n * The displayed width of this Game Object.\r\n * \r\n * This value takes into account the scale factor.\r\n * \r\n * Setting this value will adjust the Game Object's scale property.\r\n * \r\n * @name Phaser.GameObjects.Components.Size#displayWidth\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n displayWidth: {\r\n\r\n get: function ()\r\n {\r\n return Math.abs(this.scaleX * this.frame.realWidth);\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.scaleX = value / this.frame.realWidth;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The displayed height of this Game Object.\r\n * \r\n * This value takes into account the scale factor.\r\n * \r\n * Setting this value will adjust the Game Object's scale property.\r\n * \r\n * @name Phaser.GameObjects.Components.Size#displayHeight\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n displayHeight: {\r\n\r\n get: function ()\r\n {\r\n return Math.abs(this.scaleY * this.frame.realHeight);\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.scaleY = value / this.frame.realHeight;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Sets the size of this Game Object to be that of the given Frame.\r\n * \r\n * This will not change the size that the Game Object is rendered in-game.\r\n * For that you need to either set the scale of the Game Object (`setScale`) or call the\r\n * `setDisplaySize` method, which is the same thing as changing the scale but allows you\r\n * to do so by giving pixel values.\r\n * \r\n * If you have enabled this Game Object for input, changing the size will _not_ change the\r\n * size of the hit area. To do this you should adjust the `input.hitArea` object directly.\r\n * \r\n * @method Phaser.GameObjects.Components.Size#setSizeToFrame\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Textures.Frame} frame - The frame to base the size of this Game Object on.\r\n * \r\n * @return {this} This Game Object instance.\r\n */\r\n setSizeToFrame: function (frame)\r\n {\r\n if (frame === undefined) { frame = this.frame; }\r\n\r\n this.width = frame.realWidth;\r\n this.height = frame.realHeight;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the internal size of this Game Object, as used for frame or physics body creation.\r\n * \r\n * This will not change the size that the Game Object is rendered in-game.\r\n * For that you need to either set the scale of the Game Object (`setScale`) or call the\r\n * `setDisplaySize` method, which is the same thing as changing the scale but allows you\r\n * to do so by giving pixel values.\r\n * \r\n * If you have enabled this Game Object for input, changing the size will _not_ change the\r\n * size of the hit area. To do this you should adjust the `input.hitArea` object directly.\r\n * \r\n * @method Phaser.GameObjects.Components.Size#setSize\r\n * @since 3.0.0\r\n *\r\n * @param {number} width - The width of this Game Object.\r\n * @param {number} height - The height of this Game Object.\r\n * \r\n * @return {this} This Game Object instance.\r\n */\r\n setSize: function (width, height)\r\n {\r\n this.width = width;\r\n this.height = height;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the display size of this Game Object.\r\n * \r\n * Calling this will adjust the scale.\r\n * \r\n * @method Phaser.GameObjects.Components.Size#setDisplaySize\r\n * @since 3.0.0\r\n *\r\n * @param {number} width - The width of this Game Object.\r\n * @param {number} height - The height of this Game Object.\r\n * \r\n * @return {this} This Game Object instance.\r\n */\r\n setDisplaySize: function (width, height)\r\n {\r\n this.displayWidth = width;\r\n this.displayHeight = height;\r\n\r\n return this;\r\n }\r\n\r\n};\r\n\r\nmodule.exports = Size;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1NpemUuanM/NTliNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxzQkFBc0I7QUFDckM7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0Msb0JBQW9COztBQUV0RDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvY29tcG9uZW50cy9TaXplLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgbWV0aG9kcyB1c2VkIGZvciBnZXR0aW5nIGFuZCBzZXR0aW5nIHRoZSBzaXplIG9mIGEgR2FtZSBPYmplY3QuXHJcbiAqIFxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNpemVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5cclxudmFyIFNpemUgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHByb3BlcnR5IGluZGljYXRpbmcgdGhhdCBhIEdhbWUgT2JqZWN0IGhhcyB0aGlzIGNvbXBvbmVudC5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2l6ZSNfc2l6ZUNvbXBvbmVudFxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgKi9cclxuICAgIF9zaXplQ29tcG9uZW50OiB0cnVlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG5hdGl2ZSAodW4tc2NhbGVkKSB3aWR0aCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBDaGFuZ2luZyB0aGlzIHZhbHVlIHdpbGwgbm90IGNoYW5nZSB0aGUgc2l6ZSB0aGF0IHRoZSBHYW1lIE9iamVjdCBpcyByZW5kZXJlZCBpbi1nYW1lLlxyXG4gICAgICogRm9yIHRoYXQgeW91IG5lZWQgdG8gZWl0aGVyIHNldCB0aGUgc2NhbGUgb2YgdGhlIEdhbWUgT2JqZWN0IChgc2V0U2NhbGVgKSBvciB1c2VcclxuICAgICAqIHRoZSBgZGlzcGxheVdpZHRoYCBwcm9wZXJ0eS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2l6ZSN3aWR0aFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB3aWR0aDogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBuYXRpdmUgKHVuLXNjYWxlZCkgaGVpZ2h0IG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIENoYW5naW5nIHRoaXMgdmFsdWUgd2lsbCBub3QgY2hhbmdlIHRoZSBzaXplIHRoYXQgdGhlIEdhbWUgT2JqZWN0IGlzIHJlbmRlcmVkIGluLWdhbWUuXHJcbiAgICAgKiBGb3IgdGhhdCB5b3UgbmVlZCB0byBlaXRoZXIgc2V0IHRoZSBzY2FsZSBvZiB0aGUgR2FtZSBPYmplY3QgKGBzZXRTY2FsZWApIG9yIHVzZVxyXG4gICAgICogdGhlIGBkaXNwbGF5SGVpZ2h0YCBwcm9wZXJ0eS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2l6ZSNoZWlnaHRcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgaGVpZ2h0OiAwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRpc3BsYXllZCB3aWR0aCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIHZhbHVlIHRha2VzIGludG8gYWNjb3VudCB0aGUgc2NhbGUgZmFjdG9yLlxyXG4gICAgICogXHJcbiAgICAgKiBTZXR0aW5nIHRoaXMgdmFsdWUgd2lsbCBhZGp1c3QgdGhlIEdhbWUgT2JqZWN0J3Mgc2NhbGUgcHJvcGVydHkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNpemUjZGlzcGxheVdpZHRoXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRpc3BsYXlXaWR0aDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5hYnModGhpcy5zY2FsZVggKiB0aGlzLmZyYW1lLnJlYWxXaWR0aCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNjYWxlWCA9IHZhbHVlIC8gdGhpcy5mcmFtZS5yZWFsV2lkdGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZGlzcGxheWVkIGhlaWdodCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIHZhbHVlIHRha2VzIGludG8gYWNjb3VudCB0aGUgc2NhbGUgZmFjdG9yLlxyXG4gICAgICogXHJcbiAgICAgKiBTZXR0aW5nIHRoaXMgdmFsdWUgd2lsbCBhZGp1c3QgdGhlIEdhbWUgT2JqZWN0J3Mgc2NhbGUgcHJvcGVydHkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNpemUjZGlzcGxheUhlaWdodFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkaXNwbGF5SGVpZ2h0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlWSAqIHRoaXMuZnJhbWUucmVhbEhlaWdodCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNjYWxlWSA9IHZhbHVlIC8gdGhpcy5mcmFtZS5yZWFsSGVpZ2h0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgc2l6ZSBvZiB0aGlzIEdhbWUgT2JqZWN0IHRvIGJlIHRoYXQgb2YgdGhlIGdpdmVuIEZyYW1lLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIHdpbGwgbm90IGNoYW5nZSB0aGUgc2l6ZSB0aGF0IHRoZSBHYW1lIE9iamVjdCBpcyByZW5kZXJlZCBpbi1nYW1lLlxyXG4gICAgICogRm9yIHRoYXQgeW91IG5lZWQgdG8gZWl0aGVyIHNldCB0aGUgc2NhbGUgb2YgdGhlIEdhbWUgT2JqZWN0IChgc2V0U2NhbGVgKSBvciBjYWxsIHRoZVxyXG4gICAgICogYHNldERpc3BsYXlTaXplYCBtZXRob2QsIHdoaWNoIGlzIHRoZSBzYW1lIHRoaW5nIGFzIGNoYW5naW5nIHRoZSBzY2FsZSBidXQgYWxsb3dzIHlvdVxyXG4gICAgICogdG8gZG8gc28gYnkgZ2l2aW5nIHBpeGVsIHZhbHVlcy5cclxuICAgICAqIFxyXG4gICAgICogSWYgeW91IGhhdmUgZW5hYmxlZCB0aGlzIEdhbWUgT2JqZWN0IGZvciBpbnB1dCwgY2hhbmdpbmcgdGhlIHNpemUgd2lsbCBfbm90XyBjaGFuZ2UgdGhlXHJcbiAgICAgKiBzaXplIG9mIHRoZSBoaXQgYXJlYS4gVG8gZG8gdGhpcyB5b3Ugc2hvdWxkIGFkanVzdCB0aGUgYGlucHV0LmhpdEFyZWFgIG9iamVjdCBkaXJlY3RseS5cclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5TaXplI3NldFNpemVUb0ZyYW1lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UZXh0dXJlcy5GcmFtZX0gZnJhbWUgLSBUaGUgZnJhbWUgdG8gYmFzZSB0aGUgc2l6ZSBvZiB0aGlzIEdhbWUgT2JqZWN0IG9uLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRTaXplVG9GcmFtZTogZnVuY3Rpb24gKGZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChmcmFtZSA9PT0gdW5kZWZpbmVkKSB7IGZyYW1lID0gdGhpcy5mcmFtZTsgfVxyXG5cclxuICAgICAgICB0aGlzLndpZHRoID0gZnJhbWUucmVhbFdpZHRoO1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gZnJhbWUucmVhbEhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaW50ZXJuYWwgc2l6ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LCBhcyB1c2VkIGZvciBmcmFtZSBvciBwaHlzaWNzIGJvZHkgY3JlYXRpb24uXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgd2lsbCBub3QgY2hhbmdlIHRoZSBzaXplIHRoYXQgdGhlIEdhbWUgT2JqZWN0IGlzIHJlbmRlcmVkIGluLWdhbWUuXHJcbiAgICAgKiBGb3IgdGhhdCB5b3UgbmVlZCB0byBlaXRoZXIgc2V0IHRoZSBzY2FsZSBvZiB0aGUgR2FtZSBPYmplY3QgKGBzZXRTY2FsZWApIG9yIGNhbGwgdGhlXHJcbiAgICAgKiBgc2V0RGlzcGxheVNpemVgIG1ldGhvZCwgd2hpY2ggaXMgdGhlIHNhbWUgdGhpbmcgYXMgY2hhbmdpbmcgdGhlIHNjYWxlIGJ1dCBhbGxvd3MgeW91XHJcbiAgICAgKiB0byBkbyBzbyBieSBnaXZpbmcgcGl4ZWwgdmFsdWVzLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB5b3UgaGF2ZSBlbmFibGVkIHRoaXMgR2FtZSBPYmplY3QgZm9yIGlucHV0LCBjaGFuZ2luZyB0aGUgc2l6ZSB3aWxsIF9ub3RfIGNoYW5nZSB0aGVcclxuICAgICAqIHNpemUgb2YgdGhlIGhpdCBhcmVhLiBUbyBkbyB0aGlzIHlvdSBzaG91bGQgYWRqdXN0IHRoZSBgaW5wdXQuaGl0QXJlYWAgb2JqZWN0IGRpcmVjdGx5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNpemUjc2V0U2l6ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRTaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGRpc3BsYXkgc2l6ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBDYWxsaW5nIHRoaXMgd2lsbCBhZGp1c3QgdGhlIHNjYWxlLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNpemUjc2V0RGlzcGxheVNpemVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0RGlzcGxheVNpemU6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheVdpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5SGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNpemU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Size.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/components/Texture.js":
/*!*******************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/components/Texture.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n// bitmask flag for GameObject.renderMask\r\nvar _FLAG = 8; // 1000\r\n\r\n/**\r\n * Provides methods used for getting and setting the texture of a Game Object.\r\n *\r\n * @namespace Phaser.GameObjects.Components.Texture\r\n * @since 3.0.0\r\n */\r\n\r\nvar Texture = {\r\n\r\n /**\r\n * The Texture this Game Object is using to render with.\r\n *\r\n * @name Phaser.GameObjects.Components.Texture#texture\r\n * @type {Phaser.Textures.Texture|Phaser.Textures.CanvasTexture}\r\n * @since 3.0.0\r\n */\r\n texture: null,\r\n\r\n /**\r\n * The Texture Frame this Game Object is using to render with.\r\n *\r\n * @name Phaser.GameObjects.Components.Texture#frame\r\n * @type {Phaser.Textures.Frame}\r\n * @since 3.0.0\r\n */\r\n frame: null,\r\n\r\n /**\r\n * Internal flag. Not to be set by this Game Object.\r\n *\r\n * @name Phaser.GameObjects.Components.Texture#isCropped\r\n * @type {boolean}\r\n * @private\r\n * @since 3.11.0\r\n */\r\n isCropped: false,\r\n\r\n /**\r\n * Sets the texture and frame this Game Object will use to render with.\r\n *\r\n * Textures are referenced by their string-based keys, as stored in the Texture Manager.\r\n *\r\n * @method Phaser.GameObjects.Components.Texture#setTexture\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Textures.Texture)} key - The key of the texture to be used, as stored in the Texture Manager, or a Texture instance.\r\n * @param {(string|integer)} [frame] - The name or index of the frame within the Texture.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setTexture: function (key, frame)\r\n {\r\n this.texture = this.scene.sys.textures.get(key);\r\n\r\n return this.setFrame(frame);\r\n },\r\n\r\n /**\r\n * Sets the frame this Game Object will use to render with.\r\n *\r\n * The Frame has to belong to the current Texture being used.\r\n *\r\n * It can be either a string or an index.\r\n *\r\n * Calling `setFrame` will modify the `width` and `height` properties of your Game Object.\r\n * It will also change the `origin` if the Frame has a custom pivot point, as exported from packages like Texture Packer.\r\n *\r\n * @method Phaser.GameObjects.Components.Texture#setFrame\r\n * @since 3.0.0\r\n *\r\n * @param {(string|integer)} frame - The name or index of the frame within the Texture.\r\n * @param {boolean} [updateSize=true] - Should this call adjust the size of the Game Object?\r\n * @param {boolean} [updateOrigin=true] - Should this call adjust the origin of the Game Object?\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setFrame: function (frame, updateSize, updateOrigin)\r\n {\r\n if (updateSize === undefined) { updateSize = true; }\r\n if (updateOrigin === undefined) { updateOrigin = true; }\r\n\r\n this.frame = this.texture.get(frame);\r\n\r\n if (!this.frame.cutWidth || !this.frame.cutHeight)\r\n {\r\n this.renderFlags &= ~_FLAG;\r\n }\r\n else\r\n {\r\n this.renderFlags |= _FLAG;\r\n }\r\n\r\n if (this._sizeComponent && updateSize)\r\n {\r\n this.setSizeToFrame();\r\n }\r\n\r\n if (this._originComponent && updateOrigin)\r\n {\r\n if (this.frame.customPivot)\r\n {\r\n this.setOrigin(this.frame.pivotX, this.frame.pivotY);\r\n }\r\n else\r\n {\r\n this.updateDisplayOrigin();\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n};\r\n\r\nmodule.exports = Texture;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1RleHR1cmUuanM/YWY3YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlDQUFpQztBQUNoRCxlQUFlLGlCQUFpQjtBQUNoQztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsbUJBQW1CO0FBQzFELHlDQUF5QyxxQkFBcUI7O0FBRTlEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvY29tcG9uZW50cy9UZXh0dXJlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vLyAgYml0bWFzayBmbGFnIGZvciBHYW1lT2JqZWN0LnJlbmRlck1hc2tcclxudmFyIF9GTEFHID0gODsgLy8gMTAwMFxyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgdXNlZCBmb3IgZ2V0dGluZyBhbmQgc2V0dGluZyB0aGUgdGV4dHVyZSBvZiBhIEdhbWUgT2JqZWN0LlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRleHR1cmVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5cclxudmFyIFRleHR1cmUgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHVzaW5nIHRvIHJlbmRlciB3aXRoLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRleHR1cmUjdGV4dHVyZVxyXG4gICAgICogQHR5cGUge1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlfFBoYXNlci5UZXh0dXJlcy5DYW52YXNUZXh0dXJlfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHRleHR1cmU6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgVGV4dHVyZSBGcmFtZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHVzaW5nIHRvIHJlbmRlciB3aXRoLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRleHR1cmUjZnJhbWVcclxuICAgICAqIEB0eXBlIHtQaGFzZXIuVGV4dHVyZXMuRnJhbWV9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZnJhbWU6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBmbGFnLiBOb3QgdG8gYmUgc2V0IGJ5IHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGV4dHVyZSNpc0Nyb3BwZWRcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqL1xyXG4gICAgaXNDcm9wcGVkOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHRleHR1cmUgYW5kIGZyYW1lIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gcmVuZGVyIHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogVGV4dHVyZXMgYXJlIHJlZmVyZW5jZWQgYnkgdGhlaXIgc3RyaW5nLWJhc2VkIGtleXMsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGV4dHVyZSNzZXRUZXh0dXJlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlRleHR1cmVzLlRleHR1cmUpfSBrZXkgLSBUaGUga2V5IG9mIHRoZSB0ZXh0dXJlIHRvIGJlIHVzZWQsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLCBvciBhIFRleHR1cmUgaW5zdGFuY2UuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBUaGUgbmFtZSBvciBpbmRleCBvZiB0aGUgZnJhbWUgd2l0aGluIHRoZSBUZXh0dXJlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFRleHR1cmU6IGZ1bmN0aW9uIChrZXksIGZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMudGV4dHVyZSA9IHRoaXMuc2NlbmUuc3lzLnRleHR1cmVzLmdldChrZXkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRGcmFtZShmcmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgZnJhbWUgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byByZW5kZXIgd2l0aC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgRnJhbWUgaGFzIHRvIGJlbG9uZyB0byB0aGUgY3VycmVudCBUZXh0dXJlIGJlaW5nIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogSXQgY2FuIGJlIGVpdGhlciBhIHN0cmluZyBvciBhbiBpbmRleC5cclxuICAgICAqXHJcbiAgICAgKiBDYWxsaW5nIGBzZXRGcmFtZWAgd2lsbCBtb2RpZnkgdGhlIGB3aWR0aGAgYW5kIGBoZWlnaHRgIHByb3BlcnRpZXMgb2YgeW91ciBHYW1lIE9iamVjdC5cclxuICAgICAqIEl0IHdpbGwgYWxzbyBjaGFuZ2UgdGhlIGBvcmlnaW5gIGlmIHRoZSBGcmFtZSBoYXMgYSBjdXN0b20gcGl2b3QgcG9pbnQsIGFzIGV4cG9ydGVkIGZyb20gcGFja2FnZXMgbGlrZSBUZXh0dXJlIFBhY2tlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRleHR1cmUjc2V0RnJhbWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gZnJhbWUgLSBUaGUgbmFtZSBvciBpbmRleCBvZiB0aGUgZnJhbWUgd2l0aGluIHRoZSBUZXh0dXJlLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdXBkYXRlU2l6ZT10cnVlXSAtIFNob3VsZCB0aGlzIGNhbGwgYWRqdXN0IHRoZSBzaXplIG9mIHRoZSBHYW1lIE9iamVjdD9cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3VwZGF0ZU9yaWdpbj10cnVlXSAtIFNob3VsZCB0aGlzIGNhbGwgYWRqdXN0IHRoZSBvcmlnaW4gb2YgdGhlIEdhbWUgT2JqZWN0P1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEZyYW1lOiBmdW5jdGlvbiAoZnJhbWUsIHVwZGF0ZVNpemUsIHVwZGF0ZU9yaWdpbilcclxuICAgIHtcclxuICAgICAgICBpZiAodXBkYXRlU2l6ZSA9PT0gdW5kZWZpbmVkKSB7IHVwZGF0ZVNpemUgPSB0cnVlOyB9XHJcbiAgICAgICAgaWYgKHVwZGF0ZU9yaWdpbiA9PT0gdW5kZWZpbmVkKSB7IHVwZGF0ZU9yaWdpbiA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZSA9IHRoaXMudGV4dHVyZS5nZXQoZnJhbWUpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZnJhbWUuY3V0V2lkdGggfHwgIXRoaXMuZnJhbWUuY3V0SGVpZ2h0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJGbGFncyAmPSB+X0ZMQUc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRmxhZ3MgfD0gX0ZMQUc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fc2l6ZUNvbXBvbmVudCAmJiB1cGRhdGVTaXplKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTaXplVG9GcmFtZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX29yaWdpbkNvbXBvbmVudCAmJiB1cGRhdGVPcmlnaW4pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mcmFtZS5jdXN0b21QaXZvdClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRPcmlnaW4odGhpcy5mcmFtZS5waXZvdFgsIHRoaXMuZnJhbWUucGl2b3RZKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzcGxheU9yaWdpbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Texture.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/components/TextureCrop.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/components/TextureCrop.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n// bitmask flag for GameObject.renderMask\r\nvar _FLAG = 8; // 1000\r\n\r\n/**\r\n * Provides methods used for getting and setting the texture of a Game Object.\r\n *\r\n * @namespace Phaser.GameObjects.Components.TextureCrop\r\n * @since 3.0.0\r\n */\r\n\r\nvar TextureCrop = {\r\n\r\n /**\r\n * The Texture this Game Object is using to render with.\r\n *\r\n * @name Phaser.GameObjects.Components.TextureCrop#texture\r\n * @type {Phaser.Textures.Texture|Phaser.Textures.CanvasTexture}\r\n * @since 3.0.0\r\n */\r\n texture: null,\r\n\r\n /**\r\n * The Texture Frame this Game Object is using to render with.\r\n *\r\n * @name Phaser.GameObjects.Components.TextureCrop#frame\r\n * @type {Phaser.Textures.Frame}\r\n * @since 3.0.0\r\n */\r\n frame: null,\r\n\r\n /**\r\n * A boolean flag indicating if this Game Object is being cropped or not.\r\n * You can toggle this at any time after `setCrop` has been called, to turn cropping on or off.\r\n * Equally, calling `setCrop` with no arguments will reset the crop and disable it.\r\n *\r\n * @name Phaser.GameObjects.Components.TextureCrop#isCropped\r\n * @type {boolean}\r\n * @since 3.11.0\r\n */\r\n isCropped: false,\r\n\r\n /**\r\n * Applies a crop to a texture based Game Object, such as a Sprite or Image.\r\n * \r\n * The crop is a rectangle that limits the area of the texture frame that is visible during rendering.\r\n * \r\n * Cropping a Game Object does not change its size, dimensions, physics body or hit area, it just\r\n * changes what is shown when rendered.\r\n * \r\n * The crop coordinates are relative to the texture frame, not the Game Object, meaning 0 x 0 is the top-left.\r\n * \r\n * Therefore, if you had a Game Object that had an 800x600 sized texture, and you wanted to show only the left\r\n * half of it, you could call `setCrop(0, 0, 400, 600)`.\r\n * \r\n * It is also scaled to match the Game Object scale automatically. Therefore a crop rect of 100x50 would crop\r\n * an area of 200x100 when applied to a Game Object that had a scale factor of 2.\r\n * \r\n * You can either pass in numeric values directly, or you can provide a single Rectangle object as the first argument.\r\n * \r\n * Call this method with no arguments at all to reset the crop, or toggle the property `isCropped` to `false`.\r\n * \r\n * You should do this if the crop rectangle becomes the same size as the frame itself, as it will allow\r\n * the renderer to skip several internal calculations.\r\n *\r\n * @method Phaser.GameObjects.Components.TextureCrop#setCrop\r\n * @since 3.11.0\r\n *\r\n * @param {(number|Phaser.Geom.Rectangle)} [x] - The x coordinate to start the crop from. Or a Phaser.Geom.Rectangle object, in which case the rest of the arguments are ignored.\r\n * @param {number} [y] - The y coordinate to start the crop from.\r\n * @param {number} [width] - The width of the crop rectangle in pixels.\r\n * @param {number} [height] - The height of the crop rectangle in pixels.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setCrop: function (x, y, width, height)\r\n {\r\n if (x === undefined)\r\n {\r\n this.isCropped = false;\r\n }\r\n else if (this.frame)\r\n {\r\n if (typeof x === 'number')\r\n {\r\n this.frame.setCropUVs(this._crop, x, y, width, height, this.flipX, this.flipY);\r\n }\r\n else\r\n {\r\n var rect = x;\r\n\r\n this.frame.setCropUVs(this._crop, rect.x, rect.y, rect.width, rect.height, this.flipX, this.flipY);\r\n }\r\n\r\n this.isCropped = true;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the texture and frame this Game Object will use to render with.\r\n *\r\n * Textures are referenced by their string-based keys, as stored in the Texture Manager.\r\n *\r\n * @method Phaser.GameObjects.Components.TextureCrop#setTexture\r\n * @since 3.0.0\r\n *\r\n * @param {string} key - The key of the texture to be used, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - The name or index of the frame within the Texture.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setTexture: function (key, frame)\r\n {\r\n this.texture = this.scene.sys.textures.get(key);\r\n\r\n return this.setFrame(frame);\r\n },\r\n\r\n /**\r\n * Sets the frame this Game Object will use to render with.\r\n *\r\n * The Frame has to belong to the current Texture being used.\r\n *\r\n * It can be either a string or an index.\r\n *\r\n * Calling `setFrame` will modify the `width` and `height` properties of your Game Object.\r\n * It will also change the `origin` if the Frame has a custom pivot point, as exported from packages like Texture Packer.\r\n *\r\n * @method Phaser.GameObjects.Components.TextureCrop#setFrame\r\n * @since 3.0.0\r\n *\r\n * @param {(string|integer)} frame - The name or index of the frame within the Texture.\r\n * @param {boolean} [updateSize=true] - Should this call adjust the size of the Game Object?\r\n * @param {boolean} [updateOrigin=true] - Should this call adjust the origin of the Game Object?\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setFrame: function (frame, updateSize, updateOrigin)\r\n {\r\n if (updateSize === undefined) { updateSize = true; }\r\n if (updateOrigin === undefined) { updateOrigin = true; }\r\n\r\n this.frame = this.texture.get(frame);\r\n\r\n if (!this.frame.cutWidth || !this.frame.cutHeight)\r\n {\r\n this.renderFlags &= ~_FLAG;\r\n }\r\n else\r\n {\r\n this.renderFlags |= _FLAG;\r\n }\r\n\r\n if (this._sizeComponent && updateSize)\r\n {\r\n this.setSizeToFrame();\r\n }\r\n\r\n if (this._originComponent && updateOrigin)\r\n {\r\n if (this.frame.customPivot)\r\n {\r\n this.setOrigin(this.frame.pivotX, this.frame.pivotY);\r\n }\r\n else\r\n {\r\n this.updateDisplayOrigin();\r\n }\r\n }\r\n\r\n if (this.isCropped)\r\n {\r\n this.frame.updateCropUVs(this._crop, this.flipX, this.flipY);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Internal method that returns a blank, well-formed crop object for use by a Game Object.\r\n *\r\n * @method Phaser.GameObjects.Components.TextureCrop#resetCropObject\r\n * @private\r\n * @since 3.12.0\r\n * \r\n * @return {object} The crop object.\r\n */\r\n resetCropObject: function ()\r\n {\r\n return { u0: 0, v0: 0, u1: 0, v1: 0, width: 0, height: 0, x: 0, y: 0, flipX: false, flipY: false, cx: 0, cy: 0, cw: 0, ch: 0 };\r\n }\r\n\r\n};\r\n\r\nmodule.exports = TextureCrop;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1RleHR1cmVDcm9wLmpzP2RhMTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLCtCQUErQjtBQUM5QyxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLGlCQUFpQjtBQUNoQztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsbUJBQW1CO0FBQzFELHlDQUF5QyxxQkFBcUI7O0FBRTlEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1RleHR1cmVDcm9wLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vLyAgYml0bWFzayBmbGFnIGZvciBHYW1lT2JqZWN0LnJlbmRlck1hc2tcclxudmFyIF9GTEFHID0gODsgLy8gMTAwMFxyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgdXNlZCBmb3IgZ2V0dGluZyBhbmQgc2V0dGluZyB0aGUgdGV4dHVyZSBvZiBhIEdhbWUgT2JqZWN0LlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRleHR1cmVDcm9wXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuXHJcbnZhciBUZXh0dXJlQ3JvcCA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3QgaXMgdXNpbmcgdG8gcmVuZGVyIHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGV4dHVyZUNyb3AjdGV4dHVyZVxyXG4gICAgICogQHR5cGUge1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlfFBoYXNlci5UZXh0dXJlcy5DYW52YXNUZXh0dXJlfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHRleHR1cmU6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgVGV4dHVyZSBGcmFtZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHVzaW5nIHRvIHJlbmRlciB3aXRoLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRleHR1cmVDcm9wI2ZyYW1lXHJcbiAgICAgKiBAdHlwZSB7UGhhc2VyLlRleHR1cmVzLkZyYW1lfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGZyYW1lOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBib29sZWFuIGZsYWcgaW5kaWNhdGluZyBpZiB0aGlzIEdhbWUgT2JqZWN0IGlzIGJlaW5nIGNyb3BwZWQgb3Igbm90LlxyXG4gICAgICogWW91IGNhbiB0b2dnbGUgdGhpcyBhdCBhbnkgdGltZSBhZnRlciBgc2V0Q3JvcGAgaGFzIGJlZW4gY2FsbGVkLCB0byB0dXJuIGNyb3BwaW5nIG9uIG9yIG9mZi5cclxuICAgICAqIEVxdWFsbHksIGNhbGxpbmcgYHNldENyb3BgIHdpdGggbm8gYXJndW1lbnRzIHdpbGwgcmVzZXQgdGhlIGNyb3AgYW5kIGRpc2FibGUgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGV4dHVyZUNyb3AjaXNDcm9wcGVkXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqL1xyXG4gICAgaXNDcm9wcGVkOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGxpZXMgYSBjcm9wIHRvIGEgdGV4dHVyZSBiYXNlZCBHYW1lIE9iamVjdCwgc3VjaCBhcyBhIFNwcml0ZSBvciBJbWFnZS5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGNyb3AgaXMgYSByZWN0YW5nbGUgdGhhdCBsaW1pdHMgdGhlIGFyZWEgb2YgdGhlIHRleHR1cmUgZnJhbWUgdGhhdCBpcyB2aXNpYmxlIGR1cmluZyByZW5kZXJpbmcuXHJcbiAgICAgKiBcclxuICAgICAqIENyb3BwaW5nIGEgR2FtZSBPYmplY3QgZG9lcyBub3QgY2hhbmdlIGl0cyBzaXplLCBkaW1lbnNpb25zLCBwaHlzaWNzIGJvZHkgb3IgaGl0IGFyZWEsIGl0IGp1c3RcclxuICAgICAqIGNoYW5nZXMgd2hhdCBpcyBzaG93biB3aGVuIHJlbmRlcmVkLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgY3JvcCBjb29yZGluYXRlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIHRleHR1cmUgZnJhbWUsIG5vdCB0aGUgR2FtZSBPYmplY3QsIG1lYW5pbmcgMCB4IDAgaXMgdGhlIHRvcC1sZWZ0LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGVyZWZvcmUsIGlmIHlvdSBoYWQgYSBHYW1lIE9iamVjdCB0aGF0IGhhZCBhbiA4MDB4NjAwIHNpemVkIHRleHR1cmUsIGFuZCB5b3Ugd2FudGVkIHRvIHNob3cgb25seSB0aGUgbGVmdFxyXG4gICAgICogaGFsZiBvZiBpdCwgeW91IGNvdWxkIGNhbGwgYHNldENyb3AoMCwgMCwgNDAwLCA2MDApYC5cclxuICAgICAqIFxyXG4gICAgICogSXQgaXMgYWxzbyBzY2FsZWQgdG8gbWF0Y2ggdGhlIEdhbWUgT2JqZWN0IHNjYWxlIGF1dG9tYXRpY2FsbHkuIFRoZXJlZm9yZSBhIGNyb3AgcmVjdCBvZiAxMDB4NTAgd291bGQgY3JvcFxyXG4gICAgICogYW4gYXJlYSBvZiAyMDB4MTAwIHdoZW4gYXBwbGllZCB0byBhIEdhbWUgT2JqZWN0IHRoYXQgaGFkIGEgc2NhbGUgZmFjdG9yIG9mIDIuXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBjYW4gZWl0aGVyIHBhc3MgaW4gbnVtZXJpYyB2YWx1ZXMgZGlyZWN0bHksIG9yIHlvdSBjYW4gcHJvdmlkZSBhIHNpbmdsZSBSZWN0YW5nbGUgb2JqZWN0IGFzIHRoZSBmaXJzdCBhcmd1bWVudC5cclxuICAgICAqIFxyXG4gICAgICogQ2FsbCB0aGlzIG1ldGhvZCB3aXRoIG5vIGFyZ3VtZW50cyBhdCBhbGwgdG8gcmVzZXQgdGhlIGNyb3AsIG9yIHRvZ2dsZSB0aGUgcHJvcGVydHkgYGlzQ3JvcHBlZGAgdG8gYGZhbHNlYC5cclxuICAgICAqIFxyXG4gICAgICogWW91IHNob3VsZCBkbyB0aGlzIGlmIHRoZSBjcm9wIHJlY3RhbmdsZSBiZWNvbWVzIHRoZSBzYW1lIHNpemUgYXMgdGhlIGZyYW1lIGl0c2VsZiwgYXMgaXQgd2lsbCBhbGxvd1xyXG4gICAgICogdGhlIHJlbmRlcmVyIHRvIHNraXAgc2V2ZXJhbCBpbnRlcm5hbCBjYWxjdWxhdGlvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UZXh0dXJlQ3JvcCNzZXRDcm9wXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsobnVtYmVyfFBoYXNlci5HZW9tLlJlY3RhbmdsZSl9IFt4XSAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gc3RhcnQgdGhlIGNyb3AgZnJvbS4gT3IgYSBQaGFzZXIuR2VvbS5SZWN0YW5nbGUgb2JqZWN0LCBpbiB3aGljaCBjYXNlIHRoZSByZXN0IG9mIHRoZSBhcmd1bWVudHMgYXJlIGlnbm9yZWQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ldIC0gVGhlIHkgY29vcmRpbmF0ZSB0byBzdGFydCB0aGUgY3JvcCBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3aWR0aF0gLSBUaGUgd2lkdGggb2YgdGhlIGNyb3AgcmVjdGFuZ2xlIGluIHBpeGVscy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0XSAtIFRoZSBoZWlnaHQgb2YgdGhlIGNyb3AgcmVjdGFuZ2xlIGluIHBpeGVscy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRDcm9wOiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5pc0Nyb3BwZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5mcmFtZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUuc2V0Q3JvcFVWcyh0aGlzLl9jcm9wLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0aGlzLmZsaXBYLCB0aGlzLmZsaXBZKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciByZWN0ID0geDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyYW1lLnNldENyb3BVVnModGhpcy5fY3JvcCwgcmVjdC54LCByZWN0LnksIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0LCB0aGlzLmZsaXBYLCB0aGlzLmZsaXBZKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0Nyb3BwZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdGV4dHVyZSBhbmQgZnJhbWUgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byByZW5kZXIgd2l0aC5cclxuICAgICAqXHJcbiAgICAgKiBUZXh0dXJlcyBhcmUgcmVmZXJlbmNlZCBieSB0aGVpciBzdHJpbmctYmFzZWQga2V5cywgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UZXh0dXJlQ3JvcCNzZXRUZXh0dXJlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgdGV4dHVyZSB0byBiZSB1c2VkLCBhcyBzdG9yZWQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lXSAtIFRoZSBuYW1lIG9yIGluZGV4IG9mIHRoZSBmcmFtZSB3aXRoaW4gdGhlIFRleHR1cmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0VGV4dHVyZTogZnVuY3Rpb24gKGtleSwgZnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGhpcy5zY2VuZS5zeXMudGV4dHVyZXMuZ2V0KGtleSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnNldEZyYW1lKGZyYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBmcmFtZSB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIHJlbmRlciB3aXRoLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBGcmFtZSBoYXMgdG8gYmVsb25nIHRvIHRoZSBjdXJyZW50IFRleHR1cmUgYmVpbmcgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBJdCBjYW4gYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGFuIGluZGV4LlxyXG4gICAgICpcclxuICAgICAqIENhbGxpbmcgYHNldEZyYW1lYCB3aWxsIG1vZGlmeSB0aGUgYHdpZHRoYCBhbmQgYGhlaWdodGAgcHJvcGVydGllcyBvZiB5b3VyIEdhbWUgT2JqZWN0LlxyXG4gICAgICogSXQgd2lsbCBhbHNvIGNoYW5nZSB0aGUgYG9yaWdpbmAgaWYgdGhlIEZyYW1lIGhhcyBhIGN1c3RvbSBwaXZvdCBwb2ludCwgYXMgZXhwb3J0ZWQgZnJvbSBwYWNrYWdlcyBsaWtlIFRleHR1cmUgUGFja2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGV4dHVyZUNyb3Ajc2V0RnJhbWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gZnJhbWUgLSBUaGUgbmFtZSBvciBpbmRleCBvZiB0aGUgZnJhbWUgd2l0aGluIHRoZSBUZXh0dXJlLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdXBkYXRlU2l6ZT10cnVlXSAtIFNob3VsZCB0aGlzIGNhbGwgYWRqdXN0IHRoZSBzaXplIG9mIHRoZSBHYW1lIE9iamVjdD9cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3VwZGF0ZU9yaWdpbj10cnVlXSAtIFNob3VsZCB0aGlzIGNhbGwgYWRqdXN0IHRoZSBvcmlnaW4gb2YgdGhlIEdhbWUgT2JqZWN0P1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEZyYW1lOiBmdW5jdGlvbiAoZnJhbWUsIHVwZGF0ZVNpemUsIHVwZGF0ZU9yaWdpbilcclxuICAgIHtcclxuICAgICAgICBpZiAodXBkYXRlU2l6ZSA9PT0gdW5kZWZpbmVkKSB7IHVwZGF0ZVNpemUgPSB0cnVlOyB9XHJcbiAgICAgICAgaWYgKHVwZGF0ZU9yaWdpbiA9PT0gdW5kZWZpbmVkKSB7IHVwZGF0ZU9yaWdpbiA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZSA9IHRoaXMudGV4dHVyZS5nZXQoZnJhbWUpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZnJhbWUuY3V0V2lkdGggfHwgIXRoaXMuZnJhbWUuY3V0SGVpZ2h0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJGbGFncyAmPSB+X0ZMQUc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRmxhZ3MgfD0gX0ZMQUc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fc2l6ZUNvbXBvbmVudCAmJiB1cGRhdGVTaXplKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTaXplVG9GcmFtZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX29yaWdpbkNvbXBvbmVudCAmJiB1cGRhdGVPcmlnaW4pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mcmFtZS5jdXN0b21QaXZvdClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRPcmlnaW4odGhpcy5mcmFtZS5waXZvdFgsIHRoaXMuZnJhbWUucGl2b3RZKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzcGxheU9yaWdpbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pc0Nyb3BwZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLnVwZGF0ZUNyb3BVVnModGhpcy5fY3JvcCwgdGhpcy5mbGlwWCwgdGhpcy5mbGlwWSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdGhhdCByZXR1cm5zIGEgYmxhbmssIHdlbGwtZm9ybWVkIGNyb3Agb2JqZWN0IGZvciB1c2UgYnkgYSBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRleHR1cmVDcm9wI3Jlc2V0Q3JvcE9iamVjdFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7b2JqZWN0fSBUaGUgY3JvcCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0Q3JvcE9iamVjdDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4geyB1MDogMCwgdjA6IDAsIHUxOiAwLCB2MTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCwgeDogMCwgeTogMCwgZmxpcFg6IGZhbHNlLCBmbGlwWTogZmFsc2UsIGN4OiAwLCBjeTogMCwgY3c6IDAsIGNoOiAwIH07XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlQ3JvcDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/TextureCrop.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/components/Tint.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/components/Tint.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @function GetColor\r\n * @since 3.0.0\r\n * @private\r\n */\r\nvar GetColor = function (value)\r\n{\r\n return (value >> 16) + (value & 0xff00) + ((value & 0xff) << 16);\r\n};\r\n\r\n/**\r\n * Provides methods used for setting the tint of a Game Object.\r\n * Should be applied as a mixin and not used directly.\r\n * \r\n * @namespace Phaser.GameObjects.Components.Tint\r\n * @webglOnly\r\n * @since 3.0.0\r\n */\r\n\r\nvar Tint = {\r\n\r\n /**\r\n * Private internal value. Holds the top-left tint value.\r\n * \r\n * @name Phaser.GameObjects.Components.Tint#_tintTL\r\n * @type {number}\r\n * @private\r\n * @default 16777215\r\n * @since 3.0.0\r\n */\r\n _tintTL: 16777215,\r\n\r\n /**\r\n * Private internal value. Holds the top-right tint value.\r\n * \r\n * @name Phaser.GameObjects.Components.Tint#_tintTR\r\n * @type {number}\r\n * @private\r\n * @default 16777215\r\n * @since 3.0.0\r\n */\r\n _tintTR: 16777215,\r\n\r\n /**\r\n * Private internal value. Holds the bottom-left tint value.\r\n * \r\n * @name Phaser.GameObjects.Components.Tint#_tintBL\r\n * @type {number}\r\n * @private\r\n * @default 16777215\r\n * @since 3.0.0\r\n */\r\n _tintBL: 16777215,\r\n\r\n /**\r\n * Private internal value. Holds the bottom-right tint value.\r\n * \r\n * @name Phaser.GameObjects.Components.Tint#_tintBR\r\n * @type {number}\r\n * @private\r\n * @default 16777215\r\n * @since 3.0.0\r\n */\r\n _tintBR: 16777215,\r\n\r\n /**\r\n * Private internal value. Holds if the Game Object is tinted or not.\r\n * \r\n * @name Phaser.GameObjects.Components.Tint#_isTinted\r\n * @type {boolean}\r\n * @private\r\n * @default false\r\n * @since 3.11.0\r\n */\r\n _isTinted: false,\r\n\r\n /**\r\n * Fill or additive?\r\n * \r\n * @name Phaser.GameObjects.Components.Tint#tintFill\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.11.0\r\n */\r\n tintFill: false,\r\n\r\n /**\r\n * Clears all tint values associated with this Game Object.\r\n * \r\n * Immediately sets the color values back to 0xffffff and the tint type to 'additive',\r\n * which results in no visible change to the texture.\r\n *\r\n * @method Phaser.GameObjects.Components.Tint#clearTint\r\n * @webglOnly\r\n * @since 3.0.0\r\n * \r\n * @return {this} This Game Object instance.\r\n */\r\n clearTint: function ()\r\n {\r\n this.setTint(0xffffff);\r\n\r\n this._isTinted = false;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets an additive tint on this Game Object.\r\n * \r\n * The tint works by taking the pixel color values from the Game Objects texture, and then\r\n * multiplying it by the color value of the tint. You can provide either one color value,\r\n * in which case the whole Game Object will be tinted in that color. Or you can provide a color\r\n * per corner. The colors are blended together across the extent of the Game Object.\r\n * \r\n * To modify the tint color once set, either call this method again with new values or use the\r\n * `tint` property to set all colors at once. Or, use the properties `tintTopLeft`, `tintTopRight,\r\n * `tintBottomLeft` and `tintBottomRight` to set the corner color values independently.\r\n * \r\n * To remove a tint call `clearTint`.\r\n * \r\n * To swap this from being an additive tint to a fill based tint set the property `tintFill` to `true`.\r\n *\r\n * @method Phaser.GameObjects.Components.Tint#setTint\r\n * @webglOnly\r\n * @since 3.0.0\r\n *\r\n * @param {integer} [topLeft=0xffffff] - The tint being applied to the top-left of the Game Object. If no other values are given this value is applied evenly, tinting the whole Game Object.\r\n * @param {integer} [topRight] - The tint being applied to the top-right of the Game Object.\r\n * @param {integer} [bottomLeft] - The tint being applied to the bottom-left of the Game Object.\r\n * @param {integer} [bottomRight] - The tint being applied to the bottom-right of the Game Object.\r\n * \r\n * @return {this} This Game Object instance.\r\n */\r\n setTint: function (topLeft, topRight, bottomLeft, bottomRight)\r\n {\r\n if (topLeft === undefined) { topLeft = 0xffffff; }\r\n\r\n if (topRight === undefined)\r\n {\r\n topRight = topLeft;\r\n bottomLeft = topLeft;\r\n bottomRight = topLeft;\r\n }\r\n\r\n this._tintTL = GetColor(topLeft);\r\n this._tintTR = GetColor(topRight);\r\n this._tintBL = GetColor(bottomLeft);\r\n this._tintBR = GetColor(bottomRight);\r\n\r\n this._isTinted = true;\r\n\r\n this.tintFill = false;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets a fill-based tint on this Game Object.\r\n * \r\n * Unlike an additive tint, a fill-tint literally replaces the pixel colors from the texture\r\n * with those in the tint. You can use this for effects such as making a player flash 'white'\r\n * if hit by something. You can provide either one color value, in which case the whole\r\n * Game Object will be rendered in that color. Or you can provide a color per corner. The colors\r\n * are blended together across the extent of the Game Object.\r\n * \r\n * To modify the tint color once set, either call this method again with new values or use the\r\n * `tint` property to set all colors at once. Or, use the properties `tintTopLeft`, `tintTopRight,\r\n * `tintBottomLeft` and `tintBottomRight` to set the corner color values independently.\r\n * \r\n * To remove a tint call `clearTint`.\r\n * \r\n * To swap this from being a fill-tint to an additive tint set the property `tintFill` to `false`.\r\n *\r\n * @method Phaser.GameObjects.Components.Tint#setTintFill\r\n * @webglOnly\r\n * @since 3.11.0\r\n *\r\n * @param {integer} [topLeft=0xffffff] - The tint being applied to the top-left of the Game Object. If not other values are given this value is applied evenly, tinting the whole Game Object.\r\n * @param {integer} [topRight] - The tint being applied to the top-right of the Game Object.\r\n * @param {integer} [bottomLeft] - The tint being applied to the bottom-left of the Game Object.\r\n * @param {integer} [bottomRight] - The tint being applied to the bottom-right of the Game Object.\r\n * \r\n * @return {this} This Game Object instance.\r\n */\r\n setTintFill: function (topLeft, topRight, bottomLeft, bottomRight)\r\n {\r\n this.setTint(topLeft, topRight, bottomLeft, bottomRight);\r\n\r\n this.tintFill = true;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * The tint value being applied to the top-left of the Game Object.\r\n * This value is interpolated from the corner to the center of the Game Object.\r\n * \r\n * @name Phaser.GameObjects.Components.Tint#tintTopLeft\r\n * @type {integer}\r\n * @webglOnly\r\n * @since 3.0.0\r\n */\r\n tintTopLeft: {\r\n\r\n get: function ()\r\n {\r\n return this._tintTL;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._tintTL = GetColor(value);\r\n this._isTinted = true;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The tint value being applied to the top-right of the Game Object.\r\n * This value is interpolated from the corner to the center of the Game Object.\r\n * \r\n * @name Phaser.GameObjects.Components.Tint#tintTopRight\r\n * @type {integer}\r\n * @webglOnly\r\n * @since 3.0.0\r\n */\r\n tintTopRight: {\r\n\r\n get: function ()\r\n {\r\n return this._tintTR;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._tintTR = GetColor(value);\r\n this._isTinted = true;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The tint value being applied to the bottom-left of the Game Object.\r\n * This value is interpolated from the corner to the center of the Game Object.\r\n * \r\n * @name Phaser.GameObjects.Components.Tint#tintBottomLeft\r\n * @type {integer}\r\n * @webglOnly\r\n * @since 3.0.0\r\n */\r\n tintBottomLeft: {\r\n\r\n get: function ()\r\n {\r\n return this._tintBL;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._tintBL = GetColor(value);\r\n this._isTinted = true;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The tint value being applied to the bottom-right of the Game Object.\r\n * This value is interpolated from the corner to the center of the Game Object.\r\n * \r\n * @name Phaser.GameObjects.Components.Tint#tintBottomRight\r\n * @type {integer}\r\n * @webglOnly\r\n * @since 3.0.0\r\n */\r\n tintBottomRight: {\r\n\r\n get: function ()\r\n {\r\n return this._tintBR;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._tintBR = GetColor(value);\r\n this._isTinted = true;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The tint value being applied to the whole of the Game Object.\r\n * This property is a setter-only. Use the properties `tintTopLeft` etc to read the current tint value.\r\n * \r\n * @name Phaser.GameObjects.Components.Tint#tint\r\n * @type {integer}\r\n * @webglOnly\r\n * @since 3.0.0\r\n */\r\n tint: {\r\n\r\n set: function (value)\r\n {\r\n this.setTint(value, value, value, value);\r\n }\r\n },\r\n\r\n /**\r\n * Does this Game Object have a tint applied to it or not?\r\n * \r\n * @name Phaser.GameObjects.Components.Tint#isTinted\r\n * @type {boolean}\r\n * @webglOnly\r\n * @readonly\r\n * @since 3.11.0\r\n */\r\n isTinted: {\r\n\r\n get: function ()\r\n {\r\n return this._isTinted;\r\n }\r\n\r\n }\r\n\r\n};\r\n\r\nmodule.exports = Tint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1RpbnQuanM/MzViOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0Msb0JBQW9COztBQUV4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1RpbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb24gR2V0Q29sb3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG52YXIgR2V0Q29sb3IgPSBmdW5jdGlvbiAodmFsdWUpXHJcbntcclxuICAgIHJldHVybiAodmFsdWUgPj4gMTYpICsgKHZhbHVlICYgMHhmZjAwKSArICgodmFsdWUgJiAweGZmKSA8PCAxNik7XHJcbn07XHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgbWV0aG9kcyB1c2VkIGZvciBzZXR0aW5nIHRoZSB0aW50IG9mIGEgR2FtZSBPYmplY3QuXHJcbiAqIFNob3VsZCBiZSBhcHBsaWVkIGFzIGEgbWl4aW4gYW5kIG5vdCB1c2VkIGRpcmVjdGx5LlxyXG4gKiBcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UaW50XHJcbiAqIEB3ZWJnbE9ubHlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5cclxudmFyIFRpbnQgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcml2YXRlIGludGVybmFsIHZhbHVlLiBIb2xkcyB0aGUgdG9wLWxlZnQgdGludCB2YWx1ZS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGludCNfdGludFRMXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBkZWZhdWx0IDE2Nzc3MjE1XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgX3RpbnRUTDogMTY3NzcyMTUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcml2YXRlIGludGVybmFsIHZhbHVlLiBIb2xkcyB0aGUgdG9wLXJpZ2h0IHRpbnQgdmFsdWUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRpbnQjX3RpbnRUUlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAZGVmYXVsdCAxNjc3NzIxNVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIF90aW50VFI6IDE2Nzc3MjE1LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS4gSG9sZHMgdGhlIGJvdHRvbS1sZWZ0IHRpbnQgdmFsdWUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRpbnQjX3RpbnRCTFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAZGVmYXVsdCAxNjc3NzIxNVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIF90aW50Qkw6IDE2Nzc3MjE1LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS4gSG9sZHMgdGhlIGJvdHRvbS1yaWdodCB0aW50IHZhbHVlLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UaW50I190aW50QlJcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGRlZmF1bHQgMTY3NzcyMTVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBfdGludEJSOiAxNjc3NzIxNSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByaXZhdGUgaW50ZXJuYWwgdmFsdWUuIEhvbGRzIGlmIHRoZSBHYW1lIE9iamVjdCBpcyB0aW50ZWQgb3Igbm90LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UaW50I19pc1RpbnRlZFxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqL1xyXG4gICAgX2lzVGludGVkOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbGwgb3IgYWRkaXRpdmU/XHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRpbnQjdGludEZpbGxcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqL1xyXG4gICAgdGludEZpbGw6IGZhbHNlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xlYXJzIGFsbCB0aW50IHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogSW1tZWRpYXRlbHkgc2V0cyB0aGUgY29sb3IgdmFsdWVzIGJhY2sgdG8gMHhmZmZmZmYgYW5kIHRoZSB0aW50IHR5cGUgdG8gJ2FkZGl0aXZlJyxcclxuICAgICAqIHdoaWNoIHJlc3VsdHMgaW4gbm8gdmlzaWJsZSBjaGFuZ2UgdG8gdGhlIHRleHR1cmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UaW50I2NsZWFyVGludFxyXG4gICAgICogQHdlYmdsT25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGNsZWFyVGludDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNldFRpbnQoMHhmZmZmZmYpO1xyXG5cclxuICAgICAgICB0aGlzLl9pc1RpbnRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGFuIGFkZGl0aXZlIHRpbnQgb24gdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogVGhlIHRpbnQgd29ya3MgYnkgdGFraW5nIHRoZSBwaXhlbCBjb2xvciB2YWx1ZXMgZnJvbSB0aGUgR2FtZSBPYmplY3RzIHRleHR1cmUsIGFuZCB0aGVuXHJcbiAgICAgKiBtdWx0aXBseWluZyBpdCBieSB0aGUgY29sb3IgdmFsdWUgb2YgdGhlIHRpbnQuIFlvdSBjYW4gcHJvdmlkZSBlaXRoZXIgb25lIGNvbG9yIHZhbHVlLFxyXG4gICAgICogaW4gd2hpY2ggY2FzZSB0aGUgd2hvbGUgR2FtZSBPYmplY3Qgd2lsbCBiZSB0aW50ZWQgaW4gdGhhdCBjb2xvci4gT3IgeW91IGNhbiBwcm92aWRlIGEgY29sb3JcclxuICAgICAqIHBlciBjb3JuZXIuIFRoZSBjb2xvcnMgYXJlIGJsZW5kZWQgdG9nZXRoZXIgYWNyb3NzIHRoZSBleHRlbnQgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBUbyBtb2RpZnkgdGhlIHRpbnQgY29sb3Igb25jZSBzZXQsIGVpdGhlciBjYWxsIHRoaXMgbWV0aG9kIGFnYWluIHdpdGggbmV3IHZhbHVlcyBvciB1c2UgdGhlXHJcbiAgICAgKiBgdGludGAgcHJvcGVydHkgdG8gc2V0IGFsbCBjb2xvcnMgYXQgb25jZS4gT3IsIHVzZSB0aGUgcHJvcGVydGllcyBgdGludFRvcExlZnRgLCBgdGludFRvcFJpZ2h0LFxyXG4gICAgICogYHRpbnRCb3R0b21MZWZ0YCBhbmQgYHRpbnRCb3R0b21SaWdodGAgdG8gc2V0IHRoZSBjb3JuZXIgY29sb3IgdmFsdWVzIGluZGVwZW5kZW50bHkuXHJcbiAgICAgKiBcclxuICAgICAqIFRvIHJlbW92ZSBhIHRpbnQgY2FsbCBgY2xlYXJUaW50YC5cclxuICAgICAqIFxyXG4gICAgICogVG8gc3dhcCB0aGlzIGZyb20gYmVpbmcgYW4gYWRkaXRpdmUgdGludCB0byBhIGZpbGwgYmFzZWQgdGludCBzZXQgdGhlIHByb3BlcnR5IGB0aW50RmlsbGAgdG8gYHRydWVgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGludCNzZXRUaW50XHJcbiAgICAgKiBAd2ViZ2xPbmx5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0b3BMZWZ0PTB4ZmZmZmZmXSAtIFRoZSB0aW50IGJlaW5nIGFwcGxpZWQgdG8gdGhlIHRvcC1sZWZ0IG9mIHRoZSBHYW1lIE9iamVjdC4gSWYgbm8gb3RoZXIgdmFsdWVzIGFyZSBnaXZlbiB0aGlzIHZhbHVlIGlzIGFwcGxpZWQgZXZlbmx5LCB0aW50aW5nIHRoZSB3aG9sZSBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3RvcFJpZ2h0XSAtIFRoZSB0aW50IGJlaW5nIGFwcGxpZWQgdG8gdGhlIHRvcC1yaWdodCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtib3R0b21MZWZ0XSAtIFRoZSB0aW50IGJlaW5nIGFwcGxpZWQgdG8gdGhlIGJvdHRvbS1sZWZ0IG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2JvdHRvbVJpZ2h0XSAtIFRoZSB0aW50IGJlaW5nIGFwcGxpZWQgdG8gdGhlIGJvdHRvbS1yaWdodCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFRpbnQ6IGZ1bmN0aW9uICh0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRvcExlZnQgPT09IHVuZGVmaW5lZCkgeyB0b3BMZWZ0ID0gMHhmZmZmZmY7IH1cclxuXHJcbiAgICAgICAgaWYgKHRvcFJpZ2h0ID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0b3BSaWdodCA9IHRvcExlZnQ7XHJcbiAgICAgICAgICAgIGJvdHRvbUxlZnQgPSB0b3BMZWZ0O1xyXG4gICAgICAgICAgICBib3R0b21SaWdodCA9IHRvcExlZnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90aW50VEwgPSBHZXRDb2xvcih0b3BMZWZ0KTtcclxuICAgICAgICB0aGlzLl90aW50VFIgPSBHZXRDb2xvcih0b3BSaWdodCk7XHJcbiAgICAgICAgdGhpcy5fdGludEJMID0gR2V0Q29sb3IoYm90dG9tTGVmdCk7XHJcbiAgICAgICAgdGhpcy5fdGludEJSID0gR2V0Q29sb3IoYm90dG9tUmlnaHQpO1xyXG5cclxuICAgICAgICB0aGlzLl9pc1RpbnRlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMudGludEZpbGwgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBhIGZpbGwtYmFzZWQgdGludCBvbiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBVbmxpa2UgYW4gYWRkaXRpdmUgdGludCwgYSBmaWxsLXRpbnQgbGl0ZXJhbGx5IHJlcGxhY2VzIHRoZSBwaXhlbCBjb2xvcnMgZnJvbSB0aGUgdGV4dHVyZVxyXG4gICAgICogd2l0aCB0aG9zZSBpbiB0aGUgdGludC4gWW91IGNhbiB1c2UgdGhpcyBmb3IgZWZmZWN0cyBzdWNoIGFzIG1ha2luZyBhIHBsYXllciBmbGFzaCAnd2hpdGUnXHJcbiAgICAgKiBpZiBoaXQgYnkgc29tZXRoaW5nLiBZb3UgY2FuIHByb3ZpZGUgZWl0aGVyIG9uZSBjb2xvciB2YWx1ZSwgaW4gd2hpY2ggY2FzZSB0aGUgd2hvbGVcclxuICAgICAqIEdhbWUgT2JqZWN0IHdpbGwgYmUgcmVuZGVyZWQgaW4gdGhhdCBjb2xvci4gT3IgeW91IGNhbiBwcm92aWRlIGEgY29sb3IgcGVyIGNvcm5lci4gVGhlIGNvbG9yc1xyXG4gICAgICogYXJlIGJsZW5kZWQgdG9nZXRoZXIgYWNyb3NzIHRoZSBleHRlbnQgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBUbyBtb2RpZnkgdGhlIHRpbnQgY29sb3Igb25jZSBzZXQsIGVpdGhlciBjYWxsIHRoaXMgbWV0aG9kIGFnYWluIHdpdGggbmV3IHZhbHVlcyBvciB1c2UgdGhlXHJcbiAgICAgKiBgdGludGAgcHJvcGVydHkgdG8gc2V0IGFsbCBjb2xvcnMgYXQgb25jZS4gT3IsIHVzZSB0aGUgcHJvcGVydGllcyBgdGludFRvcExlZnRgLCBgdGludFRvcFJpZ2h0LFxyXG4gICAgICogYHRpbnRCb3R0b21MZWZ0YCBhbmQgYHRpbnRCb3R0b21SaWdodGAgdG8gc2V0IHRoZSBjb3JuZXIgY29sb3IgdmFsdWVzIGluZGVwZW5kZW50bHkuXHJcbiAgICAgKiBcclxuICAgICAqIFRvIHJlbW92ZSBhIHRpbnQgY2FsbCBgY2xlYXJUaW50YC5cclxuICAgICAqIFxyXG4gICAgICogVG8gc3dhcCB0aGlzIGZyb20gYmVpbmcgYSBmaWxsLXRpbnQgdG8gYW4gYWRkaXRpdmUgdGludCBzZXQgdGhlIHByb3BlcnR5IGB0aW50RmlsbGAgdG8gYGZhbHNlYC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRpbnQjc2V0VGludEZpbGxcclxuICAgICAqIEB3ZWJnbE9ubHlcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0b3BMZWZ0PTB4ZmZmZmZmXSAtIFRoZSB0aW50IGJlaW5nIGFwcGxpZWQgdG8gdGhlIHRvcC1sZWZ0IG9mIHRoZSBHYW1lIE9iamVjdC4gSWYgbm90IG90aGVyIHZhbHVlcyBhcmUgZ2l2ZW4gdGhpcyB2YWx1ZSBpcyBhcHBsaWVkIGV2ZW5seSwgdGludGluZyB0aGUgd2hvbGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0b3BSaWdodF0gLSBUaGUgdGludCBiZWluZyBhcHBsaWVkIHRvIHRoZSB0b3AtcmlnaHQgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbYm90dG9tTGVmdF0gLSBUaGUgdGludCBiZWluZyBhcHBsaWVkIHRvIHRoZSBib3R0b20tbGVmdCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtib3R0b21SaWdodF0gLSBUaGUgdGludCBiZWluZyBhcHBsaWVkIHRvIHRoZSBib3R0b20tcmlnaHQgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRUaW50RmlsbDogZnVuY3Rpb24gKHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNldFRpbnQodG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTtcclxuXHJcbiAgICAgICAgdGhpcy50aW50RmlsbCA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0aW50IHZhbHVlIGJlaW5nIGFwcGxpZWQgdG8gdGhlIHRvcC1sZWZ0IG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIFRoaXMgdmFsdWUgaXMgaW50ZXJwb2xhdGVkIGZyb20gdGhlIGNvcm5lciB0byB0aGUgY2VudGVyIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGludCN0aW50VG9wTGVmdFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAd2ViZ2xPbmx5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdGludFRvcExlZnQ6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbnRUTDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbnRUTCA9IEdldENvbG9yKHZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5faXNUaW50ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRpbnQgdmFsdWUgYmVpbmcgYXBwbGllZCB0byB0aGUgdG9wLXJpZ2h0IG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIFRoaXMgdmFsdWUgaXMgaW50ZXJwb2xhdGVkIGZyb20gdGhlIGNvcm5lciB0byB0aGUgY2VudGVyIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGludCN0aW50VG9wUmlnaHRcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHdlYmdsT25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHRpbnRUb3BSaWdodDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGludFRSO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fdGludFRSID0gR2V0Q29sb3IodmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLl9pc1RpbnRlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdGludCB2YWx1ZSBiZWluZyBhcHBsaWVkIHRvIHRoZSBib3R0b20tbGVmdCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBUaGlzIHZhbHVlIGlzIGludGVycG9sYXRlZCBmcm9tIHRoZSBjb3JuZXIgdG8gdGhlIGNlbnRlciBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRpbnQjdGludEJvdHRvbUxlZnRcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHdlYmdsT25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHRpbnRCb3R0b21MZWZ0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW50Qkw7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl90aW50QkwgPSBHZXRDb2xvcih2YWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzVGludGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0aW50IHZhbHVlIGJlaW5nIGFwcGxpZWQgdG8gdGhlIGJvdHRvbS1yaWdodCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBUaGlzIHZhbHVlIGlzIGludGVycG9sYXRlZCBmcm9tIHRoZSBjb3JuZXIgdG8gdGhlIGNlbnRlciBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRpbnQjdGludEJvdHRvbVJpZ2h0XHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEB3ZWJnbE9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB0aW50Qm90dG9tUmlnaHQ6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbnRCUjtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbnRCUiA9IEdldENvbG9yKHZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5faXNUaW50ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRpbnQgdmFsdWUgYmVpbmcgYXBwbGllZCB0byB0aGUgd2hvbGUgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyBhIHNldHRlci1vbmx5LiBVc2UgdGhlIHByb3BlcnRpZXMgYHRpbnRUb3BMZWZ0YCBldGMgdG8gcmVhZCB0aGUgY3VycmVudCB0aW50IHZhbHVlLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UaW50I3RpbnRcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHdlYmdsT25seVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHRpbnQ6IHtcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldFRpbnQodmFsdWUsIHZhbHVlLCB2YWx1ZSwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEb2VzIHRoaXMgR2FtZSBPYmplY3QgaGF2ZSBhIHRpbnQgYXBwbGllZCB0byBpdCBvciBub3Q/XHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRpbnQjaXNUaW50ZWRcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQHdlYmdsT25seVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKi9cclxuICAgIGlzVGludGVkOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1RpbnRlZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVGludDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Tint.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/components/ToJSON.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/components/ToJSON.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Build a JSON representation of the given Game Object.\r\n *\r\n * This is typically extended further by Game Object specific implementations.\r\n *\r\n * @method Phaser.GameObjects.Components.ToJSON\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to export as JSON.\r\n *\r\n * @return {Phaser.Types.GameObjects.JSONGameObject} A JSON representation of the Game Object.\r\n */\r\nvar ToJSON = function (gameObject)\r\n{\r\n var out = {\r\n name: gameObject.name,\r\n type: gameObject.type,\r\n x: gameObject.x,\r\n y: gameObject.y,\r\n depth: gameObject.depth,\r\n scale: {\r\n x: gameObject.scaleX,\r\n y: gameObject.scaleY\r\n },\r\n origin: {\r\n x: gameObject.originX,\r\n y: gameObject.originY\r\n },\r\n flipX: gameObject.flipX,\r\n flipY: gameObject.flipY,\r\n rotation: gameObject.rotation,\r\n alpha: gameObject.alpha,\r\n visible: gameObject.visible,\r\n blendMode: gameObject.blendMode,\r\n textureKey: '',\r\n frameKey: '',\r\n data: {}\r\n };\r\n\r\n if (gameObject.texture)\r\n {\r\n out.textureKey = gameObject.texture.key;\r\n out.frameKey = gameObject.frame.name;\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = ToJSON;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1RvSlNPTi5qcz8zMjViIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekM7QUFDQSxZQUFZLHdDQUF3QztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2NvbXBvbmVudHMvVG9KU09OLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQnVpbGQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBHYW1lIE9iamVjdC5cclxuICpcclxuICogVGhpcyBpcyB0eXBpY2FsbHkgZXh0ZW5kZWQgZnVydGhlciBieSBHYW1lIE9iamVjdCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVG9KU09OXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRvIGV4cG9ydCBhcyBKU09OLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuSlNPTkdhbWVPYmplY3R9IEEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAqL1xyXG52YXIgVG9KU09OID0gZnVuY3Rpb24gKGdhbWVPYmplY3QpXHJcbntcclxuICAgIHZhciBvdXQgPSB7XHJcbiAgICAgICAgbmFtZTogZ2FtZU9iamVjdC5uYW1lLFxyXG4gICAgICAgIHR5cGU6IGdhbWVPYmplY3QudHlwZSxcclxuICAgICAgICB4OiBnYW1lT2JqZWN0LngsXHJcbiAgICAgICAgeTogZ2FtZU9iamVjdC55LFxyXG4gICAgICAgIGRlcHRoOiBnYW1lT2JqZWN0LmRlcHRoLFxyXG4gICAgICAgIHNjYWxlOiB7XHJcbiAgICAgICAgICAgIHg6IGdhbWVPYmplY3Quc2NhbGVYLFxyXG4gICAgICAgICAgICB5OiBnYW1lT2JqZWN0LnNjYWxlWVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb3JpZ2luOiB7XHJcbiAgICAgICAgICAgIHg6IGdhbWVPYmplY3Qub3JpZ2luWCxcclxuICAgICAgICAgICAgeTogZ2FtZU9iamVjdC5vcmlnaW5ZXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmbGlwWDogZ2FtZU9iamVjdC5mbGlwWCxcclxuICAgICAgICBmbGlwWTogZ2FtZU9iamVjdC5mbGlwWSxcclxuICAgICAgICByb3RhdGlvbjogZ2FtZU9iamVjdC5yb3RhdGlvbixcclxuICAgICAgICBhbHBoYTogZ2FtZU9iamVjdC5hbHBoYSxcclxuICAgICAgICB2aXNpYmxlOiBnYW1lT2JqZWN0LnZpc2libGUsXHJcbiAgICAgICAgYmxlbmRNb2RlOiBnYW1lT2JqZWN0LmJsZW5kTW9kZSxcclxuICAgICAgICB0ZXh0dXJlS2V5OiAnJyxcclxuICAgICAgICBmcmFtZUtleTogJycsXHJcbiAgICAgICAgZGF0YToge31cclxuICAgIH07XHJcblxyXG4gICAgaWYgKGdhbWVPYmplY3QudGV4dHVyZSlcclxuICAgIHtcclxuICAgICAgICBvdXQudGV4dHVyZUtleSA9IGdhbWVPYmplY3QudGV4dHVyZS5rZXk7XHJcbiAgICAgICAgb3V0LmZyYW1lS2V5ID0gZ2FtZU9iamVjdC5mcmFtZS5uYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRvSlNPTjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/ToJSON.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/components/Transform.js":
/*!*********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/components/Transform.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\nvar TransformMatrix = __webpack_require__(/*! ./TransformMatrix */ \"./node_modules/phaser/src/gameobjects/components/TransformMatrix.js\");\r\nvar WrapAngle = __webpack_require__(/*! ../../math/angle/Wrap */ \"./node_modules/phaser/src/math/angle/Wrap.js\");\r\nvar WrapAngleDegrees = __webpack_require__(/*! ../../math/angle/WrapDegrees */ \"./node_modules/phaser/src/math/angle/WrapDegrees.js\");\r\n\r\n// global bitmask flag for GameObject.renderMask (used by Scale)\r\nvar _FLAG = 4; // 0100\r\n\r\n/**\r\n * Provides methods used for getting and setting the position, scale and rotation of a Game Object.\r\n *\r\n * @namespace Phaser.GameObjects.Components.Transform\r\n * @since 3.0.0\r\n */\r\n\r\nvar Transform = {\r\n\r\n /**\r\n * Private internal value. Holds the horizontal scale value.\r\n * \r\n * @name Phaser.GameObjects.Components.Transform#_scaleX\r\n * @type {number}\r\n * @private\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n _scaleX: 1,\r\n\r\n /**\r\n * Private internal value. Holds the vertical scale value.\r\n * \r\n * @name Phaser.GameObjects.Components.Transform#_scaleY\r\n * @type {number}\r\n * @private\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n _scaleY: 1,\r\n\r\n /**\r\n * Private internal value. Holds the rotation value in radians.\r\n * \r\n * @name Phaser.GameObjects.Components.Transform#_rotation\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n _rotation: 0,\r\n\r\n /**\r\n * The x position of this Game Object.\r\n *\r\n * @name Phaser.GameObjects.Components.Transform#x\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n x: 0,\r\n\r\n /**\r\n * The y position of this Game Object.\r\n *\r\n * @name Phaser.GameObjects.Components.Transform#y\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n y: 0,\r\n\r\n /**\r\n * The z position of this Game Object.\r\n * Note: Do not use this value to set the z-index, instead see the `depth` property.\r\n *\r\n * @name Phaser.GameObjects.Components.Transform#z\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n z: 0,\r\n\r\n /**\r\n * The w position of this Game Object.\r\n *\r\n * @name Phaser.GameObjects.Components.Transform#w\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n w: 0,\r\n\r\n /**\r\n * This is a special setter that allows you to set both the horizontal and vertical scale of this Game Object\r\n * to the same value, at the same time. When reading this value the result returned is `(scaleX + scaleY) / 2`.\r\n * \r\n * Use of this property implies you wish the horizontal and vertical scales to be equal to each other. If this\r\n * isn't the case, use the `scaleX` or `scaleY` properties instead.\r\n *\r\n * @name Phaser.GameObjects.Components.Transform#scale\r\n * @type {number}\r\n * @default 1\r\n * @since 3.18.0\r\n */\r\n scale: {\r\n\r\n get: function ()\r\n {\r\n return (this._scaleX + this._scaleY) / 2;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._scaleX = value;\r\n this._scaleY = value;\r\n\r\n if (value === 0)\r\n {\r\n this.renderFlags &= ~_FLAG;\r\n }\r\n else\r\n {\r\n this.renderFlags |= _FLAG;\r\n }\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The horizontal scale of this Game Object.\r\n *\r\n * @name Phaser.GameObjects.Components.Transform#scaleX\r\n * @type {number}\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n scaleX: {\r\n\r\n get: function ()\r\n {\r\n return this._scaleX;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._scaleX = value;\r\n\r\n if (value === 0)\r\n {\r\n this.renderFlags &= ~_FLAG;\r\n }\r\n else\r\n {\r\n this.renderFlags |= _FLAG;\r\n }\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The vertical scale of this Game Object.\r\n *\r\n * @name Phaser.GameObjects.Components.Transform#scaleY\r\n * @type {number}\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n scaleY: {\r\n\r\n get: function ()\r\n {\r\n return this._scaleY;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._scaleY = value;\r\n\r\n if (value === 0)\r\n {\r\n this.renderFlags &= ~_FLAG;\r\n }\r\n else\r\n {\r\n this.renderFlags |= _FLAG;\r\n }\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The angle of this Game Object as expressed in degrees.\r\n * \r\n * Phaser uses a right-hand clockwise rotation system, where 0 is right, 90 is down, 180/-180 is left\r\n * and -90 is up.\r\n *\r\n * If you prefer to work in radians, see the `rotation` property instead.\r\n *\r\n * @name Phaser.GameObjects.Components.Transform#angle\r\n * @type {integer}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n angle: {\r\n\r\n get: function ()\r\n {\r\n return WrapAngleDegrees(this._rotation * MATH_CONST.RAD_TO_DEG);\r\n },\r\n\r\n set: function (value)\r\n {\r\n // value is in degrees\r\n this.rotation = WrapAngleDegrees(value) * MATH_CONST.DEG_TO_RAD;\r\n }\r\n },\r\n\r\n /**\r\n * The angle of this Game Object in radians.\r\n * \r\n * Phaser uses a right-hand clockwise rotation system, where 0 is right, 90 is down, 180/-180 is left\r\n * and -90 is up.\r\n *\r\n * If you prefer to work in degrees, see the `angle` property instead.\r\n *\r\n * @name Phaser.GameObjects.Components.Transform#rotation\r\n * @type {number}\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n rotation: {\r\n\r\n get: function ()\r\n {\r\n return this._rotation;\r\n },\r\n\r\n set: function (value)\r\n {\r\n // value is in radians\r\n this._rotation = WrapAngle(value);\r\n }\r\n },\r\n\r\n /**\r\n * Sets the position of this Game Object.\r\n *\r\n * @method Phaser.GameObjects.Components.Transform#setPosition\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x=0] - The x position of this Game Object.\r\n * @param {number} [y=x] - The y position of this Game Object. If not set it will use the `x` value.\r\n * @param {number} [z=0] - The z position of this Game Object.\r\n * @param {number} [w=0] - The w position of this Game Object.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setPosition: function (x, y, z, w)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = x; }\r\n if (z === undefined) { z = 0; }\r\n if (w === undefined) { w = 0; }\r\n\r\n this.x = x;\r\n this.y = y;\r\n this.z = z;\r\n this.w = w;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the position of this Game Object to be a random position within the confines of\r\n * the given area.\r\n * \r\n * If no area is specified a random position between 0 x 0 and the game width x height is used instead.\r\n *\r\n * The position does not factor in the size of this Game Object, meaning that only the origin is\r\n * guaranteed to be within the area.\r\n *\r\n * @method Phaser.GameObjects.Components.Transform#setRandomPosition\r\n * @since 3.8.0\r\n *\r\n * @param {number} [x=0] - The x position of the top-left of the random area.\r\n * @param {number} [y=0] - The y position of the top-left of the random area.\r\n * @param {number} [width] - The width of the random area.\r\n * @param {number} [height] - The height of the random area.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setRandomPosition: function (x, y, width, height)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n if (width === undefined) { width = this.scene.sys.scale.width; }\r\n if (height === undefined) { height = this.scene.sys.scale.height; }\r\n\r\n this.x = x + (Math.random() * width);\r\n this.y = y + (Math.random() * height);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the rotation of this Game Object.\r\n *\r\n * @method Phaser.GameObjects.Components.Transform#setRotation\r\n * @since 3.0.0\r\n *\r\n * @param {number} [radians=0] - The rotation of this Game Object, in radians.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setRotation: function (radians)\r\n {\r\n if (radians === undefined) { radians = 0; }\r\n\r\n this.rotation = radians;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the angle of this Game Object.\r\n *\r\n * @method Phaser.GameObjects.Components.Transform#setAngle\r\n * @since 3.0.0\r\n *\r\n * @param {number} [degrees=0] - The rotation of this Game Object, in degrees.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setAngle: function (degrees)\r\n {\r\n if (degrees === undefined) { degrees = 0; }\r\n\r\n this.angle = degrees;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the scale of this Game Object.\r\n *\r\n * @method Phaser.GameObjects.Components.Transform#setScale\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal scale of this Game Object.\r\n * @param {number} [y=x] - The vertical scale of this Game Object. If not set it will use the `x` value.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setScale: function (x, y)\r\n {\r\n if (x === undefined) { x = 1; }\r\n if (y === undefined) { y = x; }\r\n\r\n this.scaleX = x;\r\n this.scaleY = y;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the x position of this Game Object.\r\n *\r\n * @method Phaser.GameObjects.Components.Transform#setX\r\n * @since 3.0.0\r\n *\r\n * @param {number} [value=0] - The x position of this Game Object.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setX: function (value)\r\n {\r\n if (value === undefined) { value = 0; }\r\n\r\n this.x = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the y position of this Game Object.\r\n *\r\n * @method Phaser.GameObjects.Components.Transform#setY\r\n * @since 3.0.0\r\n *\r\n * @param {number} [value=0] - The y position of this Game Object.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setY: function (value)\r\n {\r\n if (value === undefined) { value = 0; }\r\n\r\n this.y = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the z position of this Game Object.\r\n *\r\n * @method Phaser.GameObjects.Components.Transform#setZ\r\n * @since 3.0.0\r\n *\r\n * @param {number} [value=0] - The z position of this Game Object.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setZ: function (value)\r\n {\r\n if (value === undefined) { value = 0; }\r\n\r\n this.z = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the w position of this Game Object.\r\n *\r\n * @method Phaser.GameObjects.Components.Transform#setW\r\n * @since 3.0.0\r\n *\r\n * @param {number} [value=0] - The w position of this Game Object.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setW: function (value)\r\n {\r\n if (value === undefined) { value = 0; }\r\n\r\n this.w = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Gets the local transform matrix for this Game Object.\r\n *\r\n * @method Phaser.GameObjects.Components.Transform#getLocalTransformMatrix\r\n * @since 3.4.0\r\n *\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} [tempMatrix] - The matrix to populate with the values from this Game Object.\r\n *\r\n * @return {Phaser.GameObjects.Components.TransformMatrix} The populated Transform Matrix.\r\n */\r\n getLocalTransformMatrix: function (tempMatrix)\r\n {\r\n if (tempMatrix === undefined) { tempMatrix = new TransformMatrix(); }\r\n\r\n return tempMatrix.applyITRS(this.x, this.y, this._rotation, this._scaleX, this._scaleY);\r\n },\r\n\r\n /**\r\n * Gets the world transform matrix for this Game Object, factoring in any parent Containers.\r\n *\r\n * @method Phaser.GameObjects.Components.Transform#getWorldTransformMatrix\r\n * @since 3.4.0\r\n *\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} [tempMatrix] - The matrix to populate with the values from this Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} [parentMatrix] - A temporary matrix to hold parent values during the calculations.\r\n *\r\n * @return {Phaser.GameObjects.Components.TransformMatrix} The populated Transform Matrix.\r\n */\r\n getWorldTransformMatrix: function (tempMatrix, parentMatrix)\r\n {\r\n if (tempMatrix === undefined) { tempMatrix = new TransformMatrix(); }\r\n if (parentMatrix === undefined) { parentMatrix = new TransformMatrix(); }\r\n\r\n var parent = this.parentContainer;\r\n\r\n if (!parent)\r\n {\r\n return this.getLocalTransformMatrix(tempMatrix);\r\n }\r\n\r\n tempMatrix.applyITRS(this.x, this.y, this._rotation, this._scaleX, this._scaleY);\r\n\r\n while (parent)\r\n {\r\n parentMatrix.applyITRS(parent.x, parent.y, parent._rotation, parent._scaleX, parent._scaleY);\r\n\r\n parentMatrix.multiply(tempMatrix, tempMatrix);\r\n\r\n parent = parent.parentContainer;\r\n }\r\n\r\n return tempMatrix;\r\n },\r\n\r\n /**\r\n * Gets the sum total rotation of all of this Game Objects parent Containers.\r\n * \r\n * The returned value is in radians and will be zero if this Game Object has no parent container.\r\n *\r\n * @method Phaser.GameObjects.Components.Transform#getParentRotation\r\n * @since 3.18.0\r\n *\r\n * @return {number} The sum total rotation, in radians, of all parent containers of this Game Object.\r\n */\r\n getParentRotation: function ()\r\n {\r\n var rotation = 0;\r\n\r\n var parent = this.parentContainer;\r\n\r\n while (parent)\r\n {\r\n rotation += parent.rotation;\r\n\r\n parent = parent.parentContainer;\r\n }\r\n\r\n return rotation;\r\n }\r\n\r\n};\r\n\r\nmodule.exports = Transform;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1RyYW5zZm9ybS5qcz84ZGI5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyxpRUFBa0I7QUFDM0Msc0JBQXNCLG1CQUFPLENBQUMsOEZBQW1CO0FBQ2pELGdCQUFnQixtQkFBTyxDQUFDLDJFQUF1QjtBQUMvQyx1QkFBdUIsbUJBQU8sQ0FBQyx5RkFBOEI7O0FBRTdEO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTztBQUNyQyw4QkFBOEIsT0FBTztBQUNyQyxrQ0FBa0Msb0NBQW9DO0FBQ3RFLG1DQUFtQyxzQ0FBc0M7O0FBRXpFO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxhQUFhOztBQUVqRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLGFBQWE7O0FBRWpEOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxXQUFXOztBQUU3Qzs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLFdBQVc7O0FBRTdDOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsV0FBVzs7QUFFN0M7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxXQUFXOztBQUU3Qzs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4Q0FBOEM7QUFDN0Q7QUFDQSxnQkFBZ0IsOENBQThDO0FBQzlEO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxvQ0FBb0M7O0FBRTNFO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhDQUE4QztBQUM3RCxlQUFlLDhDQUE4QztBQUM3RDtBQUNBLGdCQUFnQiw4Q0FBOEM7QUFDOUQ7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLG9DQUFvQztBQUMzRSx5Q0FBeUMsc0NBQXNDOztBQUUvRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1RyYW5zZm9ybS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIE1BVEhfQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9tYXRoL2NvbnN0Jyk7XHJcbnZhciBUcmFuc2Zvcm1NYXRyaXggPSByZXF1aXJlKCcuL1RyYW5zZm9ybU1hdHJpeCcpO1xyXG52YXIgV3JhcEFuZ2xlID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9hbmdsZS9XcmFwJyk7XHJcbnZhciBXcmFwQW5nbGVEZWdyZWVzID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9hbmdsZS9XcmFwRGVncmVlcycpO1xyXG5cclxuLy8gIGdsb2JhbCBiaXRtYXNrIGZsYWcgZm9yIEdhbWVPYmplY3QucmVuZGVyTWFzayAodXNlZCBieSBTY2FsZSlcclxudmFyIF9GTEFHID0gNDsgLy8gMDEwMFxyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgdXNlZCBmb3IgZ2V0dGluZyBhbmQgc2V0dGluZyB0aGUgcG9zaXRpb24sIHNjYWxlIGFuZCByb3RhdGlvbiBvZiBhIEdhbWUgT2JqZWN0LlxyXG4gKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcblxyXG52YXIgVHJhbnNmb3JtID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS4gSG9sZHMgdGhlIGhvcml6b250YWwgc2NhbGUgdmFsdWUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybSNfc2NhbGVYXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBfc2NhbGVYOiAxLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS4gSG9sZHMgdGhlIHZlcnRpY2FsIHNjYWxlIHZhbHVlLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm0jX3NjYWxlWVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgX3NjYWxlWTogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByaXZhdGUgaW50ZXJuYWwgdmFsdWUuIEhvbGRzIHRoZSByb3RhdGlvbiB2YWx1ZSBpbiByYWRpYW5zLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm0jX3JvdGF0aW9uXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBfcm90YXRpb246IDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgeCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybSN4XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGRlZmF1bHQgMFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHg6IDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgeSBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybSN5XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGRlZmF1bHQgMFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHk6IDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgeiBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogTm90ZTogRG8gbm90IHVzZSB0aGlzIHZhbHVlIHRvIHNldCB0aGUgei1pbmRleCwgaW5zdGVhZCBzZWUgdGhlIGBkZXB0aGAgcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtI3pcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgejogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB3IHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtI3dcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdzogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaXMgYSBzcGVjaWFsIHNldHRlciB0aGF0IGFsbG93cyB5b3UgdG8gc2V0IGJvdGggdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHNjYWxlIG9mIHRoaXMgR2FtZSBPYmplY3RcclxuICAgICAqIHRvIHRoZSBzYW1lIHZhbHVlLCBhdCB0aGUgc2FtZSB0aW1lLiBXaGVuIHJlYWRpbmcgdGhpcyB2YWx1ZSB0aGUgcmVzdWx0IHJldHVybmVkIGlzIGAoc2NhbGVYICsgc2NhbGVZKSAvIDJgLlxyXG4gICAgICogXHJcbiAgICAgKiBVc2Ugb2YgdGhpcyBwcm9wZXJ0eSBpbXBsaWVzIHlvdSB3aXNoIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzY2FsZXMgdG8gYmUgZXF1YWwgdG8gZWFjaCBvdGhlci4gSWYgdGhpc1xyXG4gICAgICogaXNuJ3QgdGhlIGNhc2UsIHVzZSB0aGUgYHNjYWxlWGAgb3IgYHNjYWxlWWAgcHJvcGVydGllcyBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybSNzY2FsZVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAqL1xyXG4gICAgc2NhbGU6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLl9zY2FsZVggKyB0aGlzLl9zY2FsZVkpIC8gMjtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NjYWxlWCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9zY2FsZVkgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJGbGFncyAmPSB+X0ZMQUc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckZsYWdzIHw9IF9GTEFHO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaG9yaXpvbnRhbCBzY2FsZSBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybSNzY2FsZVhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc2NhbGVYOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZVg7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9zY2FsZVggPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJGbGFncyAmPSB+X0ZMQUc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckZsYWdzIHw9IF9GTEFHO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdmVydGljYWwgc2NhbGUgb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm0jc2NhbGVZXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGRlZmF1bHQgMVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHNjYWxlWToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGVZO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fc2NhbGVZID0gdmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyRmxhZ3MgJj0gfl9GTEFHO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJGbGFncyB8PSBfRkxBRztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFuZ2xlIG9mIHRoaXMgR2FtZSBPYmplY3QgYXMgZXhwcmVzc2VkIGluIGRlZ3JlZXMuXHJcbiAgICAgKiBcclxuICAgICAqIFBoYXNlciB1c2VzIGEgcmlnaHQtaGFuZCBjbG9ja3dpc2Ugcm90YXRpb24gc3lzdGVtLCB3aGVyZSAwIGlzIHJpZ2h0LCA5MCBpcyBkb3duLCAxODAvLTE4MCBpcyBsZWZ0XHJcbiAgICAgKiBhbmQgLTkwIGlzIHVwLlxyXG4gICAgICpcclxuICAgICAqIElmIHlvdSBwcmVmZXIgdG8gd29yayBpbiByYWRpYW5zLCBzZWUgdGhlIGByb3RhdGlvbmAgcHJvcGVydHkgaW5zdGVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm0jYW5nbGVcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQGRlZmF1bHQgMFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGFuZ2xlOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBXcmFwQW5nbGVEZWdyZWVzKHRoaXMuX3JvdGF0aW9uICogTUFUSF9DT05TVC5SQURfVE9fREVHKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICB2YWx1ZSBpcyBpbiBkZWdyZWVzXHJcbiAgICAgICAgICAgIHRoaXMucm90YXRpb24gPSBXcmFwQW5nbGVEZWdyZWVzKHZhbHVlKSAqIE1BVEhfQ09OU1QuREVHX1RPX1JBRDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFuZ2xlIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gcmFkaWFucy5cclxuICAgICAqIFxyXG4gICAgICogUGhhc2VyIHVzZXMgYSByaWdodC1oYW5kIGNsb2Nrd2lzZSByb3RhdGlvbiBzeXN0ZW0sIHdoZXJlIDAgaXMgcmlnaHQsIDkwIGlzIGRvd24sIDE4MC8tMTgwIGlzIGxlZnRcclxuICAgICAqIGFuZCAtOTAgaXMgdXAuXHJcbiAgICAgKlxyXG4gICAgICogSWYgeW91IHByZWZlciB0byB3b3JrIGluIGRlZ3JlZXMsIHNlZSB0aGUgYGFuZ2xlYCBwcm9wZXJ0eSBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybSNyb3RhdGlvblxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICByb3RhdGlvbjoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgdmFsdWUgaXMgaW4gcmFkaWFuc1xyXG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IFdyYXBBbmdsZSh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm0jc2V0UG9zaXRpb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSB4IHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9eF0gLSBUaGUgeSBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0LiBJZiBub3Qgc2V0IGl0IHdpbGwgdXNlIHRoZSBgeGAgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3o9MF0gLSBUaGUgeiBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3PTBdIC0gVGhlIHcgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRQb3NpdGlvbjogZnVuY3Rpb24gKHgsIHksIHosIHcpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IHg7IH1cclxuICAgICAgICBpZiAoeiA9PT0gdW5kZWZpbmVkKSB7IHogPSAwOyB9XHJcbiAgICAgICAgaWYgKHcgPT09IHVuZGVmaW5lZCkgeyB3ID0gMDsgfVxyXG5cclxuICAgICAgICB0aGlzLnggPSB4O1xyXG4gICAgICAgIHRoaXMueSA9IHk7XHJcbiAgICAgICAgdGhpcy56ID0gejtcclxuICAgICAgICB0aGlzLncgPSB3O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IHRvIGJlIGEgcmFuZG9tIHBvc2l0aW9uIHdpdGhpbiB0aGUgY29uZmluZXMgb2ZcclxuICAgICAqIHRoZSBnaXZlbiBhcmVhLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiBubyBhcmVhIGlzIHNwZWNpZmllZCBhIHJhbmRvbSBwb3NpdGlvbiBiZXR3ZWVuIDAgeCAwIGFuZCB0aGUgZ2FtZSB3aWR0aCB4IGhlaWdodCBpcyB1c2VkIGluc3RlYWQuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHBvc2l0aW9uIGRvZXMgbm90IGZhY3RvciBpbiB0aGUgc2l6ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LCBtZWFuaW5nIHRoYXQgb25seSB0aGUgb3JpZ2luIGlzXHJcbiAgICAgKiBndWFyYW50ZWVkIHRvIGJlIHdpdGhpbiB0aGUgYXJlYS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybSNzZXRSYW5kb21Qb3NpdGlvblxyXG4gICAgICogQHNpbmNlIDMuOC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIHggcG9zaXRpb24gb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByYW5kb20gYXJlYS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB5IHBvc2l0aW9uIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmFuZG9tIGFyZWEuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3dpZHRoXSAtIFRoZSB3aWR0aCBvZiB0aGUgcmFuZG9tIGFyZWEuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodF0gLSBUaGUgaGVpZ2h0IG9mIHRoZSByYW5kb20gYXJlYS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRSYW5kb21Qb3NpdGlvbjogZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IDA7IH1cclxuICAgICAgICBpZiAod2lkdGggPT09IHVuZGVmaW5lZCkgeyB3aWR0aCA9IHRoaXMuc2NlbmUuc3lzLnNjYWxlLndpZHRoOyB9XHJcbiAgICAgICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IGhlaWdodCA9IHRoaXMuc2NlbmUuc3lzLnNjYWxlLmhlaWdodDsgfVxyXG5cclxuICAgICAgICB0aGlzLnggPSB4ICsgKE1hdGgucmFuZG9tKCkgKiB3aWR0aCk7XHJcbiAgICAgICAgdGhpcy55ID0geSArIChNYXRoLnJhbmRvbSgpICogaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcm90YXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybSNzZXRSb3RhdGlvblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtyYWRpYW5zPTBdIC0gVGhlIHJvdGF0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QsIGluIHJhZGlhbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0Um90YXRpb246IGZ1bmN0aW9uIChyYWRpYW5zKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChyYWRpYW5zID09PSB1bmRlZmluZWQpIHsgcmFkaWFucyA9IDA7IH1cclxuXHJcbiAgICAgICAgdGhpcy5yb3RhdGlvbiA9IHJhZGlhbnM7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGFuZ2xlIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm0jc2V0QW5nbGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVncmVlcz0wXSAtIFRoZSByb3RhdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0LCBpbiBkZWdyZWVzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEFuZ2xlOiBmdW5jdGlvbiAoZGVncmVlcylcclxuICAgIHtcclxuICAgICAgICBpZiAoZGVncmVlcyA9PT0gdW5kZWZpbmVkKSB7IGRlZ3JlZXMgPSAwOyB9XHJcblxyXG4gICAgICAgIHRoaXMuYW5nbGUgPSBkZWdyZWVzO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBzY2FsZSBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtI3NldFNjYWxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHNjYWxlIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9eF0gLSBUaGUgdmVydGljYWwgc2NhbGUgb2YgdGhpcyBHYW1lIE9iamVjdC4gSWYgbm90IHNldCBpdCB3aWxsIHVzZSB0aGUgYHhgIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFNjYWxlOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7IHggPSAxOyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0geDsgfVxyXG5cclxuICAgICAgICB0aGlzLnNjYWxlWCA9IHg7XHJcbiAgICAgICAgdGhpcy5zY2FsZVkgPSB5O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB4IHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm0jc2V0WFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt2YWx1ZT0wXSAtIFRoZSB4IHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0WDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7IHZhbHVlID0gMDsgfVxyXG5cclxuICAgICAgICB0aGlzLnggPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgeSBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtI3NldFlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdmFsdWU9MF0gLSBUaGUgeSBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFk6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9IDA7IH1cclxuXHJcbiAgICAgICAgdGhpcy55ID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHogcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybSNzZXRaXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ZhbHVlPTBdIC0gVGhlIHogcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRaOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsgdmFsdWUgPSAwOyB9XHJcblxyXG4gICAgICAgIHRoaXMueiA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB3IHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm0jc2V0V1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt2YWx1ZT0wXSAtIFRoZSB3IHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0VzogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7IHZhbHVlID0gMDsgfVxyXG5cclxuICAgICAgICB0aGlzLncgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgbG9jYWwgdHJhbnNmb3JtIG1hdHJpeCBmb3IgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybSNnZXRMb2NhbFRyYW5zZm9ybU1hdHJpeFxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IFt0ZW1wTWF0cml4XSAtIFRoZSBtYXRyaXggdG8gcG9wdWxhdGUgd2l0aCB0aGUgdmFsdWVzIGZyb20gdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IFRoZSBwb3B1bGF0ZWQgVHJhbnNmb3JtIE1hdHJpeC5cclxuICAgICAqL1xyXG4gICAgZ2V0TG9jYWxUcmFuc2Zvcm1NYXRyaXg6IGZ1bmN0aW9uICh0ZW1wTWF0cml4KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0ZW1wTWF0cml4ID09PSB1bmRlZmluZWQpIHsgdGVtcE1hdHJpeCA9IG5ldyBUcmFuc2Zvcm1NYXRyaXgoKTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGVtcE1hdHJpeC5hcHBseUlUUlModGhpcy54LCB0aGlzLnksIHRoaXMuX3JvdGF0aW9uLCB0aGlzLl9zY2FsZVgsIHRoaXMuX3NjYWxlWSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgd29ybGQgdHJhbnNmb3JtIG1hdHJpeCBmb3IgdGhpcyBHYW1lIE9iamVjdCwgZmFjdG9yaW5nIGluIGFueSBwYXJlbnQgQ29udGFpbmVycy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybSNnZXRXb3JsZFRyYW5zZm9ybU1hdHJpeFxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IFt0ZW1wTWF0cml4XSAtIFRoZSBtYXRyaXggdG8gcG9wdWxhdGUgd2l0aCB0aGUgdmFsdWVzIGZyb20gdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBbcGFyZW50TWF0cml4XSAtIEEgdGVtcG9yYXJ5IG1hdHJpeCB0byBob2xkIHBhcmVudCB2YWx1ZXMgZHVyaW5nIHRoZSBjYWxjdWxhdGlvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBUaGUgcG9wdWxhdGVkIFRyYW5zZm9ybSBNYXRyaXguXHJcbiAgICAgKi9cclxuICAgIGdldFdvcmxkVHJhbnNmb3JtTWF0cml4OiBmdW5jdGlvbiAodGVtcE1hdHJpeCwgcGFyZW50TWF0cml4KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0ZW1wTWF0cml4ID09PSB1bmRlZmluZWQpIHsgdGVtcE1hdHJpeCA9IG5ldyBUcmFuc2Zvcm1NYXRyaXgoKTsgfVxyXG4gICAgICAgIGlmIChwYXJlbnRNYXRyaXggPT09IHVuZGVmaW5lZCkgeyBwYXJlbnRNYXRyaXggPSBuZXcgVHJhbnNmb3JtTWF0cml4KCk7IH1cclxuXHJcbiAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Q29udGFpbmVyO1xyXG5cclxuICAgICAgICBpZiAoIXBhcmVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsVHJhbnNmb3JtTWF0cml4KHRlbXBNYXRyaXgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGVtcE1hdHJpeC5hcHBseUlUUlModGhpcy54LCB0aGlzLnksIHRoaXMuX3JvdGF0aW9uLCB0aGlzLl9zY2FsZVgsIHRoaXMuX3NjYWxlWSk7XHJcblxyXG4gICAgICAgIHdoaWxlIChwYXJlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwYXJlbnRNYXRyaXguYXBwbHlJVFJTKHBhcmVudC54LCBwYXJlbnQueSwgcGFyZW50Ll9yb3RhdGlvbiwgcGFyZW50Ll9zY2FsZVgsIHBhcmVudC5fc2NhbGVZKTtcclxuXHJcbiAgICAgICAgICAgIHBhcmVudE1hdHJpeC5tdWx0aXBseSh0ZW1wTWF0cml4LCB0ZW1wTWF0cml4KTtcclxuXHJcbiAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRDb250YWluZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGVtcE1hdHJpeDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBzdW0gdG90YWwgcm90YXRpb24gb2YgYWxsIG9mIHRoaXMgR2FtZSBPYmplY3RzIHBhcmVudCBDb250YWluZXJzLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgaW4gcmFkaWFucyBhbmQgd2lsbCBiZSB6ZXJvIGlmIHRoaXMgR2FtZSBPYmplY3QgaGFzIG5vIHBhcmVudCBjb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm0jZ2V0UGFyZW50Um90YXRpb25cclxuICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBzdW0gdG90YWwgcm90YXRpb24sIGluIHJhZGlhbnMsIG9mIGFsbCBwYXJlbnQgY29udGFpbmVycyBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRQYXJlbnRSb3RhdGlvbjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgcm90YXRpb24gPSAwO1xyXG5cclxuICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnRDb250YWluZXI7XHJcblxyXG4gICAgICAgIHdoaWxlIChwYXJlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByb3RhdGlvbiArPSBwYXJlbnQucm90YXRpb247XHJcblxyXG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Q29udGFpbmVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJvdGF0aW9uO1xyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVHJhbnNmb3JtO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Transform.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/components/TransformMatrix.js":
/*!***************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/components/TransformMatrix.js ***!
\***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Matrix used for display transformations for rendering.\r\n *\r\n * It is represented like so:\r\n *\r\n * ```\r\n * | a | c | tx |\r\n * | b | d | ty |\r\n * | 0 | 0 | 1 |\r\n * ```\r\n *\r\n * @class TransformMatrix\r\n * @memberof Phaser.GameObjects.Components\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {number} [a=1] - The Scale X value.\r\n * @param {number} [b=0] - The Skew Y value.\r\n * @param {number} [c=0] - The Skew X value.\r\n * @param {number} [d=1] - The Scale Y value.\r\n * @param {number} [tx=0] - The Translate X value.\r\n * @param {number} [ty=0] - The Translate Y value.\r\n */\r\nvar TransformMatrix = new Class({\r\n\r\n initialize:\r\n\r\n function TransformMatrix (a, b, c, d, tx, ty)\r\n {\r\n if (a === undefined) { a = 1; }\r\n if (b === undefined) { b = 0; }\r\n if (c === undefined) { c = 0; }\r\n if (d === undefined) { d = 1; }\r\n if (tx === undefined) { tx = 0; }\r\n if (ty === undefined) { ty = 0; }\r\n\r\n /**\r\n * The matrix values.\r\n *\r\n * @name Phaser.GameObjects.Components.TransformMatrix#matrix\r\n * @type {Float32Array}\r\n * @since 3.0.0\r\n */\r\n this.matrix = new Float32Array([ a, b, c, d, tx, ty, 0, 0, 1 ]);\r\n\r\n /**\r\n * The decomposed matrix.\r\n *\r\n * @name Phaser.GameObjects.Components.TransformMatrix#decomposedMatrix\r\n * @type {object}\r\n * @since 3.0.0\r\n */\r\n this.decomposedMatrix = {\r\n translateX: 0,\r\n translateY: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n rotation: 0\r\n };\r\n },\r\n\r\n /**\r\n * The Scale X value.\r\n *\r\n * @name Phaser.GameObjects.Components.TransformMatrix#a\r\n * @type {number}\r\n * @since 3.4.0\r\n */\r\n a: {\r\n\r\n get: function ()\r\n {\r\n return this.matrix[0];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.matrix[0] = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The Skew Y value.\r\n *\r\n * @name Phaser.GameObjects.Components.TransformMatrix#b\r\n * @type {number}\r\n * @since 3.4.0\r\n */\r\n b: {\r\n\r\n get: function ()\r\n {\r\n return this.matrix[1];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.matrix[1] = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The Skew X value.\r\n *\r\n * @name Phaser.GameObjects.Components.TransformMatrix#c\r\n * @type {number}\r\n * @since 3.4.0\r\n */\r\n c: {\r\n\r\n get: function ()\r\n {\r\n return this.matrix[2];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.matrix[2] = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The Scale Y value.\r\n *\r\n * @name Phaser.GameObjects.Components.TransformMatrix#d\r\n * @type {number}\r\n * @since 3.4.0\r\n */\r\n d: {\r\n\r\n get: function ()\r\n {\r\n return this.matrix[3];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.matrix[3] = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The Translate X value.\r\n *\r\n * @name Phaser.GameObjects.Components.TransformMatrix#e\r\n * @type {number}\r\n * @since 3.11.0\r\n */\r\n e: {\r\n\r\n get: function ()\r\n {\r\n return this.matrix[4];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.matrix[4] = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The Translate Y value.\r\n *\r\n * @name Phaser.GameObjects.Components.TransformMatrix#f\r\n * @type {number}\r\n * @since 3.11.0\r\n */\r\n f: {\r\n\r\n get: function ()\r\n {\r\n return this.matrix[5];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.matrix[5] = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The Translate X value.\r\n *\r\n * @name Phaser.GameObjects.Components.TransformMatrix#tx\r\n * @type {number}\r\n * @since 3.4.0\r\n */\r\n tx: {\r\n\r\n get: function ()\r\n {\r\n return this.matrix[4];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.matrix[4] = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The Translate Y value.\r\n *\r\n * @name Phaser.GameObjects.Components.TransformMatrix#ty\r\n * @type {number}\r\n * @since 3.4.0\r\n */\r\n ty: {\r\n\r\n get: function ()\r\n {\r\n return this.matrix[5];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.matrix[5] = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The rotation of the Matrix. Value is in radians.\r\n *\r\n * @name Phaser.GameObjects.Components.TransformMatrix#rotation\r\n * @type {number}\r\n * @readonly\r\n * @since 3.4.0\r\n */\r\n rotation: {\r\n\r\n get: function ()\r\n {\r\n return Math.acos(this.a / this.scaleX) * ((Math.atan(-this.c / this.a) < 0) ? -1 : 1);\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The rotation of the Matrix, normalized to be within the Phaser right-handed\r\n * clockwise rotation space. Value is in radians.\r\n *\r\n * @name Phaser.GameObjects.Components.TransformMatrix#rotationNormalized\r\n * @type {number}\r\n * @readonly\r\n * @since 3.19.0\r\n */\r\n rotationNormalized: {\r\n\r\n get: function ()\r\n {\r\n var matrix = this.matrix;\r\n\r\n var a = matrix[0];\r\n var b = matrix[1];\r\n var c = matrix[2];\r\n var d = matrix[3];\r\n\r\n if (a || b)\r\n {\r\n // var r = Math.sqrt(a * a + b * b);\r\n \r\n return (b > 0) ? Math.acos(a / this.scaleX) : -Math.acos(a / this.scaleX);\r\n }\r\n else if (c || d)\r\n {\r\n // var s = Math.sqrt(c * c + d * d);\r\n \r\n return MATH_CONST.TAU - ((d > 0) ? Math.acos(-c / this.scaleY) : -Math.acos(c / this.scaleY));\r\n }\r\n else\r\n {\r\n return 0;\r\n }\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The decomposed horizontal scale of the Matrix. This value is always positive.\r\n *\r\n * @name Phaser.GameObjects.Components.TransformMatrix#scaleX\r\n * @type {number}\r\n * @readonly\r\n * @since 3.4.0\r\n */\r\n scaleX: {\r\n\r\n get: function ()\r\n {\r\n return Math.sqrt((this.a * this.a) + (this.b * this.b));\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The decomposed vertical scale of the Matrix. This value is always positive.\r\n *\r\n * @name Phaser.GameObjects.Components.TransformMatrix#scaleY\r\n * @type {number}\r\n * @readonly\r\n * @since 3.4.0\r\n */\r\n scaleY: {\r\n\r\n get: function ()\r\n {\r\n return Math.sqrt((this.c * this.c) + (this.d * this.d));\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Reset the Matrix to an identity matrix.\r\n *\r\n * @method Phaser.GameObjects.Components.TransformMatrix#loadIdentity\r\n * @since 3.0.0\r\n *\r\n * @return {this} This TransformMatrix.\r\n */\r\n loadIdentity: function ()\r\n {\r\n var matrix = this.matrix;\r\n\r\n matrix[0] = 1;\r\n matrix[1] = 0;\r\n matrix[2] = 0;\r\n matrix[3] = 1;\r\n matrix[4] = 0;\r\n matrix[5] = 0;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Translate the Matrix.\r\n *\r\n * @method Phaser.GameObjects.Components.TransformMatrix#translate\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal translation value.\r\n * @param {number} y - The vertical translation value.\r\n *\r\n * @return {this} This TransformMatrix.\r\n */\r\n translate: function (x, y)\r\n {\r\n var matrix = this.matrix;\r\n\r\n matrix[4] = matrix[0] * x + matrix[2] * y + matrix[4];\r\n matrix[5] = matrix[1] * x + matrix[3] * y + matrix[5];\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Scale the Matrix.\r\n *\r\n * @method Phaser.GameObjects.Components.TransformMatrix#scale\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal scale value.\r\n * @param {number} y - The vertical scale value.\r\n *\r\n * @return {this} This TransformMatrix.\r\n */\r\n scale: function (x, y)\r\n {\r\n var matrix = this.matrix;\r\n\r\n matrix[0] *= x;\r\n matrix[1] *= x;\r\n matrix[2] *= y;\r\n matrix[3] *= y;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Rotate the Matrix.\r\n *\r\n * @method Phaser.GameObjects.Components.TransformMatrix#rotate\r\n * @since 3.0.0\r\n *\r\n * @param {number} angle - The angle of rotation in radians.\r\n *\r\n * @return {this} This TransformMatrix.\r\n */\r\n rotate: function (angle)\r\n {\r\n var sin = Math.sin(angle);\r\n var cos = Math.cos(angle);\r\n\r\n var matrix = this.matrix;\r\n\r\n var a = matrix[0];\r\n var b = matrix[1];\r\n var c = matrix[2];\r\n var d = matrix[3];\r\n\r\n matrix[0] = a * cos + c * sin;\r\n matrix[1] = b * cos + d * sin;\r\n matrix[2] = a * -sin + c * cos;\r\n matrix[3] = b * -sin + d * cos;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Multiply this Matrix by the given Matrix.\r\n * \r\n * If an `out` Matrix is given then the results will be stored in it.\r\n * If it is not given, this matrix will be updated in place instead.\r\n * Use an `out` Matrix if you do not wish to mutate this matrix.\r\n *\r\n * @method Phaser.GameObjects.Components.TransformMatrix#multiply\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} rhs - The Matrix to multiply by.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} [out] - An optional Matrix to store the results in.\r\n *\r\n * @return {Phaser.GameObjects.Components.TransformMatrix} Either this TransformMatrix, or the `out` Matrix, if given in the arguments.\r\n */\r\n multiply: function (rhs, out)\r\n {\r\n var matrix = this.matrix;\r\n var source = rhs.matrix;\r\n\r\n var localA = matrix[0];\r\n var localB = matrix[1];\r\n var localC = matrix[2];\r\n var localD = matrix[3];\r\n var localE = matrix[4];\r\n var localF = matrix[5];\r\n\r\n var sourceA = source[0];\r\n var sourceB = source[1];\r\n var sourceC = source[2];\r\n var sourceD = source[3];\r\n var sourceE = source[4];\r\n var sourceF = source[5];\r\n\r\n var destinationMatrix = (out === undefined) ? this : out;\r\n\r\n destinationMatrix.a = (sourceA * localA) + (sourceB * localC);\r\n destinationMatrix.b = (sourceA * localB) + (sourceB * localD);\r\n destinationMatrix.c = (sourceC * localA) + (sourceD * localC);\r\n destinationMatrix.d = (sourceC * localB) + (sourceD * localD);\r\n destinationMatrix.e = (sourceE * localA) + (sourceF * localC) + localE;\r\n destinationMatrix.f = (sourceE * localB) + (sourceF * localD) + localF;\r\n\r\n return destinationMatrix;\r\n },\r\n\r\n /**\r\n * Multiply this Matrix by the matrix given, including the offset.\r\n * \r\n * The offsetX is added to the tx value: `offsetX * a + offsetY * c + tx`.\r\n * The offsetY is added to the ty value: `offsetY * b + offsetY * d + ty`.\r\n *\r\n * @method Phaser.GameObjects.Components.TransformMatrix#multiplyWithOffset\r\n * @since 3.11.0\r\n *\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} src - The source Matrix to copy from.\r\n * @param {number} offsetX - Horizontal offset to factor in to the multiplication.\r\n * @param {number} offsetY - Vertical offset to factor in to the multiplication.\r\n *\r\n * @return {this} This TransformMatrix.\r\n */\r\n multiplyWithOffset: function (src, offsetX, offsetY)\r\n {\r\n var matrix = this.matrix;\r\n var otherMatrix = src.matrix;\r\n\r\n var a0 = matrix[0];\r\n var b0 = matrix[1];\r\n var c0 = matrix[2];\r\n var d0 = matrix[3];\r\n var tx0 = matrix[4];\r\n var ty0 = matrix[5];\r\n\r\n var pse = offsetX * a0 + offsetY * c0 + tx0;\r\n var psf = offsetX * b0 + offsetY * d0 + ty0;\r\n\r\n var a1 = otherMatrix[0];\r\n var b1 = otherMatrix[1];\r\n var c1 = otherMatrix[2];\r\n var d1 = otherMatrix[3];\r\n var tx1 = otherMatrix[4];\r\n var ty1 = otherMatrix[5];\r\n\r\n matrix[0] = a1 * a0 + b1 * c0;\r\n matrix[1] = a1 * b0 + b1 * d0;\r\n matrix[2] = c1 * a0 + d1 * c0;\r\n matrix[3] = c1 * b0 + d1 * d0;\r\n matrix[4] = tx1 * a0 + ty1 * c0 + pse;\r\n matrix[5] = tx1 * b0 + ty1 * d0 + psf;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Transform the Matrix.\r\n *\r\n * @method Phaser.GameObjects.Components.TransformMatrix#transform\r\n * @since 3.0.0\r\n *\r\n * @param {number} a - The Scale X value.\r\n * @param {number} b - The Shear Y value.\r\n * @param {number} c - The Shear X value.\r\n * @param {number} d - The Scale Y value.\r\n * @param {number} tx - The Translate X value.\r\n * @param {number} ty - The Translate Y value.\r\n *\r\n * @return {this} This TransformMatrix.\r\n */\r\n transform: function (a, b, c, d, tx, ty)\r\n {\r\n var matrix = this.matrix;\r\n\r\n var a0 = matrix[0];\r\n var b0 = matrix[1];\r\n var c0 = matrix[2];\r\n var d0 = matrix[3];\r\n var tx0 = matrix[4];\r\n var ty0 = matrix[5];\r\n\r\n matrix[0] = a * a0 + b * c0;\r\n matrix[1] = a * b0 + b * d0;\r\n matrix[2] = c * a0 + d * c0;\r\n matrix[3] = c * b0 + d * d0;\r\n matrix[4] = tx * a0 + ty * c0 + tx0;\r\n matrix[5] = tx * b0 + ty * d0 + ty0;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Transform a point using this Matrix.\r\n *\r\n * @method Phaser.GameObjects.Components.TransformMatrix#transformPoint\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x coordinate of the point to transform.\r\n * @param {number} y - The y coordinate of the point to transform.\r\n * @param {(Phaser.Geom.Point|Phaser.Math.Vector2|object)} point - The Point object to store the transformed coordinates.\r\n *\r\n * @return {(Phaser.Geom.Point|Phaser.Math.Vector2|object)} The Point containing the transformed coordinates.\r\n */\r\n transformPoint: function (x, y, point)\r\n {\r\n if (point === undefined) { point = { x: 0, y: 0 }; }\r\n\r\n var matrix = this.matrix;\r\n\r\n var a = matrix[0];\r\n var b = matrix[1];\r\n var c = matrix[2];\r\n var d = matrix[3];\r\n var tx = matrix[4];\r\n var ty = matrix[5];\r\n\r\n point.x = x * a + y * c + tx;\r\n point.y = x * b + y * d + ty;\r\n\r\n return point;\r\n },\r\n\r\n /**\r\n * Invert the Matrix.\r\n *\r\n * @method Phaser.GameObjects.Components.TransformMatrix#invert\r\n * @since 3.0.0\r\n *\r\n * @return {this} This TransformMatrix.\r\n */\r\n invert: function ()\r\n {\r\n var matrix = this.matrix;\r\n\r\n var a = matrix[0];\r\n var b = matrix[1];\r\n var c = matrix[2];\r\n var d = matrix[3];\r\n var tx = matrix[4];\r\n var ty = matrix[5];\r\n\r\n var n = a * d - b * c;\r\n\r\n matrix[0] = d / n;\r\n matrix[1] = -b / n;\r\n matrix[2] = -c / n;\r\n matrix[3] = a / n;\r\n matrix[4] = (c * ty - d * tx) / n;\r\n matrix[5] = -(a * ty - b * tx) / n;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the values of this Matrix to copy those of the matrix given.\r\n *\r\n * @method Phaser.GameObjects.Components.TransformMatrix#copyFrom\r\n * @since 3.11.0\r\n *\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} src - The source Matrix to copy from.\r\n *\r\n * @return {this} This TransformMatrix.\r\n */\r\n copyFrom: function (src)\r\n {\r\n var matrix = this.matrix;\r\n\r\n matrix[0] = src.a;\r\n matrix[1] = src.b;\r\n matrix[2] = src.c;\r\n matrix[3] = src.d;\r\n matrix[4] = src.e;\r\n matrix[5] = src.f;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the values of this Matrix to copy those of the array given.\r\n * Where array indexes 0, 1, 2, 3, 4 and 5 are mapped to a, b, c, d, e and f.\r\n *\r\n * @method Phaser.GameObjects.Components.TransformMatrix#copyFromArray\r\n * @since 3.11.0\r\n *\r\n * @param {array} src - The array of values to set into this matrix.\r\n *\r\n * @return {this} This TransformMatrix.\r\n */\r\n copyFromArray: function (src)\r\n {\r\n var matrix = this.matrix;\r\n\r\n matrix[0] = src[0];\r\n matrix[1] = src[1];\r\n matrix[2] = src[2];\r\n matrix[3] = src[3];\r\n matrix[4] = src[4];\r\n matrix[5] = src[5];\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Copy the values from this Matrix to the given Canvas Rendering Context.\r\n * This will use the Context.transform method.\r\n *\r\n * @method Phaser.GameObjects.Components.TransformMatrix#copyToContext\r\n * @since 3.12.0\r\n *\r\n * @param {CanvasRenderingContext2D} ctx - The Canvas Rendering Context to copy the matrix values to.\r\n *\r\n * @return {CanvasRenderingContext2D} The Canvas Rendering Context.\r\n */\r\n copyToContext: function (ctx)\r\n {\r\n var matrix = this.matrix;\r\n\r\n ctx.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);\r\n\r\n return ctx;\r\n },\r\n\r\n /**\r\n * Copy the values from this Matrix to the given Canvas Rendering Context.\r\n * This will use the Context.setTransform method.\r\n *\r\n * @method Phaser.GameObjects.Components.TransformMatrix#setToContext\r\n * @since 3.12.0\r\n *\r\n * @param {CanvasRenderingContext2D} ctx - The Canvas Rendering Context to copy the matrix values to.\r\n *\r\n * @return {CanvasRenderingContext2D} The Canvas Rendering Context.\r\n */\r\n setToContext: function (ctx)\r\n {\r\n var matrix = this.matrix;\r\n\r\n ctx.setTransform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);\r\n\r\n return ctx;\r\n },\r\n\r\n /**\r\n * Copy the values in this Matrix to the array given.\r\n * \r\n * Where array indexes 0, 1, 2, 3, 4 and 5 are mapped to a, b, c, d, e and f.\r\n *\r\n * @method Phaser.GameObjects.Components.TransformMatrix#copyToArray\r\n * @since 3.12.0\r\n *\r\n * @param {array} [out] - The array to copy the matrix values in to.\r\n *\r\n * @return {array} An array where elements 0 to 5 contain the values from this matrix.\r\n */\r\n copyToArray: function (out)\r\n {\r\n var matrix = this.matrix;\r\n\r\n if (out === undefined)\r\n {\r\n out = [ matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5] ];\r\n }\r\n else\r\n {\r\n out[0] = matrix[0];\r\n out[1] = matrix[1];\r\n out[2] = matrix[2];\r\n out[3] = matrix[3];\r\n out[4] = matrix[4];\r\n out[5] = matrix[5];\r\n }\r\n\r\n return out;\r\n },\r\n\r\n /**\r\n * Set the values of this Matrix.\r\n *\r\n * @method Phaser.GameObjects.Components.TransformMatrix#setTransform\r\n * @since 3.0.0\r\n *\r\n * @param {number} a - The Scale X value.\r\n * @param {number} b - The Shear Y value.\r\n * @param {number} c - The Shear X value.\r\n * @param {number} d - The Scale Y value.\r\n * @param {number} tx - The Translate X value.\r\n * @param {number} ty - The Translate Y value.\r\n *\r\n * @return {this} This TransformMatrix.\r\n */\r\n setTransform: function (a, b, c, d, tx, ty)\r\n {\r\n var matrix = this.matrix;\r\n\r\n matrix[0] = a;\r\n matrix[1] = b;\r\n matrix[2] = c;\r\n matrix[3] = d;\r\n matrix[4] = tx;\r\n matrix[5] = ty;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Decompose this Matrix into its translation, scale and rotation values using QR decomposition.\r\n * \r\n * The result must be applied in the following order to reproduce the current matrix:\r\n * \r\n * translate -> rotate -> scale\r\n *\r\n * @method Phaser.GameObjects.Components.TransformMatrix#decomposeMatrix\r\n * @since 3.0.0\r\n *\r\n * @return {object} The decomposed Matrix.\r\n */\r\n decomposeMatrix: function ()\r\n {\r\n var decomposedMatrix = this.decomposedMatrix;\r\n\r\n var matrix = this.matrix;\r\n\r\n // a = scale X (1)\r\n // b = shear Y (0)\r\n // c = shear X (0)\r\n // d = scale Y (1)\r\n\r\n var a = matrix[0];\r\n var b = matrix[1];\r\n var c = matrix[2];\r\n var d = matrix[3];\r\n\r\n var determ = a * d - b * c;\r\n\r\n decomposedMatrix.translateX = matrix[4];\r\n decomposedMatrix.translateY = matrix[5];\r\n\r\n if (a || b)\r\n {\r\n var r = Math.sqrt(a * a + b * b);\r\n\r\n decomposedMatrix.rotation = (b > 0) ? Math.acos(a / r) : -Math.acos(a / r);\r\n decomposedMatrix.scaleX = r;\r\n decomposedMatrix.scaleY = determ / r;\r\n }\r\n else if (c || d)\r\n {\r\n var s = Math.sqrt(c * c + d * d);\r\n\r\n decomposedMatrix.rotation = Math.PI * 0.5 - (d > 0 ? Math.acos(-c / s) : -Math.acos(c / s));\r\n decomposedMatrix.scaleX = determ / s;\r\n decomposedMatrix.scaleY = s;\r\n }\r\n else\r\n {\r\n decomposedMatrix.rotation = 0;\r\n decomposedMatrix.scaleX = 0;\r\n decomposedMatrix.scaleY = 0;\r\n }\r\n\r\n return decomposedMatrix;\r\n },\r\n\r\n /**\r\n * Apply the identity, translate, rotate and scale operations on the Matrix.\r\n *\r\n * @method Phaser.GameObjects.Components.TransformMatrix#applyITRS\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal translation.\r\n * @param {number} y - The vertical translation.\r\n * @param {number} rotation - The angle of rotation in radians.\r\n * @param {number} scaleX - The horizontal scale.\r\n * @param {number} scaleY - The vertical scale.\r\n *\r\n * @return {this} This TransformMatrix.\r\n */\r\n applyITRS: function (x, y, rotation, scaleX, scaleY)\r\n {\r\n var matrix = this.matrix;\r\n\r\n var radianSin = Math.sin(rotation);\r\n var radianCos = Math.cos(rotation);\r\n\r\n // Translate\r\n matrix[4] = x;\r\n matrix[5] = y;\r\n\r\n // Rotate and Scale\r\n matrix[0] = radianCos * scaleX;\r\n matrix[1] = radianSin * scaleX;\r\n matrix[2] = -radianSin * scaleY;\r\n matrix[3] = radianCos * scaleY;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Takes the `x` and `y` values and returns a new position in the `output` vector that is the inverse of\r\n * the current matrix with its transformation applied.\r\n * \r\n * Can be used to translate points from world to local space.\r\n *\r\n * @method Phaser.GameObjects.Components.TransformMatrix#applyInverse\r\n * @since 3.12.0\r\n *\r\n * @param {number} x - The x position to translate.\r\n * @param {number} y - The y position to translate.\r\n * @param {Phaser.Math.Vector2} [output] - A Vector2, or point-like object, to store the results in.\r\n *\r\n * @return {Phaser.Math.Vector2} The coordinates, inverse-transformed through this matrix.\r\n */\r\n applyInverse: function (x, y, output)\r\n {\r\n if (output === undefined) { output = new Vector2(); }\r\n\r\n var matrix = this.matrix;\r\n\r\n var a = matrix[0];\r\n var b = matrix[1];\r\n var c = matrix[2];\r\n var d = matrix[3];\r\n var tx = matrix[4];\r\n var ty = matrix[5];\r\n\r\n var id = 1 / ((a * d) + (c * -b));\r\n\r\n output.x = (d * id * x) + (-c * id * y) + (((ty * c) - (tx * d)) * id);\r\n output.y = (a * id * y) + (-b * id * x) + (((-ty * a) + (tx * b)) * id);\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Returns the X component of this matrix multiplied by the given values.\r\n * This is the same as `x * a + y * c + e`.\r\n *\r\n * @method Phaser.GameObjects.Components.TransformMatrix#getX\r\n * @since 3.12.0\r\n * \r\n * @param {number} x - The x value.\r\n * @param {number} y - The y value.\r\n *\r\n * @return {number} The calculated x value.\r\n */\r\n getX: function (x, y)\r\n {\r\n return x * this.a + y * this.c + this.e;\r\n },\r\n\r\n /**\r\n * Returns the Y component of this matrix multiplied by the given values.\r\n * This is the same as `x * b + y * d + f`.\r\n *\r\n * @method Phaser.GameObjects.Components.TransformMatrix#getY\r\n * @since 3.12.0\r\n * \r\n * @param {number} x - The x value.\r\n * @param {number} y - The y value.\r\n *\r\n * @return {number} The calculated y value.\r\n */\r\n getY: function (x, y)\r\n {\r\n return x * this.b + y * this.d + this.f;\r\n },\r\n\r\n /**\r\n * Returns a string that can be used in a CSS Transform call as a `matrix` property.\r\n *\r\n * @method Phaser.GameObjects.Components.TransformMatrix#getCSSMatrix\r\n * @since 3.12.0\r\n *\r\n * @return {string} A string containing the CSS Transform matrix values.\r\n */\r\n getCSSMatrix: function ()\r\n {\r\n var m = this.matrix;\r\n\r\n return 'matrix(' + m[0] + ',' + m[1] + ',' + m[2] + ',' + m[3] + ',' + m[4] + ',' + m[5] + ')';\r\n },\r\n\r\n /**\r\n * Destroys this Transform Matrix.\r\n *\r\n * @method Phaser.GameObjects.Components.TransformMatrix#destroy\r\n * @since 3.4.0\r\n */\r\n destroy: function ()\r\n {\r\n this.matrix = null;\r\n this.decomposedMatrix = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = TransformMatrix;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1RyYW5zZm9ybU1hdHJpeC5qcz8yZWQ5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLGlFQUFrQjtBQUMzQyxjQUFjLG1CQUFPLENBQUMscUVBQW9COztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87QUFDckMsK0JBQStCLFFBQVE7QUFDdkMsK0JBQStCLFFBQVE7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhDQUE4QztBQUM3RCxlQUFlLDhDQUE4QztBQUM3RDtBQUNBLGdCQUFnQiw4Q0FBOEM7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4Q0FBOEM7QUFDN0QsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsK0NBQStDO0FBQzlEO0FBQ0EsZ0JBQWdCLCtDQUErQztBQUMvRDtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsVUFBVSxjQUFjOztBQUUxRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4Q0FBOEM7QUFDN0Q7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUseUJBQXlCO0FBQ3hDO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHlCQUF5QjtBQUN4QztBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckI7QUFDQSxnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsd0JBQXdCOztBQUUzRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvY29tcG9uZW50cy9UcmFuc2Zvcm1NYXRyaXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBNQVRIX0NPTlNUID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9jb25zdCcpO1xyXG52YXIgVmVjdG9yMiA9IHJlcXVpcmUoJy4uLy4uL21hdGgvVmVjdG9yMicpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBNYXRyaXggdXNlZCBmb3IgZGlzcGxheSB0cmFuc2Zvcm1hdGlvbnMgZm9yIHJlbmRlcmluZy5cclxuICpcclxuICogSXQgaXMgcmVwcmVzZW50ZWQgbGlrZSBzbzpcclxuICpcclxuICogYGBgXHJcbiAqIHwgYSB8IGMgfCB0eCB8XHJcbiAqIHwgYiB8IGQgfCB0eSB8XHJcbiAqIHwgMCB8IDAgfCAxICB8XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAY2xhc3MgVHJhbnNmb3JtTWF0cml4XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYT0xXSAtIFRoZSBTY2FsZSBYIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2I9MF0gLSBUaGUgU2tldyBZIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2M9MF0gLSBUaGUgU2tldyBYIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2Q9MV0gLSBUaGUgU2NhbGUgWSB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt0eD0wXSAtIFRoZSBUcmFuc2xhdGUgWCB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt0eT0wXSAtIFRoZSBUcmFuc2xhdGUgWSB2YWx1ZS5cclxuICovXHJcbnZhciBUcmFuc2Zvcm1NYXRyaXggPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gVHJhbnNmb3JtTWF0cml4IChhLCBiLCBjLCBkLCB0eCwgdHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGEgPT09IHVuZGVmaW5lZCkgeyBhID0gMTsgfVxyXG4gICAgICAgIGlmIChiID09PSB1bmRlZmluZWQpIHsgYiA9IDA7IH1cclxuICAgICAgICBpZiAoYyA9PT0gdW5kZWZpbmVkKSB7IGMgPSAwOyB9XHJcbiAgICAgICAgaWYgKGQgPT09IHVuZGVmaW5lZCkgeyBkID0gMTsgfVxyXG4gICAgICAgIGlmICh0eCA9PT0gdW5kZWZpbmVkKSB7IHR4ID0gMDsgfVxyXG4gICAgICAgIGlmICh0eSA9PT0gdW5kZWZpbmVkKSB7IHR5ID0gMDsgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbWF0cml4IHZhbHVlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNtYXRyaXhcclxuICAgICAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWF0cml4ID0gbmV3IEZsb2F0MzJBcnJheShbIGEsIGIsIGMsIGQsIHR4LCB0eSwgMCwgMCwgMSBdKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRlY29tcG9zZWQgbWF0cml4LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4I2RlY29tcG9zZWRNYXRyaXhcclxuICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGVjb21wb3NlZE1hdHJpeCA9IHtcclxuICAgICAgICAgICAgdHJhbnNsYXRlWDogMCxcclxuICAgICAgICAgICAgdHJhbnNsYXRlWTogMCxcclxuICAgICAgICAgICAgc2NhbGVYOiAxLFxyXG4gICAgICAgICAgICBzY2FsZVk6IDEsXHJcbiAgICAgICAgICAgIHJvdGF0aW9uOiAwXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgU2NhbGUgWCB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgjYVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICovXHJcbiAgICBhOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hdHJpeFswXTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0cml4WzBdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgU2tldyBZIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNiXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKi9cclxuICAgIGI6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF0cml4WzFdO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tYXRyaXhbMV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBTa2V3IFggdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4I2NcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqL1xyXG4gICAgYzoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXRyaXhbMl07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1hdHJpeFsyXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNjYWxlIFkgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4I2RcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqL1xyXG4gICAgZDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXRyaXhbM107XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1hdHJpeFszXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFRyYW5zbGF0ZSBYIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNlXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICovXHJcbiAgICBlOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hdHJpeFs0XTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0cml4WzRdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgVHJhbnNsYXRlIFkgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4I2ZcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKi9cclxuICAgIGY6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF0cml4WzVdO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tYXRyaXhbNV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBUcmFuc2xhdGUgWCB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgjdHhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqL1xyXG4gICAgdHg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF0cml4WzRdO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tYXRyaXhbNF0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBUcmFuc2xhdGUgWSB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgjdHlcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqL1xyXG4gICAgdHk6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF0cml4WzVdO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tYXRyaXhbNV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSByb3RhdGlvbiBvZiB0aGUgTWF0cml4LiBWYWx1ZSBpcyBpbiByYWRpYW5zLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNyb3RhdGlvblxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKi9cclxuICAgIHJvdGF0aW9uOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFjb3ModGhpcy5hIC8gdGhpcy5zY2FsZVgpICogKChNYXRoLmF0YW4oLXRoaXMuYyAvIHRoaXMuYSkgPCAwKSA/IC0xIDogMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIE1hdHJpeCwgbm9ybWFsaXplZCB0byBiZSB3aXRoaW4gdGhlIFBoYXNlciByaWdodC1oYW5kZWRcclxuICAgICAqIGNsb2Nrd2lzZSByb3RhdGlvbiBzcGFjZS4gVmFsdWUgaXMgaW4gcmFkaWFucy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgjcm90YXRpb25Ob3JtYWxpemVkXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgKi9cclxuICAgIHJvdGF0aW9uTm9ybWFsaXplZDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgbWF0cml4ID0gdGhpcy5tYXRyaXg7XHJcblxyXG4gICAgICAgICAgICB2YXIgYSA9IG1hdHJpeFswXTtcclxuICAgICAgICAgICAgdmFyIGIgPSBtYXRyaXhbMV07XHJcbiAgICAgICAgICAgIHZhciBjID0gbWF0cml4WzJdO1xyXG4gICAgICAgICAgICB2YXIgZCA9IG1hdHJpeFszXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChhIHx8IGIpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vIHZhciByID0gTWF0aC5zcXJ0KGEgKiBhICsgYiAqIGIpO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKGIgPiAwKSA/IE1hdGguYWNvcyhhIC8gdGhpcy5zY2FsZVgpIDogLU1hdGguYWNvcyhhIC8gdGhpcy5zY2FsZVgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGMgfHwgZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gdmFyIHMgPSBNYXRoLnNxcnQoYyAqIGMgKyBkICogZCk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIHJldHVybiBNQVRIX0NPTlNULlRBVSAtICgoZCA+IDApID8gTWF0aC5hY29zKC1jIC8gdGhpcy5zY2FsZVkpIDogLU1hdGguYWNvcyhjIC8gdGhpcy5zY2FsZVkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZGVjb21wb3NlZCBob3Jpem9udGFsIHNjYWxlIG9mIHRoZSBNYXRyaXguIFRoaXMgdmFsdWUgaXMgYWx3YXlzIHBvc2l0aXZlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNzY2FsZVhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICovXHJcbiAgICBzY2FsZVg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGguc3FydCgodGhpcy5hICogdGhpcy5hKSArICh0aGlzLmIgKiB0aGlzLmIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkZWNvbXBvc2VkIHZlcnRpY2FsIHNjYWxlIG9mIHRoZSBNYXRyaXguIFRoaXMgdmFsdWUgaXMgYWx3YXlzIHBvc2l0aXZlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNzY2FsZVlcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICovXHJcbiAgICBzY2FsZVk6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGguc3FydCgodGhpcy5jICogdGhpcy5jKSArICh0aGlzLmQgKiB0aGlzLmQpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0IHRoZSBNYXRyaXggdG8gYW4gaWRlbnRpdHkgbWF0cml4LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4I2xvYWRJZGVudGl0eVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBUcmFuc2Zvcm1NYXRyaXguXHJcbiAgICAgKi9cclxuICAgIGxvYWRJZGVudGl0eTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgbWF0cml4ID0gdGhpcy5tYXRyaXg7XHJcblxyXG4gICAgICAgIG1hdHJpeFswXSA9IDE7XHJcbiAgICAgICAgbWF0cml4WzFdID0gMDtcclxuICAgICAgICBtYXRyaXhbMl0gPSAwO1xyXG4gICAgICAgIG1hdHJpeFszXSA9IDE7XHJcbiAgICAgICAgbWF0cml4WzRdID0gMDtcclxuICAgICAgICBtYXRyaXhbNV0gPSAwO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2xhdGUgdGhlIE1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCN0cmFuc2xhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgdHJhbnNsYXRpb24gdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCB0cmFuc2xhdGlvbiB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFRyYW5zZm9ybU1hdHJpeC5cclxuICAgICAqL1xyXG4gICAgdHJhbnNsYXRlOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICB2YXIgbWF0cml4ID0gdGhpcy5tYXRyaXg7XHJcblxyXG4gICAgICAgIG1hdHJpeFs0XSA9IG1hdHJpeFswXSAqIHggKyBtYXRyaXhbMl0gKiB5ICsgbWF0cml4WzRdO1xyXG4gICAgICAgIG1hdHJpeFs1XSA9IG1hdHJpeFsxXSAqIHggKyBtYXRyaXhbM10gKiB5ICsgbWF0cml4WzVdO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSB0aGUgTWF0cml4LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4I3NjYWxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHNjYWxlIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgc2NhbGUgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBUcmFuc2Zvcm1NYXRyaXguXHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICB2YXIgbWF0cml4ID0gdGhpcy5tYXRyaXg7XHJcblxyXG4gICAgICAgIG1hdHJpeFswXSAqPSB4O1xyXG4gICAgICAgIG1hdHJpeFsxXSAqPSB4O1xyXG4gICAgICAgIG1hdHJpeFsyXSAqPSB5O1xyXG4gICAgICAgIG1hdHJpeFszXSAqPSB5O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgdGhlIE1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNyb3RhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZSAtIFRoZSBhbmdsZSBvZiByb3RhdGlvbiBpbiByYWRpYW5zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgVHJhbnNmb3JtTWF0cml4LlxyXG4gICAgICovXHJcbiAgICByb3RhdGU6IGZ1bmN0aW9uIChhbmdsZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgc2luID0gTWF0aC5zaW4oYW5nbGUpO1xyXG4gICAgICAgIHZhciBjb3MgPSBNYXRoLmNvcyhhbmdsZSk7XHJcblxyXG4gICAgICAgIHZhciBtYXRyaXggPSB0aGlzLm1hdHJpeDtcclxuXHJcbiAgICAgICAgdmFyIGEgPSBtYXRyaXhbMF07XHJcbiAgICAgICAgdmFyIGIgPSBtYXRyaXhbMV07XHJcbiAgICAgICAgdmFyIGMgPSBtYXRyaXhbMl07XHJcbiAgICAgICAgdmFyIGQgPSBtYXRyaXhbM107XHJcblxyXG4gICAgICAgIG1hdHJpeFswXSA9IGEgKiBjb3MgKyBjICogc2luO1xyXG4gICAgICAgIG1hdHJpeFsxXSA9IGIgKiBjb3MgKyBkICogc2luO1xyXG4gICAgICAgIG1hdHJpeFsyXSA9IGEgKiAtc2luICsgYyAqIGNvcztcclxuICAgICAgICBtYXRyaXhbM10gPSBiICogLXNpbiArIGQgKiBjb3M7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11bHRpcGx5IHRoaXMgTWF0cml4IGJ5IHRoZSBnaXZlbiBNYXRyaXguXHJcbiAgICAgKiBcclxuICAgICAqIElmIGFuIGBvdXRgIE1hdHJpeCBpcyBnaXZlbiB0aGVuIHRoZSByZXN1bHRzIHdpbGwgYmUgc3RvcmVkIGluIGl0LlxyXG4gICAgICogSWYgaXQgaXMgbm90IGdpdmVuLCB0aGlzIG1hdHJpeCB3aWxsIGJlIHVwZGF0ZWQgaW4gcGxhY2UgaW5zdGVhZC5cclxuICAgICAqIFVzZSBhbiBgb3V0YCBNYXRyaXggaWYgeW91IGRvIG5vdCB3aXNoIHRvIG11dGF0ZSB0aGlzIG1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNtdWx0aXBseVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHJocyAtIFRoZSBNYXRyaXggdG8gbXVsdGlwbHkgYnkuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gW291dF0gLSBBbiBvcHRpb25hbCBNYXRyaXggdG8gc3RvcmUgdGhlIHJlc3VsdHMgaW4uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBFaXRoZXIgdGhpcyBUcmFuc2Zvcm1NYXRyaXgsIG9yIHRoZSBgb3V0YCBNYXRyaXgsIGlmIGdpdmVuIGluIHRoZSBhcmd1bWVudHMuXHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5OiBmdW5jdGlvbiAocmhzLCBvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG1hdHJpeCA9IHRoaXMubWF0cml4O1xyXG4gICAgICAgIHZhciBzb3VyY2UgPSByaHMubWF0cml4O1xyXG5cclxuICAgICAgICB2YXIgbG9jYWxBID0gbWF0cml4WzBdO1xyXG4gICAgICAgIHZhciBsb2NhbEIgPSBtYXRyaXhbMV07XHJcbiAgICAgICAgdmFyIGxvY2FsQyA9IG1hdHJpeFsyXTtcclxuICAgICAgICB2YXIgbG9jYWxEID0gbWF0cml4WzNdO1xyXG4gICAgICAgIHZhciBsb2NhbEUgPSBtYXRyaXhbNF07XHJcbiAgICAgICAgdmFyIGxvY2FsRiA9IG1hdHJpeFs1XTtcclxuXHJcbiAgICAgICAgdmFyIHNvdXJjZUEgPSBzb3VyY2VbMF07XHJcbiAgICAgICAgdmFyIHNvdXJjZUIgPSBzb3VyY2VbMV07XHJcbiAgICAgICAgdmFyIHNvdXJjZUMgPSBzb3VyY2VbMl07XHJcbiAgICAgICAgdmFyIHNvdXJjZUQgPSBzb3VyY2VbM107XHJcbiAgICAgICAgdmFyIHNvdXJjZUUgPSBzb3VyY2VbNF07XHJcbiAgICAgICAgdmFyIHNvdXJjZUYgPSBzb3VyY2VbNV07XHJcblxyXG4gICAgICAgIHZhciBkZXN0aW5hdGlvbk1hdHJpeCA9IChvdXQgPT09IHVuZGVmaW5lZCkgPyB0aGlzIDogb3V0O1xyXG5cclxuICAgICAgICBkZXN0aW5hdGlvbk1hdHJpeC5hID0gKHNvdXJjZUEgKiBsb2NhbEEpICsgKHNvdXJjZUIgKiBsb2NhbEMpO1xyXG4gICAgICAgIGRlc3RpbmF0aW9uTWF0cml4LmIgPSAoc291cmNlQSAqIGxvY2FsQikgKyAoc291cmNlQiAqIGxvY2FsRCk7XHJcbiAgICAgICAgZGVzdGluYXRpb25NYXRyaXguYyA9IChzb3VyY2VDICogbG9jYWxBKSArIChzb3VyY2VEICogbG9jYWxDKTtcclxuICAgICAgICBkZXN0aW5hdGlvbk1hdHJpeC5kID0gKHNvdXJjZUMgKiBsb2NhbEIpICsgKHNvdXJjZUQgKiBsb2NhbEQpO1xyXG4gICAgICAgIGRlc3RpbmF0aW9uTWF0cml4LmUgPSAoc291cmNlRSAqIGxvY2FsQSkgKyAoc291cmNlRiAqIGxvY2FsQykgKyBsb2NhbEU7XHJcbiAgICAgICAgZGVzdGluYXRpb25NYXRyaXguZiA9IChzb3VyY2VFICogbG9jYWxCKSArIChzb3VyY2VGICogbG9jYWxEKSArIGxvY2FsRjtcclxuXHJcbiAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uTWF0cml4O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11bHRpcGx5IHRoaXMgTWF0cml4IGJ5IHRoZSBtYXRyaXggZ2l2ZW4sIGluY2x1ZGluZyB0aGUgb2Zmc2V0LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgb2Zmc2V0WCBpcyBhZGRlZCB0byB0aGUgdHggdmFsdWU6IGBvZmZzZXRYICogYSArIG9mZnNldFkgKiBjICsgdHhgLlxyXG4gICAgICogVGhlIG9mZnNldFkgaXMgYWRkZWQgdG8gdGhlIHR5IHZhbHVlOiBgb2Zmc2V0WSAqIGIgKyBvZmZzZXRZICogZCArIHR5YC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNtdWx0aXBseVdpdGhPZmZzZXRcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gc3JjIC0gVGhlIHNvdXJjZSBNYXRyaXggdG8gY29weSBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFggLSBIb3Jpem9udGFsIG9mZnNldCB0byBmYWN0b3IgaW4gdG8gdGhlIG11bHRpcGxpY2F0aW9uLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFkgLSBWZXJ0aWNhbCBvZmZzZXQgdG8gZmFjdG9yIGluIHRvIHRoZSBtdWx0aXBsaWNhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFRyYW5zZm9ybU1hdHJpeC5cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHlXaXRoT2Zmc2V0OiBmdW5jdGlvbiAoc3JjLCBvZmZzZXRYLCBvZmZzZXRZKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBtYXRyaXggPSB0aGlzLm1hdHJpeDtcclxuICAgICAgICB2YXIgb3RoZXJNYXRyaXggPSBzcmMubWF0cml4O1xyXG5cclxuICAgICAgICB2YXIgYTAgPSBtYXRyaXhbMF07XHJcbiAgICAgICAgdmFyIGIwID0gbWF0cml4WzFdO1xyXG4gICAgICAgIHZhciBjMCA9IG1hdHJpeFsyXTtcclxuICAgICAgICB2YXIgZDAgPSBtYXRyaXhbM107XHJcbiAgICAgICAgdmFyIHR4MCA9IG1hdHJpeFs0XTtcclxuICAgICAgICB2YXIgdHkwID0gbWF0cml4WzVdO1xyXG5cclxuICAgICAgICB2YXIgcHNlID0gb2Zmc2V0WCAqIGEwICsgb2Zmc2V0WSAqIGMwICsgdHgwO1xyXG4gICAgICAgIHZhciBwc2YgPSBvZmZzZXRYICogYjAgKyBvZmZzZXRZICogZDAgKyB0eTA7XHJcblxyXG4gICAgICAgIHZhciBhMSA9IG90aGVyTWF0cml4WzBdO1xyXG4gICAgICAgIHZhciBiMSA9IG90aGVyTWF0cml4WzFdO1xyXG4gICAgICAgIHZhciBjMSA9IG90aGVyTWF0cml4WzJdO1xyXG4gICAgICAgIHZhciBkMSA9IG90aGVyTWF0cml4WzNdO1xyXG4gICAgICAgIHZhciB0eDEgPSBvdGhlck1hdHJpeFs0XTtcclxuICAgICAgICB2YXIgdHkxID0gb3RoZXJNYXRyaXhbNV07XHJcblxyXG4gICAgICAgIG1hdHJpeFswXSA9IGExICogYTAgKyBiMSAqIGMwO1xyXG4gICAgICAgIG1hdHJpeFsxXSA9IGExICogYjAgKyBiMSAqIGQwO1xyXG4gICAgICAgIG1hdHJpeFsyXSA9IGMxICogYTAgKyBkMSAqIGMwO1xyXG4gICAgICAgIG1hdHJpeFszXSA9IGMxICogYjAgKyBkMSAqIGQwO1xyXG4gICAgICAgIG1hdHJpeFs0XSA9IHR4MSAqIGEwICsgdHkxICogYzAgKyBwc2U7XHJcbiAgICAgICAgbWF0cml4WzVdID0gdHgxICogYjAgKyB0eTEgKiBkMCArIHBzZjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNmb3JtIHRoZSBNYXRyaXguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgjdHJhbnNmb3JtXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYSAtIFRoZSBTY2FsZSBYIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGIgLSBUaGUgU2hlYXIgWSB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjIC0gVGhlIFNoZWFyIFggdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZCAtIFRoZSBTY2FsZSBZIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHR4IC0gVGhlIFRyYW5zbGF0ZSBYIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHR5IC0gVGhlIFRyYW5zbGF0ZSBZIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgVHJhbnNmb3JtTWF0cml4LlxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm06IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG1hdHJpeCA9IHRoaXMubWF0cml4O1xyXG5cclxuICAgICAgICB2YXIgYTAgPSBtYXRyaXhbMF07XHJcbiAgICAgICAgdmFyIGIwID0gbWF0cml4WzFdO1xyXG4gICAgICAgIHZhciBjMCA9IG1hdHJpeFsyXTtcclxuICAgICAgICB2YXIgZDAgPSBtYXRyaXhbM107XHJcbiAgICAgICAgdmFyIHR4MCA9IG1hdHJpeFs0XTtcclxuICAgICAgICB2YXIgdHkwID0gbWF0cml4WzVdO1xyXG5cclxuICAgICAgICBtYXRyaXhbMF0gPSBhICogYTAgKyBiICogYzA7XHJcbiAgICAgICAgbWF0cml4WzFdID0gYSAqIGIwICsgYiAqIGQwO1xyXG4gICAgICAgIG1hdHJpeFsyXSA9IGMgKiBhMCArIGQgKiBjMDtcclxuICAgICAgICBtYXRyaXhbM10gPSBjICogYjAgKyBkICogZDA7XHJcbiAgICAgICAgbWF0cml4WzRdID0gdHggKiBhMCArIHR5ICogYzAgKyB0eDA7XHJcbiAgICAgICAgbWF0cml4WzVdID0gdHggKiBiMCArIHR5ICogZDAgKyB0eTA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBhIHBvaW50IHVzaW5nIHRoaXMgTWF0cml4LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4I3RyYW5zZm9ybVBvaW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRyYW5zZm9ybS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdHJhbnNmb3JtLlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8UGhhc2VyLk1hdGguVmVjdG9yMnxvYmplY3QpfSBwb2ludCAtIFRoZSBQb2ludCBvYmplY3QgdG8gc3RvcmUgdGhlIHRyYW5zZm9ybWVkIGNvb3JkaW5hdGVzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5Qb2ludHxQaGFzZXIuTWF0aC5WZWN0b3IyfG9iamVjdCl9IFRoZSBQb2ludCBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm1lZCBjb29yZGluYXRlcy5cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtUG9pbnQ6IGZ1bmN0aW9uICh4LCB5LCBwb2ludClcclxuICAgIHtcclxuICAgICAgICBpZiAocG9pbnQgPT09IHVuZGVmaW5lZCkgeyBwb2ludCA9IHsgeDogMCwgeTogMCB9OyB9XHJcblxyXG4gICAgICAgIHZhciBtYXRyaXggPSB0aGlzLm1hdHJpeDtcclxuXHJcbiAgICAgICAgdmFyIGEgPSBtYXRyaXhbMF07XHJcbiAgICAgICAgdmFyIGIgPSBtYXRyaXhbMV07XHJcbiAgICAgICAgdmFyIGMgPSBtYXRyaXhbMl07XHJcbiAgICAgICAgdmFyIGQgPSBtYXRyaXhbM107XHJcbiAgICAgICAgdmFyIHR4ID0gbWF0cml4WzRdO1xyXG4gICAgICAgIHZhciB0eSA9IG1hdHJpeFs1XTtcclxuXHJcbiAgICAgICAgcG9pbnQueCA9IHggKiBhICsgeSAqIGMgKyB0eDtcclxuICAgICAgICBwb2ludC55ID0geCAqIGIgKyB5ICogZCArIHR5O1xyXG5cclxuICAgICAgICByZXR1cm4gcG9pbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW52ZXJ0IHRoZSBNYXRyaXguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgjaW52ZXJ0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFRyYW5zZm9ybU1hdHJpeC5cclxuICAgICAqL1xyXG4gICAgaW52ZXJ0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBtYXRyaXggPSB0aGlzLm1hdHJpeDtcclxuXHJcbiAgICAgICAgdmFyIGEgPSBtYXRyaXhbMF07XHJcbiAgICAgICAgdmFyIGIgPSBtYXRyaXhbMV07XHJcbiAgICAgICAgdmFyIGMgPSBtYXRyaXhbMl07XHJcbiAgICAgICAgdmFyIGQgPSBtYXRyaXhbM107XHJcbiAgICAgICAgdmFyIHR4ID0gbWF0cml4WzRdO1xyXG4gICAgICAgIHZhciB0eSA9IG1hdHJpeFs1XTtcclxuXHJcbiAgICAgICAgdmFyIG4gPSBhICogZCAtIGIgKiBjO1xyXG5cclxuICAgICAgICBtYXRyaXhbMF0gPSBkIC8gbjtcclxuICAgICAgICBtYXRyaXhbMV0gPSAtYiAvIG47XHJcbiAgICAgICAgbWF0cml4WzJdID0gLWMgLyBuO1xyXG4gICAgICAgIG1hdHJpeFszXSA9IGEgLyBuO1xyXG4gICAgICAgIG1hdHJpeFs0XSA9IChjICogdHkgLSBkICogdHgpIC8gbjtcclxuICAgICAgICBtYXRyaXhbNV0gPSAtKGEgKiB0eSAtIGIgKiB0eCkgLyBuO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHZhbHVlcyBvZiB0aGlzIE1hdHJpeCB0byBjb3B5IHRob3NlIG9mIHRoZSBtYXRyaXggZ2l2ZW4uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgjY29weUZyb21cclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gc3JjIC0gVGhlIHNvdXJjZSBNYXRyaXggdG8gY29weSBmcm9tLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgVHJhbnNmb3JtTWF0cml4LlxyXG4gICAgICovXHJcbiAgICBjb3B5RnJvbTogZnVuY3Rpb24gKHNyYylcclxuICAgIHtcclxuICAgICAgICB2YXIgbWF0cml4ID0gdGhpcy5tYXRyaXg7XHJcblxyXG4gICAgICAgIG1hdHJpeFswXSA9IHNyYy5hO1xyXG4gICAgICAgIG1hdHJpeFsxXSA9IHNyYy5iO1xyXG4gICAgICAgIG1hdHJpeFsyXSA9IHNyYy5jO1xyXG4gICAgICAgIG1hdHJpeFszXSA9IHNyYy5kO1xyXG4gICAgICAgIG1hdHJpeFs0XSA9IHNyYy5lO1xyXG4gICAgICAgIG1hdHJpeFs1XSA9IHNyYy5mO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHZhbHVlcyBvZiB0aGlzIE1hdHJpeCB0byBjb3B5IHRob3NlIG9mIHRoZSBhcnJheSBnaXZlbi5cclxuICAgICAqIFdoZXJlIGFycmF5IGluZGV4ZXMgMCwgMSwgMiwgMywgNCBhbmQgNSBhcmUgbWFwcGVkIHRvIGEsIGIsIGMsIGQsIGUgYW5kIGYuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgjY29weUZyb21BcnJheVxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YXJyYXl9IHNyYyAtIFRoZSBhcnJheSBvZiB2YWx1ZXMgdG8gc2V0IGludG8gdGhpcyBtYXRyaXguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBUcmFuc2Zvcm1NYXRyaXguXHJcbiAgICAgKi9cclxuICAgIGNvcHlGcm9tQXJyYXk6IGZ1bmN0aW9uIChzcmMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG1hdHJpeCA9IHRoaXMubWF0cml4O1xyXG5cclxuICAgICAgICBtYXRyaXhbMF0gPSBzcmNbMF07XHJcbiAgICAgICAgbWF0cml4WzFdID0gc3JjWzFdO1xyXG4gICAgICAgIG1hdHJpeFsyXSA9IHNyY1syXTtcclxuICAgICAgICBtYXRyaXhbM10gPSBzcmNbM107XHJcbiAgICAgICAgbWF0cml4WzRdID0gc3JjWzRdO1xyXG4gICAgICAgIG1hdHJpeFs1XSA9IHNyY1s1XTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSB0aGUgdmFsdWVzIGZyb20gdGhpcyBNYXRyaXggdG8gdGhlIGdpdmVuIENhbnZhcyBSZW5kZXJpbmcgQ29udGV4dC5cclxuICAgICAqIFRoaXMgd2lsbCB1c2UgdGhlIENvbnRleHQudHJhbnNmb3JtIG1ldGhvZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNjb3B5VG9Db250ZXh0XHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCAtIFRoZSBDYW52YXMgUmVuZGVyaW5nIENvbnRleHQgdG8gY29weSB0aGUgbWF0cml4IHZhbHVlcyB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IFRoZSBDYW52YXMgUmVuZGVyaW5nIENvbnRleHQuXHJcbiAgICAgKi9cclxuICAgIGNvcHlUb0NvbnRleHQ6IGZ1bmN0aW9uIChjdHgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG1hdHJpeCA9IHRoaXMubWF0cml4O1xyXG5cclxuICAgICAgICBjdHgudHJhbnNmb3JtKG1hdHJpeFswXSwgbWF0cml4WzFdLCBtYXRyaXhbMl0sIG1hdHJpeFszXSwgbWF0cml4WzRdLCBtYXRyaXhbNV0pO1xyXG5cclxuICAgICAgICByZXR1cm4gY3R4O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIHRoaXMgTWF0cml4IHRvIHRoZSBnaXZlbiBDYW52YXMgUmVuZGVyaW5nIENvbnRleHQuXHJcbiAgICAgKiBUaGlzIHdpbGwgdXNlIHRoZSBDb250ZXh0LnNldFRyYW5zZm9ybSBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgjc2V0VG9Db250ZXh0XHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCAtIFRoZSBDYW52YXMgUmVuZGVyaW5nIENvbnRleHQgdG8gY29weSB0aGUgbWF0cml4IHZhbHVlcyB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IFRoZSBDYW52YXMgUmVuZGVyaW5nIENvbnRleHQuXHJcbiAgICAgKi9cclxuICAgIHNldFRvQ29udGV4dDogZnVuY3Rpb24gKGN0eClcclxuICAgIHtcclxuICAgICAgICB2YXIgbWF0cml4ID0gdGhpcy5tYXRyaXg7XHJcblxyXG4gICAgICAgIGN0eC5zZXRUcmFuc2Zvcm0obWF0cml4WzBdLCBtYXRyaXhbMV0sIG1hdHJpeFsyXSwgbWF0cml4WzNdLCBtYXRyaXhbNF0sIG1hdHJpeFs1XSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjdHg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSB0aGUgdmFsdWVzIGluIHRoaXMgTWF0cml4IHRvIHRoZSBhcnJheSBnaXZlbi5cclxuICAgICAqIFxyXG4gICAgICogV2hlcmUgYXJyYXkgaW5kZXhlcyAwLCAxLCAyLCAzLCA0IGFuZCA1IGFyZSBtYXBwZWQgdG8gYSwgYiwgYywgZCwgZSBhbmQgZi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNjb3B5VG9BcnJheVxyXG4gICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YXJyYXl9IFtvdXRdIC0gVGhlIGFycmF5IHRvIGNvcHkgdGhlIG1hdHJpeCB2YWx1ZXMgaW4gdG8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7YXJyYXl9IEFuIGFycmF5IHdoZXJlIGVsZW1lbnRzIDAgdG8gNSBjb250YWluIHRoZSB2YWx1ZXMgZnJvbSB0aGlzIG1hdHJpeC5cclxuICAgICAqL1xyXG4gICAgY29weVRvQXJyYXk6IGZ1bmN0aW9uIChvdXQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG1hdHJpeCA9IHRoaXMubWF0cml4O1xyXG5cclxuICAgICAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvdXQgPSBbIG1hdHJpeFswXSwgbWF0cml4WzFdLCBtYXRyaXhbMl0sIG1hdHJpeFszXSwgbWF0cml4WzRdLCBtYXRyaXhbNV0gXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb3V0WzBdID0gbWF0cml4WzBdO1xyXG4gICAgICAgICAgICBvdXRbMV0gPSBtYXRyaXhbMV07XHJcbiAgICAgICAgICAgIG91dFsyXSA9IG1hdHJpeFsyXTtcclxuICAgICAgICAgICAgb3V0WzNdID0gbWF0cml4WzNdO1xyXG4gICAgICAgICAgICBvdXRbNF0gPSBtYXRyaXhbNF07XHJcbiAgICAgICAgICAgIG91dFs1XSA9IG1hdHJpeFs1XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSB2YWx1ZXMgb2YgdGhpcyBNYXRyaXguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgjc2V0VHJhbnNmb3JtXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYSAtIFRoZSBTY2FsZSBYIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGIgLSBUaGUgU2hlYXIgWSB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjIC0gVGhlIFNoZWFyIFggdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZCAtIFRoZSBTY2FsZSBZIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHR4IC0gVGhlIFRyYW5zbGF0ZSBYIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHR5IC0gVGhlIFRyYW5zbGF0ZSBZIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgVHJhbnNmb3JtTWF0cml4LlxyXG4gICAgICovXHJcbiAgICBzZXRUcmFuc2Zvcm06IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG1hdHJpeCA9IHRoaXMubWF0cml4O1xyXG5cclxuICAgICAgICBtYXRyaXhbMF0gPSBhO1xyXG4gICAgICAgIG1hdHJpeFsxXSA9IGI7XHJcbiAgICAgICAgbWF0cml4WzJdID0gYztcclxuICAgICAgICBtYXRyaXhbM10gPSBkO1xyXG4gICAgICAgIG1hdHJpeFs0XSA9IHR4O1xyXG4gICAgICAgIG1hdHJpeFs1XSA9IHR5O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNvbXBvc2UgdGhpcyBNYXRyaXggaW50byBpdHMgdHJhbnNsYXRpb24sIHNjYWxlIGFuZCByb3RhdGlvbiB2YWx1ZXMgdXNpbmcgUVIgZGVjb21wb3NpdGlvbi5cclxuICAgICAqIFxyXG4gICAgICogVGhlIHJlc3VsdCBtdXN0IGJlIGFwcGxpZWQgaW4gdGhlIGZvbGxvd2luZyBvcmRlciB0byByZXByb2R1Y2UgdGhlIGN1cnJlbnQgbWF0cml4OlxyXG4gICAgICogXHJcbiAgICAgKiB0cmFuc2xhdGUgLT4gcm90YXRlIC0+IHNjYWxlXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgjZGVjb21wb3NlTWF0cml4XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9IFRoZSBkZWNvbXBvc2VkIE1hdHJpeC5cclxuICAgICAqL1xyXG4gICAgZGVjb21wb3NlTWF0cml4OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBkZWNvbXBvc2VkTWF0cml4ID0gdGhpcy5kZWNvbXBvc2VkTWF0cml4O1xyXG5cclxuICAgICAgICB2YXIgbWF0cml4ID0gdGhpcy5tYXRyaXg7XHJcblxyXG4gICAgICAgIC8vICBhID0gc2NhbGUgWCAoMSlcclxuICAgICAgICAvLyAgYiA9IHNoZWFyIFkgKDApXHJcbiAgICAgICAgLy8gIGMgPSBzaGVhciBYICgwKVxyXG4gICAgICAgIC8vICBkID0gc2NhbGUgWSAoMSlcclxuXHJcbiAgICAgICAgdmFyIGEgPSBtYXRyaXhbMF07XHJcbiAgICAgICAgdmFyIGIgPSBtYXRyaXhbMV07XHJcbiAgICAgICAgdmFyIGMgPSBtYXRyaXhbMl07XHJcbiAgICAgICAgdmFyIGQgPSBtYXRyaXhbM107XHJcblxyXG4gICAgICAgIHZhciBkZXRlcm0gPSBhICogZCAtIGIgKiBjO1xyXG5cclxuICAgICAgICBkZWNvbXBvc2VkTWF0cml4LnRyYW5zbGF0ZVggPSBtYXRyaXhbNF07XHJcbiAgICAgICAgZGVjb21wb3NlZE1hdHJpeC50cmFuc2xhdGVZID0gbWF0cml4WzVdO1xyXG5cclxuICAgICAgICBpZiAoYSB8fCBiKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHIgPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYik7XHJcblxyXG4gICAgICAgICAgICBkZWNvbXBvc2VkTWF0cml4LnJvdGF0aW9uID0gKGIgPiAwKSA/IE1hdGguYWNvcyhhIC8gcikgOiAtTWF0aC5hY29zKGEgLyByKTtcclxuICAgICAgICAgICAgZGVjb21wb3NlZE1hdHJpeC5zY2FsZVggPSByO1xyXG4gICAgICAgICAgICBkZWNvbXBvc2VkTWF0cml4LnNjYWxlWSA9IGRldGVybSAvIHI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGMgfHwgZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBzID0gTWF0aC5zcXJ0KGMgKiBjICsgZCAqIGQpO1xyXG5cclxuICAgICAgICAgICAgZGVjb21wb3NlZE1hdHJpeC5yb3RhdGlvbiA9IE1hdGguUEkgKiAwLjUgLSAoZCA+IDAgPyBNYXRoLmFjb3MoLWMgLyBzKSA6IC1NYXRoLmFjb3MoYyAvIHMpKTtcclxuICAgICAgICAgICAgZGVjb21wb3NlZE1hdHJpeC5zY2FsZVggPSBkZXRlcm0gLyBzO1xyXG4gICAgICAgICAgICBkZWNvbXBvc2VkTWF0cml4LnNjYWxlWSA9IHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGRlY29tcG9zZWRNYXRyaXgucm90YXRpb24gPSAwO1xyXG4gICAgICAgICAgICBkZWNvbXBvc2VkTWF0cml4LnNjYWxlWCA9IDA7XHJcbiAgICAgICAgICAgIGRlY29tcG9zZWRNYXRyaXguc2NhbGVZID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkZWNvbXBvc2VkTWF0cml4O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGx5IHRoZSBpZGVudGl0eSwgdHJhbnNsYXRlLCByb3RhdGUgYW5kIHNjYWxlIG9wZXJhdGlvbnMgb24gdGhlIE1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNhcHBseUlUUlNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgdHJhbnNsYXRpb24uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCB0cmFuc2xhdGlvbi5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByb3RhdGlvbiAtIFRoZSBhbmdsZSBvZiByb3RhdGlvbiBpbiByYWRpYW5zLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWCAtIFRoZSBob3Jpem9udGFsIHNjYWxlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWSAtIFRoZSB2ZXJ0aWNhbCBzY2FsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFRyYW5zZm9ybU1hdHJpeC5cclxuICAgICAqL1xyXG4gICAgYXBwbHlJVFJTOiBmdW5jdGlvbiAoeCwgeSwgcm90YXRpb24sIHNjYWxlWCwgc2NhbGVZKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBtYXRyaXggPSB0aGlzLm1hdHJpeDtcclxuXHJcbiAgICAgICAgdmFyIHJhZGlhblNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcclxuICAgICAgICB2YXIgcmFkaWFuQ29zID0gTWF0aC5jb3Mocm90YXRpb24pO1xyXG5cclxuICAgICAgICAvLyBUcmFuc2xhdGVcclxuICAgICAgICBtYXRyaXhbNF0gPSB4O1xyXG4gICAgICAgIG1hdHJpeFs1XSA9IHk7XHJcblxyXG4gICAgICAgIC8vIFJvdGF0ZSBhbmQgU2NhbGVcclxuICAgICAgICBtYXRyaXhbMF0gPSByYWRpYW5Db3MgKiBzY2FsZVg7XHJcbiAgICAgICAgbWF0cml4WzFdID0gcmFkaWFuU2luICogc2NhbGVYO1xyXG4gICAgICAgIG1hdHJpeFsyXSA9IC1yYWRpYW5TaW4gKiBzY2FsZVk7XHJcbiAgICAgICAgbWF0cml4WzNdID0gcmFkaWFuQ29zICogc2NhbGVZO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyB0aGUgYHhgIGFuZCBgeWAgdmFsdWVzIGFuZCByZXR1cm5zIGEgbmV3IHBvc2l0aW9uIGluIHRoZSBgb3V0cHV0YCB2ZWN0b3IgdGhhdCBpcyB0aGUgaW52ZXJzZSBvZlxyXG4gICAgICogdGhlIGN1cnJlbnQgbWF0cml4IHdpdGggaXRzIHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQuXHJcbiAgICAgKiBcclxuICAgICAqIENhbiBiZSB1c2VkIHRvIHRyYW5zbGF0ZSBwb2ludHMgZnJvbSB3b3JsZCB0byBsb2NhbCBzcGFjZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNhcHBseUludmVyc2VcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IHBvc2l0aW9uIHRvIHRyYW5zbGF0ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgcG9zaXRpb24gdG8gdHJhbnNsYXRlLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbb3V0cHV0XSAtIEEgVmVjdG9yMiwgb3IgcG9pbnQtbGlrZSBvYmplY3QsIHRvIHN0b3JlIHRoZSByZXN1bHRzIGluLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFRoZSBjb29yZGluYXRlcywgaW52ZXJzZS10cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4LlxyXG4gICAgICovXHJcbiAgICBhcHBseUludmVyc2U6IGZ1bmN0aW9uICh4LCB5LCBvdXRwdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dHB1dCA9PT0gdW5kZWZpbmVkKSB7IG91dHB1dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgdmFyIG1hdHJpeCA9IHRoaXMubWF0cml4O1xyXG5cclxuICAgICAgICB2YXIgYSA9IG1hdHJpeFswXTtcclxuICAgICAgICB2YXIgYiA9IG1hdHJpeFsxXTtcclxuICAgICAgICB2YXIgYyA9IG1hdHJpeFsyXTtcclxuICAgICAgICB2YXIgZCA9IG1hdHJpeFszXTtcclxuICAgICAgICB2YXIgdHggPSBtYXRyaXhbNF07XHJcbiAgICAgICAgdmFyIHR5ID0gbWF0cml4WzVdO1xyXG5cclxuICAgICAgICB2YXIgaWQgPSAxIC8gKChhICogZCkgKyAoYyAqIC1iKSk7XHJcblxyXG4gICAgICAgIG91dHB1dC54ID0gKGQgKiBpZCAqIHgpICsgKC1jICogaWQgKiB5KSArICgoKHR5ICogYykgLSAodHggKiBkKSkgKiBpZCk7XHJcbiAgICAgICAgb3V0cHV0LnkgPSAoYSAqIGlkICogeSkgKyAoLWIgKiBpZCAqIHgpICsgKCgoLXR5ICogYSkgKyAodHggKiBiKSkgKiBpZCk7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgWCBjb21wb25lbnQgb2YgdGhpcyBtYXRyaXggbXVsdGlwbGllZCBieSB0aGUgZ2l2ZW4gdmFsdWVzLlxyXG4gICAgICogVGhpcyBpcyB0aGUgc2FtZSBhcyBgeCAqIGEgKyB5ICogYyArIGVgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4I2dldFhcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgY2FsY3VsYXRlZCB4IHZhbHVlLlxyXG4gICAgICovXHJcbiAgICBnZXRYOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4geCAqIHRoaXMuYSArIHkgKiB0aGlzLmMgKyB0aGlzLmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgWSBjb21wb25lbnQgb2YgdGhpcyBtYXRyaXggbXVsdGlwbGllZCBieSB0aGUgZ2l2ZW4gdmFsdWVzLlxyXG4gICAgICogVGhpcyBpcyB0aGUgc2FtZSBhcyBgeCAqIGIgKyB5ICogZCArIGZgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4I2dldFlcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgY2FsY3VsYXRlZCB5IHZhbHVlLlxyXG4gICAgICovXHJcbiAgICBnZXRZOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4geCAqIHRoaXMuYiArIHkgKiB0aGlzLmQgKyB0aGlzLmY7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIGluIGEgQ1NTIFRyYW5zZm9ybSBjYWxsIGFzIGEgYG1hdHJpeGAgcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgjZ2V0Q1NTTWF0cml4XHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBBIHN0cmluZyBjb250YWluaW5nIHRoZSBDU1MgVHJhbnNmb3JtIG1hdHJpeCB2YWx1ZXMuXHJcbiAgICAgKi9cclxuICAgIGdldENTU01hdHJpeDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgbSA9IHRoaXMubWF0cml4O1xyXG5cclxuICAgICAgICByZXR1cm4gJ21hdHJpeCgnICsgbVswXSArICcsJyArIG1bMV0gKyAnLCcgKyBtWzJdICsgJywnICsgbVszXSArICcsJyArIG1bNF0gKyAnLCcgKyBtWzVdICsgJyknO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoaXMgVHJhbnNmb3JtIE1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLm1hdHJpeCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5kZWNvbXBvc2VkTWF0cml4ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm1NYXRyaXg7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/TransformMatrix.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/components/Visible.js":
/*!*******************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/components/Visible.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n// bitmask flag for GameObject.renderMask\r\nvar _FLAG = 1; // 0001\r\n\r\n/**\r\n * Provides methods used for setting the visibility of a Game Object.\r\n * Should be applied as a mixin and not used directly.\r\n * \r\n * @namespace Phaser.GameObjects.Components.Visible\r\n * @since 3.0.0\r\n */\r\n\r\nvar Visible = {\r\n\r\n /**\r\n * Private internal value. Holds the visible value.\r\n * \r\n * @name Phaser.GameObjects.Components.Visible#_visible\r\n * @type {boolean}\r\n * @private\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n _visible: true,\r\n\r\n /**\r\n * The visible state of the Game Object.\r\n * \r\n * An invisible Game Object will skip rendering, but will still process update logic.\r\n * \r\n * @name Phaser.GameObjects.Components.Visible#visible\r\n * @type {boolean}\r\n * @since 3.0.0\r\n */\r\n visible: {\r\n\r\n get: function ()\r\n {\r\n return this._visible;\r\n },\r\n\r\n set: function (value)\r\n {\r\n if (value)\r\n {\r\n this._visible = true;\r\n this.renderFlags |= _FLAG;\r\n }\r\n else\r\n {\r\n this._visible = false;\r\n this.renderFlags &= ~_FLAG;\r\n }\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Sets the visibility of this Game Object.\r\n * \r\n * An invisible Game Object will skip rendering, but will still process update logic.\r\n *\r\n * @method Phaser.GameObjects.Components.Visible#setVisible\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} value - The visible state of the Game Object.\r\n * \r\n * @return {this} This Game Object instance.\r\n */\r\n setVisible: function (value)\r\n {\r\n this.visible = value;\r\n\r\n return this;\r\n }\r\n};\r\n\r\nmodule.exports = Visible;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL1Zpc2libGUuanM/MDU1OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2NvbXBvbmVudHMvVmlzaWJsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLy8gIGJpdG1hc2sgZmxhZyBmb3IgR2FtZU9iamVjdC5yZW5kZXJNYXNrXHJcbnZhciBfRkxBRyA9IDE7IC8vIDAwMDFcclxuXHJcbi8qKlxyXG4gKiBQcm92aWRlcyBtZXRob2RzIHVzZWQgZm9yIHNldHRpbmcgdGhlIHZpc2liaWxpdHkgb2YgYSBHYW1lIE9iamVjdC5cclxuICogU2hvdWxkIGJlIGFwcGxpZWQgYXMgYSBtaXhpbiBhbmQgbm90IHVzZWQgZGlyZWN0bHkuXHJcbiAqIFxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5cclxudmFyIFZpc2libGUgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcml2YXRlIGludGVybmFsIHZhbHVlLiBIb2xkcyB0aGUgdmlzaWJsZSB2YWx1ZS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVmlzaWJsZSNfdmlzaWJsZVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIF92aXNpYmxlOiB0cnVlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHZpc2libGUgc3RhdGUgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBBbiBpbnZpc2libGUgR2FtZSBPYmplY3Qgd2lsbCBza2lwIHJlbmRlcmluZywgYnV0IHdpbGwgc3RpbGwgcHJvY2VzcyB1cGRhdGUgbG9naWMuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGUjdmlzaWJsZVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdmlzaWJsZToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckZsYWdzIHw9IF9GTEFHO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJGbGFncyAmPSB+X0ZMQUc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHZpc2liaWxpdHkgb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogQW4gaW52aXNpYmxlIEdhbWUgT2JqZWN0IHdpbGwgc2tpcCByZW5kZXJpbmcsIGJ1dCB3aWxsIHN0aWxsIHByb2Nlc3MgdXBkYXRlIGxvZ2ljLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVmlzaWJsZSNzZXRWaXNpYmxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlIC0gVGhlIHZpc2libGUgc3RhdGUgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRWaXNpYmxlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBWaXNpYmxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/Visible.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/components/index.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/components/index.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.GameObjects.Components\r\n */\r\n\r\nmodule.exports = {\r\n\r\n Alpha: __webpack_require__(/*! ./Alpha */ \"./node_modules/phaser/src/gameobjects/components/Alpha.js\"),\r\n Animation: __webpack_require__(/*! ./Animation */ \"./node_modules/phaser/src/gameobjects/components/Animation.js\"),\r\n BlendMode: __webpack_require__(/*! ./BlendMode */ \"./node_modules/phaser/src/gameobjects/components/BlendMode.js\"),\r\n ComputedSize: __webpack_require__(/*! ./ComputedSize */ \"./node_modules/phaser/src/gameobjects/components/ComputedSize.js\"),\r\n Crop: __webpack_require__(/*! ./Crop */ \"./node_modules/phaser/src/gameobjects/components/Crop.js\"),\r\n Depth: __webpack_require__(/*! ./Depth */ \"./node_modules/phaser/src/gameobjects/components/Depth.js\"),\r\n Flip: __webpack_require__(/*! ./Flip */ \"./node_modules/phaser/src/gameobjects/components/Flip.js\"),\r\n GetBounds: __webpack_require__(/*! ./GetBounds */ \"./node_modules/phaser/src/gameobjects/components/GetBounds.js\"),\r\n Mask: __webpack_require__(/*! ./Mask */ \"./node_modules/phaser/src/gameobjects/components/Mask.js\"),\r\n Origin: __webpack_require__(/*! ./Origin */ \"./node_modules/phaser/src/gameobjects/components/Origin.js\"),\r\n PathFollower: __webpack_require__(/*! ./PathFollower */ \"./node_modules/phaser/src/gameobjects/components/PathFollower.js\"),\r\n Pipeline: __webpack_require__(/*! ./Pipeline */ \"./node_modules/phaser/src/gameobjects/components/Pipeline.js\"),\r\n ScrollFactor: __webpack_require__(/*! ./ScrollFactor */ \"./node_modules/phaser/src/gameobjects/components/ScrollFactor.js\"),\r\n Size: __webpack_require__(/*! ./Size */ \"./node_modules/phaser/src/gameobjects/components/Size.js\"),\r\n Texture: __webpack_require__(/*! ./Texture */ \"./node_modules/phaser/src/gameobjects/components/Texture.js\"),\r\n TextureCrop: __webpack_require__(/*! ./TextureCrop */ \"./node_modules/phaser/src/gameobjects/components/TextureCrop.js\"),\r\n Tint: __webpack_require__(/*! ./Tint */ \"./node_modules/phaser/src/gameobjects/components/Tint.js\"),\r\n ToJSON: __webpack_require__(/*! ./ToJSON */ \"./node_modules/phaser/src/gameobjects/components/ToJSON.js\"),\r\n Transform: __webpack_require__(/*! ./Transform */ \"./node_modules/phaser/src/gameobjects/components/Transform.js\"),\r\n TransformMatrix: __webpack_require__(/*! ./TransformMatrix */ \"./node_modules/phaser/src/gameobjects/components/TransformMatrix.js\"),\r\n Visible: __webpack_require__(/*! ./Visible */ \"./node_modules/phaser/src/gameobjects/components/Visible.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb21wb25lbnRzL2luZGV4LmpzPzNlN2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxXQUFXLG1CQUFPLENBQUMsMEVBQVM7QUFDNUIsZUFBZSxtQkFBTyxDQUFDLGtGQUFhO0FBQ3BDLGVBQWUsbUJBQU8sQ0FBQyxrRkFBYTtBQUNwQyxrQkFBa0IsbUJBQU8sQ0FBQyx3RkFBZ0I7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLHdFQUFRO0FBQzFCLFdBQVcsbUJBQU8sQ0FBQywwRUFBUztBQUM1QixVQUFVLG1CQUFPLENBQUMsd0VBQVE7QUFDMUIsZUFBZSxtQkFBTyxDQUFDLGtGQUFhO0FBQ3BDLFVBQVUsbUJBQU8sQ0FBQyx3RUFBUTtBQUMxQixZQUFZLG1CQUFPLENBQUMsNEVBQVU7QUFDOUIsa0JBQWtCLG1CQUFPLENBQUMsd0ZBQWdCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxnRkFBWTtBQUNsQyxrQkFBa0IsbUJBQU8sQ0FBQyx3RkFBZ0I7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLHdFQUFRO0FBQzFCLGFBQWEsbUJBQU8sQ0FBQyw4RUFBVztBQUNoQyxpQkFBaUIsbUJBQU8sQ0FBQyxzRkFBZTtBQUN4QyxVQUFVLG1CQUFPLENBQUMsd0VBQVE7QUFDMUIsWUFBWSxtQkFBTyxDQUFDLDRFQUFVO0FBQzlCLGVBQWUsbUJBQU8sQ0FBQyxrRkFBYTtBQUNwQyxxQkFBcUIsbUJBQU8sQ0FBQyw4RkFBbUI7QUFDaEQsYUFBYSxtQkFBTyxDQUFDLDhFQUFXOztBQUVoQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2NvbXBvbmVudHMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQWxwaGE6IHJlcXVpcmUoJy4vQWxwaGEnKSxcclxuICAgIEFuaW1hdGlvbjogcmVxdWlyZSgnLi9BbmltYXRpb24nKSxcclxuICAgIEJsZW5kTW9kZTogcmVxdWlyZSgnLi9CbGVuZE1vZGUnKSxcclxuICAgIENvbXB1dGVkU2l6ZTogcmVxdWlyZSgnLi9Db21wdXRlZFNpemUnKSxcclxuICAgIENyb3A6IHJlcXVpcmUoJy4vQ3JvcCcpLFxyXG4gICAgRGVwdGg6IHJlcXVpcmUoJy4vRGVwdGgnKSxcclxuICAgIEZsaXA6IHJlcXVpcmUoJy4vRmxpcCcpLFxyXG4gICAgR2V0Qm91bmRzOiByZXF1aXJlKCcuL0dldEJvdW5kcycpLFxyXG4gICAgTWFzazogcmVxdWlyZSgnLi9NYXNrJyksXHJcbiAgICBPcmlnaW46IHJlcXVpcmUoJy4vT3JpZ2luJyksXHJcbiAgICBQYXRoRm9sbG93ZXI6IHJlcXVpcmUoJy4vUGF0aEZvbGxvd2VyJyksXHJcbiAgICBQaXBlbGluZTogcmVxdWlyZSgnLi9QaXBlbGluZScpLFxyXG4gICAgU2Nyb2xsRmFjdG9yOiByZXF1aXJlKCcuL1Njcm9sbEZhY3RvcicpLFxyXG4gICAgU2l6ZTogcmVxdWlyZSgnLi9TaXplJyksXHJcbiAgICBUZXh0dXJlOiByZXF1aXJlKCcuL1RleHR1cmUnKSxcclxuICAgIFRleHR1cmVDcm9wOiByZXF1aXJlKCcuL1RleHR1cmVDcm9wJyksXHJcbiAgICBUaW50OiByZXF1aXJlKCcuL1RpbnQnKSxcclxuICAgIFRvSlNPTjogcmVxdWlyZSgnLi9Ub0pTT04nKSxcclxuICAgIFRyYW5zZm9ybTogcmVxdWlyZSgnLi9UcmFuc2Zvcm0nKSxcclxuICAgIFRyYW5zZm9ybU1hdHJpeDogcmVxdWlyZSgnLi9UcmFuc2Zvcm1NYXRyaXgnKSxcclxuICAgIFZpc2libGU6IHJlcXVpcmUoJy4vVmlzaWJsZScpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/components/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/container/Container.js":
/*!********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/container/Container.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @author Felipe Alfonso <@bitnenfer>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar ArrayUtils = __webpack_require__(/*! ../../utils/array */ \"./node_modules/phaser/src/utils/array/index.js\");\r\nvar BlendModes = __webpack_require__(/*! ../../renderer/BlendModes */ \"./node_modules/phaser/src/renderer/BlendModes.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/gameobjects/events/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar Rectangle = __webpack_require__(/*! ../../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar Render = __webpack_require__(/*! ./ContainerRender */ \"./node_modules/phaser/src/gameobjects/container/ContainerRender.js\");\r\nvar Union = __webpack_require__(/*! ../../geom/rectangle/Union */ \"./node_modules/phaser/src/geom/rectangle/Union.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Container Game Object.\r\n *\r\n * A Container, as the name implies, can 'contain' other types of Game Object.\r\n * When a Game Object is added to a Container, the Container becomes responsible for the rendering of it.\r\n * By default it will be removed from the Display List and instead added to the Containers own internal list.\r\n *\r\n * The position of the Game Object automatically becomes relative to the position of the Container.\r\n *\r\n * When the Container is rendered, all of its children are rendered as well, in the order in which they exist\r\n * within the Container. Container children can be repositioned using methods such as `MoveUp`, `MoveDown` and `SendToBack`.\r\n *\r\n * If you modify a transform property of the Container, such as `Container.x` or `Container.rotation` then it will\r\n * automatically influence all children as well.\r\n *\r\n * Containers can include other Containers for deeply nested transforms.\r\n *\r\n * Containers can have masks set on them and can be used as a mask too. However, Container children cannot be masked.\r\n * The masks do not 'stack up'. Only a Container on the root of the display list will use its mask.\r\n *\r\n * Containers can be enabled for input. Because they do not have a texture you need to provide a shape for them\r\n * to use as their hit area. Container children can also be enabled for input, independent of the Container.\r\n *\r\n * Containers can be given a physics body for either Arcade Physics, Impact Physics or Matter Physics. However,\r\n * if Container _children_ are enabled for physics you may get unexpected results, such as offset bodies,\r\n * if the Container itself, or any of its ancestors, is positioned anywhere other than at 0 x 0. Container children\r\n * with physics do not factor in the Container due to the excessive extra calculations needed. Please structure\r\n * your game to work around this.\r\n *\r\n * It's important to understand the impact of using Containers. They add additional processing overhead into\r\n * every one of their children. The deeper you nest them, the more the cost escalates. This is especially true\r\n * for input events. You also loose the ability to set the display depth of Container children in the same\r\n * flexible manner as those not within them. In short, don't use them for the sake of it. You pay a small cost\r\n * every time you create one, try to structure your game around avoiding that where possible.\r\n *\r\n * @class Container\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.4.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.ComputedSize\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {Phaser.GameObjects.GameObject[]} [children] - An optional array of Game Objects to add to this Container.\r\n */\r\nvar Container = new Class({\r\n\r\n Extends: GameObject,\r\n\r\n Mixins: [\r\n Components.Alpha,\r\n Components.BlendMode,\r\n Components.ComputedSize,\r\n Components.Depth,\r\n Components.Mask,\r\n Components.Transform,\r\n Components.Visible,\r\n Render\r\n ],\r\n\r\n initialize:\r\n\r\n function Container (scene, x, y, children)\r\n {\r\n GameObject.call(this, scene, 'Container');\r\n\r\n /**\r\n * An array holding the children of this Container.\r\n *\r\n * @name Phaser.GameObjects.Container#list\r\n * @type {Phaser.GameObjects.GameObject[]}\r\n * @since 3.4.0\r\n */\r\n this.list = [];\r\n\r\n /**\r\n * Does this Container exclusively manage its children?\r\n *\r\n * The default is `true` which means a child added to this Container cannot\r\n * belong in another Container, which includes the Scene display list.\r\n *\r\n * If you disable this then this Container will no longer exclusively manage its children.\r\n * This allows you to create all kinds of interesting graphical effects, such as replicating\r\n * Game Objects without reparenting them all over the Scene.\r\n * However, doing so will prevent children from receiving any kind of input event or have\r\n * their physics bodies work by default, as they're no longer a single entity on the\r\n * display list, but are being replicated where-ever this Container is.\r\n *\r\n * @name Phaser.GameObjects.Container#exclusive\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.4.0\r\n */\r\n this.exclusive = true;\r\n\r\n /**\r\n * Containers can have an optional maximum size. If set to anything above 0 it\r\n * will constrict the addition of new Game Objects into the Container, capping off\r\n * the maximum limit the Container can grow in size to.\r\n *\r\n * @name Phaser.GameObjects.Container#maxSize\r\n * @type {integer}\r\n * @default -1\r\n * @since 3.4.0\r\n */\r\n this.maxSize = -1;\r\n\r\n /**\r\n * The cursor position.\r\n *\r\n * @name Phaser.GameObjects.Container#position\r\n * @type {integer}\r\n * @since 3.4.0\r\n */\r\n this.position = 0;\r\n\r\n /**\r\n * Internal Transform Matrix used for local space conversion.\r\n *\r\n * @name Phaser.GameObjects.Container#localTransform\r\n * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n * @since 3.4.0\r\n */\r\n this.localTransform = new Components.TransformMatrix();\r\n\r\n /**\r\n * Internal temporary Transform Matrix used to avoid object creation.\r\n *\r\n * @name Phaser.GameObjects.Container#tempTransformMatrix\r\n * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n * @private\r\n * @since 3.4.0\r\n */\r\n this.tempTransformMatrix = new Components.TransformMatrix();\r\n\r\n /**\r\n * A reference to the Scene Display List.\r\n *\r\n * @name Phaser.GameObjects.Container#_displayList\r\n * @type {Phaser.GameObjects.DisplayList}\r\n * @private\r\n * @since 3.4.0\r\n */\r\n this._displayList = scene.sys.displayList;\r\n\r\n /**\r\n * The property key to sort by.\r\n *\r\n * @name Phaser.GameObjects.Container#_sortKey\r\n * @type {string}\r\n * @private\r\n * @since 3.4.0\r\n */\r\n this._sortKey = '';\r\n\r\n /**\r\n * A reference to the Scene Systems Event Emitter.\r\n *\r\n * @name Phaser.GameObjects.Container#_sysEvents\r\n * @type {Phaser.Events.EventEmitter}\r\n * @private\r\n * @since 3.9.0\r\n */\r\n this._sysEvents = scene.sys.events;\r\n\r\n /**\r\n * The horizontal scroll factor of this Container.\r\n *\r\n * The scroll factor controls the influence of the movement of a Camera upon this Container.\r\n *\r\n * When a camera scrolls it will change the location at which this Container is rendered on-screen.\r\n * It does not change the Containers actual position values.\r\n * \r\n * For a Container, setting this value will only update the Container itself, not its children.\r\n * If you wish to change the scrollFactor of the children as well, use the `setScrollFactor` method.\r\n *\r\n * A value of 1 means it will move exactly in sync with a camera.\r\n * A value of 0 means it will not move at all, even if the camera moves.\r\n * Other values control the degree to which the camera movement is mapped to this Container.\r\n * \r\n * Please be aware that scroll factor values other than 1 are not taken in to consideration when\r\n * calculating physics collisions. Bodies always collide based on their world position, but changing\r\n * the scroll factor is a visual adjustment to where the textures are rendered, which can offset\r\n * them from physics bodies if not accounted for in your code.\r\n *\r\n * @name Phaser.GameObjects.Container#scrollFactorX\r\n * @type {number}\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n this.scrollFactorX = 1;\r\n\r\n /**\r\n * The vertical scroll factor of this Container.\r\n *\r\n * The scroll factor controls the influence of the movement of a Camera upon this Container.\r\n *\r\n * When a camera scrolls it will change the location at which this Container is rendered on-screen.\r\n * It does not change the Containers actual position values.\r\n * \r\n * For a Container, setting this value will only update the Container itself, not its children.\r\n * If you wish to change the scrollFactor of the children as well, use the `setScrollFactor` method.\r\n *\r\n * A value of 1 means it will move exactly in sync with a camera.\r\n * A value of 0 means it will not move at all, even if the camera moves.\r\n * Other values control the degree to which the camera movement is mapped to this Container.\r\n * \r\n * Please be aware that scroll factor values other than 1 are not taken in to consideration when\r\n * calculating physics collisions. Bodies always collide based on their world position, but changing\r\n * the scroll factor is a visual adjustment to where the textures are rendered, which can offset\r\n * them from physics bodies if not accounted for in your code.\r\n *\r\n * @name Phaser.GameObjects.Container#scrollFactorY\r\n * @type {number}\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n this.scrollFactorY = 1;\r\n\r\n this.setPosition(x, y);\r\n\r\n this.clearAlpha();\r\n\r\n this.setBlendMode(BlendModes.SKIP_CHECK);\r\n\r\n if (children)\r\n {\r\n this.add(children);\r\n }\r\n },\r\n\r\n /**\r\n * Internal value to allow Containers to be used for input and physics.\r\n * Do not change this value. It has no effect other than to break things.\r\n *\r\n * @name Phaser.GameObjects.Container#originX\r\n * @type {number}\r\n * @readonly\r\n * @since 3.4.0\r\n */\r\n originX: {\r\n\r\n get: function ()\r\n {\r\n return 0.5;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Internal value to allow Containers to be used for input and physics.\r\n * Do not change this value. It has no effect other than to break things.\r\n *\r\n * @name Phaser.GameObjects.Container#originY\r\n * @type {number}\r\n * @readonly\r\n * @since 3.4.0\r\n */\r\n originY: {\r\n\r\n get: function ()\r\n {\r\n return 0.5;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Internal value to allow Containers to be used for input and physics.\r\n * Do not change this value. It has no effect other than to break things.\r\n *\r\n * @name Phaser.GameObjects.Container#displayOriginX\r\n * @type {number}\r\n * @readonly\r\n * @since 3.4.0\r\n */\r\n displayOriginX: {\r\n\r\n get: function ()\r\n {\r\n return this.width * 0.5;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Internal value to allow Containers to be used for input and physics.\r\n * Do not change this value. It has no effect other than to break things.\r\n *\r\n * @name Phaser.GameObjects.Container#displayOriginY\r\n * @type {number}\r\n * @readonly\r\n * @since 3.4.0\r\n */\r\n displayOriginY: {\r\n\r\n get: function ()\r\n {\r\n return this.height * 0.5;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Does this Container exclusively manage its children?\r\n *\r\n * The default is `true` which means a child added to this Container cannot\r\n * belong in another Container, which includes the Scene display list.\r\n *\r\n * If you disable this then this Container will no longer exclusively manage its children.\r\n * This allows you to create all kinds of interesting graphical effects, such as replicating\r\n * Game Objects without reparenting them all over the Scene.\r\n * However, doing so will prevent children from receiving any kind of input event or have\r\n * their physics bodies work by default, as they're no longer a single entity on the\r\n * display list, but are being replicated where-ever this Container is.\r\n *\r\n * @method Phaser.GameObjects.Container#setExclusive\r\n * @since 3.4.0\r\n *\r\n * @param {boolean} [value=true] - The exclusive state of this Container.\r\n *\r\n * @return {Phaser.GameObjects.Container} This Container.\r\n */\r\n setExclusive: function (value)\r\n {\r\n if (value === undefined) { value = true; }\r\n\r\n this.exclusive = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Gets the bounds of this Container. It works by iterating all children of the Container,\r\n * getting their respective bounds, and then working out a min-max rectangle from that.\r\n * It does not factor in if the children render or not, all are included.\r\n *\r\n * Some children are unable to return their bounds, such as Graphics objects, in which case\r\n * they are skipped.\r\n *\r\n * Depending on the quantity of children in this Container it could be a really expensive call,\r\n * so cache it and only poll it as needed.\r\n *\r\n * The values are stored and returned in a Rectangle object.\r\n *\r\n * @method Phaser.GameObjects.Container#getBounds\r\n * @since 3.4.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} [output] - A Geom.Rectangle object to store the values in. If not provided a new Rectangle will be created.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The values stored in the output object.\r\n */\r\n getBounds: function (output)\r\n {\r\n if (output === undefined) { output = new Rectangle(); }\r\n\r\n output.setTo(this.x, this.y, 0, 0);\r\n\r\n if (this.list.length > 0)\r\n {\r\n var children = this.list;\r\n var tempRect = new Rectangle();\r\n\r\n for (var i = 0; i < children.length; i++)\r\n {\r\n var entry = children[i];\r\n\r\n if (entry.getBounds)\r\n {\r\n entry.getBounds(tempRect);\r\n\r\n Union(tempRect, output, output);\r\n }\r\n }\r\n }\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Internal add handler.\r\n *\r\n * @method Phaser.GameObjects.Container#addHandler\r\n * @private\r\n * @since 3.4.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that was just added to this Container.\r\n */\r\n addHandler: function (gameObject)\r\n {\r\n gameObject.once(Events.DESTROY, this.remove, this);\r\n\r\n if (this.exclusive)\r\n {\r\n this._displayList.remove(gameObject);\r\n\r\n if (gameObject.parentContainer)\r\n {\r\n gameObject.parentContainer.remove(gameObject);\r\n }\r\n\r\n gameObject.parentContainer = this;\r\n }\r\n },\r\n\r\n /**\r\n * Internal remove handler.\r\n *\r\n * @method Phaser.GameObjects.Container#removeHandler\r\n * @private\r\n * @since 3.4.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that was just removed from this Container.\r\n */\r\n removeHandler: function (gameObject)\r\n {\r\n gameObject.off(Events.DESTROY, this.remove);\r\n\r\n if (this.exclusive)\r\n {\r\n gameObject.parentContainer = null;\r\n }\r\n },\r\n\r\n /**\r\n * Takes a Point-like object, such as a Vector2, Geom.Point or object with public x and y properties,\r\n * and transforms it into the space of this Container, then returns it in the output object.\r\n *\r\n * @method Phaser.GameObjects.Container#pointToContainer\r\n * @since 3.4.0\r\n *\r\n * @param {(object|Phaser.Geom.Point|Phaser.Math.Vector2)} source - The Source Point to be transformed.\r\n * @param {(object|Phaser.Geom.Point|Phaser.Math.Vector2)} [output] - A destination object to store the transformed point in. If none given a Vector2 will be created and returned.\r\n *\r\n * @return {(object|Phaser.Geom.Point|Phaser.Math.Vector2)} The transformed point.\r\n */\r\n pointToContainer: function (source, output)\r\n {\r\n if (output === undefined) { output = new Vector2(); }\r\n\r\n if (this.parentContainer)\r\n {\r\n return this.parentContainer.pointToContainer(source, output);\r\n }\r\n\r\n var tempMatrix = this.tempTransformMatrix;\r\n\r\n // No need to loadIdentity because applyITRS overwrites every value anyway\r\n tempMatrix.applyITRS(this.x, this.y, this.rotation, this.scaleX, this.scaleY);\r\n\r\n tempMatrix.invert();\r\n\r\n tempMatrix.transformPoint(source.x, source.y, output);\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Returns the world transform matrix as used for Bounds checks.\r\n * \r\n * The returned matrix is temporal and shouldn't be stored.\r\n *\r\n * @method Phaser.GameObjects.Container#getBoundsTransformMatrix\r\n * @since 3.4.0\r\n *\r\n * @return {Phaser.GameObjects.Components.TransformMatrix} The world transform matrix.\r\n */\r\n getBoundsTransformMatrix: function ()\r\n {\r\n return this.getWorldTransformMatrix(this.tempTransformMatrix, this.localTransform);\r\n },\r\n\r\n /**\r\n * Adds the given Game Object, or array of Game Objects, to this Container.\r\n *\r\n * Each Game Object must be unique within the Container.\r\n *\r\n * @method Phaser.GameObjects.Container#add\r\n * @since 3.4.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[]} child - The Game Object, or array of Game Objects, to add to the Container.\r\n *\r\n * @return {Phaser.GameObjects.Container} This Container instance.\r\n */\r\n add: function (child)\r\n {\r\n ArrayUtils.Add(this.list, child, this.maxSize, this.addHandler, this);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Adds the given Game Object, or array of Game Objects, to this Container at the specified position.\r\n *\r\n * Existing Game Objects in the Container are shifted up.\r\n *\r\n * Each Game Object must be unique within the Container.\r\n *\r\n * @method Phaser.GameObjects.Container#addAt\r\n * @since 3.4.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[]} child - The Game Object, or array of Game Objects, to add to the Container.\r\n * @param {integer} [index=0] - The position to insert the Game Object/s at.\r\n *\r\n * @return {Phaser.GameObjects.Container} This Container instance.\r\n */\r\n addAt: function (child, index)\r\n {\r\n ArrayUtils.AddAt(this.list, child, index, this.maxSize, this.addHandler, this);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Returns the Game Object at the given position in this Container.\r\n *\r\n * @method Phaser.GameObjects.Container#getAt\r\n * @since 3.4.0\r\n *\r\n * @param {integer} index - The position to get the Game Object from.\r\n *\r\n * @return {?Phaser.GameObjects.GameObject} The Game Object at the specified index, or `null` if none found.\r\n */\r\n getAt: function (index)\r\n {\r\n return this.list[index];\r\n },\r\n\r\n /**\r\n * Returns the index of the given Game Object in this Container.\r\n *\r\n * @method Phaser.GameObjects.Container#getIndex\r\n * @since 3.4.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} child - The Game Object to search for in this Container.\r\n *\r\n * @return {integer} The index of the Game Object in this Container, or -1 if not found.\r\n */\r\n getIndex: function (child)\r\n {\r\n return this.list.indexOf(child);\r\n },\r\n\r\n /**\r\n * Sort the contents of this Container so the items are in order based on the given property.\r\n * For example: `sort('alpha')` would sort the elements based on the value of their `alpha` property.\r\n *\r\n * @method Phaser.GameObjects.Container#sort\r\n * @since 3.4.0\r\n *\r\n * @param {string} property - The property to lexically sort by.\r\n * @param {function} [handler] - Provide your own custom handler function. Will receive 2 children which it should compare and return a boolean.\r\n *\r\n * @return {Phaser.GameObjects.Container} This Container instance.\r\n */\r\n sort: function (property, handler)\r\n {\r\n if (!property)\r\n {\r\n return this;\r\n }\r\n\r\n if (handler === undefined)\r\n {\r\n handler = function (childA, childB)\r\n {\r\n return childA[property] - childB[property];\r\n };\r\n }\r\n\r\n ArrayUtils.StableSort.inplace(this.list, handler);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Searches for the first instance of a child with its `name` property matching the given argument.\r\n * Should more than one child have the same name only the first is returned.\r\n *\r\n * @method Phaser.GameObjects.Container#getByName\r\n * @since 3.4.0\r\n *\r\n * @param {string} name - The name to search for.\r\n *\r\n * @return {?Phaser.GameObjects.GameObject} The first child with a matching name, or `null` if none were found.\r\n */\r\n getByName: function (name)\r\n {\r\n return ArrayUtils.GetFirst(this.list, 'name', name);\r\n },\r\n\r\n /**\r\n * Returns a random Game Object from this Container.\r\n *\r\n * @method Phaser.GameObjects.Container#getRandom\r\n * @since 3.4.0\r\n *\r\n * @param {integer} [startIndex=0] - An optional start index.\r\n * @param {integer} [length] - An optional length, the total number of elements (from the startIndex) to choose from.\r\n *\r\n * @return {?Phaser.GameObjects.GameObject} A random child from the Container, or `null` if the Container is empty.\r\n */\r\n getRandom: function (startIndex, length)\r\n {\r\n return ArrayUtils.GetRandom(this.list, startIndex, length);\r\n },\r\n\r\n /**\r\n * Gets the first Game Object in this Container.\r\n *\r\n * You can also specify a property and value to search for, in which case it will return the first\r\n * Game Object in this Container with a matching property and / or value.\r\n *\r\n * For example: `getFirst('visible', true)` would return the first Game Object that had its `visible` property set.\r\n *\r\n * You can limit the search to the `startIndex` - `endIndex` range.\r\n *\r\n * @method Phaser.GameObjects.Container#getFirst\r\n * @since 3.4.0\r\n *\r\n * @param {string} property - The property to test on each Game Object in the Container.\r\n * @param {*} value - The value to test the property against. Must pass a strict (`===`) comparison check.\r\n * @param {integer} [startIndex=0] - An optional start index to search from.\r\n * @param {integer} [endIndex=Container.length] - An optional end index to search up to (but not included)\r\n *\r\n * @return {?Phaser.GameObjects.GameObject} The first matching Game Object, or `null` if none was found.\r\n */\r\n getFirst: function (property, value, startIndex, endIndex)\r\n {\r\n return ArrayUtils.GetFirst(this.list, property, value, startIndex, endIndex);\r\n },\r\n\r\n /**\r\n * Returns all Game Objects in this Container.\r\n *\r\n * You can optionally specify a matching criteria using the `property` and `value` arguments.\r\n *\r\n * For example: `getAll('body')` would return only Game Objects that have a body property.\r\n *\r\n * You can also specify a value to compare the property to:\r\n *\r\n * `getAll('visible', true)` would return only Game Objects that have their visible property set to `true`.\r\n *\r\n * Optionally you can specify a start and end index. For example if this Container had 100 Game Objects,\r\n * and you set `startIndex` to 0 and `endIndex` to 50, it would return matches from only\r\n * the first 50 Game Objects.\r\n *\r\n * @method Phaser.GameObjects.Container#getAll\r\n * @since 3.4.0\r\n *\r\n * @param {string} [property] - The property to test on each Game Object in the Container.\r\n * @param {any} [value] - If property is set then the `property` must strictly equal this value to be included in the results.\r\n * @param {integer} [startIndex=0] - An optional start index to search from.\r\n * @param {integer} [endIndex=Container.length] - An optional end index to search up to (but not included)\r\n *\r\n * @return {Phaser.GameObjects.GameObject[]} An array of matching Game Objects from this Container.\r\n */\r\n getAll: function (property, value, startIndex, endIndex)\r\n {\r\n return ArrayUtils.GetAll(this.list, property, value, startIndex, endIndex);\r\n },\r\n\r\n /**\r\n * Returns the total number of Game Objects in this Container that have a property\r\n * matching the given value.\r\n *\r\n * For example: `count('visible', true)` would count all the elements that have their visible property set.\r\n *\r\n * You can optionally limit the operation to the `startIndex` - `endIndex` range.\r\n *\r\n * @method Phaser.GameObjects.Container#count\r\n * @since 3.4.0\r\n *\r\n * @param {string} property - The property to check.\r\n * @param {any} value - The value to check.\r\n * @param {integer} [startIndex=0] - An optional start index to search from.\r\n * @param {integer} [endIndex=Container.length] - An optional end index to search up to (but not included)\r\n *\r\n * @return {integer} The total number of Game Objects in this Container with a property matching the given value.\r\n */\r\n count: function (property, value, startIndex, endIndex)\r\n {\r\n return ArrayUtils.CountAllMatching(this.list, property, value, startIndex, endIndex);\r\n },\r\n\r\n /**\r\n * Swaps the position of two Game Objects in this Container.\r\n * Both Game Objects must belong to this Container.\r\n *\r\n * @method Phaser.GameObjects.Container#swap\r\n * @since 3.4.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} child1 - The first Game Object to swap.\r\n * @param {Phaser.GameObjects.GameObject} child2 - The second Game Object to swap.\r\n *\r\n * @return {Phaser.GameObjects.Container} This Container instance.\r\n */\r\n swap: function (child1, child2)\r\n {\r\n ArrayUtils.Swap(this.list, child1, child2);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Moves a Game Object to a new position within this Container.\r\n *\r\n * The Game Object must already be a child of this Container.\r\n *\r\n * The Game Object is removed from its old position and inserted into the new one.\r\n * Therefore the Container size does not change. Other children will change position accordingly.\r\n *\r\n * @method Phaser.GameObjects.Container#moveTo\r\n * @since 3.4.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} child - The Game Object to move.\r\n * @param {integer} index - The new position of the Game Object in this Container.\r\n *\r\n * @return {Phaser.GameObjects.Container} This Container instance.\r\n */\r\n moveTo: function (child, index)\r\n {\r\n ArrayUtils.MoveTo(this.list, child, index);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Removes the given Game Object, or array of Game Objects, from this Container.\r\n *\r\n * The Game Objects must already be children of this Container.\r\n *\r\n * You can also optionally call `destroy` on each Game Object that is removed from the Container.\r\n *\r\n * @method Phaser.GameObjects.Container#remove\r\n * @since 3.4.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[]} child - The Game Object, or array of Game Objects, to be removed from the Container.\r\n * @param {boolean} [destroyChild=false] - Optionally call `destroy` on each child successfully removed from this Container.\r\n *\r\n * @return {Phaser.GameObjects.Container} This Container instance.\r\n */\r\n remove: function (child, destroyChild)\r\n {\r\n var removed = ArrayUtils.Remove(this.list, child, this.removeHandler, this);\r\n\r\n if (destroyChild && removed)\r\n {\r\n if (!Array.isArray(removed))\r\n {\r\n removed = [ removed ];\r\n }\r\n\r\n for (var i = 0; i < removed.length; i++)\r\n {\r\n removed[i].destroy();\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Removes the Game Object at the given position in this Container.\r\n *\r\n * You can also optionally call `destroy` on the Game Object, if one is found.\r\n *\r\n * @method Phaser.GameObjects.Container#removeAt\r\n * @since 3.4.0\r\n *\r\n * @param {integer} index - The index of the Game Object to be removed.\r\n * @param {boolean} [destroyChild=false] - Optionally call `destroy` on the Game Object if successfully removed from this Container.\r\n *\r\n * @return {Phaser.GameObjects.Container} This Container instance.\r\n */\r\n removeAt: function (index, destroyChild)\r\n {\r\n var removed = ArrayUtils.RemoveAt(this.list, index, this.removeHandler, this);\r\n\r\n if (destroyChild && removed)\r\n {\r\n removed.destroy();\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Removes the Game Objects between the given positions in this Container.\r\n *\r\n * You can also optionally call `destroy` on each Game Object that is removed from the Container.\r\n *\r\n * @method Phaser.GameObjects.Container#removeBetween\r\n * @since 3.4.0\r\n *\r\n * @param {integer} [startIndex=0] - An optional start index to search from.\r\n * @param {integer} [endIndex=Container.length] - An optional end index to search up to (but not included)\r\n * @param {boolean} [destroyChild=false] - Optionally call `destroy` on each Game Object successfully removed from this Container.\r\n *\r\n * @return {Phaser.GameObjects.Container} This Container instance.\r\n */\r\n removeBetween: function (startIndex, endIndex, destroyChild)\r\n {\r\n var removed = ArrayUtils.RemoveBetween(this.list, startIndex, endIndex, this.removeHandler, this);\r\n\r\n if (destroyChild)\r\n {\r\n for (var i = 0; i < removed.length; i++)\r\n {\r\n removed[i].destroy();\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Removes all Game Objects from this Container.\r\n *\r\n * You can also optionally call `destroy` on each Game Object that is removed from the Container.\r\n *\r\n * @method Phaser.GameObjects.Container#removeAll\r\n * @since 3.4.0\r\n *\r\n * @param {boolean} [destroyChild=false] - Optionally call `destroy` on each Game Object successfully removed from this Container.\r\n *\r\n * @return {Phaser.GameObjects.Container} This Container instance.\r\n */\r\n removeAll: function (destroyChild)\r\n {\r\n var removed = ArrayUtils.RemoveBetween(this.list, 0, this.list.length, this.removeHandler, this);\r\n\r\n if (destroyChild)\r\n {\r\n for (var i = 0; i < removed.length; i++)\r\n {\r\n removed[i].destroy();\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Brings the given Game Object to the top of this Container.\r\n * This will cause it to render on-top of any other objects in the Container.\r\n *\r\n * @method Phaser.GameObjects.Container#bringToTop\r\n * @since 3.4.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} child - The Game Object to bring to the top of the Container.\r\n *\r\n * @return {Phaser.GameObjects.Container} This Container instance.\r\n */\r\n bringToTop: function (child)\r\n {\r\n ArrayUtils.BringToTop(this.list, child);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sends the given Game Object to the bottom of this Container.\r\n * This will cause it to render below any other objects in the Container.\r\n *\r\n * @method Phaser.GameObjects.Container#sendToBack\r\n * @since 3.4.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} child - The Game Object to send to the bottom of the Container.\r\n *\r\n * @return {Phaser.GameObjects.Container} This Container instance.\r\n */\r\n sendToBack: function (child)\r\n {\r\n ArrayUtils.SendToBack(this.list, child);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Moves the given Game Object up one place in this Container, unless it's already at the top.\r\n *\r\n * @method Phaser.GameObjects.Container#moveUp\r\n * @since 3.4.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} child - The Game Object to be moved in the Container.\r\n *\r\n * @return {Phaser.GameObjects.Container} This Container instance.\r\n */\r\n moveUp: function (child)\r\n {\r\n ArrayUtils.MoveUp(this.list, child);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Moves the given Game Object down one place in this Container, unless it's already at the bottom.\r\n *\r\n * @method Phaser.GameObjects.Container#moveDown\r\n * @since 3.4.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} child - The Game Object to be moved in the Container.\r\n *\r\n * @return {Phaser.GameObjects.Container} This Container instance.\r\n */\r\n moveDown: function (child)\r\n {\r\n ArrayUtils.MoveDown(this.list, child);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Reverses the order of all Game Objects in this Container.\r\n *\r\n * @method Phaser.GameObjects.Container#reverse\r\n * @since 3.4.0\r\n *\r\n * @return {Phaser.GameObjects.Container} This Container instance.\r\n */\r\n reverse: function ()\r\n {\r\n this.list.reverse();\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Shuffles the all Game Objects in this Container using the Fisher-Yates implementation.\r\n *\r\n * @method Phaser.GameObjects.Container#shuffle\r\n * @since 3.4.0\r\n *\r\n * @return {Phaser.GameObjects.Container} This Container instance.\r\n */\r\n shuffle: function ()\r\n {\r\n ArrayUtils.Shuffle(this.list);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Replaces a Game Object in this Container with the new Game Object.\r\n * The new Game Object cannot already be a child of this Container.\r\n *\r\n * @method Phaser.GameObjects.Container#replace\r\n * @since 3.4.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} oldChild - The Game Object in this Container that will be replaced.\r\n * @param {Phaser.GameObjects.GameObject} newChild - The Game Object to be added to this Container.\r\n * @param {boolean} [destroyChild=false] - Optionally call `destroy` on the Game Object if successfully removed from this Container.\r\n *\r\n * @return {Phaser.GameObjects.Container} This Container instance.\r\n */\r\n replace: function (oldChild, newChild, destroyChild)\r\n {\r\n var moved = ArrayUtils.Replace(this.list, oldChild, newChild);\r\n\r\n if (moved)\r\n {\r\n this.addHandler(newChild);\r\n this.removeHandler(oldChild);\r\n\r\n if (destroyChild)\r\n {\r\n oldChild.destroy();\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Returns `true` if the given Game Object is a direct child of this Container.\r\n *\r\n * This check does not scan nested Containers.\r\n *\r\n * @method Phaser.GameObjects.Container#exists\r\n * @since 3.4.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} child - The Game Object to check for within this Container.\r\n *\r\n * @return {boolean} True if the Game Object is an immediate child of this Container, otherwise false.\r\n */\r\n exists: function (child)\r\n {\r\n return (this.list.indexOf(child) > -1);\r\n },\r\n\r\n /**\r\n * Sets the property to the given value on all Game Objects in this Container.\r\n *\r\n * Optionally you can specify a start and end index. For example if this Container had 100 Game Objects,\r\n * and you set `startIndex` to 0 and `endIndex` to 50, it would return matches from only\r\n * the first 50 Game Objects.\r\n *\r\n * @method Phaser.GameObjects.Container#setAll\r\n * @since 3.4.0\r\n *\r\n * @param {string} property - The property that must exist on the Game Object.\r\n * @param {any} value - The value to get the property to.\r\n * @param {integer} [startIndex=0] - An optional start index to search from.\r\n * @param {integer} [endIndex=Container.length] - An optional end index to search up to (but not included)\r\n *\r\n * @return {Phaser.GameObjects.Container} This Container instance.\r\n */\r\n setAll: function (property, value, startIndex, endIndex)\r\n {\r\n ArrayUtils.SetAll(this.list, property, value, startIndex, endIndex);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * @callback EachContainerCallback\r\n * @generic I - [item]\r\n *\r\n * @param {*} item - The child Game Object of the Container.\r\n * @param {...*} [args] - Additional arguments that will be passed to the callback, after the child.\r\n */\r\n\r\n /**\r\n * Passes all Game Objects in this Container to the given callback.\r\n *\r\n * A copy of the Container is made before passing each entry to your callback.\r\n * This protects against the callback itself modifying the Container.\r\n *\r\n * If you know for sure that the callback will not change the size of this Container\r\n * then you can use the more performant `Container.iterate` method instead.\r\n *\r\n * @method Phaser.GameObjects.Container#each\r\n * @since 3.4.0\r\n *\r\n * @param {function} callback - The function to call.\r\n * @param {object} [context] - Value to use as `this` when executing callback.\r\n * @param {...*} [args] - Additional arguments that will be passed to the callback, after the child.\r\n *\r\n * @return {Phaser.GameObjects.Container} This Container instance.\r\n */\r\n each: function (callback, context)\r\n {\r\n var args = [ null ];\r\n var i;\r\n var temp = this.list.slice();\r\n var len = temp.length;\r\n\r\n for (i = 2; i < arguments.length; i++)\r\n {\r\n args.push(arguments[i]);\r\n }\r\n\r\n for (i = 0; i < len; i++)\r\n {\r\n args[0] = temp[i];\r\n\r\n callback.apply(context, args);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Passes all Game Objects in this Container to the given callback.\r\n *\r\n * Only use this method when you absolutely know that the Container will not be modified during\r\n * the iteration, i.e. by removing or adding to its contents.\r\n *\r\n * @method Phaser.GameObjects.Container#iterate\r\n * @since 3.4.0\r\n *\r\n * @param {function} callback - The function to call.\r\n * @param {object} [context] - Value to use as `this` when executing callback.\r\n * @param {...*} [args] - Additional arguments that will be passed to the callback, after the child.\r\n *\r\n * @return {Phaser.GameObjects.Container} This Container instance.\r\n */\r\n iterate: function (callback, context)\r\n {\r\n var args = [ null ];\r\n var i;\r\n\r\n for (i = 2; i < arguments.length; i++)\r\n {\r\n args.push(arguments[i]);\r\n }\r\n\r\n for (i = 0; i < this.list.length; i++)\r\n {\r\n args[0] = this.list[i];\r\n\r\n callback.apply(context, args);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the scroll factor of this Container and optionally all of its children.\r\n *\r\n * The scroll factor controls the influence of the movement of a Camera upon this Game Object.\r\n *\r\n * When a camera scrolls it will change the location at which this Game Object is rendered on-screen.\r\n * It does not change the Game Objects actual position values.\r\n *\r\n * A value of 1 means it will move exactly in sync with a camera.\r\n * A value of 0 means it will not move at all, even if the camera moves.\r\n * Other values control the degree to which the camera movement is mapped to this Game Object.\r\n * \r\n * Please be aware that scroll factor values other than 1 are not taken in to consideration when\r\n * calculating physics collisions. Bodies always collide based on their world position, but changing\r\n * the scroll factor is a visual adjustment to where the textures are rendered, which can offset\r\n * them from physics bodies if not accounted for in your code.\r\n *\r\n * @method Phaser.GameObjects.Container#setScrollFactor\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal scroll factor of this Game Object.\r\n * @param {number} [y=x] - The vertical scroll factor of this Game Object. If not set it will use the `x` value.\r\n * @param {boolean} [updateChildren=false] - Apply this scrollFactor to all Container children as well?\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setScrollFactor: function (x, y, updateChildren)\r\n {\r\n if (y === undefined) { y = x; }\r\n if (updateChildren === undefined) { updateChildren = false; }\r\n\r\n this.scrollFactorX = x;\r\n this.scrollFactorY = y;\r\n\r\n if (updateChildren)\r\n {\r\n ArrayUtils.SetAll(this.list, 'scrollFactorX', x);\r\n ArrayUtils.SetAll(this.list, 'scrollFactorY', y);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * The number of Game Objects inside this Container.\r\n *\r\n * @name Phaser.GameObjects.Container#length\r\n * @type {integer}\r\n * @readonly\r\n * @since 3.4.0\r\n */\r\n length: {\r\n\r\n get: function ()\r\n {\r\n return this.list.length;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Returns the first Game Object within the Container, or `null` if it is empty.\r\n *\r\n * You can move the cursor by calling `Container.next` and `Container.previous`.\r\n *\r\n * @name Phaser.GameObjects.Container#first\r\n * @type {?Phaser.GameObjects.GameObject}\r\n * @readonly\r\n * @since 3.4.0\r\n */\r\n first: {\r\n\r\n get: function ()\r\n {\r\n this.position = 0;\r\n\r\n if (this.list.length > 0)\r\n {\r\n return this.list[0];\r\n }\r\n else\r\n {\r\n return null;\r\n }\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Returns the last Game Object within the Container, or `null` if it is empty.\r\n *\r\n * You can move the cursor by calling `Container.next` and `Container.previous`.\r\n *\r\n * @name Phaser.GameObjects.Container#last\r\n * @type {?Phaser.GameObjects.GameObject}\r\n * @readonly\r\n * @since 3.4.0\r\n */\r\n last: {\r\n\r\n get: function ()\r\n {\r\n if (this.list.length > 0)\r\n {\r\n this.position = this.list.length - 1;\r\n\r\n return this.list[this.position];\r\n }\r\n else\r\n {\r\n return null;\r\n }\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Returns the next Game Object within the Container, or `null` if it is empty.\r\n *\r\n * You can move the cursor by calling `Container.next` and `Container.previous`.\r\n *\r\n * @name Phaser.GameObjects.Container#next\r\n * @type {?Phaser.GameObjects.GameObject}\r\n * @readonly\r\n * @since 3.4.0\r\n */\r\n next: {\r\n\r\n get: function ()\r\n {\r\n if (this.position < this.list.length)\r\n {\r\n this.position++;\r\n\r\n return this.list[this.position];\r\n }\r\n else\r\n {\r\n return null;\r\n }\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Returns the previous Game Object within the Container, or `null` if it is empty.\r\n *\r\n * You can move the cursor by calling `Container.next` and `Container.previous`.\r\n *\r\n * @name Phaser.GameObjects.Container#previous\r\n * @type {?Phaser.GameObjects.GameObject}\r\n * @readonly\r\n * @since 3.4.0\r\n */\r\n previous: {\r\n\r\n get: function ()\r\n {\r\n if (this.position > 0)\r\n {\r\n this.position--;\r\n\r\n return this.list[this.position];\r\n }\r\n else\r\n {\r\n return null;\r\n }\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Internal destroy handler, called as part of the destroy process.\r\n *\r\n * @method Phaser.GameObjects.Container#preDestroy\r\n * @protected\r\n * @since 3.9.0\r\n */\r\n preDestroy: function ()\r\n {\r\n this.removeAll(!!this.exclusive);\r\n\r\n this.localTransform.destroy();\r\n this.tempTransformMatrix.destroy();\r\n\r\n this.list = [];\r\n this._displayList = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Container;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb250YWluZXIvQ29udGFpbmVyLmpzPzE2NDkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMseUVBQW1CO0FBQzVDLGlCQUFpQixtQkFBTyxDQUFDLG1GQUEyQjtBQUNwRCxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLGdGQUFlO0FBQ3hDLGFBQWEsbUJBQU8sQ0FBQyx3RUFBVztBQUNoQyxpQkFBaUIsbUJBQU8sQ0FBQywwRUFBZTtBQUN4QyxnQkFBZ0IsbUJBQU8sQ0FBQyw2RkFBZ0M7QUFDeEQsYUFBYSxtQkFBTyxDQUFDLDZGQUFtQjtBQUN4QyxZQUFZLG1CQUFPLENBQUMscUZBQTRCO0FBQ2hELGNBQWMsbUJBQU8sQ0FBQyxxRUFBb0I7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLGdDQUFnQztBQUMzQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxjQUFjOztBQUVoRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHNCQUFzQjtBQUNyQztBQUNBLGdCQUFnQixzQkFBc0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLDBCQUEwQjs7QUFFN0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMkJBQTJCLHFCQUFxQjtBQUNoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLCtDQUErQztBQUM5RCxlQUFlLCtDQUErQztBQUM5RDtBQUNBLGdCQUFnQiwrQ0FBK0M7QUFDL0Q7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLHdCQUF3Qjs7QUFFM0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw4Q0FBOEM7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhEQUE4RDtBQUM3RTtBQUNBLGdCQUFnQiw2QkFBNkI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4REFBOEQ7QUFDN0UsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxJQUFJO0FBQ25CLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsZ0NBQWdDO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsSUFBSTtBQUNuQixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhEQUE4RDtBQUM3RSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkIsb0JBQW9CO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw2QkFBNkI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw2QkFBNkI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJCQUEyQixvQkFBb0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QztBQUNBLGdCQUFnQiw2QkFBNkI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw2QkFBNkI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsSUFBSTtBQUNuQixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsZUFBZSxLQUFLO0FBQ3BCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixlQUFlLE9BQU87QUFDdEIsZUFBZSxLQUFLO0FBQ3BCO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsU0FBUztBQUM1QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixlQUFlLE9BQU87QUFDdEIsZUFBZSxLQUFLO0FBQ3BCO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixzQkFBc0I7QUFDekM7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixzQkFBc0I7QUFDekM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTztBQUNyQywyQ0FBMkMsd0JBQXdCOztBQUVuRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvY29udGFpbmVyL0NvbnRhaW5lci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAYXV0aG9yICAgICAgIEZlbGlwZSBBbGZvbnNvIDxAYml0bmVuZmVyPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEFycmF5VXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9hcnJheScpO1xyXG52YXIgQmxlbmRNb2RlcyA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVyL0JsZW5kTW9kZXMnKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENvbXBvbmVudHMgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuLi9ldmVudHMnKTtcclxudmFyIEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Jyk7XHJcbnZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuLi8uLi9nZW9tL3JlY3RhbmdsZS9SZWN0YW5nbGUnKTtcclxudmFyIFJlbmRlciA9IHJlcXVpcmUoJy4vQ29udGFpbmVyUmVuZGVyJyk7XHJcbnZhciBVbmlvbiA9IHJlcXVpcmUoJy4uLy4uL2dlb20vcmVjdGFuZ2xlL1VuaW9uJyk7XHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9WZWN0b3IyJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIENvbnRhaW5lciBHYW1lIE9iamVjdC5cclxuICpcclxuICogQSBDb250YWluZXIsIGFzIHRoZSBuYW1lIGltcGxpZXMsIGNhbiAnY29udGFpbicgb3RoZXIgdHlwZXMgb2YgR2FtZSBPYmplY3QuXHJcbiAqIFdoZW4gYSBHYW1lIE9iamVjdCBpcyBhZGRlZCB0byBhIENvbnRhaW5lciwgdGhlIENvbnRhaW5lciBiZWNvbWVzIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVuZGVyaW5nIG9mIGl0LlxyXG4gKiBCeSBkZWZhdWx0IGl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBEaXNwbGF5IExpc3QgYW5kIGluc3RlYWQgYWRkZWQgdG8gdGhlIENvbnRhaW5lcnMgb3duIGludGVybmFsIGxpc3QuXHJcbiAqXHJcbiAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgR2FtZSBPYmplY3QgYXV0b21hdGljYWxseSBiZWNvbWVzIHJlbGF0aXZlIHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUgQ29udGFpbmVyLlxyXG4gKlxyXG4gKiBXaGVuIHRoZSBDb250YWluZXIgaXMgcmVuZGVyZWQsIGFsbCBvZiBpdHMgY2hpbGRyZW4gYXJlIHJlbmRlcmVkIGFzIHdlbGwsIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGV4aXN0XHJcbiAqIHdpdGhpbiB0aGUgQ29udGFpbmVyLiBDb250YWluZXIgY2hpbGRyZW4gY2FuIGJlIHJlcG9zaXRpb25lZCB1c2luZyBtZXRob2RzIHN1Y2ggYXMgYE1vdmVVcGAsIGBNb3ZlRG93bmAgYW5kIGBTZW5kVG9CYWNrYC5cclxuICpcclxuICogSWYgeW91IG1vZGlmeSBhIHRyYW5zZm9ybSBwcm9wZXJ0eSBvZiB0aGUgQ29udGFpbmVyLCBzdWNoIGFzIGBDb250YWluZXIueGAgb3IgYENvbnRhaW5lci5yb3RhdGlvbmAgdGhlbiBpdCB3aWxsXHJcbiAqIGF1dG9tYXRpY2FsbHkgaW5mbHVlbmNlIGFsbCBjaGlsZHJlbiBhcyB3ZWxsLlxyXG4gKlxyXG4gKiBDb250YWluZXJzIGNhbiBpbmNsdWRlIG90aGVyIENvbnRhaW5lcnMgZm9yIGRlZXBseSBuZXN0ZWQgdHJhbnNmb3Jtcy5cclxuICpcclxuICogQ29udGFpbmVycyBjYW4gaGF2ZSBtYXNrcyBzZXQgb24gdGhlbSBhbmQgY2FuIGJlIHVzZWQgYXMgYSBtYXNrIHRvby4gSG93ZXZlciwgQ29udGFpbmVyIGNoaWxkcmVuIGNhbm5vdCBiZSBtYXNrZWQuXHJcbiAqIFRoZSBtYXNrcyBkbyBub3QgJ3N0YWNrIHVwJy4gT25seSBhIENvbnRhaW5lciBvbiB0aGUgcm9vdCBvZiB0aGUgZGlzcGxheSBsaXN0IHdpbGwgdXNlIGl0cyBtYXNrLlxyXG4gKlxyXG4gKiBDb250YWluZXJzIGNhbiBiZSBlbmFibGVkIGZvciBpbnB1dC4gQmVjYXVzZSB0aGV5IGRvIG5vdCBoYXZlIGEgdGV4dHVyZSB5b3UgbmVlZCB0byBwcm92aWRlIGEgc2hhcGUgZm9yIHRoZW1cclxuICogdG8gdXNlIGFzIHRoZWlyIGhpdCBhcmVhLiBDb250YWluZXIgY2hpbGRyZW4gY2FuIGFsc28gYmUgZW5hYmxlZCBmb3IgaW5wdXQsIGluZGVwZW5kZW50IG9mIHRoZSBDb250YWluZXIuXHJcbiAqXHJcbiAqIENvbnRhaW5lcnMgY2FuIGJlIGdpdmVuIGEgcGh5c2ljcyBib2R5IGZvciBlaXRoZXIgQXJjYWRlIFBoeXNpY3MsIEltcGFjdCBQaHlzaWNzIG9yIE1hdHRlciBQaHlzaWNzLiBIb3dldmVyLFxyXG4gKiBpZiBDb250YWluZXIgX2NoaWxkcmVuXyBhcmUgZW5hYmxlZCBmb3IgcGh5c2ljcyB5b3UgbWF5IGdldCB1bmV4cGVjdGVkIHJlc3VsdHMsIHN1Y2ggYXMgb2Zmc2V0IGJvZGllcyxcclxuICogaWYgdGhlIENvbnRhaW5lciBpdHNlbGYsIG9yIGFueSBvZiBpdHMgYW5jZXN0b3JzLCBpcyBwb3NpdGlvbmVkIGFueXdoZXJlIG90aGVyIHRoYW4gYXQgMCB4IDAuIENvbnRhaW5lciBjaGlsZHJlblxyXG4gKiB3aXRoIHBoeXNpY3MgZG8gbm90IGZhY3RvciBpbiB0aGUgQ29udGFpbmVyIGR1ZSB0byB0aGUgZXhjZXNzaXZlIGV4dHJhIGNhbGN1bGF0aW9ucyBuZWVkZWQuIFBsZWFzZSBzdHJ1Y3R1cmVcclxuICogeW91ciBnYW1lIHRvIHdvcmsgYXJvdW5kIHRoaXMuXHJcbiAqXHJcbiAqIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB1c2luZyBDb250YWluZXJzLiBUaGV5IGFkZCBhZGRpdGlvbmFsIHByb2Nlc3Npbmcgb3ZlcmhlYWQgaW50b1xyXG4gKiBldmVyeSBvbmUgb2YgdGhlaXIgY2hpbGRyZW4uIFRoZSBkZWVwZXIgeW91IG5lc3QgdGhlbSwgdGhlIG1vcmUgdGhlIGNvc3QgZXNjYWxhdGVzLiBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZVxyXG4gKiBmb3IgaW5wdXQgZXZlbnRzLiBZb3UgYWxzbyBsb29zZSB0aGUgYWJpbGl0eSB0byBzZXQgdGhlIGRpc3BsYXkgZGVwdGggb2YgQ29udGFpbmVyIGNoaWxkcmVuIGluIHRoZSBzYW1lXHJcbiAqIGZsZXhpYmxlIG1hbm5lciBhcyB0aG9zZSBub3Qgd2l0aGluIHRoZW0uIEluIHNob3J0LCBkb24ndCB1c2UgdGhlbSBmb3IgdGhlIHNha2Ugb2YgaXQuIFlvdSBwYXkgYSBzbWFsbCBjb3N0XHJcbiAqIGV2ZXJ5IHRpbWUgeW91IGNyZWF0ZSBvbmUsIHRyeSB0byBzdHJ1Y3R1cmUgeW91ciBnYW1lIGFyb3VuZCBhdm9pZGluZyB0aGF0IHdoZXJlIHBvc3NpYmxlLlxyXG4gKlxyXG4gKiBAY2xhc3MgQ29udGFpbmVyXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjQuMFxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbHBoYVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5CbGVuZE1vZGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQ29tcHV0ZWRTaXplXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkRlcHRoXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk1hc2tcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgYmVsb25ncy4gQSBHYW1lIE9iamVjdCBjYW4gb25seSBiZWxvbmcgdG8gb25lIFNjZW5lIGF0IGEgdGltZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBbY2hpbGRyZW5dIC0gQW4gb3B0aW9uYWwgYXJyYXkgb2YgR2FtZSBPYmplY3RzIHRvIGFkZCB0byB0aGlzIENvbnRhaW5lci5cclxuICovXHJcbnZhciBDb250YWluZXIgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEdhbWVPYmplY3QsXHJcblxyXG4gICAgTWl4aW5zOiBbXHJcbiAgICAgICAgQ29tcG9uZW50cy5BbHBoYSxcclxuICAgICAgICBDb21wb25lbnRzLkJsZW5kTW9kZSxcclxuICAgICAgICBDb21wb25lbnRzLkNvbXB1dGVkU2l6ZSxcclxuICAgICAgICBDb21wb25lbnRzLkRlcHRoLFxyXG4gICAgICAgIENvbXBvbmVudHMuTWFzayxcclxuICAgICAgICBDb21wb25lbnRzLlRyYW5zZm9ybSxcclxuICAgICAgICBDb21wb25lbnRzLlZpc2libGUsXHJcbiAgICAgICAgUmVuZGVyXHJcbiAgICBdLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gQ29udGFpbmVyIChzY2VuZSwgeCwgeSwgY2hpbGRyZW4pXHJcbiAgICB7XHJcbiAgICAgICAgR2FtZU9iamVjdC5jYWxsKHRoaXMsIHNjZW5lLCAnQ29udGFpbmVyJyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGFycmF5IGhvbGRpbmcgdGhlIGNoaWxkcmVuIG9mIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNsaXN0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119XHJcbiAgICAgICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5saXN0ID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERvZXMgdGhpcyBDb250YWluZXIgZXhjbHVzaXZlbHkgbWFuYWdlIGl0cyBjaGlsZHJlbj9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoZSBkZWZhdWx0IGlzIGB0cnVlYCB3aGljaCBtZWFucyBhIGNoaWxkIGFkZGVkIHRvIHRoaXMgQ29udGFpbmVyIGNhbm5vdFxyXG4gICAgICAgICAqIGJlbG9uZyBpbiBhbm90aGVyIENvbnRhaW5lciwgd2hpY2ggaW5jbHVkZXMgdGhlIFNjZW5lIGRpc3BsYXkgbGlzdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIElmIHlvdSBkaXNhYmxlIHRoaXMgdGhlbiB0aGlzIENvbnRhaW5lciB3aWxsIG5vIGxvbmdlciBleGNsdXNpdmVseSBtYW5hZ2UgaXRzIGNoaWxkcmVuLlxyXG4gICAgICAgICAqIFRoaXMgYWxsb3dzIHlvdSB0byBjcmVhdGUgYWxsIGtpbmRzIG9mIGludGVyZXN0aW5nIGdyYXBoaWNhbCBlZmZlY3RzLCBzdWNoIGFzIHJlcGxpY2F0aW5nXHJcbiAgICAgICAgICogR2FtZSBPYmplY3RzIHdpdGhvdXQgcmVwYXJlbnRpbmcgdGhlbSBhbGwgb3ZlciB0aGUgU2NlbmUuXHJcbiAgICAgICAgICogSG93ZXZlciwgZG9pbmcgc28gd2lsbCBwcmV2ZW50IGNoaWxkcmVuIGZyb20gcmVjZWl2aW5nIGFueSBraW5kIG9mIGlucHV0IGV2ZW50IG9yIGhhdmVcclxuICAgICAgICAgKiB0aGVpciBwaHlzaWNzIGJvZGllcyB3b3JrIGJ5IGRlZmF1bHQsIGFzIHRoZXkncmUgbm8gbG9uZ2VyIGEgc2luZ2xlIGVudGl0eSBvbiB0aGVcclxuICAgICAgICAgKiBkaXNwbGF5IGxpc3QsIGJ1dCBhcmUgYmVpbmcgcmVwbGljYXRlZCB3aGVyZS1ldmVyIHRoaXMgQ29udGFpbmVyIGlzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNleGNsdXNpdmVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5leGNsdXNpdmUgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb250YWluZXJzIGNhbiBoYXZlIGFuIG9wdGlvbmFsIG1heGltdW0gc2l6ZS4gSWYgc2V0IHRvIGFueXRoaW5nIGFib3ZlIDAgaXRcclxuICAgICAgICAgKiB3aWxsIGNvbnN0cmljdCB0aGUgYWRkaXRpb24gb2YgbmV3IEdhbWUgT2JqZWN0cyBpbnRvIHRoZSBDb250YWluZXIsIGNhcHBpbmcgb2ZmXHJcbiAgICAgICAgICogdGhlIG1heGltdW0gbGltaXQgdGhlIENvbnRhaW5lciBjYW4gZ3JvdyBpbiBzaXplIHRvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNtYXhTaXplXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgLTFcclxuICAgICAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1heFNpemUgPSAtMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGN1cnNvciBwb3NpdGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjcG9zaXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBvc2l0aW9uID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgVHJhbnNmb3JtIE1hdHJpeCB1c2VkIGZvciBsb2NhbCBzcGFjZSBjb252ZXJzaW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNsb2NhbFRyYW5zZm9ybVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9XHJcbiAgICAgICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sb2NhbFRyYW5zZm9ybSA9IG5ldyBDb21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCB0ZW1wb3JhcnkgVHJhbnNmb3JtIE1hdHJpeCB1c2VkIHRvIGF2b2lkIG9iamVjdCBjcmVhdGlvbi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjdGVtcFRyYW5zZm9ybU1hdHJpeFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRlbXBUcmFuc2Zvcm1NYXRyaXggPSBuZXcgQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXgoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIERpc3BsYXkgTGlzdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjX2Rpc3BsYXlMaXN0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5EaXNwbGF5TGlzdH1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2Rpc3BsYXlMaXN0ID0gc2NlbmUuc3lzLmRpc3BsYXlMaXN0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcHJvcGVydHkga2V5IHRvIHNvcnQgYnkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI19zb3J0S2V5XHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3NvcnRLZXkgPSAnJztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIFN5c3RlbXMgRXZlbnQgRW1pdHRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjX3N5c0V2ZW50c1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjkuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3N5c0V2ZW50cyA9IHNjZW5lLnN5cy5ldmVudHM7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBob3Jpem9udGFsIHNjcm9sbCBmYWN0b3Igb2YgdGhpcyBDb250YWluZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBUaGUgc2Nyb2xsIGZhY3RvciBjb250cm9scyB0aGUgaW5mbHVlbmNlIG9mIHRoZSBtb3ZlbWVudCBvZiBhIENhbWVyYSB1cG9uIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogV2hlbiBhIGNhbWVyYSBzY3JvbGxzIGl0IHdpbGwgY2hhbmdlIHRoZSBsb2NhdGlvbiBhdCB3aGljaCB0aGlzIENvbnRhaW5lciBpcyByZW5kZXJlZCBvbi1zY3JlZW4uXHJcbiAgICAgICAgICogSXQgZG9lcyBub3QgY2hhbmdlIHRoZSBDb250YWluZXJzIGFjdHVhbCBwb3NpdGlvbiB2YWx1ZXMuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogRm9yIGEgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgdmFsdWUgd2lsbCBvbmx5IHVwZGF0ZSB0aGUgQ29udGFpbmVyIGl0c2VsZiwgbm90IGl0cyBjaGlsZHJlbi5cclxuICAgICAgICAgKiBJZiB5b3Ugd2lzaCB0byBjaGFuZ2UgdGhlIHNjcm9sbEZhY3RvciBvZiB0aGUgY2hpbGRyZW4gYXMgd2VsbCwgdXNlIHRoZSBgc2V0U2Nyb2xsRmFjdG9yYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBBIHZhbHVlIG9mIDEgbWVhbnMgaXQgd2lsbCBtb3ZlIGV4YWN0bHkgaW4gc3luYyB3aXRoIGEgY2FtZXJhLlxyXG4gICAgICAgICAqIEEgdmFsdWUgb2YgMCBtZWFucyBpdCB3aWxsIG5vdCBtb3ZlIGF0IGFsbCwgZXZlbiBpZiB0aGUgY2FtZXJhIG1vdmVzLlxyXG4gICAgICAgICAqIE90aGVyIHZhbHVlcyBjb250cm9sIHRoZSBkZWdyZWUgdG8gd2hpY2ggdGhlIGNhbWVyYSBtb3ZlbWVudCBpcyBtYXBwZWQgdG8gdGhpcyBDb250YWluZXIuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogUGxlYXNlIGJlIGF3YXJlIHRoYXQgc2Nyb2xsIGZhY3RvciB2YWx1ZXMgb3RoZXIgdGhhbiAxIGFyZSBub3QgdGFrZW4gaW4gdG8gY29uc2lkZXJhdGlvbiB3aGVuXHJcbiAgICAgICAgICogY2FsY3VsYXRpbmcgcGh5c2ljcyBjb2xsaXNpb25zLiBCb2RpZXMgYWx3YXlzIGNvbGxpZGUgYmFzZWQgb24gdGhlaXIgd29ybGQgcG9zaXRpb24sIGJ1dCBjaGFuZ2luZ1xyXG4gICAgICAgICAqIHRoZSBzY3JvbGwgZmFjdG9yIGlzIGEgdmlzdWFsIGFkanVzdG1lbnQgdG8gd2hlcmUgdGhlIHRleHR1cmVzIGFyZSByZW5kZXJlZCwgd2hpY2ggY2FuIG9mZnNldFxyXG4gICAgICAgICAqIHRoZW0gZnJvbSBwaHlzaWNzIGJvZGllcyBpZiBub3QgYWNjb3VudGVkIGZvciBpbiB5b3VyIGNvZGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI3Njcm9sbEZhY3RvclhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjcm9sbEZhY3RvclggPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmVydGljYWwgc2Nyb2xsIGZhY3RvciBvZiB0aGlzIENvbnRhaW5lci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoZSBzY3JvbGwgZmFjdG9yIGNvbnRyb2xzIHRoZSBpbmZsdWVuY2Ugb2YgdGhlIG1vdmVtZW50IG9mIGEgQ2FtZXJhIHVwb24gdGhpcyBDb250YWluZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBXaGVuIGEgY2FtZXJhIHNjcm9sbHMgaXQgd2lsbCBjaGFuZ2UgdGhlIGxvY2F0aW9uIGF0IHdoaWNoIHRoaXMgQ29udGFpbmVyIGlzIHJlbmRlcmVkIG9uLXNjcmVlbi5cclxuICAgICAgICAgKiBJdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIENvbnRhaW5lcnMgYWN0dWFsIHBvc2l0aW9uIHZhbHVlcy5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBGb3IgYSBDb250YWluZXIsIHNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIG9ubHkgdXBkYXRlIHRoZSBDb250YWluZXIgaXRzZWxmLCBub3QgaXRzIGNoaWxkcmVuLlxyXG4gICAgICAgICAqIElmIHlvdSB3aXNoIHRvIGNoYW5nZSB0aGUgc2Nyb2xsRmFjdG9yIG9mIHRoZSBjaGlsZHJlbiBhcyB3ZWxsLCB1c2UgdGhlIGBzZXRTY3JvbGxGYWN0b3JgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEEgdmFsdWUgb2YgMSBtZWFucyBpdCB3aWxsIG1vdmUgZXhhY3RseSBpbiBzeW5jIHdpdGggYSBjYW1lcmEuXHJcbiAgICAgICAgICogQSB2YWx1ZSBvZiAwIG1lYW5zIGl0IHdpbGwgbm90IG1vdmUgYXQgYWxsLCBldmVuIGlmIHRoZSBjYW1lcmEgbW92ZXMuXHJcbiAgICAgICAgICogT3RoZXIgdmFsdWVzIGNvbnRyb2wgdGhlIGRlZ3JlZSB0byB3aGljaCB0aGUgY2FtZXJhIG1vdmVtZW50IGlzIG1hcHBlZCB0byB0aGlzIENvbnRhaW5lci5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBQbGVhc2UgYmUgYXdhcmUgdGhhdCBzY3JvbGwgZmFjdG9yIHZhbHVlcyBvdGhlciB0aGFuIDEgYXJlIG5vdCB0YWtlbiBpbiB0byBjb25zaWRlcmF0aW9uIHdoZW5cclxuICAgICAgICAgKiBjYWxjdWxhdGluZyBwaHlzaWNzIGNvbGxpc2lvbnMuIEJvZGllcyBhbHdheXMgY29sbGlkZSBiYXNlZCBvbiB0aGVpciB3b3JsZCBwb3NpdGlvbiwgYnV0IGNoYW5naW5nXHJcbiAgICAgICAgICogdGhlIHNjcm9sbCBmYWN0b3IgaXMgYSB2aXN1YWwgYWRqdXN0bWVudCB0byB3aGVyZSB0aGUgdGV4dHVyZXMgYXJlIHJlbmRlcmVkLCB3aGljaCBjYW4gb2Zmc2V0XHJcbiAgICAgICAgICogdGhlbSBmcm9tIHBoeXNpY3MgYm9kaWVzIGlmIG5vdCBhY2NvdW50ZWQgZm9yIGluIHlvdXIgY29kZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjc2Nyb2xsRmFjdG9yWVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsRmFjdG9yWSA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24oeCwgeSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJBbHBoYSgpO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJsZW5kTW9kZShCbGVuZE1vZGVzLlNLSVBfQ0hFQ0spO1xyXG5cclxuICAgICAgICBpZiAoY2hpbGRyZW4pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmFkZChjaGlsZHJlbik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIHZhbHVlIHRvIGFsbG93IENvbnRhaW5lcnMgdG8gYmUgdXNlZCBmb3IgaW5wdXQgYW5kIHBoeXNpY3MuXHJcbiAgICAgKiBEbyBub3QgY2hhbmdlIHRoaXMgdmFsdWUuIEl0IGhhcyBubyBlZmZlY3Qgb3RoZXIgdGhhbiB0byBicmVhayB0aGluZ3MuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNvcmlnaW5YXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqL1xyXG4gICAgb3JpZ2luWDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gMC41O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgdmFsdWUgdG8gYWxsb3cgQ29udGFpbmVycyB0byBiZSB1c2VkIGZvciBpbnB1dCBhbmQgcGh5c2ljcy5cclxuICAgICAqIERvIG5vdCBjaGFuZ2UgdGhpcyB2YWx1ZS4gSXQgaGFzIG5vIGVmZmVjdCBvdGhlciB0aGFuIHRvIGJyZWFrIHRoaW5ncy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI29yaWdpbllcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICovXHJcbiAgICBvcmlnaW5ZOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCB2YWx1ZSB0byBhbGxvdyBDb250YWluZXJzIHRvIGJlIHVzZWQgZm9yIGlucHV0IGFuZCBwaHlzaWNzLlxyXG4gICAgICogRG8gbm90IGNoYW5nZSB0aGlzIHZhbHVlLiBJdCBoYXMgbm8gZWZmZWN0IG90aGVyIHRoYW4gdG8gYnJlYWsgdGhpbmdzLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjZGlzcGxheU9yaWdpblhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICovXHJcbiAgICBkaXNwbGF5T3JpZ2luWDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy53aWR0aCAqIDAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIHZhbHVlIHRvIGFsbG93IENvbnRhaW5lcnMgdG8gYmUgdXNlZCBmb3IgaW5wdXQgYW5kIHBoeXNpY3MuXHJcbiAgICAgKiBEbyBub3QgY2hhbmdlIHRoaXMgdmFsdWUuIEl0IGhhcyBubyBlZmZlY3Qgb3RoZXIgdGhhbiB0byBicmVhayB0aGluZ3MuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNkaXNwbGF5T3JpZ2luWVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKi9cclxuICAgIGRpc3BsYXlPcmlnaW5ZOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhlaWdodCAqIDAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERvZXMgdGhpcyBDb250YWluZXIgZXhjbHVzaXZlbHkgbWFuYWdlIGl0cyBjaGlsZHJlbj9cclxuICAgICAqXHJcbiAgICAgKiBUaGUgZGVmYXVsdCBpcyBgdHJ1ZWAgd2hpY2ggbWVhbnMgYSBjaGlsZCBhZGRlZCB0byB0aGlzIENvbnRhaW5lciBjYW5ub3RcclxuICAgICAqIGJlbG9uZyBpbiBhbm90aGVyIENvbnRhaW5lciwgd2hpY2ggaW5jbHVkZXMgdGhlIFNjZW5lIGRpc3BsYXkgbGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBJZiB5b3UgZGlzYWJsZSB0aGlzIHRoZW4gdGhpcyBDb250YWluZXIgd2lsbCBubyBsb25nZXIgZXhjbHVzaXZlbHkgbWFuYWdlIGl0cyBjaGlsZHJlbi5cclxuICAgICAqIFRoaXMgYWxsb3dzIHlvdSB0byBjcmVhdGUgYWxsIGtpbmRzIG9mIGludGVyZXN0aW5nIGdyYXBoaWNhbCBlZmZlY3RzLCBzdWNoIGFzIHJlcGxpY2F0aW5nXHJcbiAgICAgKiBHYW1lIE9iamVjdHMgd2l0aG91dCByZXBhcmVudGluZyB0aGVtIGFsbCBvdmVyIHRoZSBTY2VuZS5cclxuICAgICAqIEhvd2V2ZXIsIGRvaW5nIHNvIHdpbGwgcHJldmVudCBjaGlsZHJlbiBmcm9tIHJlY2VpdmluZyBhbnkga2luZCBvZiBpbnB1dCBldmVudCBvciBoYXZlXHJcbiAgICAgKiB0aGVpciBwaHlzaWNzIGJvZGllcyB3b3JrIGJ5IGRlZmF1bHQsIGFzIHRoZXkncmUgbm8gbG9uZ2VyIGEgc2luZ2xlIGVudGl0eSBvbiB0aGVcclxuICAgICAqIGRpc3BsYXkgbGlzdCwgYnV0IGFyZSBiZWluZyByZXBsaWNhdGVkIHdoZXJlLWV2ZXIgdGhpcyBDb250YWluZXIgaXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI3NldEV4Y2x1c2l2ZVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdmFsdWU9dHJ1ZV0gLSBUaGUgZXhjbHVzaXZlIHN0YXRlIG9mIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXJ9IFRoaXMgQ29udGFpbmVyLlxyXG4gICAgICovXHJcbiAgICBzZXRFeGNsdXNpdmU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdGhpcy5leGNsdXNpdmUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgYm91bmRzIG9mIHRoaXMgQ29udGFpbmVyLiBJdCB3b3JrcyBieSBpdGVyYXRpbmcgYWxsIGNoaWxkcmVuIG9mIHRoZSBDb250YWluZXIsXHJcbiAgICAgKiBnZXR0aW5nIHRoZWlyIHJlc3BlY3RpdmUgYm91bmRzLCBhbmQgdGhlbiB3b3JraW5nIG91dCBhIG1pbi1tYXggcmVjdGFuZ2xlIGZyb20gdGhhdC5cclxuICAgICAqIEl0IGRvZXMgbm90IGZhY3RvciBpbiBpZiB0aGUgY2hpbGRyZW4gcmVuZGVyIG9yIG5vdCwgYWxsIGFyZSBpbmNsdWRlZC5cclxuICAgICAqXHJcbiAgICAgKiBTb21lIGNoaWxkcmVuIGFyZSB1bmFibGUgdG8gcmV0dXJuIHRoZWlyIGJvdW5kcywgc3VjaCBhcyBHcmFwaGljcyBvYmplY3RzLCBpbiB3aGljaCBjYXNlXHJcbiAgICAgKiB0aGV5IGFyZSBza2lwcGVkLlxyXG4gICAgICpcclxuICAgICAqIERlcGVuZGluZyBvbiB0aGUgcXVhbnRpdHkgb2YgY2hpbGRyZW4gaW4gdGhpcyBDb250YWluZXIgaXQgY291bGQgYmUgYSByZWFsbHkgZXhwZW5zaXZlIGNhbGwsXHJcbiAgICAgKiBzbyBjYWNoZSBpdCBhbmQgb25seSBwb2xsIGl0IGFzIG5lZWRlZC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgdmFsdWVzIGFyZSBzdG9yZWQgYW5kIHJldHVybmVkIGluIGEgUmVjdGFuZ2xlIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjZ2V0Qm91bmRzXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gW291dHB1dF0gLSBBIEdlb20uUmVjdGFuZ2xlIG9iamVjdCB0byBzdG9yZSB0aGUgdmFsdWVzIGluLiBJZiBub3QgcHJvdmlkZWQgYSBuZXcgUmVjdGFuZ2xlIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IFRoZSB2YWx1ZXMgc3RvcmVkIGluIHRoZSBvdXRwdXQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRCb3VuZHM6IGZ1bmN0aW9uIChvdXRwdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dHB1dCA9PT0gdW5kZWZpbmVkKSB7IG91dHB1dCA9IG5ldyBSZWN0YW5nbGUoKTsgfVxyXG5cclxuICAgICAgICBvdXRwdXQuc2V0VG8odGhpcy54LCB0aGlzLnksIDAsIDApO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5saXN0Lmxlbmd0aCA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmxpc3Q7XHJcbiAgICAgICAgICAgIHZhciB0ZW1wUmVjdCA9IG5ldyBSZWN0YW5nbGUoKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IGNoaWxkcmVuW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChlbnRyeS5nZXRCb3VuZHMpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW50cnkuZ2V0Qm91bmRzKHRlbXBSZWN0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgVW5pb24odGVtcFJlY3QsIG91dHB1dCwgb3V0cHV0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBhZGQgaGFuZGxlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjYWRkSGFuZGxlclxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMganVzdCBhZGRlZCB0byB0aGlzIENvbnRhaW5lci5cclxuICAgICAqL1xyXG4gICAgYWRkSGFuZGxlcjogZnVuY3Rpb24gKGdhbWVPYmplY3QpXHJcbiAgICB7XHJcbiAgICAgICAgZ2FtZU9iamVjdC5vbmNlKEV2ZW50cy5ERVNUUk9ZLCB0aGlzLnJlbW92ZSwgdGhpcyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmV4Y2x1c2l2ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Rpc3BsYXlMaXN0LnJlbW92ZShnYW1lT2JqZWN0KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChnYW1lT2JqZWN0LnBhcmVudENvbnRhaW5lcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZ2FtZU9iamVjdC5wYXJlbnRDb250YWluZXIucmVtb3ZlKGdhbWVPYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBnYW1lT2JqZWN0LnBhcmVudENvbnRhaW5lciA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIHJlbW92ZSBoYW5kbGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNyZW1vdmVIYW5kbGVyXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBqdXN0IHJlbW92ZWQgZnJvbSB0aGlzIENvbnRhaW5lci5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlSGFuZGxlcjogZnVuY3Rpb24gKGdhbWVPYmplY3QpXHJcbiAgICB7XHJcbiAgICAgICAgZ2FtZU9iamVjdC5vZmYoRXZlbnRzLkRFU1RST1ksIHRoaXMucmVtb3ZlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZXhjbHVzaXZlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5wYXJlbnRDb250YWluZXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIFBvaW50LWxpa2Ugb2JqZWN0LCBzdWNoIGFzIGEgVmVjdG9yMiwgR2VvbS5Qb2ludCBvciBvYmplY3Qgd2l0aCBwdWJsaWMgeCBhbmQgeSBwcm9wZXJ0aWVzLFxyXG4gICAgICogYW5kIHRyYW5zZm9ybXMgaXQgaW50byB0aGUgc3BhY2Ugb2YgdGhpcyBDb250YWluZXIsIHRoZW4gcmV0dXJucyBpdCBpbiB0aGUgb3V0cHV0IG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjcG9pbnRUb0NvbnRhaW5lclxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsob2JqZWN0fFBoYXNlci5HZW9tLlBvaW50fFBoYXNlci5NYXRoLlZlY3RvcjIpfSBzb3VyY2UgLSBUaGUgU291cmNlIFBvaW50IHRvIGJlIHRyYW5zZm9ybWVkLlxyXG4gICAgICogQHBhcmFtIHsob2JqZWN0fFBoYXNlci5HZW9tLlBvaW50fFBoYXNlci5NYXRoLlZlY3RvcjIpfSBbb3V0cHV0XSAtIEEgZGVzdGluYXRpb24gb2JqZWN0IHRvIHN0b3JlIHRoZSB0cmFuc2Zvcm1lZCBwb2ludCBpbi4gSWYgbm9uZSBnaXZlbiBhIFZlY3RvcjIgd2lsbCBiZSBjcmVhdGVkIGFuZCByZXR1cm5lZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsob2JqZWN0fFBoYXNlci5HZW9tLlBvaW50fFBoYXNlci5NYXRoLlZlY3RvcjIpfSBUaGUgdHJhbnNmb3JtZWQgcG9pbnQuXHJcbiAgICAgKi9cclxuICAgIHBvaW50VG9Db250YWluZXI6IGZ1bmN0aW9uIChzb3VyY2UsIG91dHB1dClcclxuICAgIHtcclxuICAgICAgICBpZiAob3V0cHV0ID09PSB1bmRlZmluZWQpIHsgb3V0cHV0ID0gbmV3IFZlY3RvcjIoKTsgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5wYXJlbnRDb250YWluZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRDb250YWluZXIucG9pbnRUb0NvbnRhaW5lcihzb3VyY2UsIG91dHB1dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdGVtcE1hdHJpeCA9IHRoaXMudGVtcFRyYW5zZm9ybU1hdHJpeDtcclxuXHJcbiAgICAgICAgLy8gIE5vIG5lZWQgdG8gbG9hZElkZW50aXR5IGJlY2F1c2UgYXBwbHlJVFJTIG92ZXJ3cml0ZXMgZXZlcnkgdmFsdWUgYW55d2F5XHJcbiAgICAgICAgdGVtcE1hdHJpeC5hcHBseUlUUlModGhpcy54LCB0aGlzLnksIHRoaXMucm90YXRpb24sIHRoaXMuc2NhbGVYLCB0aGlzLnNjYWxlWSk7XHJcblxyXG4gICAgICAgIHRlbXBNYXRyaXguaW52ZXJ0KCk7XHJcblxyXG4gICAgICAgIHRlbXBNYXRyaXgudHJhbnNmb3JtUG9pbnQoc291cmNlLngsIHNvdXJjZS55LCBvdXRwdXQpO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHdvcmxkIHRyYW5zZm9ybSBtYXRyaXggYXMgdXNlZCBmb3IgQm91bmRzIGNoZWNrcy5cclxuICAgICAqIFxyXG4gICAgICogVGhlIHJldHVybmVkIG1hdHJpeCBpcyB0ZW1wb3JhbCBhbmQgc2hvdWxkbid0IGJlIHN0b3JlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjZ2V0Qm91bmRzVHJhbnNmb3JtTWF0cml4XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IFRoZSB3b3JsZCB0cmFuc2Zvcm0gbWF0cml4LlxyXG4gICAgICovXHJcbiAgICBnZXRCb3VuZHNUcmFuc2Zvcm1NYXRyaXg6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0V29ybGRUcmFuc2Zvcm1NYXRyaXgodGhpcy50ZW1wVHJhbnNmb3JtTWF0cml4LCB0aGlzLmxvY2FsVHJhbnNmb3JtKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIHRoZSBnaXZlbiBHYW1lIE9iamVjdCwgb3IgYXJyYXkgb2YgR2FtZSBPYmplY3RzLCB0byB0aGlzIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBFYWNoIEdhbWUgT2JqZWN0IG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNhZGRcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gY2hpbGQgLSBUaGUgR2FtZSBPYmplY3QsIG9yIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgdG8gYWRkIHRvIHRoZSBDb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lcn0gVGhpcyBDb250YWluZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGFkZDogZnVuY3Rpb24gKGNoaWxkKVxyXG4gICAge1xyXG4gICAgICAgIEFycmF5VXRpbHMuQWRkKHRoaXMubGlzdCwgY2hpbGQsIHRoaXMubWF4U2l6ZSwgdGhpcy5hZGRIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyB0aGUgZ2l2ZW4gR2FtZSBPYmplY3QsIG9yIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgdG8gdGhpcyBDb250YWluZXIgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBFeGlzdGluZyBHYW1lIE9iamVjdHMgaW4gdGhlIENvbnRhaW5lciBhcmUgc2hpZnRlZCB1cC5cclxuICAgICAqXHJcbiAgICAgKiBFYWNoIEdhbWUgT2JqZWN0IG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNhZGRBdFxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdHxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBjaGlsZCAtIFRoZSBHYW1lIE9iamVjdCwgb3IgYXJyYXkgb2YgR2FtZSBPYmplY3RzLCB0byBhZGQgdG8gdGhlIENvbnRhaW5lci5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gVGhlIHBvc2l0aW9uIHRvIGluc2VydCB0aGUgR2FtZSBPYmplY3QvcyBhdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyfSBUaGlzIENvbnRhaW5lciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgYWRkQXQ6IGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpXHJcbiAgICB7XHJcbiAgICAgICAgQXJyYXlVdGlscy5BZGRBdCh0aGlzLmxpc3QsIGNoaWxkLCBpbmRleCwgdGhpcy5tYXhTaXplLCB0aGlzLmFkZEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBHYW1lIE9iamVjdCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24gaW4gdGhpcyBDb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI2dldEF0XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGluZGV4IC0gVGhlIHBvc2l0aW9uIHRvIGdldCB0aGUgR2FtZSBPYmplY3QgZnJvbS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IFRoZSBHYW1lIE9iamVjdCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LCBvciBgbnVsbGAgaWYgbm9uZSBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgZ2V0QXQ6IGZ1bmN0aW9uIChpbmRleClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5saXN0W2luZGV4XTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZ2l2ZW4gR2FtZSBPYmplY3QgaW4gdGhpcyBDb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI2dldEluZGV4XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBjaGlsZCAtIFRoZSBHYW1lIE9iamVjdCB0byBzZWFyY2ggZm9yIGluIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSBpbmRleCBvZiB0aGUgR2FtZSBPYmplY3QgaW4gdGhpcyBDb250YWluZXIsIG9yIC0xIGlmIG5vdCBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgZ2V0SW5kZXg6IGZ1bmN0aW9uIChjaGlsZClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5saXN0LmluZGV4T2YoY2hpbGQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNvcnQgdGhlIGNvbnRlbnRzIG9mIHRoaXMgQ29udGFpbmVyIHNvIHRoZSBpdGVtcyBhcmUgaW4gb3JkZXIgYmFzZWQgb24gdGhlIGdpdmVuIHByb3BlcnR5LlxyXG4gICAgICogRm9yIGV4YW1wbGU6IGBzb3J0KCdhbHBoYScpYCB3b3VsZCBzb3J0IHRoZSBlbGVtZW50cyBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgdGhlaXIgYGFscGhhYCBwcm9wZXJ0eS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjc29ydFxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IHRvIGxleGljYWxseSBzb3J0IGJ5LlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gW2hhbmRsZXJdIC0gUHJvdmlkZSB5b3VyIG93biBjdXN0b20gaGFuZGxlciBmdW5jdGlvbi4gV2lsbCByZWNlaXZlIDIgY2hpbGRyZW4gd2hpY2ggaXQgc2hvdWxkIGNvbXBhcmUgYW5kIHJldHVybiBhIGJvb2xlYW4uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lcn0gVGhpcyBDb250YWluZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNvcnQ6IGZ1bmN0aW9uIChwcm9wZXJ0eSwgaGFuZGxlcilcclxuICAgIHtcclxuICAgICAgICBpZiAoIXByb3BlcnR5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaGFuZGxlciA9IGZ1bmN0aW9uIChjaGlsZEEsIGNoaWxkQilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkQVtwcm9wZXJ0eV0gLSBjaGlsZEJbcHJvcGVydHldO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgQXJyYXlVdGlscy5TdGFibGVTb3J0LmlucGxhY2UodGhpcy5saXN0LCBoYW5kbGVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VhcmNoZXMgZm9yIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhIGNoaWxkIHdpdGggaXRzIGBuYW1lYCBwcm9wZXJ0eSBtYXRjaGluZyB0aGUgZ2l2ZW4gYXJndW1lbnQuXHJcbiAgICAgKiBTaG91bGQgbW9yZSB0aGFuIG9uZSBjaGlsZCBoYXZlIHRoZSBzYW1lIG5hbWUgb25seSB0aGUgZmlyc3QgaXMgcmV0dXJuZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI2dldEJ5TmFtZVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSB0byBzZWFyY2ggZm9yLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9QaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIGZpcnN0IGNoaWxkIHdpdGggYSBtYXRjaGluZyBuYW1lLCBvciBgbnVsbGAgaWYgbm9uZSB3ZXJlIGZvdW5kLlxyXG4gICAgICovXHJcbiAgICBnZXRCeU5hbWU6IGZ1bmN0aW9uIChuYW1lKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBBcnJheVV0aWxzLkdldEZpcnN0KHRoaXMubGlzdCwgJ25hbWUnLCBuYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgcmFuZG9tIEdhbWUgT2JqZWN0IGZyb20gdGhpcyBDb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI2dldFJhbmRvbVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbc3RhcnRJbmRleD0wXSAtIEFuIG9wdGlvbmFsIHN0YXJ0IGluZGV4LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbbGVuZ3RoXSAtIEFuIG9wdGlvbmFsIGxlbmd0aCwgdGhlIHRvdGFsIG51bWJlciBvZiBlbGVtZW50cyAoZnJvbSB0aGUgc3RhcnRJbmRleCkgdG8gY2hvb3NlIGZyb20uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBBIHJhbmRvbSBjaGlsZCBmcm9tIHRoZSBDb250YWluZXIsIG9yIGBudWxsYCBpZiB0aGUgQ29udGFpbmVyIGlzIGVtcHR5LlxyXG4gICAgICovXHJcbiAgICBnZXRSYW5kb206IGZ1bmN0aW9uIChzdGFydEluZGV4LCBsZW5ndGgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5VXRpbHMuR2V0UmFuZG9tKHRoaXMubGlzdCwgc3RhcnRJbmRleCwgbGVuZ3RoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBmaXJzdCBHYW1lIE9iamVjdCBpbiB0aGlzIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIGFsc28gc3BlY2lmeSBhIHByb3BlcnR5IGFuZCB2YWx1ZSB0byBzZWFyY2ggZm9yLCBpbiB3aGljaCBjYXNlIGl0IHdpbGwgcmV0dXJuIHRoZSBmaXJzdFxyXG4gICAgICogR2FtZSBPYmplY3QgaW4gdGhpcyBDb250YWluZXIgd2l0aCBhIG1hdGNoaW5nIHByb3BlcnR5IGFuZCAvIG9yIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEZvciBleGFtcGxlOiBgZ2V0Rmlyc3QoJ3Zpc2libGUnLCB0cnVlKWAgd291bGQgcmV0dXJuIHRoZSBmaXJzdCBHYW1lIE9iamVjdCB0aGF0IGhhZCBpdHMgYHZpc2libGVgIHByb3BlcnR5IHNldC5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIGxpbWl0IHRoZSBzZWFyY2ggdG8gdGhlIGBzdGFydEluZGV4YCAtIGBlbmRJbmRleGAgcmFuZ2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI2dldEZpcnN0XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkgdG8gdGVzdCBvbiBlYWNoIEdhbWUgT2JqZWN0IGluIHRoZSBDb250YWluZXIuXHJcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHRlc3QgdGhlIHByb3BlcnR5IGFnYWluc3QuIE11c3QgcGFzcyBhIHN0cmljdCAoYD09PWApIGNvbXBhcmlzb24gY2hlY2suXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtzdGFydEluZGV4PTBdIC0gQW4gb3B0aW9uYWwgc3RhcnQgaW5kZXggdG8gc2VhcmNoIGZyb20uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtlbmRJbmRleD1Db250YWluZXIubGVuZ3RoXSAtIEFuIG9wdGlvbmFsIGVuZCBpbmRleCB0byBzZWFyY2ggdXAgdG8gKGJ1dCBub3QgaW5jbHVkZWQpXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBUaGUgZmlyc3QgbWF0Y2hpbmcgR2FtZSBPYmplY3QsIG9yIGBudWxsYCBpZiBub25lIHdhcyBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgZ2V0Rmlyc3Q6IGZ1bmN0aW9uIChwcm9wZXJ0eSwgdmFsdWUsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBBcnJheVV0aWxzLkdldEZpcnN0KHRoaXMubGlzdCwgcHJvcGVydHksIHZhbHVlLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbGwgR2FtZSBPYmplY3RzIGluIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGEgbWF0Y2hpbmcgY3JpdGVyaWEgdXNpbmcgdGhlIGBwcm9wZXJ0eWAgYW5kIGB2YWx1ZWAgYXJndW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIEZvciBleGFtcGxlOiBgZ2V0QWxsKCdib2R5JylgIHdvdWxkIHJldHVybiBvbmx5IEdhbWUgT2JqZWN0cyB0aGF0IGhhdmUgYSBib2R5IHByb3BlcnR5LlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGEgdmFsdWUgdG8gY29tcGFyZSB0aGUgcHJvcGVydHkgdG86XHJcbiAgICAgKlxyXG4gICAgICogYGdldEFsbCgndmlzaWJsZScsIHRydWUpYCB3b3VsZCByZXR1cm4gb25seSBHYW1lIE9iamVjdHMgdGhhdCBoYXZlIHRoZWlyIHZpc2libGUgcHJvcGVydHkgc2V0IHRvIGB0cnVlYC5cclxuICAgICAqXHJcbiAgICAgKiBPcHRpb25hbGx5IHlvdSBjYW4gc3BlY2lmeSBhIHN0YXJ0IGFuZCBlbmQgaW5kZXguIEZvciBleGFtcGxlIGlmIHRoaXMgQ29udGFpbmVyIGhhZCAxMDAgR2FtZSBPYmplY3RzLFxyXG4gICAgICogYW5kIHlvdSBzZXQgYHN0YXJ0SW5kZXhgIHRvIDAgYW5kIGBlbmRJbmRleGAgdG8gNTAsIGl0IHdvdWxkIHJldHVybiBtYXRjaGVzIGZyb20gb25seVxyXG4gICAgICogdGhlIGZpcnN0IDUwIEdhbWUgT2JqZWN0cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjZ2V0QWxsXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3Byb3BlcnR5XSAtIFRoZSBwcm9wZXJ0eSB0byB0ZXN0IG9uIGVhY2ggR2FtZSBPYmplY3QgaW4gdGhlIENvbnRhaW5lci5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbdmFsdWVdIC0gSWYgcHJvcGVydHkgaXMgc2V0IHRoZW4gdGhlIGBwcm9wZXJ0eWAgbXVzdCBzdHJpY3RseSBlcXVhbCB0aGlzIHZhbHVlIHRvIGJlIGluY2x1ZGVkIGluIHRoZSByZXN1bHRzLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbc3RhcnRJbmRleD0wXSAtIEFuIG9wdGlvbmFsIHN0YXJ0IGluZGV4IHRvIHNlYXJjaCBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZW5kSW5kZXg9Q29udGFpbmVyLmxlbmd0aF0gLSBBbiBvcHRpb25hbCBlbmQgaW5kZXggdG8gc2VhcmNoIHVwIHRvIChidXQgbm90IGluY2x1ZGVkKVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IEFuIGFycmF5IG9mIG1hdGNoaW5nIEdhbWUgT2JqZWN0cyBmcm9tIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICovXHJcbiAgICBnZXRBbGw6IGZ1bmN0aW9uIChwcm9wZXJ0eSwgdmFsdWUsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBBcnJheVV0aWxzLkdldEFsbCh0aGlzLmxpc3QsIHByb3BlcnR5LCB2YWx1ZSwgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBHYW1lIE9iamVjdHMgaW4gdGhpcyBDb250YWluZXIgdGhhdCBoYXZlIGEgcHJvcGVydHlcclxuICAgICAqIG1hdGNoaW5nIHRoZSBnaXZlbiB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBGb3IgZXhhbXBsZTogYGNvdW50KCd2aXNpYmxlJywgdHJ1ZSlgIHdvdWxkIGNvdW50IGFsbCB0aGUgZWxlbWVudHMgdGhhdCBoYXZlIHRoZWlyIHZpc2libGUgcHJvcGVydHkgc2V0LlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gb3B0aW9uYWxseSBsaW1pdCB0aGUgb3BlcmF0aW9uIHRvIHRoZSBgc3RhcnRJbmRleGAgLSBgZW5kSW5kZXhgIHJhbmdlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNjb3VudFxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IHRvIGNoZWNrLlxyXG4gICAgICogQHBhcmFtIHthbnl9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbc3RhcnRJbmRleD0wXSAtIEFuIG9wdGlvbmFsIHN0YXJ0IGluZGV4IHRvIHNlYXJjaCBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZW5kSW5kZXg9Q29udGFpbmVyLmxlbmd0aF0gLSBBbiBvcHRpb25hbCBlbmQgaW5kZXggdG8gc2VhcmNoIHVwIHRvIChidXQgbm90IGluY2x1ZGVkKVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSB0b3RhbCBudW1iZXIgb2YgR2FtZSBPYmplY3RzIGluIHRoaXMgQ29udGFpbmVyIHdpdGggYSBwcm9wZXJ0eSBtYXRjaGluZyB0aGUgZ2l2ZW4gdmFsdWUuXHJcbiAgICAgKi9cclxuICAgIGNvdW50OiBmdW5jdGlvbiAocHJvcGVydHksIHZhbHVlLCBzdGFydEluZGV4LCBlbmRJbmRleClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gQXJyYXlVdGlscy5Db3VudEFsbE1hdGNoaW5nKHRoaXMubGlzdCwgcHJvcGVydHksIHZhbHVlLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3dhcHMgdGhlIHBvc2l0aW9uIG9mIHR3byBHYW1lIE9iamVjdHMgaW4gdGhpcyBDb250YWluZXIuXHJcbiAgICAgKiBCb3RoIEdhbWUgT2JqZWN0cyBtdXN0IGJlbG9uZyB0byB0aGlzIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjc3dhcFxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gY2hpbGQxIC0gVGhlIGZpcnN0IEdhbWUgT2JqZWN0IHRvIHN3YXAuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBjaGlsZDIgLSBUaGUgc2Vjb25kIEdhbWUgT2JqZWN0IHRvIHN3YXAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lcn0gVGhpcyBDb250YWluZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHN3YXA6IGZ1bmN0aW9uIChjaGlsZDEsIGNoaWxkMilcclxuICAgIHtcclxuICAgICAgICBBcnJheVV0aWxzLlN3YXAodGhpcy5saXN0LCBjaGlsZDEsIGNoaWxkMik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vdmVzIGEgR2FtZSBPYmplY3QgdG8gYSBuZXcgcG9zaXRpb24gd2l0aGluIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBHYW1lIE9iamVjdCBtdXN0IGFscmVhZHkgYmUgYSBjaGlsZCBvZiB0aGlzIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgR2FtZSBPYmplY3QgaXMgcmVtb3ZlZCBmcm9tIGl0cyBvbGQgcG9zaXRpb24gYW5kIGluc2VydGVkIGludG8gdGhlIG5ldyBvbmUuXHJcbiAgICAgKiBUaGVyZWZvcmUgdGhlIENvbnRhaW5lciBzaXplIGRvZXMgbm90IGNoYW5nZS4gT3RoZXIgY2hpbGRyZW4gd2lsbCBjaGFuZ2UgcG9zaXRpb24gYWNjb3JkaW5nbHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI21vdmVUb1xyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gY2hpbGQgLSBUaGUgR2FtZSBPYmplY3QgdG8gbW92ZS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gaW5kZXggLSBUaGUgbmV3IHBvc2l0aW9uIG9mIHRoZSBHYW1lIE9iamVjdCBpbiB0aGlzIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyfSBUaGlzIENvbnRhaW5lciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgbW92ZVRvOiBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxyXG4gICAge1xyXG4gICAgICAgIEFycmF5VXRpbHMuTW92ZVRvKHRoaXMubGlzdCwgY2hpbGQsIGluZGV4KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgZ2l2ZW4gR2FtZSBPYmplY3QsIG9yIGFycmF5IG9mIEdhbWUgT2JqZWN0cywgZnJvbSB0aGlzIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgR2FtZSBPYmplY3RzIG11c3QgYWxyZWFkeSBiZSBjaGlsZHJlbiBvZiB0aGlzIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIGFsc28gb3B0aW9uYWxseSBjYWxsIGBkZXN0cm95YCBvbiBlYWNoIEdhbWUgT2JqZWN0IHRoYXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBDb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI3JlbW92ZVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdHxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBjaGlsZCAtIFRoZSBHYW1lIE9iamVjdCwgb3IgYXJyYXkgb2YgR2FtZSBPYmplY3RzLCB0byBiZSByZW1vdmVkIGZyb20gdGhlIENvbnRhaW5lci5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Rlc3Ryb3lDaGlsZD1mYWxzZV0gLSBPcHRpb25hbGx5IGNhbGwgYGRlc3Ryb3lgIG9uIGVhY2ggY2hpbGQgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQgZnJvbSB0aGlzIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyfSBUaGlzIENvbnRhaW5lciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAoY2hpbGQsIGRlc3Ryb3lDaGlsZClcclxuICAgIHtcclxuICAgICAgICB2YXIgcmVtb3ZlZCA9IEFycmF5VXRpbHMuUmVtb3ZlKHRoaXMubGlzdCwgY2hpbGQsIHRoaXMucmVtb3ZlSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgICAgIGlmIChkZXN0cm95Q2hpbGQgJiYgcmVtb3ZlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZW1vdmVkKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVtb3ZlZCA9IFsgcmVtb3ZlZCBdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJlbW92ZWRbaV0uZGVzdHJveSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBHYW1lIE9iamVjdCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24gaW4gdGhpcyBDb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBhbHNvIG9wdGlvbmFsbHkgY2FsbCBgZGVzdHJveWAgb24gdGhlIEdhbWUgT2JqZWN0LCBpZiBvbmUgaXMgZm91bmQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI3JlbW92ZUF0XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBHYW1lIE9iamVjdCB0byBiZSByZW1vdmVkLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZGVzdHJveUNoaWxkPWZhbHNlXSAtIE9wdGlvbmFsbHkgY2FsbCBgZGVzdHJveWAgb24gdGhlIEdhbWUgT2JqZWN0IGlmIHN1Y2Nlc3NmdWxseSByZW1vdmVkIGZyb20gdGhpcyBDb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lcn0gVGhpcyBDb250YWluZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUF0OiBmdW5jdGlvbiAoaW5kZXgsIGRlc3Ryb3lDaGlsZClcclxuICAgIHtcclxuICAgICAgICB2YXIgcmVtb3ZlZCA9IEFycmF5VXRpbHMuUmVtb3ZlQXQodGhpcy5saXN0LCBpbmRleCwgdGhpcy5yZW1vdmVIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICAgICAgaWYgKGRlc3Ryb3lDaGlsZCAmJiByZW1vdmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmVtb3ZlZC5kZXN0cm95KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBHYW1lIE9iamVjdHMgYmV0d2VlbiB0aGUgZ2l2ZW4gcG9zaXRpb25zIGluIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gYWxzbyBvcHRpb25hbGx5IGNhbGwgYGRlc3Ryb3lgIG9uIGVhY2ggR2FtZSBPYmplY3QgdGhhdCBpcyByZW1vdmVkIGZyb20gdGhlIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjcmVtb3ZlQmV0d2VlblxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbc3RhcnRJbmRleD0wXSAtIEFuIG9wdGlvbmFsIHN0YXJ0IGluZGV4IHRvIHNlYXJjaCBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZW5kSW5kZXg9Q29udGFpbmVyLmxlbmd0aF0gLSBBbiBvcHRpb25hbCBlbmQgaW5kZXggdG8gc2VhcmNoIHVwIHRvIChidXQgbm90IGluY2x1ZGVkKVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZGVzdHJveUNoaWxkPWZhbHNlXSAtIE9wdGlvbmFsbHkgY2FsbCBgZGVzdHJveWAgb24gZWFjaCBHYW1lIE9iamVjdCBzdWNjZXNzZnVsbHkgcmVtb3ZlZCBmcm9tIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXJ9IFRoaXMgQ29udGFpbmVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICByZW1vdmVCZXR3ZWVuOiBmdW5jdGlvbiAoc3RhcnRJbmRleCwgZW5kSW5kZXgsIGRlc3Ryb3lDaGlsZClcclxuICAgIHtcclxuICAgICAgICB2YXIgcmVtb3ZlZCA9IEFycmF5VXRpbHMuUmVtb3ZlQmV0d2Vlbih0aGlzLmxpc3QsIHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0aGlzLnJlbW92ZUhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgICAgICBpZiAoZGVzdHJveUNoaWxkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZW1vdmVkLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZW1vdmVkW2ldLmRlc3Ryb3koKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhbGwgR2FtZSBPYmplY3RzIGZyb20gdGhpcyBDb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBhbHNvIG9wdGlvbmFsbHkgY2FsbCBgZGVzdHJveWAgb24gZWFjaCBHYW1lIE9iamVjdCB0aGF0IGlzIHJlbW92ZWQgZnJvbSB0aGUgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNyZW1vdmVBbGxcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Rlc3Ryb3lDaGlsZD1mYWxzZV0gLSBPcHRpb25hbGx5IGNhbGwgYGRlc3Ryb3lgIG9uIGVhY2ggR2FtZSBPYmplY3Qgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQgZnJvbSB0aGlzIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyfSBUaGlzIENvbnRhaW5lciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQWxsOiBmdW5jdGlvbiAoZGVzdHJveUNoaWxkKVxyXG4gICAge1xyXG4gICAgICAgIHZhciByZW1vdmVkID0gQXJyYXlVdGlscy5SZW1vdmVCZXR3ZWVuKHRoaXMubGlzdCwgMCwgdGhpcy5saXN0Lmxlbmd0aCwgdGhpcy5yZW1vdmVIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICAgICAgaWYgKGRlc3Ryb3lDaGlsZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVtb3ZlZFtpXS5kZXN0cm95KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJyaW5ncyB0aGUgZ2l2ZW4gR2FtZSBPYmplY3QgdG8gdGhlIHRvcCBvZiB0aGlzIENvbnRhaW5lci5cclxuICAgICAqIFRoaXMgd2lsbCBjYXVzZSBpdCB0byByZW5kZXIgb24tdG9wIG9mIGFueSBvdGhlciBvYmplY3RzIGluIHRoZSBDb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI2JyaW5nVG9Ub3BcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGNoaWxkIC0gVGhlIEdhbWUgT2JqZWN0IHRvIGJyaW5nIHRvIHRoZSB0b3Agb2YgdGhlIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyfSBUaGlzIENvbnRhaW5lciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgYnJpbmdUb1RvcDogZnVuY3Rpb24gKGNoaWxkKVxyXG4gICAge1xyXG4gICAgICAgIEFycmF5VXRpbHMuQnJpbmdUb1RvcCh0aGlzLmxpc3QsIGNoaWxkKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VuZHMgdGhlIGdpdmVuIEdhbWUgT2JqZWN0IHRvIHRoZSBib3R0b20gb2YgdGhpcyBDb250YWluZXIuXHJcbiAgICAgKiBUaGlzIHdpbGwgY2F1c2UgaXQgdG8gcmVuZGVyIGJlbG93IGFueSBvdGhlciBvYmplY3RzIGluIHRoZSBDb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI3NlbmRUb0JhY2tcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGNoaWxkIC0gVGhlIEdhbWUgT2JqZWN0IHRvIHNlbmQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXJ9IFRoaXMgQ29udGFpbmVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZW5kVG9CYWNrOiBmdW5jdGlvbiAoY2hpbGQpXHJcbiAgICB7XHJcbiAgICAgICAgQXJyYXlVdGlscy5TZW5kVG9CYWNrKHRoaXMubGlzdCwgY2hpbGQpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb3ZlcyB0aGUgZ2l2ZW4gR2FtZSBPYmplY3QgdXAgb25lIHBsYWNlIGluIHRoaXMgQ29udGFpbmVyLCB1bmxlc3MgaXQncyBhbHJlYWR5IGF0IHRoZSB0b3AuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI21vdmVVcFxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gY2hpbGQgLSBUaGUgR2FtZSBPYmplY3QgdG8gYmUgbW92ZWQgaW4gdGhlIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyfSBUaGlzIENvbnRhaW5lciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgbW92ZVVwOiBmdW5jdGlvbiAoY2hpbGQpXHJcbiAgICB7XHJcbiAgICAgICAgQXJyYXlVdGlscy5Nb3ZlVXAodGhpcy5saXN0LCBjaGlsZCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vdmVzIHRoZSBnaXZlbiBHYW1lIE9iamVjdCBkb3duIG9uZSBwbGFjZSBpbiB0aGlzIENvbnRhaW5lciwgdW5sZXNzIGl0J3MgYWxyZWFkeSBhdCB0aGUgYm90dG9tLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNtb3ZlRG93blxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gY2hpbGQgLSBUaGUgR2FtZSBPYmplY3QgdG8gYmUgbW92ZWQgaW4gdGhlIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyfSBUaGlzIENvbnRhaW5lciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgbW92ZURvd246IGZ1bmN0aW9uIChjaGlsZClcclxuICAgIHtcclxuICAgICAgICBBcnJheVV0aWxzLk1vdmVEb3duKHRoaXMubGlzdCwgY2hpbGQpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXZlcnNlcyB0aGUgb3JkZXIgb2YgYWxsIEdhbWUgT2JqZWN0cyBpbiB0aGlzIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjcmV2ZXJzZVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lcn0gVGhpcyBDb250YWluZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHJldmVyc2U6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5saXN0LnJldmVyc2UoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2h1ZmZsZXMgdGhlIGFsbCBHYW1lIE9iamVjdHMgaW4gdGhpcyBDb250YWluZXIgdXNpbmcgdGhlIEZpc2hlci1ZYXRlcyBpbXBsZW1lbnRhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjc2h1ZmZsZVxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lcn0gVGhpcyBDb250YWluZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNodWZmbGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgQXJyYXlVdGlscy5TaHVmZmxlKHRoaXMubGlzdCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlcGxhY2VzIGEgR2FtZSBPYmplY3QgaW4gdGhpcyBDb250YWluZXIgd2l0aCB0aGUgbmV3IEdhbWUgT2JqZWN0LlxyXG4gICAgICogVGhlIG5ldyBHYW1lIE9iamVjdCBjYW5ub3QgYWxyZWFkeSBiZSBhIGNoaWxkIG9mIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNyZXBsYWNlXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBvbGRDaGlsZCAtIFRoZSBHYW1lIE9iamVjdCBpbiB0aGlzIENvbnRhaW5lciB0aGF0IHdpbGwgYmUgcmVwbGFjZWQuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBuZXdDaGlsZCAtIFRoZSBHYW1lIE9iamVjdCB0byBiZSBhZGRlZCB0byB0aGlzIENvbnRhaW5lci5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Rlc3Ryb3lDaGlsZD1mYWxzZV0gLSBPcHRpb25hbGx5IGNhbGwgYGRlc3Ryb3lgIG9uIHRoZSBHYW1lIE9iamVjdCBpZiBzdWNjZXNzZnVsbHkgcmVtb3ZlZCBmcm9tIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXJ9IFRoaXMgQ29udGFpbmVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICByZXBsYWNlOiBmdW5jdGlvbiAob2xkQ2hpbGQsIG5ld0NoaWxkLCBkZXN0cm95Q2hpbGQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG1vdmVkID0gQXJyYXlVdGlscy5SZXBsYWNlKHRoaXMubGlzdCwgb2xkQ2hpbGQsIG5ld0NoaWxkKTtcclxuXHJcbiAgICAgICAgaWYgKG1vdmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRIYW5kbGVyKG5ld0NoaWxkKTtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVIYW5kbGVyKG9sZENoaWxkKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkZXN0cm95Q2hpbGQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG9sZENoaWxkLmRlc3Ryb3koKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGdpdmVuIEdhbWUgT2JqZWN0IGlzIGEgZGlyZWN0IGNoaWxkIG9mIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgY2hlY2sgZG9lcyBub3Qgc2NhbiBuZXN0ZWQgQ29udGFpbmVycy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjZXhpc3RzXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBjaGlsZCAtIFRoZSBHYW1lIE9iamVjdCB0byBjaGVjayBmb3Igd2l0aGluIHRoaXMgQ29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIEdhbWUgT2JqZWN0IGlzIGFuIGltbWVkaWF0ZSBjaGlsZCBvZiB0aGlzIENvbnRhaW5lciwgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBleGlzdHM6IGZ1bmN0aW9uIChjaGlsZClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMubGlzdC5pbmRleE9mKGNoaWxkKSA+IC0xKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBwcm9wZXJ0eSB0byB0aGUgZ2l2ZW4gdmFsdWUgb24gYWxsIEdhbWUgT2JqZWN0cyBpbiB0aGlzIENvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBPcHRpb25hbGx5IHlvdSBjYW4gc3BlY2lmeSBhIHN0YXJ0IGFuZCBlbmQgaW5kZXguIEZvciBleGFtcGxlIGlmIHRoaXMgQ29udGFpbmVyIGhhZCAxMDAgR2FtZSBPYmplY3RzLFxyXG4gICAgICogYW5kIHlvdSBzZXQgYHN0YXJ0SW5kZXhgIHRvIDAgYW5kIGBlbmRJbmRleGAgdG8gNTAsIGl0IHdvdWxkIHJldHVybiBtYXRjaGVzIGZyb20gb25seVxyXG4gICAgICogdGhlIGZpcnN0IDUwIEdhbWUgT2JqZWN0cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjc2V0QWxsXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkgdGhhdCBtdXN0IGV4aXN0IG9uIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7YW55fSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBnZXQgdGhlIHByb3BlcnR5IHRvLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbc3RhcnRJbmRleD0wXSAtIEFuIG9wdGlvbmFsIHN0YXJ0IGluZGV4IHRvIHNlYXJjaCBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZW5kSW5kZXg9Q29udGFpbmVyLmxlbmd0aF0gLSBBbiBvcHRpb25hbCBlbmQgaW5kZXggdG8gc2VhcmNoIHVwIHRvIChidXQgbm90IGluY2x1ZGVkKVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXJ9IFRoaXMgQ29udGFpbmVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRBbGw6IGZ1bmN0aW9uIChwcm9wZXJ0eSwgdmFsdWUsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KVxyXG4gICAge1xyXG4gICAgICAgIEFycmF5VXRpbHMuU2V0QWxsKHRoaXMubGlzdCwgcHJvcGVydHksIHZhbHVlLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBjYWxsYmFjayBFYWNoQ29udGFpbmVyQ2FsbGJhY2tcclxuICAgICAqIEBnZW5lcmljIEkgLSBbaXRlbV1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyp9IGl0ZW0gLSBUaGUgY2hpbGQgR2FtZSBPYmplY3Qgb2YgdGhlIENvbnRhaW5lci5cclxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2ssIGFmdGVyIHRoZSBjaGlsZC5cclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFzc2VzIGFsbCBHYW1lIE9iamVjdHMgaW4gdGhpcyBDb250YWluZXIgdG8gdGhlIGdpdmVuIGNhbGxiYWNrLlxyXG4gICAgICpcclxuICAgICAqIEEgY29weSBvZiB0aGUgQ29udGFpbmVyIGlzIG1hZGUgYmVmb3JlIHBhc3NpbmcgZWFjaCBlbnRyeSB0byB5b3VyIGNhbGxiYWNrLlxyXG4gICAgICogVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IHRoZSBjYWxsYmFjayBpdHNlbGYgbW9kaWZ5aW5nIHRoZSBDb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogSWYgeW91IGtub3cgZm9yIHN1cmUgdGhhdCB0aGUgY2FsbGJhY2sgd2lsbCBub3QgY2hhbmdlIHRoZSBzaXplIG9mIHRoaXMgQ29udGFpbmVyXHJcbiAgICAgKiB0aGVuIHlvdSBjYW4gdXNlIHRoZSBtb3JlIHBlcmZvcm1hbnQgYENvbnRhaW5lci5pdGVyYXRlYCBtZXRob2QgaW5zdGVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjZWFjaFxyXG4gICAgICogQHNpbmNlIDMuNC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdG8gY2FsbC5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbY29udGV4dF0gLSBWYWx1ZSB0byB1c2UgYXMgYHRoaXNgIHdoZW4gZXhlY3V0aW5nIGNhbGxiYWNrLlxyXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjaywgYWZ0ZXIgdGhlIGNoaWxkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXJ9IFRoaXMgQ29udGFpbmVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBlYWNoOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGNvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBbIG51bGwgXTtcclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICB2YXIgdGVtcCA9IHRoaXMubGlzdC5zbGljZSgpO1xyXG4gICAgICAgIHZhciBsZW4gPSB0ZW1wLmxlbmd0aDtcclxuXHJcbiAgICAgICAgZm9yIChpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYXJnc1swXSA9IHRlbXBbaV07XHJcblxyXG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseShjb250ZXh0LCBhcmdzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhc3NlcyBhbGwgR2FtZSBPYmplY3RzIGluIHRoaXMgQ29udGFpbmVyIHRvIHRoZSBnaXZlbiBjYWxsYmFjay5cclxuICAgICAqXHJcbiAgICAgKiBPbmx5IHVzZSB0aGlzIG1ldGhvZCB3aGVuIHlvdSBhYnNvbHV0ZWx5IGtub3cgdGhhdCB0aGUgQ29udGFpbmVyIHdpbGwgbm90IGJlIG1vZGlmaWVkIGR1cmluZ1xyXG4gICAgICogdGhlIGl0ZXJhdGlvbiwgaS5lLiBieSByZW1vdmluZyBvciBhZGRpbmcgdG8gaXRzIGNvbnRlbnRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNpdGVyYXRlXHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0byBjYWxsLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtjb250ZXh0XSAtIFZhbHVlIHRvIHVzZSBhcyBgdGhpc2Agd2hlbiBleGVjdXRpbmcgY2FsbGJhY2suXHJcbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLCBhZnRlciB0aGUgY2hpbGQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lcn0gVGhpcyBDb250YWluZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGl0ZXJhdGU6IGZ1bmN0aW9uIChjYWxsYmFjaywgY29udGV4dClcclxuICAgIHtcclxuICAgICAgICB2YXIgYXJncyA9IFsgbnVsbCBdO1xyXG4gICAgICAgIHZhciBpO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5saXN0Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYXJnc1swXSA9IHRoaXMubGlzdFtpXTtcclxuXHJcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgc2Nyb2xsIGZhY3RvciBvZiB0aGlzIENvbnRhaW5lciBhbmQgb3B0aW9uYWxseSBhbGwgb2YgaXRzIGNoaWxkcmVuLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBzY3JvbGwgZmFjdG9yIGNvbnRyb2xzIHRoZSBpbmZsdWVuY2Ugb2YgdGhlIG1vdmVtZW50IG9mIGEgQ2FtZXJhIHVwb24gdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBXaGVuIGEgY2FtZXJhIHNjcm9sbHMgaXQgd2lsbCBjaGFuZ2UgdGhlIGxvY2F0aW9uIGF0IHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyZWQgb24tc2NyZWVuLlxyXG4gICAgICogSXQgZG9lcyBub3QgY2hhbmdlIHRoZSBHYW1lIE9iamVjdHMgYWN0dWFsIHBvc2l0aW9uIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBBIHZhbHVlIG9mIDEgbWVhbnMgaXQgd2lsbCBtb3ZlIGV4YWN0bHkgaW4gc3luYyB3aXRoIGEgY2FtZXJhLlxyXG4gICAgICogQSB2YWx1ZSBvZiAwIG1lYW5zIGl0IHdpbGwgbm90IG1vdmUgYXQgYWxsLCBldmVuIGlmIHRoZSBjYW1lcmEgbW92ZXMuXHJcbiAgICAgKiBPdGhlciB2YWx1ZXMgY29udHJvbCB0aGUgZGVncmVlIHRvIHdoaWNoIHRoZSBjYW1lcmEgbW92ZW1lbnQgaXMgbWFwcGVkIHRvIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIFBsZWFzZSBiZSBhd2FyZSB0aGF0IHNjcm9sbCBmYWN0b3IgdmFsdWVzIG90aGVyIHRoYW4gMSBhcmUgbm90IHRha2VuIGluIHRvIGNvbnNpZGVyYXRpb24gd2hlblxyXG4gICAgICogY2FsY3VsYXRpbmcgcGh5c2ljcyBjb2xsaXNpb25zLiBCb2RpZXMgYWx3YXlzIGNvbGxpZGUgYmFzZWQgb24gdGhlaXIgd29ybGQgcG9zaXRpb24sIGJ1dCBjaGFuZ2luZ1xyXG4gICAgICogdGhlIHNjcm9sbCBmYWN0b3IgaXMgYSB2aXN1YWwgYWRqdXN0bWVudCB0byB3aGVyZSB0aGUgdGV4dHVyZXMgYXJlIHJlbmRlcmVkLCB3aGljaCBjYW4gb2Zmc2V0XHJcbiAgICAgKiB0aGVtIGZyb20gcGh5c2ljcyBib2RpZXMgaWYgbm90IGFjY291bnRlZCBmb3IgaW4geW91ciBjb2RlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNzZXRTY3JvbGxGYWN0b3JcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgc2Nyb2xsIGZhY3RvciBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PXhdIC0gVGhlIHZlcnRpY2FsIHNjcm9sbCBmYWN0b3Igb2YgdGhpcyBHYW1lIE9iamVjdC4gSWYgbm90IHNldCBpdCB3aWxsIHVzZSB0aGUgYHhgIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdXBkYXRlQ2hpbGRyZW49ZmFsc2VdIC0gQXBwbHkgdGhpcyBzY3JvbGxGYWN0b3IgdG8gYWxsIENvbnRhaW5lciBjaGlsZHJlbiBhcyB3ZWxsP1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFNjcm9sbEZhY3RvcjogZnVuY3Rpb24gKHgsIHksIHVwZGF0ZUNoaWxkcmVuKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IHg7IH1cclxuICAgICAgICBpZiAodXBkYXRlQ2hpbGRyZW4gPT09IHVuZGVmaW5lZCkgeyB1cGRhdGVDaGlsZHJlbiA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsRmFjdG9yWCA9IHg7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxGYWN0b3JZID0geTtcclxuXHJcbiAgICAgICAgaWYgKHVwZGF0ZUNoaWxkcmVuKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgQXJyYXlVdGlscy5TZXRBbGwodGhpcy5saXN0LCAnc2Nyb2xsRmFjdG9yWCcsIHgpO1xyXG4gICAgICAgICAgICBBcnJheVV0aWxzLlNldEFsbCh0aGlzLmxpc3QsICdzY3JvbGxGYWN0b3JZJywgeSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbnVtYmVyIG9mIEdhbWUgT2JqZWN0cyBpbnNpZGUgdGhpcyBDb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNsZW5ndGhcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqL1xyXG4gICAgbGVuZ3RoOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3QubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgZmlyc3QgR2FtZSBPYmplY3Qgd2l0aGluIHRoZSBDb250YWluZXIsIG9yIGBudWxsYCBpZiBpdCBpcyBlbXB0eS5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIG1vdmUgdGhlIGN1cnNvciBieSBjYWxsaW5nIGBDb250YWluZXIubmV4dGAgYW5kIGBDb250YWluZXIucHJldmlvdXNgLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXIjZmlyc3RcclxuICAgICAqIEB0eXBlIHs/UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICovXHJcbiAgICBmaXJzdDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxpc3QubGVuZ3RoID4gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdFswXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBsYXN0IEdhbWUgT2JqZWN0IHdpdGhpbiB0aGUgQ29udGFpbmVyLCBvciBgbnVsbGAgaWYgaXQgaXMgZW1wdHkuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBtb3ZlIHRoZSBjdXJzb3IgYnkgY2FsbGluZyBgQ29udGFpbmVyLm5leHRgIGFuZCBgQ29udGFpbmVyLnByZXZpb3VzYC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI2xhc3RcclxuICAgICAqIEB0eXBlIHs/UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICovXHJcbiAgICBsYXN0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxpc3QubGVuZ3RoID4gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHRoaXMubGlzdC5sZW5ndGggLSAxO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3RbdGhpcy5wb3NpdGlvbl07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgbmV4dCBHYW1lIE9iamVjdCB3aXRoaW4gdGhlIENvbnRhaW5lciwgb3IgYG51bGxgIGlmIGl0IGlzIGVtcHR5LlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gbW92ZSB0aGUgY3Vyc29yIGJ5IGNhbGxpbmcgYENvbnRhaW5lci5uZXh0YCBhbmQgYENvbnRhaW5lci5wcmV2aW91c2AuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNuZXh0XHJcbiAgICAgKiBAdHlwZSB7P1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqL1xyXG4gICAgbmV4dDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wb3NpdGlvbiA8IHRoaXMubGlzdC5sZW5ndGgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb24rKztcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5saXN0W3RoaXMucG9zaXRpb25dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHByZXZpb3VzIEdhbWUgT2JqZWN0IHdpdGhpbiB0aGUgQ29udGFpbmVyLCBvciBgbnVsbGAgaWYgaXQgaXMgZW1wdHkuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBtb3ZlIHRoZSBjdXJzb3IgYnkgY2FsbGluZyBgQ29udGFpbmVyLm5leHRgIGFuZCBgQ29udGFpbmVyLnByZXZpb3VzYC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI3ByZXZpb3VzXHJcbiAgICAgKiBAdHlwZSB7P1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAqL1xyXG4gICAgcHJldmlvdXM6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucG9zaXRpb24gPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uLS07XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdFt0aGlzLnBvc2l0aW9uXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBkZXN0cm95IGhhbmRsZXIsIGNhbGxlZCBhcyBwYXJ0IG9mIHRoZSBkZXN0cm95IHByb2Nlc3MuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI3ByZURlc3Ryb3lcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjkuMFxyXG4gICAgICovXHJcbiAgICBwcmVEZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQWxsKCEhdGhpcy5leGNsdXNpdmUpO1xyXG5cclxuICAgICAgICB0aGlzLmxvY2FsVHJhbnNmb3JtLmRlc3Ryb3koKTtcclxuICAgICAgICB0aGlzLnRlbXBUcmFuc2Zvcm1NYXRyaXguZGVzdHJveSgpO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLl9kaXNwbGF5TGlzdCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ29udGFpbmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/container/Container.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/container/ContainerCanvasRenderer.js":
/*!**********************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/container/ContainerCanvasRenderer.js ***!
\**********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @author Felipe Alfonso <@bitnenfer>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Container#renderCanvas\r\n * @since 3.4.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Container} container - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar ContainerCanvasRenderer = function (renderer, container, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var children = container.list;\r\n\r\n if (children.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n var transformMatrix = container.localTransform;\r\n \r\n if (parentMatrix)\r\n {\r\n transformMatrix.loadIdentity();\r\n transformMatrix.multiply(parentMatrix);\r\n transformMatrix.translate(container.x, container.y);\r\n transformMatrix.rotate(container.rotation);\r\n transformMatrix.scale(container.scaleX, container.scaleY);\r\n }\r\n else\r\n {\r\n transformMatrix.applyITRS(container.x, container.y, container.rotation, container.scaleX, container.scaleY);\r\n }\r\n\r\n var containerHasBlendMode = (container.blendMode !== -1);\r\n\r\n if (!containerHasBlendMode)\r\n {\r\n // If Container is SKIP_TEST then set blend mode to be Normal\r\n renderer.setBlendMode(0);\r\n }\r\n\r\n var alpha = container._alpha;\r\n var scrollFactorX = container.scrollFactorX;\r\n var scrollFactorY = container.scrollFactorY;\r\n\r\n for (var i = 0; i < children.length; i++)\r\n {\r\n var child = children[i];\r\n\r\n if (!child.willRender(camera))\r\n {\r\n continue;\r\n }\r\n\r\n var childAlpha = child.alpha;\r\n var childScrollFactorX = child.scrollFactorX;\r\n var childScrollFactorY = child.scrollFactorY;\r\n\r\n if (!containerHasBlendMode && child.blendMode !== renderer.currentBlendMode)\r\n {\r\n // If Container doesn't have its own blend mode, then a child can have one\r\n renderer.setBlendMode(child.blendMode);\r\n }\r\n\r\n // Set parent values\r\n child.setScrollFactor(childScrollFactorX * scrollFactorX, childScrollFactorY * scrollFactorY);\r\n child.setAlpha(childAlpha * alpha);\r\n\r\n // Render\r\n child.renderCanvas(renderer, child, interpolationPercentage, camera, transformMatrix);\r\n\r\n // Restore original values\r\n child.setAlpha(childAlpha);\r\n child.setScrollFactor(childScrollFactorX, childScrollFactorY);\r\n }\r\n};\r\n\r\nmodule.exports = ContainerCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb250YWluZXIvQ29udGFpbmVyQ2FudmFzUmVuZGVyZXIuanM/MDBiYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNDQUFzQztBQUNqRCxXQUFXLDZCQUE2QjtBQUN4QyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixxQkFBcUI7QUFDeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvY29udGFpbmVyL0NvbnRhaW5lckNhbnZhc1JlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBhdXRob3IgICAgICAgRmVsaXBlIEFsZm9uc28gPEBiaXRuZW5mZXI+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIENhbnZhcyBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkNvbnRhaW5lciNyZW5kZXJDYW52YXNcclxuICogQHNpbmNlIDMuNC4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgQ2FudmFzIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXJ9IGNvbnRhaW5lciAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBDb250YWluZXJDYW52YXNSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgY29udGFpbmVyLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHZhciBjaGlsZHJlbiA9IGNvbnRhaW5lci5saXN0O1xyXG5cclxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciB0cmFuc2Zvcm1NYXRyaXggPSBjb250YWluZXIubG9jYWxUcmFuc2Zvcm07XHJcbiAgICBcclxuICAgIGlmIChwYXJlbnRNYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgdHJhbnNmb3JtTWF0cml4LmxvYWRJZGVudGl0eSgpO1xyXG4gICAgICAgIHRyYW5zZm9ybU1hdHJpeC5tdWx0aXBseShwYXJlbnRNYXRyaXgpO1xyXG4gICAgICAgIHRyYW5zZm9ybU1hdHJpeC50cmFuc2xhdGUoY29udGFpbmVyLngsIGNvbnRhaW5lci55KTtcclxuICAgICAgICB0cmFuc2Zvcm1NYXRyaXgucm90YXRlKGNvbnRhaW5lci5yb3RhdGlvbik7XHJcbiAgICAgICAgdHJhbnNmb3JtTWF0cml4LnNjYWxlKGNvbnRhaW5lci5zY2FsZVgsIGNvbnRhaW5lci5zY2FsZVkpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHRyYW5zZm9ybU1hdHJpeC5hcHBseUlUUlMoY29udGFpbmVyLngsIGNvbnRhaW5lci55LCBjb250YWluZXIucm90YXRpb24sIGNvbnRhaW5lci5zY2FsZVgsIGNvbnRhaW5lci5zY2FsZVkpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjb250YWluZXJIYXNCbGVuZE1vZGUgPSAoY29udGFpbmVyLmJsZW5kTW9kZSAhPT0gLTEpO1xyXG5cclxuICAgIGlmICghY29udGFpbmVySGFzQmxlbmRNb2RlKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBJZiBDb250YWluZXIgaXMgU0tJUF9URVNUIHRoZW4gc2V0IGJsZW5kIG1vZGUgdG8gYmUgTm9ybWFsXHJcbiAgICAgICAgcmVuZGVyZXIuc2V0QmxlbmRNb2RlKDApO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBhbHBoYSA9IGNvbnRhaW5lci5fYWxwaGE7XHJcbiAgICB2YXIgc2Nyb2xsRmFjdG9yWCA9IGNvbnRhaW5lci5zY3JvbGxGYWN0b3JYO1xyXG4gICAgdmFyIHNjcm9sbEZhY3RvclkgPSBjb250YWluZXIuc2Nyb2xsRmFjdG9yWTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xyXG5cclxuICAgICAgICBpZiAoIWNoaWxkLndpbGxSZW5kZXIoY2FtZXJhKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNoaWxkQWxwaGEgPSBjaGlsZC5hbHBoYTtcclxuICAgICAgICB2YXIgY2hpbGRTY3JvbGxGYWN0b3JYID0gY2hpbGQuc2Nyb2xsRmFjdG9yWDtcclxuICAgICAgICB2YXIgY2hpbGRTY3JvbGxGYWN0b3JZID0gY2hpbGQuc2Nyb2xsRmFjdG9yWTtcclxuXHJcbiAgICAgICAgaWYgKCFjb250YWluZXJIYXNCbGVuZE1vZGUgJiYgY2hpbGQuYmxlbmRNb2RlICE9PSByZW5kZXJlci5jdXJyZW50QmxlbmRNb2RlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIElmIENvbnRhaW5lciBkb2Vzbid0IGhhdmUgaXRzIG93biBibGVuZCBtb2RlLCB0aGVuIGEgY2hpbGQgY2FuIGhhdmUgb25lXHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldEJsZW5kTW9kZShjaGlsZC5ibGVuZE1vZGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFNldCBwYXJlbnQgdmFsdWVzXHJcbiAgICAgICAgY2hpbGQuc2V0U2Nyb2xsRmFjdG9yKGNoaWxkU2Nyb2xsRmFjdG9yWCAqIHNjcm9sbEZhY3RvclgsIGNoaWxkU2Nyb2xsRmFjdG9yWSAqIHNjcm9sbEZhY3RvclkpO1xyXG4gICAgICAgIGNoaWxkLnNldEFscGhhKGNoaWxkQWxwaGEgKiBhbHBoYSk7XHJcblxyXG4gICAgICAgIC8vICBSZW5kZXJcclxuICAgICAgICBjaGlsZC5yZW5kZXJDYW52YXMocmVuZGVyZXIsIGNoaWxkLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCB0cmFuc2Zvcm1NYXRyaXgpO1xyXG5cclxuICAgICAgICAvLyAgUmVzdG9yZSBvcmlnaW5hbCB2YWx1ZXNcclxuICAgICAgICBjaGlsZC5zZXRBbHBoYShjaGlsZEFscGhhKTtcclxuICAgICAgICBjaGlsZC5zZXRTY3JvbGxGYWN0b3IoY2hpbGRTY3JvbGxGYWN0b3JYLCBjaGlsZFNjcm9sbEZhY3RvclkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb250YWluZXJDYW52YXNSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/container/ContainerCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/container/ContainerCreator.js":
/*!***************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/container/ContainerCreator.js ***!
\***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @author Felipe Alfonso <@bitnenfer>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BuildGameObject = __webpack_require__(/*! ../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar Container = __webpack_require__(/*! ./Container */ \"./node_modules/phaser/src/gameobjects/container/Container.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\n\r\n/**\r\n * Creates a new Container Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Container Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#container\r\n * @since 3.4.0\r\n *\r\n * @param {object} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.Container} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('container', function (config, addToScene)\r\n{\r\n if (config === undefined) { config = {}; }\r\n\r\n var x = GetAdvancedValue(config, 'x', 0);\r\n var y = GetAdvancedValue(config, 'y', 0);\r\n\r\n var container = new Container(this.scene, x, y);\r\n\r\n if (addToScene !== undefined)\r\n {\r\n config.add = addToScene;\r\n }\r\n\r\n BuildGameObject(this.scene, container, config);\r\n \r\n return container;\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb250YWluZXIvQ29udGFpbmVyQ3JlYXRvci5qcz9kMTI2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHNCQUFzQixtQkFBTyxDQUFDLG9GQUFvQjtBQUNsRCxnQkFBZ0IsbUJBQU8sQ0FBQyxpRkFBYTtBQUNyQyx3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7QUFDdEQsdUJBQXVCLG1CQUFPLENBQUMsdUdBQXFDOztBQUVwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksNkJBQTZCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixhQUFhOztBQUU1QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2NvbnRhaW5lci9Db250YWluZXJDcmVhdG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBhdXRob3IgICAgICAgRmVsaXBlIEFsZm9uc28gPEBiaXRuZW5mZXI+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQnVpbGRHYW1lT2JqZWN0ID0gcmVxdWlyZSgnLi4vQnVpbGRHYW1lT2JqZWN0Jyk7XHJcbnZhciBDb250YWluZXIgPSByZXF1aXJlKCcuL0NvbnRhaW5lcicpO1xyXG52YXIgR2FtZU9iamVjdENyZWF0b3IgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Q3JlYXRvcicpO1xyXG52YXIgR2V0QWR2YW5jZWRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRBZHZhbmNlZFZhbHVlJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBDb250YWluZXIgR2FtZSBPYmplY3QgYW5kIHJldHVybnMgaXQuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIENvbnRhaW5lciBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdENyZWF0b3IjY29udGFpbmVyXHJcbiAqIEBzaW5jZSAzLjQuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gY3JlYXRlIGl0c2VsZi5cclxuICogQHBhcmFtIHtib29sZWFufSBbYWRkVG9TY2VuZV0gLSBBZGQgdGhpcyBHYW1lIE9iamVjdCB0byB0aGUgU2NlbmUgYWZ0ZXIgY3JlYXRpbmcgaXQ/IElmIHNldCB0aGlzIGFyZ3VtZW50IG92ZXJyaWRlcyB0aGUgYGFkZGAgcHJvcGVydHkgaW4gdGhlIGNvbmZpZyBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXJ9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdENyZWF0b3IucmVnaXN0ZXIoJ2NvbnRhaW5lcicsIGZ1bmN0aW9uIChjb25maWcsIGFkZFRvU2NlbmUpXHJcbntcclxuICAgIGlmIChjb25maWcgPT09IHVuZGVmaW5lZCkgeyBjb25maWcgPSB7fTsgfVxyXG5cclxuICAgIHZhciB4ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICd4JywgMCk7XHJcbiAgICB2YXIgeSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAneScsIDApO1xyXG5cclxuICAgIHZhciBjb250YWluZXIgPSBuZXcgQ29udGFpbmVyKHRoaXMuc2NlbmUsIHgsIHkpO1xyXG5cclxuICAgIGlmIChhZGRUb1NjZW5lICE9PSB1bmRlZmluZWQpXHJcbiAgICB7XHJcbiAgICAgICAgY29uZmlnLmFkZCA9IGFkZFRvU2NlbmU7XHJcbiAgICB9XHJcblxyXG4gICAgQnVpbGRHYW1lT2JqZWN0KHRoaXMuc2NlbmUsIGNvbnRhaW5lciwgY29uZmlnKTtcclxuICAgIFxyXG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcclxufSk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/container/ContainerCreator.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/container/ContainerFactory.js":
/*!***************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/container/ContainerFactory.js ***!
\***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @author Felipe Alfonso <@bitnenfer>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Container = __webpack_require__(/*! ./Container */ \"./node_modules/phaser/src/gameobjects/container/Container.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Container Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Container Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#container\r\n * @since 3.4.0\r\n *\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[]} [children] - An optional array of Game Objects to add to this Container.\r\n *\r\n * @return {Phaser.GameObjects.Container} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('container', function (x, y, children)\r\n{\r\n return this.displayList.add(new Container(this.scene, x, y, children));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb250YWluZXIvQ29udGFpbmVyRmFjdG9yeS5qcz9lZGYyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLGlGQUFhO0FBQ3JDLHdCQUF3QixtQkFBTyxDQUFDLHdGQUFzQjs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyw4REFBOEQ7QUFDekU7QUFDQSxZQUFZLDZCQUE2QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb250YWluZXIvQ29udGFpbmVyRmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAYXV0aG9yICAgICAgIEZlbGlwZSBBbGZvbnNvIDxAYml0bmVuZmVyPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4vQ29udGFpbmVyJyk7XHJcbnZhciBHYW1lT2JqZWN0RmFjdG9yeSA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3RGYWN0b3J5Jyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBDb250YWluZXIgR2FtZSBPYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIFNjZW5lLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBDb250YWluZXIgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I2NvbnRhaW5lclxyXG4gKiBAc2luY2UgMy40LjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gW2NoaWxkcmVuXSAtIEFuIG9wdGlvbmFsIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0byBhZGQgdG8gdGhpcyBDb250YWluZXIuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Db250YWluZXJ9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdEZhY3RvcnkucmVnaXN0ZXIoJ2NvbnRhaW5lcicsIGZ1bmN0aW9uICh4LCB5LCBjaGlsZHJlbilcclxue1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheUxpc3QuYWRkKG5ldyBDb250YWluZXIodGhpcy5zY2VuZSwgeCwgeSwgY2hpbGRyZW4pKTtcclxufSk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/container/ContainerFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/container/ContainerRender.js":
/*!**************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/container/ContainerRender.js ***!
\**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @author Felipe Alfonso <@bitnenfer>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./ContainerWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/container/ContainerWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./ContainerCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/container/ContainerCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb250YWluZXIvQ29udGFpbmVyUmVuZGVyLmpzP2I4MGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsaUVBQWtCO0FBQzVDLG1CQUFtQixtQkFBTyxDQUFDLGlFQUFrQjs7QUFFN0MsSUFBSSxJQUFxQjtBQUN6QjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLDJHQUEwQjtBQUNwRDs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsNkdBQTJCO0FBQ3REOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb250YWluZXIvQ29udGFpbmVyUmVuZGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBhdXRob3IgICAgICAgRmVsaXBlIEFsZm9uc28gPEBiaXRuZW5mZXI+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuLi8uLi91dGlscy9OT09QJyk7XHJcbnZhciByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9OT09QJyk7XHJcblxyXG5pZiAodHlwZW9mIFdFQkdMX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4vQ29udGFpbmVyV2ViR0xSZW5kZXJlcicpO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIENBTlZBU19SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi9Db250YWluZXJDYW52YXNSZW5kZXJlcicpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICByZW5kZXJXZWJHTDogcmVuZGVyV2ViR0wsXHJcbiAgICByZW5kZXJDYW52YXM6IHJlbmRlckNhbnZhc1xyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/container/ContainerRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/container/ContainerWebGLRenderer.js":
/*!*********************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/container/ContainerWebGLRenderer.js ***!
\*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @author Felipe Alfonso <@bitnenfer>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Container#renderWebGL\r\n * @since 3.4.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Container} container - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar ContainerWebGLRenderer = function (renderer, container, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var children = container.list;\r\n\r\n if (children.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n var transformMatrix = container.localTransform;\r\n \r\n if (parentMatrix)\r\n {\r\n transformMatrix.loadIdentity();\r\n transformMatrix.multiply(parentMatrix);\r\n transformMatrix.translate(container.x, container.y);\r\n transformMatrix.rotate(container.rotation);\r\n transformMatrix.scale(container.scaleX, container.scaleY);\r\n }\r\n else\r\n {\r\n transformMatrix.applyITRS(container.x, container.y, container.rotation, container.scaleX, container.scaleY);\r\n }\r\n\r\n var containerHasBlendMode = (container.blendMode !== -1);\r\n\r\n if (!containerHasBlendMode)\r\n {\r\n // If Container is SKIP_TEST then set blend mode to be Normal\r\n renderer.setBlendMode(0);\r\n }\r\n\r\n var alphaTopLeft = container.alphaTopLeft;\r\n var alphaTopRight = container.alphaTopRight;\r\n var alphaBottomLeft = container.alphaBottomLeft;\r\n var alphaBottomRight = container.alphaBottomRight;\r\n\r\n var scrollFactorX = container.scrollFactorX;\r\n var scrollFactorY = container.scrollFactorY;\r\n\r\n var list = children;\r\n var childCount = children.length;\r\n\r\n for (var i = 0; i < childCount; i++)\r\n {\r\n var child = children[i];\r\n\r\n if (!child.willRender(camera))\r\n {\r\n continue;\r\n }\r\n\r\n var childAlphaTopLeft;\r\n var childAlphaTopRight;\r\n var childAlphaBottomLeft;\r\n var childAlphaBottomRight;\r\n\r\n if (child.alphaTopLeft !== undefined)\r\n {\r\n childAlphaTopLeft = child.alphaTopLeft;\r\n childAlphaTopRight = child.alphaTopRight;\r\n childAlphaBottomLeft = child.alphaBottomLeft;\r\n childAlphaBottomRight = child.alphaBottomRight;\r\n }\r\n else\r\n {\r\n var childAlpha = child.alpha;\r\n\r\n childAlphaTopLeft = childAlpha;\r\n childAlphaTopRight = childAlpha;\r\n childAlphaBottomLeft = childAlpha;\r\n childAlphaBottomRight = childAlpha;\r\n }\r\n\r\n var childScrollFactorX = child.scrollFactorX;\r\n var childScrollFactorY = child.scrollFactorY;\r\n\r\n if (!containerHasBlendMode && child.blendMode !== renderer.currentBlendMode)\r\n {\r\n // If Container doesn't have its own blend mode, then a child can have one\r\n renderer.setBlendMode(child.blendMode);\r\n }\r\n\r\n var mask = child.mask;\r\n\r\n if (mask)\r\n {\r\n mask.preRenderWebGL(renderer, child, camera);\r\n }\r\n\r\n var type = child.type;\r\n\r\n if (type !== renderer.currentType)\r\n {\r\n renderer.newType = true;\r\n renderer.currentType = type;\r\n }\r\n\r\n renderer.nextTypeMatch = (i < childCount - 1) ? (list[i + 1].type === renderer.currentType) : false;\r\n\r\n // Set parent values\r\n child.setScrollFactor(childScrollFactorX * scrollFactorX, childScrollFactorY * scrollFactorY);\r\n\r\n child.setAlpha(childAlphaTopLeft * alphaTopLeft, childAlphaTopRight * alphaTopRight, childAlphaBottomLeft * alphaBottomLeft, childAlphaBottomRight * alphaBottomRight);\r\n\r\n // Render\r\n child.renderWebGL(renderer, child, interpolationPercentage, camera, transformMatrix);\r\n\r\n // Restore original values\r\n\r\n child.setAlpha(childAlphaTopLeft, childAlphaTopRight, childAlphaBottomLeft, childAlphaBottomRight);\r\n\r\n child.setScrollFactor(childScrollFactorX, childScrollFactorY);\r\n\r\n if (mask)\r\n {\r\n mask.postRenderWebGL(renderer, camera);\r\n }\r\n\r\n renderer.newType = false;\r\n }\r\n};\r\n\r\nmodule.exports = ContainerWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9jb250YWluZXIvQ29udGFpbmVyV2ViR0xSZW5kZXJlci5qcz81ODU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsNkJBQTZCO0FBQ3hDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLGdCQUFnQjtBQUNuQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2NvbnRhaW5lci9Db250YWluZXJXZWJHTFJlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBhdXRob3IgICAgICAgRmVsaXBlIEFsZm9uc28gPEBiaXRuZW5mZXI+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIFdlYkdMIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyI3JlbmRlcldlYkdMXHJcbiAqIEBzaW5jZSAzLjQuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBXZWJHTCByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29udGFpbmVyfSBjb250YWluZXIgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgQ29udGFpbmVyV2ViR0xSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgY29udGFpbmVyLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHZhciBjaGlsZHJlbiA9IGNvbnRhaW5lci5saXN0O1xyXG5cclxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciB0cmFuc2Zvcm1NYXRyaXggPSBjb250YWluZXIubG9jYWxUcmFuc2Zvcm07XHJcbiAgICBcclxuICAgIGlmIChwYXJlbnRNYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgdHJhbnNmb3JtTWF0cml4LmxvYWRJZGVudGl0eSgpO1xyXG4gICAgICAgIHRyYW5zZm9ybU1hdHJpeC5tdWx0aXBseShwYXJlbnRNYXRyaXgpO1xyXG4gICAgICAgIHRyYW5zZm9ybU1hdHJpeC50cmFuc2xhdGUoY29udGFpbmVyLngsIGNvbnRhaW5lci55KTtcclxuICAgICAgICB0cmFuc2Zvcm1NYXRyaXgucm90YXRlKGNvbnRhaW5lci5yb3RhdGlvbik7XHJcbiAgICAgICAgdHJhbnNmb3JtTWF0cml4LnNjYWxlKGNvbnRhaW5lci5zY2FsZVgsIGNvbnRhaW5lci5zY2FsZVkpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHRyYW5zZm9ybU1hdHJpeC5hcHBseUlUUlMoY29udGFpbmVyLngsIGNvbnRhaW5lci55LCBjb250YWluZXIucm90YXRpb24sIGNvbnRhaW5lci5zY2FsZVgsIGNvbnRhaW5lci5zY2FsZVkpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjb250YWluZXJIYXNCbGVuZE1vZGUgPSAoY29udGFpbmVyLmJsZW5kTW9kZSAhPT0gLTEpO1xyXG5cclxuICAgIGlmICghY29udGFpbmVySGFzQmxlbmRNb2RlKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBJZiBDb250YWluZXIgaXMgU0tJUF9URVNUIHRoZW4gc2V0IGJsZW5kIG1vZGUgdG8gYmUgTm9ybWFsXHJcbiAgICAgICAgcmVuZGVyZXIuc2V0QmxlbmRNb2RlKDApO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBhbHBoYVRvcExlZnQgPSBjb250YWluZXIuYWxwaGFUb3BMZWZ0O1xyXG4gICAgdmFyIGFscGhhVG9wUmlnaHQgPSBjb250YWluZXIuYWxwaGFUb3BSaWdodDtcclxuICAgIHZhciBhbHBoYUJvdHRvbUxlZnQgPSBjb250YWluZXIuYWxwaGFCb3R0b21MZWZ0O1xyXG4gICAgdmFyIGFscGhhQm90dG9tUmlnaHQgPSBjb250YWluZXIuYWxwaGFCb3R0b21SaWdodDtcclxuXHJcbiAgICB2YXIgc2Nyb2xsRmFjdG9yWCA9IGNvbnRhaW5lci5zY3JvbGxGYWN0b3JYO1xyXG4gICAgdmFyIHNjcm9sbEZhY3RvclkgPSBjb250YWluZXIuc2Nyb2xsRmFjdG9yWTtcclxuXHJcbiAgICB2YXIgbGlzdCA9IGNoaWxkcmVuO1xyXG4gICAgdmFyIGNoaWxkQ291bnQgPSBjaGlsZHJlbi5sZW5ndGg7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZENvdW50OyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07XHJcblxyXG4gICAgICAgIGlmICghY2hpbGQud2lsbFJlbmRlcihjYW1lcmEpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY2hpbGRBbHBoYVRvcExlZnQ7XHJcbiAgICAgICAgdmFyIGNoaWxkQWxwaGFUb3BSaWdodDtcclxuICAgICAgICB2YXIgY2hpbGRBbHBoYUJvdHRvbUxlZnQ7XHJcbiAgICAgICAgdmFyIGNoaWxkQWxwaGFCb3R0b21SaWdodDtcclxuXHJcbiAgICAgICAgaWYgKGNoaWxkLmFscGhhVG9wTGVmdCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2hpbGRBbHBoYVRvcExlZnQgPSBjaGlsZC5hbHBoYVRvcExlZnQ7XHJcbiAgICAgICAgICAgIGNoaWxkQWxwaGFUb3BSaWdodCA9IGNoaWxkLmFscGhhVG9wUmlnaHQ7XHJcbiAgICAgICAgICAgIGNoaWxkQWxwaGFCb3R0b21MZWZ0ID0gY2hpbGQuYWxwaGFCb3R0b21MZWZ0O1xyXG4gICAgICAgICAgICBjaGlsZEFscGhhQm90dG9tUmlnaHQgPSBjaGlsZC5hbHBoYUJvdHRvbVJpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGRBbHBoYSA9IGNoaWxkLmFscGhhO1xyXG5cclxuICAgICAgICAgICAgY2hpbGRBbHBoYVRvcExlZnQgPSBjaGlsZEFscGhhO1xyXG4gICAgICAgICAgICBjaGlsZEFscGhhVG9wUmlnaHQgPSBjaGlsZEFscGhhO1xyXG4gICAgICAgICAgICBjaGlsZEFscGhhQm90dG9tTGVmdCA9IGNoaWxkQWxwaGE7XHJcbiAgICAgICAgICAgIGNoaWxkQWxwaGFCb3R0b21SaWdodCA9IGNoaWxkQWxwaGE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY2hpbGRTY3JvbGxGYWN0b3JYID0gY2hpbGQuc2Nyb2xsRmFjdG9yWDtcclxuICAgICAgICB2YXIgY2hpbGRTY3JvbGxGYWN0b3JZID0gY2hpbGQuc2Nyb2xsRmFjdG9yWTtcclxuXHJcbiAgICAgICAgaWYgKCFjb250YWluZXJIYXNCbGVuZE1vZGUgJiYgY2hpbGQuYmxlbmRNb2RlICE9PSByZW5kZXJlci5jdXJyZW50QmxlbmRNb2RlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIElmIENvbnRhaW5lciBkb2Vzbid0IGhhdmUgaXRzIG93biBibGVuZCBtb2RlLCB0aGVuIGEgY2hpbGQgY2FuIGhhdmUgb25lXHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldEJsZW5kTW9kZShjaGlsZC5ibGVuZE1vZGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG1hc2sgPSBjaGlsZC5tYXNrO1xyXG5cclxuICAgICAgICBpZiAobWFzaylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG1hc2sucHJlUmVuZGVyV2ViR0wocmVuZGVyZXIsIGNoaWxkLCBjYW1lcmEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHR5cGUgPSBjaGlsZC50eXBlO1xyXG5cclxuICAgICAgICBpZiAodHlwZSAhPT0gcmVuZGVyZXIuY3VycmVudFR5cGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZW5kZXJlci5uZXdUeXBlID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVuZGVyZXIuY3VycmVudFR5cGUgPSB0eXBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVuZGVyZXIubmV4dFR5cGVNYXRjaCA9IChpIDwgY2hpbGRDb3VudCAtIDEpID8gKGxpc3RbaSArIDFdLnR5cGUgPT09IHJlbmRlcmVyLmN1cnJlbnRUeXBlKSA6IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyAgU2V0IHBhcmVudCB2YWx1ZXNcclxuICAgICAgICBjaGlsZC5zZXRTY3JvbGxGYWN0b3IoY2hpbGRTY3JvbGxGYWN0b3JYICogc2Nyb2xsRmFjdG9yWCwgY2hpbGRTY3JvbGxGYWN0b3JZICogc2Nyb2xsRmFjdG9yWSk7XHJcblxyXG4gICAgICAgIGNoaWxkLnNldEFscGhhKGNoaWxkQWxwaGFUb3BMZWZ0ICogYWxwaGFUb3BMZWZ0LCBjaGlsZEFscGhhVG9wUmlnaHQgKiBhbHBoYVRvcFJpZ2h0LCBjaGlsZEFscGhhQm90dG9tTGVmdCAqIGFscGhhQm90dG9tTGVmdCwgY2hpbGRBbHBoYUJvdHRvbVJpZ2h0ICogYWxwaGFCb3R0b21SaWdodCk7XHJcblxyXG4gICAgICAgIC8vICBSZW5kZXJcclxuICAgICAgICBjaGlsZC5yZW5kZXJXZWJHTChyZW5kZXJlciwgY2hpbGQsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHRyYW5zZm9ybU1hdHJpeCk7XHJcblxyXG4gICAgICAgIC8vICBSZXN0b3JlIG9yaWdpbmFsIHZhbHVlc1xyXG5cclxuICAgICAgICBjaGlsZC5zZXRBbHBoYShjaGlsZEFscGhhVG9wTGVmdCwgY2hpbGRBbHBoYVRvcFJpZ2h0LCBjaGlsZEFscGhhQm90dG9tTGVmdCwgY2hpbGRBbHBoYUJvdHRvbVJpZ2h0KTtcclxuXHJcbiAgICAgICAgY2hpbGQuc2V0U2Nyb2xsRmFjdG9yKGNoaWxkU2Nyb2xsRmFjdG9yWCwgY2hpbGRTY3JvbGxGYWN0b3JZKTtcclxuXHJcbiAgICAgICAgaWYgKG1hc2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBtYXNrLnBvc3RSZW5kZXJXZWJHTChyZW5kZXJlciwgY2FtZXJhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlbmRlcmVyLm5ld1R5cGUgPSBmYWxzZTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ29udGFpbmVyV2ViR0xSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/container/ContainerWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/domelement/CSSBlendModes.js":
/*!*************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/domelement/CSSBlendModes.js ***!
\*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Phaser Blend Modes to CSS Blend Modes Map.\r\n * \r\n * @name Phaser.CSSBlendModes\r\n * @enum {string}\r\n * @memberof Phaser\r\n * @readonly\r\n * @since 3.12.0\r\n */\r\n\r\nmodule.exports = [\r\n 'normal',\r\n 'multiply',\r\n 'multiply',\r\n 'screen',\r\n 'overlay',\r\n 'darken',\r\n 'lighten',\r\n 'color-dodge',\r\n 'color-burn',\r\n 'hard-light',\r\n 'soft-light',\r\n 'difference',\r\n 'exclusion',\r\n 'hue',\r\n 'saturation',\r\n 'color',\r\n 'luminosity'\r\n];\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9kb21lbGVtZW50L0NTU0JsZW5kTW9kZXMuanM/ZWMzMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9kb21lbGVtZW50L0NTU0JsZW5kTW9kZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBQaGFzZXIgQmxlbmQgTW9kZXMgdG8gQ1NTIEJsZW5kIE1vZGVzIE1hcC5cclxuICogXHJcbiAqIEBuYW1lIFBoYXNlci5DU1NCbGVuZE1vZGVzXHJcbiAqIEBlbnVtIHtzdHJpbmd9XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXJcclxuICogQHJlYWRvbmx5XHJcbiAqIEBzaW5jZSAzLjEyLjBcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFtcclxuICAgICdub3JtYWwnLFxyXG4gICAgJ211bHRpcGx5JyxcclxuICAgICdtdWx0aXBseScsXHJcbiAgICAnc2NyZWVuJyxcclxuICAgICdvdmVybGF5JyxcclxuICAgICdkYXJrZW4nLFxyXG4gICAgJ2xpZ2h0ZW4nLFxyXG4gICAgJ2NvbG9yLWRvZGdlJyxcclxuICAgICdjb2xvci1idXJuJyxcclxuICAgICdoYXJkLWxpZ2h0JyxcclxuICAgICdzb2Z0LWxpZ2h0JyxcclxuICAgICdkaWZmZXJlbmNlJyxcclxuICAgICdleGNsdXNpb24nLFxyXG4gICAgJ2h1ZScsXHJcbiAgICAnc2F0dXJhdGlvbicsXHJcbiAgICAnY29sb3InLFxyXG4gICAgJ2x1bWlub3NpdHknXHJcbl07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/domelement/CSSBlendModes.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/domelement/DOMElement.js":
/*!**********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/domelement/DOMElement.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar DOMElementRender = __webpack_require__(/*! ./DOMElementRender */ \"./node_modules/phaser/src/gameobjects/domelement/DOMElementRender.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\nvar RemoveFromDOM = __webpack_require__(/*! ../../dom/RemoveFromDOM */ \"./node_modules/phaser/src/dom/RemoveFromDOM.js\");\r\nvar Vector4 = __webpack_require__(/*! ../../math/Vector4 */ \"./node_modules/phaser/src/math/Vector4.js\");\r\n\r\n/**\r\n * @classdesc\r\n * DOM Element Game Objects are a way to control and manipulate HTML Elements over the top of your game.\r\n * \r\n * In order for DOM Elements to display you have to enable them by adding the following to your game\r\n * configuration object:\r\n * \r\n * ```javascript\r\n * dom {\r\n * createContainer: true\r\n * }\r\n * ```\r\n * \r\n * When this is added, Phaser will automatically create a DOM Container div that is positioned over the top\r\n * of the game canvas. This div is sized to match the canvas, and if the canvas size changes, as a result of\r\n * settings within the Scale Manager, the dom container is resized accordingly.\r\n * \r\n * You can create a DOM Element by either passing in DOMStrings, or by passing in a reference to an existing\r\n * Element that you wish to be placed under the control of Phaser. For example:\r\n * \r\n * ```javascript\r\n * this.add.dom(x, y, 'div', 'background-color: lime; width: 220px; height: 100px; font: 48px Arial', 'Phaser');\r\n * ```\r\n * \r\n * The above code will insert a div element into the DOM Container at the given x/y coordinate. The DOMString in\r\n * the 4th argument sets the initial CSS style of the div and the final argument is the inner text. In this case,\r\n * it will create a lime colored div that is 220px by 100px in size with the text Phaser in it, in an Arial font.\r\n * \r\n * You should nearly always, without exception, use explicitly sized HTML Elements, in order to fully control\r\n * alignment and positioning of the elements next to regular game content.\r\n * \r\n * Rather than specify the CSS and HTML directly you can use the `load.html` File Loader to load it into the\r\n * cache and then use the `createFromCache` method instead. You can also use `createFromHTML` and various other\r\n * methods available in this class to help construct your elements.\r\n * \r\n * Once the element has been created you can then control it like you would any other Game Object. You can set its\r\n * position, scale, rotation, alpha and other properties. It will move as the main Scene Camera moves and be clipped\r\n * at the edge of the canvas. It's important to remember some limitations of DOM Elements: The obvious one is that\r\n * they appear above or below your game canvas. You cannot blend them into the display list, meaning you cannot have\r\n * a DOM Element, then a Sprite, then another DOM Element behind it.\r\n * \r\n * They also cannot be enabled for input. To do that, you have to use the `addListener` method to add native event\r\n * listeners directly. The final limitation is to do with cameras. The DOM Container is sized to match the game canvas\r\n * entirely and clipped accordingly. DOM Elements respect camera scrolling and scrollFactor settings, but if you\r\n * change the size of the camera so it no longer matches the size of the canvas, they won't be clipped accordingly.\r\n * \r\n * Also, all DOM Elements are inserted into the same DOM Container, regardless of which Scene they are created in.\r\n * \r\n * DOM Elements are a powerful way to align native HTML with your Phaser Game Objects. For example, you can insert\r\n * a login form for a multiplayer game directly into your title screen. Or a text input box for a highscore table.\r\n * Or a banner ad from a 3rd party service. Or perhaps you'd like to use them for high resolution text display and\r\n * UI. The choice is up to you, just remember that you're dealing with standard HTML and CSS floating over the top\r\n * of your game, and should treat it accordingly.\r\n *\r\n * @class DOMElement\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.17.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this DOM Element in the world.\r\n * @param {number} [y=0] - The vertical position of this DOM Element in the world.\r\n * @param {(Element|string)} [element] - An existing DOM element, or a string. If a string starting with a # it will do a `getElementById` look-up on the string (minus the hash). Without a hash, it represents the type of element to create, i.e. 'div'.\r\n * @param {(string|any)} [style] - If a string, will be set directly as the elements `style` property value. If a plain object, will be iterated and the values transferred. In both cases the values replacing whatever CSS styles may have been previously set.\r\n * @param {string} [innerText] - If given, will be set directly as the elements `innerText` property value, replacing whatever was there before.\r\n */\r\nvar DOMElement = new Class({\r\n\r\n Extends: GameObject,\r\n\r\n Mixins: [\r\n Components.Alpha,\r\n Components.BlendMode,\r\n Components.Depth,\r\n Components.Origin,\r\n Components.ScrollFactor,\r\n Components.Transform,\r\n Components.Visible,\r\n DOMElementRender\r\n ],\r\n\r\n initialize:\r\n\r\n function DOMElement (scene, x, y, element, style, innerText)\r\n {\r\n GameObject.call(this, scene, 'DOMElement');\r\n\r\n /**\r\n * A reference to the parent DOM Container that the Game instance created when it started.\r\n * \r\n * @name Phaser.GameObjects.DOMElement#parent\r\n * @type {Element}\r\n * @since 3.17.0\r\n */\r\n this.parent = scene.sys.game.domContainer;\r\n\r\n /**\r\n * A reference to the HTML Cache.\r\n * \r\n * @name Phaser.GameObjects.DOMElement#cache\r\n * @type {Phaser.Cache.BaseCache}\r\n * @since 3.17.0\r\n */\r\n this.cache = scene.sys.cache.html;\r\n\r\n /**\r\n * The actual DOM Element that this Game Object is bound to. For example, if you've created a `<div>`\r\n * then this property is a direct reference to that element within the dom.\r\n * \r\n * @name Phaser.GameObjects.DOMElement#node\r\n * @type {Element}\r\n * @since 3.17.0\r\n */\r\n this.node;\r\n\r\n /**\r\n * By default a DOM Element will have its transform, display, opacity, zIndex and blend mode properties\r\n * updated when its rendered. If, for some reason, you don't want any of these changed other than the\r\n * CSS transform, then set this flag to `true`. When `true` only the CSS Transform is applied and it's\r\n * up to you to keep track of and set the other properties as required.\r\n * \r\n * This can be handy if, for example, you've a nested DOM Element and you don't want the opacity to be\r\n * picked-up by any of its children.\r\n * \r\n * @name Phaser.GameObjects.DOMElement#transformOnly\r\n * @type {boolean}\r\n * @since 3.17.0\r\n */\r\n this.transformOnly = false;\r\n\r\n /**\r\n * The angle, in radians, by which to skew the DOM Element on the horizontal axis.\r\n * \r\n * https://developer.mozilla.org/en-US/docs/Web/CSS/transform\r\n * \r\n * @name Phaser.GameObjects.DOMElement#skewX\r\n * @type {number}\r\n * @since 3.17.0\r\n */\r\n this.skewX = 0;\r\n\r\n /**\r\n * The angle, in radians, by which to skew the DOM Element on the vertical axis.\r\n * \r\n * https://developer.mozilla.org/en-US/docs/Web/CSS/transform\r\n * \r\n * @name Phaser.GameObjects.DOMElement#skewY\r\n * @type {number}\r\n * @since 3.17.0\r\n */\r\n this.skewY = 0;\r\n\r\n /**\r\n * A Vector4 that contains the 3D rotation of this DOM Element around a fixed axis in 3D space.\r\n * \r\n * All values in the Vector4 are treated as degrees, unless the `rotate3dAngle` property is changed.\r\n * \r\n * For more details see the following MDN page:\r\n * \r\n * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/rotate3d\r\n * \r\n * @name Phaser.GameObjects.DOMElement#rotate3d\r\n * @type {Phaser.Math.Vector4}\r\n * @since 3.17.0\r\n */\r\n this.rotate3d = new Vector4();\r\n\r\n /**\r\n * The unit that represents the 3D rotation values. By default this is `deg` for degrees, but can\r\n * be changed to any supported unit. See this page for further details:\r\n * \r\n * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/rotate3d\r\n * \r\n * @name Phaser.GameObjects.DOMElement#rotate3dAngle\r\n * @type {string}\r\n * @since 3.17.0\r\n */\r\n this.rotate3dAngle = 'deg';\r\n\r\n /**\r\n * The native (un-scaled) width of this Game Object.\r\n * \r\n * For a DOM Element this property is read-only.\r\n * \r\n * The property `displayWidth` holds the computed bounds of this DOM Element, factoring in scaling.\r\n * \r\n * @name Phaser.GameObjects.DOMElement#width\r\n * @type {number}\r\n * @readonly\r\n * @since 3.17.0\r\n */\r\n this.width = 0;\r\n\r\n /**\r\n * The native (un-scaled) height of this Game Object.\r\n * \r\n * For a DOM Element this property is read-only.\r\n * \r\n * The property `displayHeight` holds the computed bounds of this DOM Element, factoring in scaling.\r\n * \r\n * @name Phaser.GameObjects.DOMElement#height\r\n * @type {number}\r\n * @readonly\r\n * @since 3.17.0\r\n */\r\n this.height = 0;\r\n\r\n /**\r\n * The computed display width of this Game Object, based on the `getBoundingClientRect` DOM call.\r\n * \r\n * The property `width` holds the un-scaled width of this DOM Element.\r\n * \r\n * @name Phaser.GameObjects.DOMElement#displayWidth\r\n * @type {number}\r\n * @readonly\r\n * @since 3.17.0\r\n */\r\n this.displayWidth = 0;\r\n\r\n /**\r\n * The computed display height of this Game Object, based on the `getBoundingClientRect` DOM call.\r\n * \r\n * The property `height` holds the un-scaled height of this DOM Element.\r\n * \r\n * @name Phaser.GameObjects.DOMElement#displayHeight\r\n * @type {number}\r\n * @readonly\r\n * @since 3.17.0\r\n */\r\n this.displayHeight = 0;\r\n\r\n /**\r\n * Internal native event handler.\r\n * \r\n * @name Phaser.GameObjects.DOMElement#handler\r\n * @type {number}\r\n * @private\r\n * @since 3.17.0\r\n */\r\n this.handler = this.dispatchNativeEvent.bind(this);\r\n\r\n this.setPosition(x, y);\r\n\r\n if (typeof element === 'string')\r\n {\r\n // hash?\r\n if (element[0] === '#')\r\n {\r\n this.setElement(element.substr(1), style, innerText);\r\n }\r\n else\r\n {\r\n this.createElement(element, style, innerText);\r\n }\r\n }\r\n else if (element)\r\n {\r\n this.setElement(element, style, innerText);\r\n }\r\n },\r\n\r\n /**\r\n * Sets the horizontal and vertical skew values of this DOM Element.\r\n * \r\n * For more information see: https://developer.mozilla.org/en-US/docs/Web/CSS/transform\r\n *\r\n * @method Phaser.GameObjects.DOMElement#setSkew\r\n * @since 3.17.0\r\n *\r\n * @param {number} [x=0] - The angle, in radians, by which to skew the DOM Element on the horizontal axis.\r\n * @param {number} [y=x] - The angle, in radians, by which to skew the DOM Element on the vertical axis.\r\n * \r\n * @return {this} This DOM Element instance.\r\n */\r\n setSkew: function (x, y)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = x; }\r\n\r\n this.skewX = x;\r\n this.skewY = y;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the perspective CSS property of the _parent DOM Container_. This determines the distance between the z=0\r\n * plane and the user in order to give a 3D-positioned element some perspective. Each 3D element with\r\n * z > 0 becomes larger; each 3D-element with z < 0 becomes smaller. The strength of the effect is determined\r\n * by the value of this property.\r\n * \r\n * For more information see: https://developer.mozilla.org/en-US/docs/Web/CSS/perspective\r\n * \r\n * **Changing this value changes it globally for all DOM Elements, as they all share the same parent container.**\r\n *\r\n * @method Phaser.GameObjects.DOMElement#setPerspective\r\n * @since 3.17.0\r\n *\r\n * @param {number} value - The perspective value, in pixels, that determines the distance between the z plane and the user.\r\n * \r\n * @return {this} This DOM Element instance.\r\n */\r\n setPerspective: function (value)\r\n {\r\n this.parent.style.perspective = value + 'px';\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * The perspective CSS property value of the _parent DOM Container_. This determines the distance between the z=0\r\n * plane and the user in order to give a 3D-positioned element some perspective. Each 3D element with\r\n * z > 0 becomes larger; each 3D-element with z < 0 becomes smaller. The strength of the effect is determined\r\n * by the value of this property.\r\n * \r\n * For more information see: https://developer.mozilla.org/en-US/docs/Web/CSS/perspective\r\n * \r\n * **Changing this value changes it globally for all DOM Elements, as they all share the same parent container.**\r\n * \r\n * @name Phaser.GameObjects.DOMElement#perspective\r\n * @type {number}\r\n * @since 3.17.0\r\n */\r\n perspective: {\r\n\r\n get: function ()\r\n {\r\n return parseFloat(this.parent.style.perspective);\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.parent.style.perspective = value + 'px';\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Adds one or more native DOM event listeners onto the underlying Element of this Game Object.\r\n * The event is then dispatched via this Game Objects standard event emitter.\r\n * \r\n * For example:\r\n * \r\n * ```javascript\r\n * var div = this.add.dom(x, y, element);\r\n * \r\n * div.addListener('click');\r\n * \r\n * div.on('click', handler);\r\n * ```\r\n *\r\n * @method Phaser.GameObjects.DOMElement#addListener\r\n * @since 3.17.0\r\n *\r\n * @param {string} events - The DOM event/s to listen for. You can specify multiple events by separating them with spaces.\r\n * \r\n * @return {this} This DOM Element instance.\r\n */\r\n addListener: function (events)\r\n {\r\n if (this.node)\r\n {\r\n events = events.split(' ');\r\n\r\n for (var i = 0; i < events.length; i++)\r\n {\r\n this.node.addEventListener(events[i], this.handler, false);\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Removes one or more native DOM event listeners from the underlying Element of this Game Object.\r\n *\r\n * @method Phaser.GameObjects.DOMElement#removeListener\r\n * @since 3.17.0\r\n *\r\n * @param {string} events - The DOM event/s to stop listening for. You can specify multiple events by separating them with spaces.\r\n * \r\n * @return {this} This DOM Element instance.\r\n */\r\n removeListener: function (events)\r\n {\r\n if (this.node)\r\n {\r\n events = events.split(' ');\r\n\r\n for (var i = 0; i < events.length; i++)\r\n {\r\n this.node.removeEventListener(events[i], this.handler);\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Internal event proxy to dispatch native DOM Events via this Game Object.\r\n *\r\n * @method Phaser.GameObjects.DOMElement#dispatchNativeEvent\r\n * @private\r\n * @since 3.17.0\r\n *\r\n * @param {any} event - The native DOM event.\r\n */\r\n dispatchNativeEvent: function (event)\r\n {\r\n this.emit(event.type, event);\r\n },\r\n\r\n /**\r\n * Creates a native DOM Element, adds it to the parent DOM Container and then binds it to this Game Object,\r\n * so you can control it. The `tagName` should be a string and is passed to `document.createElement`:\r\n * \r\n * ```javascript\r\n * this.add.dom().createElement('div');\r\n * ```\r\n * \r\n * For more details on acceptable tag names see: https://developer.mozilla.org/en-US/docs/Web/API/Document/createElement\r\n * \r\n * You can also pass in a DOMString or style object to set the CSS on the created element, and an optional `innerText`\r\n * value as well. Here is an example of a DOMString:\r\n * \r\n * ```javascript\r\n * this.add.dom().createElement('div', 'background-color: lime; width: 220px; height: 100px; font: 48px Arial', 'Phaser');\r\n * ```\r\n * \r\n * And using a style object:\r\n * \r\n * ```javascript\r\n * var style = {\r\n * 'background-color': 'lime';\r\n * 'width': '200px';\r\n * 'height': '100px';\r\n * 'font': '48px Arial';\r\n * };\r\n * \r\n * this.add.dom().createElement('div', style, 'Phaser');\r\n * ```\r\n * \r\n * If this Game Object already has an Element, it is removed from the DOM entirely first.\r\n * Any event listeners you may have previously created will need to be re-created after this call.\r\n *\r\n * @method Phaser.GameObjects.DOMElement#createElement\r\n * @since 3.17.0\r\n *\r\n * @param {string} tagName - A string that specifies the type of element to be created. The nodeName of the created element is initialized with the value of tagName. Don't use qualified names (like \"html:a\") with this method.\r\n * @param {(string|any)} [style] - Either a DOMString that holds the CSS styles to be applied to the created element, or an object the styles will be ready from.\r\n * @param {string} [innerText] - A DOMString that holds the text that will be set as the innerText of the created element.\r\n * \r\n * @return {this} This DOM Element instance.\r\n */\r\n createElement: function (tagName, style, innerText)\r\n {\r\n return this.setElement(document.createElement(tagName), style, innerText);\r\n },\r\n\r\n /**\r\n * Binds a new DOM Element to this Game Object. If this Game Object already has an Element it is removed from the DOM\r\n * entirely first. Any event listeners you may have previously created will need to be re-created on the new element.\r\n * \r\n * The `element` argument you pass to this method can be either a string tagName:\r\n * \r\n * ```javascript\r\n * <h1 id=\"heading\">Phaser</h1>\r\n *\r\n * this.add.dom().setElement('heading');\r\n * ```\r\n * \r\n * Or a reference to an Element instance:\r\n * \r\n * ```javascript\r\n * <h1 id=\"heading\">Phaser</h1>\r\n *\r\n * var h1 = document.getElementById('heading');\r\n * \r\n * this.add.dom().setElement(h1);\r\n * ```\r\n * \r\n * You can also pass in a DOMString or style object to set the CSS on the created element, and an optional `innerText`\r\n * value as well. Here is an example of a DOMString:\r\n * \r\n * ```javascript\r\n * this.add.dom().setElement(h1, 'background-color: lime; width: 220px; height: 100px; font: 48px Arial', 'Phaser');\r\n * ```\r\n * \r\n * And using a style object:\r\n * \r\n * ```javascript\r\n * var style = {\r\n * 'background-color': 'lime';\r\n * 'width': '200px';\r\n * 'height': '100px';\r\n * 'font': '48px Arial';\r\n * };\r\n * \r\n * this.add.dom().setElement(h1, style, 'Phaser');\r\n * ```\r\n *\r\n * @method Phaser.GameObjects.DOMElement#setElement\r\n * @since 3.17.0\r\n *\r\n * @param {(string|Element)} element - If a string it is passed to `getElementById()`, or it should be a reference to an existing Element.\r\n * @param {(string|any)} [style] - Either a DOMString that holds the CSS styles to be applied to the created element, or an object the styles will be ready from.\r\n * @param {string} [innerText] - A DOMString that holds the text that will be set as the innerText of the created element.\r\n * \r\n * @return {this} This DOM Element instance.\r\n */\r\n setElement: function (element, style, innerText)\r\n {\r\n // Already got an element? Remove it first\r\n this.removeElement();\r\n\r\n var target;\r\n\r\n if (typeof element === 'string')\r\n {\r\n // hash?\r\n if (element[0] === '#')\r\n {\r\n element = element.substr(1);\r\n }\r\n\r\n target = document.getElementById(element);\r\n }\r\n else if (typeof element === 'object' && element.nodeType === 1)\r\n {\r\n target = element;\r\n }\r\n\r\n if (!target)\r\n {\r\n return this;\r\n }\r\n\r\n this.node = target;\r\n\r\n // style can be empty, a string or a plain object\r\n if (style && IsPlainObject(style))\r\n {\r\n for (var key in style)\r\n {\r\n target.style[key] = style[key];\r\n }\r\n }\r\n else if (typeof style === 'string')\r\n {\r\n target.style = style;\r\n }\r\n\r\n // Add / Override the values we need\r\n\r\n target.style.zIndex = '0';\r\n target.style.display = 'inline';\r\n target.style.position = 'absolute';\r\n\r\n // Node handler\r\n\r\n target.phaser = this;\r\n\r\n if (this.parent)\r\n {\r\n this.parent.appendChild(target);\r\n }\r\n\r\n // InnerText\r\n\r\n if (innerText)\r\n {\r\n target.innerText = innerText;\r\n }\r\n\r\n return this.updateSize();\r\n },\r\n\r\n /**\r\n * Takes a block of html from the HTML Cache, that has previously been preloaded into the game, and then\r\n * creates a DOM Element from it. The loaded HTML is set as the `innerHTML` property of the created\r\n * element.\r\n * \r\n * Assume the following html is stored in a file called `loginform.html`:\r\n * \r\n * ```html\r\n * <input type=\"text\" name=\"nameField\" placeholder=\"Enter your name\" style=\"font-size: 32px\">\r\n * <input type=\"button\" name=\"playButton\" value=\"Let's Play\" style=\"font-size: 32px\">\r\n * ```\r\n * \r\n * Which is loaded into your game using the cache key 'login':\r\n * \r\n * ```javascript\r\n * this.load.html('login', 'assets/loginform.html');\r\n * ```\r\n * \r\n * You can create a DOM Element from it using the cache key:\r\n * \r\n * ```javascript\r\n * this.add.dom().createFromCache('login');\r\n * ```\r\n * \r\n * The optional `elementType` argument controls the container that is created, into which the loaded html is inserted.\r\n * The default is a plain `div` object, but any valid tagName can be given.\r\n * \r\n * If this Game Object already has an Element, it is removed from the DOM entirely first.\r\n * Any event listeners you may have previously created will need to be re-created after this call.\r\n *\r\n * @method Phaser.GameObjects.DOMElement#createFromCache\r\n * @since 3.17.0\r\n * \r\n * @param {string} The key of the html cache entry to use for this DOM Element.\r\n * @param {string} [tagName='div'] - The tag name of the element into which all of the loaded html will be inserted. Defaults to a plain div tag.\r\n * \r\n * @return {this} This DOM Element instance.\r\n */\r\n createFromCache: function (key, tagName)\r\n {\r\n var html = this.cache.get(key);\r\n\r\n if (html)\r\n {\r\n this.createFromHTML(html, tagName);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Takes a string of html and then creates a DOM Element from it. The HTML is set as the `innerHTML`\r\n * property of the created element.\r\n * \r\n * ```javascript\r\n * let form = `\r\n * <input type=\"text\" name=\"nameField\" placeholder=\"Enter your name\" style=\"font-size: 32px\">\r\n * <input type=\"button\" name=\"playButton\" value=\"Let's Play\" style=\"font-size: 32px\">\r\n * `;\r\n * ```\r\n * \r\n * You can create a DOM Element from it using the string:\r\n * \r\n * ```javascript\r\n * this.add.dom().createFromHTML(form);\r\n * ```\r\n * \r\n * The optional `elementType` argument controls the type of container that is created, into which the html is inserted.\r\n * The default is a plain `div` object, but any valid tagName can be given.\r\n * \r\n * If this Game Object already has an Element, it is removed from the DOM entirely first.\r\n * Any event listeners you may have previously created will need to be re-created after this call.\r\n *\r\n * @method Phaser.GameObjects.DOMElement#createFromHTML\r\n * @since 3.17.0\r\n * \r\n * @param {string} A string of html to be set as the `innerHTML` property of the created element.\r\n * @param {string} [tagName='div'] - The tag name of the element into which all of the html will be inserted. Defaults to a plain div tag.\r\n * \r\n * @return {this} This DOM Element instance.\r\n */\r\n createFromHTML: function (html, tagName)\r\n {\r\n if (tagName === undefined) { tagName = 'div'; }\r\n\r\n // Already got an element? Remove it first\r\n this.removeElement();\r\n\r\n var element = document.createElement(tagName);\r\n\r\n this.node = element;\r\n\r\n element.style.zIndex = '0';\r\n element.style.display = 'inline';\r\n element.style.position = 'absolute';\r\n\r\n // Node handler\r\n\r\n element.phaser = this;\r\n\r\n if (this.parent)\r\n {\r\n this.parent.appendChild(element);\r\n }\r\n\r\n element.innerHTML = html;\r\n\r\n return this.updateSize();\r\n },\r\n\r\n /**\r\n * Removes the current DOM Element bound to this Game Object from the DOM entirely and resets the\r\n * `node` property of this Game Object to be `null`.\r\n *\r\n * @method Phaser.GameObjects.DOMElement#removeElement\r\n * @since 3.17.0\r\n * \r\n * @return {this} This DOM Element instance.\r\n */\r\n removeElement: function ()\r\n {\r\n if (this.node)\r\n {\r\n RemoveFromDOM(this.node);\r\n\r\n this.node = null;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Internal method that calls `getBoundingClientRect` on the `node` and then sets the bounds width\r\n * and height into the `displayWidth` and `displayHeight` properties, and the `clientWidth` and `clientHeight`\r\n * values into the `width` and `height` properties respectively.\r\n * \r\n * This is called automatically whenever a new element is created or set.\r\n *\r\n * @method Phaser.GameObjects.DOMElement#updateSize\r\n * @since 3.17.0\r\n * \r\n * @return {this} This DOM Element instance.\r\n */\r\n updateSize: function ()\r\n {\r\n var node = this.node;\r\n\r\n var nodeBounds = node.getBoundingClientRect();\r\n\r\n this.width = node.clientWidth;\r\n this.height = node.clientHeight;\r\n\r\n this.displayWidth = nodeBounds.width || 0;\r\n this.displayHeight = nodeBounds.height || 0;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Gets all children from this DOM Elements node, using `querySelectorAll('*')` and then iterates through\r\n * them, looking for the first one that has a property matching the given key and value. It then returns this child\r\n * if found, or `null` if not.\r\n *\r\n * @method Phaser.GameObjects.DOMElement#getChildByProperty\r\n * @since 3.17.0\r\n * \r\n * @param {string} property - The property to search the children for.\r\n * @param {string} value - The value the property must strictly equal.\r\n * \r\n * @return {?Element} The first matching child DOM Element, or `null` if not found.\r\n */\r\n getChildByProperty: function (property, value)\r\n {\r\n if (this.node)\r\n {\r\n var children = this.node.querySelectorAll('*');\r\n\r\n for (var i = 0; i < children.length; i++)\r\n {\r\n if (children[i][property] === value)\r\n {\r\n return children[i];\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n },\r\n\r\n /**\r\n * Gets all children from this DOM Elements node, using `querySelectorAll('*')` and then iterates through\r\n * them, looking for the first one that has a matching id. It then returns this child if found, or `null` if not.\r\n * \r\n * Be aware that class and id names are case-sensitive.\r\n *\r\n * @method Phaser.GameObjects.DOMElement#getChildByID\r\n * @since 3.17.0\r\n * \r\n * @param {string} id - The id to search the children for.\r\n * \r\n * @return {?Element} The first matching child DOM Element, or `null` if not found.\r\n */\r\n getChildByID: function (id)\r\n {\r\n return this.getChildByProperty('id', id);\r\n },\r\n\r\n /**\r\n * Gets all children from this DOM Elements node, using `querySelectorAll('*')` and then iterates through\r\n * them, looking for the first one that has a matching name. It then returns this child if found, or `null` if not.\r\n * \r\n * Be aware that class and id names are case-sensitive.\r\n *\r\n * @method Phaser.GameObjects.DOMElement#getChildByName\r\n * @since 3.17.0\r\n * \r\n * @param {string} name - The name to search the children for.\r\n * \r\n * @return {?Element} The first matching child DOM Element, or `null` if not found.\r\n */\r\n getChildByName: function (name)\r\n {\r\n return this.getChildByProperty('name', name);\r\n },\r\n\r\n /**\r\n * Sets the `className` property of the DOM Element node and updates the internal sizes.\r\n *\r\n * @method Phaser.GameObjects.DOMElement#setClassName\r\n * @since 3.17.0\r\n * \r\n * @param {string} className - A string representing the class or space-separated classes of the element.\r\n * \r\n * @return {this} This DOM Element instance.\r\n */\r\n setClassName: function (className)\r\n {\r\n if (this.node)\r\n {\r\n this.node.className = className;\r\n\r\n this.updateSize();\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the `innerText` property of the DOM Element node and updates the internal sizes.\r\n * \r\n * Note that only certain types of Elements can have `innerText` set on them.\r\n *\r\n * @method Phaser.GameObjects.DOMElement#setText\r\n * @since 3.17.0\r\n * \r\n * @param {string} text - A DOMString representing the rendered text content of the element.\r\n * \r\n * @return {this} This DOM Element instance.\r\n */\r\n setText: function (text)\r\n {\r\n if (this.node)\r\n {\r\n this.node.innerText = text;\r\n\r\n this.updateSize();\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the `innerHTML` property of the DOM Element node and updates the internal sizes.\r\n *\r\n * @method Phaser.GameObjects.DOMElement#setHTML\r\n * @since 3.17.0\r\n * \r\n * @param {string} html - A DOMString of html to be set as the `innerHTML` property of the element.\r\n * \r\n * @return {this} This DOM Element instance.\r\n */\r\n setHTML: function (html)\r\n {\r\n if (this.node)\r\n {\r\n this.node.innerHTML = html;\r\n\r\n this.updateSize();\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Runs internal update tasks.\r\n *\r\n * @method Phaser.GameObjects.DOMElement#preUpdate\r\n * @private\r\n * @since 3.17.0\r\n */\r\n preUpdate: function ()\r\n {\r\n var parent = this.parentContainer;\r\n var node = this.node;\r\n\r\n if (node && parent && !parent.willRender())\r\n {\r\n node.style.display = 'none';\r\n }\r\n },\r\n\r\n /**\r\n * Compares the renderMask with the renderFlags to see if this Game Object will render or not.\r\n * \r\n * DOMElements always return `true` as they need to still set values during the render pass, even if not visible.\r\n *\r\n * @method Phaser.GameObjects.DOMElement#willRender\r\n * @since 3.17.0\r\n *\r\n * @return {boolean} `true` if the Game Object should be rendered, otherwise `false`.\r\n */\r\n willRender: function ()\r\n {\r\n return true;\r\n },\r\n\r\n /**\r\n * Handles the pre-destroy step for the DOM Element, which removes the underlying node from the DOM.\r\n *\r\n * @method Phaser.GameObjects.DOMElement#preDestroy\r\n * @private\r\n * @since 3.17.0\r\n */\r\n preDestroy: function ()\r\n {\r\n this.removeElement();\r\n }\r\n\r\n});\r\n\r\nmodule.exports = DOMElement;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9kb21lbGVtZW50L0RPTUVsZW1lbnQuanM/YjYyZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxnRkFBZTtBQUN4Qyx1QkFBdUIsbUJBQU8sQ0FBQyxnR0FBb0I7QUFDbkQsaUJBQWlCLG1CQUFPLENBQUMsMEVBQWU7QUFDeEMsb0JBQW9CLG1CQUFPLENBQUMsaUdBQWtDO0FBQzlELG9CQUFvQixtQkFBTyxDQUFDLCtFQUF5QjtBQUNyRCxjQUFjLG1CQUFPLENBQUMscUVBQW9COztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsY0FBYyxlQUFlO0FBQ2xGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTztBQUNyQyw4QkFBOEIsT0FBTzs7QUFFckM7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJCQUEyQixtQkFBbUI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkIsbUJBQW1CO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsSUFBSTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRSxjQUFjLGVBQWU7QUFDaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsYUFBYTtBQUM1QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RCxjQUFjLGVBQWU7QUFDMUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQkFBaUI7QUFDaEMsZUFBZSxhQUFhO0FBQzVCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsaUJBQWlCOztBQUVyRDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLFNBQVM7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJCQUEyQixxQkFBcUI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsU0FBUztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvZG9tZWxlbWVudC9ET01FbGVtZW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ29tcG9uZW50cyA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMnKTtcclxudmFyIERPTUVsZW1lbnRSZW5kZXIgPSByZXF1aXJlKCcuL0RPTUVsZW1lbnRSZW5kZXInKTtcclxudmFyIEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Jyk7XHJcbnZhciBJc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0lzUGxhaW5PYmplY3QnKTtcclxudmFyIFJlbW92ZUZyb21ET00gPSByZXF1aXJlKCcuLi8uLi9kb20vUmVtb3ZlRnJvbURPTScpO1xyXG52YXIgVmVjdG9yNCA9IHJlcXVpcmUoJy4uLy4uL21hdGgvVmVjdG9yNCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogRE9NIEVsZW1lbnQgR2FtZSBPYmplY3RzIGFyZSBhIHdheSB0byBjb250cm9sIGFuZCBtYW5pcHVsYXRlIEhUTUwgRWxlbWVudHMgb3ZlciB0aGUgdG9wIG9mIHlvdXIgZ2FtZS5cclxuICogXHJcbiAqIEluIG9yZGVyIGZvciBET00gRWxlbWVudHMgdG8gZGlzcGxheSB5b3UgaGF2ZSB0byBlbmFibGUgdGhlbSBieSBhZGRpbmcgdGhlIGZvbGxvd2luZyB0byB5b3VyIGdhbWVcclxuICogY29uZmlndXJhdGlvbiBvYmplY3Q6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGRvbSB7XHJcbiAqICAgY3JlYXRlQ29udGFpbmVyOiB0cnVlXHJcbiAqIH1cclxuICogYGBgXHJcbiAqIFxyXG4gKiBXaGVuIHRoaXMgaXMgYWRkZWQsIFBoYXNlciB3aWxsIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgRE9NIENvbnRhaW5lciBkaXYgdGhhdCBpcyBwb3NpdGlvbmVkIG92ZXIgdGhlIHRvcFxyXG4gKiBvZiB0aGUgZ2FtZSBjYW52YXMuIFRoaXMgZGl2IGlzIHNpemVkIHRvIG1hdGNoIHRoZSBjYW52YXMsIGFuZCBpZiB0aGUgY2FudmFzIHNpemUgY2hhbmdlcywgYXMgYSByZXN1bHQgb2ZcclxuICogc2V0dGluZ3Mgd2l0aGluIHRoZSBTY2FsZSBNYW5hZ2VyLCB0aGUgZG9tIGNvbnRhaW5lciBpcyByZXNpemVkIGFjY29yZGluZ2x5LlxyXG4gKiBcclxuICogWW91IGNhbiBjcmVhdGUgYSBET00gRWxlbWVudCBieSBlaXRoZXIgcGFzc2luZyBpbiBET01TdHJpbmdzLCBvciBieSBwYXNzaW5nIGluIGEgcmVmZXJlbmNlIHRvIGFuIGV4aXN0aW5nXHJcbiAqIEVsZW1lbnQgdGhhdCB5b3Ugd2lzaCB0byBiZSBwbGFjZWQgdW5kZXIgdGhlIGNvbnRyb2wgb2YgUGhhc2VyLiBGb3IgZXhhbXBsZTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5hZGQuZG9tKHgsIHksICdkaXYnLCAnYmFja2dyb3VuZC1jb2xvcjogbGltZTsgd2lkdGg6IDIyMHB4OyBoZWlnaHQ6IDEwMHB4OyBmb250OiA0OHB4IEFyaWFsJywgJ1BoYXNlcicpO1xyXG4gKiBgYGBcclxuICogXHJcbiAqIFRoZSBhYm92ZSBjb2RlIHdpbGwgaW5zZXJ0IGEgZGl2IGVsZW1lbnQgaW50byB0aGUgRE9NIENvbnRhaW5lciBhdCB0aGUgZ2l2ZW4geC95IGNvb3JkaW5hdGUuIFRoZSBET01TdHJpbmcgaW5cclxuICogdGhlIDR0aCBhcmd1bWVudCBzZXRzIHRoZSBpbml0aWFsIENTUyBzdHlsZSBvZiB0aGUgZGl2IGFuZCB0aGUgZmluYWwgYXJndW1lbnQgaXMgdGhlIGlubmVyIHRleHQuIEluIHRoaXMgY2FzZSxcclxuICogaXQgd2lsbCBjcmVhdGUgYSBsaW1lIGNvbG9yZWQgZGl2IHRoYXQgaXMgMjIwcHggYnkgMTAwcHggaW4gc2l6ZSB3aXRoIHRoZSB0ZXh0IFBoYXNlciBpbiBpdCwgaW4gYW4gQXJpYWwgZm9udC5cclxuICogXHJcbiAqIFlvdSBzaG91bGQgbmVhcmx5IGFsd2F5cywgd2l0aG91dCBleGNlcHRpb24sIHVzZSBleHBsaWNpdGx5IHNpemVkIEhUTUwgRWxlbWVudHMsIGluIG9yZGVyIHRvIGZ1bGx5IGNvbnRyb2xcclxuICogYWxpZ25tZW50IGFuZCBwb3NpdGlvbmluZyBvZiB0aGUgZWxlbWVudHMgbmV4dCB0byByZWd1bGFyIGdhbWUgY29udGVudC5cclxuICogXHJcbiAqIFJhdGhlciB0aGFuIHNwZWNpZnkgdGhlIENTUyBhbmQgSFRNTCBkaXJlY3RseSB5b3UgY2FuIHVzZSB0aGUgYGxvYWQuaHRtbGAgRmlsZSBMb2FkZXIgdG8gbG9hZCBpdCBpbnRvIHRoZVxyXG4gKiBjYWNoZSBhbmQgdGhlbiB1c2UgdGhlIGBjcmVhdGVGcm9tQ2FjaGVgIG1ldGhvZCBpbnN0ZWFkLiBZb3UgY2FuIGFsc28gdXNlIGBjcmVhdGVGcm9tSFRNTGAgYW5kIHZhcmlvdXMgb3RoZXJcclxuICogbWV0aG9kcyBhdmFpbGFibGUgaW4gdGhpcyBjbGFzcyB0byBoZWxwIGNvbnN0cnVjdCB5b3VyIGVsZW1lbnRzLlxyXG4gKiBcclxuICogT25jZSB0aGUgZWxlbWVudCBoYXMgYmVlbiBjcmVhdGVkIHlvdSBjYW4gdGhlbiBjb250cm9sIGl0IGxpa2UgeW91IHdvdWxkIGFueSBvdGhlciBHYW1lIE9iamVjdC4gWW91IGNhbiBzZXQgaXRzXHJcbiAqIHBvc2l0aW9uLCBzY2FsZSwgcm90YXRpb24sIGFscGhhIGFuZCBvdGhlciBwcm9wZXJ0aWVzLiBJdCB3aWxsIG1vdmUgYXMgdGhlIG1haW4gU2NlbmUgQ2FtZXJhIG1vdmVzIGFuZCBiZSBjbGlwcGVkXHJcbiAqIGF0IHRoZSBlZGdlIG9mIHRoZSBjYW52YXMuIEl0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHNvbWUgbGltaXRhdGlvbnMgb2YgRE9NIEVsZW1lbnRzOiBUaGUgb2J2aW91cyBvbmUgaXMgdGhhdFxyXG4gKiB0aGV5IGFwcGVhciBhYm92ZSBvciBiZWxvdyB5b3VyIGdhbWUgY2FudmFzLiBZb3UgY2Fubm90IGJsZW5kIHRoZW0gaW50byB0aGUgZGlzcGxheSBsaXN0LCBtZWFuaW5nIHlvdSBjYW5ub3QgaGF2ZVxyXG4gKiBhIERPTSBFbGVtZW50LCB0aGVuIGEgU3ByaXRlLCB0aGVuIGFub3RoZXIgRE9NIEVsZW1lbnQgYmVoaW5kIGl0LlxyXG4gKiBcclxuICogVGhleSBhbHNvIGNhbm5vdCBiZSBlbmFibGVkIGZvciBpbnB1dC4gVG8gZG8gdGhhdCwgeW91IGhhdmUgdG8gdXNlIHRoZSBgYWRkTGlzdGVuZXJgIG1ldGhvZCB0byBhZGQgbmF0aXZlIGV2ZW50XHJcbiAqIGxpc3RlbmVycyBkaXJlY3RseS4gVGhlIGZpbmFsIGxpbWl0YXRpb24gaXMgdG8gZG8gd2l0aCBjYW1lcmFzLiBUaGUgRE9NIENvbnRhaW5lciBpcyBzaXplZCB0byBtYXRjaCB0aGUgZ2FtZSBjYW52YXNcclxuICogZW50aXJlbHkgYW5kIGNsaXBwZWQgYWNjb3JkaW5nbHkuIERPTSBFbGVtZW50cyByZXNwZWN0IGNhbWVyYSBzY3JvbGxpbmcgYW5kIHNjcm9sbEZhY3RvciBzZXR0aW5ncywgYnV0IGlmIHlvdVxyXG4gKiBjaGFuZ2UgdGhlIHNpemUgb2YgdGhlIGNhbWVyYSBzbyBpdCBubyBsb25nZXIgbWF0Y2hlcyB0aGUgc2l6ZSBvZiB0aGUgY2FudmFzLCB0aGV5IHdvbid0IGJlIGNsaXBwZWQgYWNjb3JkaW5nbHkuXHJcbiAqIFxyXG4gKiBBbHNvLCBhbGwgRE9NIEVsZW1lbnRzIGFyZSBpbnNlcnRlZCBpbnRvIHRoZSBzYW1lIERPTSBDb250YWluZXIsIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggU2NlbmUgdGhleSBhcmUgY3JlYXRlZCBpbi5cclxuICogXHJcbiAqIERPTSBFbGVtZW50cyBhcmUgYSBwb3dlcmZ1bCB3YXkgdG8gYWxpZ24gbmF0aXZlIEhUTUwgd2l0aCB5b3VyIFBoYXNlciBHYW1lIE9iamVjdHMuIEZvciBleGFtcGxlLCB5b3UgY2FuIGluc2VydFxyXG4gKiBhIGxvZ2luIGZvcm0gZm9yIGEgbXVsdGlwbGF5ZXIgZ2FtZSBkaXJlY3RseSBpbnRvIHlvdXIgdGl0bGUgc2NyZWVuLiBPciBhIHRleHQgaW5wdXQgYm94IGZvciBhIGhpZ2hzY29yZSB0YWJsZS5cclxuICogT3IgYSBiYW5uZXIgYWQgZnJvbSBhIDNyZCBwYXJ0eSBzZXJ2aWNlLiBPciBwZXJoYXBzIHlvdSdkIGxpa2UgdG8gdXNlIHRoZW0gZm9yIGhpZ2ggcmVzb2x1dGlvbiB0ZXh0IGRpc3BsYXkgYW5kXHJcbiAqIFVJLiBUaGUgY2hvaWNlIGlzIHVwIHRvIHlvdSwganVzdCByZW1lbWJlciB0aGF0IHlvdSdyZSBkZWFsaW5nIHdpdGggc3RhbmRhcmQgSFRNTCBhbmQgQ1NTIGZsb2F0aW5nIG92ZXIgdGhlIHRvcFxyXG4gKiBvZiB5b3VyIGdhbWUsIGFuZCBzaG91bGQgdHJlYXQgaXQgYWNjb3JkaW5nbHkuXHJcbiAqXHJcbiAqIEBjbGFzcyBET01FbGVtZW50XHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjE3LjBcclxuICpcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQWxwaGFcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQmxlbmRNb2RlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkRlcHRoXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk9yaWdpblxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5TY3JvbGxGYWN0b3JcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgYmVsb25ncy4gQSBHYW1lIE9iamVjdCBjYW4gb25seSBiZWxvbmcgdG8gb25lIFNjZW5lIGF0IGEgdGltZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBET00gRWxlbWVudCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIERPTSBFbGVtZW50IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHsoRWxlbWVudHxzdHJpbmcpfSBbZWxlbWVudF0gLSBBbiBleGlzdGluZyBET00gZWxlbWVudCwgb3IgYSBzdHJpbmcuIElmIGEgc3RyaW5nIHN0YXJ0aW5nIHdpdGggYSAjIGl0IHdpbGwgZG8gYSBgZ2V0RWxlbWVudEJ5SWRgIGxvb2stdXAgb24gdGhlIHN0cmluZyAobWludXMgdGhlIGhhc2gpLiBXaXRob3V0IGEgaGFzaCwgaXQgcmVwcmVzZW50cyB0aGUgdHlwZSBvZiBlbGVtZW50IHRvIGNyZWF0ZSwgaS5lLiAnZGl2Jy5cclxuICogQHBhcmFtIHsoc3RyaW5nfGFueSl9IFtzdHlsZV0gLSBJZiBhIHN0cmluZywgd2lsbCBiZSBzZXQgZGlyZWN0bHkgYXMgdGhlIGVsZW1lbnRzIGBzdHlsZWAgcHJvcGVydHkgdmFsdWUuIElmIGEgcGxhaW4gb2JqZWN0LCB3aWxsIGJlIGl0ZXJhdGVkIGFuZCB0aGUgdmFsdWVzIHRyYW5zZmVycmVkLiBJbiBib3RoIGNhc2VzIHRoZSB2YWx1ZXMgcmVwbGFjaW5nIHdoYXRldmVyIENTUyBzdHlsZXMgbWF5IGhhdmUgYmVlbiBwcmV2aW91c2x5IHNldC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFtpbm5lclRleHRdIC0gSWYgZ2l2ZW4sIHdpbGwgYmUgc2V0IGRpcmVjdGx5IGFzIHRoZSBlbGVtZW50cyBgaW5uZXJUZXh0YCBwcm9wZXJ0eSB2YWx1ZSwgcmVwbGFjaW5nIHdoYXRldmVyIHdhcyB0aGVyZSBiZWZvcmUuXHJcbiAqL1xyXG52YXIgRE9NRWxlbWVudCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogR2FtZU9iamVjdCxcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBDb21wb25lbnRzLkFscGhhLFxyXG4gICAgICAgIENvbXBvbmVudHMuQmxlbmRNb2RlLFxyXG4gICAgICAgIENvbXBvbmVudHMuRGVwdGgsXHJcbiAgICAgICAgQ29tcG9uZW50cy5PcmlnaW4sXHJcbiAgICAgICAgQ29tcG9uZW50cy5TY3JvbGxGYWN0b3IsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UcmFuc2Zvcm0sXHJcbiAgICAgICAgQ29tcG9uZW50cy5WaXNpYmxlLFxyXG4gICAgICAgIERPTUVsZW1lbnRSZW5kZXJcclxuICAgIF0sXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBET01FbGVtZW50IChzY2VuZSwgeCwgeSwgZWxlbWVudCwgc3R5bGUsIGlubmVyVGV4dClcclxuICAgIHtcclxuICAgICAgICBHYW1lT2JqZWN0LmNhbGwodGhpcywgc2NlbmUsICdET01FbGVtZW50Jyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgRE9NIENvbnRhaW5lciB0aGF0IHRoZSBHYW1lIGluc3RhbmNlIGNyZWF0ZWQgd2hlbiBpdCBzdGFydGVkLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5ET01FbGVtZW50I3BhcmVudFxyXG4gICAgICAgICAqIEB0eXBlIHtFbGVtZW50fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBhcmVudCA9IHNjZW5lLnN5cy5nYW1lLmRvbUNvbnRhaW5lcjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIEhUTUwgQ2FjaGUuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjY2FjaGVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhY2hlLkJhc2VDYWNoZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYWNoZSA9IHNjZW5lLnN5cy5jYWNoZS5odG1sO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYWN0dWFsIERPTSBFbGVtZW50IHRoYXQgdGhpcyBHYW1lIE9iamVjdCBpcyBib3VuZCB0by4gRm9yIGV4YW1wbGUsIGlmIHlvdSd2ZSBjcmVhdGVkIGEgYDxkaXY+YFxyXG4gICAgICAgICAqIHRoZW4gdGhpcyBwcm9wZXJ0eSBpcyBhIGRpcmVjdCByZWZlcmVuY2UgdG8gdGhhdCBlbGVtZW50IHdpdGhpbiB0aGUgZG9tLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5ET01FbGVtZW50I25vZGVcclxuICAgICAgICAgKiBAdHlwZSB7RWxlbWVudH1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5ub2RlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBCeSBkZWZhdWx0IGEgRE9NIEVsZW1lbnQgd2lsbCBoYXZlIGl0cyB0cmFuc2Zvcm0sIGRpc3BsYXksIG9wYWNpdHksIHpJbmRleCBhbmQgYmxlbmQgbW9kZSBwcm9wZXJ0aWVzXHJcbiAgICAgICAgICogdXBkYXRlZCB3aGVuIGl0cyByZW5kZXJlZC4gSWYsIGZvciBzb21lIHJlYXNvbiwgeW91IGRvbid0IHdhbnQgYW55IG9mIHRoZXNlIGNoYW5nZWQgb3RoZXIgdGhhbiB0aGVcclxuICAgICAgICAgKiBDU1MgdHJhbnNmb3JtLCB0aGVuIHNldCB0aGlzIGZsYWcgdG8gYHRydWVgLiBXaGVuIGB0cnVlYCBvbmx5IHRoZSBDU1MgVHJhbnNmb3JtIGlzIGFwcGxpZWQgYW5kIGl0J3NcclxuICAgICAgICAgKiB1cCB0byB5b3UgdG8ga2VlcCB0cmFjayBvZiBhbmQgc2V0IHRoZSBvdGhlciBwcm9wZXJ0aWVzIGFzIHJlcXVpcmVkLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoaXMgY2FuIGJlIGhhbmR5IGlmLCBmb3IgZXhhbXBsZSwgeW91J3ZlIGEgbmVzdGVkIERPTSBFbGVtZW50IGFuZCB5b3UgZG9uJ3Qgd2FudCB0aGUgb3BhY2l0eSB0byBiZVxyXG4gICAgICAgICAqIHBpY2tlZC11cCBieSBhbnkgb2YgaXRzIGNoaWxkcmVuLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5ET01FbGVtZW50I3RyYW5zZm9ybU9ubHlcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1Pbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBhbmdsZSwgaW4gcmFkaWFucywgYnkgd2hpY2ggdG8gc2tldyB0aGUgRE9NIEVsZW1lbnQgb24gdGhlIGhvcml6b250YWwgYXhpcy5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdHJhbnNmb3JtXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjc2tld1hcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNrZXdYID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGFuZ2xlLCBpbiByYWRpYW5zLCBieSB3aGljaCB0byBza2V3IHRoZSBET00gRWxlbWVudCBvbiB0aGUgdmVydGljYWwgYXhpcy5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdHJhbnNmb3JtXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjc2tld1lcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNrZXdZID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBWZWN0b3I0IHRoYXQgY29udGFpbnMgdGhlIDNEIHJvdGF0aW9uIG9mIHRoaXMgRE9NIEVsZW1lbnQgYXJvdW5kIGEgZml4ZWQgYXhpcyBpbiAzRCBzcGFjZS5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBBbGwgdmFsdWVzIGluIHRoZSBWZWN0b3I0IGFyZSB0cmVhdGVkIGFzIGRlZ3JlZXMsIHVubGVzcyB0aGUgYHJvdGF0ZTNkQW5nbGVgIHByb3BlcnR5IGlzIGNoYW5nZWQuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGZvbGxvd2luZyBNRE4gcGFnZTpcclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdHJhbnNmb3JtLWZ1bmN0aW9uL3JvdGF0ZTNkXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjcm90YXRlM2RcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yNH1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yb3RhdGUzZCA9IG5ldyBWZWN0b3I0KCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB1bml0IHRoYXQgcmVwcmVzZW50cyB0aGUgM0Qgcm90YXRpb24gdmFsdWVzLiBCeSBkZWZhdWx0IHRoaXMgaXMgYGRlZ2AgZm9yIGRlZ3JlZXMsIGJ1dCBjYW5cclxuICAgICAgICAgKiBiZSBjaGFuZ2VkIHRvIGFueSBzdXBwb3J0ZWQgdW5pdC4gU2VlIHRoaXMgcGFnZSBmb3IgZnVydGhlciBkZXRhaWxzOlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90cmFuc2Zvcm0tZnVuY3Rpb24vcm90YXRlM2RcclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudCNyb3RhdGUzZEFuZ2xlXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yb3RhdGUzZEFuZ2xlID0gJ2RlZyc7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBuYXRpdmUgKHVuLXNjYWxlZCkgd2lkdGggb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBGb3IgYSBET00gRWxlbWVudCB0aGlzIHByb3BlcnR5IGlzIHJlYWQtb25seS5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGUgcHJvcGVydHkgYGRpc3BsYXlXaWR0aGAgaG9sZHMgdGhlIGNvbXB1dGVkIGJvdW5kcyBvZiB0aGlzIERPTSBFbGVtZW50LCBmYWN0b3JpbmcgaW4gc2NhbGluZy5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudCN3aWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMud2lkdGggPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbmF0aXZlICh1bi1zY2FsZWQpIGhlaWdodCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEZvciBhIERPTSBFbGVtZW50IHRoaXMgcHJvcGVydHkgaXMgcmVhZC1vbmx5LlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoZSBwcm9wZXJ0eSBgZGlzcGxheUhlaWdodGAgaG9sZHMgdGhlIGNvbXB1dGVkIGJvdW5kcyBvZiB0aGlzIERPTSBFbGVtZW50LCBmYWN0b3JpbmcgaW4gc2NhbGluZy5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudCNoZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhlaWdodCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjb21wdXRlZCBkaXNwbGF5IHdpZHRoIG9mIHRoaXMgR2FtZSBPYmplY3QsIGJhc2VkIG9uIHRoZSBgZ2V0Qm91bmRpbmdDbGllbnRSZWN0YCBET00gY2FsbC5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGUgcHJvcGVydHkgYHdpZHRoYCBob2xkcyB0aGUgdW4tc2NhbGVkIHdpZHRoIG9mIHRoaXMgRE9NIEVsZW1lbnQuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjZGlzcGxheVdpZHRoXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kaXNwbGF5V2lkdGggPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY29tcHV0ZWQgZGlzcGxheSBoZWlnaHQgb2YgdGhpcyBHYW1lIE9iamVjdCwgYmFzZWQgb24gdGhlIGBnZXRCb3VuZGluZ0NsaWVudFJlY3RgIERPTSBjYWxsLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoZSBwcm9wZXJ0eSBgaGVpZ2h0YCBob2xkcyB0aGUgdW4tc2NhbGVkIGhlaWdodCBvZiB0aGlzIERPTSBFbGVtZW50LlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5ET01FbGVtZW50I2Rpc3BsYXlIZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRpc3BsYXlIZWlnaHQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCBuYXRpdmUgZXZlbnQgaGFuZGxlci5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudCNoYW5kbGVyXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhhbmRsZXIgPSB0aGlzLmRpc3BhdGNoTmF0aXZlRXZlbnQuYmluZCh0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBoYXNoP1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFswXSA9PT0gJyMnKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEVsZW1lbnQoZWxlbWVudC5zdWJzdHIoMSksIHN0eWxlLCBpbm5lclRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVFbGVtZW50KGVsZW1lbnQsIHN0eWxlLCBpbm5lclRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldEVsZW1lbnQoZWxlbWVudCwgc3R5bGUsIGlubmVyVGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHNrZXcgdmFsdWVzIG9mIHRoaXMgRE9NIEVsZW1lbnQuXHJcbiAgICAgKiBcclxuICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RyYW5zZm9ybVxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjc2V0U2tld1xyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSBhbmdsZSwgaW4gcmFkaWFucywgYnkgd2hpY2ggdG8gc2tldyB0aGUgRE9NIEVsZW1lbnQgb24gdGhlIGhvcml6b250YWwgYXhpcy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT14XSAtIFRoZSBhbmdsZSwgaW4gcmFkaWFucywgYnkgd2hpY2ggdG8gc2tldyB0aGUgRE9NIEVsZW1lbnQgb24gdGhlIHZlcnRpY2FsIGF4aXMuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRE9NIEVsZW1lbnQgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFNrZXc6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSB4OyB9XHJcblxyXG4gICAgICAgIHRoaXMuc2tld1ggPSB4O1xyXG4gICAgICAgIHRoaXMuc2tld1kgPSB5O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBwZXJzcGVjdGl2ZSBDU1MgcHJvcGVydHkgb2YgdGhlIF9wYXJlbnQgRE9NIENvbnRhaW5lcl8uIFRoaXMgZGV0ZXJtaW5lcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgej0wXHJcbiAgICAgKiBwbGFuZSBhbmQgdGhlIHVzZXIgaW4gb3JkZXIgdG8gZ2l2ZSBhIDNELXBvc2l0aW9uZWQgZWxlbWVudCBzb21lIHBlcnNwZWN0aXZlLiBFYWNoIDNEIGVsZW1lbnQgd2l0aFxyXG4gICAgICogeiA+IDAgYmVjb21lcyBsYXJnZXI7IGVhY2ggM0QtZWxlbWVudCB3aXRoIHogPCAwIGJlY29tZXMgc21hbGxlci4gVGhlIHN0cmVuZ3RoIG9mIHRoZSBlZmZlY3QgaXMgZGV0ZXJtaW5lZFxyXG4gICAgICogYnkgdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkuXHJcbiAgICAgKiBcclxuICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BlcnNwZWN0aXZlXHJcbiAgICAgKiBcclxuICAgICAqICoqQ2hhbmdpbmcgdGhpcyB2YWx1ZSBjaGFuZ2VzIGl0IGdsb2JhbGx5IGZvciBhbGwgRE9NIEVsZW1lbnRzLCBhcyB0aGV5IGFsbCBzaGFyZSB0aGUgc2FtZSBwYXJlbnQgY29udGFpbmVyLioqXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudCNzZXRQZXJzcGVjdGl2ZVxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBwZXJzcGVjdGl2ZSB2YWx1ZSwgaW4gcGl4ZWxzLCB0aGF0IGRldGVybWluZXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHogcGxhbmUgYW5kIHRoZSB1c2VyLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIERPTSBFbGVtZW50IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRQZXJzcGVjdGl2ZTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucGFyZW50LnN0eWxlLnBlcnNwZWN0aXZlID0gdmFsdWUgKyAncHgnO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcGVyc3BlY3RpdmUgQ1NTIHByb3BlcnR5IHZhbHVlIG9mIHRoZSBfcGFyZW50IERPTSBDb250YWluZXJfLiBUaGlzIGRldGVybWluZXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHo9MFxyXG4gICAgICogcGxhbmUgYW5kIHRoZSB1c2VyIGluIG9yZGVyIHRvIGdpdmUgYSAzRC1wb3NpdGlvbmVkIGVsZW1lbnQgc29tZSBwZXJzcGVjdGl2ZS4gRWFjaCAzRCBlbGVtZW50IHdpdGhcclxuICAgICAqIHogPiAwIGJlY29tZXMgbGFyZ2VyOyBlYWNoIDNELWVsZW1lbnQgd2l0aCB6IDwgMCBiZWNvbWVzIHNtYWxsZXIuIFRoZSBzdHJlbmd0aCBvZiB0aGUgZWZmZWN0IGlzIGRldGVybWluZWRcclxuICAgICAqIGJ5IHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5LlxyXG4gICAgICogXHJcbiAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9wZXJzcGVjdGl2ZVxyXG4gICAgICogXHJcbiAgICAgKiAqKkNoYW5naW5nIHRoaXMgdmFsdWUgY2hhbmdlcyBpdCBnbG9iYWxseSBmb3IgYWxsIERPTSBFbGVtZW50cywgYXMgdGhleSBhbGwgc2hhcmUgdGhlIHNhbWUgcGFyZW50IGNvbnRhaW5lci4qKlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudCNwZXJzcGVjdGl2ZVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqL1xyXG4gICAgcGVyc3BlY3RpdmU6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodGhpcy5wYXJlbnQuc3R5bGUucGVyc3BlY3RpdmUpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnQuc3R5bGUucGVyc3BlY3RpdmUgPSB2YWx1ZSArICdweCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIG9uZSBvciBtb3JlIG5hdGl2ZSBET00gZXZlbnQgbGlzdGVuZXJzIG9udG8gdGhlIHVuZGVybHlpbmcgRWxlbWVudCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogVGhlIGV2ZW50IGlzIHRoZW4gZGlzcGF0Y2hlZCB2aWEgdGhpcyBHYW1lIE9iamVjdHMgc3RhbmRhcmQgZXZlbnQgZW1pdHRlci5cclxuICAgICAqIFxyXG4gICAgICogRm9yIGV4YW1wbGU6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHZhciBkaXYgPSB0aGlzLmFkZC5kb20oeCwgeSwgZWxlbWVudCk7XHJcbiAgICAgKiBcclxuICAgICAqIGRpdi5hZGRMaXN0ZW5lcignY2xpY2snKTtcclxuICAgICAqIFxyXG4gICAgICogZGl2Lm9uKCdjbGljaycsIGhhbmRsZXIpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudCNhZGRMaXN0ZW5lclxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudHMgLSBUaGUgRE9NIGV2ZW50L3MgdG8gbGlzdGVuIGZvci4gWW91IGNhbiBzcGVjaWZ5IG11bHRpcGxlIGV2ZW50cyBieSBzZXBhcmF0aW5nIHRoZW0gd2l0aCBzcGFjZXMuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRE9NIEVsZW1lbnQgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGFkZExpc3RlbmVyOiBmdW5jdGlvbiAoZXZlbnRzKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLm5vZGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBldmVudHMgPSBldmVudHMuc3BsaXQoJyAnKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldmVudHNbaV0sIHRoaXMuaGFuZGxlciwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIG9uZSBvciBtb3JlIG5hdGl2ZSBET00gZXZlbnQgbGlzdGVuZXJzIGZyb20gdGhlIHVuZGVybHlpbmcgRWxlbWVudCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjcmVtb3ZlTGlzdGVuZXJcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRzIC0gVGhlIERPTSBldmVudC9zIHRvIHN0b3AgbGlzdGVuaW5nIGZvci4gWW91IGNhbiBzcGVjaWZ5IG11bHRpcGxlIGV2ZW50cyBieSBzZXBhcmF0aW5nIHRoZW0gd2l0aCBzcGFjZXMuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRE9NIEVsZW1lbnQgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUxpc3RlbmVyOiBmdW5jdGlvbiAoZXZlbnRzKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLm5vZGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBldmVudHMgPSBldmVudHMuc3BsaXQoJyAnKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudHNbaV0sIHRoaXMuaGFuZGxlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIGV2ZW50IHByb3h5IHRvIGRpc3BhdGNoIG5hdGl2ZSBET00gRXZlbnRzIHZpYSB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjZGlzcGF0Y2hOYXRpdmVFdmVudFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gZXZlbnQgLSBUaGUgbmF0aXZlIERPTSBldmVudC5cclxuICAgICAqL1xyXG4gICAgZGlzcGF0Y2hOYXRpdmVFdmVudDogZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZW1pdChldmVudC50eXBlLCBldmVudCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5hdGl2ZSBET00gRWxlbWVudCwgYWRkcyBpdCB0byB0aGUgcGFyZW50IERPTSBDb250YWluZXIgYW5kIHRoZW4gYmluZHMgaXQgdG8gdGhpcyBHYW1lIE9iamVjdCxcclxuICAgICAqIHNvIHlvdSBjYW4gY29udHJvbCBpdC4gVGhlIGB0YWdOYW1lYCBzaG91bGQgYmUgYSBzdHJpbmcgYW5kIGlzIHBhc3NlZCB0byBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudGA6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMuYWRkLmRvbSgpLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIEZvciBtb3JlIGRldGFpbHMgb24gYWNjZXB0YWJsZSB0YWcgbmFtZXMgc2VlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRG9jdW1lbnQvY3JlYXRlRWxlbWVudFxyXG4gICAgICogXHJcbiAgICAgKiBZb3UgY2FuIGFsc28gcGFzcyBpbiBhIERPTVN0cmluZyBvciBzdHlsZSBvYmplY3QgdG8gc2V0IHRoZSBDU1Mgb24gdGhlIGNyZWF0ZWQgZWxlbWVudCwgYW5kIGFuIG9wdGlvbmFsIGBpbm5lclRleHRgXHJcbiAgICAgKiB2YWx1ZSBhcyB3ZWxsLiBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgYSBET01TdHJpbmc6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMuYWRkLmRvbSgpLmNyZWF0ZUVsZW1lbnQoJ2RpdicsICdiYWNrZ3JvdW5kLWNvbG9yOiBsaW1lOyB3aWR0aDogMjIwcHg7IGhlaWdodDogMTAwcHg7IGZvbnQ6IDQ4cHggQXJpYWwnLCAnUGhhc2VyJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogQW5kIHVzaW5nIGEgc3R5bGUgb2JqZWN0OlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB2YXIgc3R5bGUgPSB7XHJcbiAgICAgKiAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJ2xpbWUnO1xyXG4gICAgICogICAnd2lkdGgnOiAnMjAwcHgnO1xyXG4gICAgICogICAnaGVpZ2h0JzogJzEwMHB4JztcclxuICAgICAqICAgJ2ZvbnQnOiAnNDhweCBBcmlhbCc7XHJcbiAgICAgKiB9O1xyXG4gICAgICogXHJcbiAgICAgKiB0aGlzLmFkZC5kb20oKS5jcmVhdGVFbGVtZW50KCdkaXYnLCBzdHlsZSwgJ1BoYXNlcicpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoaXMgR2FtZSBPYmplY3QgYWxyZWFkeSBoYXMgYW4gRWxlbWVudCwgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBET00gZW50aXJlbHkgZmlyc3QuXHJcbiAgICAgKiBBbnkgZXZlbnQgbGlzdGVuZXJzIHlvdSBtYXkgaGF2ZSBwcmV2aW91c2x5IGNyZWF0ZWQgd2lsbCBuZWVkIHRvIGJlIHJlLWNyZWF0ZWQgYWZ0ZXIgdGhpcyBjYWxsLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjY3JlYXRlRWxlbWVudFxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lIC0gQSBzdHJpbmcgdGhhdCBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgZWxlbWVudCB0byBiZSBjcmVhdGVkLiBUaGUgbm9kZU5hbWUgb2YgdGhlIGNyZWF0ZWQgZWxlbWVudCBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSB2YWx1ZSBvZiB0YWdOYW1lLiBEb24ndCB1c2UgcXVhbGlmaWVkIG5hbWVzIChsaWtlIFwiaHRtbDphXCIpIHdpdGggdGhpcyBtZXRob2QuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8YW55KX0gW3N0eWxlXSAtIEVpdGhlciBhIERPTVN0cmluZyB0aGF0IGhvbGRzIHRoZSBDU1Mgc3R5bGVzIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGNyZWF0ZWQgZWxlbWVudCwgb3IgYW4gb2JqZWN0IHRoZSBzdHlsZXMgd2lsbCBiZSByZWFkeSBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtpbm5lclRleHRdIC0gQSBET01TdHJpbmcgdGhhdCBob2xkcyB0aGUgdGV4dCB0aGF0IHdpbGwgYmUgc2V0IGFzIHRoZSBpbm5lclRleHQgb2YgdGhlIGNyZWF0ZWQgZWxlbWVudC5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBET00gRWxlbWVudCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgY3JlYXRlRWxlbWVudDogZnVuY3Rpb24gKHRhZ05hbWUsIHN0eWxlLCBpbm5lclRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0RWxlbWVudChkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpLCBzdHlsZSwgaW5uZXJUZXh0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCaW5kcyBhIG5ldyBET00gRWxlbWVudCB0byB0aGlzIEdhbWUgT2JqZWN0LiBJZiB0aGlzIEdhbWUgT2JqZWN0IGFscmVhZHkgaGFzIGFuIEVsZW1lbnQgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBET01cclxuICAgICAqIGVudGlyZWx5IGZpcnN0LiBBbnkgZXZlbnQgbGlzdGVuZXJzIHlvdSBtYXkgaGF2ZSBwcmV2aW91c2x5IGNyZWF0ZWQgd2lsbCBuZWVkIHRvIGJlIHJlLWNyZWF0ZWQgb24gdGhlIG5ldyBlbGVtZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgYGVsZW1lbnRgIGFyZ3VtZW50IHlvdSBwYXNzIHRvIHRoaXMgbWV0aG9kIGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgdGFnTmFtZTpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogPGgxIGlkPVwiaGVhZGluZ1wiPlBoYXNlcjwvaDE+XHJcbiAgICAgKlxyXG4gICAgICogdGhpcy5hZGQuZG9tKCkuc2V0RWxlbWVudCgnaGVhZGluZycpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIE9yIGEgcmVmZXJlbmNlIHRvIGFuIEVsZW1lbnQgaW5zdGFuY2U6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIDxoMSBpZD1cImhlYWRpbmdcIj5QaGFzZXI8L2gxPlxyXG4gICAgICpcclxuICAgICAqIHZhciBoMSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZWFkaW5nJyk7XHJcbiAgICAgKiBcclxuICAgICAqIHRoaXMuYWRkLmRvbSgpLnNldEVsZW1lbnQoaDEpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBjYW4gYWxzbyBwYXNzIGluIGEgRE9NU3RyaW5nIG9yIHN0eWxlIG9iamVjdCB0byBzZXQgdGhlIENTUyBvbiB0aGUgY3JlYXRlZCBlbGVtZW50LCBhbmQgYW4gb3B0aW9uYWwgYGlubmVyVGV4dGBcclxuICAgICAqIHZhbHVlIGFzIHdlbGwuIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIERPTVN0cmluZzpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy5hZGQuZG9tKCkuc2V0RWxlbWVudChoMSwgJ2JhY2tncm91bmQtY29sb3I6IGxpbWU7IHdpZHRoOiAyMjBweDsgaGVpZ2h0OiAxMDBweDsgZm9udDogNDhweCBBcmlhbCcsICdQaGFzZXInKTtcclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiBBbmQgdXNpbmcgYSBzdHlsZSBvYmplY3Q6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHZhciBzdHlsZSA9IHtcclxuICAgICAqICAgJ2JhY2tncm91bmQtY29sb3InOiAnbGltZSc7XHJcbiAgICAgKiAgICd3aWR0aCc6ICcyMDBweCc7XHJcbiAgICAgKiAgICdoZWlnaHQnOiAnMTAwcHgnO1xyXG4gICAgICogICAnZm9udCc6ICc0OHB4IEFyaWFsJztcclxuICAgICAqIH07XHJcbiAgICAgKiBcclxuICAgICAqIHRoaXMuYWRkLmRvbSgpLnNldEVsZW1lbnQoaDEsIHN0eWxlLCAnUGhhc2VyJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5ET01FbGVtZW50I3NldEVsZW1lbnRcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8RWxlbWVudCl9IGVsZW1lbnQgLSBJZiBhIHN0cmluZyBpdCBpcyBwYXNzZWQgdG8gYGdldEVsZW1lbnRCeUlkKClgLCBvciBpdCBzaG91bGQgYmUgYSByZWZlcmVuY2UgdG8gYW4gZXhpc3RpbmcgRWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xhbnkpfSBbc3R5bGVdIC0gRWl0aGVyIGEgRE9NU3RyaW5nIHRoYXQgaG9sZHMgdGhlIENTUyBzdHlsZXMgdG8gYmUgYXBwbGllZCB0byB0aGUgY3JlYXRlZCBlbGVtZW50LCBvciBhbiBvYmplY3QgdGhlIHN0eWxlcyB3aWxsIGJlIHJlYWR5IGZyb20uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2lubmVyVGV4dF0gLSBBIERPTVN0cmluZyB0aGF0IGhvbGRzIHRoZSB0ZXh0IHRoYXQgd2lsbCBiZSBzZXQgYXMgdGhlIGlubmVyVGV4dCBvZiB0aGUgY3JlYXRlZCBlbGVtZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIERPTSBFbGVtZW50IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRFbGVtZW50OiBmdW5jdGlvbiAoZWxlbWVudCwgc3R5bGUsIGlubmVyVGV4dClcclxuICAgIHtcclxuICAgICAgICAvLyAgQWxyZWFkeSBnb3QgYW4gZWxlbWVudD8gUmVtb3ZlIGl0IGZpcnN0XHJcbiAgICAgICAgdGhpcy5yZW1vdmVFbGVtZW50KCk7XHJcblxyXG4gICAgICAgIHZhciB0YXJnZXQ7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgaGFzaD9cclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRbMF0gPT09ICcjJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQuc3Vic3RyKDEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdvYmplY3QnICYmIGVsZW1lbnQubm9kZVR5cGUgPT09IDEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0YXJnZXQgPSBlbGVtZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0YXJnZXQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubm9kZSA9IHRhcmdldDtcclxuXHJcbiAgICAgICAgLy8gIHN0eWxlIGNhbiBiZSBlbXB0eSwgYSBzdHJpbmcgb3IgYSBwbGFpbiBvYmplY3RcclxuICAgICAgICBpZiAoc3R5bGUgJiYgSXNQbGFpbk9iamVjdChzdHlsZSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gc3R5bGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zdHlsZVtrZXldID0gc3R5bGVba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygc3R5bGUgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGFyZ2V0LnN0eWxlID0gc3R5bGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgQWRkIC8gT3ZlcnJpZGUgdGhlIHZhbHVlcyB3ZSBuZWVkXHJcblxyXG4gICAgICAgIHRhcmdldC5zdHlsZS56SW5kZXggPSAnMCc7XHJcbiAgICAgICAgdGFyZ2V0LnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJztcclxuICAgICAgICB0YXJnZXQuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG5cclxuICAgICAgICAvLyAgTm9kZSBoYW5kbGVyXHJcblxyXG4gICAgICAgIHRhcmdldC5waGFzZXIgPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wYXJlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0YXJnZXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIElubmVyVGV4dFxyXG5cclxuICAgICAgICBpZiAoaW5uZXJUZXh0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGFyZ2V0LmlubmVyVGV4dCA9IGlubmVyVGV4dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVNpemUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIGJsb2NrIG9mIGh0bWwgZnJvbSB0aGUgSFRNTCBDYWNoZSwgdGhhdCBoYXMgcHJldmlvdXNseSBiZWVuIHByZWxvYWRlZCBpbnRvIHRoZSBnYW1lLCBhbmQgdGhlblxyXG4gICAgICogY3JlYXRlcyBhIERPTSBFbGVtZW50IGZyb20gaXQuIFRoZSBsb2FkZWQgSFRNTCBpcyBzZXQgYXMgdGhlIGBpbm5lckhUTUxgIHByb3BlcnR5IG9mIHRoZSBjcmVhdGVkXHJcbiAgICAgKiBlbGVtZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBBc3N1bWUgdGhlIGZvbGxvd2luZyBodG1sIGlzIHN0b3JlZCBpbiBhIGZpbGUgY2FsbGVkIGBsb2dpbmZvcm0uaHRtbGA6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGh0bWxcclxuICAgICAqIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJuYW1lRmllbGRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgbmFtZVwiIHN0eWxlPVwiZm9udC1zaXplOiAzMnB4XCI+XHJcbiAgICAgKiA8aW5wdXQgdHlwZT1cImJ1dHRvblwiIG5hbWU9XCJwbGF5QnV0dG9uXCIgdmFsdWU9XCJMZXQncyBQbGF5XCIgc3R5bGU9XCJmb250LXNpemU6IDMycHhcIj5cclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiBXaGljaCBpcyBsb2FkZWQgaW50byB5b3VyIGdhbWUgdXNpbmcgdGhlIGNhY2hlIGtleSAnbG9naW4nOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB0aGlzLmxvYWQuaHRtbCgnbG9naW4nLCAnYXNzZXRzL2xvZ2luZm9ybS5odG1sJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogWW91IGNhbiBjcmVhdGUgYSBET00gRWxlbWVudCBmcm9tIGl0IHVzaW5nIHRoZSBjYWNoZSBrZXk6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMuYWRkLmRvbSgpLmNyZWF0ZUZyb21DYWNoZSgnbG9naW4nKTtcclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgb3B0aW9uYWwgYGVsZW1lbnRUeXBlYCBhcmd1bWVudCBjb250cm9scyB0aGUgY29udGFpbmVyIHRoYXQgaXMgY3JlYXRlZCwgaW50byB3aGljaCB0aGUgbG9hZGVkIGh0bWwgaXMgaW5zZXJ0ZWQuXHJcbiAgICAgKiBUaGUgZGVmYXVsdCBpcyBhIHBsYWluIGBkaXZgIG9iamVjdCwgYnV0IGFueSB2YWxpZCB0YWdOYW1lIGNhbiBiZSBnaXZlbi5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhpcyBHYW1lIE9iamVjdCBhbHJlYWR5IGhhcyBhbiBFbGVtZW50LCBpdCBpcyByZW1vdmVkIGZyb20gdGhlIERPTSBlbnRpcmVseSBmaXJzdC5cclxuICAgICAqIEFueSBldmVudCBsaXN0ZW5lcnMgeW91IG1heSBoYXZlIHByZXZpb3VzbHkgY3JlYXRlZCB3aWxsIG5lZWQgdG8gYmUgcmUtY3JlYXRlZCBhZnRlciB0aGlzIGNhbGwuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudCNjcmVhdGVGcm9tQ2FjaGVcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFRoZSBrZXkgb2YgdGhlIGh0bWwgY2FjaGUgZW50cnkgdG8gdXNlIGZvciB0aGlzIERPTSBFbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0YWdOYW1lPSdkaXYnXSAtIFRoZSB0YWcgbmFtZSBvZiB0aGUgZWxlbWVudCBpbnRvIHdoaWNoIGFsbCBvZiB0aGUgbG9hZGVkIGh0bWwgd2lsbCBiZSBpbnNlcnRlZC4gRGVmYXVsdHMgdG8gYSBwbGFpbiBkaXYgdGFnLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIERPTSBFbGVtZW50IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBjcmVhdGVGcm9tQ2FjaGU6IGZ1bmN0aW9uIChrZXksIHRhZ05hbWUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGh0bWwgPSB0aGlzLmNhY2hlLmdldChrZXkpO1xyXG5cclxuICAgICAgICBpZiAoaHRtbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRnJvbUhUTUwoaHRtbCwgdGFnTmFtZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIHN0cmluZyBvZiBodG1sIGFuZCB0aGVuIGNyZWF0ZXMgYSBET00gRWxlbWVudCBmcm9tIGl0LiBUaGUgSFRNTCBpcyBzZXQgYXMgdGhlIGBpbm5lckhUTUxgXHJcbiAgICAgKiBwcm9wZXJ0eSBvZiB0aGUgY3JlYXRlZCBlbGVtZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBsZXQgZm9ybSA9IGBcclxuICAgICAqIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJuYW1lRmllbGRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgbmFtZVwiIHN0eWxlPVwiZm9udC1zaXplOiAzMnB4XCI+XHJcbiAgICAgKiA8aW5wdXQgdHlwZT1cImJ1dHRvblwiIG5hbWU9XCJwbGF5QnV0dG9uXCIgdmFsdWU9XCJMZXQncyBQbGF5XCIgc3R5bGU9XCJmb250LXNpemU6IDMycHhcIj5cclxuICAgICAqIGA7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogWW91IGNhbiBjcmVhdGUgYSBET00gRWxlbWVudCBmcm9tIGl0IHVzaW5nIHRoZSBzdHJpbmc6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMuYWRkLmRvbSgpLmNyZWF0ZUZyb21IVE1MKGZvcm0pO1xyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBvcHRpb25hbCBgZWxlbWVudFR5cGVgIGFyZ3VtZW50IGNvbnRyb2xzIHRoZSB0eXBlIG9mIGNvbnRhaW5lciB0aGF0IGlzIGNyZWF0ZWQsIGludG8gd2hpY2ggdGhlIGh0bWwgaXMgaW5zZXJ0ZWQuXHJcbiAgICAgKiBUaGUgZGVmYXVsdCBpcyBhIHBsYWluIGBkaXZgIG9iamVjdCwgYnV0IGFueSB2YWxpZCB0YWdOYW1lIGNhbiBiZSBnaXZlbi5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhpcyBHYW1lIE9iamVjdCBhbHJlYWR5IGhhcyBhbiBFbGVtZW50LCBpdCBpcyByZW1vdmVkIGZyb20gdGhlIERPTSBlbnRpcmVseSBmaXJzdC5cclxuICAgICAqIEFueSBldmVudCBsaXN0ZW5lcnMgeW91IG1heSBoYXZlIHByZXZpb3VzbHkgY3JlYXRlZCB3aWxsIG5lZWQgdG8gYmUgcmUtY3JlYXRlZCBhZnRlciB0aGlzIGNhbGwuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudCNjcmVhdGVGcm9tSFRNTFxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gQSBzdHJpbmcgb2YgaHRtbCB0byBiZSBzZXQgYXMgdGhlIGBpbm5lckhUTUxgIHByb3BlcnR5IG9mIHRoZSBjcmVhdGVkIGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3RhZ05hbWU9J2RpdiddIC0gVGhlIHRhZyBuYW1lIG9mIHRoZSBlbGVtZW50IGludG8gd2hpY2ggYWxsIG9mIHRoZSBodG1sIHdpbGwgYmUgaW5zZXJ0ZWQuIERlZmF1bHRzIHRvIGEgcGxhaW4gZGl2IHRhZy5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBET00gRWxlbWVudCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgY3JlYXRlRnJvbUhUTUw6IGZ1bmN0aW9uIChodG1sLCB0YWdOYW1lKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0YWdOYW1lID09PSB1bmRlZmluZWQpIHsgdGFnTmFtZSA9ICdkaXYnOyB9XHJcblxyXG4gICAgICAgIC8vICBBbHJlYWR5IGdvdCBhbiBlbGVtZW50PyBSZW1vdmUgaXQgZmlyc3RcclxuICAgICAgICB0aGlzLnJlbW92ZUVsZW1lbnQoKTtcclxuXHJcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xyXG5cclxuICAgICAgICB0aGlzLm5vZGUgPSBlbGVtZW50O1xyXG5cclxuICAgICAgICBlbGVtZW50LnN0eWxlLnpJbmRleCA9ICcwJztcclxuICAgICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJztcclxuICAgICAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuXHJcbiAgICAgICAgLy8gIE5vZGUgaGFuZGxlclxyXG5cclxuICAgICAgICBlbGVtZW50LnBoYXNlciA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBhcmVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBodG1sO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVTaXplKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgY3VycmVudCBET00gRWxlbWVudCBib3VuZCB0byB0aGlzIEdhbWUgT2JqZWN0IGZyb20gdGhlIERPTSBlbnRpcmVseSBhbmQgcmVzZXRzIHRoZVxyXG4gICAgICogYG5vZGVgIHByb3BlcnR5IG9mIHRoaXMgR2FtZSBPYmplY3QgdG8gYmUgYG51bGxgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjcmVtb3ZlRWxlbWVudFxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIERPTSBFbGVtZW50IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICByZW1vdmVFbGVtZW50OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLm5vZGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBSZW1vdmVGcm9tRE9NKHRoaXMubm9kZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vZGUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRoYXQgY2FsbHMgYGdldEJvdW5kaW5nQ2xpZW50UmVjdGAgb24gdGhlIGBub2RlYCBhbmQgdGhlbiBzZXRzIHRoZSBib3VuZHMgd2lkdGhcclxuICAgICAqIGFuZCBoZWlnaHQgaW50byB0aGUgYGRpc3BsYXlXaWR0aGAgYW5kIGBkaXNwbGF5SGVpZ2h0YCBwcm9wZXJ0aWVzLCBhbmQgdGhlIGBjbGllbnRXaWR0aGAgYW5kIGBjbGllbnRIZWlnaHRgXHJcbiAgICAgKiB2YWx1ZXMgaW50byB0aGUgYHdpZHRoYCBhbmQgYGhlaWdodGAgcHJvcGVydGllcyByZXNwZWN0aXZlbHkuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbmV2ZXIgYSBuZXcgZWxlbWVudCBpcyBjcmVhdGVkIG9yIHNldC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5ET01FbGVtZW50I3VwZGF0ZVNpemVcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBET00gRWxlbWVudCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlU2l6ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgbm9kZSA9IHRoaXMubm9kZTtcclxuXHJcbiAgICAgICAgdmFyIG5vZGVCb3VuZHMgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgICAgICB0aGlzLndpZHRoID0gbm9kZS5jbGllbnRXaWR0aDtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IG5vZGUuY2xpZW50SGVpZ2h0O1xyXG5cclxuICAgICAgICB0aGlzLmRpc3BsYXlXaWR0aCA9IG5vZGVCb3VuZHMud2lkdGggfHwgMDtcclxuICAgICAgICB0aGlzLmRpc3BsYXlIZWlnaHQgPSBub2RlQm91bmRzLmhlaWdodCB8fCAwO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBjaGlsZHJlbiBmcm9tIHRoaXMgRE9NIEVsZW1lbnRzIG5vZGUsIHVzaW5nIGBxdWVyeVNlbGVjdG9yQWxsKCcqJylgIGFuZCB0aGVuIGl0ZXJhdGVzIHRocm91Z2hcclxuICAgICAqIHRoZW0sIGxvb2tpbmcgZm9yIHRoZSBmaXJzdCBvbmUgdGhhdCBoYXMgYSBwcm9wZXJ0eSBtYXRjaGluZyB0aGUgZ2l2ZW4ga2V5IGFuZCB2YWx1ZS4gSXQgdGhlbiByZXR1cm5zIHRoaXMgY2hpbGRcclxuICAgICAqIGlmIGZvdW5kLCBvciBgbnVsbGAgaWYgbm90LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjZ2V0Q2hpbGRCeVByb3BlcnR5XHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSB0byBzZWFyY2ggdGhlIGNoaWxkcmVuIGZvci5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0aGUgcHJvcGVydHkgbXVzdCBzdHJpY3RseSBlcXVhbC5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7P0VsZW1lbnR9IFRoZSBmaXJzdCBtYXRjaGluZyBjaGlsZCBET00gRWxlbWVudCwgb3IgYG51bGxgIGlmIG5vdCBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgZ2V0Q2hpbGRCeVByb3BlcnR5OiBmdW5jdGlvbiAocHJvcGVydHksIHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLm5vZGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLm5vZGUucXVlcnlTZWxlY3RvckFsbCgnKicpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldW3Byb3BlcnR5XSA9PT0gdmFsdWUpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBjaGlsZHJlbiBmcm9tIHRoaXMgRE9NIEVsZW1lbnRzIG5vZGUsIHVzaW5nIGBxdWVyeVNlbGVjdG9yQWxsKCcqJylgIGFuZCB0aGVuIGl0ZXJhdGVzIHRocm91Z2hcclxuICAgICAqIHRoZW0sIGxvb2tpbmcgZm9yIHRoZSBmaXJzdCBvbmUgdGhhdCBoYXMgYSBtYXRjaGluZyBpZC4gSXQgdGhlbiByZXR1cm5zIHRoaXMgY2hpbGQgaWYgZm91bmQsIG9yIGBudWxsYCBpZiBub3QuXHJcbiAgICAgKiBcclxuICAgICAqIEJlIGF3YXJlIHRoYXQgY2xhc3MgYW5kIGlkIG5hbWVzIGFyZSBjYXNlLXNlbnNpdGl2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5ET01FbGVtZW50I2dldENoaWxkQnlJRFxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBUaGUgaWQgdG8gc2VhcmNoIHRoZSBjaGlsZHJlbiBmb3IuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4gez9FbGVtZW50fSBUaGUgZmlyc3QgbWF0Y2hpbmcgY2hpbGQgRE9NIEVsZW1lbnQsIG9yIGBudWxsYCBpZiBub3QgZm91bmQuXHJcbiAgICAgKi9cclxuICAgIGdldENoaWxkQnlJRDogZnVuY3Rpb24gKGlkKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldENoaWxkQnlQcm9wZXJ0eSgnaWQnLCBpZCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgY2hpbGRyZW4gZnJvbSB0aGlzIERPTSBFbGVtZW50cyBub2RlLCB1c2luZyBgcXVlcnlTZWxlY3RvckFsbCgnKicpYCBhbmQgdGhlbiBpdGVyYXRlcyB0aHJvdWdoXHJcbiAgICAgKiB0aGVtLCBsb29raW5nIGZvciB0aGUgZmlyc3Qgb25lIHRoYXQgaGFzIGEgbWF0Y2hpbmcgbmFtZS4gSXQgdGhlbiByZXR1cm5zIHRoaXMgY2hpbGQgaWYgZm91bmQsIG9yIGBudWxsYCBpZiBub3QuXHJcbiAgICAgKiBcclxuICAgICAqIEJlIGF3YXJlIHRoYXQgY2xhc3MgYW5kIGlkIG5hbWVzIGFyZSBjYXNlLXNlbnNpdGl2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5ET01FbGVtZW50I2dldENoaWxkQnlOYW1lXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgdG8gc2VhcmNoIHRoZSBjaGlsZHJlbiBmb3IuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4gez9FbGVtZW50fSBUaGUgZmlyc3QgbWF0Y2hpbmcgY2hpbGQgRE9NIEVsZW1lbnQsIG9yIGBudWxsYCBpZiBub3QgZm91bmQuXHJcbiAgICAgKi9cclxuICAgIGdldENoaWxkQnlOYW1lOiBmdW5jdGlvbiAobmFtZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRDaGlsZEJ5UHJvcGVydHkoJ25hbWUnLCBuYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBgY2xhc3NOYW1lYCBwcm9wZXJ0eSBvZiB0aGUgRE9NIEVsZW1lbnQgbm9kZSBhbmQgdXBkYXRlcyB0aGUgaW50ZXJuYWwgc2l6ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudCNzZXRDbGFzc05hbWVcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSAtIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY2xhc3Mgb3Igc3BhY2Utc2VwYXJhdGVkIGNsYXNzZXMgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRE9NIEVsZW1lbnQgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldENsYXNzTmFtZTogZnVuY3Rpb24gKGNsYXNzTmFtZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5ub2RlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2l6ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYGlubmVyVGV4dGAgcHJvcGVydHkgb2YgdGhlIERPTSBFbGVtZW50IG5vZGUgYW5kIHVwZGF0ZXMgdGhlIGludGVybmFsIHNpemVzLlxyXG4gICAgICogXHJcbiAgICAgKiBOb3RlIHRoYXQgb25seSBjZXJ0YWluIHR5cGVzIG9mIEVsZW1lbnRzIGNhbiBoYXZlIGBpbm5lclRleHRgIHNldCBvbiB0aGVtLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjc2V0VGV4dFxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIEEgRE9NU3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcmVuZGVyZWQgdGV4dCBjb250ZW50IG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIERPTSBFbGVtZW50IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiAodGV4dClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5ub2RlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmlubmVyVGV4dCA9IHRleHQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNpemUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGBpbm5lckhUTUxgIHByb3BlcnR5IG9mIHRoZSBET00gRWxlbWVudCBub2RlIGFuZCB1cGRhdGVzIHRoZSBpbnRlcm5hbCBzaXplcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5ET01FbGVtZW50I3NldEhUTUxcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGh0bWwgLSBBIERPTVN0cmluZyBvZiBodG1sIHRvIGJlIHNldCBhcyB0aGUgYGlubmVySFRNTGAgcHJvcGVydHkgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgRE9NIEVsZW1lbnQgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEhUTUw6IGZ1bmN0aW9uIChodG1sKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLm5vZGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuaW5uZXJIVE1MID0gaHRtbDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2l6ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUnVucyBpbnRlcm5hbCB1cGRhdGUgdGFza3MuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudCNwcmVVcGRhdGVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKi9cclxuICAgIHByZVVwZGF0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnRDb250YWluZXI7XHJcbiAgICAgICAgdmFyIG5vZGUgPSB0aGlzLm5vZGU7XHJcblxyXG4gICAgICAgIGlmIChub2RlICYmIHBhcmVudCAmJiAhcGFyZW50LndpbGxSZW5kZXIoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG5vZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29tcGFyZXMgdGhlIHJlbmRlck1hc2sgd2l0aCB0aGUgcmVuZGVyRmxhZ3MgdG8gc2VlIGlmIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCByZW5kZXIgb3Igbm90LlxyXG4gICAgICogXHJcbiAgICAgKiBET01FbGVtZW50cyBhbHdheXMgcmV0dXJuIGB0cnVlYCBhcyB0aGV5IG5lZWQgdG8gc3RpbGwgc2V0IHZhbHVlcyBkdXJpbmcgdGhlIHJlbmRlciBwYXNzLCBldmVuIGlmIG5vdCB2aXNpYmxlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnQjd2lsbFJlbmRlclxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgR2FtZSBPYmplY3Qgc2hvdWxkIGJlIHJlbmRlcmVkLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgd2lsbFJlbmRlcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGVzIHRoZSBwcmUtZGVzdHJveSBzdGVwIGZvciB0aGUgRE9NIEVsZW1lbnQsIHdoaWNoIHJlbW92ZXMgdGhlIHVuZGVybHlpbmcgbm9kZSBmcm9tIHRoZSBET00uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudCNwcmVEZXN0cm95XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICovXHJcbiAgICBwcmVEZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlRWxlbWVudCgpO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IERPTUVsZW1lbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/domelement/DOMElement.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/domelement/DOMElementCSSRenderer.js":
/*!*********************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/domelement/DOMElementCSSRenderer.js ***!
\*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CSSBlendModes = __webpack_require__(/*! ./CSSBlendModes */ \"./node_modules/phaser/src/gameobjects/domelement/CSSBlendModes.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.DOMElement#renderWebGL\r\n * @since 3.17.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active renderer.\r\n * @param {Phaser.GameObjects.DOMElement} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar DOMElementCSSRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var node = src.node;\r\n var style = node.style;\r\n\r\n if (!node || !style || GameObject.RENDER_MASK !== src.renderFlags || (src.cameraFilter !== 0 && (src.cameraFilter & camera.id)) || (src.parentContainer && !src.parentContainer.willRender()))\r\n {\r\n if (node)\r\n {\r\n style.display = 'none';\r\n }\r\n \r\n return;\r\n }\r\n\r\n var parent = src.parentContainer;\r\n var alpha = camera.alpha * src.alpha;\r\n\r\n if (parent)\r\n {\r\n alpha *= parent.alpha;\r\n }\r\n\r\n var camMatrix = renderer._tempMatrix1;\r\n var srcMatrix = renderer._tempMatrix2;\r\n var calcMatrix = renderer._tempMatrix3;\r\n\r\n var dx = 0;\r\n var dy = 0;\r\n\r\n var tx = '0%';\r\n var ty = '0%';\r\n\r\n if (parentMatrix)\r\n {\r\n dx = (src.width * src.scaleX) * src.originX;\r\n dy = (src.height * src.scaleY) * src.originY;\r\n\r\n srcMatrix.applyITRS(src.x - dx, src.y - dy, src.rotation, src.scaleX, src.scaleY);\r\n\r\n camMatrix.copyFrom(camera.matrix);\r\n\r\n // Multiply the camera by the parent matrix\r\n camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n // Undo the camera scroll\r\n srcMatrix.e = src.x - dx;\r\n srcMatrix.f = src.y - dy;\r\n\r\n // Multiply by the src matrix, store result in calcMatrix\r\n camMatrix.multiply(srcMatrix, calcMatrix);\r\n }\r\n else\r\n {\r\n dx = (src.width) * src.originX;\r\n dy = (src.height) * src.originY;\r\n \r\n srcMatrix.applyITRS(src.x - dx, src.y - dy, src.rotation, src.scaleX, src.scaleY);\r\n \r\n camMatrix.copyFrom(camera.matrix);\r\n\r\n tx = (100 * src.originX) + '%';\r\n ty = (100 * src.originY) + '%';\r\n\r\n srcMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n srcMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n\r\n // Multiply by the src matrix, store result in calcMatrix\r\n camMatrix.multiply(srcMatrix, calcMatrix);\r\n }\r\n\r\n if (!src.transformOnly)\r\n {\r\n style.display = 'block';\r\n style.opacity = alpha;\r\n style.zIndex = src._depth;\r\n style.pointerEvents = 'auto';\r\n style.mixBlendMode = CSSBlendModes[src._blendMode];\r\n }\r\n\r\n // https://developer.mozilla.org/en-US/docs/Web/CSS/transform\r\n\r\n style.transform =\r\n calcMatrix.getCSSMatrix() +\r\n ' skew(' + src.skewX + 'rad, ' + src.skewY + 'rad)' +\r\n ' rotate3d(' + src.rotate3d.x + ',' + src.rotate3d.y + ',' + src.rotate3d.z + ',' + src.rotate3d.w + src.rotate3dAngle + ')';\r\n\r\n style.transformOrigin = tx + ' ' + ty;\r\n};\r\n\r\nmodule.exports = DOMElementCSSRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9kb21lbGVtZW50L0RPTUVsZW1lbnRDU1NSZW5kZXJlci5qcz8zN2ZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQywwRkFBaUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsMEVBQWU7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2RvbWVsZW1lbnQvRE9NRWxlbWVudENTU1JlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ1NTQmxlbmRNb2RlcyA9IHJlcXVpcmUoJy4vQ1NTQmxlbmRNb2RlcycpO1xyXG52YXIgR2FtZU9iamVjdCA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3QnKTtcclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5ET01FbGVtZW50I3JlbmRlcldlYkdMXHJcbiAqIEBzaW5jZSAzLjE3LjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgcmVuZGVyZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkRPTUVsZW1lbnR9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBET01FbGVtZW50Q1NTUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgbm9kZSA9IHNyYy5ub2RlO1xyXG4gICAgdmFyIHN0eWxlID0gbm9kZS5zdHlsZTtcclxuXHJcbiAgICBpZiAoIW5vZGUgfHwgIXN0eWxlIHx8IEdhbWVPYmplY3QuUkVOREVSX01BU0sgIT09IHNyYy5yZW5kZXJGbGFncyB8fCAoc3JjLmNhbWVyYUZpbHRlciAhPT0gMCAmJiAoc3JjLmNhbWVyYUZpbHRlciAmIGNhbWVyYS5pZCkpIHx8IChzcmMucGFyZW50Q29udGFpbmVyICYmICFzcmMucGFyZW50Q29udGFpbmVyLndpbGxSZW5kZXIoKSkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG5vZGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHBhcmVudCA9IHNyYy5wYXJlbnRDb250YWluZXI7XHJcbiAgICB2YXIgYWxwaGEgPSBjYW1lcmEuYWxwaGEgKiBzcmMuYWxwaGE7XHJcblxyXG4gICAgaWYgKHBhcmVudClcclxuICAgIHtcclxuICAgICAgICBhbHBoYSAqPSBwYXJlbnQuYWxwaGE7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGNhbU1hdHJpeCA9IHJlbmRlcmVyLl90ZW1wTWF0cml4MTtcclxuICAgIHZhciBzcmNNYXRyaXggPSByZW5kZXJlci5fdGVtcE1hdHJpeDI7XHJcbiAgICB2YXIgY2FsY01hdHJpeCA9IHJlbmRlcmVyLl90ZW1wTWF0cml4MztcclxuXHJcbiAgICB2YXIgZHggPSAwO1xyXG4gICAgdmFyIGR5ID0gMDtcclxuXHJcbiAgICB2YXIgdHggPSAnMCUnO1xyXG4gICAgdmFyIHR5ID0gJzAlJztcclxuXHJcbiAgICBpZiAocGFyZW50TWF0cml4KVxyXG4gICAge1xyXG4gICAgICAgIGR4ID0gKHNyYy53aWR0aCAqIHNyYy5zY2FsZVgpICogc3JjLm9yaWdpblg7XHJcbiAgICAgICAgZHkgPSAoc3JjLmhlaWdodCAqIHNyYy5zY2FsZVkpICogc3JjLm9yaWdpblk7XHJcblxyXG4gICAgICAgIHNyY01hdHJpeC5hcHBseUlUUlMoc3JjLnggLSBkeCwgc3JjLnkgLSBkeSwgc3JjLnJvdGF0aW9uLCBzcmMuc2NhbGVYLCBzcmMuc2NhbGVZKTtcclxuXHJcbiAgICAgICAgY2FtTWF0cml4LmNvcHlGcm9tKGNhbWVyYS5tYXRyaXgpO1xyXG5cclxuICAgICAgICAvLyAgTXVsdGlwbHkgdGhlIGNhbWVyYSBieSB0aGUgcGFyZW50IG1hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseVdpdGhPZmZzZXQocGFyZW50TWF0cml4LCAtY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWCwgLWNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3RvclkpO1xyXG5cclxuICAgICAgICAvLyAgVW5kbyB0aGUgY2FtZXJhIHNjcm9sbFxyXG4gICAgICAgIHNyY01hdHJpeC5lID0gc3JjLnggLSBkeDtcclxuICAgICAgICBzcmNNYXRyaXguZiA9IHNyYy55IC0gZHk7XHJcblxyXG4gICAgICAgIC8vICBNdWx0aXBseSBieSB0aGUgc3JjIG1hdHJpeCwgc3RvcmUgcmVzdWx0IGluIGNhbGNNYXRyaXhcclxuICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHkoc3JjTWF0cml4LCBjYWxjTWF0cml4KTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBkeCA9IChzcmMud2lkdGgpICogc3JjLm9yaWdpblg7XHJcbiAgICAgICAgZHkgPSAoc3JjLmhlaWdodCkgKiBzcmMub3JpZ2luWTtcclxuIFxyXG4gICAgICAgIHNyY01hdHJpeC5hcHBseUlUUlMoc3JjLnggLSBkeCwgc3JjLnkgLSBkeSwgc3JjLnJvdGF0aW9uLCBzcmMuc2NhbGVYLCBzcmMuc2NhbGVZKTtcclxuICAgICAgICBcclxuICAgICAgICBjYW1NYXRyaXguY29weUZyb20oY2FtZXJhLm1hdHJpeCk7XHJcblxyXG4gICAgICAgIHR4ID0gKDEwMCAqIHNyYy5vcmlnaW5YKSArICclJztcclxuICAgICAgICB0eSA9ICgxMDAgKiBzcmMub3JpZ2luWSkgKyAnJSc7XHJcblxyXG4gICAgICAgIHNyY01hdHJpeC5lIC09IGNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3Rvclg7XHJcbiAgICAgICAgc3JjTWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuXHJcbiAgICAgICAgLy8gIE11bHRpcGx5IGJ5IHRoZSBzcmMgbWF0cml4LCBzdG9yZSByZXN1bHQgaW4gY2FsY01hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseShzcmNNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghc3JjLnRyYW5zZm9ybU9ubHkpXHJcbiAgICB7XHJcbiAgICAgICAgc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgc3R5bGUub3BhY2l0eSA9IGFscGhhO1xyXG4gICAgICAgIHN0eWxlLnpJbmRleCA9IHNyYy5fZGVwdGg7XHJcbiAgICAgICAgc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcclxuICAgICAgICBzdHlsZS5taXhCbGVuZE1vZGUgPSBDU1NCbGVuZE1vZGVzW3NyYy5fYmxlbmRNb2RlXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdHJhbnNmb3JtXHJcblxyXG4gICAgc3R5bGUudHJhbnNmb3JtID1cclxuICAgICAgICBjYWxjTWF0cml4LmdldENTU01hdHJpeCgpICtcclxuICAgICAgICAnIHNrZXcoJyArIHNyYy5za2V3WCArICdyYWQsICcgKyBzcmMuc2tld1kgKyAncmFkKScgK1xyXG4gICAgICAgICcgcm90YXRlM2QoJyArIHNyYy5yb3RhdGUzZC54ICsgJywnICsgc3JjLnJvdGF0ZTNkLnkgKyAnLCcgKyBzcmMucm90YXRlM2QueiArICcsJyArIHNyYy5yb3RhdGUzZC53ICsgc3JjLnJvdGF0ZTNkQW5nbGUgKyAnKSc7XHJcblxyXG4gICAgc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gdHggKyAnICcgKyB0eTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRE9NRWxlbWVudENTU1JlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/domelement/DOMElementCSSRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/domelement/DOMElementFactory.js":
/*!*****************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/domelement/DOMElementFactory.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar DOMElement = __webpack_require__(/*! ./DOMElement */ \"./node_modules/phaser/src/gameobjects/domelement/DOMElement.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * DOM Element Game Objects are a way to control and manipulate HTML Elements over the top of your game.\r\n * \r\n * In order for DOM Elements to display you have to enable them by adding the following to your game\r\n * configuration object:\r\n * \r\n * ```javascript\r\n * dom {\r\n * createContainer: true\r\n * }\r\n * ```\r\n * \r\n * When this is added, Phaser will automatically create a DOM Container div that is positioned over the top\r\n * of the game canvas. This div is sized to match the canvas, and if the canvas size changes, as a result of\r\n * settings within the Scale Manager, the dom container is resized accordingly.\r\n * \r\n * You can create a DOM Element by either passing in DOMStrings, or by passing in a reference to an existing\r\n * Element that you wish to be placed under the control of Phaser. For example:\r\n * \r\n * ```javascript\r\n * this.add.dom(x, y, 'div', 'background-color: lime; width: 220px; height: 100px; font: 48px Arial', 'Phaser');\r\n * ```\r\n * \r\n * The above code will insert a div element into the DOM Container at the given x/y coordinate. The DOMString in\r\n * the 4th argument sets the initial CSS style of the div and the final argument is the inner text. In this case,\r\n * it will create a lime colored div that is 220px by 100px in size with the text Phaser in it, in an Arial font.\r\n * \r\n * You should nearly always, without exception, use explicitly sized HTML Elements, in order to fully control\r\n * alignment and positioning of the elements next to regular game content.\r\n * \r\n * Rather than specify the CSS and HTML directly you can use the `load.html` File Loader to load it into the\r\n * cache and then use the `createFromCache` method instead. You can also use `createFromHTML` and various other\r\n * methods available in this class to help construct your elements.\r\n * \r\n * Once the element has been created you can then control it like you would any other Game Object. You can set its\r\n * position, scale, rotation, alpha and other properties. It will move as the main Scene Camera moves and be clipped\r\n * at the edge of the canvas. It's important to remember some limitations of DOM Elements: The obvious one is that\r\n * they appear above or below your game canvas. You cannot blend them into the display list, meaning you cannot have\r\n * a DOM Element, then a Sprite, then another DOM Element behind it.\r\n * \r\n * They also cannot be enabled for input. To do that, you have to use the `addListener` method to add native event\r\n * listeners directly. The final limitation is to do with cameras. The DOM Container is sized to match the game canvas\r\n * entirely and clipped accordingly. DOM Elements respect camera scrolling and scrollFactor settings, but if you\r\n * change the size of the camera so it no longer matches the size of the canvas, they won't be clipped accordingly.\r\n * \r\n * Also, all DOM Elements are inserted into the same DOM Container, regardless of which Scene they are created in.\r\n * \r\n * DOM Elements are a powerful way to align native HTML with your Phaser Game Objects. For example, you can insert\r\n * a login form for a multiplayer game directly into your title screen. Or a text input box for a highscore table.\r\n * Or a banner ad from a 3rd party service. Or perhaps you'd like to use them for high resolution text display and\r\n * UI. The choice is up to you, just remember that you're dealing with standard HTML and CSS floating over the top\r\n * of your game, and should treat it accordingly.\r\n *\r\n * Note: This method will only be available if the DOM Element Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#dom\r\n * @since 3.17.0\r\n *\r\n * @param {number} x - The horizontal position of this DOM Element in the world.\r\n * @param {number} y - The vertical position of this DOM Element in the world.\r\n * @param {(HTMLElement|string)} [element] - An existing DOM element, or a string. If a string starting with a # it will do a `getElementById` look-up on the string (minus the hash). Without a hash, it represents the type of element to create, i.e. 'div'.\r\n * @param {(string|any)} [style] - If a string, will be set directly as the elements `style` property value. If a plain object, will be iterated and the values transferred. In both cases the values replacing whatever CSS styles may have been previously set.\r\n * @param {string} [innerText] - If given, will be set directly as the elements `innerText` property value, replacing whatever was there before.\r\n *\r\n * @return {Phaser.GameObjects.DOMElement} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('dom', function (x, y, element, style, innerText)\r\n{\r\n var gameObject = new DOMElement(this.scene, x, y, element, style, innerText);\r\n\r\n this.displayList.add(gameObject);\r\n this.updateList.add(gameObject);\r\n\r\n return gameObject;\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9kb21lbGVtZW50L0RPTUVsZW1lbnRGYWN0b3J5LmpzPzE1ZDYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLG9GQUFjO0FBQ3ZDLHdCQUF3QixtQkFBTyxDQUFDLHdGQUFzQjs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxjQUFjLGVBQWU7QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsYUFBYTtBQUN4QixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2RvbWVsZW1lbnQvRE9NRWxlbWVudEZhY3RvcnkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBET01FbGVtZW50ID0gcmVxdWlyZSgnLi9ET01FbGVtZW50Jyk7XHJcbnZhciBHYW1lT2JqZWN0RmFjdG9yeSA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3RGYWN0b3J5Jyk7XHJcblxyXG4vKipcclxuICogRE9NIEVsZW1lbnQgR2FtZSBPYmplY3RzIGFyZSBhIHdheSB0byBjb250cm9sIGFuZCBtYW5pcHVsYXRlIEhUTUwgRWxlbWVudHMgb3ZlciB0aGUgdG9wIG9mIHlvdXIgZ2FtZS5cclxuICogXHJcbiAqIEluIG9yZGVyIGZvciBET00gRWxlbWVudHMgdG8gZGlzcGxheSB5b3UgaGF2ZSB0byBlbmFibGUgdGhlbSBieSBhZGRpbmcgdGhlIGZvbGxvd2luZyB0byB5b3VyIGdhbWVcclxuICogY29uZmlndXJhdGlvbiBvYmplY3Q6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGRvbSB7XHJcbiAqICAgY3JlYXRlQ29udGFpbmVyOiB0cnVlXHJcbiAqIH1cclxuICogYGBgXHJcbiAqIFxyXG4gKiBXaGVuIHRoaXMgaXMgYWRkZWQsIFBoYXNlciB3aWxsIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgRE9NIENvbnRhaW5lciBkaXYgdGhhdCBpcyBwb3NpdGlvbmVkIG92ZXIgdGhlIHRvcFxyXG4gKiBvZiB0aGUgZ2FtZSBjYW52YXMuIFRoaXMgZGl2IGlzIHNpemVkIHRvIG1hdGNoIHRoZSBjYW52YXMsIGFuZCBpZiB0aGUgY2FudmFzIHNpemUgY2hhbmdlcywgYXMgYSByZXN1bHQgb2ZcclxuICogc2V0dGluZ3Mgd2l0aGluIHRoZSBTY2FsZSBNYW5hZ2VyLCB0aGUgZG9tIGNvbnRhaW5lciBpcyByZXNpemVkIGFjY29yZGluZ2x5LlxyXG4gKiBcclxuICogWW91IGNhbiBjcmVhdGUgYSBET00gRWxlbWVudCBieSBlaXRoZXIgcGFzc2luZyBpbiBET01TdHJpbmdzLCBvciBieSBwYXNzaW5nIGluIGEgcmVmZXJlbmNlIHRvIGFuIGV4aXN0aW5nXHJcbiAqIEVsZW1lbnQgdGhhdCB5b3Ugd2lzaCB0byBiZSBwbGFjZWQgdW5kZXIgdGhlIGNvbnRyb2wgb2YgUGhhc2VyLiBGb3IgZXhhbXBsZTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5hZGQuZG9tKHgsIHksICdkaXYnLCAnYmFja2dyb3VuZC1jb2xvcjogbGltZTsgd2lkdGg6IDIyMHB4OyBoZWlnaHQ6IDEwMHB4OyBmb250OiA0OHB4IEFyaWFsJywgJ1BoYXNlcicpO1xyXG4gKiBgYGBcclxuICogXHJcbiAqIFRoZSBhYm92ZSBjb2RlIHdpbGwgaW5zZXJ0IGEgZGl2IGVsZW1lbnQgaW50byB0aGUgRE9NIENvbnRhaW5lciBhdCB0aGUgZ2l2ZW4geC95IGNvb3JkaW5hdGUuIFRoZSBET01TdHJpbmcgaW5cclxuICogdGhlIDR0aCBhcmd1bWVudCBzZXRzIHRoZSBpbml0aWFsIENTUyBzdHlsZSBvZiB0aGUgZGl2IGFuZCB0aGUgZmluYWwgYXJndW1lbnQgaXMgdGhlIGlubmVyIHRleHQuIEluIHRoaXMgY2FzZSxcclxuICogaXQgd2lsbCBjcmVhdGUgYSBsaW1lIGNvbG9yZWQgZGl2IHRoYXQgaXMgMjIwcHggYnkgMTAwcHggaW4gc2l6ZSB3aXRoIHRoZSB0ZXh0IFBoYXNlciBpbiBpdCwgaW4gYW4gQXJpYWwgZm9udC5cclxuICogXHJcbiAqIFlvdSBzaG91bGQgbmVhcmx5IGFsd2F5cywgd2l0aG91dCBleGNlcHRpb24sIHVzZSBleHBsaWNpdGx5IHNpemVkIEhUTUwgRWxlbWVudHMsIGluIG9yZGVyIHRvIGZ1bGx5IGNvbnRyb2xcclxuICogYWxpZ25tZW50IGFuZCBwb3NpdGlvbmluZyBvZiB0aGUgZWxlbWVudHMgbmV4dCB0byByZWd1bGFyIGdhbWUgY29udGVudC5cclxuICogXHJcbiAqIFJhdGhlciB0aGFuIHNwZWNpZnkgdGhlIENTUyBhbmQgSFRNTCBkaXJlY3RseSB5b3UgY2FuIHVzZSB0aGUgYGxvYWQuaHRtbGAgRmlsZSBMb2FkZXIgdG8gbG9hZCBpdCBpbnRvIHRoZVxyXG4gKiBjYWNoZSBhbmQgdGhlbiB1c2UgdGhlIGBjcmVhdGVGcm9tQ2FjaGVgIG1ldGhvZCBpbnN0ZWFkLiBZb3UgY2FuIGFsc28gdXNlIGBjcmVhdGVGcm9tSFRNTGAgYW5kIHZhcmlvdXMgb3RoZXJcclxuICogbWV0aG9kcyBhdmFpbGFibGUgaW4gdGhpcyBjbGFzcyB0byBoZWxwIGNvbnN0cnVjdCB5b3VyIGVsZW1lbnRzLlxyXG4gKiBcclxuICogT25jZSB0aGUgZWxlbWVudCBoYXMgYmVlbiBjcmVhdGVkIHlvdSBjYW4gdGhlbiBjb250cm9sIGl0IGxpa2UgeW91IHdvdWxkIGFueSBvdGhlciBHYW1lIE9iamVjdC4gWW91IGNhbiBzZXQgaXRzXHJcbiAqIHBvc2l0aW9uLCBzY2FsZSwgcm90YXRpb24sIGFscGhhIGFuZCBvdGhlciBwcm9wZXJ0aWVzLiBJdCB3aWxsIG1vdmUgYXMgdGhlIG1haW4gU2NlbmUgQ2FtZXJhIG1vdmVzIGFuZCBiZSBjbGlwcGVkXHJcbiAqIGF0IHRoZSBlZGdlIG9mIHRoZSBjYW52YXMuIEl0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHNvbWUgbGltaXRhdGlvbnMgb2YgRE9NIEVsZW1lbnRzOiBUaGUgb2J2aW91cyBvbmUgaXMgdGhhdFxyXG4gKiB0aGV5IGFwcGVhciBhYm92ZSBvciBiZWxvdyB5b3VyIGdhbWUgY2FudmFzLiBZb3UgY2Fubm90IGJsZW5kIHRoZW0gaW50byB0aGUgZGlzcGxheSBsaXN0LCBtZWFuaW5nIHlvdSBjYW5ub3QgaGF2ZVxyXG4gKiBhIERPTSBFbGVtZW50LCB0aGVuIGEgU3ByaXRlLCB0aGVuIGFub3RoZXIgRE9NIEVsZW1lbnQgYmVoaW5kIGl0LlxyXG4gKiBcclxuICogVGhleSBhbHNvIGNhbm5vdCBiZSBlbmFibGVkIGZvciBpbnB1dC4gVG8gZG8gdGhhdCwgeW91IGhhdmUgdG8gdXNlIHRoZSBgYWRkTGlzdGVuZXJgIG1ldGhvZCB0byBhZGQgbmF0aXZlIGV2ZW50XHJcbiAqIGxpc3RlbmVycyBkaXJlY3RseS4gVGhlIGZpbmFsIGxpbWl0YXRpb24gaXMgdG8gZG8gd2l0aCBjYW1lcmFzLiBUaGUgRE9NIENvbnRhaW5lciBpcyBzaXplZCB0byBtYXRjaCB0aGUgZ2FtZSBjYW52YXNcclxuICogZW50aXJlbHkgYW5kIGNsaXBwZWQgYWNjb3JkaW5nbHkuIERPTSBFbGVtZW50cyByZXNwZWN0IGNhbWVyYSBzY3JvbGxpbmcgYW5kIHNjcm9sbEZhY3RvciBzZXR0aW5ncywgYnV0IGlmIHlvdVxyXG4gKiBjaGFuZ2UgdGhlIHNpemUgb2YgdGhlIGNhbWVyYSBzbyBpdCBubyBsb25nZXIgbWF0Y2hlcyB0aGUgc2l6ZSBvZiB0aGUgY2FudmFzLCB0aGV5IHdvbid0IGJlIGNsaXBwZWQgYWNjb3JkaW5nbHkuXHJcbiAqIFxyXG4gKiBBbHNvLCBhbGwgRE9NIEVsZW1lbnRzIGFyZSBpbnNlcnRlZCBpbnRvIHRoZSBzYW1lIERPTSBDb250YWluZXIsIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggU2NlbmUgdGhleSBhcmUgY3JlYXRlZCBpbi5cclxuICogXHJcbiAqIERPTSBFbGVtZW50cyBhcmUgYSBwb3dlcmZ1bCB3YXkgdG8gYWxpZ24gbmF0aXZlIEhUTUwgd2l0aCB5b3VyIFBoYXNlciBHYW1lIE9iamVjdHMuIEZvciBleGFtcGxlLCB5b3UgY2FuIGluc2VydFxyXG4gKiBhIGxvZ2luIGZvcm0gZm9yIGEgbXVsdGlwbGF5ZXIgZ2FtZSBkaXJlY3RseSBpbnRvIHlvdXIgdGl0bGUgc2NyZWVuLiBPciBhIHRleHQgaW5wdXQgYm94IGZvciBhIGhpZ2hzY29yZSB0YWJsZS5cclxuICogT3IgYSBiYW5uZXIgYWQgZnJvbSBhIDNyZCBwYXJ0eSBzZXJ2aWNlLiBPciBwZXJoYXBzIHlvdSdkIGxpa2UgdG8gdXNlIHRoZW0gZm9yIGhpZ2ggcmVzb2x1dGlvbiB0ZXh0IGRpc3BsYXkgYW5kXHJcbiAqIFVJLiBUaGUgY2hvaWNlIGlzIHVwIHRvIHlvdSwganVzdCByZW1lbWJlciB0aGF0IHlvdSdyZSBkZWFsaW5nIHdpdGggc3RhbmRhcmQgSFRNTCBhbmQgQ1NTIGZsb2F0aW5nIG92ZXIgdGhlIHRvcFxyXG4gKiBvZiB5b3VyIGdhbWUsIGFuZCBzaG91bGQgdHJlYXQgaXQgYWNjb3JkaW5nbHkuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIERPTSBFbGVtZW50IEdhbWUgT2JqZWN0IGhhcyBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0RmFjdG9yeSNkb21cclxuICogQHNpbmNlIDMuMTcuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgRE9NIEVsZW1lbnQgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIERPTSBFbGVtZW50IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHsoSFRNTEVsZW1lbnR8c3RyaW5nKX0gW2VsZW1lbnRdIC0gQW4gZXhpc3RpbmcgRE9NIGVsZW1lbnQsIG9yIGEgc3RyaW5nLiBJZiBhIHN0cmluZyBzdGFydGluZyB3aXRoIGEgIyBpdCB3aWxsIGRvIGEgYGdldEVsZW1lbnRCeUlkYCBsb29rLXVwIG9uIHRoZSBzdHJpbmcgKG1pbnVzIHRoZSBoYXNoKS4gV2l0aG91dCBhIGhhc2gsIGl0IHJlcHJlc2VudHMgdGhlIHR5cGUgb2YgZWxlbWVudCB0byBjcmVhdGUsIGkuZS4gJ2RpdicuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xhbnkpfSBbc3R5bGVdIC0gSWYgYSBzdHJpbmcsIHdpbGwgYmUgc2V0IGRpcmVjdGx5IGFzIHRoZSBlbGVtZW50cyBgc3R5bGVgIHByb3BlcnR5IHZhbHVlLiBJZiBhIHBsYWluIG9iamVjdCwgd2lsbCBiZSBpdGVyYXRlZCBhbmQgdGhlIHZhbHVlcyB0cmFuc2ZlcnJlZC4gSW4gYm90aCBjYXNlcyB0aGUgdmFsdWVzIHJlcGxhY2luZyB3aGF0ZXZlciBDU1Mgc3R5bGVzIG1heSBoYXZlIGJlZW4gcHJldmlvdXNseSBzZXQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbaW5uZXJUZXh0XSAtIElmIGdpdmVuLCB3aWxsIGJlIHNldCBkaXJlY3RseSBhcyB0aGUgZWxlbWVudHMgYGlubmVyVGV4dGAgcHJvcGVydHkgdmFsdWUsIHJlcGxhY2luZyB3aGF0ZXZlciB3YXMgdGhlcmUgYmVmb3JlLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuRE9NRWxlbWVudH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0RmFjdG9yeS5yZWdpc3RlcignZG9tJywgZnVuY3Rpb24gKHgsIHksIGVsZW1lbnQsIHN0eWxlLCBpbm5lclRleHQpXHJcbntcclxuICAgIHZhciBnYW1lT2JqZWN0ID0gbmV3IERPTUVsZW1lbnQodGhpcy5zY2VuZSwgeCwgeSwgZWxlbWVudCwgc3R5bGUsIGlubmVyVGV4dCk7XHJcblxyXG4gICAgdGhpcy5kaXNwbGF5TGlzdC5hZGQoZ2FtZU9iamVjdCk7XHJcbiAgICB0aGlzLnVwZGF0ZUxpc3QuYWRkKGdhbWVPYmplY3QpO1xyXG5cclxuICAgIHJldHVybiBnYW1lT2JqZWN0O1xyXG59KTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/domelement/DOMElementFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/domelement/DOMElementRender.js":
/*!****************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/domelement/DOMElementRender.js ***!
\****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./DOMElementCSSRenderer */ \"./node_modules/phaser/src/gameobjects/domelement/DOMElementCSSRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./DOMElementCSSRenderer */ \"./node_modules/phaser/src/gameobjects/domelement/DOMElementCSSRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9kb21lbGVtZW50L0RPTUVsZW1lbnRSZW5kZXIuanM/ZmU5ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsaUVBQWtCO0FBQzVDLG1CQUFtQixtQkFBTyxDQUFDLGlFQUFrQjs7QUFFN0MsSUFBSSxJQUFxQjtBQUN6QjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLDBHQUF5QjtBQUNuRDs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsMEdBQXlCO0FBQ3BEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9kb21lbGVtZW50L0RPTUVsZW1lbnRSZW5kZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL05PT1AnKTtcclxudmFyIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL05PT1AnKTtcclxuXHJcbmlmICh0eXBlb2YgV0VCR0xfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi9ET01FbGVtZW50Q1NTUmVuZGVyZXInKTtcclxufVxyXG5cclxuaWYgKHR5cGVvZiBDQU5WQVNfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4vRE9NRWxlbWVudENTU1JlbmRlcmVyJyk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIHJlbmRlcldlYkdMOiByZW5kZXJXZWJHTCxcclxuICAgIHJlbmRlckNhbnZhczogcmVuZGVyQ2FudmFzXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/domelement/DOMElementRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/events/DESTROY_EVENT.js":
/*!*********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/events/DESTROY_EVENT.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Destroy Event.\r\n * \r\n * This event is dispatched when a Game Object instance is being destroyed.\r\n * \r\n * Listen for it on a Game Object instance using `GameObject.on('destroy', listener)`.\r\n *\r\n * @event Phaser.GameObjects.Events#DESTROY\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object which is being destroyed.\r\n */\r\nmodule.exports = 'destroy';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvREVTVFJPWV9FVkVOVC5qcz9mYjkxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQThCO0FBQ3pDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvREVTVFJPWV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIE9iamVjdCBEZXN0cm95IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIHdoZW4gYSBHYW1lIE9iamVjdCBpbnN0YW5jZSBpcyBiZWluZyBkZXN0cm95ZWQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gZm9yIGl0IG9uIGEgR2FtZSBPYmplY3QgaW5zdGFuY2UgdXNpbmcgYEdhbWVPYmplY3Qub24oJ2Rlc3Ryb3knLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkdhbWVPYmplY3RzLkV2ZW50cyNERVNUUk9ZXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB3aGljaCBpcyBiZWluZyBkZXN0cm95ZWQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdkZXN0cm95JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/events/DESTROY_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/events/VIDEO_COMPLETE_EVENT.js":
/*!****************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/events/VIDEO_COMPLETE_EVENT.js ***!
\****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Video Game Object Complete Event.\r\n * \r\n * This event is dispatched when a Video finishes playback by reaching the end of its duration. It\r\n * is also dispatched if a video marker sequence is being played and reaches the end.\r\n * \r\n * Note that not all videos can fire this event. Live streams, for example, have no fixed duration,\r\n * so never technically 'complete'.\r\n * \r\n * If a video is stopped from playback, via the `Video.stop` method, it will emit the\r\n * `VIDEO_STOP` event instead of this one.\r\n * \r\n * Listen for it from a Video Game Object instance using `Video.on('complete', listener)`.\r\n *\r\n * @event Phaser.GameObjects.Events#VIDEO_COMPLETE\r\n * @since 3.20.0\r\n * \r\n * @param {Phaser.GameObjects.Video} video - The Video Game Object which completed playback.\r\n */\r\nmodule.exports = 'complete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fQ09NUExFVEVfRVZFTlQuanM/Yjg5NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcseUJBQXlCO0FBQ3BDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fQ09NUExFVEVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgVmlkZW8gR2FtZSBPYmplY3QgQ29tcGxldGUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgd2hlbiBhIFZpZGVvIGZpbmlzaGVzIHBsYXliYWNrIGJ5IHJlYWNoaW5nIHRoZSBlbmQgb2YgaXRzIGR1cmF0aW9uLiBJdFxyXG4gKiBpcyBhbHNvIGRpc3BhdGNoZWQgaWYgYSB2aWRlbyBtYXJrZXIgc2VxdWVuY2UgaXMgYmVpbmcgcGxheWVkIGFuZCByZWFjaGVzIHRoZSBlbmQuXHJcbiAqIFxyXG4gKiBOb3RlIHRoYXQgbm90IGFsbCB2aWRlb3MgY2FuIGZpcmUgdGhpcyBldmVudC4gTGl2ZSBzdHJlYW1zLCBmb3IgZXhhbXBsZSwgaGF2ZSBubyBmaXhlZCBkdXJhdGlvbixcclxuICogc28gbmV2ZXIgdGVjaG5pY2FsbHkgJ2NvbXBsZXRlJy5cclxuICogXHJcbiAqIElmIGEgdmlkZW8gaXMgc3RvcHBlZCBmcm9tIHBsYXliYWNrLCB2aWEgdGhlIGBWaWRlby5zdG9wYCBtZXRob2QsIGl0IHdpbGwgZW1pdCB0aGVcclxuICogYFZJREVPX1NUT1BgIGV2ZW50IGluc3RlYWQgb2YgdGhpcyBvbmUuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gZm9yIGl0IGZyb20gYSBWaWRlbyBHYW1lIE9iamVjdCBpbnN0YW5jZSB1c2luZyBgVmlkZW8ub24oJ2NvbXBsZXRlJywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5HYW1lT2JqZWN0cy5FdmVudHMjVklERU9fQ09NUExFVEVcclxuICogQHNpbmNlIDMuMjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW99IHZpZGVvIC0gVGhlIFZpZGVvIEdhbWUgT2JqZWN0IHdoaWNoIGNvbXBsZXRlZCBwbGF5YmFjay5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2NvbXBsZXRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/events/VIDEO_COMPLETE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/events/VIDEO_CREATED_EVENT.js":
/*!***************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/events/VIDEO_CREATED_EVENT.js ***!
\***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Video Game Object Created Event.\r\n * \r\n * This event is dispatched when the texture for a Video has been created. This happens\r\n * when enough of the video source has been loaded that the browser is able to render a\r\n * frame from it.\r\n * \r\n * Listen for it from a Video Game Object instance using `Video.on('created', listener)`.\r\n *\r\n * @event Phaser.GameObjects.Events#VIDEO_CREATED\r\n * @since 3.20.0\r\n * \r\n * @param {Phaser.GameObjects.Video} video - The Video Game Object which raised the event.\r\n * @param {integer} width - The width of the video.\r\n * @param {integer} height - The height of the video.\r\n */\r\nmodule.exports = 'created';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fQ1JFQVRFRF9FVkVOVC5qcz81NmI5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlCQUF5QjtBQUNwQyxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fQ1JFQVRFRF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBWaWRlbyBHYW1lIE9iamVjdCBDcmVhdGVkIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIHdoZW4gdGhlIHRleHR1cmUgZm9yIGEgVmlkZW8gaGFzIGJlZW4gY3JlYXRlZC4gVGhpcyBoYXBwZW5zXHJcbiAqIHdoZW4gZW5vdWdoIG9mIHRoZSB2aWRlbyBzb3VyY2UgaGFzIGJlZW4gbG9hZGVkIHRoYXQgdGhlIGJyb3dzZXIgaXMgYWJsZSB0byByZW5kZXIgYVxyXG4gKiBmcmFtZSBmcm9tIGl0LlxyXG4gKiBcclxuICogTGlzdGVuIGZvciBpdCBmcm9tIGEgVmlkZW8gR2FtZSBPYmplY3QgaW5zdGFuY2UgdXNpbmcgYFZpZGVvLm9uKCdjcmVhdGVkJywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5HYW1lT2JqZWN0cy5FdmVudHMjVklERU9fQ1JFQVRFRFxyXG4gKiBAc2luY2UgMy4yMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5WaWRlb30gdmlkZW8gLSBUaGUgVmlkZW8gR2FtZSBPYmplY3Qgd2hpY2ggcmFpc2VkIHRoZSBldmVudC5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgdmlkZW8uXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgdmlkZW8uXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdjcmVhdGVkJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/events/VIDEO_CREATED_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/events/VIDEO_ERROR_EVENT.js":
/*!*************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/events/VIDEO_ERROR_EVENT.js ***!
\*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Video Game Object Error Event.\r\n * \r\n * This event is dispatched when a Video tries to play a source that does not exist, or is the wrong file type.\r\n * \r\n * Listen for it from a Video Game Object instance using `Video.on('error', listener)`.\r\n *\r\n * @event Phaser.GameObjects.Events#VIDEO_ERROR\r\n * @since 3.20.0\r\n * \r\n * @param {Phaser.GameObjects.Video} video - The Video Game Object which threw the error.\r\n * @param {Event} event - The native DOM event the browser raised during playback.\r\n */\r\nmodule.exports = 'error';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fRVJST1JfRVZFTlQuanM/NjMzOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlCQUF5QjtBQUNwQyxXQUFXLE1BQU07QUFDakI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2V2ZW50cy9WSURFT19FUlJPUl9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBWaWRlbyBHYW1lIE9iamVjdCBFcnJvciBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCB3aGVuIGEgVmlkZW8gdHJpZXMgdG8gcGxheSBhIHNvdXJjZSB0aGF0IGRvZXMgbm90IGV4aXN0LCBvciBpcyB0aGUgd3JvbmcgZmlsZSB0eXBlLlxyXG4gKiBcclxuICogTGlzdGVuIGZvciBpdCBmcm9tIGEgVmlkZW8gR2FtZSBPYmplY3QgaW5zdGFuY2UgdXNpbmcgYFZpZGVvLm9uKCdlcnJvcicsIGxpc3RlbmVyKWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuR2FtZU9iamVjdHMuRXZlbnRzI1ZJREVPX0VSUk9SXHJcbiAqIEBzaW5jZSAzLjIwLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvfSB2aWRlbyAtIFRoZSBWaWRlbyBHYW1lIE9iamVjdCB3aGljaCB0aHJldyB0aGUgZXJyb3IuXHJcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gVGhlIG5hdGl2ZSBET00gZXZlbnQgdGhlIGJyb3dzZXIgcmFpc2VkIGR1cmluZyBwbGF5YmFjay5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2Vycm9yJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/events/VIDEO_ERROR_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/events/VIDEO_LOOP_EVENT.js":
/*!************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/events/VIDEO_LOOP_EVENT.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Video Game Object Loop Event.\r\n * \r\n * This event is dispatched when a Video that is currently playing has looped. This only\r\n * happens if the `loop` parameter was specified, or the `setLoop` method was called,\r\n * and if the video has a fixed duration. Video streams, for example, cannot loop, as\r\n * they have no duration.\r\n * \r\n * Looping is based on the result of the Video `timeupdate` event. This event is not\r\n * frame-accurate, due to the way browsers work, so please do not rely on this loop\r\n * event to be time or frame precise.\r\n * \r\n * Listen for it from a Video Game Object instance using `Video.on('loop', listener)`.\r\n *\r\n * @event Phaser.GameObjects.Events#VIDEO_LOOP\r\n * @since 3.20.0\r\n * \r\n * @param {Phaser.GameObjects.Video} video - The Video Game Object which has looped.\r\n */\r\nmodule.exports = 'loop';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fTE9PUF9FVkVOVC5qcz8zMmZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5QkFBeUI7QUFDcEM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2V2ZW50cy9WSURFT19MT09QX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFZpZGVvIEdhbWUgT2JqZWN0IExvb3AgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgd2hlbiBhIFZpZGVvIHRoYXQgaXMgY3VycmVudGx5IHBsYXlpbmcgaGFzIGxvb3BlZC4gVGhpcyBvbmx5XHJcbiAqIGhhcHBlbnMgaWYgdGhlIGBsb29wYCBwYXJhbWV0ZXIgd2FzIHNwZWNpZmllZCwgb3IgdGhlIGBzZXRMb29wYCBtZXRob2Qgd2FzIGNhbGxlZCxcclxuICogYW5kIGlmIHRoZSB2aWRlbyBoYXMgYSBmaXhlZCBkdXJhdGlvbi4gVmlkZW8gc3RyZWFtcywgZm9yIGV4YW1wbGUsIGNhbm5vdCBsb29wLCBhc1xyXG4gKiB0aGV5IGhhdmUgbm8gZHVyYXRpb24uXHJcbiAqIFxyXG4gKiBMb29waW5nIGlzIGJhc2VkIG9uIHRoZSByZXN1bHQgb2YgdGhlIFZpZGVvIGB0aW1ldXBkYXRlYCBldmVudC4gVGhpcyBldmVudCBpcyBub3RcclxuICogZnJhbWUtYWNjdXJhdGUsIGR1ZSB0byB0aGUgd2F5IGJyb3dzZXJzIHdvcmssIHNvIHBsZWFzZSBkbyBub3QgcmVseSBvbiB0aGlzIGxvb3BcclxuICogZXZlbnQgdG8gYmUgdGltZSBvciBmcmFtZSBwcmVjaXNlLlxyXG4gKiBcclxuICogTGlzdGVuIGZvciBpdCBmcm9tIGEgVmlkZW8gR2FtZSBPYmplY3QgaW5zdGFuY2UgdXNpbmcgYFZpZGVvLm9uKCdsb29wJywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5HYW1lT2JqZWN0cy5FdmVudHMjVklERU9fTE9PUFxyXG4gKiBAc2luY2UgMy4yMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5WaWRlb30gdmlkZW8gLSBUaGUgVmlkZW8gR2FtZSBPYmplY3Qgd2hpY2ggaGFzIGxvb3BlZC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2xvb3AnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/events/VIDEO_LOOP_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/events/VIDEO_PLAY_EVENT.js":
/*!************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/events/VIDEO_PLAY_EVENT.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Video Game Object Play Event.\r\n * \r\n * This event is dispatched when a Video begins playback. For videos that do not require\r\n * interaction unlocking, this is usually as soon as the `Video.play` method is called.\r\n * However, for videos that require unlocking, it is fired once playback begins after\r\n * they've been unlocked.\r\n * \r\n * Listen for it from a Video Game Object instance using `Video.on('play', listener)`.\r\n *\r\n * @event Phaser.GameObjects.Events#VIDEO_PLAY\r\n * @since 3.20.0\r\n * \r\n * @param {Phaser.GameObjects.Video} video - The Video Game Object which started playback.\r\n */\r\nmodule.exports = 'play';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fUExBWV9FVkVOVC5qcz9jM2IwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcseUJBQXlCO0FBQ3BDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fUExBWV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBWaWRlbyBHYW1lIE9iamVjdCBQbGF5IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIHdoZW4gYSBWaWRlbyBiZWdpbnMgcGxheWJhY2suIEZvciB2aWRlb3MgdGhhdCBkbyBub3QgcmVxdWlyZVxyXG4gKiBpbnRlcmFjdGlvbiB1bmxvY2tpbmcsIHRoaXMgaXMgdXN1YWxseSBhcyBzb29uIGFzIHRoZSBgVmlkZW8ucGxheWAgbWV0aG9kIGlzIGNhbGxlZC5cclxuICogSG93ZXZlciwgZm9yIHZpZGVvcyB0aGF0IHJlcXVpcmUgdW5sb2NraW5nLCBpdCBpcyBmaXJlZCBvbmNlIHBsYXliYWNrIGJlZ2lucyBhZnRlclxyXG4gKiB0aGV5J3ZlIGJlZW4gdW5sb2NrZWQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gZm9yIGl0IGZyb20gYSBWaWRlbyBHYW1lIE9iamVjdCBpbnN0YW5jZSB1c2luZyBgVmlkZW8ub24oJ3BsYXknLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkdhbWVPYmplY3RzLkV2ZW50cyNWSURFT19QTEFZXHJcbiAqIEBzaW5jZSAzLjIwLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvfSB2aWRlbyAtIFRoZSBWaWRlbyBHYW1lIE9iamVjdCB3aGljaCBzdGFydGVkIHBsYXliYWNrLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAncGxheSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/events/VIDEO_PLAY_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/events/VIDEO_SEEKED_EVENT.js":
/*!**************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/events/VIDEO_SEEKED_EVENT.js ***!
\**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Video Game Object Seeked Event.\r\n * \r\n * This event is dispatched when a Video completes seeking to a new point in its timeline.\r\n * \r\n * Listen for it from a Video Game Object instance using `Video.on('seeked', listener)`.\r\n *\r\n * @event Phaser.GameObjects.Events#VIDEO_SEEKED\r\n * @since 3.20.0\r\n * \r\n * @param {Phaser.GameObjects.Video} video - The Video Game Object which completed seeking.\r\n */\r\nmodule.exports = 'seeked';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fU0VFS0VEX0VWRU5ULmpzPzlmZmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5QkFBeUI7QUFDcEM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2V2ZW50cy9WSURFT19TRUVLRURfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgVmlkZW8gR2FtZSBPYmplY3QgU2Vla2VkIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIHdoZW4gYSBWaWRlbyBjb21wbGV0ZXMgc2Vla2luZyB0byBhIG5ldyBwb2ludCBpbiBpdHMgdGltZWxpbmUuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gZm9yIGl0IGZyb20gYSBWaWRlbyBHYW1lIE9iamVjdCBpbnN0YW5jZSB1c2luZyBgVmlkZW8ub24oJ3NlZWtlZCcsIGxpc3RlbmVyKWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuR2FtZU9iamVjdHMuRXZlbnRzI1ZJREVPX1NFRUtFRFxyXG4gKiBAc2luY2UgMy4yMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5WaWRlb30gdmlkZW8gLSBUaGUgVmlkZW8gR2FtZSBPYmplY3Qgd2hpY2ggY29tcGxldGVkIHNlZWtpbmcuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdzZWVrZWQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/events/VIDEO_SEEKED_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/events/VIDEO_SEEKING_EVENT.js":
/*!***************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/events/VIDEO_SEEKING_EVENT.js ***!
\***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Video Game Object Seeking Event.\r\n * \r\n * This event is dispatched when a Video _begins_ seeking to a new point in its timeline.\r\n * When the seek is complete, it will dispatch the `VIDEO_SEEKED` event to conclude.\r\n * \r\n * Listen for it from a Video Game Object instance using `Video.on('seeking', listener)`.\r\n *\r\n * @event Phaser.GameObjects.Events#VIDEO_SEEKING\r\n * @since 3.20.0\r\n * \r\n * @param {Phaser.GameObjects.Video} video - The Video Game Object which started seeking.\r\n */\r\nmodule.exports = 'seeking';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fU0VFS0lOR19FVkVOVC5qcz8zNWRjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5QkFBeUI7QUFDcEM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2V2ZW50cy9WSURFT19TRUVLSU5HX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFZpZGVvIEdhbWUgT2JqZWN0IFNlZWtpbmcgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgd2hlbiBhIFZpZGVvIF9iZWdpbnNfIHNlZWtpbmcgdG8gYSBuZXcgcG9pbnQgaW4gaXRzIHRpbWVsaW5lLlxyXG4gKiBXaGVuIHRoZSBzZWVrIGlzIGNvbXBsZXRlLCBpdCB3aWxsIGRpc3BhdGNoIHRoZSBgVklERU9fU0VFS0VEYCBldmVudCB0byBjb25jbHVkZS5cclxuICogXHJcbiAqIExpc3RlbiBmb3IgaXQgZnJvbSBhIFZpZGVvIEdhbWUgT2JqZWN0IGluc3RhbmNlIHVzaW5nIGBWaWRlby5vbignc2Vla2luZycsIGxpc3RlbmVyKWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuR2FtZU9iamVjdHMuRXZlbnRzI1ZJREVPX1NFRUtJTkdcclxuICogQHNpbmNlIDMuMjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW99IHZpZGVvIC0gVGhlIFZpZGVvIEdhbWUgT2JqZWN0IHdoaWNoIHN0YXJ0ZWQgc2Vla2luZy5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3NlZWtpbmcnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/events/VIDEO_SEEKING_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/events/VIDEO_STOP_EVENT.js":
/*!************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/events/VIDEO_STOP_EVENT.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Video Game Object Stopped Event.\r\n * \r\n * This event is dispatched when a Video is stopped from playback via a call to the `Video.stop` method,\r\n * either directly via game code, or indirectly as the result of changing a video source or destroying it.\r\n * \r\n * Listen for it from a Video Game Object instance using `Video.on('stop', listener)`.\r\n *\r\n * @event Phaser.GameObjects.Events#VIDEO_STOP\r\n * @since 3.20.0\r\n * \r\n * @param {Phaser.GameObjects.Video} video - The Video Game Object which stopped playback.\r\n */\r\nmodule.exports = 'stop';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fU1RPUF9FVkVOVC5qcz8xMTA2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5QkFBeUI7QUFDcEM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2V2ZW50cy9WSURFT19TVE9QX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFZpZGVvIEdhbWUgT2JqZWN0IFN0b3BwZWQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgd2hlbiBhIFZpZGVvIGlzIHN0b3BwZWQgZnJvbSBwbGF5YmFjayB2aWEgYSBjYWxsIHRvIHRoZSBgVmlkZW8uc3RvcGAgbWV0aG9kLFxyXG4gKiBlaXRoZXIgZGlyZWN0bHkgdmlhIGdhbWUgY29kZSwgb3IgaW5kaXJlY3RseSBhcyB0aGUgcmVzdWx0IG9mIGNoYW5naW5nIGEgdmlkZW8gc291cmNlIG9yIGRlc3Ryb3lpbmcgaXQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gZm9yIGl0IGZyb20gYSBWaWRlbyBHYW1lIE9iamVjdCBpbnN0YW5jZSB1c2luZyBgVmlkZW8ub24oJ3N0b3AnLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkdhbWVPYmplY3RzLkV2ZW50cyNWSURFT19TVE9QXHJcbiAqIEBzaW5jZSAzLjIwLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvfSB2aWRlbyAtIFRoZSBWaWRlbyBHYW1lIE9iamVjdCB3aGljaCBzdG9wcGVkIHBsYXliYWNrLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnc3RvcCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/events/VIDEO_STOP_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/events/VIDEO_TIMEOUT_EVENT.js":
/*!***************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/events/VIDEO_TIMEOUT_EVENT.js ***!
\***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Video Game Object Timeout Event.\r\n * \r\n * This event is dispatched when a Video has exhausted its allocated time while trying to connect to a video\r\n * source to start playback.\r\n * \r\n * Listen for it from a Video Game Object instance using `Video.on('timeout', listener)`.\r\n *\r\n * @event Phaser.GameObjects.Events#VIDEO_TIMEOUT\r\n * @since 3.20.0\r\n * \r\n * @param {Phaser.GameObjects.Video} video - The Video Game Object which timed out.\r\n */\r\nmodule.exports = 'timeout';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fVElNRU9VVF9FVkVOVC5qcz9mMmYzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5QkFBeUI7QUFDcEM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2V2ZW50cy9WSURFT19USU1FT1VUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFZpZGVvIEdhbWUgT2JqZWN0IFRpbWVvdXQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgd2hlbiBhIFZpZGVvIGhhcyBleGhhdXN0ZWQgaXRzIGFsbG9jYXRlZCB0aW1lIHdoaWxlIHRyeWluZyB0byBjb25uZWN0IHRvIGEgdmlkZW9cclxuICogc291cmNlIHRvIHN0YXJ0IHBsYXliYWNrLlxyXG4gKiBcclxuICogTGlzdGVuIGZvciBpdCBmcm9tIGEgVmlkZW8gR2FtZSBPYmplY3QgaW5zdGFuY2UgdXNpbmcgYFZpZGVvLm9uKCd0aW1lb3V0JywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5HYW1lT2JqZWN0cy5FdmVudHMjVklERU9fVElNRU9VVFxyXG4gKiBAc2luY2UgMy4yMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5WaWRlb30gdmlkZW8gLSBUaGUgVmlkZW8gR2FtZSBPYmplY3Qgd2hpY2ggdGltZWQgb3V0LlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAndGltZW91dCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/events/VIDEO_TIMEOUT_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/events/VIDEO_UNLOCKED_EVENT.js":
/*!****************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/events/VIDEO_UNLOCKED_EVENT.js ***!
\****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Video Game Object Unlocked Event.\r\n * \r\n * This event is dispatched when a Video that was prevented from playback due to the browsers\r\n * Media Engagement Interaction policy, is unlocked by a user gesture.\r\n * \r\n * Listen for it from a Video Game Object instance using `Video.on('unlocked', listener)`.\r\n *\r\n * @event Phaser.GameObjects.Events#VIDEO_UNLOCKED\r\n * @since 3.20.0\r\n * \r\n * @param {Phaser.GameObjects.Video} video - The Video Game Object which raised the event.\r\n */\r\nmodule.exports = 'unlocked';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fVU5MT0NLRURfRVZFTlQuanM/OWJkMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcseUJBQXlCO0FBQ3BDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvVklERU9fVU5MT0NLRURfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgVmlkZW8gR2FtZSBPYmplY3QgVW5sb2NrZWQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgd2hlbiBhIFZpZGVvIHRoYXQgd2FzIHByZXZlbnRlZCBmcm9tIHBsYXliYWNrIGR1ZSB0byB0aGUgYnJvd3NlcnNcclxuICogTWVkaWEgRW5nYWdlbWVudCBJbnRlcmFjdGlvbiBwb2xpY3ksIGlzIHVubG9ja2VkIGJ5IGEgdXNlciBnZXN0dXJlLlxyXG4gKiBcclxuICogTGlzdGVuIGZvciBpdCBmcm9tIGEgVmlkZW8gR2FtZSBPYmplY3QgaW5zdGFuY2UgdXNpbmcgYFZpZGVvLm9uKCd1bmxvY2tlZCcsIGxpc3RlbmVyKWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuR2FtZU9iamVjdHMuRXZlbnRzI1ZJREVPX1VOTE9DS0VEXHJcbiAqIEBzaW5jZSAzLjIwLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvfSB2aWRlbyAtIFRoZSBWaWRlbyBHYW1lIE9iamVjdCB3aGljaCByYWlzZWQgdGhlIGV2ZW50LlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAndW5sb2NrZWQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/events/VIDEO_UNLOCKED_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/events/index.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/events/index.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.GameObjects.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n DESTROY: __webpack_require__(/*! ./DESTROY_EVENT */ \"./node_modules/phaser/src/gameobjects/events/DESTROY_EVENT.js\"),\r\n VIDEO_COMPLETE: __webpack_require__(/*! ./VIDEO_COMPLETE_EVENT */ \"./node_modules/phaser/src/gameobjects/events/VIDEO_COMPLETE_EVENT.js\"),\r\n VIDEO_CREATED: __webpack_require__(/*! ./VIDEO_CREATED_EVENT */ \"./node_modules/phaser/src/gameobjects/events/VIDEO_CREATED_EVENT.js\"),\r\n VIDEO_ERROR: __webpack_require__(/*! ./VIDEO_ERROR_EVENT */ \"./node_modules/phaser/src/gameobjects/events/VIDEO_ERROR_EVENT.js\"),\r\n VIDEO_LOOP: __webpack_require__(/*! ./VIDEO_LOOP_EVENT */ \"./node_modules/phaser/src/gameobjects/events/VIDEO_LOOP_EVENT.js\"),\r\n VIDEO_PLAY: __webpack_require__(/*! ./VIDEO_PLAY_EVENT */ \"./node_modules/phaser/src/gameobjects/events/VIDEO_PLAY_EVENT.js\"),\r\n VIDEO_SEEKED: __webpack_require__(/*! ./VIDEO_SEEKED_EVENT */ \"./node_modules/phaser/src/gameobjects/events/VIDEO_SEEKED_EVENT.js\"),\r\n VIDEO_SEEKING: __webpack_require__(/*! ./VIDEO_SEEKING_EVENT */ \"./node_modules/phaser/src/gameobjects/events/VIDEO_SEEKING_EVENT.js\"),\r\n VIDEO_STOP: __webpack_require__(/*! ./VIDEO_STOP_EVENT */ \"./node_modules/phaser/src/gameobjects/events/VIDEO_STOP_EVENT.js\"),\r\n VIDEO_TIMEOUT: __webpack_require__(/*! ./VIDEO_TIMEOUT_EVENT */ \"./node_modules/phaser/src/gameobjects/events/VIDEO_TIMEOUT_EVENT.js\"),\r\n VIDEO_UNLOCKED: __webpack_require__(/*! ./VIDEO_UNLOCKED_EVENT */ \"./node_modules/phaser/src/gameobjects/events/VIDEO_UNLOCKED_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ldmVudHMvaW5kZXguanM/NWIyOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyxzRkFBaUI7QUFDdEMsb0JBQW9CLG1CQUFPLENBQUMsb0dBQXdCO0FBQ3BELG1CQUFtQixtQkFBTyxDQUFDLGtHQUF1QjtBQUNsRCxpQkFBaUIsbUJBQU8sQ0FBQyw4RkFBcUI7QUFDOUMsZ0JBQWdCLG1CQUFPLENBQUMsNEZBQW9CO0FBQzVDLGdCQUFnQixtQkFBTyxDQUFDLDRGQUFvQjtBQUM1QyxrQkFBa0IsbUJBQU8sQ0FBQyxnR0FBc0I7QUFDaEQsbUJBQW1CLG1CQUFPLENBQUMsa0dBQXVCO0FBQ2xELGdCQUFnQixtQkFBTyxDQUFDLDRGQUFvQjtBQUM1QyxtQkFBbUIsbUJBQU8sQ0FBQyxrR0FBdUI7QUFDbEQsb0JBQW9CLG1CQUFPLENBQUMsb0dBQXdCOztBQUVwRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2V2ZW50cy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkdhbWVPYmplY3RzLkV2ZW50c1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIERFU1RST1k6IHJlcXVpcmUoJy4vREVTVFJPWV9FVkVOVCcpLFxyXG4gICAgVklERU9fQ09NUExFVEU6IHJlcXVpcmUoJy4vVklERU9fQ09NUExFVEVfRVZFTlQnKSxcclxuICAgIFZJREVPX0NSRUFURUQ6IHJlcXVpcmUoJy4vVklERU9fQ1JFQVRFRF9FVkVOVCcpLFxyXG4gICAgVklERU9fRVJST1I6IHJlcXVpcmUoJy4vVklERU9fRVJST1JfRVZFTlQnKSxcclxuICAgIFZJREVPX0xPT1A6IHJlcXVpcmUoJy4vVklERU9fTE9PUF9FVkVOVCcpLFxyXG4gICAgVklERU9fUExBWTogcmVxdWlyZSgnLi9WSURFT19QTEFZX0VWRU5UJyksXHJcbiAgICBWSURFT19TRUVLRUQ6IHJlcXVpcmUoJy4vVklERU9fU0VFS0VEX0VWRU5UJyksXHJcbiAgICBWSURFT19TRUVLSU5HOiByZXF1aXJlKCcuL1ZJREVPX1NFRUtJTkdfRVZFTlQnKSxcclxuICAgIFZJREVPX1NUT1A6IHJlcXVpcmUoJy4vVklERU9fU1RPUF9FVkVOVCcpLFxyXG4gICAgVklERU9fVElNRU9VVDogcmVxdWlyZSgnLi9WSURFT19USU1FT1VUX0VWRU5UJyksXHJcbiAgICBWSURFT19VTkxPQ0tFRDogcmVxdWlyZSgnLi9WSURFT19VTkxPQ0tFRF9FVkVOVCcpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/events/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/extern/Extern.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/extern/Extern.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar ExternRender = __webpack_require__(/*! ./ExternRender */ \"./node_modules/phaser/src/gameobjects/extern/ExternRender.js\");\r\n\r\n/**\r\n * @classdesc\r\n * An Extern Game Object is a special type of Game Object that allows you to pass\r\n * rendering off to a 3rd party.\r\n * \r\n * When you create an Extern and place it in the display list of a Scene, the renderer will\r\n * process the list as usual. When it finds an Extern it will flush the current batch,\r\n * clear down the pipeline and prepare a transform matrix which your render function can\r\n * take advantage of, if required.\r\n * \r\n * The WebGL context is then left is a 'clean' state, ready for you to bind your own shaders,\r\n * or draw to it, whatever you wish to do. Once you've finished, you should free-up any\r\n * of your resources. The Extern will then rebind the Phaser pipeline and carry on \r\n * rendering the display list.\r\n * \r\n * Although this object has lots of properties such as Alpha, Blend Mode and Tint, none of\r\n * them are used during rendering unless you take advantage of them in your own render code.\r\n *\r\n * @class Extern\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.16.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Flip\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Size\r\n * @extends Phaser.GameObjects.Components.Texture\r\n * @extends Phaser.GameObjects.Components.Tint\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n */\r\nvar Extern = new Class({\r\n\r\n Extends: GameObject,\r\n\r\n Mixins: [\r\n Components.Alpha,\r\n Components.BlendMode,\r\n Components.Depth,\r\n Components.Flip,\r\n Components.Origin,\r\n Components.ScrollFactor,\r\n Components.Size,\r\n Components.Texture,\r\n Components.Tint,\r\n Components.Transform,\r\n Components.Visible,\r\n ExternRender\r\n ],\r\n\r\n initialize:\r\n\r\n function Extern (scene)\r\n {\r\n GameObject.call(this, scene, 'Extern');\r\n },\r\n\r\n preUpdate: function ()\r\n {\r\n // override this!\r\n // Arguments: time, delta\r\n },\r\n\r\n render: function ()\r\n {\r\n // override this!\r\n // Arguments: renderer, camera, calcMatrix\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Extern;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9leHRlcm4vRXh0ZXJuLmpzPzQ0N2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsZ0ZBQWU7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsMEVBQWU7QUFDeEMsbUJBQW1CLG1CQUFPLENBQUMsb0ZBQWdCOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2V4dGVybi9FeHRlcm4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cycpO1xyXG52YXIgR2FtZU9iamVjdCA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3QnKTtcclxudmFyIEV4dGVyblJlbmRlciA9IHJlcXVpcmUoJy4vRXh0ZXJuUmVuZGVyJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBbiBFeHRlcm4gR2FtZSBPYmplY3QgaXMgYSBzcGVjaWFsIHR5cGUgb2YgR2FtZSBPYmplY3QgdGhhdCBhbGxvd3MgeW91IHRvIHBhc3NcclxuICogcmVuZGVyaW5nIG9mZiB0byBhIDNyZCBwYXJ0eS5cclxuICogXHJcbiAqIFdoZW4geW91IGNyZWF0ZSBhbiBFeHRlcm4gYW5kIHBsYWNlIGl0IGluIHRoZSBkaXNwbGF5IGxpc3Qgb2YgYSBTY2VuZSwgdGhlIHJlbmRlcmVyIHdpbGxcclxuICogcHJvY2VzcyB0aGUgbGlzdCBhcyB1c3VhbC4gV2hlbiBpdCBmaW5kcyBhbiBFeHRlcm4gaXQgd2lsbCBmbHVzaCB0aGUgY3VycmVudCBiYXRjaCxcclxuICogY2xlYXIgZG93biB0aGUgcGlwZWxpbmUgYW5kIHByZXBhcmUgYSB0cmFuc2Zvcm0gbWF0cml4IHdoaWNoIHlvdXIgcmVuZGVyIGZ1bmN0aW9uIGNhblxyXG4gKiB0YWtlIGFkdmFudGFnZSBvZiwgaWYgcmVxdWlyZWQuXHJcbiAqIFxyXG4gKiBUaGUgV2ViR0wgY29udGV4dCBpcyB0aGVuIGxlZnQgaXMgYSAnY2xlYW4nIHN0YXRlLCByZWFkeSBmb3IgeW91IHRvIGJpbmQgeW91ciBvd24gc2hhZGVycyxcclxuICogb3IgZHJhdyB0byBpdCwgd2hhdGV2ZXIgeW91IHdpc2ggdG8gZG8uIE9uY2UgeW91J3ZlIGZpbmlzaGVkLCB5b3Ugc2hvdWxkIGZyZWUtdXAgYW55XHJcbiAqIG9mIHlvdXIgcmVzb3VyY2VzLiBUaGUgRXh0ZXJuIHdpbGwgdGhlbiByZWJpbmQgdGhlIFBoYXNlciBwaXBlbGluZSBhbmQgY2Fycnkgb24gXHJcbiAqIHJlbmRlcmluZyB0aGUgZGlzcGxheSBsaXN0LlxyXG4gKiBcclxuICogQWx0aG91Z2ggdGhpcyBvYmplY3QgaGFzIGxvdHMgb2YgcHJvcGVydGllcyBzdWNoIGFzIEFscGhhLCBCbGVuZCBNb2RlIGFuZCBUaW50LCBub25lIG9mXHJcbiAqIHRoZW0gYXJlIHVzZWQgZHVyaW5nIHJlbmRlcmluZyB1bmxlc3MgeW91IHRha2UgYWR2YW50YWdlIG9mIHRoZW0gaW4geW91ciBvd24gcmVuZGVyIGNvZGUuXHJcbiAqXHJcbiAqIEBjbGFzcyBFeHRlcm5cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RcclxuICogQG1lbWJlcm9mIFBoYXNlci5HYW1lT2JqZWN0c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMTYuMFxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbHBoYVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5CbGVuZE1vZGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGhcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRmxpcFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5PcmlnaW5cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2Nyb2xsRmFjdG9yXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNpemVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGV4dHVyZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UaW50XHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5WaXNpYmxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuIEEgR2FtZSBPYmplY3QgY2FuIG9ubHkgYmVsb25nIHRvIG9uZSBTY2VuZSBhdCBhIHRpbWUuXHJcbiAqL1xyXG52YXIgRXh0ZXJuID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBHYW1lT2JqZWN0LFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIENvbXBvbmVudHMuQWxwaGEsXHJcbiAgICAgICAgQ29tcG9uZW50cy5CbGVuZE1vZGUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5EZXB0aCxcclxuICAgICAgICBDb21wb25lbnRzLkZsaXAsXHJcbiAgICAgICAgQ29tcG9uZW50cy5PcmlnaW4sXHJcbiAgICAgICAgQ29tcG9uZW50cy5TY3JvbGxGYWN0b3IsXHJcbiAgICAgICAgQ29tcG9uZW50cy5TaXplLFxyXG4gICAgICAgIENvbXBvbmVudHMuVGV4dHVyZSxcclxuICAgICAgICBDb21wb25lbnRzLlRpbnQsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UcmFuc2Zvcm0sXHJcbiAgICAgICAgQ29tcG9uZW50cy5WaXNpYmxlLFxyXG4gICAgICAgIEV4dGVyblJlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEV4dGVybiAoc2NlbmUpXHJcbiAgICB7XHJcbiAgICAgICAgR2FtZU9iamVjdC5jYWxsKHRoaXMsIHNjZW5lLCAnRXh0ZXJuJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIHByZVVwZGF0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICAvLyAgb3ZlcnJpZGUgdGhpcyFcclxuICAgICAgICAvLyAgQXJndW1lbnRzOiB0aW1lLCBkZWx0YVxyXG4gICAgfSxcclxuXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIG92ZXJyaWRlIHRoaXMhXHJcbiAgICAgICAgLy8gIEFyZ3VtZW50czogcmVuZGVyZXIsIGNhbWVyYSwgY2FsY01hdHJpeFxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEV4dGVybjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/extern/Extern.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/extern/ExternCanvasRenderer.js":
/*!****************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/extern/ExternCanvasRenderer.js ***!
\****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2V4dGVybi9FeHRlcm5DYW52YXNSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/extern/ExternCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/extern/ExternFactory.js":
/*!*********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/extern/ExternFactory.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Extern = __webpack_require__(/*! ./Extern */ \"./node_modules/phaser/src/gameobjects/extern/Extern.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Extern Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Extern Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#extern\r\n * @since 3.16.0\r\n *\r\n * @return {Phaser.GameObjects.Extern} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('extern', function ()\r\n{\r\n var extern = new Extern(this.scene);\r\n\r\n this.displayList.add(extern);\r\n this.updateList.add(extern);\r\n\r\n return extern;\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n// There are several properties available to use:\r\n//\r\n// this.scene - a reference to the Scene that owns the GameObjectFactory\r\n// this.displayList - a reference to the Display List the Scene owns\r\n// this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9leHRlcm4vRXh0ZXJuRmFjdG9yeS5qcz9mYzJhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsd0VBQVU7QUFDL0Isd0JBQXdCLG1CQUFPLENBQUMsd0ZBQXNCOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSwwQkFBMEI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9leHRlcm4vRXh0ZXJuRmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEV4dGVybiA9IHJlcXVpcmUoJy4vRXh0ZXJuJyk7XHJcbnZhciBHYW1lT2JqZWN0RmFjdG9yeSA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3RGYWN0b3J5Jyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBFeHRlcm4gR2FtZSBPYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIFNjZW5lLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBFeHRlcm4gR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I2V4dGVyblxyXG4gKiBAc2luY2UgMy4xNi4wXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5FeHRlcm59IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdEZhY3RvcnkucmVnaXN0ZXIoJ2V4dGVybicsIGZ1bmN0aW9uICgpXHJcbntcclxuICAgIHZhciBleHRlcm4gPSBuZXcgRXh0ZXJuKHRoaXMuc2NlbmUpO1xyXG5cclxuICAgIHRoaXMuZGlzcGxheUxpc3QuYWRkKGV4dGVybik7XHJcbiAgICB0aGlzLnVwZGF0ZUxpc3QuYWRkKGV4dGVybik7XHJcblxyXG4gICAgcmV0dXJuIGV4dGVybjtcclxufSk7XHJcblxyXG4vLyAgV2hlbiByZWdpc3RlcmluZyBhIGZhY3RvcnkgZnVuY3Rpb24gJ3RoaXMnIHJlZmVycyB0byB0aGUgR2FtZU9iamVjdEZhY3RvcnkgY29udGV4dC5cclxuLy9cclxuLy8gIFRoZXJlIGFyZSBzZXZlcmFsIHByb3BlcnRpZXMgYXZhaWxhYmxlIHRvIHVzZTpcclxuLy9cclxuLy8gIHRoaXMuc2NlbmUgLSBhIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgdGhhdCBvd25zIHRoZSBHYW1lT2JqZWN0RmFjdG9yeVxyXG4vLyAgdGhpcy5kaXNwbGF5TGlzdCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBEaXNwbGF5IExpc3QgdGhlIFNjZW5lIG93bnNcclxuLy8gIHRoaXMudXBkYXRlTGlzdCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBVcGRhdGUgTGlzdCB0aGUgU2NlbmUgb3duc1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/extern/ExternFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/extern/ExternRender.js":
/*!********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/extern/ExternRender.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./ExternWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/extern/ExternWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./ExternCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/extern/ExternCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9leHRlcm4vRXh0ZXJuUmVuZGVyLmpzP2VlYjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLGlFQUFrQjtBQUM1QyxtQkFBbUIsbUJBQU8sQ0FBQyxpRUFBa0I7O0FBRTdDLElBQUksSUFBcUI7QUFDekI7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxrR0FBdUI7QUFDakQ7O0FBRUEsSUFBSSxJQUFzQjtBQUMxQjtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLG9HQUF3QjtBQUNuRDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvZXh0ZXJuL0V4dGVyblJlbmRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG52YXIgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG5cclxuaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuL0V4dGVybldlYkdMUmVuZGVyZXInKTtcclxufVxyXG5cclxuaWYgKHR5cGVvZiBDQU5WQVNfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4vRXh0ZXJuQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/extern/ExternRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/extern/ExternWebGLRenderer.js":
/*!***************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/extern/ExternWebGLRenderer.js ***!
\***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Extern#renderWebGL\r\n * @since 3.16.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Extern} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar ExternWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var pipeline = renderer.currentPipeline;\r\n\r\n renderer.clearPipeline();\r\n\r\n var camMatrix = renderer._tempMatrix1;\r\n var spriteMatrix = renderer._tempMatrix2;\r\n var calcMatrix = renderer._tempMatrix3;\r\n\r\n spriteMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n camMatrix.copyFrom(camera.matrix);\r\n\r\n if (parentMatrix)\r\n {\r\n // Multiply the camera by the parent matrix\r\n camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n // Undo the camera scroll\r\n spriteMatrix.e = src.x;\r\n spriteMatrix.f = src.y;\r\n\r\n // Multiply by the Sprite matrix, store result in calcMatrix\r\n camMatrix.multiply(spriteMatrix, calcMatrix);\r\n }\r\n else\r\n {\r\n spriteMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n spriteMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n\r\n // Multiply by the Sprite matrix, store result in calcMatrix\r\n camMatrix.multiply(spriteMatrix, calcMatrix);\r\n }\r\n\r\n // Callback\r\n src.render.call(src, renderer, camera, calcMatrix);\r\n\r\n renderer.rebindPipeline(pipeline);\r\n};\r\n\r\nmodule.exports = ExternWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9leHRlcm4vRXh0ZXJuV2ViR0xSZW5kZXJlci5qcz9lMjVmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9DQUFvQztBQUMvQyxXQUFXLDBCQUEwQjtBQUNyQyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvZXh0ZXJuL0V4dGVybldlYkdMUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5FeHRlcm4jcmVuZGVyV2ViR0xcclxuICogQHNpbmNlIDMuMTYuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBXZWJHTCByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuRXh0ZXJufSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgRXh0ZXJuV2ViR0xSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHZhciBwaXBlbGluZSA9IHJlbmRlcmVyLmN1cnJlbnRQaXBlbGluZTtcclxuXHJcbiAgICByZW5kZXJlci5jbGVhclBpcGVsaW5lKCk7XHJcblxyXG4gICAgdmFyIGNhbU1hdHJpeCA9IHJlbmRlcmVyLl90ZW1wTWF0cml4MTtcclxuICAgIHZhciBzcHJpdGVNYXRyaXggPSByZW5kZXJlci5fdGVtcE1hdHJpeDI7XHJcbiAgICB2YXIgY2FsY01hdHJpeCA9IHJlbmRlcmVyLl90ZW1wTWF0cml4MztcclxuXHJcbiAgICBzcHJpdGVNYXRyaXguYXBwbHlJVFJTKHNyYy54LCBzcmMueSwgc3JjLnJvdGF0aW9uLCBzcmMuc2NhbGVYLCBzcmMuc2NhbGVZKTtcclxuXHJcbiAgICBjYW1NYXRyaXguY29weUZyb20oY2FtZXJhLm1hdHJpeCk7XHJcblxyXG4gICAgaWYgKHBhcmVudE1hdHJpeClcclxuICAgIHtcclxuICAgICAgICAvLyAgTXVsdGlwbHkgdGhlIGNhbWVyYSBieSB0aGUgcGFyZW50IG1hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseVdpdGhPZmZzZXQocGFyZW50TWF0cml4LCAtY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWCwgLWNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3RvclkpO1xyXG5cclxuICAgICAgICAvLyAgVW5kbyB0aGUgY2FtZXJhIHNjcm9sbFxyXG4gICAgICAgIHNwcml0ZU1hdHJpeC5lID0gc3JjLng7XHJcbiAgICAgICAgc3ByaXRlTWF0cml4LmYgPSBzcmMueTtcclxuXHJcbiAgICAgICAgLy8gIE11bHRpcGx5IGJ5IHRoZSBTcHJpdGUgbWF0cml4LCBzdG9yZSByZXN1bHQgaW4gY2FsY01hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseShzcHJpdGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHNwcml0ZU1hdHJpeC5lIC09IGNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3Rvclg7XHJcbiAgICAgICAgc3ByaXRlTWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuXHJcbiAgICAgICAgLy8gIE11bHRpcGx5IGJ5IHRoZSBTcHJpdGUgbWF0cml4LCBzdG9yZSByZXN1bHQgaW4gY2FsY01hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseShzcHJpdGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBDYWxsYmFja1xyXG4gICAgc3JjLnJlbmRlci5jYWxsKHNyYywgcmVuZGVyZXIsIGNhbWVyYSwgY2FsY01hdHJpeCk7XHJcblxyXG4gICAgcmVuZGVyZXIucmViaW5kUGlwZWxpbmUocGlwZWxpbmUpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFeHRlcm5XZWJHTFJlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/extern/ExternWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/graphics/Commands.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/graphics/Commands.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nmodule.exports = {\r\n\r\n ARC: 0,\r\n BEGIN_PATH: 1,\r\n CLOSE_PATH: 2,\r\n FILL_RECT: 3,\r\n LINE_TO: 4,\r\n MOVE_TO: 5,\r\n LINE_STYLE: 6,\r\n FILL_STYLE: 7,\r\n FILL_PATH: 8,\r\n STROKE_PATH: 9,\r\n FILL_TRIANGLE: 10,\r\n STROKE_TRIANGLE: 11,\r\n SAVE: 14,\r\n RESTORE: 15,\r\n TRANSLATE: 16,\r\n SCALE: 17,\r\n ROTATE: 18,\r\n SET_TEXTURE: 19,\r\n CLEAR_TEXTURE: 20,\r\n GRADIENT_FILL_STYLE: 21,\r\n GRADIENT_LINE_STYLE: 22\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncmFwaGljcy9Db21tYW5kcy5qcz84ZDhjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncmFwaGljcy9Db21tYW5kcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQVJDOiAwLFxyXG4gICAgQkVHSU5fUEFUSDogMSxcclxuICAgIENMT1NFX1BBVEg6IDIsXHJcbiAgICBGSUxMX1JFQ1Q6IDMsXHJcbiAgICBMSU5FX1RPOiA0LFxyXG4gICAgTU9WRV9UTzogNSxcclxuICAgIExJTkVfU1RZTEU6IDYsXHJcbiAgICBGSUxMX1NUWUxFOiA3LFxyXG4gICAgRklMTF9QQVRIOiA4LFxyXG4gICAgU1RST0tFX1BBVEg6IDksXHJcbiAgICBGSUxMX1RSSUFOR0xFOiAxMCxcclxuICAgIFNUUk9LRV9UUklBTkdMRTogMTEsXHJcbiAgICBTQVZFOiAxNCxcclxuICAgIFJFU1RPUkU6IDE1LFxyXG4gICAgVFJBTlNMQVRFOiAxNixcclxuICAgIFNDQUxFOiAxNyxcclxuICAgIFJPVEFURTogMTgsXHJcbiAgICBTRVRfVEVYVFVSRTogMTksXHJcbiAgICBDTEVBUl9URVhUVVJFOiAyMCxcclxuICAgIEdSQURJRU5UX0ZJTExfU1RZTEU6IDIxLFxyXG4gICAgR1JBRElFTlRfTElORV9TVFlMRTogMjJcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/graphics/Commands.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/graphics/Graphics.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/graphics/Graphics.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BaseCamera = __webpack_require__(/*! ../../cameras/2d/BaseCamera.js */ \"./node_modules/phaser/src/cameras/2d/BaseCamera.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Commands = __webpack_require__(/*! ./Commands */ \"./node_modules/phaser/src/gameobjects/graphics/Commands.js\");\r\nvar ComponentsAlpha = __webpack_require__(/*! ../components/Alpha */ \"./node_modules/phaser/src/gameobjects/components/Alpha.js\");\r\nvar ComponentsBlendMode = __webpack_require__(/*! ../components/BlendMode */ \"./node_modules/phaser/src/gameobjects/components/BlendMode.js\");\r\nvar ComponentsDepth = __webpack_require__(/*! ../components/Depth */ \"./node_modules/phaser/src/gameobjects/components/Depth.js\");\r\nvar ComponentsMask = __webpack_require__(/*! ../components/Mask */ \"./node_modules/phaser/src/gameobjects/components/Mask.js\");\r\nvar ComponentsPipeline = __webpack_require__(/*! ../components/Pipeline */ \"./node_modules/phaser/src/gameobjects/components/Pipeline.js\");\r\nvar ComponentsTransform = __webpack_require__(/*! ../components/Transform */ \"./node_modules/phaser/src/gameobjects/components/Transform.js\");\r\nvar ComponentsVisible = __webpack_require__(/*! ../components/Visible */ \"./node_modules/phaser/src/gameobjects/components/Visible.js\");\r\nvar ComponentsScrollFactor = __webpack_require__(/*! ../components/ScrollFactor */ \"./node_modules/phaser/src/gameobjects/components/ScrollFactor.js\");\r\n\r\nvar TransformMatrix = __webpack_require__(/*! ../components/TransformMatrix */ \"./node_modules/phaser/src/gameobjects/components/TransformMatrix.js\");\r\n\r\nvar Ellipse = __webpack_require__(/*! ../../geom/ellipse/Ellipse */ \"./node_modules/phaser/src/geom/ellipse/Ellipse.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\nvar Render = __webpack_require__(/*! ./GraphicsRender */ \"./node_modules/phaser/src/gameobjects/graphics/GraphicsRender.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Graphics object is a way to draw primitive shapes to your game. Primitives include forms of geometry, such as\r\n * Rectangles, Circles, and Polygons. They also include lines, arcs and curves. When you initially create a Graphics\r\n * object it will be empty.\r\n *\r\n * To draw to it you must first specify a line style or fill style (or both), draw shapes using paths, and finally\r\n * fill or stroke them. For example:\r\n *\r\n * ```javascript\r\n * graphics.lineStyle(5, 0xFF00FF, 1.0);\r\n * graphics.beginPath();\r\n * graphics.moveTo(100, 100);\r\n * graphics.lineTo(200, 200);\r\n * graphics.closePath();\r\n * graphics.strokePath();\r\n * ```\r\n *\r\n * There are also many helpful methods that draw and fill/stroke common shapes for you.\r\n *\r\n * ```javascript\r\n * graphics.lineStyle(5, 0xFF00FF, 1.0);\r\n * graphics.fillStyle(0xFFFFFF, 1.0);\r\n * graphics.fillRect(50, 50, 400, 200);\r\n * graphics.strokeRect(50, 50, 400, 200);\r\n * ```\r\n *\r\n * When a Graphics object is rendered it will render differently based on if the game is running under Canvas or WebGL.\r\n * Under Canvas it will use the HTML Canvas context drawing operations to draw the path.\r\n * Under WebGL the graphics data is decomposed into polygons. Both of these are expensive processes, especially with\r\n * complex shapes.\r\n *\r\n * If your Graphics object doesn't change much (or at all) once you've drawn your shape to it, then you will help\r\n * performance by calling {@link Phaser.GameObjects.Graphics#generateTexture}. This will 'bake' the Graphics object into\r\n * a Texture, and return it. You can then use this Texture for Sprites or other display objects. If your Graphics object\r\n * updates frequently then you should avoid doing this, as it will constantly generate new textures, which will consume\r\n * memory.\r\n *\r\n * As you can tell, Graphics objects are a bit of a trade-off. While they are extremely useful, you need to be careful\r\n * in their complexity and quantity of them in your game.\r\n *\r\n * @class Graphics\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Graphics object belongs.\r\n * @param {Phaser.Types.GameObjects.Graphics.Options} [options] - Options that set the position and default style of this Graphics object.\r\n */\r\nvar Graphics = new Class({\r\n\r\n Extends: GameObject,\r\n\r\n Mixins: [\r\n ComponentsAlpha,\r\n ComponentsBlendMode,\r\n ComponentsDepth,\r\n ComponentsMask,\r\n ComponentsPipeline,\r\n ComponentsTransform,\r\n ComponentsVisible,\r\n ComponentsScrollFactor,\r\n Render\r\n ],\r\n\r\n initialize:\r\n\r\n function Graphics (scene, options)\r\n {\r\n var x = GetValue(options, 'x', 0);\r\n var y = GetValue(options, 'y', 0);\r\n\r\n GameObject.call(this, scene, 'Graphics');\r\n\r\n this.setPosition(x, y);\r\n this.initPipeline();\r\n\r\n /**\r\n * The horizontal display origin of the Graphics.\r\n *\r\n * @name Phaser.GameObjects.Graphics#displayOriginX\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.displayOriginX = 0;\r\n\r\n /**\r\n * The vertical display origin of the Graphics.\r\n *\r\n * @name Phaser.GameObjects.Graphics#displayOriginY\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.displayOriginY = 0;\r\n\r\n /**\r\n * The array of commands used to render the Graphics.\r\n *\r\n * @name Phaser.GameObjects.Graphics#commandBuffer\r\n * @type {array}\r\n * @default []\r\n * @since 3.0.0\r\n */\r\n this.commandBuffer = [];\r\n\r\n /**\r\n * The default fill color for shapes rendered by this Graphics object.\r\n *\r\n * @name Phaser.GameObjects.Graphics#defaultFillColor\r\n * @type {number}\r\n * @default -1\r\n * @since 3.0.0\r\n */\r\n this.defaultFillColor = -1;\r\n\r\n /**\r\n * The default fill alpha for shapes rendered by this Graphics object.\r\n *\r\n * @name Phaser.GameObjects.Graphics#defaultFillAlpha\r\n * @type {number}\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n this.defaultFillAlpha = 1;\r\n\r\n /**\r\n * The default stroke width for shapes rendered by this Graphics object.\r\n *\r\n * @name Phaser.GameObjects.Graphics#defaultStrokeWidth\r\n * @type {number}\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n this.defaultStrokeWidth = 1;\r\n\r\n /**\r\n * The default stroke color for shapes rendered by this Graphics object.\r\n *\r\n * @name Phaser.GameObjects.Graphics#defaultStrokeColor\r\n * @type {number}\r\n * @default -1\r\n * @since 3.0.0\r\n */\r\n this.defaultStrokeColor = -1;\r\n\r\n /**\r\n * The default stroke alpha for shapes rendered by this Graphics object.\r\n *\r\n * @name Phaser.GameObjects.Graphics#defaultStrokeAlpha\r\n * @type {number}\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n this.defaultStrokeAlpha = 1;\r\n\r\n /**\r\n * Internal property that keeps track of the line width style setting.\r\n *\r\n * @name Phaser.GameObjects.Graphics#_lineWidth\r\n * @type {number}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._lineWidth = 1.0;\r\n\r\n /**\r\n * A temporary Transform Matrix, re-used internally during batching.\r\n *\r\n * @name Phaser.GameObjects.Graphics#_tempMatrix1\r\n * @private\r\n * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n * @since 3.17.0\r\n */\r\n this._tempMatrix1 = new TransformMatrix();\r\n\r\n /**\r\n * A temporary Transform Matrix, re-used internally during batching.\r\n *\r\n * @name Phaser.GameObjects.Graphics#_tempMatrix2\r\n * @private\r\n * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n * @since 3.17.0\r\n */\r\n this._tempMatrix2 = new TransformMatrix();\r\n\r\n /**\r\n * A temporary Transform Matrix, re-used internally during batching.\r\n *\r\n * @name Phaser.GameObjects.Graphics#_tempMatrix3\r\n * @private\r\n * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n * @since 3.17.0\r\n */\r\n this._tempMatrix3 = new TransformMatrix();\r\n\r\n this.setDefaultStyles(options);\r\n },\r\n\r\n /**\r\n * Set the default style settings for this Graphics object.\r\n *\r\n * @method Phaser.GameObjects.Graphics#setDefaultStyles\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Graphics.Styles} options - The styles to set as defaults.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n setDefaultStyles: function (options)\r\n {\r\n if (GetValue(options, 'lineStyle', null))\r\n {\r\n this.defaultStrokeWidth = GetValue(options, 'lineStyle.width', 1);\r\n this.defaultStrokeColor = GetValue(options, 'lineStyle.color', 0xffffff);\r\n this.defaultStrokeAlpha = GetValue(options, 'lineStyle.alpha', 1);\r\n\r\n this.lineStyle(this.defaultStrokeWidth, this.defaultStrokeColor, this.defaultStrokeAlpha);\r\n }\r\n\r\n if (GetValue(options, 'fillStyle', null))\r\n {\r\n this.defaultFillColor = GetValue(options, 'fillStyle.color', 0xffffff);\r\n this.defaultFillAlpha = GetValue(options, 'fillStyle.alpha', 1);\r\n\r\n this.fillStyle(this.defaultFillColor, this.defaultFillAlpha);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the current line style.\r\n *\r\n * @method Phaser.GameObjects.Graphics#lineStyle\r\n * @since 3.0.0\r\n *\r\n * @param {number} lineWidth - The stroke width.\r\n * @param {number} color - The stroke color.\r\n * @param {number} [alpha=1] - The stroke alpha.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n lineStyle: function (lineWidth, color, alpha)\r\n {\r\n if (alpha === undefined) { alpha = 1; }\r\n\r\n this.commandBuffer.push(\r\n Commands.LINE_STYLE,\r\n lineWidth, color, alpha\r\n );\r\n\r\n this._lineWidth = lineWidth;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the current fill style.\r\n *\r\n * @method Phaser.GameObjects.Graphics#fillStyle\r\n * @since 3.0.0\r\n *\r\n * @param {number} color - The fill color.\r\n * @param {number} [alpha=1] - The fill alpha.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n fillStyle: function (color, alpha)\r\n {\r\n if (alpha === undefined) { alpha = 1; }\r\n\r\n this.commandBuffer.push(\r\n Commands.FILL_STYLE,\r\n color, alpha\r\n );\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets a gradient fill style. This is a WebGL only feature.\r\n *\r\n * The gradient color values represent the 4 corners of an untransformed rectangle.\r\n * The gradient is used to color all filled shapes and paths drawn after calling this method.\r\n * If you wish to turn a gradient off, call `fillStyle` and provide a new single fill color.\r\n *\r\n * When filling a triangle only the first 3 color values provided are used for the 3 points of a triangle.\r\n *\r\n * This feature is best used only on rectangles and triangles. All other shapes will give strange results.\r\n *\r\n * Note that for objects such as arcs or ellipses, or anything which is made out of triangles, each triangle used\r\n * will be filled with a gradient on its own. There is no ability to gradient fill a shape or path as a single\r\n * entity at this time.\r\n *\r\n * @method Phaser.GameObjects.Graphics#fillGradientStyle\r\n * @webglOnly\r\n * @since 3.12.0\r\n *\r\n * @param {integer} topLeft - The tint being applied to the top-left of the Game Object.\r\n * @param {integer} topRight - The tint being applied to the top-right of the Game Object.\r\n * @param {integer} bottomLeft - The tint being applied to the bottom-left of the Game Object.\r\n * @param {integer} bottomRight - The tint being applied to the bottom-right of the Game Object.\r\n * @param {number} [alpha=1] - The fill alpha.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n fillGradientStyle: function (topLeft, topRight, bottomLeft, bottomRight, alpha)\r\n {\r\n if (alpha === undefined) { alpha = 1; }\r\n\r\n this.commandBuffer.push(\r\n Commands.GRADIENT_FILL_STYLE,\r\n alpha, topLeft, topRight, bottomLeft, bottomRight\r\n );\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets a gradient line style. This is a WebGL only feature.\r\n *\r\n * The gradient color values represent the 4 corners of an untransformed rectangle.\r\n * The gradient is used to color all stroked shapes and paths drawn after calling this method.\r\n * If you wish to turn a gradient off, call `lineStyle` and provide a new single line color.\r\n *\r\n * This feature is best used only on single lines. All other shapes will give strange results.\r\n *\r\n * Note that for objects such as arcs or ellipses, or anything which is made out of triangles, each triangle used\r\n * will be filled with a gradient on its own. There is no ability to gradient stroke a shape or path as a single\r\n * entity at this time.\r\n *\r\n * @method Phaser.GameObjects.Graphics#lineGradientStyle\r\n * @webglOnly\r\n * @since 3.12.0\r\n *\r\n * @param {number} lineWidth - The stroke width.\r\n * @param {integer} topLeft - The tint being applied to the top-left of the Game Object.\r\n * @param {integer} topRight - The tint being applied to the top-right of the Game Object.\r\n * @param {integer} bottomLeft - The tint being applied to the bottom-left of the Game Object.\r\n * @param {integer} bottomRight - The tint being applied to the bottom-right of the Game Object.\r\n * @param {number} [alpha=1] - The fill alpha.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n lineGradientStyle: function (lineWidth, topLeft, topRight, bottomLeft, bottomRight, alpha)\r\n {\r\n if (alpha === undefined) { alpha = 1; }\r\n\r\n this.commandBuffer.push(\r\n Commands.GRADIENT_LINE_STYLE,\r\n lineWidth, alpha, topLeft, topRight, bottomLeft, bottomRight\r\n );\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the texture frame this Graphics Object will use when drawing all shapes defined after calling this.\r\n *\r\n * Textures are referenced by their string-based keys, as stored in the Texture Manager.\r\n *\r\n * Once set, all shapes will use this texture. Call this method with no arguments to clear it.\r\n *\r\n * The textures are not tiled. They are stretched to the dimensions of the shapes being rendered. For this reason,\r\n * it works best with seamless / tileable textures.\r\n *\r\n * The mode argument controls how the textures are combined with the fill colors. The default value (0) will\r\n * multiply the texture by the fill color. A value of 1 will use just the fill color, but the alpha data from the texture,\r\n * and a value of 2 will use just the texture and no fill color at all.\r\n *\r\n * @method Phaser.GameObjects.Graphics#setTexture\r\n * @since 3.12.0\r\n * @webglOnly\r\n *\r\n * @param {string} [key] - The key of the texture to be used, as stored in the Texture Manager. Leave blank to clear a previously set texture.\r\n * @param {(string|integer)} [frame] - The name or index of the frame within the Texture.\r\n * @param {number} [mode=0] - The texture tint mode. 0 is multiply, 1 is alpha only and 2 is texture only.\r\n *\r\n * @return {this} This Game Object.\r\n */\r\n setTexture: function (key, frame, mode)\r\n {\r\n if (mode === undefined) { mode = 0; }\r\n\r\n if (key === undefined)\r\n {\r\n this.commandBuffer.push(\r\n Commands.CLEAR_TEXTURE\r\n );\r\n }\r\n else\r\n {\r\n var textureFrame = this.scene.sys.textures.getFrame(key, frame);\r\n\r\n if (textureFrame)\r\n {\r\n if (mode === 2)\r\n {\r\n mode = 3;\r\n }\r\n\r\n this.commandBuffer.push(\r\n Commands.SET_TEXTURE,\r\n textureFrame,\r\n mode\r\n );\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Start a new shape path.\r\n *\r\n * @method Phaser.GameObjects.Graphics#beginPath\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n beginPath: function ()\r\n {\r\n this.commandBuffer.push(\r\n Commands.BEGIN_PATH\r\n );\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Close the current path.\r\n *\r\n * @method Phaser.GameObjects.Graphics#closePath\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n closePath: function ()\r\n {\r\n this.commandBuffer.push(\r\n Commands.CLOSE_PATH\r\n );\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Fill the current path.\r\n *\r\n * @method Phaser.GameObjects.Graphics#fillPath\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n fillPath: function ()\r\n {\r\n this.commandBuffer.push(\r\n Commands.FILL_PATH\r\n );\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Fill the current path.\r\n * \r\n * This is an alias for `Graphics.fillPath` and does the same thing.\r\n * It was added to match the CanvasRenderingContext 2D API.\r\n *\r\n * @method Phaser.GameObjects.Graphics#fill\r\n * @since 3.16.0\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n fill: function ()\r\n {\r\n this.commandBuffer.push(\r\n Commands.FILL_PATH\r\n );\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Stroke the current path.\r\n *\r\n * @method Phaser.GameObjects.Graphics#strokePath\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n strokePath: function ()\r\n {\r\n this.commandBuffer.push(\r\n Commands.STROKE_PATH\r\n );\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Stroke the current path.\r\n * \r\n * This is an alias for `Graphics.strokePath` and does the same thing.\r\n * It was added to match the CanvasRenderingContext 2D API.\r\n *\r\n * @method Phaser.GameObjects.Graphics#stroke\r\n * @since 3.16.0\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n stroke: function ()\r\n {\r\n this.commandBuffer.push(\r\n Commands.STROKE_PATH\r\n );\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Fill the given circle.\r\n *\r\n * @method Phaser.GameObjects.Graphics#fillCircleShape\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The circle to fill.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n fillCircleShape: function (circle)\r\n {\r\n return this.fillCircle(circle.x, circle.y, circle.radius);\r\n },\r\n\r\n /**\r\n * Stroke the given circle.\r\n *\r\n * @method Phaser.GameObjects.Graphics#strokeCircleShape\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The circle to stroke.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n strokeCircleShape: function (circle)\r\n {\r\n return this.strokeCircle(circle.x, circle.y, circle.radius);\r\n },\r\n\r\n /**\r\n * Fill a circle with the given position and radius.\r\n *\r\n * @method Phaser.GameObjects.Graphics#fillCircle\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x coordinate of the center of the circle.\r\n * @param {number} y - The y coordinate of the center of the circle.\r\n * @param {number} radius - The radius of the circle.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n fillCircle: function (x, y, radius)\r\n {\r\n this.beginPath();\r\n this.arc(x, y, radius, 0, MATH_CONST.PI2);\r\n this.fillPath();\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Stroke a circle with the given position and radius.\r\n *\r\n * @method Phaser.GameObjects.Graphics#strokeCircle\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x coordinate of the center of the circle.\r\n * @param {number} y - The y coordinate of the center of the circle.\r\n * @param {number} radius - The radius of the circle.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n strokeCircle: function (x, y, radius)\r\n {\r\n this.beginPath();\r\n this.arc(x, y, radius, 0, MATH_CONST.PI2);\r\n this.strokePath();\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Fill the given rectangle.\r\n *\r\n * @method Phaser.GameObjects.Graphics#fillRectShape\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The rectangle to fill.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n fillRectShape: function (rect)\r\n {\r\n return this.fillRect(rect.x, rect.y, rect.width, rect.height);\r\n },\r\n\r\n /**\r\n * Stroke the given rectangle.\r\n *\r\n * @method Phaser.GameObjects.Graphics#strokeRectShape\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The rectangle to stroke.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n strokeRectShape: function (rect)\r\n {\r\n return this.strokeRect(rect.x, rect.y, rect.width, rect.height);\r\n },\r\n\r\n /**\r\n * Fill a rectangle with the given position and size.\r\n *\r\n * @method Phaser.GameObjects.Graphics#fillRect\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x coordinate of the top-left of the rectangle.\r\n * @param {number} y - The y coordinate of the top-left of the rectangle.\r\n * @param {number} width - The width of the rectangle.\r\n * @param {number} height - The height of the rectangle.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n fillRect: function (x, y, width, height)\r\n {\r\n this.commandBuffer.push(\r\n Commands.FILL_RECT,\r\n x, y, width, height\r\n );\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Stroke a rectangle with the given position and size.\r\n *\r\n * @method Phaser.GameObjects.Graphics#strokeRect\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x coordinate of the top-left of the rectangle.\r\n * @param {number} y - The y coordinate of the top-left of the rectangle.\r\n * @param {number} width - The width of the rectangle.\r\n * @param {number} height - The height of the rectangle.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n strokeRect: function (x, y, width, height)\r\n {\r\n var lineWidthHalf = this._lineWidth / 2;\r\n var minx = x - lineWidthHalf;\r\n var maxx = x + lineWidthHalf;\r\n\r\n this.beginPath();\r\n this.moveTo(x, y);\r\n this.lineTo(x, y + height);\r\n this.strokePath();\r\n\r\n this.beginPath();\r\n this.moveTo(x + width, y);\r\n this.lineTo(x + width, y + height);\r\n this.strokePath();\r\n\r\n this.beginPath();\r\n this.moveTo(minx, y);\r\n this.lineTo(maxx + width, y);\r\n this.strokePath();\r\n\r\n this.beginPath();\r\n this.moveTo(minx, y + height);\r\n this.lineTo(maxx + width, y + height);\r\n this.strokePath();\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Fill a rounded rectangle with the given position, size and radius.\r\n *\r\n * @method Phaser.GameObjects.Graphics#fillRoundedRect\r\n * @since 3.11.0\r\n *\r\n * @param {number} x - The x coordinate of the top-left of the rectangle.\r\n * @param {number} y - The y coordinate of the top-left of the rectangle.\r\n * @param {number} width - The width of the rectangle.\r\n * @param {number} height - The height of the rectangle.\r\n * @param {(Phaser.Types.GameObjects.Graphics.RoundedRectRadius|number)} [radius=20] - The corner radius; It can also be an object to specify different radii for corners.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n fillRoundedRect: function (x, y, width, height, radius)\r\n {\r\n if (radius === undefined) { radius = 20; }\r\n\r\n var tl = radius;\r\n var tr = radius;\r\n var bl = radius;\r\n var br = radius;\r\n\r\n if (typeof radius !== 'number')\r\n {\r\n tl = GetFastValue(radius, 'tl', 20);\r\n tr = GetFastValue(radius, 'tr', 20);\r\n bl = GetFastValue(radius, 'bl', 20);\r\n br = GetFastValue(radius, 'br', 20);\r\n }\r\n\r\n this.beginPath();\r\n this.moveTo(x + tl, y);\r\n this.lineTo(x + width - tr, y);\r\n this.arc(x + width - tr, y + tr, tr, -MATH_CONST.TAU, 0);\r\n this.lineTo(x + width, y + height - br);\r\n this.arc(x + width - br, y + height - br, br, 0, MATH_CONST.TAU);\r\n this.lineTo(x + bl, y + height);\r\n this.arc(x + bl, y + height - bl, bl, MATH_CONST.TAU, Math.PI);\r\n this.lineTo(x, y + tl);\r\n this.arc(x + tl, y + tl, tl, -Math.PI, -MATH_CONST.TAU);\r\n this.fillPath();\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Stroke a rounded rectangle with the given position, size and radius.\r\n *\r\n * @method Phaser.GameObjects.Graphics#strokeRoundedRect\r\n * @since 3.11.0\r\n *\r\n * @param {number} x - The x coordinate of the top-left of the rectangle.\r\n * @param {number} y - The y coordinate of the top-left of the rectangle.\r\n * @param {number} width - The width of the rectangle.\r\n * @param {number} height - The height of the rectangle.\r\n * @param {(Phaser.Types.GameObjects.Graphics.RoundedRectRadius|number)} [radius=20] - The corner radius; It can also be an object to specify different radii for corners.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n strokeRoundedRect: function (x, y, width, height, radius)\r\n {\r\n if (radius === undefined) { radius = 20; }\r\n\r\n var tl = radius;\r\n var tr = radius;\r\n var bl = radius;\r\n var br = radius;\r\n\r\n if (typeof radius !== 'number')\r\n {\r\n tl = GetFastValue(radius, 'tl', 20);\r\n tr = GetFastValue(radius, 'tr', 20);\r\n bl = GetFastValue(radius, 'bl', 20);\r\n br = GetFastValue(radius, 'br', 20);\r\n }\r\n\r\n this.beginPath();\r\n this.moveTo(x + tl, y);\r\n this.lineTo(x + width - tr, y);\r\n this.arc(x + width - tr, y + tr, tr, -MATH_CONST.TAU, 0);\r\n this.lineTo(x + width, y + height - br);\r\n this.arc(x + width - br, y + height - br, br, 0, MATH_CONST.TAU);\r\n this.lineTo(x + bl, y + height);\r\n this.arc(x + bl, y + height - bl, bl, MATH_CONST.TAU, Math.PI);\r\n this.lineTo(x, y + tl);\r\n this.arc(x + tl, y + tl, tl, -Math.PI, -MATH_CONST.TAU);\r\n this.strokePath();\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Fill the given point.\r\n *\r\n * Draws a square at the given position, 1 pixel in size by default.\r\n *\r\n * @method Phaser.GameObjects.Graphics#fillPointShape\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Geom.Point|Phaser.Math.Vector2|object)} point - The point to fill.\r\n * @param {number} [size=1] - The size of the square to draw.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n fillPointShape: function (point, size)\r\n {\r\n return this.fillPoint(point.x, point.y, size);\r\n },\r\n\r\n /**\r\n * Fill a point at the given position.\r\n *\r\n * Draws a square at the given position, 1 pixel in size by default.\r\n *\r\n * @method Phaser.GameObjects.Graphics#fillPoint\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x coordinate of the point.\r\n * @param {number} y - The y coordinate of the point.\r\n * @param {number} [size=1] - The size of the square to draw.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n fillPoint: function (x, y, size)\r\n {\r\n if (!size || size < 1)\r\n {\r\n size = 1;\r\n }\r\n else\r\n {\r\n x -= (size / 2);\r\n y -= (size / 2);\r\n }\r\n\r\n this.commandBuffer.push(\r\n Commands.FILL_RECT,\r\n x, y, size, size\r\n );\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Fill the given triangle.\r\n *\r\n * @method Phaser.GameObjects.Graphics#fillTriangleShape\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The triangle to fill.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n fillTriangleShape: function (triangle)\r\n {\r\n return this.fillTriangle(triangle.x1, triangle.y1, triangle.x2, triangle.y2, triangle.x3, triangle.y3);\r\n },\r\n\r\n /**\r\n * Stroke the given triangle.\r\n *\r\n * @method Phaser.GameObjects.Graphics#strokeTriangleShape\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The triangle to stroke.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n strokeTriangleShape: function (triangle)\r\n {\r\n return this.strokeTriangle(triangle.x1, triangle.y1, triangle.x2, triangle.y2, triangle.x3, triangle.y3);\r\n },\r\n\r\n /**\r\n * Fill a triangle with the given points.\r\n *\r\n * @method Phaser.GameObjects.Graphics#fillTriangle\r\n * @since 3.0.0\r\n *\r\n * @param {number} x0 - The x coordinate of the first point.\r\n * @param {number} y0 - The y coordinate of the first point.\r\n * @param {number} x1 - The x coordinate of the second point.\r\n * @param {number} y1 - The y coordinate of the second point.\r\n * @param {number} x2 - The x coordinate of the third point.\r\n * @param {number} y2 - The y coordinate of the third point.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n fillTriangle: function (x0, y0, x1, y1, x2, y2)\r\n {\r\n this.commandBuffer.push(\r\n Commands.FILL_TRIANGLE,\r\n x0, y0, x1, y1, x2, y2\r\n );\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Stroke a triangle with the given points.\r\n *\r\n * @method Phaser.GameObjects.Graphics#strokeTriangle\r\n * @since 3.0.0\r\n *\r\n * @param {number} x0 - The x coordinate of the first point.\r\n * @param {number} y0 - The y coordinate of the first point.\r\n * @param {number} x1 - The x coordinate of the second point.\r\n * @param {number} y1 - The y coordinate of the second point.\r\n * @param {number} x2 - The x coordinate of the third point.\r\n * @param {number} y2 - The y coordinate of the third point.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n strokeTriangle: function (x0, y0, x1, y1, x2, y2)\r\n {\r\n this.commandBuffer.push(\r\n Commands.STROKE_TRIANGLE,\r\n x0, y0, x1, y1, x2, y2\r\n );\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Draw the given line.\r\n *\r\n * @method Phaser.GameObjects.Graphics#strokeLineShape\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to stroke.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n strokeLineShape: function (line)\r\n {\r\n return this.lineBetween(line.x1, line.y1, line.x2, line.y2);\r\n },\r\n\r\n /**\r\n * Draw a line between the given points.\r\n *\r\n * @method Phaser.GameObjects.Graphics#lineBetween\r\n * @since 3.0.0\r\n *\r\n * @param {number} x1 - The x coordinate of the start point of the line.\r\n * @param {number} y1 - The y coordinate of the start point of the line.\r\n * @param {number} x2 - The x coordinate of the end point of the line.\r\n * @param {number} y2 - The y coordinate of the end point of the line.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n lineBetween: function (x1, y1, x2, y2)\r\n {\r\n this.beginPath();\r\n this.moveTo(x1, y1);\r\n this.lineTo(x2, y2);\r\n this.strokePath();\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Draw a line from the current drawing position to the given position.\r\n *\r\n * Moves the current drawing position to the given position.\r\n *\r\n * @method Phaser.GameObjects.Graphics#lineTo\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x coordinate to draw the line to.\r\n * @param {number} y - The y coordinate to draw the line to.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n lineTo: function (x, y)\r\n {\r\n this.commandBuffer.push(\r\n Commands.LINE_TO,\r\n x, y\r\n );\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Move the current drawing position to the given position.\r\n *\r\n * @method Phaser.GameObjects.Graphics#moveTo\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x coordinate to move to.\r\n * @param {number} y - The y coordinate to move to.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n moveTo: function (x, y)\r\n {\r\n this.commandBuffer.push(\r\n Commands.MOVE_TO,\r\n x, y\r\n );\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Stroke the shape represented by the given array of points.\r\n *\r\n * Pass `closeShape` to automatically close the shape by joining the last to the first point.\r\n * \r\n * Pass `closePath` to automatically close the path before it is stroked.\r\n *\r\n * @method Phaser.GameObjects.Graphics#strokePoints\r\n * @since 3.0.0\r\n *\r\n * @param {(array|Phaser.Geom.Point[])} points - The points to stroke.\r\n * @param {boolean} [closeShape=false] - When `true`, the shape is closed by joining the last point to the first point.\r\n * @param {boolean} [closePath=false] - When `true`, the path is closed before being stroked.\r\n * @param {integer} [endIndex] - The index of `points` to stop drawing at. Defaults to `points.length`.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n strokePoints: function (points, closeShape, closePath, endIndex)\r\n {\r\n if (closeShape === undefined) { closeShape = false; }\r\n if (closePath === undefined) { closePath = false; }\r\n if (endIndex === undefined) { endIndex = points.length; }\r\n\r\n this.beginPath();\r\n\r\n this.moveTo(points[0].x, points[0].y);\r\n\r\n for (var i = 1; i < endIndex; i++)\r\n {\r\n this.lineTo(points[i].x, points[i].y);\r\n }\r\n\r\n if (closeShape)\r\n {\r\n this.lineTo(points[0].x, points[0].y);\r\n }\r\n\r\n if (closePath)\r\n {\r\n this.closePath();\r\n }\r\n\r\n this.strokePath();\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Fill the shape represented by the given array of points.\r\n *\r\n * Pass `closeShape` to automatically close the shape by joining the last to the first point.\r\n * \r\n * Pass `closePath` to automatically close the path before it is filled.\r\n *\r\n * @method Phaser.GameObjects.Graphics#fillPoints\r\n * @since 3.0.0\r\n *\r\n * @param {(array|Phaser.Geom.Point[])} points - The points to fill.\r\n * @param {boolean} [closeShape=false] - When `true`, the shape is closed by joining the last point to the first point.\r\n * @param {boolean} [closePath=false] - When `true`, the path is closed before being stroked.\r\n * @param {integer} [endIndex] - The index of `points` to stop at. Defaults to `points.length`.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n fillPoints: function (points, closeShape, closePath, endIndex)\r\n {\r\n if (closeShape === undefined) { closeShape = false; }\r\n if (closePath === undefined) { closePath = false; }\r\n if (endIndex === undefined) { endIndex = points.length; }\r\n\r\n this.beginPath();\r\n\r\n this.moveTo(points[0].x, points[0].y);\r\n\r\n for (var i = 1; i < endIndex; i++)\r\n {\r\n this.lineTo(points[i].x, points[i].y);\r\n }\r\n\r\n if (closeShape)\r\n {\r\n this.lineTo(points[0].x, points[0].y);\r\n }\r\n\r\n if (closePath)\r\n {\r\n this.closePath();\r\n }\r\n\r\n this.fillPath();\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Stroke the given ellipse.\r\n *\r\n * @method Phaser.GameObjects.Graphics#strokeEllipseShape\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The ellipse to stroke.\r\n * @param {integer} [smoothness=32] - The number of points to draw the ellipse with.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n strokeEllipseShape: function (ellipse, smoothness)\r\n {\r\n if (smoothness === undefined) { smoothness = 32; }\r\n\r\n var points = ellipse.getPoints(smoothness);\r\n\r\n return this.strokePoints(points, true);\r\n },\r\n\r\n /**\r\n * Stroke an ellipse with the given position and size.\r\n *\r\n * @method Phaser.GameObjects.Graphics#strokeEllipse\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x coordinate of the center of the ellipse.\r\n * @param {number} y - The y coordinate of the center of the ellipse.\r\n * @param {number} width - The width of the ellipse.\r\n * @param {number} height - The height of the ellipse.\r\n * @param {integer} [smoothness=32] - The number of points to draw the ellipse with.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n strokeEllipse: function (x, y, width, height, smoothness)\r\n {\r\n if (smoothness === undefined) { smoothness = 32; }\r\n\r\n var ellipse = new Ellipse(x, y, width, height);\r\n\r\n var points = ellipse.getPoints(smoothness);\r\n\r\n return this.strokePoints(points, true);\r\n },\r\n\r\n /**\r\n * Fill the given ellipse.\r\n *\r\n * @method Phaser.GameObjects.Graphics#fillEllipseShape\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The ellipse to fill.\r\n * @param {integer} [smoothness=32] - The number of points to draw the ellipse with.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n fillEllipseShape: function (ellipse, smoothness)\r\n {\r\n if (smoothness === undefined) { smoothness = 32; }\r\n\r\n var points = ellipse.getPoints(smoothness);\r\n\r\n return this.fillPoints(points, true);\r\n },\r\n\r\n /**\r\n * Fill an ellipse with the given position and size.\r\n *\r\n * @method Phaser.GameObjects.Graphics#fillEllipse\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x coordinate of the center of the ellipse.\r\n * @param {number} y - The y coordinate of the center of the ellipse.\r\n * @param {number} width - The width of the ellipse.\r\n * @param {number} height - The height of the ellipse.\r\n * @param {integer} [smoothness=32] - The number of points to draw the ellipse with.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n fillEllipse: function (x, y, width, height, smoothness)\r\n {\r\n if (smoothness === undefined) { smoothness = 32; }\r\n\r\n var ellipse = new Ellipse(x, y, width, height);\r\n\r\n var points = ellipse.getPoints(smoothness);\r\n\r\n return this.fillPoints(points, true);\r\n },\r\n\r\n /**\r\n * Draw an arc.\r\n *\r\n * This method can be used to create circles, or parts of circles.\r\n * \r\n * Make sure you call `beginPath` before starting the arc unless you wish for the arc to automatically\r\n * close when filled or stroked.\r\n *\r\n * Use the optional `overshoot` argument increase the number of iterations that take place when\r\n * the arc is rendered in WebGL. This is useful if you're drawing an arc with an especially thick line,\r\n * as it will allow the arc to fully join-up. Try small values at first, i.e. 0.01.\r\n *\r\n * Call {@link Phaser.GameObjects.Graphics#fillPath} or {@link Phaser.GameObjects.Graphics#strokePath} after calling\r\n * this method to draw the arc.\r\n *\r\n * @method Phaser.GameObjects.Graphics#arc\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x coordinate of the center of the circle.\r\n * @param {number} y - The y coordinate of the center of the circle.\r\n * @param {number} radius - The radius of the circle.\r\n * @param {number} startAngle - The starting angle, in radians.\r\n * @param {number} endAngle - The ending angle, in radians.\r\n * @param {boolean} [anticlockwise=false] - Whether the drawing should be anticlockwise or clockwise.\r\n * @param {number} [overshoot=0] - This value allows you to increase the segment iterations in WebGL rendering. Useful if the arc has a thick stroke and needs to overshoot to join-up cleanly. Use small numbers such as 0.01 to start with and increase as needed.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n arc: function (x, y, radius, startAngle, endAngle, anticlockwise, overshoot)\r\n {\r\n if (anticlockwise === undefined) { anticlockwise = false; }\r\n if (overshoot === undefined) { overshoot = 0; }\r\n\r\n this.commandBuffer.push(\r\n Commands.ARC,\r\n x, y, radius, startAngle, endAngle, anticlockwise, overshoot\r\n );\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Creates a pie-chart slice shape centered at `x`, `y` with the given radius.\r\n * You must define the start and end angle of the slice.\r\n *\r\n * Setting the `anticlockwise` argument to `true` creates a shape similar to Pacman.\r\n * Setting it to `false` creates a shape like a slice of pie.\r\n *\r\n * This method will begin a new path and close the path at the end of it.\r\n * To display the actual slice you need to call either `strokePath` or `fillPath` after it.\r\n *\r\n * @method Phaser.GameObjects.Graphics#slice\r\n * @since 3.4.0\r\n *\r\n * @param {number} x - The horizontal center of the slice.\r\n * @param {number} y - The vertical center of the slice.\r\n * @param {number} radius - The radius of the slice.\r\n * @param {number} startAngle - The start angle of the slice, given in radians.\r\n * @param {number} endAngle - The end angle of the slice, given in radians.\r\n * @param {boolean} [anticlockwise=false] - Whether the drawing should be anticlockwise or clockwise.\r\n * @param {number} [overshoot=0] - This value allows you to overshoot the endAngle by this amount. Useful if the arc has a thick stroke and needs to overshoot to join-up cleanly.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n slice: function (x, y, radius, startAngle, endAngle, anticlockwise, overshoot)\r\n {\r\n if (anticlockwise === undefined) { anticlockwise = false; }\r\n if (overshoot === undefined) { overshoot = 0; }\r\n\r\n this.commandBuffer.push(Commands.BEGIN_PATH);\r\n\r\n this.commandBuffer.push(Commands.MOVE_TO, x, y);\r\n\r\n this.commandBuffer.push(Commands.ARC, x, y, radius, startAngle, endAngle, anticlockwise, overshoot);\r\n\r\n this.commandBuffer.push(Commands.CLOSE_PATH);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Saves the state of the Graphics by pushing the current state onto a stack.\r\n *\r\n * The most recently saved state can then be restored with {@link Phaser.GameObjects.Graphics#restore}.\r\n *\r\n * @method Phaser.GameObjects.Graphics#save\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n save: function ()\r\n {\r\n this.commandBuffer.push(\r\n Commands.SAVE\r\n );\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Restores the most recently saved state of the Graphics by popping from the state stack.\r\n *\r\n * Use {@link Phaser.GameObjects.Graphics#save} to save the current state, and call this afterwards to restore that state.\r\n *\r\n * If there is no saved state, this command does nothing.\r\n *\r\n * @method Phaser.GameObjects.Graphics#restore\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n restore: function ()\r\n {\r\n this.commandBuffer.push(\r\n Commands.RESTORE\r\n );\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Inserts a translation command into this Graphics objects command buffer.\r\n * \r\n * All objects drawn _after_ calling this method will be translated\r\n * by the given amount.\r\n * \r\n * This does not change the position of the Graphics object itself,\r\n * only of the objects drawn by it after calling this method.\r\n *\r\n * @method Phaser.GameObjects.Graphics#translateCanvas\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal translation to apply.\r\n * @param {number} y - The vertical translation to apply.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n translateCanvas: function (x, y)\r\n {\r\n this.commandBuffer.push(\r\n Commands.TRANSLATE,\r\n x, y\r\n );\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Inserts a scale command into this Graphics objects command buffer.\r\n * \r\n * All objects drawn _after_ calling this method will be scaled\r\n * by the given amount.\r\n * \r\n * This does not change the scale of the Graphics object itself,\r\n * only of the objects drawn by it after calling this method.\r\n *\r\n * @method Phaser.GameObjects.Graphics#scaleCanvas\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal scale to apply.\r\n * @param {number} y - The vertical scale to apply.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n scaleCanvas: function (x, y)\r\n {\r\n this.commandBuffer.push(\r\n Commands.SCALE,\r\n x, y\r\n );\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Inserts a rotation command into this Graphics objects command buffer.\r\n * \r\n * All objects drawn _after_ calling this method will be rotated\r\n * by the given amount.\r\n * \r\n * This does not change the rotation of the Graphics object itself,\r\n * only of the objects drawn by it after calling this method.\r\n *\r\n * @method Phaser.GameObjects.Graphics#rotateCanvas\r\n * @since 3.0.0\r\n *\r\n * @param {number} radians - The rotation angle, in radians.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n rotateCanvas: function (radians)\r\n {\r\n this.commandBuffer.push(\r\n Commands.ROTATE,\r\n radians\r\n );\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Clear the command buffer and reset the fill style and line style to their defaults.\r\n *\r\n * @method Phaser.GameObjects.Graphics#clear\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n clear: function ()\r\n {\r\n this.commandBuffer.length = 0;\r\n\r\n if (this.defaultFillColor > -1)\r\n {\r\n this.fillStyle(this.defaultFillColor, this.defaultFillAlpha);\r\n }\r\n\r\n if (this.defaultStrokeColor > -1)\r\n {\r\n this.lineStyle(this.defaultStrokeWidth, this.defaultStrokeColor, this.defaultStrokeAlpha);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Generate a texture from this Graphics object.\r\n *\r\n * If `key` is a string it'll generate a new texture using it and add it into the\r\n * Texture Manager (assuming no key conflict happens).\r\n *\r\n * If `key` is a Canvas it will draw the texture to that canvas context. Note that it will NOT\r\n * automatically upload it to the GPU in WebGL mode.\r\n *\r\n * @method Phaser.GameObjects.Graphics#generateTexture\r\n * @since 3.0.0\r\n *\r\n * @param {(string|HTMLCanvasElement)} key - The key to store the texture with in the Texture Manager, or a Canvas to draw to.\r\n * @param {integer} [width] - The width of the graphics to generate.\r\n * @param {integer} [height] - The height of the graphics to generate.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} This Game Object.\r\n */\r\n generateTexture: function (key, width, height)\r\n {\r\n var sys = this.scene.sys;\r\n var renderer = sys.game.renderer;\r\n\r\n if (width === undefined) { width = sys.scale.width; }\r\n if (height === undefined) { height = sys.scale.height; }\r\n\r\n Graphics.TargetCamera.setScene(this.scene);\r\n Graphics.TargetCamera.setViewport(0, 0, width, height);\r\n Graphics.TargetCamera.scrollX = this.x;\r\n Graphics.TargetCamera.scrollY = this.y;\r\n\r\n var texture;\r\n var ctx;\r\n\r\n if (typeof key === 'string')\r\n {\r\n if (sys.textures.exists(key))\r\n {\r\n // Key is a string, it DOES exist in the Texture Manager AND is a canvas, so draw to it\r\n\r\n texture = sys.textures.get(key);\r\n\r\n var src = texture.getSourceImage();\r\n\r\n if (src instanceof HTMLCanvasElement)\r\n {\r\n ctx = src.getContext('2d');\r\n }\r\n }\r\n else\r\n {\r\n // Key is a string and doesn't exist in the Texture Manager, so generate and save it\r\n\r\n texture = sys.textures.createCanvas(key, width, height);\r\n\r\n ctx = texture.getSourceImage().getContext('2d');\r\n }\r\n }\r\n else if (key instanceof HTMLCanvasElement)\r\n {\r\n // Key is a Canvas, so draw to it\r\n\r\n ctx = key.getContext('2d');\r\n }\r\n\r\n if (ctx)\r\n {\r\n // var GraphicsCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix, renderTargetCtx, allowClip)\r\n this.renderCanvas(renderer, this, 0, Graphics.TargetCamera, null, ctx, false);\r\n\r\n if (texture)\r\n {\r\n texture.refresh();\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Internal destroy handler, called as part of the destroy process.\r\n *\r\n * @method Phaser.GameObjects.Graphics#preDestroy\r\n * @protected\r\n * @since 3.9.0\r\n */\r\n preDestroy: function ()\r\n {\r\n this.commandBuffer = [];\r\n }\r\n\r\n});\r\n\r\n/**\r\n * A Camera used specifically by the Graphics system for rendering to textures.\r\n *\r\n * @name Phaser.GameObjects.Graphics.TargetCamera\r\n * @type {Phaser.Cameras.Scene2D.Camera}\r\n * @since 3.1.0\r\n */\r\nGraphics.TargetCamera = new BaseCamera();\r\n\r\nmodule.exports = Graphics;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncmFwaGljcy9HcmFwaGljcy5qcz80MDY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQywwRkFBZ0M7QUFDekQsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxlQUFlLG1CQUFPLENBQUMsOEVBQVk7QUFDbkMsc0JBQXNCLG1CQUFPLENBQUMsc0ZBQXFCO0FBQ25ELDBCQUEwQixtQkFBTyxDQUFDLDhGQUF5QjtBQUMzRCxzQkFBc0IsbUJBQU8sQ0FBQyxzRkFBcUI7QUFDbkQscUJBQXFCLG1CQUFPLENBQUMsb0ZBQW9CO0FBQ2pELHlCQUF5QixtQkFBTyxDQUFDLDRGQUF3QjtBQUN6RCwwQkFBMEIsbUJBQU8sQ0FBQyw4RkFBeUI7QUFDM0Qsd0JBQXdCLG1CQUFPLENBQUMsMEZBQXVCO0FBQ3ZELDZCQUE2QixtQkFBTyxDQUFDLG9HQUE0Qjs7QUFFakUsc0JBQXNCLG1CQUFPLENBQUMsMEdBQStCOztBQUU3RCxjQUFjLG1CQUFPLENBQUMscUZBQTRCO0FBQ2xELGlCQUFpQixtQkFBTyxDQUFDLDBFQUFlO0FBQ3hDLG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCxlQUFlLG1CQUFPLENBQUMsdUZBQTZCO0FBQ3BELGlCQUFpQixtQkFBTyxDQUFDLGlFQUFrQjtBQUMzQyxhQUFhLG1CQUFPLENBQUMsMEZBQWtCOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsa0RBQWtEO0FBQzdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsMENBQTBDO0FBQ3JEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHlDQUF5QztBQUN4RDtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsV0FBVzs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxXQUFXOztBQUU3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsV0FBVzs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLFdBQVc7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxpQkFBaUI7QUFDaEMsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLFVBQVU7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQW1CO0FBQ2xDO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtQkFBbUI7QUFDbEM7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHNCQUFzQjtBQUNyQztBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsc0JBQXNCO0FBQ3JDO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLDZEQUE2RCxpQ0FBaUM7QUFDN0c7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxhQUFhOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSw2REFBNkQsaUNBQWlDO0FBQzdHO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsYUFBYTs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsK0NBQStDO0FBQzlELGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFCQUFxQjtBQUNwQztBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUJBQXFCO0FBQ3BDO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDRCQUE0QjtBQUMzQyxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLG9CQUFvQjtBQUMzRCxzQ0FBc0MsbUJBQW1CO0FBQ3pELHFDQUFxQywwQkFBMEI7O0FBRS9EOztBQUVBOztBQUVBLHVCQUF1QixjQUFjO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDRCQUE0QjtBQUMzQyxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLG9CQUFvQjtBQUMzRCxzQ0FBc0MsbUJBQW1CO0FBQ3pELHFDQUFxQywwQkFBMEI7O0FBRS9EOztBQUVBOztBQUVBLHVCQUF1QixjQUFjO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkMsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsaUJBQWlCOztBQUV4RDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGlCQUFpQjs7QUFFeEQ7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGlCQUFpQjs7QUFFeEQ7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxpQkFBaUI7O0FBRXhEOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDJDQUEyQyxLQUFLLDZDQUE2QztBQUMxRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsdUJBQXVCO0FBQ2pFLHNDQUFzQyxlQUFlOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyx1QkFBdUI7QUFDakUsc0NBQXNDLGVBQWU7O0FBRXJEOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0UsMENBQTBDO0FBQzFHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLFlBQVksdUNBQXVDO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMkJBQTJCO0FBQzFDLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0NBQWtDLHlCQUF5QjtBQUMzRCxtQ0FBbUMsMkJBQTJCOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvZ3JhcGhpY3MvR3JhcGhpY3MuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCYXNlQ2FtZXJhID0gcmVxdWlyZSgnLi4vLi4vY2FtZXJhcy8yZC9CYXNlQ2FtZXJhLmpzJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21tYW5kcyA9IHJlcXVpcmUoJy4vQ29tbWFuZHMnKTtcclxudmFyIENvbXBvbmVudHNBbHBoYSA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMvQWxwaGEnKTtcclxudmFyIENvbXBvbmVudHNCbGVuZE1vZGUgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzL0JsZW5kTW9kZScpO1xyXG52YXIgQ29tcG9uZW50c0RlcHRoID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cy9EZXB0aCcpO1xyXG52YXIgQ29tcG9uZW50c01hc2sgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzL01hc2snKTtcclxudmFyIENvbXBvbmVudHNQaXBlbGluZSA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMvUGlwZWxpbmUnKTtcclxudmFyIENvbXBvbmVudHNUcmFuc2Zvcm0gPSByZXF1aXJlKCcuLi9jb21wb25lbnRzL1RyYW5zZm9ybScpO1xyXG52YXIgQ29tcG9uZW50c1Zpc2libGUgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzL1Zpc2libGUnKTtcclxudmFyIENvbXBvbmVudHNTY3JvbGxGYWN0b3IgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzL1Njcm9sbEZhY3RvcicpO1xyXG5cclxudmFyIFRyYW5zZm9ybU1hdHJpeCA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMvVHJhbnNmb3JtTWF0cml4Jyk7XHJcblxyXG52YXIgRWxsaXBzZSA9IHJlcXVpcmUoJy4uLy4uL2dlb20vZWxsaXBzZS9FbGxpcHNlJyk7XHJcbnZhciBHYW1lT2JqZWN0ID0gcmVxdWlyZSgnLi4vR2FtZU9iamVjdCcpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgR2V0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0VmFsdWUnKTtcclxudmFyIE1BVEhfQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9tYXRoL2NvbnN0Jyk7XHJcbnZhciBSZW5kZXIgPSByZXF1aXJlKCcuL0dyYXBoaWNzUmVuZGVyJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIEdyYXBoaWNzIG9iamVjdCBpcyBhIHdheSB0byBkcmF3IHByaW1pdGl2ZSBzaGFwZXMgdG8geW91ciBnYW1lLiBQcmltaXRpdmVzIGluY2x1ZGUgZm9ybXMgb2YgZ2VvbWV0cnksIHN1Y2ggYXNcclxuICogUmVjdGFuZ2xlcywgQ2lyY2xlcywgYW5kIFBvbHlnb25zLiBUaGV5IGFsc28gaW5jbHVkZSBsaW5lcywgYXJjcyBhbmQgY3VydmVzLiBXaGVuIHlvdSBpbml0aWFsbHkgY3JlYXRlIGEgR3JhcGhpY3NcclxuICogb2JqZWN0IGl0IHdpbGwgYmUgZW1wdHkuXHJcbiAqXHJcbiAqIFRvIGRyYXcgdG8gaXQgeW91IG11c3QgZmlyc3Qgc3BlY2lmeSBhIGxpbmUgc3R5bGUgb3IgZmlsbCBzdHlsZSAob3IgYm90aCksIGRyYXcgc2hhcGVzIHVzaW5nIHBhdGhzLCBhbmQgZmluYWxseVxyXG4gKiBmaWxsIG9yIHN0cm9rZSB0aGVtLiBGb3IgZXhhbXBsZTpcclxuICpcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiBncmFwaGljcy5saW5lU3R5bGUoNSwgMHhGRjAwRkYsIDEuMCk7XHJcbiAqIGdyYXBoaWNzLmJlZ2luUGF0aCgpO1xyXG4gKiBncmFwaGljcy5tb3ZlVG8oMTAwLCAxMDApO1xyXG4gKiBncmFwaGljcy5saW5lVG8oMjAwLCAyMDApO1xyXG4gKiBncmFwaGljcy5jbG9zZVBhdGgoKTtcclxuICogZ3JhcGhpY3Muc3Ryb2tlUGF0aCgpO1xyXG4gKiBgYGBcclxuICpcclxuICogVGhlcmUgYXJlIGFsc28gbWFueSBoZWxwZnVsIG1ldGhvZHMgdGhhdCBkcmF3IGFuZCBmaWxsL3N0cm9rZSBjb21tb24gc2hhcGVzIGZvciB5b3UuXHJcbiAqXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogZ3JhcGhpY3MubGluZVN0eWxlKDUsIDB4RkYwMEZGLCAxLjApO1xyXG4gKiBncmFwaGljcy5maWxsU3R5bGUoMHhGRkZGRkYsIDEuMCk7XHJcbiAqIGdyYXBoaWNzLmZpbGxSZWN0KDUwLCA1MCwgNDAwLCAyMDApO1xyXG4gKiBncmFwaGljcy5zdHJva2VSZWN0KDUwLCA1MCwgNDAwLCAyMDApO1xyXG4gKiBgYGBcclxuICpcclxuICogV2hlbiBhIEdyYXBoaWNzIG9iamVjdCBpcyByZW5kZXJlZCBpdCB3aWxsIHJlbmRlciBkaWZmZXJlbnRseSBiYXNlZCBvbiBpZiB0aGUgZ2FtZSBpcyBydW5uaW5nIHVuZGVyIENhbnZhcyBvciBXZWJHTC5cclxuICogVW5kZXIgQ2FudmFzIGl0IHdpbGwgdXNlIHRoZSBIVE1MIENhbnZhcyBjb250ZXh0IGRyYXdpbmcgb3BlcmF0aW9ucyB0byBkcmF3IHRoZSBwYXRoLlxyXG4gKiBVbmRlciBXZWJHTCB0aGUgZ3JhcGhpY3MgZGF0YSBpcyBkZWNvbXBvc2VkIGludG8gcG9seWdvbnMuIEJvdGggb2YgdGhlc2UgYXJlIGV4cGVuc2l2ZSBwcm9jZXNzZXMsIGVzcGVjaWFsbHkgd2l0aFxyXG4gKiBjb21wbGV4IHNoYXBlcy5cclxuICpcclxuICogSWYgeW91ciBHcmFwaGljcyBvYmplY3QgZG9lc24ndCBjaGFuZ2UgbXVjaCAob3IgYXQgYWxsKSBvbmNlIHlvdSd2ZSBkcmF3biB5b3VyIHNoYXBlIHRvIGl0LCB0aGVuIHlvdSB3aWxsIGhlbHBcclxuICogcGVyZm9ybWFuY2UgYnkgY2FsbGluZyB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI2dlbmVyYXRlVGV4dHVyZX0uIFRoaXMgd2lsbCAnYmFrZScgdGhlIEdyYXBoaWNzIG9iamVjdCBpbnRvXHJcbiAqIGEgVGV4dHVyZSwgYW5kIHJldHVybiBpdC4gWW91IGNhbiB0aGVuIHVzZSB0aGlzIFRleHR1cmUgZm9yIFNwcml0ZXMgb3Igb3RoZXIgZGlzcGxheSBvYmplY3RzLiBJZiB5b3VyIEdyYXBoaWNzIG9iamVjdFxyXG4gKiB1cGRhdGVzIGZyZXF1ZW50bHkgdGhlbiB5b3Ugc2hvdWxkIGF2b2lkIGRvaW5nIHRoaXMsIGFzIGl0IHdpbGwgY29uc3RhbnRseSBnZW5lcmF0ZSBuZXcgdGV4dHVyZXMsIHdoaWNoIHdpbGwgY29uc3VtZVxyXG4gKiBtZW1vcnkuXHJcbiAqXHJcbiAqIEFzIHlvdSBjYW4gdGVsbCwgR3JhcGhpY3Mgb2JqZWN0cyBhcmUgYSBiaXQgb2YgYSB0cmFkZS1vZmYuIFdoaWxlIHRoZXkgYXJlIGV4dHJlbWVseSB1c2VmdWwsIHlvdSBuZWVkIHRvIGJlIGNhcmVmdWxcclxuICogaW4gdGhlaXIgY29tcGxleGl0eSBhbmQgcXVhbnRpdHkgb2YgdGhlbSBpbiB5b3VyIGdhbWUuXHJcbiAqXHJcbiAqIEBjbGFzcyBHcmFwaGljc1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQWxwaGFcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQmxlbmRNb2RlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkRlcHRoXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk1hc2tcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGlwZWxpbmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2Nyb2xsRmFjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdyYXBoaWNzIG9iamVjdCBiZWxvbmdzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5HcmFwaGljcy5PcHRpb25zfSBbb3B0aW9uc10gLSBPcHRpb25zIHRoYXQgc2V0IHRoZSBwb3NpdGlvbiBhbmQgZGVmYXVsdCBzdHlsZSBvZiB0aGlzIEdyYXBoaWNzIG9iamVjdC5cclxuICovXHJcbnZhciBHcmFwaGljcyA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogR2FtZU9iamVjdCxcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBDb21wb25lbnRzQWxwaGEsXHJcbiAgICAgICAgQ29tcG9uZW50c0JsZW5kTW9kZSxcclxuICAgICAgICBDb21wb25lbnRzRGVwdGgsXHJcbiAgICAgICAgQ29tcG9uZW50c01hc2ssXHJcbiAgICAgICAgQ29tcG9uZW50c1BpcGVsaW5lLFxyXG4gICAgICAgIENvbXBvbmVudHNUcmFuc2Zvcm0sXHJcbiAgICAgICAgQ29tcG9uZW50c1Zpc2libGUsXHJcbiAgICAgICAgQ29tcG9uZW50c1Njcm9sbEZhY3RvcixcclxuICAgICAgICBSZW5kZXJcclxuICAgIF0sXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBHcmFwaGljcyAoc2NlbmUsIG9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHggPSBHZXRWYWx1ZShvcHRpb25zLCAneCcsIDApO1xyXG4gICAgICAgIHZhciB5ID0gR2V0VmFsdWUob3B0aW9ucywgJ3knLCAwKTtcclxuXHJcbiAgICAgICAgR2FtZU9iamVjdC5jYWxsKHRoaXMsIHNjZW5lLCAnR3JhcGhpY3MnKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcclxuICAgICAgICB0aGlzLmluaXRQaXBlbGluZSgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaG9yaXpvbnRhbCBkaXNwbGF5IG9yaWdpbiBvZiB0aGUgR3JhcGhpY3MuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjZGlzcGxheU9yaWdpblhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRpc3BsYXlPcmlnaW5YID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHZlcnRpY2FsIGRpc3BsYXkgb3JpZ2luIG9mIHRoZSBHcmFwaGljcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNkaXNwbGF5T3JpZ2luWVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGlzcGxheU9yaWdpblkgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYXJyYXkgb2YgY29tbWFuZHMgdXNlZCB0byByZW5kZXIgdGhlIEdyYXBoaWNzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI2NvbW1hbmRCdWZmZXJcclxuICAgICAgICAgKiBAdHlwZSB7YXJyYXl9XHJcbiAgICAgICAgICogQGRlZmF1bHQgW11cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHQgZmlsbCBjb2xvciBmb3Igc2hhcGVzIHJlbmRlcmVkIGJ5IHRoaXMgR3JhcGhpY3Mgb2JqZWN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI2RlZmF1bHRGaWxsQ29sb3JcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IC0xXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0RmlsbENvbG9yID0gLTE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBkZWZhdWx0IGZpbGwgYWxwaGEgZm9yIHNoYXBlcyByZW5kZXJlZCBieSB0aGlzIEdyYXBoaWNzIG9iamVjdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNkZWZhdWx0RmlsbEFscGhhXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0RmlsbEFscGhhID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHQgc3Ryb2tlIHdpZHRoIGZvciBzaGFwZXMgcmVuZGVyZWQgYnkgdGhpcyBHcmFwaGljcyBvYmplY3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjZGVmYXVsdFN0cm9rZVdpZHRoXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0U3Ryb2tlV2lkdGggPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZGVmYXVsdCBzdHJva2UgY29sb3IgZm9yIHNoYXBlcyByZW5kZXJlZCBieSB0aGlzIEdyYXBoaWNzIG9iamVjdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNkZWZhdWx0U3Ryb2tlQ29sb3JcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IC0xXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0U3Ryb2tlQ29sb3IgPSAtMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHQgc3Ryb2tlIGFscGhhIGZvciBzaGFwZXMgcmVuZGVyZWQgYnkgdGhpcyBHcmFwaGljcyBvYmplY3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjZGVmYXVsdFN0cm9rZUFscGhhXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0U3Ryb2tlQWxwaGEgPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCBwcm9wZXJ0eSB0aGF0IGtlZXBzIHRyYWNrIG9mIHRoZSBsaW5lIHdpZHRoIHN0eWxlIHNldHRpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjX2xpbmVXaWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9saW5lV2lkdGggPSAxLjA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgdGVtcG9yYXJ5IFRyYW5zZm9ybSBNYXRyaXgsIHJlLXVzZWQgaW50ZXJuYWxseSBkdXJpbmcgYmF0Y2hpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjX3RlbXBNYXRyaXgxXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl90ZW1wTWF0cml4MSA9IG5ldyBUcmFuc2Zvcm1NYXRyaXgoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSB0ZW1wb3JhcnkgVHJhbnNmb3JtIE1hdHJpeCwgcmUtdXNlZCBpbnRlcm5hbGx5IGR1cmluZyBiYXRjaGluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNfdGVtcE1hdHJpeDJcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RlbXBNYXRyaXgyID0gbmV3IFRyYW5zZm9ybU1hdHJpeCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHRlbXBvcmFyeSBUcmFuc2Zvcm0gTWF0cml4LCByZS11c2VkIGludGVybmFsbHkgZHVyaW5nIGJhdGNoaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI190ZW1wTWF0cml4M1xyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGVtcE1hdHJpeDMgPSBuZXcgVHJhbnNmb3JtTWF0cml4KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFN0eWxlcyhvcHRpb25zKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIGRlZmF1bHQgc3R5bGUgc2V0dGluZ3MgZm9yIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI3NldERlZmF1bHRTdHlsZXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkdyYXBoaWNzLlN0eWxlc30gb3B0aW9ucyAtIFRoZSBzdHlsZXMgdG8gc2V0IGFzIGRlZmF1bHRzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0RGVmYXVsdFN0eWxlczogZnVuY3Rpb24gKG9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKEdldFZhbHVlKG9wdGlvbnMsICdsaW5lU3R5bGUnLCBudWxsKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFN0cm9rZVdpZHRoID0gR2V0VmFsdWUob3B0aW9ucywgJ2xpbmVTdHlsZS53aWR0aCcsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRTdHJva2VDb2xvciA9IEdldFZhbHVlKG9wdGlvbnMsICdsaW5lU3R5bGUuY29sb3InLCAweGZmZmZmZik7XHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFN0cm9rZUFscGhhID0gR2V0VmFsdWUob3B0aW9ucywgJ2xpbmVTdHlsZS5hbHBoYScsIDEpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5saW5lU3R5bGUodGhpcy5kZWZhdWx0U3Ryb2tlV2lkdGgsIHRoaXMuZGVmYXVsdFN0cm9rZUNvbG9yLCB0aGlzLmRlZmF1bHRTdHJva2VBbHBoYSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoR2V0VmFsdWUob3B0aW9ucywgJ2ZpbGxTdHlsZScsIG51bGwpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0RmlsbENvbG9yID0gR2V0VmFsdWUob3B0aW9ucywgJ2ZpbGxTdHlsZS5jb2xvcicsIDB4ZmZmZmZmKTtcclxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0RmlsbEFscGhhID0gR2V0VmFsdWUob3B0aW9ucywgJ2ZpbGxTdHlsZS5hbHBoYScsIDEpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5maWxsU3R5bGUodGhpcy5kZWZhdWx0RmlsbENvbG9yLCB0aGlzLmRlZmF1bHRGaWxsQWxwaGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBjdXJyZW50IGxpbmUgc3R5bGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjbGluZVN0eWxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZVdpZHRoIC0gVGhlIHN0cm9rZSB3aWR0aC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2xvciAtIFRoZSBzdHJva2UgY29sb3IuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FscGhhPTFdIC0gVGhlIHN0cm9rZSBhbHBoYS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGxpbmVTdHlsZTogZnVuY3Rpb24gKGxpbmVXaWR0aCwgY29sb3IsIGFscGhhKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChhbHBoYSA9PT0gdW5kZWZpbmVkKSB7IGFscGhhID0gMTsgfVxyXG5cclxuICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIucHVzaChcclxuICAgICAgICAgICAgQ29tbWFuZHMuTElORV9TVFlMRSxcclxuICAgICAgICAgICAgbGluZVdpZHRoLCBjb2xvciwgYWxwaGFcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLl9saW5lV2lkdGggPSBsaW5lV2lkdGg7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgY3VycmVudCBmaWxsIHN0eWxlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI2ZpbGxTdHlsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbG9yIC0gVGhlIGZpbGwgY29sb3IuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FscGhhPTFdIC0gVGhlIGZpbGwgYWxwaGEuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBmaWxsU3R5bGU6IGZ1bmN0aW9uIChjb2xvciwgYWxwaGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGFscGhhID09PSB1bmRlZmluZWQpIHsgYWxwaGEgPSAxOyB9XHJcblxyXG4gICAgICAgIHRoaXMuY29tbWFuZEJ1ZmZlci5wdXNoKFxyXG4gICAgICAgICAgICBDb21tYW5kcy5GSUxMX1NUWUxFLFxyXG4gICAgICAgICAgICBjb2xvciwgYWxwaGFcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGEgZ3JhZGllbnQgZmlsbCBzdHlsZS4gVGhpcyBpcyBhIFdlYkdMIG9ubHkgZmVhdHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgZ3JhZGllbnQgY29sb3IgdmFsdWVzIHJlcHJlc2VudCB0aGUgNCBjb3JuZXJzIG9mIGFuIHVudHJhbnNmb3JtZWQgcmVjdGFuZ2xlLlxyXG4gICAgICogVGhlIGdyYWRpZW50IGlzIHVzZWQgdG8gY29sb3IgYWxsIGZpbGxlZCBzaGFwZXMgYW5kIHBhdGhzIGRyYXduIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QuXHJcbiAgICAgKiBJZiB5b3Ugd2lzaCB0byB0dXJuIGEgZ3JhZGllbnQgb2ZmLCBjYWxsIGBmaWxsU3R5bGVgIGFuZCBwcm92aWRlIGEgbmV3IHNpbmdsZSBmaWxsIGNvbG9yLlxyXG4gICAgICpcclxuICAgICAqIFdoZW4gZmlsbGluZyBhIHRyaWFuZ2xlIG9ubHkgdGhlIGZpcnN0IDMgY29sb3IgdmFsdWVzIHByb3ZpZGVkIGFyZSB1c2VkIGZvciB0aGUgMyBwb2ludHMgb2YgYSB0cmlhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGZlYXR1cmUgaXMgYmVzdCB1c2VkIG9ubHkgb24gcmVjdGFuZ2xlcyBhbmQgdHJpYW5nbGVzLiBBbGwgb3RoZXIgc2hhcGVzIHdpbGwgZ2l2ZSBzdHJhbmdlIHJlc3VsdHMuXHJcbiAgICAgKlxyXG4gICAgICogTm90ZSB0aGF0IGZvciBvYmplY3RzIHN1Y2ggYXMgYXJjcyBvciBlbGxpcHNlcywgb3IgYW55dGhpbmcgd2hpY2ggaXMgbWFkZSBvdXQgb2YgdHJpYW5nbGVzLCBlYWNoIHRyaWFuZ2xlIHVzZWRcclxuICAgICAqIHdpbGwgYmUgZmlsbGVkIHdpdGggYSBncmFkaWVudCBvbiBpdHMgb3duLiBUaGVyZSBpcyBubyBhYmlsaXR5IHRvIGdyYWRpZW50IGZpbGwgYSBzaGFwZSBvciBwYXRoIGFzIGEgc2luZ2xlXHJcbiAgICAgKiBlbnRpdHkgYXQgdGhpcyB0aW1lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI2ZpbGxHcmFkaWVudFN0eWxlXHJcbiAgICAgKiBAd2ViZ2xPbmx5XHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0b3BMZWZ0IC0gVGhlIHRpbnQgYmVpbmcgYXBwbGllZCB0byB0aGUgdG9wLWxlZnQgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0b3BSaWdodCAtIFRoZSB0aW50IGJlaW5nIGFwcGxpZWQgdG8gdGhlIHRvcC1yaWdodCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGJvdHRvbUxlZnQgLSBUaGUgdGludCBiZWluZyBhcHBsaWVkIHRvIHRoZSBib3R0b20tbGVmdCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGJvdHRvbVJpZ2h0IC0gVGhlIHRpbnQgYmVpbmcgYXBwbGllZCB0byB0aGUgYm90dG9tLXJpZ2h0IG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYWxwaGE9MV0gLSBUaGUgZmlsbCBhbHBoYS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGZpbGxHcmFkaWVudFN0eWxlOiBmdW5jdGlvbiAodG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0LCBhbHBoYSlcclxuICAgIHtcclxuICAgICAgICBpZiAoYWxwaGEgPT09IHVuZGVmaW5lZCkgeyBhbHBoYSA9IDE7IH1cclxuXHJcbiAgICAgICAgdGhpcy5jb21tYW5kQnVmZmVyLnB1c2goXHJcbiAgICAgICAgICAgIENvbW1hbmRzLkdSQURJRU5UX0ZJTExfU1RZTEUsXHJcbiAgICAgICAgICAgIGFscGhhLCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHRcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGEgZ3JhZGllbnQgbGluZSBzdHlsZS4gVGhpcyBpcyBhIFdlYkdMIG9ubHkgZmVhdHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgZ3JhZGllbnQgY29sb3IgdmFsdWVzIHJlcHJlc2VudCB0aGUgNCBjb3JuZXJzIG9mIGFuIHVudHJhbnNmb3JtZWQgcmVjdGFuZ2xlLlxyXG4gICAgICogVGhlIGdyYWRpZW50IGlzIHVzZWQgdG8gY29sb3IgYWxsIHN0cm9rZWQgc2hhcGVzIGFuZCBwYXRocyBkcmF3biBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLlxyXG4gICAgICogSWYgeW91IHdpc2ggdG8gdHVybiBhIGdyYWRpZW50IG9mZiwgY2FsbCBgbGluZVN0eWxlYCBhbmQgcHJvdmlkZSBhIG5ldyBzaW5nbGUgbGluZSBjb2xvci5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGZlYXR1cmUgaXMgYmVzdCB1c2VkIG9ubHkgb24gc2luZ2xlIGxpbmVzLiBBbGwgb3RoZXIgc2hhcGVzIHdpbGwgZ2l2ZSBzdHJhbmdlIHJlc3VsdHMuXHJcbiAgICAgKlxyXG4gICAgICogTm90ZSB0aGF0IGZvciBvYmplY3RzIHN1Y2ggYXMgYXJjcyBvciBlbGxpcHNlcywgb3IgYW55dGhpbmcgd2hpY2ggaXMgbWFkZSBvdXQgb2YgdHJpYW5nbGVzLCBlYWNoIHRyaWFuZ2xlIHVzZWRcclxuICAgICAqIHdpbGwgYmUgZmlsbGVkIHdpdGggYSBncmFkaWVudCBvbiBpdHMgb3duLiBUaGVyZSBpcyBubyBhYmlsaXR5IHRvIGdyYWRpZW50IHN0cm9rZSBhIHNoYXBlIG9yIHBhdGggYXMgYSBzaW5nbGVcclxuICAgICAqIGVudGl0eSBhdCB0aGlzIHRpbWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjbGluZUdyYWRpZW50U3R5bGVcclxuICAgICAqIEB3ZWJnbE9ubHlcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZVdpZHRoIC0gVGhlIHN0cm9rZSB3aWR0aC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdG9wTGVmdCAtIFRoZSB0aW50IGJlaW5nIGFwcGxpZWQgdG8gdGhlIHRvcC1sZWZ0IG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdG9wUmlnaHQgLSBUaGUgdGludCBiZWluZyBhcHBsaWVkIHRvIHRoZSB0b3AtcmlnaHQgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBib3R0b21MZWZ0IC0gVGhlIHRpbnQgYmVpbmcgYXBwbGllZCB0byB0aGUgYm90dG9tLWxlZnQgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBib3R0b21SaWdodCAtIFRoZSB0aW50IGJlaW5nIGFwcGxpZWQgdG8gdGhlIGJvdHRvbS1yaWdodCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FscGhhPTFdIC0gVGhlIGZpbGwgYWxwaGEuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBsaW5lR3JhZGllbnRTdHlsZTogZnVuY3Rpb24gKGxpbmVXaWR0aCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0LCBhbHBoYSlcclxuICAgIHtcclxuICAgICAgICBpZiAoYWxwaGEgPT09IHVuZGVmaW5lZCkgeyBhbHBoYSA9IDE7IH1cclxuXHJcbiAgICAgICAgdGhpcy5jb21tYW5kQnVmZmVyLnB1c2goXHJcbiAgICAgICAgICAgIENvbW1hbmRzLkdSQURJRU5UX0xJTkVfU1RZTEUsXHJcbiAgICAgICAgICAgIGxpbmVXaWR0aCwgYWxwaGEsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHRleHR1cmUgZnJhbWUgdGhpcyBHcmFwaGljcyBPYmplY3Qgd2lsbCB1c2Ugd2hlbiBkcmF3aW5nIGFsbCBzaGFwZXMgZGVmaW5lZCBhZnRlciBjYWxsaW5nIHRoaXMuXHJcbiAgICAgKlxyXG4gICAgICogVGV4dHVyZXMgYXJlIHJlZmVyZW5jZWQgYnkgdGhlaXIgc3RyaW5nLWJhc2VkIGtleXMsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIE9uY2Ugc2V0LCBhbGwgc2hhcGVzIHdpbGwgdXNlIHRoaXMgdGV4dHVyZS4gQ2FsbCB0aGlzIG1ldGhvZCB3aXRoIG5vIGFyZ3VtZW50cyB0byBjbGVhciBpdC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgdGV4dHVyZXMgYXJlIG5vdCB0aWxlZC4gVGhleSBhcmUgc3RyZXRjaGVkIHRvIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBzaGFwZXMgYmVpbmcgcmVuZGVyZWQuIEZvciB0aGlzIHJlYXNvbixcclxuICAgICAqIGl0IHdvcmtzIGJlc3Qgd2l0aCBzZWFtbGVzcyAvIHRpbGVhYmxlIHRleHR1cmVzLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBtb2RlIGFyZ3VtZW50IGNvbnRyb2xzIGhvdyB0aGUgdGV4dHVyZXMgYXJlIGNvbWJpbmVkIHdpdGggdGhlIGZpbGwgY29sb3JzLiBUaGUgZGVmYXVsdCB2YWx1ZSAoMCkgd2lsbFxyXG4gICAgICogbXVsdGlwbHkgdGhlIHRleHR1cmUgYnkgdGhlIGZpbGwgY29sb3IuIEEgdmFsdWUgb2YgMSB3aWxsIHVzZSBqdXN0IHRoZSBmaWxsIGNvbG9yLCBidXQgdGhlIGFscGhhIGRhdGEgZnJvbSB0aGUgdGV4dHVyZSxcclxuICAgICAqIGFuZCBhIHZhbHVlIG9mIDIgd2lsbCB1c2UganVzdCB0aGUgdGV4dHVyZSBhbmQgbm8gZmlsbCBjb2xvciBhdCBhbGwuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3Mjc2V0VGV4dHVyZVxyXG4gICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICogQHdlYmdsT25seVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSAtIFRoZSBrZXkgb2YgdGhlIHRleHR1cmUgdG8gYmUgdXNlZCwgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuIExlYXZlIGJsYW5rIHRvIGNsZWFyIGEgcHJldmlvdXNseSBzZXQgdGV4dHVyZS5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lXSAtIFRoZSBuYW1lIG9yIGluZGV4IG9mIHRoZSBmcmFtZSB3aXRoaW4gdGhlIFRleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW21vZGU9MF0gLSBUaGUgdGV4dHVyZSB0aW50IG1vZGUuIDAgaXMgbXVsdGlwbHksIDEgaXMgYWxwaGEgb25seSBhbmQgMiBpcyB0ZXh0dXJlIG9ubHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0VGV4dHVyZTogZnVuY3Rpb24gKGtleSwgZnJhbWUsIG1vZGUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG1vZGUgPT09IHVuZGVmaW5lZCkgeyBtb2RlID0gMDsgfVxyXG5cclxuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIucHVzaChcclxuICAgICAgICAgICAgICAgIENvbW1hbmRzLkNMRUFSX1RFWFRVUkVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHRleHR1cmVGcmFtZSA9IHRoaXMuc2NlbmUuc3lzLnRleHR1cmVzLmdldEZyYW1lKGtleSwgZnJhbWUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRleHR1cmVGcmFtZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1vZGUgPT09IDIpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kZSA9IDM7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tYW5kQnVmZmVyLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgQ29tbWFuZHMuU0VUX1RFWFRVUkUsXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZyYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIG1vZGVcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YXJ0IGEgbmV3IHNoYXBlIHBhdGguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjYmVnaW5QYXRoXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGJlZ2luUGF0aDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIucHVzaChcclxuICAgICAgICAgICAgQ29tbWFuZHMuQkVHSU5fUEFUSFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb3NlIHRoZSBjdXJyZW50IHBhdGguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjY2xvc2VQYXRoXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGNsb3NlUGF0aDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIucHVzaChcclxuICAgICAgICAgICAgQ29tbWFuZHMuQ0xPU0VfUEFUSFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbGwgdGhlIGN1cnJlbnQgcGF0aC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNmaWxsUGF0aFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBmaWxsUGF0aDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIucHVzaChcclxuICAgICAgICAgICAgQ29tbWFuZHMuRklMTF9QQVRIXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmlsbCB0aGUgY3VycmVudCBwYXRoLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIGlzIGFuIGFsaWFzIGZvciBgR3JhcGhpY3MuZmlsbFBhdGhgIGFuZCBkb2VzIHRoZSBzYW1lIHRoaW5nLlxyXG4gICAgICogSXQgd2FzIGFkZGVkIHRvIG1hdGNoIHRoZSBDYW52YXNSZW5kZXJpbmdDb250ZXh0IDJEIEFQSS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNmaWxsXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBmaWxsOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuY29tbWFuZEJ1ZmZlci5wdXNoKFxyXG4gICAgICAgICAgICBDb21tYW5kcy5GSUxMX1BBVEhcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdHJva2UgdGhlIGN1cnJlbnQgcGF0aC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNzdHJva2VQYXRoXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHN0cm9rZVBhdGg6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jb21tYW5kQnVmZmVyLnB1c2goXHJcbiAgICAgICAgICAgIENvbW1hbmRzLlNUUk9LRV9QQVRIXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3Ryb2tlIHRoZSBjdXJyZW50IHBhdGguXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgaXMgYW4gYWxpYXMgZm9yIGBHcmFwaGljcy5zdHJva2VQYXRoYCBhbmQgZG9lcyB0aGUgc2FtZSB0aGluZy5cclxuICAgICAqIEl0IHdhcyBhZGRlZCB0byBtYXRjaCB0aGUgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCAyRCBBUEkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3Mjc3Ryb2tlXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzdHJva2U6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jb21tYW5kQnVmZmVyLnB1c2goXHJcbiAgICAgICAgICAgIENvbW1hbmRzLlNUUk9LRV9QQVRIXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmlsbCB0aGUgZ2l2ZW4gY2lyY2xlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI2ZpbGxDaXJjbGVTaGFwZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2VvbS5DaXJjbGV9IGNpcmNsZSAtIFRoZSBjaXJjbGUgdG8gZmlsbC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGZpbGxDaXJjbGVTaGFwZTogZnVuY3Rpb24gKGNpcmNsZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5maWxsQ2lyY2xlKGNpcmNsZS54LCBjaXJjbGUueSwgY2lyY2xlLnJhZGl1cyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3Ryb2tlIHRoZSBnaXZlbiBjaXJjbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3Mjc3Ryb2tlQ2lyY2xlU2hhcGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBjaXJjbGUgLSBUaGUgY2lyY2xlIHRvIHN0cm9rZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHN0cm9rZUNpcmNsZVNoYXBlOiBmdW5jdGlvbiAoY2lyY2xlKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0cm9rZUNpcmNsZShjaXJjbGUueCwgY2lyY2xlLnksIGNpcmNsZS5yYWRpdXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbGwgYSBjaXJjbGUgd2l0aCB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHJhZGl1cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNmaWxsQ2lyY2xlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRpdXMgLSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBmaWxsQ2lyY2xlOiBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgdGhpcy5hcmMoeCwgeSwgcmFkaXVzLCAwLCBNQVRIX0NPTlNULlBJMik7XHJcbiAgICAgICAgdGhpcy5maWxsUGF0aCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdHJva2UgYSBjaXJjbGUgd2l0aCB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHJhZGl1cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNzdHJva2VDaXJjbGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZGl1cyAtIFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHN0cm9rZUNpcmNsZTogZnVuY3Rpb24gKHgsIHksIHJhZGl1cylcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJlZ2luUGF0aCgpO1xyXG4gICAgICAgIHRoaXMuYXJjKHgsIHksIHJhZGl1cywgMCwgTUFUSF9DT05TVC5QSTIpO1xyXG4gICAgICAgIHRoaXMuc3Ryb2tlUGF0aCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaWxsIHRoZSBnaXZlbiByZWN0YW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjZmlsbFJlY3RTaGFwZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3QgLSBUaGUgcmVjdGFuZ2xlIHRvIGZpbGwuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBmaWxsUmVjdFNoYXBlOiBmdW5jdGlvbiAocmVjdClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5maWxsUmVjdChyZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0cm9rZSB0aGUgZ2l2ZW4gcmVjdGFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI3N0cm9rZVJlY3RTaGFwZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3QgLSBUaGUgcmVjdGFuZ2xlIHRvIHN0cm9rZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHN0cm9rZVJlY3RTaGFwZTogZnVuY3Rpb24gKHJlY3QpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3Ryb2tlUmVjdChyZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbGwgYSByZWN0YW5nbGUgd2l0aCB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHNpemUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjZmlsbFJlY3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGZpbGxSZWN0OiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIucHVzaChcclxuICAgICAgICAgICAgQ29tbWFuZHMuRklMTF9SRUNULFxyXG4gICAgICAgICAgICB4LCB5LCB3aWR0aCwgaGVpZ2h0XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3Ryb2tlIGEgcmVjdGFuZ2xlIHdpdGggdGhlIGdpdmVuIHBvc2l0aW9uIGFuZCBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI3N0cm9rZVJlY3RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHN0cm9rZVJlY3Q6IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBsaW5lV2lkdGhIYWxmID0gdGhpcy5fbGluZVdpZHRoIC8gMjtcclxuICAgICAgICB2YXIgbWlueCA9IHggLSBsaW5lV2lkdGhIYWxmO1xyXG4gICAgICAgIHZhciBtYXh4ID0geCArIGxpbmVXaWR0aEhhbGY7XHJcblxyXG4gICAgICAgIHRoaXMuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgdGhpcy5tb3ZlVG8oeCwgeSk7XHJcbiAgICAgICAgdGhpcy5saW5lVG8oeCwgeSArIGhlaWdodCk7XHJcbiAgICAgICAgdGhpcy5zdHJva2VQYXRoKCk7XHJcblxyXG4gICAgICAgIHRoaXMuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgdGhpcy5tb3ZlVG8oeCArIHdpZHRoLCB5KTtcclxuICAgICAgICB0aGlzLmxpbmVUbyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpO1xyXG4gICAgICAgIHRoaXMuc3Ryb2tlUGF0aCgpO1xyXG5cclxuICAgICAgICB0aGlzLmJlZ2luUGF0aCgpO1xyXG4gICAgICAgIHRoaXMubW92ZVRvKG1pbngsIHkpO1xyXG4gICAgICAgIHRoaXMubGluZVRvKG1heHggKyB3aWR0aCwgeSk7XHJcbiAgICAgICAgdGhpcy5zdHJva2VQYXRoKCk7XHJcblxyXG4gICAgICAgIHRoaXMuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgdGhpcy5tb3ZlVG8obWlueCwgeSArIGhlaWdodCk7XHJcbiAgICAgICAgdGhpcy5saW5lVG8obWF4eCArIHdpZHRoLCB5ICsgaGVpZ2h0KTtcclxuICAgICAgICB0aGlzLnN0cm9rZVBhdGgoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmlsbCBhIHJvdW5kZWQgcmVjdGFuZ2xlIHdpdGggdGhlIGdpdmVuIHBvc2l0aW9uLCBzaXplIGFuZCByYWRpdXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjZmlsbFJvdW5kZWRSZWN0XHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkdyYXBoaWNzLlJvdW5kZWRSZWN0UmFkaXVzfG51bWJlcil9IFtyYWRpdXM9MjBdIC0gVGhlIGNvcm5lciByYWRpdXM7IEl0IGNhbiBhbHNvIGJlIGFuIG9iamVjdCB0byBzcGVjaWZ5IGRpZmZlcmVudCByYWRpaSBmb3IgY29ybmVycy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGZpbGxSb3VuZGVkUmVjdDogZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cylcclxuICAgIHtcclxuICAgICAgICBpZiAocmFkaXVzID09PSB1bmRlZmluZWQpIHsgcmFkaXVzID0gMjA7IH1cclxuXHJcbiAgICAgICAgdmFyIHRsID0gcmFkaXVzO1xyXG4gICAgICAgIHZhciB0ciA9IHJhZGl1cztcclxuICAgICAgICB2YXIgYmwgPSByYWRpdXM7XHJcbiAgICAgICAgdmFyIGJyID0gcmFkaXVzO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHJhZGl1cyAhPT0gJ251bWJlcicpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0bCA9IEdldEZhc3RWYWx1ZShyYWRpdXMsICd0bCcsIDIwKTtcclxuICAgICAgICAgICAgdHIgPSBHZXRGYXN0VmFsdWUocmFkaXVzLCAndHInLCAyMCk7XHJcbiAgICAgICAgICAgIGJsID0gR2V0RmFzdFZhbHVlKHJhZGl1cywgJ2JsJywgMjApO1xyXG4gICAgICAgICAgICBiciA9IEdldEZhc3RWYWx1ZShyYWRpdXMsICdicicsIDIwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgdGhpcy5tb3ZlVG8oeCArIHRsLCB5KTtcclxuICAgICAgICB0aGlzLmxpbmVUbyh4ICsgd2lkdGggLSB0ciwgeSk7XHJcbiAgICAgICAgdGhpcy5hcmMoeCArIHdpZHRoIC0gdHIsIHkgKyB0ciwgdHIsIC1NQVRIX0NPTlNULlRBVSwgMCk7XHJcbiAgICAgICAgdGhpcy5saW5lVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gYnIpO1xyXG4gICAgICAgIHRoaXMuYXJjKHggKyB3aWR0aCAtIGJyLCB5ICsgaGVpZ2h0IC0gYnIsIGJyLCAwLCBNQVRIX0NPTlNULlRBVSk7XHJcbiAgICAgICAgdGhpcy5saW5lVG8oeCArIGJsLCB5ICsgaGVpZ2h0KTtcclxuICAgICAgICB0aGlzLmFyYyh4ICsgYmwsIHkgKyBoZWlnaHQgLSBibCwgYmwsIE1BVEhfQ09OU1QuVEFVLCBNYXRoLlBJKTtcclxuICAgICAgICB0aGlzLmxpbmVUbyh4LCB5ICsgdGwpO1xyXG4gICAgICAgIHRoaXMuYXJjKHggKyB0bCwgeSArIHRsLCB0bCwgLU1hdGguUEksIC1NQVRIX0NPTlNULlRBVSk7XHJcbiAgICAgICAgdGhpcy5maWxsUGF0aCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdHJva2UgYSByb3VuZGVkIHJlY3RhbmdsZSB3aXRoIHRoZSBnaXZlbiBwb3NpdGlvbiwgc2l6ZSBhbmQgcmFkaXVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI3N0cm9rZVJvdW5kZWRSZWN0XHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkdyYXBoaWNzLlJvdW5kZWRSZWN0UmFkaXVzfG51bWJlcil9IFtyYWRpdXM9MjBdIC0gVGhlIGNvcm5lciByYWRpdXM7IEl0IGNhbiBhbHNvIGJlIGFuIG9iamVjdCB0byBzcGVjaWZ5IGRpZmZlcmVudCByYWRpaSBmb3IgY29ybmVycy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHN0cm9rZVJvdW5kZWRSZWN0OiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChyYWRpdXMgPT09IHVuZGVmaW5lZCkgeyByYWRpdXMgPSAyMDsgfVxyXG5cclxuICAgICAgICB2YXIgdGwgPSByYWRpdXM7XHJcbiAgICAgICAgdmFyIHRyID0gcmFkaXVzO1xyXG4gICAgICAgIHZhciBibCA9IHJhZGl1cztcclxuICAgICAgICB2YXIgYnIgPSByYWRpdXM7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgcmFkaXVzICE9PSAnbnVtYmVyJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRsID0gR2V0RmFzdFZhbHVlKHJhZGl1cywgJ3RsJywgMjApO1xyXG4gICAgICAgICAgICB0ciA9IEdldEZhc3RWYWx1ZShyYWRpdXMsICd0cicsIDIwKTtcclxuICAgICAgICAgICAgYmwgPSBHZXRGYXN0VmFsdWUocmFkaXVzLCAnYmwnLCAyMCk7XHJcbiAgICAgICAgICAgIGJyID0gR2V0RmFzdFZhbHVlKHJhZGl1cywgJ2JyJywgMjApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5iZWdpblBhdGgoKTtcclxuICAgICAgICB0aGlzLm1vdmVUbyh4ICsgdGwsIHkpO1xyXG4gICAgICAgIHRoaXMubGluZVRvKHggKyB3aWR0aCAtIHRyLCB5KTtcclxuICAgICAgICB0aGlzLmFyYyh4ICsgd2lkdGggLSB0ciwgeSArIHRyLCB0ciwgLU1BVEhfQ09OU1QuVEFVLCAwKTtcclxuICAgICAgICB0aGlzLmxpbmVUbyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSBicik7XHJcbiAgICAgICAgdGhpcy5hcmMoeCArIHdpZHRoIC0gYnIsIHkgKyBoZWlnaHQgLSBiciwgYnIsIDAsIE1BVEhfQ09OU1QuVEFVKTtcclxuICAgICAgICB0aGlzLmxpbmVUbyh4ICsgYmwsIHkgKyBoZWlnaHQpO1xyXG4gICAgICAgIHRoaXMuYXJjKHggKyBibCwgeSArIGhlaWdodCAtIGJsLCBibCwgTUFUSF9DT05TVC5UQVUsIE1hdGguUEkpO1xyXG4gICAgICAgIHRoaXMubGluZVRvKHgsIHkgKyB0bCk7XHJcbiAgICAgICAgdGhpcy5hcmMoeCArIHRsLCB5ICsgdGwsIHRsLCAtTWF0aC5QSSwgLU1BVEhfQ09OU1QuVEFVKTtcclxuICAgICAgICB0aGlzLnN0cm9rZVBhdGgoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmlsbCB0aGUgZ2l2ZW4gcG9pbnQuXHJcbiAgICAgKlxyXG4gICAgICogRHJhd3MgYSBzcXVhcmUgYXQgdGhlIGdpdmVuIHBvc2l0aW9uLCAxIHBpeGVsIGluIHNpemUgYnkgZGVmYXVsdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNmaWxsUG9pbnRTaGFwZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8UGhhc2VyLk1hdGguVmVjdG9yMnxvYmplY3QpfSBwb2ludCAtIFRoZSBwb2ludCB0byBmaWxsLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPTFdIC0gVGhlIHNpemUgb2YgdGhlIHNxdWFyZSB0byBkcmF3LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZmlsbFBvaW50U2hhcGU6IGZ1bmN0aW9uIChwb2ludCwgc2l6ZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5maWxsUG9pbnQocG9pbnQueCwgcG9pbnQueSwgc2l6ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmlsbCBhIHBvaW50IGF0IHRoZSBnaXZlbiBwb3NpdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBEcmF3cyBhIHNxdWFyZSBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24sIDEgcGl4ZWwgaW4gc2l6ZSBieSBkZWZhdWx0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI2ZpbGxQb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwb2ludC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3NpemU9MV0gLSBUaGUgc2l6ZSBvZiB0aGUgc3F1YXJlIHRvIGRyYXcuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBmaWxsUG9pbnQ6IGZ1bmN0aW9uICh4LCB5LCBzaXplKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghc2l6ZSB8fCBzaXplIDwgMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHNpemUgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB4IC09IChzaXplIC8gMik7XHJcbiAgICAgICAgICAgIHkgLT0gKHNpemUgLyAyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY29tbWFuZEJ1ZmZlci5wdXNoKFxyXG4gICAgICAgICAgICBDb21tYW5kcy5GSUxMX1JFQ1QsXHJcbiAgICAgICAgICAgIHgsIHksIHNpemUsIHNpemVcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaWxsIHRoZSBnaXZlbiB0cmlhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNmaWxsVHJpYW5nbGVTaGFwZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gdHJpYW5nbGUgLSBUaGUgdHJpYW5nbGUgdG8gZmlsbC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGZpbGxUcmlhbmdsZVNoYXBlOiBmdW5jdGlvbiAodHJpYW5nbGUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsbFRyaWFuZ2xlKHRyaWFuZ2xlLngxLCB0cmlhbmdsZS55MSwgdHJpYW5nbGUueDIsIHRyaWFuZ2xlLnkyLCB0cmlhbmdsZS54MywgdHJpYW5nbGUueTMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0cm9rZSB0aGUgZ2l2ZW4gdHJpYW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3Mjc3Ryb2tlVHJpYW5nbGVTaGFwZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gdHJpYW5nbGUgLSBUaGUgdHJpYW5nbGUgdG8gc3Ryb2tlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc3Ryb2tlVHJpYW5nbGVTaGFwZTogZnVuY3Rpb24gKHRyaWFuZ2xlKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0cm9rZVRyaWFuZ2xlKHRyaWFuZ2xlLngxLCB0cmlhbmdsZS55MSwgdHJpYW5nbGUueDIsIHRyaWFuZ2xlLnkyLCB0cmlhbmdsZS54MywgdHJpYW5nbGUueTMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbGwgYSB0cmlhbmdsZSB3aXRoIHRoZSBnaXZlbiBwb2ludHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjZmlsbFRyaWFuZ2xlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geDAgLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBmaXJzdCBwb2ludC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5MCAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGZpcnN0IHBvaW50LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHgxIC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgc2Vjb25kIHBvaW50LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkxIC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgc2Vjb25kIHBvaW50LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHgyIC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgdGhpcmQgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geTIgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSB0aGlyZCBwb2ludC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGZpbGxUcmlhbmdsZTogZnVuY3Rpb24gKHgwLCB5MCwgeDEsIHkxLCB4MiwgeTIpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jb21tYW5kQnVmZmVyLnB1c2goXHJcbiAgICAgICAgICAgIENvbW1hbmRzLkZJTExfVFJJQU5HTEUsXHJcbiAgICAgICAgICAgIHgwLCB5MCwgeDEsIHkxLCB4MiwgeTJcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdHJva2UgYSB0cmlhbmdsZSB3aXRoIHRoZSBnaXZlbiBwb2ludHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3Mjc3Ryb2tlVHJpYW5nbGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4MCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIGZpcnN0IHBvaW50LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkwIC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geDEgLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBzZWNvbmQgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geTEgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBzZWNvbmQgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geDIgLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSB0aGlyZCBwb2ludC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5MiAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHRoaXJkIHBvaW50LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc3Ryb2tlVHJpYW5nbGU6IGZ1bmN0aW9uICh4MCwgeTAsIHgxLCB5MSwgeDIsIHkyKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuY29tbWFuZEJ1ZmZlci5wdXNoKFxyXG4gICAgICAgICAgICBDb21tYW5kcy5TVFJPS0VfVFJJQU5HTEUsXHJcbiAgICAgICAgICAgIHgwLCB5MCwgeDEsIHkxLCB4MiwgeTJcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3IHRoZSBnaXZlbiBsaW5lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI3N0cm9rZUxpbmVTaGFwZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIGxpbmUgdG8gc3Ryb2tlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc3Ryb2tlTGluZVNoYXBlOiBmdW5jdGlvbiAobGluZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5saW5lQmV0d2VlbihsaW5lLngxLCBsaW5lLnkxLCBsaW5lLngyLCBsaW5lLnkyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3IGEgbGluZSBiZXR3ZWVuIHRoZSBnaXZlbiBwb2ludHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjbGluZUJldHdlZW5cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4MSAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHN0YXJ0IHBvaW50IG9mIHRoZSBsaW5lLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkxIC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgc3RhcnQgcG9pbnQgb2YgdGhlIGxpbmUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geDIgLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBlbmQgcG9pbnQgb2YgdGhlIGxpbmUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geTIgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBlbmQgcG9pbnQgb2YgdGhlIGxpbmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBsaW5lQmV0d2VlbjogZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgdGhpcy5tb3ZlVG8oeDEsIHkxKTtcclxuICAgICAgICB0aGlzLmxpbmVUbyh4MiwgeTIpO1xyXG4gICAgICAgIHRoaXMuc3Ryb2tlUGF0aCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3IGEgbGluZSBmcm9tIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8gdGhlIGdpdmVuIHBvc2l0aW9uLlxyXG4gICAgICpcclxuICAgICAqIE1vdmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8gdGhlIGdpdmVuIHBvc2l0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI2xpbmVUb1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIHRvIGRyYXcgdGhlIGxpbmUgdG8uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gZHJhdyB0aGUgbGluZSB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGxpbmVUbzogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jb21tYW5kQnVmZmVyLnB1c2goXHJcbiAgICAgICAgICAgIENvbW1hbmRzLkxJTkVfVE8sXHJcbiAgICAgICAgICAgIHgsIHlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb3ZlIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8gdGhlIGdpdmVuIHBvc2l0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI21vdmVUb1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIHRvIG1vdmUgdG8uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gbW92ZSB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIG1vdmVUbzogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jb21tYW5kQnVmZmVyLnB1c2goXHJcbiAgICAgICAgICAgIENvbW1hbmRzLk1PVkVfVE8sXHJcbiAgICAgICAgICAgIHgsIHlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdHJva2UgdGhlIHNoYXBlIHJlcHJlc2VudGVkIGJ5IHRoZSBnaXZlbiBhcnJheSBvZiBwb2ludHMuXHJcbiAgICAgKlxyXG4gICAgICogUGFzcyBgY2xvc2VTaGFwZWAgdG8gYXV0b21hdGljYWxseSBjbG9zZSB0aGUgc2hhcGUgYnkgam9pbmluZyB0aGUgbGFzdCB0byB0aGUgZmlyc3QgcG9pbnQuXHJcbiAgICAgKiBcclxuICAgICAqIFBhc3MgYGNsb3NlUGF0aGAgdG8gYXV0b21hdGljYWxseSBjbG9zZSB0aGUgcGF0aCBiZWZvcmUgaXQgaXMgc3Ryb2tlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNzdHJva2VQb2ludHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HZW9tLlBvaW50W10pfSBwb2ludHMgLSBUaGUgcG9pbnRzIHRvIHN0cm9rZS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Nsb3NlU2hhcGU9ZmFsc2VdIC0gV2hlbiBgdHJ1ZWAsIHRoZSBzaGFwZSBpcyBjbG9zZWQgYnkgam9pbmluZyB0aGUgbGFzdCBwb2ludCB0byB0aGUgZmlyc3QgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjbG9zZVBhdGg9ZmFsc2VdIC0gV2hlbiBgdHJ1ZWAsIHRoZSBwYXRoIGlzIGNsb3NlZCBiZWZvcmUgYmVpbmcgc3Ryb2tlZC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2VuZEluZGV4XSAtIFRoZSBpbmRleCBvZiBgcG9pbnRzYCB0byBzdG9wIGRyYXdpbmcgYXQuIERlZmF1bHRzIHRvIGBwb2ludHMubGVuZ3RoYC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHN0cm9rZVBvaW50czogZnVuY3Rpb24gKHBvaW50cywgY2xvc2VTaGFwZSwgY2xvc2VQYXRoLCBlbmRJbmRleClcclxuICAgIHtcclxuICAgICAgICBpZiAoY2xvc2VTaGFwZSA9PT0gdW5kZWZpbmVkKSB7IGNsb3NlU2hhcGUgPSBmYWxzZTsgfVxyXG4gICAgICAgIGlmIChjbG9zZVBhdGggPT09IHVuZGVmaW5lZCkgeyBjbG9zZVBhdGggPSBmYWxzZTsgfVxyXG4gICAgICAgIGlmIChlbmRJbmRleCA9PT0gdW5kZWZpbmVkKSB7IGVuZEluZGV4ID0gcG9pbnRzLmxlbmd0aDsgfVxyXG5cclxuICAgICAgICB0aGlzLmJlZ2luUGF0aCgpO1xyXG5cclxuICAgICAgICB0aGlzLm1vdmVUbyhwb2ludHNbMF0ueCwgcG9pbnRzWzBdLnkpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGVuZEluZGV4OyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmxpbmVUbyhwb2ludHNbaV0ueCwgcG9pbnRzW2ldLnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNsb3NlU2hhcGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmxpbmVUbyhwb2ludHNbMF0ueCwgcG9pbnRzWzBdLnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNsb3NlUGF0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VQYXRoKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0cm9rZVBhdGgoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmlsbCB0aGUgc2hhcGUgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIGFycmF5IG9mIHBvaW50cy5cclxuICAgICAqXHJcbiAgICAgKiBQYXNzIGBjbG9zZVNoYXBlYCB0byBhdXRvbWF0aWNhbGx5IGNsb3NlIHRoZSBzaGFwZSBieSBqb2luaW5nIHRoZSBsYXN0IHRvIHRoZSBmaXJzdCBwb2ludC5cclxuICAgICAqIFxyXG4gICAgICogUGFzcyBgY2xvc2VQYXRoYCB0byBhdXRvbWF0aWNhbGx5IGNsb3NlIHRoZSBwYXRoIGJlZm9yZSBpdCBpcyBmaWxsZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjZmlsbFBvaW50c1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdlb20uUG9pbnRbXSl9IHBvaW50cyAtIFRoZSBwb2ludHMgdG8gZmlsbC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Nsb3NlU2hhcGU9ZmFsc2VdIC0gV2hlbiBgdHJ1ZWAsIHRoZSBzaGFwZSBpcyBjbG9zZWQgYnkgam9pbmluZyB0aGUgbGFzdCBwb2ludCB0byB0aGUgZmlyc3QgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjbG9zZVBhdGg9ZmFsc2VdIC0gV2hlbiBgdHJ1ZWAsIHRoZSBwYXRoIGlzIGNsb3NlZCBiZWZvcmUgYmVpbmcgc3Ryb2tlZC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2VuZEluZGV4XSAtIFRoZSBpbmRleCBvZiBgcG9pbnRzYCB0byBzdG9wIGF0LiBEZWZhdWx0cyB0byBgcG9pbnRzLmxlbmd0aGAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBmaWxsUG9pbnRzOiBmdW5jdGlvbiAocG9pbnRzLCBjbG9zZVNoYXBlLCBjbG9zZVBhdGgsIGVuZEluZGV4KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChjbG9zZVNoYXBlID09PSB1bmRlZmluZWQpIHsgY2xvc2VTaGFwZSA9IGZhbHNlOyB9XHJcbiAgICAgICAgaWYgKGNsb3NlUGF0aCA9PT0gdW5kZWZpbmVkKSB7IGNsb3NlUGF0aCA9IGZhbHNlOyB9XHJcbiAgICAgICAgaWYgKGVuZEluZGV4ID09PSB1bmRlZmluZWQpIHsgZW5kSW5kZXggPSBwb2ludHMubGVuZ3RoOyB9XHJcblxyXG4gICAgICAgIHRoaXMuYmVnaW5QYXRoKCk7XHJcblxyXG4gICAgICAgIHRoaXMubW92ZVRvKHBvaW50c1swXS54LCBwb2ludHNbMF0ueSk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgZW5kSW5kZXg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMubGluZVRvKHBvaW50c1tpXS54LCBwb2ludHNbaV0ueSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2xvc2VTaGFwZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMubGluZVRvKHBvaW50c1swXS54LCBwb2ludHNbMF0ueSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2xvc2VQYXRoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZVBhdGgoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmlsbFBhdGgoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3Ryb2tlIHRoZSBnaXZlbiBlbGxpcHNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI3N0cm9rZUVsbGlwc2VTaGFwZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2VvbS5FbGxpcHNlfSBlbGxpcHNlIC0gVGhlIGVsbGlwc2UgdG8gc3Ryb2tlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbc21vb3RobmVzcz0zMl0gLSBUaGUgbnVtYmVyIG9mIHBvaW50cyB0byBkcmF3IHRoZSBlbGxpcHNlIHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzdHJva2VFbGxpcHNlU2hhcGU6IGZ1bmN0aW9uIChlbGxpcHNlLCBzbW9vdGhuZXNzKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChzbW9vdGhuZXNzID09PSB1bmRlZmluZWQpIHsgc21vb3RobmVzcyA9IDMyOyB9XHJcblxyXG4gICAgICAgIHZhciBwb2ludHMgPSBlbGxpcHNlLmdldFBvaW50cyhzbW9vdGhuZXNzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3Ryb2tlUG9pbnRzKHBvaW50cywgdHJ1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3Ryb2tlIGFuIGVsbGlwc2Ugd2l0aCB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHNpemUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3Mjc3Ryb2tlRWxsaXBzZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2UuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgZWxsaXBzZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbc21vb3RobmVzcz0zMl0gLSBUaGUgbnVtYmVyIG9mIHBvaW50cyB0byBkcmF3IHRoZSBlbGxpcHNlIHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzdHJva2VFbGxpcHNlOiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgc21vb3RobmVzcylcclxuICAgIHtcclxuICAgICAgICBpZiAoc21vb3RobmVzcyA9PT0gdW5kZWZpbmVkKSB7IHNtb290aG5lc3MgPSAzMjsgfVxyXG5cclxuICAgICAgICB2YXIgZWxsaXBzZSA9IG5ldyBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICB2YXIgcG9pbnRzID0gZWxsaXBzZS5nZXRQb2ludHMoc21vb3RobmVzcyk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnN0cm9rZVBvaW50cyhwb2ludHMsIHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbGwgdGhlIGdpdmVuIGVsbGlwc2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjZmlsbEVsbGlwc2VTaGFwZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2VvbS5FbGxpcHNlfSBlbGxpcHNlIC0gVGhlIGVsbGlwc2UgdG8gZmlsbC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3Ntb290aG5lc3M9MzJdIC0gVGhlIG51bWJlciBvZiBwb2ludHMgdG8gZHJhdyB0aGUgZWxsaXBzZSB3aXRoLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZmlsbEVsbGlwc2VTaGFwZTogZnVuY3Rpb24gKGVsbGlwc2UsIHNtb290aG5lc3MpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHNtb290aG5lc3MgPT09IHVuZGVmaW5lZCkgeyBzbW9vdGhuZXNzID0gMzI7IH1cclxuXHJcbiAgICAgICAgdmFyIHBvaW50cyA9IGVsbGlwc2UuZ2V0UG9pbnRzKHNtb290aG5lc3MpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5maWxsUG9pbnRzKHBvaW50cywgdHJ1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmlsbCBhbiBlbGxpcHNlIHdpdGggdGhlIGdpdmVuIHBvc2l0aW9uIGFuZCBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI2ZpbGxFbGxpcHNlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIGVsbGlwc2UuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtzbW9vdGhuZXNzPTMyXSAtIFRoZSBudW1iZXIgb2YgcG9pbnRzIHRvIGRyYXcgdGhlIGVsbGlwc2Ugd2l0aC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGZpbGxFbGxpcHNlOiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgc21vb3RobmVzcylcclxuICAgIHtcclxuICAgICAgICBpZiAoc21vb3RobmVzcyA9PT0gdW5kZWZpbmVkKSB7IHNtb290aG5lc3MgPSAzMjsgfVxyXG5cclxuICAgICAgICB2YXIgZWxsaXBzZSA9IG5ldyBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICB2YXIgcG9pbnRzID0gZWxsaXBzZS5nZXRQb2ludHMoc21vb3RobmVzcyk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmZpbGxQb2ludHMocG9pbnRzLCB0cnVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3IGFuIGFyYy5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgY2lyY2xlcywgb3IgcGFydHMgb2YgY2lyY2xlcy5cclxuICAgICAqIFxyXG4gICAgICogTWFrZSBzdXJlIHlvdSBjYWxsIGBiZWdpblBhdGhgIGJlZm9yZSBzdGFydGluZyB0aGUgYXJjIHVubGVzcyB5b3Ugd2lzaCBmb3IgdGhlIGFyYyB0byBhdXRvbWF0aWNhbGx5XHJcbiAgICAgKiBjbG9zZSB3aGVuIGZpbGxlZCBvciBzdHJva2VkLlxyXG4gICAgICpcclxuICAgICAqIFVzZSB0aGUgb3B0aW9uYWwgYG92ZXJzaG9vdGAgYXJndW1lbnQgaW5jcmVhc2UgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHRoYXQgdGFrZSBwbGFjZSB3aGVuXHJcbiAgICAgKiB0aGUgYXJjIGlzIHJlbmRlcmVkIGluIFdlYkdMLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UncmUgZHJhd2luZyBhbiBhcmMgd2l0aCBhbiBlc3BlY2lhbGx5IHRoaWNrIGxpbmUsXHJcbiAgICAgKiBhcyBpdCB3aWxsIGFsbG93IHRoZSBhcmMgdG8gZnVsbHkgam9pbi11cC4gVHJ5IHNtYWxsIHZhbHVlcyBhdCBmaXJzdCwgaS5lLiAwLjAxLlxyXG4gICAgICpcclxuICAgICAqIENhbGwge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNmaWxsUGF0aH0gb3Ige0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNzdHJva2VQYXRofSBhZnRlciBjYWxsaW5nXHJcbiAgICAgKiB0aGlzIG1ldGhvZCB0byBkcmF3IHRoZSBhcmMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjYXJjXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRpdXMgLSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRBbmdsZSAtIFRoZSBzdGFydGluZyBhbmdsZSwgaW4gcmFkaWFucy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRBbmdsZSAtIFRoZSBlbmRpbmcgYW5nbGUsIGluIHJhZGlhbnMuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthbnRpY2xvY2t3aXNlPWZhbHNlXSAtIFdoZXRoZXIgdGhlIGRyYXdpbmcgc2hvdWxkIGJlIGFudGljbG9ja3dpc2Ugb3IgY2xvY2t3aXNlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvdmVyc2hvb3Q9MF0gLSBUaGlzIHZhbHVlIGFsbG93cyB5b3UgdG8gaW5jcmVhc2UgdGhlIHNlZ21lbnQgaXRlcmF0aW9ucyBpbiBXZWJHTCByZW5kZXJpbmcuIFVzZWZ1bCBpZiB0aGUgYXJjIGhhcyBhIHRoaWNrIHN0cm9rZSBhbmQgbmVlZHMgdG8gb3ZlcnNob290IHRvIGpvaW4tdXAgY2xlYW5seS4gVXNlIHNtYWxsIG51bWJlcnMgc3VjaCBhcyAwLjAxIHRvIHN0YXJ0IHdpdGggYW5kIGluY3JlYXNlIGFzIG5lZWRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGFyYzogZnVuY3Rpb24gKHgsIHksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UsIG92ZXJzaG9vdClcclxuICAgIHtcclxuICAgICAgICBpZiAoYW50aWNsb2Nrd2lzZSA9PT0gdW5kZWZpbmVkKSB7IGFudGljbG9ja3dpc2UgPSBmYWxzZTsgfVxyXG4gICAgICAgIGlmIChvdmVyc2hvb3QgPT09IHVuZGVmaW5lZCkgeyBvdmVyc2hvb3QgPSAwOyB9XHJcblxyXG4gICAgICAgIHRoaXMuY29tbWFuZEJ1ZmZlci5wdXNoKFxyXG4gICAgICAgICAgICBDb21tYW5kcy5BUkMsXHJcbiAgICAgICAgICAgIHgsIHksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UsIG92ZXJzaG9vdFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBwaWUtY2hhcnQgc2xpY2Ugc2hhcGUgY2VudGVyZWQgYXQgYHhgLCBgeWAgd2l0aCB0aGUgZ2l2ZW4gcmFkaXVzLlxyXG4gICAgICogWW91IG11c3QgZGVmaW5lIHRoZSBzdGFydCBhbmQgZW5kIGFuZ2xlIG9mIHRoZSBzbGljZS5cclxuICAgICAqXHJcbiAgICAgKiBTZXR0aW5nIHRoZSBgYW50aWNsb2Nrd2lzZWAgYXJndW1lbnQgdG8gYHRydWVgIGNyZWF0ZXMgYSBzaGFwZSBzaW1pbGFyIHRvIFBhY21hbi5cclxuICAgICAqIFNldHRpbmcgaXQgdG8gYGZhbHNlYCBjcmVhdGVzIGEgc2hhcGUgbGlrZSBhIHNsaWNlIG9mIHBpZS5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIGJlZ2luIGEgbmV3IHBhdGggYW5kIGNsb3NlIHRoZSBwYXRoIGF0IHRoZSBlbmQgb2YgaXQuXHJcbiAgICAgKiBUbyBkaXNwbGF5IHRoZSBhY3R1YWwgc2xpY2UgeW91IG5lZWQgdG8gY2FsbCBlaXRoZXIgYHN0cm9rZVBhdGhgIG9yIGBmaWxsUGF0aGAgYWZ0ZXIgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3Mjc2xpY2VcclxuICAgICAqIEBzaW5jZSAzLjQuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgY2VudGVyIG9mIHRoZSBzbGljZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIGNlbnRlciBvZiB0aGUgc2xpY2UuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkaXVzIC0gVGhlIHJhZGl1cyBvZiB0aGUgc2xpY2UuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRBbmdsZSAtIFRoZSBzdGFydCBhbmdsZSBvZiB0aGUgc2xpY2UsIGdpdmVuIGluIHJhZGlhbnMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kQW5nbGUgLSBUaGUgZW5kIGFuZ2xlIG9mIHRoZSBzbGljZSwgZ2l2ZW4gaW4gcmFkaWFucy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FudGljbG9ja3dpc2U9ZmFsc2VdIC0gV2hldGhlciB0aGUgZHJhd2luZyBzaG91bGQgYmUgYW50aWNsb2Nrd2lzZSBvciBjbG9ja3dpc2UuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW292ZXJzaG9vdD0wXSAtIFRoaXMgdmFsdWUgYWxsb3dzIHlvdSB0byBvdmVyc2hvb3QgdGhlIGVuZEFuZ2xlIGJ5IHRoaXMgYW1vdW50LiBVc2VmdWwgaWYgdGhlIGFyYyBoYXMgYSB0aGljayBzdHJva2UgYW5kIG5lZWRzIHRvIG92ZXJzaG9vdCB0byBqb2luLXVwIGNsZWFubHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzbGljZTogZnVuY3Rpb24gKHgsIHksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UsIG92ZXJzaG9vdClcclxuICAgIHtcclxuICAgICAgICBpZiAoYW50aWNsb2Nrd2lzZSA9PT0gdW5kZWZpbmVkKSB7IGFudGljbG9ja3dpc2UgPSBmYWxzZTsgfVxyXG4gICAgICAgIGlmIChvdmVyc2hvb3QgPT09IHVuZGVmaW5lZCkgeyBvdmVyc2hvb3QgPSAwOyB9XHJcblxyXG4gICAgICAgIHRoaXMuY29tbWFuZEJ1ZmZlci5wdXNoKENvbW1hbmRzLkJFR0lOX1BBVEgpO1xyXG5cclxuICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIucHVzaChDb21tYW5kcy5NT1ZFX1RPLCB4LCB5KTtcclxuXHJcbiAgICAgICAgdGhpcy5jb21tYW5kQnVmZmVyLnB1c2goQ29tbWFuZHMuQVJDLCB4LCB5LCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBhbnRpY2xvY2t3aXNlLCBvdmVyc2hvb3QpO1xyXG5cclxuICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIucHVzaChDb21tYW5kcy5DTE9TRV9QQVRIKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2F2ZXMgdGhlIHN0YXRlIG9mIHRoZSBHcmFwaGljcyBieSBwdXNoaW5nIHRoZSBjdXJyZW50IHN0YXRlIG9udG8gYSBzdGFjay5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgbW9zdCByZWNlbnRseSBzYXZlZCBzdGF0ZSBjYW4gdGhlbiBiZSByZXN0b3JlZCB3aXRoIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3MjcmVzdG9yZX0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3Mjc2F2ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzYXZlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuY29tbWFuZEJ1ZmZlci5wdXNoKFxyXG4gICAgICAgICAgICBDb21tYW5kcy5TQVZFXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzdG9yZXMgdGhlIG1vc3QgcmVjZW50bHkgc2F2ZWQgc3RhdGUgb2YgdGhlIEdyYXBoaWNzIGJ5IHBvcHBpbmcgZnJvbSB0aGUgc3RhdGUgc3RhY2suXHJcbiAgICAgKlxyXG4gICAgICogVXNlIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3Mjc2F2ZX0gdG8gc2F2ZSB0aGUgY3VycmVudCBzdGF0ZSwgYW5kIGNhbGwgdGhpcyBhZnRlcndhcmRzIHRvIHJlc3RvcmUgdGhhdCBzdGF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGVyZSBpcyBubyBzYXZlZCBzdGF0ZSwgdGhpcyBjb21tYW5kIGRvZXMgbm90aGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNyZXN0b3JlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlc3RvcmU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jb21tYW5kQnVmZmVyLnB1c2goXHJcbiAgICAgICAgICAgIENvbW1hbmRzLlJFU1RPUkVcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnNlcnRzIGEgdHJhbnNsYXRpb24gY29tbWFuZCBpbnRvIHRoaXMgR3JhcGhpY3Mgb2JqZWN0cyBjb21tYW5kIGJ1ZmZlci5cclxuICAgICAqIFxyXG4gICAgICogQWxsIG9iamVjdHMgZHJhd24gX2FmdGVyXyBjYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgYmUgdHJhbnNsYXRlZFxyXG4gICAgICogYnkgdGhlIGdpdmVuIGFtb3VudC5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBkb2VzIG5vdCBjaGFuZ2UgdGhlIHBvc2l0aW9uIG9mIHRoZSBHcmFwaGljcyBvYmplY3QgaXRzZWxmLFxyXG4gICAgICogb25seSBvZiB0aGUgb2JqZWN0cyBkcmF3biBieSBpdCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI3RyYW5zbGF0ZUNhbnZhc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCB0cmFuc2xhdGlvbiB0byBhcHBseS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHRyYW5zbGF0aW9uIHRvIGFwcGx5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgdHJhbnNsYXRlQ2FudmFzOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIucHVzaChcclxuICAgICAgICAgICAgQ29tbWFuZHMuVFJBTlNMQVRFLFxyXG4gICAgICAgICAgICB4LCB5XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5zZXJ0cyBhIHNjYWxlIGNvbW1hbmQgaW50byB0aGlzIEdyYXBoaWNzIG9iamVjdHMgY29tbWFuZCBidWZmZXIuXHJcbiAgICAgKiBcclxuICAgICAqIEFsbCBvYmplY3RzIGRyYXduIF9hZnRlcl8gY2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIGJlIHNjYWxlZFxyXG4gICAgICogYnkgdGhlIGdpdmVuIGFtb3VudC5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBkb2VzIG5vdCBjaGFuZ2UgdGhlIHNjYWxlIG9mIHRoZSBHcmFwaGljcyBvYmplY3QgaXRzZWxmLFxyXG4gICAgICogb25seSBvZiB0aGUgb2JqZWN0cyBkcmF3biBieSBpdCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI3NjYWxlQ2FudmFzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHNjYWxlIHRvIGFwcGx5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgc2NhbGUgdG8gYXBwbHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzY2FsZUNhbnZhczogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jb21tYW5kQnVmZmVyLnB1c2goXHJcbiAgICAgICAgICAgIENvbW1hbmRzLlNDQUxFLFxyXG4gICAgICAgICAgICB4LCB5XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5zZXJ0cyBhIHJvdGF0aW9uIGNvbW1hbmQgaW50byB0aGlzIEdyYXBoaWNzIG9iamVjdHMgY29tbWFuZCBidWZmZXIuXHJcbiAgICAgKiBcclxuICAgICAqIEFsbCBvYmplY3RzIGRyYXduIF9hZnRlcl8gY2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIGJlIHJvdGF0ZWRcclxuICAgICAqIGJ5IHRoZSBnaXZlbiBhbW91bnQuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgZG9lcyBub3QgY2hhbmdlIHRoZSByb3RhdGlvbiBvZiB0aGUgR3JhcGhpY3Mgb2JqZWN0IGl0c2VsZixcclxuICAgICAqIG9ubHkgb2YgdGhlIG9iamVjdHMgZHJhd24gYnkgaXQgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNyb3RhdGVDYW52YXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRpYW5zIC0gVGhlIHJvdGF0aW9uIGFuZ2xlLCBpbiByYWRpYW5zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcm90YXRlQ2FudmFzOiBmdW5jdGlvbiAocmFkaWFucylcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIucHVzaChcclxuICAgICAgICAgICAgQ29tbWFuZHMuUk9UQVRFLFxyXG4gICAgICAgICAgICByYWRpYW5zXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xlYXIgdGhlIGNvbW1hbmQgYnVmZmVyIGFuZCByZXNldCB0aGUgZmlsbCBzdHlsZSBhbmQgbGluZSBzdHlsZSB0byB0aGVpciBkZWZhdWx0cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNjbGVhclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBjbGVhcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEZpbGxDb2xvciA+IC0xKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5maWxsU3R5bGUodGhpcy5kZWZhdWx0RmlsbENvbG9yLCB0aGlzLmRlZmF1bHRGaWxsQWxwaGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFN0cm9rZUNvbG9yID4gLTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmxpbmVTdHlsZSh0aGlzLmRlZmF1bHRTdHJva2VXaWR0aCwgdGhpcy5kZWZhdWx0U3Ryb2tlQ29sb3IsIHRoaXMuZGVmYXVsdFN0cm9rZUFscGhhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIGEgdGV4dHVyZSBmcm9tIHRoaXMgR3JhcGhpY3Mgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIElmIGBrZXlgIGlzIGEgc3RyaW5nIGl0J2xsIGdlbmVyYXRlIGEgbmV3IHRleHR1cmUgdXNpbmcgaXQgYW5kIGFkZCBpdCBpbnRvIHRoZVxyXG4gICAgICogVGV4dHVyZSBNYW5hZ2VyIChhc3N1bWluZyBubyBrZXkgY29uZmxpY3QgaGFwcGVucykuXHJcbiAgICAgKlxyXG4gICAgICogSWYgYGtleWAgaXMgYSBDYW52YXMgaXQgd2lsbCBkcmF3IHRoZSB0ZXh0dXJlIHRvIHRoYXQgY2FudmFzIGNvbnRleHQuIE5vdGUgdGhhdCBpdCB3aWxsIE5PVFxyXG4gICAgICogYXV0b21hdGljYWxseSB1cGxvYWQgaXQgdG8gdGhlIEdQVSBpbiBXZWJHTCBtb2RlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI2dlbmVyYXRlVGV4dHVyZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfEhUTUxDYW52YXNFbGVtZW50KX0ga2V5IC0gVGhlIGtleSB0byBzdG9yZSB0aGUgdGV4dHVyZSB3aXRoIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIsIG9yIGEgQ2FudmFzIHRvIGRyYXcgdG8uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt3aWR0aF0gLSBUaGUgd2lkdGggb2YgdGhlIGdyYXBoaWNzIHRvIGdlbmVyYXRlLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0XSAtIFRoZSBoZWlnaHQgb2YgdGhlIGdyYXBoaWNzIHRvIGdlbmVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVUZXh0dXJlOiBmdW5jdGlvbiAoa2V5LCB3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzeXMgPSB0aGlzLnNjZW5lLnN5cztcclxuICAgICAgICB2YXIgcmVuZGVyZXIgPSBzeXMuZ2FtZS5yZW5kZXJlcjtcclxuXHJcbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHsgd2lkdGggPSBzeXMuc2NhbGUud2lkdGg7IH1cclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gc3lzLnNjYWxlLmhlaWdodDsgfVxyXG5cclxuICAgICAgICBHcmFwaGljcy5UYXJnZXRDYW1lcmEuc2V0U2NlbmUodGhpcy5zY2VuZSk7XHJcbiAgICAgICAgR3JhcGhpY3MuVGFyZ2V0Q2FtZXJhLnNldFZpZXdwb3J0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgIEdyYXBoaWNzLlRhcmdldENhbWVyYS5zY3JvbGxYID0gdGhpcy54O1xyXG4gICAgICAgIEdyYXBoaWNzLlRhcmdldENhbWVyYS5zY3JvbGxZID0gdGhpcy55O1xyXG5cclxuICAgICAgICB2YXIgdGV4dHVyZTtcclxuICAgICAgICB2YXIgY3R4O1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoc3lzLnRleHR1cmVzLmV4aXN0cyhrZXkpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgS2V5IGlzIGEgc3RyaW5nLCBpdCBET0VTIGV4aXN0IGluIHRoZSBUZXh0dXJlIE1hbmFnZXIgQU5EIGlzIGEgY2FudmFzLCBzbyBkcmF3IHRvIGl0XHJcblxyXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHN5cy50ZXh0dXJlcy5nZXQoa2V5KTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgc3JjID0gdGV4dHVyZS5nZXRTb3VyY2VJbWFnZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzcmMgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjdHggPSBzcmMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBLZXkgaXMgYSBzdHJpbmcgYW5kIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIFRleHR1cmUgTWFuYWdlciwgc28gZ2VuZXJhdGUgYW5kIHNhdmUgaXRcclxuXHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gc3lzLnRleHR1cmVzLmNyZWF0ZUNhbnZhcyhrZXksIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGN0eCA9IHRleHR1cmUuZ2V0U291cmNlSW1hZ2UoKS5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGtleSBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIEtleSBpcyBhIENhbnZhcywgc28gZHJhdyB0byBpdFxyXG5cclxuICAgICAgICAgICAgY3R4ID0ga2V5LmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY3R4KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gdmFyIEdyYXBoaWNzQ2FudmFzUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4LCByZW5kZXJUYXJnZXRDdHgsIGFsbG93Q2xpcClcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMocmVuZGVyZXIsIHRoaXMsIDAsIEdyYXBoaWNzLlRhcmdldENhbWVyYSwgbnVsbCwgY3R4LCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGV4dHVyZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIGRlc3Ryb3kgaGFuZGxlciwgY2FsbGVkIGFzIHBhcnQgb2YgdGhlIGRlc3Ryb3kgcHJvY2Vzcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNwcmVEZXN0cm95XHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAc2luY2UgMy45LjBcclxuICAgICAqL1xyXG4gICAgcHJlRGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNvbW1hbmRCdWZmZXIgPSBbXTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEEgQ2FtZXJhIHVzZWQgc3BlY2lmaWNhbGx5IGJ5IHRoZSBHcmFwaGljcyBzeXN0ZW0gZm9yIHJlbmRlcmluZyB0byB0ZXh0dXJlcy5cclxuICpcclxuICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzLlRhcmdldENhbWVyYVxyXG4gKiBAdHlwZSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9XHJcbiAqIEBzaW5jZSAzLjEuMFxyXG4gKi9cclxuR3JhcGhpY3MuVGFyZ2V0Q2FtZXJhID0gbmV3IEJhc2VDYW1lcmEoKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3M7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/graphics/Graphics.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/graphics/GraphicsCanvasRenderer.js":
/*!********************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/graphics/GraphicsCanvasRenderer.js ***!
\********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Commands = __webpack_require__(/*! ./Commands */ \"./node_modules/phaser/src/gameobjects/graphics/Commands.js\");\r\nvar SetTransform = __webpack_require__(/*! ../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Graphics#renderCanvas\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Graphics} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n * @param {CanvasRenderingContext2D} [renderTargetCtx] - The target rendering context.\r\n * @param {boolean} allowClip - If `true` then path operations will be used instead of fill operations.\r\n */\r\nvar GraphicsCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix, renderTargetCtx, allowClip)\r\n{\r\n var commandBuffer = src.commandBuffer;\r\n var commandBufferLength = commandBuffer.length;\r\n\r\n var ctx = renderTargetCtx || renderer.currentContext;\r\n\r\n if (commandBufferLength === 0 || !SetTransform(renderer, ctx, src, camera, parentMatrix))\r\n {\r\n return;\r\n }\r\n\r\n var lineAlpha = 1;\r\n var fillAlpha = 1;\r\n var lineColor = 0;\r\n var fillColor = 0;\r\n var lineWidth = 1;\r\n var red = 0;\r\n var green = 0;\r\n var blue = 0;\r\n\r\n // Reset any currently active paths\r\n ctx.beginPath();\r\n\r\n for (var index = 0; index < commandBufferLength; ++index)\r\n {\r\n var commandID = commandBuffer[index];\r\n\r\n switch (commandID)\r\n {\r\n case Commands.ARC:\r\n ctx.arc(\r\n commandBuffer[index + 1],\r\n commandBuffer[index + 2],\r\n commandBuffer[index + 3],\r\n commandBuffer[index + 4],\r\n commandBuffer[index + 5],\r\n commandBuffer[index + 6]\r\n );\r\n\r\n // +7 because overshoot is the 7th value, not used in Canvas\r\n index += 7;\r\n break;\r\n\r\n case Commands.LINE_STYLE:\r\n lineWidth = commandBuffer[index + 1];\r\n lineColor = commandBuffer[index + 2];\r\n lineAlpha = commandBuffer[index + 3];\r\n red = ((lineColor & 0xFF0000) >>> 16);\r\n green = ((lineColor & 0xFF00) >>> 8);\r\n blue = (lineColor & 0xFF);\r\n ctx.strokeStyle = 'rgba(' + red + ',' + green + ',' + blue + ',' + lineAlpha + ')';\r\n ctx.lineWidth = lineWidth;\r\n index += 3;\r\n break;\r\n\r\n case Commands.FILL_STYLE:\r\n fillColor = commandBuffer[index + 1];\r\n fillAlpha = commandBuffer[index + 2];\r\n red = ((fillColor & 0xFF0000) >>> 16);\r\n green = ((fillColor & 0xFF00) >>> 8);\r\n blue = (fillColor & 0xFF);\r\n ctx.fillStyle = 'rgba(' + red + ',' + green + ',' + blue + ',' + fillAlpha + ')';\r\n index += 2;\r\n break;\r\n\r\n case Commands.BEGIN_PATH:\r\n ctx.beginPath();\r\n break;\r\n\r\n case Commands.CLOSE_PATH:\r\n ctx.closePath();\r\n break;\r\n\r\n case Commands.FILL_PATH:\r\n if (!allowClip)\r\n {\r\n ctx.fill();\r\n }\r\n break;\r\n\r\n case Commands.STROKE_PATH:\r\n if (!allowClip)\r\n {\r\n ctx.stroke();\r\n }\r\n break;\r\n\r\n case Commands.FILL_RECT:\r\n if (!allowClip)\r\n {\r\n ctx.fillRect(\r\n commandBuffer[index + 1],\r\n commandBuffer[index + 2],\r\n commandBuffer[index + 3],\r\n commandBuffer[index + 4]\r\n );\r\n }\r\n else\r\n {\r\n ctx.rect(\r\n commandBuffer[index + 1],\r\n commandBuffer[index + 2],\r\n commandBuffer[index + 3],\r\n commandBuffer[index + 4]\r\n );\r\n }\r\n index += 4;\r\n break;\r\n\r\n case Commands.FILL_TRIANGLE:\r\n ctx.beginPath();\r\n ctx.moveTo(commandBuffer[index + 1], commandBuffer[index + 2]);\r\n ctx.lineTo(commandBuffer[index + 3], commandBuffer[index + 4]);\r\n ctx.lineTo(commandBuffer[index + 5], commandBuffer[index + 6]);\r\n ctx.closePath();\r\n if (!allowClip)\r\n {\r\n ctx.fill();\r\n }\r\n index += 6;\r\n break;\r\n\r\n case Commands.STROKE_TRIANGLE:\r\n ctx.beginPath();\r\n ctx.moveTo(commandBuffer[index + 1], commandBuffer[index + 2]);\r\n ctx.lineTo(commandBuffer[index + 3], commandBuffer[index + 4]);\r\n ctx.lineTo(commandBuffer[index + 5], commandBuffer[index + 6]);\r\n ctx.closePath();\r\n if (!allowClip)\r\n {\r\n ctx.stroke();\r\n }\r\n index += 6;\r\n break;\r\n\r\n case Commands.LINE_TO:\r\n ctx.lineTo(\r\n commandBuffer[index + 1],\r\n commandBuffer[index + 2]\r\n );\r\n index += 2;\r\n break;\r\n\r\n case Commands.MOVE_TO:\r\n ctx.moveTo(\r\n commandBuffer[index + 1],\r\n commandBuffer[index + 2]\r\n );\r\n index += 2;\r\n break;\r\n\r\n case Commands.LINE_FX_TO:\r\n ctx.lineTo(\r\n commandBuffer[index + 1],\r\n commandBuffer[index + 2]\r\n );\r\n index += 5;\r\n break;\r\n\r\n case Commands.MOVE_FX_TO:\r\n ctx.moveTo(\r\n commandBuffer[index + 1],\r\n commandBuffer[index + 2]\r\n );\r\n index += 5;\r\n break;\r\n\r\n case Commands.SAVE:\r\n ctx.save();\r\n break;\r\n\r\n case Commands.RESTORE:\r\n ctx.restore();\r\n break;\r\n\r\n case Commands.TRANSLATE:\r\n ctx.translate(\r\n commandBuffer[index + 1],\r\n commandBuffer[index + 2]\r\n );\r\n index += 2;\r\n break;\r\n\r\n case Commands.SCALE:\r\n ctx.scale(\r\n commandBuffer[index + 1],\r\n commandBuffer[index + 2]\r\n );\r\n index += 2;\r\n break;\r\n\r\n case Commands.ROTATE:\r\n ctx.rotate(\r\n commandBuffer[index + 1]\r\n );\r\n index += 1;\r\n break;\r\n\r\n case Commands.GRADIENT_FILL_STYLE:\r\n index += 5;\r\n break;\r\n\r\n case Commands.GRADIENT_LINE_STYLE:\r\n index += 6;\r\n break;\r\n\r\n case Commands.SET_TEXTURE:\r\n index += 2;\r\n break;\r\n }\r\n }\r\n\r\n // Restore the context saved in SetTransform\r\n ctx.restore();\r\n};\r\n\r\nmodule.exports = GraphicsCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncmFwaGljcy9HcmFwaGljc0NhbnZhc1JlbmRlcmVyLmpzP2Q3NDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyw4RUFBWTtBQUNuQyxtQkFBbUIsbUJBQU8sQ0FBQyxpSEFBMEM7O0FBRXJFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsNEJBQTRCO0FBQ3ZDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RCxXQUFXLHlCQUF5QjtBQUNwQyxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdUJBQXVCLDZCQUE2QjtBQUNwRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvZ3JhcGhpY3MvR3JhcGhpY3NDYW52YXNSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENvbW1hbmRzID0gcmVxdWlyZSgnLi9Db21tYW5kcycpO1xyXG52YXIgU2V0VHJhbnNmb3JtID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXIvY2FudmFzL3V0aWxzL1NldFRyYW5zZm9ybScpO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBDYW52YXMgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljcyNyZW5kZXJDYW52YXNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgQ2FudmFzIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gW3JlbmRlclRhcmdldEN0eF0gLSBUaGUgdGFyZ2V0IHJlbmRlcmluZyBjb250ZXh0LlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFsbG93Q2xpcCAtIElmIGB0cnVlYCB0aGVuIHBhdGggb3BlcmF0aW9ucyB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiBmaWxsIG9wZXJhdGlvbnMuXHJcbiAqL1xyXG52YXIgR3JhcGhpY3NDYW52YXNSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgsIHJlbmRlclRhcmdldEN0eCwgYWxsb3dDbGlwKVxyXG57XHJcbiAgICB2YXIgY29tbWFuZEJ1ZmZlciA9IHNyYy5jb21tYW5kQnVmZmVyO1xyXG4gICAgdmFyIGNvbW1hbmRCdWZmZXJMZW5ndGggPSBjb21tYW5kQnVmZmVyLmxlbmd0aDtcclxuXHJcbiAgICB2YXIgY3R4ID0gcmVuZGVyVGFyZ2V0Q3R4IHx8IHJlbmRlcmVyLmN1cnJlbnRDb250ZXh0O1xyXG5cclxuICAgIGlmIChjb21tYW5kQnVmZmVyTGVuZ3RoID09PSAwIHx8ICFTZXRUcmFuc2Zvcm0ocmVuZGVyZXIsIGN0eCwgc3JjLCBjYW1lcmEsIHBhcmVudE1hdHJpeCkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBsaW5lQWxwaGEgPSAxO1xyXG4gICAgdmFyIGZpbGxBbHBoYSA9IDE7XHJcbiAgICB2YXIgbGluZUNvbG9yID0gMDtcclxuICAgIHZhciBmaWxsQ29sb3IgPSAwO1xyXG4gICAgdmFyIGxpbmVXaWR0aCA9IDE7XHJcbiAgICB2YXIgcmVkID0gMDtcclxuICAgIHZhciBncmVlbiA9IDA7XHJcbiAgICB2YXIgYmx1ZSA9IDA7XHJcblxyXG4gICAgLy8gIFJlc2V0IGFueSBjdXJyZW50bHkgYWN0aXZlIHBhdGhzXHJcbiAgICBjdHguYmVnaW5QYXRoKCk7XHJcblxyXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGNvbW1hbmRCdWZmZXJMZW5ndGg7ICsraW5kZXgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGNvbW1hbmRJRCA9IGNvbW1hbmRCdWZmZXJbaW5kZXhdO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKGNvbW1hbmRJRClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhc2UgQ29tbWFuZHMuQVJDOlxyXG4gICAgICAgICAgICAgICAgY3R4LmFyYyhcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnVmZmVyW2luZGV4ICsgMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEJ1ZmZlcltpbmRleCArIDJdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRCdWZmZXJbaW5kZXggKyAzXSxcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnVmZmVyW2luZGV4ICsgNF0sXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEJ1ZmZlcltpbmRleCArIDVdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRCdWZmZXJbaW5kZXggKyA2XVxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyAgKzcgYmVjYXVzZSBvdmVyc2hvb3QgaXMgdGhlIDd0aCB2YWx1ZSwgbm90IHVzZWQgaW4gQ2FudmFzXHJcbiAgICAgICAgICAgICAgICBpbmRleCArPSA3O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLkxJTkVfU1RZTEU6XHJcbiAgICAgICAgICAgICAgICBsaW5lV2lkdGggPSBjb21tYW5kQnVmZmVyW2luZGV4ICsgMV07XHJcbiAgICAgICAgICAgICAgICBsaW5lQ29sb3IgPSBjb21tYW5kQnVmZmVyW2luZGV4ICsgMl07XHJcbiAgICAgICAgICAgICAgICBsaW5lQWxwaGEgPSBjb21tYW5kQnVmZmVyW2luZGV4ICsgM107XHJcbiAgICAgICAgICAgICAgICByZWQgPSAoKGxpbmVDb2xvciAmIDB4RkYwMDAwKSA+Pj4gMTYpO1xyXG4gICAgICAgICAgICAgICAgZ3JlZW4gPSAoKGxpbmVDb2xvciAmIDB4RkYwMCkgPj4+IDgpO1xyXG4gICAgICAgICAgICAgICAgYmx1ZSA9IChsaW5lQ29sb3IgJiAweEZGKTtcclxuICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9ICdyZ2JhKCcgKyByZWQgKyAnLCcgKyBncmVlbiArICcsJyArIGJsdWUgKyAnLCcgKyBsaW5lQWxwaGEgKyAnKSc7XHJcbiAgICAgICAgICAgICAgICBjdHgubGluZVdpZHRoID0gbGluZVdpZHRoO1xyXG4gICAgICAgICAgICAgICAgaW5kZXggKz0gMztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5GSUxMX1NUWUxFOlxyXG4gICAgICAgICAgICAgICAgZmlsbENvbG9yID0gY29tbWFuZEJ1ZmZlcltpbmRleCArIDFdO1xyXG4gICAgICAgICAgICAgICAgZmlsbEFscGhhID0gY29tbWFuZEJ1ZmZlcltpbmRleCArIDJdO1xyXG4gICAgICAgICAgICAgICAgcmVkID0gKChmaWxsQ29sb3IgJiAweEZGMDAwMCkgPj4+IDE2KTtcclxuICAgICAgICAgICAgICAgIGdyZWVuID0gKChmaWxsQ29sb3IgJiAweEZGMDApID4+PiA4KTtcclxuICAgICAgICAgICAgICAgIGJsdWUgPSAoZmlsbENvbG9yICYgMHhGRik7XHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJ3JnYmEoJyArIHJlZCArICcsJyArIGdyZWVuICsgJywnICsgYmx1ZSArICcsJyArIGZpbGxBbHBoYSArICcpJztcclxuICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgQ29tbWFuZHMuQkVHSU5fUEFUSDpcclxuICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5DTE9TRV9QQVRIOlxyXG4gICAgICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLkZJTExfUEFUSDpcclxuICAgICAgICAgICAgICAgIGlmICghYWxsb3dDbGlwKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGN0eC5maWxsKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgQ29tbWFuZHMuU1RST0tFX1BBVEg6XHJcbiAgICAgICAgICAgICAgICBpZiAoIWFsbG93Q2xpcClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgQ29tbWFuZHMuRklMTF9SRUNUOlxyXG4gICAgICAgICAgICAgICAgaWYgKCFhbGxvd0NsaXApXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnVmZmVyW2luZGV4ICsgMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRCdWZmZXJbaW5kZXggKyAyXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZEJ1ZmZlcltpbmRleCArIDNdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnVmZmVyW2luZGV4ICsgNF1cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGN0eC5yZWN0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnVmZmVyW2luZGV4ICsgMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRCdWZmZXJbaW5kZXggKyAyXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZEJ1ZmZlcltpbmRleCArIDNdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnVmZmVyW2luZGV4ICsgNF1cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaW5kZXggKz0gNDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5GSUxMX1RSSUFOR0xFOlxyXG4gICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgICAgICAgICAgICAgY3R4Lm1vdmVUbyhjb21tYW5kQnVmZmVyW2luZGV4ICsgMV0sIGNvbW1hbmRCdWZmZXJbaW5kZXggKyAyXSk7XHJcbiAgICAgICAgICAgICAgICBjdHgubGluZVRvKGNvbW1hbmRCdWZmZXJbaW5kZXggKyAzXSwgY29tbWFuZEJ1ZmZlcltpbmRleCArIDRdKTtcclxuICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oY29tbWFuZEJ1ZmZlcltpbmRleCArIDVdLCBjb21tYW5kQnVmZmVyW2luZGV4ICsgNl0pO1xyXG4gICAgICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFhbGxvd0NsaXApXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGwoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGluZGV4ICs9IDY7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgQ29tbWFuZHMuU1RST0tFX1RSSUFOR0xFOlxyXG4gICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgICAgICAgICAgICAgY3R4Lm1vdmVUbyhjb21tYW5kQnVmZmVyW2luZGV4ICsgMV0sIGNvbW1hbmRCdWZmZXJbaW5kZXggKyAyXSk7XHJcbiAgICAgICAgICAgICAgICBjdHgubGluZVRvKGNvbW1hbmRCdWZmZXJbaW5kZXggKyAzXSwgY29tbWFuZEJ1ZmZlcltpbmRleCArIDRdKTtcclxuICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oY29tbWFuZEJ1ZmZlcltpbmRleCArIDVdLCBjb21tYW5kQnVmZmVyW2luZGV4ICsgNl0pO1xyXG4gICAgICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFhbGxvd0NsaXApXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaW5kZXggKz0gNjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5MSU5FX1RPOlxyXG4gICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnVmZmVyW2luZGV4ICsgMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEJ1ZmZlcltpbmRleCArIDJdXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaW5kZXggKz0gMjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5NT1ZFX1RPOlxyXG4gICAgICAgICAgICAgICAgY3R4Lm1vdmVUbyhcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnVmZmVyW2luZGV4ICsgMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEJ1ZmZlcltpbmRleCArIDJdXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaW5kZXggKz0gMjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5MSU5FX0ZYX1RPOlxyXG4gICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnVmZmVyW2luZGV4ICsgMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEJ1ZmZlcltpbmRleCArIDJdXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaW5kZXggKz0gNTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5NT1ZFX0ZYX1RPOlxyXG4gICAgICAgICAgICAgICAgY3R4Lm1vdmVUbyhcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnVmZmVyW2luZGV4ICsgMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEJ1ZmZlcltpbmRleCArIDJdXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaW5kZXggKz0gNTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5TQVZFOlxyXG4gICAgICAgICAgICAgICAgY3R4LnNhdmUoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5SRVNUT1JFOlxyXG4gICAgICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5UUkFOU0xBVEU6XHJcbiAgICAgICAgICAgICAgICBjdHgudHJhbnNsYXRlKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRCdWZmZXJbaW5kZXggKyAxXSxcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnVmZmVyW2luZGV4ICsgMl1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpbmRleCArPSAyO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLlNDQUxFOlxyXG4gICAgICAgICAgICAgICAgY3R4LnNjYWxlKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRCdWZmZXJbaW5kZXggKyAxXSxcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnVmZmVyW2luZGV4ICsgMl1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpbmRleCArPSAyO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLlJPVEFURTpcclxuICAgICAgICAgICAgICAgIGN0eC5yb3RhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEJ1ZmZlcltpbmRleCArIDFdXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaW5kZXggKz0gMTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5HUkFESUVOVF9GSUxMX1NUWUxFOlxyXG4gICAgICAgICAgICAgICAgaW5kZXggKz0gNTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5HUkFESUVOVF9MSU5FX1NUWUxFOlxyXG4gICAgICAgICAgICAgICAgaW5kZXggKz0gNjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5TRVRfVEVYVFVSRTpcclxuICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIFJlc3RvcmUgdGhlIGNvbnRleHQgc2F2ZWQgaW4gU2V0VHJhbnNmb3JtXHJcbiAgICBjdHgucmVzdG9yZSgpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc0NhbnZhc1JlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/graphics/GraphicsCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/graphics/GraphicsCreator.js":
/*!*************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/graphics/GraphicsCreator.js ***!
\*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar Graphics = __webpack_require__(/*! ./Graphics */ \"./node_modules/phaser/src/gameobjects/graphics/Graphics.js\");\r\n\r\n/**\r\n * Creates a new Graphics Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Graphics Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#graphics\r\n * @since 3.0.0\r\n *\r\n * @param {object} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('graphics', function (config, addToScene)\r\n{\r\n if (config === undefined) { config = {}; }\r\n\r\n if (addToScene !== undefined)\r\n {\r\n config.add = addToScene;\r\n }\r\n\r\n var graphics = new Graphics(this.scene, config);\r\n\r\n if (config.add)\r\n {\r\n this.scene.sys.displayList.add(graphics);\r\n }\r\n \r\n return graphics;\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectCreator context.\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncmFwaGljcy9HcmFwaGljc0NyZWF0b3IuanM/ZTk1MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsd0JBQXdCLG1CQUFPLENBQUMsd0ZBQXNCO0FBQ3RELGVBQWUsbUJBQU8sQ0FBQyw4RUFBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLDRCQUE0QjtBQUN4QztBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsYUFBYTs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvZ3JhcGhpY3MvR3JhcGhpY3NDcmVhdG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2FtZU9iamVjdENyZWF0b3IgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Q3JlYXRvcicpO1xyXG52YXIgR3JhcGhpY3MgPSByZXF1aXJlKCcuL0dyYXBoaWNzJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljcyBHYW1lIE9iamVjdCBhbmQgcmV0dXJucyBpdC5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgR3JhcGhpY3MgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI2dyYXBoaWNzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gY3JlYXRlIGl0c2VsZi5cclxuICogQHBhcmFtIHtib29sZWFufSBbYWRkVG9TY2VuZV0gLSBBZGQgdGhpcyBHYW1lIE9iamVjdCB0byB0aGUgU2NlbmUgYWZ0ZXIgY3JlYXRpbmcgaXQ/IElmIHNldCB0aGlzIGFyZ3VtZW50IG92ZXJyaWRlcyB0aGUgYGFkZGAgcHJvcGVydHkgaW4gdGhlIGNvbmZpZyBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmFwaGljc30gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0Q3JlYXRvci5yZWdpc3RlcignZ3JhcGhpY3MnLCBmdW5jdGlvbiAoY29uZmlnLCBhZGRUb1NjZW5lKVxyXG57XHJcbiAgICBpZiAoY29uZmlnID09PSB1bmRlZmluZWQpIHsgY29uZmlnID0ge307IH1cclxuXHJcbiAgICBpZiAoYWRkVG9TY2VuZSAhPT0gdW5kZWZpbmVkKVxyXG4gICAge1xyXG4gICAgICAgIGNvbmZpZy5hZGQgPSBhZGRUb1NjZW5lO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBncmFwaGljcyA9IG5ldyBHcmFwaGljcyh0aGlzLnNjZW5lLCBjb25maWcpO1xyXG5cclxuICAgIGlmIChjb25maWcuYWRkKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2NlbmUuc3lzLmRpc3BsYXlMaXN0LmFkZChncmFwaGljcyk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiBncmFwaGljcztcclxufSk7XHJcblxyXG4vLyAgV2hlbiByZWdpc3RlcmluZyBhIGZhY3RvcnkgZnVuY3Rpb24gJ3RoaXMnIHJlZmVycyB0byB0aGUgR2FtZU9iamVjdENyZWF0b3IgY29udGV4dC5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/graphics/GraphicsCreator.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/graphics/GraphicsFactory.js":
/*!*************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/graphics/GraphicsFactory.js ***!
\*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Graphics = __webpack_require__(/*! ./Graphics */ \"./node_modules/phaser/src/gameobjects/graphics/Graphics.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Graphics Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Graphics Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#graphics\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Graphics.Options} [config] - The Graphics configuration.\r\n *\r\n * @return {Phaser.GameObjects.Graphics} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('graphics', function (config)\r\n{\r\n return this.displayList.add(new Graphics(this.scene, config));\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n// There are several properties available to use:\r\n//\r\n// this.scene - a reference to the Scene that owns the GameObjectFactory\r\n// this.displayList - a reference to the Display List the Scene owns\r\n// this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncmFwaGljcy9HcmFwaGljc0ZhY3RvcnkuanM/ZmQ2ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLDhFQUFZO0FBQ25DLHdCQUF3QixtQkFBTyxDQUFDLHdGQUFzQjs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMENBQTBDO0FBQ3JEO0FBQ0EsWUFBWSw0QkFBNEI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvZ3JhcGhpY3MvR3JhcGhpY3NGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR3JhcGhpY3MgPSByZXF1aXJlKCcuL0dyYXBoaWNzJyk7XHJcbnZhciBHYW1lT2JqZWN0RmFjdG9yeSA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3RGYWN0b3J5Jyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljcyBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIEdyYXBoaWNzIEdhbWUgT2JqZWN0IGhhcyBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0RmFjdG9yeSNncmFwaGljc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuR3JhcGhpY3MuT3B0aW9uc30gW2NvbmZpZ10gLSBUaGUgR3JhcGhpY3MgY29uZmlndXJhdGlvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RGYWN0b3J5LnJlZ2lzdGVyKCdncmFwaGljcycsIGZ1bmN0aW9uIChjb25maWcpXHJcbntcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXlMaXN0LmFkZChuZXcgR3JhcGhpY3ModGhpcy5zY2VuZSwgY29uZmlnKSk7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RGYWN0b3J5IGNvbnRleHQuXHJcbi8vXHJcbi8vICBUaGVyZSBhcmUgc2V2ZXJhbCBwcm9wZXJ0aWVzIGF2YWlsYWJsZSB0byB1c2U6XHJcbi8vXHJcbi8vICB0aGlzLnNjZW5lIC0gYSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgb3ducyB0aGUgR2FtZU9iamVjdEZhY3RvcnlcclxuLy8gIHRoaXMuZGlzcGxheUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgRGlzcGxheSBMaXN0IHRoZSBTY2VuZSBvd25zXHJcbi8vICB0aGlzLnVwZGF0ZUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgVXBkYXRlIExpc3QgdGhlIFNjZW5lIG93bnNcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/graphics/GraphicsFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/graphics/GraphicsRender.js":
/*!************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/graphics/GraphicsRender.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./GraphicsWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/graphics/GraphicsWebGLRenderer.js\");\r\n\r\n // Needed for Graphics.generateTexture\r\n renderCanvas = __webpack_require__(/*! ./GraphicsCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/graphics/GraphicsCanvasRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./GraphicsCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/graphics/GraphicsCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncmFwaGljcy9HcmFwaGljc1JlbmRlci5qcz82NDhhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxpRUFBa0I7QUFDNUMsbUJBQW1CLG1CQUFPLENBQUMsaUVBQWtCOztBQUU3QyxJQUFJLElBQXFCO0FBQ3pCO0FBQ0Esa0JBQWtCLG1CQUFPLENBQUMsd0dBQXlCOztBQUVuRDtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLDBHQUEwQjtBQUNyRDs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsMEdBQTBCO0FBQ3JEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncmFwaGljcy9HcmFwaGljc1JlbmRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG52YXIgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG5cclxuaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuL0dyYXBoaWNzV2ViR0xSZW5kZXJlcicpO1xyXG5cclxuICAgIC8vICBOZWVkZWQgZm9yIEdyYXBoaWNzLmdlbmVyYXRlVGV4dHVyZVxyXG4gICAgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi9HcmFwaGljc0NhbnZhc1JlbmRlcmVyJyk7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgQ0FOVkFTX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuL0dyYXBoaWNzQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/graphics/GraphicsRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/graphics/GraphicsWebGLRenderer.js":
/*!*******************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/graphics/GraphicsWebGLRenderer.js ***!
\*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Commands = __webpack_require__(/*! ./Commands */ \"./node_modules/phaser/src/gameobjects/graphics/Commands.js\");\r\nvar Utils = __webpack_require__(/*! ../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n// TODO: Remove the use of this\r\nvar Point = function (x, y, width)\r\n{\r\n this.x = x;\r\n this.y = y;\r\n this.width = width;\r\n};\r\n\r\n// TODO: Remove the use of this\r\nvar Path = function (x, y, width)\r\n{\r\n this.points = [];\r\n this.pointsLength = 1;\r\n this.points[0] = new Point(x, y, width);\r\n};\r\n\r\nvar matrixStack = [];\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Graphics#renderWebGL\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Graphics} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar GraphicsWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n if (src.commandBuffer.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n var pipeline = this.pipeline;\r\n\r\n renderer.setPipeline(pipeline, src);\r\n\r\n var camMatrix = src._tempMatrix1;\r\n var graphicsMatrix = src._tempMatrix2;\r\n var currentMatrix = src._tempMatrix3;\r\n\r\n currentMatrix.loadIdentity();\r\n\r\n graphicsMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n camMatrix.copyFrom(camera.matrix);\r\n\r\n if (parentMatrix)\r\n {\r\n // Multiply the camera by the parent matrix\r\n camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n // Undo the camera scroll\r\n graphicsMatrix.e = src.x;\r\n graphicsMatrix.f = src.y;\r\n\r\n // Multiply by the Sprite matrix, store result in calcMatrix\r\n camMatrix.multiply(graphicsMatrix);\r\n }\r\n else\r\n {\r\n graphicsMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n graphicsMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n\r\n // Multiply by the Sprite matrix, store result in calcMatrix\r\n camMatrix.multiply(graphicsMatrix);\r\n }\r\n\r\n var commands = src.commandBuffer;\r\n var alpha = camera.alpha * src.alpha;\r\n\r\n var lineWidth = 1;\r\n var fillTint = pipeline.fillTint;\r\n var strokeTint = pipeline.strokeTint;\r\n\r\n var tx = 0;\r\n var ty = 0;\r\n var ta = 0;\r\n var iterStep = 0.01;\r\n var PI2 = Math.PI * 2;\r\n\r\n var cmd;\r\n\r\n var path = [];\r\n var pathIndex = 0;\r\n var pathOpen = false;\r\n var lastPath = null;\r\n\r\n var getTint = Utils.getTintAppendFloatAlphaAndSwap;\r\n\r\n var currentTexture = renderer.blankTexture.glTexture;\r\n\r\n for (var cmdIndex = 0; cmdIndex < commands.length; cmdIndex++)\r\n {\r\n cmd = commands[cmdIndex];\r\n\r\n switch (cmd)\r\n {\r\n case Commands.BEGIN_PATH:\r\n\r\n path.length = 0;\r\n lastPath = null;\r\n pathOpen = true;\r\n break;\r\n\r\n case Commands.CLOSE_PATH:\r\n\r\n pathOpen = false;\r\n\r\n if (lastPath && lastPath.points.length)\r\n {\r\n lastPath.points.push(lastPath.points[0]);\r\n }\r\n break;\r\n\r\n case Commands.FILL_PATH:\r\n for (pathIndex = 0; pathIndex < path.length; pathIndex++)\r\n {\r\n pipeline.setTexture2D(currentTexture);\r\n\r\n pipeline.batchFillPath(\r\n path[pathIndex].points,\r\n currentMatrix,\r\n camMatrix\r\n );\r\n }\r\n break;\r\n\r\n case Commands.STROKE_PATH:\r\n for (pathIndex = 0; pathIndex < path.length; pathIndex++)\r\n {\r\n pipeline.setTexture2D(currentTexture);\r\n\r\n pipeline.batchStrokePath(\r\n path[pathIndex].points,\r\n lineWidth,\r\n pathOpen,\r\n currentMatrix,\r\n camMatrix\r\n );\r\n }\r\n break;\r\n\r\n case Commands.LINE_STYLE:\r\n lineWidth = commands[++cmdIndex];\r\n var strokeColor = commands[++cmdIndex];\r\n var strokeAlpha = commands[++cmdIndex] * alpha;\r\n var strokeTintColor = getTint(strokeColor, strokeAlpha);\r\n strokeTint.TL = strokeTintColor;\r\n strokeTint.TR = strokeTintColor;\r\n strokeTint.BL = strokeTintColor;\r\n strokeTint.BR = strokeTintColor;\r\n break;\r\n\r\n case Commands.FILL_STYLE:\r\n var fillColor = commands[++cmdIndex];\r\n var fillAlpha = commands[++cmdIndex] * alpha;\r\n var fillTintColor = getTint(fillColor, fillAlpha);\r\n fillTint.TL = fillTintColor;\r\n fillTint.TR = fillTintColor;\r\n fillTint.BL = fillTintColor;\r\n fillTint.BR = fillTintColor;\r\n break;\r\n\r\n case Commands.GRADIENT_FILL_STYLE:\r\n var gradientFillAlpha = commands[++cmdIndex] * alpha;\r\n fillTint.TL = getTint(commands[++cmdIndex], gradientFillAlpha);\r\n fillTint.TR = getTint(commands[++cmdIndex], gradientFillAlpha);\r\n fillTint.BL = getTint(commands[++cmdIndex], gradientFillAlpha);\r\n fillTint.BR = getTint(commands[++cmdIndex], gradientFillAlpha);\r\n break;\r\n\r\n case Commands.GRADIENT_LINE_STYLE:\r\n lineWidth = commands[++cmdIndex];\r\n var gradientLineAlpha = commands[++cmdIndex] * alpha;\r\n strokeTint.TL = getTint(commands[++cmdIndex], gradientLineAlpha);\r\n strokeTint.TR = getTint(commands[++cmdIndex], gradientLineAlpha);\r\n strokeTint.BL = getTint(commands[++cmdIndex], gradientLineAlpha);\r\n strokeTint.BR = getTint(commands[++cmdIndex], gradientLineAlpha);\r\n break;\r\n\r\n case Commands.ARC:\r\n var iteration = 0;\r\n var x = commands[++cmdIndex];\r\n var y = commands[++cmdIndex];\r\n var radius = commands[++cmdIndex];\r\n var startAngle = commands[++cmdIndex];\r\n var endAngle = commands[++cmdIndex];\r\n var anticlockwise = commands[++cmdIndex];\r\n var overshoot = commands[++cmdIndex];\r\n\r\n endAngle -= startAngle;\r\n\r\n if (anticlockwise)\r\n {\r\n if (endAngle < -PI2)\r\n {\r\n endAngle = -PI2;\r\n }\r\n else if (endAngle > 0)\r\n {\r\n endAngle = -PI2 + endAngle % PI2;\r\n }\r\n }\r\n else if (endAngle > PI2)\r\n {\r\n endAngle = PI2;\r\n }\r\n else if (endAngle < 0)\r\n {\r\n endAngle = PI2 + endAngle % PI2;\r\n }\r\n\r\n if (lastPath === null)\r\n {\r\n lastPath = new Path(x + Math.cos(startAngle) * radius, y + Math.sin(startAngle) * radius, lineWidth);\r\n path.push(lastPath);\r\n iteration += iterStep;\r\n }\r\n\r\n while (iteration < 1 + overshoot)\r\n {\r\n ta = endAngle * iteration + startAngle;\r\n tx = x + Math.cos(ta) * radius;\r\n ty = y + Math.sin(ta) * radius;\r\n\r\n lastPath.points.push(new Point(tx, ty, lineWidth));\r\n\r\n iteration += iterStep;\r\n }\r\n\r\n ta = endAngle + startAngle;\r\n tx = x + Math.cos(ta) * radius;\r\n ty = y + Math.sin(ta) * radius;\r\n\r\n lastPath.points.push(new Point(tx, ty, lineWidth));\r\n\r\n break;\r\n\r\n case Commands.FILL_RECT:\r\n pipeline.setTexture2D(currentTexture);\r\n pipeline.batchFillRect(\r\n commands[++cmdIndex],\r\n commands[++cmdIndex],\r\n commands[++cmdIndex],\r\n commands[++cmdIndex],\r\n currentMatrix,\r\n camMatrix\r\n );\r\n break;\r\n\r\n case Commands.FILL_TRIANGLE:\r\n pipeline.setTexture2D(currentTexture);\r\n pipeline.batchFillTriangle(\r\n commands[++cmdIndex],\r\n commands[++cmdIndex],\r\n commands[++cmdIndex],\r\n commands[++cmdIndex],\r\n commands[++cmdIndex],\r\n commands[++cmdIndex],\r\n currentMatrix,\r\n camMatrix\r\n );\r\n break;\r\n\r\n case Commands.STROKE_TRIANGLE:\r\n pipeline.setTexture2D(currentTexture);\r\n pipeline.batchStrokeTriangle(\r\n commands[++cmdIndex],\r\n commands[++cmdIndex],\r\n commands[++cmdIndex],\r\n commands[++cmdIndex],\r\n commands[++cmdIndex],\r\n commands[++cmdIndex],\r\n lineWidth,\r\n currentMatrix,\r\n camMatrix\r\n );\r\n break;\r\n\r\n case Commands.LINE_TO:\r\n if (lastPath !== null)\r\n {\r\n lastPath.points.push(new Point(commands[++cmdIndex], commands[++cmdIndex], lineWidth));\r\n }\r\n else\r\n {\r\n lastPath = new Path(commands[++cmdIndex], commands[++cmdIndex], lineWidth);\r\n path.push(lastPath);\r\n }\r\n break;\r\n\r\n case Commands.MOVE_TO:\r\n lastPath = new Path(commands[++cmdIndex], commands[++cmdIndex], lineWidth);\r\n path.push(lastPath);\r\n break;\r\n\r\n case Commands.SAVE:\r\n matrixStack.push(currentMatrix.copyToArray());\r\n break;\r\n\r\n case Commands.RESTORE:\r\n currentMatrix.copyFromArray(matrixStack.pop());\r\n break;\r\n\r\n case Commands.TRANSLATE:\r\n x = commands[++cmdIndex];\r\n y = commands[++cmdIndex];\r\n currentMatrix.translate(x, y);\r\n break;\r\n\r\n case Commands.SCALE:\r\n x = commands[++cmdIndex];\r\n y = commands[++cmdIndex];\r\n currentMatrix.scale(x, y);\r\n break;\r\n\r\n case Commands.ROTATE:\r\n currentMatrix.rotate(commands[++cmdIndex]);\r\n break;\r\n\r\n case Commands.SET_TEXTURE:\r\n var frame = commands[++cmdIndex];\r\n var mode = commands[++cmdIndex];\r\n\r\n pipeline.currentFrame = frame;\r\n pipeline.setTexture2D(frame.glTexture, 0);\r\n pipeline.tintEffect = mode;\r\n\r\n currentTexture = frame.glTexture;\r\n\r\n break;\r\n\r\n case Commands.CLEAR_TEXTURE:\r\n pipeline.currentFrame = renderer.blankTexture;\r\n pipeline.tintEffect = 2;\r\n currentTexture = renderer.blankTexture.glTexture;\r\n break;\r\n }\r\n }\r\n};\r\n\r\nmodule.exports = GraphicsWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncmFwaGljcy9HcmFwaGljc1dlYkdMUmVuZGVyZXIuanM/ZTk5MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLDhFQUFZO0FBQ25DLFlBQVksbUJBQU8sQ0FBQyxxRkFBNEI7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsNEJBQTRCO0FBQ3ZDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLDBCQUEwQiw0QkFBNEI7QUFDdEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1DQUFtQyx5QkFBeUI7QUFDNUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1DQUFtQyx5QkFBeUI7QUFDNUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncmFwaGljcy9HcmFwaGljc1dlYkdMUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDb21tYW5kcyA9IHJlcXVpcmUoJy4vQ29tbWFuZHMnKTtcclxudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXIvd2ViZ2wvVXRpbHMnKTtcclxuXHJcbi8vICBUT0RPOiBSZW1vdmUgdGhlIHVzZSBvZiB0aGlzXHJcbnZhciBQb2ludCA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aClcclxue1xyXG4gICAgdGhpcy54ID0geDtcclxuICAgIHRoaXMueSA9IHk7XHJcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XHJcbn07XHJcblxyXG4vLyAgVE9ETzogUmVtb3ZlIHRoZSB1c2Ugb2YgdGhpc1xyXG52YXIgUGF0aCA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aClcclxue1xyXG4gICAgdGhpcy5wb2ludHMgPSBbXTtcclxuICAgIHRoaXMucG9pbnRzTGVuZ3RoID0gMTtcclxuICAgIHRoaXMucG9pbnRzWzBdID0gbmV3IFBvaW50KHgsIHksIHdpZHRoKTtcclxufTtcclxuXHJcbnZhciBtYXRyaXhTdGFjayA9IFtdO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBXZWJHTCBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyYXBoaWNzI3JlbmRlcldlYkdMXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBXZWJHTCByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JhcGhpY3N9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBHcmFwaGljc1dlYkdMUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICBpZiAoc3JjLmNvbW1hbmRCdWZmZXIubGVuZ3RoID09PSAwKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgcGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lO1xyXG5cclxuICAgIHJlbmRlcmVyLnNldFBpcGVsaW5lKHBpcGVsaW5lLCBzcmMpO1xyXG5cclxuICAgIHZhciBjYW1NYXRyaXggPSBzcmMuX3RlbXBNYXRyaXgxO1xyXG4gICAgdmFyIGdyYXBoaWNzTWF0cml4ID0gc3JjLl90ZW1wTWF0cml4MjtcclxuICAgIHZhciBjdXJyZW50TWF0cml4ID0gc3JjLl90ZW1wTWF0cml4MztcclxuXHJcbiAgICBjdXJyZW50TWF0cml4LmxvYWRJZGVudGl0eSgpO1xyXG5cclxuICAgIGdyYXBoaWNzTWF0cml4LmFwcGx5SVRSUyhzcmMueCwgc3JjLnksIHNyYy5yb3RhdGlvbiwgc3JjLnNjYWxlWCwgc3JjLnNjYWxlWSk7XHJcblxyXG4gICAgY2FtTWF0cml4LmNvcHlGcm9tKGNhbWVyYS5tYXRyaXgpO1xyXG5cclxuICAgIGlmIChwYXJlbnRNYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIE11bHRpcGx5IHRoZSBjYW1lcmEgYnkgdGhlIHBhcmVudCBtYXRyaXhcclxuICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHlXaXRoT2Zmc2V0KHBhcmVudE1hdHJpeCwgLWNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3RvclgsIC1jYW1lcmEuc2Nyb2xsWSAqIHNyYy5zY3JvbGxGYWN0b3JZKTtcclxuXHJcbiAgICAgICAgLy8gIFVuZG8gdGhlIGNhbWVyYSBzY3JvbGxcclxuICAgICAgICBncmFwaGljc01hdHJpeC5lID0gc3JjLng7XHJcbiAgICAgICAgZ3JhcGhpY3NNYXRyaXguZiA9IHNyYy55O1xyXG5cclxuICAgICAgICAvLyAgTXVsdGlwbHkgYnkgdGhlIFNwcml0ZSBtYXRyaXgsIHN0b3JlIHJlc3VsdCBpbiBjYWxjTWF0cml4XHJcbiAgICAgICAgY2FtTWF0cml4Lm11bHRpcGx5KGdyYXBoaWNzTWF0cml4KTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBncmFwaGljc01hdHJpeC5lIC09IGNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3Rvclg7XHJcbiAgICAgICAgZ3JhcGhpY3NNYXRyaXguZiAtPSBjYW1lcmEuc2Nyb2xsWSAqIHNyYy5zY3JvbGxGYWN0b3JZO1xyXG5cclxuICAgICAgICAvLyAgTXVsdGlwbHkgYnkgdGhlIFNwcml0ZSBtYXRyaXgsIHN0b3JlIHJlc3VsdCBpbiBjYWxjTWF0cml4XHJcbiAgICAgICAgY2FtTWF0cml4Lm11bHRpcGx5KGdyYXBoaWNzTWF0cml4KTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgY29tbWFuZHMgPSBzcmMuY29tbWFuZEJ1ZmZlcjtcclxuICAgIHZhciBhbHBoYSA9IGNhbWVyYS5hbHBoYSAqIHNyYy5hbHBoYTtcclxuXHJcbiAgICB2YXIgbGluZVdpZHRoID0gMTtcclxuICAgIHZhciBmaWxsVGludCA9IHBpcGVsaW5lLmZpbGxUaW50O1xyXG4gICAgdmFyIHN0cm9rZVRpbnQgPSBwaXBlbGluZS5zdHJva2VUaW50O1xyXG5cclxuICAgIHZhciB0eCA9IDA7XHJcbiAgICB2YXIgdHkgPSAwO1xyXG4gICAgdmFyIHRhID0gMDtcclxuICAgIHZhciBpdGVyU3RlcCA9IDAuMDE7XHJcbiAgICB2YXIgUEkyID0gTWF0aC5QSSAqIDI7XHJcblxyXG4gICAgdmFyIGNtZDtcclxuXHJcbiAgICB2YXIgcGF0aCA9IFtdO1xyXG4gICAgdmFyIHBhdGhJbmRleCA9IDA7XHJcbiAgICB2YXIgcGF0aE9wZW4gPSBmYWxzZTtcclxuICAgIHZhciBsYXN0UGF0aCA9IG51bGw7XHJcblxyXG4gICAgdmFyIGdldFRpbnQgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYUFuZFN3YXA7XHJcblxyXG4gICAgdmFyIGN1cnJlbnRUZXh0dXJlID0gcmVuZGVyZXIuYmxhbmtUZXh0dXJlLmdsVGV4dHVyZTtcclxuXHJcbiAgICBmb3IgKHZhciBjbWRJbmRleCA9IDA7IGNtZEluZGV4IDwgY29tbWFuZHMubGVuZ3RoOyBjbWRJbmRleCsrKVxyXG4gICAge1xyXG4gICAgICAgIGNtZCA9IGNvbW1hbmRzW2NtZEluZGV4XTtcclxuXHJcbiAgICAgICAgc3dpdGNoIChjbWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLkJFR0lOX1BBVEg6XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aC5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgICAgbGFzdFBhdGggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgcGF0aE9wZW4gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLkNMT1NFX1BBVEg6XHJcblxyXG4gICAgICAgICAgICAgICAgcGF0aE9wZW4gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobGFzdFBhdGggJiYgbGFzdFBhdGgucG9pbnRzLmxlbmd0aClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBsYXN0UGF0aC5wb2ludHMucHVzaChsYXN0UGF0aC5wb2ludHNbMF0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLkZJTExfUEFUSDpcclxuICAgICAgICAgICAgICAgIGZvciAocGF0aEluZGV4ID0gMDsgcGF0aEluZGV4IDwgcGF0aC5sZW5ndGg7IHBhdGhJbmRleCsrKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lLnNldFRleHR1cmUyRChjdXJyZW50VGV4dHVyZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lLmJhdGNoRmlsbFBhdGgoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhbcGF0aEluZGV4XS5wb2ludHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNYXRyaXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbU1hdHJpeFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgQ29tbWFuZHMuU1RST0tFX1BBVEg6XHJcbiAgICAgICAgICAgICAgICBmb3IgKHBhdGhJbmRleCA9IDA7IHBhdGhJbmRleCA8IHBhdGgubGVuZ3RoOyBwYXRoSW5kZXgrKylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwaXBlbGluZS5zZXRUZXh0dXJlMkQoY3VycmVudFRleHR1cmUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBwaXBlbGluZS5iYXRjaFN0cm9rZVBhdGgoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhbcGF0aEluZGV4XS5wb2ludHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aE9wZW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNYXRyaXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbU1hdHJpeFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgQ29tbWFuZHMuTElORV9TVFlMRTpcclxuICAgICAgICAgICAgICAgIGxpbmVXaWR0aCA9IGNvbW1hbmRzWysrY21kSW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0cm9rZUNvbG9yID0gY29tbWFuZHNbKytjbWRJbmRleF07XHJcbiAgICAgICAgICAgICAgICB2YXIgc3Ryb2tlQWxwaGEgPSBjb21tYW5kc1srK2NtZEluZGV4XSAqIGFscGhhO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0cm9rZVRpbnRDb2xvciA9IGdldFRpbnQoc3Ryb2tlQ29sb3IsIHN0cm9rZUFscGhhKTtcclxuICAgICAgICAgICAgICAgIHN0cm9rZVRpbnQuVEwgPSBzdHJva2VUaW50Q29sb3I7XHJcbiAgICAgICAgICAgICAgICBzdHJva2VUaW50LlRSID0gc3Ryb2tlVGludENvbG9yO1xyXG4gICAgICAgICAgICAgICAgc3Ryb2tlVGludC5CTCA9IHN0cm9rZVRpbnRDb2xvcjtcclxuICAgICAgICAgICAgICAgIHN0cm9rZVRpbnQuQlIgPSBzdHJva2VUaW50Q29sb3I7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgQ29tbWFuZHMuRklMTF9TVFlMRTpcclxuICAgICAgICAgICAgICAgIHZhciBmaWxsQ29sb3IgPSBjb21tYW5kc1srK2NtZEluZGV4XTtcclxuICAgICAgICAgICAgICAgIHZhciBmaWxsQWxwaGEgPSBjb21tYW5kc1srK2NtZEluZGV4XSAqIGFscGhhO1xyXG4gICAgICAgICAgICAgICAgdmFyIGZpbGxUaW50Q29sb3IgPSBnZXRUaW50KGZpbGxDb2xvciwgZmlsbEFscGhhKTtcclxuICAgICAgICAgICAgICAgIGZpbGxUaW50LlRMID0gZmlsbFRpbnRDb2xvcjtcclxuICAgICAgICAgICAgICAgIGZpbGxUaW50LlRSID0gZmlsbFRpbnRDb2xvcjtcclxuICAgICAgICAgICAgICAgIGZpbGxUaW50LkJMID0gZmlsbFRpbnRDb2xvcjtcclxuICAgICAgICAgICAgICAgIGZpbGxUaW50LkJSID0gZmlsbFRpbnRDb2xvcjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5HUkFESUVOVF9GSUxMX1NUWUxFOlxyXG4gICAgICAgICAgICAgICAgdmFyIGdyYWRpZW50RmlsbEFscGhhID0gY29tbWFuZHNbKytjbWRJbmRleF0gKiBhbHBoYTtcclxuICAgICAgICAgICAgICAgIGZpbGxUaW50LlRMID0gZ2V0VGludChjb21tYW5kc1srK2NtZEluZGV4XSwgZ3JhZGllbnRGaWxsQWxwaGEpO1xyXG4gICAgICAgICAgICAgICAgZmlsbFRpbnQuVFIgPSBnZXRUaW50KGNvbW1hbmRzWysrY21kSW5kZXhdLCBncmFkaWVudEZpbGxBbHBoYSk7XHJcbiAgICAgICAgICAgICAgICBmaWxsVGludC5CTCA9IGdldFRpbnQoY29tbWFuZHNbKytjbWRJbmRleF0sIGdyYWRpZW50RmlsbEFscGhhKTtcclxuICAgICAgICAgICAgICAgIGZpbGxUaW50LkJSID0gZ2V0VGludChjb21tYW5kc1srK2NtZEluZGV4XSwgZ3JhZGllbnRGaWxsQWxwaGEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLkdSQURJRU5UX0xJTkVfU1RZTEU6XHJcbiAgICAgICAgICAgICAgICBsaW5lV2lkdGggPSBjb21tYW5kc1srK2NtZEluZGV4XTtcclxuICAgICAgICAgICAgICAgIHZhciBncmFkaWVudExpbmVBbHBoYSA9IGNvbW1hbmRzWysrY21kSW5kZXhdICogYWxwaGE7XHJcbiAgICAgICAgICAgICAgICBzdHJva2VUaW50LlRMID0gZ2V0VGludChjb21tYW5kc1srK2NtZEluZGV4XSwgZ3JhZGllbnRMaW5lQWxwaGEpO1xyXG4gICAgICAgICAgICAgICAgc3Ryb2tlVGludC5UUiA9IGdldFRpbnQoY29tbWFuZHNbKytjbWRJbmRleF0sIGdyYWRpZW50TGluZUFscGhhKTtcclxuICAgICAgICAgICAgICAgIHN0cm9rZVRpbnQuQkwgPSBnZXRUaW50KGNvbW1hbmRzWysrY21kSW5kZXhdLCBncmFkaWVudExpbmVBbHBoYSk7XHJcbiAgICAgICAgICAgICAgICBzdHJva2VUaW50LkJSID0gZ2V0VGludChjb21tYW5kc1srK2NtZEluZGV4XSwgZ3JhZGllbnRMaW5lQWxwaGEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLkFSQzpcclxuICAgICAgICAgICAgICAgIHZhciBpdGVyYXRpb24gPSAwO1xyXG4gICAgICAgICAgICAgICAgdmFyIHggPSBjb21tYW5kc1srK2NtZEluZGV4XTtcclxuICAgICAgICAgICAgICAgIHZhciB5ID0gY29tbWFuZHNbKytjbWRJbmRleF07XHJcbiAgICAgICAgICAgICAgICB2YXIgcmFkaXVzID0gY29tbWFuZHNbKytjbWRJbmRleF07XHJcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnRBbmdsZSA9IGNvbW1hbmRzWysrY21kSW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGVuZEFuZ2xlID0gY29tbWFuZHNbKytjbWRJbmRleF07XHJcbiAgICAgICAgICAgICAgICB2YXIgYW50aWNsb2Nrd2lzZSA9IGNvbW1hbmRzWysrY21kSW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgdmFyIG92ZXJzaG9vdCA9IGNvbW1hbmRzWysrY21kSW5kZXhdO1xyXG5cclxuICAgICAgICAgICAgICAgIGVuZEFuZ2xlIC09IHN0YXJ0QW5nbGU7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGFudGljbG9ja3dpc2UpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVuZEFuZ2xlIDwgLVBJMilcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZEFuZ2xlID0gLVBJMjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZW5kQW5nbGUgPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kQW5nbGUgPSAtUEkyICsgZW5kQW5nbGUgJSBQSTI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZW5kQW5nbGUgPiBQSTIpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kQW5nbGUgPSBQSTI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChlbmRBbmdsZSA8IDApXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kQW5nbGUgPSBQSTIgKyBlbmRBbmdsZSAlIFBJMjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobGFzdFBhdGggPT09IG51bGwpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdFBhdGggPSBuZXcgUGF0aCh4ICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkgKiByYWRpdXMsIHkgKyBNYXRoLnNpbihzdGFydEFuZ2xlKSAqIHJhZGl1cywgbGluZVdpZHRoKTtcclxuICAgICAgICAgICAgICAgICAgICBwYXRoLnB1c2gobGFzdFBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdGlvbiArPSBpdGVyU3RlcDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoaXRlcmF0aW9uIDwgMSArIG92ZXJzaG9vdClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0YSA9IGVuZEFuZ2xlICogaXRlcmF0aW9uICsgc3RhcnRBbmdsZTtcclxuICAgICAgICAgICAgICAgICAgICB0eCA9IHggKyBNYXRoLmNvcyh0YSkgKiByYWRpdXM7XHJcbiAgICAgICAgICAgICAgICAgICAgdHkgPSB5ICsgTWF0aC5zaW4odGEpICogcmFkaXVzO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsYXN0UGF0aC5wb2ludHMucHVzaChuZXcgUG9pbnQodHgsIHR5LCBsaW5lV2lkdGgpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0aW9uICs9IGl0ZXJTdGVwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRhID0gZW5kQW5nbGUgKyBzdGFydEFuZ2xlO1xyXG4gICAgICAgICAgICAgICAgdHggPSB4ICsgTWF0aC5jb3ModGEpICogcmFkaXVzO1xyXG4gICAgICAgICAgICAgICAgdHkgPSB5ICsgTWF0aC5zaW4odGEpICogcmFkaXVzO1xyXG5cclxuICAgICAgICAgICAgICAgIGxhc3RQYXRoLnBvaW50cy5wdXNoKG5ldyBQb2ludCh0eCwgdHksIGxpbmVXaWR0aCkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5GSUxMX1JFQ1Q6XHJcbiAgICAgICAgICAgICAgICBwaXBlbGluZS5zZXRUZXh0dXJlMkQoY3VycmVudFRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgcGlwZWxpbmUuYmF0Y2hGaWxsUmVjdChcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kc1srK2NtZEluZGV4XSxcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kc1srK2NtZEluZGV4XSxcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kc1srK2NtZEluZGV4XSxcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kc1srK2NtZEluZGV4XSxcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TWF0cml4LFxyXG4gICAgICAgICAgICAgICAgICAgIGNhbU1hdHJpeFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5GSUxMX1RSSUFOR0xFOlxyXG4gICAgICAgICAgICAgICAgcGlwZWxpbmUuc2V0VGV4dHVyZTJEKGN1cnJlbnRUZXh0dXJlKTtcclxuICAgICAgICAgICAgICAgIHBpcGVsaW5lLmJhdGNoRmlsbFRyaWFuZ2xlKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzWysrY21kSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzWysrY21kSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzWysrY21kSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzWysrY21kSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzWysrY21kSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzWysrY21kSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNYXRyaXgsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FtTWF0cml4XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLlNUUk9LRV9UUklBTkdMRTpcclxuICAgICAgICAgICAgICAgIHBpcGVsaW5lLnNldFRleHR1cmUyRChjdXJyZW50VGV4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICBwaXBlbGluZS5iYXRjaFN0cm9rZVRyaWFuZ2xlKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzWysrY21kSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzWysrY21kSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzWysrY21kSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzWysrY21kSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzWysrY21kSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzWysrY21kSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGxpbmVXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TWF0cml4LFxyXG4gICAgICAgICAgICAgICAgICAgIGNhbU1hdHJpeFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5MSU5FX1RPOlxyXG4gICAgICAgICAgICAgICAgaWYgKGxhc3RQYXRoICE9PSBudWxsKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RQYXRoLnBvaW50cy5wdXNoKG5ldyBQb2ludChjb21tYW5kc1srK2NtZEluZGV4XSwgY29tbWFuZHNbKytjbWRJbmRleF0sIGxpbmVXaWR0aCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RQYXRoID0gbmV3IFBhdGgoY29tbWFuZHNbKytjbWRJbmRleF0sIGNvbW1hbmRzWysrY21kSW5kZXhdLCBsaW5lV2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhdGgucHVzaChsYXN0UGF0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgQ29tbWFuZHMuTU9WRV9UTzpcclxuICAgICAgICAgICAgICAgIGxhc3RQYXRoID0gbmV3IFBhdGgoY29tbWFuZHNbKytjbWRJbmRleF0sIGNvbW1hbmRzWysrY21kSW5kZXhdLCBsaW5lV2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgcGF0aC5wdXNoKGxhc3RQYXRoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5TQVZFOlxyXG4gICAgICAgICAgICAgICAgbWF0cml4U3RhY2sucHVzaChjdXJyZW50TWF0cml4LmNvcHlUb0FycmF5KCkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLlJFU1RPUkU6XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50TWF0cml4LmNvcHlGcm9tQXJyYXkobWF0cml4U3RhY2sucG9wKCkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLlRSQU5TTEFURTpcclxuICAgICAgICAgICAgICAgIHggPSBjb21tYW5kc1srK2NtZEluZGV4XTtcclxuICAgICAgICAgICAgICAgIHkgPSBjb21tYW5kc1srK2NtZEluZGV4XTtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRNYXRyaXgudHJhbnNsYXRlKHgsIHkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENvbW1hbmRzLlNDQUxFOlxyXG4gICAgICAgICAgICAgICAgeCA9IGNvbW1hbmRzWysrY21kSW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgeSA9IGNvbW1hbmRzWysrY21kSW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgY3VycmVudE1hdHJpeC5zY2FsZSh4LCB5KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5ST1RBVEU6XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50TWF0cml4LnJvdGF0ZShjb21tYW5kc1srK2NtZEluZGV4XSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgQ29tbWFuZHMuU0VUX1RFWFRVUkU6XHJcbiAgICAgICAgICAgICAgICB2YXIgZnJhbWUgPSBjb21tYW5kc1srK2NtZEluZGV4XTtcclxuICAgICAgICAgICAgICAgIHZhciBtb2RlID0gY29tbWFuZHNbKytjbWRJbmRleF07XHJcblxyXG4gICAgICAgICAgICAgICAgcGlwZWxpbmUuY3VycmVudEZyYW1lID0gZnJhbWU7XHJcbiAgICAgICAgICAgICAgICBwaXBlbGluZS5zZXRUZXh0dXJlMkQoZnJhbWUuZ2xUZXh0dXJlLCAwKTtcclxuICAgICAgICAgICAgICAgIHBpcGVsaW5lLnRpbnRFZmZlY3QgPSBtb2RlO1xyXG5cclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0dXJlID0gZnJhbWUuZ2xUZXh0dXJlO1xyXG5cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBDb21tYW5kcy5DTEVBUl9URVhUVVJFOlxyXG4gICAgICAgICAgICAgICAgcGlwZWxpbmUuY3VycmVudEZyYW1lID0gcmVuZGVyZXIuYmxhbmtUZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgcGlwZWxpbmUudGludEVmZmVjdCA9IDI7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dHVyZSA9IHJlbmRlcmVyLmJsYW5rVGV4dHVyZS5nbFRleHR1cmU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzV2ViR0xSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/graphics/GraphicsWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/group/Group.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/group/Group.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Actions = __webpack_require__(/*! ../../actions/ */ \"./node_modules/phaser/src/actions/index.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/gameobjects/events/index.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\nvar Range = __webpack_require__(/*! ../../utils/array/Range */ \"./node_modules/phaser/src/utils/array/Range.js\");\r\nvar Set = __webpack_require__(/*! ../../structs/Set */ \"./node_modules/phaser/src/structs/Set.js\");\r\nvar Sprite = __webpack_require__(/*! ../sprite/Sprite */ \"./node_modules/phaser/src/gameobjects/sprite/Sprite.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Group is a way for you to create, manipulate, or recycle similar Game Objects.\r\n *\r\n * Group membership is non-exclusive. A Game Object can belong to several groups, one group, or none.\r\n *\r\n * Groups themselves aren't displayable, and can't be positioned, rotated, scaled, or hidden.\r\n *\r\n * @class Group\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n * @param {Phaser.Scene} scene - The scene this group belongs to.\r\n * @param {(Phaser.GameObjects.GameObject[]|Phaser.Types.GameObjects.Group.GroupConfig|Phaser.Types.GameObjects.Group.GroupCreateConfig)} [children] - Game Objects to add to this group; or the `config` argument.\r\n * @param {Phaser.Types.GameObjects.Group.GroupConfig|Phaser.Types.GameObjects.Group.GroupCreateConfig} [config] - Settings for this group. If `key` is set, Phaser.GameObjects.Group#createMultiple is also called with these settings.\r\n *\r\n * @see Phaser.Physics.Arcade.Group\r\n * @see Phaser.Physics.Arcade.StaticGroup\r\n */\r\nvar Group = new Class({\r\n\r\n initialize:\r\n\r\n function Group (scene, children, config)\r\n {\r\n // They can pass in any of the following as the first argument:\r\n\r\n // 1) A single child\r\n // 2) An array of children\r\n // 3) A config object\r\n // 4) An array of config objects\r\n\r\n // Or they can pass in a child, or array of children AND a config object\r\n\r\n if (config)\r\n {\r\n // config has been set, are the children an array?\r\n\r\n if (children && !Array.isArray(children))\r\n {\r\n children = [ children ];\r\n }\r\n }\r\n else if (Array.isArray(children))\r\n {\r\n // No config, so let's check the children argument\r\n\r\n if (IsPlainObject(children[0]))\r\n {\r\n // It's an array of plain config objects\r\n config = children;\r\n children = null;\r\n }\r\n }\r\n else if (IsPlainObject(children))\r\n {\r\n // Children isn't an array. Is it a config object though?\r\n config = children;\r\n children = null;\r\n }\r\n\r\n /**\r\n * This scene this group belongs to.\r\n *\r\n * @name Phaser.GameObjects.Group#scene\r\n * @type {Phaser.Scene}\r\n * @since 3.0.0\r\n */\r\n this.scene = scene;\r\n\r\n /**\r\n * Members of this group.\r\n *\r\n * @name Phaser.GameObjects.Group#children\r\n * @type {Phaser.Structs.Set.<Phaser.GameObjects.GameObject>}\r\n * @since 3.0.0\r\n */\r\n this.children = new Set(children);\r\n\r\n /**\r\n * A flag identifying this object as a group.\r\n *\r\n * @name Phaser.GameObjects.Group#isParent\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.isParent = true;\r\n\r\n /**\r\n * A textual representation of this Game Object.\r\n * Used internally by Phaser but is available for your own custom classes to populate.\r\n *\r\n * @name Phaser.GameObjects.Group#type\r\n * @type {string}\r\n * @default 'Group'\r\n * @since 3.21.0\r\n */\r\n this.type = 'Group';\r\n\r\n /**\r\n * The class to create new group members from.\r\n *\r\n * @name Phaser.GameObjects.Group#classType\r\n * @type {Function}\r\n * @since 3.0.0\r\n * @default Phaser.GameObjects.Sprite\r\n */\r\n this.classType = GetFastValue(config, 'classType', Sprite);\r\n\r\n /**\r\n * The name of this group.\r\n * Empty by default and never populated by Phaser, this is left for developers to use.\r\n *\r\n * @name Phaser.GameObjects.Group#name\r\n * @type {string}\r\n * @default ''\r\n * @since 3.18.0\r\n */\r\n this.name = GetFastValue(config, 'name', '');\r\n\r\n /**\r\n * Whether this group runs its {@link Phaser.GameObjects.Group#preUpdate} method\r\n * (which may update any members).\r\n *\r\n * @name Phaser.GameObjects.Group#active\r\n * @type {boolean}\r\n * @since 3.0.0\r\n */\r\n this.active = GetFastValue(config, 'active', true);\r\n\r\n /**\r\n * The maximum size of this group, if used as a pool. -1 is no limit.\r\n *\r\n * @name Phaser.GameObjects.Group#maxSize\r\n * @type {integer}\r\n * @since 3.0.0\r\n * @default -1\r\n */\r\n this.maxSize = GetFastValue(config, 'maxSize', -1);\r\n\r\n /**\r\n * A default texture key to use when creating new group members.\r\n *\r\n * This is used in {@link Phaser.GameObjects.Group#create}\r\n * but not in {@link Phaser.GameObjects.Group#createMultiple}.\r\n *\r\n * @name Phaser.GameObjects.Group#defaultKey\r\n * @type {string}\r\n * @since 3.0.0\r\n */\r\n this.defaultKey = GetFastValue(config, 'defaultKey', null);\r\n\r\n /**\r\n * A default texture frame to use when creating new group members.\r\n *\r\n * @name Phaser.GameObjects.Group#defaultFrame\r\n * @type {(string|integer)}\r\n * @since 3.0.0\r\n */\r\n this.defaultFrame = GetFastValue(config, 'defaultFrame', null);\r\n\r\n /**\r\n * Whether to call the update method of any members.\r\n *\r\n * @name Phaser.GameObjects.Group#runChildUpdate\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Group#preUpdate\r\n */\r\n this.runChildUpdate = GetFastValue(config, 'runChildUpdate', false);\r\n\r\n /**\r\n * A function to be called when adding or creating group members.\r\n *\r\n * @name Phaser.GameObjects.Group#createCallback\r\n * @type {?Phaser.Types.GameObjects.Group.GroupCallback}\r\n * @since 3.0.0\r\n */\r\n this.createCallback = GetFastValue(config, 'createCallback', null);\r\n\r\n /**\r\n * A function to be called when removing group members.\r\n *\r\n * @name Phaser.GameObjects.Group#removeCallback\r\n * @type {?Phaser.Types.GameObjects.Group.GroupCallback}\r\n * @since 3.0.0\r\n */\r\n this.removeCallback = GetFastValue(config, 'removeCallback', null);\r\n\r\n /**\r\n * A function to be called when creating several group members at once.\r\n *\r\n * @name Phaser.GameObjects.Group#createMultipleCallback\r\n * @type {?Phaser.Types.GameObjects.Group.GroupMultipleCreateCallback}\r\n * @since 3.0.0\r\n */\r\n this.createMultipleCallback = GetFastValue(config, 'createMultipleCallback', null);\r\n\r\n if (config)\r\n {\r\n this.createMultiple(config);\r\n }\r\n },\r\n\r\n /**\r\n * Creates a new Game Object and adds it to this group, unless the group {@link Phaser.GameObjects.Group#isFull is full}.\r\n *\r\n * Calls {@link Phaser.GameObjects.Group#createCallback}.\r\n *\r\n * @method Phaser.GameObjects.Group#create\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of the new Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of the new Game Object in the world.\r\n * @param {string} [key=defaultKey] - The texture key of the new Game Object.\r\n * @param {(string|integer)} [frame=defaultFrame] - The texture frame of the new Game Object.\r\n * @param {boolean} [visible=true] - The {@link Phaser.GameObjects.Components.Visible#visible} state of the new Game Object.\r\n * @param {boolean} [active=true] - The {@link Phaser.GameObjects.GameObject#active} state of the new Game Object.\r\n *\r\n * @return {any} The new Game Object (usually a Sprite, etc.).\r\n */\r\n create: function (x, y, key, frame, visible, active)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n if (key === undefined) { key = this.defaultKey; }\r\n if (frame === undefined) { frame = this.defaultFrame; }\r\n if (visible === undefined) { visible = true; }\r\n if (active === undefined) { active = true; }\r\n\r\n // Pool?\r\n if (this.isFull())\r\n {\r\n return null;\r\n }\r\n\r\n var child = new this.classType(this.scene, x, y, key, frame);\r\n\r\n this.scene.sys.displayList.add(child);\r\n\r\n if (child.preUpdate)\r\n {\r\n this.scene.sys.updateList.add(child);\r\n }\r\n\r\n child.visible = visible;\r\n child.setActive(active);\r\n\r\n this.add(child);\r\n\r\n return child;\r\n },\r\n\r\n /**\r\n * Creates several Game Objects and adds them to this group.\r\n *\r\n * If the group becomes {@link Phaser.GameObjects.Group#isFull}, no further Game Objects are created.\r\n *\r\n * Calls {@link Phaser.GameObjects.Group#createMultipleCallback} and {@link Phaser.GameObjects.Group#createCallback}.\r\n *\r\n * @method Phaser.GameObjects.Group#createMultiple\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Group.GroupCreateConfig|Phaser.Types.GameObjects.Group.GroupCreateConfig[]} config - Creation settings. This can be a single configuration object or an array of such objects, which will be applied in turn.\r\n *\r\n * @return {any[]} The newly created Game Objects.\r\n */\r\n createMultiple: function (config)\r\n {\r\n if (this.isFull())\r\n {\r\n return [];\r\n }\r\n\r\n if (!Array.isArray(config))\r\n {\r\n config = [ config ];\r\n }\r\n\r\n var output = [];\r\n\r\n if (config[0].key)\r\n {\r\n for (var i = 0; i < config.length; i++)\r\n {\r\n var entries = this.createFromConfig(config[i]);\r\n\r\n output = output.concat(entries);\r\n }\r\n }\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * A helper for {@link Phaser.GameObjects.Group#createMultiple}.\r\n *\r\n * @method Phaser.GameObjects.Group#createFromConfig\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Group.GroupCreateConfig} options - Creation settings.\r\n *\r\n * @return {any[]} The newly created Game Objects.\r\n */\r\n createFromConfig: function (options)\r\n {\r\n if (this.isFull())\r\n {\r\n return [];\r\n }\r\n\r\n this.classType = GetFastValue(options, 'classType', this.classType);\r\n\r\n var key = GetFastValue(options, 'key', undefined);\r\n var frame = GetFastValue(options, 'frame', null);\r\n var visible = GetFastValue(options, 'visible', true);\r\n var active = GetFastValue(options, 'active', true);\r\n\r\n var entries = [];\r\n\r\n // Can't do anything without at least a key\r\n if (key === undefined)\r\n {\r\n return entries;\r\n }\r\n else\r\n {\r\n if (!Array.isArray(key))\r\n {\r\n key = [ key ];\r\n }\r\n\r\n if (!Array.isArray(frame))\r\n {\r\n frame = [ frame ];\r\n }\r\n }\r\n\r\n // Build an array of key frame pairs to loop through\r\n\r\n var repeat = GetFastValue(options, 'repeat', 0);\r\n var randomKey = GetFastValue(options, 'randomKey', false);\r\n var randomFrame = GetFastValue(options, 'randomFrame', false);\r\n var yoyo = GetFastValue(options, 'yoyo', false);\r\n var quantity = GetFastValue(options, 'quantity', false);\r\n var frameQuantity = GetFastValue(options, 'frameQuantity', 1);\r\n var max = GetFastValue(options, 'max', 0);\r\n\r\n // If a quantity value is set we use that to override the frameQuantity\r\n\r\n var range = Range(key, frame, {\r\n max: max,\r\n qty: (quantity) ? quantity : frameQuantity,\r\n random: randomKey,\r\n randomB: randomFrame,\r\n repeat: repeat,\r\n yoyo: yoyo\r\n });\r\n\r\n if (options.createCallback)\r\n {\r\n this.createCallback = options.createCallback;\r\n }\r\n\r\n if (options.removeCallback)\r\n {\r\n this.removeCallback = options.removeCallback;\r\n }\r\n\r\n for (var c = 0; c < range.length; c++)\r\n {\r\n var created = this.create(0, 0, range[c].a, range[c].b, visible, active);\r\n\r\n if (!created)\r\n {\r\n break;\r\n }\r\n\r\n entries.push(created);\r\n }\r\n\r\n // Post-creation options (applied only to those items created in this call):\r\n\r\n var x = GetValue(options, 'setXY.x', 0);\r\n var y = GetValue(options, 'setXY.y', 0);\r\n var stepX = GetValue(options, 'setXY.stepX', 0);\r\n var stepY = GetValue(options, 'setXY.stepY', 0);\r\n\r\n Actions.SetXY(entries, x, y, stepX, stepY);\r\n\r\n var rotation = GetValue(options, 'setRotation.value', 0);\r\n var stepRotation = GetValue(options, 'setRotation.step', 0);\r\n\r\n Actions.SetRotation(entries, rotation, stepRotation);\r\n\r\n var scaleX = GetValue(options, 'setScale.x', 1);\r\n var scaleY = GetValue(options, 'setScale.y', scaleX);\r\n var stepScaleX = GetValue(options, 'setScale.stepX', 0);\r\n var stepScaleY = GetValue(options, 'setScale.stepY', 0);\r\n\r\n Actions.SetScale(entries, scaleX, scaleY, stepScaleX, stepScaleY);\r\n\r\n var alpha = GetValue(options, 'setAlpha.value', 1);\r\n var stepAlpha = GetValue(options, 'setAlpha.step', 0);\r\n\r\n Actions.SetAlpha(entries, alpha, stepAlpha);\r\n\r\n var depth = GetValue(options, 'setDepth.value', 0);\r\n var stepDepth = GetValue(options, 'setDepth.step', 0);\r\n\r\n Actions.SetDepth(entries, depth, stepDepth);\r\n\r\n var scrollFactorX = GetValue(options, 'setScrollFactor.x', 1);\r\n var scrollFactorY = GetValue(options, 'setScrollFactor.y', scrollFactorX);\r\n var stepScrollFactorX = GetValue(options, 'setScrollFactor.stepX', 0);\r\n var stepScrollFactorY = GetValue(options, 'setScrollFactor.stepY', 0);\r\n\r\n Actions.SetScrollFactor(entries, scrollFactorX, scrollFactorY, stepScrollFactorX, stepScrollFactorY);\r\n\r\n var hitArea = GetFastValue(options, 'hitArea', null);\r\n var hitAreaCallback = GetFastValue(options, 'hitAreaCallback', null);\r\n\r\n if (hitArea)\r\n {\r\n Actions.SetHitArea(entries, hitArea, hitAreaCallback);\r\n }\r\n\r\n var grid = GetFastValue(options, 'gridAlign', false);\r\n\r\n if (grid)\r\n {\r\n Actions.GridAlign(entries, grid);\r\n }\r\n\r\n if (this.createMultipleCallback)\r\n {\r\n this.createMultipleCallback.call(this, entries);\r\n }\r\n\r\n return entries;\r\n },\r\n\r\n /**\r\n * Updates any group members, if {@link Phaser.GameObjects.Group#runChildUpdate} is enabled.\r\n *\r\n * @method Phaser.GameObjects.Group#preUpdate\r\n * @since 3.0.0\r\n *\r\n * @param {number} time - The current timestamp.\r\n * @param {number} delta - The delta time elapsed since the last frame.\r\n */\r\n preUpdate: function (time, delta)\r\n {\r\n if (!this.runChildUpdate || this.children.size === 0)\r\n {\r\n return;\r\n }\r\n\r\n // Because a Group child may mess with the length of the Group during its update\r\n var temp = this.children.entries.slice();\r\n\r\n for (var i = 0; i < temp.length; i++)\r\n {\r\n var item = temp[i];\r\n\r\n if (item.active)\r\n {\r\n item.update(time, delta);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Adds a Game Object to this group.\r\n *\r\n * Calls {@link Phaser.GameObjects.Group#createCallback}.\r\n *\r\n * @method Phaser.GameObjects.Group#add\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} child - The Game Object to add.\r\n * @param {boolean} [addToScene=false] - Also add the Game Object to the scene.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n add: function (child, addToScene)\r\n {\r\n if (addToScene === undefined) { addToScene = false; }\r\n\r\n if (this.isFull())\r\n {\r\n return this;\r\n }\r\n\r\n this.children.set(child);\r\n\r\n if (this.createCallback)\r\n {\r\n this.createCallback.call(this, child);\r\n }\r\n\r\n if (addToScene)\r\n {\r\n this.scene.sys.displayList.add(child);\r\n\r\n if (child.preUpdate)\r\n {\r\n this.scene.sys.updateList.add(child);\r\n }\r\n }\r\n\r\n child.on(Events.DESTROY, this.remove, this);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Adds several Game Objects to this group.\r\n *\r\n * Calls {@link Phaser.GameObjects.Group#createCallback}.\r\n *\r\n * @method Phaser.GameObjects.Group#addMultiple\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject[]} children - The Game Objects to add.\r\n * @param {boolean} [addToScene=false] - Also add the Game Objects to the scene.\r\n *\r\n * @return {Phaser.GameObjects.Group} This group.\r\n */\r\n addMultiple: function (children, addToScene)\r\n {\r\n if (addToScene === undefined) { addToScene = false; }\r\n\r\n if (Array.isArray(children))\r\n {\r\n for (var i = 0; i < children.length; i++)\r\n {\r\n this.add(children[i], addToScene);\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Removes a member of this Group and optionally removes it from the Scene and / or destroys it.\r\n *\r\n * Calls {@link Phaser.GameObjects.Group#removeCallback}.\r\n *\r\n * @method Phaser.GameObjects.Group#remove\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} child - The Game Object to remove.\r\n * @param {boolean} [removeFromScene=false] - Optionally remove the Group member from the Scene it belongs to.\r\n * @param {boolean} [destroyChild=false] - Optionally call destroy on the removed Group member.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n remove: function (child, removeFromScene, destroyChild)\r\n {\r\n if (removeFromScene === undefined) { removeFromScene = false; }\r\n if (destroyChild === undefined) { destroyChild = false; }\r\n\r\n if (!this.children.contains(child))\r\n {\r\n return this;\r\n }\r\n\r\n this.children.delete(child);\r\n\r\n if (this.removeCallback)\r\n {\r\n this.removeCallback.call(this, child);\r\n }\r\n\r\n child.off(Events.DESTROY, this.remove, this);\r\n\r\n if (destroyChild)\r\n {\r\n child.destroy();\r\n }\r\n else if (removeFromScene)\r\n {\r\n child.scene.sys.displayList.remove(child);\r\n\r\n if (child.preUpdate)\r\n {\r\n child.scene.sys.updateList.remove(child);\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Removes all members of this Group and optionally removes them from the Scene and / or destroys them.\r\n *\r\n * Does not call {@link Phaser.GameObjects.Group#removeCallback}.\r\n *\r\n * @method Phaser.GameObjects.Group#clear\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} [removeFromScene=false] - Optionally remove each Group member from the Scene.\r\n * @param {boolean} [destroyChild=false] - Optionally call destroy on the removed Group members.\r\n *\r\n * @return {Phaser.GameObjects.Group} This group.\r\n */\r\n clear: function (removeFromScene, destroyChild)\r\n {\r\n if (removeFromScene === undefined) { removeFromScene = false; }\r\n if (destroyChild === undefined) { destroyChild = false; }\r\n\r\n var children = this.children;\r\n\r\n for (var i = 0; i < children.size; i++)\r\n {\r\n var gameObject = children.entries[i];\r\n\r\n gameObject.off(Events.DESTROY, this.remove, this);\r\n\r\n if (destroyChild)\r\n {\r\n gameObject.destroy();\r\n }\r\n else if (removeFromScene)\r\n {\r\n gameObject.scene.sys.displayList.remove(gameObject);\r\n\r\n if (gameObject.preUpdate)\r\n {\r\n gameObject.scene.sys.updateList.remove(gameObject);\r\n }\r\n }\r\n }\r\n\r\n this.children.clear();\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Tests if a Game Object is a member of this group.\r\n *\r\n * @method Phaser.GameObjects.Group#contains\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} child - A Game Object.\r\n *\r\n * @return {boolean} True if the Game Object is a member of this group.\r\n */\r\n contains: function (child)\r\n {\r\n return this.children.contains(child);\r\n },\r\n\r\n /**\r\n * All members of the group.\r\n *\r\n * @method Phaser.GameObjects.Group#getChildren\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.GameObject[]} The group members.\r\n */\r\n getChildren: function ()\r\n {\r\n return this.children.entries;\r\n },\r\n\r\n /**\r\n * The number of members of the group.\r\n *\r\n * @method Phaser.GameObjects.Group#getLength\r\n * @since 3.0.0\r\n *\r\n * @return {integer}\r\n */\r\n getLength: function ()\r\n {\r\n return this.children.size;\r\n },\r\n\r\n /**\r\n * Scans the Group, from top to bottom, for the first member that has an {@link Phaser.GameObjects.GameObject#active} state matching the argument,\r\n * assigns `x` and `y`, and returns the member.\r\n *\r\n * If no matching member is found and `createIfNull` is true and the group isn't full then it will create a new Game Object using `x`, `y`, `key`, `frame`, and `visible`.\r\n * Unless a new member is created, `key`, `frame`, and `visible` are ignored.\r\n *\r\n * @method Phaser.GameObjects.Group#getFirst\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} [state=false] - The {@link Phaser.GameObjects.GameObject#active} value to match.\r\n * @param {boolean} [createIfNull=false] - Create a new Game Object if no matching members are found, using the following arguments.\r\n * @param {number} [x] - The horizontal position of the Game Object in the world.\r\n * @param {number} [y] - The vertical position of the Game Object in the world.\r\n * @param {string} [key=defaultKey] - The texture key assigned to a new Game Object (if one is created).\r\n * @param {(string|integer)} [frame=defaultFrame] - A texture frame assigned to a new Game Object (if one is created).\r\n * @param {boolean} [visible=true] - The {@link Phaser.GameObjects.Components.Visible#visible} state of a new Game Object (if one is created).\r\n *\r\n * @return {?any} The first matching group member, or a newly created member, or null.\r\n */\r\n getFirst: function (state, createIfNull, x, y, key, frame, visible)\r\n {\r\n return this.getHandler(true, 1, state, createIfNull, x, y, key, frame, visible);\r\n },\r\n\r\n /**\r\n * Scans the Group, from top to bottom, for the nth member that has an {@link Phaser.GameObjects.GameObject#active} state matching the argument,\r\n * assigns `x` and `y`, and returns the member.\r\n *\r\n * If no matching member is found and `createIfNull` is true and the group isn't full then it will create a new Game Object using `x`, `y`, `key`, `frame`, and `visible`.\r\n * Unless a new member is created, `key`, `frame`, and `visible` are ignored.\r\n *\r\n * @method Phaser.GameObjects.Group#getFirstNth\r\n * @since 3.6.0\r\n *\r\n * @param {integer} nth - The nth matching Group member to search for.\r\n * @param {boolean} [state=false] - The {@link Phaser.GameObjects.GameObject#active} value to match.\r\n * @param {boolean} [createIfNull=false] - Create a new Game Object if no matching members are found, using the following arguments.\r\n * @param {number} [x] - The horizontal position of the Game Object in the world.\r\n * @param {number} [y] - The vertical position of the Game Object in the world.\r\n * @param {string} [key=defaultKey] - The texture key assigned to a new Game Object (if one is created).\r\n * @param {(string|integer)} [frame=defaultFrame] - A texture frame assigned to a new Game Object (if one is created).\r\n * @param {boolean} [visible=true] - The {@link Phaser.GameObjects.Components.Visible#visible} state of a new Game Object (if one is created).\r\n *\r\n * @return {?any} The first matching group member, or a newly created member, or null.\r\n */\r\n getFirstNth: function (nth, state, createIfNull, x, y, key, frame, visible)\r\n {\r\n return this.getHandler(true, nth, state, createIfNull, x, y, key, frame, visible);\r\n },\r\n\r\n /**\r\n * Scans the Group for the last member that has an {@link Phaser.GameObjects.GameObject#active} state matching the argument,\r\n * assigns `x` and `y`, and returns the member.\r\n *\r\n * If no matching member is found and `createIfNull` is true and the group isn't full then it will create a new Game Object using `x`, `y`, `key`, `frame`, and `visible`.\r\n * Unless a new member is created, `key`, `frame`, and `visible` are ignored.\r\n *\r\n * @method Phaser.GameObjects.Group#getLast\r\n * @since 3.6.0\r\n *\r\n * @param {boolean} [state=false] - The {@link Phaser.GameObjects.GameObject#active} value to match.\r\n * @param {boolean} [createIfNull=false] - Create a new Game Object if no matching members are found, using the following arguments.\r\n * @param {number} [x] - The horizontal position of the Game Object in the world.\r\n * @param {number} [y] - The vertical position of the Game Object in the world.\r\n * @param {string} [key=defaultKey] - The texture key assigned to a new Game Object (if one is created).\r\n * @param {(string|integer)} [frame=defaultFrame] - A texture frame assigned to a new Game Object (if one is created).\r\n * @param {boolean} [visible=true] - The {@link Phaser.GameObjects.Components.Visible#visible} state of a new Game Object (if one is created).\r\n *\r\n * @return {?any} The first matching group member, or a newly created member, or null.\r\n */\r\n getLast: function (state, createIfNull, x, y, key, frame, visible)\r\n {\r\n return this.getHandler(false, 1, state, createIfNull, x, y, key, frame, visible);\r\n },\r\n\r\n /**\r\n * Scans the Group for the last nth member that has an {@link Phaser.GameObjects.GameObject#active} state matching the argument,\r\n * assigns `x` and `y`, and returns the member.\r\n *\r\n * If no matching member is found and `createIfNull` is true and the group isn't full then it will create a new Game Object using `x`, `y`, `key`, `frame`, and `visible`.\r\n * Unless a new member is created, `key`, `frame`, and `visible` are ignored.\r\n *\r\n * @method Phaser.GameObjects.Group#getLastNth\r\n * @since 3.6.0\r\n *\r\n * @param {integer} nth - The nth matching Group member to search for.\r\n * @param {boolean} [state=false] - The {@link Phaser.GameObjects.GameObject#active} value to match.\r\n * @param {boolean} [createIfNull=false] - Create a new Game Object if no matching members are found, using the following arguments.\r\n * @param {number} [x] - The horizontal position of the Game Object in the world.\r\n * @param {number} [y] - The vertical position of the Game Object in the world.\r\n * @param {string} [key=defaultKey] - The texture key assigned to a new Game Object (if one is created).\r\n * @param {(string|integer)} [frame=defaultFrame] - A texture frame assigned to a new Game Object (if one is created).\r\n * @param {boolean} [visible=true] - The {@link Phaser.GameObjects.Components.Visible#visible} state of a new Game Object (if one is created).\r\n *\r\n * @return {?any} The first matching group member, or a newly created member, or null.\r\n */\r\n getLastNth: function (nth, state, createIfNull, x, y, key, frame, visible)\r\n {\r\n return this.getHandler(false, nth, state, createIfNull, x, y, key, frame, visible);\r\n },\r\n\r\n /**\r\n * Scans the group for the last member that has an {@link Phaser.GameObjects.GameObject#active} state matching the argument,\r\n * assigns `x` and `y`, and returns the member.\r\n *\r\n * If no matching member is found and `createIfNull` is true and the group isn't full then it will create a new Game Object using `x`, `y`, `key`, `frame`, and `visible`.\r\n * Unless a new member is created, `key`, `frame`, and `visible` are ignored.\r\n *\r\n * @method Phaser.GameObjects.Group#getHandler\r\n * @private\r\n * @since 3.6.0\r\n *\r\n * @param {boolean} forwards - Search front to back or back to front?\r\n * @param {integer} nth - Stop matching after nth successful matches.\r\n * @param {boolean} [state=false] - The {@link Phaser.GameObjects.GameObject#active} value to match.\r\n * @param {boolean} [createIfNull=false] - Create a new Game Object if no matching members are found, using the following arguments.\r\n * @param {number} [x] - The horizontal position of the Game Object in the world.\r\n * @param {number} [y] - The vertical position of the Game Object in the world.\r\n * @param {string} [key=defaultKey] - The texture key assigned to a new Game Object (if one is created).\r\n * @param {(string|integer)} [frame=defaultFrame] - A texture frame assigned to a new Game Object (if one is created).\r\n * @param {boolean} [visible=true] - The {@link Phaser.GameObjects.Components.Visible#visible} state of a new Game Object (if one is created).\r\n *\r\n * @return {?any} The first matching group member, or a newly created member, or null.\r\n */\r\n getHandler: function (forwards, nth, state, createIfNull, x, y, key, frame, visible)\r\n {\r\n if (state === undefined) { state = false; }\r\n if (createIfNull === undefined) { createIfNull = false; }\r\n\r\n var gameObject;\r\n\r\n var i;\r\n var total = 0;\r\n var children = this.children.entries;\r\n\r\n if (forwards)\r\n {\r\n for (i = 0; i < children.length; i++)\r\n {\r\n gameObject = children[i];\r\n\r\n if (gameObject.active === state)\r\n {\r\n total++;\r\n\r\n if (total === nth)\r\n {\r\n break;\r\n }\r\n }\r\n else\r\n {\r\n gameObject = null;\r\n }\r\n }\r\n }\r\n else\r\n {\r\n for (i = children.length - 1; i >= 0; i--)\r\n {\r\n gameObject = children[i];\r\n\r\n if (gameObject.active === state)\r\n {\r\n total++;\r\n\r\n if (total === nth)\r\n {\r\n break;\r\n }\r\n }\r\n else\r\n {\r\n gameObject = null;\r\n }\r\n }\r\n }\r\n\r\n if (gameObject)\r\n {\r\n if (typeof(x) === 'number')\r\n {\r\n gameObject.x = x;\r\n }\r\n\r\n if (typeof(y) === 'number')\r\n {\r\n gameObject.y = y;\r\n }\r\n\r\n return gameObject;\r\n }\r\n\r\n // Got this far? We need to create or bail\r\n if (createIfNull)\r\n {\r\n return this.create(x, y, key, frame, visible);\r\n }\r\n else\r\n {\r\n return null;\r\n }\r\n },\r\n\r\n /**\r\n * Scans the group for the first member that has an {@link Phaser.GameObjects.GameObject#active} state set to `false`,\r\n * assigns `x` and `y`, and returns the member.\r\n *\r\n * If no inactive member is found and the group isn't full then it will create a new Game Object using `x`, `y`, `key`, `frame`, and `visible`.\r\n * The new Game Object will have its active state set to `true`.\r\n * Unless a new member is created, `key`, `frame`, and `visible` are ignored.\r\n *\r\n * @method Phaser.GameObjects.Group#get\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x] - The horizontal position of the Game Object in the world.\r\n * @param {number} [y] - The vertical position of the Game Object in the world.\r\n * @param {string} [key=defaultKey] - The texture key assigned to a new Game Object (if one is created).\r\n * @param {(string|integer)} [frame=defaultFrame] - A texture frame assigned to a new Game Object (if one is created).\r\n * @param {boolean} [visible=true] - The {@link Phaser.GameObjects.Components.Visible#visible} state of a new Game Object (if one is created).\r\n *\r\n * @return {?any} The first inactive group member, or a newly created member, or null.\r\n */\r\n get: function (x, y, key, frame, visible)\r\n {\r\n return this.getFirst(false, true, x, y, key, frame, visible);\r\n },\r\n\r\n /**\r\n * Scans the group for the first member that has an {@link Phaser.GameObjects.GameObject#active} state set to `true`,\r\n * assigns `x` and `y`, and returns the member.\r\n *\r\n * If no active member is found and `createIfNull` is `true` and the group isn't full then it will create a new one using `x`, `y`, `key`, `frame`, and `visible`.\r\n * Unless a new member is created, `key`, `frame`, and `visible` are ignored.\r\n *\r\n * @method Phaser.GameObjects.Group#getFirstAlive\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} [createIfNull=false] - Create a new Game Object if no matching members are found, using the following arguments.\r\n * @param {number} [x] - The horizontal position of the Game Object in the world.\r\n * @param {number} [y] - The vertical position of the Game Object in the world.\r\n * @param {string} [key=defaultKey] - The texture key assigned to a new Game Object (if one is created).\r\n * @param {(string|integer)} [frame=defaultFrame] - A texture frame assigned to a new Game Object (if one is created).\r\n * @param {boolean} [visible=true] - The {@link Phaser.GameObjects.Components.Visible#visible} state of a new Game Object (if one is created).\r\n *\r\n * @return {any} The first active group member, or a newly created member, or null.\r\n */\r\n getFirstAlive: function (createIfNull, x, y, key, frame, visible)\r\n {\r\n return this.getFirst(true, createIfNull, x, y, key, frame, visible);\r\n },\r\n\r\n /**\r\n * Scans the group for the first member that has an {@link Phaser.GameObjects.GameObject#active} state set to `false`,\r\n * assigns `x` and `y`, and returns the member.\r\n *\r\n * If no inactive member is found and `createIfNull` is `true` and the group isn't full then it will create a new one using `x`, `y`, `key`, `frame`, and `visible`.\r\n * The new Game Object will have an active state set to `true`.\r\n * Unless a new member is created, `key`, `frame`, and `visible` are ignored.\r\n *\r\n * @method Phaser.GameObjects.Group#getFirstDead\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} [createIfNull=false] - Create a new Game Object if no matching members are found, using the following arguments.\r\n * @param {number} [x] - The horizontal position of the Game Object in the world.\r\n * @param {number} [y] - The vertical position of the Game Object in the world.\r\n * @param {string} [key=defaultKey] - The texture key assigned to a new Game Object (if one is created).\r\n * @param {(string|integer)} [frame=defaultFrame] - A texture frame assigned to a new Game Object (if one is created).\r\n * @param {boolean} [visible=true] - The {@link Phaser.GameObjects.Components.Visible#visible} state of a new Game Object (if one is created).\r\n *\r\n * @return {any} The first inactive group member, or a newly created member, or null.\r\n */\r\n getFirstDead: function (createIfNull, x, y, key, frame, visible)\r\n {\r\n return this.getFirst(false, createIfNull, x, y, key, frame, visible);\r\n },\r\n\r\n /**\r\n * {@link Phaser.GameObjects.Components.Animation#play Plays} an animation for all members of this group.\r\n *\r\n * @method Phaser.GameObjects.Group#playAnimation\r\n * @since 3.0.0\r\n *\r\n * @param {string} key - The string-based key of the animation to play.\r\n * @param {string} [startFrame=0] - Optionally start the animation playing from this frame index.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n playAnimation: function (key, startFrame)\r\n {\r\n Actions.PlayAnimation(this.children.entries, key, startFrame);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Whether this group's size at its {@link Phaser.GameObjects.Group#maxSize maximum}.\r\n *\r\n * @method Phaser.GameObjects.Group#isFull\r\n * @since 3.0.0\r\n *\r\n * @return {boolean} True if the number of members equals {@link Phaser.GameObjects.Group#maxSize}.\r\n */\r\n isFull: function ()\r\n {\r\n if (this.maxSize === -1)\r\n {\r\n return false;\r\n }\r\n else\r\n {\r\n return (this.children.size >= this.maxSize);\r\n }\r\n },\r\n\r\n /**\r\n * Counts the number of active (or inactive) group members.\r\n *\r\n * @method Phaser.GameObjects.Group#countActive\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} [value=true] - Count active (true) or inactive (false) group members.\r\n *\r\n * @return {integer} The number of group members with an active state matching the `active` argument.\r\n */\r\n countActive: function (value)\r\n {\r\n if (value === undefined) { value = true; }\r\n\r\n var total = 0;\r\n\r\n for (var i = 0; i < this.children.size; i++)\r\n {\r\n if (this.children.entries[i].active === value)\r\n {\r\n total++;\r\n }\r\n }\r\n\r\n return total;\r\n },\r\n\r\n /**\r\n * Counts the number of in-use (active) group members.\r\n *\r\n * @method Phaser.GameObjects.Group#getTotalUsed\r\n * @since 3.0.0\r\n *\r\n * @return {integer} The number of group members with an active state of true.\r\n */\r\n getTotalUsed: function ()\r\n {\r\n return this.countActive();\r\n },\r\n\r\n /**\r\n * The difference of {@link Phaser.GameObjects.Group#maxSize} and the number of active group members.\r\n *\r\n * This represents the number of group members that could be created or reactivated before reaching the size limit.\r\n *\r\n * @method Phaser.GameObjects.Group#getTotalFree\r\n * @since 3.0.0\r\n *\r\n * @return {integer} maxSize minus the number of active group numbers; or a large number (if maxSize is -1).\r\n */\r\n getTotalFree: function ()\r\n {\r\n var used = this.getTotalUsed();\r\n var capacity = (this.maxSize === -1) ? 999999999999 : this.maxSize;\r\n\r\n return (capacity - used);\r\n },\r\n\r\n /**\r\n * Sets the property as defined in `key` of each group member to the given value.\r\n *\r\n * @method Phaser.GameObjects.Group#propertyValueSet\r\n * @since 3.21.0\r\n *\r\n * @param {string} key - The property to be updated.\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n propertyValueSet: function (key, value, step, index, direction)\r\n {\r\n Actions.PropertyValueSet(this.children.entries, key, value, step, index, direction);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Adds the given value to the property as defined in `key` of each group member.\r\n *\r\n * @method Phaser.GameObjects.Group#propertyValueInc\r\n * @since 3.21.0\r\n *\r\n * @param {string} key - The property to be updated.\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n propertyValueInc: function (key, value, step, index, direction)\r\n {\r\n Actions.PropertyValueInc(this.children.entries, key, value, step, index, direction);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the x of each group member.\r\n *\r\n * @method Phaser.GameObjects.Group#setX\r\n * @since 3.21.0\r\n *\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n setX: function (value, step)\r\n {\r\n Actions.SetX(this.children.entries, value, step);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the y of each group member.\r\n *\r\n * @method Phaser.GameObjects.Group#setY\r\n * @since 3.21.0\r\n *\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n setY: function (value, step)\r\n {\r\n Actions.SetY(this.children.entries, value, step);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the x, y of each group member.\r\n *\r\n * @method Phaser.GameObjects.Group#setXY\r\n * @since 3.21.0\r\n *\r\n * @param {number} x - The amount to set the `x` property to.\r\n * @param {number} [y=x] - The amount to set the `y` property to. If `undefined` or `null` it uses the `x` value.\r\n * @param {number} [stepX=0] - This is added to the `x` amount, multiplied by the iteration counter.\r\n * @param {number} [stepY=0] - This is added to the `y` amount, multiplied by the iteration counter.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n setXY: function (x, y, stepX, stepY)\r\n {\r\n Actions.SetXY(this.children.entries, x, y, stepX, stepY);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Adds the given value to the x of each group member.\r\n *\r\n * @method Phaser.GameObjects.Group#incX\r\n * @since 3.21.0\r\n *\r\n * @param {number} value - The amount to be added to the `x` property.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n incX: function (value, step)\r\n {\r\n Actions.IncX(this.children.entries, value, step);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Adds the given value to the y of each group member.\r\n *\r\n * @method Phaser.GameObjects.Group#incY\r\n * @since 3.21.0\r\n *\r\n * @param {number} value - The amount to be added to the `y` property.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n incY: function (value, step)\r\n {\r\n Actions.IncY(this.children.entries, value, step);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Adds the given value to the x, y of each group member.\r\n *\r\n * @method Phaser.GameObjects.Group#incXY\r\n * @since 3.21.0\r\n *\r\n * @param {number} x - The amount to be added to the `x` property.\r\n * @param {number} [y=x] - The amount to be added to the `y` property. If `undefined` or `null` it uses the `x` value.\r\n * @param {number} [stepX=0] - This is added to the `x` amount, multiplied by the iteration counter.\r\n * @param {number} [stepY=0] - This is added to the `y` amount, multiplied by the iteration counter.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n incXY: function (x, y, stepX, stepY)\r\n {\r\n Actions.IncXY(this.children.entries, x, y, stepX, stepY);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Iterate through the group members changing the position of each element to be that of the element that came before\r\n * it in the array (or after it if direction = 1)\r\n * \r\n * The first group member position is set to x/y.\r\n *\r\n * @method Phaser.GameObjects.Group#shiftPosition\r\n * @since 3.21.0\r\n *\r\n * @param {number} x - The x coordinate to place the first item in the array at.\r\n * @param {number} y - The y coordinate to place the first item in the array at.\r\n * @param {integer} [direction=0] - The iteration direction. 0 = first to last and 1 = last to first.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n shiftPosition: function (x, y, direction)\r\n {\r\n Actions.ShiftPosition(this.children.entries, x, y, direction);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the angle of each group member.\r\n *\r\n * @method Phaser.GameObjects.Group#angle\r\n * @since 3.21.0\r\n *\r\n * @param {number} value - The amount to set the angle to, in degrees.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n angle: function (value, step)\r\n {\r\n Actions.Angle(this.children.entries, value, step);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the rotation of each group member.\r\n *\r\n * @method Phaser.GameObjects.Group#rotate\r\n * @since 3.21.0\r\n *\r\n * @param {number} value - The amount to set the rotation to, in radians.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n rotate: function (value, step)\r\n {\r\n Actions.Rotate(this.children.entries, value, step);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Rotates each group member around the given point by the given angle.\r\n *\r\n * @method Phaser.GameObjects.Group#rotateAround\r\n * @since 3.21.0\r\n *\r\n * @param {Phaser.Types.Math.Vector2Like} point - Any object with public `x` and `y` properties.\r\n * @param {number} angle - The angle to rotate by, in radians.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n rotateAround: function (point, angle)\r\n {\r\n Actions.RotateAround(this.children.entries, point, angle);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Rotates each group member around the given point by the given angle and distance.\r\n *\r\n * @method Phaser.GameObjects.Group#rotateAroundDistance\r\n * @since 3.21.0\r\n *\r\n * @param {Phaser.Types.Math.Vector2Like} point - Any object with public `x` and `y` properties.\r\n * @param {number} angle - The angle to rotate by, in radians.\r\n * @param {number} distance - The distance from the point of rotation in pixels.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n rotateAroundDistance: function (point, angle, distance)\r\n {\r\n Actions.RotateAroundDistance(this.children.entries, point, angle, distance);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the alpha of each group member.\r\n *\r\n * @method Phaser.GameObjects.Group#setAlpha\r\n * @since 3.21.0\r\n *\r\n * @param {number} value - The amount to set the alpha to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n setAlpha: function (value, step)\r\n {\r\n Actions.SetAlpha(this.children.entries, value, step);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the tint of each group member.\r\n *\r\n * @method Phaser.GameObjects.Group#setTint\r\n * @since 3.21.0\r\n *\r\n * @param {number} topLeft - The tint being applied to top-left corner of item. If other parameters are given no value, this tint will be applied to whole item.\r\n * @param {number} [topRight] - The tint to be applied to top-right corner of item.\r\n * @param {number} [bottomLeft] - The tint to be applied to the bottom-left corner of item.\r\n * @param {number} [bottomRight] - The tint to be applied to the bottom-right corner of item.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n setTint: function (topLeft, topRight, bottomLeft, bottomRight)\r\n {\r\n Actions.SetTint(this.children.entries, topLeft, topRight, bottomLeft, bottomRight);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the originX, originY of each group member.\r\n *\r\n * @method Phaser.GameObjects.Group#setOrigin\r\n * @since 3.21.0\r\n *\r\n * @param {number} originX - The amount to set the `originX` property to.\r\n * @param {number} [originY] - The amount to set the `originY` property to. If `undefined` or `null` it uses the `originX` value.\r\n * @param {number} [stepX=0] - This is added to the `originX` amount, multiplied by the iteration counter.\r\n * @param {number} [stepY=0] - This is added to the `originY` amount, multiplied by the iteration counter.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n setOrigin: function (originX, originY, stepX, stepY)\r\n {\r\n Actions.SetOrigin(this.children.entries, originX, originY, stepX, stepY);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the scaleX of each group member.\r\n *\r\n * @method Phaser.GameObjects.Group#scaleX\r\n * @since 3.21.0\r\n *\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n scaleX: function (value, step)\r\n {\r\n Actions.ScaleX(this.children.entries, value, step);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the scaleY of each group member.\r\n *\r\n * @method Phaser.GameObjects.Group#scaleY\r\n * @since 3.21.0\r\n *\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n scaleY: function (value, step)\r\n {\r\n Actions.ScaleY(this.children.entries, value, step);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the scaleX, scaleY of each group member.\r\n *\r\n * @method Phaser.GameObjects.Group#scaleXY\r\n * @since 3.21.0\r\n *\r\n * @param {number} scaleX - The amount to be added to the `scaleX` property.\r\n * @param {number} [scaleY] - The amount to be added to the `scaleY` property. If `undefined` or `null` it uses the `scaleX` value.\r\n * @param {number} [stepX=0] - This is added to the `scaleX` amount, multiplied by the iteration counter.\r\n * @param {number} [stepY=0] - This is added to the `scaleY` amount, multiplied by the iteration counter.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n scaleXY: function (scaleX, scaleY, stepX, stepY)\r\n {\r\n Actions.ScaleXY(this.children.entries, scaleX, scaleY, stepX, stepY);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the depth of each group member.\r\n *\r\n * @method Phaser.GameObjects.Group#setDepth\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The amount to set the property to.\r\n * @param {number} [step=0] - This is added to the `value` amount, multiplied by the iteration counter.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n setDepth: function (value, step)\r\n {\r\n Actions.SetDepth(this.children.entries, value, step);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the blendMode of each group member.\r\n *\r\n * @method Phaser.GameObjects.Group#setBlendMode\r\n * @since 3.21.0\r\n *\r\n * @param {number} value - The amount to set the property to.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n setBlendMode: function (value)\r\n {\r\n Actions.SetBlendMode(this.children.entries, value);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Passes all group members to the Input Manager to enable them for input with identical areas and callbacks.\r\n *\r\n * @method Phaser.GameObjects.Group#setHitArea\r\n * @since 3.21.0\r\n *\r\n * @param {*} hitArea - Either an input configuration object, or a geometric shape that defines the hit area for the Game Object. If not specified a Rectangle will be used.\r\n * @param {Phaser.Types.Input.HitAreaCallback} hitAreaCallback - A callback to be invoked when the Game Object is interacted with. If you provide a shape you must also provide a callback.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n setHitArea: function (hitArea, hitAreaCallback)\r\n {\r\n Actions.SetHitArea(this.children.entries, hitArea, hitAreaCallback);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Shuffles the group members in place.\r\n *\r\n * @method Phaser.GameObjects.Group#shuffle\r\n * @since 3.21.0\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n shuffle: function ()\r\n {\r\n Actions.Shuffle(this.children.entries);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Deactivates a member of this group.\r\n *\r\n * @method Phaser.GameObjects.Group#kill\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - A member of this group.\r\n */\r\n kill: function (gameObject)\r\n {\r\n if (this.children.contains(gameObject))\r\n {\r\n gameObject.setActive(false);\r\n }\r\n },\r\n\r\n /**\r\n * Deactivates and hides a member of this group.\r\n *\r\n * @method Phaser.GameObjects.Group#killAndHide\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - A member of this group.\r\n */\r\n killAndHide: function (gameObject)\r\n {\r\n if (this.children.contains(gameObject))\r\n {\r\n gameObject.setActive(false);\r\n gameObject.setVisible(false);\r\n }\r\n },\r\n\r\n /**\r\n * Sets the visible of each group member.\r\n *\r\n * @method Phaser.GameObjects.Group#setVisible\r\n * @since 3.21.0\r\n *\r\n * @param {boolean} value - The value to set the property to.\r\n * @param {integer} [index=0] - An optional offset to start searching from within the items array.\r\n * @param {integer} [direction=1] - The direction to iterate through the array. 1 is from beginning to end, -1 from end to beginning.\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n setVisible: function (value, index, direction)\r\n {\r\n Actions.SetVisible(this.children.entries, value, index, direction);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Toggles (flips) the visible state of each member of this group.\r\n *\r\n * @method Phaser.GameObjects.Group#toggleVisible\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Group} This Group object.\r\n */\r\n toggleVisible: function ()\r\n {\r\n Actions.ToggleVisible(this.children.entries);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Empties this group and removes it from the Scene.\r\n *\r\n * Does not call {@link Phaser.GameObjects.Group#removeCallback}.\r\n *\r\n * @method Phaser.GameObjects.Group#destroy\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} [destroyChildren=false] - Also {@link Phaser.GameObjects.GameObject#destroy} each group member.\r\n */\r\n destroy: function (destroyChildren)\r\n {\r\n if (destroyChildren === undefined) { destroyChildren = false; }\r\n\r\n // This Game Object had already been destroyed\r\n if (!this.scene || this.ignoreDestroy)\r\n {\r\n return;\r\n }\r\n\r\n this.clear(false, destroyChildren);\r\n\r\n this.scene = undefined;\r\n this.children = undefined;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Group;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncm91cC9Hcm91cC5qcz9mMGQ0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxjQUFjLG1CQUFPLENBQUMsa0VBQWdCO0FBQ3RDLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsYUFBYSxtQkFBTyxDQUFDLHdFQUFXO0FBQ2hDLG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCxlQUFlLG1CQUFPLENBQUMsdUZBQTZCO0FBQ3BELG9CQUFvQixtQkFBTyxDQUFDLGlHQUFrQztBQUM5RCxZQUFZLG1CQUFPLENBQUMsK0VBQXlCO0FBQzdDLFVBQVUsbUJBQU8sQ0FBQyxtRUFBbUI7QUFDckMsYUFBYSxtQkFBTyxDQUFDLGdGQUFrQjs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsOEhBQThILGdEQUFnRDtBQUN6TCxXQUFXLDRGQUE0RjtBQUN2RztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdDQUF3Qyx5Q0FBeUM7QUFDakY7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUIsdUJBQXVCLDhDQUE4QztBQUNyRTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4RUFBOEUsOENBQThDO0FBQzVIO0FBQ0EsY0FBYyw4Q0FBOEM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLGlCQUFpQjtBQUNoQyxlQUFlLFFBQVEsdUJBQXVCLG9EQUFvRDtBQUNsRyxlQUFlLFFBQVEsc0JBQXNCLDJDQUEyQztBQUN4RjtBQUNBLGdCQUFnQixJQUFJO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPO0FBQ3JDLGdDQUFnQyx1QkFBdUI7QUFDdkQsa0NBQWtDLDJCQUEyQjtBQUM3RCxvQ0FBb0MsZ0JBQWdCO0FBQ3BELG1DQUFtQyxlQUFlOztBQUVsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixzQ0FBc0M7QUFDbkU7QUFDQSxjQUFjLHNEQUFzRCxNQUFNLDhDQUE4QztBQUN4SDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0dBQW9HO0FBQ25IO0FBQ0EsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDJCQUEyQixtQkFBbUI7QUFDOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0EscUJBQXFCLDhDQUE4QztBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaURBQWlEO0FBQ2hFO0FBQ0EsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsa0JBQWtCO0FBQ3pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLHNDQUFzQyw4Q0FBOEM7QUFDcEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdUJBQXVCLGlCQUFpQjtBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLGNBQWMsOENBQThDO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsb0JBQW9COztBQUUzRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsY0FBYyw4Q0FBOEM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdDQUFnQztBQUMvQyxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxvQkFBb0I7O0FBRTNEO0FBQ0E7QUFDQSwyQkFBMkIscUJBQXFCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxjQUFjLDhDQUE4QztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLDRDQUE0Qyx5QkFBeUI7QUFDckUseUNBQXlDLHNCQUFzQjs7QUFFL0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDhDQUE4QztBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLDRDQUE0Qyx5QkFBeUI7QUFDckUseUNBQXlDLHNCQUFzQjs7QUFFL0Q7O0FBRUEsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGdDQUFnQztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhFQUE4RSwyQ0FBMkM7QUFDekg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUSxzQkFBc0IsMkNBQTJDO0FBQ3hGLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLGlCQUFpQjtBQUNoQyxlQUFlLFFBQVEsdUJBQXVCLG9EQUFvRDtBQUNsRztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDRFQUE0RSwyQ0FBMkM7QUFDdkg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVEsc0JBQXNCLDJDQUEyQztBQUN4RixlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxpQkFBaUI7QUFDaEMsZUFBZSxRQUFRLHVCQUF1QixvREFBb0Q7QUFDbEc7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSx3REFBd0QsMkNBQTJDO0FBQ25HO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVEsc0JBQXNCLDJDQUEyQztBQUN4RixlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxpQkFBaUI7QUFDaEMsZUFBZSxRQUFRLHVCQUF1QixvREFBb0Q7QUFDbEc7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw0REFBNEQsMkNBQTJDO0FBQ3ZHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRLHNCQUFzQiwyQ0FBMkM7QUFDeEYsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsaUJBQWlCO0FBQ2hDLGVBQWUsUUFBUSx1QkFBdUIsb0RBQW9EO0FBQ2xHO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0Esd0RBQXdELDJDQUEyQztBQUNuRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUSxzQkFBc0IsMkNBQTJDO0FBQ3hGLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLGlCQUFpQjtBQUNoQyxlQUFlLFFBQVEsdUJBQXVCLG9EQUFvRDtBQUNsRztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxlQUFlO0FBQ2pELHlDQUF5QyxzQkFBc0I7O0FBRS9EOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCLHFCQUFxQjtBQUM1QztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxRQUFRO0FBQ2pEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLHlEQUF5RCwyQ0FBMkM7QUFDcEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxpQkFBaUI7QUFDaEMsZUFBZSxRQUFRLHVCQUF1QixvREFBb0Q7QUFDbEc7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSx5REFBeUQsMkNBQTJDO0FBQ3BHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxpQkFBaUI7QUFDaEMsZUFBZSxRQUFRLHVCQUF1QixvREFBb0Q7QUFDbEc7QUFDQSxnQkFBZ0IsSUFBSTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSx5REFBeUQsMkNBQTJDO0FBQ3BHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLGlCQUFpQjtBQUNoQyxlQUFlLFFBQVEsdUJBQXVCLG9EQUFvRDtBQUNsRztBQUNBLGdCQUFnQixJQUFJO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLFFBQVEseURBQXlEO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0EseUNBQXlDLCtDQUErQztBQUN4RjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRLHVDQUF1Qyx1Q0FBdUM7QUFDdEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLGNBQWM7O0FBRWhEOztBQUVBLHVCQUF1Qix3QkFBd0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSwwQkFBMEIsdUNBQXVDO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRLGtEQUFrRDtBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsZUFBZSxtQ0FBbUM7QUFDbEQ7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsOENBQThDO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRLGlDQUFpQyw0Q0FBNEM7QUFDcEc7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLHlCQUF5Qjs7QUFFckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2dyb3VwL0dyb3VwLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQWN0aW9ucyA9IHJlcXVpcmUoJy4uLy4uL2FjdGlvbnMvJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuLi9ldmVudHMnKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIEdldFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldFZhbHVlJyk7XHJcbnZhciBJc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0lzUGxhaW5PYmplY3QnKTtcclxudmFyIFJhbmdlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvYXJyYXkvUmFuZ2UnKTtcclxudmFyIFNldCA9IHJlcXVpcmUoJy4uLy4uL3N0cnVjdHMvU2V0Jyk7XHJcbnZhciBTcHJpdGUgPSByZXF1aXJlKCcuLi9zcHJpdGUvU3ByaXRlJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIEdyb3VwIGlzIGEgd2F5IGZvciB5b3UgdG8gY3JlYXRlLCBtYW5pcHVsYXRlLCBvciByZWN5Y2xlIHNpbWlsYXIgR2FtZSBPYmplY3RzLlxyXG4gKlxyXG4gKiBHcm91cCBtZW1iZXJzaGlwIGlzIG5vbi1leGNsdXNpdmUuIEEgR2FtZSBPYmplY3QgY2FuIGJlbG9uZyB0byBzZXZlcmFsIGdyb3Vwcywgb25lIGdyb3VwLCBvciBub25lLlxyXG4gKlxyXG4gKiBHcm91cHMgdGhlbXNlbHZlcyBhcmVuJ3QgZGlzcGxheWFibGUsIGFuZCBjYW4ndCBiZSBwb3NpdGlvbmVkLCByb3RhdGVkLCBzY2FsZWQsIG9yIGhpZGRlbi5cclxuICpcclxuICogQGNsYXNzIEdyb3VwXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgc2NlbmUgdGhpcyBncm91cCBiZWxvbmdzIHRvLlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5Hcm91cC5Hcm91cENvbmZpZ3xQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuR3JvdXAuR3JvdXBDcmVhdGVDb25maWcpfSBbY2hpbGRyZW5dIC0gR2FtZSBPYmplY3RzIHRvIGFkZCB0byB0aGlzIGdyb3VwOyBvciB0aGUgYGNvbmZpZ2AgYXJndW1lbnQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkdyb3VwLkdyb3VwQ29uZmlnfFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5Hcm91cC5Hcm91cENyZWF0ZUNvbmZpZ30gW2NvbmZpZ10gLSBTZXR0aW5ncyBmb3IgdGhpcyBncm91cC4gSWYgYGtleWAgaXMgc2V0LCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjY3JlYXRlTXVsdGlwbGUgaXMgYWxzbyBjYWxsZWQgd2l0aCB0aGVzZSBzZXR0aW5ncy5cclxuICpcclxuICogQHNlZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuR3JvdXBcclxuICogQHNlZSBQaGFzZXIuUGh5c2ljcy5BcmNhZGUuU3RhdGljR3JvdXBcclxuICovXHJcbnZhciBHcm91cCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBHcm91cCAoc2NlbmUsIGNoaWxkcmVuLCBjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFRoZXkgY2FuIHBhc3MgaW4gYW55IG9mIHRoZSBmb2xsb3dpbmcgYXMgdGhlIGZpcnN0IGFyZ3VtZW50OlxyXG5cclxuICAgICAgICAvLyAgMSkgQSBzaW5nbGUgY2hpbGRcclxuICAgICAgICAvLyAgMikgQW4gYXJyYXkgb2YgY2hpbGRyZW5cclxuICAgICAgICAvLyAgMykgQSBjb25maWcgb2JqZWN0XHJcbiAgICAgICAgLy8gIDQpIEFuIGFycmF5IG9mIGNvbmZpZyBvYmplY3RzXHJcblxyXG4gICAgICAgIC8vICBPciB0aGV5IGNhbiBwYXNzIGluIGEgY2hpbGQsIG9yIGFycmF5IG9mIGNoaWxkcmVuIEFORCBhIGNvbmZpZyBvYmplY3RcclxuXHJcbiAgICAgICAgaWYgKGNvbmZpZylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBjb25maWcgaGFzIGJlZW4gc2V0LCBhcmUgdGhlIGNoaWxkcmVuIGFuIGFycmF5P1xyXG5cclxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuICYmICFBcnJheS5pc0FycmF5KGNoaWxkcmVuKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBbIGNoaWxkcmVuIF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgTm8gY29uZmlnLCBzbyBsZXQncyBjaGVjayB0aGUgY2hpbGRyZW4gYXJndW1lbnRcclxuXHJcbiAgICAgICAgICAgIGlmIChJc1BsYWluT2JqZWN0KGNoaWxkcmVuWzBdKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIEl0J3MgYW4gYXJyYXkgb2YgcGxhaW4gY29uZmlnIG9iamVjdHNcclxuICAgICAgICAgICAgICAgIGNvbmZpZyA9IGNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKElzUGxhaW5PYmplY3QoY2hpbGRyZW4pKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIENoaWxkcmVuIGlzbid0IGFuIGFycmF5LiBJcyBpdCBhIGNvbmZpZyBvYmplY3QgdGhvdWdoP1xyXG4gICAgICAgICAgICBjb25maWcgPSBjaGlsZHJlbjtcclxuICAgICAgICAgICAgY2hpbGRyZW4gPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhpcyBzY2VuZSB0aGlzIGdyb3VwIGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjc2NlbmVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTWVtYmVycyBvZiB0aGlzIGdyb3VwLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2NoaWxkcmVuXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TdHJ1Y3RzLlNldC48UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Q+fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBuZXcgU2V0KGNoaWxkcmVuKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBmbGFnIGlkZW50aWZ5aW5nIHRoaXMgb2JqZWN0IGFzIGEgZ3JvdXAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjaXNQYXJlbnRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc1BhcmVudCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICAgICAqIFVzZWQgaW50ZXJuYWxseSBieSBQaGFzZXIgYnV0IGlzIGF2YWlsYWJsZSBmb3IgeW91ciBvd24gY3VzdG9tIGNsYXNzZXMgdG8gcG9wdWxhdGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjdHlwZVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQGRlZmF1bHQgJ0dyb3VwJ1xyXG4gICAgICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnR5cGUgPSAnR3JvdXAnO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY2xhc3MgdG8gY3JlYXRlIG5ldyBncm91cCBtZW1iZXJzIGZyb20uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjY2xhc3NUeXBlXHJcbiAgICAgICAgICogQHR5cGUge0Z1bmN0aW9ufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqIEBkZWZhdWx0IFBoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNsYXNzVHlwZSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdjbGFzc1R5cGUnLCBTcHJpdGUpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIGdyb3VwLlxyXG4gICAgICAgICAqIEVtcHR5IGJ5IGRlZmF1bHQgYW5kIG5ldmVyIHBvcHVsYXRlZCBieSBQaGFzZXIsIHRoaXMgaXMgbGVmdCBmb3IgZGV2ZWxvcGVycyB0byB1c2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjbmFtZVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQGRlZmF1bHQgJydcclxuICAgICAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5uYW1lID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ25hbWUnLCAnJyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhpcyBncm91cCBydW5zIGl0cyB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI3ByZVVwZGF0ZX0gbWV0aG9kXHJcbiAgICAgICAgICogKHdoaWNoIG1heSB1cGRhdGUgYW55IG1lbWJlcnMpLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2FjdGl2ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2FjdGl2ZScsIHRydWUpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbWF4aW11bSBzaXplIG9mIHRoaXMgZ3JvdXAsIGlmIHVzZWQgYXMgYSBwb29sLiAtMSBpcyBubyBsaW1pdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNtYXhTaXplXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQGRlZmF1bHQgLTFcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1heFNpemUgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnbWF4U2l6ZScsIC0xKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBkZWZhdWx0IHRleHR1cmUga2V5IHRvIHVzZSB3aGVuIGNyZWF0aW5nIG5ldyBncm91cCBtZW1iZXJzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhpcyBpcyB1c2VkIGluIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjY3JlYXRlfVxyXG4gICAgICAgICAqIGJ1dCBub3QgaW4ge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNjcmVhdGVNdWx0aXBsZX0uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjZGVmYXVsdEtleVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0S2V5ID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2RlZmF1bHRLZXknLCBudWxsKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBkZWZhdWx0IHRleHR1cmUgZnJhbWUgdG8gdXNlIHdoZW4gY3JlYXRpbmcgbmV3IGdyb3VwIG1lbWJlcnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjZGVmYXVsdEZyYW1lXHJcbiAgICAgICAgICogQHR5cGUgeyhzdHJpbmd8aW50ZWdlcil9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0RnJhbWUgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZGVmYXVsdEZyYW1lJywgbnVsbCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdG8gY2FsbCB0aGUgdXBkYXRlIG1ldGhvZCBvZiBhbnkgbWVtYmVycy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNydW5DaGlsZFVwZGF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjcHJlVXBkYXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5ydW5DaGlsZFVwZGF0ZSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdydW5DaGlsZFVwZGF0ZScsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhZGRpbmcgb3IgY3JlYXRpbmcgZ3JvdXAgbWVtYmVycy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNjcmVhdGVDYWxsYmFja1xyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkdyb3VwLkdyb3VwQ2FsbGJhY2t9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jcmVhdGVDYWxsYmFjayA9IEdldEZhc3RWYWx1ZShjb25maWcsICdjcmVhdGVDYWxsYmFjaycsIG51bGwpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHJlbW92aW5nIGdyb3VwIG1lbWJlcnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjcmVtb3ZlQ2FsbGJhY2tcclxuICAgICAgICAgKiBAdHlwZSB7P1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5Hcm91cC5Hcm91cENhbGxiYWNrfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQ2FsbGJhY2sgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAncmVtb3ZlQ2FsbGJhY2snLCBudWxsKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBjcmVhdGluZyBzZXZlcmFsIGdyb3VwIG1lbWJlcnMgYXQgb25jZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNjcmVhdGVNdWx0aXBsZUNhbGxiYWNrXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuR3JvdXAuR3JvdXBNdWx0aXBsZUNyZWF0ZUNhbGxiYWNrfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3JlYXRlTXVsdGlwbGVDYWxsYmFjayA9IEdldEZhc3RWYWx1ZShjb25maWcsICdjcmVhdGVNdWx0aXBsZUNhbGxiYWNrJywgbnVsbCk7XHJcblxyXG4gICAgICAgIGlmIChjb25maWcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU11bHRpcGxlKGNvbmZpZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgR2FtZSBPYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhpcyBncm91cCwgdW5sZXNzIHRoZSBncm91cCB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2lzRnVsbCBpcyBmdWxsfS5cclxuICAgICAqXHJcbiAgICAgKiBDYWxscyB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2NyZWF0ZUNhbGxiYWNrfS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNjcmVhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBuZXcgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBuZXcgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtrZXk9ZGVmYXVsdEtleV0gLSBUaGUgdGV4dHVyZSBrZXkgb2YgdGhlIG5ldyBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lPWRlZmF1bHRGcmFtZV0gLSBUaGUgdGV4dHVyZSBmcmFtZSBvZiB0aGUgbmV3IEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdmlzaWJsZT10cnVlXSAtIFRoZSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVmlzaWJsZSN2aXNpYmxlfSBzdGF0ZSBvZiB0aGUgbmV3IEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbYWN0aXZlPXRydWVdIC0gVGhlIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNhY3RpdmV9IHN0YXRlIG9mIHRoZSBuZXcgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7YW55fSBUaGUgbmV3IEdhbWUgT2JqZWN0ICh1c3VhbGx5IGEgU3ByaXRlLCBldGMuKS5cclxuICAgICAqL1xyXG4gICAgY3JlYXRlOiBmdW5jdGlvbiAoeCwgeSwga2V5LCBmcmFtZSwgdmlzaWJsZSwgYWN0aXZlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7IGtleSA9IHRoaXMuZGVmYXVsdEtleTsgfVxyXG4gICAgICAgIGlmIChmcmFtZSA9PT0gdW5kZWZpbmVkKSB7IGZyYW1lID0gdGhpcy5kZWZhdWx0RnJhbWU7IH1cclxuICAgICAgICBpZiAodmlzaWJsZSA9PT0gdW5kZWZpbmVkKSB7IHZpc2libGUgPSB0cnVlOyB9XHJcbiAgICAgICAgaWYgKGFjdGl2ZSA9PT0gdW5kZWZpbmVkKSB7IGFjdGl2ZSA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgLy8gIFBvb2w/XHJcbiAgICAgICAgaWYgKHRoaXMuaXNGdWxsKCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjaGlsZCA9IG5ldyB0aGlzLmNsYXNzVHlwZSh0aGlzLnNjZW5lLCB4LCB5LCBrZXksIGZyYW1lKTtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZS5zeXMuZGlzcGxheUxpc3QuYWRkKGNoaWxkKTtcclxuXHJcbiAgICAgICAgaWYgKGNoaWxkLnByZVVwZGF0ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuc3lzLnVwZGF0ZUxpc3QuYWRkKGNoaWxkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNoaWxkLnZpc2libGUgPSB2aXNpYmxlO1xyXG4gICAgICAgIGNoaWxkLnNldEFjdGl2ZShhY3RpdmUpO1xyXG5cclxuICAgICAgICB0aGlzLmFkZChjaGlsZCk7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIHNldmVyYWwgR2FtZSBPYmplY3RzIGFuZCBhZGRzIHRoZW0gdG8gdGhpcyBncm91cC5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgZ3JvdXAgYmVjb21lcyB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2lzRnVsbH0sIG5vIGZ1cnRoZXIgR2FtZSBPYmplY3RzIGFyZSBjcmVhdGVkLlxyXG4gICAgICpcclxuICAgICAqIENhbGxzIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjY3JlYXRlTXVsdGlwbGVDYWxsYmFja30gYW5kIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjY3JlYXRlQ2FsbGJhY2t9LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2NyZWF0ZU11bHRpcGxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5Hcm91cC5Hcm91cENyZWF0ZUNvbmZpZ3xQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuR3JvdXAuR3JvdXBDcmVhdGVDb25maWdbXX0gY29uZmlnIC0gQ3JlYXRpb24gc2V0dGluZ3MuIFRoaXMgY2FuIGJlIGEgc2luZ2xlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IG9yIGFuIGFycmF5IG9mIHN1Y2ggb2JqZWN0cywgd2hpY2ggd2lsbCBiZSBhcHBsaWVkIGluIHR1cm4uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7YW55W119IFRoZSBuZXdseSBjcmVhdGVkIEdhbWUgT2JqZWN0cy5cclxuICAgICAqL1xyXG4gICAgY3JlYXRlTXVsdGlwbGU6IGZ1bmN0aW9uIChjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNGdWxsKCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbmZpZyA9IFsgY29uZmlnIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgb3V0cHV0ID0gW107XHJcblxyXG4gICAgICAgIGlmIChjb25maWdbMF0ua2V5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb25maWcubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBlbnRyaWVzID0gdGhpcy5jcmVhdGVGcm9tQ29uZmlnKGNvbmZpZ1tpXSk7XHJcblxyXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LmNvbmNhdChlbnRyaWVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGhlbHBlciBmb3Ige0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNjcmVhdGVNdWx0aXBsZX0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjY3JlYXRlRnJvbUNvbmZpZ1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuR3JvdXAuR3JvdXBDcmVhdGVDb25maWd9IG9wdGlvbnMgLSBDcmVhdGlvbiBzZXR0aW5ncy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHthbnlbXX0gVGhlIG5ld2x5IGNyZWF0ZWQgR2FtZSBPYmplY3RzLlxyXG4gICAgICovXHJcbiAgICBjcmVhdGVGcm9tQ29uZmlnOiBmdW5jdGlvbiAob3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5pc0Z1bGwoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2xhc3NUeXBlID0gR2V0RmFzdFZhbHVlKG9wdGlvbnMsICdjbGFzc1R5cGUnLCB0aGlzLmNsYXNzVHlwZSk7XHJcblxyXG4gICAgICAgIHZhciBrZXkgPSBHZXRGYXN0VmFsdWUob3B0aW9ucywgJ2tleScsIHVuZGVmaW5lZCk7XHJcbiAgICAgICAgdmFyIGZyYW1lID0gR2V0RmFzdFZhbHVlKG9wdGlvbnMsICdmcmFtZScsIG51bGwpO1xyXG4gICAgICAgIHZhciB2aXNpYmxlID0gR2V0RmFzdFZhbHVlKG9wdGlvbnMsICd2aXNpYmxlJywgdHJ1ZSk7XHJcbiAgICAgICAgdmFyIGFjdGl2ZSA9IEdldEZhc3RWYWx1ZShvcHRpb25zLCAnYWN0aXZlJywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIHZhciBlbnRyaWVzID0gW107XHJcblxyXG4gICAgICAgIC8vICBDYW4ndCBkbyBhbnl0aGluZyB3aXRob3V0IGF0IGxlYXN0IGEga2V5XHJcbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVudHJpZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShrZXkpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBrZXkgPSBbIGtleSBdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZnJhbWUpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmcmFtZSA9IFsgZnJhbWUgXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIEJ1aWxkIGFuIGFycmF5IG9mIGtleSBmcmFtZSBwYWlycyB0byBsb29wIHRocm91Z2hcclxuXHJcbiAgICAgICAgdmFyIHJlcGVhdCA9IEdldEZhc3RWYWx1ZShvcHRpb25zLCAncmVwZWF0JywgMCk7XHJcbiAgICAgICAgdmFyIHJhbmRvbUtleSA9IEdldEZhc3RWYWx1ZShvcHRpb25zLCAncmFuZG9tS2V5JywgZmFsc2UpO1xyXG4gICAgICAgIHZhciByYW5kb21GcmFtZSA9IEdldEZhc3RWYWx1ZShvcHRpb25zLCAncmFuZG9tRnJhbWUnLCBmYWxzZSk7XHJcbiAgICAgICAgdmFyIHlveW8gPSBHZXRGYXN0VmFsdWUob3B0aW9ucywgJ3lveW8nLCBmYWxzZSk7XHJcbiAgICAgICAgdmFyIHF1YW50aXR5ID0gR2V0RmFzdFZhbHVlKG9wdGlvbnMsICdxdWFudGl0eScsIGZhbHNlKTtcclxuICAgICAgICB2YXIgZnJhbWVRdWFudGl0eSA9IEdldEZhc3RWYWx1ZShvcHRpb25zLCAnZnJhbWVRdWFudGl0eScsIDEpO1xyXG4gICAgICAgIHZhciBtYXggPSBHZXRGYXN0VmFsdWUob3B0aW9ucywgJ21heCcsIDApO1xyXG5cclxuICAgICAgICAvLyAgSWYgYSBxdWFudGl0eSB2YWx1ZSBpcyBzZXQgd2UgdXNlIHRoYXQgdG8gb3ZlcnJpZGUgdGhlIGZyYW1lUXVhbnRpdHlcclxuXHJcbiAgICAgICAgdmFyIHJhbmdlID0gUmFuZ2Uoa2V5LCBmcmFtZSwge1xyXG4gICAgICAgICAgICBtYXg6IG1heCxcclxuICAgICAgICAgICAgcXR5OiAocXVhbnRpdHkpID8gcXVhbnRpdHkgOiBmcmFtZVF1YW50aXR5LFxyXG4gICAgICAgICAgICByYW5kb206IHJhbmRvbUtleSxcclxuICAgICAgICAgICAgcmFuZG9tQjogcmFuZG9tRnJhbWUsXHJcbiAgICAgICAgICAgIHJlcGVhdDogcmVwZWF0LFxyXG4gICAgICAgICAgICB5b3lvOiB5b3lvXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLmNyZWF0ZUNhbGxiYWNrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVDYWxsYmFjayA9IG9wdGlvbnMuY3JlYXRlQ2FsbGJhY2s7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3B0aW9ucy5yZW1vdmVDYWxsYmFjaylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2FsbGJhY2sgPSBvcHRpb25zLnJlbW92ZUNhbGxiYWNrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCByYW5nZS5sZW5ndGg7IGMrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjcmVhdGVkID0gdGhpcy5jcmVhdGUoMCwgMCwgcmFuZ2VbY10uYSwgcmFuZ2VbY10uYiwgdmlzaWJsZSwgYWN0aXZlKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghY3JlYXRlZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVudHJpZXMucHVzaChjcmVhdGVkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBQb3N0LWNyZWF0aW9uIG9wdGlvbnMgKGFwcGxpZWQgb25seSB0byB0aG9zZSBpdGVtcyBjcmVhdGVkIGluIHRoaXMgY2FsbCk6XHJcblxyXG4gICAgICAgIHZhciB4ID0gR2V0VmFsdWUob3B0aW9ucywgJ3NldFhZLngnLCAwKTtcclxuICAgICAgICB2YXIgeSA9IEdldFZhbHVlKG9wdGlvbnMsICdzZXRYWS55JywgMCk7XHJcbiAgICAgICAgdmFyIHN0ZXBYID0gR2V0VmFsdWUob3B0aW9ucywgJ3NldFhZLnN0ZXBYJywgMCk7XHJcbiAgICAgICAgdmFyIHN0ZXBZID0gR2V0VmFsdWUob3B0aW9ucywgJ3NldFhZLnN0ZXBZJywgMCk7XHJcblxyXG4gICAgICAgIEFjdGlvbnMuU2V0WFkoZW50cmllcywgeCwgeSwgc3RlcFgsIHN0ZXBZKTtcclxuXHJcbiAgICAgICAgdmFyIHJvdGF0aW9uID0gR2V0VmFsdWUob3B0aW9ucywgJ3NldFJvdGF0aW9uLnZhbHVlJywgMCk7XHJcbiAgICAgICAgdmFyIHN0ZXBSb3RhdGlvbiA9IEdldFZhbHVlKG9wdGlvbnMsICdzZXRSb3RhdGlvbi5zdGVwJywgMCk7XHJcblxyXG4gICAgICAgIEFjdGlvbnMuU2V0Um90YXRpb24oZW50cmllcywgcm90YXRpb24sIHN0ZXBSb3RhdGlvbik7XHJcblxyXG4gICAgICAgIHZhciBzY2FsZVggPSBHZXRWYWx1ZShvcHRpb25zLCAnc2V0U2NhbGUueCcsIDEpO1xyXG4gICAgICAgIHZhciBzY2FsZVkgPSBHZXRWYWx1ZShvcHRpb25zLCAnc2V0U2NhbGUueScsIHNjYWxlWCk7XHJcbiAgICAgICAgdmFyIHN0ZXBTY2FsZVggPSBHZXRWYWx1ZShvcHRpb25zLCAnc2V0U2NhbGUuc3RlcFgnLCAwKTtcclxuICAgICAgICB2YXIgc3RlcFNjYWxlWSA9IEdldFZhbHVlKG9wdGlvbnMsICdzZXRTY2FsZS5zdGVwWScsIDApO1xyXG5cclxuICAgICAgICBBY3Rpb25zLlNldFNjYWxlKGVudHJpZXMsIHNjYWxlWCwgc2NhbGVZLCBzdGVwU2NhbGVYLCBzdGVwU2NhbGVZKTtcclxuXHJcbiAgICAgICAgdmFyIGFscGhhID0gR2V0VmFsdWUob3B0aW9ucywgJ3NldEFscGhhLnZhbHVlJywgMSk7XHJcbiAgICAgICAgdmFyIHN0ZXBBbHBoYSA9IEdldFZhbHVlKG9wdGlvbnMsICdzZXRBbHBoYS5zdGVwJywgMCk7XHJcblxyXG4gICAgICAgIEFjdGlvbnMuU2V0QWxwaGEoZW50cmllcywgYWxwaGEsIHN0ZXBBbHBoYSk7XHJcblxyXG4gICAgICAgIHZhciBkZXB0aCA9IEdldFZhbHVlKG9wdGlvbnMsICdzZXREZXB0aC52YWx1ZScsIDApO1xyXG4gICAgICAgIHZhciBzdGVwRGVwdGggPSBHZXRWYWx1ZShvcHRpb25zLCAnc2V0RGVwdGguc3RlcCcsIDApO1xyXG5cclxuICAgICAgICBBY3Rpb25zLlNldERlcHRoKGVudHJpZXMsIGRlcHRoLCBzdGVwRGVwdGgpO1xyXG5cclxuICAgICAgICB2YXIgc2Nyb2xsRmFjdG9yWCA9IEdldFZhbHVlKG9wdGlvbnMsICdzZXRTY3JvbGxGYWN0b3IueCcsIDEpO1xyXG4gICAgICAgIHZhciBzY3JvbGxGYWN0b3JZID0gR2V0VmFsdWUob3B0aW9ucywgJ3NldFNjcm9sbEZhY3Rvci55Jywgc2Nyb2xsRmFjdG9yWCk7XHJcbiAgICAgICAgdmFyIHN0ZXBTY3JvbGxGYWN0b3JYID0gR2V0VmFsdWUob3B0aW9ucywgJ3NldFNjcm9sbEZhY3Rvci5zdGVwWCcsIDApO1xyXG4gICAgICAgIHZhciBzdGVwU2Nyb2xsRmFjdG9yWSA9IEdldFZhbHVlKG9wdGlvbnMsICdzZXRTY3JvbGxGYWN0b3Iuc3RlcFknLCAwKTtcclxuXHJcbiAgICAgICAgQWN0aW9ucy5TZXRTY3JvbGxGYWN0b3IoZW50cmllcywgc2Nyb2xsRmFjdG9yWCwgc2Nyb2xsRmFjdG9yWSwgc3RlcFNjcm9sbEZhY3RvclgsIHN0ZXBTY3JvbGxGYWN0b3JZKTtcclxuXHJcbiAgICAgICAgdmFyIGhpdEFyZWEgPSBHZXRGYXN0VmFsdWUob3B0aW9ucywgJ2hpdEFyZWEnLCBudWxsKTtcclxuICAgICAgICB2YXIgaGl0QXJlYUNhbGxiYWNrID0gR2V0RmFzdFZhbHVlKG9wdGlvbnMsICdoaXRBcmVhQ2FsbGJhY2snLCBudWxsKTtcclxuXHJcbiAgICAgICAgaWYgKGhpdEFyZWEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBBY3Rpb25zLlNldEhpdEFyZWEoZW50cmllcywgaGl0QXJlYSwgaGl0QXJlYUNhbGxiYWNrKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBncmlkID0gR2V0RmFzdFZhbHVlKG9wdGlvbnMsICdncmlkQWxpZ24nLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIGlmIChncmlkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgQWN0aW9ucy5HcmlkQWxpZ24oZW50cmllcywgZ3JpZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jcmVhdGVNdWx0aXBsZUNhbGxiYWNrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVNdWx0aXBsZUNhbGxiYWNrLmNhbGwodGhpcywgZW50cmllcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZW50cmllcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIGFueSBncm91cCBtZW1iZXJzLCBpZiB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI3J1bkNoaWxkVXBkYXRlfSBpcyBlbmFibGVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI3ByZVVwZGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lc3RhbXAuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGEgLSBUaGUgZGVsdGEgdGltZSBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IGZyYW1lLlxyXG4gICAgICovXHJcbiAgICBwcmVVcGRhdGU6IGZ1bmN0aW9uICh0aW1lLCBkZWx0YSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMucnVuQ2hpbGRVcGRhdGUgfHwgdGhpcy5jaGlsZHJlbi5zaXplID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIEJlY2F1c2UgYSBHcm91cCBjaGlsZCBtYXkgbWVzcyB3aXRoIHRoZSBsZW5ndGggb2YgdGhlIEdyb3VwIGR1cmluZyBpdHMgdXBkYXRlXHJcbiAgICAgICAgdmFyIHRlbXAgPSB0aGlzLmNoaWxkcmVuLmVudHJpZXMuc2xpY2UoKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZW1wLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSB0ZW1wW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGl0ZW0uYWN0aXZlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLnVwZGF0ZSh0aW1lLCBkZWx0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIEdhbWUgT2JqZWN0IHRvIHRoaXMgZ3JvdXAuXHJcbiAgICAgKlxyXG4gICAgICogQ2FsbHMge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNjcmVhdGVDYWxsYmFja30uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjYWRkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBjaGlsZCAtIFRoZSBHYW1lIE9iamVjdCB0byBhZGQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthZGRUb1NjZW5lPWZhbHNlXSAtIEFsc28gYWRkIHRoZSBHYW1lIE9iamVjdCB0byB0aGUgc2NlbmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfSBUaGlzIEdyb3VwIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoY2hpbGQsIGFkZFRvU2NlbmUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGFkZFRvU2NlbmUgPT09IHVuZGVmaW5lZCkgeyBhZGRUb1NjZW5lID0gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNGdWxsKCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc2V0KGNoaWxkKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY3JlYXRlQ2FsbGJhY2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUNhbGxiYWNrLmNhbGwodGhpcywgY2hpbGQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGFkZFRvU2NlbmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNjZW5lLnN5cy5kaXNwbGF5TGlzdC5hZGQoY2hpbGQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNoaWxkLnByZVVwZGF0ZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5zeXMudXBkYXRlTGlzdC5hZGQoY2hpbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjaGlsZC5vbihFdmVudHMuREVTVFJPWSwgdGhpcy5yZW1vdmUsIHRoaXMpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIHNldmVyYWwgR2FtZSBPYmplY3RzIHRvIHRoaXMgZ3JvdXAuXHJcbiAgICAgKlxyXG4gICAgICogQ2FsbHMge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNjcmVhdGVDYWxsYmFja30uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjYWRkTXVsdGlwbGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gY2hpbGRyZW4gLSBUaGUgR2FtZSBPYmplY3RzIHRvIGFkZC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FkZFRvU2NlbmU9ZmFsc2VdIC0gQWxzbyBhZGQgdGhlIEdhbWUgT2JqZWN0cyB0byB0aGUgc2NlbmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfSBUaGlzIGdyb3VwLlxyXG4gICAgICovXHJcbiAgICBhZGRNdWx0aXBsZTogZnVuY3Rpb24gKGNoaWxkcmVuLCBhZGRUb1NjZW5lKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChhZGRUb1NjZW5lID09PSB1bmRlZmluZWQpIHsgYWRkVG9TY2VuZSA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkKGNoaWxkcmVuW2ldLCBhZGRUb1NjZW5lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIG1lbWJlciBvZiB0aGlzIEdyb3VwIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgaXQgZnJvbSB0aGUgU2NlbmUgYW5kIC8gb3IgZGVzdHJveXMgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQ2FsbHMge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNyZW1vdmVDYWxsYmFja30uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjcmVtb3ZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBjaGlsZCAtIFRoZSBHYW1lIE9iamVjdCB0byByZW1vdmUuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZW1vdmVGcm9tU2NlbmU9ZmFsc2VdIC0gT3B0aW9uYWxseSByZW1vdmUgdGhlIEdyb3VwIG1lbWJlciBmcm9tIHRoZSBTY2VuZSBpdCBiZWxvbmdzIHRvLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZGVzdHJveUNoaWxkPWZhbHNlXSAtIE9wdGlvbmFsbHkgY2FsbCBkZXN0cm95IG9uIHRoZSByZW1vdmVkIEdyb3VwIG1lbWJlci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXB9IFRoaXMgR3JvdXAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZW1vdmU6IGZ1bmN0aW9uIChjaGlsZCwgcmVtb3ZlRnJvbVNjZW5lLCBkZXN0cm95Q2hpbGQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHJlbW92ZUZyb21TY2VuZSA9PT0gdW5kZWZpbmVkKSB7IHJlbW92ZUZyb21TY2VuZSA9IGZhbHNlOyB9XHJcbiAgICAgICAgaWYgKGRlc3Ryb3lDaGlsZCA9PT0gdW5kZWZpbmVkKSB7IGRlc3Ryb3lDaGlsZCA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jaGlsZHJlbi5jb250YWlucyhjaGlsZCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uZGVsZXRlKGNoaWxkKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVtb3ZlQ2FsbGJhY2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNhbGxiYWNrLmNhbGwodGhpcywgY2hpbGQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2hpbGQub2ZmKEV2ZW50cy5ERVNUUk9ZLCB0aGlzLnJlbW92ZSwgdGhpcyk7XHJcblxyXG4gICAgICAgIGlmIChkZXN0cm95Q2hpbGQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjaGlsZC5kZXN0cm95KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHJlbW92ZUZyb21TY2VuZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNoaWxkLnNjZW5lLnN5cy5kaXNwbGF5TGlzdC5yZW1vdmUoY2hpbGQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNoaWxkLnByZVVwZGF0ZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY2hpbGQuc2NlbmUuc3lzLnVwZGF0ZUxpc3QucmVtb3ZlKGNoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhbGwgbWVtYmVycyBvZiB0aGlzIEdyb3VwIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlbSBmcm9tIHRoZSBTY2VuZSBhbmQgLyBvciBkZXN0cm95cyB0aGVtLlxyXG4gICAgICpcclxuICAgICAqIERvZXMgbm90IGNhbGwge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNyZW1vdmVDYWxsYmFja30uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjY2xlYXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlbW92ZUZyb21TY2VuZT1mYWxzZV0gLSBPcHRpb25hbGx5IHJlbW92ZSBlYWNoIEdyb3VwIG1lbWJlciBmcm9tIHRoZSBTY2VuZS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Rlc3Ryb3lDaGlsZD1mYWxzZV0gLSBPcHRpb25hbGx5IGNhbGwgZGVzdHJveSBvbiB0aGUgcmVtb3ZlZCBHcm91cCBtZW1iZXJzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Hcm91cH0gVGhpcyBncm91cC5cclxuICAgICAqL1xyXG4gICAgY2xlYXI6IGZ1bmN0aW9uIChyZW1vdmVGcm9tU2NlbmUsIGRlc3Ryb3lDaGlsZClcclxuICAgIHtcclxuICAgICAgICBpZiAocmVtb3ZlRnJvbVNjZW5lID09PSB1bmRlZmluZWQpIHsgcmVtb3ZlRnJvbVNjZW5lID0gZmFsc2U7IH1cclxuICAgICAgICBpZiAoZGVzdHJveUNoaWxkID09PSB1bmRlZmluZWQpIHsgZGVzdHJveUNoaWxkID0gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZ2FtZU9iamVjdCA9IGNoaWxkcmVuLmVudHJpZXNbaV07XHJcblxyXG4gICAgICAgICAgICBnYW1lT2JqZWN0Lm9mZihFdmVudHMuREVTVFJPWSwgdGhpcy5yZW1vdmUsIHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGRlc3Ryb3lDaGlsZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZ2FtZU9iamVjdC5kZXN0cm95KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAocmVtb3ZlRnJvbVNjZW5lKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBnYW1lT2JqZWN0LnNjZW5lLnN5cy5kaXNwbGF5TGlzdC5yZW1vdmUoZ2FtZU9iamVjdCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGdhbWVPYmplY3QucHJlVXBkYXRlKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGdhbWVPYmplY3Quc2NlbmUuc3lzLnVwZGF0ZUxpc3QucmVtb3ZlKGdhbWVPYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNoaWxkcmVuLmNsZWFyKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlc3RzIGlmIGEgR2FtZSBPYmplY3QgaXMgYSBtZW1iZXIgb2YgdGhpcyBncm91cC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNjb250YWluc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gY2hpbGQgLSBBIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIEdhbWUgT2JqZWN0IGlzIGEgbWVtYmVyIG9mIHRoaXMgZ3JvdXAuXHJcbiAgICAgKi9cclxuICAgIGNvbnRhaW5zOiBmdW5jdGlvbiAoY2hpbGQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uY29udGFpbnMoY2hpbGQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsbCBtZW1iZXJzIG9mIHRoZSBncm91cC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNnZXRDaGlsZHJlblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gVGhlIGdyb3VwIG1lbWJlcnMuXHJcbiAgICAgKi9cclxuICAgIGdldENoaWxkcmVuOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmVudHJpZXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG51bWJlciBvZiBtZW1iZXJzIG9mIHRoZSBncm91cC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNnZXRMZW5ndGhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldExlbmd0aDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5zaXplO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYW5zIHRoZSBHcm91cCwgZnJvbSB0b3AgdG8gYm90dG9tLCBmb3IgdGhlIGZpcnN0IG1lbWJlciB0aGF0IGhhcyBhbiB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjYWN0aXZlfSBzdGF0ZSBtYXRjaGluZyB0aGUgYXJndW1lbnQsXHJcbiAgICAgKiBhc3NpZ25zIGB4YCBhbmQgYHlgLCBhbmQgcmV0dXJucyB0aGUgbWVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIG1hdGNoaW5nIG1lbWJlciBpcyBmb3VuZCBhbmQgYGNyZWF0ZUlmTnVsbGAgaXMgdHJ1ZSBhbmQgdGhlIGdyb3VwIGlzbid0IGZ1bGwgdGhlbiBpdCB3aWxsIGNyZWF0ZSBhIG5ldyBHYW1lIE9iamVjdCB1c2luZyBgeGAsIGB5YCwgYGtleWAsIGBmcmFtZWAsIGFuZCBgdmlzaWJsZWAuXHJcbiAgICAgKiBVbmxlc3MgYSBuZXcgbWVtYmVyIGlzIGNyZWF0ZWQsIGBrZXlgLCBgZnJhbWVgLCBhbmQgYHZpc2libGVgIGFyZSBpZ25vcmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2dldEZpcnN0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzdGF0ZT1mYWxzZV0gLSBUaGUge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I2FjdGl2ZX0gdmFsdWUgdG8gbWF0Y2guXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjcmVhdGVJZk51bGw9ZmFsc2VdIC0gQ3JlYXRlIGEgbmV3IEdhbWUgT2JqZWN0IGlmIG5vIG1hdGNoaW5nIG1lbWJlcnMgYXJlIGZvdW5kLCB1c2luZyB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5XSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtrZXk9ZGVmYXVsdEtleV0gLSBUaGUgdGV4dHVyZSBrZXkgYXNzaWduZWQgdG8gYSBuZXcgR2FtZSBPYmplY3QgKGlmIG9uZSBpcyBjcmVhdGVkKS5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lPWRlZmF1bHRGcmFtZV0gLSBBIHRleHR1cmUgZnJhbWUgYXNzaWduZWQgdG8gYSBuZXcgR2FtZSBPYmplY3QgKGlmIG9uZSBpcyBjcmVhdGVkKS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Zpc2libGU9dHJ1ZV0gLSBUaGUge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGUjdmlzaWJsZX0gc3RhdGUgb2YgYSBuZXcgR2FtZSBPYmplY3QgKGlmIG9uZSBpcyBjcmVhdGVkKS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHs/YW55fSBUaGUgZmlyc3QgbWF0Y2hpbmcgZ3JvdXAgbWVtYmVyLCBvciBhIG5ld2x5IGNyZWF0ZWQgbWVtYmVyLCBvciBudWxsLlxyXG4gICAgICovXHJcbiAgICBnZXRGaXJzdDogZnVuY3Rpb24gKHN0YXRlLCBjcmVhdGVJZk51bGwsIHgsIHksIGtleSwgZnJhbWUsIHZpc2libGUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SGFuZGxlcih0cnVlLCAxLCBzdGF0ZSwgY3JlYXRlSWZOdWxsLCB4LCB5LCBrZXksIGZyYW1lLCB2aXNpYmxlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FucyB0aGUgR3JvdXAsIGZyb20gdG9wIHRvIGJvdHRvbSwgZm9yIHRoZSBudGggbWVtYmVyIHRoYXQgaGFzIGFuIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNhY3RpdmV9IHN0YXRlIG1hdGNoaW5nIHRoZSBhcmd1bWVudCxcclxuICAgICAqIGFzc2lnbnMgYHhgIGFuZCBgeWAsIGFuZCByZXR1cm5zIHRoZSBtZW1iZXIuXHJcbiAgICAgKlxyXG4gICAgICogSWYgbm8gbWF0Y2hpbmcgbWVtYmVyIGlzIGZvdW5kIGFuZCBgY3JlYXRlSWZOdWxsYCBpcyB0cnVlIGFuZCB0aGUgZ3JvdXAgaXNuJ3QgZnVsbCB0aGVuIGl0IHdpbGwgY3JlYXRlIGEgbmV3IEdhbWUgT2JqZWN0IHVzaW5nIGB4YCwgYHlgLCBga2V5YCwgYGZyYW1lYCwgYW5kIGB2aXNpYmxlYC5cclxuICAgICAqIFVubGVzcyBhIG5ldyBtZW1iZXIgaXMgY3JlYXRlZCwgYGtleWAsIGBmcmFtZWAsIGFuZCBgdmlzaWJsZWAgYXJlIGlnbm9yZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjZ2V0Rmlyc3ROdGhcclxuICAgICAqIEBzaW5jZSAzLjYuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gbnRoIC0gVGhlIG50aCBtYXRjaGluZyBHcm91cCBtZW1iZXIgdG8gc2VhcmNoIGZvci5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3N0YXRlPWZhbHNlXSAtIFRoZSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjYWN0aXZlfSB2YWx1ZSB0byBtYXRjaC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NyZWF0ZUlmTnVsbD1mYWxzZV0gLSBDcmVhdGUgYSBuZXcgR2FtZSBPYmplY3QgaWYgbm8gbWF0Y2hpbmcgbWVtYmVycyBhcmUgZm91bmQsIHVzaW5nIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4XSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ldIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2tleT1kZWZhdWx0S2V5XSAtIFRoZSB0ZXh0dXJlIGtleSBhc3NpZ25lZCB0byBhIG5ldyBHYW1lIE9iamVjdCAoaWYgb25lIGlzIGNyZWF0ZWQpLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWU9ZGVmYXVsdEZyYW1lXSAtIEEgdGV4dHVyZSBmcmFtZSBhc3NpZ25lZCB0byBhIG5ldyBHYW1lIE9iamVjdCAoaWYgb25lIGlzIGNyZWF0ZWQpLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdmlzaWJsZT10cnVlXSAtIFRoZSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVmlzaWJsZSN2aXNpYmxlfSBzdGF0ZSBvZiBhIG5ldyBHYW1lIE9iamVjdCAoaWYgb25lIGlzIGNyZWF0ZWQpLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9hbnl9IFRoZSBmaXJzdCBtYXRjaGluZyBncm91cCBtZW1iZXIsIG9yIGEgbmV3bHkgY3JlYXRlZCBtZW1iZXIsIG9yIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGdldEZpcnN0TnRoOiBmdW5jdGlvbiAobnRoLCBzdGF0ZSwgY3JlYXRlSWZOdWxsLCB4LCB5LCBrZXksIGZyYW1lLCB2aXNpYmxlKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEhhbmRsZXIodHJ1ZSwgbnRoLCBzdGF0ZSwgY3JlYXRlSWZOdWxsLCB4LCB5LCBrZXksIGZyYW1lLCB2aXNpYmxlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FucyB0aGUgR3JvdXAgZm9yIHRoZSBsYXN0IG1lbWJlciB0aGF0IGhhcyBhbiB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjYWN0aXZlfSBzdGF0ZSBtYXRjaGluZyB0aGUgYXJndW1lbnQsXHJcbiAgICAgKiBhc3NpZ25zIGB4YCBhbmQgYHlgLCBhbmQgcmV0dXJucyB0aGUgbWVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIG1hdGNoaW5nIG1lbWJlciBpcyBmb3VuZCBhbmQgYGNyZWF0ZUlmTnVsbGAgaXMgdHJ1ZSBhbmQgdGhlIGdyb3VwIGlzbid0IGZ1bGwgdGhlbiBpdCB3aWxsIGNyZWF0ZSBhIG5ldyBHYW1lIE9iamVjdCB1c2luZyBgeGAsIGB5YCwgYGtleWAsIGBmcmFtZWAsIGFuZCBgdmlzaWJsZWAuXHJcbiAgICAgKiBVbmxlc3MgYSBuZXcgbWVtYmVyIGlzIGNyZWF0ZWQsIGBrZXlgLCBgZnJhbWVgLCBhbmQgYHZpc2libGVgIGFyZSBpZ25vcmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2dldExhc3RcclxuICAgICAqIEBzaW5jZSAzLjYuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3N0YXRlPWZhbHNlXSAtIFRoZSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjYWN0aXZlfSB2YWx1ZSB0byBtYXRjaC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NyZWF0ZUlmTnVsbD1mYWxzZV0gLSBDcmVhdGUgYSBuZXcgR2FtZSBPYmplY3QgaWYgbm8gbWF0Y2hpbmcgbWVtYmVycyBhcmUgZm91bmQsIHVzaW5nIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4XSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ldIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2tleT1kZWZhdWx0S2V5XSAtIFRoZSB0ZXh0dXJlIGtleSBhc3NpZ25lZCB0byBhIG5ldyBHYW1lIE9iamVjdCAoaWYgb25lIGlzIGNyZWF0ZWQpLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWU9ZGVmYXVsdEZyYW1lXSAtIEEgdGV4dHVyZSBmcmFtZSBhc3NpZ25lZCB0byBhIG5ldyBHYW1lIE9iamVjdCAoaWYgb25lIGlzIGNyZWF0ZWQpLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdmlzaWJsZT10cnVlXSAtIFRoZSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVmlzaWJsZSN2aXNpYmxlfSBzdGF0ZSBvZiBhIG5ldyBHYW1lIE9iamVjdCAoaWYgb25lIGlzIGNyZWF0ZWQpLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9hbnl9IFRoZSBmaXJzdCBtYXRjaGluZyBncm91cCBtZW1iZXIsIG9yIGEgbmV3bHkgY3JlYXRlZCBtZW1iZXIsIG9yIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGdldExhc3Q6IGZ1bmN0aW9uIChzdGF0ZSwgY3JlYXRlSWZOdWxsLCB4LCB5LCBrZXksIGZyYW1lLCB2aXNpYmxlKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEhhbmRsZXIoZmFsc2UsIDEsIHN0YXRlLCBjcmVhdGVJZk51bGwsIHgsIHksIGtleSwgZnJhbWUsIHZpc2libGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYW5zIHRoZSBHcm91cCBmb3IgdGhlIGxhc3QgbnRoIG1lbWJlciB0aGF0IGhhcyBhbiB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjYWN0aXZlfSBzdGF0ZSBtYXRjaGluZyB0aGUgYXJndW1lbnQsXHJcbiAgICAgKiBhc3NpZ25zIGB4YCBhbmQgYHlgLCBhbmQgcmV0dXJucyB0aGUgbWVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIG1hdGNoaW5nIG1lbWJlciBpcyBmb3VuZCBhbmQgYGNyZWF0ZUlmTnVsbGAgaXMgdHJ1ZSBhbmQgdGhlIGdyb3VwIGlzbid0IGZ1bGwgdGhlbiBpdCB3aWxsIGNyZWF0ZSBhIG5ldyBHYW1lIE9iamVjdCB1c2luZyBgeGAsIGB5YCwgYGtleWAsIGBmcmFtZWAsIGFuZCBgdmlzaWJsZWAuXHJcbiAgICAgKiBVbmxlc3MgYSBuZXcgbWVtYmVyIGlzIGNyZWF0ZWQsIGBrZXlgLCBgZnJhbWVgLCBhbmQgYHZpc2libGVgIGFyZSBpZ25vcmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2dldExhc3ROdGhcclxuICAgICAqIEBzaW5jZSAzLjYuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gbnRoIC0gVGhlIG50aCBtYXRjaGluZyBHcm91cCBtZW1iZXIgdG8gc2VhcmNoIGZvci5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3N0YXRlPWZhbHNlXSAtIFRoZSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjYWN0aXZlfSB2YWx1ZSB0byBtYXRjaC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NyZWF0ZUlmTnVsbD1mYWxzZV0gLSBDcmVhdGUgYSBuZXcgR2FtZSBPYmplY3QgaWYgbm8gbWF0Y2hpbmcgbWVtYmVycyBhcmUgZm91bmQsIHVzaW5nIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4XSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ldIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2tleT1kZWZhdWx0S2V5XSAtIFRoZSB0ZXh0dXJlIGtleSBhc3NpZ25lZCB0byBhIG5ldyBHYW1lIE9iamVjdCAoaWYgb25lIGlzIGNyZWF0ZWQpLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWU9ZGVmYXVsdEZyYW1lXSAtIEEgdGV4dHVyZSBmcmFtZSBhc3NpZ25lZCB0byBhIG5ldyBHYW1lIE9iamVjdCAoaWYgb25lIGlzIGNyZWF0ZWQpLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdmlzaWJsZT10cnVlXSAtIFRoZSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVmlzaWJsZSN2aXNpYmxlfSBzdGF0ZSBvZiBhIG5ldyBHYW1lIE9iamVjdCAoaWYgb25lIGlzIGNyZWF0ZWQpLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gez9hbnl9IFRoZSBmaXJzdCBtYXRjaGluZyBncm91cCBtZW1iZXIsIG9yIGEgbmV3bHkgY3JlYXRlZCBtZW1iZXIsIG9yIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGdldExhc3ROdGg6IGZ1bmN0aW9uIChudGgsIHN0YXRlLCBjcmVhdGVJZk51bGwsIHgsIHksIGtleSwgZnJhbWUsIHZpc2libGUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SGFuZGxlcihmYWxzZSwgbnRoLCBzdGF0ZSwgY3JlYXRlSWZOdWxsLCB4LCB5LCBrZXksIGZyYW1lLCB2aXNpYmxlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FucyB0aGUgZ3JvdXAgZm9yIHRoZSBsYXN0IG1lbWJlciB0aGF0IGhhcyBhbiB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjYWN0aXZlfSBzdGF0ZSBtYXRjaGluZyB0aGUgYXJndW1lbnQsXHJcbiAgICAgKiBhc3NpZ25zIGB4YCBhbmQgYHlgLCBhbmQgcmV0dXJucyB0aGUgbWVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIG1hdGNoaW5nIG1lbWJlciBpcyBmb3VuZCBhbmQgYGNyZWF0ZUlmTnVsbGAgaXMgdHJ1ZSBhbmQgdGhlIGdyb3VwIGlzbid0IGZ1bGwgdGhlbiBpdCB3aWxsIGNyZWF0ZSBhIG5ldyBHYW1lIE9iamVjdCB1c2luZyBgeGAsIGB5YCwgYGtleWAsIGBmcmFtZWAsIGFuZCBgdmlzaWJsZWAuXHJcbiAgICAgKiBVbmxlc3MgYSBuZXcgbWVtYmVyIGlzIGNyZWF0ZWQsIGBrZXlgLCBgZnJhbWVgLCBhbmQgYHZpc2libGVgIGFyZSBpZ25vcmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2dldEhhbmRsZXJcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy42LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZvcndhcmRzIC0gU2VhcmNoIGZyb250IHRvIGJhY2sgb3IgYmFjayB0byBmcm9udD9cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gbnRoIC0gU3RvcCBtYXRjaGluZyBhZnRlciBudGggc3VjY2Vzc2Z1bCBtYXRjaGVzLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbc3RhdGU9ZmFsc2VdIC0gVGhlIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNhY3RpdmV9IHZhbHVlIHRvIG1hdGNoLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbY3JlYXRlSWZOdWxsPWZhbHNlXSAtIENyZWF0ZSBhIG5ldyBHYW1lIE9iamVjdCBpZiBubyBtYXRjaGluZyBtZW1iZXJzIGFyZSBmb3VuZCwgdXNpbmcgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3hdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeV0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBba2V5PWRlZmF1bHRLZXldIC0gVGhlIHRleHR1cmUga2V5IGFzc2lnbmVkIHRvIGEgbmV3IEdhbWUgT2JqZWN0IChpZiBvbmUgaXMgY3JlYXRlZCkuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZT1kZWZhdWx0RnJhbWVdIC0gQSB0ZXh0dXJlIGZyYW1lIGFzc2lnbmVkIHRvIGEgbmV3IEdhbWUgT2JqZWN0IChpZiBvbmUgaXMgY3JlYXRlZCkuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt2aXNpYmxlPXRydWVdIC0gVGhlIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5WaXNpYmxlI3Zpc2libGV9IHN0YXRlIG9mIGEgbmV3IEdhbWUgT2JqZWN0IChpZiBvbmUgaXMgY3JlYXRlZCkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P2FueX0gVGhlIGZpcnN0IG1hdGNoaW5nIGdyb3VwIG1lbWJlciwgb3IgYSBuZXdseSBjcmVhdGVkIG1lbWJlciwgb3IgbnVsbC5cclxuICAgICAqL1xyXG4gICAgZ2V0SGFuZGxlcjogZnVuY3Rpb24gKGZvcndhcmRzLCBudGgsIHN0YXRlLCBjcmVhdGVJZk51bGwsIHgsIHksIGtleSwgZnJhbWUsIHZpc2libGUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQpIHsgc3RhdGUgPSBmYWxzZTsgfVxyXG4gICAgICAgIGlmIChjcmVhdGVJZk51bGwgPT09IHVuZGVmaW5lZCkgeyBjcmVhdGVJZk51bGwgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICB2YXIgZ2FtZU9iamVjdDtcclxuXHJcbiAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgdmFyIHRvdGFsID0gMDtcclxuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuLmVudHJpZXM7XHJcblxyXG4gICAgICAgIGlmIChmb3J3YXJkcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZ2FtZU9iamVjdCA9IGNoaWxkcmVuW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChnYW1lT2JqZWN0LmFjdGl2ZSA9PT0gc3RhdGUpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWwrKztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRvdGFsID09PSBudGgpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2FtZU9iamVjdCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yIChpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGdhbWVPYmplY3QgPSBjaGlsZHJlbltpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZ2FtZU9iamVjdC5hY3RpdmUgPT09IHN0YXRlKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsKys7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0b3RhbCA9PT0gbnRoKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGdhbWVPYmplY3QgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZ2FtZU9iamVjdClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YoeCkgPT09ICdudW1iZXInKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBnYW1lT2JqZWN0LnggPSB4O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mKHkpID09PSAnbnVtYmVyJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZ2FtZU9iamVjdC55ID0geTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGdhbWVPYmplY3Q7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgR290IHRoaXMgZmFyPyBXZSBuZWVkIHRvIGNyZWF0ZSBvciBiYWlsXHJcbiAgICAgICAgaWYgKGNyZWF0ZUlmTnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZSh4LCB5LCBrZXksIGZyYW1lLCB2aXNpYmxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYW5zIHRoZSBncm91cCBmb3IgdGhlIGZpcnN0IG1lbWJlciB0aGF0IGhhcyBhbiB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3QjYWN0aXZlfSBzdGF0ZSBzZXQgdG8gYGZhbHNlYCxcclxuICAgICAqIGFzc2lnbnMgYHhgIGFuZCBgeWAsIGFuZCByZXR1cm5zIHRoZSBtZW1iZXIuXHJcbiAgICAgKlxyXG4gICAgICogSWYgbm8gaW5hY3RpdmUgbWVtYmVyIGlzIGZvdW5kIGFuZCB0aGUgZ3JvdXAgaXNuJ3QgZnVsbCB0aGVuIGl0IHdpbGwgY3JlYXRlIGEgbmV3IEdhbWUgT2JqZWN0IHVzaW5nIGB4YCwgYHlgLCBga2V5YCwgYGZyYW1lYCwgYW5kIGB2aXNpYmxlYC5cclxuICAgICAqIFRoZSBuZXcgR2FtZSBPYmplY3Qgd2lsbCBoYXZlIGl0cyBhY3RpdmUgc3RhdGUgc2V0IHRvIGB0cnVlYC5cclxuICAgICAqIFVubGVzcyBhIG5ldyBtZW1iZXIgaXMgY3JlYXRlZCwgYGtleWAsIGBmcmFtZWAsIGFuZCBgdmlzaWJsZWAgYXJlIGlnbm9yZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjZ2V0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3hdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeV0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBba2V5PWRlZmF1bHRLZXldIC0gVGhlIHRleHR1cmUga2V5IGFzc2lnbmVkIHRvIGEgbmV3IEdhbWUgT2JqZWN0IChpZiBvbmUgaXMgY3JlYXRlZCkuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZT1kZWZhdWx0RnJhbWVdIC0gQSB0ZXh0dXJlIGZyYW1lIGFzc2lnbmVkIHRvIGEgbmV3IEdhbWUgT2JqZWN0IChpZiBvbmUgaXMgY3JlYXRlZCkuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt2aXNpYmxlPXRydWVdIC0gVGhlIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5WaXNpYmxlI3Zpc2libGV9IHN0YXRlIG9mIGEgbmV3IEdhbWUgT2JqZWN0IChpZiBvbmUgaXMgY3JlYXRlZCkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7P2FueX0gVGhlIGZpcnN0IGluYWN0aXZlIGdyb3VwIG1lbWJlciwgb3IgYSBuZXdseSBjcmVhdGVkIG1lbWJlciwgb3IgbnVsbC5cclxuICAgICAqL1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoeCwgeSwga2V5LCBmcmFtZSwgdmlzaWJsZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRGaXJzdChmYWxzZSwgdHJ1ZSwgeCwgeSwga2V5LCBmcmFtZSwgdmlzaWJsZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbnMgdGhlIGdyb3VwIGZvciB0aGUgZmlyc3QgbWVtYmVyIHRoYXQgaGFzIGFuIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNhY3RpdmV9IHN0YXRlIHNldCB0byBgdHJ1ZWAsXHJcbiAgICAgKiBhc3NpZ25zIGB4YCBhbmQgYHlgLCBhbmQgcmV0dXJucyB0aGUgbWVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIGFjdGl2ZSBtZW1iZXIgaXMgZm91bmQgYW5kIGBjcmVhdGVJZk51bGxgIGlzIGB0cnVlYCBhbmQgdGhlIGdyb3VwIGlzbid0IGZ1bGwgdGhlbiBpdCB3aWxsIGNyZWF0ZSBhIG5ldyBvbmUgdXNpbmcgYHhgLCBgeWAsIGBrZXlgLCBgZnJhbWVgLCBhbmQgYHZpc2libGVgLlxyXG4gICAgICogVW5sZXNzIGEgbmV3IG1lbWJlciBpcyBjcmVhdGVkLCBga2V5YCwgYGZyYW1lYCwgYW5kIGB2aXNpYmxlYCBhcmUgaWdub3JlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNnZXRGaXJzdEFsaXZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjcmVhdGVJZk51bGw9ZmFsc2VdIC0gQ3JlYXRlIGEgbmV3IEdhbWUgT2JqZWN0IGlmIG5vIG1hdGNoaW5nIG1lbWJlcnMgYXJlIGZvdW5kLCB1c2luZyB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5XSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtrZXk9ZGVmYXVsdEtleV0gLSBUaGUgdGV4dHVyZSBrZXkgYXNzaWduZWQgdG8gYSBuZXcgR2FtZSBPYmplY3QgKGlmIG9uZSBpcyBjcmVhdGVkKS5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lPWRlZmF1bHRGcmFtZV0gLSBBIHRleHR1cmUgZnJhbWUgYXNzaWduZWQgdG8gYSBuZXcgR2FtZSBPYmplY3QgKGlmIG9uZSBpcyBjcmVhdGVkKS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Zpc2libGU9dHJ1ZV0gLSBUaGUge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGUjdmlzaWJsZX0gc3RhdGUgb2YgYSBuZXcgR2FtZSBPYmplY3QgKGlmIG9uZSBpcyBjcmVhdGVkKS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHthbnl9IFRoZSBmaXJzdCBhY3RpdmUgZ3JvdXAgbWVtYmVyLCBvciBhIG5ld2x5IGNyZWF0ZWQgbWVtYmVyLCBvciBudWxsLlxyXG4gICAgICovXHJcbiAgICBnZXRGaXJzdEFsaXZlOiBmdW5jdGlvbiAoY3JlYXRlSWZOdWxsLCB4LCB5LCBrZXksIGZyYW1lLCB2aXNpYmxlKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEZpcnN0KHRydWUsIGNyZWF0ZUlmTnVsbCwgeCwgeSwga2V5LCBmcmFtZSwgdmlzaWJsZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbnMgdGhlIGdyb3VwIGZvciB0aGUgZmlyc3QgbWVtYmVyIHRoYXQgaGFzIGFuIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNhY3RpdmV9IHN0YXRlIHNldCB0byBgZmFsc2VgLFxyXG4gICAgICogYXNzaWducyBgeGAgYW5kIGB5YCwgYW5kIHJldHVybnMgdGhlIG1lbWJlci5cclxuICAgICAqXHJcbiAgICAgKiBJZiBubyBpbmFjdGl2ZSBtZW1iZXIgaXMgZm91bmQgYW5kIGBjcmVhdGVJZk51bGxgIGlzIGB0cnVlYCBhbmQgdGhlIGdyb3VwIGlzbid0IGZ1bGwgdGhlbiBpdCB3aWxsIGNyZWF0ZSBhIG5ldyBvbmUgdXNpbmcgYHhgLCBgeWAsIGBrZXlgLCBgZnJhbWVgLCBhbmQgYHZpc2libGVgLlxyXG4gICAgICogVGhlIG5ldyBHYW1lIE9iamVjdCB3aWxsIGhhdmUgYW4gYWN0aXZlIHN0YXRlIHNldCB0byBgdHJ1ZWAuXHJcbiAgICAgKiBVbmxlc3MgYSBuZXcgbWVtYmVyIGlzIGNyZWF0ZWQsIGBrZXlgLCBgZnJhbWVgLCBhbmQgYHZpc2libGVgIGFyZSBpZ25vcmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2dldEZpcnN0RGVhZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbY3JlYXRlSWZOdWxsPWZhbHNlXSAtIENyZWF0ZSBhIG5ldyBHYW1lIE9iamVjdCBpZiBubyBtYXRjaGluZyBtZW1iZXJzIGFyZSBmb3VuZCwgdXNpbmcgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3hdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeV0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBba2V5PWRlZmF1bHRLZXldIC0gVGhlIHRleHR1cmUga2V5IGFzc2lnbmVkIHRvIGEgbmV3IEdhbWUgT2JqZWN0IChpZiBvbmUgaXMgY3JlYXRlZCkuXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZT1kZWZhdWx0RnJhbWVdIC0gQSB0ZXh0dXJlIGZyYW1lIGFzc2lnbmVkIHRvIGEgbmV3IEdhbWUgT2JqZWN0IChpZiBvbmUgaXMgY3JlYXRlZCkuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt2aXNpYmxlPXRydWVdIC0gVGhlIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5WaXNpYmxlI3Zpc2libGV9IHN0YXRlIG9mIGEgbmV3IEdhbWUgT2JqZWN0IChpZiBvbmUgaXMgY3JlYXRlZCkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7YW55fSBUaGUgZmlyc3QgaW5hY3RpdmUgZ3JvdXAgbWVtYmVyLCBvciBhIG5ld2x5IGNyZWF0ZWQgbWVtYmVyLCBvciBudWxsLlxyXG4gICAgICovXHJcbiAgICBnZXRGaXJzdERlYWQ6IGZ1bmN0aW9uIChjcmVhdGVJZk51bGwsIHgsIHksIGtleSwgZnJhbWUsIHZpc2libGUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rmlyc3QoZmFsc2UsIGNyZWF0ZUlmTnVsbCwgeCwgeSwga2V5LCBmcmFtZSwgdmlzaWJsZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICoge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFuaW1hdGlvbiNwbGF5IFBsYXlzfSBhbiBhbmltYXRpb24gZm9yIGFsbCBtZW1iZXJzIG9mIHRoaXMgZ3JvdXAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjcGxheUFuaW1hdGlvblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBzdHJpbmctYmFzZWQga2V5IG9mIHRoZSBhbmltYXRpb24gdG8gcGxheS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RhcnRGcmFtZT0wXSAtIE9wdGlvbmFsbHkgc3RhcnQgdGhlIGFuaW1hdGlvbiBwbGF5aW5nIGZyb20gdGhpcyBmcmFtZSBpbmRleC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXB9IFRoaXMgR3JvdXAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwbGF5QW5pbWF0aW9uOiBmdW5jdGlvbiAoa2V5LCBzdGFydEZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIEFjdGlvbnMuUGxheUFuaW1hdGlvbih0aGlzLmNoaWxkcmVuLmVudHJpZXMsIGtleSwgc3RhcnRGcmFtZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdGhpcyBncm91cCdzIHNpemUgYXQgaXRzIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjbWF4U2l6ZSBtYXhpbXVtfS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNpc0Z1bGxcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIG51bWJlciBvZiBtZW1iZXJzIGVxdWFscyB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI21heFNpemV9LlxyXG4gICAgICovXHJcbiAgICBpc0Z1bGw6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMubWF4U2l6ZSA9PT0gLTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5jaGlsZHJlbi5zaXplID49IHRoaXMubWF4U2l6ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvdW50cyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSAob3IgaW5hY3RpdmUpIGdyb3VwIG1lbWJlcnMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjY291bnRBY3RpdmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ZhbHVlPXRydWVdIC0gQ291bnQgYWN0aXZlICh0cnVlKSBvciBpbmFjdGl2ZSAoZmFsc2UpIGdyb3VwIG1lbWJlcnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gVGhlIG51bWJlciBvZiBncm91cCBtZW1iZXJzIHdpdGggYW4gYWN0aXZlIHN0YXRlIG1hdGNoaW5nIHRoZSBgYWN0aXZlYCBhcmd1bWVudC5cclxuICAgICAqL1xyXG4gICAgY291bnRBY3RpdmU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdmFyIHRvdGFsID0gMDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLnNpemU7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmVudHJpZXNbaV0uYWN0aXZlID09PSB2YWx1ZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdG90YWwrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRvdGFsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvdW50cyB0aGUgbnVtYmVyIG9mIGluLXVzZSAoYWN0aXZlKSBncm91cCBtZW1iZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2dldFRvdGFsVXNlZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gVGhlIG51bWJlciBvZiBncm91cCBtZW1iZXJzIHdpdGggYW4gYWN0aXZlIHN0YXRlIG9mIHRydWUuXHJcbiAgICAgKi9cclxuICAgIGdldFRvdGFsVXNlZDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb3VudEFjdGl2ZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkaWZmZXJlbmNlIG9mIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjbWF4U2l6ZX0gYW5kIHRoZSBudW1iZXIgb2YgYWN0aXZlIGdyb3VwIG1lbWJlcnMuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgZ3JvdXAgbWVtYmVycyB0aGF0IGNvdWxkIGJlIGNyZWF0ZWQgb3IgcmVhY3RpdmF0ZWQgYmVmb3JlIHJlYWNoaW5nIHRoZSBzaXplIGxpbWl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2dldFRvdGFsRnJlZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gbWF4U2l6ZSBtaW51cyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBncm91cCBudW1iZXJzOyBvciBhIGxhcmdlIG51bWJlciAoaWYgbWF4U2l6ZSBpcyAtMSkuXHJcbiAgICAgKi9cclxuICAgIGdldFRvdGFsRnJlZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgdXNlZCA9IHRoaXMuZ2V0VG90YWxVc2VkKCk7XHJcbiAgICAgICAgdmFyIGNhcGFjaXR5ID0gKHRoaXMubWF4U2l6ZSA9PT0gLTEpID8gOTk5OTk5OTk5OTk5IDogdGhpcy5tYXhTaXplO1xyXG5cclxuICAgICAgICByZXR1cm4gKGNhcGFjaXR5IC0gdXNlZCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcHJvcGVydHkgYXMgZGVmaW5lZCBpbiBga2V5YCBvZiBlYWNoIGdyb3VwIG1lbWJlciB0byB0aGUgZ2l2ZW4gdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjcHJvcGVydHlWYWx1ZVNldFxyXG4gICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgcHJvcGVydHkgdG8gYmUgdXBkYXRlZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBwcm9wZXJ0eSB0by5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGB2YWx1ZWAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2luZGV4PTBdIC0gQW4gb3B0aW9uYWwgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHdpdGhpbiB0aGUgaXRlbXMgYXJyYXkuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJlY3Rpb249MV0gLSBUaGUgZGlyZWN0aW9uIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkuIDEgaXMgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLCAtMSBmcm9tIGVuZCB0byBiZWdpbm5pbmcuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfSBUaGlzIEdyb3VwIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHJvcGVydHlWYWx1ZVNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pXHJcbiAgICB7XHJcbiAgICAgICAgQWN0aW9ucy5Qcm9wZXJ0eVZhbHVlU2V0KHRoaXMuY2hpbGRyZW4uZW50cmllcywga2V5LCB2YWx1ZSwgc3RlcCwgaW5kZXgsIGRpcmVjdGlvbik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBwcm9wZXJ0eSBhcyBkZWZpbmVkIGluIGBrZXlgIG9mIGVhY2ggZ3JvdXAgbWVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI3Byb3BlcnR5VmFsdWVJbmNcclxuICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHByb3BlcnR5IHRvIGJlIHVwZGF0ZWQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgcHJvcGVydHkgdG8uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtpbmRleD0wXSAtIEFuIG9wdGlvbmFsIG9mZnNldCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbSB3aXRoaW4gdGhlIGl0ZW1zIGFycmF5LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZGlyZWN0aW9uPTFdIC0gVGhlIGRpcmVjdGlvbiB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGFycmF5LiAxIGlzIGZyb20gYmVnaW5uaW5nIHRvIGVuZCwgLTEgZnJvbSBlbmQgdG8gYmVnaW5uaW5nLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Hcm91cH0gVGhpcyBHcm91cCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHByb3BlcnR5VmFsdWVJbmM6IGZ1bmN0aW9uIChrZXksIHZhbHVlLCBzdGVwLCBpbmRleCwgZGlyZWN0aW9uKVxyXG4gICAge1xyXG4gICAgICAgIEFjdGlvbnMuUHJvcGVydHlWYWx1ZUluYyh0aGlzLmNoaWxkcmVuLmVudHJpZXMsIGtleSwgdmFsdWUsIHN0ZXAsIGluZGV4LCBkaXJlY3Rpb24pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB4IG9mIGVhY2ggZ3JvdXAgbWVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI3NldFhcclxuICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgcHJvcGVydHkgdG8uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfSBUaGlzIEdyb3VwIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0WDogZnVuY3Rpb24gKHZhbHVlLCBzdGVwKVxyXG4gICAge1xyXG4gICAgICAgIEFjdGlvbnMuU2V0WCh0aGlzLmNoaWxkcmVuLmVudHJpZXMsIHZhbHVlLCBzdGVwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgeSBvZiBlYWNoIGdyb3VwIG1lbWJlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNzZXRZXHJcbiAgICAgKiBAc2luY2UgMy4yMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBzZXQgdGhlIHByb3BlcnR5IHRvLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYHZhbHVlYCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Hcm91cH0gVGhpcyBHcm91cCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFk6IGZ1bmN0aW9uICh2YWx1ZSwgc3RlcClcclxuICAgIHtcclxuICAgICAgICBBY3Rpb25zLlNldFkodGhpcy5jaGlsZHJlbi5lbnRyaWVzLCB2YWx1ZSwgc3RlcCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHgsIHkgb2YgZWFjaCBncm91cCBtZW1iZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjc2V0WFlcclxuICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBgeGAgcHJvcGVydHkgdG8uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9eF0gLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgYHlgIHByb3BlcnR5IHRvLiBJZiBgdW5kZWZpbmVkYCBvciBgbnVsbGAgaXQgdXNlcyB0aGUgYHhgIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwWD0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGB4YCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwWT0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGB5YCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Hcm91cH0gVGhpcyBHcm91cCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFhZOiBmdW5jdGlvbiAoeCwgeSwgc3RlcFgsIHN0ZXBZKVxyXG4gICAge1xyXG4gICAgICAgIEFjdGlvbnMuU2V0WFkodGhpcy5jaGlsZHJlbi5lbnRyaWVzLCB4LCB5LCBzdGVwWCwgc3RlcFkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgeCBvZiBlYWNoIGdyb3VwIG1lbWJlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNpbmNYXHJcbiAgICAgKiBAc2luY2UgMy4yMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBiZSBhZGRlZCB0byB0aGUgYHhgIHByb3BlcnR5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYHZhbHVlYCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Hcm91cH0gVGhpcyBHcm91cCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGluY1g6IGZ1bmN0aW9uICh2YWx1ZSwgc3RlcClcclxuICAgIHtcclxuICAgICAgICBBY3Rpb25zLkluY1godGhpcy5jaGlsZHJlbi5lbnRyaWVzLCB2YWx1ZSwgc3RlcCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSB5IG9mIGVhY2ggZ3JvdXAgbWVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2luY1lcclxuICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgYW1vdW50IHRvIGJlIGFkZGVkIHRvIHRoZSBgeWAgcHJvcGVydHkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfSBUaGlzIEdyb3VwIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgaW5jWTogZnVuY3Rpb24gKHZhbHVlLCBzdGVwKVxyXG4gICAge1xyXG4gICAgICAgIEFjdGlvbnMuSW5jWSh0aGlzLmNoaWxkcmVuLmVudHJpZXMsIHZhbHVlLCBzdGVwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIHgsIHkgb2YgZWFjaCBncm91cCBtZW1iZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjaW5jWFlcclxuICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBhbW91bnQgdG8gYmUgYWRkZWQgdG8gdGhlIGB4YCBwcm9wZXJ0eS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT14XSAtIFRoZSBhbW91bnQgdG8gYmUgYWRkZWQgdG8gdGhlIGB5YCBwcm9wZXJ0eS4gSWYgYHVuZGVmaW5lZGAgb3IgYG51bGxgIGl0IHVzZXMgdGhlIGB4YCB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFg9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgeGAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFk9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgeWAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXB9IFRoaXMgR3JvdXAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBpbmNYWTogZnVuY3Rpb24gKHgsIHksIHN0ZXBYLCBzdGVwWSlcclxuICAgIHtcclxuICAgICAgICBBY3Rpb25zLkluY1hZKHRoaXMuY2hpbGRyZW4uZW50cmllcywgeCwgeSwgc3RlcFgsIHN0ZXBZKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXRlcmF0ZSB0aHJvdWdoIHRoZSBncm91cCBtZW1iZXJzIGNoYW5naW5nIHRoZSBwb3NpdGlvbiBvZiBlYWNoIGVsZW1lbnQgdG8gYmUgdGhhdCBvZiB0aGUgZWxlbWVudCB0aGF0IGNhbWUgYmVmb3JlXHJcbiAgICAgKiBpdCBpbiB0aGUgYXJyYXkgKG9yIGFmdGVyIGl0IGlmIGRpcmVjdGlvbiA9IDEpXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmaXJzdCBncm91cCBtZW1iZXIgcG9zaXRpb24gaXMgc2V0IHRvIHgveS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNzaGlmdFBvc2l0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4yMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIHRvIHBsYWNlIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBhcnJheSBhdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSB0byBwbGFjZSB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgYXJyYXkgYXQuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtkaXJlY3Rpb249MF0gLSBUaGUgaXRlcmF0aW9uIGRpcmVjdGlvbi4gMCA9IGZpcnN0IHRvIGxhc3QgYW5kIDEgPSBsYXN0IHRvIGZpcnN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Hcm91cH0gVGhpcyBHcm91cCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNoaWZ0UG9zaXRpb246IGZ1bmN0aW9uICh4LCB5LCBkaXJlY3Rpb24pXHJcbiAgICB7XHJcbiAgICAgICAgQWN0aW9ucy5TaGlmdFBvc2l0aW9uKHRoaXMuY2hpbGRyZW4uZW50cmllcywgeCwgeSwgZGlyZWN0aW9uKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYW5nbGUgb2YgZWFjaCBncm91cCBtZW1iZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjYW5nbGVcclxuICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgYW5nbGUgdG8sIGluIGRlZ3JlZXMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfSBUaGlzIEdyb3VwIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgYW5nbGU6IGZ1bmN0aW9uICh2YWx1ZSwgc3RlcClcclxuICAgIHtcclxuICAgICAgICBBY3Rpb25zLkFuZ2xlKHRoaXMuY2hpbGRyZW4uZW50cmllcywgdmFsdWUsIHN0ZXApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSByb3RhdGlvbiBvZiBlYWNoIGdyb3VwIG1lbWJlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNyb3RhdGVcclxuICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgcm90YXRpb24gdG8sIGluIHJhZGlhbnMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgdmFsdWVgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfSBUaGlzIEdyb3VwIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcm90YXRlOiBmdW5jdGlvbiAodmFsdWUsIHN0ZXApXHJcbiAgICB7XHJcbiAgICAgICAgQWN0aW9ucy5Sb3RhdGUodGhpcy5jaGlsZHJlbi5lbnRyaWVzLCB2YWx1ZSwgc3RlcCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZXMgZWFjaCBncm91cCBtZW1iZXIgYXJvdW5kIHRoZSBnaXZlbiBwb2ludCBieSB0aGUgZ2l2ZW4gYW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjcm90YXRlQXJvdW5kXHJcbiAgICAgKiBAc2luY2UgMy4yMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTWF0aC5WZWN0b3IyTGlrZX0gcG9pbnQgLSBBbnkgb2JqZWN0IHdpdGggcHVibGljIGB4YCBhbmQgYHlgIHByb3BlcnRpZXMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgYW5nbGUgdG8gcm90YXRlIGJ5LCBpbiByYWRpYW5zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Hcm91cH0gVGhpcyBHcm91cCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZUFyb3VuZDogZnVuY3Rpb24gKHBvaW50LCBhbmdsZSlcclxuICAgIHtcclxuICAgICAgICBBY3Rpb25zLlJvdGF0ZUFyb3VuZCh0aGlzLmNoaWxkcmVuLmVudHJpZXMsIHBvaW50LCBhbmdsZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZXMgZWFjaCBncm91cCBtZW1iZXIgYXJvdW5kIHRoZSBnaXZlbiBwb2ludCBieSB0aGUgZ2l2ZW4gYW5nbGUgYW5kIGRpc3RhbmNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI3JvdGF0ZUFyb3VuZERpc3RhbmNlXHJcbiAgICAgKiBAc2luY2UgMy4yMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTWF0aC5WZWN0b3IyTGlrZX0gcG9pbnQgLSBBbnkgb2JqZWN0IHdpdGggcHVibGljIGB4YCBhbmQgYHlgIHByb3BlcnRpZXMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgYW5nbGUgdG8gcm90YXRlIGJ5LCBpbiByYWRpYW5zLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlIC0gVGhlIGRpc3RhbmNlIGZyb20gdGhlIHBvaW50IG9mIHJvdGF0aW9uIGluIHBpeGVscy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXB9IFRoaXMgR3JvdXAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByb3RhdGVBcm91bmREaXN0YW5jZTogZnVuY3Rpb24gKHBvaW50LCBhbmdsZSwgZGlzdGFuY2UpXHJcbiAgICB7XHJcbiAgICAgICAgQWN0aW9ucy5Sb3RhdGVBcm91bmREaXN0YW5jZSh0aGlzLmNoaWxkcmVuLmVudHJpZXMsIHBvaW50LCBhbmdsZSwgZGlzdGFuY2UpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBhbHBoYSBvZiBlYWNoIGdyb3VwIG1lbWJlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNzZXRBbHBoYVxyXG4gICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBhbHBoYSB0by5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGB2YWx1ZWAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXB9IFRoaXMgR3JvdXAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRBbHBoYTogZnVuY3Rpb24gKHZhbHVlLCBzdGVwKVxyXG4gICAge1xyXG4gICAgICAgIEFjdGlvbnMuU2V0QWxwaGEodGhpcy5jaGlsZHJlbi5lbnRyaWVzLCB2YWx1ZSwgc3RlcCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHRpbnQgb2YgZWFjaCBncm91cCBtZW1iZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjc2V0VGludFxyXG4gICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0b3BMZWZ0IC0gVGhlIHRpbnQgYmVpbmcgYXBwbGllZCB0byB0b3AtbGVmdCBjb3JuZXIgb2YgaXRlbS4gSWYgb3RoZXIgcGFyYW1ldGVycyBhcmUgZ2l2ZW4gbm8gdmFsdWUsIHRoaXMgdGludCB3aWxsIGJlIGFwcGxpZWQgdG8gd2hvbGUgaXRlbS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdG9wUmlnaHRdIC0gVGhlIHRpbnQgdG8gYmUgYXBwbGllZCB0byB0b3AtcmlnaHQgY29ybmVyIG9mIGl0ZW0uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2JvdHRvbUxlZnRdIC0gVGhlIHRpbnQgdG8gYmUgYXBwbGllZCB0byB0aGUgYm90dG9tLWxlZnQgY29ybmVyIG9mIGl0ZW0uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2JvdHRvbVJpZ2h0XSAtIFRoZSB0aW50IHRvIGJlIGFwcGxpZWQgdG8gdGhlIGJvdHRvbS1yaWdodCBjb3JuZXIgb2YgaXRlbS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXB9IFRoaXMgR3JvdXAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRUaW50OiBmdW5jdGlvbiAodG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIEFjdGlvbnMuU2V0VGludCh0aGlzLmNoaWxkcmVuLmVudHJpZXMsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIG9yaWdpblgsIG9yaWdpblkgb2YgZWFjaCBncm91cCBtZW1iZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjc2V0T3JpZ2luXHJcbiAgICAgKiBAc2luY2UgMy4yMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9yaWdpblggLSBUaGUgYW1vdW50IHRvIHNldCB0aGUgYG9yaWdpblhgIHByb3BlcnR5IHRvLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcmlnaW5ZXSAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBgb3JpZ2luWWAgcHJvcGVydHkgdG8uIElmIGB1bmRlZmluZWRgIG9yIGBudWxsYCBpdCB1c2VzIHRoZSBgb3JpZ2luWGAgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0ZXBYPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYG9yaWdpblhgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0ZXBZPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYG9yaWdpbllgIGFtb3VudCwgbXVsdGlwbGllZCBieSB0aGUgaXRlcmF0aW9uIGNvdW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfSBUaGlzIEdyb3VwIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0T3JpZ2luOiBmdW5jdGlvbiAob3JpZ2luWCwgb3JpZ2luWSwgc3RlcFgsIHN0ZXBZKVxyXG4gICAge1xyXG4gICAgICAgIEFjdGlvbnMuU2V0T3JpZ2luKHRoaXMuY2hpbGRyZW4uZW50cmllcywgb3JpZ2luWCwgb3JpZ2luWSwgc3RlcFgsIHN0ZXBZKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgc2NhbGVYIG9mIGVhY2ggZ3JvdXAgbWVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI3NjYWxlWFxyXG4gICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBwcm9wZXJ0eSB0by5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGB2YWx1ZWAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXB9IFRoaXMgR3JvdXAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzY2FsZVg6IGZ1bmN0aW9uICh2YWx1ZSwgc3RlcClcclxuICAgIHtcclxuICAgICAgICBBY3Rpb25zLlNjYWxlWCh0aGlzLmNoaWxkcmVuLmVudHJpZXMsIHZhbHVlLCBzdGVwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgc2NhbGVZIG9mIGVhY2ggZ3JvdXAgbWVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI3NjYWxlWVxyXG4gICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBwcm9wZXJ0eSB0by5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0wXSAtIFRoaXMgaXMgYWRkZWQgdG8gdGhlIGB2YWx1ZWAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXB9IFRoaXMgR3JvdXAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzY2FsZVk6IGZ1bmN0aW9uICh2YWx1ZSwgc3RlcClcclxuICAgIHtcclxuICAgICAgICBBY3Rpb25zLlNjYWxlWSh0aGlzLmNoaWxkcmVuLmVudHJpZXMsIHZhbHVlLCBzdGVwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgc2NhbGVYLCBzY2FsZVkgb2YgZWFjaCBncm91cCBtZW1iZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjc2NhbGVYWVxyXG4gICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZVggLSBUaGUgYW1vdW50IHRvIGJlIGFkZGVkIHRvIHRoZSBgc2NhbGVYYCBwcm9wZXJ0eS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc2NhbGVZXSAtIFRoZSBhbW91bnQgdG8gYmUgYWRkZWQgdG8gdGhlIGBzY2FsZVlgIHByb3BlcnR5LiBJZiBgdW5kZWZpbmVkYCBvciBgbnVsbGAgaXQgdXNlcyB0aGUgYHNjYWxlWGAgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0ZXBYPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYHNjYWxlWGAgYW1vdW50LCBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVyYXRpb24gY291bnRlci5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFk9MF0gLSBUaGlzIGlzIGFkZGVkIHRvIHRoZSBgc2NhbGVZYCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Hcm91cH0gVGhpcyBHcm91cCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNjYWxlWFk6IGZ1bmN0aW9uIChzY2FsZVgsIHNjYWxlWSwgc3RlcFgsIHN0ZXBZKVxyXG4gICAge1xyXG4gICAgICAgIEFjdGlvbnMuU2NhbGVYWSh0aGlzLmNoaWxkcmVuLmVudHJpZXMsIHNjYWxlWCwgc2NhbGVZLCBzdGVwWCwgc3RlcFkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBkZXB0aCBvZiBlYWNoIGdyb3VwIG1lbWJlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNzZXREZXB0aFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBzZXQgdGhlIHByb3BlcnR5IHRvLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTBdIC0gVGhpcyBpcyBhZGRlZCB0byB0aGUgYHZhbHVlYCBhbW91bnQsIG11bHRpcGxpZWQgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Hcm91cH0gVGhpcyBHcm91cCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldERlcHRoOiBmdW5jdGlvbiAodmFsdWUsIHN0ZXApXHJcbiAgICB7XHJcbiAgICAgICAgQWN0aW9ucy5TZXREZXB0aCh0aGlzLmNoaWxkcmVuLmVudHJpZXMsIHZhbHVlLCBzdGVwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYmxlbmRNb2RlIG9mIGVhY2ggZ3JvdXAgbWVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI3NldEJsZW5kTW9kZVxyXG4gICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBwcm9wZXJ0eSB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXB9IFRoaXMgR3JvdXAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRCbGVuZE1vZGU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBBY3Rpb25zLlNldEJsZW5kTW9kZSh0aGlzLmNoaWxkcmVuLmVudHJpZXMsIHZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFzc2VzIGFsbCBncm91cCBtZW1iZXJzIHRvIHRoZSBJbnB1dCBNYW5hZ2VyIHRvIGVuYWJsZSB0aGVtIGZvciBpbnB1dCB3aXRoIGlkZW50aWNhbCBhcmVhcyBhbmQgY2FsbGJhY2tzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI3NldEhpdEFyZWFcclxuICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyp9IGhpdEFyZWEgLSBFaXRoZXIgYW4gaW5wdXQgY29uZmlndXJhdGlvbiBvYmplY3QsIG9yIGEgZ2VvbWV0cmljIHNoYXBlIHRoYXQgZGVmaW5lcyB0aGUgaGl0IGFyZWEgZm9yIHRoZSBHYW1lIE9iamVjdC4gSWYgbm90IHNwZWNpZmllZCBhIFJlY3RhbmdsZSB3aWxsIGJlIHVzZWQuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5IaXRBcmVhQ2FsbGJhY2t9IGhpdEFyZWFDYWxsYmFjayAtIEEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB3aGVuIHRoZSBHYW1lIE9iamVjdCBpcyBpbnRlcmFjdGVkIHdpdGguIElmIHlvdSBwcm92aWRlIGEgc2hhcGUgeW91IG11c3QgYWxzbyBwcm92aWRlIGEgY2FsbGJhY2suXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfSBUaGlzIEdyb3VwIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0SGl0QXJlYTogZnVuY3Rpb24gKGhpdEFyZWEsIGhpdEFyZWFDYWxsYmFjaylcclxuICAgIHtcclxuICAgICAgICBBY3Rpb25zLlNldEhpdEFyZWEodGhpcy5jaGlsZHJlbi5lbnRyaWVzLCBoaXRBcmVhLCBoaXRBcmVhQ2FsbGJhY2spO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaHVmZmxlcyB0aGUgZ3JvdXAgbWVtYmVycyBpbiBwbGFjZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNzaHVmZmxlXHJcbiAgICAgKiBAc2luY2UgMy4yMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfSBUaGlzIEdyb3VwIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2h1ZmZsZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBBY3Rpb25zLlNodWZmbGUodGhpcy5jaGlsZHJlbi5lbnRyaWVzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVhY3RpdmF0ZXMgYSBtZW1iZXIgb2YgdGhpcyBncm91cC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Hcm91cCNraWxsXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gQSBtZW1iZXIgb2YgdGhpcyBncm91cC5cclxuICAgICAqL1xyXG4gICAga2lsbDogZnVuY3Rpb24gKGdhbWVPYmplY3QpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4uY29udGFpbnMoZ2FtZU9iamVjdCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBnYW1lT2JqZWN0LnNldEFjdGl2ZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlYWN0aXZhdGVzIGFuZCBoaWRlcyBhIG1lbWJlciBvZiB0aGlzIGdyb3VwLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2tpbGxBbmRIaWRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gQSBtZW1iZXIgb2YgdGhpcyBncm91cC5cclxuICAgICAqL1xyXG4gICAga2lsbEFuZEhpZGU6IGZ1bmN0aW9uIChnYW1lT2JqZWN0KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmNvbnRhaW5zKGdhbWVPYmplY3QpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5zZXRBY3RpdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICBnYW1lT2JqZWN0LnNldFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB2aXNpYmxlIG9mIGVhY2ggZ3JvdXAgbWVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI3NldFZpc2libGVcclxuICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHNldCB0aGUgcHJvcGVydHkgdG8uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtpbmRleD0wXSAtIEFuIG9wdGlvbmFsIG9mZnNldCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbSB3aXRoaW4gdGhlIGl0ZW1zIGFycmF5LlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbZGlyZWN0aW9uPTFdIC0gVGhlIGRpcmVjdGlvbiB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGFycmF5LiAxIGlzIGZyb20gYmVnaW5uaW5nIHRvIGVuZCwgLTEgZnJvbSBlbmQgdG8gYmVnaW5uaW5nLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Hcm91cH0gVGhpcyBHcm91cCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFZpc2libGU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGRpcmVjdGlvbilcclxuICAgIHtcclxuICAgICAgICBBY3Rpb25zLlNldFZpc2libGUodGhpcy5jaGlsZHJlbi5lbnRyaWVzLCB2YWx1ZSwgaW5kZXgsIGRpcmVjdGlvbik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRvZ2dsZXMgKGZsaXBzKSB0aGUgdmlzaWJsZSBzdGF0ZSBvZiBlYWNoIG1lbWJlciBvZiB0aGlzIGdyb3VwLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI3RvZ2dsZVZpc2libGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Hcm91cH0gVGhpcyBHcm91cCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHRvZ2dsZVZpc2libGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgQWN0aW9ucy5Ub2dnbGVWaXNpYmxlKHRoaXMuY2hpbGRyZW4uZW50cmllcyk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVtcHRpZXMgdGhpcyBncm91cCBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBTY2VuZS5cclxuICAgICAqXHJcbiAgICAgKiBEb2VzIG5vdCBjYWxsIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR3JvdXAjcmVtb3ZlQ2FsbGJhY2t9LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0gLSBBbHNvIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNkZXN0cm95fSBlYWNoIGdyb3VwIG1lbWJlci5cclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKGRlc3Ryb3lDaGlsZHJlbilcclxuICAgIHtcclxuICAgICAgICBpZiAoZGVzdHJveUNoaWxkcmVuID09PSB1bmRlZmluZWQpIHsgZGVzdHJveUNoaWxkcmVuID0gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgLy8gIFRoaXMgR2FtZSBPYmplY3QgaGFkIGFscmVhZHkgYmVlbiBkZXN0cm95ZWRcclxuICAgICAgICBpZiAoIXRoaXMuc2NlbmUgfHwgdGhpcy5pZ25vcmVEZXN0cm95KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jbGVhcihmYWxzZSwgZGVzdHJveUNoaWxkcmVuKTtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmNoaWxkcmVuID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdyb3VwO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/group/Group.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/group/GroupCreator.js":
/*!*******************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/group/GroupCreator.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar Group = __webpack_require__(/*! ./Group */ \"./node_modules/phaser/src/gameobjects/group/Group.js\");\r\n\r\n/**\r\n * Creates a new Group Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Group Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#group\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Group.GroupConfig|Phaser.Types.GameObjects.Group.GroupCreateConfig} config - The configuration object this Game Object will use to create itself.\r\n *\r\n * @return {Phaser.GameObjects.Group} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('group', function (config)\r\n{\r\n return new Group(this.scene, null, config);\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectCreator context.\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncm91cC9Hcm91cENyZWF0b3IuanM/OTVkYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsd0JBQXdCLG1CQUFPLENBQUMsd0ZBQXNCO0FBQ3RELFlBQVksbUJBQU8sQ0FBQyxxRUFBUzs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNEZBQTRGO0FBQ3ZHO0FBQ0EsWUFBWSx5QkFBeUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvZ3JvdXAvR3JvdXBDcmVhdG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2FtZU9iamVjdENyZWF0b3IgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Q3JlYXRvcicpO1xyXG52YXIgR3JvdXAgPSByZXF1aXJlKCcuL0dyb3VwJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBHcm91cCBHYW1lIE9iamVjdCBhbmQgcmV0dXJucyBpdC5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgR3JvdXAgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI2dyb3VwXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5Hcm91cC5Hcm91cENvbmZpZ3xQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuR3JvdXAuR3JvdXBDcmVhdGVDb25maWd9IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIGNyZWF0ZSBpdHNlbGYuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Hcm91cH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0Q3JlYXRvci5yZWdpc3RlcignZ3JvdXAnLCBmdW5jdGlvbiAoY29uZmlnKVxyXG57XHJcbiAgICByZXR1cm4gbmV3IEdyb3VwKHRoaXMuc2NlbmUsIG51bGwsIGNvbmZpZyk7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RDcmVhdG9yIGNvbnRleHQuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/group/GroupCreator.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/group/GroupFactory.js":
/*!*******************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/group/GroupFactory.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Group = __webpack_require__(/*! ./Group */ \"./node_modules/phaser/src/gameobjects/group/Group.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Group Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Group Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#group\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.GameObjects.GameObject[]|Phaser.Types.GameObjects.Group.GroupConfig|Phaser.Types.GameObjects.Group.GroupConfig[])} [children] - Game Objects to add to this Group; or the `config` argument.\r\n * @param {Phaser.Types.GameObjects.Group.GroupConfig|Phaser.Types.GameObjects.Group.GroupCreateConfig} [config] - A Group Configuration object.\r\n *\r\n * @return {Phaser.GameObjects.Group} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('group', function (children, config)\r\n{\r\n return this.updateList.add(new Group(this.scene, children, config));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9ncm91cC9Hcm91cEZhY3RvcnkuanM/OTAyNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFFQUFTO0FBQzdCLHdCQUF3QixtQkFBTyxDQUFDLHdGQUFzQjs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMEhBQTBILGdEQUFnRDtBQUNyTCxXQUFXLDRGQUE0RjtBQUN2RztBQUNBLFlBQVkseUJBQXlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2dyb3VwL0dyb3VwRmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdyb3VwID0gcmVxdWlyZSgnLi9Hcm91cCcpO1xyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgR3JvdXAgR2FtZSBPYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIFNjZW5lLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBHcm91cCBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3RvcnkjZ3JvdXBcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W118UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLkdyb3VwLkdyb3VwQ29uZmlnfFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5Hcm91cC5Hcm91cENvbmZpZ1tdKX0gW2NoaWxkcmVuXSAtIEdhbWUgT2JqZWN0cyB0byBhZGQgdG8gdGhpcyBHcm91cDsgb3IgdGhlIGBjb25maWdgIGFyZ3VtZW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5Hcm91cC5Hcm91cENvbmZpZ3xQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuR3JvdXAuR3JvdXBDcmVhdGVDb25maWd9IFtjb25maWddIC0gQSBHcm91cCBDb25maWd1cmF0aW9uIG9iamVjdC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkdyb3VwfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RGYWN0b3J5LnJlZ2lzdGVyKCdncm91cCcsIGZ1bmN0aW9uIChjaGlsZHJlbiwgY29uZmlnKVxyXG57XHJcbiAgICByZXR1cm4gdGhpcy51cGRhdGVMaXN0LmFkZChuZXcgR3JvdXAodGhpcy5zY2VuZSwgY2hpbGRyZW4sIGNvbmZpZykpO1xyXG59KTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/group/GroupFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/image/Image.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/image/Image.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar ImageRender = __webpack_require__(/*! ./ImageRender */ \"./node_modules/phaser/src/gameobjects/image/ImageRender.js\");\r\n\r\n/**\r\n * @classdesc\r\n * An Image Game Object.\r\n *\r\n * An Image is a light-weight Game Object useful for the display of static images in your game,\r\n * such as logos, backgrounds, scenery or other non-animated elements. Images can have input\r\n * events and physics bodies, or be tweened, tinted or scrolled. The main difference between an\r\n * Image and a Sprite is that you cannot animate an Image as they do not have the Animation component.\r\n *\r\n * @class Image\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Flip\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Size\r\n * @extends Phaser.GameObjects.Components.TextureCrop\r\n * @extends Phaser.GameObjects.Components.Tint\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n */\r\nvar Image = new Class({\r\n\r\n Extends: GameObject,\r\n\r\n Mixins: [\r\n Components.Alpha,\r\n Components.BlendMode,\r\n Components.Depth,\r\n Components.Flip,\r\n Components.GetBounds,\r\n Components.Mask,\r\n Components.Origin,\r\n Components.Pipeline,\r\n Components.ScrollFactor,\r\n Components.Size,\r\n Components.TextureCrop,\r\n Components.Tint,\r\n Components.Transform,\r\n Components.Visible,\r\n ImageRender\r\n ],\r\n\r\n initialize:\r\n\r\n function Image (scene, x, y, texture, frame)\r\n {\r\n GameObject.call(this, scene, 'Image');\r\n\r\n /**\r\n * The internal crop data object, as used by `setCrop` and passed to the `Frame.setCropUVs` method.\r\n *\r\n * @name Phaser.GameObjects.Image#_crop\r\n * @type {object}\r\n * @private\r\n * @since 3.11.0\r\n */\r\n this._crop = this.resetCropObject();\r\n\r\n this.setTexture(texture, frame);\r\n this.setPosition(x, y);\r\n this.setSizeToFrame();\r\n this.setOriginFromFrame();\r\n this.initPipeline();\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Image;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9pbWFnZS9JbWFnZS5qcz85MzlhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLGdGQUFlO0FBQ3hDLGlCQUFpQixtQkFBTyxDQUFDLDBFQUFlO0FBQ3hDLGtCQUFrQixtQkFBTyxDQUFDLGlGQUFlOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2ltYWdlL0ltYWdlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ29tcG9uZW50cyA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMnKTtcclxudmFyIEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Jyk7XHJcbnZhciBJbWFnZVJlbmRlciA9IHJlcXVpcmUoJy4vSW1hZ2VSZW5kZXInKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEFuIEltYWdlIEdhbWUgT2JqZWN0LlxyXG4gKlxyXG4gKiBBbiBJbWFnZSBpcyBhIGxpZ2h0LXdlaWdodCBHYW1lIE9iamVjdCB1c2VmdWwgZm9yIHRoZSBkaXNwbGF5IG9mIHN0YXRpYyBpbWFnZXMgaW4geW91ciBnYW1lLFxyXG4gKiBzdWNoIGFzIGxvZ29zLCBiYWNrZ3JvdW5kcywgc2NlbmVyeSBvciBvdGhlciBub24tYW5pbWF0ZWQgZWxlbWVudHMuIEltYWdlcyBjYW4gaGF2ZSBpbnB1dFxyXG4gKiBldmVudHMgYW5kIHBoeXNpY3MgYm9kaWVzLCBvciBiZSB0d2VlbmVkLCB0aW50ZWQgb3Igc2Nyb2xsZWQuIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBhblxyXG4gKiBJbWFnZSBhbmQgYSBTcHJpdGUgaXMgdGhhdCB5b3UgY2Fubm90IGFuaW1hdGUgYW4gSW1hZ2UgYXMgdGhleSBkbyBub3QgaGF2ZSB0aGUgQW5pbWF0aW9uIGNvbXBvbmVudC5cclxuICpcclxuICogQGNsYXNzIEltYWdlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbHBoYVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5CbGVuZE1vZGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGhcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRmxpcFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHNcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuTWFza1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5PcmlnaW5cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGlwZWxpbmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2Nyb2xsRmFjdG9yXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNpemVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGV4dHVyZUNyb3BcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGludFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVmlzaWJsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBHYW1lIE9iamVjdCBiZWxvbmdzLiBBIEdhbWUgT2JqZWN0IGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgU2NlbmUgYXQgYSB0aW1lLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRleHR1cmUgLSBUaGUga2V5IG9mIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gcmVuZGVyIHdpdGgsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBBbiBvcHRpb25hbCBmcmFtZSBmcm9tIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyaW5nIHdpdGguXHJcbiAqL1xyXG52YXIgSW1hZ2UgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEdhbWVPYmplY3QsXHJcblxyXG4gICAgTWl4aW5zOiBbXHJcbiAgICAgICAgQ29tcG9uZW50cy5BbHBoYSxcclxuICAgICAgICBDb21wb25lbnRzLkJsZW5kTW9kZSxcclxuICAgICAgICBDb21wb25lbnRzLkRlcHRoLFxyXG4gICAgICAgIENvbXBvbmVudHMuRmxpcCxcclxuICAgICAgICBDb21wb25lbnRzLkdldEJvdW5kcyxcclxuICAgICAgICBDb21wb25lbnRzLk1hc2ssXHJcbiAgICAgICAgQ29tcG9uZW50cy5PcmlnaW4sXHJcbiAgICAgICAgQ29tcG9uZW50cy5QaXBlbGluZSxcclxuICAgICAgICBDb21wb25lbnRzLlNjcm9sbEZhY3RvcixcclxuICAgICAgICBDb21wb25lbnRzLlNpemUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UZXh0dXJlQ3JvcCxcclxuICAgICAgICBDb21wb25lbnRzLlRpbnQsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UcmFuc2Zvcm0sXHJcbiAgICAgICAgQ29tcG9uZW50cy5WaXNpYmxlLFxyXG4gICAgICAgIEltYWdlUmVuZGVyXHJcbiAgICBdLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gSW1hZ2UgKHNjZW5lLCB4LCB5LCB0ZXh0dXJlLCBmcmFtZSlcclxuICAgIHtcclxuICAgICAgICBHYW1lT2JqZWN0LmNhbGwodGhpcywgc2NlbmUsICdJbWFnZScpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaW50ZXJuYWwgY3JvcCBkYXRhIG9iamVjdCwgYXMgdXNlZCBieSBgc2V0Q3JvcGAgYW5kIHBhc3NlZCB0byB0aGUgYEZyYW1lLnNldENyb3BVVnNgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5JbWFnZSNfY3JvcFxyXG4gICAgICAgICAqIEB0eXBlIHtvYmplY3R9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fY3JvcCA9IHRoaXMucmVzZXRDcm9wT2JqZWN0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VGV4dHVyZSh0ZXh0dXJlLCBmcmFtZSk7XHJcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcclxuICAgICAgICB0aGlzLnNldFNpemVUb0ZyYW1lKCk7XHJcbiAgICAgICAgdGhpcy5zZXRPcmlnaW5Gcm9tRnJhbWUoKTtcclxuICAgICAgICB0aGlzLmluaXRQaXBlbGluZSgpO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEltYWdlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/image/Image.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/image/ImageCanvasRenderer.js":
/*!**************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/image/ImageCanvasRenderer.js ***!
\**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Image#renderCanvas\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Image} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar ImageCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n renderer.batchSprite(src, src.frame, camera, parentMatrix);\r\n};\r\n\r\nmodule.exports = ImageCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9pbWFnZS9JbWFnZUNhbnZhc1JlbmRlcmVyLmpzP2Q3ZWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcseUJBQXlCO0FBQ3BDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvaW1hZ2UvSW1hZ2VDYW52YXNSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBDYW52YXMgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5JbWFnZSNyZW5kZXJDYW52YXNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgQ2FudmFzIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5JbWFnZX0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIEltYWdlQ2FudmFzUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICByZW5kZXJlci5iYXRjaFNwcml0ZShzcmMsIHNyYy5mcmFtZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbWFnZUNhbnZhc1JlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/image/ImageCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/image/ImageCreator.js":
/*!*******************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/image/ImageCreator.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BuildGameObject = __webpack_require__(/*! ../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar Image = __webpack_require__(/*! ./Image */ \"./node_modules/phaser/src/gameobjects/image/Image.js\");\r\n\r\n/**\r\n * Creates a new Image Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Image Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#image\r\n * @since 3.0.0\r\n *\r\n * @param {object} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.Image} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('image', function (config, addToScene)\r\n{\r\n if (config === undefined) { config = {}; }\r\n\r\n var key = GetAdvancedValue(config, 'key', null);\r\n var frame = GetAdvancedValue(config, 'frame', null);\r\n\r\n var image = new Image(this.scene, 0, 0, key, frame);\r\n\r\n if (addToScene !== undefined)\r\n {\r\n config.add = addToScene;\r\n }\r\n\r\n BuildGameObject(this.scene, image, config);\r\n\r\n return image;\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectCreator context.\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9pbWFnZS9JbWFnZUNyZWF0b3IuanM/MDE5NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsc0JBQXNCLG1CQUFPLENBQUMsb0ZBQW9CO0FBQ2xELHdCQUF3QixtQkFBTyxDQUFDLHdGQUFzQjtBQUN0RCx1QkFBdUIsbUJBQU8sQ0FBQyx1R0FBcUM7QUFDcEUsWUFBWSxtQkFBTyxDQUFDLHFFQUFTOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVkseUJBQXlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixhQUFhOztBQUU1QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2ltYWdlL0ltYWdlQ3JlYXRvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJ1aWxkR2FtZU9iamVjdCA9IHJlcXVpcmUoJy4uL0J1aWxkR2FtZU9iamVjdCcpO1xyXG52YXIgR2FtZU9iamVjdENyZWF0b3IgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Q3JlYXRvcicpO1xyXG52YXIgR2V0QWR2YW5jZWRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRBZHZhbmNlZFZhbHVlJyk7XHJcbnZhciBJbWFnZSA9IHJlcXVpcmUoJy4vSW1hZ2UnKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IEltYWdlIEdhbWUgT2JqZWN0IGFuZCByZXR1cm5zIGl0LlxyXG4gKlxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBJbWFnZSBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdENyZWF0b3IjaW1hZ2VcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byBjcmVhdGUgaXRzZWxmLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthZGRUb1NjZW5lXSAtIEFkZCB0aGlzIEdhbWUgT2JqZWN0IHRvIHRoZSBTY2VuZSBhZnRlciBjcmVhdGluZyBpdD8gSWYgc2V0IHRoaXMgYXJndW1lbnQgb3ZlcnJpZGVzIHRoZSBgYWRkYCBwcm9wZXJ0eSBpbiB0aGUgY29uZmlnIG9iamVjdC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkltYWdlfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RDcmVhdG9yLnJlZ2lzdGVyKCdpbWFnZScsIGZ1bmN0aW9uIChjb25maWcsIGFkZFRvU2NlbmUpXHJcbntcclxuICAgIGlmIChjb25maWcgPT09IHVuZGVmaW5lZCkgeyBjb25maWcgPSB7fTsgfVxyXG5cclxuICAgIHZhciBrZXkgPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ2tleScsIG51bGwpO1xyXG4gICAgdmFyIGZyYW1lID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdmcmFtZScsIG51bGwpO1xyXG5cclxuICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSh0aGlzLnNjZW5lLCAwLCAwLCBrZXksIGZyYW1lKTtcclxuXHJcbiAgICBpZiAoYWRkVG9TY2VuZSAhPT0gdW5kZWZpbmVkKVxyXG4gICAge1xyXG4gICAgICAgIGNvbmZpZy5hZGQgPSBhZGRUb1NjZW5lO1xyXG4gICAgfVxyXG5cclxuICAgIEJ1aWxkR2FtZU9iamVjdCh0aGlzLnNjZW5lLCBpbWFnZSwgY29uZmlnKTtcclxuXHJcbiAgICByZXR1cm4gaW1hZ2U7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RDcmVhdG9yIGNvbnRleHQuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/image/ImageCreator.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/image/ImageFactory.js":
/*!*******************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/image/ImageFactory.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Image = __webpack_require__(/*! ./Image */ \"./node_modules/phaser/src/gameobjects/image/Image.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Image Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Image Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#image\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n *\r\n * @return {Phaser.GameObjects.Image} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('image', function (x, y, key, frame)\r\n{\r\n return this.displayList.add(new Image(this.scene, x, y, key, frame));\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n// There are several properties available to use:\r\n//\r\n// this.scene - a reference to the Scene that owns the GameObjectFactory\r\n// this.displayList - a reference to the Display List the Scene owns\r\n// this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9pbWFnZS9JbWFnZUZhY3RvcnkuanM/MTk1MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFFQUFTO0FBQzdCLHdCQUF3QixtQkFBTyxDQUFDLHdGQUFzQjs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsWUFBWSx5QkFBeUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvaW1hZ2UvSW1hZ2VGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgSW1hZ2UgPSByZXF1aXJlKCcuL0ltYWdlJyk7XHJcbnZhciBHYW1lT2JqZWN0RmFjdG9yeSA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3RGYWN0b3J5Jyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBJbWFnZSBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIEltYWdlIEdhbWUgT2JqZWN0IGhhcyBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0RmFjdG9yeSNpbWFnZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0dXJlIC0gVGhlIGtleSBvZiB0aGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIHJlbmRlciB3aXRoLCBhcyBzdG9yZWQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWVdIC0gQW4gb3B0aW9uYWwgZnJhbWUgZnJvbSB0aGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHJlbmRlcmluZyB3aXRoLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuSW1hZ2V9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdEZhY3RvcnkucmVnaXN0ZXIoJ2ltYWdlJywgZnVuY3Rpb24gKHgsIHksIGtleSwgZnJhbWUpXHJcbntcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXlMaXN0LmFkZChuZXcgSW1hZ2UodGhpcy5zY2VuZSwgeCwgeSwga2V5LCBmcmFtZSkpO1xyXG59KTtcclxuXHJcbi8vICBXaGVuIHJlZ2lzdGVyaW5nIGEgZmFjdG9yeSBmdW5jdGlvbiAndGhpcycgcmVmZXJzIHRvIHRoZSBHYW1lT2JqZWN0RmFjdG9yeSBjb250ZXh0LlxyXG4vL1xyXG4vLyAgVGhlcmUgYXJlIHNldmVyYWwgcHJvcGVydGllcyBhdmFpbGFibGUgdG8gdXNlOlxyXG4vL1xyXG4vLyAgdGhpcy5zY2VuZSAtIGEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSB0aGF0IG93bnMgdGhlIEdhbWVPYmplY3RGYWN0b3J5XHJcbi8vICB0aGlzLmRpc3BsYXlMaXN0IC0gYSByZWZlcmVuY2UgdG8gdGhlIERpc3BsYXkgTGlzdCB0aGUgU2NlbmUgb3duc1xyXG4vLyAgdGhpcy51cGRhdGVMaXN0IC0gYSByZWZlcmVuY2UgdG8gdGhlIFVwZGF0ZSBMaXN0IHRoZSBTY2VuZSBvd25zXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/image/ImageFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/image/ImageRender.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/image/ImageRender.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./ImageWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/image/ImageWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./ImageCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/image/ImageCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9pbWFnZS9JbWFnZVJlbmRlci5qcz9jYjNkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxpRUFBa0I7QUFDNUMsbUJBQW1CLG1CQUFPLENBQUMsaUVBQWtCOztBQUU3QyxJQUFJLElBQXFCO0FBQ3pCO0FBQ0Esa0JBQWtCLG1CQUFPLENBQUMsK0ZBQXNCO0FBQ2hEOztBQUVBLElBQUksSUFBc0I7QUFDMUI7QUFDQSxtQkFBbUIsbUJBQU8sQ0FBQyxpR0FBdUI7QUFDbEQ7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2ltYWdlL0ltYWdlUmVuZGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuLi8uLi91dGlscy9OT09QJyk7XHJcbnZhciByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9OT09QJyk7XHJcblxyXG5pZiAodHlwZW9mIFdFQkdMX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4vSW1hZ2VXZWJHTFJlbmRlcmVyJyk7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgQ0FOVkFTX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuL0ltYWdlQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/image/ImageRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/image/ImageWebGLRenderer.js":
/*!*************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/image/ImageWebGLRenderer.js ***!
\*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Image#renderWebGL\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Image} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar ImageWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n this.pipeline.batchSprite(src, camera, parentMatrix);\r\n};\r\n\r\nmodule.exports = ImageWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9pbWFnZS9JbWFnZVdlYkdMUmVuZGVyZXIuanM/Mjc2NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQ0FBb0M7QUFDL0MsV0FBVyx5QkFBeUI7QUFDcEMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9pbWFnZS9JbWFnZVdlYkdMUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5JbWFnZSNyZW5kZXJXZWJHTFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgV2ViR0wgcmVuZGVyZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkltYWdlfSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgSW1hZ2VXZWJHTFJlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgdGhpcy5waXBlbGluZS5iYXRjaFNwcml0ZShzcmMsIGNhbWVyYSwgcGFyZW50TWF0cml4KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW1hZ2VXZWJHTFJlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/image/ImageWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/index.js":
/*!******************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/index.js ***!
\******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.GameObjects\r\n */\r\n\r\nvar GameObjects = {\r\n\r\n Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/gameobjects/events/index.js\"),\r\n\r\n DisplayList: __webpack_require__(/*! ./DisplayList */ \"./node_modules/phaser/src/gameobjects/DisplayList.js\"),\r\n GameObjectCreator: __webpack_require__(/*! ./GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\"),\r\n GameObjectFactory: __webpack_require__(/*! ./GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\"),\r\n UpdateList: __webpack_require__(/*! ./UpdateList */ \"./node_modules/phaser/src/gameobjects/UpdateList.js\"),\r\n\r\n Components: __webpack_require__(/*! ./components */ \"./node_modules/phaser/src/gameobjects/components/index.js\"),\r\n\r\n BuildGameObject: __webpack_require__(/*! ./BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\"),\r\n BuildGameObjectAnimation: __webpack_require__(/*! ./BuildGameObjectAnimation */ \"./node_modules/phaser/src/gameobjects/BuildGameObjectAnimation.js\"),\r\n GameObject: __webpack_require__(/*! ./GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\"),\r\n BitmapText: __webpack_require__(/*! ./bitmaptext/static/BitmapText */ \"./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapText.js\"),\r\n Blitter: __webpack_require__(/*! ./blitter/Blitter */ \"./node_modules/phaser/src/gameobjects/blitter/Blitter.js\"),\r\n Container: __webpack_require__(/*! ./container/Container */ \"./node_modules/phaser/src/gameobjects/container/Container.js\"),\r\n DOMElement: __webpack_require__(/*! ./domelement/DOMElement */ \"./node_modules/phaser/src/gameobjects/domelement/DOMElement.js\"),\r\n DynamicBitmapText: __webpack_require__(/*! ./bitmaptext/dynamic/DynamicBitmapText */ \"./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapText.js\"),\r\n Extern: __webpack_require__(/*! ./extern/Extern.js */ \"./node_modules/phaser/src/gameobjects/extern/Extern.js\"),\r\n Graphics: __webpack_require__(/*! ./graphics/Graphics.js */ \"./node_modules/phaser/src/gameobjects/graphics/Graphics.js\"),\r\n Group: __webpack_require__(/*! ./group/Group */ \"./node_modules/phaser/src/gameobjects/group/Group.js\"),\r\n Image: __webpack_require__(/*! ./image/Image */ \"./node_modules/phaser/src/gameobjects/image/Image.js\"),\r\n Particles: __webpack_require__(/*! ./particles */ \"./node_modules/phaser/src/gameobjects/particles/index.js\"),\r\n PathFollower: __webpack_require__(/*! ./pathfollower/PathFollower */ \"./node_modules/phaser/src/gameobjects/pathfollower/PathFollower.js\"),\r\n RenderTexture: __webpack_require__(/*! ./rendertexture/RenderTexture */ \"./node_modules/phaser/src/gameobjects/rendertexture/RenderTexture.js\"),\r\n RetroFont: __webpack_require__(/*! ./bitmaptext/RetroFont */ \"./node_modules/phaser/src/gameobjects/bitmaptext/RetroFont.js\"),\r\n Sprite: __webpack_require__(/*! ./sprite/Sprite */ \"./node_modules/phaser/src/gameobjects/sprite/Sprite.js\"),\r\n Text: __webpack_require__(/*! ./text/static/Text */ \"./node_modules/phaser/src/gameobjects/text/static/Text.js\"),\r\n TileSprite: __webpack_require__(/*! ./tilesprite/TileSprite */ \"./node_modules/phaser/src/gameobjects/tilesprite/TileSprite.js\"),\r\n Zone: __webpack_require__(/*! ./zone/Zone */ \"./node_modules/phaser/src/gameobjects/zone/Zone.js\"),\r\n Video: __webpack_require__(/*! ./video/Video */ \"./node_modules/phaser/src/gameobjects/video/Video.js\"),\r\n\r\n // Shapes\r\n\r\n Shape: __webpack_require__(/*! ./shape/Shape */ \"./node_modules/phaser/src/gameobjects/shape/Shape.js\"),\r\n Arc: __webpack_require__(/*! ./shape/arc/Arc */ \"./node_modules/phaser/src/gameobjects/shape/arc/Arc.js\"),\r\n Curve: __webpack_require__(/*! ./shape/curve/Curve */ \"./node_modules/phaser/src/gameobjects/shape/curve/Curve.js\"),\r\n Ellipse: __webpack_require__(/*! ./shape/ellipse/Ellipse */ \"./node_modules/phaser/src/gameobjects/shape/ellipse/Ellipse.js\"),\r\n Grid: __webpack_require__(/*! ./shape/grid/Grid */ \"./node_modules/phaser/src/gameobjects/shape/grid/Grid.js\"),\r\n IsoBox: __webpack_require__(/*! ./shape/isobox/IsoBox */ \"./node_modules/phaser/src/gameobjects/shape/isobox/IsoBox.js\"),\r\n IsoTriangle: __webpack_require__(/*! ./shape/isotriangle/IsoTriangle */ \"./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangle.js\"),\r\n Line: __webpack_require__(/*! ./shape/line/Line */ \"./node_modules/phaser/src/gameobjects/shape/line/Line.js\"),\r\n Polygon: __webpack_require__(/*! ./shape/polygon/Polygon */ \"./node_modules/phaser/src/gameobjects/shape/polygon/Polygon.js\"),\r\n Rectangle: __webpack_require__(/*! ./shape/rectangle/Rectangle */ \"./node_modules/phaser/src/gameobjects/shape/rectangle/Rectangle.js\"),\r\n Star: __webpack_require__(/*! ./shape/star/Star */ \"./node_modules/phaser/src/gameobjects/shape/star/Star.js\"),\r\n Triangle: __webpack_require__(/*! ./shape/triangle/Triangle */ \"./node_modules/phaser/src/gameobjects/shape/triangle/Triangle.js\"),\r\n\r\n // Game Object Factories\r\n\r\n Factories: {\r\n Blitter: __webpack_require__(/*! ./blitter/BlitterFactory */ \"./node_modules/phaser/src/gameobjects/blitter/BlitterFactory.js\"),\r\n Container: __webpack_require__(/*! ./container/ContainerFactory */ \"./node_modules/phaser/src/gameobjects/container/ContainerFactory.js\"),\r\n DOMElement: __webpack_require__(/*! ./domelement/DOMElementFactory */ \"./node_modules/phaser/src/gameobjects/domelement/DOMElementFactory.js\"),\r\n DynamicBitmapText: __webpack_require__(/*! ./bitmaptext/dynamic/DynamicBitmapTextFactory */ \"./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextFactory.js\"),\r\n Extern: __webpack_require__(/*! ./extern/ExternFactory */ \"./node_modules/phaser/src/gameobjects/extern/ExternFactory.js\"),\r\n Graphics: __webpack_require__(/*! ./graphics/GraphicsFactory */ \"./node_modules/phaser/src/gameobjects/graphics/GraphicsFactory.js\"),\r\n Group: __webpack_require__(/*! ./group/GroupFactory */ \"./node_modules/phaser/src/gameobjects/group/GroupFactory.js\"),\r\n Image: __webpack_require__(/*! ./image/ImageFactory */ \"./node_modules/phaser/src/gameobjects/image/ImageFactory.js\"),\r\n Particles: __webpack_require__(/*! ./particles/ParticleManagerFactory */ \"./node_modules/phaser/src/gameobjects/particles/ParticleManagerFactory.js\"),\r\n PathFollower: __webpack_require__(/*! ./pathfollower/PathFollowerFactory */ \"./node_modules/phaser/src/gameobjects/pathfollower/PathFollowerFactory.js\"),\r\n RenderTexture: __webpack_require__(/*! ./rendertexture/RenderTextureFactory */ \"./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureFactory.js\"),\r\n Sprite: __webpack_require__(/*! ./sprite/SpriteFactory */ \"./node_modules/phaser/src/gameobjects/sprite/SpriteFactory.js\"),\r\n StaticBitmapText: __webpack_require__(/*! ./bitmaptext/static/BitmapTextFactory */ \"./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextFactory.js\"),\r\n Text: __webpack_require__(/*! ./text/static/TextFactory */ \"./node_modules/phaser/src/gameobjects/text/static/TextFactory.js\"),\r\n TileSprite: __webpack_require__(/*! ./tilesprite/TileSpriteFactory */ \"./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteFactory.js\"),\r\n Zone: __webpack_require__(/*! ./zone/ZoneFactory */ \"./node_modules/phaser/src/gameobjects/zone/ZoneFactory.js\"),\r\n Video: __webpack_require__(/*! ./video/VideoFactory */ \"./node_modules/phaser/src/gameobjects/video/VideoFactory.js\"),\r\n\r\n // Shapes\r\n Arc: __webpack_require__(/*! ./shape/arc/ArcFactory */ \"./node_modules/phaser/src/gameobjects/shape/arc/ArcFactory.js\"),\r\n Curve: __webpack_require__(/*! ./shape/curve/CurveFactory */ \"./node_modules/phaser/src/gameobjects/shape/curve/CurveFactory.js\"),\r\n Ellipse: __webpack_require__(/*! ./shape/ellipse/EllipseFactory */ \"./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseFactory.js\"),\r\n Grid: __webpack_require__(/*! ./shape/grid/GridFactory */ \"./node_modules/phaser/src/gameobjects/shape/grid/GridFactory.js\"),\r\n IsoBox: __webpack_require__(/*! ./shape/isobox/IsoBoxFactory */ \"./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxFactory.js\"),\r\n IsoTriangle: __webpack_require__(/*! ./shape/isotriangle/IsoTriangleFactory */ \"./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleFactory.js\"),\r\n Line: __webpack_require__(/*! ./shape/line/LineFactory */ \"./node_modules/phaser/src/gameobjects/shape/line/LineFactory.js\"),\r\n Polygon: __webpack_require__(/*! ./shape/polygon/PolygonFactory */ \"./node_modules/phaser/src/gameobjects/shape/polygon/PolygonFactory.js\"),\r\n Rectangle: __webpack_require__(/*! ./shape/rectangle/RectangleFactory */ \"./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleFactory.js\"),\r\n Star: __webpack_require__(/*! ./shape/star/StarFactory */ \"./node_modules/phaser/src/gameobjects/shape/star/StarFactory.js\"),\r\n Triangle: __webpack_require__(/*! ./shape/triangle/TriangleFactory */ \"./node_modules/phaser/src/gameobjects/shape/triangle/TriangleFactory.js\")\r\n },\r\n\r\n Creators: {\r\n Blitter: __webpack_require__(/*! ./blitter/BlitterCreator */ \"./node_modules/phaser/src/gameobjects/blitter/BlitterCreator.js\"),\r\n Container: __webpack_require__(/*! ./container/ContainerCreator */ \"./node_modules/phaser/src/gameobjects/container/ContainerCreator.js\"),\r\n DynamicBitmapText: __webpack_require__(/*! ./bitmaptext/dynamic/DynamicBitmapTextCreator */ \"./node_modules/phaser/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextCreator.js\"),\r\n Graphics: __webpack_require__(/*! ./graphics/GraphicsCreator */ \"./node_modules/phaser/src/gameobjects/graphics/GraphicsCreator.js\"),\r\n Group: __webpack_require__(/*! ./group/GroupCreator */ \"./node_modules/phaser/src/gameobjects/group/GroupCreator.js\"),\r\n Image: __webpack_require__(/*! ./image/ImageCreator */ \"./node_modules/phaser/src/gameobjects/image/ImageCreator.js\"),\r\n Particles: __webpack_require__(/*! ./particles/ParticleManagerCreator */ \"./node_modules/phaser/src/gameobjects/particles/ParticleManagerCreator.js\"),\r\n RenderTexture: __webpack_require__(/*! ./rendertexture/RenderTextureCreator */ \"./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureCreator.js\"),\r\n Sprite: __webpack_require__(/*! ./sprite/SpriteCreator */ \"./node_modules/phaser/src/gameobjects/sprite/SpriteCreator.js\"),\r\n StaticBitmapText: __webpack_require__(/*! ./bitmaptext/static/BitmapTextCreator */ \"./node_modules/phaser/src/gameobjects/bitmaptext/static/BitmapTextCreator.js\"),\r\n Text: __webpack_require__(/*! ./text/static/TextCreator */ \"./node_modules/phaser/src/gameobjects/text/static/TextCreator.js\"),\r\n TileSprite: __webpack_require__(/*! ./tilesprite/TileSpriteCreator */ \"./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteCreator.js\"),\r\n Zone: __webpack_require__(/*! ./zone/ZoneCreator */ \"./node_modules/phaser/src/gameobjects/zone/ZoneCreator.js\"),\r\n Video: __webpack_require__(/*! ./video/VideoCreator */ \"./node_modules/phaser/src/gameobjects/video/VideoCreator.js\")\r\n }\r\n\r\n};\r\n\r\nif (true)\r\n{\r\n // WebGL only Game Objects\r\n GameObjects.Mesh = __webpack_require__(/*! ./mesh/Mesh */ \"./node_modules/phaser/src/gameobjects/mesh/Mesh.js\");\r\n GameObjects.Quad = __webpack_require__(/*! ./quad/Quad */ \"./node_modules/phaser/src/gameobjects/quad/Quad.js\");\r\n GameObjects.Shader = __webpack_require__(/*! ./shader/Shader */ \"./node_modules/phaser/src/gameobjects/shader/Shader.js\");\r\n\r\n GameObjects.Factories.Mesh = __webpack_require__(/*! ./mesh/MeshFactory */ \"./node_modules/phaser/src/gameobjects/mesh/MeshFactory.js\");\r\n GameObjects.Factories.Quad = __webpack_require__(/*! ./quad/QuadFactory */ \"./node_modules/phaser/src/gameobjects/quad/QuadFactory.js\");\r\n GameObjects.Factories.Shader = __webpack_require__(/*! ./shader/ShaderFactory */ \"./node_modules/phaser/src/gameobjects/shader/ShaderFactory.js\");\r\n\r\n GameObjects.Creators.Mesh = __webpack_require__(/*! ./mesh/MeshCreator */ \"./node_modules/phaser/src/gameobjects/mesh/MeshCreator.js\");\r\n GameObjects.Creators.Quad = __webpack_require__(/*! ./quad/QuadCreator */ \"./node_modules/phaser/src/gameobjects/quad/QuadCreator.js\");\r\n GameObjects.Creators.Shader = __webpack_require__(/*! ./shader/ShaderCreator */ \"./node_modules/phaser/src/gameobjects/shader/ShaderCreator.js\");\r\n\r\n GameObjects.Light = __webpack_require__(/*! ./lights/Light */ \"./node_modules/phaser/src/gameobjects/lights/Light.js\");\r\n\r\n __webpack_require__(/*! ./lights/LightsManager */ \"./node_modules/phaser/src/gameobjects/lights/LightsManager.js\");\r\n __webpack_require__(/*! ./lights/LightsPlugin */ \"./node_modules/phaser/src/gameobjects/lights/LightsPlugin.js\");\r\n}\r\n\r\nmodule.exports = GameObjects;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9pbmRleC5qcz8yYzUzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHVFQUFVOztBQUU5QixpQkFBaUIsbUJBQU8sQ0FBQywyRUFBZTtBQUN4Qyx1QkFBdUIsbUJBQU8sQ0FBQyx1RkFBcUI7QUFDcEQsdUJBQXVCLG1CQUFPLENBQUMsdUZBQXFCO0FBQ3BELGdCQUFnQixtQkFBTyxDQUFDLHlFQUFjOztBQUV0QyxnQkFBZ0IsbUJBQU8sQ0FBQywrRUFBYzs7QUFFdEMscUJBQXFCLG1CQUFPLENBQUMsbUZBQW1CO0FBQ2hELDhCQUE4QixtQkFBTyxDQUFDLHFHQUE0QjtBQUNsRSxnQkFBZ0IsbUJBQU8sQ0FBQyx5RUFBYztBQUN0QyxnQkFBZ0IsbUJBQU8sQ0FBQyw2R0FBZ0M7QUFDeEQsYUFBYSxtQkFBTyxDQUFDLG1GQUFtQjtBQUN4QyxlQUFlLG1CQUFPLENBQUMsMkZBQXVCO0FBQzlDLGdCQUFnQixtQkFBTyxDQUFDLCtGQUF5QjtBQUNqRCx1QkFBdUIsbUJBQU8sQ0FBQyw2SEFBd0M7QUFDdkUsWUFBWSxtQkFBTyxDQUFDLGtGQUFvQjtBQUN4QyxjQUFjLG1CQUFPLENBQUMsMEZBQXdCO0FBQzlDLFdBQVcsbUJBQU8sQ0FBQywyRUFBZTtBQUNsQyxXQUFXLG1CQUFPLENBQUMsMkVBQWU7QUFDbEMsZUFBZSxtQkFBTyxDQUFDLDZFQUFhO0FBQ3BDLGtCQUFrQixtQkFBTyxDQUFDLHVHQUE2QjtBQUN2RCxtQkFBbUIsbUJBQU8sQ0FBQywyR0FBK0I7QUFDMUQsZUFBZSxtQkFBTyxDQUFDLDZGQUF3QjtBQUMvQyxZQUFZLG1CQUFPLENBQUMsK0VBQWlCO0FBQ3JDLFVBQVUsbUJBQU8sQ0FBQyxxRkFBb0I7QUFDdEMsZ0JBQWdCLG1CQUFPLENBQUMsK0ZBQXlCO0FBQ2pELFVBQVUsbUJBQU8sQ0FBQyx1RUFBYTtBQUMvQixXQUFXLG1CQUFPLENBQUMsMkVBQWU7O0FBRWxDOztBQUVBLFdBQVcsbUJBQU8sQ0FBQywyRUFBZTtBQUNsQyxTQUFTLG1CQUFPLENBQUMsK0VBQWlCO0FBQ2xDLFdBQVcsbUJBQU8sQ0FBQyx1RkFBcUI7QUFDeEMsYUFBYSxtQkFBTyxDQUFDLCtGQUF5QjtBQUM5QyxVQUFVLG1CQUFPLENBQUMsbUZBQW1CO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQywyRkFBdUI7QUFDM0MsaUJBQWlCLG1CQUFPLENBQUMsK0dBQWlDO0FBQzFELFVBQVUsbUJBQU8sQ0FBQyxtRkFBbUI7QUFDckMsYUFBYSxtQkFBTyxDQUFDLCtGQUF5QjtBQUM5QyxlQUFlLG1CQUFPLENBQUMsdUdBQTZCO0FBQ3BELFVBQVUsbUJBQU8sQ0FBQyxtRkFBbUI7QUFDckMsY0FBYyxtQkFBTyxDQUFDLG1HQUEyQjs7QUFFakQ7O0FBRUE7QUFDQSxpQkFBaUIsbUJBQU8sQ0FBQyxpR0FBMEI7QUFDbkQsbUJBQW1CLG1CQUFPLENBQUMseUdBQThCO0FBQ3pELG9CQUFvQixtQkFBTyxDQUFDLDZHQUFnQztBQUM1RCwyQkFBMkIsbUJBQU8sQ0FBQywySUFBK0M7QUFDbEYsZ0JBQWdCLG1CQUFPLENBQUMsNkZBQXdCO0FBQ2hELGtCQUFrQixtQkFBTyxDQUFDLHFHQUE0QjtBQUN0RCxlQUFlLG1CQUFPLENBQUMseUZBQXNCO0FBQzdDLGVBQWUsbUJBQU8sQ0FBQyx5RkFBc0I7QUFDN0MsbUJBQW1CLG1CQUFPLENBQUMscUhBQW9DO0FBQy9ELHNCQUFzQixtQkFBTyxDQUFDLHFIQUFvQztBQUNsRSx1QkFBdUIsbUJBQU8sQ0FBQyx5SEFBc0M7QUFDckUsZ0JBQWdCLG1CQUFPLENBQUMsNkZBQXdCO0FBQ2hELDBCQUEwQixtQkFBTyxDQUFDLDJIQUF1QztBQUN6RSxjQUFjLG1CQUFPLENBQUMsbUdBQTJCO0FBQ2pELG9CQUFvQixtQkFBTyxDQUFDLDZHQUFnQztBQUM1RCxjQUFjLG1CQUFPLENBQUMscUZBQW9CO0FBQzFDLGVBQWUsbUJBQU8sQ0FBQyx5RkFBc0I7O0FBRTdDO0FBQ0EsYUFBYSxtQkFBTyxDQUFDLDZGQUF3QjtBQUM3QyxlQUFlLG1CQUFPLENBQUMscUdBQTRCO0FBQ25ELGlCQUFpQixtQkFBTyxDQUFDLDZHQUFnQztBQUN6RCxjQUFjLG1CQUFPLENBQUMsaUdBQTBCO0FBQ2hELGdCQUFnQixtQkFBTyxDQUFDLHlHQUE4QjtBQUN0RCxxQkFBcUIsbUJBQU8sQ0FBQyw2SEFBd0M7QUFDckUsY0FBYyxtQkFBTyxDQUFDLGlHQUEwQjtBQUNoRCxpQkFBaUIsbUJBQU8sQ0FBQyw2R0FBZ0M7QUFDekQsbUJBQW1CLG1CQUFPLENBQUMscUhBQW9DO0FBQy9ELGNBQWMsbUJBQU8sQ0FBQyxpR0FBMEI7QUFDaEQsa0JBQWtCLG1CQUFPLENBQUMsaUhBQWtDO0FBQzVELEtBQUs7O0FBRUw7QUFDQSxpQkFBaUIsbUJBQU8sQ0FBQyxpR0FBMEI7QUFDbkQsbUJBQW1CLG1CQUFPLENBQUMseUdBQThCO0FBQ3pELDJCQUEyQixtQkFBTyxDQUFDLDJJQUErQztBQUNsRixrQkFBa0IsbUJBQU8sQ0FBQyxxR0FBNEI7QUFDdEQsZUFBZSxtQkFBTyxDQUFDLHlGQUFzQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMseUZBQXNCO0FBQzdDLG1CQUFtQixtQkFBTyxDQUFDLHFIQUFvQztBQUMvRCx1QkFBdUIsbUJBQU8sQ0FBQyx5SEFBc0M7QUFDckUsZ0JBQWdCLG1CQUFPLENBQUMsNkZBQXdCO0FBQ2hELDBCQUEwQixtQkFBTyxDQUFDLDJIQUF1QztBQUN6RSxjQUFjLG1CQUFPLENBQUMsbUdBQTJCO0FBQ2pELG9CQUFvQixtQkFBTyxDQUFDLDZHQUFnQztBQUM1RCxjQUFjLG1CQUFPLENBQUMscUZBQW9CO0FBQzFDLGVBQWUsbUJBQU8sQ0FBQyx5RkFBc0I7QUFDN0M7O0FBRUE7O0FBRUEsSUFBSSxJQUFxQjtBQUN6QjtBQUNBO0FBQ0EsdUJBQXVCLG1CQUFPLENBQUMsdUVBQWE7QUFDNUMsdUJBQXVCLG1CQUFPLENBQUMsdUVBQWE7QUFDNUMseUJBQXlCLG1CQUFPLENBQUMsK0VBQWlCOztBQUVsRCxpQ0FBaUMsbUJBQU8sQ0FBQyxxRkFBb0I7QUFDN0QsaUNBQWlDLG1CQUFPLENBQUMscUZBQW9CO0FBQzdELG1DQUFtQyxtQkFBTyxDQUFDLDZGQUF3Qjs7QUFFbkUsZ0NBQWdDLG1CQUFPLENBQUMscUZBQW9CO0FBQzVELGdDQUFnQyxtQkFBTyxDQUFDLHFGQUFvQjtBQUM1RCxrQ0FBa0MsbUJBQU8sQ0FBQyw2RkFBd0I7O0FBRWxFLHdCQUF3QixtQkFBTyxDQUFDLDZFQUFnQjs7QUFFaEQsSUFBSSxtQkFBTyxDQUFDLDZGQUF3QjtBQUNwQyxJQUFJLG1CQUFPLENBQUMsMkZBQXVCO0FBQ25DOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0c1xyXG4gKi9cclxuXHJcbnZhciBHYW1lT2JqZWN0cyA9IHtcclxuXHJcbiAgICBFdmVudHM6IHJlcXVpcmUoJy4vZXZlbnRzJyksXHJcblxyXG4gICAgRGlzcGxheUxpc3Q6IHJlcXVpcmUoJy4vRGlzcGxheUxpc3QnKSxcclxuICAgIEdhbWVPYmplY3RDcmVhdG9yOiByZXF1aXJlKCcuL0dhbWVPYmplY3RDcmVhdG9yJyksXHJcbiAgICBHYW1lT2JqZWN0RmFjdG9yeTogcmVxdWlyZSgnLi9HYW1lT2JqZWN0RmFjdG9yeScpLFxyXG4gICAgVXBkYXRlTGlzdDogcmVxdWlyZSgnLi9VcGRhdGVMaXN0JyksXHJcblxyXG4gICAgQ29tcG9uZW50czogcmVxdWlyZSgnLi9jb21wb25lbnRzJyksXHJcblxyXG4gICAgQnVpbGRHYW1lT2JqZWN0OiByZXF1aXJlKCcuL0J1aWxkR2FtZU9iamVjdCcpLFxyXG4gICAgQnVpbGRHYW1lT2JqZWN0QW5pbWF0aW9uOiByZXF1aXJlKCcuL0J1aWxkR2FtZU9iamVjdEFuaW1hdGlvbicpLFxyXG4gICAgR2FtZU9iamVjdDogcmVxdWlyZSgnLi9HYW1lT2JqZWN0JyksXHJcbiAgICBCaXRtYXBUZXh0OiByZXF1aXJlKCcuL2JpdG1hcHRleHQvc3RhdGljL0JpdG1hcFRleHQnKSxcclxuICAgIEJsaXR0ZXI6IHJlcXVpcmUoJy4vYmxpdHRlci9CbGl0dGVyJyksXHJcbiAgICBDb250YWluZXI6IHJlcXVpcmUoJy4vY29udGFpbmVyL0NvbnRhaW5lcicpLFxyXG4gICAgRE9NRWxlbWVudDogcmVxdWlyZSgnLi9kb21lbGVtZW50L0RPTUVsZW1lbnQnKSxcclxuICAgIER5bmFtaWNCaXRtYXBUZXh0OiByZXF1aXJlKCcuL2JpdG1hcHRleHQvZHluYW1pYy9EeW5hbWljQml0bWFwVGV4dCcpLFxyXG4gICAgRXh0ZXJuOiByZXF1aXJlKCcuL2V4dGVybi9FeHRlcm4uanMnKSxcclxuICAgIEdyYXBoaWNzOiByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzLmpzJyksXHJcbiAgICBHcm91cDogcmVxdWlyZSgnLi9ncm91cC9Hcm91cCcpLFxyXG4gICAgSW1hZ2U6IHJlcXVpcmUoJy4vaW1hZ2UvSW1hZ2UnKSxcclxuICAgIFBhcnRpY2xlczogcmVxdWlyZSgnLi9wYXJ0aWNsZXMnKSxcclxuICAgIFBhdGhGb2xsb3dlcjogcmVxdWlyZSgnLi9wYXRoZm9sbG93ZXIvUGF0aEZvbGxvd2VyJyksXHJcbiAgICBSZW5kZXJUZXh0dXJlOiByZXF1aXJlKCcuL3JlbmRlcnRleHR1cmUvUmVuZGVyVGV4dHVyZScpLFxyXG4gICAgUmV0cm9Gb250OiByZXF1aXJlKCcuL2JpdG1hcHRleHQvUmV0cm9Gb250JyksXHJcbiAgICBTcHJpdGU6IHJlcXVpcmUoJy4vc3ByaXRlL1Nwcml0ZScpLFxyXG4gICAgVGV4dDogcmVxdWlyZSgnLi90ZXh0L3N0YXRpYy9UZXh0JyksXHJcbiAgICBUaWxlU3ByaXRlOiByZXF1aXJlKCcuL3RpbGVzcHJpdGUvVGlsZVNwcml0ZScpLFxyXG4gICAgWm9uZTogcmVxdWlyZSgnLi96b25lL1pvbmUnKSxcclxuICAgIFZpZGVvOiByZXF1aXJlKCcuL3ZpZGVvL1ZpZGVvJyksXHJcblxyXG4gICAgLy8gIFNoYXBlc1xyXG5cclxuICAgIFNoYXBlOiByZXF1aXJlKCcuL3NoYXBlL1NoYXBlJyksXHJcbiAgICBBcmM6IHJlcXVpcmUoJy4vc2hhcGUvYXJjL0FyYycpLFxyXG4gICAgQ3VydmU6IHJlcXVpcmUoJy4vc2hhcGUvY3VydmUvQ3VydmUnKSxcclxuICAgIEVsbGlwc2U6IHJlcXVpcmUoJy4vc2hhcGUvZWxsaXBzZS9FbGxpcHNlJyksXHJcbiAgICBHcmlkOiByZXF1aXJlKCcuL3NoYXBlL2dyaWQvR3JpZCcpLFxyXG4gICAgSXNvQm94OiByZXF1aXJlKCcuL3NoYXBlL2lzb2JveC9Jc29Cb3gnKSxcclxuICAgIElzb1RyaWFuZ2xlOiByZXF1aXJlKCcuL3NoYXBlL2lzb3RyaWFuZ2xlL0lzb1RyaWFuZ2xlJyksXHJcbiAgICBMaW5lOiByZXF1aXJlKCcuL3NoYXBlL2xpbmUvTGluZScpLFxyXG4gICAgUG9seWdvbjogcmVxdWlyZSgnLi9zaGFwZS9wb2x5Z29uL1BvbHlnb24nKSxcclxuICAgIFJlY3RhbmdsZTogcmVxdWlyZSgnLi9zaGFwZS9yZWN0YW5nbGUvUmVjdGFuZ2xlJyksXHJcbiAgICBTdGFyOiByZXF1aXJlKCcuL3NoYXBlL3N0YXIvU3RhcicpLFxyXG4gICAgVHJpYW5nbGU6IHJlcXVpcmUoJy4vc2hhcGUvdHJpYW5nbGUvVHJpYW5nbGUnKSxcclxuXHJcbiAgICAvLyAgR2FtZSBPYmplY3QgRmFjdG9yaWVzXHJcblxyXG4gICAgRmFjdG9yaWVzOiB7XHJcbiAgICAgICAgQmxpdHRlcjogcmVxdWlyZSgnLi9ibGl0dGVyL0JsaXR0ZXJGYWN0b3J5JyksXHJcbiAgICAgICAgQ29udGFpbmVyOiByZXF1aXJlKCcuL2NvbnRhaW5lci9Db250YWluZXJGYWN0b3J5JyksXHJcbiAgICAgICAgRE9NRWxlbWVudDogcmVxdWlyZSgnLi9kb21lbGVtZW50L0RPTUVsZW1lbnRGYWN0b3J5JyksXHJcbiAgICAgICAgRHluYW1pY0JpdG1hcFRleHQ6IHJlcXVpcmUoJy4vYml0bWFwdGV4dC9keW5hbWljL0R5bmFtaWNCaXRtYXBUZXh0RmFjdG9yeScpLFxyXG4gICAgICAgIEV4dGVybjogcmVxdWlyZSgnLi9leHRlcm4vRXh0ZXJuRmFjdG9yeScpLFxyXG4gICAgICAgIEdyYXBoaWNzOiByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzRmFjdG9yeScpLFxyXG4gICAgICAgIEdyb3VwOiByZXF1aXJlKCcuL2dyb3VwL0dyb3VwRmFjdG9yeScpLFxyXG4gICAgICAgIEltYWdlOiByZXF1aXJlKCcuL2ltYWdlL0ltYWdlRmFjdG9yeScpLFxyXG4gICAgICAgIFBhcnRpY2xlczogcmVxdWlyZSgnLi9wYXJ0aWNsZXMvUGFydGljbGVNYW5hZ2VyRmFjdG9yeScpLFxyXG4gICAgICAgIFBhdGhGb2xsb3dlcjogcmVxdWlyZSgnLi9wYXRoZm9sbG93ZXIvUGF0aEZvbGxvd2VyRmFjdG9yeScpLFxyXG4gICAgICAgIFJlbmRlclRleHR1cmU6IHJlcXVpcmUoJy4vcmVuZGVydGV4dHVyZS9SZW5kZXJUZXh0dXJlRmFjdG9yeScpLFxyXG4gICAgICAgIFNwcml0ZTogcmVxdWlyZSgnLi9zcHJpdGUvU3ByaXRlRmFjdG9yeScpLFxyXG4gICAgICAgIFN0YXRpY0JpdG1hcFRleHQ6IHJlcXVpcmUoJy4vYml0bWFwdGV4dC9zdGF0aWMvQml0bWFwVGV4dEZhY3RvcnknKSxcclxuICAgICAgICBUZXh0OiByZXF1aXJlKCcuL3RleHQvc3RhdGljL1RleHRGYWN0b3J5JyksXHJcbiAgICAgICAgVGlsZVNwcml0ZTogcmVxdWlyZSgnLi90aWxlc3ByaXRlL1RpbGVTcHJpdGVGYWN0b3J5JyksXHJcbiAgICAgICAgWm9uZTogcmVxdWlyZSgnLi96b25lL1pvbmVGYWN0b3J5JyksXHJcbiAgICAgICAgVmlkZW86IHJlcXVpcmUoJy4vdmlkZW8vVmlkZW9GYWN0b3J5JyksXHJcblxyXG4gICAgICAgIC8vICBTaGFwZXNcclxuICAgICAgICBBcmM6IHJlcXVpcmUoJy4vc2hhcGUvYXJjL0FyY0ZhY3RvcnknKSxcclxuICAgICAgICBDdXJ2ZTogcmVxdWlyZSgnLi9zaGFwZS9jdXJ2ZS9DdXJ2ZUZhY3RvcnknKSxcclxuICAgICAgICBFbGxpcHNlOiByZXF1aXJlKCcuL3NoYXBlL2VsbGlwc2UvRWxsaXBzZUZhY3RvcnknKSxcclxuICAgICAgICBHcmlkOiByZXF1aXJlKCcuL3NoYXBlL2dyaWQvR3JpZEZhY3RvcnknKSxcclxuICAgICAgICBJc29Cb3g6IHJlcXVpcmUoJy4vc2hhcGUvaXNvYm94L0lzb0JveEZhY3RvcnknKSxcclxuICAgICAgICBJc29UcmlhbmdsZTogcmVxdWlyZSgnLi9zaGFwZS9pc290cmlhbmdsZS9Jc29UcmlhbmdsZUZhY3RvcnknKSxcclxuICAgICAgICBMaW5lOiByZXF1aXJlKCcuL3NoYXBlL2xpbmUvTGluZUZhY3RvcnknKSxcclxuICAgICAgICBQb2x5Z29uOiByZXF1aXJlKCcuL3NoYXBlL3BvbHlnb24vUG9seWdvbkZhY3RvcnknKSxcclxuICAgICAgICBSZWN0YW5nbGU6IHJlcXVpcmUoJy4vc2hhcGUvcmVjdGFuZ2xlL1JlY3RhbmdsZUZhY3RvcnknKSxcclxuICAgICAgICBTdGFyOiByZXF1aXJlKCcuL3NoYXBlL3N0YXIvU3RhckZhY3RvcnknKSxcclxuICAgICAgICBUcmlhbmdsZTogcmVxdWlyZSgnLi9zaGFwZS90cmlhbmdsZS9UcmlhbmdsZUZhY3RvcnknKVxyXG4gICAgfSxcclxuXHJcbiAgICBDcmVhdG9yczoge1xyXG4gICAgICAgIEJsaXR0ZXI6IHJlcXVpcmUoJy4vYmxpdHRlci9CbGl0dGVyQ3JlYXRvcicpLFxyXG4gICAgICAgIENvbnRhaW5lcjogcmVxdWlyZSgnLi9jb250YWluZXIvQ29udGFpbmVyQ3JlYXRvcicpLFxyXG4gICAgICAgIER5bmFtaWNCaXRtYXBUZXh0OiByZXF1aXJlKCcuL2JpdG1hcHRleHQvZHluYW1pYy9EeW5hbWljQml0bWFwVGV4dENyZWF0b3InKSxcclxuICAgICAgICBHcmFwaGljczogcmVxdWlyZSgnLi9ncmFwaGljcy9HcmFwaGljc0NyZWF0b3InKSxcclxuICAgICAgICBHcm91cDogcmVxdWlyZSgnLi9ncm91cC9Hcm91cENyZWF0b3InKSxcclxuICAgICAgICBJbWFnZTogcmVxdWlyZSgnLi9pbWFnZS9JbWFnZUNyZWF0b3InKSxcclxuICAgICAgICBQYXJ0aWNsZXM6IHJlcXVpcmUoJy4vcGFydGljbGVzL1BhcnRpY2xlTWFuYWdlckNyZWF0b3InKSxcclxuICAgICAgICBSZW5kZXJUZXh0dXJlOiByZXF1aXJlKCcuL3JlbmRlcnRleHR1cmUvUmVuZGVyVGV4dHVyZUNyZWF0b3InKSxcclxuICAgICAgICBTcHJpdGU6IHJlcXVpcmUoJy4vc3ByaXRlL1Nwcml0ZUNyZWF0b3InKSxcclxuICAgICAgICBTdGF0aWNCaXRtYXBUZXh0OiByZXF1aXJlKCcuL2JpdG1hcHRleHQvc3RhdGljL0JpdG1hcFRleHRDcmVhdG9yJyksXHJcbiAgICAgICAgVGV4dDogcmVxdWlyZSgnLi90ZXh0L3N0YXRpYy9UZXh0Q3JlYXRvcicpLFxyXG4gICAgICAgIFRpbGVTcHJpdGU6IHJlcXVpcmUoJy4vdGlsZXNwcml0ZS9UaWxlU3ByaXRlQ3JlYXRvcicpLFxyXG4gICAgICAgIFpvbmU6IHJlcXVpcmUoJy4vem9uZS9ab25lQ3JlYXRvcicpLFxyXG4gICAgICAgIFZpZGVvOiByZXF1aXJlKCcuL3ZpZGVvL1ZpZGVvQ3JlYXRvcicpXHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxuaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUilcclxue1xyXG4gICAgLy8gIFdlYkdMIG9ubHkgR2FtZSBPYmplY3RzXHJcbiAgICBHYW1lT2JqZWN0cy5NZXNoID0gcmVxdWlyZSgnLi9tZXNoL01lc2gnKTtcclxuICAgIEdhbWVPYmplY3RzLlF1YWQgPSByZXF1aXJlKCcuL3F1YWQvUXVhZCcpO1xyXG4gICAgR2FtZU9iamVjdHMuU2hhZGVyID0gcmVxdWlyZSgnLi9zaGFkZXIvU2hhZGVyJyk7XHJcblxyXG4gICAgR2FtZU9iamVjdHMuRmFjdG9yaWVzLk1lc2ggPSByZXF1aXJlKCcuL21lc2gvTWVzaEZhY3RvcnknKTtcclxuICAgIEdhbWVPYmplY3RzLkZhY3Rvcmllcy5RdWFkID0gcmVxdWlyZSgnLi9xdWFkL1F1YWRGYWN0b3J5Jyk7XHJcbiAgICBHYW1lT2JqZWN0cy5GYWN0b3JpZXMuU2hhZGVyID0gcmVxdWlyZSgnLi9zaGFkZXIvU2hhZGVyRmFjdG9yeScpO1xyXG5cclxuICAgIEdhbWVPYmplY3RzLkNyZWF0b3JzLk1lc2ggPSByZXF1aXJlKCcuL21lc2gvTWVzaENyZWF0b3InKTtcclxuICAgIEdhbWVPYmplY3RzLkNyZWF0b3JzLlF1YWQgPSByZXF1aXJlKCcuL3F1YWQvUXVhZENyZWF0b3InKTtcclxuICAgIEdhbWVPYmplY3RzLkNyZWF0b3JzLlNoYWRlciA9IHJlcXVpcmUoJy4vc2hhZGVyL1NoYWRlckNyZWF0b3InKTtcclxuXHJcbiAgICBHYW1lT2JqZWN0cy5MaWdodCA9IHJlcXVpcmUoJy4vbGlnaHRzL0xpZ2h0Jyk7XHJcblxyXG4gICAgcmVxdWlyZSgnLi9saWdodHMvTGlnaHRzTWFuYWdlcicpO1xyXG4gICAgcmVxdWlyZSgnLi9saWdodHMvTGlnaHRzUGx1Z2luJyk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2FtZU9iamVjdHM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/lights/Light.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/lights/Light.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Utils = __webpack_require__(/*! ../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A 2D point light.\r\n *\r\n * These are typically created by a {@link Phaser.GameObjects.LightsManager}, available from within a scene via `this.lights`.\r\n *\r\n * Any Game Objects using the Light2D pipeline will then be affected by these Lights.\r\n *\r\n * They can also simply be used to represent a point light for your own purposes.\r\n *\r\n * @class Light\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal position of the light.\r\n * @param {number} y - The vertical position of the light.\r\n * @param {number} radius - The radius of the light.\r\n * @param {number} r - The red color of the light. A value between 0 and 1.\r\n * @param {number} g - The green color of the light. A value between 0 and 1.\r\n * @param {number} b - The blue color of the light. A value between 0 and 1.\r\n * @param {number} intensity - The intensity of the light.\r\n */\r\nvar Light = new Class({\r\n\r\n initialize:\r\n\r\n function Light (x, y, radius, r, g, b, intensity)\r\n {\r\n /**\r\n * The horizontal position of the light.\r\n *\r\n * @name Phaser.GameObjects.Light#x\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.x = x;\r\n\r\n /**\r\n * The vertical position of the light.\r\n *\r\n * @name Phaser.GameObjects.Light#y\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.y = y;\r\n\r\n /**\r\n * The radius of the light.\r\n *\r\n * @name Phaser.GameObjects.Light#radius\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.radius = radius;\r\n\r\n /**\r\n * The red color of the light. A value between 0 and 1.\r\n *\r\n * @name Phaser.GameObjects.Light#r\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.r = r;\r\n\r\n /**\r\n * The green color of the light. A value between 0 and 1.\r\n *\r\n * @name Phaser.GameObjects.Light#g\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.g = g;\r\n\r\n /**\r\n * The blue color of the light. A value between 0 and 1.\r\n *\r\n * @name Phaser.GameObjects.Light#b\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.b = b;\r\n\r\n /**\r\n * The intensity of the light.\r\n *\r\n * @name Phaser.GameObjects.Light#intensity\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.intensity = intensity;\r\n\r\n /**\r\n * The horizontal scroll factor of the light.\r\n *\r\n * @name Phaser.GameObjects.Light#scrollFactorX\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.scrollFactorX = 1.0;\r\n\r\n /**\r\n * The vertical scroll factor of the light.\r\n *\r\n * @name Phaser.GameObjects.Light#scrollFactorY\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.scrollFactorY = 1.0;\r\n },\r\n\r\n /**\r\n * Set the properties of the light.\r\n *\r\n * Sets both horizontal and vertical scroll factor to 1. Use {@link Phaser.GameObjects.Light#setScrollFactor} to set\r\n * the scroll factor.\r\n *\r\n * @method Phaser.GameObjects.Light#set\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal position of the light.\r\n * @param {number} y - The vertical position of the light.\r\n * @param {number} radius - The radius of the light.\r\n * @param {number} r - The red color. A value between 0 and 1.\r\n * @param {number} g - The green color. A value between 0 and 1.\r\n * @param {number} b - The blue color. A value between 0 and 1.\r\n * @param {number} intensity - The intensity of the light.\r\n *\r\n * @return {Phaser.GameObjects.Light} This Light object.\r\n */\r\n set: function (x, y, radius, r, g, b, intensity)\r\n {\r\n this.x = x;\r\n this.y = y;\r\n\r\n this.radius = radius;\r\n\r\n this.r = r;\r\n this.g = g;\r\n this.b = b;\r\n\r\n this.intensity = intensity;\r\n\r\n this.scrollFactorX = 1;\r\n this.scrollFactorY = 1;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the scroll factor of the light.\r\n *\r\n * @method Phaser.GameObjects.Light#setScrollFactor\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal scroll factor of the light.\r\n * @param {number} y - The vertical scroll factor of the light.\r\n *\r\n * @return {Phaser.GameObjects.Light} This Light object.\r\n */\r\n setScrollFactor: function (x, y)\r\n {\r\n if (x === undefined) { x = 1; }\r\n if (y === undefined) { y = x; }\r\n\r\n this.scrollFactorX = x;\r\n this.scrollFactorY = y;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the color of the light from a single integer RGB value.\r\n *\r\n * @method Phaser.GameObjects.Light#setColor\r\n * @since 3.0.0\r\n *\r\n * @param {number} rgb - The integer RGB color of the light.\r\n *\r\n * @return {Phaser.GameObjects.Light} This Light object.\r\n */\r\n setColor: function (rgb)\r\n {\r\n var color = Utils.getFloatsFromUintRGB(rgb);\r\n\r\n this.r = color[0];\r\n this.g = color[1];\r\n this.b = color[2];\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the intensity of the light.\r\n *\r\n * @method Phaser.GameObjects.Light#setIntensity\r\n * @since 3.0.0\r\n *\r\n * @param {number} intensity - The intensity of the light.\r\n *\r\n * @return {Phaser.GameObjects.Light} This Light object.\r\n */\r\n setIntensity: function (intensity)\r\n {\r\n this.intensity = intensity;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the position of the light.\r\n *\r\n * @method Phaser.GameObjects.Light#setPosition\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal position of the light.\r\n * @param {number} y - The vertical position of the light.\r\n *\r\n * @return {Phaser.GameObjects.Light} This Light object.\r\n */\r\n setPosition: function (x, y)\r\n {\r\n this.x = x;\r\n this.y = y;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the radius of the light.\r\n *\r\n * @method Phaser.GameObjects.Light#setRadius\r\n * @since 3.0.0\r\n *\r\n * @param {number} radius - The radius of the light.\r\n *\r\n * @return {Phaser.GameObjects.Light} This Light object.\r\n */\r\n setRadius: function (radius)\r\n {\r\n this.radius = radius;\r\n\r\n return this;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Light;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9saWdodHMvTGlnaHQuanM/MjMxNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxZQUFZLG1CQUFPLENBQUMscUZBQTRCOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyx1Q0FBdUM7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLGtFQUFrRSwrQ0FBK0M7QUFDakg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL2xpZ2h0cy9MaWdodC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXIvd2ViZ2wvVXRpbHMnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgMkQgcG9pbnQgbGlnaHQuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSB0eXBpY2FsbHkgY3JlYXRlZCBieSBhIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHRzTWFuYWdlcn0sIGF2YWlsYWJsZSBmcm9tIHdpdGhpbiBhIHNjZW5lIHZpYSBgdGhpcy5saWdodHNgLlxyXG4gKlxyXG4gKiBBbnkgR2FtZSBPYmplY3RzIHVzaW5nIHRoZSBMaWdodDJEIHBpcGVsaW5lIHdpbGwgdGhlbiBiZSBhZmZlY3RlZCBieSB0aGVzZSBMaWdodHMuXHJcbiAqXHJcbiAqIFRoZXkgY2FuIGFsc28gc2ltcGx5IGJlIHVzZWQgdG8gcmVwcmVzZW50IGEgcG9pbnQgbGlnaHQgZm9yIHlvdXIgb3duIHB1cnBvc2VzLlxyXG4gKlxyXG4gKiBAY2xhc3MgTGlnaHRcclxuICogQG1lbWJlcm9mIFBoYXNlci5HYW1lT2JqZWN0c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIGxpZ2h0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgbGlnaHQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWRpdXMgLSBUaGUgcmFkaXVzIG9mIHRoZSBsaWdodC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHIgLSBUaGUgcmVkIGNvbG9yIG9mIHRoZSBsaWdodC4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBnIC0gVGhlIGdyZWVuIGNvbG9yIG9mIHRoZSBsaWdodC4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBiIC0gVGhlIGJsdWUgY29sb3Igb2YgdGhlIGxpZ2h0LiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMS5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVuc2l0eSAtIFRoZSBpbnRlbnNpdHkgb2YgdGhlIGxpZ2h0LlxyXG4gKi9cclxudmFyIExpZ2h0ID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIExpZ2h0ICh4LCB5LCByYWRpdXMsIHIsIGcsIGIsIGludGVuc2l0eSlcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgbGlnaHQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHQjeFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy54ID0geDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBsaWdodC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodCN5XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnkgPSB5O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcmFkaXVzIG9mIHRoZSBsaWdodC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodCNyYWRpdXNcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmFkaXVzID0gcmFkaXVzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcmVkIGNvbG9yIG9mIHRoZSBsaWdodC4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHQjclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yID0gcjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGdyZWVuIGNvbG9yIG9mIHRoZSBsaWdodC4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHQjZ1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nID0gZztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGJsdWUgY29sb3Igb2YgdGhlIGxpZ2h0LiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodCNiXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmIgPSBiO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaW50ZW5zaXR5IG9mIHRoZSBsaWdodC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodCNpbnRlbnNpdHlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaW50ZW5zaXR5ID0gaW50ZW5zaXR5O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaG9yaXpvbnRhbCBzY3JvbGwgZmFjdG9yIG9mIHRoZSBsaWdodC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodCNzY3JvbGxGYWN0b3JYXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjcm9sbEZhY3RvclggPSAxLjA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB2ZXJ0aWNhbCBzY3JvbGwgZmFjdG9yIG9mIHRoZSBsaWdodC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodCNzY3JvbGxGYWN0b3JZXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjcm9sbEZhY3RvclkgPSAxLjA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBsaWdodC5cclxuICAgICAqXHJcbiAgICAgKiBTZXRzIGJvdGggaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgc2Nyb2xsIGZhY3RvciB0byAxLiBVc2Uge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodCNzZXRTY3JvbGxGYWN0b3J9IHRvIHNldFxyXG4gICAgICogdGhlIHNjcm9sbCBmYWN0b3IuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHQjc2V0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBsaWdodC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBsaWdodC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRpdXMgLSBUaGUgcmFkaXVzIG9mIHRoZSBsaWdodC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByIC0gVGhlIHJlZCBjb2xvci4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZyAtIFRoZSBncmVlbiBjb2xvci4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYiAtIFRoZSBibHVlIGNvbG9yLiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlbnNpdHkgLSBUaGUgaW50ZW5zaXR5IG9mIHRoZSBsaWdodC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHR9IFRoaXMgTGlnaHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh4LCB5LCByYWRpdXMsIHIsIGcsIGIsIGludGVuc2l0eSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnggPSB4O1xyXG4gICAgICAgIHRoaXMueSA9IHk7XHJcblxyXG4gICAgICAgIHRoaXMucmFkaXVzID0gcmFkaXVzO1xyXG5cclxuICAgICAgICB0aGlzLnIgPSByO1xyXG4gICAgICAgIHRoaXMuZyA9IGc7XHJcbiAgICAgICAgdGhpcy5iID0gYjtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlbnNpdHkgPSBpbnRlbnNpdHk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsRmFjdG9yWCA9IDE7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxGYWN0b3JZID0gMTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBzY3JvbGwgZmFjdG9yIG9mIHRoZSBsaWdodC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodCNzZXRTY3JvbGxGYWN0b3JcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgc2Nyb2xsIGZhY3RvciBvZiB0aGUgbGlnaHQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBzY3JvbGwgZmFjdG9yIG9mIHRoZSBsaWdodC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHR9IFRoaXMgTGlnaHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTY3JvbGxGYWN0b3I6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDE7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSB4OyB9XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsRmFjdG9yWCA9IHg7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxGYWN0b3JZID0geTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBjb2xvciBvZiB0aGUgbGlnaHQgZnJvbSBhIHNpbmdsZSBpbnRlZ2VyIFJHQiB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodCNzZXRDb2xvclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJnYiAtIFRoZSBpbnRlZ2VyIFJHQiBjb2xvciBvZiB0aGUgbGlnaHQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0fSBUaGlzIExpZ2h0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Q29sb3I6IGZ1bmN0aW9uIChyZ2IpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGNvbG9yID0gVXRpbHMuZ2V0RmxvYXRzRnJvbVVpbnRSR0IocmdiKTtcclxuXHJcbiAgICAgICAgdGhpcy5yID0gY29sb3JbMF07XHJcbiAgICAgICAgdGhpcy5nID0gY29sb3JbMV07XHJcbiAgICAgICAgdGhpcy5iID0gY29sb3JbMl07XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgaW50ZW5zaXR5IG9mIHRoZSBsaWdodC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodCNzZXRJbnRlbnNpdHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlbnNpdHkgLSBUaGUgaW50ZW5zaXR5IG9mIHRoZSBsaWdodC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHR9IFRoaXMgTGlnaHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRJbnRlbnNpdHk6IGZ1bmN0aW9uIChpbnRlbnNpdHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5pbnRlbnNpdHkgPSBpbnRlbnNpdHk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgcG9zaXRpb24gb2YgdGhlIGxpZ2h0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0I3NldFBvc2l0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBsaWdodC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBsaWdodC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHR9IFRoaXMgTGlnaHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRQb3NpdGlvbjogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy54ID0geDtcclxuICAgICAgICB0aGlzLnkgPSB5O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHJhZGl1cyBvZiB0aGUgbGlnaHQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHQjc2V0UmFkaXVzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkaXVzIC0gVGhlIHJhZGl1cyBvZiB0aGUgbGlnaHQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0fSBUaGlzIExpZ2h0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0UmFkaXVzOiBmdW5jdGlvbiAocmFkaXVzKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmFkaXVzID0gcmFkaXVzO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBMaWdodDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/lights/Light.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/lights/LightsManager.js":
/*!*********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/lights/LightsManager.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Light = __webpack_require__(/*! ./Light */ \"./node_modules/phaser/src/gameobjects/lights/Light.js\");\r\nvar Utils = __webpack_require__(/*! ../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * @callback LightForEach\r\n *\r\n * @param {Phaser.GameObjects.Light} light - The Light.\r\n */\r\n\r\n/**\r\n * @classdesc\r\n * Manages Lights for a Scene.\r\n *\r\n * Affects the rendering of Game Objects using the `Light2D` pipeline.\r\n *\r\n * @class LightsManager\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n */\r\nvar LightsManager = new Class({\r\n\r\n initialize:\r\n\r\n function LightsManager ()\r\n {\r\n /**\r\n * The pool of Lights.\r\n *\r\n * Used to recycle removed Lights for a more efficient use of memory.\r\n *\r\n * @name Phaser.GameObjects.LightsManager#lightPool\r\n * @type {Phaser.GameObjects.Light[]}\r\n * @default []\r\n * @since 3.0.0\r\n */\r\n this.lightPool = [];\r\n\r\n /**\r\n * The Lights in the Scene.\r\n *\r\n * @name Phaser.GameObjects.LightsManager#lights\r\n * @type {Phaser.GameObjects.Light[]}\r\n * @default []\r\n * @since 3.0.0\r\n */\r\n this.lights = [];\r\n\r\n /**\r\n * Lights that have been culled from a Camera's viewport.\r\n *\r\n * Lights in this list will not be rendered.\r\n *\r\n * @name Phaser.GameObjects.LightsManager#culledLights\r\n * @type {Phaser.GameObjects.Light[]}\r\n * @default []\r\n * @since 3.0.0\r\n */\r\n this.culledLights = [];\r\n\r\n /**\r\n * The ambient color.\r\n *\r\n * @name Phaser.GameObjects.LightsManager#ambientColor\r\n * @type {{ r: number, g: number, b: number }}\r\n * @since 3.0.0\r\n */\r\n this.ambientColor = { r: 0.1, g: 0.1, b: 0.1 };\r\n\r\n /**\r\n * Whether the Lights Manager is enabled.\r\n *\r\n * @name Phaser.GameObjects.LightsManager#active\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.active = false;\r\n\r\n /**\r\n * The maximum number of lights that a single Camera and the lights shader can process.\r\n * Change this via the `maxLights` property in your game config, as it cannot be changed at runtime.\r\n *\r\n * @name Phaser.GameObjects.LightsManager#maxLights\r\n * @type {integer}\r\n * @readonly\r\n * @since 3.15.0\r\n */\r\n this.maxLights = -1;\r\n },\r\n\r\n /**\r\n * Enable the Lights Manager.\r\n *\r\n * @method Phaser.GameObjects.LightsManager#enable\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.LightsManager} This Lights Manager object.\r\n */\r\n enable: function ()\r\n {\r\n if (this.maxLights === -1)\r\n {\r\n this.maxLights = this.scene.sys.game.renderer.config.maxLights;\r\n }\r\n\r\n this.active = true;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Disable the Lights Manager.\r\n *\r\n * @method Phaser.GameObjects.LightsManager#disable\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.LightsManager} This Lights Manager object.\r\n */\r\n disable: function ()\r\n {\r\n this.active = false;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Cull any Lights that aren't visible to the given Camera.\r\n *\r\n * Culling Lights improves performance by ensuring that only Lights within a Camera's viewport are rendered.\r\n *\r\n * @method Phaser.GameObjects.LightsManager#cull\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera to cull Lights for.\r\n *\r\n * @return {Phaser.GameObjects.Light[]} The culled Lights.\r\n */\r\n cull: function (camera)\r\n {\r\n var lights = this.lights;\r\n var culledLights = this.culledLights;\r\n var length = lights.length;\r\n var cameraCenterX = camera.x + camera.width / 2.0;\r\n var cameraCenterY = camera.y + camera.height / 2.0;\r\n var cameraRadius = (camera.width + camera.height) / 2.0;\r\n var point = { x: 0, y: 0 };\r\n var cameraMatrix = camera.matrix;\r\n var viewportHeight = this.systems.game.config.height;\r\n\r\n culledLights.length = 0;\r\n\r\n for (var index = 0; index < length && culledLights.length < this.maxLights; index++)\r\n {\r\n var light = lights[index];\r\n\r\n cameraMatrix.transformPoint(light.x, light.y, point);\r\n\r\n // We'll just use bounding spheres to test if lights should be rendered\r\n var dx = cameraCenterX - (point.x - (camera.scrollX * light.scrollFactorX * camera.zoom));\r\n var dy = cameraCenterY - (viewportHeight - (point.y - (camera.scrollY * light.scrollFactorY) * camera.zoom));\r\n var distance = Math.sqrt(dx * dx + dy * dy);\r\n\r\n if (distance < light.radius + cameraRadius)\r\n {\r\n culledLights.push(lights[index]);\r\n }\r\n }\r\n\r\n return culledLights;\r\n },\r\n\r\n /**\r\n * Iterate over each Light with a callback.\r\n *\r\n * @method Phaser.GameObjects.LightsManager#forEachLight\r\n * @since 3.0.0\r\n *\r\n * @param {LightForEach} callback - The callback that is called with each Light.\r\n *\r\n * @return {Phaser.GameObjects.LightsManager} This Lights Manager object.\r\n */\r\n forEachLight: function (callback)\r\n {\r\n if (!callback)\r\n {\r\n return;\r\n }\r\n\r\n var lights = this.lights;\r\n var length = lights.length;\r\n\r\n for (var index = 0; index < length; ++index)\r\n {\r\n callback(lights[index]);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the ambient light color.\r\n *\r\n * @method Phaser.GameObjects.LightsManager#setAmbientColor\r\n * @since 3.0.0\r\n *\r\n * @param {number} rgb - The integer RGB color of the ambient light.\r\n *\r\n * @return {Phaser.GameObjects.LightsManager} This Lights Manager object.\r\n */\r\n setAmbientColor: function (rgb)\r\n {\r\n var color = Utils.getFloatsFromUintRGB(rgb);\r\n\r\n this.ambientColor.r = color[0];\r\n this.ambientColor.g = color[1];\r\n this.ambientColor.b = color[2];\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Returns the maximum number of Lights allowed to appear at once.\r\n *\r\n * @method Phaser.GameObjects.LightsManager#getMaxVisibleLights\r\n * @since 3.0.0\r\n *\r\n * @return {integer} The maximum number of Lights allowed to appear at once.\r\n */\r\n getMaxVisibleLights: function ()\r\n {\r\n return 10;\r\n },\r\n\r\n /**\r\n * Get the number of Lights managed by this Lights Manager.\r\n *\r\n * @method Phaser.GameObjects.LightsManager#getLightCount\r\n * @since 3.0.0\r\n *\r\n * @return {integer} The number of Lights managed by this Lights Manager.\r\n */\r\n getLightCount: function ()\r\n {\r\n return this.lights.length;\r\n },\r\n\r\n /**\r\n * Add a Light.\r\n *\r\n * @method Phaser.GameObjects.LightsManager#addLight\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of the Light.\r\n * @param {number} [y=0] - The vertical position of the Light.\r\n * @param {number} [radius=100] - The radius of the Light.\r\n * @param {number} [rgb=0xffffff] - The integer RGB color of the light.\r\n * @param {number} [intensity=1] - The intensity of the Light.\r\n *\r\n * @return {Phaser.GameObjects.Light} The Light that was added.\r\n */\r\n addLight: function (x, y, radius, rgb, intensity)\r\n {\r\n var color = null;\r\n var light = null;\r\n\r\n x = (x === undefined) ? 0.0 : x;\r\n y = (y === undefined) ? 0.0 : y;\r\n rgb = (rgb === undefined) ? 0xffffff : rgb;\r\n radius = (radius === undefined) ? 100.0 : radius;\r\n intensity = (intensity === undefined) ? 1.0 : intensity;\r\n\r\n color = Utils.getFloatsFromUintRGB(rgb);\r\n light = null;\r\n\r\n if (this.lightPool.length > 0)\r\n {\r\n light = this.lightPool.pop();\r\n light.set(x, y, radius, color[0], color[1], color[2], intensity);\r\n }\r\n else\r\n {\r\n light = new Light(x, y, radius, color[0], color[1], color[2], intensity);\r\n }\r\n\r\n this.lights.push(light);\r\n\r\n return light;\r\n },\r\n\r\n /**\r\n * Remove a Light.\r\n *\r\n * @method Phaser.GameObjects.LightsManager#removeLight\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Light} light - The Light to remove.\r\n *\r\n * @return {Phaser.GameObjects.LightsManager} This Lights Manager object.\r\n */\r\n removeLight: function (light)\r\n {\r\n var index = this.lights.indexOf(light);\r\n\r\n if (index >= 0)\r\n {\r\n this.lightPool.push(light);\r\n this.lights.splice(index, 1);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Shut down the Lights Manager.\r\n *\r\n * Recycles all active Lights into the Light pool, resets ambient light color and clears the lists of Lights and\r\n * culled Lights.\r\n *\r\n * @method Phaser.GameObjects.LightsManager#shutdown\r\n * @since 3.0.0\r\n */\r\n shutdown: function ()\r\n {\r\n while (this.lights.length > 0)\r\n {\r\n this.lightPool.push(this.lights.pop());\r\n }\r\n\r\n this.ambientColor = { r: 0.1, g: 0.1, b: 0.1 };\r\n this.culledLights.length = 0;\r\n this.lights.length = 0;\r\n },\r\n\r\n /**\r\n * Destroy the Lights Manager.\r\n *\r\n * Cleans up all references by calling {@link Phaser.GameObjects.LightsManager#shutdown}.\r\n *\r\n * @method Phaser.GameObjects.LightsManager#destroy\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.shutdown();\r\n }\r\n\r\n});\r\n\r\nmodule.exports = LightsManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9saWdodHMvTGlnaHRzTWFuYWdlci5qcz8zNWQyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLFlBQVksbUJBQU8sQ0FBQyxzRUFBUztBQUM3QixZQUFZLG1CQUFPLENBQUMscUZBQTRCOztBQUVoRDtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlCQUF5QjtBQUNwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBLDZCQUE2Qjs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGlDQUFpQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGlDQUFpQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTs7QUFFQTs7QUFFQSwyQkFBMkIsd0RBQXdEO0FBQ25GO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCO0FBQ0EsZ0JBQWdCLGlDQUFpQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDJCQUEyQixnQkFBZ0I7QUFDM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsaUNBQWlDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUseUJBQXlCO0FBQ3hDO0FBQ0EsZ0JBQWdCLGlDQUFpQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxnREFBZ0Q7QUFDNUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvbGlnaHRzL0xpZ2h0c01hbmFnZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBMaWdodCA9IHJlcXVpcmUoJy4vTGlnaHQnKTtcclxudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXIvd2ViZ2wvVXRpbHMnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2FsbGJhY2sgTGlnaHRGb3JFYWNoXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0fSBsaWdodCAtIFRoZSBMaWdodC5cclxuICovXHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBNYW5hZ2VzIExpZ2h0cyBmb3IgYSBTY2VuZS5cclxuICpcclxuICogQWZmZWN0cyB0aGUgcmVuZGVyaW5nIG9mIEdhbWUgT2JqZWN0cyB1c2luZyB0aGUgYExpZ2h0MkRgIHBpcGVsaW5lLlxyXG4gKlxyXG4gKiBAY2xhc3MgTGlnaHRzTWFuYWdlclxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbnZhciBMaWdodHNNYW5hZ2VyID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIExpZ2h0c01hbmFnZXIgKClcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcG9vbCBvZiBMaWdodHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBVc2VkIHRvIHJlY3ljbGUgcmVtb3ZlZCBMaWdodHMgZm9yIGEgbW9yZSBlZmZpY2llbnQgdXNlIG9mIG1lbW9yeS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodHNNYW5hZ2VyI2xpZ2h0UG9vbFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHRbXX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBbXVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubGlnaHRQb29sID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBMaWdodHMgaW4gdGhlIFNjZW5lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0c01hbmFnZXIjbGlnaHRzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5MaWdodFtdfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5saWdodHMgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTGlnaHRzIHRoYXQgaGF2ZSBiZWVuIGN1bGxlZCBmcm9tIGEgQ2FtZXJhJ3Mgdmlld3BvcnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBMaWdodHMgaW4gdGhpcyBsaXN0IHdpbGwgbm90IGJlIHJlbmRlcmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0c01hbmFnZXIjY3VsbGVkTGlnaHRzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5MaWdodFtdfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdWxsZWRMaWdodHMgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGFtYmllbnQgY29sb3IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHRzTWFuYWdlciNhbWJpZW50Q29sb3JcclxuICAgICAgICAgKiBAdHlwZSB7eyByOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyIH19XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hbWJpZW50Q29sb3IgPSB7IHI6IDAuMSwgZzogMC4xLCBiOiAwLjEgfTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0aGUgTGlnaHRzIE1hbmFnZXIgaXMgZW5hYmxlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodHNNYW5hZ2VyI2FjdGl2ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGxpZ2h0cyB0aGF0IGEgc2luZ2xlIENhbWVyYSBhbmQgdGhlIGxpZ2h0cyBzaGFkZXIgY2FuIHByb2Nlc3MuXHJcbiAgICAgICAgICogQ2hhbmdlIHRoaXMgdmlhIHRoZSBgbWF4TGlnaHRzYCBwcm9wZXJ0eSBpbiB5b3VyIGdhbWUgY29uZmlnLCBhcyBpdCBjYW5ub3QgYmUgY2hhbmdlZCBhdCBydW50aW1lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0c01hbmFnZXIjbWF4TGlnaHRzXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWF4TGlnaHRzID0gLTE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW5hYmxlIHRoZSBMaWdodHMgTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodHNNYW5hZ2VyI2VuYWJsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0c01hbmFnZXJ9IFRoaXMgTGlnaHRzIE1hbmFnZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBlbmFibGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMubWF4TGlnaHRzID09PSAtMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMubWF4TGlnaHRzID0gdGhpcy5zY2VuZS5zeXMuZ2FtZS5yZW5kZXJlci5jb25maWcubWF4TGlnaHRzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNhYmxlIHRoZSBMaWdodHMgTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodHNNYW5hZ2VyI2Rpc2FibGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5MaWdodHNNYW5hZ2VyfSBUaGlzIExpZ2h0cyBNYW5hZ2VyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZGlzYWJsZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDdWxsIGFueSBMaWdodHMgdGhhdCBhcmVuJ3QgdmlzaWJsZSB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gICAgICpcclxuICAgICAqIEN1bGxpbmcgTGlnaHRzIGltcHJvdmVzIHBlcmZvcm1hbmNlIGJ5IGVuc3VyaW5nIHRoYXQgb25seSBMaWdodHMgd2l0aGluIGEgQ2FtZXJhJ3Mgdmlld3BvcnQgYXJlIHJlbmRlcmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0c01hbmFnZXIjY3VsbFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0byBjdWxsIExpZ2h0cyBmb3IuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0W119IFRoZSBjdWxsZWQgTGlnaHRzLlxyXG4gICAgICovXHJcbiAgICBjdWxsOiBmdW5jdGlvbiAoY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBsaWdodHMgPSB0aGlzLmxpZ2h0cztcclxuICAgICAgICB2YXIgY3VsbGVkTGlnaHRzID0gdGhpcy5jdWxsZWRMaWdodHM7XHJcbiAgICAgICAgdmFyIGxlbmd0aCA9IGxpZ2h0cy5sZW5ndGg7XHJcbiAgICAgICAgdmFyIGNhbWVyYUNlbnRlclggPSBjYW1lcmEueCArIGNhbWVyYS53aWR0aCAvIDIuMDtcclxuICAgICAgICB2YXIgY2FtZXJhQ2VudGVyWSA9IGNhbWVyYS55ICsgY2FtZXJhLmhlaWdodCAvIDIuMDtcclxuICAgICAgICB2YXIgY2FtZXJhUmFkaXVzID0gKGNhbWVyYS53aWR0aCArIGNhbWVyYS5oZWlnaHQpIC8gMi4wO1xyXG4gICAgICAgIHZhciBwb2ludCA9IHsgeDogMCwgeTogMCB9O1xyXG4gICAgICAgIHZhciBjYW1lcmFNYXRyaXggPSBjYW1lcmEubWF0cml4O1xyXG4gICAgICAgIHZhciB2aWV3cG9ydEhlaWdodCA9IHRoaXMuc3lzdGVtcy5nYW1lLmNvbmZpZy5oZWlnaHQ7XHJcblxyXG4gICAgICAgIGN1bGxlZExpZ2h0cy5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoICYmIGN1bGxlZExpZ2h0cy5sZW5ndGggPCB0aGlzLm1heExpZ2h0czsgaW5kZXgrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBsaWdodCA9IGxpZ2h0c1tpbmRleF07XHJcblxyXG4gICAgICAgICAgICBjYW1lcmFNYXRyaXgudHJhbnNmb3JtUG9pbnQobGlnaHQueCwgbGlnaHQueSwgcG9pbnQpO1xyXG5cclxuICAgICAgICAgICAgLy8gIFdlJ2xsIGp1c3QgdXNlIGJvdW5kaW5nIHNwaGVyZXMgdG8gdGVzdCBpZiBsaWdodHMgc2hvdWxkIGJlIHJlbmRlcmVkXHJcbiAgICAgICAgICAgIHZhciBkeCA9IGNhbWVyYUNlbnRlclggLSAocG9pbnQueCAtIChjYW1lcmEuc2Nyb2xsWCAqIGxpZ2h0LnNjcm9sbEZhY3RvclggKiBjYW1lcmEuem9vbSkpO1xyXG4gICAgICAgICAgICB2YXIgZHkgPSBjYW1lcmFDZW50ZXJZIC0gKHZpZXdwb3J0SGVpZ2h0IC0gKHBvaW50LnkgLSAoY2FtZXJhLnNjcm9sbFkgKiBsaWdodC5zY3JvbGxGYWN0b3JZKSAqIGNhbWVyYS56b29tKSk7XHJcbiAgICAgICAgICAgIHZhciBkaXN0YW5jZSA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZGlzdGFuY2UgPCBsaWdodC5yYWRpdXMgKyBjYW1lcmFSYWRpdXMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGN1bGxlZExpZ2h0cy5wdXNoKGxpZ2h0c1tpbmRleF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY3VsbGVkTGlnaHRzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0ZXJhdGUgb3ZlciBlYWNoIExpZ2h0IHdpdGggYSBjYWxsYmFjay5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodHNNYW5hZ2VyI2ZvckVhY2hMaWdodFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtMaWdodEZvckVhY2h9IGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHdpdGggZWFjaCBMaWdodC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHRzTWFuYWdlcn0gVGhpcyBMaWdodHMgTWFuYWdlciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGZvckVhY2hMaWdodDogZnVuY3Rpb24gKGNhbGxiYWNrKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghY2FsbGJhY2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbGlnaHRzID0gdGhpcy5saWdodHM7XHJcbiAgICAgICAgdmFyIGxlbmd0aCA9IGxpZ2h0cy5sZW5ndGg7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhsaWdodHNbaW5kZXhdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgYW1iaWVudCBsaWdodCBjb2xvci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodHNNYW5hZ2VyI3NldEFtYmllbnRDb2xvclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJnYiAtIFRoZSBpbnRlZ2VyIFJHQiBjb2xvciBvZiB0aGUgYW1iaWVudCBsaWdodC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHRzTWFuYWdlcn0gVGhpcyBMaWdodHMgTWFuYWdlciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEFtYmllbnRDb2xvcjogZnVuY3Rpb24gKHJnYilcclxuICAgIHtcclxuICAgICAgICB2YXIgY29sb3IgPSBVdGlscy5nZXRGbG9hdHNGcm9tVWludFJHQihyZ2IpO1xyXG5cclxuICAgICAgICB0aGlzLmFtYmllbnRDb2xvci5yID0gY29sb3JbMF07XHJcbiAgICAgICAgdGhpcy5hbWJpZW50Q29sb3IuZyA9IGNvbG9yWzFdO1xyXG4gICAgICAgIHRoaXMuYW1iaWVudENvbG9yLmIgPSBjb2xvclsyXTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgTGlnaHRzIGFsbG93ZWQgdG8gYXBwZWFyIGF0IG9uY2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHRzTWFuYWdlciNnZXRNYXhWaXNpYmxlTGlnaHRzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgbWF4aW11bSBudW1iZXIgb2YgTGlnaHRzIGFsbG93ZWQgdG8gYXBwZWFyIGF0IG9uY2UuXHJcbiAgICAgKi9cclxuICAgIGdldE1heFZpc2libGVMaWdodHM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIDEwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgbnVtYmVyIG9mIExpZ2h0cyBtYW5hZ2VkIGJ5IHRoaXMgTGlnaHRzIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHRzTWFuYWdlciNnZXRMaWdodENvdW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgbnVtYmVyIG9mIExpZ2h0cyBtYW5hZ2VkIGJ5IHRoaXMgTGlnaHRzIE1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIGdldExpZ2h0Q291bnQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGlnaHRzLmxlbmd0aDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYSBMaWdodC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodHNNYW5hZ2VyI2FkZExpZ2h0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgTGlnaHQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIExpZ2h0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtyYWRpdXM9MTAwXSAtIFRoZSByYWRpdXMgb2YgdGhlIExpZ2h0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtyZ2I9MHhmZmZmZmZdIC0gVGhlIGludGVnZXIgUkdCIGNvbG9yIG9mIHRoZSBsaWdodC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbaW50ZW5zaXR5PTFdIC0gVGhlIGludGVuc2l0eSBvZiB0aGUgTGlnaHQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0fSBUaGUgTGlnaHQgdGhhdCB3YXMgYWRkZWQuXHJcbiAgICAgKi9cclxuICAgIGFkZExpZ2h0OiBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzLCByZ2IsIGludGVuc2l0eSlcclxuICAgIHtcclxuICAgICAgICB2YXIgY29sb3IgPSBudWxsO1xyXG4gICAgICAgIHZhciBsaWdodCA9IG51bGw7XHJcblxyXG4gICAgICAgIHggPSAoeCA9PT0gdW5kZWZpbmVkKSA/IDAuMCA6IHg7XHJcbiAgICAgICAgeSA9ICh5ID09PSB1bmRlZmluZWQpID8gMC4wIDogeTtcclxuICAgICAgICByZ2IgPSAocmdiID09PSB1bmRlZmluZWQpID8gMHhmZmZmZmYgOiByZ2I7XHJcbiAgICAgICAgcmFkaXVzID0gKHJhZGl1cyA9PT0gdW5kZWZpbmVkKSA/IDEwMC4wIDogcmFkaXVzO1xyXG4gICAgICAgIGludGVuc2l0eSA9IChpbnRlbnNpdHkgPT09IHVuZGVmaW5lZCkgPyAxLjAgOiBpbnRlbnNpdHk7XHJcblxyXG4gICAgICAgIGNvbG9yID0gVXRpbHMuZ2V0RmxvYXRzRnJvbVVpbnRSR0IocmdiKTtcclxuICAgICAgICBsaWdodCA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmxpZ2h0UG9vbC5sZW5ndGggPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbGlnaHQgPSB0aGlzLmxpZ2h0UG9vbC5wb3AoKTtcclxuICAgICAgICAgICAgbGlnaHQuc2V0KHgsIHksIHJhZGl1cywgY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSwgaW50ZW5zaXR5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbGlnaHQgPSBuZXcgTGlnaHQoeCwgeSwgcmFkaXVzLCBjb2xvclswXSwgY29sb3JbMV0sIGNvbG9yWzJdLCBpbnRlbnNpdHkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saWdodHMucHVzaChsaWdodCk7XHJcblxyXG4gICAgICAgIHJldHVybiBsaWdodDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgYSBMaWdodC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodHNNYW5hZ2VyI3JlbW92ZUxpZ2h0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5MaWdodH0gbGlnaHQgLSBUaGUgTGlnaHQgdG8gcmVtb3ZlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5MaWdodHNNYW5hZ2VyfSBUaGlzIExpZ2h0cyBNYW5hZ2VyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlTGlnaHQ6IGZ1bmN0aW9uIChsaWdodClcclxuICAgIHtcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmxpZ2h0cy5pbmRleE9mKGxpZ2h0KTtcclxuXHJcbiAgICAgICAgaWYgKGluZGV4ID49IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmxpZ2h0UG9vbC5wdXNoKGxpZ2h0KTtcclxuICAgICAgICAgICAgdGhpcy5saWdodHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNodXQgZG93biB0aGUgTGlnaHRzIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogUmVjeWNsZXMgYWxsIGFjdGl2ZSBMaWdodHMgaW50byB0aGUgTGlnaHQgcG9vbCwgcmVzZXRzIGFtYmllbnQgbGlnaHQgY29sb3IgYW5kIGNsZWFycyB0aGUgbGlzdHMgb2YgTGlnaHRzIGFuZFxyXG4gICAgICogY3VsbGVkIExpZ2h0cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodHNNYW5hZ2VyI3NodXRkb3duXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc2h1dGRvd246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgd2hpbGUgKHRoaXMubGlnaHRzLmxlbmd0aCA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmxpZ2h0UG9vbC5wdXNoKHRoaXMubGlnaHRzLnBvcCgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYW1iaWVudENvbG9yID0geyByOiAwLjEsIGc6IDAuMSwgYjogMC4xIH07XHJcbiAgICAgICAgdGhpcy5jdWxsZWRMaWdodHMubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLmxpZ2h0cy5sZW5ndGggPSAwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3kgdGhlIExpZ2h0cyBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIENsZWFucyB1cCBhbGwgcmVmZXJlbmNlcyBieSBjYWxsaW5nIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHRzTWFuYWdlciNzaHV0ZG93bn0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHRzTWFuYWdlciNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNodXRkb3duKCk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTGlnaHRzTWFuYWdlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/lights/LightsManager.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/lights/LightsPlugin.js":
/*!********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/lights/LightsPlugin.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar LightsManager = __webpack_require__(/*! ./LightsManager */ \"./node_modules/phaser/src/gameobjects/lights/LightsManager.js\");\r\nvar PluginCache = __webpack_require__(/*! ../../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar SceneEvents = __webpack_require__(/*! ../../scene/events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Scene plugin that provides a {@link Phaser.GameObjects.LightsManager} for the Light2D pipeline.\r\n *\r\n * Available from within a Scene via `this.lights`.\r\n *\r\n * Add Lights using the {@link Phaser.GameObjects.LightsManager#addLight} method:\r\n *\r\n * ```javascript\r\n * // Enable the Lights Manager because it is disabled by default\r\n * this.lights.enable();\r\n *\r\n * // Create a Light at [400, 300] with a radius of 200\r\n * this.lights.addLight(400, 300, 200);\r\n * ```\r\n *\r\n * For Game Objects to be affected by the Lights when rendered, you will need to set them to use the `Light2D` pipeline like so:\r\n *\r\n * ```javascript\r\n * sprite.setPipeline('Light2D');\r\n * ```\r\n *\r\n * @class LightsPlugin\r\n * @extends Phaser.GameObjects.LightsManager\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene that this Lights Plugin belongs to.\r\n */\r\nvar LightsPlugin = new Class({\r\n\r\n Extends: LightsManager,\r\n\r\n initialize:\r\n\r\n function LightsPlugin (scene)\r\n {\r\n /**\r\n * A reference to the Scene that this Lights Plugin belongs to.\r\n *\r\n * @name Phaser.GameObjects.LightsPlugin#scene\r\n * @type {Phaser.Scene}\r\n * @since 3.0.0\r\n */\r\n this.scene = scene;\r\n\r\n /**\r\n * A reference to the Scene's systems.\r\n *\r\n * @name Phaser.GameObjects.LightsPlugin#systems\r\n * @type {Phaser.Scenes.Systems}\r\n * @since 3.0.0\r\n */\r\n this.systems = scene.sys;\r\n\r\n if (!scene.sys.settings.isBooted)\r\n {\r\n scene.sys.events.once(SceneEvents.BOOT, this.boot, this);\r\n }\r\n\r\n LightsManager.call(this);\r\n },\r\n\r\n /**\r\n * Boot the Lights Plugin.\r\n *\r\n * @method Phaser.GameObjects.LightsPlugin#boot\r\n * @since 3.0.0\r\n */\r\n boot: function ()\r\n {\r\n var eventEmitter = this.systems.events;\r\n\r\n eventEmitter.on(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n eventEmitter.on(SceneEvents.DESTROY, this.destroy, this);\r\n },\r\n\r\n /**\r\n * Destroy the Lights Plugin.\r\n *\r\n * Cleans up all references.\r\n *\r\n * @method Phaser.GameObjects.LightsPlugin#destroy\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.shutdown();\r\n\r\n this.scene = undefined;\r\n this.systems = undefined;\r\n }\r\n\r\n});\r\n\r\nPluginCache.register('LightsPlugin', LightsPlugin, 'lights');\r\n\r\nmodule.exports = LightsPlugin;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9saWdodHMvTGlnaHRzUGx1Z2luLmpzP2ZkNTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsb0JBQW9CLG1CQUFPLENBQUMsc0ZBQWlCO0FBQzdDLGtCQUFrQixtQkFBTyxDQUFDLG1GQUEyQjtBQUNyRCxrQkFBa0IsbUJBQU8sQ0FBQywyRUFBb0I7O0FBRTlDO0FBQ0E7QUFDQSxtQ0FBbUMsdUNBQXVDO0FBQzFFO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixnREFBZ0Q7QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvbGlnaHRzL0xpZ2h0c1BsdWdpbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIExpZ2h0c01hbmFnZXIgPSByZXF1aXJlKCcuL0xpZ2h0c01hbmFnZXInKTtcclxudmFyIFBsdWdpbkNhY2hlID0gcmVxdWlyZSgnLi4vLi4vcGx1Z2lucy9QbHVnaW5DYWNoZScpO1xyXG52YXIgU2NlbmVFdmVudHMgPSByZXF1aXJlKCcuLi8uLi9zY2VuZS9ldmVudHMnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgU2NlbmUgcGx1Z2luIHRoYXQgcHJvdmlkZXMgYSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0c01hbmFnZXJ9IGZvciB0aGUgTGlnaHQyRCBwaXBlbGluZS5cclxuICpcclxuICogQXZhaWxhYmxlIGZyb20gd2l0aGluIGEgU2NlbmUgdmlhIGB0aGlzLmxpZ2h0c2AuXHJcbiAqXHJcbiAqIEFkZCBMaWdodHMgdXNpbmcgdGhlIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHRzTWFuYWdlciNhZGRMaWdodH0gbWV0aG9kOlxyXG4gKlxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIC8vIEVuYWJsZSB0aGUgTGlnaHRzIE1hbmFnZXIgYmVjYXVzZSBpdCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0XHJcbiAqIHRoaXMubGlnaHRzLmVuYWJsZSgpO1xyXG4gKlxyXG4gKiAvLyBDcmVhdGUgYSBMaWdodCBhdCBbNDAwLCAzMDBdIHdpdGggYSByYWRpdXMgb2YgMjAwXHJcbiAqIHRoaXMubGlnaHRzLmFkZExpZ2h0KDQwMCwgMzAwLCAyMDApO1xyXG4gKiBgYGBcclxuICpcclxuICogRm9yIEdhbWUgT2JqZWN0cyB0byBiZSBhZmZlY3RlZCBieSB0aGUgTGlnaHRzIHdoZW4gcmVuZGVyZWQsIHlvdSB3aWxsIG5lZWQgdG8gc2V0IHRoZW0gdG8gdXNlIHRoZSBgTGlnaHQyRGAgcGlwZWxpbmUgbGlrZSBzbzpcclxuICpcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiBzcHJpdGUuc2V0UGlwZWxpbmUoJ0xpZ2h0MkQnKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIEBjbGFzcyBMaWdodHNQbHVnaW5cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0c01hbmFnZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5HYW1lT2JqZWN0c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0aGF0IHRoaXMgTGlnaHRzIFBsdWdpbiBiZWxvbmdzIHRvLlxyXG4gKi9cclxudmFyIExpZ2h0c1BsdWdpbiA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogTGlnaHRzTWFuYWdlcixcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIExpZ2h0c1BsdWdpbiAoc2NlbmUpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgdGhpcyBMaWdodHMgUGx1Z2luIGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHRzUGx1Z2luI3NjZW5lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2VuZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSdzIHN5c3RlbXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuTGlnaHRzUGx1Z2luI3N5c3RlbXNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lcy5TeXN0ZW1zfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcyA9IHNjZW5lLnN5cztcclxuXHJcbiAgICAgICAgaWYgKCFzY2VuZS5zeXMuc2V0dGluZ3MuaXNCb290ZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzY2VuZS5zeXMuZXZlbnRzLm9uY2UoU2NlbmVFdmVudHMuQk9PVCwgdGhpcy5ib290LCB0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExpZ2h0c01hbmFnZXIuY2FsbCh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCb290IHRoZSBMaWdodHMgUGx1Z2luLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkxpZ2h0c1BsdWdpbiNib290XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgYm9vdDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgZXZlbnRFbWl0dGVyID0gdGhpcy5zeXN0ZW1zLmV2ZW50cztcclxuXHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLm9uKFNjZW5lRXZlbnRzLlNIVVRET1dOLCB0aGlzLnNodXRkb3duLCB0aGlzKTtcclxuICAgICAgICBldmVudEVtaXR0ZXIub24oU2NlbmVFdmVudHMuREVTVFJPWSwgdGhpcy5kZXN0cm95LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95IHRoZSBMaWdodHMgUGx1Z2luLlxyXG4gICAgICpcclxuICAgICAqIENsZWFucyB1cCBhbGwgcmVmZXJlbmNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5MaWdodHNQbHVnaW4jZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zaHV0ZG93bigpO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcyA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuUGx1Z2luQ2FjaGUucmVnaXN0ZXIoJ0xpZ2h0c1BsdWdpbicsIExpZ2h0c1BsdWdpbiwgJ2xpZ2h0cycpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBMaWdodHNQbHVnaW47XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/lights/LightsPlugin.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/mesh/Mesh.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/mesh/Mesh.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar MeshRender = __webpack_require__(/*! ./MeshRender */ \"./node_modules/phaser/src/gameobjects/mesh/MeshRender.js\");\r\nvar NOOP = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Mesh Game Object.\r\n *\r\n * @class Mesh\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @webglOnly\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.Size\r\n * @extends Phaser.GameObjects.Components.Texture\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {number[]} vertices - An array containing the vertices data for this Mesh.\r\n * @param {number[]} uv - An array containing the uv data for this Mesh.\r\n * @param {number[]} colors - An array containing the color data for this Mesh.\r\n * @param {number[]} alphas - An array containing the alpha data for this Mesh.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n */\r\nvar Mesh = new Class({\r\n\r\n Extends: GameObject,\r\n\r\n Mixins: [\r\n Components.BlendMode,\r\n Components.Depth,\r\n Components.GetBounds,\r\n Components.Mask,\r\n Components.Pipeline,\r\n Components.Size,\r\n Components.Texture,\r\n Components.Transform,\r\n Components.Visible,\r\n Components.ScrollFactor,\r\n MeshRender\r\n ],\r\n\r\n initialize:\r\n\r\n function Mesh (scene, x, y, vertices, uv, colors, alphas, texture, frame)\r\n {\r\n GameObject.call(this, scene, 'Mesh');\r\n\r\n if (vertices.length !== uv.length)\r\n {\r\n throw new Error('Mesh Vertex count must match UV count');\r\n }\r\n\r\n var verticesUB = (vertices.length / 2) | 0;\r\n\r\n if (colors.length > 0 && colors.length < verticesUB)\r\n {\r\n throw new Error('Mesh Color count must match Vertex count');\r\n }\r\n\r\n if (alphas.length > 0 && alphas.length < verticesUB)\r\n {\r\n throw new Error('Mesh Alpha count must match Vertex count');\r\n }\r\n\r\n var i;\r\n\r\n if (colors.length === 0)\r\n {\r\n for (i = 0; i < verticesUB; ++i)\r\n {\r\n colors[i] = 0xFFFFFF;\r\n }\r\n }\r\n\r\n if (alphas.length === 0)\r\n {\r\n for (i = 0; i < verticesUB; ++i)\r\n {\r\n alphas[i] = 1.0;\r\n }\r\n }\r\n\r\n /**\r\n * An array containing the vertices data for this Mesh.\r\n *\r\n * @name Phaser.GameObjects.Mesh#vertices\r\n * @type {Float32Array}\r\n * @since 3.0.0\r\n */\r\n this.vertices = new Float32Array(vertices);\r\n\r\n /**\r\n * An array containing the uv data for this Mesh.\r\n *\r\n * @name Phaser.GameObjects.Mesh#uv\r\n * @type {Float32Array}\r\n * @since 3.0.0\r\n */\r\n this.uv = new Float32Array(uv);\r\n\r\n /**\r\n * An array containing the color data for this Mesh.\r\n *\r\n * @name Phaser.GameObjects.Mesh#colors\r\n * @type {Uint32Array}\r\n * @since 3.0.0\r\n */\r\n this.colors = new Uint32Array(colors);\r\n\r\n /**\r\n * An array containing the alpha data for this Mesh.\r\n *\r\n * @name Phaser.GameObjects.Mesh#alphas\r\n * @type {Float32Array}\r\n * @since 3.0.0\r\n */\r\n this.alphas = new Float32Array(alphas);\r\n\r\n /**\r\n * Fill or additive mode used when blending the color values?\r\n * \r\n * @name Phaser.GameObjects.Mesh#tintFill\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.11.0\r\n */\r\n this.tintFill = false;\r\n\r\n this.setTexture(texture, frame);\r\n this.setPosition(x, y);\r\n this.setSizeToFrame();\r\n this.initPipeline();\r\n },\r\n\r\n /**\r\n * This method is left intentionally empty and does not do anything.\r\n * It is retained to allow a Mesh or Quad to be added to a Container.\r\n * \r\n * @method Phaser.GameObjects.Mesh#setAlpha\r\n * @since 3.17.0\r\n */\r\n setAlpha: NOOP\r\n\r\n});\r\n\r\nmodule.exports = Mesh;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9tZXNoL01lc2guanM/OTYzNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxnRkFBZTtBQUN4QyxpQkFBaUIsbUJBQU8sQ0FBQywwRUFBZTtBQUN4QyxpQkFBaUIsbUJBQU8sQ0FBQyw4RUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsaUVBQWtCOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsU0FBUztBQUNwQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsU0FBUztBQUNwQixXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9tZXNoL01lc2guanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cycpO1xyXG52YXIgR2FtZU9iamVjdCA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3QnKTtcclxudmFyIE1lc2hSZW5kZXIgPSByZXF1aXJlKCcuL01lc2hSZW5kZXInKTtcclxudmFyIE5PT1AgPSByZXF1aXJlKCcuLi8uLi91dGlscy9OT09QJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIE1lc2ggR2FtZSBPYmplY3QuXHJcbiAqXHJcbiAqIEBjbGFzcyBNZXNoXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEB3ZWJnbE9ubHlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkJsZW5kTW9kZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5EZXB0aFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHNcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuTWFza1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5QaXBlbGluZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5TaXplXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRleHR1cmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2Nyb2xsRmFjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuIEEgR2FtZSBPYmplY3QgY2FuIG9ubHkgYmVsb25nIHRvIG9uZSBTY2VuZSBhdCBhIHRpbWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcltdfSB2ZXJ0aWNlcyAtIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHZlcnRpY2VzIGRhdGEgZm9yIHRoaXMgTWVzaC5cclxuICogQHBhcmFtIHtudW1iZXJbXX0gdXYgLSBBbiBhcnJheSBjb250YWluaW5nIHRoZSB1diBkYXRhIGZvciB0aGlzIE1lc2guXHJcbiAqIEBwYXJhbSB7bnVtYmVyW119IGNvbG9ycyAtIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGNvbG9yIGRhdGEgZm9yIHRoaXMgTWVzaC5cclxuICogQHBhcmFtIHtudW1iZXJbXX0gYWxwaGFzIC0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgYWxwaGEgZGF0YSBmb3IgdGhpcyBNZXNoLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dHVyZSAtIFRoZSBrZXkgb2YgdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byByZW5kZXIgd2l0aCwgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lXSAtIEFuIG9wdGlvbmFsIGZyYW1lIGZyb20gdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCBpcyByZW5kZXJpbmcgd2l0aC5cclxuICovXHJcbnZhciBNZXNoID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBHYW1lT2JqZWN0LFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIENvbXBvbmVudHMuQmxlbmRNb2RlLFxyXG4gICAgICAgIENvbXBvbmVudHMuRGVwdGgsXHJcbiAgICAgICAgQ29tcG9uZW50cy5HZXRCb3VuZHMsXHJcbiAgICAgICAgQ29tcG9uZW50cy5NYXNrLFxyXG4gICAgICAgIENvbXBvbmVudHMuUGlwZWxpbmUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5TaXplLFxyXG4gICAgICAgIENvbXBvbmVudHMuVGV4dHVyZSxcclxuICAgICAgICBDb21wb25lbnRzLlRyYW5zZm9ybSxcclxuICAgICAgICBDb21wb25lbnRzLlZpc2libGUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5TY3JvbGxGYWN0b3IsXHJcbiAgICAgICAgTWVzaFJlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIE1lc2ggKHNjZW5lLCB4LCB5LCB2ZXJ0aWNlcywgdXYsIGNvbG9ycywgYWxwaGFzLCB0ZXh0dXJlLCBmcmFtZSlcclxuICAgIHtcclxuICAgICAgICBHYW1lT2JqZWN0LmNhbGwodGhpcywgc2NlbmUsICdNZXNoJyk7XHJcblxyXG4gICAgICAgIGlmICh2ZXJ0aWNlcy5sZW5ndGggIT09IHV2Lmxlbmd0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWVzaCBWZXJ0ZXggY291bnQgbXVzdCBtYXRjaCBVViBjb3VudCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHZlcnRpY2VzVUIgPSAodmVydGljZXMubGVuZ3RoIC8gMikgfCAwO1xyXG5cclxuICAgICAgICBpZiAoY29sb3JzLmxlbmd0aCA+IDAgJiYgY29sb3JzLmxlbmd0aCA8IHZlcnRpY2VzVUIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01lc2ggQ29sb3IgY291bnQgbXVzdCBtYXRjaCBWZXJ0ZXggY291bnQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChhbHBoYXMubGVuZ3RoID4gMCAmJiBhbHBoYXMubGVuZ3RoIDwgdmVydGljZXNVQilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWVzaCBBbHBoYSBjb3VudCBtdXN0IG1hdGNoIFZlcnRleCBjb3VudCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGk7XHJcblxyXG4gICAgICAgIGlmIChjb2xvcnMubGVuZ3RoID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHZlcnRpY2VzVUI7ICsraSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29sb3JzW2ldID0gMHhGRkZGRkY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChhbHBoYXMubGVuZ3RoID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHZlcnRpY2VzVUI7ICsraSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYWxwaGFzW2ldID0gMS4wO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBjb250YWluaW5nIHRoZSB2ZXJ0aWNlcyBkYXRhIGZvciB0aGlzIE1lc2guXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuTWVzaCN2ZXJ0aWNlc1xyXG4gICAgICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGljZXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBjb250YWluaW5nIHRoZSB1diBkYXRhIGZvciB0aGlzIE1lc2guXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuTWVzaCN1dlxyXG4gICAgICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy51diA9IG5ldyBGbG9hdDMyQXJyYXkodXYpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjb2xvciBkYXRhIGZvciB0aGlzIE1lc2guXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuTWVzaCNjb2xvcnNcclxuICAgICAgICAgKiBAdHlwZSB7VWludDMyQXJyYXl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb2xvcnMgPSBuZXcgVWludDMyQXJyYXkoY29sb3JzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gYXJyYXkgY29udGFpbmluZyB0aGUgYWxwaGEgZGF0YSBmb3IgdGhpcyBNZXNoLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLk1lc2gjYWxwaGFzXHJcbiAgICAgICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFscGhhcyA9IG5ldyBGbG9hdDMyQXJyYXkoYWxwaGFzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRmlsbCBvciBhZGRpdGl2ZSBtb2RlIHVzZWQgd2hlbiBibGVuZGluZyB0aGUgY29sb3IgdmFsdWVzP1xyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5NZXNoI3RpbnRGaWxsXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aW50RmlsbCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFRleHR1cmUodGV4dHVyZSwgZnJhbWUpO1xyXG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24oeCwgeSk7XHJcbiAgICAgICAgdGhpcy5zZXRTaXplVG9GcmFtZSgpO1xyXG4gICAgICAgIHRoaXMuaW5pdFBpcGVsaW5lKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGVmdCBpbnRlbnRpb25hbGx5IGVtcHR5IGFuZCBkb2VzIG5vdCBkbyBhbnl0aGluZy5cclxuICAgICAqIEl0IGlzIHJldGFpbmVkIHRvIGFsbG93IGEgTWVzaCBvciBRdWFkIHRvIGJlIGFkZGVkIHRvIGEgQ29udGFpbmVyLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5NZXNoI3NldEFscGhhXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKi9cclxuICAgIHNldEFscGhhOiBOT09QXHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTWVzaDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/mesh/Mesh.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/mesh/MeshCanvasRenderer.js":
/*!************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/mesh/MeshCanvasRenderer.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * This is a stub function for Mesh.Render. There is no Canvas renderer for Mesh objects.\r\n *\r\n * @method Phaser.GameObjects.Mesh#renderCanvas\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Mesh} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n */\r\nvar MeshCanvasRenderer = function ()\r\n{\r\n};\r\n\r\nmodule.exports = MeshCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9tZXNoL01lc2hDYW52YXNSZW5kZXJlci5qcz83N2YxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsd0JBQXdCO0FBQ25DLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL21lc2gvTWVzaENhbnZhc1JlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhpcyBpcyBhIHN0dWIgZnVuY3Rpb24gZm9yIE1lc2guUmVuZGVyLiBUaGVyZSBpcyBubyBDYW52YXMgcmVuZGVyZXIgZm9yIE1lc2ggb2JqZWN0cy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuTWVzaCNyZW5kZXJDYW52YXNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgQ2FudmFzIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5NZXNofSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqL1xyXG52YXIgTWVzaENhbnZhc1JlbmRlcmVyID0gZnVuY3Rpb24gKClcclxue1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBNZXNoQ2FudmFzUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/mesh/MeshCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/mesh/MeshCreator.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/mesh/MeshCreator.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BuildGameObject = __webpack_require__(/*! ../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar Mesh = __webpack_require__(/*! ./Mesh */ \"./node_modules/phaser/src/gameobjects/mesh/Mesh.js\");\r\n\r\n/**\r\n * Creates a new Mesh Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Mesh Game Object and WebGL support have been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#mesh\r\n * @since 3.0.0\r\n *\r\n * @param {object} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.Mesh} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('mesh', function (config, addToScene)\r\n{\r\n if (config === undefined) { config = {}; }\r\n\r\n var key = GetAdvancedValue(config, 'key', null);\r\n var frame = GetAdvancedValue(config, 'frame', null);\r\n var vertices = GetValue(config, 'vertices', []);\r\n var colors = GetValue(config, 'colors', []);\r\n var alphas = GetValue(config, 'alphas', []);\r\n var uv = GetValue(config, 'uv', []);\r\n\r\n var mesh = new Mesh(this.scene, 0, 0, vertices, uv, colors, alphas, key, frame);\r\n\r\n if (addToScene !== undefined)\r\n {\r\n config.add = addToScene;\r\n }\r\n\r\n BuildGameObject(this.scene, mesh, config);\r\n\r\n return mesh;\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectCreator context.\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9tZXNoL01lc2hDcmVhdG9yLmpzP2ExZGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHNCQUFzQixtQkFBTyxDQUFDLG9GQUFvQjtBQUNsRCx3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7QUFDdEQsdUJBQXVCLG1CQUFPLENBQUMsdUdBQXFDO0FBQ3BFLGVBQWUsbUJBQU8sQ0FBQyx1RkFBNkI7QUFDcEQsV0FBVyxtQkFBTyxDQUFDLGtFQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksd0JBQXdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixhQUFhOztBQUU1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvbWVzaC9NZXNoQ3JlYXRvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJ1aWxkR2FtZU9iamVjdCA9IHJlcXVpcmUoJy4uL0J1aWxkR2FtZU9iamVjdCcpO1xyXG52YXIgR2FtZU9iamVjdENyZWF0b3IgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Q3JlYXRvcicpO1xyXG52YXIgR2V0QWR2YW5jZWRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRBZHZhbmNlZFZhbHVlJyk7XHJcbnZhciBHZXRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRWYWx1ZScpO1xyXG52YXIgTWVzaCA9IHJlcXVpcmUoJy4vTWVzaCcpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgTWVzaCBHYW1lIE9iamVjdCBhbmQgcmV0dXJucyBpdC5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgTWVzaCBHYW1lIE9iamVjdCBhbmQgV2ViR0wgc3VwcG9ydCBoYXZlIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI21lc2hcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byBjcmVhdGUgaXRzZWxmLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthZGRUb1NjZW5lXSAtIEFkZCB0aGlzIEdhbWUgT2JqZWN0IHRvIHRoZSBTY2VuZSBhZnRlciBjcmVhdGluZyBpdD8gSWYgc2V0IHRoaXMgYXJndW1lbnQgb3ZlcnJpZGVzIHRoZSBgYWRkYCBwcm9wZXJ0eSBpbiB0aGUgY29uZmlnIG9iamVjdC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLk1lc2h9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdENyZWF0b3IucmVnaXN0ZXIoJ21lc2gnLCBmdW5jdGlvbiAoY29uZmlnLCBhZGRUb1NjZW5lKVxyXG57XHJcbiAgICBpZiAoY29uZmlnID09PSB1bmRlZmluZWQpIHsgY29uZmlnID0ge307IH1cclxuXHJcbiAgICB2YXIga2V5ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdrZXknLCBudWxsKTtcclxuICAgIHZhciBmcmFtZSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnZnJhbWUnLCBudWxsKTtcclxuICAgIHZhciB2ZXJ0aWNlcyA9IEdldFZhbHVlKGNvbmZpZywgJ3ZlcnRpY2VzJywgW10pO1xyXG4gICAgdmFyIGNvbG9ycyA9IEdldFZhbHVlKGNvbmZpZywgJ2NvbG9ycycsIFtdKTtcclxuICAgIHZhciBhbHBoYXMgPSBHZXRWYWx1ZShjb25maWcsICdhbHBoYXMnLCBbXSk7XHJcbiAgICB2YXIgdXYgPSBHZXRWYWx1ZShjb25maWcsICd1dicsIFtdKTtcclxuXHJcbiAgICB2YXIgbWVzaCA9IG5ldyBNZXNoKHRoaXMuc2NlbmUsIDAsIDAsIHZlcnRpY2VzLCB1diwgY29sb3JzLCBhbHBoYXMsIGtleSwgZnJhbWUpO1xyXG5cclxuICAgIGlmIChhZGRUb1NjZW5lICE9PSB1bmRlZmluZWQpXHJcbiAgICB7XHJcbiAgICAgICAgY29uZmlnLmFkZCA9IGFkZFRvU2NlbmU7XHJcbiAgICB9XHJcblxyXG4gICAgQnVpbGRHYW1lT2JqZWN0KHRoaXMuc2NlbmUsIG1lc2gsIGNvbmZpZyk7XHJcblxyXG4gICAgcmV0dXJuIG1lc2g7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RDcmVhdG9yIGNvbnRleHQuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/mesh/MeshCreator.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/mesh/MeshFactory.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/mesh/MeshFactory.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Mesh = __webpack_require__(/*! ./Mesh */ \"./node_modules/phaser/src/gameobjects/mesh/Mesh.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Mesh Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Mesh Game Object and WebGL support have been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#mesh\r\n * @webglOnly\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {number[]} vertices - An array containing the vertices data for this Mesh.\r\n * @param {number[]} uv - An array containing the uv data for this Mesh.\r\n * @param {number[]} colors - An array containing the color data for this Mesh.\r\n * @param {number[]} alphas - An array containing the alpha data for this Mesh.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n *\r\n * @return {Phaser.GameObjects.Mesh} The Game Object that was created.\r\n */\r\nif (true)\r\n{\r\n GameObjectFactory.register('mesh', function (x, y, vertices, uv, colors, alphas, texture, frame)\r\n {\r\n return this.displayList.add(new Mesh(this.scene, x, y, vertices, uv, colors, alphas, texture, frame));\r\n });\r\n}\r\n\r\n// When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n// There are several properties available to use:\r\n//\r\n// this.scene - a reference to the Scene that owns the GameObjectFactory\r\n// this.displayList - a reference to the Display List the Scene owns\r\n// this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9tZXNoL01lc2hGYWN0b3J5LmpzPzE3ZDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFdBQVcsbUJBQU8sQ0FBQyxrRUFBUTtBQUMzQix3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7O0FBRXREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsU0FBUztBQUNwQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsT0FBTztBQUNsQixXQUFXLGlCQUFpQjtBQUM1QjtBQUNBLFlBQVksd0JBQXdCO0FBQ3BDO0FBQ0EsSUFBSSxJQUFxQjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL21lc2gvTWVzaEZhY3RvcnkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XHJcbnZhciBHYW1lT2JqZWN0RmFjdG9yeSA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3RGYWN0b3J5Jyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBNZXNoIEdhbWUgT2JqZWN0IGFuZCBhZGRzIGl0IHRvIHRoZSBTY2VuZS5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgTWVzaCBHYW1lIE9iamVjdCBhbmQgV2ViR0wgc3VwcG9ydCBoYXZlIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I21lc2hcclxuICogQHdlYmdsT25seVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyW119IHZlcnRpY2VzIC0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgdmVydGljZXMgZGF0YSBmb3IgdGhpcyBNZXNoLlxyXG4gKiBAcGFyYW0ge251bWJlcltdfSB1diAtIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHV2IGRhdGEgZm9yIHRoaXMgTWVzaC5cclxuICogQHBhcmFtIHtudW1iZXJbXX0gY29sb3JzIC0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgY29sb3IgZGF0YSBmb3IgdGhpcyBNZXNoLlxyXG4gKiBAcGFyYW0ge251bWJlcltdfSBhbHBoYXMgLSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBhbHBoYSBkYXRhIGZvciB0aGlzIE1lc2guXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0dXJlIC0gVGhlIGtleSBvZiB0aGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIHJlbmRlciB3aXRoLCBhcyBzdG9yZWQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWVdIC0gQW4gb3B0aW9uYWwgZnJhbWUgZnJvbSB0aGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHJlbmRlcmluZyB3aXRoLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuTWVzaH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5pZiAodHlwZW9mIFdFQkdMX1JFTkRFUkVSKVxyXG57XHJcbiAgICBHYW1lT2JqZWN0RmFjdG9yeS5yZWdpc3RlcignbWVzaCcsIGZ1bmN0aW9uICh4LCB5LCB2ZXJ0aWNlcywgdXYsIGNvbG9ycywgYWxwaGFzLCB0ZXh0dXJlLCBmcmFtZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5TGlzdC5hZGQobmV3IE1lc2godGhpcy5zY2VuZSwgeCwgeSwgdmVydGljZXMsIHV2LCBjb2xvcnMsIGFscGhhcywgdGV4dHVyZSwgZnJhbWUpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG4vLyAgV2hlbiByZWdpc3RlcmluZyBhIGZhY3RvcnkgZnVuY3Rpb24gJ3RoaXMnIHJlZmVycyB0byB0aGUgR2FtZU9iamVjdEZhY3RvcnkgY29udGV4dC5cclxuLy9cclxuLy8gIFRoZXJlIGFyZSBzZXZlcmFsIHByb3BlcnRpZXMgYXZhaWxhYmxlIHRvIHVzZTpcclxuLy9cclxuLy8gIHRoaXMuc2NlbmUgLSBhIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgdGhhdCBvd25zIHRoZSBHYW1lT2JqZWN0RmFjdG9yeVxyXG4vLyAgdGhpcy5kaXNwbGF5TGlzdCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBEaXNwbGF5IExpc3QgdGhlIFNjZW5lIG93bnNcclxuLy8gIHRoaXMudXBkYXRlTGlzdCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBVcGRhdGUgTGlzdCB0aGUgU2NlbmUgb3duc1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/mesh/MeshFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/mesh/MeshRender.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/mesh/MeshRender.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./MeshWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/mesh/MeshWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./MeshCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/mesh/MeshCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9tZXNoL01lc2hSZW5kZXIuanM/MWYyMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsaUVBQWtCO0FBQzVDLG1CQUFtQixtQkFBTyxDQUFDLGlFQUFrQjs7QUFFN0MsSUFBSSxJQUFxQjtBQUN6QjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLDRGQUFxQjtBQUMvQzs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsOEZBQXNCO0FBQ2pEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9tZXNoL01lc2hSZW5kZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL05PT1AnKTtcclxudmFyIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL05PT1AnKTtcclxuXHJcbmlmICh0eXBlb2YgV0VCR0xfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi9NZXNoV2ViR0xSZW5kZXJlcicpO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIENBTlZBU19SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi9NZXNoQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/mesh/MeshRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/mesh/MeshWebGLRenderer.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/mesh/MeshWebGLRenderer.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Mesh#renderWebGL\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Mesh} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar MeshWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var pipeline = this.pipeline;\r\n\r\n renderer.setPipeline(pipeline, src);\r\n\r\n var camMatrix = pipeline._tempMatrix1;\r\n var spriteMatrix = pipeline._tempMatrix2;\r\n var calcMatrix = pipeline._tempMatrix3;\r\n\r\n spriteMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n camMatrix.copyFrom(camera.matrix);\r\n\r\n if (parentMatrix)\r\n {\r\n // Multiply the camera by the parent matrix\r\n camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n // Undo the camera scroll\r\n spriteMatrix.e = src.x;\r\n spriteMatrix.f = src.y;\r\n\r\n // Multiply by the Sprite matrix, store result in calcMatrix\r\n camMatrix.multiply(spriteMatrix, calcMatrix);\r\n }\r\n else\r\n {\r\n spriteMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n spriteMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n\r\n // Multiply by the Sprite matrix, store result in calcMatrix\r\n camMatrix.multiply(spriteMatrix, calcMatrix);\r\n }\r\n\r\n var frame = src.frame;\r\n var texture = frame.glTexture;\r\n\r\n var vertices = src.vertices;\r\n var uvs = src.uv;\r\n var colors = src.colors;\r\n var alphas = src.alphas;\r\n\r\n var meshVerticesLength = vertices.length;\r\n var vertexCount = Math.floor(meshVerticesLength * 0.5);\r\n\r\n if (pipeline.vertexCount + vertexCount > pipeline.vertexCapacity)\r\n {\r\n pipeline.flush();\r\n }\r\n\r\n pipeline.setTexture2D(texture, 0);\r\n\r\n var vertexViewF32 = pipeline.vertexViewF32;\r\n var vertexViewU32 = pipeline.vertexViewU32;\r\n\r\n var vertexOffset = (pipeline.vertexCount * pipeline.vertexComponentCount) - 1;\r\n\r\n var colorIndex = 0;\r\n var tintEffect = src.tintFill;\r\n\r\n for (var i = 0; i < meshVerticesLength; i += 2)\r\n {\r\n var x = vertices[i + 0];\r\n var y = vertices[i + 1];\r\n\r\n var tx = x * calcMatrix.a + y * calcMatrix.c + calcMatrix.e;\r\n var ty = x * calcMatrix.b + y * calcMatrix.d + calcMatrix.f;\r\n\r\n if (camera.roundPixels)\r\n {\r\n tx = Math.round(tx);\r\n ty = Math.round(ty);\r\n }\r\n\r\n vertexViewF32[++vertexOffset] = tx;\r\n vertexViewF32[++vertexOffset] = ty;\r\n vertexViewF32[++vertexOffset] = uvs[i + 0];\r\n vertexViewF32[++vertexOffset] = uvs[i + 1];\r\n vertexViewF32[++vertexOffset] = tintEffect;\r\n vertexViewU32[++vertexOffset] = Utils.getTintAppendFloatAlpha(colors[colorIndex], camera.alpha * alphas[colorIndex]);\r\n\r\n colorIndex++;\r\n }\r\n\r\n pipeline.vertexCount += vertexCount;\r\n};\r\n\r\nmodule.exports = MeshWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9tZXNoL01lc2hXZWJHTFJlbmRlcmVyLmpzP2VkOGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRkFBNEI7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsd0JBQXdCO0FBQ25DLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQix3QkFBd0I7QUFDM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvbWVzaC9NZXNoV2ViR0xSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXIvd2ViZ2wvVXRpbHMnKTtcclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5NZXNoI3JlbmRlcldlYkdMXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBXZWJHTCByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuTWVzaH0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIE1lc2hXZWJHTFJlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgdmFyIHBpcGVsaW5lID0gdGhpcy5waXBlbGluZTtcclxuXHJcbiAgICByZW5kZXJlci5zZXRQaXBlbGluZShwaXBlbGluZSwgc3JjKTtcclxuXHJcbiAgICB2YXIgY2FtTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgxO1xyXG4gICAgdmFyIHNwcml0ZU1hdHJpeCA9IHBpcGVsaW5lLl90ZW1wTWF0cml4MjtcclxuICAgIHZhciBjYWxjTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgzO1xyXG5cclxuICAgIHNwcml0ZU1hdHJpeC5hcHBseUlUUlMoc3JjLngsIHNyYy55LCBzcmMucm90YXRpb24sIHNyYy5zY2FsZVgsIHNyYy5zY2FsZVkpO1xyXG5cclxuICAgIGNhbU1hdHJpeC5jb3B5RnJvbShjYW1lcmEubWF0cml4KTtcclxuXHJcbiAgICBpZiAocGFyZW50TWF0cml4KVxyXG4gICAge1xyXG4gICAgICAgIC8vICBNdWx0aXBseSB0aGUgY2FtZXJhIGJ5IHRoZSBwYXJlbnQgbWF0cml4XHJcbiAgICAgICAgY2FtTWF0cml4Lm11bHRpcGx5V2l0aE9mZnNldChwYXJlbnRNYXRyaXgsIC1jYW1lcmEuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYLCAtY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWSk7XHJcblxyXG4gICAgICAgIC8vICBVbmRvIHRoZSBjYW1lcmEgc2Nyb2xsXHJcbiAgICAgICAgc3ByaXRlTWF0cml4LmUgPSBzcmMueDtcclxuICAgICAgICBzcHJpdGVNYXRyaXguZiA9IHNyYy55O1xyXG5cclxuICAgICAgICAvLyAgTXVsdGlwbHkgYnkgdGhlIFNwcml0ZSBtYXRyaXgsIHN0b3JlIHJlc3VsdCBpbiBjYWxjTWF0cml4XHJcbiAgICAgICAgY2FtTWF0cml4Lm11bHRpcGx5KHNwcml0ZU1hdHJpeCwgY2FsY01hdHJpeCk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgc3ByaXRlTWF0cml4LmUgLT0gY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWDtcclxuICAgICAgICBzcHJpdGVNYXRyaXguZiAtPSBjYW1lcmEuc2Nyb2xsWSAqIHNyYy5zY3JvbGxGYWN0b3JZO1xyXG5cclxuICAgICAgICAvLyAgTXVsdGlwbHkgYnkgdGhlIFNwcml0ZSBtYXRyaXgsIHN0b3JlIHJlc3VsdCBpbiBjYWxjTWF0cml4XHJcbiAgICAgICAgY2FtTWF0cml4Lm11bHRpcGx5KHNwcml0ZU1hdHJpeCwgY2FsY01hdHJpeCk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGZyYW1lID0gc3JjLmZyYW1lO1xyXG4gICAgdmFyIHRleHR1cmUgPSBmcmFtZS5nbFRleHR1cmU7XHJcblxyXG4gICAgdmFyIHZlcnRpY2VzID0gc3JjLnZlcnRpY2VzO1xyXG4gICAgdmFyIHV2cyA9IHNyYy51djtcclxuICAgIHZhciBjb2xvcnMgPSBzcmMuY29sb3JzO1xyXG4gICAgdmFyIGFscGhhcyA9IHNyYy5hbHBoYXM7XHJcblxyXG4gICAgdmFyIG1lc2hWZXJ0aWNlc0xlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aDtcclxuICAgIHZhciB2ZXJ0ZXhDb3VudCA9IE1hdGguZmxvb3IobWVzaFZlcnRpY2VzTGVuZ3RoICogMC41KTtcclxuXHJcbiAgICBpZiAocGlwZWxpbmUudmVydGV4Q291bnQgKyB2ZXJ0ZXhDb3VudCA+IHBpcGVsaW5lLnZlcnRleENhcGFjaXR5KVxyXG4gICAge1xyXG4gICAgICAgIHBpcGVsaW5lLmZsdXNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGlwZWxpbmUuc2V0VGV4dHVyZTJEKHRleHR1cmUsIDApO1xyXG5cclxuICAgIHZhciB2ZXJ0ZXhWaWV3RjMyID0gcGlwZWxpbmUudmVydGV4Vmlld0YzMjtcclxuICAgIHZhciB2ZXJ0ZXhWaWV3VTMyID0gcGlwZWxpbmUudmVydGV4Vmlld1UzMjtcclxuXHJcbiAgICB2YXIgdmVydGV4T2Zmc2V0ID0gKHBpcGVsaW5lLnZlcnRleENvdW50ICogcGlwZWxpbmUudmVydGV4Q29tcG9uZW50Q291bnQpIC0gMTtcclxuXHJcbiAgICB2YXIgY29sb3JJbmRleCA9IDA7XHJcbiAgICB2YXIgdGludEVmZmVjdCA9IHNyYy50aW50RmlsbDtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc2hWZXJ0aWNlc0xlbmd0aDsgaSArPSAyKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB4ID0gdmVydGljZXNbaSArIDBdO1xyXG4gICAgICAgIHZhciB5ID0gdmVydGljZXNbaSArIDFdO1xyXG5cclxuICAgICAgICB2YXIgdHggPSB4ICogY2FsY01hdHJpeC5hICsgeSAqIGNhbGNNYXRyaXguYyArIGNhbGNNYXRyaXguZTtcclxuICAgICAgICB2YXIgdHkgPSB4ICogY2FsY01hdHJpeC5iICsgeSAqIGNhbGNNYXRyaXguZCArIGNhbGNNYXRyaXguZjtcclxuXHJcbiAgICAgICAgaWYgKGNhbWVyYS5yb3VuZFBpeGVscylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHR4ID0gTWF0aC5yb3VuZCh0eCk7XHJcbiAgICAgICAgICAgIHR5ID0gTWF0aC5yb3VuZCh0eSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdmVydGV4T2Zmc2V0XSA9IHR4O1xyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2ZXJ0ZXhPZmZzZXRdID0gdHk7XHJcbiAgICAgICAgdmVydGV4Vmlld0YzMlsrK3ZlcnRleE9mZnNldF0gPSB1dnNbaSArIDBdO1xyXG4gICAgICAgIHZlcnRleFZpZXdGMzJbKyt2ZXJ0ZXhPZmZzZXRdID0gdXZzW2kgKyAxXTtcclxuICAgICAgICB2ZXJ0ZXhWaWV3RjMyWysrdmVydGV4T2Zmc2V0XSA9IHRpbnRFZmZlY3Q7XHJcbiAgICAgICAgdmVydGV4Vmlld1UzMlsrK3ZlcnRleE9mZnNldF0gPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYShjb2xvcnNbY29sb3JJbmRleF0sIGNhbWVyYS5hbHBoYSAqIGFscGhhc1tjb2xvckluZGV4XSk7XHJcblxyXG4gICAgICAgIGNvbG9ySW5kZXgrKztcclxuICAgIH1cclxuXHJcbiAgICBwaXBlbGluZS52ZXJ0ZXhDb3VudCArPSB2ZXJ0ZXhDb3VudDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTWVzaFdlYkdMUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/mesh/MeshWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/particles/EmitterOp.js":
/*!********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/particles/EmitterOp.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar FloatBetween = __webpack_require__(/*! ../../math/FloatBetween */ \"./node_modules/phaser/src/math/FloatBetween.js\");\r\nvar GetEaseFunction = __webpack_require__(/*! ../../tweens/builders/GetEaseFunction */ \"./node_modules/phaser/src/tweens/builders/GetEaseFunction.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar Wrap = __webpack_require__(/*! ../../math/Wrap */ \"./node_modules/phaser/src/math/Wrap.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Particle Emitter property.\r\n *\r\n * Facilitates changing Particle properties as they are emitted and throughout their lifetime.\r\n *\r\n * @class EmitterOp\r\n * @memberof Phaser.GameObjects.Particles\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.ParticleEmitterConfig} config - Settings for the Particle Emitter that owns this property.\r\n * @param {string} key - The name of the property.\r\n * @param {number} defaultValue - The default value of the property.\r\n * @param {boolean} [emitOnly=false] - Whether the property can only be modified when a Particle is emitted.\r\n */\r\nvar EmitterOp = new Class({\r\n\r\n initialize:\r\n\r\n function EmitterOp (config, key, defaultValue, emitOnly)\r\n {\r\n if (emitOnly === undefined)\r\n {\r\n emitOnly = false;\r\n }\r\n\r\n /**\r\n * The name of this property.\r\n *\r\n * @name Phaser.GameObjects.Particles.EmitterOp#propertyKey\r\n * @type {string}\r\n * @since 3.0.0\r\n */\r\n this.propertyKey = key;\r\n\r\n /**\r\n * The value of this property.\r\n *\r\n * @name Phaser.GameObjects.Particles.EmitterOp#propertyValue\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.propertyValue = defaultValue;\r\n\r\n /**\r\n * The default value of this property.\r\n *\r\n * @name Phaser.GameObjects.Particles.EmitterOp#defaultValue\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.defaultValue = defaultValue;\r\n\r\n /**\r\n * The number of steps for stepped easing between {@link Phaser.GameObjects.Particles.EmitterOp#start} and\r\n * {@link Phaser.GameObjects.Particles.EmitterOp#end} values, per emit.\r\n *\r\n * @name Phaser.GameObjects.Particles.EmitterOp#steps\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.steps = 0;\r\n\r\n /**\r\n * The step counter for stepped easing, per emit.\r\n *\r\n * @name Phaser.GameObjects.Particles.EmitterOp#counter\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.counter = 0;\r\n\r\n /**\r\n * The start value for this property to ease between.\r\n *\r\n * @name Phaser.GameObjects.Particles.EmitterOp#start\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.start = 0;\r\n\r\n /**\r\n * The end value for this property to ease between.\r\n *\r\n * @name Phaser.GameObjects.Particles.EmitterOp#end\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.end = 0;\r\n\r\n /**\r\n * The easing function to use for updating this property.\r\n *\r\n * @name Phaser.GameObjects.Particles.EmitterOp#ease\r\n * @type {?function}\r\n * @since 3.0.0\r\n */\r\n this.ease;\r\n\r\n /**\r\n * Whether this property can only be modified when a Particle is emitted.\r\n *\r\n * Set to `true` to allow only {@link Phaser.GameObjects.Particles.EmitterOp#onEmit} callbacks to be set and\r\n * affect this property.\r\n *\r\n * Set to `false` to allow both {@link Phaser.GameObjects.Particles.EmitterOp#onEmit} and\r\n * {@link Phaser.GameObjects.Particles.EmitterOp#onUpdate} callbacks to be set and affect this property.\r\n *\r\n * @name Phaser.GameObjects.Particles.EmitterOp#emitOnly\r\n * @type {boolean}\r\n * @since 3.0.0\r\n */\r\n this.emitOnly = emitOnly;\r\n\r\n /**\r\n * The callback to run for Particles when they are emitted from the Particle Emitter.\r\n *\r\n * @name Phaser.GameObjects.Particles.EmitterOp#onEmit\r\n * @type {Phaser.Types.GameObjects.Particles.EmitterOpOnEmitCallback}\r\n * @since 3.0.0\r\n */\r\n this.onEmit = this.defaultEmit;\r\n\r\n /**\r\n * The callback to run for Particles when they are updated.\r\n *\r\n * @name Phaser.GameObjects.Particles.EmitterOp#onUpdate\r\n * @type {Phaser.Types.GameObjects.Particles.EmitterOpOnUpdateCallback}\r\n * @since 3.0.0\r\n */\r\n this.onUpdate = this.defaultUpdate;\r\n\r\n this.loadConfig(config);\r\n },\r\n\r\n /**\r\n * Load the property from a Particle Emitter configuration object.\r\n *\r\n * Optionally accepts a new property key to use, replacing the current one.\r\n *\r\n * @method Phaser.GameObjects.Particles.EmitterOp#loadConfig\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.ParticleEmitterConfig} [config] - Settings for the Particle Emitter that owns this property.\r\n * @param {string} [newKey] - The new key to use for this property, if any.\r\n */\r\n loadConfig: function (config, newKey)\r\n {\r\n if (config === undefined)\r\n {\r\n config = {};\r\n }\r\n\r\n if (newKey)\r\n {\r\n this.propertyKey = newKey;\r\n }\r\n\r\n this.propertyValue = GetFastValue(\r\n config,\r\n this.propertyKey,\r\n this.defaultValue\r\n );\r\n\r\n this.setMethods();\r\n\r\n if (this.emitOnly)\r\n {\r\n // Reset it back again\r\n this.onUpdate = this.defaultUpdate;\r\n }\r\n },\r\n\r\n /**\r\n * Build a JSON representation of this Particle Emitter property.\r\n *\r\n * @method Phaser.GameObjects.Particles.EmitterOp#toJSON\r\n * @since 3.0.0\r\n *\r\n * @return {object} A JSON representation of this Particle Emitter property.\r\n */\r\n toJSON: function ()\r\n {\r\n return this.propertyValue;\r\n },\r\n\r\n /**\r\n * Change the current value of the property and update its callback methods.\r\n *\r\n * @method Phaser.GameObjects.Particles.EmitterOp#onChange\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The value of the property.\r\n *\r\n * @return {Phaser.GameObjects.Particles.EmitterOp} This Emitter Op object.\r\n */\r\n onChange: function (value)\r\n {\r\n this.propertyValue = value;\r\n\r\n return this.setMethods();\r\n },\r\n\r\n /**\r\n * Update the {@link Phaser.GameObjects.Particles.EmitterOp#onEmit} and\r\n * {@link Phaser.GameObjects.Particles.EmitterOp#onUpdate} callbacks based on the type of the current\r\n * {@link Phaser.GameObjects.Particles.EmitterOp#propertyValue}.\r\n *\r\n * @method Phaser.GameObjects.Particles.EmitterOp#setMethods\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Particles.EmitterOp} This Emitter Op object.\r\n */\r\n setMethods: function ()\r\n {\r\n var value = this.propertyValue;\r\n\r\n var t = typeof value;\r\n\r\n if (t === 'number')\r\n {\r\n // Explicit static value:\r\n // x: 400\r\n\r\n this.onEmit = this.staticValueEmit;\r\n this.onUpdate = this.staticValueUpdate; // How?\r\n }\r\n else if (Array.isArray(value))\r\n {\r\n // Picks a random element from the array:\r\n // x: [ 100, 200, 300, 400 ]\r\n\r\n this.onEmit = this.randomStaticValueEmit;\r\n }\r\n else if (t === 'function')\r\n {\r\n // The same as setting just the onUpdate function and no onEmit (unless this op is an emitOnly one)\r\n // Custom callback, must return a value:\r\n\r\n /*\r\n x: function (particle, key, t, value)\r\n {\r\n return value + 50;\r\n }\r\n */\r\n\r\n if (this.emitOnly)\r\n {\r\n this.onEmit = value;\r\n }\r\n else\r\n {\r\n this.onUpdate = value;\r\n }\r\n }\r\n else if (t === 'object' && (this.has(value, 'random') || this.hasBoth(value, 'start', 'end') || this.hasBoth(value, 'min', 'max')))\r\n {\r\n this.start = this.has(value, 'start') ? value.start : value.min;\r\n this.end = this.has(value, 'end') ? value.end : value.max;\r\n\r\n var isRandom = (this.hasBoth(value, 'min', 'max') || !!value.random);\r\n\r\n // A random starting value (using 'min | max' instead of 'start | end' automatically implies a random value)\r\n\r\n // x: { start: 100, end: 400, random: true } OR { min: 100, max: 400 } OR { random: [ 100, 400 ] }\r\n\r\n if (isRandom)\r\n {\r\n var rnd = value.random;\r\n\r\n // x: { random: [ 100, 400 ] } = the same as doing: x: { start: 100, end: 400, random: true }\r\n if (Array.isArray(rnd))\r\n {\r\n this.start = rnd[0];\r\n this.end = rnd[1];\r\n }\r\n\r\n this.onEmit = this.randomRangedValueEmit;\r\n }\r\n\r\n if (this.has(value, 'steps'))\r\n {\r\n // A stepped (per emit) range\r\n\r\n // x: { start: 100, end: 400, steps: 64 }\r\n\r\n // Increments a value stored in the emitter\r\n\r\n this.steps = value.steps;\r\n this.counter = this.start;\r\n\r\n this.onEmit = this.steppedEmit;\r\n }\r\n else\r\n {\r\n // An eased range (defaults to Linear if not specified)\r\n\r\n // x: { start: 100, end: 400, [ ease: 'Linear' ] }\r\n\r\n var easeType = this.has(value, 'ease') ? value.ease : 'Linear';\r\n\r\n this.ease = GetEaseFunction(easeType);\r\n\r\n if (!isRandom)\r\n {\r\n this.onEmit = this.easedValueEmit;\r\n }\r\n\r\n // BUG: alpha, rotate, scaleX, scaleY, or tint are eased here if {min, max} is given.\r\n // Probably this branch should exclude isRandom entirely.\r\n\r\n this.onUpdate = this.easeValueUpdate;\r\n }\r\n }\r\n else if (t === 'object' && this.hasEither(value, 'onEmit', 'onUpdate'))\r\n {\r\n // Custom onEmit and onUpdate callbacks\r\n\r\n /*\r\n x: {\r\n // Called at the start of the particles life, when it is being created\r\n onEmit: function (particle, key, t, value)\r\n {\r\n return value;\r\n },\r\n\r\n // Called during the particles life on each update\r\n onUpdate: function (particle, key, t, value)\r\n {\r\n return value;\r\n }\r\n }\r\n */\r\n\r\n if (this.has(value, 'onEmit'))\r\n {\r\n this.onEmit = value.onEmit;\r\n }\r\n\r\n if (this.has(value, 'onUpdate'))\r\n {\r\n this.onUpdate = value.onUpdate;\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Check whether an object has the given property.\r\n *\r\n * @method Phaser.GameObjects.Particles.EmitterOp#has\r\n * @since 3.0.0\r\n *\r\n * @param {object} object - The object to check.\r\n * @param {string} key - The key of the property to look for in the object.\r\n *\r\n * @return {boolean} `true` if the property exists in the object, `false` otherwise.\r\n */\r\n has: function (object, key)\r\n {\r\n return object.hasOwnProperty(key);\r\n },\r\n\r\n /**\r\n * Check whether an object has both of the given properties.\r\n *\r\n * @method Phaser.GameObjects.Particles.EmitterOp#hasBoth\r\n * @since 3.0.0\r\n *\r\n * @param {object} object - The object to check.\r\n * @param {string} key1 - The key of the first property to check the object for.\r\n * @param {string} key2 - The key of the second property to check the object for.\r\n *\r\n * @return {boolean} `true` if both properties exist in the object, `false` otherwise.\r\n */\r\n hasBoth: function (object, key1, key2)\r\n {\r\n return object.hasOwnProperty(key1) && object.hasOwnProperty(key2);\r\n },\r\n\r\n /**\r\n * Check whether an object has at least one of the given properties.\r\n *\r\n * @method Phaser.GameObjects.Particles.EmitterOp#hasEither\r\n * @since 3.0.0\r\n *\r\n * @param {object} object - The object to check.\r\n * @param {string} key1 - The key of the first property to check the object for.\r\n * @param {string} key2 - The key of the second property to check the object for.\r\n *\r\n * @return {boolean} `true` if at least one of the properties exists in the object, `false` if neither exist.\r\n */\r\n hasEither: function (object, key1, key2)\r\n {\r\n return object.hasOwnProperty(key1) || object.hasOwnProperty(key2);\r\n },\r\n\r\n /**\r\n * The returned value sets what the property will be at the START of the particles life, on emit.\r\n *\r\n * @method Phaser.GameObjects.Particles.EmitterOp#defaultEmit\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Particles.Particle} particle - The particle.\r\n * @param {string} key - The name of the property.\r\n * @param {number} [value] - The current value of the property.\r\n *\r\n * @return {number} The new value of the property.\r\n */\r\n defaultEmit: function (particle, key, value)\r\n {\r\n return value;\r\n },\r\n\r\n /**\r\n * The returned value updates the property for the duration of the particles life.\r\n *\r\n * @method Phaser.GameObjects.Particles.EmitterOp#defaultUpdate\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Particles.Particle} particle - The particle.\r\n * @param {string} key - The name of the property.\r\n * @param {number} t - The T value (between 0 and 1)\r\n * @param {number} value - The current value of the property.\r\n *\r\n * @return {number} The new value of the property.\r\n */\r\n defaultUpdate: function (particle, key, t, value)\r\n {\r\n return value;\r\n },\r\n\r\n /**\r\n * An `onEmit` callback that returns the current value of the property.\r\n *\r\n * @method Phaser.GameObjects.Particles.EmitterOp#staticValueEmit\r\n * @since 3.0.0\r\n *\r\n * @return {number} The current value of the property.\r\n */\r\n staticValueEmit: function ()\r\n {\r\n return this.propertyValue;\r\n },\r\n\r\n /**\r\n * An `onUpdate` callback that returns the current value of the property.\r\n *\r\n * @method Phaser.GameObjects.Particles.EmitterOp#staticValueUpdate\r\n * @since 3.0.0\r\n *\r\n * @return {number} The current value of the property.\r\n */\r\n staticValueUpdate: function ()\r\n {\r\n return this.propertyValue;\r\n },\r\n\r\n /**\r\n * An `onEmit` callback that returns a random value from the current value array.\r\n *\r\n * @method Phaser.GameObjects.Particles.EmitterOp#randomStaticValueEmit\r\n * @since 3.0.0\r\n *\r\n * @return {number} The new value of the property.\r\n */\r\n randomStaticValueEmit: function ()\r\n {\r\n var randomIndex = Math.floor(Math.random() * this.propertyValue.length);\r\n\r\n return this.propertyValue[randomIndex];\r\n },\r\n\r\n /**\r\n * An `onEmit` callback that returns a value between the {@link Phaser.GameObjects.Particles.EmitterOp#start} and\r\n * {@link Phaser.GameObjects.Particles.EmitterOp#end} range.\r\n *\r\n * @method Phaser.GameObjects.Particles.EmitterOp#randomRangedValueEmit\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Particles.Particle} particle - The particle.\r\n * @param {string} key - The key of the property.\r\n *\r\n * @return {number} The new value of the property.\r\n */\r\n randomRangedValueEmit: function (particle, key)\r\n {\r\n var value = FloatBetween(this.start, this.end);\r\n\r\n if (particle && particle.data[key])\r\n {\r\n particle.data[key].min = value;\r\n }\r\n\r\n return value;\r\n },\r\n\r\n /**\r\n * An `onEmit` callback that returns a stepped value between the\r\n * {@link Phaser.GameObjects.Particles.EmitterOp#start} and {@link Phaser.GameObjects.Particles.EmitterOp#end}\r\n * range.\r\n *\r\n * @method Phaser.GameObjects.Particles.EmitterOp#steppedEmit\r\n * @since 3.0.0\r\n *\r\n * @return {number} The new value of the property.\r\n */\r\n steppedEmit: function ()\r\n {\r\n var current = this.counter;\r\n\r\n var next = this.counter + (this.end - this.start) / this.steps;\r\n\r\n this.counter = Wrap(next, this.start, this.end);\r\n\r\n return current;\r\n },\r\n\r\n /**\r\n * An `onEmit` callback for an eased property.\r\n *\r\n * It prepares the particle for easing by {@link Phaser.GameObjects.Particles.EmitterOp#easeValueUpdate}.\r\n *\r\n * @method Phaser.GameObjects.Particles.EmitterOp#easedValueEmit\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Particles.Particle} particle - The particle.\r\n * @param {string} key - The name of the property.\r\n *\r\n * @return {number} {@link Phaser.GameObjects.Particles.EmitterOp#start}, as the new value of the property.\r\n */\r\n easedValueEmit: function (particle, key)\r\n {\r\n if (particle && particle.data[key])\r\n {\r\n var data = particle.data[key];\r\n\r\n data.min = this.start;\r\n data.max = this.end;\r\n }\r\n\r\n return this.start;\r\n },\r\n\r\n /**\r\n * An `onUpdate` callback that returns an eased value between the\r\n * {@link Phaser.GameObjects.Particles.EmitterOp#start} and {@link Phaser.GameObjects.Particles.EmitterOp#end}\r\n * range.\r\n *\r\n * @method Phaser.GameObjects.Particles.EmitterOp#easeValueUpdate\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Particles.Particle} particle - The particle.\r\n * @param {string} key - The name of the property.\r\n * @param {number} t - The T value (between 0 and 1)\r\n *\r\n * @return {number} The new value of the property.\r\n */\r\n easeValueUpdate: function (particle, key, t)\r\n {\r\n var data = particle.data[key];\r\n\r\n return (data.max - data.min) * this.ease(t) + data.min;\r\n }\r\n});\r\n\r\nmodule.exports = EmitterOp;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvRW1pdHRlck9wLmpzPzZmMTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsbUJBQW1CLG1CQUFPLENBQUMsK0VBQXlCO0FBQ3BELHNCQUFzQixtQkFBTyxDQUFDLDJHQUF1QztBQUNyRSxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDNUQsV0FBVyxtQkFBTyxDQUFDLCtEQUFpQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcseURBQXlEO0FBQ3BFLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkRBQTJELG1EQUFtRDtBQUM5RyxZQUFZLGlEQUFpRDtBQUM3RDtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0Msb0RBQW9EO0FBQzVGO0FBQ0E7QUFDQSx5Q0FBeUMsb0RBQW9EO0FBQzdGLFlBQVksc0RBQXNEO0FBQ2xFO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHlEQUF5RDtBQUN4RSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHVDQUF1QztBQUN2RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxtQkFBbUIsb0RBQW9EO0FBQ3ZFLFFBQVEsc0RBQXNEO0FBQzlELFFBQVEsMkRBQTJEO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHVDQUF1QztBQUN2RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsb0JBQW9CLHFDQUFxQyxLQUFLLHFCQUFxQixLQUFLOztBQUV4RjtBQUNBO0FBQ0E7O0FBRUEsd0JBQXdCLHVCQUF1QiwwQkFBMEI7QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0I7O0FBRXhCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0I7O0FBRXhCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1GQUFtRixTQUFTO0FBQzVGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxzQ0FBc0M7QUFDckQsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHNDQUFzQztBQUNyRCxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhEQUE4RCxtREFBbUQ7QUFDakgsUUFBUSxpREFBaUQ7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHNDQUFzQztBQUNyRCxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLFFBQVEsbURBQW1ELE1BQU07QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsNkRBQTZEO0FBQzVHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxzQ0FBc0M7QUFDckQsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLE9BQU8sRUFBRSxtREFBbUQ7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLFFBQVEsbURBQW1ELE1BQU07QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsc0NBQXNDO0FBQ3JELGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3BhcnRpY2xlcy9FbWl0dGVyT3AuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBGbG9hdEJldHdlZW4gPSByZXF1aXJlKCcuLi8uLi9tYXRoL0Zsb2F0QmV0d2VlbicpO1xyXG52YXIgR2V0RWFzZUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vLi4vdHdlZW5zL2J1aWxkZXJzL0dldEVhc2VGdW5jdGlvbicpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgV3JhcCA9IHJlcXVpcmUoJy4uLy4uL21hdGgvV3JhcCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBQYXJ0aWNsZSBFbWl0dGVyIHByb3BlcnR5LlxyXG4gKlxyXG4gKiBGYWNpbGl0YXRlcyBjaGFuZ2luZyBQYXJ0aWNsZSBwcm9wZXJ0aWVzIGFzIHRoZXkgYXJlIGVtaXR0ZWQgYW5kIHRocm91Z2hvdXQgdGhlaXIgbGlmZXRpbWUuXHJcbiAqXHJcbiAqIEBjbGFzcyBFbWl0dGVyT3BcclxuICogQG1lbWJlcm9mIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyQ29uZmlnfSBjb25maWcgLSBTZXR0aW5ncyBmb3IgdGhlIFBhcnRpY2xlIEVtaXR0ZXIgdGhhdCBvd25zIHRoaXMgcHJvcGVydHkuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWZhdWx0VmFsdWUgLSBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2VtaXRPbmx5PWZhbHNlXSAtIFdoZXRoZXIgdGhlIHByb3BlcnR5IGNhbiBvbmx5IGJlIG1vZGlmaWVkIHdoZW4gYSBQYXJ0aWNsZSBpcyBlbWl0dGVkLlxyXG4gKi9cclxudmFyIEVtaXR0ZXJPcCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBFbWl0dGVyT3AgKGNvbmZpZywga2V5LCBkZWZhdWx0VmFsdWUsIGVtaXRPbmx5KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChlbWl0T25seSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZW1pdE9ubHkgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBuYW1lIG9mIHRoaXMgcHJvcGVydHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNwcm9wZXJ0eUtleVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUtleSA9IGtleTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNwcm9wZXJ0eVZhbHVlXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnByb3BlcnR5VmFsdWUgPSBkZWZhdWx0VmFsdWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgcHJvcGVydHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNkZWZhdWx0VmFsdWVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbnVtYmVyIG9mIHN0ZXBzIGZvciBzdGVwcGVkIGVhc2luZyBiZXR3ZWVuIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNzdGFydH0gYW5kXHJcbiAgICAgICAgICoge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI2VuZH0gdmFsdWVzLCBwZXIgZW1pdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI3N0ZXBzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zdGVwcyA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBzdGVwIGNvdW50ZXIgZm9yIHN0ZXBwZWQgZWFzaW5nLCBwZXIgZW1pdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI2NvdW50ZXJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvdW50ZXIgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc3RhcnQgdmFsdWUgZm9yIHRoaXMgcHJvcGVydHkgdG8gZWFzZSBiZXR3ZWVuLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3Ajc3RhcnRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnN0YXJ0ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGVuZCB2YWx1ZSBmb3IgdGhpcyBwcm9wZXJ0eSB0byBlYXNlIGJldHdlZW4uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNlbmRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmVuZCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciB1cGRhdGluZyB0aGlzIHByb3BlcnR5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3AjZWFzZVxyXG4gICAgICAgICAqIEB0eXBlIHs/ZnVuY3Rpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5lYXNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHRoaXMgcHJvcGVydHkgY2FuIG9ubHkgYmUgbW9kaWZpZWQgd2hlbiBhIFBhcnRpY2xlIGlzIGVtaXR0ZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGFsbG93IG9ubHkge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI29uRW1pdH0gY2FsbGJhY2tzIHRvIGJlIHNldCBhbmRcclxuICAgICAgICAgKiBhZmZlY3QgdGhpcyBwcm9wZXJ0eS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFNldCB0byBgZmFsc2VgIHRvIGFsbG93IGJvdGgge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI29uRW1pdH0gYW5kXHJcbiAgICAgICAgICoge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI29uVXBkYXRlfSBjYWxsYmFja3MgdG8gYmUgc2V0IGFuZCBhZmZlY3QgdGhpcyBwcm9wZXJ0eS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI2VtaXRPbmx5XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5lbWl0T25seSA9IGVtaXRPbmx5O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY2FsbGJhY2sgdG8gcnVuIGZvciBQYXJ0aWNsZXMgd2hlbiB0aGV5IGFyZSBlbWl0dGVkIGZyb20gdGhlIFBhcnRpY2xlIEVtaXR0ZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNvbkVtaXRcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3BPbkVtaXRDYWxsYmFja31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9uRW1pdCA9IHRoaXMuZGVmYXVsdEVtaXQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjYWxsYmFjayB0byBydW4gZm9yIFBhcnRpY2xlcyB3aGVuIHRoZXkgYXJlIHVwZGF0ZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNvblVwZGF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcE9uVXBkYXRlQ2FsbGJhY2t9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5vblVwZGF0ZSA9IHRoaXMuZGVmYXVsdFVwZGF0ZTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkQ29uZmlnKGNvbmZpZyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTG9hZCB0aGUgcHJvcGVydHkgZnJvbSBhIFBhcnRpY2xlIEVtaXR0ZXIgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogT3B0aW9uYWxseSBhY2NlcHRzIGEgbmV3IHByb3BlcnR5IGtleSB0byB1c2UsIHJlcGxhY2luZyB0aGUgY3VycmVudCBvbmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNsb2FkQ29uZmlnXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyQ29uZmlnfSBbY29uZmlnXSAtIFNldHRpbmdzIGZvciB0aGUgUGFydGljbGUgRW1pdHRlciB0aGF0IG93bnMgdGhpcyBwcm9wZXJ0eS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbbmV3S2V5XSAtIFRoZSBuZXcga2V5IHRvIHVzZSBmb3IgdGhpcyBwcm9wZXJ0eSwgaWYgYW55LlxyXG4gICAgICovXHJcbiAgICBsb2FkQ29uZmlnOiBmdW5jdGlvbiAoY29uZmlnLCBuZXdLZXkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNvbmZpZyA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uZmlnID0ge307XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobmV3S2V5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eUtleSA9IG5ld0tleTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucHJvcGVydHlWYWx1ZSA9IEdldEZhc3RWYWx1ZShcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0aGlzLnByb3BlcnR5S2V5LFxyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0TWV0aG9kcygpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5lbWl0T25seSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBSZXNldCBpdCBiYWNrIGFnYWluXHJcbiAgICAgICAgICAgIHRoaXMub25VcGRhdGUgPSB0aGlzLmRlZmF1bHRVcGRhdGU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGlzIFBhcnRpY2xlIEVtaXR0ZXIgcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCN0b0pTT05cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge29iamVjdH0gQSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgUGFydGljbGUgRW1pdHRlciBwcm9wZXJ0eS5cclxuICAgICAqL1xyXG4gICAgdG9KU09OOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnR5VmFsdWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hhbmdlIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBhbmQgdXBkYXRlIGl0cyBjYWxsYmFjayBtZXRob2RzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3Ajb25DaGFuZ2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3B9IFRoaXMgRW1pdHRlciBPcCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eVZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnNldE1ldGhvZHMoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgdGhlIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNvbkVtaXR9IGFuZFxyXG4gICAgICoge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI29uVXBkYXRlfSBjYWxsYmFja3MgYmFzZWQgb24gdGhlIHR5cGUgb2YgdGhlIGN1cnJlbnRcclxuICAgICAqIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNwcm9wZXJ0eVZhbHVlfS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI3NldE1ldGhvZHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wfSBUaGlzIEVtaXR0ZXIgT3Agb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRNZXRob2RzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMucHJvcGVydHlWYWx1ZTtcclxuXHJcbiAgICAgICAgdmFyIHQgPSB0eXBlb2YgdmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh0ID09PSAnbnVtYmVyJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBFeHBsaWNpdCBzdGF0aWMgdmFsdWU6XHJcbiAgICAgICAgICAgIC8vICB4OiA0MDBcclxuXHJcbiAgICAgICAgICAgIHRoaXMub25FbWl0ID0gdGhpcy5zdGF0aWNWYWx1ZUVtaXQ7XHJcbiAgICAgICAgICAgIHRoaXMub25VcGRhdGUgPSB0aGlzLnN0YXRpY1ZhbHVlVXBkYXRlOyAvLyBIb3c/XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFBpY2tzIGEgcmFuZG9tIGVsZW1lbnQgZnJvbSB0aGUgYXJyYXk6XHJcbiAgICAgICAgICAgIC8vICB4OiBbIDEwMCwgMjAwLCAzMDAsIDQwMCBdXHJcblxyXG4gICAgICAgICAgICB0aGlzLm9uRW1pdCA9IHRoaXMucmFuZG9tU3RhdGljVmFsdWVFbWl0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0ID09PSAnZnVuY3Rpb24nKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFRoZSBzYW1lIGFzIHNldHRpbmcganVzdCB0aGUgb25VcGRhdGUgZnVuY3Rpb24gYW5kIG5vIG9uRW1pdCAodW5sZXNzIHRoaXMgb3AgaXMgYW4gZW1pdE9ubHkgb25lKVxyXG4gICAgICAgICAgICAvLyAgQ3VzdG9tIGNhbGxiYWNrLCBtdXN0IHJldHVybiBhIHZhbHVlOlxyXG5cclxuICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgeDogZnVuY3Rpb24gKHBhcnRpY2xlLCBrZXksIHQsIHZhbHVlKVxyXG4gICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgKyA1MDtcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAqL1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZW1pdE9ubHkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25FbWl0ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uVXBkYXRlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodCA9PT0gJ29iamVjdCcgJiYgKHRoaXMuaGFzKHZhbHVlLCAncmFuZG9tJykgfHwgdGhpcy5oYXNCb3RoKHZhbHVlLCAnc3RhcnQnLCAnZW5kJykgfHwgdGhpcy5oYXNCb3RoKHZhbHVlLCAnbWluJywgJ21heCcpKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnQgPSB0aGlzLmhhcyh2YWx1ZSwgJ3N0YXJ0JykgPyB2YWx1ZS5zdGFydCA6IHZhbHVlLm1pbjtcclxuICAgICAgICAgICAgdGhpcy5lbmQgPSB0aGlzLmhhcyh2YWx1ZSwgJ2VuZCcpID8gdmFsdWUuZW5kIDogdmFsdWUubWF4O1xyXG5cclxuICAgICAgICAgICAgdmFyIGlzUmFuZG9tID0gKHRoaXMuaGFzQm90aCh2YWx1ZSwgJ21pbicsICdtYXgnKSB8fCAhIXZhbHVlLnJhbmRvbSk7XHJcblxyXG4gICAgICAgICAgICAvLyAgQSByYW5kb20gc3RhcnRpbmcgdmFsdWUgKHVzaW5nICdtaW4gfCBtYXgnIGluc3RlYWQgb2YgJ3N0YXJ0IHwgZW5kJyBhdXRvbWF0aWNhbGx5IGltcGxpZXMgYSByYW5kb20gdmFsdWUpXHJcblxyXG4gICAgICAgICAgICAvLyAgeDogeyBzdGFydDogMTAwLCBlbmQ6IDQwMCwgcmFuZG9tOiB0cnVlIH0gT1IgeyBtaW46IDEwMCwgbWF4OiA0MDAgfSBPUiB7IHJhbmRvbTogWyAxMDAsIDQwMCBdIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChpc1JhbmRvbSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJuZCA9IHZhbHVlLnJhbmRvbTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyAgeDogeyByYW5kb206IFsgMTAwLCA0MDAgXSB9ID0gdGhlIHNhbWUgYXMgZG9pbmc6IHg6IHsgc3RhcnQ6IDEwMCwgZW5kOiA0MDAsIHJhbmRvbTogdHJ1ZSB9XHJcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShybmQpKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQgPSBybmRbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQgPSBybmRbMV07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkVtaXQgPSB0aGlzLnJhbmRvbVJhbmdlZFZhbHVlRW1pdDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzKHZhbHVlLCAnc3RlcHMnKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIEEgc3RlcHBlZCAocGVyIGVtaXQpIHJhbmdlXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIHg6IHsgc3RhcnQ6IDEwMCwgZW5kOiA0MDAsIHN0ZXBzOiA2NCB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIEluY3JlbWVudHMgYSB2YWx1ZSBzdG9yZWQgaW4gdGhlIGVtaXR0ZXJcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBzID0gdmFsdWUuc3RlcHM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50ZXIgPSB0aGlzLnN0YXJ0O1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMub25FbWl0ID0gdGhpcy5zdGVwcGVkRW1pdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBBbiBlYXNlZCByYW5nZSAoZGVmYXVsdHMgdG8gTGluZWFyIGlmIG5vdCBzcGVjaWZpZWQpXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIHg6IHsgc3RhcnQ6IDEwMCwgZW5kOiA0MDAsIFsgZWFzZTogJ0xpbmVhcicgXSB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGVhc2VUeXBlID0gdGhpcy5oYXModmFsdWUsICdlYXNlJykgPyB2YWx1ZS5lYXNlIDogJ0xpbmVhcic7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5lYXNlID0gR2V0RWFzZUZ1bmN0aW9uKGVhc2VUeXBlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzUmFuZG9tKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25FbWl0ID0gdGhpcy5lYXNlZFZhbHVlRW1pdDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyAgQlVHOiBhbHBoYSwgcm90YXRlLCBzY2FsZVgsIHNjYWxlWSwgb3IgdGludCBhcmUgZWFzZWQgaGVyZSBpZiB7bWluLCBtYXh9IGlzIGdpdmVuLlxyXG4gICAgICAgICAgICAgICAgLy8gIFByb2JhYmx5IHRoaXMgYnJhbmNoIHNob3VsZCBleGNsdWRlIGlzUmFuZG9tIGVudGlyZWx5LlxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMub25VcGRhdGUgPSB0aGlzLmVhc2VWYWx1ZVVwZGF0ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0ID09PSAnb2JqZWN0JyAmJiB0aGlzLmhhc0VpdGhlcih2YWx1ZSwgJ29uRW1pdCcsICdvblVwZGF0ZScpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIEN1c3RvbSBvbkVtaXQgYW5kIG9uVXBkYXRlIGNhbGxiYWNrc1xyXG5cclxuICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgeDoge1xyXG4gICAgICAgICAgICAgICAgLy8gIENhbGxlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcnRpY2xlcyBsaWZlLCB3aGVuIGl0IGlzIGJlaW5nIGNyZWF0ZWRcclxuICAgICAgICAgICAgICAgIG9uRW1pdDogZnVuY3Rpb24gKHBhcnRpY2xlLCBrZXksIHQsIHZhbHVlKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIENhbGxlZCBkdXJpbmcgdGhlIHBhcnRpY2xlcyBsaWZlIG9uIGVhY2ggdXBkYXRlXHJcbiAgICAgICAgICAgICAgICBvblVwZGF0ZTogZnVuY3Rpb24gKHBhcnRpY2xlLCBrZXksIHQsIHZhbHVlKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAqL1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzKHZhbHVlLCAnb25FbWl0JykpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25FbWl0ID0gdmFsdWUub25FbWl0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5oYXModmFsdWUsICdvblVwZGF0ZScpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uVXBkYXRlID0gdmFsdWUub25VcGRhdGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyB0aGUgZ2l2ZW4gcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNoYXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3QgLSBUaGUgb2JqZWN0IHRvIGNoZWNrLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGxvb2sgZm9yIGluIHRoZSBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSBleGlzdHMgaW4gdGhlIG9iamVjdCwgYGZhbHNlYCBvdGhlcndpc2UuXHJcbiAgICAgKi9cclxuICAgIGhhczogZnVuY3Rpb24gKG9iamVjdCwga2V5KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYm90aCBvZiB0aGUgZ2l2ZW4gcHJvcGVydGllcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI2hhc0JvdGhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3QgLSBUaGUgb2JqZWN0IHRvIGNoZWNrLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleTEgLSBUaGUga2V5IG9mIHRoZSBmaXJzdCBwcm9wZXJ0eSB0byBjaGVjayB0aGUgb2JqZWN0IGZvci5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkyIC0gVGhlIGtleSBvZiB0aGUgc2Vjb25kIHByb3BlcnR5IHRvIGNoZWNrIHRoZSBvYmplY3QgZm9yLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiBib3RoIHByb3BlcnRpZXMgZXhpc3QgaW4gdGhlIG9iamVjdCwgYGZhbHNlYCBvdGhlcndpc2UuXHJcbiAgICAgKi9cclxuICAgIGhhc0JvdGg6IGZ1bmN0aW9uIChvYmplY3QsIGtleTEsIGtleTIpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkxKSAmJiBvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5Mik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2sgd2hldGhlciBhbiBvYmplY3QgaGFzIGF0IGxlYXN0IG9uZSBvZiB0aGUgZ2l2ZW4gcHJvcGVydGllcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI2hhc0VpdGhlclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCAtIFRoZSBvYmplY3QgdG8gY2hlY2suXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5MSAtIFRoZSBrZXkgb2YgdGhlIGZpcnN0IHByb3BlcnR5IHRvIGNoZWNrIHRoZSBvYmplY3QgZm9yLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleTIgLSBUaGUga2V5IG9mIHRoZSBzZWNvbmQgcHJvcGVydHkgdG8gY2hlY2sgdGhlIG9iamVjdCBmb3IuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgcHJvcGVydGllcyBleGlzdHMgaW4gdGhlIG9iamVjdCwgYGZhbHNlYCBpZiBuZWl0aGVyIGV4aXN0LlxyXG4gICAgICovXHJcbiAgICBoYXNFaXRoZXI6IGZ1bmN0aW9uIChvYmplY3QsIGtleTEsIGtleTIpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkxKSB8fCBvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5Mik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHJldHVybmVkIHZhbHVlIHNldHMgd2hhdCB0aGUgcHJvcGVydHkgd2lsbCBiZSBhdCB0aGUgU1RBUlQgb2YgdGhlIHBhcnRpY2xlcyBsaWZlLCBvbiBlbWl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3AjZGVmYXVsdEVtaXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZX0gcGFydGljbGUgLSBUaGUgcGFydGljbGUuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt2YWx1ZV0gLSBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbmV3IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS5cclxuICAgICAqL1xyXG4gICAgZGVmYXVsdEVtaXQ6IGZ1bmN0aW9uIChwYXJ0aWNsZSwga2V5LCB2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHJldHVybmVkIHZhbHVlIHVwZGF0ZXMgdGhlIHByb3BlcnR5IGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHBhcnRpY2xlcyBsaWZlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3AjZGVmYXVsdFVwZGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBwYXJ0aWNsZS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdCAtIFRoZSBUIHZhbHVlIChiZXR3ZWVuIDAgYW5kIDEpXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbmV3IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS5cclxuICAgICAqL1xyXG4gICAgZGVmYXVsdFVwZGF0ZTogZnVuY3Rpb24gKHBhcnRpY2xlLCBrZXksIHQsIHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBgb25FbWl0YCBjYWxsYmFjayB0aGF0IHJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHByb3BlcnR5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3Ajc3RhdGljVmFsdWVFbWl0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS5cclxuICAgICAqL1xyXG4gICAgc3RhdGljVmFsdWVFbWl0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnR5VmFsdWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gYG9uVXBkYXRlYCBjYWxsYmFjayB0aGF0IHJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHByb3BlcnR5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3Ajc3RhdGljVmFsdWVVcGRhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHByb3BlcnR5LlxyXG4gICAgICovXHJcbiAgICBzdGF0aWNWYWx1ZVVwZGF0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eVZhbHVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuIGBvbkVtaXRgIGNhbGxiYWNrIHRoYXQgcmV0dXJucyBhIHJhbmRvbSB2YWx1ZSBmcm9tIHRoZSBjdXJyZW50IHZhbHVlIGFycmF5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3AjcmFuZG9tU3RhdGljVmFsdWVFbWl0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXcgdmFsdWUgb2YgdGhlIHByb3BlcnR5LlxyXG4gICAgICovXHJcbiAgICByYW5kb21TdGF0aWNWYWx1ZUVtaXQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy5wcm9wZXJ0eVZhbHVlLmxlbmd0aCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnR5VmFsdWVbcmFuZG9tSW5kZXhdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuIGBvbkVtaXRgIGNhbGxiYWNrIHRoYXQgcmV0dXJucyBhIHZhbHVlIGJldHdlZW4gdGhlIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNzdGFydH0gYW5kXHJcbiAgICAgKiB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3AjZW5kfSByYW5nZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI3JhbmRvbVJhbmdlZFZhbHVlRW1pdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBwYXJ0aWNsZS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXcgdmFsdWUgb2YgdGhlIHByb3BlcnR5LlxyXG4gICAgICovXHJcbiAgICByYW5kb21SYW5nZWRWYWx1ZUVtaXQ6IGZ1bmN0aW9uIChwYXJ0aWNsZSwga2V5KVxyXG4gICAge1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IEZsb2F0QmV0d2Vlbih0aGlzLnN0YXJ0LCB0aGlzLmVuZCk7XHJcblxyXG4gICAgICAgIGlmIChwYXJ0aWNsZSAmJiBwYXJ0aWNsZS5kYXRhW2tleV0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwYXJ0aWNsZS5kYXRhW2tleV0ubWluID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gYG9uRW1pdGAgY2FsbGJhY2sgdGhhdCByZXR1cm5zIGEgc3RlcHBlZCB2YWx1ZSBiZXR3ZWVuIHRoZVxyXG4gICAgICoge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI3N0YXJ0fSBhbmQge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI2VuZH1cclxuICAgICAqIHJhbmdlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3Ajc3RlcHBlZEVtaXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIG5ldyB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuXHJcbiAgICAgKi9cclxuICAgIHN0ZXBwZWRFbWl0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5jb3VudGVyO1xyXG5cclxuICAgICAgICB2YXIgbmV4dCA9IHRoaXMuY291bnRlciArICh0aGlzLmVuZCAtIHRoaXMuc3RhcnQpIC8gdGhpcy5zdGVwcztcclxuXHJcbiAgICAgICAgdGhpcy5jb3VudGVyID0gV3JhcChuZXh0LCB0aGlzLnN0YXJ0LCB0aGlzLmVuZCk7XHJcblxyXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuIGBvbkVtaXRgIGNhbGxiYWNrIGZvciBhbiBlYXNlZCBwcm9wZXJ0eS5cclxuICAgICAqXHJcbiAgICAgKiBJdCBwcmVwYXJlcyB0aGUgcGFydGljbGUgZm9yIGVhc2luZyBieSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3AjZWFzZVZhbHVlVXBkYXRlfS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI2Vhc2VkVmFsdWVFbWl0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGV9IHBhcnRpY2xlIC0gVGhlIHBhcnRpY2xlLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNzdGFydH0sIGFzIHRoZSBuZXcgdmFsdWUgb2YgdGhlIHByb3BlcnR5LlxyXG4gICAgICovXHJcbiAgICBlYXNlZFZhbHVlRW1pdDogZnVuY3Rpb24gKHBhcnRpY2xlLCBrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHBhcnRpY2xlICYmIHBhcnRpY2xlLmRhdGFba2V5XSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBkYXRhID0gcGFydGljbGUuZGF0YVtrZXldO1xyXG5cclxuICAgICAgICAgICAgZGF0YS5taW4gPSB0aGlzLnN0YXJ0O1xyXG4gICAgICAgICAgICBkYXRhLm1heCA9IHRoaXMuZW5kO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gYG9uVXBkYXRlYCBjYWxsYmFjayB0aGF0IHJldHVybnMgYW4gZWFzZWQgdmFsdWUgYmV0d2VlbiB0aGVcclxuICAgICAqIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNzdGFydH0gYW5kIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcCNlbmR9XHJcbiAgICAgKiByYW5nZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wI2Vhc2VWYWx1ZVVwZGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBwYXJ0aWNsZS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdCAtIFRoZSBUIHZhbHVlIChiZXR3ZWVuIDAgYW5kIDEpXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbmV3IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS5cclxuICAgICAqL1xyXG4gICAgZWFzZVZhbHVlVXBkYXRlOiBmdW5jdGlvbiAocGFydGljbGUsIGtleSwgdClcclxuICAgIHtcclxuICAgICAgICB2YXIgZGF0YSA9IHBhcnRpY2xlLmRhdGFba2V5XTtcclxuXHJcbiAgICAgICAgcmV0dXJuIChkYXRhLm1heCAtIGRhdGEubWluKSAqIHRoaXMuZWFzZSh0KSArIGRhdGEubWluO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRW1pdHRlck9wO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/EmitterOp.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/particles/GravityWell.js":
/*!**********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/particles/GravityWell.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The GravityWell action applies a force on the particle to draw it towards, or repel it from, a single point.\r\n * \r\n * The force applied is inversely proportional to the square of the distance from the particle to the point, in accordance with Newton's law of gravity.\r\n * \r\n * This simulates the effect of gravity over large distances (as between planets, for example).\r\n *\r\n * @class GravityWell\r\n * @memberof Phaser.GameObjects.Particles\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {(number|Phaser.Types.GameObjects.Particles.GravityWellConfig)} [x=0] - The x coordinate of the Gravity Well, in world space.\r\n * @param {number} [y=0] - The y coordinate of the Gravity Well, in world space.\r\n * @param {number} [power=0] - The strength of the gravity force - larger numbers produce a stronger force.\r\n * @param {number} [epsilon=100] - The minimum distance for which the gravity force is calculated.\r\n * @param {number} [gravity=50] - The gravitational force of this Gravity Well.\r\n */\r\nvar GravityWell = new Class({\r\n\r\n initialize:\r\n\r\n function GravityWell (x, y, power, epsilon, gravity)\r\n {\r\n if (typeof x === 'object')\r\n {\r\n var config = x;\r\n\r\n x = GetFastValue(config, 'x', 0);\r\n y = GetFastValue(config, 'y', 0);\r\n power = GetFastValue(config, 'power', 0);\r\n epsilon = GetFastValue(config, 'epsilon', 100);\r\n gravity = GetFastValue(config, 'gravity', 50);\r\n }\r\n else\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n if (power === undefined) { power = 0; }\r\n if (epsilon === undefined) { epsilon = 100; }\r\n if (gravity === undefined) { gravity = 50; }\r\n }\r\n\r\n /**\r\n * The x coordinate of the Gravity Well, in world space.\r\n *\r\n * @name Phaser.GameObjects.Particles.GravityWell#x\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.x = x;\r\n\r\n /**\r\n * The y coordinate of the Gravity Well, in world space.\r\n *\r\n * @name Phaser.GameObjects.Particles.GravityWell#y\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.y = y;\r\n\r\n /**\r\n * The active state of the Gravity Well. An inactive Gravity Well will not influence any particles.\r\n *\r\n * @name Phaser.GameObjects.Particles.GravityWell#active\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.active = true;\r\n\r\n /**\r\n * Internal gravity value.\r\n *\r\n * @name Phaser.GameObjects.Particles.GravityWell#_gravity\r\n * @type {number}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._gravity = gravity;\r\n\r\n /**\r\n * Internal power value.\r\n *\r\n * @name Phaser.GameObjects.Particles.GravityWell#_power\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this._power = 0;\r\n\r\n /**\r\n * Internal epsilon value.\r\n *\r\n * @name Phaser.GameObjects.Particles.GravityWell#_epsilon\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this._epsilon = 0;\r\n\r\n /**\r\n * The strength of the gravity force - larger numbers produce a stronger force.\r\n *\r\n * @name Phaser.GameObjects.Particles.GravityWell#power\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.power = power;\r\n\r\n /**\r\n * The minimum distance for which the gravity force is calculated.\r\n *\r\n * @name Phaser.GameObjects.Particles.GravityWell#epsilon\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.epsilon = epsilon;\r\n },\r\n\r\n /**\r\n * Takes a Particle and updates it based on the properties of this Gravity Well.\r\n *\r\n * @method Phaser.GameObjects.Particles.GravityWell#update\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Particles.Particle} particle - The Particle to update.\r\n * @param {number} delta - The delta time in ms.\r\n * @param {number} step - The delta value divided by 1000.\r\n */\r\n update: function (particle, delta)\r\n {\r\n var x = this.x - particle.x;\r\n var y = this.y - particle.y;\r\n var dSq = x * x + y * y;\r\n\r\n if (dSq === 0)\r\n {\r\n return;\r\n }\r\n\r\n var d = Math.sqrt(dSq);\r\n\r\n if (dSq < this._epsilon)\r\n {\r\n dSq = this._epsilon;\r\n }\r\n\r\n var factor = ((this._power * delta) / (dSq * d)) * 100;\r\n\r\n particle.velocityX += x * factor;\r\n particle.velocityY += y * factor;\r\n },\r\n\r\n epsilon: {\r\n\r\n get: function ()\r\n {\r\n return Math.sqrt(this._epsilon);\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._epsilon = value * value;\r\n }\r\n\r\n },\r\n\r\n power: {\r\n\r\n get: function ()\r\n {\r\n return this._power / this._gravity;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._power = value * this._gravity;\r\n }\r\n\r\n },\r\n\r\n gravity: {\r\n\r\n get: function ()\r\n {\r\n return this._gravity;\r\n },\r\n\r\n set: function (value)\r\n {\r\n var pwr = this.power;\r\n this._gravity = value;\r\n this.power = pwr;\r\n }\r\n\r\n }\r\n\r\n});\r\n\r\nmodule.exports = GravityWell;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvR3Jhdml0eVdlbGwuanM/OWNlMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4REFBOEQ7QUFDekUsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLE9BQU87QUFDekMsa0NBQWtDLE9BQU87QUFDekMsc0NBQXNDLFdBQVc7QUFDakQsd0NBQXdDLGVBQWU7QUFDdkQsd0NBQXdDLGNBQWM7QUFDdEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxzQ0FBc0M7QUFDckQsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvcGFydGljbGVzL0dyYXZpdHlXZWxsLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIEdyYXZpdHlXZWxsIGFjdGlvbiBhcHBsaWVzIGEgZm9yY2Ugb24gdGhlIHBhcnRpY2xlIHRvIGRyYXcgaXQgdG93YXJkcywgb3IgcmVwZWwgaXQgZnJvbSwgYSBzaW5nbGUgcG9pbnQuXHJcbiAqIFxyXG4gKiBUaGUgZm9yY2UgYXBwbGllZCBpcyBpbnZlcnNlbHkgcHJvcG9ydGlvbmFsIHRvIHRoZSBzcXVhcmUgb2YgdGhlIGRpc3RhbmNlIGZyb20gdGhlIHBhcnRpY2xlIHRvIHRoZSBwb2ludCwgaW4gYWNjb3JkYW5jZSB3aXRoIE5ld3RvbidzIGxhdyBvZiBncmF2aXR5LlxyXG4gKiBcclxuICogVGhpcyBzaW11bGF0ZXMgdGhlIGVmZmVjdCBvZiBncmF2aXR5IG92ZXIgbGFyZ2UgZGlzdGFuY2VzIChhcyBiZXR3ZWVuIHBsYW5ldHMsIGZvciBleGFtcGxlKS5cclxuICpcclxuICogQGNsYXNzIEdyYXZpdHlXZWxsXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsobnVtYmVyfFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuR3Jhdml0eVdlbGxDb25maWcpfSBbeD0wXSAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIEdyYXZpdHkgV2VsbCwgaW4gd29ybGQgc3BhY2UuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIEdyYXZpdHkgV2VsbCwgaW4gd29ybGQgc3BhY2UuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcG93ZXI9MF0gLSBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXZpdHkgZm9yY2UgLSBsYXJnZXIgbnVtYmVycyBwcm9kdWNlIGEgc3Ryb25nZXIgZm9yY2UuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZXBzaWxvbj0xMDBdIC0gVGhlIG1pbmltdW0gZGlzdGFuY2UgZm9yIHdoaWNoIHRoZSBncmF2aXR5IGZvcmNlIGlzIGNhbGN1bGF0ZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZ3Jhdml0eT01MF0gLSBUaGUgZ3Jhdml0YXRpb25hbCBmb3JjZSBvZiB0aGlzIEdyYXZpdHkgV2VsbC5cclxuICovXHJcbnZhciBHcmF2aXR5V2VsbCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBHcmF2aXR5V2VsbCAoeCwgeSwgcG93ZXIsIGVwc2lsb24sIGdyYXZpdHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB4ID09PSAnb2JqZWN0JylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjb25maWcgPSB4O1xyXG5cclxuICAgICAgICAgICAgeCA9IEdldEZhc3RWYWx1ZShjb25maWcsICd4JywgMCk7XHJcbiAgICAgICAgICAgIHkgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAneScsIDApO1xyXG4gICAgICAgICAgICBwb3dlciA9IEdldEZhc3RWYWx1ZShjb25maWcsICdwb3dlcicsIDApO1xyXG4gICAgICAgICAgICBlcHNpbG9uID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2Vwc2lsb24nLCAxMDApO1xyXG4gICAgICAgICAgICBncmF2aXR5ID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2dyYXZpdHknLCA1MCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0gMDsgfVxyXG4gICAgICAgICAgICBpZiAocG93ZXIgPT09IHVuZGVmaW5lZCkgeyBwb3dlciA9IDA7IH1cclxuICAgICAgICAgICAgaWYgKGVwc2lsb24gPT09IHVuZGVmaW5lZCkgeyBlcHNpbG9uID0gMTAwOyB9XHJcbiAgICAgICAgICAgIGlmIChncmF2aXR5ID09PSB1bmRlZmluZWQpIHsgZ3Jhdml0eSA9IDUwOyB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBHcmF2aXR5IFdlbGwsIGluIHdvcmxkIHNwYWNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5HcmF2aXR5V2VsbCN4XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnggPSB4O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBHcmF2aXR5IFdlbGwsIGluIHdvcmxkIHNwYWNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5HcmF2aXR5V2VsbCN5XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnkgPSB5O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYWN0aXZlIHN0YXRlIG9mIHRoZSBHcmF2aXR5IFdlbGwuIEFuIGluYWN0aXZlIEdyYXZpdHkgV2VsbCB3aWxsIG5vdCBpbmZsdWVuY2UgYW55IHBhcnRpY2xlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuR3Jhdml0eVdlbGwjYWN0aXZlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgZ3Jhdml0eSB2YWx1ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuR3Jhdml0eVdlbGwjX2dyYXZpdHlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fZ3Jhdml0eSA9IGdyYXZpdHk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIHBvd2VyIHZhbHVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5HcmF2aXR5V2VsbCNfcG93ZXJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3Bvd2VyID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgZXBzaWxvbiB2YWx1ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuR3Jhdml0eVdlbGwjX2Vwc2lsb25cclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2Vwc2lsb24gPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXZpdHkgZm9yY2UgLSBsYXJnZXIgbnVtYmVycyBwcm9kdWNlIGEgc3Ryb25nZXIgZm9yY2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkdyYXZpdHlXZWxsI3Bvd2VyXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBvd2VyID0gcG93ZXI7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBtaW5pbXVtIGRpc3RhbmNlIGZvciB3aGljaCB0aGUgZ3Jhdml0eSBmb3JjZSBpcyBjYWxjdWxhdGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5HcmF2aXR5V2VsbCNlcHNpbG9uXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmVwc2lsb24gPSBlcHNpbG9uO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRha2VzIGEgUGFydGljbGUgYW5kIHVwZGF0ZXMgaXQgYmFzZWQgb24gdGhlIHByb3BlcnRpZXMgb2YgdGhpcyBHcmF2aXR5IFdlbGwuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkdyYXZpdHlXZWxsI3VwZGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBQYXJ0aWNsZSB0byB1cGRhdGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGEgLSBUaGUgZGVsdGEgdGltZSBpbiBtcy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGVwIC0gVGhlIGRlbHRhIHZhbHVlIGRpdmlkZWQgYnkgMTAwMC5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAocGFydGljbGUsIGRlbHRhKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB4ID0gdGhpcy54IC0gcGFydGljbGUueDtcclxuICAgICAgICB2YXIgeSA9IHRoaXMueSAtIHBhcnRpY2xlLnk7XHJcbiAgICAgICAgdmFyIGRTcSA9IHggKiB4ICsgeSAqIHk7XHJcblxyXG4gICAgICAgIGlmIChkU3EgPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZCA9IE1hdGguc3FydChkU3EpO1xyXG5cclxuICAgICAgICBpZiAoZFNxIDwgdGhpcy5fZXBzaWxvbilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGRTcSA9IHRoaXMuX2Vwc2lsb247XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZmFjdG9yID0gKCh0aGlzLl9wb3dlciAqIGRlbHRhKSAvIChkU3EgKiBkKSkgKiAxMDA7XHJcblxyXG4gICAgICAgIHBhcnRpY2xlLnZlbG9jaXR5WCArPSB4ICogZmFjdG9yO1xyXG4gICAgICAgIHBhcnRpY2xlLnZlbG9jaXR5WSArPSB5ICogZmFjdG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICBlcHNpbG9uOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnNxcnQodGhpcy5fZXBzaWxvbik7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9lcHNpbG9uID0gdmFsdWUgKiB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwb3dlcjoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcG93ZXIgLyB0aGlzLl9ncmF2aXR5O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fcG93ZXIgPSB2YWx1ZSAqIHRoaXMuX2dyYXZpdHk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgZ3Jhdml0eToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZ3Jhdml0eTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBwd3IgPSB0aGlzLnBvd2VyO1xyXG4gICAgICAgICAgICB0aGlzLl9ncmF2aXR5ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucG93ZXIgPSBwd3I7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHcmF2aXR5V2VsbDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/GravityWell.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/particles/Particle.js":
/*!*******************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/particles/Particle.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar DegToRad = __webpack_require__(/*! ../../math/DegToRad */ \"./node_modules/phaser/src/math/DegToRad.js\");\r\nvar DistanceBetween = __webpack_require__(/*! ../../math/distance/DistanceBetween */ \"./node_modules/phaser/src/math/distance/DistanceBetween.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Particle is a simple Game Object controlled by a Particle Emitter and Manager, and rendered by the Manager.\r\n * It uses its own lightweight physics system, and can interact only with its Emitter's bounds and zones.\r\n *\r\n * @class Particle\r\n * @memberof Phaser.GameObjects.Particles\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Particles.ParticleEmitter} emitter - The Emitter to which this Particle belongs.\r\n */\r\nvar Particle = new Class({\r\n\r\n initialize:\r\n\r\n function Particle (emitter)\r\n {\r\n /**\r\n * The Emitter to which this Particle belongs.\r\n *\r\n * A Particle can only belong to a single Emitter and is created, updated and destroyed via it.\r\n *\r\n * @name Phaser.GameObjects.Particles.Particle#emitter\r\n * @type {Phaser.GameObjects.Particles.ParticleEmitter}\r\n * @since 3.0.0\r\n */\r\n this.emitter = emitter;\r\n\r\n /**\r\n * The texture frame used to render this Particle.\r\n *\r\n * @name Phaser.GameObjects.Particles.Particle#frame\r\n * @type {Phaser.Textures.Frame}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.frame = null;\r\n\r\n /**\r\n * The x coordinate of this Particle.\r\n *\r\n * @name Phaser.GameObjects.Particles.Particle#x\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.x = 0;\r\n\r\n /**\r\n * The y coordinate of this Particle.\r\n *\r\n * @name Phaser.GameObjects.Particles.Particle#y\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.y = 0;\r\n\r\n /**\r\n * The x velocity of this Particle.\r\n *\r\n * @name Phaser.GameObjects.Particles.Particle#velocityX\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.velocityX = 0;\r\n\r\n /**\r\n * The y velocity of this Particle.\r\n *\r\n * @name Phaser.GameObjects.Particles.Particle#velocityY\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.velocityY = 0;\r\n\r\n /**\r\n * The x acceleration of this Particle.\r\n *\r\n * @name Phaser.GameObjects.Particles.Particle#accelerationX\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.accelerationX = 0;\r\n\r\n /**\r\n * The y acceleration of this Particle.\r\n *\r\n * @name Phaser.GameObjects.Particles.Particle#accelerationY\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.accelerationY = 0;\r\n\r\n /**\r\n * The maximum horizontal velocity this Particle can travel at.\r\n *\r\n * @name Phaser.GameObjects.Particles.Particle#maxVelocityX\r\n * @type {number}\r\n * @default 10000\r\n * @since 3.0.0\r\n */\r\n this.maxVelocityX = 10000;\r\n\r\n /**\r\n * The maximum vertical velocity this Particle can travel at.\r\n *\r\n * @name Phaser.GameObjects.Particles.Particle#maxVelocityY\r\n * @type {number}\r\n * @default 10000\r\n * @since 3.0.0\r\n */\r\n this.maxVelocityY = 10000;\r\n\r\n /**\r\n * The bounciness, or restitution, of this Particle.\r\n *\r\n * @name Phaser.GameObjects.Particles.Particle#bounce\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.bounce = 0;\r\n\r\n /**\r\n * The horizontal scale of this Particle.\r\n *\r\n * @name Phaser.GameObjects.Particles.Particle#scaleX\r\n * @type {number}\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n this.scaleX = 1;\r\n\r\n /**\r\n * The vertical scale of this Particle.\r\n *\r\n * @name Phaser.GameObjects.Particles.Particle#scaleY\r\n * @type {number}\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n this.scaleY = 1;\r\n\r\n /**\r\n * The alpha value of this Particle.\r\n *\r\n * @name Phaser.GameObjects.Particles.Particle#alpha\r\n * @type {number}\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n this.alpha = 1;\r\n\r\n /**\r\n * The angle of this Particle in degrees.\r\n *\r\n * @name Phaser.GameObjects.Particles.Particle#angle\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.angle = 0;\r\n\r\n /**\r\n * The angle of this Particle in radians.\r\n *\r\n * @name Phaser.GameObjects.Particles.Particle#rotation\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.rotation = 0;\r\n\r\n /**\r\n * The tint applied to this Particle.\r\n *\r\n * @name Phaser.GameObjects.Particles.Particle#tint\r\n * @type {integer}\r\n * @webglOnly\r\n * @since 3.0.0\r\n */\r\n this.tint = 0xffffff;\r\n\r\n /**\r\n * The lifespan of this Particle in ms.\r\n *\r\n * @name Phaser.GameObjects.Particles.Particle#life\r\n * @type {number}\r\n * @default 1000\r\n * @since 3.0.0\r\n */\r\n this.life = 1000;\r\n\r\n /**\r\n * The current life of this Particle in ms.\r\n *\r\n * @name Phaser.GameObjects.Particles.Particle#lifeCurrent\r\n * @type {number}\r\n * @default 1000\r\n * @since 3.0.0\r\n */\r\n this.lifeCurrent = 1000;\r\n\r\n /**\r\n * The delay applied to this Particle upon emission, in ms.\r\n *\r\n * @name Phaser.GameObjects.Particles.Particle#delayCurrent\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.delayCurrent = 0;\r\n\r\n /**\r\n * The normalized lifespan T value, where 0 is the start and 1 is the end.\r\n *\r\n * @name Phaser.GameObjects.Particles.Particle#lifeT\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.lifeT = 0;\r\n\r\n /**\r\n * The data used by the ease equation.\r\n *\r\n * @name Phaser.GameObjects.Particles.Particle#data\r\n * @type {object}\r\n * @since 3.0.0\r\n */\r\n this.data = {\r\n tint: { min: 0xffffff, max: 0xffffff, current: 0xffffff },\r\n alpha: { min: 1, max: 1 },\r\n rotate: { min: 0, max: 0 },\r\n scaleX: { min: 1, max: 1 },\r\n scaleY: { min: 1, max: 1 }\r\n };\r\n },\r\n\r\n /**\r\n * Checks to see if this Particle is alive and updating.\r\n *\r\n * @method Phaser.GameObjects.Particles.Particle#isAlive\r\n * @since 3.0.0\r\n *\r\n * @return {boolean} `true` if this Particle is alive and updating, otherwise `false`.\r\n */\r\n isAlive: function ()\r\n {\r\n return (this.lifeCurrent > 0);\r\n },\r\n\r\n /**\r\n * Resets the position of this particle back to zero.\r\n *\r\n * @method Phaser.GameObjects.Particles.Particle#resetPosition\r\n * @since 3.16.0\r\n */\r\n resetPosition: function ()\r\n {\r\n this.x = 0;\r\n this.y = 0;\r\n },\r\n\r\n /**\r\n * Starts this Particle from the given coordinates.\r\n *\r\n * @method Phaser.GameObjects.Particles.Particle#fire\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x coordinate to launch this Particle from.\r\n * @param {number} y - The y coordinate to launch this Particle from.\r\n */\r\n fire: function (x, y)\r\n {\r\n var emitter = this.emitter;\r\n\r\n this.frame = emitter.getFrame();\r\n\r\n if (emitter.emitZone)\r\n {\r\n // Updates particle.x and particle.y during this call\r\n emitter.emitZone.getPoint(this);\r\n }\r\n\r\n if (x === undefined)\r\n {\r\n if (emitter.follow)\r\n {\r\n this.x += emitter.follow.x + emitter.followOffset.x;\r\n }\r\n\r\n this.x += emitter.x.onEmit(this, 'x');\r\n }\r\n else\r\n {\r\n this.x += x;\r\n }\r\n\r\n if (y === undefined)\r\n {\r\n if (emitter.follow)\r\n {\r\n this.y += emitter.follow.y + emitter.followOffset.y;\r\n }\r\n\r\n this.y += emitter.y.onEmit(this, 'y');\r\n }\r\n else\r\n {\r\n this.y += y;\r\n }\r\n\r\n this.life = emitter.lifespan.onEmit(this, 'lifespan');\r\n this.lifeCurrent = this.life;\r\n this.lifeT = 0;\r\n\r\n var sx = emitter.speedX.onEmit(this, 'speedX');\r\n var sy = (emitter.speedY) ? emitter.speedY.onEmit(this, 'speedY') : sx;\r\n\r\n if (emitter.radial)\r\n {\r\n var rad = DegToRad(emitter.angle.onEmit(this, 'angle'));\r\n\r\n this.velocityX = Math.cos(rad) * Math.abs(sx);\r\n this.velocityY = Math.sin(rad) * Math.abs(sy);\r\n }\r\n else if (emitter.moveTo)\r\n {\r\n var mx = emitter.moveToX.onEmit(this, 'moveToX');\r\n var my = (emitter.moveToY) ? emitter.moveToY.onEmit(this, 'moveToY') : mx;\r\n\r\n var angle = Math.atan2(my - this.y, mx - this.x);\r\n\r\n var speed = DistanceBetween(this.x, this.y, mx, my) / (this.life / 1000);\r\n\r\n // We know how many pixels we need to move, but how fast?\r\n // var speed = this.distanceToXY(displayObject, x, y) / (maxTime / 1000);\r\n\r\n this.velocityX = Math.cos(angle) * speed;\r\n this.velocityY = Math.sin(angle) * speed;\r\n }\r\n else\r\n {\r\n this.velocityX = sx;\r\n this.velocityY = sy;\r\n }\r\n\r\n if (emitter.acceleration)\r\n {\r\n this.accelerationX = emitter.accelerationX.onEmit(this, 'accelerationX');\r\n this.accelerationY = emitter.accelerationY.onEmit(this, 'accelerationY');\r\n }\r\n\r\n this.maxVelocityX = emitter.maxVelocityX.onEmit(this, 'maxVelocityX');\r\n this.maxVelocityY = emitter.maxVelocityY.onEmit(this, 'maxVelocityY');\r\n\r\n this.delayCurrent = emitter.delay.onEmit(this, 'delay');\r\n\r\n this.scaleX = emitter.scaleX.onEmit(this, 'scaleX');\r\n this.scaleY = (emitter.scaleY) ? emitter.scaleY.onEmit(this, 'scaleY') : this.scaleX;\r\n\r\n this.angle = emitter.rotate.onEmit(this, 'rotate');\r\n this.rotation = DegToRad(this.angle);\r\n\r\n this.bounce = emitter.bounce.onEmit(this, 'bounce');\r\n\r\n this.alpha = emitter.alpha.onEmit(this, 'alpha');\r\n\r\n this.tint = emitter.tint.onEmit(this, 'tint');\r\n },\r\n\r\n /**\r\n * An internal method that calculates the velocity of the Particle.\r\n *\r\n * @method Phaser.GameObjects.Particles.Particle#computeVelocity\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Particles.ParticleEmitter} emitter - The Emitter that is updating this Particle.\r\n * @param {number} delta - The delta time in ms.\r\n * @param {number} step - The delta value divided by 1000.\r\n * @param {array} processors - Particle processors (gravity wells).\r\n */\r\n computeVelocity: function (emitter, delta, step, processors)\r\n {\r\n var vx = this.velocityX;\r\n var vy = this.velocityY;\r\n\r\n var ax = this.accelerationX;\r\n var ay = this.accelerationY;\r\n\r\n var mx = this.maxVelocityX;\r\n var my = this.maxVelocityY;\r\n\r\n vx += (emitter.gravityX * step);\r\n vy += (emitter.gravityY * step);\r\n\r\n if (ax)\r\n {\r\n vx += (ax * step);\r\n }\r\n\r\n if (ay)\r\n {\r\n vy += (ay * step);\r\n }\r\n\r\n if (vx > mx)\r\n {\r\n vx = mx;\r\n }\r\n else if (vx < -mx)\r\n {\r\n vx = -mx;\r\n }\r\n\r\n if (vy > my)\r\n {\r\n vy = my;\r\n }\r\n else if (vy < -my)\r\n {\r\n vy = -my;\r\n }\r\n\r\n this.velocityX = vx;\r\n this.velocityY = vy;\r\n\r\n // Apply any additional processors\r\n for (var i = 0; i < processors.length; i++)\r\n {\r\n processors[i].update(this, delta, step);\r\n }\r\n },\r\n\r\n /**\r\n * Checks if this Particle is still within the bounds defined by the given Emitter.\r\n *\r\n * If not, and depending on the Emitter collision flags, the Particle may either stop or rebound.\r\n *\r\n * @method Phaser.GameObjects.Particles.Particle#checkBounds\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Particles.ParticleEmitter} emitter - The Emitter to check the bounds against.\r\n */\r\n checkBounds: function (emitter)\r\n {\r\n var bounds = emitter.bounds;\r\n var bounce = -this.bounce;\r\n\r\n if (this.x < bounds.x && emitter.collideLeft)\r\n {\r\n this.x = bounds.x;\r\n this.velocityX *= bounce;\r\n }\r\n else if (this.x > bounds.right && emitter.collideRight)\r\n {\r\n this.x = bounds.right;\r\n this.velocityX *= bounce;\r\n }\r\n\r\n if (this.y < bounds.y && emitter.collideTop)\r\n {\r\n this.y = bounds.y;\r\n this.velocityY *= bounce;\r\n }\r\n else if (this.y > bounds.bottom && emitter.collideBottom)\r\n {\r\n this.y = bounds.bottom;\r\n this.velocityY *= bounce;\r\n }\r\n },\r\n\r\n /**\r\n * The main update method for this Particle.\r\n *\r\n * Updates its life values, computes the velocity and repositions the Particle.\r\n *\r\n * @method Phaser.GameObjects.Particles.Particle#update\r\n * @since 3.0.0\r\n *\r\n * @param {number} delta - The delta time in ms.\r\n * @param {number} step - The delta value divided by 1000.\r\n * @param {array} processors - An optional array of update processors.\r\n *\r\n * @return {boolean} Returns `true` if this Particle has now expired and should be removed, otherwise `false` if still active.\r\n */\r\n update: function (delta, step, processors)\r\n {\r\n if (this.delayCurrent > 0)\r\n {\r\n this.delayCurrent -= delta;\r\n\r\n return false;\r\n }\r\n\r\n var emitter = this.emitter;\r\n\r\n // How far along in life is this particle? (t = 0 to 1)\r\n var t = 1 - (this.lifeCurrent / this.life);\r\n\r\n this.lifeT = t;\r\n\r\n this.computeVelocity(emitter, delta, step, processors);\r\n\r\n this.x += this.velocityX * step;\r\n this.y += this.velocityY * step;\r\n\r\n if (emitter.bounds)\r\n {\r\n this.checkBounds(emitter);\r\n }\r\n\r\n if (emitter.deathZone && emitter.deathZone.willKill(this))\r\n {\r\n this.lifeCurrent = 0;\r\n\r\n // No need to go any further, particle has been killed\r\n return true;\r\n }\r\n\r\n this.scaleX = emitter.scaleX.onUpdate(this, 'scaleX', t, this.scaleX);\r\n\r\n if (emitter.scaleY)\r\n {\r\n this.scaleY = emitter.scaleY.onUpdate(this, 'scaleY', t, this.scaleY);\r\n }\r\n else\r\n {\r\n this.scaleY = this.scaleX;\r\n }\r\n\r\n this.angle = emitter.rotate.onUpdate(this, 'rotate', t, this.angle);\r\n this.rotation = DegToRad(this.angle);\r\n\r\n this.alpha = emitter.alpha.onUpdate(this, 'alpha', t, this.alpha);\r\n\r\n this.tint = emitter.tint.onUpdate(this, 'tint', t, this.tint);\r\n\r\n this.lifeCurrent -= delta;\r\n\r\n return (this.lifeCurrent <= 0);\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Particle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvUGFydGljbGUuanM/ZWU1NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxlQUFlLG1CQUFPLENBQUMsdUVBQXFCO0FBQzVDLHNCQUFzQixtQkFBTyxDQUFDLHVHQUFxQzs7QUFFbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDZDQUE2QztBQUN4RDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixrREFBa0Q7QUFDckUsb0JBQW9CLGlCQUFpQjtBQUNyQyxxQkFBcUIsaUJBQWlCO0FBQ3RDLHFCQUFxQixpQkFBaUI7QUFDdEMscUJBQXFCO0FBQ3JCO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDZDQUE2QztBQUM1RCxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsTUFBTTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLHVCQUF1QjtBQUM5QztBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDZDQUE2QztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE1BQU07QUFDckI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvcGFydGljbGVzL1BhcnRpY2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgRGVnVG9SYWQgPSByZXF1aXJlKCcuLi8uLi9tYXRoL0RlZ1RvUmFkJyk7XHJcbnZhciBEaXN0YW5jZUJldHdlZW4gPSByZXF1aXJlKCcuLi8uLi9tYXRoL2Rpc3RhbmNlL0Rpc3RhbmNlQmV0d2VlbicpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBQYXJ0aWNsZSBpcyBhIHNpbXBsZSBHYW1lIE9iamVjdCBjb250cm9sbGVkIGJ5IGEgUGFydGljbGUgRW1pdHRlciBhbmQgTWFuYWdlciwgYW5kIHJlbmRlcmVkIGJ5IHRoZSBNYW5hZ2VyLlxyXG4gKiBJdCB1c2VzIGl0cyBvd24gbGlnaHR3ZWlnaHQgcGh5c2ljcyBzeXN0ZW0sIGFuZCBjYW4gaW50ZXJhY3Qgb25seSB3aXRoIGl0cyBFbWl0dGVyJ3MgYm91bmRzIGFuZCB6b25lcy5cclxuICpcclxuICogQGNsYXNzIFBhcnRpY2xlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcn0gZW1pdHRlciAtIFRoZSBFbWl0dGVyIHRvIHdoaWNoIHRoaXMgUGFydGljbGUgYmVsb25ncy5cclxuICovXHJcbnZhciBQYXJ0aWNsZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBQYXJ0aWNsZSAoZW1pdHRlcilcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgRW1pdHRlciB0byB3aGljaCB0aGlzIFBhcnRpY2xlIGJlbG9uZ3MuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBBIFBhcnRpY2xlIGNhbiBvbmx5IGJlbG9uZyB0byBhIHNpbmdsZSBFbWl0dGVyIGFuZCBpcyBjcmVhdGVkLCB1cGRhdGVkIGFuZCBkZXN0cm95ZWQgdmlhIGl0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZSNlbWl0dGVyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZW1pdHRlciA9IGVtaXR0ZXI7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB0ZXh0dXJlIGZyYW1lIHVzZWQgdG8gcmVuZGVyIHRoaXMgUGFydGljbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlI2ZyYW1lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UZXh0dXJlcy5GcmFtZX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mcmFtZSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhpcyBQYXJ0aWNsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjeFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhpcyBQYXJ0aWNsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjeVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB4IHZlbG9jaXR5IG9mIHRoaXMgUGFydGljbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlI3ZlbG9jaXR5WFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudmVsb2NpdHlYID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHkgdmVsb2NpdHkgb2YgdGhpcyBQYXJ0aWNsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjdmVsb2NpdHlZXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52ZWxvY2l0eVkgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeCBhY2NlbGVyYXRpb24gb2YgdGhpcyBQYXJ0aWNsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjYWNjZWxlcmF0aW9uWFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWNjZWxlcmF0aW9uWCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB5IGFjY2VsZXJhdGlvbiBvZiB0aGlzIFBhcnRpY2xlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZSNhY2NlbGVyYXRpb25ZXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hY2NlbGVyYXRpb25ZID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG1heGltdW0gaG9yaXpvbnRhbCB2ZWxvY2l0eSB0aGlzIFBhcnRpY2xlIGNhbiB0cmF2ZWwgYXQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlI21heFZlbG9jaXR5WFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMTAwMDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1heFZlbG9jaXR5WCA9IDEwMDAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbWF4aW11bSB2ZXJ0aWNhbCB2ZWxvY2l0eSB0aGlzIFBhcnRpY2xlIGNhbiB0cmF2ZWwgYXQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlI21heFZlbG9jaXR5WVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMTAwMDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1heFZlbG9jaXR5WSA9IDEwMDAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYm91bmNpbmVzcywgb3IgcmVzdGl0dXRpb24sIG9mIHRoaXMgUGFydGljbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlI2JvdW5jZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYm91bmNlID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGhvcml6b250YWwgc2NhbGUgb2YgdGhpcyBQYXJ0aWNsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjc2NhbGVYXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY2FsZVggPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmVydGljYWwgc2NhbGUgb2YgdGhpcyBQYXJ0aWNsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjc2NhbGVZXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY2FsZVkgPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYWxwaGEgdmFsdWUgb2YgdGhpcyBQYXJ0aWNsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjYWxwaGFcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFscGhhID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGFuZ2xlIG9mIHRoaXMgUGFydGljbGUgaW4gZGVncmVlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjYW5nbGVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFuZ2xlID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGFuZ2xlIG9mIHRoaXMgUGFydGljbGUgaW4gcmFkaWFucy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjcm90YXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJvdGF0aW9uID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGlzIFBhcnRpY2xlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZSN0aW50XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHdlYmdsT25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGludCA9IDB4ZmZmZmZmO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbGlmZXNwYW4gb2YgdGhpcyBQYXJ0aWNsZSBpbiBtcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjbGlmZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMTAwMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubGlmZSA9IDEwMDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjdXJyZW50IGxpZmUgb2YgdGhpcyBQYXJ0aWNsZSBpbiBtcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjbGlmZUN1cnJlbnRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDEwMDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxpZmVDdXJyZW50ID0gMTAwMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRlbGF5IGFwcGxpZWQgdG8gdGhpcyBQYXJ0aWNsZSB1cG9uIGVtaXNzaW9uLCBpbiBtcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjZGVsYXlDdXJyZW50XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWxheUN1cnJlbnQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbm9ybWFsaXplZCBsaWZlc3BhbiBUIHZhbHVlLCB3aGVyZSAwIGlzIHRoZSBzdGFydCBhbmQgMSBpcyB0aGUgZW5kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZSNsaWZlVFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubGlmZVQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZGF0YSB1c2VkIGJ5IHRoZSBlYXNlIGVxdWF0aW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZSNkYXRhXHJcbiAgICAgICAgICogQHR5cGUge29iamVjdH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRhdGEgPSB7XHJcbiAgICAgICAgICAgIHRpbnQ6IHsgbWluOiAweGZmZmZmZiwgbWF4OiAweGZmZmZmZiwgY3VycmVudDogMHhmZmZmZmYgfSxcclxuICAgICAgICAgICAgYWxwaGE6IHsgbWluOiAxLCBtYXg6IDEgfSxcclxuICAgICAgICAgICAgcm90YXRlOiB7IG1pbjogMCwgbWF4OiAwIH0sXHJcbiAgICAgICAgICAgIHNjYWxlWDogeyBtaW46IDEsIG1heDogMSB9LFxyXG4gICAgICAgICAgICBzY2FsZVk6IHsgbWluOiAxLCBtYXg6IDEgfVxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIHRvIHNlZSBpZiB0aGlzIFBhcnRpY2xlIGlzIGFsaXZlIGFuZCB1cGRhdGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjaXNBbGl2ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoaXMgUGFydGljbGUgaXMgYWxpdmUgYW5kIHVwZGF0aW5nLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgaXNBbGl2ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMubGlmZUN1cnJlbnQgPiAwKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldHMgdGhlIHBvc2l0aW9uIG9mIHRoaXMgcGFydGljbGUgYmFjayB0byB6ZXJvLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZSNyZXNldFBvc2l0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKi9cclxuICAgIHJlc2V0UG9zaXRpb246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy54ID0gMDtcclxuICAgICAgICB0aGlzLnkgPSAwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YXJ0cyB0aGlzIFBhcnRpY2xlIGZyb20gdGhlIGdpdmVuIGNvb3JkaW5hdGVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZSNmaXJlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gbGF1bmNoIHRoaXMgUGFydGljbGUgZnJvbS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSB0byBsYXVuY2ggdGhpcyBQYXJ0aWNsZSBmcm9tLlxyXG4gICAgICovXHJcbiAgICBmaXJlOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICB2YXIgZW1pdHRlciA9IHRoaXMuZW1pdHRlcjtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZSA9IGVtaXR0ZXIuZ2V0RnJhbWUoKTtcclxuXHJcbiAgICAgICAgaWYgKGVtaXR0ZXIuZW1pdFpvbmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgVXBkYXRlcyBwYXJ0aWNsZS54IGFuZCBwYXJ0aWNsZS55IGR1cmluZyB0aGlzIGNhbGxcclxuICAgICAgICAgICAgZW1pdHRlci5lbWl0Wm9uZS5nZXRQb2ludCh0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoZW1pdHRlci5mb2xsb3cpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMueCArPSBlbWl0dGVyLmZvbGxvdy54ICsgZW1pdHRlci5mb2xsb3dPZmZzZXQueDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy54ICs9IGVtaXR0ZXIueC5vbkVtaXQodGhpcywgJ3gnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy54ICs9IHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGVtaXR0ZXIuZm9sbG93KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnkgKz0gZW1pdHRlci5mb2xsb3cueSArIGVtaXR0ZXIuZm9sbG93T2Zmc2V0Lnk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMueSArPSBlbWl0dGVyLnkub25FbWl0KHRoaXMsICd5Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueSArPSB5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5saWZlID0gZW1pdHRlci5saWZlc3Bhbi5vbkVtaXQodGhpcywgJ2xpZmVzcGFuJyk7XHJcbiAgICAgICAgdGhpcy5saWZlQ3VycmVudCA9IHRoaXMubGlmZTtcclxuICAgICAgICB0aGlzLmxpZmVUID0gMDtcclxuXHJcbiAgICAgICAgdmFyIHN4ID0gZW1pdHRlci5zcGVlZFgub25FbWl0KHRoaXMsICdzcGVlZFgnKTtcclxuICAgICAgICB2YXIgc3kgPSAoZW1pdHRlci5zcGVlZFkpID8gZW1pdHRlci5zcGVlZFkub25FbWl0KHRoaXMsICdzcGVlZFknKSA6IHN4O1xyXG5cclxuICAgICAgICBpZiAoZW1pdHRlci5yYWRpYWwpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgcmFkID0gRGVnVG9SYWQoZW1pdHRlci5hbmdsZS5vbkVtaXQodGhpcywgJ2FuZ2xlJykpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy52ZWxvY2l0eVggPSBNYXRoLmNvcyhyYWQpICogTWF0aC5hYnMoc3gpO1xyXG4gICAgICAgICAgICB0aGlzLnZlbG9jaXR5WSA9IE1hdGguc2luKHJhZCkgKiBNYXRoLmFicyhzeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGVtaXR0ZXIubW92ZVRvKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIG14ID0gZW1pdHRlci5tb3ZlVG9YLm9uRW1pdCh0aGlzLCAnbW92ZVRvWCcpO1xyXG4gICAgICAgICAgICB2YXIgbXkgPSAoZW1pdHRlci5tb3ZlVG9ZKSA/IGVtaXR0ZXIubW92ZVRvWS5vbkVtaXQodGhpcywgJ21vdmVUb1knKSA6IG14O1xyXG5cclxuICAgICAgICAgICAgdmFyIGFuZ2xlID0gTWF0aC5hdGFuMihteSAtIHRoaXMueSwgbXggLSB0aGlzLngpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNwZWVkID0gRGlzdGFuY2VCZXR3ZWVuKHRoaXMueCwgdGhpcy55LCBteCwgbXkpIC8gKHRoaXMubGlmZSAvIDEwMDApO1xyXG5cclxuICAgICAgICAgICAgLy8gIFdlIGtub3cgaG93IG1hbnkgcGl4ZWxzIHdlIG5lZWQgdG8gbW92ZSwgYnV0IGhvdyBmYXN0P1xyXG4gICAgICAgICAgICAvLyB2YXIgc3BlZWQgPSB0aGlzLmRpc3RhbmNlVG9YWShkaXNwbGF5T2JqZWN0LCB4LCB5KSAvIChtYXhUaW1lIC8gMTAwMCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZlbG9jaXR5WCA9IE1hdGguY29zKGFuZ2xlKSAqIHNwZWVkO1xyXG4gICAgICAgICAgICB0aGlzLnZlbG9jaXR5WSA9IE1hdGguc2luKGFuZ2xlKSAqIHNwZWVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnZlbG9jaXR5WCA9IHN4O1xyXG4gICAgICAgICAgICB0aGlzLnZlbG9jaXR5WSA9IHN5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVtaXR0ZXIuYWNjZWxlcmF0aW9uKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5hY2NlbGVyYXRpb25YID0gZW1pdHRlci5hY2NlbGVyYXRpb25YLm9uRW1pdCh0aGlzLCAnYWNjZWxlcmF0aW9uWCcpO1xyXG4gICAgICAgICAgICB0aGlzLmFjY2VsZXJhdGlvblkgPSBlbWl0dGVyLmFjY2VsZXJhdGlvblkub25FbWl0KHRoaXMsICdhY2NlbGVyYXRpb25ZJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm1heFZlbG9jaXR5WCA9IGVtaXR0ZXIubWF4VmVsb2NpdHlYLm9uRW1pdCh0aGlzLCAnbWF4VmVsb2NpdHlYJyk7XHJcbiAgICAgICAgdGhpcy5tYXhWZWxvY2l0eVkgPSBlbWl0dGVyLm1heFZlbG9jaXR5WS5vbkVtaXQodGhpcywgJ21heFZlbG9jaXR5WScpO1xyXG5cclxuICAgICAgICB0aGlzLmRlbGF5Q3VycmVudCA9IGVtaXR0ZXIuZGVsYXkub25FbWl0KHRoaXMsICdkZWxheScpO1xyXG5cclxuICAgICAgICB0aGlzLnNjYWxlWCA9IGVtaXR0ZXIuc2NhbGVYLm9uRW1pdCh0aGlzLCAnc2NhbGVYJyk7XHJcbiAgICAgICAgdGhpcy5zY2FsZVkgPSAoZW1pdHRlci5zY2FsZVkpID8gZW1pdHRlci5zY2FsZVkub25FbWl0KHRoaXMsICdzY2FsZVknKSA6IHRoaXMuc2NhbGVYO1xyXG5cclxuICAgICAgICB0aGlzLmFuZ2xlID0gZW1pdHRlci5yb3RhdGUub25FbWl0KHRoaXMsICdyb3RhdGUnKTtcclxuICAgICAgICB0aGlzLnJvdGF0aW9uID0gRGVnVG9SYWQodGhpcy5hbmdsZSk7XHJcblxyXG4gICAgICAgIHRoaXMuYm91bmNlID0gZW1pdHRlci5ib3VuY2Uub25FbWl0KHRoaXMsICdib3VuY2UnKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IGVtaXR0ZXIuYWxwaGEub25FbWl0KHRoaXMsICdhbHBoYScpO1xyXG5cclxuICAgICAgICB0aGlzLnRpbnQgPSBlbWl0dGVyLnRpbnQub25FbWl0KHRoaXMsICd0aW50Jyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gaW50ZXJuYWwgbWV0aG9kIHRoYXQgY2FsY3VsYXRlcyB0aGUgdmVsb2NpdHkgb2YgdGhlIFBhcnRpY2xlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZSNjb21wdXRlVmVsb2NpdHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IGVtaXR0ZXIgLSBUaGUgRW1pdHRlciB0aGF0IGlzIHVwZGF0aW5nIHRoaXMgUGFydGljbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGEgLSBUaGUgZGVsdGEgdGltZSBpbiBtcy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGVwIC0gVGhlIGRlbHRhIHZhbHVlIGRpdmlkZWQgYnkgMTAwMC5cclxuICAgICAqIEBwYXJhbSB7YXJyYXl9IHByb2Nlc3NvcnMgLSBQYXJ0aWNsZSBwcm9jZXNzb3JzIChncmF2aXR5IHdlbGxzKS5cclxuICAgICAqL1xyXG4gICAgY29tcHV0ZVZlbG9jaXR5OiBmdW5jdGlvbiAoZW1pdHRlciwgZGVsdGEsIHN0ZXAsIHByb2Nlc3NvcnMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHZ4ID0gdGhpcy52ZWxvY2l0eVg7XHJcbiAgICAgICAgdmFyIHZ5ID0gdGhpcy52ZWxvY2l0eVk7XHJcblxyXG4gICAgICAgIHZhciBheCA9IHRoaXMuYWNjZWxlcmF0aW9uWDtcclxuICAgICAgICB2YXIgYXkgPSB0aGlzLmFjY2VsZXJhdGlvblk7XHJcblxyXG4gICAgICAgIHZhciBteCA9IHRoaXMubWF4VmVsb2NpdHlYO1xyXG4gICAgICAgIHZhciBteSA9IHRoaXMubWF4VmVsb2NpdHlZO1xyXG5cclxuICAgICAgICB2eCArPSAoZW1pdHRlci5ncmF2aXR5WCAqIHN0ZXApO1xyXG4gICAgICAgIHZ5ICs9IChlbWl0dGVyLmdyYXZpdHlZICogc3RlcCk7XHJcblxyXG4gICAgICAgIGlmIChheClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZ4ICs9IChheCAqIHN0ZXApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGF5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdnkgKz0gKGF5ICogc3RlcCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodnggPiBteClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZ4ID0gbXg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHZ4IDwgLW14KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdnggPSAtbXg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodnkgPiBteSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZ5ID0gbXk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHZ5IDwgLW15KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdnkgPSAtbXk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnZlbG9jaXR5WCA9IHZ4O1xyXG4gICAgICAgIHRoaXMudmVsb2NpdHlZID0gdnk7XHJcblxyXG4gICAgICAgIC8vICBBcHBseSBhbnkgYWRkaXRpb25hbCBwcm9jZXNzb3JzXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9jZXNzb3JzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvY2Vzc29yc1tpXS51cGRhdGUodGhpcywgZGVsdGEsIHN0ZXApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhpcyBQYXJ0aWNsZSBpcyBzdGlsbCB3aXRoaW4gdGhlIGJvdW5kcyBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBFbWl0dGVyLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vdCwgYW5kIGRlcGVuZGluZyBvbiB0aGUgRW1pdHRlciBjb2xsaXNpb24gZmxhZ3MsIHRoZSBQYXJ0aWNsZSBtYXkgZWl0aGVyIHN0b3Agb3IgcmVib3VuZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGUjY2hlY2tCb3VuZHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IGVtaXR0ZXIgLSBUaGUgRW1pdHRlciB0byBjaGVjayB0aGUgYm91bmRzIGFnYWluc3QuXHJcbiAgICAgKi9cclxuICAgIGNoZWNrQm91bmRzOiBmdW5jdGlvbiAoZW1pdHRlcilcclxuICAgIHtcclxuICAgICAgICB2YXIgYm91bmRzID0gZW1pdHRlci5ib3VuZHM7XHJcbiAgICAgICAgdmFyIGJvdW5jZSA9IC10aGlzLmJvdW5jZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMueCA8IGJvdW5kcy54ICYmIGVtaXR0ZXIuY29sbGlkZUxlZnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnggPSBib3VuZHMueDtcclxuICAgICAgICAgICAgdGhpcy52ZWxvY2l0eVggKj0gYm91bmNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnggPiBib3VuZHMucmlnaHQgJiYgZW1pdHRlci5jb2xsaWRlUmlnaHQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnggPSBib3VuZHMucmlnaHQ7XHJcbiAgICAgICAgICAgIHRoaXMudmVsb2NpdHlYICo9IGJvdW5jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnkgPCBib3VuZHMueSAmJiBlbWl0dGVyLmNvbGxpZGVUb3ApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnkgPSBib3VuZHMueTtcclxuICAgICAgICAgICAgdGhpcy52ZWxvY2l0eVkgKj0gYm91bmNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnkgPiBib3VuZHMuYm90dG9tICYmIGVtaXR0ZXIuY29sbGlkZUJvdHRvbSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueSA9IGJvdW5kcy5ib3R0b207XHJcbiAgICAgICAgICAgIHRoaXMudmVsb2NpdHlZICo9IGJvdW5jZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1haW4gdXBkYXRlIG1ldGhvZCBmb3IgdGhpcyBQYXJ0aWNsZS5cclxuICAgICAqXHJcbiAgICAgKiBVcGRhdGVzIGl0cyBsaWZlIHZhbHVlcywgY29tcHV0ZXMgdGhlIHZlbG9jaXR5IGFuZCByZXBvc2l0aW9ucyB0aGUgUGFydGljbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlI3VwZGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUgaW4gbXMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RlcCAtIFRoZSBkZWx0YSB2YWx1ZSBkaXZpZGVkIGJ5IDEwMDAuXHJcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBwcm9jZXNzb3JzIC0gQW4gb3B0aW9uYWwgYXJyYXkgb2YgdXBkYXRlIHByb2Nlc3NvcnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBQYXJ0aWNsZSBoYXMgbm93IGV4cGlyZWQgYW5kIHNob3VsZCBiZSByZW1vdmVkLCBvdGhlcndpc2UgYGZhbHNlYCBpZiBzdGlsbCBhY3RpdmUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGRlbHRhLCBzdGVwLCBwcm9jZXNzb3JzKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmRlbGF5Q3VycmVudCA+IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmRlbGF5Q3VycmVudCAtPSBkZWx0YTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBlbWl0dGVyID0gdGhpcy5lbWl0dGVyO1xyXG5cclxuICAgICAgICAvLyAgSG93IGZhciBhbG9uZyBpbiBsaWZlIGlzIHRoaXMgcGFydGljbGU/ICh0ID0gMCB0byAxKVxyXG4gICAgICAgIHZhciB0ID0gMSAtICh0aGlzLmxpZmVDdXJyZW50IC8gdGhpcy5saWZlKTtcclxuXHJcbiAgICAgICAgdGhpcy5saWZlVCA9IHQ7XHJcblxyXG4gICAgICAgIHRoaXMuY29tcHV0ZVZlbG9jaXR5KGVtaXR0ZXIsIGRlbHRhLCBzdGVwLCBwcm9jZXNzb3JzKTtcclxuXHJcbiAgICAgICAgdGhpcy54ICs9IHRoaXMudmVsb2NpdHlYICogc3RlcDtcclxuICAgICAgICB0aGlzLnkgKz0gdGhpcy52ZWxvY2l0eVkgKiBzdGVwO1xyXG5cclxuICAgICAgICBpZiAoZW1pdHRlci5ib3VuZHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrQm91bmRzKGVtaXR0ZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVtaXR0ZXIuZGVhdGhab25lICYmIGVtaXR0ZXIuZGVhdGhab25lLndpbGxLaWxsKHRoaXMpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5saWZlQ3VycmVudCA9IDA7XHJcblxyXG4gICAgICAgICAgICAvLyAgTm8gbmVlZCB0byBnbyBhbnkgZnVydGhlciwgcGFydGljbGUgaGFzIGJlZW4ga2lsbGVkXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zY2FsZVggPSBlbWl0dGVyLnNjYWxlWC5vblVwZGF0ZSh0aGlzLCAnc2NhbGVYJywgdCwgdGhpcy5zY2FsZVgpO1xyXG5cclxuICAgICAgICBpZiAoZW1pdHRlci5zY2FsZVkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNjYWxlWSA9IGVtaXR0ZXIuc2NhbGVZLm9uVXBkYXRlKHRoaXMsICdzY2FsZVknLCB0LCB0aGlzLnNjYWxlWSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NhbGVZID0gdGhpcy5zY2FsZVg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmFuZ2xlID0gZW1pdHRlci5yb3RhdGUub25VcGRhdGUodGhpcywgJ3JvdGF0ZScsIHQsIHRoaXMuYW5nbGUpO1xyXG4gICAgICAgIHRoaXMucm90YXRpb24gPSBEZWdUb1JhZCh0aGlzLmFuZ2xlKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbHBoYSA9IGVtaXR0ZXIuYWxwaGEub25VcGRhdGUodGhpcywgJ2FscGhhJywgdCwgdGhpcy5hbHBoYSk7XHJcblxyXG4gICAgICAgIHRoaXMudGludCA9IGVtaXR0ZXIudGludC5vblVwZGF0ZSh0aGlzLCAndGludCcsIHQsIHRoaXMudGludCk7XHJcblxyXG4gICAgICAgIHRoaXMubGlmZUN1cnJlbnQgLT0gZGVsdGE7XHJcblxyXG4gICAgICAgIHJldHVybiAodGhpcy5saWZlQ3VycmVudCA8PSAwKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/Particle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/particles/ParticleEmitter.js":
/*!**************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/particles/ParticleEmitter.js ***!
\**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BlendModes = __webpack_require__(/*! ../../renderer/BlendModes */ \"./node_modules/phaser/src/renderer/BlendModes.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar DeathZone = __webpack_require__(/*! ./zones/DeathZone */ \"./node_modules/phaser/src/gameobjects/particles/zones/DeathZone.js\");\r\nvar EdgeZone = __webpack_require__(/*! ./zones/EdgeZone */ \"./node_modules/phaser/src/gameobjects/particles/zones/EdgeZone.js\");\r\nvar EmitterOp = __webpack_require__(/*! ./EmitterOp */ \"./node_modules/phaser/src/gameobjects/particles/EmitterOp.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar GetRandom = __webpack_require__(/*! ../../utils/array/GetRandom */ \"./node_modules/phaser/src/utils/array/GetRandom.js\");\r\nvar HasAny = __webpack_require__(/*! ../../utils/object/HasAny */ \"./node_modules/phaser/src/utils/object/HasAny.js\");\r\nvar HasValue = __webpack_require__(/*! ../../utils/object/HasValue */ \"./node_modules/phaser/src/utils/object/HasValue.js\");\r\nvar Particle = __webpack_require__(/*! ./Particle */ \"./node_modules/phaser/src/gameobjects/particles/Particle.js\");\r\nvar RandomZone = __webpack_require__(/*! ./zones/RandomZone */ \"./node_modules/phaser/src/gameobjects/particles/zones/RandomZone.js\");\r\nvar Rectangle = __webpack_require__(/*! ../../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar StableSort = __webpack_require__(/*! ../../utils/array/StableSort */ \"./node_modules/phaser/src/utils/array/StableSort.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\nvar Wrap = __webpack_require__(/*! ../../math/Wrap */ \"./node_modules/phaser/src/math/Wrap.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A particle emitter represents a single particle stream.\r\n * It controls a pool of {@link Phaser.GameObjects.Particles.Particle Particles} and is controlled by a {@link Phaser.GameObjects.Particles.ParticleEmitterManager Particle Emitter Manager}.\r\n *\r\n * @class ParticleEmitter\r\n * @memberof Phaser.GameObjects.Particles\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.GameObjects.Particles.ParticleEmitterManager} manager - The Emitter Manager this Emitter belongs to.\r\n * @param {Phaser.Types.GameObjects.Particles.ParticleEmitterConfig} config - Settings for this emitter.\r\n */\r\nvar ParticleEmitter = new Class({\r\n\r\n Mixins: [\r\n Components.BlendMode,\r\n Components.Mask,\r\n Components.ScrollFactor,\r\n Components.Visible\r\n ],\r\n\r\n initialize:\r\n\r\n function ParticleEmitter (manager, config)\r\n {\r\n /**\r\n * The Emitter Manager this Emitter belongs to.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#manager\r\n * @type {Phaser.GameObjects.Particles.ParticleEmitterManager}\r\n * @since 3.0.0\r\n */\r\n this.manager = manager;\r\n\r\n /**\r\n * The texture assigned to particles.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#texture\r\n * @type {Phaser.Textures.Texture}\r\n * @since 3.0.0\r\n */\r\n this.texture = manager.texture;\r\n\r\n /**\r\n * The texture frames assigned to particles.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#frames\r\n * @type {Phaser.Textures.Frame[]}\r\n * @since 3.0.0\r\n */\r\n this.frames = [ manager.defaultFrame ];\r\n\r\n /**\r\n * The default texture frame assigned to particles.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#defaultFrame\r\n * @type {Phaser.Textures.Frame}\r\n * @since 3.0.0\r\n */\r\n this.defaultFrame = manager.defaultFrame;\r\n\r\n /**\r\n * Names of simple configuration properties.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#configFastMap\r\n * @type {object}\r\n * @since 3.0.0\r\n */\r\n this.configFastMap = [\r\n 'active',\r\n 'blendMode',\r\n 'collideBottom',\r\n 'collideLeft',\r\n 'collideRight',\r\n 'collideTop',\r\n 'deathCallback',\r\n 'deathCallbackScope',\r\n 'emitCallback',\r\n 'emitCallbackScope',\r\n 'follow',\r\n 'frequency',\r\n 'gravityX',\r\n 'gravityY',\r\n 'maxParticles',\r\n 'name',\r\n 'on',\r\n 'particleBringToTop',\r\n 'particleClass',\r\n 'radial',\r\n 'timeScale',\r\n 'trackVisible',\r\n 'visible'\r\n ];\r\n\r\n /**\r\n * Names of complex configuration properties.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#configOpMap\r\n * @type {object}\r\n * @since 3.0.0\r\n */\r\n this.configOpMap = [\r\n 'accelerationX',\r\n 'accelerationY',\r\n 'angle',\r\n 'alpha',\r\n 'bounce',\r\n 'delay',\r\n 'lifespan',\r\n 'maxVelocityX',\r\n 'maxVelocityY',\r\n 'moveToX',\r\n 'moveToY',\r\n 'quantity',\r\n 'rotate',\r\n 'scaleX',\r\n 'scaleY',\r\n 'speedX',\r\n 'speedY',\r\n 'tint',\r\n 'x',\r\n 'y'\r\n ];\r\n\r\n /**\r\n * The name of this Particle Emitter.\r\n *\r\n * Empty by default and never populated by Phaser, this is left for developers to use.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#name\r\n * @type {string}\r\n * @default ''\r\n * @since 3.0.0\r\n */\r\n this.name = '';\r\n\r\n /**\r\n * The Particle Class which will be emitted by this Emitter.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#particleClass\r\n * @type {Phaser.GameObjects.Particles.Particle}\r\n * @default Phaser.GameObjects.Particles.Particle\r\n * @since 3.0.0\r\n */\r\n this.particleClass = Particle;\r\n\r\n /**\r\n * The x-coordinate of the particle origin (where particles will be emitted).\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#x\r\n * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n * @default 0\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#setPosition\r\n */\r\n this.x = new EmitterOp(config, 'x', 0, true);\r\n\r\n /**\r\n * The y-coordinate of the particle origin (where particles will be emitted).\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#y\r\n * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n * @default 0\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#setPosition\r\n */\r\n this.y = new EmitterOp(config, 'y', 0, true);\r\n\r\n /**\r\n * A radial emitter will emit particles in all directions between angle min and max,\r\n * using {@link Phaser.GameObjects.Particles.ParticleEmitter#speed} as the value. If set to false then this acts as a point Emitter.\r\n * A point emitter will emit particles only in the direction derived from the speedX and speedY values.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#radial\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#setRadial\r\n */\r\n this.radial = true;\r\n\r\n /**\r\n * Horizontal acceleration applied to emitted particles, in pixels per second squared.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#gravityX\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#setGravity\r\n */\r\n this.gravityX = 0;\r\n\r\n /**\r\n * Vertical acceleration applied to emitted particles, in pixels per second squared.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#gravityY\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#setGravity\r\n */\r\n this.gravityY = 0;\r\n\r\n /**\r\n * Whether accelerationX and accelerationY are non-zero. Set automatically during configuration.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#acceleration\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.acceleration = false;\r\n\r\n /**\r\n * Horizontal acceleration applied to emitted particles, in pixels per second squared.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#accelerationX\r\n * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.accelerationX = new EmitterOp(config, 'accelerationX', 0, true);\r\n\r\n /**\r\n * Vertical acceleration applied to emitted particles, in pixels per second squared.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#accelerationY\r\n * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.accelerationY = new EmitterOp(config, 'accelerationY', 0, true);\r\n\r\n /**\r\n * The maximum horizontal velocity of emitted particles, in pixels per second squared.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#maxVelocityX\r\n * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n * @default 10000\r\n * @since 3.0.0\r\n */\r\n this.maxVelocityX = new EmitterOp(config, 'maxVelocityX', 10000, true);\r\n\r\n /**\r\n * The maximum vertical velocity of emitted particles, in pixels per second squared.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#maxVelocityY\r\n * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n * @default 10000\r\n * @since 3.0.0\r\n */\r\n this.maxVelocityY = new EmitterOp(config, 'maxVelocityY', 10000, true);\r\n\r\n /**\r\n * The initial horizontal speed of emitted particles, in pixels per second.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#speedX\r\n * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n * @default 0\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#setSpeedX\r\n */\r\n this.speedX = new EmitterOp(config, 'speedX', 0, true);\r\n\r\n /**\r\n * The initial vertical speed of emitted particles, in pixels per second.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#speedY\r\n * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n * @default 0\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#setSpeedY\r\n */\r\n this.speedY = new EmitterOp(config, 'speedY', 0, true);\r\n\r\n /**\r\n * Whether moveToX and moveToY are nonzero. Set automatically during configuration.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#moveTo\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.moveTo = false;\r\n\r\n /**\r\n * The x-coordinate emitted particles move toward, when {@link Phaser.GameObjects.Particles.ParticleEmitter#moveTo} is true.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#moveToX\r\n * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.moveToX = new EmitterOp(config, 'moveToX', 0, true);\r\n\r\n /**\r\n * The y-coordinate emitted particles move toward, when {@link Phaser.GameObjects.Particles.ParticleEmitter#moveTo} is true.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#moveToY\r\n * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.moveToY = new EmitterOp(config, 'moveToY', 0, true);\r\n\r\n /**\r\n * Whether particles will rebound when they meet the emitter bounds.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#bounce\r\n * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.bounce = new EmitterOp(config, 'bounce', 0, true);\r\n\r\n /**\r\n * The horizontal scale of emitted particles.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#scaleX\r\n * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n * @default 1\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#setScale\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#setScaleX\r\n */\r\n this.scaleX = new EmitterOp(config, 'scaleX', 1);\r\n\r\n /**\r\n * The vertical scale of emitted particles.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#scaleY\r\n * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n * @default 1\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#setScale\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#setScaleY\r\n */\r\n this.scaleY = new EmitterOp(config, 'scaleY', 1);\r\n\r\n /**\r\n * Color tint applied to emitted particles. Any alpha component (0xAA000000) is ignored.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#tint\r\n * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n * @default 0xffffffff\r\n * @since 3.0.0\r\n */\r\n this.tint = new EmitterOp(config, 'tint', 0xffffffff);\r\n\r\n /**\r\n * The alpha (transparency) of emitted particles.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#alpha\r\n * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n * @default 1\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#setAlpha\r\n */\r\n this.alpha = new EmitterOp(config, 'alpha', 1);\r\n\r\n /**\r\n * The lifespan of emitted particles, in ms.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#lifespan\r\n * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n * @default 1000\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#setLifespan\r\n */\r\n this.lifespan = new EmitterOp(config, 'lifespan', 1000, true);\r\n\r\n /**\r\n * The angle of the initial velocity of emitted particles, in degrees.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#angle\r\n * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n * @default { min: 0, max: 360 }\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#setAngle\r\n */\r\n this.angle = new EmitterOp(config, 'angle', { min: 0, max: 360 }, true);\r\n\r\n /**\r\n * The rotation of emitted particles, in degrees.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#rotate\r\n * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.rotate = new EmitterOp(config, 'rotate', 0);\r\n\r\n /**\r\n * A function to call when a particle is emitted.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#emitCallback\r\n * @type {?Phaser.Types.GameObjects.Particles.ParticleEmitterCallback}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.emitCallback = null;\r\n\r\n /**\r\n * The calling context for {@link Phaser.GameObjects.Particles.ParticleEmitter#emitCallback}.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#emitCallbackScope\r\n * @type {?*}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.emitCallbackScope = null;\r\n\r\n /**\r\n * A function to call when a particle dies.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#deathCallback\r\n * @type {?Phaser.Types.GameObjects.Particles.ParticleDeathCallback}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.deathCallback = null;\r\n\r\n /**\r\n * The calling context for {@link Phaser.GameObjects.Particles.ParticleEmitter#deathCallback}.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#deathCallbackScope\r\n * @type {?*}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.deathCallbackScope = null;\r\n\r\n /**\r\n * Set to hard limit the amount of particle objects this emitter is allowed to create.\r\n * 0 means unlimited.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#maxParticles\r\n * @type {integer}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.maxParticles = 0;\r\n\r\n /**\r\n * How many particles are emitted each time particles are emitted (one explosion or one flow cycle).\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#quantity\r\n * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n * @default 1\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#setFrequency\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#setQuantity\r\n */\r\n this.quantity = new EmitterOp(config, 'quantity', 1, true);\r\n\r\n /**\r\n * How many ms to wait after emission before the particles start updating.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#delay\r\n * @type {Phaser.GameObjects.Particles.EmitterOp}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.delay = new EmitterOp(config, 'delay', 0, true);\r\n\r\n /**\r\n * For a flow emitter, the time interval (>= 0) between particle flow cycles in ms.\r\n * A value of 0 means there is one particle flow cycle for each logic update (the maximum flow frequency). This is the default setting.\r\n * For an exploding emitter, this value will be -1.\r\n * Calling {@link Phaser.GameObjects.Particles.ParticleEmitter#flow} also puts the emitter in flow mode (frequency >= 0).\r\n * Calling {@link Phaser.GameObjects.Particles.ParticleEmitter#explode} also puts the emitter in explode mode (frequency = -1).\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#frequency\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#setFrequency\r\n */\r\n this.frequency = 0;\r\n\r\n /**\r\n * Controls if the emitter is currently emitting a particle flow (when frequency >= 0).\r\n * Already alive particles will continue to update until they expire.\r\n * Controlled by {@link Phaser.GameObjects.Particles.ParticleEmitter#start} and {@link Phaser.GameObjects.Particles.ParticleEmitter#stop}.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#on\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.on = true;\r\n\r\n /**\r\n * Newly emitted particles are added to the top of the particle list, i.e. rendered above those already alive.\r\n * Set to false to send them to the back.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#particleBringToTop\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.particleBringToTop = true;\r\n\r\n /**\r\n * The time rate applied to active particles, affecting lifespan, movement, and tweens. Values larger than 1 are faster than normal.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#timeScale\r\n * @type {number}\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n this.timeScale = 1;\r\n\r\n /**\r\n * An object describing a shape to emit particles from.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#emitZone\r\n * @type {?Phaser.GameObjects.Particles.Zones.EdgeZone|Phaser.GameObjects.Particles.Zones.RandomZone}\r\n * @default null\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#setEmitZone\r\n */\r\n this.emitZone = null;\r\n\r\n /**\r\n * An object describing a shape that deactivates particles when they interact with it.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#deathZone\r\n * @type {?Phaser.GameObjects.Particles.Zones.DeathZone}\r\n * @default null\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#setDeathZone\r\n */\r\n this.deathZone = null;\r\n\r\n /**\r\n * A rectangular boundary constraining particle movement.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#bounds\r\n * @type {?Phaser.Geom.Rectangle}\r\n * @default null\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#setBounds\r\n */\r\n this.bounds = null;\r\n\r\n /**\r\n * Whether particles interact with the left edge of the emitter {@link Phaser.GameObjects.Particles.ParticleEmitter#bounds}.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#collideLeft\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.collideLeft = true;\r\n\r\n /**\r\n * Whether particles interact with the right edge of the emitter {@link Phaser.GameObjects.Particles.ParticleEmitter#bounds}.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#collideRight\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.collideRight = true;\r\n\r\n /**\r\n * Whether particles interact with the top edge of the emitter {@link Phaser.GameObjects.Particles.ParticleEmitter#bounds}.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#collideTop\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.collideTop = true;\r\n\r\n /**\r\n * Whether particles interact with the bottom edge of the emitter {@link Phaser.GameObjects.Particles.ParticleEmitter#bounds}.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#collideBottom\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.collideBottom = true;\r\n\r\n /**\r\n * Whether this emitter updates itself and its particles.\r\n *\r\n * Controlled by {@link Phaser.GameObjects.Particles.ParticleEmitter#pause}\r\n * and {@link Phaser.GameObjects.Particles.ParticleEmitter#resume}.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#active\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.active = true;\r\n\r\n /**\r\n * Set this to false to hide any active particles.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#visible\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#setVisible\r\n */\r\n this.visible = true;\r\n\r\n /**\r\n * The blend mode of this emitter's particles.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#blendMode\r\n * @type {integer}\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#setBlendMode\r\n */\r\n this.blendMode = BlendModes.NORMAL;\r\n\r\n /**\r\n * A Game Object whose position is used as the particle origin.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#follow\r\n * @type {?Phaser.GameObjects.GameObject}\r\n * @default null\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#startFollow\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#stopFollow\r\n */\r\n this.follow = null;\r\n\r\n /**\r\n * The offset of the particle origin from the {@link Phaser.GameObjects.Particles.ParticleEmitter#follow} target.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#followOffset\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#startFollow\r\n */\r\n this.followOffset = new Vector2();\r\n\r\n /**\r\n * Whether the emitter's {@link Phaser.GameObjects.Particles.ParticleEmitter#visible} state will track\r\n * the {@link Phaser.GameObjects.Particles.ParticleEmitter#follow} target's visibility state.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#trackVisible\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#startFollow\r\n */\r\n this.trackVisible = false;\r\n\r\n /**\r\n * The current texture frame, as an index of {@link Phaser.GameObjects.Particles.ParticleEmitter#frames}.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#currentFrame\r\n * @type {integer}\r\n * @default 0\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#setFrame\r\n */\r\n this.currentFrame = 0;\r\n\r\n /**\r\n * Whether texture {@link Phaser.GameObjects.Particles.ParticleEmitter#frames} are selected at random.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#randomFrame\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#setFrame\r\n */\r\n this.randomFrame = true;\r\n\r\n /**\r\n * The number of consecutive particles that receive a single texture frame (per frame cycle).\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#frameQuantity\r\n * @type {integer}\r\n * @default 1\r\n * @since 3.0.0\r\n * @see Phaser.GameObjects.Particles.ParticleEmitter#setFrame\r\n */\r\n this.frameQuantity = 1;\r\n\r\n /**\r\n * Inactive particles.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#dead\r\n * @type {Phaser.GameObjects.Particles.Particle[]}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this.dead = [];\r\n\r\n /**\r\n * Active particles\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#alive\r\n * @type {Phaser.GameObjects.Particles.Particle[]}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this.alive = [];\r\n\r\n /**\r\n * The time until the next flow cycle.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#_counter\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this._counter = 0;\r\n\r\n /**\r\n * Counts up to {@link Phaser.GameObjects.Particles.ParticleEmitter#frameQuantity}.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitter#_frameCounter\r\n * @type {integer}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this._frameCounter = 0;\r\n\r\n if (config)\r\n {\r\n this.fromJSON(config);\r\n }\r\n },\r\n\r\n /**\r\n * Merges configuration settings into the emitter's current settings.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#fromJSON\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.ParticleEmitterConfig} config - Settings for this emitter.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n fromJSON: function (config)\r\n {\r\n if (!config)\r\n {\r\n return this;\r\n }\r\n\r\n // Only update properties from their current state if they exist in the given config\r\n\r\n var i = 0;\r\n var key = '';\r\n\r\n for (i = 0; i < this.configFastMap.length; i++)\r\n {\r\n key = this.configFastMap[i];\r\n\r\n if (HasValue(config, key))\r\n {\r\n this[key] = GetFastValue(config, key);\r\n }\r\n }\r\n\r\n for (i = 0; i < this.configOpMap.length; i++)\r\n {\r\n key = this.configOpMap[i];\r\n\r\n if (HasValue(config, key))\r\n {\r\n this[key].loadConfig(config);\r\n }\r\n }\r\n\r\n this.acceleration = (this.accelerationX.propertyValue !== 0 || this.accelerationY.propertyValue !== 0);\r\n\r\n this.moveTo = (this.moveToX.propertyValue !== 0 || this.moveToY.propertyValue !== 0);\r\n\r\n // Special 'speed' override\r\n\r\n if (HasValue(config, 'speed'))\r\n {\r\n this.speedX.loadConfig(config, 'speed');\r\n this.speedY = null;\r\n }\r\n\r\n // If you specify speedX, speedY or moveTo then it changes the emitter from radial to a point emitter\r\n if (HasAny(config, [ 'speedX', 'speedY' ]) || this.moveTo)\r\n {\r\n this.radial = false;\r\n }\r\n\r\n // Special 'scale' override\r\n\r\n if (HasValue(config, 'scale'))\r\n {\r\n this.scaleX.loadConfig(config, 'scale');\r\n this.scaleY = null;\r\n }\r\n\r\n if (HasValue(config, 'callbackScope'))\r\n {\r\n var callbackScope = GetFastValue(config, 'callbackScope', null);\r\n\r\n this.emitCallbackScope = callbackScope;\r\n this.deathCallbackScope = callbackScope;\r\n }\r\n\r\n if (HasValue(config, 'emitZone'))\r\n {\r\n this.setEmitZone(config.emitZone);\r\n }\r\n\r\n if (HasValue(config, 'deathZone'))\r\n {\r\n this.setDeathZone(config.deathZone);\r\n }\r\n\r\n if (HasValue(config, 'bounds'))\r\n {\r\n this.setBounds(config.bounds);\r\n }\r\n\r\n if (HasValue(config, 'followOffset'))\r\n {\r\n this.followOffset.setFromObject(GetFastValue(config, 'followOffset', 0));\r\n }\r\n\r\n if (HasValue(config, 'frame'))\r\n {\r\n this.setFrame(config.frame);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Creates a description of this emitter suitable for JSON serialization.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#toJSON\r\n * @since 3.0.0\r\n *\r\n * @param {object} [output] - An object to copy output into.\r\n *\r\n * @return {object} - The output object.\r\n */\r\n toJSON: function (output)\r\n {\r\n if (output === undefined) { output = {}; }\r\n\r\n var i = 0;\r\n var key = '';\r\n\r\n for (i = 0; i < this.configFastMap.length; i++)\r\n {\r\n key = this.configFastMap[i];\r\n\r\n output[key] = this[key];\r\n }\r\n\r\n for (i = 0; i < this.configOpMap.length; i++)\r\n {\r\n key = this.configOpMap[i];\r\n\r\n if (this[key])\r\n {\r\n output[key] = this[key].toJSON();\r\n }\r\n }\r\n\r\n // special handlers\r\n if (!this.speedY)\r\n {\r\n delete output.speedX;\r\n output.speed = this.speedX.toJSON();\r\n }\r\n\r\n if (!this.scaleY)\r\n {\r\n delete output.scaleX;\r\n output.scale = this.scaleX.toJSON();\r\n }\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Continuously moves the particle origin to follow a Game Object's position.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#startFollow\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} target - The Game Object to follow.\r\n * @param {number} [offsetX=0] - Horizontal offset of the particle origin from the Game Object.\r\n * @param {number} [offsetY=0] - Vertical offset of the particle origin from the Game Object.\r\n * @param {boolean} [trackVisible=false] - Whether the emitter's visible state will track the target's visible state.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n startFollow: function (target, offsetX, offsetY, trackVisible)\r\n {\r\n if (offsetX === undefined) { offsetX = 0; }\r\n if (offsetY === undefined) { offsetY = 0; }\r\n if (trackVisible === undefined) { trackVisible = false; }\r\n\r\n this.follow = target;\r\n this.followOffset.set(offsetX, offsetY);\r\n this.trackVisible = trackVisible;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Stops following a Game Object.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#stopFollow\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n stopFollow: function ()\r\n {\r\n this.follow = null;\r\n this.followOffset.set(0, 0);\r\n this.trackVisible = false;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Chooses a texture frame from {@link Phaser.GameObjects.Particles.ParticleEmitter#frames}.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#getFrame\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Textures.Frame} The texture frame.\r\n */\r\n getFrame: function ()\r\n {\r\n if (this.frames.length === 1)\r\n {\r\n return this.defaultFrame;\r\n }\r\n else if (this.randomFrame)\r\n {\r\n return GetRandom(this.frames);\r\n }\r\n else\r\n {\r\n var frame = this.frames[this.currentFrame];\r\n\r\n this._frameCounter++;\r\n\r\n if (this._frameCounter === this.frameQuantity)\r\n {\r\n this._frameCounter = 0;\r\n this.currentFrame = Wrap(this.currentFrame + 1, 0, this._frameLength);\r\n }\r\n\r\n return frame;\r\n }\r\n },\r\n\r\n // frame: 0\r\n // frame: 'red'\r\n // frame: [ 0, 1, 2, 3 ]\r\n // frame: [ 'red', 'green', 'blue', 'pink', 'white' ]\r\n // frame: { frames: [ 'red', 'green', 'blue', 'pink', 'white' ], [cycle: bool], [quantity: int] }\r\n\r\n /**\r\n * Sets a pattern for assigning texture frames to emitted particles.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#setFrame\r\n * @since 3.0.0\r\n *\r\n * @param {(array|string|integer|Phaser.Types.GameObjects.Particles.ParticleEmitterFrameConfig)} frames - One or more texture frames, or a configuration object.\r\n * @param {boolean} [pickRandom=true] - Whether frames should be assigned at random from `frames`.\r\n * @param {integer} [quantity=1] - The number of consecutive particles that will receive each frame.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n setFrame: function (frames, pickRandom, quantity)\r\n {\r\n if (pickRandom === undefined) { pickRandom = true; }\r\n if (quantity === undefined) { quantity = 1; }\r\n\r\n this.randomFrame = pickRandom;\r\n this.frameQuantity = quantity;\r\n this.currentFrame = 0;\r\n this._frameCounter = 0;\r\n\r\n var t = typeof (frames);\r\n\r\n if (Array.isArray(frames) || t === 'string' || t === 'number')\r\n {\r\n this.manager.setEmitterFrames(frames, this);\r\n }\r\n else if (t === 'object')\r\n {\r\n var frameConfig = frames;\r\n\r\n frames = GetFastValue(frameConfig, 'frames', null);\r\n\r\n if (frames)\r\n {\r\n this.manager.setEmitterFrames(frames, this);\r\n }\r\n\r\n var isCycle = GetFastValue(frameConfig, 'cycle', false);\r\n\r\n this.randomFrame = (isCycle) ? false : true;\r\n\r\n this.frameQuantity = GetFastValue(frameConfig, 'quantity', quantity);\r\n }\r\n\r\n this._frameLength = this.frames.length;\r\n\r\n if (this._frameLength === 1)\r\n {\r\n this.frameQuantity = 1;\r\n this.randomFrame = false;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Turns {@link Phaser.GameObjects.Particles.ParticleEmitter#radial} particle movement on or off.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#setRadial\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} [value=true] - Radial mode (true) or point mode (true).\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n setRadial: function (value)\r\n {\r\n if (value === undefined) { value = true; }\r\n\r\n this.radial = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the position of the emitter's particle origin.\r\n * New particles will be emitted here.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#setPosition\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType} x - The x-coordinate of the particle origin.\r\n * @param {Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType} y - The y-coordinate of the particle origin.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n setPosition: function (x, y)\r\n {\r\n this.x.onChange(x);\r\n this.y.onChange(y);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets or modifies a rectangular boundary constraining the particles.\r\n *\r\n * To remove the boundary, set {@link Phaser.GameObjects.Particles.ParticleEmitter#bounds} to null.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#setBounds\r\n * @since 3.0.0\r\n *\r\n * @param {(number|Phaser.Types.GameObjects.Particles.ParticleEmitterBounds|Phaser.Types.GameObjects.Particles.ParticleEmitterBoundsAlt)} x - The x-coordinate of the left edge of the boundary, or an object representing a rectangle.\r\n * @param {number} y - The y-coordinate of the top edge of the boundary.\r\n * @param {number} width - The width of the boundary.\r\n * @param {number} height - The height of the boundary.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n setBounds: function (x, y, width, height)\r\n {\r\n if (typeof x === 'object')\r\n {\r\n var obj = x;\r\n\r\n x = obj.x;\r\n y = obj.y;\r\n width = (HasValue(obj, 'w')) ? obj.w : obj.width;\r\n height = (HasValue(obj, 'h')) ? obj.h : obj.height;\r\n }\r\n\r\n if (this.bounds)\r\n {\r\n this.bounds.setTo(x, y, width, height);\r\n }\r\n else\r\n {\r\n this.bounds = new Rectangle(x, y, width, height);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the initial horizontal speed of emitted particles.\r\n * Changes the emitter to point mode.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#setSpeedX\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType} value - The speed, in pixels per second.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n setSpeedX: function (value)\r\n {\r\n this.speedX.onChange(value);\r\n\r\n // If you specify speedX and Y then it changes the emitter from radial to a point emitter\r\n this.radial = false;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the initial vertical speed of emitted particles.\r\n * Changes the emitter to point mode.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#setSpeedY\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType} value - The speed, in pixels per second.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n setSpeedY: function (value)\r\n {\r\n if (this.speedY)\r\n {\r\n this.speedY.onChange(value);\r\n\r\n // If you specify speedX and Y then it changes the emitter from radial to a point emitter\r\n this.radial = false;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the initial radial speed of emitted particles.\r\n * Changes the emitter to radial mode.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#setSpeed\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType} value - The speed, in pixels per second.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n setSpeed: function (value)\r\n {\r\n this.speedX.onChange(value);\r\n this.speedY = null;\r\n\r\n // If you specify speedX and Y then it changes the emitter from radial to a point emitter\r\n this.radial = true;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the horizontal scale of emitted particles.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#setScaleX\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType|Phaser.Types.GameObjects.Particles.EmitterOpOnUpdateType)} value - The scale, relative to 1.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n setScaleX: function (value)\r\n {\r\n this.scaleX.onChange(value);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the vertical scale of emitted particles.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#setScaleY\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType|Phaser.Types.GameObjects.Particles.EmitterOpOnUpdateType)} value - The scale, relative to 1.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n setScaleY: function (value)\r\n {\r\n this.scaleY.onChange(value);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the scale of emitted particles.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#setScale\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType|Phaser.Types.GameObjects.Particles.EmitterOpOnUpdateType)} value - The scale, relative to 1.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n setScale: function (value)\r\n {\r\n this.scaleX.onChange(value);\r\n this.scaleY = null;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the horizontal gravity applied to emitted particles.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#setGravityX\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - Acceleration due to gravity, in pixels per second squared.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n setGravityX: function (value)\r\n {\r\n this.gravityX = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the vertical gravity applied to emitted particles.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#setGravityY\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - Acceleration due to gravity, in pixels per second squared.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n setGravityY: function (value)\r\n {\r\n this.gravityY = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the gravity applied to emitted particles.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#setGravity\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - Horizontal acceleration due to gravity, in pixels per second squared.\r\n * @param {number} y - Vertical acceleration due to gravity, in pixels per second squared.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n setGravity: function (x, y)\r\n {\r\n this.gravityX = x;\r\n this.gravityY = y;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the opacity of emitted particles.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#setAlpha\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType|Phaser.Types.GameObjects.Particles.EmitterOpOnUpdateType)} value - A value between 0 (transparent) and 1 (opaque).\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n setAlpha: function (value)\r\n {\r\n this.alpha.onChange(value);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the angle of a {@link Phaser.GameObjects.Particles.ParticleEmitter#radial} particle stream.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#setEmitterAngle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType} value - The angle of the initial velocity of emitted particles.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n setEmitterAngle: function (value)\r\n {\r\n this.angle.onChange(value);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the angle of a {@link Phaser.GameObjects.Particles.ParticleEmitter#radial} particle stream.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#setAngle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType} value - The angle of the initial velocity of emitted particles.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n setAngle: function (value)\r\n {\r\n this.angle.onChange(value);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the lifespan of newly emitted particles.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#setLifespan\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType} value - The particle lifespan, in ms.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n setLifespan: function (value)\r\n {\r\n this.lifespan.onChange(value);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the number of particles released at each flow cycle or explosion.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#setQuantity\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType} quantity - The number of particles to release at each flow cycle or explosion.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n setQuantity: function (quantity)\r\n {\r\n this.quantity.onChange(quantity);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the emitter's {@link Phaser.GameObjects.Particles.ParticleEmitter#frequency}\r\n * and {@link Phaser.GameObjects.Particles.ParticleEmitter#quantity}.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#setFrequency\r\n * @since 3.0.0\r\n *\r\n * @param {number} frequency - The time interval (>= 0) of each flow cycle, in ms; or -1 to put the emitter in explosion mode.\r\n * @param {Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType} [quantity] - The number of particles to release at each flow cycle or explosion.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n setFrequency: function (frequency, quantity)\r\n {\r\n this.frequency = frequency;\r\n\r\n this._counter = 0;\r\n\r\n if (quantity)\r\n {\r\n this.quantity.onChange(quantity);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets or removes the {@link Phaser.GameObjects.Particles.ParticleEmitter#emitZone}.\r\n *\r\n * An {@link Phaser.Types.GameObjects.Particles.ParticleEmitterEdgeZoneConfig EdgeZone} places particles on its edges. Its {@link Phaser.Types.GameObjects.Particles.EdgeZoneSource source} can be a Curve, Path, Circle, Ellipse, Line, Polygon, Rectangle, or Triangle; or any object with a suitable {@link Phaser.Types.GameObjects.Particles.EdgeZoneSourceCallback getPoints} method.\r\n *\r\n * A {@link Phaser.Types.GameObjects.Particles.ParticleEmitterRandomZoneConfig RandomZone} places randomly within its interior. Its {@link RandomZoneSource source} can be a Circle, Ellipse, Line, Polygon, Rectangle, or Triangle; or any object with a suitable {@link Phaser.Types.GameObjects.Particles.RandomZoneSourceCallback getRandomPoint} method.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#setEmitZone\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.ParticleEmitterEdgeZoneConfig|Phaser.Types.GameObjects.Particles.ParticleEmitterRandomZoneConfig} [zoneConfig] - An object describing the zone, or `undefined` to remove any current emit zone.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n setEmitZone: function (zoneConfig)\r\n {\r\n if (zoneConfig === undefined)\r\n {\r\n this.emitZone = null;\r\n }\r\n else\r\n {\r\n // Where source = Geom like Circle, or a Path or Curve\r\n // emitZone: { type: 'random', source: X }\r\n // emitZone: { type: 'edge', source: X, quantity: 32, [stepRate=0], [yoyo=false], [seamless=true] }\r\n\r\n var type = GetFastValue(zoneConfig, 'type', 'random');\r\n var source = GetFastValue(zoneConfig, 'source', null);\r\n\r\n switch (type)\r\n {\r\n case 'random':\r\n\r\n this.emitZone = new RandomZone(source);\r\n\r\n break;\r\n\r\n case 'edge':\r\n\r\n var quantity = GetFastValue(zoneConfig, 'quantity', 1);\r\n var stepRate = GetFastValue(zoneConfig, 'stepRate', 0);\r\n var yoyo = GetFastValue(zoneConfig, 'yoyo', false);\r\n var seamless = GetFastValue(zoneConfig, 'seamless', true);\r\n\r\n this.emitZone = new EdgeZone(source, quantity, stepRate, yoyo, seamless);\r\n\r\n break;\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets or removes the {@link Phaser.GameObjects.Particles.ParticleEmitter#deathZone}.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#setDeathZone\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.ParticleEmitterDeathZoneConfig} [zoneConfig] - An object describing the zone, or `undefined` to remove any current death zone.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n setDeathZone: function (zoneConfig)\r\n {\r\n if (zoneConfig === undefined)\r\n {\r\n this.deathZone = null;\r\n }\r\n else\r\n {\r\n // Where source = Geom like Circle or Rect that supports a 'contains' function\r\n // deathZone: { type: 'onEnter', source: X }\r\n // deathZone: { type: 'onLeave', source: X }\r\n\r\n var type = GetFastValue(zoneConfig, 'type', 'onEnter');\r\n var source = GetFastValue(zoneConfig, 'source', null);\r\n\r\n if (source && typeof source.contains === 'function')\r\n {\r\n var killOnEnter = (type === 'onEnter') ? true : false;\r\n\r\n this.deathZone = new DeathZone(source, killOnEnter);\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Creates inactive particles and adds them to this emitter's pool.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#reserve\r\n * @since 3.0.0\r\n *\r\n * @param {integer} particleCount - The number of particles to create.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n reserve: function (particleCount)\r\n {\r\n var dead = this.dead;\r\n\r\n for (var i = 0; i < particleCount; i++)\r\n {\r\n dead.push(new this.particleClass(this));\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Gets the number of active (in-use) particles in this emitter.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#getAliveParticleCount\r\n * @since 3.0.0\r\n *\r\n * @return {integer} The number of particles with `active=true`.\r\n */\r\n getAliveParticleCount: function ()\r\n {\r\n return this.alive.length;\r\n },\r\n\r\n /**\r\n * Gets the number of inactive (available) particles in this emitter.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#getDeadParticleCount\r\n * @since 3.0.0\r\n *\r\n * @return {integer} The number of particles with `active=false`.\r\n */\r\n getDeadParticleCount: function ()\r\n {\r\n return this.dead.length;\r\n },\r\n\r\n /**\r\n * Gets the total number of particles in this emitter.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#getParticleCount\r\n * @since 3.0.0\r\n *\r\n * @return {integer} The number of particles, including both alive and dead.\r\n */\r\n getParticleCount: function ()\r\n {\r\n return this.getAliveParticleCount() + this.getDeadParticleCount();\r\n },\r\n\r\n /**\r\n * Whether this emitter is at its limit (if set).\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#atLimit\r\n * @since 3.0.0\r\n *\r\n * @return {boolean} Returns `true` if this Emitter is at its limit, or `false` if no limit, or below the `maxParticles` level.\r\n */\r\n atLimit: function ()\r\n {\r\n return (this.maxParticles > 0 && this.getParticleCount() === this.maxParticles);\r\n },\r\n\r\n /**\r\n * Sets a function to call for each newly emitted particle.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#onParticleEmit\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.ParticleEmitterCallback} callback - The function.\r\n * @param {*} [context] - The calling context.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n onParticleEmit: function (callback, context)\r\n {\r\n if (callback === undefined)\r\n {\r\n // Clear any previously set callback\r\n this.emitCallback = null;\r\n this.emitCallbackScope = null;\r\n }\r\n else if (typeof callback === 'function')\r\n {\r\n this.emitCallback = callback;\r\n\r\n if (context)\r\n {\r\n this.emitCallbackScope = context;\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets a function to call for each particle death.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#onParticleDeath\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.ParticleDeathCallback} callback - The function.\r\n * @param {*} [context] - The function's calling context.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n onParticleDeath: function (callback, context)\r\n {\r\n if (callback === undefined)\r\n {\r\n // Clear any previously set callback\r\n this.deathCallback = null;\r\n this.deathCallbackScope = null;\r\n }\r\n else if (typeof callback === 'function')\r\n {\r\n this.deathCallback = callback;\r\n\r\n if (context)\r\n {\r\n this.deathCallbackScope = context;\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Deactivates every particle in this emitter.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#killAll\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n killAll: function ()\r\n {\r\n var dead = this.dead;\r\n var alive = this.alive;\r\n\r\n while (alive.length > 0)\r\n {\r\n dead.push(alive.pop());\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Calls a function for each active particle in this emitter.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#forEachAlive\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.ParticleEmitterCallback} callback - The function.\r\n * @param {*} context - The function's calling context.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n forEachAlive: function (callback, context)\r\n {\r\n var alive = this.alive;\r\n var length = alive.length;\r\n\r\n for (var index = 0; index < length; ++index)\r\n {\r\n // Sends the Particle and the Emitter\r\n callback.call(context, alive[index], this);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Calls a function for each inactive particle in this emitter.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#forEachDead\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.ParticleEmitterCallback} callback - The function.\r\n * @param {*} context - The function's calling context.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n forEachDead: function (callback, context)\r\n {\r\n var dead = this.dead;\r\n var length = dead.length;\r\n\r\n for (var index = 0; index < length; ++index)\r\n {\r\n // Sends the Particle and the Emitter\r\n callback.call(context, dead[index], this);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Turns {@link Phaser.GameObjects.Particles.ParticleEmitter#on} the emitter and resets the flow counter.\r\n *\r\n * If this emitter is in flow mode (frequency >= 0; the default), the particle flow will start (or restart).\r\n *\r\n * If this emitter is in explode mode (frequency = -1), nothing will happen.\r\n * Use {@link Phaser.GameObjects.Particles.ParticleEmitter#explode} or {@link Phaser.GameObjects.Particles.ParticleEmitter#flow} instead.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#start\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n start: function ()\r\n {\r\n this.on = true;\r\n\r\n this._counter = 0;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Turns {@link Phaser.GameObjects.Particles.ParticleEmitter#on off} the emitter.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#stop\r\n * @since 3.11.0\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n stop: function ()\r\n {\r\n this.on = false;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * {@link Phaser.GameObjects.Particles.ParticleEmitter#active Deactivates} the emitter.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#pause\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n pause: function ()\r\n {\r\n this.active = false;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * {@link Phaser.GameObjects.Particles.ParticleEmitter#active Activates} the emitter.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#resume\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n resume: function ()\r\n {\r\n this.active = true;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sorts active particles with {@link Phaser.GameObjects.Particles.ParticleEmitter#depthSortCallback}.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#depthSort\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n depthSort: function ()\r\n {\r\n StableSort.inplace(this.alive, this.depthSortCallback);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Puts the emitter in flow mode (frequency >= 0) and starts (or restarts) a particle flow.\r\n *\r\n * To resume a flow at the current frequency and quantity, use {@link Phaser.GameObjects.Particles.ParticleEmitter#start} instead.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#flow\r\n * @since 3.0.0\r\n *\r\n * @param {number} frequency - The time interval (>= 0) of each flow cycle, in ms.\r\n * @param {Phaser.Types.GameObjects.Particles.EmitterOpOnEmitType} [count=1] - The number of particles to emit at each flow cycle.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} This Particle Emitter.\r\n */\r\n flow: function (frequency, count)\r\n {\r\n if (count === undefined) { count = 1; }\r\n\r\n this.frequency = frequency;\r\n\r\n this.quantity.onChange(count);\r\n\r\n return this.start();\r\n },\r\n\r\n /**\r\n * Puts the emitter in explode mode (frequency = -1), stopping any current particle flow, and emits several particles all at once.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#explode\r\n * @since 3.0.0\r\n *\r\n * @param {integer} count - The amount of Particles to emit.\r\n * @param {number} x - The x coordinate to emit the Particles from.\r\n * @param {number} y - The y coordinate to emit the Particles from.\r\n *\r\n * @return {Phaser.GameObjects.Particles.Particle} The most recently emitted Particle.\r\n */\r\n explode: function (count, x, y)\r\n {\r\n this.frequency = -1;\r\n\r\n return this.emitParticle(count, x, y);\r\n },\r\n\r\n /**\r\n * Emits particles at a given position (or the emitter's current position).\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#emitParticleAt\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x=this.x] - The x coordinate to emit the Particles from.\r\n * @param {number} [y=this.x] - The y coordinate to emit the Particles from.\r\n * @param {integer} [count=this.quantity] - The number of Particles to emit.\r\n *\r\n * @return {Phaser.GameObjects.Particles.Particle} The most recently emitted Particle.\r\n */\r\n emitParticleAt: function (x, y, count)\r\n {\r\n return this.emitParticle(count, x, y);\r\n },\r\n\r\n /**\r\n * Emits particles at a given position (or the emitter's current position).\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#emitParticle\r\n * @since 3.0.0\r\n *\r\n * @param {integer} [count=this.quantity] - The number of Particles to emit.\r\n * @param {number} [x=this.x] - The x coordinate to emit the Particles from.\r\n * @param {number} [y=this.x] - The y coordinate to emit the Particles from.\r\n *\r\n * @return {Phaser.GameObjects.Particles.Particle} The most recently emitted Particle.\r\n *\r\n * @see Phaser.GameObjects.Particles.Particle#fire\r\n */\r\n emitParticle: function (count, x, y)\r\n {\r\n if (this.atLimit())\r\n {\r\n return;\r\n }\r\n\r\n if (count === undefined)\r\n {\r\n count = this.quantity.onEmit();\r\n }\r\n\r\n var dead = this.dead;\r\n\r\n for (var i = 0; i < count; i++)\r\n {\r\n var particle = dead.pop();\r\n\r\n if (!particle)\r\n {\r\n particle = new this.particleClass(this);\r\n }\r\n\r\n particle.fire(x, y);\r\n\r\n if (this.particleBringToTop)\r\n {\r\n this.alive.push(particle);\r\n }\r\n else\r\n {\r\n this.alive.unshift(particle);\r\n }\r\n\r\n if (this.emitCallback)\r\n {\r\n this.emitCallback.call(this.emitCallbackScope, particle, this);\r\n }\r\n\r\n if (this.atLimit())\r\n {\r\n break;\r\n }\r\n }\r\n\r\n return particle;\r\n },\r\n\r\n /**\r\n * Updates this emitter and its particles.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#preUpdate\r\n * @since 3.0.0\r\n *\r\n * @param {integer} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n */\r\n preUpdate: function (time, delta)\r\n {\r\n // Scale the delta\r\n delta *= this.timeScale;\r\n\r\n var step = (delta / 1000);\r\n\r\n if (this.trackVisible)\r\n {\r\n this.visible = this.follow.visible;\r\n }\r\n\r\n // Any particle processors?\r\n var processors = this.manager.getProcessors();\r\n\r\n var particles = this.alive;\r\n var dead = this.dead;\r\n\r\n var i = 0;\r\n var rip = [];\r\n var length = particles.length;\r\n\r\n for (i = 0; i < length; i++)\r\n {\r\n var particle = particles[i];\r\n\r\n // update returns `true` if the particle is now dead (lifeCurrent <= 0)\r\n if (particle.update(delta, step, processors))\r\n {\r\n rip.push({ index: i, particle: particle });\r\n }\r\n }\r\n\r\n // Move dead particles to the dead array\r\n length = rip.length;\r\n\r\n if (length > 0)\r\n {\r\n var deathCallback = this.deathCallback;\r\n var deathCallbackScope = this.deathCallbackScope;\r\n\r\n for (i = length - 1; i >= 0; i--)\r\n {\r\n var entry = rip[i];\r\n\r\n // Remove from particles array\r\n particles.splice(entry.index, 1);\r\n\r\n // Add to dead array\r\n dead.push(entry.particle);\r\n\r\n // Callback\r\n if (deathCallback)\r\n {\r\n deathCallback.call(deathCallbackScope, entry.particle);\r\n }\r\n\r\n entry.particle.resetPosition();\r\n }\r\n }\r\n\r\n if (!this.on)\r\n {\r\n return;\r\n }\r\n\r\n if (this.frequency === 0)\r\n {\r\n this.emitParticle();\r\n }\r\n else if (this.frequency > 0)\r\n {\r\n this._counter -= delta;\r\n\r\n if (this._counter <= 0)\r\n {\r\n this.emitParticle();\r\n\r\n // counter = frequency - remained from previous delta\r\n this._counter = (this.frequency - Math.abs(this._counter));\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Calculates the difference of two particles, for sorting them by depth.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitter#depthSortCallback\r\n * @since 3.0.0\r\n *\r\n * @param {object} a - The first particle.\r\n * @param {object} b - The second particle.\r\n *\r\n * @return {integer} The difference of a and b's y coordinates.\r\n */\r\n depthSortCallback: function (a, b)\r\n {\r\n return a.y - b.y;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = ParticleEmitter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvUGFydGljbGVFbWl0dGVyLmpzPzFmOTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLG1GQUEyQjtBQUNwRCxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLGdGQUFlO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLDZGQUFtQjtBQUMzQyxlQUFlLG1CQUFPLENBQUMsMkZBQWtCO0FBQ3pDLGdCQUFnQixtQkFBTyxDQUFDLGlGQUFhO0FBQ3JDLG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCxnQkFBZ0IsbUJBQU8sQ0FBQyx1RkFBNkI7QUFDckQsYUFBYSxtQkFBTyxDQUFDLG1GQUEyQjtBQUNoRCxlQUFlLG1CQUFPLENBQUMsdUZBQTZCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQywrRUFBWTtBQUNuQyxpQkFBaUIsbUJBQU8sQ0FBQywrRkFBb0I7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsNkZBQWdDO0FBQ3hELGlCQUFpQixtQkFBTyxDQUFDLHlGQUE4QjtBQUN2RCxjQUFjLG1CQUFPLENBQUMscUVBQW9CO0FBQzFDLFdBQVcsbUJBQU8sQ0FBQywrREFBaUI7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixzREFBc0QseUJBQXlCLG1GQUFtRjtBQUM1TDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvREFBb0Q7QUFDL0QsV0FBVyx5REFBeUQ7QUFDcEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQix5REFBeUQ7QUFDM0U7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlFQUFpRSwwREFBMEQ7QUFDM0g7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlFQUFpRSwwREFBMEQ7QUFDM0g7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQixxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EscURBQXFELG1CQUFtQjs7QUFFeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0MsZ0VBQWdFO0FBQ3BHO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0MsaUVBQWlFO0FBQ3JHO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isd0RBQXdEO0FBQzVFLG9CQUFvQiwyREFBMkQ7QUFDL0U7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQix5REFBeUQsTUFBTSx3REFBd0Q7QUFDako7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUVBQXlFLDBEQUEwRDtBQUNuSTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEVBQTBFLDBEQUEwRDtBQUNwSTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0VBQXdFLDBEQUEwRDtBQUNsSTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkVBQTJFLDBEQUEwRDtBQUNySTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQixnQkFBZ0IsMERBQTBEO0FBQzFFO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1REFBdUQsMERBQTBEO0FBQ2pIO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQ0FBa0MsMkRBQTJEO0FBQzdGLGdCQUFnQiwwREFBMEQ7QUFDMUU7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0RBQXNELDBEQUEwRDtBQUNoSDtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEIsMERBQTBEO0FBQ3RGO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5QkFBeUIsaUVBQWlFO0FBQzFGO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx5REFBeUQ7QUFDeEU7QUFDQSxnQkFBZ0IsNkNBQTZDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLCtCQUErQjtBQUNsRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLDZCQUE2QjtBQUNoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLGFBQWE7O0FBRWhEO0FBQ0E7O0FBRUEsbUJBQW1CLCtCQUErQjtBQUNsRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLDZCQUE2QjtBQUNoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsYUFBYTtBQUNqRCxvQ0FBb0MsYUFBYTtBQUNqRCx5Q0FBeUMsc0JBQXNCOztBQUUvRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLHFDQUFxQywwREFBMEQ7QUFDL0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxRkFBcUY7QUFDcEcsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLG1CQUFtQjtBQUMxRCxxQ0FBcUMsY0FBYzs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLGNBQWMsMERBQTBEO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsY0FBYzs7QUFFaEQ7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx1REFBdUQ7QUFDdEUsZUFBZSx1REFBdUQ7QUFDdEU7QUFDQSxnQkFBZ0IsNkNBQTZDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQywwREFBMEQ7QUFDOUY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhIQUE4SDtBQUM3SSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHVEQUF1RDtBQUN0RTtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHVEQUF1RDtBQUN0RTtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHVEQUF1RDtBQUN0RTtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGtIQUFrSDtBQUNqSTtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0hBQWtIO0FBQ2pJO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxrSEFBa0g7QUFDakk7QUFDQSxnQkFBZ0IsNkNBQTZDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsNkNBQTZDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0hBQWtIO0FBQ2pJO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw0QkFBNEIsMERBQTBEO0FBQ3RGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx1REFBdUQ7QUFDdEU7QUFDQSxnQkFBZ0IsNkNBQTZDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDRCQUE0QiwwREFBMEQ7QUFDdEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHVEQUF1RDtBQUN0RTtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsdURBQXVEO0FBQ3RFO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx1REFBdUQ7QUFDdEU7QUFDQSxnQkFBZ0IsNkNBQTZDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDJCQUEyQjtBQUMzQixZQUFZLDREQUE0RDtBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTyxnRUFBZ0U7QUFDdEYsZUFBZSx1REFBdUQ7QUFDdEU7QUFDQSxnQkFBZ0IsNkNBQTZDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDRCQUE0Qiw0REFBNEQ7QUFDeEY7QUFDQSxXQUFXLGdGQUFnRixxQ0FBcUMsK0RBQStELDhFQUE4RSxnQ0FBZ0MsMEVBQTBFO0FBQ3ZYO0FBQ0EsVUFBVSxvRkFBb0YsMkNBQTJDLDhCQUE4QixpRUFBaUUsZ0NBQWdDLGlGQUFpRjtBQUN6VjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0lBQW9JO0FBQ25KO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQiwyQkFBMkI7O0FBRTNCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw0QkFBNEIsNkRBQTZEO0FBQ3pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxrRUFBa0U7QUFDakY7QUFDQSxnQkFBZ0IsNkNBQTZDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCLDRCQUE0Qjs7QUFFNUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsNkNBQTZDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwyREFBMkQ7QUFDMUUsZUFBZSxFQUFFO0FBQ2pCO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx5REFBeUQ7QUFDeEUsZUFBZSxFQUFFO0FBQ2pCO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDJEQUEyRDtBQUMxRSxlQUFlLEVBQUU7QUFDakI7QUFDQSxnQkFBZ0IsNkNBQTZDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMkJBQTJCLGdCQUFnQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwyREFBMkQ7QUFDMUUsZUFBZSxFQUFFO0FBQ2pCO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJCQUEyQixnQkFBZ0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0EsY0FBYyxzREFBc0Q7QUFDcEU7QUFDQSx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBLFlBQVksMkRBQTJELEtBQUssd0RBQXdEO0FBQ3BJO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxjQUFjLDBEQUEwRDtBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0EsUUFBUSxzRUFBc0U7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNkNBQTZDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLFFBQVEsb0VBQW9FO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxvQ0FBb0MscUVBQXFFO0FBQ3pHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDZDQUE2QztBQUM3RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0Esb0VBQW9FLHlEQUF5RDtBQUM3SDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLHVEQUF1RDtBQUN0RTtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLFdBQVc7O0FBRTdDOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixzQ0FBc0M7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHNDQUFzQztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isc0NBQXNDO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx1QkFBdUIsV0FBVztBQUNsQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLFlBQVk7QUFDL0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsK0JBQStCO0FBQ3pEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQ0FBZ0MsUUFBUTtBQUN4QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvUGFydGljbGVFbWl0dGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQmxlbmRNb2RlcyA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVyL0JsZW5kTW9kZXMnKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENvbXBvbmVudHMgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzJyk7XHJcbnZhciBEZWF0aFpvbmUgPSByZXF1aXJlKCcuL3pvbmVzL0RlYXRoWm9uZScpO1xyXG52YXIgRWRnZVpvbmUgPSByZXF1aXJlKCcuL3pvbmVzL0VkZ2Vab25lJyk7XHJcbnZhciBFbWl0dGVyT3AgPSByZXF1aXJlKCcuL0VtaXR0ZXJPcCcpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgR2V0UmFuZG9tID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvYXJyYXkvR2V0UmFuZG9tJyk7XHJcbnZhciBIYXNBbnkgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvSGFzQW55Jyk7XHJcbnZhciBIYXNWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9IYXNWYWx1ZScpO1xyXG52YXIgUGFydGljbGUgPSByZXF1aXJlKCcuL1BhcnRpY2xlJyk7XHJcbnZhciBSYW5kb21ab25lID0gcmVxdWlyZSgnLi96b25lcy9SYW5kb21ab25lJyk7XHJcbnZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuLi8uLi9nZW9tL3JlY3RhbmdsZS9SZWN0YW5nbGUnKTtcclxudmFyIFN0YWJsZVNvcnQgPSByZXF1aXJlKCcuLi8uLi91dGlscy9hcnJheS9TdGFibGVTb3J0Jyk7XHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9WZWN0b3IyJyk7XHJcbnZhciBXcmFwID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9XcmFwJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIHBhcnRpY2xlIGVtaXR0ZXIgcmVwcmVzZW50cyBhIHNpbmdsZSBwYXJ0aWNsZSBzdHJlYW0uXHJcbiAqIEl0IGNvbnRyb2xzIGEgcG9vbCBvZiB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZSBQYXJ0aWNsZXN9IGFuZCBpcyBjb250cm9sbGVkIGJ5IGEge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlciBQYXJ0aWNsZSBFbWl0dGVyIE1hbmFnZXJ9LlxyXG4gKlxyXG4gKiBAY2xhc3MgUGFydGljbGVFbWl0dGVyXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQmxlbmRNb2RlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk1hc2tcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2Nyb2xsRmFjdG9yXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlck1hbmFnZXJ9IG1hbmFnZXIgLSBUaGUgRW1pdHRlciBNYW5hZ2VyIHRoaXMgRW1pdHRlciBiZWxvbmdzIHRvLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyQ29uZmlnfSBjb25maWcgLSBTZXR0aW5ncyBmb3IgdGhpcyBlbWl0dGVyLlxyXG4gKi9cclxudmFyIFBhcnRpY2xlRW1pdHRlciA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgTWl4aW5zOiBbXHJcbiAgICAgICAgQ29tcG9uZW50cy5CbGVuZE1vZGUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5NYXNrLFxyXG4gICAgICAgIENvbXBvbmVudHMuU2Nyb2xsRmFjdG9yLFxyXG4gICAgICAgIENvbXBvbmVudHMuVmlzaWJsZVxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFBhcnRpY2xlRW1pdHRlciAobWFuYWdlciwgY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBFbWl0dGVyIE1hbmFnZXIgdGhpcyBFbWl0dGVyIGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNtYW5hZ2VyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGV4dHVyZSBhc3NpZ25lZCB0byBwYXJ0aWNsZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciN0ZXh0dXJlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGV4dHVyZSA9IG1hbmFnZXIudGV4dHVyZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRleHR1cmUgZnJhbWVzIGFzc2lnbmVkIHRvIHBhcnRpY2xlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2ZyYW1lc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVGV4dHVyZXMuRnJhbWVbXX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZyYW1lcyA9IFsgbWFuYWdlci5kZWZhdWx0RnJhbWUgXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHQgdGV4dHVyZSBmcmFtZSBhc3NpZ25lZCB0byBwYXJ0aWNsZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNkZWZhdWx0RnJhbWVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlRleHR1cmVzLkZyYW1lfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEZyYW1lID0gbWFuYWdlci5kZWZhdWx0RnJhbWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE5hbWVzIG9mIHNpbXBsZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNjb25maWdGYXN0TWFwXHJcbiAgICAgICAgICogQHR5cGUge29iamVjdH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbmZpZ0Zhc3RNYXAgPSBbXHJcbiAgICAgICAgICAgICdhY3RpdmUnLFxyXG4gICAgICAgICAgICAnYmxlbmRNb2RlJyxcclxuICAgICAgICAgICAgJ2NvbGxpZGVCb3R0b20nLFxyXG4gICAgICAgICAgICAnY29sbGlkZUxlZnQnLFxyXG4gICAgICAgICAgICAnY29sbGlkZVJpZ2h0JyxcclxuICAgICAgICAgICAgJ2NvbGxpZGVUb3AnLFxyXG4gICAgICAgICAgICAnZGVhdGhDYWxsYmFjaycsXHJcbiAgICAgICAgICAgICdkZWF0aENhbGxiYWNrU2NvcGUnLFxyXG4gICAgICAgICAgICAnZW1pdENhbGxiYWNrJyxcclxuICAgICAgICAgICAgJ2VtaXRDYWxsYmFja1Njb3BlJyxcclxuICAgICAgICAgICAgJ2ZvbGxvdycsXHJcbiAgICAgICAgICAgICdmcmVxdWVuY3knLFxyXG4gICAgICAgICAgICAnZ3Jhdml0eVgnLFxyXG4gICAgICAgICAgICAnZ3Jhdml0eVknLFxyXG4gICAgICAgICAgICAnbWF4UGFydGljbGVzJyxcclxuICAgICAgICAgICAgJ25hbWUnLFxyXG4gICAgICAgICAgICAnb24nLFxyXG4gICAgICAgICAgICAncGFydGljbGVCcmluZ1RvVG9wJyxcclxuICAgICAgICAgICAgJ3BhcnRpY2xlQ2xhc3MnLFxyXG4gICAgICAgICAgICAncmFkaWFsJyxcclxuICAgICAgICAgICAgJ3RpbWVTY2FsZScsXHJcbiAgICAgICAgICAgICd0cmFja1Zpc2libGUnLFxyXG4gICAgICAgICAgICAndmlzaWJsZSdcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBOYW1lcyBvZiBjb21wbGV4IGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2NvbmZpZ09wTWFwXHJcbiAgICAgICAgICogQHR5cGUge29iamVjdH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbmZpZ09wTWFwID0gW1xyXG4gICAgICAgICAgICAnYWNjZWxlcmF0aW9uWCcsXHJcbiAgICAgICAgICAgICdhY2NlbGVyYXRpb25ZJyxcclxuICAgICAgICAgICAgJ2FuZ2xlJyxcclxuICAgICAgICAgICAgJ2FscGhhJyxcclxuICAgICAgICAgICAgJ2JvdW5jZScsXHJcbiAgICAgICAgICAgICdkZWxheScsXHJcbiAgICAgICAgICAgICdsaWZlc3BhbicsXHJcbiAgICAgICAgICAgICdtYXhWZWxvY2l0eVgnLFxyXG4gICAgICAgICAgICAnbWF4VmVsb2NpdHlZJyxcclxuICAgICAgICAgICAgJ21vdmVUb1gnLFxyXG4gICAgICAgICAgICAnbW92ZVRvWScsXHJcbiAgICAgICAgICAgICdxdWFudGl0eScsXHJcbiAgICAgICAgICAgICdyb3RhdGUnLFxyXG4gICAgICAgICAgICAnc2NhbGVYJyxcclxuICAgICAgICAgICAgJ3NjYWxlWScsXHJcbiAgICAgICAgICAgICdzcGVlZFgnLFxyXG4gICAgICAgICAgICAnc3BlZWRZJyxcclxuICAgICAgICAgICAgJ3RpbnQnLFxyXG4gICAgICAgICAgICAneCcsXHJcbiAgICAgICAgICAgICd5J1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBuYW1lIG9mIHRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEVtcHR5IGJ5IGRlZmF1bHQgYW5kIG5ldmVyIHBvcHVsYXRlZCBieSBQaGFzZXIsIHRoaXMgaXMgbGVmdCBmb3IgZGV2ZWxvcGVycyB0byB1c2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNuYW1lXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAZGVmYXVsdCAnJ1xyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubmFtZSA9ICcnO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgUGFydGljbGUgQ2xhc3Mgd2hpY2ggd2lsbCBiZSBlbWl0dGVkIGJ5IHRoaXMgRW1pdHRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3BhcnRpY2xlQ2xhc3NcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wYXJ0aWNsZUNsYXNzID0gUGFydGljbGU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIHBhcnRpY2xlIG9yaWdpbiAod2hlcmUgcGFydGljbGVzIHdpbGwgYmUgZW1pdHRlZCkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciN4XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldFBvc2l0aW9uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy54ID0gbmV3IEVtaXR0ZXJPcChjb25maWcsICd4JywgMCwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIHBhcnRpY2xlIG9yaWdpbiAod2hlcmUgcGFydGljbGVzIHdpbGwgYmUgZW1pdHRlZCkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciN5XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldFBvc2l0aW9uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy55ID0gbmV3IEVtaXR0ZXJPcChjb25maWcsICd5JywgMCwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmFkaWFsIGVtaXR0ZXIgd2lsbCBlbWl0IHBhcnRpY2xlcyBpbiBhbGwgZGlyZWN0aW9ucyBiZXR3ZWVuIGFuZ2xlIG1pbiBhbmQgbWF4LFxyXG4gICAgICAgICAqIHVzaW5nIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzcGVlZH0gYXMgdGhlIHZhbHVlLiBJZiBzZXQgdG8gZmFsc2UgdGhlbiB0aGlzIGFjdHMgYXMgYSBwb2ludCBFbWl0dGVyLlxyXG4gICAgICAgICAqIEEgcG9pbnQgZW1pdHRlciB3aWxsIGVtaXQgcGFydGljbGVzIG9ubHkgaW4gdGhlIGRpcmVjdGlvbiBkZXJpdmVkIGZyb20gdGhlIHNwZWVkWCBhbmQgc3BlZWRZIHZhbHVlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3JhZGlhbFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldFJhZGlhbFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmFkaWFsID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSG9yaXpvbnRhbCBhY2NlbGVyYXRpb24gYXBwbGllZCB0byBlbWl0dGVkIHBhcnRpY2xlcywgaW4gcGl4ZWxzIHBlciBzZWNvbmQgc3F1YXJlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2dyYXZpdHlYXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRHcmF2aXR5XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5ncmF2aXR5WCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFZlcnRpY2FsIGFjY2VsZXJhdGlvbiBhcHBsaWVkIHRvIGVtaXR0ZWQgcGFydGljbGVzLCBpbiBwaXhlbHMgcGVyIHNlY29uZCBzcXVhcmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZ3Jhdml0eVlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldEdyYXZpdHlcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdyYXZpdHlZID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciBhY2NlbGVyYXRpb25YIGFuZCBhY2NlbGVyYXRpb25ZIGFyZSBub24temVyby4gU2V0IGF1dG9tYXRpY2FsbHkgZHVyaW5nIGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNhY2NlbGVyYXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWNjZWxlcmF0aW9uID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEhvcml6b250YWwgYWNjZWxlcmF0aW9uIGFwcGxpZWQgdG8gZW1pdHRlZCBwYXJ0aWNsZXMsIGluIHBpeGVscyBwZXIgc2Vjb25kIHNxdWFyZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNhY2NlbGVyYXRpb25YXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFjY2VsZXJhdGlvblggPSBuZXcgRW1pdHRlck9wKGNvbmZpZywgJ2FjY2VsZXJhdGlvblgnLCAwLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVmVydGljYWwgYWNjZWxlcmF0aW9uIGFwcGxpZWQgdG8gZW1pdHRlZCBwYXJ0aWNsZXMsIGluIHBpeGVscyBwZXIgc2Vjb25kIHNxdWFyZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNhY2NlbGVyYXRpb25ZXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFjY2VsZXJhdGlvblkgPSBuZXcgRW1pdHRlck9wKGNvbmZpZywgJ2FjY2VsZXJhdGlvblknLCAwLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG1heGltdW0gaG9yaXpvbnRhbCB2ZWxvY2l0eSBvZiBlbWl0dGVkIHBhcnRpY2xlcywgaW4gcGl4ZWxzIHBlciBzZWNvbmQgc3F1YXJlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI21heFZlbG9jaXR5WFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcH1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxMDAwMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWF4VmVsb2NpdHlYID0gbmV3IEVtaXR0ZXJPcChjb25maWcsICdtYXhWZWxvY2l0eVgnLCAxMDAwMCwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBtYXhpbXVtIHZlcnRpY2FsIHZlbG9jaXR5IG9mIGVtaXR0ZWQgcGFydGljbGVzLCBpbiBwaXhlbHMgcGVyIHNlY29uZCBzcXVhcmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjbWF4VmVsb2NpdHlZXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDEwMDAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYXhWZWxvY2l0eVkgPSBuZXcgRW1pdHRlck9wKGNvbmZpZywgJ21heFZlbG9jaXR5WScsIDEwMDAwLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGluaXRpYWwgaG9yaXpvbnRhbCBzcGVlZCBvZiBlbWl0dGVkIHBhcnRpY2xlcywgaW4gcGl4ZWxzIHBlciBzZWNvbmQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzcGVlZFhcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3B9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqIEBzZWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0U3BlZWRYXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zcGVlZFggPSBuZXcgRW1pdHRlck9wKGNvbmZpZywgJ3NwZWVkWCcsIDAsIHRydWUpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaW5pdGlhbCB2ZXJ0aWNhbCBzcGVlZCBvZiBlbWl0dGVkIHBhcnRpY2xlcywgaW4gcGl4ZWxzIHBlciBzZWNvbmQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzcGVlZFlcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3B9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqIEBzZWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0U3BlZWRZXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zcGVlZFkgPSBuZXcgRW1pdHRlck9wKGNvbmZpZywgJ3NwZWVkWScsIDAsIHRydWUpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIG1vdmVUb1ggYW5kIG1vdmVUb1kgYXJlIG5vbnplcm8uIFNldCBhdXRvbWF0aWNhbGx5IGR1cmluZyBjb25maWd1cmF0aW9uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjbW92ZVRvXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1vdmVUbyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeC1jb29yZGluYXRlIGVtaXR0ZWQgcGFydGljbGVzIG1vdmUgdG93YXJkLCB3aGVuIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNtb3ZlVG99IGlzIHRydWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNtb3ZlVG9YXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1vdmVUb1ggPSBuZXcgRW1pdHRlck9wKGNvbmZpZywgJ21vdmVUb1gnLCAwLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHktY29vcmRpbmF0ZSBlbWl0dGVkIHBhcnRpY2xlcyBtb3ZlIHRvd2FyZCwgd2hlbiB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjbW92ZVRvfSBpcyB0cnVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjbW92ZVRvWVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcH1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tb3ZlVG9ZID0gbmV3IEVtaXR0ZXJPcChjb25maWcsICdtb3ZlVG9ZJywgMCwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgcGFydGljbGVzIHdpbGwgcmVib3VuZCB3aGVuIHRoZXkgbWVldCB0aGUgZW1pdHRlciBib3VuZHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNib3VuY2VcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3B9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYm91bmNlID0gbmV3IEVtaXR0ZXJPcChjb25maWcsICdib3VuY2UnLCAwLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGhvcml6b250YWwgc2NhbGUgb2YgZW1pdHRlZCBwYXJ0aWNsZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzY2FsZVhcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3B9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqIEBzZWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0U2NhbGVcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldFNjYWxlWFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NhbGVYID0gbmV3IEVtaXR0ZXJPcChjb25maWcsICdzY2FsZVgnLCAxKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHZlcnRpY2FsIHNjYWxlIG9mIGVtaXR0ZWQgcGFydGljbGVzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2NhbGVZXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldFNjYWxlXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRTY2FsZVlcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjYWxlWSA9IG5ldyBFbWl0dGVyT3AoY29uZmlnLCAnc2NhbGVZJywgMSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENvbG9yIHRpbnQgYXBwbGllZCB0byBlbWl0dGVkIHBhcnRpY2xlcy4gQW55IGFscGhhIGNvbXBvbmVudCAoMHhBQTAwMDAwMCkgaXMgaWdub3JlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3RpbnRcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3B9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMHhmZmZmZmZmZlxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGludCA9IG5ldyBFbWl0dGVyT3AoY29uZmlnLCAndGludCcsIDB4ZmZmZmZmZmYpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYWxwaGEgKHRyYW5zcGFyZW5jeSkgb2YgZW1pdHRlZCBwYXJ0aWNsZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNhbHBoYVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcH1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRBbHBoYVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWxwaGEgPSBuZXcgRW1pdHRlck9wKGNvbmZpZywgJ2FscGhhJywgMSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBsaWZlc3BhbiBvZiBlbWl0dGVkIHBhcnRpY2xlcywgaW4gbXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNsaWZlc3BhblxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcH1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxMDAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRMaWZlc3BhblxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubGlmZXNwYW4gPSBuZXcgRW1pdHRlck9wKGNvbmZpZywgJ2xpZmVzcGFuJywgMTAwMCwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBhbmdsZSBvZiB0aGUgaW5pdGlhbCB2ZWxvY2l0eSBvZiBlbWl0dGVkIHBhcnRpY2xlcywgaW4gZGVncmVlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2FuZ2xlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHsgbWluOiAwLCBtYXg6IDM2MCB9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRBbmdsZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYW5nbGUgPSBuZXcgRW1pdHRlck9wKGNvbmZpZywgJ2FuZ2xlJywgeyBtaW46IDAsIG1heDogMzYwIH0sIHRydWUpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcm90YXRpb24gb2YgZW1pdHRlZCBwYXJ0aWNsZXMsIGluIGRlZ3JlZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNyb3RhdGVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3B9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucm90YXRlID0gbmV3IEVtaXR0ZXJPcChjb25maWcsICdyb3RhdGUnLCAwKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gYSBwYXJ0aWNsZSBpcyBlbWl0dGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZW1pdENhbGxiYWNrXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlckNhbGxiYWNrfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmVtaXRDYWxsYmFjayA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjYWxsaW5nIGNvbnRleHQgZm9yIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNlbWl0Q2FsbGJhY2t9LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZW1pdENhbGxiYWNrU2NvcGVcclxuICAgICAgICAgKiBAdHlwZSB7Pyp9XHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZW1pdENhbGxiYWNrU2NvcGUgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIHBhcnRpY2xlIGRpZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNkZWF0aENhbGxiYWNrXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRGVhdGhDYWxsYmFja31cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWF0aENhbGxiYWNrID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNhbGxpbmcgY29udGV4dCBmb3Ige0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2RlYXRoQ2FsbGJhY2t9LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZGVhdGhDYWxsYmFja1Njb3BlXHJcbiAgICAgICAgICogQHR5cGUgez8qfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlYXRoQ2FsbGJhY2tTY29wZSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNldCB0byBoYXJkIGxpbWl0IHRoZSBhbW91bnQgb2YgcGFydGljbGUgb2JqZWN0cyB0aGlzIGVtaXR0ZXIgaXMgYWxsb3dlZCB0byBjcmVhdGUuXHJcbiAgICAgICAgICogMCBtZWFucyB1bmxpbWl0ZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNtYXhQYXJ0aWNsZXNcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYXhQYXJ0aWNsZXMgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBIb3cgbWFueSBwYXJ0aWNsZXMgYXJlIGVtaXR0ZWQgZWFjaCB0aW1lIHBhcnRpY2xlcyBhcmUgZW1pdHRlZCAob25lIGV4cGxvc2lvbiBvciBvbmUgZmxvdyBjeWNsZSkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNxdWFudGl0eVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcH1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRGcmVxdWVuY3lcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldFF1YW50aXR5XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5xdWFudGl0eSA9IG5ldyBFbWl0dGVyT3AoY29uZmlnLCAncXVhbnRpdHknLCAxLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSG93IG1hbnkgbXMgdG8gd2FpdCBhZnRlciBlbWlzc2lvbiBiZWZvcmUgdGhlIHBhcnRpY2xlcyBzdGFydCB1cGRhdGluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2RlbGF5XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlbGF5ID0gbmV3IEVtaXR0ZXJPcChjb25maWcsICdkZWxheScsIDAsIHRydWUpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBGb3IgYSBmbG93IGVtaXR0ZXIsIHRoZSB0aW1lIGludGVydmFsICg+PSAwKSBiZXR3ZWVuIHBhcnRpY2xlIGZsb3cgY3ljbGVzIGluIG1zLlxyXG4gICAgICAgICAqIEEgdmFsdWUgb2YgMCBtZWFucyB0aGVyZSBpcyBvbmUgcGFydGljbGUgZmxvdyBjeWNsZSBmb3IgZWFjaCBsb2dpYyB1cGRhdGUgKHRoZSBtYXhpbXVtIGZsb3cgZnJlcXVlbmN5KS4gVGhpcyBpcyB0aGUgZGVmYXVsdCBzZXR0aW5nLlxyXG4gICAgICAgICAqIEZvciBhbiBleHBsb2RpbmcgZW1pdHRlciwgdGhpcyB2YWx1ZSB3aWxsIGJlIC0xLlxyXG4gICAgICAgICAqIENhbGxpbmcge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2Zsb3d9IGFsc28gcHV0cyB0aGUgZW1pdHRlciBpbiBmbG93IG1vZGUgKGZyZXF1ZW5jeSA+PSAwKS5cclxuICAgICAgICAgKiBDYWxsaW5nIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNleHBsb2RlfSBhbHNvIHB1dHMgdGhlIGVtaXR0ZXIgaW4gZXhwbG9kZSBtb2RlIChmcmVxdWVuY3kgPSAtMSkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNmcmVxdWVuY3lcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldEZyZXF1ZW5jeVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ29udHJvbHMgaWYgdGhlIGVtaXR0ZXIgaXMgY3VycmVudGx5IGVtaXR0aW5nIGEgcGFydGljbGUgZmxvdyAod2hlbiBmcmVxdWVuY3kgPj0gMCkuXHJcbiAgICAgICAgICogQWxyZWFkeSBhbGl2ZSBwYXJ0aWNsZXMgd2lsbCBjb250aW51ZSB0byB1cGRhdGUgdW50aWwgdGhleSBleHBpcmUuXHJcbiAgICAgICAgICogQ29udHJvbGxlZCBieSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc3RhcnR9IGFuZCB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc3RvcH0uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNvblxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9uID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTmV3bHkgZW1pdHRlZCBwYXJ0aWNsZXMgYXJlIGFkZGVkIHRvIHRoZSB0b3Agb2YgdGhlIHBhcnRpY2xlIGxpc3QsIGkuZS4gcmVuZGVyZWQgYWJvdmUgdGhvc2UgYWxyZWFkeSBhbGl2ZS5cclxuICAgICAgICAgKiBTZXQgdG8gZmFsc2UgdG8gc2VuZCB0aGVtIHRvIHRoZSBiYWNrLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjcGFydGljbGVCcmluZ1RvVG9wXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGFydGljbGVCcmluZ1RvVG9wID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRpbWUgcmF0ZSBhcHBsaWVkIHRvIGFjdGl2ZSBwYXJ0aWNsZXMsIGFmZmVjdGluZyBsaWZlc3BhbiwgbW92ZW1lbnQsIGFuZCB0d2VlbnMuIFZhbHVlcyBsYXJnZXIgdGhhbiAxIGFyZSBmYXN0ZXIgdGhhbiBub3JtYWwuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciN0aW1lU2NhbGVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRpbWVTY2FsZSA9IDE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIG9iamVjdCBkZXNjcmliaW5nIGEgc2hhcGUgdG8gZW1pdCBwYXJ0aWNsZXMgZnJvbS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2VtaXRab25lXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlpvbmVzLkVkZ2Vab25lfFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuWm9uZXMuUmFuZG9tWm9uZX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRFbWl0Wm9uZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZW1pdFpvbmUgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBvYmplY3QgZGVzY3JpYmluZyBhIHNoYXBlIHRoYXQgZGVhY3RpdmF0ZXMgcGFydGljbGVzIHdoZW4gdGhleSBpbnRlcmFjdCB3aXRoIGl0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZGVhdGhab25lXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlpvbmVzLkRlYXRoWm9uZX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXREZWF0aFpvbmVcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlYXRoWm9uZSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVjdGFuZ3VsYXIgYm91bmRhcnkgY29uc3RyYWluaW5nIHBhcnRpY2xlIG1vdmVtZW50LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjYm91bmRzXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuR2VvbS5SZWN0YW5nbGV9XHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqIEBzZWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0Qm91bmRzXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5ib3VuZHMgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHBhcnRpY2xlcyBpbnRlcmFjdCB3aXRoIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIGVtaXR0ZXIge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2JvdW5kc30uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNjb2xsaWRlTGVmdFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbGxpZGVMZWZ0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciBwYXJ0aWNsZXMgaW50ZXJhY3Qgd2l0aCB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgZW1pdHRlciB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjYm91bmRzfS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2NvbGxpZGVSaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbGxpZGVSaWdodCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgcGFydGljbGVzIGludGVyYWN0IHdpdGggdGhlIHRvcCBlZGdlIG9mIHRoZSBlbWl0dGVyIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNib3VuZHN9LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjY29sbGlkZVRvcFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbGxpZGVUb3AgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHBhcnRpY2xlcyBpbnRlcmFjdCB3aXRoIHRoZSBib3R0b20gZWRnZSBvZiB0aGUgZW1pdHRlciB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjYm91bmRzfS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2NvbGxpZGVCb3R0b21cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb2xsaWRlQm90dG9tID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0aGlzIGVtaXR0ZXIgdXBkYXRlcyBpdHNlbGYgYW5kIGl0cyBwYXJ0aWNsZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBDb250cm9sbGVkIGJ5IHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNwYXVzZX1cclxuICAgICAgICAgKiBhbmQge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3Jlc3VtZX0uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNhY3RpdmVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTZXQgdGhpcyB0byBmYWxzZSB0byBoaWRlIGFueSBhY3RpdmUgcGFydGljbGVzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjdmlzaWJsZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldFZpc2libGVcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYmxlbmQgbW9kZSBvZiB0aGlzIGVtaXR0ZXIncyBwYXJ0aWNsZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNibGVuZE1vZGVcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldEJsZW5kTW9kZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYmxlbmRNb2RlID0gQmxlbmRNb2Rlcy5OT1JNQUw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgR2FtZSBPYmplY3Qgd2hvc2UgcG9zaXRpb24gaXMgdXNlZCBhcyB0aGUgcGFydGljbGUgb3JpZ2luLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZm9sbG93XHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzdGFydEZvbGxvd1xyXG4gICAgICAgICAqIEBzZWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc3RvcEZvbGxvd1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZm9sbG93ID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG9mZnNldCBvZiB0aGUgcGFydGljbGUgb3JpZ2luIGZyb20gdGhlIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNmb2xsb3d9IHRhcmdldC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2ZvbGxvd09mZnNldFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqIEBzZWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc3RhcnRGb2xsb3dcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZvbGxvd09mZnNldCA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhlIGVtaXR0ZXIncyB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjdmlzaWJsZX0gc3RhdGUgd2lsbCB0cmFja1xyXG4gICAgICAgICAqIHRoZSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZm9sbG93fSB0YXJnZXQncyB2aXNpYmlsaXR5IHN0YXRlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjdHJhY2tWaXNpYmxlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3N0YXJ0Rm9sbG93XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50cmFja1Zpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGN1cnJlbnQgdGV4dHVyZSBmcmFtZSwgYXMgYW4gaW5kZXggb2Yge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2ZyYW1lc30uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNjdXJyZW50RnJhbWVcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRGcmFtZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0ZXh0dXJlIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNmcmFtZXN9IGFyZSBzZWxlY3RlZCBhdCByYW5kb20uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNyYW5kb21GcmFtZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldEZyYW1lXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yYW5kb21GcmFtZSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgcGFydGljbGVzIHRoYXQgcmVjZWl2ZSBhIHNpbmdsZSB0ZXh0dXJlIGZyYW1lIChwZXIgZnJhbWUgY3ljbGUpLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZnJhbWVRdWFudGl0eVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKiBAc2VlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldEZyYW1lXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mcmFtZVF1YW50aXR5ID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW5hY3RpdmUgcGFydGljbGVzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZGVhZFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlW119XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlYWQgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQWN0aXZlIHBhcnRpY2xlc1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjYWxpdmVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZVtdfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hbGl2ZSA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGltZSB1bnRpbCB0aGUgbmV4dCBmbG93IGN5Y2xlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjX2NvdW50ZXJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2NvdW50ZXIgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb3VudHMgdXAgdG8ge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2ZyYW1lUXVhbnRpdHl9LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjX2ZyYW1lQ291bnRlclxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQ291bnRlciA9IDA7XHJcblxyXG4gICAgICAgIGlmIChjb25maWcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZyb21KU09OKGNvbmZpZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1lcmdlcyBjb25maWd1cmF0aW9uIHNldHRpbmdzIGludG8gdGhlIGVtaXR0ZXIncyBjdXJyZW50IHNldHRpbmdzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZnJvbUpTT05cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJDb25maWd9IGNvbmZpZyAtIFNldHRpbmdzIGZvciB0aGlzIGVtaXR0ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgZnJvbUpTT046IGZ1bmN0aW9uIChjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCFjb25maWcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBPbmx5IHVwZGF0ZSBwcm9wZXJ0aWVzIGZyb20gdGhlaXIgY3VycmVudCBzdGF0ZSBpZiB0aGV5IGV4aXN0IGluIHRoZSBnaXZlbiBjb25maWdcclxuXHJcbiAgICAgICAgdmFyIGkgPSAwO1xyXG4gICAgICAgIHZhciBrZXkgPSAnJztcclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMuY29uZmlnRmFzdE1hcC5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGtleSA9IHRoaXMuY29uZmlnRmFzdE1hcFtpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChIYXNWYWx1ZShjb25maWcsIGtleSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IEdldEZhc3RWYWx1ZShjb25maWcsIGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmNvbmZpZ09wTWFwLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAga2V5ID0gdGhpcy5jb25maWdPcE1hcFtpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChIYXNWYWx1ZShjb25maWcsIGtleSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXNba2V5XS5sb2FkQ29uZmlnKGNvbmZpZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYWNjZWxlcmF0aW9uID0gKHRoaXMuYWNjZWxlcmF0aW9uWC5wcm9wZXJ0eVZhbHVlICE9PSAwIHx8IHRoaXMuYWNjZWxlcmF0aW9uWS5wcm9wZXJ0eVZhbHVlICE9PSAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5tb3ZlVG8gPSAodGhpcy5tb3ZlVG9YLnByb3BlcnR5VmFsdWUgIT09IDAgfHwgdGhpcy5tb3ZlVG9ZLnByb3BlcnR5VmFsdWUgIT09IDApO1xyXG5cclxuICAgICAgICAvLyAgU3BlY2lhbCAnc3BlZWQnIG92ZXJyaWRlXHJcblxyXG4gICAgICAgIGlmIChIYXNWYWx1ZShjb25maWcsICdzcGVlZCcpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zcGVlZFgubG9hZENvbmZpZyhjb25maWcsICdzcGVlZCcpO1xyXG4gICAgICAgICAgICB0aGlzLnNwZWVkWSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgSWYgeW91IHNwZWNpZnkgc3BlZWRYLCBzcGVlZFkgb3IgbW92ZVRvIHRoZW4gaXQgY2hhbmdlcyB0aGUgZW1pdHRlciBmcm9tIHJhZGlhbCB0byBhIHBvaW50IGVtaXR0ZXJcclxuICAgICAgICBpZiAoSGFzQW55KGNvbmZpZywgWyAnc3BlZWRYJywgJ3NwZWVkWScgXSkgfHwgdGhpcy5tb3ZlVG8pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJhZGlhbCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFNwZWNpYWwgJ3NjYWxlJyBvdmVycmlkZVxyXG5cclxuICAgICAgICBpZiAoSGFzVmFsdWUoY29uZmlnLCAnc2NhbGUnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NhbGVYLmxvYWRDb25maWcoY29uZmlnLCAnc2NhbGUnKTtcclxuICAgICAgICAgICAgdGhpcy5zY2FsZVkgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEhhc1ZhbHVlKGNvbmZpZywgJ2NhbGxiYWNrU2NvcGUnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjYWxsYmFja1Njb3BlID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2NhbGxiYWNrU2NvcGUnLCBudWxsKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZW1pdENhbGxiYWNrU2NvcGUgPSBjYWxsYmFja1Njb3BlO1xyXG4gICAgICAgICAgICB0aGlzLmRlYXRoQ2FsbGJhY2tTY29wZSA9IGNhbGxiYWNrU2NvcGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoSGFzVmFsdWUoY29uZmlnLCAnZW1pdFpvbmUnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RW1pdFpvbmUoY29uZmlnLmVtaXRab25lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChIYXNWYWx1ZShjb25maWcsICdkZWF0aFpvbmUnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RGVhdGhab25lKGNvbmZpZy5kZWF0aFpvbmUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEhhc1ZhbHVlKGNvbmZpZywgJ2JvdW5kcycpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRCb3VuZHMoY29uZmlnLmJvdW5kcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoSGFzVmFsdWUoY29uZmlnLCAnZm9sbG93T2Zmc2V0JykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZvbGxvd09mZnNldC5zZXRGcm9tT2JqZWN0KEdldEZhc3RWYWx1ZShjb25maWcsICdmb2xsb3dPZmZzZXQnLCAwKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoSGFzVmFsdWUoY29uZmlnLCAnZnJhbWUnKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RnJhbWUoY29uZmlnLmZyYW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBkZXNjcmlwdGlvbiBvZiB0aGlzIGVtaXR0ZXIgc3VpdGFibGUgZm9yIEpTT04gc2VyaWFsaXphdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3RvSlNPTlxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtvdXRwdXRdIC0gQW4gb2JqZWN0IHRvIGNvcHkgb3V0cHV0IGludG8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7b2JqZWN0fSAtIFRoZSBvdXRwdXQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICB0b0pTT046IGZ1bmN0aW9uIChvdXRwdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG91dHB1dCA9PT0gdW5kZWZpbmVkKSB7IG91dHB1dCA9IHt9OyB9XHJcblxyXG4gICAgICAgIHZhciBpID0gMDtcclxuICAgICAgICB2YXIga2V5ID0gJyc7XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmNvbmZpZ0Zhc3RNYXAubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBrZXkgPSB0aGlzLmNvbmZpZ0Zhc3RNYXBbaV07XHJcblxyXG4gICAgICAgICAgICBvdXRwdXRba2V5XSA9IHRoaXNba2V5XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmNvbmZpZ09wTWFwLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAga2V5ID0gdGhpcy5jb25maWdPcE1hcFtpXTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzW2tleV0pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dFtrZXldID0gdGhpc1trZXldLnRvSlNPTigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgc3BlY2lhbCBoYW5kbGVyc1xyXG4gICAgICAgIGlmICghdGhpcy5zcGVlZFkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBkZWxldGUgb3V0cHV0LnNwZWVkWDtcclxuICAgICAgICAgICAgb3V0cHV0LnNwZWVkID0gdGhpcy5zcGVlZFgudG9KU09OKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuc2NhbGVZKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZGVsZXRlIG91dHB1dC5zY2FsZVg7XHJcbiAgICAgICAgICAgIG91dHB1dC5zY2FsZSA9IHRoaXMuc2NhbGVYLnRvSlNPTigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250aW51b3VzbHkgbW92ZXMgdGhlIHBhcnRpY2xlIG9yaWdpbiB0byBmb2xsb3cgYSBHYW1lIE9iamVjdCdzIHBvc2l0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc3RhcnRGb2xsb3dcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IHRhcmdldCAtIFRoZSBHYW1lIE9iamVjdCB0byBmb2xsb3cuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29mZnNldFg9MF0gLSBIb3Jpem9udGFsIG9mZnNldCBvZiB0aGUgcGFydGljbGUgb3JpZ2luIGZyb20gdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRZPTBdIC0gVmVydGljYWwgb2Zmc2V0IG9mIHRoZSBwYXJ0aWNsZSBvcmlnaW4gZnJvbSB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt0cmFja1Zpc2libGU9ZmFsc2VdIC0gV2hldGhlciB0aGUgZW1pdHRlcidzIHZpc2libGUgc3RhdGUgd2lsbCB0cmFjayB0aGUgdGFyZ2V0J3MgdmlzaWJsZSBzdGF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcn0gVGhpcyBQYXJ0aWNsZSBFbWl0dGVyLlxyXG4gICAgICovXHJcbiAgICBzdGFydEZvbGxvdzogZnVuY3Rpb24gKHRhcmdldCwgb2Zmc2V0WCwgb2Zmc2V0WSwgdHJhY2tWaXNpYmxlKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChvZmZzZXRYID09PSB1bmRlZmluZWQpIHsgb2Zmc2V0WCA9IDA7IH1cclxuICAgICAgICBpZiAob2Zmc2V0WSA9PT0gdW5kZWZpbmVkKSB7IG9mZnNldFkgPSAwOyB9XHJcbiAgICAgICAgaWYgKHRyYWNrVmlzaWJsZSA9PT0gdW5kZWZpbmVkKSB7IHRyYWNrVmlzaWJsZSA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIHRoaXMuZm9sbG93ID0gdGFyZ2V0O1xyXG4gICAgICAgIHRoaXMuZm9sbG93T2Zmc2V0LnNldChvZmZzZXRYLCBvZmZzZXRZKTtcclxuICAgICAgICB0aGlzLnRyYWNrVmlzaWJsZSA9IHRyYWNrVmlzaWJsZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcHMgZm9sbG93aW5nIGEgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzdG9wRm9sbG93XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcn0gVGhpcyBQYXJ0aWNsZSBFbWl0dGVyLlxyXG4gICAgICovXHJcbiAgICBzdG9wRm9sbG93OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZm9sbG93ID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZvbGxvd09mZnNldC5zZXQoMCwgMCk7XHJcbiAgICAgICAgdGhpcy50cmFja1Zpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hvb3NlcyBhIHRleHR1cmUgZnJhbWUgZnJvbSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZnJhbWVzfS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2dldEZyYW1lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVGV4dHVyZXMuRnJhbWV9IFRoZSB0ZXh0dXJlIGZyYW1lLlxyXG4gICAgICovXHJcbiAgICBnZXRGcmFtZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZXMubGVuZ3RoID09PSAxKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEZyYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnJhbmRvbUZyYW1lKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIEdldFJhbmRvbSh0aGlzLmZyYW1lcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBmcmFtZSA9IHRoaXMuZnJhbWVzW3RoaXMuY3VycmVudEZyYW1lXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQ291bnRlcisrO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX2ZyYW1lQ291bnRlciA9PT0gdGhpcy5mcmFtZVF1YW50aXR5KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZUNvdW50ZXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50RnJhbWUgPSBXcmFwKHRoaXMuY3VycmVudEZyYW1lICsgMSwgMCwgdGhpcy5fZnJhbWVMZW5ndGgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZnJhbWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBmcmFtZTogMFxyXG4gICAgLy8gZnJhbWU6ICdyZWQnXHJcbiAgICAvLyBmcmFtZTogWyAwLCAxLCAyLCAzIF1cclxuICAgIC8vIGZyYW1lOiBbICdyZWQnLCAnZ3JlZW4nLCAnYmx1ZScsICdwaW5rJywgJ3doaXRlJyBdXHJcbiAgICAvLyBmcmFtZTogeyBmcmFtZXM6IFsgJ3JlZCcsICdncmVlbicsICdibHVlJywgJ3BpbmsnLCAnd2hpdGUnIF0sIFtjeWNsZTogYm9vbF0sIFtxdWFudGl0eTogaW50XSB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGEgcGF0dGVybiBmb3IgYXNzaWduaW5nIHRleHR1cmUgZnJhbWVzIHRvIGVtaXR0ZWQgcGFydGljbGVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0RnJhbWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KGFycmF5fHN0cmluZ3xpbnRlZ2VyfFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyRnJhbWVDb25maWcpfSBmcmFtZXMgLSBPbmUgb3IgbW9yZSB0ZXh0dXJlIGZyYW1lcywgb3IgYSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3BpY2tSYW5kb209dHJ1ZV0gLSBXaGV0aGVyIGZyYW1lcyBzaG91bGQgYmUgYXNzaWduZWQgYXQgcmFuZG9tIGZyb20gYGZyYW1lc2AuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtxdWFudGl0eT0xXSAtIFRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgcGFydGljbGVzIHRoYXQgd2lsbCByZWNlaXZlIGVhY2ggZnJhbWUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgc2V0RnJhbWU6IGZ1bmN0aW9uIChmcmFtZXMsIHBpY2tSYW5kb20sIHF1YW50aXR5KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChwaWNrUmFuZG9tID09PSB1bmRlZmluZWQpIHsgcGlja1JhbmRvbSA9IHRydWU7IH1cclxuICAgICAgICBpZiAocXVhbnRpdHkgPT09IHVuZGVmaW5lZCkgeyBxdWFudGl0eSA9IDE7IH1cclxuXHJcbiAgICAgICAgdGhpcy5yYW5kb21GcmFtZSA9IHBpY2tSYW5kb207XHJcbiAgICAgICAgdGhpcy5mcmFtZVF1YW50aXR5ID0gcXVhbnRpdHk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RnJhbWUgPSAwO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQ291bnRlciA9IDA7XHJcblxyXG4gICAgICAgIHZhciB0ID0gdHlwZW9mIChmcmFtZXMpO1xyXG5cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmcmFtZXMpIHx8IHQgPT09ICdzdHJpbmcnIHx8IHQgPT09ICdudW1iZXInKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tYW5hZ2VyLnNldEVtaXR0ZXJGcmFtZXMoZnJhbWVzLCB0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodCA9PT0gJ29iamVjdCcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZnJhbWVDb25maWcgPSBmcmFtZXM7XHJcblxyXG4gICAgICAgICAgICBmcmFtZXMgPSBHZXRGYXN0VmFsdWUoZnJhbWVDb25maWcsICdmcmFtZXMnLCBudWxsKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChmcmFtZXMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWFuYWdlci5zZXRFbWl0dGVyRnJhbWVzKGZyYW1lcywgdGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBpc0N5Y2xlID0gR2V0RmFzdFZhbHVlKGZyYW1lQ29uZmlnLCAnY3ljbGUnLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJhbmRvbUZyYW1lID0gKGlzQ3ljbGUpID8gZmFsc2UgOiB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mcmFtZVF1YW50aXR5ID0gR2V0RmFzdFZhbHVlKGZyYW1lQ29uZmlnLCAncXVhbnRpdHknLCBxdWFudGl0eSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9mcmFtZUxlbmd0aCA9IHRoaXMuZnJhbWVzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lTGVuZ3RoID09PSAxKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZVF1YW50aXR5ID0gMTtcclxuICAgICAgICAgICAgdGhpcy5yYW5kb21GcmFtZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHVybnMge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3JhZGlhbH0gcGFydGljbGUgbW92ZW1lbnQgb24gb3Igb2ZmLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0UmFkaWFsXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt2YWx1ZT10cnVlXSAtIFJhZGlhbCBtb2RlICh0cnVlKSBvciBwb2ludCBtb2RlICh0cnVlKS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcn0gVGhpcyBQYXJ0aWNsZSBFbWl0dGVyLlxyXG4gICAgICovXHJcbiAgICBzZXRSYWRpYWw6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdGhpcy5yYWRpYWwgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIGVtaXR0ZXIncyBwYXJ0aWNsZSBvcmlnaW4uXHJcbiAgICAgKiBOZXcgcGFydGljbGVzIHdpbGwgYmUgZW1pdHRlZCBoZXJlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0UG9zaXRpb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3BPbkVtaXRUeXBlfSB4IC0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgcGFydGljbGUgb3JpZ2luLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcE9uRW1pdFR5cGV9IHkgLSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBwYXJ0aWNsZSBvcmlnaW4uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgc2V0UG9zaXRpb246IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMueC5vbkNoYW5nZSh4KTtcclxuICAgICAgICB0aGlzLnkub25DaGFuZ2UoeSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgb3IgbW9kaWZpZXMgYSByZWN0YW5ndWxhciBib3VuZGFyeSBjb25zdHJhaW5pbmcgdGhlIHBhcnRpY2xlcy5cclxuICAgICAqXHJcbiAgICAgKiBUbyByZW1vdmUgdGhlIGJvdW5kYXJ5LCBzZXQge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2JvdW5kc30gdG8gbnVsbC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldEJvdW5kc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsobnVtYmVyfFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyQm91bmRzfFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyQm91bmRzQWx0KX0geCAtIFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGxlZnQgZWRnZSBvZiB0aGUgYm91bmRhcnksIG9yIGFuIG9iamVjdCByZXByZXNlbnRpbmcgYSByZWN0YW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIHRvcCBlZGdlIG9mIHRoZSBib3VuZGFyeS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgYm91bmRhcnkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgYm91bmRhcnkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgc2V0Qm91bmRzOiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAodHlwZW9mIHggPT09ICdvYmplY3QnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIG9iaiA9IHg7XHJcblxyXG4gICAgICAgICAgICB4ID0gb2JqLng7XHJcbiAgICAgICAgICAgIHkgPSBvYmoueTtcclxuICAgICAgICAgICAgd2lkdGggPSAoSGFzVmFsdWUob2JqLCAndycpKSA/IG9iai53IDogb2JqLndpZHRoO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSAoSGFzVmFsdWUob2JqLCAnaCcpKSA/IG9iai5oIDogb2JqLmhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmJvdW5kcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuYm91bmRzLnNldFRvKHgsIHksIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmJvdW5kcyA9IG5ldyBSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBpbml0aWFsIGhvcml6b250YWwgc3BlZWQgb2YgZW1pdHRlZCBwYXJ0aWNsZXMuXHJcbiAgICAgKiBDaGFuZ2VzIHRoZSBlbWl0dGVyIHRvIHBvaW50IG1vZGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRTcGVlZFhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3BPbkVtaXRUeXBlfSB2YWx1ZSAtIFRoZSBzcGVlZCwgaW4gcGl4ZWxzIHBlciBzZWNvbmQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgc2V0U3BlZWRYOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zcGVlZFgub25DaGFuZ2UodmFsdWUpO1xyXG5cclxuICAgICAgICAvLyAgSWYgeW91IHNwZWNpZnkgc3BlZWRYIGFuZCBZIHRoZW4gaXQgY2hhbmdlcyB0aGUgZW1pdHRlciBmcm9tIHJhZGlhbCB0byBhIHBvaW50IGVtaXR0ZXJcclxuICAgICAgICB0aGlzLnJhZGlhbCA9IGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBpbml0aWFsIHZlcnRpY2FsIHNwZWVkIG9mIGVtaXR0ZWQgcGFydGljbGVzLlxyXG4gICAgICogQ2hhbmdlcyB0aGUgZW1pdHRlciB0byBwb2ludCBtb2RlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0U3BlZWRZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wT25FbWl0VHlwZX0gdmFsdWUgLSBUaGUgc3BlZWQsIGluIHBpeGVscyBwZXIgc2Vjb25kLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyfSBUaGlzIFBhcnRpY2xlIEVtaXR0ZXIuXHJcbiAgICAgKi9cclxuICAgIHNldFNwZWVkWTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLnNwZWVkWSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc3BlZWRZLm9uQ2hhbmdlKHZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgIC8vICBJZiB5b3Ugc3BlY2lmeSBzcGVlZFggYW5kIFkgdGhlbiBpdCBjaGFuZ2VzIHRoZSBlbWl0dGVyIGZyb20gcmFkaWFsIHRvIGEgcG9pbnQgZW1pdHRlclxyXG4gICAgICAgICAgICB0aGlzLnJhZGlhbCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaW5pdGlhbCByYWRpYWwgc3BlZWQgb2YgZW1pdHRlZCBwYXJ0aWNsZXMuXHJcbiAgICAgKiBDaGFuZ2VzIHRoZSBlbWl0dGVyIHRvIHJhZGlhbCBtb2RlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0U3BlZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3BPbkVtaXRUeXBlfSB2YWx1ZSAtIFRoZSBzcGVlZCwgaW4gcGl4ZWxzIHBlciBzZWNvbmQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgc2V0U3BlZWQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNwZWVkWC5vbkNoYW5nZSh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zcGVlZFkgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyAgSWYgeW91IHNwZWNpZnkgc3BlZWRYIGFuZCBZIHRoZW4gaXQgY2hhbmdlcyB0aGUgZW1pdHRlciBmcm9tIHJhZGlhbCB0byBhIHBvaW50IGVtaXR0ZXJcclxuICAgICAgICB0aGlzLnJhZGlhbCA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGhvcml6b250YWwgc2NhbGUgb2YgZW1pdHRlZCBwYXJ0aWNsZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRTY2FsZVhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wT25FbWl0VHlwZXxQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcE9uVXBkYXRlVHlwZSl9IHZhbHVlIC0gVGhlIHNjYWxlLCByZWxhdGl2ZSB0byAxLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyfSBUaGlzIFBhcnRpY2xlIEVtaXR0ZXIuXHJcbiAgICAgKi9cclxuICAgIHNldFNjYWxlWDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2NhbGVYLm9uQ2hhbmdlKHZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdmVydGljYWwgc2NhbGUgb2YgZW1pdHRlZCBwYXJ0aWNsZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRTY2FsZVlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wT25FbWl0VHlwZXxQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcE9uVXBkYXRlVHlwZSl9IHZhbHVlIC0gVGhlIHNjYWxlLCByZWxhdGl2ZSB0byAxLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyfSBUaGlzIFBhcnRpY2xlIEVtaXR0ZXIuXHJcbiAgICAgKi9cclxuICAgIHNldFNjYWxlWTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2NhbGVZLm9uQ2hhbmdlKHZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgc2NhbGUgb2YgZW1pdHRlZCBwYXJ0aWNsZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRTY2FsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3BPbkVtaXRUeXBlfFBoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck9wT25VcGRhdGVUeXBlKX0gdmFsdWUgLSBUaGUgc2NhbGUsIHJlbGF0aXZlIHRvIDEuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgc2V0U2NhbGU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNjYWxlWC5vbkNoYW5nZSh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zY2FsZVkgPSBudWxsO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBob3Jpem9udGFsIGdyYXZpdHkgYXBwbGllZCB0byBlbWl0dGVkIHBhcnRpY2xlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldEdyYXZpdHlYXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBBY2NlbGVyYXRpb24gZHVlIHRvIGdyYXZpdHksIGluIHBpeGVscyBwZXIgc2Vjb25kIHNxdWFyZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgc2V0R3Jhdml0eVg6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmdyYXZpdHlYID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHZlcnRpY2FsIGdyYXZpdHkgYXBwbGllZCB0byBlbWl0dGVkIHBhcnRpY2xlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldEdyYXZpdHlZXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBBY2NlbGVyYXRpb24gZHVlIHRvIGdyYXZpdHksIGluIHBpeGVscyBwZXIgc2Vjb25kIHNxdWFyZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgc2V0R3Jhdml0eVk6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmdyYXZpdHlZID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGdyYXZpdHkgYXBwbGllZCB0byBlbWl0dGVkIHBhcnRpY2xlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldEdyYXZpdHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gSG9yaXpvbnRhbCBhY2NlbGVyYXRpb24gZHVlIHRvIGdyYXZpdHksIGluIHBpeGVscyBwZXIgc2Vjb25kIHNxdWFyZWQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFZlcnRpY2FsIGFjY2VsZXJhdGlvbiBkdWUgdG8gZ3Jhdml0eSwgaW4gcGl4ZWxzIHBlciBzZWNvbmQgc3F1YXJlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcn0gVGhpcyBQYXJ0aWNsZSBFbWl0dGVyLlxyXG4gICAgICovXHJcbiAgICBzZXRHcmF2aXR5OiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmdyYXZpdHlYID0geDtcclxuICAgICAgICB0aGlzLmdyYXZpdHlZID0geTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgb3BhY2l0eSBvZiBlbWl0dGVkIHBhcnRpY2xlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3NldEFscGhhXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcE9uRW1pdFR5cGV8UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3BPblVwZGF0ZVR5cGUpfSB2YWx1ZSAtIEEgdmFsdWUgYmV0d2VlbiAwICh0cmFuc3BhcmVudCkgYW5kIDEgKG9wYXF1ZSkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgc2V0QWxwaGE6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmFscGhhLm9uQ2hhbmdlKHZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYW5nbGUgb2YgYSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjcmFkaWFsfSBwYXJ0aWNsZSBzdHJlYW0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRFbWl0dGVyQW5nbGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3BPbkVtaXRUeXBlfSB2YWx1ZSAtIFRoZSBhbmdsZSBvZiB0aGUgaW5pdGlhbCB2ZWxvY2l0eSBvZiBlbWl0dGVkIHBhcnRpY2xlcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcn0gVGhpcyBQYXJ0aWNsZSBFbWl0dGVyLlxyXG4gICAgICovXHJcbiAgICBzZXRFbWl0dGVyQW5nbGU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmFuZ2xlLm9uQ2hhbmdlKHZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYW5nbGUgb2YgYSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjcmFkaWFsfSBwYXJ0aWNsZSBzdHJlYW0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXRBbmdsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcE9uRW1pdFR5cGV9IHZhbHVlIC0gVGhlIGFuZ2xlIG9mIHRoZSBpbml0aWFsIHZlbG9jaXR5IG9mIGVtaXR0ZWQgcGFydGljbGVzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyfSBUaGlzIFBhcnRpY2xlIEVtaXR0ZXIuXHJcbiAgICAgKi9cclxuICAgIHNldEFuZ2xlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hbmdsZS5vbkNoYW5nZSh2YWx1ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGxpZmVzcGFuIG9mIG5ld2x5IGVtaXR0ZWQgcGFydGljbGVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0TGlmZXNwYW5cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3BPbkVtaXRUeXBlfSB2YWx1ZSAtIFRoZSBwYXJ0aWNsZSBsaWZlc3BhbiwgaW4gbXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgc2V0TGlmZXNwYW46IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmxpZmVzcGFuLm9uQ2hhbmdlKHZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhcnRpY2xlcyByZWxlYXNlZCBhdCBlYWNoIGZsb3cgY3ljbGUgb3IgZXhwbG9zaW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0UXVhbnRpdHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3BPbkVtaXRUeXBlfSBxdWFudGl0eSAtIFRoZSBudW1iZXIgb2YgcGFydGljbGVzIHRvIHJlbGVhc2UgYXQgZWFjaCBmbG93IGN5Y2xlIG9yIGV4cGxvc2lvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcn0gVGhpcyBQYXJ0aWNsZSBFbWl0dGVyLlxyXG4gICAgICovXHJcbiAgICBzZXRRdWFudGl0eTogZnVuY3Rpb24gKHF1YW50aXR5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucXVhbnRpdHkub25DaGFuZ2UocXVhbnRpdHkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBlbWl0dGVyJ3Mge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2ZyZXF1ZW5jeX1cclxuICAgICAqIGFuZCB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjcXVhbnRpdHl9LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0RnJlcXVlbmN5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZnJlcXVlbmN5IC0gVGhlIHRpbWUgaW50ZXJ2YWwgKD49IDApIG9mIGVhY2ggZmxvdyBjeWNsZSwgaW4gbXM7IG9yIC0xIHRvIHB1dCB0aGUgZW1pdHRlciBpbiBleHBsb3Npb24gbW9kZS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FbWl0dGVyT3BPbkVtaXRUeXBlfSBbcXVhbnRpdHldIC0gVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdG8gcmVsZWFzZSBhdCBlYWNoIGZsb3cgY3ljbGUgb3IgZXhwbG9zaW9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyfSBUaGlzIFBhcnRpY2xlIEVtaXR0ZXIuXHJcbiAgICAgKi9cclxuICAgIHNldEZyZXF1ZW5jeTogZnVuY3Rpb24gKGZyZXF1ZW5jeSwgcXVhbnRpdHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBmcmVxdWVuY3k7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvdW50ZXIgPSAwO1xyXG5cclxuICAgICAgICBpZiAocXVhbnRpdHkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnF1YW50aXR5Lm9uQ2hhbmdlKHF1YW50aXR5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgb3IgcmVtb3ZlcyB0aGUge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2VtaXRab25lfS5cclxuICAgICAqXHJcbiAgICAgKiBBbiB7QGxpbmsgUGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJFZGdlWm9uZUNvbmZpZyBFZGdlWm9uZX0gcGxhY2VzIHBhcnRpY2xlcyBvbiBpdHMgZWRnZXMuIEl0cyB7QGxpbmsgUGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FZGdlWm9uZVNvdXJjZSBzb3VyY2V9IGNhbiBiZSBhIEN1cnZlLCBQYXRoLCBDaXJjbGUsIEVsbGlwc2UsIExpbmUsIFBvbHlnb24sIFJlY3RhbmdsZSwgb3IgVHJpYW5nbGU7IG9yIGFueSBvYmplY3Qgd2l0aCBhIHN1aXRhYmxlIHtAbGluayBQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLkVkZ2Vab25lU291cmNlQ2FsbGJhY2sgZ2V0UG9pbnRzfSBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogQSB7QGxpbmsgUGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJSYW5kb21ab25lQ29uZmlnIFJhbmRvbVpvbmV9IHBsYWNlcyByYW5kb21seSB3aXRoaW4gaXRzIGludGVyaW9yLiBJdHMge0BsaW5rIFJhbmRvbVpvbmVTb3VyY2Ugc291cmNlfSBjYW4gYmUgYSBDaXJjbGUsIEVsbGlwc2UsIExpbmUsIFBvbHlnb24sIFJlY3RhbmdsZSwgb3IgVHJpYW5nbGU7IG9yIGFueSBvYmplY3Qgd2l0aCBhIHN1aXRhYmxlIHtAbGluayBQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLlJhbmRvbVpvbmVTb3VyY2VDYWxsYmFjayBnZXRSYW5kb21Qb2ludH0gbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc2V0RW1pdFpvbmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJFZGdlWm9uZUNvbmZpZ3xQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlclJhbmRvbVpvbmVDb25maWd9IFt6b25lQ29uZmlnXSAtIEFuIG9iamVjdCBkZXNjcmliaW5nIHRoZSB6b25lLCBvciBgdW5kZWZpbmVkYCB0byByZW1vdmUgYW55IGN1cnJlbnQgZW1pdCB6b25lLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyfSBUaGlzIFBhcnRpY2xlIEVtaXR0ZXIuXHJcbiAgICAgKi9cclxuICAgIHNldEVtaXRab25lOiBmdW5jdGlvbiAoem9uZUNvbmZpZylcclxuICAgIHtcclxuICAgICAgICBpZiAoem9uZUNvbmZpZyA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0Wm9uZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBXaGVyZSBzb3VyY2UgPSBHZW9tIGxpa2UgQ2lyY2xlLCBvciBhIFBhdGggb3IgQ3VydmVcclxuICAgICAgICAgICAgLy8gIGVtaXRab25lOiB7IHR5cGU6ICdyYW5kb20nLCBzb3VyY2U6IFggfVxyXG4gICAgICAgICAgICAvLyAgZW1pdFpvbmU6IHsgdHlwZTogJ2VkZ2UnLCBzb3VyY2U6IFgsIHF1YW50aXR5OiAzMiwgW3N0ZXBSYXRlPTBdLCBbeW95bz1mYWxzZV0sIFtzZWFtbGVzcz10cnVlXSB9XHJcblxyXG4gICAgICAgICAgICB2YXIgdHlwZSA9IEdldEZhc3RWYWx1ZSh6b25lQ29uZmlnLCAndHlwZScsICdyYW5kb20nKTtcclxuICAgICAgICAgICAgdmFyIHNvdXJjZSA9IEdldEZhc3RWYWx1ZSh6b25lQ29uZmlnLCAnc291cmNlJywgbnVsbCk7XHJcblxyXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3JhbmRvbSc6XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdFpvbmUgPSBuZXcgUmFuZG9tWm9uZShzb3VyY2UpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlICdlZGdlJzpcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHF1YW50aXR5ID0gR2V0RmFzdFZhbHVlKHpvbmVDb25maWcsICdxdWFudGl0eScsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzdGVwUmF0ZSA9IEdldEZhc3RWYWx1ZSh6b25lQ29uZmlnLCAnc3RlcFJhdGUnLCAwKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeW95byA9IEdldEZhc3RWYWx1ZSh6b25lQ29uZmlnLCAneW95bycsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VhbWxlc3MgPSBHZXRGYXN0VmFsdWUoem9uZUNvbmZpZywgJ3NlYW1sZXNzJywgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdFpvbmUgPSBuZXcgRWRnZVpvbmUoc291cmNlLCBxdWFudGl0eSwgc3RlcFJhdGUsIHlveW8sIHNlYW1sZXNzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgb3IgcmVtb3ZlcyB0aGUge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2RlYXRoWm9uZX0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNzZXREZWF0aFpvbmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJEZWF0aFpvbmVDb25maWd9IFt6b25lQ29uZmlnXSAtIEFuIG9iamVjdCBkZXNjcmliaW5nIHRoZSB6b25lLCBvciBgdW5kZWZpbmVkYCB0byByZW1vdmUgYW55IGN1cnJlbnQgZGVhdGggem9uZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcn0gVGhpcyBQYXJ0aWNsZSBFbWl0dGVyLlxyXG4gICAgICovXHJcbiAgICBzZXREZWF0aFpvbmU6IGZ1bmN0aW9uICh6b25lQ29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh6b25lQ29uZmlnID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmRlYXRoWm9uZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBXaGVyZSBzb3VyY2UgPSBHZW9tIGxpa2UgQ2lyY2xlIG9yIFJlY3QgdGhhdCBzdXBwb3J0cyBhICdjb250YWlucycgZnVuY3Rpb25cclxuICAgICAgICAgICAgLy8gIGRlYXRoWm9uZTogeyB0eXBlOiAnb25FbnRlcicsIHNvdXJjZTogWCB9XHJcbiAgICAgICAgICAgIC8vICBkZWF0aFpvbmU6IHsgdHlwZTogJ29uTGVhdmUnLCBzb3VyY2U6IFggfVxyXG5cclxuICAgICAgICAgICAgdmFyIHR5cGUgPSBHZXRGYXN0VmFsdWUoem9uZUNvbmZpZywgJ3R5cGUnLCAnb25FbnRlcicpO1xyXG4gICAgICAgICAgICB2YXIgc291cmNlID0gR2V0RmFzdFZhbHVlKHpvbmVDb25maWcsICdzb3VyY2UnLCBudWxsKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzb3VyY2UgJiYgdHlwZW9mIHNvdXJjZS5jb250YWlucyA9PT0gJ2Z1bmN0aW9uJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIGtpbGxPbkVudGVyID0gKHR5cGUgPT09ICdvbkVudGVyJykgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWF0aFpvbmUgPSBuZXcgRGVhdGhab25lKHNvdXJjZSwga2lsbE9uRW50ZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGluYWN0aXZlIHBhcnRpY2xlcyBhbmQgYWRkcyB0aGVtIHRvIHRoaXMgZW1pdHRlcidzIHBvb2wuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNyZXNlcnZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHBhcnRpY2xlQ291bnQgLSBUaGUgbnVtYmVyIG9mIHBhcnRpY2xlcyB0byBjcmVhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgcmVzZXJ2ZTogZnVuY3Rpb24gKHBhcnRpY2xlQ291bnQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGRlYWQgPSB0aGlzLmRlYWQ7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydGljbGVDb3VudDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZGVhZC5wdXNoKG5ldyB0aGlzLnBhcnRpY2xlQ2xhc3ModGhpcykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSAoaW4tdXNlKSBwYXJ0aWNsZXMgaW4gdGhpcyBlbWl0dGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZ2V0QWxpdmVQYXJ0aWNsZUNvdW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgbnVtYmVyIG9mIHBhcnRpY2xlcyB3aXRoIGBhY3RpdmU9dHJ1ZWAuXHJcbiAgICAgKi9cclxuICAgIGdldEFsaXZlUGFydGljbGVDb3VudDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hbGl2ZS5sZW5ndGg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgbnVtYmVyIG9mIGluYWN0aXZlIChhdmFpbGFibGUpIHBhcnRpY2xlcyBpbiB0aGlzIGVtaXR0ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNnZXREZWFkUGFydGljbGVDb3VudFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgd2l0aCBgYWN0aXZlPWZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgZ2V0RGVhZFBhcnRpY2xlQ291bnQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVhZC5sZW5ndGg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdG90YWwgbnVtYmVyIG9mIHBhcnRpY2xlcyBpbiB0aGlzIGVtaXR0ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNnZXRQYXJ0aWNsZUNvdW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgbnVtYmVyIG9mIHBhcnRpY2xlcywgaW5jbHVkaW5nIGJvdGggYWxpdmUgYW5kIGRlYWQuXHJcbiAgICAgKi9cclxuICAgIGdldFBhcnRpY2xlQ291bnQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxpdmVQYXJ0aWNsZUNvdW50KCkgKyB0aGlzLmdldERlYWRQYXJ0aWNsZUNvdW50KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0aGlzIGVtaXR0ZXIgaXMgYXQgaXRzIGxpbWl0IChpZiBzZXQpLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjYXRMaW1pdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBFbWl0dGVyIGlzIGF0IGl0cyBsaW1pdCwgb3IgYGZhbHNlYCBpZiBubyBsaW1pdCwgb3IgYmVsb3cgdGhlIGBtYXhQYXJ0aWNsZXNgIGxldmVsLlxyXG4gICAgICovXHJcbiAgICBhdExpbWl0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5tYXhQYXJ0aWNsZXMgPiAwICYmIHRoaXMuZ2V0UGFydGljbGVDb3VudCgpID09PSB0aGlzLm1heFBhcnRpY2xlcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBhIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggbmV3bHkgZW1pdHRlZCBwYXJ0aWNsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI29uUGFydGljbGVFbWl0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyQ2FsbGJhY2t9IGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uLlxyXG4gICAgICogQHBhcmFtIHsqfSBbY29udGV4dF0gLSBUaGUgY2FsbGluZyBjb250ZXh0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyfSBUaGlzIFBhcnRpY2xlIEVtaXR0ZXIuXHJcbiAgICAgKi9cclxuICAgIG9uUGFydGljbGVFbWl0OiBmdW5jdGlvbiAoY2FsbGJhY2ssIGNvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgQ2xlYXIgYW55IHByZXZpb3VzbHkgc2V0IGNhbGxiYWNrXHJcbiAgICAgICAgICAgIHRoaXMuZW1pdENhbGxiYWNrID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5lbWl0Q2FsbGJhY2tTY29wZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdENhbGxiYWNrID0gY2FsbGJhY2s7XHJcblxyXG4gICAgICAgICAgICBpZiAoY29udGV4dClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q2FsbGJhY2tTY29wZSA9IGNvbnRleHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgYSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHBhcnRpY2xlIGRlYXRoLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjb25QYXJ0aWNsZURlYXRoXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVEZWF0aENhbGxiYWNrfSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbi5cclxuICAgICAqIEBwYXJhbSB7Kn0gW2NvbnRleHRdIC0gVGhlIGZ1bmN0aW9uJ3MgY2FsbGluZyBjb250ZXh0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyfSBUaGlzIFBhcnRpY2xlIEVtaXR0ZXIuXHJcbiAgICAgKi9cclxuICAgIG9uUGFydGljbGVEZWF0aDogZnVuY3Rpb24gKGNhbGxiYWNrLCBjb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIENsZWFyIGFueSBwcmV2aW91c2x5IHNldCBjYWxsYmFja1xyXG4gICAgICAgICAgICB0aGlzLmRlYXRoQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmRlYXRoQ2FsbGJhY2tTY29wZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVhdGhDYWxsYmFjayA9IGNhbGxiYWNrO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbnRleHQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVhdGhDYWxsYmFja1Njb3BlID0gY29udGV4dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVhY3RpdmF0ZXMgZXZlcnkgcGFydGljbGUgaW4gdGhpcyBlbWl0dGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIja2lsbEFsbFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAga2lsbEFsbDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgZGVhZCA9IHRoaXMuZGVhZDtcclxuICAgICAgICB2YXIgYWxpdmUgPSB0aGlzLmFsaXZlO1xyXG5cclxuICAgICAgICB3aGlsZSAoYWxpdmUubGVuZ3RoID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGRlYWQucHVzaChhbGl2ZS5wb3AoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxscyBhIGZ1bmN0aW9uIGZvciBlYWNoIGFjdGl2ZSBwYXJ0aWNsZSBpbiB0aGlzIGVtaXR0ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNmb3JFYWNoQWxpdmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJDYWxsYmFja30gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24uXHJcbiAgICAgKiBAcGFyYW0geyp9IGNvbnRleHQgLSBUaGUgZnVuY3Rpb24ncyBjYWxsaW5nIGNvbnRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoaXMgUGFydGljbGUgRW1pdHRlci5cclxuICAgICAqL1xyXG4gICAgZm9yRWFjaEFsaXZlOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGNvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGFsaXZlID0gdGhpcy5hbGl2ZTtcclxuICAgICAgICB2YXIgbGVuZ3RoID0gYWxpdmUubGVuZ3RoO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyArK2luZGV4KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFNlbmRzIHRoZSBQYXJ0aWNsZSBhbmQgdGhlIEVtaXR0ZXJcclxuICAgICAgICAgICAgY2FsbGJhY2suY2FsbChjb250ZXh0LCBhbGl2ZVtpbmRleF0sIHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbHMgYSBmdW5jdGlvbiBmb3IgZWFjaCBpbmFjdGl2ZSBwYXJ0aWNsZSBpbiB0aGlzIGVtaXR0ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNmb3JFYWNoRGVhZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlckNhbGxiYWNrfSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbi5cclxuICAgICAqIEBwYXJhbSB7Kn0gY29udGV4dCAtIFRoZSBmdW5jdGlvbidzIGNhbGxpbmcgY29udGV4dC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcn0gVGhpcyBQYXJ0aWNsZSBFbWl0dGVyLlxyXG4gICAgICovXHJcbiAgICBmb3JFYWNoRGVhZDogZnVuY3Rpb24gKGNhbGxiYWNrLCBjb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBkZWFkID0gdGhpcy5kZWFkO1xyXG4gICAgICAgIHZhciBsZW5ndGggPSBkZWFkLmxlbmd0aDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBTZW5kcyB0aGUgUGFydGljbGUgYW5kIHRoZSBFbWl0dGVyXHJcbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoY29udGV4dCwgZGVhZFtpbmRleF0sIHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHVybnMge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI29ufSB0aGUgZW1pdHRlciBhbmQgcmVzZXRzIHRoZSBmbG93IGNvdW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogSWYgdGhpcyBlbWl0dGVyIGlzIGluIGZsb3cgbW9kZSAoZnJlcXVlbmN5ID49IDA7IHRoZSBkZWZhdWx0KSwgdGhlIHBhcnRpY2xlIGZsb3cgd2lsbCBzdGFydCAob3IgcmVzdGFydCkuXHJcbiAgICAgKlxyXG4gICAgICogSWYgdGhpcyBlbWl0dGVyIGlzIGluIGV4cGxvZGUgbW9kZSAoZnJlcXVlbmN5ID0gLTEpLCBub3RoaW5nIHdpbGwgaGFwcGVuLlxyXG4gICAgICogVXNlIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNleHBsb2RlfSBvciB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZmxvd30gaW5zdGVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3N0YXJ0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcn0gVGhpcyBQYXJ0aWNsZSBFbWl0dGVyLlxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLm9uID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5fY291bnRlciA9IDA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFR1cm5zIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNvbiBvZmZ9IHRoZSBlbWl0dGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjc3RvcFxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyfSBUaGlzIFBhcnRpY2xlIEVtaXR0ZXIuXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5vbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjYWN0aXZlIERlYWN0aXZhdGVzfSB0aGUgZW1pdHRlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3BhdXNlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcn0gVGhpcyBQYXJ0aWNsZSBFbWl0dGVyLlxyXG4gICAgICovXHJcbiAgICBwYXVzZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjYWN0aXZlIEFjdGl2YXRlc30gdGhlIGVtaXR0ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNyZXN1bWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyfSBUaGlzIFBhcnRpY2xlIEVtaXR0ZXIuXHJcbiAgICAgKi9cclxuICAgIHJlc3VtZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNvcnRzIGFjdGl2ZSBwYXJ0aWNsZXMgd2l0aCB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZGVwdGhTb3J0Q2FsbGJhY2t9LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZGVwdGhTb3J0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcn0gVGhpcyBQYXJ0aWNsZSBFbWl0dGVyLlxyXG4gICAgICovXHJcbiAgICBkZXB0aFNvcnQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgU3RhYmxlU29ydC5pbnBsYWNlKHRoaXMuYWxpdmUsIHRoaXMuZGVwdGhTb3J0Q2FsbGJhY2spO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQdXRzIHRoZSBlbWl0dGVyIGluIGZsb3cgbW9kZSAoZnJlcXVlbmN5ID49IDApIGFuZCBzdGFydHMgKG9yIHJlc3RhcnRzKSBhIHBhcnRpY2xlIGZsb3cuXHJcbiAgICAgKlxyXG4gICAgICogVG8gcmVzdW1lIGEgZmxvdyBhdCB0aGUgY3VycmVudCBmcmVxdWVuY3kgYW5kIHF1YW50aXR5LCB1c2Uge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3N0YXJ0fSBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZmxvd1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGZyZXF1ZW5jeSAtIFRoZSB0aW1lIGludGVydmFsICg+PSAwKSBvZiBlYWNoIGZsb3cgY3ljbGUsIGluIG1zLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLkVtaXR0ZXJPcE9uRW1pdFR5cGV9IFtjb3VudD0xXSAtIFRoZSBudW1iZXIgb2YgcGFydGljbGVzIHRvIGVtaXQgYXQgZWFjaCBmbG93IGN5Y2xlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyfSBUaGlzIFBhcnRpY2xlIEVtaXR0ZXIuXHJcbiAgICAgKi9cclxuICAgIGZsb3c6IGZ1bmN0aW9uIChmcmVxdWVuY3ksIGNvdW50KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChjb3VudCA9PT0gdW5kZWZpbmVkKSB7IGNvdW50ID0gMTsgfVxyXG5cclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IGZyZXF1ZW5jeTtcclxuXHJcbiAgICAgICAgdGhpcy5xdWFudGl0eS5vbkNoYW5nZShjb3VudCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHV0cyB0aGUgZW1pdHRlciBpbiBleHBsb2RlIG1vZGUgKGZyZXF1ZW5jeSA9IC0xKSwgc3RvcHBpbmcgYW55IGN1cnJlbnQgcGFydGljbGUgZmxvdywgYW5kIGVtaXRzIHNldmVyYWwgcGFydGljbGVzIGFsbCBhdCBvbmNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXIjZXhwbG9kZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBjb3VudCAtIFRoZSBhbW91bnQgb2YgUGFydGljbGVzIHRvIGVtaXQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gZW1pdCB0aGUgUGFydGljbGVzIGZyb20uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gZW1pdCB0aGUgUGFydGljbGVzIGZyb20uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZX0gVGhlIG1vc3QgcmVjZW50bHkgZW1pdHRlZCBQYXJ0aWNsZS5cclxuICAgICAqL1xyXG4gICAgZXhwbG9kZTogZnVuY3Rpb24gKGNvdW50LCB4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gLTE7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmVtaXRQYXJ0aWNsZShjb3VudCwgeCwgeSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW1pdHMgcGFydGljbGVzIGF0IGEgZ2l2ZW4gcG9zaXRpb24gKG9yIHRoZSBlbWl0dGVyJ3MgY3VycmVudCBwb3NpdGlvbikuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlciNlbWl0UGFydGljbGVBdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4PXRoaXMueF0gLSBUaGUgeCBjb29yZGluYXRlIHRvIGVtaXQgdGhlIFBhcnRpY2xlcyBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PXRoaXMueF0gLSBUaGUgeSBjb29yZGluYXRlIHRvIGVtaXQgdGhlIFBhcnRpY2xlcyBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbY291bnQ9dGhpcy5xdWFudGl0eV0gLSBUaGUgbnVtYmVyIG9mIFBhcnRpY2xlcyB0byBlbWl0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGV9IFRoZSBtb3N0IHJlY2VudGx5IGVtaXR0ZWQgUGFydGljbGUuXHJcbiAgICAgKi9cclxuICAgIGVtaXRQYXJ0aWNsZUF0OiBmdW5jdGlvbiAoeCwgeSwgY291bnQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1pdFBhcnRpY2xlKGNvdW50LCB4LCB5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0cyBwYXJ0aWNsZXMgYXQgYSBnaXZlbiBwb3NpdGlvbiAob3IgdGhlIGVtaXR0ZXIncyBjdXJyZW50IHBvc2l0aW9uKS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2VtaXRQYXJ0aWNsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbY291bnQ9dGhpcy5xdWFudGl0eV0gLSBUaGUgbnVtYmVyIG9mIFBhcnRpY2xlcyB0byBlbWl0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4PXRoaXMueF0gLSBUaGUgeCBjb29yZGluYXRlIHRvIGVtaXQgdGhlIFBhcnRpY2xlcyBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PXRoaXMueF0gLSBUaGUgeSBjb29yZGluYXRlIHRvIGVtaXQgdGhlIFBhcnRpY2xlcyBmcm9tLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGV9IFRoZSBtb3N0IHJlY2VudGx5IGVtaXR0ZWQgUGFydGljbGUuXHJcbiAgICAgKlxyXG4gICAgICogQHNlZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlI2ZpcmVcclxuICAgICAqL1xyXG4gICAgZW1pdFBhcnRpY2xlOiBmdW5jdGlvbiAoY291bnQsIHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXRMaW1pdCgpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvdW50ID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb3VudCA9IHRoaXMucXVhbnRpdHkub25FbWl0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGVhZCA9IHRoaXMuZGVhZDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHBhcnRpY2xlID0gZGVhZC5wb3AoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghcGFydGljbGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHBhcnRpY2xlID0gbmV3IHRoaXMucGFydGljbGVDbGFzcyh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcGFydGljbGUuZmlyZSh4LCB5KTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcnRpY2xlQnJpbmdUb1RvcClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbGl2ZS5wdXNoKHBhcnRpY2xlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWxpdmUudW5zaGlmdChwYXJ0aWNsZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVtaXRDYWxsYmFjaylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q2FsbGJhY2suY2FsbCh0aGlzLmVtaXRDYWxsYmFja1Njb3BlLCBwYXJ0aWNsZSwgdGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmF0TGltaXQoKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJ0aWNsZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHRoaXMgZW1pdHRlciBhbmQgaXRzIHBhcnRpY2xlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3ByZVVwZGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aW1lIC0gVGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGdlbmVyYXRlZCBieSB0aGUgUmVxdWVzdCBBbmltYXRpb24gRnJhbWUgb3IgU2V0VGltZW91dC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lLCBpbiBtcywgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCBmcmFtZS5cclxuICAgICAqL1xyXG4gICAgcHJlVXBkYXRlOiBmdW5jdGlvbiAodGltZSwgZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFNjYWxlIHRoZSBkZWx0YVxyXG4gICAgICAgIGRlbHRhICo9IHRoaXMudGltZVNjYWxlO1xyXG5cclxuICAgICAgICB2YXIgc3RlcCA9IChkZWx0YSAvIDEwMDApO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50cmFja1Zpc2libGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnZpc2libGUgPSB0aGlzLmZvbGxvdy52aXNpYmxlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIEFueSBwYXJ0aWNsZSBwcm9jZXNzb3JzP1xyXG4gICAgICAgIHZhciBwcm9jZXNzb3JzID0gdGhpcy5tYW5hZ2VyLmdldFByb2Nlc3NvcnMoKTtcclxuXHJcbiAgICAgICAgdmFyIHBhcnRpY2xlcyA9IHRoaXMuYWxpdmU7XHJcbiAgICAgICAgdmFyIGRlYWQgPSB0aGlzLmRlYWQ7XHJcblxyXG4gICAgICAgIHZhciBpID0gMDtcclxuICAgICAgICB2YXIgcmlwID0gW107XHJcbiAgICAgICAgdmFyIGxlbmd0aCA9IHBhcnRpY2xlcy5sZW5ndGg7XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBwYXJ0aWNsZSA9IHBhcnRpY2xlc1tpXTtcclxuXHJcbiAgICAgICAgICAgIC8vICB1cGRhdGUgcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHBhcnRpY2xlIGlzIG5vdyBkZWFkIChsaWZlQ3VycmVudCA8PSAwKVxyXG4gICAgICAgICAgICBpZiAocGFydGljbGUudXBkYXRlKGRlbHRhLCBzdGVwLCBwcm9jZXNzb3JzKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmlwLnB1c2goeyBpbmRleDogaSwgcGFydGljbGU6IHBhcnRpY2xlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgTW92ZSBkZWFkIHBhcnRpY2xlcyB0byB0aGUgZGVhZCBhcnJheVxyXG4gICAgICAgIGxlbmd0aCA9IHJpcC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGlmIChsZW5ndGggPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGRlYXRoQ2FsbGJhY2sgPSB0aGlzLmRlYXRoQ2FsbGJhY2s7XHJcbiAgICAgICAgICAgIHZhciBkZWF0aENhbGxiYWNrU2NvcGUgPSB0aGlzLmRlYXRoQ2FsbGJhY2tTY29wZTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoaSA9IGxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSByaXBbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIFJlbW92ZSBmcm9tIHBhcnRpY2xlcyBhcnJheVxyXG4gICAgICAgICAgICAgICAgcGFydGljbGVzLnNwbGljZShlbnRyeS5pbmRleCwgMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIEFkZCB0byBkZWFkIGFycmF5XHJcbiAgICAgICAgICAgICAgICBkZWFkLnB1c2goZW50cnkucGFydGljbGUpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vICBDYWxsYmFja1xyXG4gICAgICAgICAgICAgICAgaWYgKGRlYXRoQ2FsbGJhY2spXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVhdGhDYWxsYmFjay5jYWxsKGRlYXRoQ2FsbGJhY2tTY29wZSwgZW50cnkucGFydGljbGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGVudHJ5LnBhcnRpY2xlLnJlc2V0UG9zaXRpb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLm9uKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZnJlcXVlbmN5ID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0UGFydGljbGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5mcmVxdWVuY3kgPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fY291bnRlciAtPSBkZWx0YTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb3VudGVyIDw9IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdFBhcnRpY2xlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIGNvdW50ZXIgPSBmcmVxdWVuY3kgLSByZW1haW5lZCBmcm9tIHByZXZpb3VzIGRlbHRhXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jb3VudGVyID0gKHRoaXMuZnJlcXVlbmN5IC0gTWF0aC5hYnModGhpcy5fY291bnRlcikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgdGhlIGRpZmZlcmVuY2Ugb2YgdHdvIHBhcnRpY2xlcywgZm9yIHNvcnRpbmcgdGhlbSBieSBkZXB0aC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI2RlcHRoU29ydENhbGxiYWNrXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gYSAtIFRoZSBmaXJzdCBwYXJ0aWNsZS5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBiIC0gVGhlIHNlY29uZCBwYXJ0aWNsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgZGlmZmVyZW5jZSBvZiBhIGFuZCBiJ3MgeSBjb29yZGluYXRlcy5cclxuICAgICAqL1xyXG4gICAgZGVwdGhTb3J0Q2FsbGJhY2s6IGZ1bmN0aW9uIChhLCBiKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBhLnkgLSBiLnk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVFbWl0dGVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/ParticleEmitter.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/particles/ParticleEmitterManager.js":
/*!*********************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/particles/ParticleEmitterManager.js ***!
\*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar GravityWell = __webpack_require__(/*! ./GravityWell */ \"./node_modules/phaser/src/gameobjects/particles/GravityWell.js\");\r\nvar List = __webpack_require__(/*! ../../structs/List */ \"./node_modules/phaser/src/structs/List.js\");\r\nvar ParticleEmitter = __webpack_require__(/*! ./ParticleEmitter */ \"./node_modules/phaser/src/gameobjects/particles/ParticleEmitter.js\");\r\nvar Render = __webpack_require__(/*! ./ParticleManagerRender */ \"./node_modules/phaser/src/gameobjects/particles/ParticleManagerRender.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Particle Emitter Manager creates and controls {@link Phaser.GameObjects.Particles.ParticleEmitter Particle Emitters} and {@link Phaser.GameObjects.Particles.GravityWell Gravity Wells}.\r\n *\r\n * @class ParticleEmitterManager\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects.Particles\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Emitter Manager belongs.\r\n * @param {string} texture - The key of the Texture this Emitter Manager will use to render particles, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Emitter Manager will use to render particles.\r\n * @param {Phaser.Types.GameObjects.Particles.ParticleEmitterConfig|Phaser.Types.GameObjects.Particles.ParticleEmitterConfig[]} [emitters] - Configuration settings for one or more emitters to create.\r\n */\r\nvar ParticleEmitterManager = new Class({\r\n\r\n Extends: GameObject,\r\n\r\n Mixins: [\r\n Components.Depth,\r\n Components.Mask,\r\n Components.Pipeline,\r\n Components.Transform,\r\n Components.Visible,\r\n Render\r\n ],\r\n\r\n initialize:\r\n\r\n // frame is optional and can contain the emitters array or object if skipped\r\n function ParticleEmitterManager (scene, texture, frame, emitters)\r\n {\r\n GameObject.call(this, scene, 'ParticleEmitterManager');\r\n\r\n /**\r\n * The blend mode applied to all emitters and particles.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitterManager#blendMode\r\n * @type {integer}\r\n * @default -1\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this.blendMode = -1;\r\n\r\n /**\r\n * The time scale applied to all emitters and particles, affecting flow rate, lifespan, and movement.\r\n * Values larger than 1 are faster than normal.\r\n * This is multiplied with any timeScale set on each individual emitter.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitterManager#timeScale\r\n * @type {number}\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n this.timeScale = 1;\r\n\r\n /**\r\n * The texture used to render this Emitter Manager's particles.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitterManager#texture\r\n * @type {Phaser.Textures.Texture}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.texture = null;\r\n\r\n /**\r\n * The texture frame used to render this Emitter Manager's particles.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitterManager#frame\r\n * @type {Phaser.Textures.Frame}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.frame = null;\r\n\r\n /**\r\n * Names of this Emitter Manager's texture frames.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitterManager#frameNames\r\n * @type {string[]}\r\n * @since 3.0.0\r\n */\r\n this.frameNames = [];\r\n\r\n // frame is optional and can contain the emitters array or object if skipped\r\n if (frame !== null && (typeof frame === 'object' || Array.isArray(frame)))\r\n {\r\n emitters = frame;\r\n frame = null;\r\n }\r\n\r\n this.setTexture(texture, frame);\r\n\r\n this.initPipeline();\r\n\r\n /**\r\n * A list of Emitters being managed by this Emitter Manager.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitterManager#emitters\r\n * @type {Phaser.Structs.List.<Phaser.GameObjects.Particles.ParticleEmitter>}\r\n * @since 3.0.0\r\n */\r\n this.emitters = new List(this);\r\n\r\n /**\r\n * A list of Gravity Wells being managed by this Emitter Manager.\r\n *\r\n * @name Phaser.GameObjects.Particles.ParticleEmitterManager#wells\r\n * @type {Phaser.Structs.List.<Phaser.GameObjects.Particles.GravityWell>}\r\n * @since 3.0.0\r\n */\r\n this.wells = new List(this);\r\n\r\n if (emitters)\r\n {\r\n // An array of emitter configs?\r\n if (!Array.isArray(emitters))\r\n {\r\n emitters = [ emitters ];\r\n }\r\n\r\n for (var i = 0; i < emitters.length; i++)\r\n {\r\n this.createEmitter(emitters[i]);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Sets the texture and frame this Emitter Manager will use to render with.\r\n *\r\n * Textures are referenced by their string-based keys, as stored in the Texture Manager.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitterManager#setTexture\r\n * @since 3.0.0\r\n *\r\n * @param {string} key - The key of the texture to be used, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - The name or index of the frame within the Texture.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitterManager} This Emitter Manager.\r\n */\r\n setTexture: function (key, frame)\r\n {\r\n this.texture = this.scene.sys.textures.get(key);\r\n\r\n return this.setFrame(frame);\r\n },\r\n\r\n /**\r\n * Sets the frame this Emitter Manager will use to render with.\r\n *\r\n * The Frame has to belong to the current Texture being used.\r\n *\r\n * It can be either a string or an index.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitterManager#setFrame\r\n * @since 3.0.0\r\n *\r\n * @param {(string|integer)} [frame] - The name or index of the frame within the Texture.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitterManager} This Emitter Manager.\r\n */\r\n setFrame: function (frame)\r\n {\r\n this.frame = this.texture.get(frame);\r\n\r\n var frames = this.texture.getFramesFromTextureSource(this.frame.sourceIndex);\r\n\r\n var names = [];\r\n\r\n frames.forEach(function (sourceFrame)\r\n {\r\n names.push(sourceFrame.name);\r\n });\r\n\r\n this.frameNames = names;\r\n\r\n this.defaultFrame = this.frame;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Assigns texture frames to an emitter.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitterManager#setEmitterFrames\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Textures.Frame|Phaser.Textures.Frame[])} frames - The texture frames.\r\n * @param {Phaser.GameObjects.Particles.ParticleEmitter} emitter - The particle emitter to modify.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitterManager} This Emitter Manager.\r\n */\r\n setEmitterFrames: function (frames, emitter)\r\n {\r\n if (!Array.isArray(frames))\r\n {\r\n frames = [ frames ];\r\n }\r\n\r\n var out = emitter.frames;\r\n\r\n out.length = 0;\r\n\r\n for (var i = 0; i < frames.length; i++)\r\n {\r\n var frame = frames[i];\r\n\r\n if (this.frameNames.indexOf(frame) !== -1)\r\n {\r\n out.push(this.texture.get(frame));\r\n }\r\n }\r\n\r\n if (out.length > 0)\r\n {\r\n emitter.defaultFrame = out[0];\r\n }\r\n else\r\n {\r\n emitter.defaultFrame = this.defaultFrame;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Adds an existing Particle Emitter to this Emitter Manager.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitterManager#addEmitter\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Particles.ParticleEmitter} emitter - The Particle Emitter to add to this Emitter Manager.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} The Particle Emitter that was added to this Emitter Manager.\r\n */\r\n addEmitter: function (emitter)\r\n {\r\n return this.emitters.add(emitter);\r\n },\r\n\r\n /**\r\n * Creates a new Particle Emitter object, adds it to this Emitter Manager and returns a reference to it.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitterManager#createEmitter\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.ParticleEmitterConfig} config - Configuration settings for the Particle Emitter to create.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitter} The Particle Emitter that was created.\r\n */\r\n createEmitter: function (config)\r\n {\r\n return this.addEmitter(new ParticleEmitter(this, config));\r\n },\r\n\r\n /**\r\n * Adds an existing Gravity Well object to this Emitter Manager.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitterManager#addGravityWell\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Particles.GravityWell} well - The Gravity Well to add to this Emitter Manager.\r\n *\r\n * @return {Phaser.GameObjects.Particles.GravityWell} The Gravity Well that was added to this Emitter Manager.\r\n */\r\n addGravityWell: function (well)\r\n {\r\n return this.wells.add(well);\r\n },\r\n\r\n /**\r\n * Creates a new Gravity Well, adds it to this Emitter Manager and returns a reference to it.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitterManager#createGravityWell\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.GravityWellConfig} config - Configuration settings for the Gravity Well to create.\r\n *\r\n * @return {Phaser.GameObjects.Particles.GravityWell} The Gravity Well that was created.\r\n */\r\n createGravityWell: function (config)\r\n {\r\n return this.addGravityWell(new GravityWell(config));\r\n },\r\n\r\n /**\r\n * Emits particles from each active emitter.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitterManager#emitParticle\r\n * @since 3.0.0\r\n *\r\n * @param {integer} [count] - The number of particles to release from each emitter. The default is the emitter's own {@link Phaser.GameObjects.Particles.ParticleEmitter#quantity}.\r\n * @param {number} [x] - The x-coordinate to to emit particles from. The default is the x-coordinate of the emitter's current location.\r\n * @param {number} [y] - The y-coordinate to to emit particles from. The default is the y-coordinate of the emitter's current location.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitterManager} This Emitter Manager.\r\n */\r\n emitParticle: function (count, x, y)\r\n {\r\n var emitters = this.emitters.list;\r\n\r\n for (var i = 0; i < emitters.length; i++)\r\n {\r\n var emitter = emitters[i];\r\n\r\n if (emitter.active)\r\n {\r\n emitter.emitParticle(count, x, y);\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Emits particles from each active emitter.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitterManager#emitParticleAt\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x] - The x-coordinate to to emit particles from. The default is the x-coordinate of the emitter's current location.\r\n * @param {number} [y] - The y-coordinate to to emit particles from. The default is the y-coordinate of the emitter's current location.\r\n * @param {integer} [count] - The number of particles to release from each emitter. The default is the emitter's own {@link Phaser.GameObjects.Particles.ParticleEmitter#quantity}.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitterManager} This Emitter Manager.\r\n */\r\n emitParticleAt: function (x, y, count)\r\n {\r\n return this.emitParticle(count, x, y);\r\n },\r\n\r\n /**\r\n * Pauses this Emitter Manager.\r\n *\r\n * This has the effect of pausing all emitters, and all particles of those emitters, currently under its control.\r\n *\r\n * The particles will still render, but they will not have any of their logic updated.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitterManager#pause\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitterManager} This Emitter Manager.\r\n */\r\n pause: function ()\r\n {\r\n this.active = false;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Resumes this Emitter Manager, should it have been previously paused.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitterManager#resume\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitterManager} This Emitter Manager.\r\n */\r\n resume: function ()\r\n {\r\n this.active = true;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Gets all active particle processors (gravity wells).\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitterManager#getProcessors\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Particles.GravityWell[]} - The active gravity wells.\r\n */\r\n getProcessors: function ()\r\n {\r\n return this.wells.getAll('active', true);\r\n },\r\n\r\n /**\r\n * Updates all active emitters.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitterManager#preUpdate\r\n * @since 3.0.0\r\n *\r\n * @param {integer} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n */\r\n preUpdate: function (time, delta)\r\n {\r\n // Scale the delta\r\n delta *= this.timeScale;\r\n\r\n var emitters = this.emitters.list;\r\n\r\n for (var i = 0; i < emitters.length; i++)\r\n {\r\n var emitter = emitters[i];\r\n\r\n if (emitter.active)\r\n {\r\n emitter.preUpdate(time, delta);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * A NOOP method so you can pass an EmitterManager to a Container.\r\n * Calling this method will do nothing. It is intentionally empty.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitterManager#setAlpha\r\n * @private\r\n * @since 3.10.0\r\n */\r\n setAlpha: function ()\r\n {\r\n },\r\n\r\n /**\r\n * A NOOP method so you can pass an EmitterManager to a Container.\r\n * Calling this method will do nothing. It is intentionally empty.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitterManager#setScrollFactor\r\n * @private\r\n * @since 3.10.0\r\n */\r\n setScrollFactor: function ()\r\n {\r\n },\r\n\r\n /**\r\n * A NOOP method so you can pass an EmitterManager to a Container.\r\n * Calling this method will do nothing. It is intentionally empty.\r\n *\r\n * @method Phaser.GameObjects.Particles.ParticleEmitterManager#setBlendMode\r\n * @private\r\n * @since 3.15.0\r\n */\r\n setBlendMode: function ()\r\n {\r\n }\r\n\r\n});\r\n\r\nmodule.exports = ParticleEmitterManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvUGFydGljbGVFbWl0dGVyTWFuYWdlci5qcz82MGNlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLGdGQUFlO0FBQ3hDLGlCQUFpQixtQkFBTyxDQUFDLDBFQUFlO0FBQ3hDLGtCQUFrQixtQkFBTyxDQUFDLHFGQUFlO0FBQ3pDLFdBQVcsbUJBQU8sQ0FBQyxxRUFBb0I7QUFDdkMsc0JBQXNCLG1CQUFPLENBQUMsNkZBQW1CO0FBQ2pELGFBQWEsbUJBQU8sQ0FBQyx5R0FBeUI7O0FBRTlDO0FBQ0E7QUFDQSxvREFBb0QscUVBQXFFLE1BQU0sNkRBQTZEO0FBQzVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsT0FBTztBQUNsQixXQUFXLGlCQUFpQjtBQUM1QixXQUFXLG9IQUFvSDtBQUMvSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJCQUEyQixxQkFBcUI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxpQkFBaUI7QUFDaEM7QUFDQSxnQkFBZ0Isb0RBQW9EO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLG9EQUFvRDtBQUNwRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdEQUFnRDtBQUMvRCxlQUFlLDZDQUE2QztBQUM1RDtBQUNBLGdCQUFnQixvREFBb0Q7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw2Q0FBNkM7QUFDNUQ7QUFDQSxnQkFBZ0IsNkNBQTZDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHlEQUF5RDtBQUN4RTtBQUNBLGdCQUFnQiw2Q0FBNkM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUseUNBQXlDO0FBQ3hEO0FBQ0EsZ0JBQWdCLHlDQUF5QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxREFBcUQ7QUFDcEU7QUFDQSxnQkFBZ0IseUNBQXlDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVEsbUdBQW1HLDREQUE0RDtBQUN0TCxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG9EQUFvRDtBQUNwRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIscUJBQXFCO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVEsbUdBQW1HLDREQUE0RDtBQUN0TDtBQUNBLGdCQUFnQixvREFBb0Q7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG9EQUFvRDtBQUNwRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG9EQUFvRDtBQUNwRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDJDQUEyQztBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3BhcnRpY2xlcy9QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ29tcG9uZW50cyA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMnKTtcclxudmFyIEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Jyk7XHJcbnZhciBHcmF2aXR5V2VsbCA9IHJlcXVpcmUoJy4vR3Jhdml0eVdlbGwnKTtcclxudmFyIExpc3QgPSByZXF1aXJlKCcuLi8uLi9zdHJ1Y3RzL0xpc3QnKTtcclxudmFyIFBhcnRpY2xlRW1pdHRlciA9IHJlcXVpcmUoJy4vUGFydGljbGVFbWl0dGVyJyk7XHJcbnZhciBSZW5kZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlTWFuYWdlclJlbmRlcicpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBQYXJ0aWNsZSBFbWl0dGVyIE1hbmFnZXIgY3JlYXRlcyBhbmQgY29udHJvbHMge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyIFBhcnRpY2xlIEVtaXR0ZXJzfSBhbmQge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuR3Jhdml0eVdlbGwgR3Jhdml0eSBXZWxsc30uXHJcbiAqXHJcbiAqIEBjbGFzcyBQYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGhcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuTWFza1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5QaXBlbGluZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVmlzaWJsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBFbWl0dGVyIE1hbmFnZXIgYmVsb25ncy5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRleHR1cmUgLSBUaGUga2V5IG9mIHRoZSBUZXh0dXJlIHRoaXMgRW1pdHRlciBNYW5hZ2VyIHdpbGwgdXNlIHRvIHJlbmRlciBwYXJ0aWNsZXMsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBBbiBvcHRpb25hbCBmcmFtZSBmcm9tIHRoZSBUZXh0dXJlIHRoaXMgRW1pdHRlciBNYW5hZ2VyIHdpbGwgdXNlIHRvIHJlbmRlciBwYXJ0aWNsZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJDb25maWd8UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJDb25maWdbXX0gW2VtaXR0ZXJzXSAtIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIG9uZSBvciBtb3JlIGVtaXR0ZXJzIHRvIGNyZWF0ZS5cclxuICovXHJcbnZhciBQYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBHYW1lT2JqZWN0LFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIENvbXBvbmVudHMuRGVwdGgsXHJcbiAgICAgICAgQ29tcG9uZW50cy5NYXNrLFxyXG4gICAgICAgIENvbXBvbmVudHMuUGlwZWxpbmUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UcmFuc2Zvcm0sXHJcbiAgICAgICAgQ29tcG9uZW50cy5WaXNpYmxlLFxyXG4gICAgICAgIFJlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIC8vICBmcmFtZSBpcyBvcHRpb25hbCBhbmQgY2FuIGNvbnRhaW4gdGhlIGVtaXR0ZXJzIGFycmF5IG9yIG9iamVjdCBpZiBza2lwcGVkXHJcbiAgICBmdW5jdGlvbiBQYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyIChzY2VuZSwgdGV4dHVyZSwgZnJhbWUsIGVtaXR0ZXJzKVxyXG4gICAge1xyXG4gICAgICAgIEdhbWVPYmplY3QuY2FsbCh0aGlzLCBzY2VuZSwgJ1BhcnRpY2xlRW1pdHRlck1hbmFnZXInKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGJsZW5kIG1vZGUgYXBwbGllZCB0byBhbGwgZW1pdHRlcnMgYW5kIHBhcnRpY2xlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlciNibGVuZE1vZGVcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAtMVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5ibGVuZE1vZGUgPSAtMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRpbWUgc2NhbGUgYXBwbGllZCB0byBhbGwgZW1pdHRlcnMgYW5kIHBhcnRpY2xlcywgYWZmZWN0aW5nIGZsb3cgcmF0ZSwgbGlmZXNwYW4sIGFuZCBtb3ZlbWVudC5cclxuICAgICAgICAgKiBWYWx1ZXMgbGFyZ2VyIHRoYW4gMSBhcmUgZmFzdGVyIHRoYW4gbm9ybWFsLlxyXG4gICAgICAgICAqIFRoaXMgaXMgbXVsdGlwbGllZCB3aXRoIGFueSB0aW1lU2NhbGUgc2V0IG9uIGVhY2ggaW5kaXZpZHVhbCBlbWl0dGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyI3RpbWVTY2FsZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGltZVNjYWxlID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRleHR1cmUgdXNlZCB0byByZW5kZXIgdGhpcyBFbWl0dGVyIE1hbmFnZXIncyBwYXJ0aWNsZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlck1hbmFnZXIjdGV4dHVyZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRleHR1cmUgZnJhbWUgdXNlZCB0byByZW5kZXIgdGhpcyBFbWl0dGVyIE1hbmFnZXIncyBwYXJ0aWNsZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlck1hbmFnZXIjZnJhbWVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlRleHR1cmVzLkZyYW1lfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZyYW1lID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTmFtZXMgb2YgdGhpcyBFbWl0dGVyIE1hbmFnZXIncyB0ZXh0dXJlIGZyYW1lcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlciNmcmFtZU5hbWVzXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ1tdfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZnJhbWVOYW1lcyA9IFtdO1xyXG5cclxuICAgICAgICAvLyAgZnJhbWUgaXMgb3B0aW9uYWwgYW5kIGNhbiBjb250YWluIHRoZSBlbWl0dGVycyBhcnJheSBvciBvYmplY3QgaWYgc2tpcHBlZFxyXG4gICAgICAgIGlmIChmcmFtZSAhPT0gbnVsbCAmJiAodHlwZW9mIGZyYW1lID09PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGZyYW1lKSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBlbWl0dGVycyA9IGZyYW1lO1xyXG4gICAgICAgICAgICBmcmFtZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFRleHR1cmUodGV4dHVyZSwgZnJhbWUpO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRQaXBlbGluZSgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGxpc3Qgb2YgRW1pdHRlcnMgYmVpbmcgbWFuYWdlZCBieSB0aGlzIEVtaXR0ZXIgTWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlciNlbWl0dGVyc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU3RydWN0cy5MaXN0LjxQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlcj59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5lbWl0dGVycyA9IG5ldyBMaXN0KHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGxpc3Qgb2YgR3Jhdml0eSBXZWxscyBiZWluZyBtYW5hZ2VkIGJ5IHRoaXMgRW1pdHRlciBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyI3dlbGxzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TdHJ1Y3RzLkxpc3QuPFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuR3Jhdml0eVdlbGw+fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMud2VsbHMgPSBuZXcgTGlzdCh0aGlzKTtcclxuXHJcbiAgICAgICAgaWYgKGVtaXR0ZXJzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIEFuIGFycmF5IG9mIGVtaXR0ZXIgY29uZmlncz9cclxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGVtaXR0ZXJzKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZW1pdHRlcnMgPSBbIGVtaXR0ZXJzIF07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW1pdHRlcnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRW1pdHRlcihlbWl0dGVyc1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdGV4dHVyZSBhbmQgZnJhbWUgdGhpcyBFbWl0dGVyIE1hbmFnZXIgd2lsbCB1c2UgdG8gcmVuZGVyIHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogVGV4dHVyZXMgYXJlIHJlZmVyZW5jZWQgYnkgdGhlaXIgc3RyaW5nLWJhc2VkIGtleXMsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyI3NldFRleHR1cmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSB0ZXh0dXJlIHRvIGJlIHVzZWQsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWVdIC0gVGhlIG5hbWUgb3IgaW5kZXggb2YgdGhlIGZyYW1lIHdpdGhpbiB0aGUgVGV4dHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlck1hbmFnZXJ9IFRoaXMgRW1pdHRlciBNYW5hZ2VyLlxyXG4gICAgICovXHJcbiAgICBzZXRUZXh0dXJlOiBmdW5jdGlvbiAoa2V5LCBmcmFtZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnRleHR1cmUgPSB0aGlzLnNjZW5lLnN5cy50ZXh0dXJlcy5nZXQoa2V5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0RnJhbWUoZnJhbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGZyYW1lIHRoaXMgRW1pdHRlciBNYW5hZ2VyIHdpbGwgdXNlIHRvIHJlbmRlciB3aXRoLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBGcmFtZSBoYXMgdG8gYmVsb25nIHRvIHRoZSBjdXJyZW50IFRleHR1cmUgYmVpbmcgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBJdCBjYW4gYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGFuIGluZGV4LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyI3NldEZyYW1lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBUaGUgbmFtZSBvciBpbmRleCBvZiB0aGUgZnJhbWUgd2l0aGluIHRoZSBUZXh0dXJlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlcn0gVGhpcyBFbWl0dGVyIE1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIHNldEZyYW1lOiBmdW5jdGlvbiAoZnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5mcmFtZSA9IHRoaXMudGV4dHVyZS5nZXQoZnJhbWUpO1xyXG5cclxuICAgICAgICB2YXIgZnJhbWVzID0gdGhpcy50ZXh0dXJlLmdldEZyYW1lc0Zyb21UZXh0dXJlU291cmNlKHRoaXMuZnJhbWUuc291cmNlSW5kZXgpO1xyXG5cclxuICAgICAgICB2YXIgbmFtZXMgPSBbXTtcclxuXHJcbiAgICAgICAgZnJhbWVzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZUZyYW1lKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZXMucHVzaChzb3VyY2VGcmFtZS5uYW1lKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZU5hbWVzID0gbmFtZXM7XHJcblxyXG4gICAgICAgIHRoaXMuZGVmYXVsdEZyYW1lID0gdGhpcy5mcmFtZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXNzaWducyB0ZXh0dXJlIGZyYW1lcyB0byBhbiBlbWl0dGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyI3NldEVtaXR0ZXJGcmFtZXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5UZXh0dXJlcy5GcmFtZXxQaGFzZXIuVGV4dHVyZXMuRnJhbWVbXSl9IGZyYW1lcyAtIFRoZSB0ZXh0dXJlIGZyYW1lcy5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IGVtaXR0ZXIgLSBUaGUgcGFydGljbGUgZW1pdHRlciB0byBtb2RpZnkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyfSBUaGlzIEVtaXR0ZXIgTWFuYWdlci5cclxuICAgICAqL1xyXG4gICAgc2V0RW1pdHRlckZyYW1lczogZnVuY3Rpb24gKGZyYW1lcywgZW1pdHRlcilcclxuICAgIHtcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZnJhbWVzKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZyYW1lcyA9IFsgZnJhbWVzIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgb3V0ID0gZW1pdHRlci5mcmFtZXM7XHJcblxyXG4gICAgICAgIG91dC5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBmcmFtZSA9IGZyYW1lc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZyYW1lTmFtZXMuaW5kZXhPZihmcmFtZSkgIT09IC0xKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBvdXQucHVzaCh0aGlzLnRleHR1cmUuZ2V0KGZyYW1lKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvdXQubGVuZ3RoID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGVtaXR0ZXIuZGVmYXVsdEZyYW1lID0gb3V0WzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBlbWl0dGVyLmRlZmF1bHRGcmFtZSA9IHRoaXMuZGVmYXVsdEZyYW1lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhbiBleGlzdGluZyBQYXJ0aWNsZSBFbWl0dGVyIHRvIHRoaXMgRW1pdHRlciBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyI2FkZEVtaXR0ZXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IGVtaXR0ZXIgLSBUaGUgUGFydGljbGUgRW1pdHRlciB0byBhZGQgdG8gdGhpcyBFbWl0dGVyIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoZSBQYXJ0aWNsZSBFbWl0dGVyIHRoYXQgd2FzIGFkZGVkIHRvIHRoaXMgRW1pdHRlciBNYW5hZ2VyLlxyXG4gICAgICovXHJcbiAgICBhZGRFbWl0dGVyOiBmdW5jdGlvbiAoZW1pdHRlcilcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbWl0dGVycy5hZGQoZW1pdHRlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBQYXJ0aWNsZSBFbWl0dGVyIG9iamVjdCwgYWRkcyBpdCB0byB0aGlzIEVtaXR0ZXIgTWFuYWdlciBhbmQgcmV0dXJucyBhIHJlZmVyZW5jZSB0byBpdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlciNjcmVhdGVFbWl0dGVyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyQ29uZmlnfSBjb25maWcgLSBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB0aGUgUGFydGljbGUgRW1pdHRlciB0byBjcmVhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJ9IFRoZSBQYXJ0aWNsZSBFbWl0dGVyIHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUVtaXR0ZXI6IGZ1bmN0aW9uIChjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRW1pdHRlcihuZXcgUGFydGljbGVFbWl0dGVyKHRoaXMsIGNvbmZpZykpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYW4gZXhpc3RpbmcgR3Jhdml0eSBXZWxsIG9iamVjdCB0byB0aGlzIEVtaXR0ZXIgTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlciNhZGRHcmF2aXR5V2VsbFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkdyYXZpdHlXZWxsfSB3ZWxsIC0gVGhlIEdyYXZpdHkgV2VsbCB0byBhZGQgdG8gdGhpcyBFbWl0dGVyIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5HcmF2aXR5V2VsbH0gVGhlIEdyYXZpdHkgV2VsbCB0aGF0IHdhcyBhZGRlZCB0byB0aGlzIEVtaXR0ZXIgTWFuYWdlci5cclxuICAgICAqL1xyXG4gICAgYWRkR3Jhdml0eVdlbGw6IGZ1bmN0aW9uICh3ZWxsKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLndlbGxzLmFkZCh3ZWxsKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEdyYXZpdHkgV2VsbCwgYWRkcyBpdCB0byB0aGlzIEVtaXR0ZXIgTWFuYWdlciBhbmQgcmV0dXJucyBhIHJlZmVyZW5jZSB0byBpdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlciNjcmVhdGVHcmF2aXR5V2VsbFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuUGFydGljbGVzLkdyYXZpdHlXZWxsQ29uZmlnfSBjb25maWcgLSBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB0aGUgR3Jhdml0eSBXZWxsIHRvIGNyZWF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkdyYXZpdHlXZWxsfSBUaGUgR3Jhdml0eSBXZWxsIHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUdyYXZpdHlXZWxsOiBmdW5jdGlvbiAoY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZEdyYXZpdHlXZWxsKG5ldyBHcmF2aXR5V2VsbChjb25maWcpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0cyBwYXJ0aWNsZXMgZnJvbSBlYWNoIGFjdGl2ZSBlbWl0dGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyI2VtaXRQYXJ0aWNsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbY291bnRdIC0gVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdG8gcmVsZWFzZSBmcm9tIGVhY2ggZW1pdHRlci4gVGhlIGRlZmF1bHQgaXMgdGhlIGVtaXR0ZXIncyBvd24ge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3F1YW50aXR5fS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeF0gLSBUaGUgeC1jb29yZGluYXRlIHRvIHRvIGVtaXQgcGFydGljbGVzIGZyb20uIFRoZSBkZWZhdWx0IGlzIHRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVtaXR0ZXIncyBjdXJyZW50IGxvY2F0aW9uLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5XSAtIFRoZSB5LWNvb3JkaW5hdGUgdG8gdG8gZW1pdCBwYXJ0aWNsZXMgZnJvbS4gVGhlIGRlZmF1bHQgaXMgdGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW1pdHRlcidzIGN1cnJlbnQgbG9jYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyfSBUaGlzIEVtaXR0ZXIgTWFuYWdlci5cclxuICAgICAqL1xyXG4gICAgZW1pdFBhcnRpY2xlOiBmdW5jdGlvbiAoY291bnQsIHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGVtaXR0ZXJzID0gdGhpcy5lbWl0dGVycy5saXN0O1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVtaXR0ZXJzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGVtaXR0ZXIgPSBlbWl0dGVyc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChlbWl0dGVyLmFjdGl2ZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZW1pdHRlci5lbWl0UGFydGljbGUoY291bnQsIHgsIHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0cyBwYXJ0aWNsZXMgZnJvbSBlYWNoIGFjdGl2ZSBlbWl0dGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyI2VtaXRQYXJ0aWNsZUF0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3hdIC0gVGhlIHgtY29vcmRpbmF0ZSB0byB0byBlbWl0IHBhcnRpY2xlcyBmcm9tLiBUaGUgZGVmYXVsdCBpcyB0aGUgeC1jb29yZGluYXRlIG9mIHRoZSBlbWl0dGVyJ3MgY3VycmVudCBsb2NhdGlvbi5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeV0gLSBUaGUgeS1jb29yZGluYXRlIHRvIHRvIGVtaXQgcGFydGljbGVzIGZyb20uIFRoZSBkZWZhdWx0IGlzIHRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGVtaXR0ZXIncyBjdXJyZW50IGxvY2F0aW9uLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbY291bnRdIC0gVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdG8gcmVsZWFzZSBmcm9tIGVhY2ggZW1pdHRlci4gVGhlIGRlZmF1bHQgaXMgdGhlIGVtaXR0ZXIncyBvd24ge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyI3F1YW50aXR5fS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlck1hbmFnZXJ9IFRoaXMgRW1pdHRlciBNYW5hZ2VyLlxyXG4gICAgICovXHJcbiAgICBlbWl0UGFydGljbGVBdDogZnVuY3Rpb24gKHgsIHksIGNvdW50KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVtaXRQYXJ0aWNsZShjb3VudCwgeCwgeSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGF1c2VzIHRoaXMgRW1pdHRlciBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgcGF1c2luZyBhbGwgZW1pdHRlcnMsIGFuZCBhbGwgcGFydGljbGVzIG9mIHRob3NlIGVtaXR0ZXJzLCBjdXJyZW50bHkgdW5kZXIgaXRzIGNvbnRyb2wuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHBhcnRpY2xlcyB3aWxsIHN0aWxsIHJlbmRlciwgYnV0IHRoZXkgd2lsbCBub3QgaGF2ZSBhbnkgb2YgdGhlaXIgbG9naWMgdXBkYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlciNwYXVzZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyfSBUaGlzIEVtaXR0ZXIgTWFuYWdlci5cclxuICAgICAqL1xyXG4gICAgcGF1c2U6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzdW1lcyB0aGlzIEVtaXR0ZXIgTWFuYWdlciwgc2hvdWxkIGl0IGhhdmUgYmVlbiBwcmV2aW91c2x5IHBhdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlciNyZXN1bWVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlcn0gVGhpcyBFbWl0dGVyIE1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIHJlc3VtZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIGFjdGl2ZSBwYXJ0aWNsZSBwcm9jZXNzb3JzIChncmF2aXR5IHdlbGxzKS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlciNnZXRQcm9jZXNzb3JzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLkdyYXZpdHlXZWxsW119IC0gVGhlIGFjdGl2ZSBncmF2aXR5IHdlbGxzLlxyXG4gICAgICovXHJcbiAgICBnZXRQcm9jZXNzb3JzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLndlbGxzLmdldEFsbCgnYWN0aXZlJywgdHJ1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyBhbGwgYWN0aXZlIGVtaXR0ZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyI3ByZVVwZGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aW1lIC0gVGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGdlbmVyYXRlZCBieSB0aGUgUmVxdWVzdCBBbmltYXRpb24gRnJhbWUgb3IgU2V0VGltZW91dC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lLCBpbiBtcywgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCBmcmFtZS5cclxuICAgICAqL1xyXG4gICAgcHJlVXBkYXRlOiBmdW5jdGlvbiAodGltZSwgZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFNjYWxlIHRoZSBkZWx0YVxyXG4gICAgICAgIGRlbHRhICo9IHRoaXMudGltZVNjYWxlO1xyXG5cclxuICAgICAgICB2YXIgZW1pdHRlcnMgPSB0aGlzLmVtaXR0ZXJzLmxpc3Q7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW1pdHRlcnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZW1pdHRlciA9IGVtaXR0ZXJzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVtaXR0ZXIuYWN0aXZlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBlbWl0dGVyLnByZVVwZGF0ZSh0aW1lLCBkZWx0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBOT09QIG1ldGhvZCBzbyB5b3UgY2FuIHBhc3MgYW4gRW1pdHRlck1hbmFnZXIgdG8gYSBDb250YWluZXIuXHJcbiAgICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgZG8gbm90aGluZy4gSXQgaXMgaW50ZW50aW9uYWxseSBlbXB0eS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlciNzZXRBbHBoYVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgc2V0QWxwaGE6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBOT09QIG1ldGhvZCBzbyB5b3UgY2FuIHBhc3MgYW4gRW1pdHRlck1hbmFnZXIgdG8gYSBDb250YWluZXIuXHJcbiAgICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgZG8gbm90aGluZy4gSXQgaXMgaW50ZW50aW9uYWxseSBlbXB0eS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlciNzZXRTY3JvbGxGYWN0b3JcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHNldFNjcm9sbEZhY3RvcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIE5PT1AgbWV0aG9kIHNvIHlvdSBjYW4gcGFzcyBhbiBFbWl0dGVyTWFuYWdlciB0byBhIENvbnRhaW5lci5cclxuICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBkbyBub3RoaW5nLiBJdCBpcyBpbnRlbnRpb25hbGx5IGVtcHR5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyI3NldEJsZW5kTW9kZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjE1LjBcclxuICAgICAqL1xyXG4gICAgc2V0QmxlbmRNb2RlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlRW1pdHRlck1hbmFnZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/ParticleEmitterManager.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/particles/ParticleManagerCanvasRenderer.js":
/*!****************************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/particles/ParticleManagerCanvasRenderer.js ***!
\****************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Particles.EmitterManager#renderCanvas\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Particles.ParticleEmitterManager} emitterManager - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar ParticleManagerCanvasRenderer = function (renderer, emitterManager, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var emitters = emitterManager.emitters.list;\r\n var emittersLength = emitters.length;\r\n\r\n if (emittersLength === 0)\r\n {\r\n return;\r\n }\r\n\r\n var camMatrix = renderer._tempMatrix1.copyFrom(camera.matrix);\r\n var calcMatrix = renderer._tempMatrix2;\r\n var particleMatrix = renderer._tempMatrix3;\r\n var managerMatrix = renderer._tempMatrix4.applyITRS(emitterManager.x, emitterManager.y, emitterManager.rotation, emitterManager.scaleX, emitterManager.scaleY);\r\n\r\n camMatrix.multiply(managerMatrix);\r\n\r\n var roundPixels = camera.roundPixels;\r\n\r\n var ctx = renderer.currentContext;\r\n\r\n ctx.save();\r\n\r\n for (var e = 0; e < emittersLength; e++)\r\n {\r\n var emitter = emitters[e];\r\n var particles = emitter.alive;\r\n var particleCount = particles.length;\r\n\r\n if (!emitter.visible || particleCount === 0)\r\n {\r\n continue;\r\n }\r\n\r\n var scrollX = camera.scrollX * emitter.scrollFactorX;\r\n var scrollY = camera.scrollY * emitter.scrollFactorY;\r\n\r\n if (parentMatrix)\r\n {\r\n // Multiply the camera by the parent matrix\r\n camMatrix.multiplyWithOffset(parentMatrix, -scrollX, -scrollY);\r\n\r\n scrollX = 0;\r\n scrollY = 0;\r\n }\r\n\r\n ctx.globalCompositeOperation = renderer.blendModes[emitter.blendMode];\r\n\r\n for (var i = 0; i < particleCount; i++)\r\n {\r\n var particle = particles[i];\r\n\r\n var alpha = particle.alpha * camera.alpha;\r\n\r\n if (alpha <= 0)\r\n {\r\n continue;\r\n }\r\n\r\n var frame = particle.frame;\r\n var cd = frame.canvasData;\r\n\r\n var x = -(frame.halfWidth);\r\n var y = -(frame.halfHeight);\r\n\r\n particleMatrix.applyITRS(0, 0, particle.rotation, particle.scaleX, particle.scaleY);\r\n\r\n particleMatrix.e = particle.x - scrollX;\r\n particleMatrix.f = particle.y - scrollY;\r\n\r\n camMatrix.multiply(particleMatrix, calcMatrix);\r\n\r\n ctx.globalAlpha = alpha;\r\n \r\n ctx.save();\r\n\r\n calcMatrix.copyToContext(ctx);\r\n\r\n if (roundPixels)\r\n {\r\n x = Math.round(x);\r\n y = Math.round(y);\r\n }\r\n\r\n ctx.imageSmoothingEnabled = !(!renderer.antialias || frame.source.scaleMode);\r\n\r\n ctx.drawImage(frame.source.image, cd.x, cd.y, cd.width, cd.height, x, y, cd.width, cd.height);\r\n\r\n ctx.restore();\r\n }\r\n }\r\n\r\n ctx.restore();\r\n};\r\n\r\nmodule.exports = ParticleManagerCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvUGFydGljbGVNYW5hZ2VyQ2FudmFzUmVuZGVyZXIuanM/YTU2YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVyxvREFBb0Q7QUFDL0QsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsbUJBQW1CLG9CQUFvQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx1QkFBdUIsbUJBQW1CO0FBQzFDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3BhcnRpY2xlcy9QYXJ0aWNsZU1hbmFnZXJDYW52YXNSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBDYW52YXMgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck1hbmFnZXIjcmVuZGVyQ2FudmFzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIENhbnZhcyByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlBhcnRpY2xlRW1pdHRlck1hbmFnZXJ9IGVtaXR0ZXJNYW5hZ2VyIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIFBhcnRpY2xlTWFuYWdlckNhbnZhc1JlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBlbWl0dGVyTWFuYWdlciwgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgZW1pdHRlcnMgPSBlbWl0dGVyTWFuYWdlci5lbWl0dGVycy5saXN0O1xyXG4gICAgdmFyIGVtaXR0ZXJzTGVuZ3RoID0gZW1pdHRlcnMubGVuZ3RoO1xyXG5cclxuICAgIGlmIChlbWl0dGVyc0xlbmd0aCA9PT0gMClcclxuICAgIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGNhbU1hdHJpeCA9IHJlbmRlcmVyLl90ZW1wTWF0cml4MS5jb3B5RnJvbShjYW1lcmEubWF0cml4KTtcclxuICAgIHZhciBjYWxjTWF0cml4ID0gcmVuZGVyZXIuX3RlbXBNYXRyaXgyO1xyXG4gICAgdmFyIHBhcnRpY2xlTWF0cml4ID0gcmVuZGVyZXIuX3RlbXBNYXRyaXgzO1xyXG4gICAgdmFyIG1hbmFnZXJNYXRyaXggPSByZW5kZXJlci5fdGVtcE1hdHJpeDQuYXBwbHlJVFJTKGVtaXR0ZXJNYW5hZ2VyLngsIGVtaXR0ZXJNYW5hZ2VyLnksIGVtaXR0ZXJNYW5hZ2VyLnJvdGF0aW9uLCBlbWl0dGVyTWFuYWdlci5zY2FsZVgsIGVtaXR0ZXJNYW5hZ2VyLnNjYWxlWSk7XHJcblxyXG4gICAgY2FtTWF0cml4Lm11bHRpcGx5KG1hbmFnZXJNYXRyaXgpO1xyXG5cclxuICAgIHZhciByb3VuZFBpeGVscyA9IGNhbWVyYS5yb3VuZFBpeGVscztcclxuXHJcbiAgICB2YXIgY3R4ID0gcmVuZGVyZXIuY3VycmVudENvbnRleHQ7XHJcblxyXG4gICAgY3R4LnNhdmUoKTtcclxuXHJcbiAgICBmb3IgKHZhciBlID0gMDsgZSA8IGVtaXR0ZXJzTGVuZ3RoOyBlKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGVtaXR0ZXIgPSBlbWl0dGVyc1tlXTtcclxuICAgICAgICB2YXIgcGFydGljbGVzID0gZW1pdHRlci5hbGl2ZTtcclxuICAgICAgICB2YXIgcGFydGljbGVDb3VudCA9IHBhcnRpY2xlcy5sZW5ndGg7XHJcblxyXG4gICAgICAgIGlmICghZW1pdHRlci52aXNpYmxlIHx8IHBhcnRpY2xlQ291bnQgPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzY3JvbGxYID0gY2FtZXJhLnNjcm9sbFggKiBlbWl0dGVyLnNjcm9sbEZhY3Rvclg7XHJcbiAgICAgICAgdmFyIHNjcm9sbFkgPSBjYW1lcmEuc2Nyb2xsWSAqIGVtaXR0ZXIuc2Nyb2xsRmFjdG9yWTtcclxuXHJcbiAgICAgICAgaWYgKHBhcmVudE1hdHJpeClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBNdWx0aXBseSB0aGUgY2FtZXJhIGJ5IHRoZSBwYXJlbnQgbWF0cml4XHJcbiAgICAgICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseVdpdGhPZmZzZXQocGFyZW50TWF0cml4LCAtc2Nyb2xsWCwgLXNjcm9sbFkpO1xyXG5cclxuICAgICAgICAgICAgc2Nyb2xsWCA9IDA7XHJcbiAgICAgICAgICAgIHNjcm9sbFkgPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbZW1pdHRlci5ibGVuZE1vZGVdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnRpY2xlQ291bnQ7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBwYXJ0aWNsZSA9IHBhcnRpY2xlc1tpXTtcclxuXHJcbiAgICAgICAgICAgIHZhciBhbHBoYSA9IHBhcnRpY2xlLmFscGhhICogY2FtZXJhLmFscGhhO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFscGhhIDw9IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgZnJhbWUgPSBwYXJ0aWNsZS5mcmFtZTtcclxuICAgICAgICAgICAgdmFyIGNkID0gZnJhbWUuY2FudmFzRGF0YTtcclxuXHJcbiAgICAgICAgICAgIHZhciB4ID0gLShmcmFtZS5oYWxmV2lkdGgpO1xyXG4gICAgICAgICAgICB2YXIgeSA9IC0oZnJhbWUuaGFsZkhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICBwYXJ0aWNsZU1hdHJpeC5hcHBseUlUUlMoMCwgMCwgcGFydGljbGUucm90YXRpb24sIHBhcnRpY2xlLnNjYWxlWCwgcGFydGljbGUuc2NhbGVZKTtcclxuXHJcbiAgICAgICAgICAgIHBhcnRpY2xlTWF0cml4LmUgPSBwYXJ0aWNsZS54IC0gc2Nyb2xsWDtcclxuICAgICAgICAgICAgcGFydGljbGVNYXRyaXguZiA9IHBhcnRpY2xlLnkgLSBzY3JvbGxZO1xyXG5cclxuICAgICAgICAgICAgY2FtTWF0cml4Lm11bHRpcGx5KHBhcnRpY2xlTWF0cml4LCBjYWxjTWF0cml4KTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IGFscGhhO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xyXG5cclxuICAgICAgICAgICAgY2FsY01hdHJpeC5jb3B5VG9Db250ZXh0KGN0eCk7XHJcblxyXG4gICAgICAgICAgICBpZiAocm91bmRQaXhlbHMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHggPSBNYXRoLnJvdW5kKHgpO1xyXG4gICAgICAgICAgICAgICAgeSA9IE1hdGgucm91bmQoeSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGN0eC5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSAhKCFyZW5kZXJlci5hbnRpYWxpYXMgfHwgZnJhbWUuc291cmNlLnNjYWxlTW9kZSk7XHJcblxyXG4gICAgICAgICAgICBjdHguZHJhd0ltYWdlKGZyYW1lLnNvdXJjZS5pbWFnZSwgY2QueCwgY2QueSwgY2Qud2lkdGgsIGNkLmhlaWdodCwgeCwgeSwgY2Qud2lkdGgsIGNkLmhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjdHgucmVzdG9yZSgpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZU1hbmFnZXJDYW52YXNSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/ParticleManagerCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/particles/ParticleManagerCreator.js":
/*!*********************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/particles/ParticleManagerCreator.js ***!
\*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar ParticleEmitterManager = __webpack_require__(/*! ./ParticleEmitterManager */ \"./node_modules/phaser/src/gameobjects/particles/ParticleEmitterManager.js\");\r\n\r\n/**\r\n * Creates a new Particle Emitter Manager Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Particles Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#particles\r\n * @since 3.0.0\r\n *\r\n * @param {object} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitterManager} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('particles', function (config, addToScene)\r\n{\r\n if (config === undefined) { config = {}; }\r\n\r\n var key = GetAdvancedValue(config, 'key', null);\r\n var frame = GetAdvancedValue(config, 'frame', null);\r\n var emitters = GetFastValue(config, 'emitters', null);\r\n\r\n // frame is optional and can contain the emitters array or object if skipped\r\n var manager = new ParticleEmitterManager(this.scene, key, frame, emitters);\r\n\r\n if (addToScene !== undefined)\r\n {\r\n config.add = addToScene;\r\n }\r\n\r\n var add = GetFastValue(config, 'add', false);\r\n\r\n if (add)\r\n {\r\n this.displayList.add(manager);\r\n }\r\n\r\n this.updateList.add(manager);\r\n\r\n return manager;\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvUGFydGljbGVNYW5hZ2VyQ3JlYXRvci5qcz81NGU1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7QUFDdEQsdUJBQXVCLG1CQUFPLENBQUMsdUdBQXFDO0FBQ3BFLG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCw2QkFBNkIsbUJBQU8sQ0FBQywyR0FBMEI7O0FBRS9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxvREFBb0Q7QUFDaEU7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGFBQWE7O0FBRTVDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3BhcnRpY2xlcy9QYXJ0aWNsZU1hbmFnZXJDcmVhdG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2FtZU9iamVjdENyZWF0b3IgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Q3JlYXRvcicpO1xyXG52YXIgR2V0QWR2YW5jZWRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRBZHZhbmNlZFZhbHVlJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBQYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBQYXJ0aWNsZSBFbWl0dGVyIE1hbmFnZXIgR2FtZSBPYmplY3QgYW5kIHJldHVybnMgaXQuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFBhcnRpY2xlcyBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdENyZWF0b3IjcGFydGljbGVzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gY3JlYXRlIGl0c2VsZi5cclxuICogQHBhcmFtIHtib29sZWFufSBbYWRkVG9TY2VuZV0gLSBBZGQgdGhpcyBHYW1lIE9iamVjdCB0byB0aGUgU2NlbmUgYWZ0ZXIgY3JlYXRpbmcgaXQ/IElmIHNldCB0aGlzIGFyZ3VtZW50IG92ZXJyaWRlcyB0aGUgYGFkZGAgcHJvcGVydHkgaW4gdGhlIGNvbmZpZyBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlcn0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0Q3JlYXRvci5yZWdpc3RlcigncGFydGljbGVzJywgZnVuY3Rpb24gKGNvbmZpZywgYWRkVG9TY2VuZSlcclxue1xyXG4gICAgaWYgKGNvbmZpZyA9PT0gdW5kZWZpbmVkKSB7IGNvbmZpZyA9IHt9OyB9XHJcblxyXG4gICAgdmFyIGtleSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAna2V5JywgbnVsbCk7XHJcbiAgICB2YXIgZnJhbWUgPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ2ZyYW1lJywgbnVsbCk7XHJcbiAgICB2YXIgZW1pdHRlcnMgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZW1pdHRlcnMnLCBudWxsKTtcclxuXHJcbiAgICAvLyAgZnJhbWUgaXMgb3B0aW9uYWwgYW5kIGNhbiBjb250YWluIHRoZSBlbWl0dGVycyBhcnJheSBvciBvYmplY3QgaWYgc2tpcHBlZFxyXG4gICAgdmFyIG1hbmFnZXIgPSBuZXcgUGFydGljbGVFbWl0dGVyTWFuYWdlcih0aGlzLnNjZW5lLCBrZXksIGZyYW1lLCBlbWl0dGVycyk7XHJcblxyXG4gICAgaWYgKGFkZFRvU2NlbmUgIT09IHVuZGVmaW5lZClcclxuICAgIHtcclxuICAgICAgICBjb25maWcuYWRkID0gYWRkVG9TY2VuZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgYWRkID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2FkZCcsIGZhbHNlKTtcclxuXHJcbiAgICBpZiAoYWRkKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUxpc3QuYWRkKG1hbmFnZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBkYXRlTGlzdC5hZGQobWFuYWdlcik7XHJcblxyXG4gICAgcmV0dXJuIG1hbmFnZXI7XHJcbn0pO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/ParticleManagerCreator.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/particles/ParticleManagerFactory.js":
/*!*********************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/particles/ParticleManagerFactory.js ***!
\*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar ParticleEmitterManager = __webpack_require__(/*! ./ParticleEmitterManager */ \"./node_modules/phaser/src/gameobjects/particles/ParticleEmitterManager.js\");\r\n\r\n/**\r\n * Creates a new Particle Emitter Manager Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Particles Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#particles\r\n * @since 3.0.0\r\n *\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer|object)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n * @param {Phaser.Types.GameObjects.Particles.ParticleEmitterConfig|Phaser.Types.GameObjects.Particles.ParticleEmitterConfig[]} [emitters] - Configuration settings for one or more emitters to create.\r\n *\r\n * @return {Phaser.GameObjects.Particles.ParticleEmitterManager} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('particles', function (key, frame, emitters)\r\n{\r\n var manager = new ParticleEmitterManager(this.scene, key, frame, emitters);\r\n\r\n this.displayList.add(manager);\r\n this.updateList.add(manager);\r\n\r\n return manager;\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n// There are several properties available to use:\r\n//\r\n// this.scene - a reference to the Scene that owns the GameObjectFactory\r\n// this.displayList - a reference to the Display List the Scene owns\r\n// this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvUGFydGljbGVNYW5hZ2VyRmFjdG9yeS5qcz9iOWI3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7QUFDdEQsNkJBQTZCLG1CQUFPLENBQUMsMkdBQTBCOztBQUUvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsd0JBQXdCO0FBQ25DLFdBQVcsb0hBQW9IO0FBQy9IO0FBQ0EsWUFBWSxvREFBb0Q7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvUGFydGljbGVNYW5hZ2VyRmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdhbWVPYmplY3RGYWN0b3J5ID0gcmVxdWlyZSgnLi4vR2FtZU9iamVjdEZhY3RvcnknKTtcclxudmFyIFBhcnRpY2xlRW1pdHRlck1hbmFnZXIgPSByZXF1aXJlKCcuL1BhcnRpY2xlRW1pdHRlck1hbmFnZXInKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFBhcnRpY2xlIEVtaXR0ZXIgTWFuYWdlciBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFBhcnRpY2xlcyBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3RvcnkjcGFydGljbGVzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dHVyZSAtIFRoZSBrZXkgb2YgdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byByZW5kZXIgd2l0aCwgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyfG9iamVjdCl9IFtmcmFtZV0gLSBBbiBvcHRpb25hbCBmcmFtZSBmcm9tIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyaW5nIHdpdGguXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJDb25maWd8UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJDb25maWdbXX0gW2VtaXR0ZXJzXSAtIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIG9uZSBvciBtb3JlIGVtaXR0ZXJzIHRvIGNyZWF0ZS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZUVtaXR0ZXJNYW5hZ2VyfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RGYWN0b3J5LnJlZ2lzdGVyKCdwYXJ0aWNsZXMnLCBmdW5jdGlvbiAoa2V5LCBmcmFtZSwgZW1pdHRlcnMpXHJcbntcclxuICAgIHZhciBtYW5hZ2VyID0gbmV3IFBhcnRpY2xlRW1pdHRlck1hbmFnZXIodGhpcy5zY2VuZSwga2V5LCBmcmFtZSwgZW1pdHRlcnMpO1xyXG5cclxuICAgIHRoaXMuZGlzcGxheUxpc3QuYWRkKG1hbmFnZXIpO1xyXG4gICAgdGhpcy51cGRhdGVMaXN0LmFkZChtYW5hZ2VyKTtcclxuXHJcbiAgICByZXR1cm4gbWFuYWdlcjtcclxufSk7XHJcblxyXG4vLyAgV2hlbiByZWdpc3RlcmluZyBhIGZhY3RvcnkgZnVuY3Rpb24gJ3RoaXMnIHJlZmVycyB0byB0aGUgR2FtZU9iamVjdEZhY3RvcnkgY29udGV4dC5cclxuLy9cclxuLy8gIFRoZXJlIGFyZSBzZXZlcmFsIHByb3BlcnRpZXMgYXZhaWxhYmxlIHRvIHVzZTpcclxuLy9cclxuLy8gIHRoaXMuc2NlbmUgLSBhIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgdGhhdCBvd25zIHRoZSBHYW1lT2JqZWN0RmFjdG9yeVxyXG4vLyAgdGhpcy5kaXNwbGF5TGlzdCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBEaXNwbGF5IExpc3QgdGhlIFNjZW5lIG93bnNcclxuLy8gIHRoaXMudXBkYXRlTGlzdCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBVcGRhdGUgTGlzdCB0aGUgU2NlbmUgb3duc1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/ParticleManagerFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/particles/ParticleManagerRender.js":
/*!********************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/particles/ParticleManagerRender.js ***!
\********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./ParticleManagerWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/particles/ParticleManagerWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./ParticleManagerCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/particles/ParticleManagerCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvUGFydGljbGVNYW5hZ2VyUmVuZGVyLmpzP2UyYzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLGlFQUFrQjtBQUM1QyxtQkFBbUIsbUJBQU8sQ0FBQyxpRUFBa0I7O0FBRTdDLElBQUksSUFBcUI7QUFDekI7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyx1SEFBZ0M7QUFDMUQ7O0FBRUEsSUFBSSxJQUFzQjtBQUMxQjtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLHlIQUFpQztBQUM1RDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvcGFydGljbGVzL1BhcnRpY2xlTWFuYWdlclJlbmRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG52YXIgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG5cclxuaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuL1BhcnRpY2xlTWFuYWdlcldlYkdMUmVuZGVyZXInKTtcclxufVxyXG5cclxuaWYgKHR5cGVvZiBDQU5WQVNfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4vUGFydGljbGVNYW5hZ2VyQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/ParticleManagerRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/particles/ParticleManagerWebGLRenderer.js":
/*!***************************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/particles/ParticleManagerWebGLRenderer.js ***!
\***************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Particles.EmitterManager#renderWebGL\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Particles.ParticleEmitterManager} emitterManager - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar ParticleManagerWebGLRenderer = function (renderer, emitterManager, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var emitters = emitterManager.emitters.list;\r\n var emittersLength = emitters.length;\r\n\r\n if (emittersLength === 0)\r\n {\r\n return;\r\n }\r\n\r\n var pipeline = this.pipeline;\r\n\r\n var camMatrix = pipeline._tempMatrix1.copyFrom(camera.matrix);\r\n var calcMatrix = pipeline._tempMatrix2;\r\n var particleMatrix = pipeline._tempMatrix3;\r\n var managerMatrix = pipeline._tempMatrix4.applyITRS(emitterManager.x, emitterManager.y, emitterManager.rotation, emitterManager.scaleX, emitterManager.scaleY);\r\n\r\n camMatrix.multiply(managerMatrix);\r\n\r\n renderer.setPipeline(pipeline);\r\n\r\n var roundPixels = camera.roundPixels;\r\n var texture = emitterManager.defaultFrame.glTexture;\r\n var getTint = Utils.getTintAppendFloatAlphaAndSwap;\r\n\r\n pipeline.setTexture2D(texture, 0);\r\n\r\n for (var e = 0; e < emittersLength; e++)\r\n {\r\n var emitter = emitters[e];\r\n var particles = emitter.alive;\r\n var particleCount = particles.length;\r\n\r\n if (!emitter.visible || particleCount === 0)\r\n {\r\n continue;\r\n }\r\n\r\n var scrollX = camera.scrollX * emitter.scrollFactorX;\r\n var scrollY = camera.scrollY * emitter.scrollFactorY;\r\n\r\n if (parentMatrix)\r\n {\r\n // Multiply the camera by the parent matrix\r\n camMatrix.multiplyWithOffset(parentMatrix, -scrollX, -scrollY);\r\n\r\n scrollX = 0;\r\n scrollY = 0;\r\n }\r\n\r\n if (renderer.setBlendMode(emitter.blendMode))\r\n {\r\n // Rebind the texture if we've flushed\r\n pipeline.setTexture2D(texture, 0);\r\n }\r\n\r\n if (emitter.mask)\r\n {\r\n emitter.mask.preRenderWebGL(renderer, emitter, camera);\r\n pipeline.setTexture2D(texture, 0);\r\n }\r\n \r\n var tintEffect = 0;\r\n\r\n for (var i = 0; i < particleCount; i++)\r\n {\r\n var particle = particles[i];\r\n\r\n var alpha = particle.alpha * camera.alpha;\r\n\r\n if (alpha <= 0)\r\n {\r\n continue;\r\n }\r\n\r\n var frame = particle.frame;\r\n\r\n var x = -(frame.halfWidth);\r\n var y = -(frame.halfHeight);\r\n var xw = x + frame.width;\r\n var yh = y + frame.height;\r\n\r\n particleMatrix.applyITRS(0, 0, particle.rotation, particle.scaleX, particle.scaleY);\r\n\r\n particleMatrix.e = particle.x - scrollX;\r\n particleMatrix.f = particle.y - scrollY;\r\n\r\n camMatrix.multiply(particleMatrix, calcMatrix);\r\n\r\n var tx0 = calcMatrix.getX(x, y);\r\n var ty0 = calcMatrix.getY(x, y);\r\n \r\n var tx1 = calcMatrix.getX(x, yh);\r\n var ty1 = calcMatrix.getY(x, yh);\r\n \r\n var tx2 = calcMatrix.getX(xw, yh);\r\n var ty2 = calcMatrix.getY(xw, yh);\r\n \r\n var tx3 = calcMatrix.getX(xw, y);\r\n var ty3 = calcMatrix.getY(xw, y);\r\n\r\n if (roundPixels)\r\n {\r\n tx0 = Math.round(tx0);\r\n ty0 = Math.round(ty0);\r\n \r\n tx1 = Math.round(tx1);\r\n ty1 = Math.round(ty1);\r\n \r\n tx2 = Math.round(tx2);\r\n ty2 = Math.round(ty2);\r\n \r\n tx3 = Math.round(tx3);\r\n ty3 = Math.round(ty3);\r\n }\r\n\r\n var tint = getTint(particle.tint, alpha);\r\n\r\n pipeline.batchQuad(tx0, ty0, tx1, ty1, tx2, ty2, tx3, ty3, frame.u0, frame.v0, frame.u1, frame.v1, tint, tint, tint, tint, tintEffect, texture, 0);\r\n }\r\n\r\n if (emitter.mask)\r\n {\r\n emitter.mask.postRenderWebGL(renderer, camera);\r\n pipeline.setTexture2D(texture, 0);\r\n }\r\n }\r\n};\r\n\r\nmodule.exports = ParticleManagerWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvUGFydGljbGVNYW5hZ2VyV2ViR0xSZW5kZXJlci5qcz80NDY0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMscUZBQTRCOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9DQUFvQztBQUMvQyxXQUFXLG9EQUFvRDtBQUMvRCxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLG9CQUFvQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvUGFydGljbGVNYW5hZ2VyV2ViR0xSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXIvd2ViZ2wvVXRpbHMnKTtcclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRW1pdHRlck1hbmFnZXIjcmVuZGVyV2ViR0xcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIFdlYkdMIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGVFbWl0dGVyTWFuYWdlcn0gZW1pdHRlck1hbmFnZXIgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgUGFydGljbGVNYW5hZ2VyV2ViR0xSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgZW1pdHRlck1hbmFnZXIsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgdmFyIGVtaXR0ZXJzID0gZW1pdHRlck1hbmFnZXIuZW1pdHRlcnMubGlzdDtcclxuICAgIHZhciBlbWl0dGVyc0xlbmd0aCA9IGVtaXR0ZXJzLmxlbmd0aDtcclxuXHJcbiAgICBpZiAoZW1pdHRlcnNMZW5ndGggPT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBwaXBlbGluZSA9IHRoaXMucGlwZWxpbmU7XHJcblxyXG4gICAgdmFyIGNhbU1hdHJpeCA9IHBpcGVsaW5lLl90ZW1wTWF0cml4MS5jb3B5RnJvbShjYW1lcmEubWF0cml4KTtcclxuICAgIHZhciBjYWxjTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgyO1xyXG4gICAgdmFyIHBhcnRpY2xlTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgzO1xyXG4gICAgdmFyIG1hbmFnZXJNYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDQuYXBwbHlJVFJTKGVtaXR0ZXJNYW5hZ2VyLngsIGVtaXR0ZXJNYW5hZ2VyLnksIGVtaXR0ZXJNYW5hZ2VyLnJvdGF0aW9uLCBlbWl0dGVyTWFuYWdlci5zY2FsZVgsIGVtaXR0ZXJNYW5hZ2VyLnNjYWxlWSk7XHJcblxyXG4gICAgY2FtTWF0cml4Lm11bHRpcGx5KG1hbmFnZXJNYXRyaXgpO1xyXG5cclxuICAgIHJlbmRlcmVyLnNldFBpcGVsaW5lKHBpcGVsaW5lKTtcclxuXHJcbiAgICB2YXIgcm91bmRQaXhlbHMgPSBjYW1lcmEucm91bmRQaXhlbHM7XHJcbiAgICB2YXIgdGV4dHVyZSA9IGVtaXR0ZXJNYW5hZ2VyLmRlZmF1bHRGcmFtZS5nbFRleHR1cmU7XHJcbiAgICB2YXIgZ2V0VGludCA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhQW5kU3dhcDtcclxuXHJcbiAgICBwaXBlbGluZS5zZXRUZXh0dXJlMkQodGV4dHVyZSwgMCk7XHJcblxyXG4gICAgZm9yICh2YXIgZSA9IDA7IGUgPCBlbWl0dGVyc0xlbmd0aDsgZSsrKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBlbWl0dGVyID0gZW1pdHRlcnNbZV07XHJcbiAgICAgICAgdmFyIHBhcnRpY2xlcyA9IGVtaXR0ZXIuYWxpdmU7XHJcbiAgICAgICAgdmFyIHBhcnRpY2xlQ291bnQgPSBwYXJ0aWNsZXMubGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAoIWVtaXR0ZXIudmlzaWJsZSB8fCBwYXJ0aWNsZUNvdW50ID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc2Nyb2xsWCA9IGNhbWVyYS5zY3JvbGxYICogZW1pdHRlci5zY3JvbGxGYWN0b3JYO1xyXG4gICAgICAgIHZhciBzY3JvbGxZID0gY2FtZXJhLnNjcm9sbFkgKiBlbWl0dGVyLnNjcm9sbEZhY3Rvclk7XHJcblxyXG4gICAgICAgIGlmIChwYXJlbnRNYXRyaXgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgTXVsdGlwbHkgdGhlIGNhbWVyYSBieSB0aGUgcGFyZW50IG1hdHJpeFxyXG4gICAgICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHlXaXRoT2Zmc2V0KHBhcmVudE1hdHJpeCwgLXNjcm9sbFgsIC1zY3JvbGxZKTtcclxuXHJcbiAgICAgICAgICAgIHNjcm9sbFggPSAwO1xyXG4gICAgICAgICAgICBzY3JvbGxZID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZW5kZXJlci5zZXRCbGVuZE1vZGUoZW1pdHRlci5ibGVuZE1vZGUpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFJlYmluZCB0aGUgdGV4dHVyZSBpZiB3ZSd2ZSBmbHVzaGVkXHJcbiAgICAgICAgICAgIHBpcGVsaW5lLnNldFRleHR1cmUyRCh0ZXh0dXJlLCAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbWl0dGVyLm1hc2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBlbWl0dGVyLm1hc2sucHJlUmVuZGVyV2ViR0wocmVuZGVyZXIsIGVtaXR0ZXIsIGNhbWVyYSk7XHJcbiAgICAgICAgICAgIHBpcGVsaW5lLnNldFRleHR1cmUyRCh0ZXh0dXJlLCAwKTtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICB2YXIgdGludEVmZmVjdCA9IDA7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydGljbGVDb3VudDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHBhcnRpY2xlID0gcGFydGljbGVzW2ldO1xyXG5cclxuICAgICAgICAgICAgdmFyIGFscGhhID0gcGFydGljbGUuYWxwaGEgKiBjYW1lcmEuYWxwaGE7XHJcblxyXG4gICAgICAgICAgICBpZiAoYWxwaGEgPD0gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBmcmFtZSA9IHBhcnRpY2xlLmZyYW1lO1xyXG5cclxuICAgICAgICAgICAgdmFyIHggPSAtKGZyYW1lLmhhbGZXaWR0aCk7XHJcbiAgICAgICAgICAgIHZhciB5ID0gLShmcmFtZS5oYWxmSGVpZ2h0KTtcclxuICAgICAgICAgICAgdmFyIHh3ID0geCArIGZyYW1lLndpZHRoO1xyXG4gICAgICAgICAgICB2YXIgeWggPSB5ICsgZnJhbWUuaGVpZ2h0O1xyXG5cclxuICAgICAgICAgICAgcGFydGljbGVNYXRyaXguYXBwbHlJVFJTKDAsIDAsIHBhcnRpY2xlLnJvdGF0aW9uLCBwYXJ0aWNsZS5zY2FsZVgsIHBhcnRpY2xlLnNjYWxlWSk7XHJcblxyXG4gICAgICAgICAgICBwYXJ0aWNsZU1hdHJpeC5lID0gcGFydGljbGUueCAtIHNjcm9sbFg7XHJcbiAgICAgICAgICAgIHBhcnRpY2xlTWF0cml4LmYgPSBwYXJ0aWNsZS55IC0gc2Nyb2xsWTtcclxuXHJcbiAgICAgICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseShwYXJ0aWNsZU1hdHJpeCwgY2FsY01hdHJpeCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgdHgwID0gY2FsY01hdHJpeC5nZXRYKHgsIHkpO1xyXG4gICAgICAgICAgICB2YXIgdHkwID0gY2FsY01hdHJpeC5nZXRZKHgsIHkpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHZhciB0eDEgPSBjYWxjTWF0cml4LmdldFgoeCwgeWgpO1xyXG4gICAgICAgICAgICB2YXIgdHkxID0gY2FsY01hdHJpeC5nZXRZKHgsIHloKTtcclxuICAgIFxyXG4gICAgICAgICAgICB2YXIgdHgyID0gY2FsY01hdHJpeC5nZXRYKHh3LCB5aCk7XHJcbiAgICAgICAgICAgIHZhciB0eTIgPSBjYWxjTWF0cml4LmdldFkoeHcsIHloKTtcclxuICAgIFxyXG4gICAgICAgICAgICB2YXIgdHgzID0gY2FsY01hdHJpeC5nZXRYKHh3LCB5KTtcclxuICAgICAgICAgICAgdmFyIHR5MyA9IGNhbGNNYXRyaXguZ2V0WSh4dywgeSk7XHJcblxyXG4gICAgICAgICAgICBpZiAocm91bmRQaXhlbHMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR4MCA9IE1hdGgucm91bmQodHgwKTtcclxuICAgICAgICAgICAgICAgIHR5MCA9IE1hdGgucm91bmQodHkwKTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgdHgxID0gTWF0aC5yb3VuZCh0eDEpO1xyXG4gICAgICAgICAgICAgICAgdHkxID0gTWF0aC5yb3VuZCh0eTEpO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICB0eDIgPSBNYXRoLnJvdW5kKHR4Mik7XHJcbiAgICAgICAgICAgICAgICB0eTIgPSBNYXRoLnJvdW5kKHR5Mik7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIHR4MyA9IE1hdGgucm91bmQodHgzKTtcclxuICAgICAgICAgICAgICAgIHR5MyA9IE1hdGgucm91bmQodHkzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHRpbnQgPSBnZXRUaW50KHBhcnRpY2xlLnRpbnQsIGFscGhhKTtcclxuXHJcbiAgICAgICAgICAgIHBpcGVsaW5lLmJhdGNoUXVhZCh0eDAsIHR5MCwgdHgxLCB0eTEsIHR4MiwgdHkyLCB0eDMsIHR5MywgZnJhbWUudTAsIGZyYW1lLnYwLCBmcmFtZS51MSwgZnJhbWUudjEsIHRpbnQsIHRpbnQsIHRpbnQsIHRpbnQsIHRpbnRFZmZlY3QsIHRleHR1cmUsIDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVtaXR0ZXIubWFzaylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGVtaXR0ZXIubWFzay5wb3N0UmVuZGVyV2ViR0wocmVuZGVyZXIsIGNhbWVyYSk7XHJcbiAgICAgICAgICAgIHBpcGVsaW5lLnNldFRleHR1cmUyRCh0ZXh0dXJlLCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlTWFuYWdlcldlYkdMUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/ParticleManagerWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/particles/index.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/particles/index.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.GameObjects.Particles\r\n */\r\n\r\nmodule.exports = {\r\n\r\n GravityWell: __webpack_require__(/*! ./GravityWell */ \"./node_modules/phaser/src/gameobjects/particles/GravityWell.js\"),\r\n Particle: __webpack_require__(/*! ./Particle */ \"./node_modules/phaser/src/gameobjects/particles/Particle.js\"),\r\n ParticleEmitter: __webpack_require__(/*! ./ParticleEmitter */ \"./node_modules/phaser/src/gameobjects/particles/ParticleEmitter.js\"),\r\n ParticleEmitterManager: __webpack_require__(/*! ./ParticleEmitterManager */ \"./node_modules/phaser/src/gameobjects/particles/ParticleEmitterManager.js\"),\r\n Zones: __webpack_require__(/*! ./zones */ \"./node_modules/phaser/src/gameobjects/particles/zones/index.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvaW5kZXguanM/M2Q4MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLHFGQUFlO0FBQ3hDLGNBQWMsbUJBQU8sQ0FBQywrRUFBWTtBQUNsQyxxQkFBcUIsbUJBQU8sQ0FBQyw2RkFBbUI7QUFDaEQsNEJBQTRCLG1CQUFPLENBQUMsMkdBQTBCO0FBQzlELFdBQVcsbUJBQU8sQ0FBQywrRUFBUzs7QUFFNUIiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXNcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBHcmF2aXR5V2VsbDogcmVxdWlyZSgnLi9HcmF2aXR5V2VsbCcpLFxyXG4gICAgUGFydGljbGU6IHJlcXVpcmUoJy4vUGFydGljbGUnKSxcclxuICAgIFBhcnRpY2xlRW1pdHRlcjogcmVxdWlyZSgnLi9QYXJ0aWNsZUVtaXR0ZXInKSxcclxuICAgIFBhcnRpY2xlRW1pdHRlck1hbmFnZXI6IHJlcXVpcmUoJy4vUGFydGljbGVFbWl0dGVyTWFuYWdlcicpLFxyXG4gICAgWm9uZXM6IHJlcXVpcmUoJy4vem9uZXMnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/particles/zones/DeathZone.js":
/*!**************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/particles/zones/DeathZone.js ***!
\**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Death Zone.\r\n *\r\n * A Death Zone is a special type of zone that will kill a Particle as soon as it either enters, or leaves, the zone.\r\n *\r\n * The zone consists of a `source` which could be a Geometric shape, such as a Rectangle or Ellipse, or your own\r\n * object as long as it includes a `contains` method for which the Particles can be tested against.\r\n *\r\n * @class DeathZone\r\n * @memberof Phaser.GameObjects.Particles.Zones\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.DeathZoneSource} source - An object instance that has a `contains` method that returns a boolean when given `x` and `y` arguments.\r\n * @param {boolean} killOnEnter - Should the Particle be killed when it enters the zone? `true` or leaves it? `false`\r\n */\r\nvar DeathZone = new Class({\r\n\r\n initialize:\r\n\r\n function DeathZone (source, killOnEnter)\r\n {\r\n /**\r\n * An object instance that has a `contains` method that returns a boolean when given `x` and `y` arguments.\r\n * This could be a Geometry shape, such as `Phaser.Geom.Circle`, or your own custom object.\r\n *\r\n * @name Phaser.GameObjects.Particles.Zones.DeathZone#source\r\n * @type {Phaser.Types.GameObjects.Particles.DeathZoneSource}\r\n * @since 3.0.0\r\n */\r\n this.source = source;\r\n\r\n /**\r\n * Set to `true` if the Particle should be killed if it enters this zone.\r\n * Set to `false` to kill the Particle if it leaves this zone.\r\n *\r\n * @name Phaser.GameObjects.Particles.Zones.DeathZone#killOnEnter\r\n * @type {boolean}\r\n * @since 3.0.0\r\n */\r\n this.killOnEnter = killOnEnter;\r\n },\r\n\r\n /**\r\n * Checks if the given Particle will be killed or not by this zone.\r\n *\r\n * @method Phaser.GameObjects.Particles.Zones.DeathZone#willKill\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Particles.Particle} particle - The Particle to be checked against this zone.\r\n *\r\n * @return {boolean} Return `true` if the Particle is to be killed, otherwise return `false`.\r\n */\r\n willKill: function (particle)\r\n {\r\n var withinZone = this.source.contains(particle.x, particle.y);\r\n\r\n return (withinZone && this.killOnEnter || !withinZone && !this.killOnEnter);\r\n }\r\n\r\n});\r\n\r\nmodule.exports = DeathZone;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvem9uZXMvRGVhdGhab25lLmpzPzQ3ZGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxzRUFBc0I7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1EQUFtRDtBQUM5RCxXQUFXLFFBQVE7QUFDbkI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsc0NBQXNDO0FBQ3JEO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvcGFydGljbGVzL3pvbmVzL0RlYXRoWm9uZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgRGVhdGggWm9uZS5cclxuICpcclxuICogQSBEZWF0aCBab25lIGlzIGEgc3BlY2lhbCB0eXBlIG9mIHpvbmUgdGhhdCB3aWxsIGtpbGwgYSBQYXJ0aWNsZSBhcyBzb29uIGFzIGl0IGVpdGhlciBlbnRlcnMsIG9yIGxlYXZlcywgdGhlIHpvbmUuXHJcbiAqXHJcbiAqIFRoZSB6b25lIGNvbnNpc3RzIG9mIGEgYHNvdXJjZWAgd2hpY2ggY291bGQgYmUgYSBHZW9tZXRyaWMgc2hhcGUsIHN1Y2ggYXMgYSBSZWN0YW5nbGUgb3IgRWxsaXBzZSwgb3IgeW91ciBvd25cclxuICogb2JqZWN0IGFzIGxvbmcgYXMgaXQgaW5jbHVkZXMgYSBgY29udGFpbnNgIG1ldGhvZCBmb3Igd2hpY2ggdGhlIFBhcnRpY2xlcyBjYW4gYmUgdGVzdGVkIGFnYWluc3QuXHJcbiAqXHJcbiAqIEBjbGFzcyBEZWF0aFpvbmVcclxuICogQG1lbWJlcm9mIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuWm9uZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRGVhdGhab25lU291cmNlfSBzb3VyY2UgLSBBbiBvYmplY3QgaW5zdGFuY2UgdGhhdCBoYXMgYSBgY29udGFpbnNgIG1ldGhvZCB0aGF0IHJldHVybnMgYSBib29sZWFuIHdoZW4gZ2l2ZW4gYHhgIGFuZCBgeWAgYXJndW1lbnRzLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGtpbGxPbkVudGVyIC0gU2hvdWxkIHRoZSBQYXJ0aWNsZSBiZSBraWxsZWQgd2hlbiBpdCBlbnRlcnMgdGhlIHpvbmU/IGB0cnVlYCBvciBsZWF2ZXMgaXQ/IGBmYWxzZWBcclxuICovXHJcbnZhciBEZWF0aFpvbmUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gRGVhdGhab25lIChzb3VyY2UsIGtpbGxPbkVudGVyKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIG9iamVjdCBpbnN0YW5jZSB0aGF0IGhhcyBhIGBjb250YWluc2AgbWV0aG9kIHRoYXQgcmV0dXJucyBhIGJvb2xlYW4gd2hlbiBnaXZlbiBgeGAgYW5kIGB5YCBhcmd1bWVudHMuXHJcbiAgICAgICAgICogVGhpcyBjb3VsZCBiZSBhIEdlb21ldHJ5IHNoYXBlLCBzdWNoIGFzIGBQaGFzZXIuR2VvbS5DaXJjbGVgLCBvciB5b3VyIG93biBjdXN0b20gb2JqZWN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5ab25lcy5EZWF0aFpvbmUjc291cmNlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRGVhdGhab25lU291cmNlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTZXQgdG8gYHRydWVgIGlmIHRoZSBQYXJ0aWNsZSBzaG91bGQgYmUga2lsbGVkIGlmIGl0IGVudGVycyB0aGlzIHpvbmUuXHJcbiAgICAgICAgICogU2V0IHRvIGBmYWxzZWAgdG8ga2lsbCB0aGUgUGFydGljbGUgaWYgaXQgbGVhdmVzIHRoaXMgem9uZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuWm9uZXMuRGVhdGhab25lI2tpbGxPbkVudGVyXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5raWxsT25FbnRlciA9IGtpbGxPbkVudGVyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gUGFydGljbGUgd2lsbCBiZSBraWxsZWQgb3Igbm90IGJ5IHRoaXMgem9uZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuWm9uZXMuRGVhdGhab25lI3dpbGxLaWxsXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGV9IHBhcnRpY2xlIC0gVGhlIFBhcnRpY2xlIHRvIGJlIGNoZWNrZWQgYWdhaW5zdCB0aGlzIHpvbmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJuIGB0cnVlYCBpZiB0aGUgUGFydGljbGUgaXMgdG8gYmUga2lsbGVkLCBvdGhlcndpc2UgcmV0dXJuIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIHdpbGxLaWxsOiBmdW5jdGlvbiAocGFydGljbGUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHdpdGhpblpvbmUgPSB0aGlzLnNvdXJjZS5jb250YWlucyhwYXJ0aWNsZS54LCBwYXJ0aWNsZS55KTtcclxuXHJcbiAgICAgICAgcmV0dXJuICh3aXRoaW5ab25lICYmIHRoaXMua2lsbE9uRW50ZXIgfHwgIXdpdGhpblpvbmUgJiYgIXRoaXMua2lsbE9uRW50ZXIpO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IERlYXRoWm9uZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/zones/DeathZone.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/particles/zones/EdgeZone.js":
/*!*************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/particles/zones/EdgeZone.js ***!
\*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A zone that places particles on a shape's edges.\r\n *\r\n * @class EdgeZone\r\n * @memberof Phaser.GameObjects.Particles.Zones\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.EdgeZoneSource} source - An object instance with a `getPoints(quantity, stepRate)` method returning an array of points.\r\n * @param {integer} quantity - The number of particles to place on the source edge. Set to 0 to use `stepRate` instead.\r\n * @param {number} stepRate - The distance between each particle. When set, `quantity` is implied and should be set to 0.\r\n * @param {boolean} [yoyo=false] - Whether particles are placed from start to end and then end to start.\r\n * @param {boolean} [seamless=true] - Whether one endpoint will be removed if it's identical to the other.\r\n */\r\nvar EdgeZone = new Class({\r\n\r\n initialize:\r\n\r\n function EdgeZone (source, quantity, stepRate, yoyo, seamless)\r\n {\r\n if (yoyo === undefined) { yoyo = false; }\r\n if (seamless === undefined) { seamless = true; }\r\n\r\n /**\r\n * An object instance with a `getPoints(quantity, stepRate)` method returning an array of points.\r\n *\r\n * @name Phaser.GameObjects.Particles.Zones.EdgeZone#source\r\n * @type {Phaser.Types.GameObjects.Particles.EdgeZoneSource|Phaser.Types.GameObjects.Particles.RandomZoneSource}\r\n * @since 3.0.0\r\n */\r\n this.source = source;\r\n\r\n /**\r\n * The points placed on the source edge.\r\n *\r\n * @name Phaser.GameObjects.Particles.Zones.EdgeZone#points\r\n * @type {Phaser.Geom.Point[]}\r\n * @default []\r\n * @since 3.0.0\r\n */\r\n this.points = [];\r\n\r\n /**\r\n * The number of particles to place on the source edge. Set to 0 to use `stepRate` instead.\r\n *\r\n * @name Phaser.GameObjects.Particles.Zones.EdgeZone#quantity\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n this.quantity = quantity;\r\n\r\n /**\r\n * The distance between each particle. When set, `quantity` is implied and should be set to 0.\r\n *\r\n * @name Phaser.GameObjects.Particles.Zones.EdgeZone#stepRate\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.stepRate = stepRate;\r\n\r\n /**\r\n * Whether particles are placed from start to end and then end to start.\r\n *\r\n * @name Phaser.GameObjects.Particles.Zones.EdgeZone#yoyo\r\n * @type {boolean}\r\n * @since 3.0.0\r\n */\r\n this.yoyo = yoyo;\r\n\r\n /**\r\n * The counter used for iterating the EdgeZone's points.\r\n *\r\n * @name Phaser.GameObjects.Particles.Zones.EdgeZone#counter\r\n * @type {number}\r\n * @default -1\r\n * @since 3.0.0\r\n */\r\n this.counter = -1;\r\n\r\n /**\r\n * Whether one endpoint will be removed if it's identical to the other.\r\n *\r\n * @name Phaser.GameObjects.Particles.Zones.EdgeZone#seamless\r\n * @type {boolean}\r\n * @since 3.0.0\r\n */\r\n this.seamless = seamless;\r\n\r\n /**\r\n * An internal count of the points belonging to this EdgeZone.\r\n *\r\n * @name Phaser.GameObjects.Particles.Zones.EdgeZone#_length\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this._length = 0;\r\n\r\n /**\r\n * An internal value used to keep track of the current iteration direction for the EdgeZone's points.\r\n *\r\n * 0 = forwards, 1 = backwards\r\n *\r\n * @name Phaser.GameObjects.Particles.Zones.EdgeZone#_direction\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this._direction = 0;\r\n\r\n this.updateSource();\r\n },\r\n\r\n /**\r\n * Update the {@link Phaser.GameObjects.Particles.Zones.EdgeZone#points} from the EdgeZone's\r\n * {@link Phaser.GameObjects.Particles.Zones.EdgeZone#source}.\r\n *\r\n * Also updates internal properties.\r\n *\r\n * @method Phaser.GameObjects.Particles.Zones.EdgeZone#updateSource\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Particles.Zones.EdgeZone} This Edge Zone.\r\n */\r\n updateSource: function ()\r\n {\r\n this.points = this.source.getPoints(this.quantity, this.stepRate);\r\n\r\n // Remove ends?\r\n if (this.seamless)\r\n {\r\n var a = this.points[0];\r\n var b = this.points[this.points.length - 1];\r\n\r\n if (a.x === b.x && a.y === b.y)\r\n {\r\n this.points.pop();\r\n }\r\n }\r\n\r\n var oldLength = this._length;\r\n\r\n this._length = this.points.length;\r\n\r\n // Adjust counter if we now have less points than before\r\n if (this._length < oldLength && this.counter > this._length)\r\n {\r\n this.counter = this._length - 1;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Change the source of the EdgeZone.\r\n *\r\n * @method Phaser.GameObjects.Particles.Zones.EdgeZone#changeSource\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.EdgeZoneSource} source - An object instance with a `getPoints(quantity, stepRate)` method returning an array of points.\r\n *\r\n * @return {Phaser.GameObjects.Particles.Zones.EdgeZone} This Edge Zone.\r\n */\r\n changeSource: function (source)\r\n {\r\n this.source = source;\r\n\r\n return this.updateSource();\r\n },\r\n\r\n /**\r\n * Get the next point in the Zone and set its coordinates on the given Particle.\r\n *\r\n * @method Phaser.GameObjects.Particles.Zones.EdgeZone#getPoint\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Particles.Particle} particle - The Particle.\r\n */\r\n getPoint: function (particle)\r\n {\r\n if (this._direction === 0)\r\n {\r\n this.counter++;\r\n\r\n if (this.counter >= this._length)\r\n {\r\n if (this.yoyo)\r\n {\r\n this._direction = 1;\r\n this.counter = this._length - 1;\r\n }\r\n else\r\n {\r\n this.counter = 0;\r\n }\r\n }\r\n }\r\n else\r\n {\r\n this.counter--;\r\n\r\n if (this.counter === -1)\r\n {\r\n if (this.yoyo)\r\n {\r\n this._direction = 0;\r\n this.counter = 0;\r\n }\r\n else\r\n {\r\n this.counter = this._length - 1;\r\n }\r\n }\r\n }\r\n\r\n var point = this.points[this.counter];\r\n\r\n if (point)\r\n {\r\n particle.x = point.x;\r\n particle.y = point.y;\r\n }\r\n }\r\n\r\n});\r\n\r\nmodule.exports = EdgeZone;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvem9uZXMvRWRnZVpvbmUuanM/M2FjMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHNFQUFzQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxrREFBa0Q7QUFDN0QsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGlDQUFpQyxjQUFjO0FBQy9DLHFDQUFxQyxpQkFBaUI7O0FBRXREO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxtQkFBbUIseURBQXlEO0FBQzVFLFFBQVEseURBQXlEO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw0Q0FBNEM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0RBQWtEO0FBQ2pFO0FBQ0EsZ0JBQWdCLDRDQUE0QztBQUM1RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxzQ0FBc0M7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvcGFydGljbGVzL3pvbmVzL0VkZ2Vab25lLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9DbGFzcycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSB6b25lIHRoYXQgcGxhY2VzIHBhcnRpY2xlcyBvbiBhIHNoYXBlJ3MgZWRnZXMuXHJcbiAqXHJcbiAqIEBjbGFzcyBFZGdlWm9uZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5ab25lc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FZGdlWm9uZVNvdXJjZX0gc291cmNlIC0gQW4gb2JqZWN0IGluc3RhbmNlIHdpdGggYSBgZ2V0UG9pbnRzKHF1YW50aXR5LCBzdGVwUmF0ZSlgIG1ldGhvZCByZXR1cm5pbmcgYW4gYXJyYXkgb2YgcG9pbnRzLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHF1YW50aXR5IC0gVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdG8gcGxhY2Ugb24gdGhlIHNvdXJjZSBlZGdlLiBTZXQgdG8gMCB0byB1c2UgYHN0ZXBSYXRlYCBpbnN0ZWFkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gc3RlcFJhdGUgLSBUaGUgZGlzdGFuY2UgYmV0d2VlbiBlYWNoIHBhcnRpY2xlLiBXaGVuIHNldCwgYHF1YW50aXR5YCBpcyBpbXBsaWVkIGFuZCBzaG91bGQgYmUgc2V0IHRvIDAuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3lveW89ZmFsc2VdIC0gV2hldGhlciBwYXJ0aWNsZXMgYXJlIHBsYWNlZCBmcm9tIHN0YXJ0IHRvIGVuZCBhbmQgdGhlbiBlbmQgdG8gc3RhcnQuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlYW1sZXNzPXRydWVdIC0gV2hldGhlciBvbmUgZW5kcG9pbnQgd2lsbCBiZSByZW1vdmVkIGlmIGl0J3MgaWRlbnRpY2FsIHRvIHRoZSBvdGhlci5cclxuICovXHJcbnZhciBFZGdlWm9uZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBFZGdlWm9uZSAoc291cmNlLCBxdWFudGl0eSwgc3RlcFJhdGUsIHlveW8sIHNlYW1sZXNzKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh5b3lvID09PSB1bmRlZmluZWQpIHsgeW95byA9IGZhbHNlOyB9XHJcbiAgICAgICAgaWYgKHNlYW1sZXNzID09PSB1bmRlZmluZWQpIHsgc2VhbWxlc3MgPSB0cnVlOyB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIG9iamVjdCBpbnN0YW5jZSB3aXRoIGEgYGdldFBvaW50cyhxdWFudGl0eSwgc3RlcFJhdGUpYCBtZXRob2QgcmV0dXJuaW5nIGFuIGFycmF5IG9mIHBvaW50cy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuWm9uZXMuRWRnZVpvbmUjc291cmNlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuRWRnZVpvbmVTb3VyY2V8UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5SYW5kb21ab25lU291cmNlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcG9pbnRzIHBsYWNlZCBvbiB0aGUgc291cmNlIGVkZ2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlpvbmVzLkVkZ2Vab25lI3BvaW50c1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2VvbS5Qb2ludFtdfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdG8gcGxhY2Ugb24gdGhlIHNvdXJjZSBlZGdlLiBTZXQgdG8gMCB0byB1c2UgYHN0ZXBSYXRlYCBpbnN0ZWFkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5ab25lcy5FZGdlWm9uZSNxdWFudGl0eVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucXVhbnRpdHkgPSBxdWFudGl0eTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRpc3RhbmNlIGJldHdlZW4gZWFjaCBwYXJ0aWNsZS4gV2hlbiBzZXQsIGBxdWFudGl0eWAgaXMgaW1wbGllZCBhbmQgc2hvdWxkIGJlIHNldCB0byAwLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5ab25lcy5FZGdlWm9uZSNzdGVwUmF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zdGVwUmF0ZSA9IHN0ZXBSYXRlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHBhcnRpY2xlcyBhcmUgcGxhY2VkIGZyb20gc3RhcnQgdG8gZW5kIGFuZCB0aGVuIGVuZCB0byBzdGFydC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuWm9uZXMuRWRnZVpvbmUjeW95b1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueW95byA9IHlveW87XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjb3VudGVyIHVzZWQgZm9yIGl0ZXJhdGluZyB0aGUgRWRnZVpvbmUncyBwb2ludHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlpvbmVzLkVkZ2Vab25lI2NvdW50ZXJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IC0xXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb3VudGVyID0gLTE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgb25lIGVuZHBvaW50IHdpbGwgYmUgcmVtb3ZlZCBpZiBpdCdzIGlkZW50aWNhbCB0byB0aGUgb3RoZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlpvbmVzLkVkZ2Vab25lI3NlYW1sZXNzXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zZWFtbGVzcyA9IHNlYW1sZXNzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBpbnRlcm5hbCBjb3VudCBvZiB0aGUgcG9pbnRzIGJlbG9uZ2luZyB0byB0aGlzIEVkZ2Vab25lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5ab25lcy5FZGdlWm9uZSNfbGVuZ3RoXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBpbnRlcm5hbCB2YWx1ZSB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgaXRlcmF0aW9uIGRpcmVjdGlvbiBmb3IgdGhlIEVkZ2Vab25lJ3MgcG9pbnRzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogMCA9IGZvcndhcmRzLCAxID0gYmFja3dhcmRzXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlpvbmVzLkVkZ2Vab25lI19kaXJlY3Rpb25cclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU291cmNlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHRoZSB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5ab25lcy5FZGdlWm9uZSNwb2ludHN9IGZyb20gdGhlIEVkZ2Vab25lJ3NcclxuICAgICAqIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlpvbmVzLkVkZ2Vab25lI3NvdXJjZX0uXHJcbiAgICAgKlxyXG4gICAgICogQWxzbyB1cGRhdGVzIGludGVybmFsIHByb3BlcnRpZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlpvbmVzLkVkZ2Vab25lI3VwZGF0ZVNvdXJjZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5ab25lcy5FZGdlWm9uZX0gVGhpcyBFZGdlIFpvbmUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVNvdXJjZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnBvaW50cyA9IHRoaXMuc291cmNlLmdldFBvaW50cyh0aGlzLnF1YW50aXR5LCB0aGlzLnN0ZXBSYXRlKTtcclxuXHJcbiAgICAgICAgLy8gIFJlbW92ZSBlbmRzP1xyXG4gICAgICAgIGlmICh0aGlzLnNlYW1sZXNzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGEgPSB0aGlzLnBvaW50c1swXTtcclxuICAgICAgICAgICAgdmFyIGIgPSB0aGlzLnBvaW50c1t0aGlzLnBvaW50cy5sZW5ndGggLSAxXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChhLnggPT09IGIueCAmJiBhLnkgPT09IGIueSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2ludHMucG9wKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBvbGRMZW5ndGggPSB0aGlzLl9sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMuX2xlbmd0aCA9IHRoaXMucG9pbnRzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgLy8gIEFkanVzdCBjb3VudGVyIGlmIHdlIG5vdyBoYXZlIGxlc3MgcG9pbnRzIHRoYW4gYmVmb3JlXHJcbiAgICAgICAgaWYgKHRoaXMuX2xlbmd0aCA8IG9sZExlbmd0aCAmJiB0aGlzLmNvdW50ZXIgPiB0aGlzLl9sZW5ndGgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNvdW50ZXIgPSB0aGlzLl9sZW5ndGggLSAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hhbmdlIHRoZSBzb3VyY2Ugb2YgdGhlIEVkZ2Vab25lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5ab25lcy5FZGdlWm9uZSNjaGFuZ2VTb3VyY2VcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5FZGdlWm9uZVNvdXJjZX0gc291cmNlIC0gQW4gb2JqZWN0IGluc3RhbmNlIHdpdGggYSBgZ2V0UG9pbnRzKHF1YW50aXR5LCBzdGVwUmF0ZSlgIG1ldGhvZCByZXR1cm5pbmcgYW4gYXJyYXkgb2YgcG9pbnRzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuWm9uZXMuRWRnZVpvbmV9IFRoaXMgRWRnZSBab25lLlxyXG4gICAgICovXHJcbiAgICBjaGFuZ2VTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVNvdXJjZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgbmV4dCBwb2ludCBpbiB0aGUgWm9uZSBhbmQgc2V0IGl0cyBjb29yZGluYXRlcyBvbiB0aGUgZ2l2ZW4gUGFydGljbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlpvbmVzLkVkZ2Vab25lI2dldFBvaW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuUGFydGljbGV9IHBhcnRpY2xlIC0gVGhlIFBhcnRpY2xlLlxyXG4gICAgICovXHJcbiAgICBnZXRQb2ludDogZnVuY3Rpb24gKHBhcnRpY2xlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLl9kaXJlY3Rpb24gPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNvdW50ZXIrKztcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvdW50ZXIgPj0gdGhpcy5fbGVuZ3RoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy55b3lvKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3VudGVyID0gdGhpcy5fbGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50ZXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY291bnRlci0tO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY291bnRlciA9PT0gLTEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnlveW8pXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50ZXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY291bnRlciA9IHRoaXMuX2xlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwb2ludCA9IHRoaXMucG9pbnRzW3RoaXMuY291bnRlcl07XHJcblxyXG4gICAgICAgIGlmIChwb2ludClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBhcnRpY2xlLnggPSBwb2ludC54O1xyXG4gICAgICAgICAgICBwYXJ0aWNsZS55ID0gcG9pbnQueTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRWRnZVpvbmU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/zones/EdgeZone.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/particles/zones/RandomZone.js":
/*!***************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/particles/zones/RandomZone.js ***!
\***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A zone that places particles randomly within a shape's area.\r\n *\r\n * @class RandomZone\r\n * @memberof Phaser.GameObjects.Particles.Zones\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Particles.RandomZoneSource} source - An object instance with a `getRandomPoint(point)` method.\r\n */\r\nvar RandomZone = new Class({\r\n\r\n initialize:\r\n\r\n function RandomZone (source)\r\n {\r\n /**\r\n * An object instance with a `getRandomPoint(point)` method.\r\n *\r\n * @name Phaser.GameObjects.Particles.Zones.RandomZone#source\r\n * @type {Phaser.Types.GameObjects.Particles.RandomZoneSource}\r\n * @since 3.0.0\r\n */\r\n this.source = source;\r\n\r\n /**\r\n * Internal calculation vector.\r\n *\r\n * @name Phaser.GameObjects.Particles.Zones.RandomZone#_tempVec\r\n * @type {Phaser.Math.Vector2}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._tempVec = new Vector2();\r\n },\r\n\r\n /**\r\n * Get the next point in the Zone and set its coordinates on the given Particle.\r\n *\r\n * @method Phaser.GameObjects.Particles.Zones.RandomZone#getPoint\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Particles.Particle} particle - The Particle.\r\n */\r\n getPoint: function (particle)\r\n {\r\n var vec = this._tempVec;\r\n\r\n this.source.getRandomPoint(vec);\r\n\r\n particle.x = vec.x;\r\n particle.y = vec.y;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = RandomZone;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvem9uZXMvUmFuZG9tWm9uZS5qcz8yNGUwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsc0VBQXNCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyx3RUFBdUI7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0RBQW9EO0FBQy9EO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxzQ0FBc0M7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvem9uZXMvUmFuZG9tWm9uZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIFZlY3RvcjIgPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoL1ZlY3RvcjInKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgem9uZSB0aGF0IHBsYWNlcyBwYXJ0aWNsZXMgcmFuZG9tbHkgd2l0aGluIGEgc2hhcGUncyBhcmVhLlxyXG4gKlxyXG4gKiBAY2xhc3MgUmFuZG9tWm9uZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5ab25lc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5SYW5kb21ab25lU291cmNlfSBzb3VyY2UgLSBBbiBvYmplY3QgaW5zdGFuY2Ugd2l0aCBhIGBnZXRSYW5kb21Qb2ludChwb2ludClgIG1ldGhvZC5cclxuICovXHJcbnZhciBSYW5kb21ab25lID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFJhbmRvbVpvbmUgKHNvdXJjZSlcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBvYmplY3QgaW5zdGFuY2Ugd2l0aCBhIGBnZXRSYW5kb21Qb2ludChwb2ludClgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5QYXJ0aWNsZXMuWm9uZXMuUmFuZG9tWm9uZSNzb3VyY2VcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5SYW5kb21ab25lU291cmNlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCBjYWxjdWxhdGlvbiB2ZWN0b3IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlpvbmVzLlJhbmRvbVpvbmUjX3RlbXBWZWNcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RlbXBWZWMgPSBuZXcgVmVjdG9yMigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgbmV4dCBwb2ludCBpbiB0aGUgWm9uZSBhbmQgc2V0IGl0cyBjb29yZGluYXRlcyBvbiB0aGUgZ2l2ZW4gUGFydGljbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlpvbmVzLlJhbmRvbVpvbmUjZ2V0UG9pbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlBhcnRpY2xlcy5QYXJ0aWNsZX0gcGFydGljbGUgLSBUaGUgUGFydGljbGUuXHJcbiAgICAgKi9cclxuICAgIGdldFBvaW50OiBmdW5jdGlvbiAocGFydGljbGUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHZlYyA9IHRoaXMuX3RlbXBWZWM7XHJcblxyXG4gICAgICAgIHRoaXMuc291cmNlLmdldFJhbmRvbVBvaW50KHZlYyk7XHJcblxyXG4gICAgICAgIHBhcnRpY2xlLnggPSB2ZWMueDtcclxuICAgICAgICBwYXJ0aWNsZS55ID0gdmVjLnk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmFuZG9tWm9uZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/zones/RandomZone.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/particles/zones/index.js":
/*!**********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/particles/zones/index.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.GameObjects.Particles.Zones\r\n */\r\n\r\nmodule.exports = {\r\n\r\n DeathZone: __webpack_require__(/*! ./DeathZone */ \"./node_modules/phaser/src/gameobjects/particles/zones/DeathZone.js\"),\r\n EdgeZone: __webpack_require__(/*! ./EdgeZone */ \"./node_modules/phaser/src/gameobjects/particles/zones/EdgeZone.js\"),\r\n RandomZone: __webpack_require__(/*! ./RandomZone */ \"./node_modules/phaser/src/gameobjects/particles/zones/RandomZone.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXJ0aWNsZXMvem9uZXMvaW5kZXguanM/M2JiZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyx1RkFBYTtBQUNwQyxjQUFjLG1CQUFPLENBQUMscUZBQVk7QUFDbEMsZ0JBQWdCLG1CQUFPLENBQUMseUZBQWM7O0FBRXRDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvcGFydGljbGVzL3pvbmVzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuR2FtZU9iamVjdHMuUGFydGljbGVzLlpvbmVzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgRGVhdGhab25lOiByZXF1aXJlKCcuL0RlYXRoWm9uZScpLFxyXG4gICAgRWRnZVpvbmU6IHJlcXVpcmUoJy4vRWRnZVpvbmUnKSxcclxuICAgIFJhbmRvbVpvbmU6IHJlcXVpcmUoJy4vUmFuZG9tWm9uZScpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/particles/zones/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/pathfollower/PathFollower.js":
/*!**************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/pathfollower/PathFollower.js ***!
\**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar Sprite = __webpack_require__(/*! ../sprite/Sprite */ \"./node_modules/phaser/src/gameobjects/sprite/Sprite.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A PathFollower Game Object.\r\n *\r\n * A PathFollower is a Sprite Game Object with some extra helpers to allow it to follow a Path automatically.\r\n *\r\n * Anything you can do with a standard Sprite can be done with this PathFollower, such as animate it, tint it,\r\n * scale it and so on.\r\n *\r\n * PathFollowers are bound to a single Path at any one time and can traverse the length of the Path, from start\r\n * to finish, forwards or backwards, or from any given point on the Path to its end. They can optionally rotate\r\n * to face the direction of the path, be offset from the path coordinates or rotate independently of the Path.\r\n *\r\n * @class PathFollower\r\n * @extends Phaser.GameObjects.Sprite\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n * \r\n * @extends Phaser.GameObjects.Components.PathFollower\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this PathFollower belongs.\r\n * @param {Phaser.Curves.Path} path - The Path this PathFollower is following. It can only follow one Path at a time.\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n */\r\nvar PathFollower = new Class({\r\n\r\n Extends: Sprite,\r\n\r\n Mixins: [\r\n Components.PathFollower\r\n ],\r\n\r\n initialize:\r\n\r\n function PathFollower (scene, path, x, y, texture, frame)\r\n {\r\n Sprite.call(this, scene, x, y, texture, frame);\r\n\r\n this.path = path;\r\n },\r\n\r\n /**\r\n * Internal update handler that advances this PathFollower along the path.\r\n *\r\n * Called automatically by the Scene step, should not typically be called directly.\r\n *\r\n * @method Phaser.GameObjects.PathFollower#preUpdate\r\n * @protected\r\n * @since 3.0.0\r\n *\r\n * @param {integer} time - The current timestamp as generated by the Request Animation Frame or SetTimeout.\r\n * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n */\r\n preUpdate: function (time, delta)\r\n {\r\n this.anims.update(time, delta);\r\n this.pathUpdate(time);\r\n }\r\n\r\n});\r\n\r\nmodule.exports = PathFollower;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXRoZm9sbG93ZXIvUGF0aEZvbGxvd2VyLmpzPzQzZWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsZ0ZBQWU7QUFDeEMsYUFBYSxtQkFBTyxDQUFDLGdGQUFrQjs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsbUJBQW1CO0FBQzlCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3BhdGhmb2xsb3dlci9QYXRoRm9sbG93ZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cycpO1xyXG52YXIgU3ByaXRlID0gcmVxdWlyZSgnLi4vc3ByaXRlL1Nwcml0ZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBQYXRoRm9sbG93ZXIgR2FtZSBPYmplY3QuXHJcbiAqXHJcbiAqIEEgUGF0aEZvbGxvd2VyIGlzIGEgU3ByaXRlIEdhbWUgT2JqZWN0IHdpdGggc29tZSBleHRyYSBoZWxwZXJzIHRvIGFsbG93IGl0IHRvIGZvbGxvdyBhIFBhdGggYXV0b21hdGljYWxseS5cclxuICpcclxuICogQW55dGhpbmcgeW91IGNhbiBkbyB3aXRoIGEgc3RhbmRhcmQgU3ByaXRlIGNhbiBiZSBkb25lIHdpdGggdGhpcyBQYXRoRm9sbG93ZXIsIHN1Y2ggYXMgYW5pbWF0ZSBpdCwgdGludCBpdCxcclxuICogc2NhbGUgaXQgYW5kIHNvIG9uLlxyXG4gKlxyXG4gKiBQYXRoRm9sbG93ZXJzIGFyZSBib3VuZCB0byBhIHNpbmdsZSBQYXRoIGF0IGFueSBvbmUgdGltZSBhbmQgY2FuIHRyYXZlcnNlIHRoZSBsZW5ndGggb2YgdGhlIFBhdGgsIGZyb20gc3RhcnRcclxuICogdG8gZmluaXNoLCBmb3J3YXJkcyBvciBiYWNrd2FyZHMsIG9yIGZyb20gYW55IGdpdmVuIHBvaW50IG9uIHRoZSBQYXRoIHRvIGl0cyBlbmQuIFRoZXkgY2FuIG9wdGlvbmFsbHkgcm90YXRlXHJcbiAqIHRvIGZhY2UgdGhlIGRpcmVjdGlvbiBvZiB0aGUgcGF0aCwgYmUgb2Zmc2V0IGZyb20gdGhlIHBhdGggY29vcmRpbmF0ZXMgb3Igcm90YXRlIGluZGVwZW5kZW50bHkgb2YgdGhlIFBhdGguXHJcbiAqXHJcbiAqIEBjbGFzcyBQYXRoRm9sbG93ZXJcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlBhdGhGb2xsb3dlclxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBQYXRoRm9sbG93ZXIgYmVsb25ncy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ3VydmVzLlBhdGh9IHBhdGggLSBUaGUgUGF0aCB0aGlzIFBhdGhGb2xsb3dlciBpcyBmb2xsb3dpbmcuIEl0IGNhbiBvbmx5IGZvbGxvdyBvbmUgUGF0aCBhdCBhIHRpbWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dHVyZSAtIFRoZSBrZXkgb2YgdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byByZW5kZXIgd2l0aCwgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lXSAtIEFuIG9wdGlvbmFsIGZyYW1lIGZyb20gdGhlIFRleHR1cmUgdGhpcyBHYW1lIE9iamVjdCBpcyByZW5kZXJpbmcgd2l0aC5cclxuICovXHJcbnZhciBQYXRoRm9sbG93ZXIgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IFNwcml0ZSxcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBDb21wb25lbnRzLlBhdGhGb2xsb3dlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFBhdGhGb2xsb3dlciAoc2NlbmUsIHBhdGgsIHgsIHksIHRleHR1cmUsIGZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIFNwcml0ZS5jYWxsKHRoaXMsIHNjZW5lLCB4LCB5LCB0ZXh0dXJlLCBmcmFtZSk7XHJcblxyXG4gICAgICAgIHRoaXMucGF0aCA9IHBhdGg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgdXBkYXRlIGhhbmRsZXIgdGhhdCBhZHZhbmNlcyB0aGlzIFBhdGhGb2xsb3dlciBhbG9uZyB0aGUgcGF0aC5cclxuICAgICAqXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgU2NlbmUgc3RlcCwgc2hvdWxkIG5vdCB0eXBpY2FsbHkgYmUgY2FsbGVkIGRpcmVjdGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBhdGhGb2xsb3dlciNwcmVVcGRhdGVcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGltZSAtIFRoZSBjdXJyZW50IHRpbWVzdGFtcCBhcyBnZW5lcmF0ZWQgYnkgdGhlIFJlcXVlc3QgQW5pbWF0aW9uIEZyYW1lIG9yIFNldFRpbWVvdXQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGEgLSBUaGUgZGVsdGEgdGltZSwgaW4gbXMsIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgZnJhbWUuXHJcbiAgICAgKi9cclxuICAgIHByZVVwZGF0ZTogZnVuY3Rpb24gKHRpbWUsIGRlbHRhKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYW5pbXMudXBkYXRlKHRpbWUsIGRlbHRhKTtcclxuICAgICAgICB0aGlzLnBhdGhVcGRhdGUodGltZSk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGF0aEZvbGxvd2VyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/pathfollower/PathFollower.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/pathfollower/PathFollowerFactory.js":
/*!*********************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/pathfollower/PathFollowerFactory.js ***!
\*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar PathFollower = __webpack_require__(/*! ./PathFollower */ \"./node_modules/phaser/src/gameobjects/pathfollower/PathFollower.js\");\r\n\r\n/**\r\n * Creates a new PathFollower Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the PathFollower Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#follower\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Curves.Path} path - The Path this PathFollower is connected to.\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n *\r\n * @return {Phaser.GameObjects.PathFollower} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('follower', function (path, x, y, key, frame)\r\n{\r\n var sprite = new PathFollower(this.scene, path, x, y, key, frame);\r\n\r\n this.displayList.add(sprite);\r\n this.updateList.add(sprite);\r\n\r\n return sprite;\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n// There are several properties available to use:\r\n//\r\n// this.scene - a reference to the Scene that owns the GameObjectFactory\r\n// this.displayList - a reference to the Display List the Scene owns\r\n// this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9wYXRoZm9sbG93ZXIvUGF0aEZvbGxvd2VyRmFjdG9yeS5qcz84YTM0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7QUFDdEQsbUJBQW1CLG1CQUFPLENBQUMsMEZBQWdCOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxtQkFBbUI7QUFDOUIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQSxZQUFZLGdDQUFnQztBQUM1QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3BhdGhmb2xsb3dlci9QYXRoRm9sbG93ZXJGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG52YXIgUGF0aEZvbGxvd2VyID0gcmVxdWlyZSgnLi9QYXRoRm9sbG93ZXInKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFBhdGhGb2xsb3dlciBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFBhdGhGb2xsb3dlciBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3RvcnkjZm9sbG93ZXJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkN1cnZlcy5QYXRofSBwYXRoIC0gVGhlIFBhdGggdGhpcyBQYXRoRm9sbG93ZXIgaXMgY29ubmVjdGVkIHRvLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRleHR1cmUgLSBUaGUga2V5IG9mIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gcmVuZGVyIHdpdGgsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBBbiBvcHRpb25hbCBmcmFtZSBmcm9tIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyaW5nIHdpdGguXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5QYXRoRm9sbG93ZXJ9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdEZhY3RvcnkucmVnaXN0ZXIoJ2ZvbGxvd2VyJywgZnVuY3Rpb24gKHBhdGgsIHgsIHksIGtleSwgZnJhbWUpXHJcbntcclxuICAgIHZhciBzcHJpdGUgPSBuZXcgUGF0aEZvbGxvd2VyKHRoaXMuc2NlbmUsIHBhdGgsIHgsIHksIGtleSwgZnJhbWUpO1xyXG5cclxuICAgIHRoaXMuZGlzcGxheUxpc3QuYWRkKHNwcml0ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZUxpc3QuYWRkKHNwcml0ZSk7XHJcblxyXG4gICAgcmV0dXJuIHNwcml0ZTtcclxufSk7XHJcblxyXG4vLyAgV2hlbiByZWdpc3RlcmluZyBhIGZhY3RvcnkgZnVuY3Rpb24gJ3RoaXMnIHJlZmVycyB0byB0aGUgR2FtZU9iamVjdEZhY3RvcnkgY29udGV4dC5cclxuLy9cclxuLy8gIFRoZXJlIGFyZSBzZXZlcmFsIHByb3BlcnRpZXMgYXZhaWxhYmxlIHRvIHVzZTpcclxuLy9cclxuLy8gIHRoaXMuc2NlbmUgLSBhIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgdGhhdCBvd25zIHRoZSBHYW1lT2JqZWN0RmFjdG9yeVxyXG4vLyAgdGhpcy5kaXNwbGF5TGlzdCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBEaXNwbGF5IExpc3QgdGhlIFNjZW5lIG93bnNcclxuLy8gIHRoaXMudXBkYXRlTGlzdCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBVcGRhdGUgTGlzdCB0aGUgU2NlbmUgb3duc1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/pathfollower/PathFollowerFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/quad/Quad.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/quad/Quad.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Mesh = __webpack_require__(/*! ../mesh/Mesh */ \"./node_modules/phaser/src/gameobjects/mesh/Mesh.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Quad Game Object.\r\n *\r\n * A Quad is a Mesh Game Object pre-configured with two triangles arranged into a rectangle, with a single\r\n * texture spread across them.\r\n *\r\n * You can manipulate the corner points of the quad via the getters and setters such as `topLeftX`, and also\r\n * change their alpha and color values. The quad itself can be moved by adjusting the `x` and `y` properties.\r\n *\r\n * @class Quad\r\n * @extends Phaser.GameObjects.Mesh\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @webglOnly\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Quad belongs.\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n */\r\nvar Quad = new Class({\r\n\r\n Extends: Mesh,\r\n\r\n initialize:\r\n\r\n function Quad (scene, x, y, texture, frame)\r\n {\r\n // 0----3\r\n // |\\ B|\r\n // | \\ |\r\n // | \\ |\r\n // | A \\|\r\n // | \\\r\n // 1----2\r\n\r\n var vertices = [\r\n 0, 0, // tl\r\n 0, 0, // bl\r\n 0, 0, // br\r\n 0, 0, // tl\r\n 0, 0, // br\r\n 0, 0 // tr\r\n ];\r\n\r\n var uv = [\r\n 0, 0, // tl\r\n 0, 1, // bl\r\n 1, 1, // br\r\n 0, 0, // tl\r\n 1, 1, // br\r\n 1, 0 // tr\r\n ];\r\n\r\n var colors = [\r\n 0xffffff, // tl\r\n 0xffffff, // bl\r\n 0xffffff, // br\r\n 0xffffff, // tl\r\n 0xffffff, // br\r\n 0xffffff // tr\r\n ];\r\n\r\n var alphas = [\r\n 1, // tl\r\n 1, // bl\r\n 1, // br\r\n 1, // tl\r\n 1, // br\r\n 1 // tr\r\n ];\r\n\r\n Mesh.call(this, scene, x, y, vertices, uv, colors, alphas, texture, frame);\r\n\r\n this.resetPosition();\r\n },\r\n\r\n /**\r\n * Sets the frame this Game Object will use to render with.\r\n *\r\n * The Frame has to belong to the current Texture being used.\r\n *\r\n * It can be either a string or an index.\r\n *\r\n * Calling `setFrame` will modify the `width` and `height` properties of your Game Object.\r\n * It will also change the `origin` if the Frame has a custom pivot point, as exported from packages like Texture Packer.\r\n *\r\n * @method Phaser.GameObjects.Quad#setFrame\r\n * @since 3.11.0\r\n *\r\n * @param {(string|integer)} frame - The name or index of the frame within the Texture.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setFrame: function (frame)\r\n {\r\n this.frame = this.texture.get(frame);\r\n\r\n if (!this.frame.cutWidth || !this.frame.cutHeight)\r\n {\r\n this.renderFlags &= ~8;\r\n }\r\n else\r\n {\r\n this.renderFlags |= 8;\r\n }\r\n\r\n frame = this.frame;\r\n\r\n // TL\r\n this.uv[0] = frame.u0;\r\n this.uv[1] = frame.v0;\r\n\r\n // BL\r\n this.uv[2] = frame.u0;\r\n this.uv[3] = frame.v1;\r\n\r\n // BR\r\n this.uv[4] = frame.u1;\r\n this.uv[5] = frame.v1;\r\n\r\n // TL\r\n this.uv[6] = frame.u0;\r\n this.uv[7] = frame.v0;\r\n\r\n // BR\r\n this.uv[8] = frame.u1;\r\n this.uv[9] = frame.v1;\r\n\r\n // TR\r\n this.uv[10] = frame.u1;\r\n this.uv[11] = frame.v0;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * The top-left x vertex of this Quad.\r\n *\r\n * @name Phaser.GameObjects.Quad#topLeftX\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n topLeftX: {\r\n\r\n get: function ()\r\n {\r\n return this.x + this.vertices[0];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.vertices[0] = value - this.x;\r\n this.vertices[6] = value - this.x;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The top-left y vertex of this Quad.\r\n *\r\n * @name Phaser.GameObjects.Quad#topLeftY\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n topLeftY: {\r\n\r\n get: function ()\r\n {\r\n return this.y + this.vertices[1];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.vertices[1] = value - this.y;\r\n this.vertices[7] = value - this.y;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The top-right x vertex of this Quad.\r\n *\r\n * @name Phaser.GameObjects.Quad#topRightX\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n topRightX: {\r\n\r\n get: function ()\r\n {\r\n return this.x + this.vertices[10];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.vertices[10] = value - this.x;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The top-right y vertex of this Quad.\r\n *\r\n * @name Phaser.GameObjects.Quad#topRightY\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n topRightY: {\r\n\r\n get: function ()\r\n {\r\n return this.y + this.vertices[11];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.vertices[11] = value - this.y;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The bottom-left x vertex of this Quad.\r\n *\r\n * @name Phaser.GameObjects.Quad#bottomLeftX\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n bottomLeftX: {\r\n\r\n get: function ()\r\n {\r\n return this.x + this.vertices[2];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.vertices[2] = value - this.x;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The bottom-left y vertex of this Quad.\r\n *\r\n * @name Phaser.GameObjects.Quad#bottomLeftY\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n bottomLeftY: {\r\n\r\n get: function ()\r\n {\r\n return this.y + this.vertices[3];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.vertices[3] = value - this.y;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The bottom-right x vertex of this Quad.\r\n *\r\n * @name Phaser.GameObjects.Quad#bottomRightX\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n bottomRightX: {\r\n\r\n get: function ()\r\n {\r\n return this.x + this.vertices[4];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.vertices[4] = value - this.x;\r\n this.vertices[8] = value - this.x;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The bottom-right y vertex of this Quad.\r\n *\r\n * @name Phaser.GameObjects.Quad#bottomRightY\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n bottomRightY: {\r\n\r\n get: function ()\r\n {\r\n return this.y + this.vertices[5];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.vertices[5] = value - this.y;\r\n this.vertices[9] = value - this.y;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The top-left alpha value of this Quad.\r\n *\r\n * @name Phaser.GameObjects.Quad#topLeftAlpha\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n topLeftAlpha: {\r\n\r\n get: function ()\r\n {\r\n return this.alphas[0];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.alphas[0] = value;\r\n this.alphas[3] = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The top-right alpha value of this Quad.\r\n *\r\n * @name Phaser.GameObjects.Quad#topRightAlpha\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n topRightAlpha: {\r\n\r\n get: function ()\r\n {\r\n return this.alphas[5];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.alphas[5] = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The bottom-left alpha value of this Quad.\r\n *\r\n * @name Phaser.GameObjects.Quad#bottomLeftAlpha\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n bottomLeftAlpha: {\r\n\r\n get: function ()\r\n {\r\n return this.alphas[1];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.alphas[1] = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The bottom-right alpha value of this Quad.\r\n *\r\n * @name Phaser.GameObjects.Quad#bottomRightAlpha\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n bottomRightAlpha: {\r\n\r\n get: function ()\r\n {\r\n return this.alphas[2];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.alphas[2] = value;\r\n this.alphas[4] = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The top-left color value of this Quad.\r\n *\r\n * @name Phaser.GameObjects.Quad#topLeftColor\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n topLeftColor: {\r\n\r\n get: function ()\r\n {\r\n return this.colors[0];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.colors[0] = value;\r\n this.colors[3] = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The top-right color value of this Quad.\r\n *\r\n * @name Phaser.GameObjects.Quad#topRightColor\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n topRightColor: {\r\n\r\n get: function ()\r\n {\r\n return this.colors[5];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.colors[5] = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The bottom-left color value of this Quad.\r\n *\r\n * @name Phaser.GameObjects.Quad#bottomLeftColor\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n bottomLeftColor: {\r\n\r\n get: function ()\r\n {\r\n return this.colors[1];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.colors[1] = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The bottom-right color value of this Quad.\r\n *\r\n * @name Phaser.GameObjects.Quad#bottomRightColor\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n bottomRightColor: {\r\n\r\n get: function ()\r\n {\r\n return this.colors[2];\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.colors[2] = value;\r\n this.colors[4] = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Sets the top-left vertex position of this Quad.\r\n *\r\n * @method Phaser.GameObjects.Quad#setTopLeft\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal coordinate of the vertex.\r\n * @param {number} y - The vertical coordinate of the vertex.\r\n *\r\n * @return {Phaser.GameObjects.Quad} This Game Object.\r\n */\r\n setTopLeft: function (x, y)\r\n {\r\n this.topLeftX = x;\r\n this.topLeftY = y;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the top-right vertex position of this Quad.\r\n *\r\n * @method Phaser.GameObjects.Quad#setTopRight\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal coordinate of the vertex.\r\n * @param {number} y - The vertical coordinate of the vertex.\r\n *\r\n * @return {Phaser.GameObjects.Quad} This Game Object.\r\n */\r\n setTopRight: function (x, y)\r\n {\r\n this.topRightX = x;\r\n this.topRightY = y;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the bottom-left vertex position of this Quad.\r\n *\r\n * @method Phaser.GameObjects.Quad#setBottomLeft\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal coordinate of the vertex.\r\n * @param {number} y - The vertical coordinate of the vertex.\r\n *\r\n * @return {Phaser.GameObjects.Quad} This Game Object.\r\n */\r\n setBottomLeft: function (x, y)\r\n {\r\n this.bottomLeftX = x;\r\n this.bottomLeftY = y;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the bottom-right vertex position of this Quad.\r\n *\r\n * @method Phaser.GameObjects.Quad#setBottomRight\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal coordinate of the vertex.\r\n * @param {number} y - The vertical coordinate of the vertex.\r\n *\r\n * @return {Phaser.GameObjects.Quad} This Game Object.\r\n */\r\n setBottomRight: function (x, y)\r\n {\r\n this.bottomRightX = x;\r\n this.bottomRightY = y;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Resets the positions of the four corner vertices of this Quad.\r\n *\r\n * @method Phaser.GameObjects.Quad#resetPosition\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Quad} This Game Object.\r\n */\r\n resetPosition: function ()\r\n {\r\n var x = this.x;\r\n var y = this.y;\r\n var halfWidth = Math.floor(this.width / 2);\r\n var halfHeight = Math.floor(this.height / 2);\r\n\r\n this.setTopLeft(x - halfWidth, y - halfHeight);\r\n this.setTopRight(x + halfWidth, y - halfHeight);\r\n this.setBottomLeft(x - halfWidth, y + halfHeight);\r\n this.setBottomRight(x + halfWidth, y + halfHeight);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Resets the alpha values used by this Quad back to 1.\r\n *\r\n * @method Phaser.GameObjects.Quad#resetAlpha\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Quad} This Game Object.\r\n */\r\n resetAlpha: function ()\r\n {\r\n var alphas = this.alphas;\r\n\r\n alphas[0] = 1;\r\n alphas[1] = 1;\r\n alphas[2] = 1;\r\n alphas[3] = 1;\r\n alphas[4] = 1;\r\n alphas[5] = 1;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Resets the color values used by this Quad back to 0xffffff.\r\n *\r\n * @method Phaser.GameObjects.Quad#resetColors\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Quad} This Game Object.\r\n */\r\n resetColors: function ()\r\n {\r\n var colors = this.colors;\r\n\r\n colors[0] = 0xffffff;\r\n colors[1] = 0xffffff;\r\n colors[2] = 0xffffff;\r\n colors[3] = 0xffffff;\r\n colors[4] = 0xffffff;\r\n colors[5] = 0xffffff;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Resets the position, alpha and color values used by this Quad.\r\n *\r\n * @method Phaser.GameObjects.Quad#reset\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Quad} This Game Object.\r\n */\r\n reset: function ()\r\n {\r\n this.resetPosition();\r\n\r\n this.resetAlpha();\r\n\r\n return this.resetColors();\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Quad;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9xdWFkL1F1YWQuanM/OThhOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxXQUFXLG1CQUFPLENBQUMsd0VBQWM7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlCQUFpQjtBQUNoQztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9xdWFkL1F1YWQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBNZXNoID0gcmVxdWlyZSgnLi4vbWVzaC9NZXNoJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIFF1YWQgR2FtZSBPYmplY3QuXHJcbiAqXHJcbiAqIEEgUXVhZCBpcyBhIE1lc2ggR2FtZSBPYmplY3QgcHJlLWNvbmZpZ3VyZWQgd2l0aCB0d28gdHJpYW5nbGVzIGFycmFuZ2VkIGludG8gYSByZWN0YW5nbGUsIHdpdGggYSBzaW5nbGVcclxuICogdGV4dHVyZSBzcHJlYWQgYWNyb3NzIHRoZW0uXHJcbiAqXHJcbiAqIFlvdSBjYW4gbWFuaXB1bGF0ZSB0aGUgY29ybmVyIHBvaW50cyBvZiB0aGUgcXVhZCB2aWEgdGhlIGdldHRlcnMgYW5kIHNldHRlcnMgc3VjaCBhcyBgdG9wTGVmdFhgLCBhbmQgYWxzb1xyXG4gKiBjaGFuZ2UgdGhlaXIgYWxwaGEgYW5kIGNvbG9yIHZhbHVlcy4gVGhlIHF1YWQgaXRzZWxmIGNhbiBiZSBtb3ZlZCBieSBhZGp1c3RpbmcgdGhlIGB4YCBhbmQgYHlgIHByb3BlcnRpZXMuXHJcbiAqXHJcbiAqIEBjbGFzcyBRdWFkXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5NZXNoXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEB3ZWJnbE9ubHlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIFF1YWQgYmVsb25ncy5cclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0dXJlIC0gVGhlIGtleSBvZiB0aGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIHJlbmRlciB3aXRoLCBhcyBzdG9yZWQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWVdIC0gQW4gb3B0aW9uYWwgZnJhbWUgZnJvbSB0aGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHJlbmRlcmluZyB3aXRoLlxyXG4gKi9cclxudmFyIFF1YWQgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IE1lc2gsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBRdWFkIChzY2VuZSwgeCwgeSwgdGV4dHVyZSwgZnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIDAtLS0tM1xyXG4gICAgICAgIC8vICB8XFwgIEJ8XHJcbiAgICAgICAgLy8gIHwgXFwgIHxcclxuICAgICAgICAvLyAgfCAgXFwgfFxyXG4gICAgICAgIC8vICB8IEEgXFx8XHJcbiAgICAgICAgLy8gIHwgICAgXFxcclxuICAgICAgICAvLyAgMS0tLS0yXHJcblxyXG4gICAgICAgIHZhciB2ZXJ0aWNlcyA9IFtcclxuICAgICAgICAgICAgMCwgMCwgLy8gdGxcclxuICAgICAgICAgICAgMCwgMCwgLy8gYmxcclxuICAgICAgICAgICAgMCwgMCwgLy8gYnJcclxuICAgICAgICAgICAgMCwgMCwgLy8gdGxcclxuICAgICAgICAgICAgMCwgMCwgLy8gYnJcclxuICAgICAgICAgICAgMCwgMCAvLyB0clxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHZhciB1diA9IFtcclxuICAgICAgICAgICAgMCwgMCwgLy8gdGxcclxuICAgICAgICAgICAgMCwgMSwgLy8gYmxcclxuICAgICAgICAgICAgMSwgMSwgLy8gYnJcclxuICAgICAgICAgICAgMCwgMCwgLy8gdGxcclxuICAgICAgICAgICAgMSwgMSwgLy8gYnJcclxuICAgICAgICAgICAgMSwgMCAvLyB0clxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHZhciBjb2xvcnMgPSBbXHJcbiAgICAgICAgICAgIDB4ZmZmZmZmLCAvLyB0bFxyXG4gICAgICAgICAgICAweGZmZmZmZiwgLy8gYmxcclxuICAgICAgICAgICAgMHhmZmZmZmYsIC8vIGJyXHJcbiAgICAgICAgICAgIDB4ZmZmZmZmLCAvLyB0bFxyXG4gICAgICAgICAgICAweGZmZmZmZiwgLy8gYnJcclxuICAgICAgICAgICAgMHhmZmZmZmYgLy8gdHJcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICB2YXIgYWxwaGFzID0gW1xyXG4gICAgICAgICAgICAxLCAvLyB0bFxyXG4gICAgICAgICAgICAxLCAvLyBibFxyXG4gICAgICAgICAgICAxLCAvLyBiclxyXG4gICAgICAgICAgICAxLCAvLyB0bFxyXG4gICAgICAgICAgICAxLCAvLyBiclxyXG4gICAgICAgICAgICAxIC8vIHRyXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgTWVzaC5jYWxsKHRoaXMsIHNjZW5lLCB4LCB5LCB2ZXJ0aWNlcywgdXYsIGNvbG9ycywgYWxwaGFzLCB0ZXh0dXJlLCBmcmFtZSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzZXRQb3NpdGlvbigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGZyYW1lIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gcmVuZGVyIHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogVGhlIEZyYW1lIGhhcyB0byBiZWxvbmcgdG8gdGhlIGN1cnJlbnQgVGV4dHVyZSBiZWluZyB1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEl0IGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYW4gaW5kZXguXHJcbiAgICAgKlxyXG4gICAgICogQ2FsbGluZyBgc2V0RnJhbWVgIHdpbGwgbW9kaWZ5IHRoZSBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzIG9mIHlvdXIgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBJdCB3aWxsIGFsc28gY2hhbmdlIHRoZSBgb3JpZ2luYCBpZiB0aGUgRnJhbWUgaGFzIGEgY3VzdG9tIHBpdm90IHBvaW50LCBhcyBleHBvcnRlZCBmcm9tIHBhY2thZ2VzIGxpa2UgVGV4dHVyZSBQYWNrZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUXVhZCNzZXRGcmFtZVxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gZnJhbWUgLSBUaGUgbmFtZSBvciBpbmRleCBvZiB0aGUgZnJhbWUgd2l0aGluIHRoZSBUZXh0dXJlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEZyYW1lOiBmdW5jdGlvbiAoZnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5mcmFtZSA9IHRoaXMudGV4dHVyZS5nZXQoZnJhbWUpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZnJhbWUuY3V0V2lkdGggfHwgIXRoaXMuZnJhbWUuY3V0SGVpZ2h0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJGbGFncyAmPSB+ODtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJGbGFncyB8PSA4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnJhbWUgPSB0aGlzLmZyYW1lO1xyXG5cclxuICAgICAgICAvLyAgIFRMXHJcbiAgICAgICAgdGhpcy51dlswXSA9IGZyYW1lLnUwO1xyXG4gICAgICAgIHRoaXMudXZbMV0gPSBmcmFtZS52MDtcclxuXHJcbiAgICAgICAgLy8gICBCTFxyXG4gICAgICAgIHRoaXMudXZbMl0gPSBmcmFtZS51MDtcclxuICAgICAgICB0aGlzLnV2WzNdID0gZnJhbWUudjE7XHJcblxyXG4gICAgICAgIC8vICAgQlJcclxuICAgICAgICB0aGlzLnV2WzRdID0gZnJhbWUudTE7XHJcbiAgICAgICAgdGhpcy51dls1XSA9IGZyYW1lLnYxO1xyXG5cclxuICAgICAgICAvLyAgIFRMXHJcbiAgICAgICAgdGhpcy51dls2XSA9IGZyYW1lLnUwO1xyXG4gICAgICAgIHRoaXMudXZbN10gPSBmcmFtZS52MDtcclxuXHJcbiAgICAgICAgLy8gICBCUlxyXG4gICAgICAgIHRoaXMudXZbOF0gPSBmcmFtZS51MTtcclxuICAgICAgICB0aGlzLnV2WzldID0gZnJhbWUudjE7XHJcblxyXG4gICAgICAgIC8vICAgVFJcclxuICAgICAgICB0aGlzLnV2WzEwXSA9IGZyYW1lLnUxO1xyXG4gICAgICAgIHRoaXMudXZbMTFdID0gZnJhbWUudjA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0b3AtbGVmdCB4IHZlcnRleCBvZiB0aGlzIFF1YWQuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlF1YWQjdG9wTGVmdFhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdG9wTGVmdFg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMueCArIHRoaXMudmVydGljZXNbMF07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnZlcnRpY2VzWzBdID0gdmFsdWUgLSB0aGlzLng7XHJcbiAgICAgICAgICAgIHRoaXMudmVydGljZXNbNl0gPSB2YWx1ZSAtIHRoaXMueDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0b3AtbGVmdCB5IHZlcnRleCBvZiB0aGlzIFF1YWQuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlF1YWQjdG9wTGVmdFlcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdG9wTGVmdFk6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMueSArIHRoaXMudmVydGljZXNbMV07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnZlcnRpY2VzWzFdID0gdmFsdWUgLSB0aGlzLnk7XHJcbiAgICAgICAgICAgIHRoaXMudmVydGljZXNbN10gPSB2YWx1ZSAtIHRoaXMueTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0b3AtcmlnaHQgeCB2ZXJ0ZXggb2YgdGhpcyBRdWFkLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5RdWFkI3RvcFJpZ2h0WFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB0b3BSaWdodFg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMueCArIHRoaXMudmVydGljZXNbMTBdO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy52ZXJ0aWNlc1sxMF0gPSB2YWx1ZSAtIHRoaXMueDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0b3AtcmlnaHQgeSB2ZXJ0ZXggb2YgdGhpcyBRdWFkLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5RdWFkI3RvcFJpZ2h0WVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB0b3BSaWdodFk6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMueSArIHRoaXMudmVydGljZXNbMTFdO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy52ZXJ0aWNlc1sxMV0gPSB2YWx1ZSAtIHRoaXMueTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBib3R0b20tbGVmdCB4IHZlcnRleCBvZiB0aGlzIFF1YWQuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlF1YWQjYm90dG9tTGVmdFhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgYm90dG9tTGVmdFg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMueCArIHRoaXMudmVydGljZXNbMl07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnZlcnRpY2VzWzJdID0gdmFsdWUgLSB0aGlzLng7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYm90dG9tLWxlZnQgeSB2ZXJ0ZXggb2YgdGhpcyBRdWFkLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5RdWFkI2JvdHRvbUxlZnRZXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGJvdHRvbUxlZnRZOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnkgKyB0aGlzLnZlcnRpY2VzWzNdO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy52ZXJ0aWNlc1szXSA9IHZhbHVlIC0gdGhpcy55O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGJvdHRvbS1yaWdodCB4IHZlcnRleCBvZiB0aGlzIFF1YWQuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlF1YWQjYm90dG9tUmlnaHRYXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGJvdHRvbVJpZ2h0WDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy54ICsgdGhpcy52ZXJ0aWNlc1s0XTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudmVydGljZXNbNF0gPSB2YWx1ZSAtIHRoaXMueDtcclxuICAgICAgICAgICAgdGhpcy52ZXJ0aWNlc1s4XSA9IHZhbHVlIC0gdGhpcy54O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGJvdHRvbS1yaWdodCB5IHZlcnRleCBvZiB0aGlzIFF1YWQuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlF1YWQjYm90dG9tUmlnaHRZXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGJvdHRvbVJpZ2h0WToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy55ICsgdGhpcy52ZXJ0aWNlc1s1XTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudmVydGljZXNbNV0gPSB2YWx1ZSAtIHRoaXMueTtcclxuICAgICAgICAgICAgdGhpcy52ZXJ0aWNlc1s5XSA9IHZhbHVlIC0gdGhpcy55O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRvcC1sZWZ0IGFscGhhIHZhbHVlIG9mIHRoaXMgUXVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUXVhZCN0b3BMZWZ0QWxwaGFcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdG9wTGVmdEFscGhhOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFscGhhc1swXTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxwaGFzWzBdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuYWxwaGFzWzNdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdG9wLXJpZ2h0IGFscGhhIHZhbHVlIG9mIHRoaXMgUXVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUXVhZCN0b3BSaWdodEFscGhhXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHRvcFJpZ2h0QWxwaGE6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxwaGFzWzVdO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5hbHBoYXNbNV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBib3R0b20tbGVmdCBhbHBoYSB2YWx1ZSBvZiB0aGlzIFF1YWQuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlF1YWQjYm90dG9tTGVmdEFscGhhXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGJvdHRvbUxlZnRBbHBoYToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hbHBoYXNbMV07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmFscGhhc1sxXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGJvdHRvbS1yaWdodCBhbHBoYSB2YWx1ZSBvZiB0aGlzIFF1YWQuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlF1YWQjYm90dG9tUmlnaHRBbHBoYVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBib3R0b21SaWdodEFscGhhOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFscGhhc1syXTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxwaGFzWzJdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuYWxwaGFzWzRdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdG9wLWxlZnQgY29sb3IgdmFsdWUgb2YgdGhpcyBRdWFkLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5RdWFkI3RvcExlZnRDb2xvclxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB0b3BMZWZ0Q29sb3I6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sb3JzWzBdO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jb2xvcnNbMF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb2xvcnNbM10gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0b3AtcmlnaHQgY29sb3IgdmFsdWUgb2YgdGhpcyBRdWFkLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5RdWFkI3RvcFJpZ2h0Q29sb3JcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdG9wUmlnaHRDb2xvcjoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb2xvcnNbNV07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNvbG9yc1s1XSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGJvdHRvbS1sZWZ0IGNvbG9yIHZhbHVlIG9mIHRoaXMgUXVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUXVhZCNib3R0b21MZWZ0Q29sb3JcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgYm90dG9tTGVmdENvbG9yOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbG9yc1sxXTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sb3JzWzFdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYm90dG9tLXJpZ2h0IGNvbG9yIHZhbHVlIG9mIHRoaXMgUXVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUXVhZCNib3R0b21SaWdodENvbG9yXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGJvdHRvbVJpZ2h0Q29sb3I6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sb3JzWzJdO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jb2xvcnNbMl0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb2xvcnNbNF0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHRvcC1sZWZ0IHZlcnRleCBwb3NpdGlvbiBvZiB0aGlzIFF1YWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUXVhZCNzZXRUb3BMZWZ0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIGNvb3JkaW5hdGUgb2YgdGhlIHZlcnRleC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIGNvb3JkaW5hdGUgb2YgdGhlIHZlcnRleC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUXVhZH0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0VG9wTGVmdDogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy50b3BMZWZ0WCA9IHg7XHJcbiAgICAgICAgdGhpcy50b3BMZWZ0WSA9IHk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHRvcC1yaWdodCB2ZXJ0ZXggcG9zaXRpb24gb2YgdGhpcyBRdWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlF1YWQjc2V0VG9wUmlnaHRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgY29vcmRpbmF0ZSBvZiB0aGUgdmVydGV4LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgY29vcmRpbmF0ZSBvZiB0aGUgdmVydGV4LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5RdWFkfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRUb3BSaWdodDogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy50b3BSaWdodFggPSB4O1xyXG4gICAgICAgIHRoaXMudG9wUmlnaHRZID0geTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYm90dG9tLWxlZnQgdmVydGV4IHBvc2l0aW9uIG9mIHRoaXMgUXVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5RdWFkI3NldEJvdHRvbUxlZnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgY29vcmRpbmF0ZSBvZiB0aGUgdmVydGV4LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgY29vcmRpbmF0ZSBvZiB0aGUgdmVydGV4LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5RdWFkfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRCb3R0b21MZWZ0OiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvdHRvbUxlZnRYID0geDtcclxuICAgICAgICB0aGlzLmJvdHRvbUxlZnRZID0geTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYm90dG9tLXJpZ2h0IHZlcnRleCBwb3NpdGlvbiBvZiB0aGlzIFF1YWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUXVhZCNzZXRCb3R0b21SaWdodFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBjb29yZGluYXRlIG9mIHRoZSB2ZXJ0ZXguXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBjb29yZGluYXRlIG9mIHRoZSB2ZXJ0ZXguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlF1YWR9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEJvdHRvbVJpZ2h0OiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJvdHRvbVJpZ2h0WCA9IHg7XHJcbiAgICAgICAgdGhpcy5ib3R0b21SaWdodFkgPSB5O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldHMgdGhlIHBvc2l0aW9ucyBvZiB0aGUgZm91ciBjb3JuZXIgdmVydGljZXMgb2YgdGhpcyBRdWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlF1YWQjcmVzZXRQb3NpdGlvblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlF1YWR9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0UG9zaXRpb246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHggPSB0aGlzLng7XHJcbiAgICAgICAgdmFyIHkgPSB0aGlzLnk7XHJcbiAgICAgICAgdmFyIGhhbGZXaWR0aCA9IE1hdGguZmxvb3IodGhpcy53aWR0aCAvIDIpO1xyXG4gICAgICAgIHZhciBoYWxmSGVpZ2h0ID0gTWF0aC5mbG9vcih0aGlzLmhlaWdodCAvIDIpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFRvcExlZnQoeCAtIGhhbGZXaWR0aCwgeSAtIGhhbGZIZWlnaHQpO1xyXG4gICAgICAgIHRoaXMuc2V0VG9wUmlnaHQoeCArIGhhbGZXaWR0aCwgeSAtIGhhbGZIZWlnaHQpO1xyXG4gICAgICAgIHRoaXMuc2V0Qm90dG9tTGVmdCh4IC0gaGFsZldpZHRoLCB5ICsgaGFsZkhlaWdodCk7XHJcbiAgICAgICAgdGhpcy5zZXRCb3R0b21SaWdodCh4ICsgaGFsZldpZHRoLCB5ICsgaGFsZkhlaWdodCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGUgYWxwaGEgdmFsdWVzIHVzZWQgYnkgdGhpcyBRdWFkIGJhY2sgdG8gMS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5RdWFkI3Jlc2V0QWxwaGFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5RdWFkfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZXNldEFscGhhOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBhbHBoYXMgPSB0aGlzLmFscGhhcztcclxuXHJcbiAgICAgICAgYWxwaGFzWzBdID0gMTtcclxuICAgICAgICBhbHBoYXNbMV0gPSAxO1xyXG4gICAgICAgIGFscGhhc1syXSA9IDE7XHJcbiAgICAgICAgYWxwaGFzWzNdID0gMTtcclxuICAgICAgICBhbHBoYXNbNF0gPSAxO1xyXG4gICAgICAgIGFscGhhc1s1XSA9IDE7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGUgY29sb3IgdmFsdWVzIHVzZWQgYnkgdGhpcyBRdWFkIGJhY2sgdG8gMHhmZmZmZmYuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUXVhZCNyZXNldENvbG9yc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlF1YWR9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0Q29sb3JzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcclxuXHJcbiAgICAgICAgY29sb3JzWzBdID0gMHhmZmZmZmY7XHJcbiAgICAgICAgY29sb3JzWzFdID0gMHhmZmZmZmY7XHJcbiAgICAgICAgY29sb3JzWzJdID0gMHhmZmZmZmY7XHJcbiAgICAgICAgY29sb3JzWzNdID0gMHhmZmZmZmY7XHJcbiAgICAgICAgY29sb3JzWzRdID0gMHhmZmZmZmY7XHJcbiAgICAgICAgY29sb3JzWzVdID0gMHhmZmZmZmY7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGUgcG9zaXRpb24sIGFscGhhIGFuZCBjb2xvciB2YWx1ZXMgdXNlZCBieSB0aGlzIFF1YWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUXVhZCNyZXNldFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlF1YWR9IFRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVzZXRQb3NpdGlvbigpO1xyXG5cclxuICAgICAgICB0aGlzLnJlc2V0QWxwaGEoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzZXRDb2xvcnMoKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBRdWFkO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/quad/Quad.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/quad/QuadCreator.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/quad/QuadCreator.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BuildGameObject = __webpack_require__(/*! ../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar Quad = __webpack_require__(/*! ./Quad */ \"./node_modules/phaser/src/gameobjects/quad/Quad.js\");\r\n\r\n/**\r\n * Creates a new Quad Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Quad Game Object and WebGL support have been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#quad\r\n * @since 3.0.0\r\n *\r\n * @param {object} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.Quad} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('quad', function (config, addToScene)\r\n{\r\n if (config === undefined) { config = {}; }\r\n\r\n var x = GetAdvancedValue(config, 'x', 0);\r\n var y = GetAdvancedValue(config, 'y', 0);\r\n var key = GetAdvancedValue(config, 'key', null);\r\n var frame = GetAdvancedValue(config, 'frame', null);\r\n\r\n var quad = new Quad(this.scene, x, y, key, frame);\r\n\r\n if (addToScene !== undefined)\r\n {\r\n config.add = addToScene;\r\n }\r\n\r\n BuildGameObject(this.scene, quad, config);\r\n\r\n return quad;\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9xdWFkL1F1YWRDcmVhdG9yLmpzP2ZlYjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHNCQUFzQixtQkFBTyxDQUFDLG9GQUFvQjtBQUNsRCx3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7QUFDdEQsdUJBQXVCLG1CQUFPLENBQUMsdUdBQXFDO0FBQ3BFLFdBQVcsbUJBQU8sQ0FBQyxrRUFBUTs7QUFFM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLHdCQUF3QjtBQUNwQztBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsYUFBYTs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvcXVhZC9RdWFkQ3JlYXRvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJ1aWxkR2FtZU9iamVjdCA9IHJlcXVpcmUoJy4uL0J1aWxkR2FtZU9iamVjdCcpO1xyXG52YXIgR2FtZU9iamVjdENyZWF0b3IgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Q3JlYXRvcicpO1xyXG52YXIgR2V0QWR2YW5jZWRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRBZHZhbmNlZFZhbHVlJyk7XHJcbnZhciBRdWFkID0gcmVxdWlyZSgnLi9RdWFkJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBRdWFkIEdhbWUgT2JqZWN0IGFuZCByZXR1cm5zIGl0LlxyXG4gKlxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBRdWFkIEdhbWUgT2JqZWN0IGFuZCBXZWJHTCBzdXBwb3J0IGhhdmUgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdENyZWF0b3IjcXVhZFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIGNyZWF0ZSBpdHNlbGYuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FkZFRvU2NlbmVdIC0gQWRkIHRoaXMgR2FtZSBPYmplY3QgdG8gdGhlIFNjZW5lIGFmdGVyIGNyZWF0aW5nIGl0PyBJZiBzZXQgdGhpcyBhcmd1bWVudCBvdmVycmlkZXMgdGhlIGBhZGRgIHByb3BlcnR5IGluIHRoZSBjb25maWcgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUXVhZH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0Q3JlYXRvci5yZWdpc3RlcigncXVhZCcsIGZ1bmN0aW9uIChjb25maWcsIGFkZFRvU2NlbmUpXHJcbntcclxuICAgIGlmIChjb25maWcgPT09IHVuZGVmaW5lZCkgeyBjb25maWcgPSB7fTsgfVxyXG5cclxuICAgIHZhciB4ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICd4JywgMCk7XHJcbiAgICB2YXIgeSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAneScsIDApO1xyXG4gICAgdmFyIGtleSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAna2V5JywgbnVsbCk7XHJcbiAgICB2YXIgZnJhbWUgPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ2ZyYW1lJywgbnVsbCk7XHJcblxyXG4gICAgdmFyIHF1YWQgPSBuZXcgUXVhZCh0aGlzLnNjZW5lLCB4LCB5LCBrZXksIGZyYW1lKTtcclxuXHJcbiAgICBpZiAoYWRkVG9TY2VuZSAhPT0gdW5kZWZpbmVkKVxyXG4gICAge1xyXG4gICAgICAgIGNvbmZpZy5hZGQgPSBhZGRUb1NjZW5lO1xyXG4gICAgfVxyXG5cclxuICAgIEJ1aWxkR2FtZU9iamVjdCh0aGlzLnNjZW5lLCBxdWFkLCBjb25maWcpO1xyXG5cclxuICAgIHJldHVybiBxdWFkO1xyXG59KTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/quad/QuadCreator.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/quad/QuadFactory.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/quad/QuadFactory.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Quad = __webpack_require__(/*! ./Quad */ \"./node_modules/phaser/src/gameobjects/quad/Quad.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Quad Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Quad Game Object and WebGL support have been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#quad\r\n * @webglOnly\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n * \r\n * @return {Phaser.GameObjects.Quad} The Game Object that was created.\r\n */\r\nif (true)\r\n{\r\n GameObjectFactory.register('quad', function (x, y, key, frame)\r\n {\r\n return this.displayList.add(new Quad(this.scene, x, y, key, frame));\r\n });\r\n}\r\n\r\n// When registering a factory function 'this' refers to the GameObjectFactory context.\r\n// \r\n// There are several properties available to use:\r\n// \r\n// this.scene - a reference to the Scene that owns the GameObjectFactory\r\n// this.displayList - a reference to the Display List the Scene owns\r\n// this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9xdWFkL1F1YWRGYWN0b3J5LmpzPzhmZTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFdBQVcsbUJBQU8sQ0FBQyxrRUFBUTtBQUMzQix3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7O0FBRXREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsWUFBWSx3QkFBd0I7QUFDcEM7QUFDQSxJQUFJLElBQXFCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvcXVhZC9RdWFkRmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFF1YWQgPSByZXF1aXJlKCcuL1F1YWQnKTtcclxudmFyIEdhbWVPYmplY3RGYWN0b3J5ID0gcmVxdWlyZSgnLi4vR2FtZU9iamVjdEZhY3RvcnknKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFF1YWQgR2FtZSBPYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIFNjZW5lLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBRdWFkIEdhbWUgT2JqZWN0IGFuZCBXZWJHTCBzdXBwb3J0IGhhdmUgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3RvcnkjcXVhZFxyXG4gKiBAd2ViZ2xPbmx5XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRleHR1cmUgLSBUaGUga2V5IG9mIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gcmVuZGVyIHdpdGgsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBBbiBvcHRpb25hbCBmcmFtZSBmcm9tIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyaW5nIHdpdGguXHJcbiAqIFxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUXVhZH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5pZiAodHlwZW9mIFdFQkdMX1JFTkRFUkVSKVxyXG57XHJcbiAgICBHYW1lT2JqZWN0RmFjdG9yeS5yZWdpc3RlcigncXVhZCcsIGZ1bmN0aW9uICh4LCB5LCBrZXksIGZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXlMaXN0LmFkZChuZXcgUXVhZCh0aGlzLnNjZW5lLCB4LCB5LCBrZXksIGZyYW1lKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RGYWN0b3J5IGNvbnRleHQuXHJcbi8vICBcclxuLy8gIFRoZXJlIGFyZSBzZXZlcmFsIHByb3BlcnRpZXMgYXZhaWxhYmxlIHRvIHVzZTpcclxuLy8gIFxyXG4vLyAgdGhpcy5zY2VuZSAtIGEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSB0aGF0IG93bnMgdGhlIEdhbWVPYmplY3RGYWN0b3J5XHJcbi8vICB0aGlzLmRpc3BsYXlMaXN0IC0gYSByZWZlcmVuY2UgdG8gdGhlIERpc3BsYXkgTGlzdCB0aGUgU2NlbmUgb3duc1xyXG4vLyAgdGhpcy51cGRhdGVMaXN0IC0gYSByZWZlcmVuY2UgdG8gdGhlIFVwZGF0ZSBMaXN0IHRoZSBTY2VuZSBvd25zXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/quad/QuadFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/rendertexture/RenderTexture.js":
/*!****************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/rendertexture/RenderTexture.js ***!
\****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BlendModes = __webpack_require__(/*! ../../renderer/BlendModes */ \"./node_modules/phaser/src/renderer/BlendModes.js\");\r\nvar Camera = __webpack_require__(/*! ../../cameras/2d/BaseCamera */ \"./node_modules/phaser/src/cameras/2d/BaseCamera.js\");\r\nvar CanvasPool = __webpack_require__(/*! ../../display/canvas/CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar CONST = __webpack_require__(/*! ../../const */ \"./node_modules/phaser/src/const.js\");\r\nvar Frame = __webpack_require__(/*! ../../textures/Frame */ \"./node_modules/phaser/src/textures/Frame.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar Render = __webpack_require__(/*! ./RenderTextureRender */ \"./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureRender.js\");\r\nvar Utils = __webpack_require__(/*! ../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\nvar UUID = __webpack_require__(/*! ../../utils/string/UUID */ \"./node_modules/phaser/src/utils/string/UUID.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Render Texture.\r\n * \r\n * A Render Texture is a special texture that allows any number of Game Objects to be drawn to it. You can take many complex objects and\r\n * draw them all to this one texture, which can they be used as the texture for other Game Object's. It's a way to generate dynamic\r\n * textures at run-time that are WebGL friendly and don't invoke expensive GPU uploads.\r\n * \r\n * Note that under WebGL a FrameBuffer, which is what the Render Texture uses internally, cannot be anti-aliased. This means\r\n * that when drawing objects such as Shapes to a Render Texture they will appear to be drawn with no aliasing, however this\r\n * is a technical limitation of WebGL. To get around it, create your shape as a texture in an art package, then draw that\r\n * to the Render Texture.\r\n *\r\n * @class RenderTexture\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.2.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.ComputedSize\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Flip\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Tint\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {integer} [width=32] - The width of the Render Texture.\r\n * @param {integer} [height=32] - The height of the Render Texture.\r\n * @property {string} [key] - The texture key to make the RenderTexture from.\r\n * @property {string} [frame] - the frame to make the RenderTexture from.\r\n */\r\nvar RenderTexture = new Class({\r\n\r\n Extends: GameObject,\r\n\r\n Mixins: [\r\n Components.Alpha,\r\n Components.BlendMode,\r\n Components.ComputedSize,\r\n Components.Crop,\r\n Components.Depth,\r\n Components.Flip,\r\n Components.GetBounds,\r\n Components.Mask,\r\n Components.Origin,\r\n Components.Pipeline,\r\n Components.ScrollFactor,\r\n Components.Tint,\r\n Components.Transform,\r\n Components.Visible,\r\n Render\r\n ],\r\n\r\n initialize:\r\n\r\n function RenderTexture (scene, x, y, width, height, key, frame)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n if (width === undefined) { width = 32; }\r\n if (height === undefined) { height = 32; }\r\n\r\n GameObject.call(this, scene, 'RenderTexture');\r\n\r\n /**\r\n * A reference to either the Canvas or WebGL Renderer that the Game instance is using.\r\n *\r\n * @name Phaser.GameObjects.RenderTexture#renderer\r\n * @type {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)}\r\n * @since 3.2.0\r\n */\r\n this.renderer = scene.sys.game.renderer;\r\n\r\n /**\r\n * A reference to the Texture Manager.\r\n *\r\n * @name Phaser.GameObjects.RenderTexture#textureManager\r\n * @type {Phaser.Textures.TextureManager}\r\n * @since 3.12.0\r\n */\r\n this.textureManager = scene.sys.textures;\r\n\r\n /**\r\n * The tint of the Render Texture when rendered.\r\n *\r\n * @name Phaser.GameObjects.RenderTexture#globalTint\r\n * @type {number}\r\n * @default 0xffffff\r\n * @since 3.2.0\r\n */\r\n this.globalTint = 0xffffff;\r\n\r\n /**\r\n * The alpha of the Render Texture when rendered.\r\n *\r\n * @name Phaser.GameObjects.RenderTexture#globalAlpha\r\n * @type {number}\r\n * @default 1\r\n * @since 3.2.0\r\n */\r\n this.globalAlpha = 1;\r\n\r\n /**\r\n * The HTML Canvas Element that the Render Texture is drawing to when using the Canvas Renderer.\r\n *\r\n * @name Phaser.GameObjects.RenderTexture#canvas\r\n * @type {HTMLCanvasElement}\r\n * @since 3.2.0\r\n */\r\n this.canvas = null;\r\n\r\n /**\r\n * A reference to the GL Frame Buffer this Render Texture is drawing to.\r\n * This is only set if Phaser is running with the WebGL Renderer.\r\n *\r\n * @name Phaser.GameObjects.RenderTexture#framebuffer\r\n * @type {?WebGLFramebuffer}\r\n * @since 3.2.0\r\n */\r\n this.framebuffer = null;\r\n\r\n /**\r\n * Is this Render Texture dirty or not? If not it won't spend time clearing or filling itself.\r\n *\r\n * @name Phaser.GameObjects.RenderTexture#dirty\r\n * @type {boolean}\r\n * @since 3.12.0\r\n */\r\n this.dirty = false;\r\n\r\n /**\r\n * The internal crop data object, as used by `setCrop` and passed to the `Frame.setCropUVs` method.\r\n *\r\n * @name Phaser.GameObjects.RenderTexture#_crop\r\n * @type {object}\r\n * @private\r\n * @since 3.12.0\r\n */\r\n this._crop = this.resetCropObject();\r\n\r\n /**\r\n * The Texture corresponding to this Render Texture.\r\n *\r\n * @name Phaser.GameObjects.RenderTexture#texture\r\n * @type {Phaser.Textures.Texture}\r\n * @since 3.12.0\r\n */\r\n this.texture = null;\r\n\r\n /**\r\n * The Frame corresponding to this Render Texture.\r\n *\r\n * @name Phaser.GameObjects.RenderTexture#frame\r\n * @type {Phaser.Textures.Frame}\r\n * @since 3.12.0\r\n */\r\n this.frame = null;\r\n\r\n /**\r\n * Internal saved texture flag.\r\n *\r\n * @name Phaser.GameObjects.RenderTexture#_saved\r\n * @type {boolean}\r\n * @private\r\n * @since 3.12.0\r\n */\r\n this._saved = false;\r\n\r\n if (key === undefined)\r\n {\r\n this.canvas = CanvasPool.create2D(this, width, height);\r\n\r\n // Create a new Texture for this Text object\r\n this.texture = scene.sys.textures.addCanvas(UUID(), this.canvas);\r\n \r\n // Get the frame\r\n this.frame = this.texture.get();\r\n }\r\n else\r\n {\r\n this.texture = scene.sys.textures.get(key);\r\n \r\n // Get the frame\r\n this.frame = this.texture.get(frame);\r\n\r\n this.canvas = this.frame.source.image;\r\n this._saved = true;\r\n\r\n this.dirty = true;\r\n\r\n this.width = this.frame.cutWidth;\r\n this.height = this.frame.cutHeight;\r\n }\r\n\r\n /**\r\n * A reference to the Rendering Context belonging to the Canvas Element this Render Texture is drawing to.\r\n *\r\n * @name Phaser.GameObjects.RenderTexture#context\r\n * @type {CanvasRenderingContext2D}\r\n * @since 3.2.0\r\n */\r\n this.context = this.canvas.getContext('2d');\r\n\r\n /**\r\n * Internal erase mode flag.\r\n *\r\n * @name Phaser.GameObjects.RenderTexture#_eraseMode\r\n * @type {boolean}\r\n * @private\r\n * @since 3.16.0\r\n */\r\n this._eraseMode = false;\r\n\r\n /**\r\n * An internal Camera that can be used to move around the Render Texture.\r\n * Control it just like you would any Scene Camera. The difference is that it only impacts the placement of what\r\n * is drawn to the Render Texture. You can scroll, zoom and rotate this Camera.\r\n *\r\n * @name Phaser.GameObjects.RenderTexture#camera\r\n * @type {Phaser.Cameras.Scene2D.BaseCamera}\r\n * @since 3.12.0\r\n */\r\n this.camera = new Camera(0, 0, width, height);\r\n\r\n /**\r\n * A reference to the WebGL Rendering Context.\r\n *\r\n * @name Phaser.GameObjects.RenderTexture#gl\r\n * @type {WebGLRenderingContext}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.gl = null;\r\n\r\n /**\r\n * A reference to the WebGLTexture that is being rendered to in a WebGL Context.\r\n *\r\n * @name Phaser.GameObjects.RenderTexture#glTexture\r\n * @type {WebGLTexture}\r\n * @default null\r\n * @readonly\r\n * @since 3.19.0\r\n */\r\n this.glTexture = null;\r\n\r\n var renderer = this.renderer;\r\n\r\n if (renderer.type === CONST.WEBGL)\r\n {\r\n var gl = renderer.gl;\r\n\r\n this.gl = gl;\r\n this.glTexture = this.frame.source.glTexture;\r\n this.drawGameObject = this.batchGameObjectWebGL;\r\n this.framebuffer = renderer.createFramebuffer(width, height, this.glTexture, false);\r\n }\r\n else if (renderer.type === CONST.CANVAS)\r\n {\r\n this.drawGameObject = this.batchGameObjectCanvas;\r\n }\r\n\r\n this.camera.setScene(scene);\r\n\r\n this.setPosition(x, y);\r\n\r\n if (key === undefined)\r\n {\r\n this.setSize(width, height);\r\n }\r\n\r\n this.setOrigin(0, 0);\r\n this.initPipeline();\r\n },\r\n\r\n /**\r\n * Sets the size of this Game Object.\r\n * \r\n * @method Phaser.GameObjects.RenderTexture#setSize\r\n * @since 3.0.0\r\n *\r\n * @param {number} width - The width of this Game Object.\r\n * @param {number} height - The height of this Game Object.\r\n * \r\n * @return {this} This Game Object instance.\r\n */\r\n setSize: function (width, height)\r\n {\r\n return this.resize(width, height);\r\n },\r\n\r\n /**\r\n * Resizes the Render Texture to the new dimensions given.\r\n * \r\n * If Render Texture was created from specific frame, only the size of the frame will be changed. The size of the source\r\n * texture will not change.\r\n *\r\n * If Render Texture was not created from specific frame, the following will happen:\r\n * In WebGL it will destroy and then re-create the frame buffer being used by the Render Texture.\r\n * In Canvas it will resize the underlying canvas element.\r\n * Both approaches will erase everything currently drawn to the Render Texture.\r\n *\r\n * If the dimensions given are the same as those already being used, calling this method will do nothing.\r\n *\r\n * @method Phaser.GameObjects.RenderTexture#resize\r\n * @since 3.10.0\r\n *\r\n * @param {number} width - The new width of the Render Texture.\r\n * @param {number} [height=width] - The new height of the Render Texture. If not specified, will be set the same as the `width`.\r\n *\r\n * @return {this} This Render Texture.\r\n */\r\n resize: function (width, height)\r\n {\r\n if (height === undefined) { height = width; }\r\n\r\n if (width !== this.width || height !== this.height)\r\n {\r\n if (this.frame.name === '__BASE')\r\n {\r\n // Resize the texture\r\n\r\n this.canvas.width = width;\r\n this.canvas.height = height;\r\n \r\n this.texture.width = width;\r\n this.texture.height = height;\r\n \r\n if (this.gl)\r\n {\r\n var gl = this.gl;\r\n\r\n this.renderer.deleteTexture(this.frame.source.glTexture);\r\n this.renderer.deleteFramebuffer(this.framebuffer);\r\n\r\n var glTexture = this.renderer.createTexture2D(0, gl.NEAREST, gl.NEAREST, gl.CLAMP_TO_EDGE, gl.CLAMP_TO_EDGE, gl.RGBA, null, width, height, false);\r\n\r\n this.framebuffer = this.renderer.createFramebuffer(width, height, glTexture, false);\r\n\r\n this.frame.source.isRenderTexture = true;\r\n\r\n this.frame.glTexture = glTexture;\r\n this.glTexture = glTexture;\r\n }\r\n\r\n this.frame.source.width = width;\r\n this.frame.source.height = height;\r\n\r\n this.camera.setSize(width, height);\r\n\r\n this.frame.setSize(width, height);\r\n\r\n this.width = width;\r\n this.height = height;\r\n }\r\n }\r\n else\r\n {\r\n // Resize the frame\r\n\r\n var baseFrame = this.texture.getSourceImage();\r\n\r\n if (this.frame.cutX + width > baseFrame.width)\r\n {\r\n width = baseFrame.width - this.frame.cutX;\r\n }\r\n\r\n if (this.frame.cutY + height > baseFrame.height)\r\n {\r\n height = baseFrame.height - this.frame.cutY;\r\n }\r\n\r\n this.frame.setSize(width, height, this.frame.cutX, this.frame.cutY);\r\n }\r\n\r\n this.updateDisplayOrigin();\r\n\r\n var input = this.input;\r\n\r\n if (input && !input.customHitArea)\r\n {\r\n input.hitArea.width = width;\r\n input.hitArea.height = height;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the tint to use when rendering this Render Texture.\r\n *\r\n * @method Phaser.GameObjects.RenderTexture#setGlobalTint\r\n * @since 3.2.0\r\n *\r\n * @param {integer} tint - The tint value.\r\n *\r\n * @return {this} This Render Texture.\r\n */\r\n setGlobalTint: function (tint)\r\n {\r\n this.globalTint = tint;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the alpha to use when rendering this Render Texture.\r\n *\r\n * @method Phaser.GameObjects.RenderTexture#setGlobalAlpha\r\n * @since 3.2.0\r\n *\r\n * @param {number} alpha - The alpha value.\r\n *\r\n * @return {this} This Render Texture.\r\n */\r\n setGlobalAlpha: function (alpha)\r\n {\r\n this.globalAlpha = alpha;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Stores a copy of this Render Texture in the Texture Manager using the given key.\r\n * \r\n * After doing this, any texture based Game Object, such as a Sprite, can use the contents of this\r\n * Render Texture by using the texture key:\r\n * \r\n * ```javascript\r\n * var rt = this.add.renderTexture(0, 0, 128, 128);\r\n * \r\n * // Draw something to the Render Texture\r\n * \r\n * rt.saveTexture('doodle');\r\n * \r\n * this.add.image(400, 300, 'doodle');\r\n * ```\r\n * \r\n * Updating the contents of this Render Texture will automatically update _any_ Game Object\r\n * that is using it as a texture. Calling `saveTexture` again will not save another copy\r\n * of the same texture, it will just rename the key of the existing copy.\r\n * \r\n * By default it will create a single base texture. You can add frames to the texture\r\n * by using the `Texture.add` method. After doing this, you can then allow Game Objects\r\n * to use a specific frame from a Render Texture.\r\n *\r\n * @method Phaser.GameObjects.RenderTexture#saveTexture\r\n * @since 3.12.0\r\n *\r\n * @param {string} key - The unique key to store the texture as within the global Texture Manager.\r\n *\r\n * @return {Phaser.Textures.Texture} The Texture that was saved.\r\n */\r\n saveTexture: function (key)\r\n {\r\n this.textureManager.renameTexture(this.texture.key, key);\r\n \r\n this._saved = true;\r\n\r\n return this.texture;\r\n },\r\n\r\n /**\r\n * Fills the Render Texture with the given color.\r\n *\r\n * @method Phaser.GameObjects.RenderTexture#fill\r\n * @since 3.2.0\r\n *\r\n * @param {number} rgb - The color to fill the Render Texture with.\r\n * @param {number} [alpha=1] - The alpha value used by the fill.\r\n * @param {number} [x=0] - The left coordinate of the fill rectangle.\r\n * @param {number} [y=0] - The top coordinate of the fill rectangle.\r\n * @param {number} [width=this.frame.cutWidth] - The width of the fill rectangle.\r\n * @param {number} [height=this.frame.cutHeight] - The height of the fill rectangle.\r\n *\r\n * @return {this} This Render Texture instance.\r\n */\r\n fill: function (rgb, alpha, x, y, width, height)\r\n {\r\n if (alpha === undefined) { alpha = 1; }\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n if (width === undefined) { width = this.frame.cutWidth; }\r\n if (height === undefined) { height = this.frame.cutHeight; }\r\n\r\n var r = ((rgb >> 16) | 0) & 0xff;\r\n var g = ((rgb >> 8) | 0) & 0xff;\r\n var b = (rgb | 0) & 0xff;\r\n\r\n var gl = this.gl;\r\n var frame = this.frame;\r\n\r\n this.camera.preRender(1, 1);\r\n\r\n if (gl)\r\n {\r\n var cx = this.camera._cx;\r\n var cy = this.camera._cy;\r\n var cw = this.camera._cw;\r\n var ch = this.camera._ch;\r\n\r\n this.renderer.setFramebuffer(this.framebuffer, false);\r\n\r\n this.renderer.pushScissor(cx, cy, cw, ch, ch);\r\n\r\n var pipeline = this.pipeline;\r\n \r\n pipeline.projOrtho(0, this.texture.width, 0, this.texture.height, -1000.0, 1000.0);\r\n\r\n pipeline.drawFillRect(\r\n x, y, width, height,\r\n Utils.getTintFromFloats(r / 255, g / 255, b / 255, 1),\r\n alpha\r\n );\r\n\r\n this.renderer.setFramebuffer(null, false);\r\n\r\n this.renderer.popScissor();\r\n\r\n pipeline.projOrtho(0, pipeline.width, pipeline.height, 0, -1000.0, 1000.0);\r\n }\r\n else\r\n {\r\n this.renderer.setContext(this.context);\r\n\r\n this.context.fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + alpha + ')';\r\n this.context.fillRect(x + frame.cutX, y + frame.cutY, width, height);\r\n\r\n this.renderer.setContext();\r\n }\r\n\r\n this.dirty = true;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Clears the Render Texture.\r\n *\r\n * @method Phaser.GameObjects.RenderTexture#clear\r\n * @since 3.2.0\r\n *\r\n * @return {this} This Render Texture instance.\r\n */\r\n clear: function ()\r\n {\r\n if (this.dirty)\r\n {\r\n var gl = this.gl;\r\n\r\n if (gl)\r\n {\r\n var renderer = this.renderer;\r\n\r\n renderer.setFramebuffer(this.framebuffer, true);\r\n \r\n if (this.frame.cutWidth !== this.canvas.width || this.frame.cutHeight !== this.canvas.height)\r\n {\r\n gl.scissor(this.frame.cutX, this.frame.cutY, this.frame.cutWidth, this.frame.cutHeight);\r\n }\r\n\r\n gl.clearColor(0, 0, 0, 0);\r\n gl.clear(gl.COLOR_BUFFER_BIT);\r\n\r\n renderer.setFramebuffer(null, true);\r\n }\r\n else\r\n {\r\n var ctx = this.context;\r\n\r\n ctx.save();\r\n ctx.setTransform(1, 0, 0, 1, 0, 0);\r\n ctx.clearRect(this.frame.cutX, this.frame.cutY, this.frame.cutWidth, this.frame.cutHeight);\r\n ctx.restore();\r\n }\r\n\r\n this.dirty = false;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Draws the given object, or an array of objects, to this Render Texture using a blend mode of ERASE.\r\n * This has the effect of erasing any filled pixels in the objects from this Render Texture.\r\n * \r\n * It can accept any of the following:\r\n * \r\n * * Any renderable Game Object, such as a Sprite, Text, Graphics or TileSprite.\r\n * * Dynamic and Static Tilemap Layers.\r\n * * A Group. The contents of which will be iterated and drawn in turn.\r\n * * A Container. The contents of which will be iterated fully, and drawn in turn.\r\n * * A Scene's Display List. Pass in `Scene.children` to draw the whole list.\r\n * * Another Render Texture.\r\n * * A Texture Frame instance.\r\n * * A string. This is used to look-up a texture from the Texture Manager.\r\n * \r\n * Note: You cannot erase a Render Texture from itself.\r\n * \r\n * If passing in a Group or Container it will only draw children that return `true`\r\n * when their `willRender()` method is called. I.e. a Container with 10 children,\r\n * 5 of which have `visible=false` will only draw the 5 visible ones.\r\n * \r\n * If passing in an array of Game Objects it will draw them all, regardless if\r\n * they pass a `willRender` check or not.\r\n * \r\n * You can pass in a string in which case it will look for a texture in the Texture\r\n * Manager matching that string, and draw the base frame.\r\n * \r\n * You can pass in the `x` and `y` coordinates to draw the objects at. The use of\r\n * the coordinates differ based on what objects are being drawn. If the object is\r\n * a Group, Container or Display List, the coordinates are _added_ to the positions\r\n * of the children. For all other types of object, the coordinates are exact.\r\n * \r\n * Calling this method causes the WebGL batch to flush, so it can write the texture\r\n * data to the framebuffer being used internally. The batch is flushed at the end,\r\n * after the entries have been iterated. So if you've a bunch of objects to draw,\r\n * try and pass them in an array in one single call, rather than making lots of\r\n * separate calls.\r\n *\r\n * @method Phaser.GameObjects.RenderTexture#erase\r\n * @since 3.16.0\r\n *\r\n * @param {any} entries - Any renderable Game Object, or Group, Container, Display List, other Render Texture, Texture Frame or an array of any of these.\r\n * @param {number} [x] - The x position to draw the Frame at, or the offset applied to the object.\r\n * @param {number} [y] - The y position to draw the Frame at, or the offset applied to the object.\r\n *\r\n * @return {this} This Render Texture instance.\r\n */\r\n erase: function (entries, x, y)\r\n {\r\n this._eraseMode = true;\r\n\r\n var blendMode = this.renderer.currentBlendMode;\r\n\r\n this.renderer.setBlendMode(BlendModes.ERASE);\r\n\r\n this.draw(entries, x, y, 1, 16777215);\r\n\r\n this.renderer.setBlendMode(blendMode);\r\n\r\n this._eraseMode = false;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Draws the given object, or an array of objects, to this Render Texture.\r\n * \r\n * It can accept any of the following:\r\n * \r\n * * Any renderable Game Object, such as a Sprite, Text, Graphics or TileSprite.\r\n * * Dynamic and Static Tilemap Layers.\r\n * * A Group. The contents of which will be iterated and drawn in turn.\r\n * * A Container. The contents of which will be iterated fully, and drawn in turn.\r\n * * A Scene's Display List. Pass in `Scene.children` to draw the whole list.\r\n * * Another Render Texture.\r\n * * A Texture Frame instance.\r\n * * A string. This is used to look-up a texture from the Texture Manager.\r\n * \r\n * Note: You cannot draw a Render Texture to itself.\r\n * \r\n * If passing in a Group or Container it will only draw children that return `true`\r\n * when their `willRender()` method is called. I.e. a Container with 10 children,\r\n * 5 of which have `visible=false` will only draw the 5 visible ones.\r\n * \r\n * If passing in an array of Game Objects it will draw them all, regardless if\r\n * they pass a `willRender` check or not.\r\n * \r\n * You can pass in a string in which case it will look for a texture in the Texture\r\n * Manager matching that string, and draw the base frame. If you need to specify\r\n * exactly which frame to draw then use the method `drawFrame` instead.\r\n * \r\n * You can pass in the `x` and `y` coordinates to draw the objects at. The use of\r\n * the coordinates differ based on what objects are being drawn. If the object is\r\n * a Group, Container or Display List, the coordinates are _added_ to the positions\r\n * of the children. For all other types of object, the coordinates are exact.\r\n * \r\n * The `alpha` and `tint` values are only used by Texture Frames.\r\n * Game Objects use their own alpha and tint values when being drawn.\r\n * \r\n * Calling this method causes the WebGL batch to flush, so it can write the texture\r\n * data to the framebuffer being used internally. The batch is flushed at the end,\r\n * after the entries have been iterated. So if you've a bunch of objects to draw,\r\n * try and pass them in an array in one single call, rather than making lots of\r\n * separate calls.\r\n *\r\n * @method Phaser.GameObjects.RenderTexture#draw\r\n * @since 3.2.0\r\n *\r\n * @param {any} entries - Any renderable Game Object, or Group, Container, Display List, other Render Texture, Texture Frame or an array of any of these.\r\n * @param {number} [x] - The x position to draw the Frame at, or the offset applied to the object.\r\n * @param {number} [y] - The y position to draw the Frame at, or the offset applied to the object.\r\n * @param {number} [alpha] - The alpha value. Only used for Texture Frames and if not specified defaults to the `globalAlpha` property. Game Objects use their own current alpha value.\r\n * @param {number} [tint] - WebGL only. The tint color value. Only used for Texture Frames and if not specified defaults to the `globalTint` property. Game Objects use their own current tint value.\r\n *\r\n * @return {this} This Render Texture instance.\r\n */\r\n draw: function (entries, x, y, alpha, tint)\r\n {\r\n if (alpha === undefined) { alpha = this.globalAlpha; }\r\n\r\n if (tint === undefined)\r\n {\r\n tint = (this.globalTint >> 16) + (this.globalTint & 0xff00) + ((this.globalTint & 0xff) << 16);\r\n }\r\n else\r\n {\r\n tint = (tint >> 16) + (tint & 0xff00) + ((tint & 0xff) << 16);\r\n }\r\n\r\n if (!Array.isArray(entries))\r\n {\r\n entries = [ entries ];\r\n }\r\n\r\n var gl = this.gl;\r\n\r\n this.camera.preRender(1, 1);\r\n\r\n if (gl)\r\n {\r\n var cx = this.camera._cx;\r\n var cy = this.camera._cy;\r\n var cw = this.camera._cw;\r\n var ch = this.camera._ch;\r\n\r\n this.renderer.setFramebuffer(this.framebuffer, false);\r\n\r\n this.renderer.pushScissor(cx, cy, cw, ch, ch);\r\n\r\n var pipeline = this.pipeline;\r\n \r\n pipeline.projOrtho(0, this.texture.width, 0, this.texture.height, -1000.0, 1000.0);\r\n\r\n this.batchList(entries, x, y, alpha, tint);\r\n\r\n pipeline.flush();\r\n\r\n this.renderer.setFramebuffer(null, false);\r\n\r\n this.renderer.popScissor();\r\n\r\n pipeline.projOrtho(0, pipeline.width, pipeline.height, 0, -1000.0, 1000.0);\r\n }\r\n else\r\n {\r\n this.renderer.setContext(this.context);\r\n\r\n this.batchList(entries, x, y, alpha, tint);\r\n\r\n this.renderer.setContext();\r\n }\r\n\r\n this.dirty = true;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Draws the Texture Frame to the Render Texture at the given position.\r\n * \r\n * Textures are referenced by their string-based keys, as stored in the Texture Manager.\r\n * \r\n * ```javascript\r\n * var rt = this.add.renderTexture(0, 0, 800, 600);\r\n * rt.drawFrame(key, frame);\r\n * ```\r\n * \r\n * You can optionally provide a position, alpha and tint value to apply to the frame\r\n * before it is drawn.\r\n * \r\n * Calling this method will cause a batch flush, so if you've got a stack of things to draw\r\n * in a tight loop, try using the `draw` method instead.\r\n * \r\n * If you need to draw a Sprite to this Render Texture, use the `draw` method instead.\r\n *\r\n * @method Phaser.GameObjects.RenderTexture#drawFrame\r\n * @since 3.12.0\r\n *\r\n * @param {string} key - The key of the texture to be used, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - The name or index of the frame within the Texture.\r\n * @param {number} [x=0] - The x position to draw the frame at.\r\n * @param {number} [y=0] - The y position to draw the frame at.\r\n * @param {number} [alpha] - The alpha to use. If not specified it uses the `globalAlpha` property.\r\n * @param {number} [tint] - WebGL only. The tint color to use. If not specified it uses the `globalTint` property.\r\n *\r\n * @return {this} This Render Texture instance.\r\n */\r\n drawFrame: function (key, frame, x, y, alpha, tint)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n if (alpha === undefined) { alpha = this.globalAlpha; }\r\n\r\n if (tint === undefined)\r\n {\r\n tint = (this.globalTint >> 16) + (this.globalTint & 0xff00) + ((this.globalTint & 0xff) << 16);\r\n }\r\n else\r\n {\r\n tint = (tint >> 16) + (tint & 0xff00) + ((tint & 0xff) << 16);\r\n }\r\n\r\n var gl = this.gl;\r\n var textureFrame = this.textureManager.getFrame(key, frame);\r\n\r\n if (textureFrame)\r\n {\r\n this.camera.preRender(1, 1);\r\n\r\n if (gl)\r\n {\r\n var cx = this.camera._cx;\r\n var cy = this.camera._cy;\r\n var cw = this.camera._cw;\r\n var ch = this.camera._ch;\r\n \r\n this.renderer.setFramebuffer(this.framebuffer, false);\r\n \r\n this.renderer.pushScissor(cx, cy, cw, ch, ch);\r\n \r\n var pipeline = this.pipeline;\r\n \r\n pipeline.projOrtho(0, this.texture.width, 0, this.texture.height, -1000.0, 1000.0);\r\n \r\n pipeline.batchTextureFrame(textureFrame, x + this.frame.cutX, y + this.frame.cutY, tint, alpha, this.camera.matrix, null);\r\n \r\n pipeline.flush();\r\n \r\n this.renderer.setFramebuffer(null, false);\r\n\r\n this.renderer.popScissor();\r\n \r\n pipeline.projOrtho(0, pipeline.width, pipeline.height, 0, -1000.0, 1000.0);\r\n }\r\n else\r\n {\r\n this.batchTextureFrame(textureFrame, x + this.frame.cutX, y + this.frame.cutY, alpha, tint);\r\n }\r\n\r\n this.dirty = true;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Internal method that handles the drawing of an array of children.\r\n *\r\n * @method Phaser.GameObjects.RenderTexture#batchList\r\n * @private\r\n * @since 3.12.0\r\n *\r\n * @param {array} children - The array of Game Objects to draw.\r\n * @param {number} [x] - The x position to offset the Game Object by.\r\n * @param {number} [y] - The y position to offset the Game Object by.\r\n * @param {number} [alpha] - The alpha to use. If not specified it uses the `globalAlpha` property.\r\n * @param {number} [tint] - The tint color to use. If not specified it uses the `globalTint` property.\r\n */\r\n batchList: function (children, x, y, alpha, tint)\r\n {\r\n for (var i = 0; i < children.length; i++)\r\n {\r\n var entry = children[i];\r\n\r\n if (!entry || entry === this)\r\n {\r\n continue;\r\n }\r\n\r\n if (entry.renderWebGL || entry.renderCanvas)\r\n {\r\n // Game Objects\r\n this.drawGameObject(entry, x, y);\r\n }\r\n else if (entry.isParent || entry.list)\r\n {\r\n // Groups / Display Lists\r\n this.batchGroup(entry.getChildren(), x, y);\r\n }\r\n else if (typeof entry === 'string')\r\n {\r\n // Texture key\r\n this.batchTextureFrameKey(entry, null, x, y, alpha, tint);\r\n }\r\n else if (entry instanceof Frame)\r\n {\r\n // Texture Frame instance\r\n this.batchTextureFrame(entry, x, y, alpha, tint);\r\n }\r\n else if (Array.isArray(entry))\r\n {\r\n // Another Array\r\n this.batchList(entry, x, y, alpha, tint);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Internal method that handles the drawing a Phaser Group contents.\r\n *\r\n * @method Phaser.GameObjects.RenderTexture#batchGroup\r\n * @private\r\n * @since 3.12.0\r\n *\r\n * @param {array} children - The array of Game Objects to draw.\r\n * @param {number} [x=0] - The x position to offset the Game Object by.\r\n * @param {number} [y=0] - The y position to offset the Game Object by.\r\n */\r\n batchGroup: function (children, x, y)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n\r\n x += this.frame.cutX;\r\n y += this.frame.cutY;\r\n\r\n for (var i = 0; i < children.length; i++)\r\n {\r\n var entry = children[i];\r\n\r\n if (entry.willRender())\r\n {\r\n var tx = entry.x + x;\r\n var ty = entry.y + y;\r\n\r\n this.drawGameObject(entry, tx, ty);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Internal method that handles drawing a single Phaser Game Object to this Render Texture using WebGL.\r\n *\r\n * @method Phaser.GameObjects.RenderTexture#batchGameObjectWebGL\r\n * @private\r\n * @since 3.12.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to draw.\r\n * @param {number} [x] - The x position to draw the Game Object at.\r\n * @param {number} [y] - The y position to draw the Game Object at.\r\n */\r\n batchGameObjectWebGL: function (gameObject, x, y)\r\n {\r\n if (x === undefined) { x = gameObject.x; }\r\n if (y === undefined) { y = gameObject.y; }\r\n\r\n var prevX = gameObject.x;\r\n var prevY = gameObject.y;\r\n\r\n if (!this._eraseMode)\r\n {\r\n this.renderer.setBlendMode(gameObject.blendMode);\r\n }\r\n\r\n gameObject.setPosition(x + this.frame.cutX, y + this.frame.cutY);\r\n \r\n gameObject.renderWebGL(this.renderer, gameObject, 0, this.camera, null);\r\n\r\n gameObject.setPosition(prevX, prevY);\r\n },\r\n\r\n /**\r\n * Internal method that handles drawing a single Phaser Game Object to this Render Texture using Canvas.\r\n *\r\n * @method Phaser.GameObjects.RenderTexture#batchGameObjectCanvas\r\n * @private\r\n * @since 3.12.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to draw.\r\n * @param {number} [x] - The x position to draw the Game Object at.\r\n * @param {number} [y] - The y position to draw the Game Object at.\r\n */\r\n batchGameObjectCanvas: function (gameObject, x, y)\r\n {\r\n if (x === undefined) { x = gameObject.x; }\r\n if (y === undefined) { y = gameObject.y; }\r\n\r\n var prevX = gameObject.x;\r\n var prevY = gameObject.y;\r\n\r\n if (this._eraseMode)\r\n {\r\n var blendMode = gameObject.blendMode;\r\n\r\n gameObject.blendMode = BlendModes.ERASE;\r\n }\r\n\r\n gameObject.setPosition(x + this.frame.cutX, y + this.frame.cutY);\r\n\r\n gameObject.renderCanvas(this.renderer, gameObject, 0, this.camera, null);\r\n\r\n gameObject.setPosition(prevX, prevY);\r\n\r\n if (this._eraseMode)\r\n {\r\n gameObject.blendMode = blendMode;\r\n }\r\n },\r\n\r\n /**\r\n * Internal method that handles the drawing of an array of children.\r\n *\r\n * @method Phaser.GameObjects.RenderTexture#batchTextureFrameKey\r\n * @private\r\n * @since 3.12.0\r\n *\r\n * @param {string} key - The key of the texture to be used, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - The name or index of the frame within the Texture.\r\n * @param {number} [x=0] - The x position to offset the Game Object by.\r\n * @param {number} [y=0] - The y position to offset the Game Object by.\r\n * @param {number} [alpha] - The alpha to use. If not specified it uses the `globalAlpha` property.\r\n * @param {number} [tint] - The tint color to use. If not specified it uses the `globalTint` property.\r\n */\r\n batchTextureFrameKey: function (key, frame, x, y, alpha, tint)\r\n {\r\n var textureFrame = this.textureManager.getFrame(key, frame);\r\n\r\n if (textureFrame)\r\n {\r\n this.batchTextureFrame(textureFrame, x, y, alpha, tint);\r\n }\r\n },\r\n\r\n /**\r\n * Internal method that handles the drawing of a Texture Frame to this Render Texture.\r\n *\r\n * @method Phaser.GameObjects.RenderTexture#batchTextureFrame\r\n * @private\r\n * @since 3.12.0\r\n *\r\n * @param {Phaser.Textures.Frame} textureFrame - The Texture Frame to draw.\r\n * @param {number} [x=0] - The x position to draw the Frame at.\r\n * @param {number} [y=0] - The y position to draw the Frame at.\r\n * @param {number} [tint] - A tint color to be applied to the frame drawn to the Render Texture.\r\n */\r\n batchTextureFrame: function (textureFrame, x, y, alpha, tint)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n\r\n x += this.frame.cutX;\r\n y += this.frame.cutY;\r\n\r\n if (this.gl)\r\n {\r\n this.pipeline.batchTextureFrame(textureFrame, x, y, tint, alpha, this.camera.matrix, null);\r\n }\r\n else\r\n {\r\n var ctx = this.context;\r\n var cd = textureFrame.canvasData;\r\n var source = textureFrame.source.image;\r\n \r\n var matrix = this.camera.matrix;\r\n \r\n ctx.globalAlpha = this.globalAlpha;\r\n\r\n ctx.setTransform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);\r\n\r\n ctx.drawImage(source, cd.x, cd.y, cd.width, cd.height, x, y, cd.width, cd.height);\r\n }\r\n },\r\n\r\n /**\r\n * Takes a snapshot of the given area of this Render Texture.\r\n * \r\n * The snapshot is taken immediately.\r\n * \r\n * To capture the whole Render Texture see the `snapshot` method. To capture a specific pixel, see `snapshotPixel`.\r\n * \r\n * Snapshots work by using the WebGL `readPixels` feature to grab every pixel from the frame buffer into an ArrayBufferView.\r\n * It then parses this, copying the contents to a temporary Canvas and finally creating an Image object from it,\r\n * which is the image returned to the callback provided. All in all, this is a computationally expensive and blocking process,\r\n * which gets more expensive the larger the canvas size gets, so please be careful how you employ this in your game.\r\n *\r\n * @method Phaser.GameObjects.RenderTexture#snapshotArea\r\n * @since 3.19.0\r\n *\r\n * @param {integer} x - The x coordinate to grab from.\r\n * @param {integer} y - The y coordinate to grab from.\r\n * @param {integer} width - The width of the area to grab.\r\n * @param {integer} height - The height of the area to grab.\r\n * @param {Phaser.Types.Renderer.Snapshot.SnapshotCallback} callback - The Function to invoke after the snapshot image is created.\r\n * @param {string} [type='image/png'] - The format of the image to create, usually `image/png` or `image/jpeg`.\r\n * @param {number} [encoderOptions=0.92] - The image quality, between 0 and 1. Used for image formats with lossy compression, such as `image/jpeg`.\r\n *\r\n * @return {this} This Render Texture instance.\r\n */\r\n snapshotArea: function (x, y, width, height, callback, type, encoderOptions)\r\n {\r\n if (this.gl)\r\n {\r\n this.renderer.snapshotFramebuffer(this.framebuffer, this.width, this.height, callback, false, x, y, width, height, type, encoderOptions);\r\n }\r\n else\r\n {\r\n this.renderer.snapshotCanvas(this.canvas, callback, false, x, y, width, height, type, encoderOptions);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Takes a snapshot of the whole of this Render Texture.\r\n * \r\n * The snapshot is taken immediately.\r\n * \r\n * To capture just a portion of the Render Texture see the `snapshotArea` method. To capture a specific pixel, see `snapshotPixel`.\r\n * \r\n * Snapshots work by using the WebGL `readPixels` feature to grab every pixel from the frame buffer into an ArrayBufferView.\r\n * It then parses this, copying the contents to a temporary Canvas and finally creating an Image object from it,\r\n * which is the image returned to the callback provided. All in all, this is a computationally expensive and blocking process,\r\n * which gets more expensive the larger the canvas size gets, so please be careful how you employ this in your game.\r\n *\r\n * @method Phaser.GameObjects.RenderTexture#snapshot\r\n * @since 3.19.0\r\n *\r\n * @param {Phaser.Types.Renderer.Snapshot.SnapshotCallback} callback - The Function to invoke after the snapshot image is created.\r\n * @param {string} [type='image/png'] - The format of the image to create, usually `image/png` or `image/jpeg`.\r\n * @param {number} [encoderOptions=0.92] - The image quality, between 0 and 1. Used for image formats with lossy compression, such as `image/jpeg`.\r\n *\r\n * @return {this} This Render Texture instance.\r\n */\r\n snapshot: function (callback, type, encoderOptions)\r\n {\r\n if (this.gl)\r\n {\r\n this.renderer.snapshotFramebuffer(this.framebuffer, this.width, this.height, callback, false, 0, 0, this.width, this.height, type, encoderOptions);\r\n }\r\n else\r\n {\r\n this.renderer.snapshotCanvas(this.canvas, callback, false, 0, 0, this.width, this.height, type, encoderOptions);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Takes a snapshot of the given pixel from this Render Texture.\r\n * \r\n * The snapshot is taken immediately.\r\n * \r\n * To capture the whole Render Texture see the `snapshot` method. To capture a specific portion, see `snapshotArea`.\r\n * \r\n * Unlike the other two snapshot methods, this one will send your callback a `Color` object containing the color data for\r\n * the requested pixel. It doesn't need to create an internal Canvas or Image object, so is a lot faster to execute,\r\n * using less memory, than the other snapshot methods.\r\n *\r\n * @method Phaser.GameObjects.RenderTexture#snapshotPixel\r\n * @since 3.19.0\r\n *\r\n * @param {integer} x - The x coordinate of the pixel to get.\r\n * @param {integer} y - The y coordinate of the pixel to get.\r\n * @param {Phaser.Types.Renderer.Snapshot.SnapshotCallback} callback - The Function to invoke after the snapshot pixel data is extracted.\r\n *\r\n * @return {this} This Render Texture instance.\r\n */\r\n snapshotPixel: function (x, y, callback)\r\n {\r\n if (this.gl)\r\n {\r\n this.renderer.snapshotFramebuffer(this.framebuffer, this.width, this.height, callback, true, x, y);\r\n }\r\n else\r\n {\r\n this.renderer.snapshotCanvas(this.canvas, callback, true, x, y);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Internal destroy handler, called as part of the destroy process.\r\n *\r\n * @method Phaser.GameObjects.RenderTexture#preDestroy\r\n * @protected\r\n * @since 3.9.0\r\n */\r\n preDestroy: function ()\r\n {\r\n if (!this._saved)\r\n {\r\n CanvasPool.remove(this.canvas);\r\n\r\n if (this.gl)\r\n {\r\n this.renderer.deleteFramebuffer(this.framebuffer);\r\n }\r\n\r\n this.texture.destroy();\r\n this.camera.destroy();\r\n\r\n this.canvas = null;\r\n this.context = null;\r\n this.framebuffer = null;\r\n this.texture = null;\r\n this.glTexture = null;\r\n }\r\n }\r\n\r\n});\r\n\r\nmodule.exports = RenderTexture;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9yZW5kZXJ0ZXh0dXJlL1JlbmRlclRleHR1cmUuanM/OGQ1YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsbUZBQTJCO0FBQ3BELGFBQWEsbUJBQU8sQ0FBQyx1RkFBNkI7QUFDbEQsaUJBQWlCLG1CQUFPLENBQUMsK0ZBQWlDO0FBQzFELFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsZ0ZBQWU7QUFDeEMsWUFBWSxtQkFBTyxDQUFDLHVEQUFhO0FBQ2pDLFlBQVksbUJBQU8sQ0FBQyx5RUFBc0I7QUFDMUMsaUJBQWlCLG1CQUFPLENBQUMsMEVBQWU7QUFDeEMsYUFBYSxtQkFBTyxDQUFDLHlHQUF1QjtBQUM1QyxZQUFZLG1CQUFPLENBQUMscUZBQTRCO0FBQ2hELFdBQVcsbUJBQU8sQ0FBQywrRUFBeUI7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsT0FBTztBQUNyQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPO0FBQ3JDLGtDQUFrQyxZQUFZO0FBQzlDLG1DQUFtQyxhQUFhOztBQUVoRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsZ0JBQWdCOztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsV0FBVztBQUM3Qyw4QkFBOEIsT0FBTztBQUNyQyw4QkFBOEIsT0FBTztBQUNyQyxrQ0FBa0MsNkJBQTZCO0FBQy9ELG1DQUFtQywrQkFBK0I7O0FBRWxFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLElBQUk7QUFDbkIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxJQUFJO0FBQ25CLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQywwQkFBMEI7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsaUJBQWlCO0FBQ2hDLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPO0FBQ3JDLGtDQUFrQywwQkFBMEI7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHFCQUFxQjtBQUM1QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7O0FBRUEsdUJBQXVCLHFCQUFxQjtBQUM1QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixrQkFBa0I7QUFDaEQsOEJBQThCLGtCQUFrQjs7QUFFaEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixrQkFBa0I7QUFDaEQsOEJBQThCLGtCQUFrQjs7QUFFaEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxpQkFBaUI7QUFDaEMsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsc0JBQXNCO0FBQ3JDLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPOztBQUVyQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxnREFBZ0Q7QUFDL0QsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0RBQWdEO0FBQy9ELGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLGdEQUFnRDtBQUMvRDtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9yZW5kZXJ0ZXh0dXJlL1JlbmRlclRleHR1cmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCbGVuZE1vZGVzID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXIvQmxlbmRNb2RlcycpO1xyXG52YXIgQ2FtZXJhID0gcmVxdWlyZSgnLi4vLi4vY2FtZXJhcy8yZC9CYXNlQ2FtZXJhJyk7XHJcbnZhciBDYW52YXNQb29sID0gcmVxdWlyZSgnLi4vLi4vZGlzcGxheS9jYW52YXMvQ2FudmFzUG9vbCcpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ29tcG9uZW50cyA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMnKTtcclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcclxudmFyIEZyYW1lID0gcmVxdWlyZSgnLi4vLi4vdGV4dHVyZXMvRnJhbWUnKTtcclxudmFyIEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Jyk7XHJcbnZhciBSZW5kZXIgPSByZXF1aXJlKCcuL1JlbmRlclRleHR1cmVSZW5kZXInKTtcclxudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXIvd2ViZ2wvVXRpbHMnKTtcclxudmFyIFVVSUQgPSByZXF1aXJlKCcuLi8uLi91dGlscy9zdHJpbmcvVVVJRCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBSZW5kZXIgVGV4dHVyZS5cclxuICogXHJcbiAqIEEgUmVuZGVyIFRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IG51bWJlciBvZiBHYW1lIE9iamVjdHMgdG8gYmUgZHJhd24gdG8gaXQuIFlvdSBjYW4gdGFrZSBtYW55IGNvbXBsZXggb2JqZWN0cyBhbmRcclxuICogZHJhdyB0aGVtIGFsbCB0byB0aGlzIG9uZSB0ZXh0dXJlLCB3aGljaCBjYW4gdGhleSBiZSB1c2VkIGFzIHRoZSB0ZXh0dXJlIGZvciBvdGhlciBHYW1lIE9iamVjdCdzLiBJdCdzIGEgd2F5IHRvIGdlbmVyYXRlIGR5bmFtaWNcclxuICogdGV4dHVyZXMgYXQgcnVuLXRpbWUgdGhhdCBhcmUgV2ViR0wgZnJpZW5kbHkgYW5kIGRvbid0IGludm9rZSBleHBlbnNpdmUgR1BVIHVwbG9hZHMuXHJcbiAqIFxyXG4gKiBOb3RlIHRoYXQgdW5kZXIgV2ViR0wgYSBGcmFtZUJ1ZmZlciwgd2hpY2ggaXMgd2hhdCB0aGUgUmVuZGVyIFRleHR1cmUgdXNlcyBpbnRlcm5hbGx5LCBjYW5ub3QgYmUgYW50aS1hbGlhc2VkLiBUaGlzIG1lYW5zXHJcbiAqIHRoYXQgd2hlbiBkcmF3aW5nIG9iamVjdHMgc3VjaCBhcyBTaGFwZXMgdG8gYSBSZW5kZXIgVGV4dHVyZSB0aGV5IHdpbGwgYXBwZWFyIHRvIGJlIGRyYXduIHdpdGggbm8gYWxpYXNpbmcsIGhvd2V2ZXIgdGhpc1xyXG4gKiBpcyBhIHRlY2huaWNhbCBsaW1pdGF0aW9uIG9mIFdlYkdMLiBUbyBnZXQgYXJvdW5kIGl0LCBjcmVhdGUgeW91ciBzaGFwZSBhcyBhIHRleHR1cmUgaW4gYW4gYXJ0IHBhY2thZ2UsIHRoZW4gZHJhdyB0aGF0XHJcbiAqIHRvIHRoZSBSZW5kZXIgVGV4dHVyZS5cclxuICpcclxuICogQGNsYXNzIFJlbmRlclRleHR1cmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RcclxuICogQG1lbWJlcm9mIFBoYXNlci5HYW1lT2JqZWN0c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMi4wXHJcbiAqXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFscGhhXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkJsZW5kTW9kZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5Db21wdXRlZFNpemVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGhcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRmxpcFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHNcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuTWFza1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5PcmlnaW5cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGlwZWxpbmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2Nyb2xsRmFjdG9yXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRpbnRcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgYmVsb25ncy4gQSBHYW1lIE9iamVjdCBjYW4gb25seSBiZWxvbmcgdG8gb25lIFNjZW5lIGF0IGEgdGltZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9MzJdIC0gVGhlIHdpZHRoIG9mIHRoZSBSZW5kZXIgVGV4dHVyZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0PTMyXSAtIFRoZSBoZWlnaHQgb2YgdGhlIFJlbmRlciBUZXh0dXJlLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2tleV0gLSBUaGUgdGV4dHVyZSBrZXkgdG8gbWFrZSB0aGUgUmVuZGVyVGV4dHVyZSBmcm9tLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2ZyYW1lXSAtIHRoZSBmcmFtZSB0byBtYWtlIHRoZSBSZW5kZXJUZXh0dXJlIGZyb20uXHJcbiAqL1xyXG52YXIgUmVuZGVyVGV4dHVyZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogR2FtZU9iamVjdCxcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBDb21wb25lbnRzLkFscGhhLFxyXG4gICAgICAgIENvbXBvbmVudHMuQmxlbmRNb2RlLFxyXG4gICAgICAgIENvbXBvbmVudHMuQ29tcHV0ZWRTaXplLFxyXG4gICAgICAgIENvbXBvbmVudHMuQ3JvcCxcclxuICAgICAgICBDb21wb25lbnRzLkRlcHRoLFxyXG4gICAgICAgIENvbXBvbmVudHMuRmxpcCxcclxuICAgICAgICBDb21wb25lbnRzLkdldEJvdW5kcyxcclxuICAgICAgICBDb21wb25lbnRzLk1hc2ssXHJcbiAgICAgICAgQ29tcG9uZW50cy5PcmlnaW4sXHJcbiAgICAgICAgQ29tcG9uZW50cy5QaXBlbGluZSxcclxuICAgICAgICBDb21wb25lbnRzLlNjcm9sbEZhY3RvcixcclxuICAgICAgICBDb21wb25lbnRzLlRpbnQsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UcmFuc2Zvcm0sXHJcbiAgICAgICAgQ29tcG9uZW50cy5WaXNpYmxlLFxyXG4gICAgICAgIFJlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFJlbmRlclRleHR1cmUgKHNjZW5lLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBrZXksIGZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHsgd2lkdGggPSAzMjsgfVxyXG4gICAgICAgIGlmIChoZWlnaHQgPT09IHVuZGVmaW5lZCkgeyBoZWlnaHQgPSAzMjsgfVxyXG5cclxuICAgICAgICBHYW1lT2JqZWN0LmNhbGwodGhpcywgc2NlbmUsICdSZW5kZXJUZXh0dXJlJyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIGVpdGhlciB0aGUgQ2FudmFzIG9yIFdlYkdMIFJlbmRlcmVyIHRoYXQgdGhlIEdhbWUgaW5zdGFuY2UgaXMgdXNpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUmVuZGVyVGV4dHVyZSNyZW5kZXJlclxyXG4gICAgICAgICAqIEB0eXBlIHsoUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcnxQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcil9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHNjZW5lLnN5cy5nYW1lLnJlbmRlcmVyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjdGV4dHVyZU1hbmFnZXJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlRleHR1cmVzLlRleHR1cmVNYW5hZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyID0gc2NlbmUuc3lzLnRleHR1cmVzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGludCBvZiB0aGUgUmVuZGVyIFRleHR1cmUgd2hlbiByZW5kZXJlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI2dsb2JhbFRpbnRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDB4ZmZmZmZmXHJcbiAgICAgICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nbG9iYWxUaW50ID0gMHhmZmZmZmY7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBhbHBoYSBvZiB0aGUgUmVuZGVyIFRleHR1cmUgd2hlbiByZW5kZXJlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI2dsb2JhbEFscGhhXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nbG9iYWxBbHBoYSA9IDE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBIVE1MIENhbnZhcyBFbGVtZW50IHRoYXQgdGhlIFJlbmRlciBUZXh0dXJlIGlzIGRyYXdpbmcgdG8gd2hlbiB1c2luZyB0aGUgQ2FudmFzIFJlbmRlcmVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjY2FudmFzXHJcbiAgICAgICAgICogQHR5cGUge0hUTUxDYW52YXNFbGVtZW50fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIEdMIEZyYW1lIEJ1ZmZlciB0aGlzIFJlbmRlciBUZXh0dXJlIGlzIGRyYXdpbmcgdG8uXHJcbiAgICAgICAgICogVGhpcyBpcyBvbmx5IHNldCBpZiBQaGFzZXIgaXMgcnVubmluZyB3aXRoIHRoZSBXZWJHTCBSZW5kZXJlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI2ZyYW1lYnVmZmVyXHJcbiAgICAgICAgICogQHR5cGUgez9XZWJHTEZyYW1lYnVmZmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZnJhbWVidWZmZXIgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJcyB0aGlzIFJlbmRlciBUZXh0dXJlIGRpcnR5IG9yIG5vdD8gSWYgbm90IGl0IHdvbid0IHNwZW5kIHRpbWUgY2xlYXJpbmcgb3IgZmlsbGluZyBpdHNlbGYuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUmVuZGVyVGV4dHVyZSNkaXJ0eVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBpbnRlcm5hbCBjcm9wIGRhdGEgb2JqZWN0LCBhcyB1c2VkIGJ5IGBzZXRDcm9wYCBhbmQgcGFzc2VkIHRvIHRoZSBgRnJhbWUuc2V0Q3JvcFVWc2AgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjX2Nyb3BcclxuICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2Nyb3AgPSB0aGlzLnJlc2V0Q3JvcE9iamVjdCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgVGV4dHVyZSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgUmVuZGVyIFRleHR1cmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuUmVuZGVyVGV4dHVyZSN0ZXh0dXJlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgRnJhbWUgY29ycmVzcG9uZGluZyB0byB0aGlzIFJlbmRlciBUZXh0dXJlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjZnJhbWVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlRleHR1cmVzLkZyYW1lfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZyYW1lID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgc2F2ZWQgdGV4dHVyZSBmbGFnLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjX3NhdmVkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fc2F2ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBDYW52YXNQb29sLmNyZWF0ZTJEKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgLy8gIENyZWF0ZSBhIG5ldyBUZXh0dXJlIGZvciB0aGlzIFRleHQgb2JqZWN0XHJcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZSA9IHNjZW5lLnN5cy50ZXh0dXJlcy5hZGRDYW52YXMoVVVJRCgpLCB0aGlzLmNhbnZhcyk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyAgR2V0IHRoZSBmcmFtZVxyXG4gICAgICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy50ZXh0dXJlLmdldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnRleHR1cmUgPSBzY2VuZS5zeXMudGV4dHVyZXMuZ2V0KGtleSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyAgR2V0IHRoZSBmcmFtZVxyXG4gICAgICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy50ZXh0dXJlLmdldChmcmFtZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNhbnZhcyA9IHRoaXMuZnJhbWUuc291cmNlLmltYWdlO1xyXG4gICAgICAgICAgICB0aGlzLl9zYXZlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLmZyYW1lLmN1dFdpZHRoO1xyXG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuZnJhbWUuY3V0SGVpZ2h0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFJlbmRlcmluZyBDb250ZXh0IGJlbG9uZ2luZyB0byB0aGUgQ2FudmFzIEVsZW1lbnQgdGhpcyBSZW5kZXIgVGV4dHVyZSBpcyBkcmF3aW5nIHRvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjY29udGV4dFxyXG4gICAgICAgICAqIEB0eXBlIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgZXJhc2UgbW9kZSBmbGFnLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjX2VyYXNlTW9kZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2VyYXNlTW9kZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBpbnRlcm5hbCBDYW1lcmEgdGhhdCBjYW4gYmUgdXNlZCB0byBtb3ZlIGFyb3VuZCB0aGUgUmVuZGVyIFRleHR1cmUuXHJcbiAgICAgICAgICogQ29udHJvbCBpdCBqdXN0IGxpa2UgeW91IHdvdWxkIGFueSBTY2VuZSBDYW1lcmEuIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgaXQgb25seSBpbXBhY3RzIHRoZSBwbGFjZW1lbnQgb2Ygd2hhdFxyXG4gICAgICAgICAqIGlzIGRyYXduIHRvIHRoZSBSZW5kZXIgVGV4dHVyZS4gWW91IGNhbiBzY3JvbGwsIHpvb20gYW5kIHJvdGF0ZSB0aGlzIENhbWVyYS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI2NhbWVyYVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkJhc2VDYW1lcmF9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY2FtZXJhID0gbmV3IENhbWVyYSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMIFJlbmRlcmluZyBDb250ZXh0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjZ2xcclxuICAgICAgICAgKiBAdHlwZSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdsID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMVGV4dHVyZSB0aGF0IGlzIGJlaW5nIHJlbmRlcmVkIHRvIGluIGEgV2ViR0wgQ29udGV4dC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI2dsVGV4dHVyZVxyXG4gICAgICAgICAqIEB0eXBlIHtXZWJHTFRleHR1cmV9XHJcbiAgICAgICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE5LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdsVGV4dHVyZSA9IG51bGw7XHJcblxyXG4gICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XHJcblxyXG4gICAgICAgIGlmIChyZW5kZXJlci50eXBlID09PSBDT05TVC5XRUJHTClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nbCA9IGdsO1xyXG4gICAgICAgICAgICB0aGlzLmdsVGV4dHVyZSA9IHRoaXMuZnJhbWUuc291cmNlLmdsVGV4dHVyZTtcclxuICAgICAgICAgICAgdGhpcy5kcmF3R2FtZU9iamVjdCA9IHRoaXMuYmF0Y2hHYW1lT2JqZWN0V2ViR0w7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVidWZmZXIgPSByZW5kZXJlci5jcmVhdGVGcmFtZWJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCB0aGlzLmdsVGV4dHVyZSwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChyZW5kZXJlci50eXBlID09PSBDT05TVC5DQU5WQVMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmRyYXdHYW1lT2JqZWN0ID0gdGhpcy5iYXRjaEdhbWVPYmplY3RDYW52YXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNhbWVyYS5zZXRTY2VuZShzY2VuZSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24oeCwgeSk7XHJcblxyXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0T3JpZ2luKDAsIDApO1xyXG4gICAgICAgIHRoaXMuaW5pdFBpcGVsaW5lKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgc2l6ZSBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI3NldFNpemVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0U2l6ZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2l6ZXMgdGhlIFJlbmRlciBUZXh0dXJlIHRvIHRoZSBuZXcgZGltZW5zaW9ucyBnaXZlbi5cclxuICAgICAqIFxyXG4gICAgICogSWYgUmVuZGVyIFRleHR1cmUgd2FzIGNyZWF0ZWQgZnJvbSBzcGVjaWZpYyBmcmFtZSwgb25seSB0aGUgc2l6ZSBvZiB0aGUgZnJhbWUgd2lsbCBiZSBjaGFuZ2VkLiBUaGUgc2l6ZSBvZiB0aGUgc291cmNlXHJcbiAgICAgKiB0ZXh0dXJlIHdpbGwgbm90IGNoYW5nZS5cclxuICAgICAqXHJcbiAgICAgKiBJZiBSZW5kZXIgVGV4dHVyZSB3YXMgbm90IGNyZWF0ZWQgZnJvbSBzcGVjaWZpYyBmcmFtZSwgdGhlIGZvbGxvd2luZyB3aWxsIGhhcHBlbjpcclxuICAgICAqIEluIFdlYkdMIGl0IHdpbGwgZGVzdHJveSBhbmQgdGhlbiByZS1jcmVhdGUgdGhlIGZyYW1lIGJ1ZmZlciBiZWluZyB1c2VkIGJ5IHRoZSBSZW5kZXIgVGV4dHVyZS5cclxuICAgICAqIEluIENhbnZhcyBpdCB3aWxsIHJlc2l6ZSB0aGUgdW5kZXJseWluZyBjYW52YXMgZWxlbWVudC5cclxuICAgICAqIEJvdGggYXBwcm9hY2hlcyB3aWxsIGVyYXNlIGV2ZXJ5dGhpbmcgY3VycmVudGx5IGRyYXduIHRvIHRoZSBSZW5kZXIgVGV4dHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgZGltZW5zaW9ucyBnaXZlbiBhcmUgdGhlIHNhbWUgYXMgdGhvc2UgYWxyZWFkeSBiZWluZyB1c2VkLCBjYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgZG8gbm90aGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI3Jlc2l6ZVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSBuZXcgd2lkdGggb2YgdGhlIFJlbmRlciBUZXh0dXJlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtoZWlnaHQ9d2lkdGhdIC0gVGhlIG5ldyBoZWlnaHQgb2YgdGhlIFJlbmRlciBUZXh0dXJlLiBJZiBub3Qgc3BlY2lmaWVkLCB3aWxsIGJlIHNldCB0aGUgc2FtZSBhcyB0aGUgYHdpZHRoYC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFJlbmRlciBUZXh0dXJlLlxyXG4gICAgICovXHJcbiAgICByZXNpemU6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChoZWlnaHQgPT09IHVuZGVmaW5lZCkgeyBoZWlnaHQgPSB3aWR0aDsgfVxyXG5cclxuICAgICAgICBpZiAod2lkdGggIT09IHRoaXMud2lkdGggfHwgaGVpZ2h0ICE9PSB0aGlzLmhlaWdodClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZyYW1lLm5hbWUgPT09ICdfX0JBU0UnKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgUmVzaXplIHRoZSB0ZXh0dXJlXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0dXJlLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5nbClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZ2wgPSB0aGlzLmdsO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRlbGV0ZVRleHR1cmUodGhpcy5mcmFtZS5zb3VyY2UuZ2xUZXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRlbGV0ZUZyYW1lYnVmZmVyKHRoaXMuZnJhbWVidWZmZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgZ2xUZXh0dXJlID0gdGhpcy5yZW5kZXJlci5jcmVhdGVUZXh0dXJlMkQoMCwgZ2wuTkVBUkVTVCwgZ2wuTkVBUkVTVCwgZ2wuQ0xBTVBfVE9fRURHRSwgZ2wuQ0xBTVBfVE9fRURHRSwgZ2wuUkdCQSwgbnVsbCwgd2lkdGgsIGhlaWdodCwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZyYW1lYnVmZmVyID0gdGhpcy5yZW5kZXJlci5jcmVhdGVGcmFtZWJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCBnbFRleHR1cmUsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mcmFtZS5zb3VyY2UuaXNSZW5kZXJUZXh0dXJlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mcmFtZS5nbFRleHR1cmUgPSBnbFRleHR1cmU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nbFRleHR1cmUgPSBnbFRleHR1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5mcmFtZS5zb3VyY2Uud2lkdGggPSB3aWR0aDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUuc291cmNlLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbWVyYS5zZXRTaXplKHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgUmVzaXplIHRoZSBmcmFtZVxyXG5cclxuICAgICAgICAgICAgdmFyIGJhc2VGcmFtZSA9IHRoaXMudGV4dHVyZS5nZXRTb3VyY2VJbWFnZSgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZnJhbWUuY3V0WCArIHdpZHRoID4gYmFzZUZyYW1lLndpZHRoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aCA9IGJhc2VGcmFtZS53aWR0aCAtIHRoaXMuZnJhbWUuY3V0WDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZnJhbWUuY3V0WSArIGhlaWdodCA+IGJhc2VGcmFtZS5oZWlnaHQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGhlaWdodCA9IGJhc2VGcmFtZS5oZWlnaHQgLSB0aGlzLmZyYW1lLmN1dFk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0LCB0aGlzLmZyYW1lLmN1dFgsIHRoaXMuZnJhbWUuY3V0WSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXlPcmlnaW4oKTtcclxuXHJcbiAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5pbnB1dDtcclxuXHJcbiAgICAgICAgaWYgKGlucHV0ICYmICFpbnB1dC5jdXN0b21IaXRBcmVhKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaW5wdXQuaGl0QXJlYS53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgICAgICBpbnB1dC5oaXRBcmVhLmhlaWdodCA9IGhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgdGludCB0byB1c2Ugd2hlbiByZW5kZXJpbmcgdGhpcyBSZW5kZXIgVGV4dHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI3NldEdsb2JhbFRpbnRcclxuICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdGludCAtIFRoZSB0aW50IHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgUmVuZGVyIFRleHR1cmUuXHJcbiAgICAgKi9cclxuICAgIHNldEdsb2JhbFRpbnQ6IGZ1bmN0aW9uICh0aW50KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZ2xvYmFsVGludCA9IHRpbnQ7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgYWxwaGEgdG8gdXNlIHdoZW4gcmVuZGVyaW5nIHRoaXMgUmVuZGVyIFRleHR1cmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUmVuZGVyVGV4dHVyZSNzZXRHbG9iYWxBbHBoYVxyXG4gICAgICogQHNpbmNlIDMuMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGFscGhhIC0gVGhlIGFscGhhIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgUmVuZGVyIFRleHR1cmUuXHJcbiAgICAgKi9cclxuICAgIHNldEdsb2JhbEFscGhhOiBmdW5jdGlvbiAoYWxwaGEpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5nbG9iYWxBbHBoYSA9IGFscGhhO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yZXMgYSBjb3B5IG9mIHRoaXMgUmVuZGVyIFRleHR1cmUgaW4gdGhlIFRleHR1cmUgTWFuYWdlciB1c2luZyB0aGUgZ2l2ZW4ga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBBZnRlciBkb2luZyB0aGlzLCBhbnkgdGV4dHVyZSBiYXNlZCBHYW1lIE9iamVjdCwgc3VjaCBhcyBhIFNwcml0ZSwgY2FuIHVzZSB0aGUgY29udGVudHMgb2YgdGhpc1xyXG4gICAgICogUmVuZGVyIFRleHR1cmUgYnkgdXNpbmcgdGhlIHRleHR1cmUga2V5OlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB2YXIgcnQgPSB0aGlzLmFkZC5yZW5kZXJUZXh0dXJlKDAsIDAsIDEyOCwgMTI4KTtcclxuICAgICAqIFxyXG4gICAgICogLy8gRHJhdyBzb21ldGhpbmcgdG8gdGhlIFJlbmRlciBUZXh0dXJlXHJcbiAgICAgKiBcclxuICAgICAqIHJ0LnNhdmVUZXh0dXJlKCdkb29kbGUnKTtcclxuICAgICAqIFxyXG4gICAgICogdGhpcy5hZGQuaW1hZ2UoNDAwLCAzMDAsICdkb29kbGUnKTtcclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiBVcGRhdGluZyB0aGUgY29udGVudHMgb2YgdGhpcyBSZW5kZXIgVGV4dHVyZSB3aWxsIGF1dG9tYXRpY2FsbHkgdXBkYXRlIF9hbnlfIEdhbWUgT2JqZWN0XHJcbiAgICAgKiB0aGF0IGlzIHVzaW5nIGl0IGFzIGEgdGV4dHVyZS4gQ2FsbGluZyBgc2F2ZVRleHR1cmVgIGFnYWluIHdpbGwgbm90IHNhdmUgYW5vdGhlciBjb3B5XHJcbiAgICAgKiBvZiB0aGUgc2FtZSB0ZXh0dXJlLCBpdCB3aWxsIGp1c3QgcmVuYW1lIHRoZSBrZXkgb2YgdGhlIGV4aXN0aW5nIGNvcHkuXHJcbiAgICAgKiBcclxuICAgICAqIEJ5IGRlZmF1bHQgaXQgd2lsbCBjcmVhdGUgYSBzaW5nbGUgYmFzZSB0ZXh0dXJlLiBZb3UgY2FuIGFkZCBmcmFtZXMgdG8gdGhlIHRleHR1cmVcclxuICAgICAqIGJ5IHVzaW5nIHRoZSBgVGV4dHVyZS5hZGRgIG1ldGhvZC4gQWZ0ZXIgZG9pbmcgdGhpcywgeW91IGNhbiB0aGVuIGFsbG93IEdhbWUgT2JqZWN0c1xyXG4gICAgICogdG8gdXNlIGEgc3BlY2lmaWMgZnJhbWUgZnJvbSBhIFJlbmRlciBUZXh0dXJlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjc2F2ZVRleHR1cmVcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBrZXkgdG8gc3RvcmUgdGhlIHRleHR1cmUgYXMgd2l0aGluIHRoZSBnbG9iYWwgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UZXh0dXJlcy5UZXh0dXJlfSBUaGUgVGV4dHVyZSB0aGF0IHdhcyBzYXZlZC5cclxuICAgICAqL1xyXG4gICAgc2F2ZVRleHR1cmU6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlci5yZW5hbWVUZXh0dXJlKHRoaXMudGV4dHVyZS5rZXksIGtleSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5fc2F2ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbGxzIHRoZSBSZW5kZXIgVGV4dHVyZSB3aXRoIHRoZSBnaXZlbiBjb2xvci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI2ZpbGxcclxuICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZ2IgLSBUaGUgY29sb3IgdG8gZmlsbCB0aGUgUmVuZGVyIFRleHR1cmUgd2l0aC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYWxwaGE9MV0gLSBUaGUgYWxwaGEgdmFsdWUgdXNlZCBieSB0aGUgZmlsbC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSBsZWZ0IGNvb3JkaW5hdGUgb2YgdGhlIGZpbGwgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHRvcCBjb29yZGluYXRlIG9mIHRoZSBmaWxsIHJlY3RhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGg9dGhpcy5mcmFtZS5jdXRXaWR0aF0gLSBUaGUgd2lkdGggb2YgdGhlIGZpbGwgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtoZWlnaHQ9dGhpcy5mcmFtZS5jdXRIZWlnaHRdIC0gVGhlIGhlaWdodCBvZiB0aGUgZmlsbCByZWN0YW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBSZW5kZXIgVGV4dHVyZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgZmlsbDogZnVuY3Rpb24gKHJnYiwgYWxwaGEsIHgsIHksIHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGFscGhhID09PSB1bmRlZmluZWQpIHsgYWxwaGEgPSAxOyB9XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IDA7IH1cclxuICAgICAgICBpZiAod2lkdGggPT09IHVuZGVmaW5lZCkgeyB3aWR0aCA9IHRoaXMuZnJhbWUuY3V0V2lkdGg7IH1cclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gdGhpcy5mcmFtZS5jdXRIZWlnaHQ7IH1cclxuXHJcbiAgICAgICAgdmFyIHIgPSAoKHJnYiA+PiAxNikgfCAwKSAmIDB4ZmY7XHJcbiAgICAgICAgdmFyIGcgPSAoKHJnYiA+PiA4KSB8IDApICYgMHhmZjtcclxuICAgICAgICB2YXIgYiA9IChyZ2IgfCAwKSAmIDB4ZmY7XHJcblxyXG4gICAgICAgIHZhciBnbCA9IHRoaXMuZ2w7XHJcbiAgICAgICAgdmFyIGZyYW1lID0gdGhpcy5mcmFtZTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW1lcmEucHJlUmVuZGVyKDEsIDEpO1xyXG5cclxuICAgICAgICBpZiAoZ2wpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY3ggPSB0aGlzLmNhbWVyYS5fY3g7XHJcbiAgICAgICAgICAgIHZhciBjeSA9IHRoaXMuY2FtZXJhLl9jeTtcclxuICAgICAgICAgICAgdmFyIGN3ID0gdGhpcy5jYW1lcmEuX2N3O1xyXG4gICAgICAgICAgICB2YXIgY2ggPSB0aGlzLmNhbWVyYS5fY2g7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEZyYW1lYnVmZmVyKHRoaXMuZnJhbWVidWZmZXIsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucHVzaFNjaXNzb3IoY3gsIGN5LCBjdywgY2gsIGNoKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwaXBlbGluZSA9IHRoaXMucGlwZWxpbmU7XHJcbiAgICBcclxuICAgICAgICAgICAgcGlwZWxpbmUucHJvak9ydGhvKDAsIHRoaXMudGV4dHVyZS53aWR0aCwgMCwgdGhpcy50ZXh0dXJlLmhlaWdodCwgLTEwMDAuMCwgMTAwMC4wKTtcclxuXHJcbiAgICAgICAgICAgIHBpcGVsaW5lLmRyYXdGaWxsUmVjdChcclxuICAgICAgICAgICAgICAgIHgsIHksIHdpZHRoLCBoZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBVdGlscy5nZXRUaW50RnJvbUZsb2F0cyhyIC8gMjU1LCBnIC8gMjU1LCBiIC8gMjU1LCAxKSxcclxuICAgICAgICAgICAgICAgIGFscGhhXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEZyYW1lYnVmZmVyKG51bGwsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucG9wU2Npc3NvcigpO1xyXG5cclxuICAgICAgICAgICAgcGlwZWxpbmUucHJvak9ydGhvKDAsIHBpcGVsaW5lLndpZHRoLCBwaXBlbGluZS5oZWlnaHQsIDAsIC0xMDAwLjAsIDEwMDAuMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0Q29udGV4dCh0aGlzLmNvbnRleHQpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKCcgKyByICsgJywnICsgZyArICcsJyArIGIgKyAnLCcgKyBhbHBoYSArICcpJztcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KHggKyBmcmFtZS5jdXRYLCB5ICsgZnJhbWUuY3V0WSwgd2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldENvbnRleHQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbGVhcnMgdGhlIFJlbmRlciBUZXh0dXJlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjY2xlYXJcclxuICAgICAqIEBzaW5jZSAzLjIuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgUmVuZGVyIFRleHR1cmUgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmRpcnR5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGdsID0gdGhpcy5nbDtcclxuXHJcbiAgICAgICAgICAgIGlmIChnbClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcclxuXHJcbiAgICAgICAgICAgICAgICByZW5kZXJlci5zZXRGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyLCB0cnVlKTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZyYW1lLmN1dFdpZHRoICE9PSB0aGlzLmNhbnZhcy53aWR0aCB8fCB0aGlzLmZyYW1lLmN1dEhlaWdodCAhPT0gdGhpcy5jYW52YXMuaGVpZ2h0KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGdsLnNjaXNzb3IodGhpcy5mcmFtZS5jdXRYLCB0aGlzLmZyYW1lLmN1dFksIHRoaXMuZnJhbWUuY3V0V2lkdGgsIHRoaXMuZnJhbWUuY3V0SGVpZ2h0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApO1xyXG4gICAgICAgICAgICAgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0RnJhbWVidWZmZXIobnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3R4ID0gdGhpcy5jb250ZXh0O1xyXG5cclxuICAgICAgICAgICAgICAgIGN0eC5zYXZlKCk7XHJcbiAgICAgICAgICAgICAgICBjdHguc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xyXG4gICAgICAgICAgICAgICAgY3R4LmNsZWFyUmVjdCh0aGlzLmZyYW1lLmN1dFgsIHRoaXMuZnJhbWUuY3V0WSwgdGhpcy5mcmFtZS5jdXRXaWR0aCwgdGhpcy5mcmFtZS5jdXRIZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRHJhd3MgdGhlIGdpdmVuIG9iamVjdCwgb3IgYW4gYXJyYXkgb2Ygb2JqZWN0cywgdG8gdGhpcyBSZW5kZXIgVGV4dHVyZSB1c2luZyBhIGJsZW5kIG1vZGUgb2YgRVJBU0UuXHJcbiAgICAgKiBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mIGVyYXNpbmcgYW55IGZpbGxlZCBwaXhlbHMgaW4gdGhlIG9iamVjdHMgZnJvbSB0aGlzIFJlbmRlciBUZXh0dXJlLlxyXG4gICAgICogXHJcbiAgICAgKiBJdCBjYW4gYWNjZXB0IGFueSBvZiB0aGUgZm9sbG93aW5nOlxyXG4gICAgICogXHJcbiAgICAgKiAqIEFueSByZW5kZXJhYmxlIEdhbWUgT2JqZWN0LCBzdWNoIGFzIGEgU3ByaXRlLCBUZXh0LCBHcmFwaGljcyBvciBUaWxlU3ByaXRlLlxyXG4gICAgICogKiBEeW5hbWljIGFuZCBTdGF0aWMgVGlsZW1hcCBMYXllcnMuXHJcbiAgICAgKiAqIEEgR3JvdXAuIFRoZSBjb250ZW50cyBvZiB3aGljaCB3aWxsIGJlIGl0ZXJhdGVkIGFuZCBkcmF3biBpbiB0dXJuLlxyXG4gICAgICogKiBBIENvbnRhaW5lci4gVGhlIGNvbnRlbnRzIG9mIHdoaWNoIHdpbGwgYmUgaXRlcmF0ZWQgZnVsbHksIGFuZCBkcmF3biBpbiB0dXJuLlxyXG4gICAgICogKiBBIFNjZW5lJ3MgRGlzcGxheSBMaXN0LiBQYXNzIGluIGBTY2VuZS5jaGlsZHJlbmAgdG8gZHJhdyB0aGUgd2hvbGUgbGlzdC5cclxuICAgICAqICogQW5vdGhlciBSZW5kZXIgVGV4dHVyZS5cclxuICAgICAqICogQSBUZXh0dXJlIEZyYW1lIGluc3RhbmNlLlxyXG4gICAgICogKiBBIHN0cmluZy4gVGhpcyBpcyB1c2VkIHRvIGxvb2stdXAgYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICAgICAqIFxyXG4gICAgICogTm90ZTogWW91IGNhbm5vdCBlcmFzZSBhIFJlbmRlciBUZXh0dXJlIGZyb20gaXRzZWxmLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiBwYXNzaW5nIGluIGEgR3JvdXAgb3IgQ29udGFpbmVyIGl0IHdpbGwgb25seSBkcmF3IGNoaWxkcmVuIHRoYXQgcmV0dXJuIGB0cnVlYFxyXG4gICAgICogd2hlbiB0aGVpciBgd2lsbFJlbmRlcigpYCBtZXRob2QgaXMgY2FsbGVkLiBJLmUuIGEgQ29udGFpbmVyIHdpdGggMTAgY2hpbGRyZW4sXHJcbiAgICAgKiA1IG9mIHdoaWNoIGhhdmUgYHZpc2libGU9ZmFsc2VgIHdpbGwgb25seSBkcmF3IHRoZSA1IHZpc2libGUgb25lcy5cclxuICAgICAqIFxyXG4gICAgICogSWYgcGFzc2luZyBpbiBhbiBhcnJheSBvZiBHYW1lIE9iamVjdHMgaXQgd2lsbCBkcmF3IHRoZW0gYWxsLCByZWdhcmRsZXNzIGlmXHJcbiAgICAgKiB0aGV5IHBhc3MgYSBgd2lsbFJlbmRlcmAgY2hlY2sgb3Igbm90LlxyXG4gICAgICogXHJcbiAgICAgKiBZb3UgY2FuIHBhc3MgaW4gYSBzdHJpbmcgaW4gd2hpY2ggY2FzZSBpdCB3aWxsIGxvb2sgZm9yIGEgdGV4dHVyZSBpbiB0aGUgVGV4dHVyZVxyXG4gICAgICogTWFuYWdlciBtYXRjaGluZyB0aGF0IHN0cmluZywgYW5kIGRyYXcgdGhlIGJhc2UgZnJhbWUuXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBjYW4gcGFzcyBpbiB0aGUgYHhgIGFuZCBgeWAgY29vcmRpbmF0ZXMgdG8gZHJhdyB0aGUgb2JqZWN0cyBhdC4gVGhlIHVzZSBvZlxyXG4gICAgICogdGhlIGNvb3JkaW5hdGVzIGRpZmZlciBiYXNlZCBvbiB3aGF0IG9iamVjdHMgYXJlIGJlaW5nIGRyYXduLiBJZiB0aGUgb2JqZWN0IGlzXHJcbiAgICAgKiBhIEdyb3VwLCBDb250YWluZXIgb3IgRGlzcGxheSBMaXN0LCB0aGUgY29vcmRpbmF0ZXMgYXJlIF9hZGRlZF8gdG8gdGhlIHBvc2l0aW9uc1xyXG4gICAgICogb2YgdGhlIGNoaWxkcmVuLiBGb3IgYWxsIG90aGVyIHR5cGVzIG9mIG9iamVjdCwgdGhlIGNvb3JkaW5hdGVzIGFyZSBleGFjdC5cclxuICAgICAqIFxyXG4gICAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCBjYXVzZXMgdGhlIFdlYkdMIGJhdGNoIHRvIGZsdXNoLCBzbyBpdCBjYW4gd3JpdGUgdGhlIHRleHR1cmVcclxuICAgICAqIGRhdGEgdG8gdGhlIGZyYW1lYnVmZmVyIGJlaW5nIHVzZWQgaW50ZXJuYWxseS4gVGhlIGJhdGNoIGlzIGZsdXNoZWQgYXQgdGhlIGVuZCxcclxuICAgICAqIGFmdGVyIHRoZSBlbnRyaWVzIGhhdmUgYmVlbiBpdGVyYXRlZC4gU28gaWYgeW91J3ZlIGEgYnVuY2ggb2Ygb2JqZWN0cyB0byBkcmF3LFxyXG4gICAgICogdHJ5IGFuZCBwYXNzIHRoZW0gaW4gYW4gYXJyYXkgaW4gb25lIHNpbmdsZSBjYWxsLCByYXRoZXIgdGhhbiBtYWtpbmcgbG90cyBvZlxyXG4gICAgICogc2VwYXJhdGUgY2FsbHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUmVuZGVyVGV4dHVyZSNlcmFzZVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55fSBlbnRyaWVzIC0gQW55IHJlbmRlcmFibGUgR2FtZSBPYmplY3QsIG9yIEdyb3VwLCBDb250YWluZXIsIERpc3BsYXkgTGlzdCwgb3RoZXIgUmVuZGVyIFRleHR1cmUsIFRleHR1cmUgRnJhbWUgb3IgYW4gYXJyYXkgb2YgYW55IG9mIHRoZXNlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4XSAtIFRoZSB4IHBvc2l0aW9uIHRvIGRyYXcgdGhlIEZyYW1lIGF0LCBvciB0aGUgb2Zmc2V0IGFwcGxpZWQgdG8gdGhlIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeV0gLSBUaGUgeSBwb3NpdGlvbiB0byBkcmF3IHRoZSBGcmFtZSBhdCwgb3IgdGhlIG9mZnNldCBhcHBsaWVkIHRvIHRoZSBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBSZW5kZXIgVGV4dHVyZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgZXJhc2U6IGZ1bmN0aW9uIChlbnRyaWVzLCB4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX2VyYXNlTW9kZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHZhciBibGVuZE1vZGUgPSB0aGlzLnJlbmRlcmVyLmN1cnJlbnRCbGVuZE1vZGU7XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QmxlbmRNb2RlKEJsZW5kTW9kZXMuRVJBU0UpO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXcoZW50cmllcywgeCwgeSwgMSwgMTY3NzcyMTUpO1xyXG5cclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEJsZW5kTW9kZShibGVuZE1vZGUpO1xyXG5cclxuICAgICAgICB0aGlzLl9lcmFzZU1vZGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRHJhd3MgdGhlIGdpdmVuIG9iamVjdCwgb3IgYW4gYXJyYXkgb2Ygb2JqZWN0cywgdG8gdGhpcyBSZW5kZXIgVGV4dHVyZS5cclxuICAgICAqIFxyXG4gICAgICogSXQgY2FuIGFjY2VwdCBhbnkgb2YgdGhlIGZvbGxvd2luZzpcclxuICAgICAqIFxyXG4gICAgICogKiBBbnkgcmVuZGVyYWJsZSBHYW1lIE9iamVjdCwgc3VjaCBhcyBhIFNwcml0ZSwgVGV4dCwgR3JhcGhpY3Mgb3IgVGlsZVNwcml0ZS5cclxuICAgICAqICogRHluYW1pYyBhbmQgU3RhdGljIFRpbGVtYXAgTGF5ZXJzLlxyXG4gICAgICogKiBBIEdyb3VwLiBUaGUgY29udGVudHMgb2Ygd2hpY2ggd2lsbCBiZSBpdGVyYXRlZCBhbmQgZHJhd24gaW4gdHVybi5cclxuICAgICAqICogQSBDb250YWluZXIuIFRoZSBjb250ZW50cyBvZiB3aGljaCB3aWxsIGJlIGl0ZXJhdGVkIGZ1bGx5LCBhbmQgZHJhd24gaW4gdHVybi5cclxuICAgICAqICogQSBTY2VuZSdzIERpc3BsYXkgTGlzdC4gUGFzcyBpbiBgU2NlbmUuY2hpbGRyZW5gIHRvIGRyYXcgdGhlIHdob2xlIGxpc3QuXHJcbiAgICAgKiAqIEFub3RoZXIgUmVuZGVyIFRleHR1cmUuXHJcbiAgICAgKiAqIEEgVGV4dHVyZSBGcmFtZSBpbnN0YW5jZS5cclxuICAgICAqICogQSBzdHJpbmcuIFRoaXMgaXMgdXNlZCB0byBsb29rLXVwIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAgICAgKiBcclxuICAgICAqIE5vdGU6IFlvdSBjYW5ub3QgZHJhdyBhIFJlbmRlciBUZXh0dXJlIHRvIGl0c2VsZi5cclxuICAgICAqIFxyXG4gICAgICogSWYgcGFzc2luZyBpbiBhIEdyb3VwIG9yIENvbnRhaW5lciBpdCB3aWxsIG9ubHkgZHJhdyBjaGlsZHJlbiB0aGF0IHJldHVybiBgdHJ1ZWBcclxuICAgICAqIHdoZW4gdGhlaXIgYHdpbGxSZW5kZXIoKWAgbWV0aG9kIGlzIGNhbGxlZC4gSS5lLiBhIENvbnRhaW5lciB3aXRoIDEwIGNoaWxkcmVuLFxyXG4gICAgICogNSBvZiB3aGljaCBoYXZlIGB2aXNpYmxlPWZhbHNlYCB3aWxsIG9ubHkgZHJhdyB0aGUgNSB2aXNpYmxlIG9uZXMuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHBhc3NpbmcgaW4gYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzIGl0IHdpbGwgZHJhdyB0aGVtIGFsbCwgcmVnYXJkbGVzcyBpZlxyXG4gICAgICogdGhleSBwYXNzIGEgYHdpbGxSZW5kZXJgIGNoZWNrIG9yIG5vdC5cclxuICAgICAqIFxyXG4gICAgICogWW91IGNhbiBwYXNzIGluIGEgc3RyaW5nIGluIHdoaWNoIGNhc2UgaXQgd2lsbCBsb29rIGZvciBhIHRleHR1cmUgaW4gdGhlIFRleHR1cmVcclxuICAgICAqIE1hbmFnZXIgbWF0Y2hpbmcgdGhhdCBzdHJpbmcsIGFuZCBkcmF3IHRoZSBiYXNlIGZyYW1lLiBJZiB5b3UgbmVlZCB0byBzcGVjaWZ5XHJcbiAgICAgKiBleGFjdGx5IHdoaWNoIGZyYW1lIHRvIGRyYXcgdGhlbiB1c2UgdGhlIG1ldGhvZCBgZHJhd0ZyYW1lYCBpbnN0ZWFkLlxyXG4gICAgICogXHJcbiAgICAgKiBZb3UgY2FuIHBhc3MgaW4gdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRvIGRyYXcgdGhlIG9iamVjdHMgYXQuIFRoZSB1c2Ugb2ZcclxuICAgICAqIHRoZSBjb29yZGluYXRlcyBkaWZmZXIgYmFzZWQgb24gd2hhdCBvYmplY3RzIGFyZSBiZWluZyBkcmF3bi4gSWYgdGhlIG9iamVjdCBpc1xyXG4gICAgICogYSBHcm91cCwgQ29udGFpbmVyIG9yIERpc3BsYXkgTGlzdCwgdGhlIGNvb3JkaW5hdGVzIGFyZSBfYWRkZWRfIHRvIHRoZSBwb3NpdGlvbnNcclxuICAgICAqIG9mIHRoZSBjaGlsZHJlbi4gRm9yIGFsbCBvdGhlciB0eXBlcyBvZiBvYmplY3QsIHRoZSBjb29yZGluYXRlcyBhcmUgZXhhY3QuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBgYWxwaGFgIGFuZCBgdGludGAgdmFsdWVzIGFyZSBvbmx5IHVzZWQgYnkgVGV4dHVyZSBGcmFtZXMuXHJcbiAgICAgKiBHYW1lIE9iamVjdHMgdXNlIHRoZWlyIG93biBhbHBoYSBhbmQgdGludCB2YWx1ZXMgd2hlbiBiZWluZyBkcmF3bi5cclxuICAgICAqIFxyXG4gICAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCBjYXVzZXMgdGhlIFdlYkdMIGJhdGNoIHRvIGZsdXNoLCBzbyBpdCBjYW4gd3JpdGUgdGhlIHRleHR1cmVcclxuICAgICAqIGRhdGEgdG8gdGhlIGZyYW1lYnVmZmVyIGJlaW5nIHVzZWQgaW50ZXJuYWxseS4gVGhlIGJhdGNoIGlzIGZsdXNoZWQgYXQgdGhlIGVuZCxcclxuICAgICAqIGFmdGVyIHRoZSBlbnRyaWVzIGhhdmUgYmVlbiBpdGVyYXRlZC4gU28gaWYgeW91J3ZlIGEgYnVuY2ggb2Ygb2JqZWN0cyB0byBkcmF3LFxyXG4gICAgICogdHJ5IGFuZCBwYXNzIHRoZW0gaW4gYW4gYXJyYXkgaW4gb25lIHNpbmdsZSBjYWxsLCByYXRoZXIgdGhhbiBtYWtpbmcgbG90cyBvZlxyXG4gICAgICogc2VwYXJhdGUgY2FsbHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUmVuZGVyVGV4dHVyZSNkcmF3XHJcbiAgICAgKiBAc2luY2UgMy4yLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gZW50cmllcyAtIEFueSByZW5kZXJhYmxlIEdhbWUgT2JqZWN0LCBvciBHcm91cCwgQ29udGFpbmVyLCBEaXNwbGF5IExpc3QsIG90aGVyIFJlbmRlciBUZXh0dXJlLCBUZXh0dXJlIEZyYW1lIG9yIGFuIGFycmF5IG9mIGFueSBvZiB0aGVzZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeF0gLSBUaGUgeCBwb3NpdGlvbiB0byBkcmF3IHRoZSBGcmFtZSBhdCwgb3IgdGhlIG9mZnNldCBhcHBsaWVkIHRvIHRoZSBvYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ldIC0gVGhlIHkgcG9zaXRpb24gdG8gZHJhdyB0aGUgRnJhbWUgYXQsIG9yIHRoZSBvZmZzZXQgYXBwbGllZCB0byB0aGUgb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthbHBoYV0gLSAgVGhlIGFscGhhIHZhbHVlLiBPbmx5IHVzZWQgZm9yIFRleHR1cmUgRnJhbWVzIGFuZCBpZiBub3Qgc3BlY2lmaWVkIGRlZmF1bHRzIHRvIHRoZSBgZ2xvYmFsQWxwaGFgIHByb3BlcnR5LiBHYW1lIE9iamVjdHMgdXNlIHRoZWlyIG93biBjdXJyZW50IGFscGhhIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt0aW50XSAtICBXZWJHTCBvbmx5LiBUaGUgdGludCBjb2xvciB2YWx1ZS4gT25seSB1c2VkIGZvciBUZXh0dXJlIEZyYW1lcyBhbmQgaWYgbm90IHNwZWNpZmllZCBkZWZhdWx0cyB0byB0aGUgYGdsb2JhbFRpbnRgIHByb3BlcnR5LiBHYW1lIE9iamVjdHMgdXNlIHRoZWlyIG93biBjdXJyZW50IHRpbnQgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBSZW5kZXIgVGV4dHVyZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgZHJhdzogZnVuY3Rpb24gKGVudHJpZXMsIHgsIHksIGFscGhhLCB0aW50KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChhbHBoYSA9PT0gdW5kZWZpbmVkKSB7IGFscGhhID0gdGhpcy5nbG9iYWxBbHBoYTsgfVxyXG5cclxuICAgICAgICBpZiAodGludCA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGludCA9ICh0aGlzLmdsb2JhbFRpbnQgPj4gMTYpICsgKHRoaXMuZ2xvYmFsVGludCAmIDB4ZmYwMCkgKyAoKHRoaXMuZ2xvYmFsVGludCAmIDB4ZmYpIDw8IDE2KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGludCA9ICh0aW50ID4+IDE2KSArICh0aW50ICYgMHhmZjAwKSArICgodGludCAmIDB4ZmYpIDw8IDE2KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlbnRyaWVzKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGVudHJpZXMgPSBbIGVudHJpZXMgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBnbCA9IHRoaXMuZ2w7XHJcblxyXG4gICAgICAgIHRoaXMuY2FtZXJhLnByZVJlbmRlcigxLCAxKTtcclxuXHJcbiAgICAgICAgaWYgKGdsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGN4ID0gdGhpcy5jYW1lcmEuX2N4O1xyXG4gICAgICAgICAgICB2YXIgY3kgPSB0aGlzLmNhbWVyYS5fY3k7XHJcbiAgICAgICAgICAgIHZhciBjdyA9IHRoaXMuY2FtZXJhLl9jdztcclxuICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5jYW1lcmEuX2NoO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnB1c2hTY2lzc29yKGN4LCBjeSwgY3csIGNoLCBjaCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgcGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHBpcGVsaW5lLnByb2pPcnRobygwLCB0aGlzLnRleHR1cmUud2lkdGgsIDAsIHRoaXMudGV4dHVyZS5oZWlnaHQsIC0xMDAwLjAsIDEwMDAuMCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmJhdGNoTGlzdChlbnRyaWVzLCB4LCB5LCBhbHBoYSwgdGludCk7XHJcblxyXG4gICAgICAgICAgICBwaXBlbGluZS5mbHVzaCgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRGcmFtZWJ1ZmZlcihudWxsLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnBvcFNjaXNzb3IoKTtcclxuXHJcbiAgICAgICAgICAgIHBpcGVsaW5lLnByb2pPcnRobygwLCBwaXBlbGluZS53aWR0aCwgcGlwZWxpbmUuaGVpZ2h0LCAwLCAtMTAwMC4wLCAxMDAwLjApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldENvbnRleHQodGhpcy5jb250ZXh0KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYmF0Y2hMaXN0KGVudHJpZXMsIHgsIHksIGFscGhhLCB0aW50KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0Q29udGV4dCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERyYXdzIHRoZSBUZXh0dXJlIEZyYW1lIHRvIHRoZSBSZW5kZXIgVGV4dHVyZSBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24uXHJcbiAgICAgKiBcclxuICAgICAqIFRleHR1cmVzIGFyZSByZWZlcmVuY2VkIGJ5IHRoZWlyIHN0cmluZy1iYXNlZCBrZXlzLCBhcyBzdG9yZWQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdmFyIHJ0ID0gdGhpcy5hZGQucmVuZGVyVGV4dHVyZSgwLCAwLCA4MDAsIDYwMCk7XHJcbiAgICAgKiBydC5kcmF3RnJhbWUoa2V5LCBmcmFtZSk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogWW91IGNhbiBvcHRpb25hbGx5IHByb3ZpZGUgYSBwb3NpdGlvbiwgYWxwaGEgYW5kIHRpbnQgdmFsdWUgdG8gYXBwbHkgdG8gdGhlIGZyYW1lXHJcbiAgICAgKiBiZWZvcmUgaXQgaXMgZHJhd24uXHJcbiAgICAgKiBcclxuICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBjYXVzZSBhIGJhdGNoIGZsdXNoLCBzbyBpZiB5b3UndmUgZ290IGEgc3RhY2sgb2YgdGhpbmdzIHRvIGRyYXdcclxuICAgICAqIGluIGEgdGlnaHQgbG9vcCwgdHJ5IHVzaW5nIHRoZSBgZHJhd2AgbWV0aG9kIGluc3RlYWQuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHlvdSBuZWVkIHRvIGRyYXcgYSBTcHJpdGUgdG8gdGhpcyBSZW5kZXIgVGV4dHVyZSwgdXNlIHRoZSBgZHJhd2AgbWV0aG9kIGluc3RlYWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUmVuZGVyVGV4dHVyZSNkcmF3RnJhbWVcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgdGV4dHVyZSB0byBiZSB1c2VkLCBhcyBzdG9yZWQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lXSAtIFRoZSBuYW1lIG9yIGluZGV4IG9mIHRoZSBmcmFtZSB3aXRoaW4gdGhlIFRleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgeCBwb3NpdGlvbiB0byBkcmF3IHRoZSBmcmFtZSBhdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB5IHBvc2l0aW9uIHRvIGRyYXcgdGhlIGZyYW1lIGF0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthbHBoYV0gLSBUaGUgYWxwaGEgdG8gdXNlLiBJZiBub3Qgc3BlY2lmaWVkIGl0IHVzZXMgdGhlIGBnbG9iYWxBbHBoYWAgcHJvcGVydHkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3RpbnRdIC0gV2ViR0wgb25seS4gVGhlIHRpbnQgY29sb3IgdG8gdXNlLiBJZiBub3Qgc3BlY2lmaWVkIGl0IHVzZXMgdGhlIGBnbG9iYWxUaW50YCBwcm9wZXJ0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFJlbmRlciBUZXh0dXJlIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBkcmF3RnJhbWU6IGZ1bmN0aW9uIChrZXksIGZyYW1lLCB4LCB5LCBhbHBoYSwgdGludClcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7IHggPSAwOyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0gMDsgfVxyXG4gICAgICAgIGlmIChhbHBoYSA9PT0gdW5kZWZpbmVkKSB7IGFscGhhID0gdGhpcy5nbG9iYWxBbHBoYTsgfVxyXG5cclxuICAgICAgICBpZiAodGludCA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGludCA9ICh0aGlzLmdsb2JhbFRpbnQgPj4gMTYpICsgKHRoaXMuZ2xvYmFsVGludCAmIDB4ZmYwMCkgKyAoKHRoaXMuZ2xvYmFsVGludCAmIDB4ZmYpIDw8IDE2KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGludCA9ICh0aW50ID4+IDE2KSArICh0aW50ICYgMHhmZjAwKSArICgodGludCAmIDB4ZmYpIDw8IDE2KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBnbCA9IHRoaXMuZ2w7XHJcbiAgICAgICAgdmFyIHRleHR1cmVGcmFtZSA9IHRoaXMudGV4dHVyZU1hbmFnZXIuZ2V0RnJhbWUoa2V5LCBmcmFtZSk7XHJcblxyXG4gICAgICAgIGlmICh0ZXh0dXJlRnJhbWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNhbWVyYS5wcmVSZW5kZXIoMSwgMSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZ2wpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBjeCA9IHRoaXMuY2FtZXJhLl9jeDtcclxuICAgICAgICAgICAgICAgIHZhciBjeSA9IHRoaXMuY2FtZXJhLl9jeTtcclxuICAgICAgICAgICAgICAgIHZhciBjdyA9IHRoaXMuY2FtZXJhLl9jdztcclxuICAgICAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuY2FtZXJhLl9jaDtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyLCBmYWxzZSk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucHVzaFNjaXNzb3IoY3gsIGN5LCBjdywgY2gsIGNoKTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgdmFyIHBpcGVsaW5lID0gdGhpcy5waXBlbGluZTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgIHBpcGVsaW5lLnByb2pPcnRobygwLCB0aGlzLnRleHR1cmUud2lkdGgsIDAsIHRoaXMudGV4dHVyZS5oZWlnaHQsIC0xMDAwLjAsIDEwMDAuMCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBwaXBlbGluZS5iYXRjaFRleHR1cmVGcmFtZSh0ZXh0dXJlRnJhbWUsIHggKyB0aGlzLmZyYW1lLmN1dFgsIHkgKyB0aGlzLmZyYW1lLmN1dFksIHRpbnQsIGFscGhhLCB0aGlzLmNhbWVyYS5tYXRyaXgsIG51bGwpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHBpcGVsaW5lLmZsdXNoKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEZyYW1lYnVmZmVyKG51bGwsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnBvcFNjaXNzb3IoKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBwaXBlbGluZS5wcm9qT3J0aG8oMCwgcGlwZWxpbmUud2lkdGgsIHBpcGVsaW5lLmhlaWdodCwgMCwgLTEwMDAuMCwgMTAwMC4wKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmF0Y2hUZXh0dXJlRnJhbWUodGV4dHVyZUZyYW1lLCB4ICsgdGhpcy5mcmFtZS5jdXRYLCB5ICsgdGhpcy5mcmFtZS5jdXRZLCBhbHBoYSwgdGludCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRoYXQgaGFuZGxlcyB0aGUgZHJhd2luZyBvZiBhbiBhcnJheSBvZiBjaGlsZHJlbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI2JhdGNoTGlzdFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBjaGlsZHJlbiAtIFRoZSBhcnJheSBvZiBHYW1lIE9iamVjdHMgdG8gZHJhdy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeF0gLSBUaGUgeCBwb3NpdGlvbiB0byBvZmZzZXQgdGhlIEdhbWUgT2JqZWN0IGJ5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5XSAtIFRoZSB5IHBvc2l0aW9uIHRvIG9mZnNldCB0aGUgR2FtZSBPYmplY3QgYnkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FscGhhXSAtIFRoZSBhbHBoYSB0byB1c2UuIElmIG5vdCBzcGVjaWZpZWQgaXQgdXNlcyB0aGUgYGdsb2JhbEFscGhhYCBwcm9wZXJ0eS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdGludF0gLSBUaGUgdGludCBjb2xvciB0byB1c2UuIElmIG5vdCBzcGVjaWZpZWQgaXQgdXNlcyB0aGUgYGdsb2JhbFRpbnRgIHByb3BlcnR5LlxyXG4gICAgICovXHJcbiAgICBiYXRjaExpc3Q6IGZ1bmN0aW9uIChjaGlsZHJlbiwgeCwgeSwgYWxwaGEsIHRpbnQpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IGNoaWxkcmVuW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFlbnRyeSB8fCBlbnRyeSA9PT0gdGhpcylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChlbnRyeS5yZW5kZXJXZWJHTCB8fCBlbnRyeS5yZW5kZXJDYW52YXMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBHYW1lIE9iamVjdHNcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJhd0dhbWVPYmplY3QoZW50cnksIHgsIHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGVudHJ5LmlzUGFyZW50IHx8IGVudHJ5Lmxpc3QpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBHcm91cHMgLyBEaXNwbGF5IExpc3RzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhdGNoR3JvdXAoZW50cnkuZ2V0Q2hpbGRyZW4oKSwgeCwgeSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIFRleHR1cmUga2V5XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhdGNoVGV4dHVyZUZyYW1lS2V5KGVudHJ5LCBudWxsLCB4LCB5LCBhbHBoYSwgdGludCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZW50cnkgaW5zdGFuY2VvZiBGcmFtZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIFRleHR1cmUgRnJhbWUgaW5zdGFuY2VcclxuICAgICAgICAgICAgICAgIHRoaXMuYmF0Y2hUZXh0dXJlRnJhbWUoZW50cnksIHgsIHksIGFscGhhLCB0aW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGVudHJ5KSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIEFub3RoZXIgQXJyYXlcclxuICAgICAgICAgICAgICAgIHRoaXMuYmF0Y2hMaXN0KGVudHJ5LCB4LCB5LCBhbHBoYSwgdGludCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRoYXQgaGFuZGxlcyB0aGUgZHJhd2luZyBhIFBoYXNlciBHcm91cCBjb250ZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI2JhdGNoR3JvdXBcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHthcnJheX0gY2hpbGRyZW4gLSBUaGUgYXJyYXkgb2YgR2FtZSBPYmplY3RzIHRvIGRyYXcuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgeCBwb3NpdGlvbiB0byBvZmZzZXQgdGhlIEdhbWUgT2JqZWN0IGJ5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHkgcG9zaXRpb24gdG8gb2Zmc2V0IHRoZSBHYW1lIE9iamVjdCBieS5cclxuICAgICAqL1xyXG4gICAgYmF0Y2hHcm91cDogZnVuY3Rpb24gKGNoaWxkcmVuLCB4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcblxyXG4gICAgICAgIHggKz0gdGhpcy5mcmFtZS5jdXRYO1xyXG4gICAgICAgIHkgKz0gdGhpcy5mcmFtZS5jdXRZO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGVudHJ5ID0gY2hpbGRyZW5baV07XHJcblxyXG4gICAgICAgICAgICBpZiAoZW50cnkud2lsbFJlbmRlcigpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdHggPSBlbnRyeS54ICsgeDtcclxuICAgICAgICAgICAgICAgIHZhciB0eSA9IGVudHJ5LnkgKyB5O1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZHJhd0dhbWVPYmplY3QoZW50cnksIHR4LCB0eSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRoYXQgaGFuZGxlcyBkcmF3aW5nIGEgc2luZ2xlIFBoYXNlciBHYW1lIE9iamVjdCB0byB0aGlzIFJlbmRlciBUZXh0dXJlIHVzaW5nIFdlYkdMLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjYmF0Y2hHYW1lT2JqZWN0V2ViR0xcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0byBkcmF3LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4XSAtIFRoZSB4IHBvc2l0aW9uIHRvIGRyYXcgdGhlIEdhbWUgT2JqZWN0IGF0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5XSAtIFRoZSB5IHBvc2l0aW9uIHRvIGRyYXcgdGhlIEdhbWUgT2JqZWN0IGF0LlxyXG4gICAgICovXHJcbiAgICBiYXRjaEdhbWVPYmplY3RXZWJHTDogZnVuY3Rpb24gKGdhbWVPYmplY3QsIHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gZ2FtZU9iamVjdC54OyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0gZ2FtZU9iamVjdC55OyB9XHJcblxyXG4gICAgICAgIHZhciBwcmV2WCA9IGdhbWVPYmplY3QueDtcclxuICAgICAgICB2YXIgcHJldlkgPSBnYW1lT2JqZWN0Lnk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fZXJhc2VNb2RlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRCbGVuZE1vZGUoZ2FtZU9iamVjdC5ibGVuZE1vZGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2FtZU9iamVjdC5zZXRQb3NpdGlvbih4ICsgdGhpcy5mcmFtZS5jdXRYLCB5ICsgdGhpcy5mcmFtZS5jdXRZKTtcclxuICAgICAgICBcclxuICAgICAgICBnYW1lT2JqZWN0LnJlbmRlcldlYkdMKHRoaXMucmVuZGVyZXIsIGdhbWVPYmplY3QsIDAsIHRoaXMuY2FtZXJhLCBudWxsKTtcclxuXHJcbiAgICAgICAgZ2FtZU9iamVjdC5zZXRQb3NpdGlvbihwcmV2WCwgcHJldlkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIG1ldGhvZCB0aGF0IGhhbmRsZXMgZHJhd2luZyBhIHNpbmdsZSBQaGFzZXIgR2FtZSBPYmplY3QgdG8gdGhpcyBSZW5kZXIgVGV4dHVyZSB1c2luZyBDYW52YXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUmVuZGVyVGV4dHVyZSNiYXRjaEdhbWVPYmplY3RDYW52YXNcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0byBkcmF3LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4XSAtIFRoZSB4IHBvc2l0aW9uIHRvIGRyYXcgdGhlIEdhbWUgT2JqZWN0IGF0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5XSAtIFRoZSB5IHBvc2l0aW9uIHRvIGRyYXcgdGhlIEdhbWUgT2JqZWN0IGF0LlxyXG4gICAgICovXHJcbiAgICBiYXRjaEdhbWVPYmplY3RDYW52YXM6IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCB4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IGdhbWVPYmplY3QueDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IGdhbWVPYmplY3QueTsgfVxyXG5cclxuICAgICAgICB2YXIgcHJldlggPSBnYW1lT2JqZWN0Lng7XHJcbiAgICAgICAgdmFyIHByZXZZID0gZ2FtZU9iamVjdC55O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZXJhc2VNb2RlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGJsZW5kTW9kZSA9IGdhbWVPYmplY3QuYmxlbmRNb2RlO1xyXG5cclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5ibGVuZE1vZGUgPSBCbGVuZE1vZGVzLkVSQVNFO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2FtZU9iamVjdC5zZXRQb3NpdGlvbih4ICsgdGhpcy5mcmFtZS5jdXRYLCB5ICsgdGhpcy5mcmFtZS5jdXRZKTtcclxuXHJcbiAgICAgICAgZ2FtZU9iamVjdC5yZW5kZXJDYW52YXModGhpcy5yZW5kZXJlciwgZ2FtZU9iamVjdCwgMCwgdGhpcy5jYW1lcmEsIG51bGwpO1xyXG5cclxuICAgICAgICBnYW1lT2JqZWN0LnNldFBvc2l0aW9uKHByZXZYLCBwcmV2WSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9lcmFzZU1vZGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBnYW1lT2JqZWN0LmJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRoYXQgaGFuZGxlcyB0aGUgZHJhd2luZyBvZiBhbiBhcnJheSBvZiBjaGlsZHJlbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI2JhdGNoVGV4dHVyZUZyYW1lS2V5XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSB0ZXh0dXJlIHRvIGJlIHVzZWQsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWVdIC0gVGhlIG5hbWUgb3IgaW5kZXggb2YgdGhlIGZyYW1lIHdpdGhpbiB0aGUgVGV4dHVyZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSB4IHBvc2l0aW9uIHRvIG9mZnNldCB0aGUgR2FtZSBPYmplY3QgYnkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgeSBwb3NpdGlvbiB0byBvZmZzZXQgdGhlIEdhbWUgT2JqZWN0IGJ5LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthbHBoYV0gLSBUaGUgYWxwaGEgdG8gdXNlLiBJZiBub3Qgc3BlY2lmaWVkIGl0IHVzZXMgdGhlIGBnbG9iYWxBbHBoYWAgcHJvcGVydHkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3RpbnRdIC0gVGhlIHRpbnQgY29sb3IgdG8gdXNlLiBJZiBub3Qgc3BlY2lmaWVkIGl0IHVzZXMgdGhlIGBnbG9iYWxUaW50YCBwcm9wZXJ0eS5cclxuICAgICAqL1xyXG4gICAgYmF0Y2hUZXh0dXJlRnJhbWVLZXk6IGZ1bmN0aW9uIChrZXksIGZyYW1lLCB4LCB5LCBhbHBoYSwgdGludClcclxuICAgIHtcclxuICAgICAgICB2YXIgdGV4dHVyZUZyYW1lID0gdGhpcy50ZXh0dXJlTWFuYWdlci5nZXRGcmFtZShrZXksIGZyYW1lKTtcclxuXHJcbiAgICAgICAgaWYgKHRleHR1cmVGcmFtZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuYmF0Y2hUZXh0dXJlRnJhbWUodGV4dHVyZUZyYW1lLCB4LCB5LCBhbHBoYSwgdGludCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIG1ldGhvZCB0aGF0IGhhbmRsZXMgdGhlIGRyYXdpbmcgb2YgYSBUZXh0dXJlIEZyYW1lIHRvIHRoaXMgUmVuZGVyIFRleHR1cmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUmVuZGVyVGV4dHVyZSNiYXRjaFRleHR1cmVGcmFtZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UZXh0dXJlcy5GcmFtZX0gdGV4dHVyZUZyYW1lIC0gVGhlIFRleHR1cmUgRnJhbWUgdG8gZHJhdy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSB4IHBvc2l0aW9uIHRvIGRyYXcgdGhlIEZyYW1lIGF0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHkgcG9zaXRpb24gdG8gZHJhdyB0aGUgRnJhbWUgYXQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3RpbnRdIC0gQSB0aW50IGNvbG9yIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGZyYW1lIGRyYXduIHRvIHRoZSBSZW5kZXIgVGV4dHVyZS5cclxuICAgICAqL1xyXG4gICAgYmF0Y2hUZXh0dXJlRnJhbWU6IGZ1bmN0aW9uICh0ZXh0dXJlRnJhbWUsIHgsIHksIGFscGhhLCB0aW50KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcblxyXG4gICAgICAgIHggKz0gdGhpcy5mcmFtZS5jdXRYO1xyXG4gICAgICAgIHkgKz0gdGhpcy5mcmFtZS5jdXRZO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5nbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGlwZWxpbmUuYmF0Y2hUZXh0dXJlRnJhbWUodGV4dHVyZUZyYW1lLCB4LCB5LCB0aW50LCBhbHBoYSwgdGhpcy5jYW1lcmEubWF0cml4LCBudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGN0eCA9IHRoaXMuY29udGV4dDtcclxuICAgICAgICAgICAgdmFyIGNkID0gdGV4dHVyZUZyYW1lLmNhbnZhc0RhdGE7XHJcbiAgICAgICAgICAgIHZhciBzb3VyY2UgPSB0ZXh0dXJlRnJhbWUuc291cmNlLmltYWdlO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHZhciBtYXRyaXggPSB0aGlzLmNhbWVyYS5tYXRyaXg7XHJcbiAgICBcclxuICAgICAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gdGhpcy5nbG9iYWxBbHBoYTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5zZXRUcmFuc2Zvcm0obWF0cml4WzBdLCBtYXRyaXhbMV0sIG1hdHJpeFsyXSwgbWF0cml4WzNdLCBtYXRyaXhbNF0sIG1hdHJpeFs1XSk7XHJcblxyXG4gICAgICAgICAgICBjdHguZHJhd0ltYWdlKHNvdXJjZSwgY2QueCwgY2QueSwgY2Qud2lkdGgsIGNkLmhlaWdodCwgeCwgeSwgY2Qud2lkdGgsIGNkLmhlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRha2VzIGEgc25hcHNob3Qgb2YgdGhlIGdpdmVuIGFyZWEgb2YgdGhpcyBSZW5kZXIgVGV4dHVyZS5cclxuICAgICAqIFxyXG4gICAgICogVGhlIHNuYXBzaG90IGlzIHRha2VuIGltbWVkaWF0ZWx5LlxyXG4gICAgICogXHJcbiAgICAgKiBUbyBjYXB0dXJlIHRoZSB3aG9sZSBSZW5kZXIgVGV4dHVyZSBzZWUgdGhlIGBzbmFwc2hvdGAgbWV0aG9kLiBUbyBjYXB0dXJlIGEgc3BlY2lmaWMgcGl4ZWwsIHNlZSBgc25hcHNob3RQaXhlbGAuXHJcbiAgICAgKiBcclxuICAgICAqIFNuYXBzaG90cyB3b3JrIGJ5IHVzaW5nIHRoZSBXZWJHTCBgcmVhZFBpeGVsc2AgZmVhdHVyZSB0byBncmFiIGV2ZXJ5IHBpeGVsIGZyb20gdGhlIGZyYW1lIGJ1ZmZlciBpbnRvIGFuIEFycmF5QnVmZmVyVmlldy5cclxuICAgICAqIEl0IHRoZW4gcGFyc2VzIHRoaXMsIGNvcHlpbmcgdGhlIGNvbnRlbnRzIHRvIGEgdGVtcG9yYXJ5IENhbnZhcyBhbmQgZmluYWxseSBjcmVhdGluZyBhbiBJbWFnZSBvYmplY3QgZnJvbSBpdCxcclxuICAgICAqIHdoaWNoIGlzIHRoZSBpbWFnZSByZXR1cm5lZCB0byB0aGUgY2FsbGJhY2sgcHJvdmlkZWQuIEFsbCBpbiBhbGwsIHRoaXMgaXMgYSBjb21wdXRhdGlvbmFsbHkgZXhwZW5zaXZlIGFuZCBibG9ja2luZyBwcm9jZXNzLFxyXG4gICAgICogd2hpY2ggZ2V0cyBtb3JlIGV4cGVuc2l2ZSB0aGUgbGFyZ2VyIHRoZSBjYW52YXMgc2l6ZSBnZXRzLCBzbyBwbGVhc2UgYmUgY2FyZWZ1bCBob3cgeW91IGVtcGxveSB0aGlzIGluIHlvdXIgZ2FtZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI3NuYXBzaG90QXJlYVxyXG4gICAgICogQHNpbmNlIDMuMTkuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gZ3JhYiBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSB0byBncmFiIGZyb20uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBhcmVhIHRvIGdyYWIuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIGFyZWEgdG8gZ3JhYi5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlJlbmRlcmVyLlNuYXBzaG90LlNuYXBzaG90Q2FsbGJhY2t9IGNhbGxiYWNrIC0gVGhlIEZ1bmN0aW9uIHRvIGludm9rZSBhZnRlciB0aGUgc25hcHNob3QgaW1hZ2UgaXMgY3JlYXRlZC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZT0naW1hZ2UvcG5nJ10gLSBUaGUgZm9ybWF0IG9mIHRoZSBpbWFnZSB0byBjcmVhdGUsIHVzdWFsbHkgYGltYWdlL3BuZ2Agb3IgYGltYWdlL2pwZWdgLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtlbmNvZGVyT3B0aW9ucz0wLjkyXSAtIFRoZSBpbWFnZSBxdWFsaXR5LCBiZXR3ZWVuIDAgYW5kIDEuIFVzZWQgZm9yIGltYWdlIGZvcm1hdHMgd2l0aCBsb3NzeSBjb21wcmVzc2lvbiwgc3VjaCBhcyBgaW1hZ2UvanBlZ2AuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBSZW5kZXIgVGV4dHVyZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc25hcHNob3RBcmVhOiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgY2FsbGJhY2ssIHR5cGUsIGVuY29kZXJPcHRpb25zKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmdsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zbmFwc2hvdEZyYW1lYnVmZmVyKHRoaXMuZnJhbWVidWZmZXIsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBjYWxsYmFjaywgZmFsc2UsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHR5cGUsIGVuY29kZXJPcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zbmFwc2hvdENhbnZhcyh0aGlzLmNhbnZhcywgY2FsbGJhY2ssIGZhbHNlLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0eXBlLCBlbmNvZGVyT3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIHNuYXBzaG90IG9mIHRoZSB3aG9sZSBvZiB0aGlzIFJlbmRlciBUZXh0dXJlLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgc25hcHNob3QgaXMgdGFrZW4gaW1tZWRpYXRlbHkuXHJcbiAgICAgKiBcclxuICAgICAqIFRvIGNhcHR1cmUganVzdCBhIHBvcnRpb24gb2YgdGhlIFJlbmRlciBUZXh0dXJlIHNlZSB0aGUgYHNuYXBzaG90QXJlYWAgbWV0aG9kLiBUbyBjYXB0dXJlIGEgc3BlY2lmaWMgcGl4ZWwsIHNlZSBgc25hcHNob3RQaXhlbGAuXHJcbiAgICAgKiBcclxuICAgICAqIFNuYXBzaG90cyB3b3JrIGJ5IHVzaW5nIHRoZSBXZWJHTCBgcmVhZFBpeGVsc2AgZmVhdHVyZSB0byBncmFiIGV2ZXJ5IHBpeGVsIGZyb20gdGhlIGZyYW1lIGJ1ZmZlciBpbnRvIGFuIEFycmF5QnVmZmVyVmlldy5cclxuICAgICAqIEl0IHRoZW4gcGFyc2VzIHRoaXMsIGNvcHlpbmcgdGhlIGNvbnRlbnRzIHRvIGEgdGVtcG9yYXJ5IENhbnZhcyBhbmQgZmluYWxseSBjcmVhdGluZyBhbiBJbWFnZSBvYmplY3QgZnJvbSBpdCxcclxuICAgICAqIHdoaWNoIGlzIHRoZSBpbWFnZSByZXR1cm5lZCB0byB0aGUgY2FsbGJhY2sgcHJvdmlkZWQuIEFsbCBpbiBhbGwsIHRoaXMgaXMgYSBjb21wdXRhdGlvbmFsbHkgZXhwZW5zaXZlIGFuZCBibG9ja2luZyBwcm9jZXNzLFxyXG4gICAgICogd2hpY2ggZ2V0cyBtb3JlIGV4cGVuc2l2ZSB0aGUgbGFyZ2VyIHRoZSBjYW52YXMgc2l6ZSBnZXRzLCBzbyBwbGVhc2UgYmUgY2FyZWZ1bCBob3cgeW91IGVtcGxveSB0aGlzIGluIHlvdXIgZ2FtZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI3NuYXBzaG90XHJcbiAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuUmVuZGVyZXIuU25hcHNob3QuU25hcHNob3RDYWxsYmFja30gY2FsbGJhY2sgLSBUaGUgRnVuY3Rpb24gdG8gaW52b2tlIGFmdGVyIHRoZSBzbmFwc2hvdCBpbWFnZSBpcyBjcmVhdGVkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlPSdpbWFnZS9wbmcnXSAtIFRoZSBmb3JtYXQgb2YgdGhlIGltYWdlIHRvIGNyZWF0ZSwgdXN1YWxseSBgaW1hZ2UvcG5nYCBvciBgaW1hZ2UvanBlZ2AuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuY29kZXJPcHRpb25zPTAuOTJdIC0gVGhlIGltYWdlIHF1YWxpdHksIGJldHdlZW4gMCBhbmQgMS4gVXNlZCBmb3IgaW1hZ2UgZm9ybWF0cyB3aXRoIGxvc3N5IGNvbXByZXNzaW9uLCBzdWNoIGFzIGBpbWFnZS9qcGVnYC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFJlbmRlciBUZXh0dXJlIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzbmFwc2hvdDogZnVuY3Rpb24gKGNhbGxiYWNrLCB0eXBlLCBlbmNvZGVyT3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5nbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc25hcHNob3RGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgY2FsbGJhY2ssIGZhbHNlLCAwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdHlwZSwgZW5jb2Rlck9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNuYXBzaG90Q2FudmFzKHRoaXMuY2FudmFzLCBjYWxsYmFjaywgZmFsc2UsIDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0eXBlLCBlbmNvZGVyT3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIHNuYXBzaG90IG9mIHRoZSBnaXZlbiBwaXhlbCBmcm9tIHRoaXMgUmVuZGVyIFRleHR1cmUuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBzbmFwc2hvdCBpcyB0YWtlbiBpbW1lZGlhdGVseS5cclxuICAgICAqIFxyXG4gICAgICogVG8gY2FwdHVyZSB0aGUgd2hvbGUgUmVuZGVyIFRleHR1cmUgc2VlIHRoZSBgc25hcHNob3RgIG1ldGhvZC4gVG8gY2FwdHVyZSBhIHNwZWNpZmljIHBvcnRpb24sIHNlZSBgc25hcHNob3RBcmVhYC5cclxuICAgICAqIFxyXG4gICAgICogVW5saWtlIHRoZSBvdGhlciB0d28gc25hcHNob3QgbWV0aG9kcywgdGhpcyBvbmUgd2lsbCBzZW5kIHlvdXIgY2FsbGJhY2sgYSBgQ29sb3JgIG9iamVjdCBjb250YWluaW5nIHRoZSBjb2xvciBkYXRhIGZvclxyXG4gICAgICogdGhlIHJlcXVlc3RlZCBwaXhlbC4gSXQgZG9lc24ndCBuZWVkIHRvIGNyZWF0ZSBhbiBpbnRlcm5hbCBDYW52YXMgb3IgSW1hZ2Ugb2JqZWN0LCBzbyBpcyBhIGxvdCBmYXN0ZXIgdG8gZXhlY3V0ZSxcclxuICAgICAqIHVzaW5nIGxlc3MgbWVtb3J5LCB0aGFuIHRoZSBvdGhlciBzbmFwc2hvdCBtZXRob2RzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjc25hcHNob3RQaXhlbFxyXG4gICAgICogQHNpbmNlIDMuMTkuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIGdldC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIGdldC5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLlJlbmRlcmVyLlNuYXBzaG90LlNuYXBzaG90Q2FsbGJhY2t9IGNhbGxiYWNrIC0gVGhlIEZ1bmN0aW9uIHRvIGludm9rZSBhZnRlciB0aGUgc25hcHNob3QgcGl4ZWwgZGF0YSBpcyBleHRyYWN0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBSZW5kZXIgVGV4dHVyZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc25hcHNob3RQaXhlbDogZnVuY3Rpb24gKHgsIHksIGNhbGxiYWNrKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmdsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zbmFwc2hvdEZyYW1lYnVmZmVyKHRoaXMuZnJhbWVidWZmZXIsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBjYWxsYmFjaywgdHJ1ZSwgeCwgeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc25hcHNob3RDYW52YXModGhpcy5jYW52YXMsIGNhbGxiYWNrLCB0cnVlLCB4LCB5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIGRlc3Ryb3kgaGFuZGxlciwgY2FsbGVkIGFzIHBhcnQgb2YgdGhlIGRlc3Ryb3kgcHJvY2Vzcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI3ByZURlc3Ryb3lcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjkuMFxyXG4gICAgICovXHJcbiAgICBwcmVEZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5fc2F2ZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBDYW52YXNQb29sLnJlbW92ZSh0aGlzLmNhbnZhcyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5nbClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlLmRlc3Ryb3koKTtcclxuICAgICAgICAgICAgdGhpcy5jYW1lcmEuZGVzdHJveSgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lYnVmZmVyID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5nbFRleHR1cmUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSZW5kZXJUZXh0dXJlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/rendertexture/RenderTexture.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureCanvasRenderer.js":
/*!******************************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureCanvasRenderer.js ***!
\******************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.RenderTexture#renderCanvas\r\n * @since 3.2.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.RenderTexture} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar RenderTextureCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n renderer.batchSprite(src, src.frame, camera, parentMatrix);\r\n};\r\n\r\nmodule.exports = RenderTextureCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9yZW5kZXJ0ZXh0dXJlL1JlbmRlclRleHR1cmVDYW52YXNSZW5kZXJlci5qcz81YjZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNDQUFzQztBQUNqRCxXQUFXLGlDQUFpQztBQUM1QyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3JlbmRlcnRleHR1cmUvUmVuZGVyVGV4dHVyZUNhbnZhc1JlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIENhbnZhcyBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUjcmVuZGVyQ2FudmFzXHJcbiAqIEBzaW5jZSAzLjIuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIENhbnZhcyByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuUmVuZGVyVGV4dHVyZX0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIFJlbmRlclRleHR1cmVDYW52YXNSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHJlbmRlcmVyLmJhdGNoU3ByaXRlKHNyYywgc3JjLmZyYW1lLCBjYW1lcmEsIHBhcmVudE1hdHJpeCk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmVDYW52YXNSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureCreator.js":
/*!***********************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureCreator.js ***!
\***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BuildGameObject = __webpack_require__(/*! ../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar RenderTexture = __webpack_require__(/*! ./RenderTexture */ \"./node_modules/phaser/src/gameobjects/rendertexture/RenderTexture.js\");\r\n\r\n/**\r\n * Creates a new Render Texture Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Render Texture Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#renderTexture\r\n * @since 3.2.0\r\n *\r\n * @param {Phaser.Types.GameObjects.RenderTexture.RenderTextureConfig} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.RenderTexture} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('renderTexture', function (config, addToScene)\r\n{\r\n if (config === undefined) { config = {}; }\r\n\r\n var x = GetAdvancedValue(config, 'x', 0);\r\n var y = GetAdvancedValue(config, 'y', 0);\r\n var width = GetAdvancedValue(config, 'width', 32);\r\n var height = GetAdvancedValue(config, 'height', 32);\r\n var key = GetAdvancedValue(config, 'key', undefined);\r\n var frame = GetAdvancedValue(config, 'frame', undefined);\r\n\r\n var renderTexture = new RenderTexture(this.scene, x, y, width, height, key, frame);\r\n\r\n if (addToScene !== undefined)\r\n {\r\n config.add = addToScene;\r\n }\r\n\r\n BuildGameObject(this.scene, renderTexture, config);\r\n\r\n return renderTexture;\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9yZW5kZXJ0ZXh0dXJlL1JlbmRlclRleHR1cmVDcmVhdG9yLmpzPzhhNWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHNCQUFzQixtQkFBTyxDQUFDLG9GQUFvQjtBQUNsRCx3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7QUFDdEQsdUJBQXVCLG1CQUFPLENBQUMsdUdBQXFDO0FBQ3BFLG9CQUFvQixtQkFBTyxDQUFDLDZGQUFpQjs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkRBQTJEO0FBQ3RFLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksaUNBQWlDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixhQUFhOztBQUU1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvcmVuZGVydGV4dHVyZS9SZW5kZXJUZXh0dXJlQ3JlYXRvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEJ1aWxkR2FtZU9iamVjdCA9IHJlcXVpcmUoJy4uL0J1aWxkR2FtZU9iamVjdCcpO1xyXG52YXIgR2FtZU9iamVjdENyZWF0b3IgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Q3JlYXRvcicpO1xyXG52YXIgR2V0QWR2YW5jZWRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRBZHZhbmNlZFZhbHVlJyk7XHJcbnZhciBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi9SZW5kZXJUZXh0dXJlJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBSZW5kZXIgVGV4dHVyZSBHYW1lIE9iamVjdCBhbmQgcmV0dXJucyBpdC5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgUmVuZGVyIFRleHR1cmUgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI3JlbmRlclRleHR1cmVcclxuICogQHNpbmNlIDMuMi4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmUuUmVuZGVyVGV4dHVyZUNvbmZpZ30gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gY3JlYXRlIGl0c2VsZi5cclxuICogQHBhcmFtIHtib29sZWFufSBbYWRkVG9TY2VuZV0gLSBBZGQgdGhpcyBHYW1lIE9iamVjdCB0byB0aGUgU2NlbmUgYWZ0ZXIgY3JlYXRpbmcgaXQ/IElmIHNldCB0aGlzIGFyZ3VtZW50IG92ZXJyaWRlcyB0aGUgYGFkZGAgcHJvcGVydHkgaW4gdGhlIGNvbmZpZyBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RDcmVhdG9yLnJlZ2lzdGVyKCdyZW5kZXJUZXh0dXJlJywgZnVuY3Rpb24gKGNvbmZpZywgYWRkVG9TY2VuZSlcclxue1xyXG4gICAgaWYgKGNvbmZpZyA9PT0gdW5kZWZpbmVkKSB7IGNvbmZpZyA9IHt9OyB9XHJcblxyXG4gICAgdmFyIHggPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ3gnLCAwKTtcclxuICAgIHZhciB5ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICd5JywgMCk7XHJcbiAgICB2YXIgd2lkdGggPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ3dpZHRoJywgMzIpO1xyXG4gICAgdmFyIGhlaWdodCA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnaGVpZ2h0JywgMzIpO1xyXG4gICAgdmFyIGtleSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAna2V5JywgdW5kZWZpbmVkKTtcclxuICAgIHZhciBmcmFtZSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAnZnJhbWUnLCB1bmRlZmluZWQpO1xyXG5cclxuICAgIHZhciByZW5kZXJUZXh0dXJlID0gbmV3IFJlbmRlclRleHR1cmUodGhpcy5zY2VuZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwga2V5LCBmcmFtZSk7XHJcblxyXG4gICAgaWYgKGFkZFRvU2NlbmUgIT09IHVuZGVmaW5lZClcclxuICAgIHtcclxuICAgICAgICBjb25maWcuYWRkID0gYWRkVG9TY2VuZTtcclxuICAgIH1cclxuXHJcbiAgICBCdWlsZEdhbWVPYmplY3QodGhpcy5zY2VuZSwgcmVuZGVyVGV4dHVyZSwgY29uZmlnKTtcclxuXHJcbiAgICByZXR1cm4gcmVuZGVyVGV4dHVyZTtcclxufSk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureCreator.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureFactory.js":
/*!***********************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureFactory.js ***!
\***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar RenderTexture = __webpack_require__(/*! ./RenderTexture */ \"./node_modules/phaser/src/gameobjects/rendertexture/RenderTexture.js\");\r\n\r\n/**\r\n * Creates a new Render Texture Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Render Texture Game Object has been built into Phaser.\r\n * \r\n * A Render Texture is a special texture that allows any number of Game Objects to be drawn to it. You can take many complex objects and\r\n * draw them all to this one texture, which can they be used as the texture for other Game Object's. It's a way to generate dynamic\r\n * textures at run-time that are WebGL friendly and don't invoke expensive GPU uploads.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#renderTexture\r\n * @since 3.2.0\r\n *\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {integer} [width=32] - The width of the Render Texture.\r\n * @param {integer} [height=32] - The height of the Render Texture.\r\n * @property {string} [key] - The texture key to make the RenderTexture from.\r\n * @property {string} [frame] - the frame to make the RenderTexture from.\r\n * \r\n * @return {Phaser.GameObjects.RenderTexture} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('renderTexture', function (x, y, width, height, key, frame)\r\n{\r\n return this.displayList.add(new RenderTexture(this.scene, x, y, width, height, key, frame));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9yZW5kZXJ0ZXh0dXJlL1JlbmRlclRleHR1cmVGYWN0b3J5LmpzPzAyMjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHdCQUF3QixtQkFBTyxDQUFDLHdGQUFzQjtBQUN0RCxvQkFBb0IsbUJBQU8sQ0FBQyw2RkFBaUI7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixjQUFjLE9BQU87QUFDckIsY0FBYyxPQUFPO0FBQ3JCO0FBQ0EsWUFBWSxpQ0FBaUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvcmVuZGVydGV4dHVyZS9SZW5kZXJUZXh0dXJlRmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdhbWVPYmplY3RGYWN0b3J5ID0gcmVxdWlyZSgnLi4vR2FtZU9iamVjdEZhY3RvcnknKTtcclxudmFyIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuL1JlbmRlclRleHR1cmUnKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFJlbmRlciBUZXh0dXJlIEdhbWUgT2JqZWN0IGFuZCBhZGRzIGl0IHRvIHRoZSBTY2VuZS5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgUmVuZGVyIFRleHR1cmUgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIFxyXG4gKiBBIFJlbmRlciBUZXh0dXJlIGlzIGEgc3BlY2lhbCB0ZXh0dXJlIHRoYXQgYWxsb3dzIGFueSBudW1iZXIgb2YgR2FtZSBPYmplY3RzIHRvIGJlIGRyYXduIHRvIGl0LiBZb3UgY2FuIHRha2UgbWFueSBjb21wbGV4IG9iamVjdHMgYW5kXHJcbiAqIGRyYXcgdGhlbSBhbGwgdG8gdGhpcyBvbmUgdGV4dHVyZSwgd2hpY2ggY2FuIHRoZXkgYmUgdXNlZCBhcyB0aGUgdGV4dHVyZSBmb3Igb3RoZXIgR2FtZSBPYmplY3Qncy4gSXQncyBhIHdheSB0byBnZW5lcmF0ZSBkeW5hbWljXHJcbiAqIHRleHR1cmVzIGF0IHJ1bi10aW1lIHRoYXQgYXJlIFdlYkdMIGZyaWVuZGx5IGFuZCBkb24ndCBpbnZva2UgZXhwZW5zaXZlIEdQVSB1cGxvYWRzLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0RmFjdG9yeSNyZW5kZXJUZXh0dXJlXHJcbiAqIEBzaW5jZSAzLjIuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGg9MzJdIC0gVGhlIHdpZHRoIG9mIHRoZSBSZW5kZXIgVGV4dHVyZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0PTMyXSAtIFRoZSBoZWlnaHQgb2YgdGhlIFJlbmRlciBUZXh0dXJlLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2tleV0gLSBUaGUgdGV4dHVyZSBrZXkgdG8gbWFrZSB0aGUgUmVuZGVyVGV4dHVyZSBmcm9tLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2ZyYW1lXSAtIHRoZSBmcmFtZSB0byBtYWtlIHRoZSBSZW5kZXJUZXh0dXJlIGZyb20uXHJcbiAqIFxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuUmVuZGVyVGV4dHVyZX0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0RmFjdG9yeS5yZWdpc3RlcigncmVuZGVyVGV4dHVyZScsIGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBrZXksIGZyYW1lKVxyXG57XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TGlzdC5hZGQobmV3IFJlbmRlclRleHR1cmUodGhpcy5zY2VuZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwga2V5LCBmcmFtZSkpO1xyXG59KTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureRender.js":
/*!**********************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureRender.js ***!
\**********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./RenderTextureWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./RenderTextureCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9yZW5kZXJ0ZXh0dXJlL1JlbmRlclRleHR1cmVSZW5kZXIuanM/ZWE0MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsaUVBQWtCO0FBQzVDLG1CQUFtQixtQkFBTyxDQUFDLGlFQUFrQjs7QUFFN0MsSUFBSSxJQUFxQjtBQUN6QjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLHVIQUE4QjtBQUN4RDs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMseUhBQStCO0FBQzFEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9yZW5kZXJ0ZXh0dXJlL1JlbmRlclRleHR1cmVSZW5kZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL05PT1AnKTtcclxudmFyIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL05PT1AnKTtcclxuXHJcbmlmICh0eXBlb2YgV0VCR0xfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi9SZW5kZXJUZXh0dXJlV2ViR0xSZW5kZXJlcicpO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIENBTlZBU19SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi9SZW5kZXJUZXh0dXJlQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureWebGLRenderer.js":
/*!*****************************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureWebGLRenderer.js ***!
\*****************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.RenderTexture#renderWebGL\r\n * @since 3.2.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.RenderTexture} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar RenderTextureWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var frame = src.frame;\r\n var width = frame.width;\r\n var height = frame.height;\r\n var getTint = Utils.getTintAppendFloatAlpha;\r\n\r\n this.pipeline.batchTexture(\r\n src,\r\n frame.glTexture,\r\n width, height,\r\n src.x, src.y,\r\n width, height,\r\n src.scaleX, src.scaleY,\r\n src.rotation,\r\n src.flipX, !src.flipY,\r\n src.scrollFactorX, src.scrollFactorY,\r\n src.displayOriginX, src.displayOriginY,\r\n 0, 0, width, height,\r\n getTint(src._tintTL, camera.alpha * src._alphaTL),\r\n getTint(src._tintTR, camera.alpha * src._alphaTR),\r\n getTint(src._tintBL, camera.alpha * src._alphaBL),\r\n getTint(src._tintBR, camera.alpha * src._alphaBR),\r\n (src._isTinted && src.tintFill),\r\n 0, 0,\r\n camera,\r\n parentMatrix\r\n );\r\n\r\n // Force clear the current texture so that items next in the batch (like Graphics) don't try and use it\r\n renderer.setBlankTexture(true);\r\n};\r\n\r\nmodule.exports = RenderTextureWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9yZW5kZXJ0ZXh0dXJlL1JlbmRlclRleHR1cmVXZWJHTFJlbmRlcmVyLmpzPzY3YTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRkFBNEI7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsaUNBQWlDO0FBQzVDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvcmVuZGVydGV4dHVyZS9SZW5kZXJUZXh0dXJlV2ViR0xSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXIvd2ViZ2wvVXRpbHMnKTtcclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5SZW5kZXJUZXh0dXJlI3JlbmRlcldlYkdMXHJcbiAqIEBzaW5jZSAzLjIuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBDYW52YXMgcmVuZGVyZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlJlbmRlclRleHR1cmV9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBSZW5kZXJUZXh0dXJlV2ViR0xSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHZhciBmcmFtZSA9IHNyYy5mcmFtZTtcclxuICAgIHZhciB3aWR0aCA9IGZyYW1lLndpZHRoO1xyXG4gICAgdmFyIGhlaWdodCA9IGZyYW1lLmhlaWdodDtcclxuICAgIHZhciBnZXRUaW50ID0gVXRpbHMuZ2V0VGludEFwcGVuZEZsb2F0QWxwaGE7XHJcblxyXG4gICAgdGhpcy5waXBlbGluZS5iYXRjaFRleHR1cmUoXHJcbiAgICAgICAgc3JjLFxyXG4gICAgICAgIGZyYW1lLmdsVGV4dHVyZSxcclxuICAgICAgICB3aWR0aCwgaGVpZ2h0LFxyXG4gICAgICAgIHNyYy54LCBzcmMueSxcclxuICAgICAgICB3aWR0aCwgaGVpZ2h0LFxyXG4gICAgICAgIHNyYy5zY2FsZVgsIHNyYy5zY2FsZVksXHJcbiAgICAgICAgc3JjLnJvdGF0aW9uLFxyXG4gICAgICAgIHNyYy5mbGlwWCwgIXNyYy5mbGlwWSxcclxuICAgICAgICBzcmMuc2Nyb2xsRmFjdG9yWCwgc3JjLnNjcm9sbEZhY3RvclksXHJcbiAgICAgICAgc3JjLmRpc3BsYXlPcmlnaW5YLCBzcmMuZGlzcGxheU9yaWdpblksXHJcbiAgICAgICAgMCwgMCwgd2lkdGgsIGhlaWdodCxcclxuICAgICAgICBnZXRUaW50KHNyYy5fdGludFRMLCBjYW1lcmEuYWxwaGEgKiBzcmMuX2FscGhhVEwpLFxyXG4gICAgICAgIGdldFRpbnQoc3JjLl90aW50VFIsIGNhbWVyYS5hbHBoYSAqIHNyYy5fYWxwaGFUUiksXHJcbiAgICAgICAgZ2V0VGludChzcmMuX3RpbnRCTCwgY2FtZXJhLmFscGhhICogc3JjLl9hbHBoYUJMKSxcclxuICAgICAgICBnZXRUaW50KHNyYy5fdGludEJSLCBjYW1lcmEuYWxwaGEgKiBzcmMuX2FscGhhQlIpLFxyXG4gICAgICAgIChzcmMuX2lzVGludGVkICYmIHNyYy50aW50RmlsbCksXHJcbiAgICAgICAgMCwgMCxcclxuICAgICAgICBjYW1lcmEsXHJcbiAgICAgICAgcGFyZW50TWF0cml4XHJcbiAgICApO1xyXG5cclxuICAgIC8vICBGb3JjZSBjbGVhciB0aGUgY3VycmVudCB0ZXh0dXJlIHNvIHRoYXQgaXRlbXMgbmV4dCBpbiB0aGUgYmF0Y2ggKGxpa2UgR3JhcGhpY3MpIGRvbid0IHRyeSBhbmQgdXNlIGl0XHJcbiAgICByZW5kZXJlci5zZXRCbGFua1RleHR1cmUodHJ1ZSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmVXZWJHTFJlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/rendertexture/RenderTextureWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shader/Shader.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shader/Shader.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar Extend = __webpack_require__(/*! ../../utils/object/Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\");\r\nvar SetValue = __webpack_require__(/*! ../../utils/object/SetValue */ \"./node_modules/phaser/src/utils/object/SetValue.js\");\r\nvar ShaderRender = __webpack_require__(/*! ./ShaderRender */ \"./node_modules/phaser/src/gameobjects/shader/ShaderRender.js\");\r\nvar TransformMatrix = __webpack_require__(/*! ../components/TransformMatrix */ \"./node_modules/phaser/src/gameobjects/components/TransformMatrix.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Shader Game Object.\r\n * \r\n * This Game Object allows you to easily add a quad with its own shader into the display list, and manipulate it\r\n * as you would any other Game Object, including scaling, rotating, positioning and adding to Containers. Shaders\r\n * can be masked with either Bitmap or Geometry masks and can also be used as a Bitmap Mask for a Camera or other\r\n * Game Object. They can also be made interactive and used for input events.\r\n * \r\n * It works by taking a reference to a `Phaser.Display.BaseShader` instance, as found in the Shader Cache. These can\r\n * be created dynamically at runtime, or loaded in via the GLSL File Loader:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n * this.load.glsl('fire', 'shaders/fire.glsl.js');\r\n * }\r\n * \r\n * function create ()\r\n * {\r\n * this.add.shader('fire', 400, 300, 512, 512);\r\n * }\r\n * ```\r\n * \r\n * Please see the Phaser 3 Examples GitHub repo for examples of loading and creating shaders dynamically.\r\n * \r\n * Due to the way in which they work, you cannot directly change the alpha or blend mode of a Shader. This should\r\n * be handled via exposed uniforms in the shader code itself.\r\n * \r\n * By default a Shader will be created with a standard set of uniforms. These were added to match those\r\n * found on sites such as ShaderToy or GLSLSandbox, and provide common functionality a shader may need,\r\n * such as the timestamp, resolution or pointer position. You can replace them by specifying your own uniforms\r\n * in the Base Shader.\r\n * \r\n * These Shaders work by halting the current pipeline during rendering, creating a viewport matched to the\r\n * size of this Game Object and then renders a quad using the bound shader. At the end, the pipeline is restored.\r\n * \r\n * Because it blocks the pipeline it means it will interrupt any batching that is currently going on, so you should\r\n * use these Game Objects sparingly. If you need to have a fully batched custom shader, then please look at using\r\n * a custom pipeline instead. However, for background or special masking effects, they are extremely effective.\r\n * \r\n * @class Shader\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @webglOnly\r\n * @since 3.17.0\r\n *\r\n * @extends Phaser.GameObjects.Components.ComputedSize\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {(string|Phaser.Display.BaseShader)} key - The key of the shader to use from the shader cache, or a BaseShader instance.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [width=128] - The width of the Game Object.\r\n * @param {number} [height=128] - The height of the Game Object.\r\n * @param {string[]} [textures] - Optional array of texture keys to bind to the iChannel0...3 uniforms. The textures must already exist in the Texture Manager.\r\n * @param {any} [textureData] - Additional texture data if you want to create shader with none NPOT textures.\r\n */\r\nvar Shader = new Class({\r\n\r\n Extends: GameObject,\r\n\r\n Mixins: [\r\n Components.ComputedSize,\r\n Components.Depth,\r\n Components.GetBounds,\r\n Components.Mask,\r\n Components.Origin,\r\n Components.ScrollFactor,\r\n Components.Transform,\r\n Components.Visible,\r\n ShaderRender\r\n ],\r\n\r\n initialize:\r\n\r\n function Shader (scene, key, x, y, width, height, textures, textureData)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n if (width === undefined) { width = 128; }\r\n if (height === undefined) { height = 128; }\r\n\r\n GameObject.call(this, scene, 'Shader');\r\n\r\n /**\r\n * This Game Object cannot have a blend mode, so skip all checks.\r\n * \r\n * @name Phaser.GameObjects.Shader#blendMode\r\n * @type {integer}\r\n * @private\r\n * @since 3.17.0\r\n */\r\n this.blendMode = -1;\r\n\r\n /**\r\n * The underlying shader object being used.\r\n * Empty by default and set during a call to the `setShader` method.\r\n * \r\n * @name Phaser.GameObjects.Shader#shader\r\n * @type {Phaser.Display.BaseShader}\r\n * @since 3.17.0\r\n */\r\n this.shader;\r\n\r\n var renderer = scene.sys.renderer;\r\n\r\n /**\r\n * A reference to the current renderer.\r\n * Shaders only work with the WebGL Renderer.\r\n * \r\n * @name Phaser.GameObjects.Shader#renderer\r\n * @type {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)}\r\n * @since 3.17.0\r\n */\r\n this.renderer = renderer;\r\n\r\n /**\r\n * The WebGL context belonging to the renderer.\r\n *\r\n * @name Phaser.GameObjects.Shader#gl\r\n * @type {WebGLRenderingContext}\r\n * @since 3.17.0\r\n */\r\n this.gl = renderer.gl;\r\n\r\n /**\r\n * Raw byte buffer of vertices this Shader uses.\r\n *\r\n * @name Phaser.GameObjects.Shader#vertexData\r\n * @type {ArrayBuffer}\r\n * @since 3.17.0\r\n */\r\n this.vertexData = new ArrayBuffer(6 * (Float32Array.BYTES_PER_ELEMENT * 2));\r\n\r\n /**\r\n * The WebGL vertex buffer object this shader uses.\r\n *\r\n * @name Phaser.GameObjects.Shader#vertexBuffer\r\n * @type {WebGLBuffer}\r\n * @since 3.17.0\r\n */\r\n this.vertexBuffer = renderer.createVertexBuffer(this.vertexData.byteLength, this.gl.STREAM_DRAW);\r\n\r\n /**\r\n * The WebGL shader program this shader uses.\r\n *\r\n * @name Phaser.GameObjects.Shader#program\r\n * @type {WebGLProgram}\r\n * @since 3.17.0\r\n */\r\n this.program = null;\r\n\r\n /**\r\n * Uint8 view to the vertex raw buffer. Used for uploading vertex buffer resources to the GPU.\r\n *\r\n * @name Phaser.GameObjects.Shader#bytes\r\n * @type {Uint8Array}\r\n * @since 3.17.0\r\n */\r\n this.bytes = new Uint8Array(this.vertexData);\r\n\r\n /**\r\n * Float32 view of the array buffer containing the shaders vertices.\r\n *\r\n * @name Phaser.GameObjects.Shader#vertexViewF32\r\n * @type {Float32Array}\r\n * @since 3.17.0\r\n */\r\n this.vertexViewF32 = new Float32Array(this.vertexData);\r\n\r\n /**\r\n * A temporary Transform Matrix, re-used internally during batching.\r\n *\r\n * @name Phaser.GameObjects.Shader#_tempMatrix1\r\n * @private\r\n * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n * @since 3.17.0\r\n */\r\n this._tempMatrix1 = new TransformMatrix();\r\n\r\n /**\r\n * A temporary Transform Matrix, re-used internally during batching.\r\n *\r\n * @name Phaser.GameObjects.Shader#_tempMatrix2\r\n * @private\r\n * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n * @since 3.17.0\r\n */\r\n this._tempMatrix2 = new TransformMatrix();\r\n\r\n /**\r\n * A temporary Transform Matrix, re-used internally during batching.\r\n *\r\n * @name Phaser.GameObjects.Shader#_tempMatrix3\r\n * @private\r\n * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n * @since 3.17.0\r\n */\r\n this._tempMatrix3 = new TransformMatrix();\r\n\r\n /**\r\n * The view matrix the shader uses during rendering.\r\n * \r\n * @name Phaser.GameObjects.Shader#viewMatrix\r\n * @type {Float32Array}\r\n * @readonly\r\n * @since 3.17.0\r\n */\r\n this.viewMatrix = new Float32Array([ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ]);\r\n\r\n /**\r\n * The projection matrix the shader uses during rendering.\r\n * \r\n * @name Phaser.GameObjects.Shader#projectionMatrix\r\n * @type {Float32Array}\r\n * @readonly\r\n * @since 3.17.0\r\n */\r\n this.projectionMatrix = new Float32Array([ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ]);\r\n\r\n /**\r\n * The default uniform mappings. These can be added to (or replaced) by specifying your own uniforms when\r\n * creating this shader game object. The uniforms are updated automatically during the render step.\r\n * \r\n * The defaults are:\r\n * \r\n * `resolution` (2f) - Set to the size of this shader.\r\n * `time` (1f) - The elapsed game time, in seconds.\r\n * `mouse` (2f) - If a pointer has been bound (with `setPointer`), this uniform contains its position each frame.\r\n * `date` (4fv) - A vec4 containing the year, month, day and time in seconds.\r\n * `sampleRate` (1f) - Sound sample rate. 44100 by default.\r\n * `iChannel0...3` (sampler2D) - Input channels 0 to 3. `null` by default.\r\n * \r\n * @name Phaser.GameObjects.Shader#uniforms\r\n * @type {any}\r\n * @since 3.17.0\r\n */\r\n this.uniforms = {};\r\n\r\n /**\r\n * The pointer bound to this shader, if any.\r\n * Set via the chainable `setPointer` method, or by modifying this property directly.\r\n * \r\n * @name Phaser.GameObjects.Shader#pointer\r\n * @type {Phaser.Input.Pointer}\r\n * @since 3.17.0\r\n */\r\n this.pointer = null;\r\n\r\n /**\r\n * The cached width of the renderer.\r\n * \r\n * @name Phaser.GameObjects.Shader#_rendererWidth\r\n * @type {number}\r\n * @private\r\n * @since 3.17.0\r\n */\r\n this._rendererWidth = renderer.width;\r\n\r\n /**\r\n * The cached height of the renderer.\r\n * \r\n * @name Phaser.GameObjects.Shader#_rendererHeight\r\n * @type {number}\r\n * @private\r\n * @since 3.17.0\r\n */\r\n this._rendererHeight = renderer.height;\r\n\r\n /**\r\n * Internal texture count tracker.\r\n * \r\n * @name Phaser.GameObjects.Shader#_textureCount\r\n * @type {number}\r\n * @private\r\n * @since 3.17.0\r\n */\r\n this._textureCount = 0;\r\n\r\n /**\r\n * A reference to the GL Frame Buffer this Shader is drawing to.\r\n * This property is only set if you have called `Shader.setRenderToTexture`.\r\n *\r\n * @name Phaser.GameObjects.Shader#framebuffer\r\n * @type {?WebGLFramebuffer}\r\n * @since 3.19.0\r\n */\r\n this.framebuffer = null;\r\n\r\n /**\r\n * A reference to the WebGLTexture this Shader is rendering to.\r\n * This property is only set if you have called `Shader.setRenderToTexture`.\r\n *\r\n * @name Phaser.GameObjects.Shader#glTexture\r\n * @type {?WebGLTexture}\r\n * @since 3.19.0\r\n */\r\n this.glTexture = null;\r\n\r\n /**\r\n * A flag that indicates if this Shader has been set to render to a texture instead of the display list.\r\n * \r\n * This property is `true` if you have called `Shader.setRenderToTexture`, otherwise it's `false`.\r\n * \r\n * A Shader that is rendering to a texture _does not_ appear on the display list.\r\n *\r\n * @name Phaser.GameObjects.Shader#renderToTexture\r\n * @type {boolean}\r\n * @readonly\r\n * @since 3.19.0\r\n */\r\n this.renderToTexture = false;\r\n\r\n /**\r\n * A reference to the Phaser.Textures.Texture that has been stored in the Texture Manager for this Shader.\r\n * \r\n * This property is only set if you have called `Shader.setRenderToTexture`, otherwise it is `null`.\r\n *\r\n * @name Phaser.GameObjects.Shader#texture\r\n * @type {Phaser.Textures.Texture}\r\n * @since 3.19.0\r\n */\r\n this.texture = null;\r\n\r\n this.setPosition(x, y);\r\n this.setSize(width, height);\r\n this.setOrigin(0.5, 0.5);\r\n this.setShader(key, textures, textureData);\r\n },\r\n\r\n /**\r\n * Compares the renderMask with the renderFlags to see if this Game Object will render or not.\r\n * Also checks the Game Object against the given Cameras exclusion list.\r\n *\r\n * @method Phaser.GameObjects.Shader#willRender\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera to check against this Game Object.\r\n *\r\n * @return {boolean} True if the Game Object should be rendered, otherwise false.\r\n */\r\n willRender: function (camera)\r\n {\r\n if (this.renderToTexture)\r\n {\r\n return true;\r\n }\r\n else\r\n {\r\n return !(GameObject.RENDER_MASK !== this.renderFlags || (this.cameraFilter !== 0 && (this.cameraFilter & camera.id)));\r\n }\r\n },\r\n\r\n /**\r\n * Changes this Shader so instead of rendering to the display list it renders to a\r\n * WebGL Framebuffer and WebGL Texture instead. This allows you to use the output\r\n * of this shader as an input for another shader, by mapping a sampler2D uniform\r\n * to it.\r\n * \r\n * After calling this method the `Shader.framebuffer` and `Shader.glTexture` properties\r\n * are populated.\r\n * \r\n * Additionally, you can provide a key to this method. Doing so will create a Phaser Texture\r\n * from this Shader and save it into the Texture Manager, allowing you to then use it for\r\n * any texture-based Game Object, such as a Sprite or Image:\r\n * \r\n * ```javascript\r\n * var shader = this.add.shader('myShader', x, y, width, height);\r\n * \r\n * shader.setRenderToTexture('doodle');\r\n * \r\n * this.add.image(400, 300, 'doodle');\r\n * ```\r\n * \r\n * Note that it stores an active reference to this Shader. That means as this shader updates,\r\n * so does the texture and any object using it to render with. Also, if you destroy this\r\n * shader, be sure to clear any objects that may have been using it as a texture too.\r\n * \r\n * You can access the Phaser Texture that is created via the `Shader.texture` property.\r\n * \r\n * By default it will create a single base texture. You can add frames to the texture\r\n * by using the `Texture.add` method. After doing this, you can then allow Game Objects\r\n * to use a specific frame from a Render Texture.\r\n *\r\n * @method Phaser.GameObjects.Shader#setRenderToTexture\r\n * @since 3.19.0\r\n *\r\n * @param {string} [key] - The unique key to store the texture as within the global Texture Manager.\r\n * @param {boolean} [flipY=false] - Does this texture need vertically flipping before rendering? This should usually be set to `true` if being fed from a buffer.\r\n *\r\n * @return {this} This Shader instance.\r\n */\r\n setRenderToTexture: function (key, flipY)\r\n {\r\n if (flipY === undefined) { flipY = false; }\r\n\r\n if (!this.renderToTexture)\r\n {\r\n var width = this.width;\r\n var height = this.height;\r\n var renderer = this.renderer;\r\n\r\n this.glTexture = renderer.createTextureFromSource(null, width, height, 0);\r\n\r\n this.glTexture.flipY = flipY;\r\n\r\n this.framebuffer = renderer.createFramebuffer(width, height, this.glTexture, false);\r\n\r\n this._rendererWidth = width;\r\n this._rendererHeight = height;\r\n\r\n this.renderToTexture = true;\r\n\r\n this.projOrtho(0, this.width, this.height, 0);\r\n\r\n if (key)\r\n {\r\n this.texture = this.scene.sys.textures.addGLTexture(key, this.glTexture, width, height);\r\n }\r\n }\r\n\r\n // And now render at least once, so our texture isn't blank on the first update\r\n\r\n if (this.shader)\r\n {\r\n var pipeline = renderer.currentPipeline;\r\n\r\n renderer.clearPipeline();\r\n \r\n this.load();\r\n this.flush();\r\n \r\n renderer.rebindPipeline(pipeline);\r\n }\r\n \r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the fragment and, optionally, the vertex shader source code that this Shader will use.\r\n * This will immediately delete the active shader program, if set, and then create a new one\r\n * with the given source. Finally, the shader uniforms are initialized.\r\n *\r\n * @method Phaser.GameObjects.Shader#setShader\r\n * @since 3.17.0\r\n * \r\n * @param {(string|Phaser.Display.BaseShader)} key - The key of the shader to use from the shader cache, or a BaseShader instance.\r\n * @param {string[]} [textures] - Optional array of texture keys to bind to the iChannel0...3 uniforms. The textures must already exist in the Texture Manager.\r\n * @param {any} [textureData] - Additional texture data.\r\n * \r\n * @return {this} This Shader instance.\r\n */\r\n setShader: function (key, textures, textureData)\r\n {\r\n if (textures === undefined) { textures = []; }\r\n\r\n if (typeof key === 'string')\r\n {\r\n var cache = this.scene.sys.cache.shader;\r\n\r\n if (!cache.has(key))\r\n {\r\n console.warn('Shader missing: ' + key);\r\n return this;\r\n }\r\n \r\n this.shader = cache.get(key);\r\n }\r\n else\r\n {\r\n this.shader = key;\r\n }\r\n\r\n var gl = this.gl;\r\n var renderer = this.renderer;\r\n\r\n if (this.program)\r\n {\r\n gl.deleteProgram(this.program);\r\n }\r\n\r\n var program = renderer.createProgram(this.shader.vertexSrc, this.shader.fragmentSrc);\r\n\r\n // The default uniforms available within the vertex shader\r\n renderer.setMatrix4(program, 'uViewMatrix', false, this.viewMatrix);\r\n renderer.setMatrix4(program, 'uProjectionMatrix', false, this.projectionMatrix);\r\n renderer.setFloat2(program, 'uResolution', this.width, this.height);\r\n\r\n this.program = program;\r\n\r\n var d = new Date();\r\n\r\n // The default uniforms available within the fragment shader\r\n var defaultUniforms = {\r\n resolution: { type: '2f', value: { x: this.width, y: this.height } },\r\n time: { type: '1f', value: 0 },\r\n mouse: { type: '2f', value: { x: this.width / 2, y: this.height / 2 } },\r\n date: { type: '4fv', value: [ d.getFullYear(), d.getMonth(), d.getDate(), d.getHours() * 60 * 60 + d.getMinutes() * 60 + d.getSeconds() ] },\r\n sampleRate: { type: '1f', value: 44100.0 },\r\n iChannel0: { type: 'sampler2D', value: null, textureData: { repeat: true } },\r\n iChannel1: { type: 'sampler2D', value: null, textureData: { repeat: true } },\r\n iChannel2: { type: 'sampler2D', value: null, textureData: { repeat: true } },\r\n iChannel3: { type: 'sampler2D', value: null, textureData: { repeat: true } }\r\n };\r\n \r\n if (this.shader.uniforms)\r\n {\r\n this.uniforms = Extend(true, {}, this.shader.uniforms, defaultUniforms);\r\n }\r\n else\r\n {\r\n this.uniforms = defaultUniforms;\r\n }\r\n\r\n for (var i = 0; i < 4; i++)\r\n {\r\n if (textures[i])\r\n {\r\n this.setSampler2D('iChannel' + i, textures[i], i, textureData);\r\n }\r\n }\r\n\r\n this.initUniforms();\r\n\r\n this.projOrtho(0, this._rendererWidth, this._rendererHeight, 0);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Binds a Phaser Pointer object to this Shader.\r\n * \r\n * The screen position of the pointer will be set in to the shaders `mouse` uniform\r\n * automatically every frame. Call this method with no arguments to unbind the pointer.\r\n *\r\n * @method Phaser.GameObjects.Shader#setPointer\r\n * @since 3.17.0\r\n * \r\n * @param {Phaser.Input.Pointer} [pointer] - The Pointer to bind to this shader.\r\n * \r\n * @return {this} This Shader instance.\r\n */\r\n setPointer: function (pointer)\r\n {\r\n this.pointer = pointer;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets this shader to use an orthographic projection matrix.\r\n * This matrix is stored locally in the `projectionMatrix` property,\r\n * as well as being bound to the `uProjectionMatrix` uniform.\r\n * \r\n * @method Phaser.GameObjects.Shader#projOrtho\r\n * @since 3.17.0\r\n *\r\n * @param {number} left - The left value.\r\n * @param {number} right - The right value.\r\n * @param {number} bottom - The bottom value.\r\n * @param {number} top - The top value.\r\n */\r\n projOrtho: function (left, right, bottom, top)\r\n {\r\n var near = -1000;\r\n var far = 1000;\r\n\r\n var leftRight = 1 / (left - right);\r\n var bottomTop = 1 / (bottom - top);\r\n var nearFar = 1 / (near - far);\r\n\r\n var pm = this.projectionMatrix;\r\n\r\n pm[0] = -2 * leftRight;\r\n pm[5] = -2 * bottomTop;\r\n pm[10] = 2 * nearFar;\r\n pm[12] = (left + right) * leftRight;\r\n pm[13] = (top + bottom) * bottomTop;\r\n pm[14] = (far + near) * nearFar;\r\n\r\n var program = this.program;\r\n\r\n this.renderer.setMatrix4(program, 'uProjectionMatrix', false, this.projectionMatrix);\r\n\r\n this._rendererWidth = right;\r\n this._rendererHeight = bottom;\r\n },\r\n\r\n // Uniforms are specified in the GLSL_ES Specification: http://www.khronos.org/registry/webgl/specs/latest/1.0/\r\n // http://www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf\r\n\r\n /**\r\n * Initializes all of the uniforms this shader uses.\r\n * \r\n * @method Phaser.GameObjects.Shader#initUniforms\r\n * @private\r\n * @since 3.17.0\r\n */\r\n initUniforms: function ()\r\n {\r\n var gl = this.gl;\r\n var map = this.renderer.glFuncMap;\r\n var program = this.program;\r\n\r\n this._textureCount = 0;\r\n\r\n for (var key in this.uniforms)\r\n {\r\n var uniform = this.uniforms[key];\r\n\r\n var type = uniform.type;\r\n var data = map[type];\r\n\r\n uniform.uniformLocation = gl.getUniformLocation(program, key);\r\n\r\n if (type !== 'sampler2D')\r\n {\r\n uniform.glMatrix = data.matrix;\r\n uniform.glValueLength = data.length;\r\n uniform.glFunc = data.func;\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Sets a sampler2D uniform on this shader where the source texture is a WebGLTexture.\r\n * \r\n * This allows you to feed the output from one Shader into another:\r\n * \r\n * ```javascript\r\n * let shader1 = this.add.shader(baseShader1, 0, 0, 512, 512).setRenderToTexture();\r\n * let shader2 = this.add.shader(baseShader2, 0, 0, 512, 512).setRenderToTexture('output');\r\n * \r\n * shader1.setSampler2DBuffer('iChannel0', shader2.glTexture, 512, 512);\r\n * shader2.setSampler2DBuffer('iChannel0', shader1.glTexture, 512, 512);\r\n * ```\r\n * \r\n * In the above code, the result of baseShader1 is fed into Shader2 as the `iChannel0` sampler2D uniform.\r\n * The result of baseShader2 is then fed back into shader1 again, creating a feedback loop.\r\n * \r\n * If you wish to use an image from the Texture Manager as a sampler2D input for this shader,\r\n * see the `Shader.setSampler2D` method.\r\n * \r\n * @method Phaser.GameObjects.Shader#setSampler2DBuffer\r\n * @since 3.19.0\r\n * \r\n * @param {string} uniformKey - The key of the sampler2D uniform to be updated, i.e. `iChannel0`.\r\n * @param {WebGLTexture} texture - A WebGLTexture reference.\r\n * @param {integer} width - The width of the texture.\r\n * @param {integer} height - The height of the texture.\r\n * @param {integer} [textureIndex=0] - The texture index.\r\n * @param {any} [textureData] - Additional texture data.\r\n * \r\n * @return {this} This Shader instance.\r\n */\r\n setSampler2DBuffer: function (uniformKey, texture, width, height, textureIndex, textureData)\r\n {\r\n if (textureIndex === undefined) { textureIndex = 0; }\r\n if (textureData === undefined) { textureData = {}; }\r\n\r\n var uniform = this.uniforms[uniformKey];\r\n\r\n uniform.value = texture;\r\n\r\n textureData.width = width;\r\n textureData.height = height;\r\n\r\n uniform.textureData = textureData;\r\n\r\n this._textureCount = textureIndex;\r\n\r\n this.initSampler2D(uniform);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets a sampler2D uniform on this shader.\r\n * \r\n * The textureKey given is the key from the Texture Manager cache. You cannot use a single frame\r\n * from a texture, only the full image. Also, lots of shaders expect textures to be power-of-two sized.\r\n * \r\n * If you wish to use another Shader as a sampler2D input for this shader, see the `Shader.setSampler2DBuffer` method.\r\n * \r\n * @method Phaser.GameObjects.Shader#setSampler2D\r\n * @since 3.17.0\r\n * \r\n * @param {string} uniformKey - The key of the sampler2D uniform to be updated, i.e. `iChannel0`.\r\n * @param {string} textureKey - The key of the texture, as stored in the Texture Manager. Must already be loaded.\r\n * @param {integer} [textureIndex=0] - The texture index.\r\n * @param {any} [textureData] - Additional texture data.\r\n * \r\n * @return {this} This Shader instance.\r\n */\r\n setSampler2D: function (uniformKey, textureKey, textureIndex, textureData)\r\n {\r\n if (textureIndex === undefined) { textureIndex = 0; }\r\n\r\n var textureManager = this.scene.sys.textures;\r\n\r\n if (textureManager.exists(textureKey))\r\n {\r\n var frame = textureManager.getFrame(textureKey);\r\n var uniform = this.uniforms[uniformKey];\r\n var source = frame.source;\r\n\r\n uniform.textureKey = textureKey;\r\n uniform.source = source.image;\r\n uniform.value = frame.glTexture;\r\n\r\n if (source.isGLTexture)\r\n {\r\n if (!textureData)\r\n {\r\n textureData = {};\r\n }\r\n\r\n textureData.width = source.width;\r\n textureData.height = source.height;\r\n }\r\n\r\n if (textureData)\r\n {\r\n uniform.textureData = textureData;\r\n }\r\n\r\n this._textureCount = textureIndex;\r\n\r\n this.initSampler2D(uniform);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets a property of a uniform already present on this shader.\r\n * \r\n * To modify the value of a uniform such as a 1f or 1i use the `value` property directly:\r\n * \r\n * ```javascript\r\n * shader.setUniform('size.value', 16);\r\n * ```\r\n * \r\n * You can use dot notation to access deeper values, for example:\r\n * \r\n * ```javascript\r\n * shader.setUniform('resolution.value.x', 512);\r\n * ```\r\n * \r\n * The change to the uniform will take effect the next time the shader is rendered.\r\n * \r\n * @method Phaser.GameObjects.Shader#setUniform\r\n * @since 3.17.0\r\n * \r\n * @param {string} key - The key of the uniform to modify. Use dots for deep properties, i.e. `resolution.value.x`.\r\n * @param {any} value - The value to set into the uniform.\r\n * \r\n * @return {this} This Shader instance.\r\n */\r\n setUniform: function (key, value)\r\n {\r\n SetValue(this.uniforms, key, value);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Returns the uniform object for the given key, or `null` if the uniform couldn't be found.\r\n * \r\n * @method Phaser.GameObjects.Shader#getUniform\r\n * @since 3.17.0\r\n * \r\n * @param {string} key - The key of the uniform to return the value for.\r\n * \r\n * @return {any} A reference to the uniform object. This is not a copy, so modifying it will update the original object also.\r\n */\r\n getUniform: function (key)\r\n {\r\n return GetFastValue(this.uniforms, key, null);\r\n },\r\n\r\n /**\r\n * A short-cut method that will directly set the texture being used by the `iChannel0` sampler2D uniform.\r\n * \r\n * The textureKey given is the key from the Texture Manager cache. You cannot use a single frame\r\n * from a texture, only the full image. Also, lots of shaders expect textures to be power-of-two sized.\r\n * \r\n * @method Phaser.GameObjects.Shader#setChannel0\r\n * @since 3.17.0\r\n * \r\n * @param {string} textureKey - The key of the texture, as stored in the Texture Manager. Must already be loaded.\r\n * @param {any} [textureData] - Additional texture data.\r\n * \r\n * @return {this} This Shader instance.\r\n */\r\n setChannel0: function (textureKey, textureData)\r\n {\r\n return this.setSampler2D('iChannel0', textureKey, 0, textureData);\r\n },\r\n\r\n /**\r\n * A short-cut method that will directly set the texture being used by the `iChannel1` sampler2D uniform.\r\n * \r\n * The textureKey given is the key from the Texture Manager cache. You cannot use a single frame\r\n * from a texture, only the full image. Also, lots of shaders expect textures to be power-of-two sized.\r\n * \r\n * @method Phaser.GameObjects.Shader#setChannel1\r\n * @since 3.17.0\r\n * \r\n * @param {string} textureKey - The key of the texture, as stored in the Texture Manager. Must already be loaded.\r\n * @param {any} [textureData] - Additional texture data.\r\n * \r\n * @return {this} This Shader instance.\r\n */\r\n setChannel1: function (textureKey, textureData)\r\n {\r\n return this.setSampler2D('iChannel1', textureKey, 1, textureData);\r\n },\r\n\r\n /**\r\n * A short-cut method that will directly set the texture being used by the `iChannel2` sampler2D uniform.\r\n * \r\n * The textureKey given is the key from the Texture Manager cache. You cannot use a single frame\r\n * from a texture, only the full image. Also, lots of shaders expect textures to be power-of-two sized.\r\n * \r\n * @method Phaser.GameObjects.Shader#setChannel2\r\n * @since 3.17.0\r\n * \r\n * @param {string} textureKey - The key of the texture, as stored in the Texture Manager. Must already be loaded.\r\n * @param {any} [textureData] - Additional texture data.\r\n * \r\n * @return {this} This Shader instance.\r\n */\r\n setChannel2: function (textureKey, textureData)\r\n {\r\n return this.setSampler2D('iChannel2', textureKey, 2, textureData);\r\n },\r\n\r\n /**\r\n * A short-cut method that will directly set the texture being used by the `iChannel3` sampler2D uniform.\r\n * \r\n * The textureKey given is the key from the Texture Manager cache. You cannot use a single frame\r\n * from a texture, only the full image. Also, lots of shaders expect textures to be power-of-two sized.\r\n * \r\n * @method Phaser.GameObjects.Shader#setChannel3\r\n * @since 3.17.0\r\n * \r\n * @param {string} textureKey - The key of the texture, as stored in the Texture Manager. Must already be loaded.\r\n * @param {any} [textureData] - Additional texture data.\r\n * \r\n * @return {this} This Shader instance.\r\n */\r\n setChannel3: function (textureKey, textureData)\r\n {\r\n return this.setSampler2D('iChannel3', textureKey, 3, textureData);\r\n },\r\n\r\n /**\r\n * Internal method that takes a sampler2D uniform and prepares it for use by setting the\r\n * gl texture parameters.\r\n * \r\n * @method Phaser.GameObjects.Shader#initSampler2D\r\n * @private\r\n * @since 3.17.0\r\n * \r\n * @param {any} uniform - The sampler2D uniform to process.\r\n */\r\n initSampler2D: function (uniform)\r\n {\r\n if (!uniform.value)\r\n {\r\n return;\r\n }\r\n\r\n var gl = this.gl;\r\n\r\n gl.activeTexture(gl.TEXTURE0 + this._textureCount);\r\n gl.bindTexture(gl.TEXTURE_2D, uniform.value);\r\n \r\n // Extended texture data\r\n\r\n var data = uniform.textureData;\r\n\r\n if (data)\r\n {\r\n // https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/texImage2D\r\n \r\n // mag / minFilter can be: gl.LINEAR, gl.LINEAR_MIPMAP_LINEAR or gl.NEAREST\r\n // wrapS/T can be: gl.CLAMP_TO_EDGE or gl.REPEAT\r\n // format can be: gl.LUMINANCE or gl.RGBA\r\n \r\n var magFilter = gl[GetFastValue(data, 'magFilter', 'linear').toUpperCase()];\r\n var minFilter = gl[GetFastValue(data, 'minFilter', 'linear').toUpperCase()];\r\n var wrapS = gl[GetFastValue(data, 'wrapS', 'repeat').toUpperCase()];\r\n var wrapT = gl[GetFastValue(data, 'wrapT', 'repeat').toUpperCase()];\r\n var format = gl[GetFastValue(data, 'format', 'rgba').toUpperCase()];\r\n\r\n if (data.repeat)\r\n {\r\n wrapS = gl.REPEAT;\r\n wrapT = gl.REPEAT;\r\n }\r\n\r\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, !!data.flipY);\r\n\r\n if (data.width)\r\n {\r\n var width = GetFastValue(data, 'width', 512);\r\n var height = GetFastValue(data, 'height', 2);\r\n var border = GetFastValue(data, 'border', 0);\r\n \r\n // texImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, ArrayBufferView? pixels)\r\n gl.texImage2D(gl.TEXTURE_2D, 0, format, width, height, border, format, gl.UNSIGNED_BYTE, null);\r\n }\r\n else\r\n {\r\n // texImage2D(GLenum target, GLint level, GLenum internalformat, GLenum format, GLenum type, ImageData? pixels)\r\n gl.texImage2D(gl.TEXTURE_2D, 0, format, gl.RGBA, gl.UNSIGNED_BYTE, uniform.source);\r\n }\r\n \r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, magFilter);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, minFilter);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, wrapS);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, wrapT);\r\n }\r\n\r\n this.renderer.setProgram(this.program);\r\n \r\n gl.uniform1i(uniform.uniformLocation, this._textureCount);\r\n \r\n this._textureCount++;\r\n },\r\n\r\n /**\r\n * Synchronizes all of the uniforms this shader uses.\r\n * Each uniforms gl function is called in turn.\r\n * \r\n * @method Phaser.GameObjects.Shader#syncUniforms\r\n * @private\r\n * @since 3.17.0\r\n */\r\n syncUniforms: function ()\r\n {\r\n var gl = this.gl;\r\n\r\n var uniforms = this.uniforms;\r\n var uniform;\r\n var length;\r\n var glFunc;\r\n var location;\r\n var value;\r\n var textureCount = 0;\r\n \r\n for (var key in uniforms)\r\n {\r\n uniform = uniforms[key];\r\n\r\n glFunc = uniform.glFunc;\r\n length = uniform.glValueLength;\r\n location = uniform.uniformLocation;\r\n value = uniform.value;\r\n\r\n if (value === null)\r\n {\r\n continue;\r\n }\r\n\r\n if (length === 1)\r\n {\r\n if (uniform.glMatrix)\r\n {\r\n glFunc.call(gl, location, uniform.transpose, value);\r\n }\r\n else\r\n {\r\n glFunc.call(gl, location, value);\r\n }\r\n }\r\n else if (length === 2)\r\n {\r\n glFunc.call(gl, location, value.x, value.y);\r\n }\r\n else if (length === 3)\r\n {\r\n glFunc.call(gl, location, value.x, value.y, value.z);\r\n }\r\n else if (length === 4)\r\n {\r\n glFunc.call(gl, location, value.x, value.y, value.z, value.w);\r\n }\r\n else if (uniform.type === 'sampler2D')\r\n {\r\n gl.activeTexture(gl['TEXTURE' + textureCount]);\r\n\r\n gl.bindTexture(gl.TEXTURE_2D, value);\r\n\r\n gl.uniform1i(location, textureCount);\r\n\r\n textureCount++;\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Called automatically during render.\r\n * \r\n * This method performs matrix ITRS and then stores the resulting value in the `uViewMatrix` uniform.\r\n * It then sets up the vertex buffer and shader, updates and syncs the uniforms ready\r\n * for flush to be called.\r\n * \r\n * @method Phaser.GameObjects.Shader#load\r\n * @since 3.17.0\r\n * \r\n * @param {Phaser.GameObjects.Components.TransformMatrix} [matrix2D] - The transform matrix to use during rendering.\r\n */\r\n load: function (matrix2D)\r\n {\r\n // ITRS\r\n\r\n var gl = this.gl;\r\n var width = this.width;\r\n var height = this.height;\r\n var renderer = this.renderer;\r\n var program = this.program;\r\n var vm = this.viewMatrix;\r\n\r\n if (!this.renderToTexture)\r\n {\r\n var x = -this._displayOriginX;\r\n var y = -this._displayOriginY;\r\n \r\n vm[0] = matrix2D[0];\r\n vm[1] = matrix2D[1];\r\n vm[4] = matrix2D[2];\r\n vm[5] = matrix2D[3];\r\n vm[8] = matrix2D[4];\r\n vm[9] = matrix2D[5];\r\n vm[12] = vm[0] * x + vm[4] * y;\r\n vm[13] = vm[1] * x + vm[5] * y;\r\n }\r\n\r\n // Update vertex shader uniforms\r\n\r\n gl.useProgram(program);\r\n\r\n gl.uniformMatrix4fv(gl.getUniformLocation(program, 'uViewMatrix'), false, vm);\r\n gl.uniform2f(gl.getUniformLocation(program, 'uResolution'), this.width, this.height);\r\n\r\n // Update fragment shader uniforms\r\n\r\n var uniforms = this.uniforms;\r\n var res = uniforms.resolution;\r\n\r\n res.value.x = width;\r\n res.value.y = height;\r\n\r\n uniforms.time.value = renderer.game.loop.getDuration();\r\n\r\n var pointer = this.pointer;\r\n\r\n if (pointer)\r\n {\r\n var mouse = uniforms.mouse;\r\n\r\n var px = pointer.x / width;\r\n var py = 1 - pointer.y / height;\r\n \r\n mouse.value.x = px.toFixed(2);\r\n mouse.value.y = py.toFixed(2);\r\n }\r\n\r\n this.syncUniforms();\r\n },\r\n\r\n /**\r\n * Called automatically during render.\r\n * \r\n * Sets the active shader, loads the vertex buffer and then draws.\r\n * \r\n * @method Phaser.GameObjects.Shader#flush\r\n * @since 3.17.0\r\n */\r\n flush: function ()\r\n {\r\n // Bind\r\n\r\n var width = this.width;\r\n var height = this.height;\r\n var program = this.program;\r\n\r\n var gl = this.gl;\r\n var vertexBuffer = this.vertexBuffer;\r\n var renderer = this.renderer;\r\n var vertexSize = Float32Array.BYTES_PER_ELEMENT * 2;\r\n\r\n if (this.renderToTexture)\r\n {\r\n renderer.setFramebuffer(this.framebuffer);\r\n\r\n gl.clearColor(0, 0, 0, 0);\r\n\r\n gl.clear(gl.COLOR_BUFFER_BIT);\r\n }\r\n\r\n gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);\r\n\r\n var location = gl.getAttribLocation(program, 'inPosition');\r\n\r\n if (location !== -1)\r\n {\r\n gl.enableVertexAttribArray(location);\r\n\r\n gl.vertexAttribPointer(location, 2, gl.FLOAT, false, vertexSize, 0);\r\n }\r\n\r\n // Draw\r\n\r\n var vf = this.vertexViewF32;\r\n\r\n vf[3] = height;\r\n vf[4] = width;\r\n vf[5] = height;\r\n vf[8] = width;\r\n vf[9] = height;\r\n vf[10] = width;\r\n\r\n // Flush\r\n\r\n var vertexCount = 6;\r\n\r\n gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.bytes.subarray(0, vertexCount * vertexSize));\r\n\r\n gl.drawArrays(gl.TRIANGLES, 0, vertexCount);\r\n\r\n if (this.renderToTexture)\r\n {\r\n renderer.setFramebuffer(null, false);\r\n }\r\n },\r\n\r\n /**\r\n * A NOOP method so you can pass a Shader to a Container.\r\n * Calling this method will do nothing. It is intentionally empty.\r\n *\r\n * @method Phaser.GameObjects.Shader#setAlpha\r\n * @private\r\n * @since 3.17.0\r\n */\r\n setAlpha: function ()\r\n {\r\n },\r\n \r\n /**\r\n * A NOOP method so you can pass a Shader to a Container.\r\n * Calling this method will do nothing. It is intentionally empty.\r\n *\r\n * @method Phaser.GameObjects.Shader#setBlendMode\r\n * @private\r\n * @since 3.17.0\r\n */\r\n setBlendMode: function ()\r\n {\r\n },\r\n\r\n /**\r\n * Internal destroy handler, called as part of the destroy process.\r\n *\r\n * @method Phaser.GameObjects.Shader#preDestroy\r\n * @protected\r\n * @since 3.17.0\r\n */\r\n preDestroy: function ()\r\n {\r\n var gl = this.gl;\r\n\r\n gl.deleteProgram(this.program);\r\n gl.deleteBuffer(this.vertexBuffer);\r\n\r\n if (this.renderToTexture)\r\n {\r\n this.renderer.deleteFramebuffer(this.framebuffer);\r\n\r\n this.texture.destroy();\r\n\r\n this.framebuffer = null;\r\n this.glTexture = null;\r\n this.texture = null;\r\n }\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Shader;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFkZXIvU2hhZGVyLmpzPzkyNjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsZ0ZBQWU7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsMEVBQWU7QUFDeEMsbUJBQW1CLG1CQUFPLENBQUMsK0ZBQWlDO0FBQzVELGFBQWEsbUJBQU8sQ0FBQyxtRkFBMkI7QUFDaEQsZUFBZSxtQkFBTyxDQUFDLHVGQUE2QjtBQUNwRCxtQkFBbUIsbUJBQU8sQ0FBQyxvRkFBZ0I7QUFDM0Msc0JBQXNCLG1CQUFPLENBQUMsMEdBQStCOztBQUU3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxtQ0FBbUM7QUFDOUMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsU0FBUztBQUNwQixXQUFXLElBQUk7QUFDZjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPO0FBQ3JDLGtDQUFrQyxhQUFhO0FBQy9DLG1DQUFtQyxjQUFjOztBQUVqRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsZUFBZTs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUNBQW1DO0FBQ2xELGVBQWUsU0FBUztBQUN4QixlQUFlLElBQUk7QUFDbkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsZUFBZTs7QUFFcEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHlCQUF5QixxQkFBcUIsZ0NBQWdDLEVBQUU7QUFDaEYsbUJBQW1CLHVCQUF1QjtBQUMxQyxvQkFBb0IscUJBQXFCLHdDQUF3QyxFQUFFO0FBQ25GLG1CQUFtQixvSUFBb0k7QUFDdkoseUJBQXlCLDZCQUE2QjtBQUN0RCx3QkFBd0IsK0NBQStDLGVBQWUsRUFBRTtBQUN4Rix3QkFBd0IsK0NBQStDLGVBQWUsRUFBRTtBQUN4Rix3QkFBd0IsK0NBQStDLGVBQWUsRUFBRTtBQUN4Rix3QkFBd0IsK0NBQStDLGVBQWU7QUFDdEY7O0FBRUE7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixPQUFPO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQkFBcUI7QUFDcEM7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsYUFBYTtBQUM1QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLElBQUk7QUFDbkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsa0JBQWtCO0FBQzNELHdDQUF3QyxrQkFBa0I7O0FBRTFEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLElBQUk7QUFDbkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsa0JBQWtCOztBQUUzRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxJQUFJO0FBQ25CO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixJQUFJO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxJQUFJO0FBQ25CO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLElBQUk7QUFDbkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsSUFBSTtBQUNuQjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxJQUFJO0FBQ25CO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLElBQUk7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4Q0FBOEM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFkZXIvU2hhZGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ29tcG9uZW50cyA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMnKTtcclxudmFyIEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Jyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBFeHRlbmQgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvRXh0ZW5kJyk7XHJcbnZhciBTZXRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9TZXRWYWx1ZScpO1xyXG52YXIgU2hhZGVyUmVuZGVyID0gcmVxdWlyZSgnLi9TaGFkZXJSZW5kZXInKTtcclxudmFyIFRyYW5zZm9ybU1hdHJpeCA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMvVHJhbnNmb3JtTWF0cml4Jyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIFNoYWRlciBHYW1lIE9iamVjdC5cclxuICogXHJcbiAqIFRoaXMgR2FtZSBPYmplY3QgYWxsb3dzIHlvdSB0byBlYXNpbHkgYWRkIGEgcXVhZCB3aXRoIGl0cyBvd24gc2hhZGVyIGludG8gdGhlIGRpc3BsYXkgbGlzdCwgYW5kIG1hbmlwdWxhdGUgaXRcclxuICogYXMgeW91IHdvdWxkIGFueSBvdGhlciBHYW1lIE9iamVjdCwgaW5jbHVkaW5nIHNjYWxpbmcsIHJvdGF0aW5nLCBwb3NpdGlvbmluZyBhbmQgYWRkaW5nIHRvIENvbnRhaW5lcnMuIFNoYWRlcnNcclxuICogY2FuIGJlIG1hc2tlZCB3aXRoIGVpdGhlciBCaXRtYXAgb3IgR2VvbWV0cnkgbWFza3MgYW5kIGNhbiBhbHNvIGJlIHVzZWQgYXMgYSBCaXRtYXAgTWFzayBmb3IgYSBDYW1lcmEgb3Igb3RoZXJcclxuICogR2FtZSBPYmplY3QuIFRoZXkgY2FuIGFsc28gYmUgbWFkZSBpbnRlcmFjdGl2ZSBhbmQgdXNlZCBmb3IgaW5wdXQgZXZlbnRzLlxyXG4gKiBcclxuICogSXQgd29ya3MgYnkgdGFraW5nIGEgcmVmZXJlbmNlIHRvIGEgYFBoYXNlci5EaXNwbGF5LkJhc2VTaGFkZXJgIGluc3RhbmNlLCBhcyBmb3VuZCBpbiB0aGUgU2hhZGVyIENhY2hlLiBUaGVzZSBjYW5cclxuICogYmUgY3JlYXRlZCBkeW5hbWljYWxseSBhdCBydW50aW1lLCBvciBsb2FkZWQgaW4gdmlhIHRoZSBHTFNMIEZpbGUgTG9hZGVyOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiBmdW5jdGlvbiBwcmVsb2FkICgpXHJcbiAqIHtcclxuICogICAgIHRoaXMubG9hZC5nbHNsKCdmaXJlJywgJ3NoYWRlcnMvZmlyZS5nbHNsLmpzJyk7XHJcbiAqIH1cclxuICogIFxyXG4gKiBmdW5jdGlvbiBjcmVhdGUgKClcclxuICoge1xyXG4gKiAgICAgdGhpcy5hZGQuc2hhZGVyKCdmaXJlJywgNDAwLCAzMDAsIDUxMiwgNTEyKTtcclxuICogfVxyXG4gKiBgYGBcclxuICogXHJcbiAqIFBsZWFzZSBzZWUgdGhlIFBoYXNlciAzIEV4YW1wbGVzIEdpdEh1YiByZXBvIGZvciBleGFtcGxlcyBvZiBsb2FkaW5nIGFuZCBjcmVhdGluZyBzaGFkZXJzIGR5bmFtaWNhbGx5LlxyXG4gKiBcclxuICogRHVlIHRvIHRoZSB3YXkgaW4gd2hpY2ggdGhleSB3b3JrLCB5b3UgY2Fubm90IGRpcmVjdGx5IGNoYW5nZSB0aGUgYWxwaGEgb3IgYmxlbmQgbW9kZSBvZiBhIFNoYWRlci4gVGhpcyBzaG91bGRcclxuICogYmUgaGFuZGxlZCB2aWEgZXhwb3NlZCB1bmlmb3JtcyBpbiB0aGUgc2hhZGVyIGNvZGUgaXRzZWxmLlxyXG4gKiBcclxuICogQnkgZGVmYXVsdCBhIFNoYWRlciB3aWxsIGJlIGNyZWF0ZWQgd2l0aCBhIHN0YW5kYXJkIHNldCBvZiB1bmlmb3Jtcy4gVGhlc2Ugd2VyZSBhZGRlZCB0byBtYXRjaCB0aG9zZVxyXG4gKiBmb3VuZCBvbiBzaXRlcyBzdWNoIGFzIFNoYWRlclRveSBvciBHTFNMU2FuZGJveCwgYW5kIHByb3ZpZGUgY29tbW9uIGZ1bmN0aW9uYWxpdHkgYSBzaGFkZXIgbWF5IG5lZWQsXHJcbiAqIHN1Y2ggYXMgdGhlIHRpbWVzdGFtcCwgcmVzb2x1dGlvbiBvciBwb2ludGVyIHBvc2l0aW9uLiBZb3UgY2FuIHJlcGxhY2UgdGhlbSBieSBzcGVjaWZ5aW5nIHlvdXIgb3duIHVuaWZvcm1zXHJcbiAqIGluIHRoZSBCYXNlIFNoYWRlci5cclxuICogXHJcbiAqIFRoZXNlIFNoYWRlcnMgd29yayBieSBoYWx0aW5nIHRoZSBjdXJyZW50IHBpcGVsaW5lIGR1cmluZyByZW5kZXJpbmcsIGNyZWF0aW5nIGEgdmlld3BvcnQgbWF0Y2hlZCB0byB0aGVcclxuICogc2l6ZSBvZiB0aGlzIEdhbWUgT2JqZWN0IGFuZCB0aGVuIHJlbmRlcnMgYSBxdWFkIHVzaW5nIHRoZSBib3VuZCBzaGFkZXIuIEF0IHRoZSBlbmQsIHRoZSBwaXBlbGluZSBpcyByZXN0b3JlZC5cclxuICogXHJcbiAqIEJlY2F1c2UgaXQgYmxvY2tzIHRoZSBwaXBlbGluZSBpdCBtZWFucyBpdCB3aWxsIGludGVycnVwdCBhbnkgYmF0Y2hpbmcgdGhhdCBpcyBjdXJyZW50bHkgZ29pbmcgb24sIHNvIHlvdSBzaG91bGRcclxuICogdXNlIHRoZXNlIEdhbWUgT2JqZWN0cyBzcGFyaW5nbHkuIElmIHlvdSBuZWVkIHRvIGhhdmUgYSBmdWxseSBiYXRjaGVkIGN1c3RvbSBzaGFkZXIsIHRoZW4gcGxlYXNlIGxvb2sgYXQgdXNpbmdcclxuICogYSBjdXN0b20gcGlwZWxpbmUgaW5zdGVhZC4gSG93ZXZlciwgZm9yIGJhY2tncm91bmQgb3Igc3BlY2lhbCBtYXNraW5nIGVmZmVjdHMsIHRoZXkgYXJlIGV4dHJlbWVseSBlZmZlY3RpdmUuXHJcbiAqIFxyXG4gKiBAY2xhc3MgU2hhZGVyXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEB3ZWJnbE9ubHlcclxuICogQHNpbmNlIDMuMTcuMFxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5Db21wdXRlZFNpemVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGhcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuR2V0Qm91bmRzXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk1hc2tcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuT3JpZ2luXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNjcm9sbEZhY3RvclxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVmlzaWJsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBHYW1lIE9iamVjdCBiZWxvbmdzLiBBIEdhbWUgT2JqZWN0IGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgU2NlbmUgYXQgYSB0aW1lLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLkRpc3BsYXkuQmFzZVNoYWRlcil9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHNoYWRlciB0byB1c2UgZnJvbSB0aGUgc2hhZGVyIGNhY2hlLCBvciBhIEJhc2VTaGFkZXIgaW5zdGFuY2UuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGg9MTI4XSAtIFRoZSB3aWR0aCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0PTEyOF0gLSBUaGUgaGVpZ2h0IG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmdbXX0gW3RleHR1cmVzXSAtIE9wdGlvbmFsIGFycmF5IG9mIHRleHR1cmUga2V5cyB0byBiaW5kIHRvIHRoZSBpQ2hhbm5lbDAuLi4zIHVuaWZvcm1zLiBUaGUgdGV4dHVyZXMgbXVzdCBhbHJlYWR5IGV4aXN0IGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqIEBwYXJhbSB7YW55fSBbdGV4dHVyZURhdGFdIC0gQWRkaXRpb25hbCB0ZXh0dXJlIGRhdGEgaWYgeW91IHdhbnQgdG8gY3JlYXRlIHNoYWRlciB3aXRoIG5vbmUgTlBPVCB0ZXh0dXJlcy5cclxuICovXHJcbnZhciBTaGFkZXIgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEdhbWVPYmplY3QsXHJcblxyXG4gICAgTWl4aW5zOiBbXHJcbiAgICAgICAgQ29tcG9uZW50cy5Db21wdXRlZFNpemUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5EZXB0aCxcclxuICAgICAgICBDb21wb25lbnRzLkdldEJvdW5kcyxcclxuICAgICAgICBDb21wb25lbnRzLk1hc2ssXHJcbiAgICAgICAgQ29tcG9uZW50cy5PcmlnaW4sXHJcbiAgICAgICAgQ29tcG9uZW50cy5TY3JvbGxGYWN0b3IsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UcmFuc2Zvcm0sXHJcbiAgICAgICAgQ29tcG9uZW50cy5WaXNpYmxlLFxyXG4gICAgICAgIFNoYWRlclJlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFNoYWRlciAoc2NlbmUsIGtleSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgdGV4dHVyZXMsIHRleHR1cmVEYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHsgd2lkdGggPSAxMjg7IH1cclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gMTI4OyB9XHJcblxyXG4gICAgICAgIEdhbWVPYmplY3QuY2FsbCh0aGlzLCBzY2VuZSwgJ1NoYWRlcicpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGlzIEdhbWUgT2JqZWN0IGNhbm5vdCBoYXZlIGEgYmxlbmQgbW9kZSwgc28gc2tpcCBhbGwgY2hlY2tzLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjYmxlbmRNb2RlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5ibGVuZE1vZGUgPSAtMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHVuZGVybHlpbmcgc2hhZGVyIG9iamVjdCBiZWluZyB1c2VkLlxyXG4gICAgICAgICAqIEVtcHR5IGJ5IGRlZmF1bHQgYW5kIHNldCBkdXJpbmcgYSBjYWxsIHRvIHRoZSBgc2V0U2hhZGVyYCBtZXRob2QuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNzaGFkZXJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkRpc3BsYXkuQmFzZVNoYWRlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zaGFkZXI7XHJcblxyXG4gICAgICAgIHZhciByZW5kZXJlciA9IHNjZW5lLnN5cy5yZW5kZXJlcjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXIuXHJcbiAgICAgICAgICogU2hhZGVycyBvbmx5IHdvcmsgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNyZW5kZXJlclxyXG4gICAgICAgICAqIEB0eXBlIHsoUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcnxQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcil9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFdlYkdMIGNvbnRleHQgYmVsb25naW5nIHRvIHRoZSByZW5kZXJlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjZ2xcclxuICAgICAgICAgKiBAdHlwZSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFJhdyBieXRlIGJ1ZmZlciBvZiB2ZXJ0aWNlcyB0aGlzIFNoYWRlciB1c2VzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciN2ZXJ0ZXhEYXRhXHJcbiAgICAgICAgICogQHR5cGUge0FycmF5QnVmZmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZlcnRleERhdGEgPSBuZXcgQXJyYXlCdWZmZXIoNiAqIChGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAyKSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBXZWJHTCB2ZXJ0ZXggYnVmZmVyIG9iamVjdCB0aGlzIHNoYWRlciB1c2VzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciN2ZXJ0ZXhCdWZmZXJcclxuICAgICAgICAgKiBAdHlwZSB7V2ViR0xCdWZmZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyID0gcmVuZGVyZXIuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMudmVydGV4RGF0YS5ieXRlTGVuZ3RoLCB0aGlzLmdsLlNUUkVBTV9EUkFXKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFdlYkdMIHNoYWRlciBwcm9ncmFtIHRoaXMgc2hhZGVyIHVzZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuU2hhZGVyI3Byb2dyYW1cclxuICAgICAgICAgKiBAdHlwZSB7V2ViR0xQcm9ncmFtfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBVaW50OCB2aWV3IHRvIHRoZSB2ZXJ0ZXggcmF3IGJ1ZmZlci4gVXNlZCBmb3IgdXBsb2FkaW5nIHZlcnRleCBidWZmZXIgcmVzb3VyY2VzIHRvIHRoZSBHUFUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuU2hhZGVyI2J5dGVzXHJcbiAgICAgICAgICogQHR5cGUge1VpbnQ4QXJyYXl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYnl0ZXMgPSBuZXcgVWludDhBcnJheSh0aGlzLnZlcnRleERhdGEpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBGbG9hdDMyIHZpZXcgb2YgdGhlIGFycmF5IGJ1ZmZlciBjb250YWluaW5nIHRoZSBzaGFkZXJzIHZlcnRpY2VzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciN2ZXJ0ZXhWaWV3RjMyXHJcbiAgICAgICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52ZXJ0ZXhWaWV3RjMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRleERhdGEpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHRlbXBvcmFyeSBUcmFuc2Zvcm0gTWF0cml4LCByZS11c2VkIGludGVybmFsbHkgZHVyaW5nIGJhdGNoaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNfdGVtcE1hdHJpeDFcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RlbXBNYXRyaXgxID0gbmV3IFRyYW5zZm9ybU1hdHJpeCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHRlbXBvcmFyeSBUcmFuc2Zvcm0gTWF0cml4LCByZS11c2VkIGludGVybmFsbHkgZHVyaW5nIGJhdGNoaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNfdGVtcE1hdHJpeDJcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RlbXBNYXRyaXgyID0gbmV3IFRyYW5zZm9ybU1hdHJpeCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHRlbXBvcmFyeSBUcmFuc2Zvcm0gTWF0cml4LCByZS11c2VkIGludGVybmFsbHkgZHVyaW5nIGJhdGNoaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNfdGVtcE1hdHJpeDNcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RlbXBNYXRyaXgzID0gbmV3IFRyYW5zZm9ybU1hdHJpeCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmlldyBtYXRyaXggdGhlIHNoYWRlciB1c2VzIGR1cmluZyByZW5kZXJpbmcuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciN2aWV3TWF0cml4XHJcbiAgICAgICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52aWV3TWF0cml4ID0gbmV3IEZsb2F0MzJBcnJheShbIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEgXSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBwcm9qZWN0aW9uIG1hdHJpeCB0aGUgc2hhZGVyIHVzZXMgZHVyaW5nIHJlbmRlcmluZy5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuU2hhZGVyI3Byb2plY3Rpb25NYXRyaXhcclxuICAgICAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXggPSBuZXcgRmxvYXQzMkFycmF5KFsgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSBdKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHQgdW5pZm9ybSBtYXBwaW5ncy4gVGhlc2UgY2FuIGJlIGFkZGVkIHRvIChvciByZXBsYWNlZCkgYnkgc3BlY2lmeWluZyB5b3VyIG93biB1bmlmb3JtcyB3aGVuXHJcbiAgICAgICAgICogY3JlYXRpbmcgdGhpcyBzaGFkZXIgZ2FtZSBvYmplY3QuIFRoZSB1bmlmb3JtcyBhcmUgdXBkYXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyB0aGUgcmVuZGVyIHN0ZXAuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHRzIGFyZTpcclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBgcmVzb2x1dGlvbmAgKDJmKSAtIFNldCB0byB0aGUgc2l6ZSBvZiB0aGlzIHNoYWRlci5cclxuICAgICAgICAgKiBgdGltZWAgKDFmKSAtIFRoZSBlbGFwc2VkIGdhbWUgdGltZSwgaW4gc2Vjb25kcy5cclxuICAgICAgICAgKiBgbW91c2VgICgyZikgLSBJZiBhIHBvaW50ZXIgaGFzIGJlZW4gYm91bmQgKHdpdGggYHNldFBvaW50ZXJgKSwgdGhpcyB1bmlmb3JtIGNvbnRhaW5zIGl0cyBwb3NpdGlvbiBlYWNoIGZyYW1lLlxyXG4gICAgICAgICAqIGBkYXRlYCAoNGZ2KSAtIEEgdmVjNCBjb250YWluaW5nIHRoZSB5ZWFyLCBtb250aCwgZGF5IGFuZCB0aW1lIGluIHNlY29uZHMuXHJcbiAgICAgICAgICogYHNhbXBsZVJhdGVgICgxZikgLSBTb3VuZCBzYW1wbGUgcmF0ZS4gNDQxMDAgYnkgZGVmYXVsdC5cclxuICAgICAgICAgKiBgaUNoYW5uZWwwLi4uM2AgKHNhbXBsZXIyRCkgLSBJbnB1dCBjaGFubmVscyAwIHRvIDMuIGBudWxsYCBieSBkZWZhdWx0LlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjdW5pZm9ybXNcclxuICAgICAgICAgKiBAdHlwZSB7YW55fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnVuaWZvcm1zID0ge307XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBwb2ludGVyIGJvdW5kIHRvIHRoaXMgc2hhZGVyLCBpZiBhbnkuXHJcbiAgICAgICAgICogU2V0IHZpYSB0aGUgY2hhaW5hYmxlIGBzZXRQb2ludGVyYCBtZXRob2QsIG9yIGJ5IG1vZGlmeWluZyB0aGlzIHByb3BlcnR5IGRpcmVjdGx5LlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjcG9pbnRlclxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wb2ludGVyID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNhY2hlZCB3aWR0aCBvZiB0aGUgcmVuZGVyZXIuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNfcmVuZGVyZXJXaWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZXJXaWR0aCA9IHJlbmRlcmVyLndpZHRoO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY2FjaGVkIGhlaWdodCBvZiB0aGUgcmVuZGVyZXIuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNfcmVuZGVyZXJIZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVySGVpZ2h0ID0gcmVuZGVyZXIuaGVpZ2h0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCB0ZXh0dXJlIGNvdW50IHRyYWNrZXIuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNfdGV4dHVyZUNvdW50XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl90ZXh0dXJlQ291bnQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgR0wgRnJhbWUgQnVmZmVyIHRoaXMgU2hhZGVyIGlzIGRyYXdpbmcgdG8uXHJcbiAgICAgICAgICogVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IHNldCBpZiB5b3UgaGF2ZSBjYWxsZWQgYFNoYWRlci5zZXRSZW5kZXJUb1RleHR1cmVgLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNmcmFtZWJ1ZmZlclxyXG4gICAgICAgICAqIEB0eXBlIHs/V2ViR0xGcmFtZWJ1ZmZlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mcmFtZWJ1ZmZlciA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBXZWJHTFRleHR1cmUgdGhpcyBTaGFkZXIgaXMgcmVuZGVyaW5nIHRvLlxyXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgaXMgb25seSBzZXQgaWYgeW91IGhhdmUgY2FsbGVkIGBTaGFkZXIuc2V0UmVuZGVyVG9UZXh0dXJlYC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjZ2xUZXh0dXJlXHJcbiAgICAgICAgICogQHR5cGUgez9XZWJHTFRleHR1cmV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTkuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZ2xUZXh0dXJlID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBmbGFnIHRoYXQgaW5kaWNhdGVzIGlmIHRoaXMgU2hhZGVyIGhhcyBiZWVuIHNldCB0byByZW5kZXIgdG8gYSB0ZXh0dXJlIGluc3RlYWQgb2YgdGhlIGRpc3BsYXkgbGlzdC5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGlzIHByb3BlcnR5IGlzIGB0cnVlYCBpZiB5b3UgaGF2ZSBjYWxsZWQgYFNoYWRlci5zZXRSZW5kZXJUb1RleHR1cmVgLCBvdGhlcndpc2UgaXQncyBgZmFsc2VgLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEEgU2hhZGVyIHRoYXQgaXMgcmVuZGVyaW5nIHRvIGEgdGV4dHVyZSBfZG9lcyBub3RfIGFwcGVhciBvbiB0aGUgZGlzcGxheSBsaXN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNyZW5kZXJUb1RleHR1cmVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZW5kZXJUb1RleHR1cmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFBoYXNlci5UZXh0dXJlcy5UZXh0dXJlIHRoYXQgaGFzIGJlZW4gc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIgZm9yIHRoaXMgU2hhZGVyLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgaXMgb25seSBzZXQgaWYgeW91IGhhdmUgY2FsbGVkIGBTaGFkZXIuc2V0UmVuZGVyVG9UZXh0dXJlYCwgb3RoZXJ3aXNlIGl0IGlzIGBudWxsYC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjdGV4dHVyZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcclxuICAgICAgICB0aGlzLnNldFNpemUod2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgdGhpcy5zZXRPcmlnaW4oMC41LCAwLjUpO1xyXG4gICAgICAgIHRoaXMuc2V0U2hhZGVyKGtleSwgdGV4dHVyZXMsIHRleHR1cmVEYXRhKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb21wYXJlcyB0aGUgcmVuZGVyTWFzayB3aXRoIHRoZSByZW5kZXJGbGFncyB0byBzZWUgaWYgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHJlbmRlciBvciBub3QuXHJcbiAgICAgKiBBbHNvIGNoZWNrcyB0aGUgR2FtZSBPYmplY3QgYWdhaW5zdCB0aGUgZ2l2ZW4gQ2FtZXJhcyBleGNsdXNpb24gbGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjd2lsbFJlbmRlclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0byBjaGVjayBhZ2FpbnN0IHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgR2FtZSBPYmplY3Qgc2hvdWxkIGJlIHJlbmRlcmVkLCBvdGhlcndpc2UgZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIHdpbGxSZW5kZXI6IGZ1bmN0aW9uIChjYW1lcmEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVuZGVyVG9UZXh0dXJlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiAhKEdhbWVPYmplY3QuUkVOREVSX01BU0sgIT09IHRoaXMucmVuZGVyRmxhZ3MgfHwgKHRoaXMuY2FtZXJhRmlsdGVyICE9PSAwICYmICh0aGlzLmNhbWVyYUZpbHRlciAmIGNhbWVyYS5pZCkpKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hhbmdlcyB0aGlzIFNoYWRlciBzbyBpbnN0ZWFkIG9mIHJlbmRlcmluZyB0byB0aGUgZGlzcGxheSBsaXN0IGl0IHJlbmRlcnMgdG8gYVxyXG4gICAgICogV2ViR0wgRnJhbWVidWZmZXIgYW5kIFdlYkdMIFRleHR1cmUgaW5zdGVhZC4gVGhpcyBhbGxvd3MgeW91IHRvIHVzZSB0aGUgb3V0cHV0XHJcbiAgICAgKiBvZiB0aGlzIHNoYWRlciBhcyBhbiBpbnB1dCBmb3IgYW5vdGhlciBzaGFkZXIsIGJ5IG1hcHBpbmcgYSBzYW1wbGVyMkQgdW5pZm9ybVxyXG4gICAgICogdG8gaXQuXHJcbiAgICAgKiBcclxuICAgICAqIEFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgdGhlIGBTaGFkZXIuZnJhbWVidWZmZXJgIGFuZCBgU2hhZGVyLmdsVGV4dHVyZWAgcHJvcGVydGllc1xyXG4gICAgICogYXJlIHBvcHVsYXRlZC5cclxuICAgICAqIFxyXG4gICAgICogQWRkaXRpb25hbGx5LCB5b3UgY2FuIHByb3ZpZGUgYSBrZXkgdG8gdGhpcyBtZXRob2QuIERvaW5nIHNvIHdpbGwgY3JlYXRlIGEgUGhhc2VyIFRleHR1cmVcclxuICAgICAqIGZyb20gdGhpcyBTaGFkZXIgYW5kIHNhdmUgaXQgaW50byB0aGUgVGV4dHVyZSBNYW5hZ2VyLCBhbGxvd2luZyB5b3UgdG8gdGhlbiB1c2UgaXQgZm9yXHJcbiAgICAgKiBhbnkgdGV4dHVyZS1iYXNlZCBHYW1lIE9iamVjdCwgc3VjaCBhcyBhIFNwcml0ZSBvciBJbWFnZTpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdmFyIHNoYWRlciA9IHRoaXMuYWRkLnNoYWRlcignbXlTaGFkZXInLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAqIFxyXG4gICAgICogc2hhZGVyLnNldFJlbmRlclRvVGV4dHVyZSgnZG9vZGxlJyk7XHJcbiAgICAgKiBcclxuICAgICAqIHRoaXMuYWRkLmltYWdlKDQwMCwgMzAwLCAnZG9vZGxlJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogTm90ZSB0aGF0IGl0IHN0b3JlcyBhbiBhY3RpdmUgcmVmZXJlbmNlIHRvIHRoaXMgU2hhZGVyLiBUaGF0IG1lYW5zIGFzIHRoaXMgc2hhZGVyIHVwZGF0ZXMsXHJcbiAgICAgKiBzbyBkb2VzIHRoZSB0ZXh0dXJlIGFuZCBhbnkgb2JqZWN0IHVzaW5nIGl0IHRvIHJlbmRlciB3aXRoLiBBbHNvLCBpZiB5b3UgZGVzdHJveSB0aGlzXHJcbiAgICAgKiBzaGFkZXIsIGJlIHN1cmUgdG8gY2xlYXIgYW55IG9iamVjdHMgdGhhdCBtYXkgaGF2ZSBiZWVuIHVzaW5nIGl0IGFzIGEgdGV4dHVyZSB0b28uXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBjYW4gYWNjZXNzIHRoZSBQaGFzZXIgVGV4dHVyZSB0aGF0IGlzIGNyZWF0ZWQgdmlhIHRoZSBgU2hhZGVyLnRleHR1cmVgIHByb3BlcnR5LlxyXG4gICAgICogXHJcbiAgICAgKiBCeSBkZWZhdWx0IGl0IHdpbGwgY3JlYXRlIGEgc2luZ2xlIGJhc2UgdGV4dHVyZS4gWW91IGNhbiBhZGQgZnJhbWVzIHRvIHRoZSB0ZXh0dXJlXHJcbiAgICAgKiBieSB1c2luZyB0aGUgYFRleHR1cmUuYWRkYCBtZXRob2QuIEFmdGVyIGRvaW5nIHRoaXMsIHlvdSBjYW4gdGhlbiBhbGxvdyBHYW1lIE9iamVjdHNcclxuICAgICAqIHRvIHVzZSBhIHNwZWNpZmljIGZyYW1lIGZyb20gYSBSZW5kZXIgVGV4dHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjc2V0UmVuZGVyVG9UZXh0dXJlXHJcbiAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIC0gVGhlIHVuaXF1ZSBrZXkgdG8gc3RvcmUgdGhlIHRleHR1cmUgYXMgd2l0aGluIHRoZSBnbG9iYWwgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZmxpcFk9ZmFsc2VdIC0gRG9lcyB0aGlzIHRleHR1cmUgbmVlZCB2ZXJ0aWNhbGx5IGZsaXBwaW5nIGJlZm9yZSByZW5kZXJpbmc/IFRoaXMgc2hvdWxkIHVzdWFsbHkgYmUgc2V0IHRvIGB0cnVlYCBpZiBiZWluZyBmZWQgZnJvbSBhIGJ1ZmZlci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFNoYWRlciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0UmVuZGVyVG9UZXh0dXJlOiBmdW5jdGlvbiAoa2V5LCBmbGlwWSlcclxuICAgIHtcclxuICAgICAgICBpZiAoZmxpcFkgPT09IHVuZGVmaW5lZCkgeyBmbGlwWSA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5yZW5kZXJUb1RleHR1cmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLndpZHRoO1xyXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmdsVGV4dHVyZSA9IHJlbmRlcmVyLmNyZWF0ZVRleHR1cmVGcm9tU291cmNlKG51bGwsIHdpZHRoLCBoZWlnaHQsIDApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nbFRleHR1cmUuZmxpcFkgPSBmbGlwWTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVidWZmZXIgPSByZW5kZXJlci5jcmVhdGVGcmFtZWJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCB0aGlzLmdsVGV4dHVyZSwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXJXaWR0aCA9IHdpZHRoO1xyXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlckhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVG9UZXh0dXJlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucHJvak9ydGhvKDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChrZXkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGV4dHVyZSA9IHRoaXMuc2NlbmUuc3lzLnRleHR1cmVzLmFkZEdMVGV4dHVyZShrZXksIHRoaXMuZ2xUZXh0dXJlLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIEFuZCBub3cgcmVuZGVyIGF0IGxlYXN0IG9uY2UsIHNvIG91ciB0ZXh0dXJlIGlzbid0IGJsYW5rIG9uIHRoZSBmaXJzdCB1cGRhdGVcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2hhZGVyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHBpcGVsaW5lID0gcmVuZGVyZXIuY3VycmVudFBpcGVsaW5lO1xyXG5cclxuICAgICAgICAgICAgcmVuZGVyZXIuY2xlYXJQaXBlbGluZSgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLmxvYWQoKTtcclxuICAgICAgICAgICAgdGhpcy5mbHVzaCgpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnJlYmluZFBpcGVsaW5lKHBpcGVsaW5lKTtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBmcmFnbWVudCBhbmQsIG9wdGlvbmFsbHksIHRoZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZSBjb2RlIHRoYXQgdGhpcyBTaGFkZXIgd2lsbCB1c2UuXHJcbiAgICAgKiBUaGlzIHdpbGwgaW1tZWRpYXRlbHkgZGVsZXRlIHRoZSBhY3RpdmUgc2hhZGVyIHByb2dyYW0sIGlmIHNldCwgYW5kIHRoZW4gY3JlYXRlIGEgbmV3IG9uZVxyXG4gICAgICogd2l0aCB0aGUgZ2l2ZW4gc291cmNlLiBGaW5hbGx5LCB0aGUgc2hhZGVyIHVuaWZvcm1zIGFyZSBpbml0aWFsaXplZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjc2V0U2hhZGVyXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuRGlzcGxheS5CYXNlU2hhZGVyKX0ga2V5IC0gVGhlIGtleSBvZiB0aGUgc2hhZGVyIHRvIHVzZSBmcm9tIHRoZSBzaGFkZXIgY2FjaGUsIG9yIGEgQmFzZVNoYWRlciBpbnN0YW5jZS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFt0ZXh0dXJlc10gLSBPcHRpb25hbCBhcnJheSBvZiB0ZXh0dXJlIGtleXMgdG8gYmluZCB0byB0aGUgaUNoYW5uZWwwLi4uMyB1bmlmb3Jtcy4gVGhlIHRleHR1cmVzIG11c3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICogQHBhcmFtIHthbnl9IFt0ZXh0dXJlRGF0YV0gLSBBZGRpdGlvbmFsIHRleHR1cmUgZGF0YS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBTaGFkZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFNoYWRlcjogZnVuY3Rpb24gKGtleSwgdGV4dHVyZXMsIHRleHR1cmVEYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0ZXh0dXJlcyA9PT0gdW5kZWZpbmVkKSB7IHRleHR1cmVzID0gW107IH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5zY2VuZS5zeXMuY2FjaGUuc2hhZGVyO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjYWNoZS5oYXMoa2V5KSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdTaGFkZXIgbWlzc2luZzogJyArIGtleSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuc2hhZGVyID0gY2FjaGUuZ2V0KGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hhZGVyID0ga2V5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGdsID0gdGhpcy5nbDtcclxuICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm9ncmFtKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHByb2dyYW0gPSByZW5kZXJlci5jcmVhdGVQcm9ncmFtKHRoaXMuc2hhZGVyLnZlcnRleFNyYywgdGhpcy5zaGFkZXIuZnJhZ21lbnRTcmMpO1xyXG5cclxuICAgICAgICAvLyAgVGhlIGRlZmF1bHQgdW5pZm9ybXMgYXZhaWxhYmxlIHdpdGhpbiB0aGUgdmVydGV4IHNoYWRlclxyXG4gICAgICAgIHJlbmRlcmVyLnNldE1hdHJpeDQocHJvZ3JhbSwgJ3VWaWV3TWF0cml4JywgZmFsc2UsIHRoaXMudmlld01hdHJpeCk7XHJcbiAgICAgICAgcmVuZGVyZXIuc2V0TWF0cml4NChwcm9ncmFtLCAndVByb2plY3Rpb25NYXRyaXgnLCBmYWxzZSwgdGhpcy5wcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICByZW5kZXJlci5zZXRGbG9hdDIocHJvZ3JhbSwgJ3VSZXNvbHV0aW9uJywgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xyXG5cclxuICAgICAgICB0aGlzLnByb2dyYW0gPSBwcm9ncmFtO1xyXG5cclxuICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKCk7XHJcblxyXG4gICAgICAgIC8vICBUaGUgZGVmYXVsdCB1bmlmb3JtcyBhdmFpbGFibGUgd2l0aGluIHRoZSBmcmFnbWVudCBzaGFkZXJcclxuICAgICAgICB2YXIgZGVmYXVsdFVuaWZvcm1zID0ge1xyXG4gICAgICAgICAgICByZXNvbHV0aW9uOiB7IHR5cGU6ICcyZicsIHZhbHVlOiB7IHg6IHRoaXMud2lkdGgsIHk6IHRoaXMuaGVpZ2h0IH0gfSxcclxuICAgICAgICAgICAgdGltZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxyXG4gICAgICAgICAgICBtb3VzZTogeyB0eXBlOiAnMmYnLCB2YWx1ZTogeyB4OiB0aGlzLndpZHRoIC8gMiwgeTogdGhpcy5oZWlnaHQgLyAyIH0gfSxcclxuICAgICAgICAgICAgZGF0ZTogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFsgZC5nZXRGdWxsWWVhcigpLCBkLmdldE1vbnRoKCksIGQuZ2V0RGF0ZSgpLCBkLmdldEhvdXJzKCkgKiA2MCAqIDYwICsgZC5nZXRNaW51dGVzKCkgKiA2MCArIGQuZ2V0U2Vjb25kcygpIF0gfSxcclxuICAgICAgICAgICAgc2FtcGxlUmF0ZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogNDQxMDAuMCB9LFxyXG4gICAgICAgICAgICBpQ2hhbm5lbDA6IHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBudWxsLCB0ZXh0dXJlRGF0YTogeyByZXBlYXQ6IHRydWUgfSB9LFxyXG4gICAgICAgICAgICBpQ2hhbm5lbDE6IHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBudWxsLCB0ZXh0dXJlRGF0YTogeyByZXBlYXQ6IHRydWUgfSB9LFxyXG4gICAgICAgICAgICBpQ2hhbm5lbDI6IHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBudWxsLCB0ZXh0dXJlRGF0YTogeyByZXBlYXQ6IHRydWUgfSB9LFxyXG4gICAgICAgICAgICBpQ2hhbm5lbDM6IHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBudWxsLCB0ZXh0dXJlRGF0YTogeyByZXBlYXQ6IHRydWUgfSB9XHJcbiAgICAgICAgfTtcclxuIFxyXG4gICAgICAgIGlmICh0aGlzLnNoYWRlci51bmlmb3JtcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMgPSBFeHRlbmQodHJ1ZSwge30sIHRoaXMuc2hhZGVyLnVuaWZvcm1zLCBkZWZhdWx0VW5pZm9ybXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zID0gZGVmYXVsdFVuaWZvcm1zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodGV4dHVyZXNbaV0pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U2FtcGxlcjJEKCdpQ2hhbm5lbCcgKyBpLCB0ZXh0dXJlc1tpXSwgaSwgdGV4dHVyZURhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmluaXRVbmlmb3JtcygpO1xyXG5cclxuICAgICAgICB0aGlzLnByb2pPcnRobygwLCB0aGlzLl9yZW5kZXJlcldpZHRoLCB0aGlzLl9yZW5kZXJlckhlaWdodCwgMCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJpbmRzIGEgUGhhc2VyIFBvaW50ZXIgb2JqZWN0IHRvIHRoaXMgU2hhZGVyLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgc2NyZWVuIHBvc2l0aW9uIG9mIHRoZSBwb2ludGVyIHdpbGwgYmUgc2V0IGluIHRvIHRoZSBzaGFkZXJzIGBtb3VzZWAgdW5pZm9ybVxyXG4gICAgICogYXV0b21hdGljYWxseSBldmVyeSBmcmFtZS4gQ2FsbCB0aGlzIG1ldGhvZCB3aXRoIG5vIGFyZ3VtZW50cyB0byB1bmJpbmQgdGhlIHBvaW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU2hhZGVyI3NldFBvaW50ZXJcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gW3BvaW50ZXJdIC0gVGhlIFBvaW50ZXIgdG8gYmluZCB0byB0aGlzIHNoYWRlci5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBTaGFkZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFBvaW50ZXI6IGZ1bmN0aW9uIChwb2ludGVyKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucG9pbnRlciA9IHBvaW50ZXI7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhpcyBzaGFkZXIgdG8gdXNlIGFuIG9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uIG1hdHJpeC5cclxuICAgICAqIFRoaXMgbWF0cml4IGlzIHN0b3JlZCBsb2NhbGx5IGluIHRoZSBgcHJvamVjdGlvbk1hdHJpeGAgcHJvcGVydHksXHJcbiAgICAgKiBhcyB3ZWxsIGFzIGJlaW5nIGJvdW5kIHRvIHRoZSBgdVByb2plY3Rpb25NYXRyaXhgIHVuaWZvcm0uXHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNwcm9qT3J0aG9cclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGVmdCAtIFRoZSBsZWZ0IHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJpZ2h0IC0gVGhlIHJpZ2h0IHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJvdHRvbSAtIFRoZSBib3R0b20gdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdG9wIC0gVGhlIHRvcCB2YWx1ZS5cclxuICAgICAqL1xyXG4gICAgcHJvak9ydGhvOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBuZWFyID0gLTEwMDA7XHJcbiAgICAgICAgdmFyIGZhciA9IDEwMDA7XHJcblxyXG4gICAgICAgIHZhciBsZWZ0UmlnaHQgPSAxIC8gKGxlZnQgLSByaWdodCk7XHJcbiAgICAgICAgdmFyIGJvdHRvbVRvcCA9IDEgLyAoYm90dG9tIC0gdG9wKTtcclxuICAgICAgICB2YXIgbmVhckZhciA9IDEgLyAobmVhciAtIGZhcik7XHJcblxyXG4gICAgICAgIHZhciBwbSA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcclxuXHJcbiAgICAgICAgcG1bMF0gPSAtMiAqIGxlZnRSaWdodDtcclxuICAgICAgICBwbVs1XSA9IC0yICogYm90dG9tVG9wO1xyXG4gICAgICAgIHBtWzEwXSA9IDIgKiBuZWFyRmFyO1xyXG4gICAgICAgIHBtWzEyXSA9IChsZWZ0ICsgcmlnaHQpICogbGVmdFJpZ2h0O1xyXG4gICAgICAgIHBtWzEzXSA9ICh0b3AgKyBib3R0b20pICogYm90dG9tVG9wO1xyXG4gICAgICAgIHBtWzE0XSA9IChmYXIgKyBuZWFyKSAqIG5lYXJGYXI7XHJcblxyXG4gICAgICAgIHZhciBwcm9ncmFtID0gdGhpcy5wcm9ncmFtO1xyXG5cclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldE1hdHJpeDQocHJvZ3JhbSwgJ3VQcm9qZWN0aW9uTWF0cml4JywgZmFsc2UsIHRoaXMucHJvamVjdGlvbk1hdHJpeCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyV2lkdGggPSByaWdodDtcclxuICAgICAgICB0aGlzLl9yZW5kZXJlckhlaWdodCA9IGJvdHRvbTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gVW5pZm9ybXMgYXJlIHNwZWNpZmllZCBpbiB0aGUgR0xTTF9FUyBTcGVjaWZpY2F0aW9uOiBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL3NwZWNzL2xhdGVzdC8xLjAvXHJcbiAgICAvLyBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L2dsZXMvc3BlY3MvMi4wL0dMU0xfRVNfU3BlY2lmaWNhdGlvbl8xLjAuMTcucGRmXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhbGwgb2YgdGhlIHVuaWZvcm1zIHRoaXMgc2hhZGVyIHVzZXMuXHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNpbml0VW5pZm9ybXNcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKi9cclxuICAgIGluaXRVbmlmb3JtczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgZ2wgPSB0aGlzLmdsO1xyXG4gICAgICAgIHZhciBtYXAgPSB0aGlzLnJlbmRlcmVyLmdsRnVuY01hcDtcclxuICAgICAgICB2YXIgcHJvZ3JhbSA9IHRoaXMucHJvZ3JhbTtcclxuXHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZUNvdW50ID0gMDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMudW5pZm9ybXMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgdW5pZm9ybSA9IHRoaXMudW5pZm9ybXNba2V5XTtcclxuXHJcbiAgICAgICAgICAgIHZhciB0eXBlID0gdW5pZm9ybS50eXBlO1xyXG4gICAgICAgICAgICB2YXIgZGF0YSA9IG1hcFt0eXBlXTtcclxuXHJcbiAgICAgICAgICAgIHVuaWZvcm0udW5pZm9ybUxvY2F0aW9uID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIGtleSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZSAhPT0gJ3NhbXBsZXIyRCcpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHVuaWZvcm0uZ2xNYXRyaXggPSBkYXRhLm1hdHJpeDtcclxuICAgICAgICAgICAgICAgIHVuaWZvcm0uZ2xWYWx1ZUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgdW5pZm9ybS5nbEZ1bmMgPSBkYXRhLmZ1bmM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBhIHNhbXBsZXIyRCB1bmlmb3JtIG9uIHRoaXMgc2hhZGVyIHdoZXJlIHRoZSBzb3VyY2UgdGV4dHVyZSBpcyBhIFdlYkdMVGV4dHVyZS5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBhbGxvd3MgeW91IHRvIGZlZWQgdGhlIG91dHB1dCBmcm9tIG9uZSBTaGFkZXIgaW50byBhbm90aGVyOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBsZXQgc2hhZGVyMSA9IHRoaXMuYWRkLnNoYWRlcihiYXNlU2hhZGVyMSwgMCwgMCwgNTEyLCA1MTIpLnNldFJlbmRlclRvVGV4dHVyZSgpO1xyXG4gICAgICogbGV0IHNoYWRlcjIgPSB0aGlzLmFkZC5zaGFkZXIoYmFzZVNoYWRlcjIsIDAsIDAsIDUxMiwgNTEyKS5zZXRSZW5kZXJUb1RleHR1cmUoJ291dHB1dCcpO1xyXG4gICAgICogXHJcbiAgICAgKiBzaGFkZXIxLnNldFNhbXBsZXIyREJ1ZmZlcignaUNoYW5uZWwwJywgc2hhZGVyMi5nbFRleHR1cmUsIDUxMiwgNTEyKTtcclxuICAgICAqIHNoYWRlcjIuc2V0U2FtcGxlcjJEQnVmZmVyKCdpQ2hhbm5lbDAnLCBzaGFkZXIxLmdsVGV4dHVyZSwgNTEyLCA1MTIpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIEluIHRoZSBhYm92ZSBjb2RlLCB0aGUgcmVzdWx0IG9mIGJhc2VTaGFkZXIxIGlzIGZlZCBpbnRvIFNoYWRlcjIgYXMgdGhlIGBpQ2hhbm5lbDBgIHNhbXBsZXIyRCB1bmlmb3JtLlxyXG4gICAgICogVGhlIHJlc3VsdCBvZiBiYXNlU2hhZGVyMiBpcyB0aGVuIGZlZCBiYWNrIGludG8gc2hhZGVyMSBhZ2FpbiwgY3JlYXRpbmcgYSBmZWVkYmFjayBsb29wLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB5b3Ugd2lzaCB0byB1c2UgYW4gaW1hZ2UgZnJvbSB0aGUgVGV4dHVyZSBNYW5hZ2VyIGFzIGEgc2FtcGxlcjJEIGlucHV0IGZvciB0aGlzIHNoYWRlcixcclxuICAgICAqIHNlZSB0aGUgYFNoYWRlci5zZXRTYW1wbGVyMkRgIG1ldGhvZC5cclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU2hhZGVyI3NldFNhbXBsZXIyREJ1ZmZlclxyXG4gICAgICogQHNpbmNlIDMuMTkuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pZm9ybUtleSAtIFRoZSBrZXkgb2YgdGhlIHNhbXBsZXIyRCB1bmlmb3JtIHRvIGJlIHVwZGF0ZWQsIGkuZS4gYGlDaGFubmVsMGAuXHJcbiAgICAgKiBAcGFyYW0ge1dlYkdMVGV4dHVyZX0gdGV4dHVyZSAtIEEgV2ViR0xUZXh0dXJlIHJlZmVyZW5jZS5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIHRleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0ZXh0dXJlSW5kZXg9MF0gLSBUaGUgdGV4dHVyZSBpbmRleC5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbdGV4dHVyZURhdGFdIC0gQWRkaXRpb25hbCB0ZXh0dXJlIGRhdGEuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgU2hhZGVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRTYW1wbGVyMkRCdWZmZXI6IGZ1bmN0aW9uICh1bmlmb3JtS2V5LCB0ZXh0dXJlLCB3aWR0aCwgaGVpZ2h0LCB0ZXh0dXJlSW5kZXgsIHRleHR1cmVEYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0ZXh0dXJlSW5kZXggPT09IHVuZGVmaW5lZCkgeyB0ZXh0dXJlSW5kZXggPSAwOyB9XHJcbiAgICAgICAgaWYgKHRleHR1cmVEYXRhID09PSB1bmRlZmluZWQpIHsgdGV4dHVyZURhdGEgPSB7fTsgfVxyXG5cclxuICAgICAgICB2YXIgdW5pZm9ybSA9IHRoaXMudW5pZm9ybXNbdW5pZm9ybUtleV07XHJcblxyXG4gICAgICAgIHVuaWZvcm0udmFsdWUgPSB0ZXh0dXJlO1xyXG5cclxuICAgICAgICB0ZXh0dXJlRGF0YS53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRleHR1cmVEYXRhLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgdW5pZm9ybS50ZXh0dXJlRGF0YSA9IHRleHR1cmVEYXRhO1xyXG5cclxuICAgICAgICB0aGlzLl90ZXh0dXJlQ291bnQgPSB0ZXh0dXJlSW5kZXg7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBhIHNhbXBsZXIyRCB1bmlmb3JtIG9uIHRoaXMgc2hhZGVyLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgdGV4dHVyZUtleSBnaXZlbiBpcyB0aGUga2V5IGZyb20gdGhlIFRleHR1cmUgTWFuYWdlciBjYWNoZS4gWW91IGNhbm5vdCB1c2UgYSBzaW5nbGUgZnJhbWVcclxuICAgICAqIGZyb20gYSB0ZXh0dXJlLCBvbmx5IHRoZSBmdWxsIGltYWdlLiBBbHNvLCBsb3RzIG9mIHNoYWRlcnMgZXhwZWN0IHRleHR1cmVzIHRvIGJlIHBvd2VyLW9mLXR3byBzaXplZC5cclxuICAgICAqIFxyXG4gICAgICogSWYgeW91IHdpc2ggdG8gdXNlIGFub3RoZXIgU2hhZGVyIGFzIGEgc2FtcGxlcjJEIGlucHV0IGZvciB0aGlzIHNoYWRlciwgc2VlIHRoZSBgU2hhZGVyLnNldFNhbXBsZXIyREJ1ZmZlcmAgbWV0aG9kLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjc2V0U2FtcGxlcjJEXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1bmlmb3JtS2V5IC0gVGhlIGtleSBvZiB0aGUgc2FtcGxlcjJEIHVuaWZvcm0gdG8gYmUgdXBkYXRlZCwgaS5lLiBgaUNoYW5uZWwwYC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0dXJlS2V5IC0gVGhlIGtleSBvZiB0aGUgdGV4dHVyZSwgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuIE11c3QgYWxyZWFkeSBiZSBsb2FkZWQuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt0ZXh0dXJlSW5kZXg9MF0gLSBUaGUgdGV4dHVyZSBpbmRleC5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbdGV4dHVyZURhdGFdIC0gQWRkaXRpb25hbCB0ZXh0dXJlIGRhdGEuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgU2hhZGVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRTYW1wbGVyMkQ6IGZ1bmN0aW9uICh1bmlmb3JtS2V5LCB0ZXh0dXJlS2V5LCB0ZXh0dXJlSW5kZXgsIHRleHR1cmVEYXRhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0ZXh0dXJlSW5kZXggPT09IHVuZGVmaW5lZCkgeyB0ZXh0dXJlSW5kZXggPSAwOyB9XHJcblxyXG4gICAgICAgIHZhciB0ZXh0dXJlTWFuYWdlciA9IHRoaXMuc2NlbmUuc3lzLnRleHR1cmVzO1xyXG5cclxuICAgICAgICBpZiAodGV4dHVyZU1hbmFnZXIuZXhpc3RzKHRleHR1cmVLZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGZyYW1lID0gdGV4dHVyZU1hbmFnZXIuZ2V0RnJhbWUodGV4dHVyZUtleSk7XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtID0gdGhpcy51bmlmb3Jtc1t1bmlmb3JtS2V5XTtcclxuICAgICAgICAgICAgdmFyIHNvdXJjZSA9IGZyYW1lLnNvdXJjZTtcclxuXHJcbiAgICAgICAgICAgIHVuaWZvcm0udGV4dHVyZUtleSA9IHRleHR1cmVLZXk7XHJcbiAgICAgICAgICAgIHVuaWZvcm0uc291cmNlID0gc291cmNlLmltYWdlO1xyXG4gICAgICAgICAgICB1bmlmb3JtLnZhbHVlID0gZnJhbWUuZ2xUZXh0dXJlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNvdXJjZS5pc0dMVGV4dHVyZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlRGF0YSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRGF0YSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRleHR1cmVEYXRhLndpZHRoID0gc291cmNlLndpZHRoO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZURhdGEuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRleHR1cmVEYXRhKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB1bmlmb3JtLnRleHR1cmVEYXRhID0gdGV4dHVyZURhdGE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmVDb3VudCA9IHRleHR1cmVJbmRleDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgYSBwcm9wZXJ0eSBvZiBhIHVuaWZvcm0gYWxyZWFkeSBwcmVzZW50IG9uIHRoaXMgc2hhZGVyLlxyXG4gICAgICogXHJcbiAgICAgKiBUbyBtb2RpZnkgdGhlIHZhbHVlIG9mIGEgdW5pZm9ybSBzdWNoIGFzIGEgMWYgb3IgMWkgdXNlIHRoZSBgdmFsdWVgIHByb3BlcnR5IGRpcmVjdGx5OlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBzaGFkZXIuc2V0VW5pZm9ybSgnc2l6ZS52YWx1ZScsIDE2KTtcclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiBZb3UgY2FuIHVzZSBkb3Qgbm90YXRpb24gdG8gYWNjZXNzIGRlZXBlciB2YWx1ZXMsIGZvciBleGFtcGxlOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBzaGFkZXIuc2V0VW5pZm9ybSgncmVzb2x1dGlvbi52YWx1ZS54JywgNTEyKTtcclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgY2hhbmdlIHRvIHRoZSB1bmlmb3JtIHdpbGwgdGFrZSBlZmZlY3QgdGhlIG5leHQgdGltZSB0aGUgc2hhZGVyIGlzIHJlbmRlcmVkLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjc2V0VW5pZm9ybVxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgdW5pZm9ybSB0byBtb2RpZnkuIFVzZSBkb3RzIGZvciBkZWVwIHByb3BlcnRpZXMsIGkuZS4gYHJlc29sdXRpb24udmFsdWUueGAuXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0IGludG8gdGhlIHVuaWZvcm0uXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgU2hhZGVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRVbmlmb3JtOiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBTZXRWYWx1ZSh0aGlzLnVuaWZvcm1zLCBrZXksIHZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdW5pZm9ybSBvYmplY3QgZm9yIHRoZSBnaXZlbiBrZXksIG9yIGBudWxsYCBpZiB0aGUgdW5pZm9ybSBjb3VsZG4ndCBiZSBmb3VuZC5cclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU2hhZGVyI2dldFVuaWZvcm1cclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHVuaWZvcm0gdG8gcmV0dXJuIHRoZSB2YWx1ZSBmb3IuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge2FueX0gQSByZWZlcmVuY2UgdG8gdGhlIHVuaWZvcm0gb2JqZWN0LiBUaGlzIGlzIG5vdCBhIGNvcHksIHNvIG1vZGlmeWluZyBpdCB3aWxsIHVwZGF0ZSB0aGUgb3JpZ2luYWwgb2JqZWN0IGFsc28uXHJcbiAgICAgKi9cclxuICAgIGdldFVuaWZvcm06IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIEdldEZhc3RWYWx1ZSh0aGlzLnVuaWZvcm1zLCBrZXksIG51bGwpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgc2hvcnQtY3V0IG1ldGhvZCB0aGF0IHdpbGwgZGlyZWN0bHkgc2V0IHRoZSB0ZXh0dXJlIGJlaW5nIHVzZWQgYnkgdGhlIGBpQ2hhbm5lbDBgIHNhbXBsZXIyRCB1bmlmb3JtLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgdGV4dHVyZUtleSBnaXZlbiBpcyB0aGUga2V5IGZyb20gdGhlIFRleHR1cmUgTWFuYWdlciBjYWNoZS4gWW91IGNhbm5vdCB1c2UgYSBzaW5nbGUgZnJhbWVcclxuICAgICAqIGZyb20gYSB0ZXh0dXJlLCBvbmx5IHRoZSBmdWxsIGltYWdlLiBBbHNvLCBsb3RzIG9mIHNoYWRlcnMgZXhwZWN0IHRleHR1cmVzIHRvIGJlIHBvd2VyLW9mLXR3byBzaXplZC5cclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU2hhZGVyI3NldENoYW5uZWwwXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0dXJlS2V5IC0gVGhlIGtleSBvZiB0aGUgdGV4dHVyZSwgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuIE11c3QgYWxyZWFkeSBiZSBsb2FkZWQuXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gW3RleHR1cmVEYXRhXSAtIEFkZGl0aW9uYWwgdGV4dHVyZSBkYXRhLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFNoYWRlciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0Q2hhbm5lbDA6IGZ1bmN0aW9uICh0ZXh0dXJlS2V5LCB0ZXh0dXJlRGF0YSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRTYW1wbGVyMkQoJ2lDaGFubmVsMCcsIHRleHR1cmVLZXksIDAsIHRleHR1cmVEYXRhKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHNob3J0LWN1dCBtZXRob2QgdGhhdCB3aWxsIGRpcmVjdGx5IHNldCB0aGUgdGV4dHVyZSBiZWluZyB1c2VkIGJ5IHRoZSBgaUNoYW5uZWwxYCBzYW1wbGVyMkQgdW5pZm9ybS5cclxuICAgICAqIFxyXG4gICAgICogVGhlIHRleHR1cmVLZXkgZ2l2ZW4gaXMgdGhlIGtleSBmcm9tIHRoZSBUZXh0dXJlIE1hbmFnZXIgY2FjaGUuIFlvdSBjYW5ub3QgdXNlIGEgc2luZ2xlIGZyYW1lXHJcbiAgICAgKiBmcm9tIGEgdGV4dHVyZSwgb25seSB0aGUgZnVsbCBpbWFnZS4gQWxzbywgbG90cyBvZiBzaGFkZXJzIGV4cGVjdCB0ZXh0dXJlcyB0byBiZSBwb3dlci1vZi10d28gc2l6ZWQuXHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNzZXRDaGFubmVsMVxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dHVyZUtleSAtIFRoZSBrZXkgb2YgdGhlIHRleHR1cmUsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLiBNdXN0IGFscmVhZHkgYmUgbG9hZGVkLlxyXG4gICAgICogQHBhcmFtIHthbnl9IFt0ZXh0dXJlRGF0YV0gLSBBZGRpdGlvbmFsIHRleHR1cmUgZGF0YS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBTaGFkZXIgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldENoYW5uZWwxOiBmdW5jdGlvbiAodGV4dHVyZUtleSwgdGV4dHVyZURhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0U2FtcGxlcjJEKCdpQ2hhbm5lbDEnLCB0ZXh0dXJlS2V5LCAxLCB0ZXh0dXJlRGF0YSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBzaG9ydC1jdXQgbWV0aG9kIHRoYXQgd2lsbCBkaXJlY3RseSBzZXQgdGhlIHRleHR1cmUgYmVpbmcgdXNlZCBieSB0aGUgYGlDaGFubmVsMmAgc2FtcGxlcjJEIHVuaWZvcm0uXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSB0ZXh0dXJlS2V5IGdpdmVuIGlzIHRoZSBrZXkgZnJvbSB0aGUgVGV4dHVyZSBNYW5hZ2VyIGNhY2hlLiBZb3UgY2Fubm90IHVzZSBhIHNpbmdsZSBmcmFtZVxyXG4gICAgICogZnJvbSBhIHRleHR1cmUsIG9ubHkgdGhlIGZ1bGwgaW1hZ2UuIEFsc28sIGxvdHMgb2Ygc2hhZGVycyBleHBlY3QgdGV4dHVyZXMgdG8gYmUgcG93ZXItb2YtdHdvIHNpemVkLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjc2V0Q2hhbm5lbDJcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHR1cmVLZXkgLSBUaGUga2V5IG9mIHRoZSB0ZXh0dXJlLCBhcyBzdG9yZWQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci4gTXVzdCBhbHJlYWR5IGJlIGxvYWRlZC5cclxuICAgICAqIEBwYXJhbSB7YW55fSBbdGV4dHVyZURhdGFdIC0gQWRkaXRpb25hbCB0ZXh0dXJlIGRhdGEuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgU2hhZGVyIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRDaGFubmVsMjogZnVuY3Rpb24gKHRleHR1cmVLZXksIHRleHR1cmVEYXRhKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldFNhbXBsZXIyRCgnaUNoYW5uZWwyJywgdGV4dHVyZUtleSwgMiwgdGV4dHVyZURhdGEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgc2hvcnQtY3V0IG1ldGhvZCB0aGF0IHdpbGwgZGlyZWN0bHkgc2V0IHRoZSB0ZXh0dXJlIGJlaW5nIHVzZWQgYnkgdGhlIGBpQ2hhbm5lbDNgIHNhbXBsZXIyRCB1bmlmb3JtLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgdGV4dHVyZUtleSBnaXZlbiBpcyB0aGUga2V5IGZyb20gdGhlIFRleHR1cmUgTWFuYWdlciBjYWNoZS4gWW91IGNhbm5vdCB1c2UgYSBzaW5nbGUgZnJhbWVcclxuICAgICAqIGZyb20gYSB0ZXh0dXJlLCBvbmx5IHRoZSBmdWxsIGltYWdlLiBBbHNvLCBsb3RzIG9mIHNoYWRlcnMgZXhwZWN0IHRleHR1cmVzIHRvIGJlIHBvd2VyLW9mLXR3byBzaXplZC5cclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU2hhZGVyI3NldENoYW5uZWwzXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0dXJlS2V5IC0gVGhlIGtleSBvZiB0aGUgdGV4dHVyZSwgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuIE11c3QgYWxyZWFkeSBiZSBsb2FkZWQuXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gW3RleHR1cmVEYXRhXSAtIEFkZGl0aW9uYWwgdGV4dHVyZSBkYXRhLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFNoYWRlciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0Q2hhbm5lbDM6IGZ1bmN0aW9uICh0ZXh0dXJlS2V5LCB0ZXh0dXJlRGF0YSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRTYW1wbGVyMkQoJ2lDaGFubmVsMycsIHRleHR1cmVLZXksIDMsIHRleHR1cmVEYXRhKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdGhhdCB0YWtlcyBhIHNhbXBsZXIyRCB1bmlmb3JtIGFuZCBwcmVwYXJlcyBpdCBmb3IgdXNlIGJ5IHNldHRpbmcgdGhlXHJcbiAgICAgKiBnbCB0ZXh0dXJlIHBhcmFtZXRlcnMuXHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNpbml0U2FtcGxlcjJEXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gdW5pZm9ybSAtIFRoZSBzYW1wbGVyMkQgdW5pZm9ybSB0byBwcm9jZXNzLlxyXG4gICAgICovXHJcbiAgICBpbml0U2FtcGxlcjJEOiBmdW5jdGlvbiAodW5pZm9ybSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXVuaWZvcm0udmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZ2wgPSB0aGlzLmdsO1xyXG5cclxuICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgdGhpcy5fdGV4dHVyZUNvdW50KTtcclxuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB1bmlmb3JtLnZhbHVlKTtcclxuICAgIFxyXG4gICAgICAgIC8vICBFeHRlbmRlZCB0ZXh0dXJlIGRhdGFcclxuXHJcbiAgICAgICAgdmFyIGRhdGEgPSB1bmlmb3JtLnRleHR1cmVEYXRhO1xyXG5cclxuICAgICAgICBpZiAoZGF0YSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XZWJHTFJlbmRlcmluZ0NvbnRleHQvdGV4SW1hZ2UyRFxyXG4gICAgXHJcbiAgICAgICAgICAgIC8vICBtYWcgLyBtaW5GaWx0ZXIgY2FuIGJlOiBnbC5MSU5FQVIsIGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIG9yIGdsLk5FQVJFU1RcclxuICAgICAgICAgICAgLy8gIHdyYXBTL1QgY2FuIGJlOiBnbC5DTEFNUF9UT19FREdFIG9yIGdsLlJFUEVBVFxyXG4gICAgICAgICAgICAvLyAgZm9ybWF0IGNhbiBiZTogZ2wuTFVNSU5BTkNFIG9yIGdsLlJHQkFcclxuICAgIFxyXG4gICAgICAgICAgICB2YXIgbWFnRmlsdGVyID0gZ2xbR2V0RmFzdFZhbHVlKGRhdGEsICdtYWdGaWx0ZXInLCAnbGluZWFyJykudG9VcHBlckNhc2UoKV07XHJcbiAgICAgICAgICAgIHZhciBtaW5GaWx0ZXIgPSBnbFtHZXRGYXN0VmFsdWUoZGF0YSwgJ21pbkZpbHRlcicsICdsaW5lYXInKS50b1VwcGVyQ2FzZSgpXTtcclxuICAgICAgICAgICAgdmFyIHdyYXBTID0gZ2xbR2V0RmFzdFZhbHVlKGRhdGEsICd3cmFwUycsICdyZXBlYXQnKS50b1VwcGVyQ2FzZSgpXTtcclxuICAgICAgICAgICAgdmFyIHdyYXBUID0gZ2xbR2V0RmFzdFZhbHVlKGRhdGEsICd3cmFwVCcsICdyZXBlYXQnKS50b1VwcGVyQ2FzZSgpXTtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdCA9IGdsW0dldEZhc3RWYWx1ZShkYXRhLCAnZm9ybWF0JywgJ3JnYmEnKS50b1VwcGVyQ2FzZSgpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkYXRhLnJlcGVhdClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgd3JhcFMgPSBnbC5SRVBFQVQ7XHJcbiAgICAgICAgICAgICAgICB3cmFwVCA9IGdsLlJFUEVBVDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX0ZMSVBfWV9XRUJHTCwgISFkYXRhLmZsaXBZKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkYXRhLndpZHRoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBHZXRGYXN0VmFsdWUoZGF0YSwgJ3dpZHRoJywgNTEyKTtcclxuICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSBHZXRGYXN0VmFsdWUoZGF0YSwgJ2hlaWdodCcsIDIpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGJvcmRlciA9IEdldEZhc3RWYWx1ZShkYXRhLCAnYm9yZGVyJywgMCk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIC8vICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXc/IHBpeGVscylcclxuICAgICAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgZ2wuVU5TSUdORURfQllURSwgbnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgdGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSW1hZ2VEYXRhPyBwaXhlbHMpXHJcbiAgICAgICAgICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGZvcm1hdCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgdW5pZm9ybS5zb3VyY2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIG1hZ0ZpbHRlcik7XHJcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBtaW5GaWx0ZXIpO1xyXG4gICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCB3cmFwUyk7XHJcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIHdyYXBUKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xyXG4gICAgXHJcbiAgICAgICAgZ2wudW5pZm9ybTFpKHVuaWZvcm0udW5pZm9ybUxvY2F0aW9uLCB0aGlzLl90ZXh0dXJlQ291bnQpO1xyXG4gICAgXHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZUNvdW50Kys7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3luY2hyb25pemVzIGFsbCBvZiB0aGUgdW5pZm9ybXMgdGhpcyBzaGFkZXIgdXNlcy5cclxuICAgICAqIEVhY2ggdW5pZm9ybXMgZ2wgZnVuY3Rpb24gaXMgY2FsbGVkIGluIHR1cm4uXHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNzeW5jVW5pZm9ybXNcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKi9cclxuICAgIHN5bmNVbmlmb3JtczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgZ2wgPSB0aGlzLmdsO1xyXG5cclxuICAgICAgICB2YXIgdW5pZm9ybXMgPSB0aGlzLnVuaWZvcm1zO1xyXG4gICAgICAgIHZhciB1bmlmb3JtO1xyXG4gICAgICAgIHZhciBsZW5ndGg7XHJcbiAgICAgICAgdmFyIGdsRnVuYztcclxuICAgICAgICB2YXIgbG9jYXRpb247XHJcbiAgICAgICAgdmFyIHZhbHVlO1xyXG4gICAgICAgIHZhciB0ZXh0dXJlQ291bnQgPSAwO1xyXG4gICAgXHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHVuaWZvcm1zKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdW5pZm9ybSA9IHVuaWZvcm1zW2tleV07XHJcblxyXG4gICAgICAgICAgICBnbEZ1bmMgPSB1bmlmb3JtLmdsRnVuYztcclxuICAgICAgICAgICAgbGVuZ3RoID0gdW5pZm9ybS5nbFZhbHVlTGVuZ3RoO1xyXG4gICAgICAgICAgICBsb2NhdGlvbiA9IHVuaWZvcm0udW5pZm9ybUxvY2F0aW9uO1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHVuaWZvcm0udmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobGVuZ3RoID09PSAxKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAodW5pZm9ybS5nbE1hdHJpeClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBnbEZ1bmMuY2FsbChnbCwgbG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2xGdW5jLmNhbGwoZ2wsIGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobGVuZ3RoID09PSAyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBnbEZ1bmMuY2FsbChnbCwgbG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxlbmd0aCA9PT0gMylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZ2xGdW5jLmNhbGwoZ2wsIGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChsZW5ndGggPT09IDQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGdsRnVuYy5jYWxsKGdsLCBsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSwgdmFsdWUueiwgdmFsdWUudyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodW5pZm9ybS50eXBlID09PSAnc2FtcGxlcjJEJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbFsnVEVYVFVSRScgKyB0ZXh0dXJlQ291bnRdKTtcclxuXHJcbiAgICAgICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB2YWx1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB0ZXh0dXJlQ291bnQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRleHR1cmVDb3VudCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyByZW5kZXIuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgbWV0aG9kIHBlcmZvcm1zIG1hdHJpeCBJVFJTIGFuZCB0aGVuIHN0b3JlcyB0aGUgcmVzdWx0aW5nIHZhbHVlIGluIHRoZSBgdVZpZXdNYXRyaXhgIHVuaWZvcm0uXHJcbiAgICAgKiBJdCB0aGVuIHNldHMgdXAgdGhlIHZlcnRleCBidWZmZXIgYW5kIHNoYWRlciwgdXBkYXRlcyBhbmQgc3luY3MgdGhlIHVuaWZvcm1zIHJlYWR5XHJcbiAgICAgKiBmb3IgZmx1c2ggdG8gYmUgY2FsbGVkLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjbG9hZFxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gW21hdHJpeDJEXSAtIFRoZSB0cmFuc2Zvcm0gbWF0cml4IHRvIHVzZSBkdXJpbmcgcmVuZGVyaW5nLlxyXG4gICAgICovXHJcbiAgICBsb2FkOiBmdW5jdGlvbiAobWF0cml4MkQpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIElUUlNcclxuXHJcbiAgICAgICAgdmFyIGdsID0gdGhpcy5nbDtcclxuICAgICAgICB2YXIgd2lkdGggPSB0aGlzLndpZHRoO1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xyXG4gICAgICAgIHZhciBwcm9ncmFtID0gdGhpcy5wcm9ncmFtO1xyXG4gICAgICAgIHZhciB2bSA9IHRoaXMudmlld01hdHJpeDtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnJlbmRlclRvVGV4dHVyZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB4ID0gLXRoaXMuX2Rpc3BsYXlPcmlnaW5YO1xyXG4gICAgICAgICAgICB2YXIgeSA9IC10aGlzLl9kaXNwbGF5T3JpZ2luWTtcclxuICAgIFxyXG4gICAgICAgICAgICB2bVswXSA9IG1hdHJpeDJEWzBdO1xyXG4gICAgICAgICAgICB2bVsxXSA9IG1hdHJpeDJEWzFdO1xyXG4gICAgICAgICAgICB2bVs0XSA9IG1hdHJpeDJEWzJdO1xyXG4gICAgICAgICAgICB2bVs1XSA9IG1hdHJpeDJEWzNdO1xyXG4gICAgICAgICAgICB2bVs4XSA9IG1hdHJpeDJEWzRdO1xyXG4gICAgICAgICAgICB2bVs5XSA9IG1hdHJpeDJEWzVdO1xyXG4gICAgICAgICAgICB2bVsxMl0gPSB2bVswXSAqIHggKyB2bVs0XSAqIHk7XHJcbiAgICAgICAgICAgIHZtWzEzXSA9IHZtWzFdICogeCArIHZtWzVdICogeTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBVcGRhdGUgdmVydGV4IHNoYWRlciB1bmlmb3Jtc1xyXG5cclxuICAgICAgICBnbC51c2VQcm9ncmFtKHByb2dyYW0pO1xyXG5cclxuICAgICAgICBnbC51bmlmb3JtTWF0cml4NGZ2KGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAndVZpZXdNYXRyaXgnKSwgZmFsc2UsIHZtKTtcclxuICAgICAgICBnbC51bmlmb3JtMmYoZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICd1UmVzb2x1dGlvbicpLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XHJcblxyXG4gICAgICAgIC8vICBVcGRhdGUgZnJhZ21lbnQgc2hhZGVyIHVuaWZvcm1zXHJcblxyXG4gICAgICAgIHZhciB1bmlmb3JtcyA9IHRoaXMudW5pZm9ybXM7XHJcbiAgICAgICAgdmFyIHJlcyA9IHVuaWZvcm1zLnJlc29sdXRpb247XHJcblxyXG4gICAgICAgIHJlcy52YWx1ZS54ID0gd2lkdGg7XHJcbiAgICAgICAgcmVzLnZhbHVlLnkgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHVuaWZvcm1zLnRpbWUudmFsdWUgPSByZW5kZXJlci5nYW1lLmxvb3AuZ2V0RHVyYXRpb24oKTtcclxuXHJcbiAgICAgICAgdmFyIHBvaW50ZXIgPSB0aGlzLnBvaW50ZXI7XHJcblxyXG4gICAgICAgIGlmIChwb2ludGVyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIG1vdXNlID0gdW5pZm9ybXMubW91c2U7XHJcblxyXG4gICAgICAgICAgICB2YXIgcHggPSBwb2ludGVyLnggLyB3aWR0aDtcclxuICAgICAgICAgICAgdmFyIHB5ID0gMSAtIHBvaW50ZXIueSAvIGhlaWdodDtcclxuICAgIFxyXG4gICAgICAgICAgICBtb3VzZS52YWx1ZS54ID0gcHgudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgbW91c2UudmFsdWUueSA9IHB5LnRvRml4ZWQoMik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN5bmNVbmlmb3JtcygpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyByZW5kZXIuXHJcbiAgICAgKiBcclxuICAgICAqIFNldHMgdGhlIGFjdGl2ZSBzaGFkZXIsIGxvYWRzIHRoZSB2ZXJ0ZXggYnVmZmVyIGFuZCB0aGVuIGRyYXdzLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjZmx1c2hcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqL1xyXG4gICAgZmx1c2g6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIEJpbmRcclxuXHJcbiAgICAgICAgdmFyIHdpZHRoID0gdGhpcy53aWR0aDtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICAgICAgdmFyIHByb2dyYW0gPSB0aGlzLnByb2dyYW07XHJcblxyXG4gICAgICAgIHZhciBnbCA9IHRoaXMuZ2w7XHJcbiAgICAgICAgdmFyIHZlcnRleEJ1ZmZlciA9IHRoaXMudmVydGV4QnVmZmVyO1xyXG4gICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XHJcbiAgICAgICAgdmFyIHZlcnRleFNpemUgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAyO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5yZW5kZXJUb1RleHR1cmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZW5kZXJlci5zZXRGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcclxuXHJcbiAgICAgICAgICAgIGdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7XHJcblxyXG4gICAgICAgICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB2ZXJ0ZXhCdWZmZXIpO1xyXG5cclxuICAgICAgICB2YXIgbG9jYXRpb24gPSBnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAnaW5Qb3NpdGlvbicpO1xyXG5cclxuICAgICAgICBpZiAobG9jYXRpb24gIT09IC0xKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkobG9jYXRpb24pO1xyXG5cclxuICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihsb2NhdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCB2ZXJ0ZXhTaXplLCAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBEcmF3XHJcblxyXG4gICAgICAgIHZhciB2ZiA9IHRoaXMudmVydGV4Vmlld0YzMjtcclxuXHJcbiAgICAgICAgdmZbM10gPSBoZWlnaHQ7XHJcbiAgICAgICAgdmZbNF0gPSB3aWR0aDtcclxuICAgICAgICB2Zls1XSA9IGhlaWdodDtcclxuICAgICAgICB2Zls4XSA9IHdpZHRoO1xyXG4gICAgICAgIHZmWzldID0gaGVpZ2h0O1xyXG4gICAgICAgIHZmWzEwXSA9IHdpZHRoO1xyXG5cclxuICAgICAgICAvLyAgRmx1c2hcclxuXHJcbiAgICAgICAgdmFyIHZlcnRleENvdW50ID0gNjtcclxuXHJcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuYnl0ZXMuc3ViYXJyYXkoMCwgdmVydGV4Q291bnQgKiB2ZXJ0ZXhTaXplKSk7XHJcblxyXG4gICAgICAgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCB2ZXJ0ZXhDb3VudCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlbmRlclRvVGV4dHVyZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldEZyYW1lYnVmZmVyKG51bGwsIGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBOT09QIG1ldGhvZCBzbyB5b3UgY2FuIHBhc3MgYSBTaGFkZXIgdG8gYSBDb250YWluZXIuXHJcbiAgICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgZG8gbm90aGluZy4gSXQgaXMgaW50ZW50aW9uYWxseSBlbXB0eS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXIjc2V0QWxwaGFcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKi9cclxuICAgIHNldEFscGhhOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgfSxcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBBIE5PT1AgbWV0aG9kIHNvIHlvdSBjYW4gcGFzcyBhIFNoYWRlciB0byBhIENvbnRhaW5lci5cclxuICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBkbyBub3RoaW5nLiBJdCBpcyBpbnRlbnRpb25hbGx5IGVtcHR5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNzZXRCbGVuZE1vZGVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKi9cclxuICAgIHNldEJsZW5kTW9kZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBkZXN0cm95IGhhbmRsZXIsIGNhbGxlZCBhcyBwYXJ0IG9mIHRoZSBkZXN0cm95IHByb2Nlc3MuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU2hhZGVyI3ByZURlc3Ryb3lcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqL1xyXG4gICAgcHJlRGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgZ2wgPSB0aGlzLmdsO1xyXG5cclxuICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XHJcbiAgICAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMudmVydGV4QnVmZmVyKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVuZGVyVG9UZXh0dXJlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZS5kZXN0cm95KCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZyYW1lYnVmZmVyID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5nbFRleHR1cmUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shader/Shader.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shader/ShaderCanvasRenderer.js":
/*!****************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shader/ShaderCanvasRenderer.js ***!
\****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * This is a stub function for Shader.Render. There is no Canvas renderer for Shader objects.\r\n *\r\n * @method Phaser.GameObjects.Shader#renderCanvas\r\n * @since 3.17.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Shader} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n */\r\nvar ShaderCanvasRenderer = function ()\r\n{\r\n};\r\n\r\nmodule.exports = ShaderCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFkZXIvU2hhZGVyQ2FudmFzUmVuZGVyZXIuanM/NWRhZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNDQUFzQztBQUNqRCxXQUFXLDBCQUEwQjtBQUNyQyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFkZXIvU2hhZGVyQ2FudmFzUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGlzIGlzIGEgc3R1YiBmdW5jdGlvbiBmb3IgU2hhZGVyLlJlbmRlci4gVGhlcmUgaXMgbm8gQ2FudmFzIHJlbmRlcmVyIGZvciBTaGFkZXIgb2JqZWN0cy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU2hhZGVyI3JlbmRlckNhbnZhc1xyXG4gKiBAc2luY2UgMy4xNy4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgQ2FudmFzIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXJ9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICovXHJcbnZhciBTaGFkZXJDYW52YXNSZW5kZXJlciA9IGZ1bmN0aW9uICgpXHJcbntcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyQ2FudmFzUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shader/ShaderCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shader/ShaderCreator.js":
/*!*********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shader/ShaderCreator.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BuildGameObject = __webpack_require__(/*! ../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar Shader = __webpack_require__(/*! ./Shader */ \"./node_modules/phaser/src/gameobjects/shader/Shader.js\");\r\n\r\n/**\r\n * Creates a new Shader Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Shader Game Object and WebGL support have been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#shader\r\n * @since 3.17.0\r\n *\r\n * @param {object} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.Shader} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('shader', function (config, addToScene)\r\n{\r\n if (config === undefined) { config = {}; }\r\n\r\n var key = GetAdvancedValue(config, 'key', null);\r\n var x = GetAdvancedValue(config, 'x', 0);\r\n var y = GetAdvancedValue(config, 'y', 0);\r\n var width = GetAdvancedValue(config, 'width', 128);\r\n var height = GetAdvancedValue(config, 'height', 128);\r\n\r\n var shader = new Shader(this.scene, key, x, y, width, height);\r\n\r\n if (addToScene !== undefined)\r\n {\r\n config.add = addToScene;\r\n }\r\n\r\n BuildGameObject(this.scene, shader, config);\r\n\r\n return shader;\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectCreator context.\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFkZXIvU2hhZGVyQ3JlYXRvci5qcz8xNTYzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQyxvRkFBb0I7QUFDbEQsd0JBQXdCLG1CQUFPLENBQUMsd0ZBQXNCO0FBQ3RELHVCQUF1QixtQkFBTyxDQUFDLHVHQUFxQztBQUNwRSxhQUFhLG1CQUFPLENBQUMsd0VBQVU7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSwwQkFBMEI7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGFBQWE7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhZGVyL1NoYWRlckNyZWF0b3IuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCdWlsZEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi9CdWlsZEdhbWVPYmplY3QnKTtcclxudmFyIEdhbWVPYmplY3RDcmVhdG9yID0gcmVxdWlyZSgnLi4vR2FtZU9iamVjdENyZWF0b3InKTtcclxudmFyIEdldEFkdmFuY2VkVmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0QWR2YW5jZWRWYWx1ZScpO1xyXG52YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFNoYWRlciBHYW1lIE9iamVjdCBhbmQgcmV0dXJucyBpdC5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgU2hhZGVyIEdhbWUgT2JqZWN0IGFuZCBXZWJHTCBzdXBwb3J0IGhhdmUgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdENyZWF0b3Ijc2hhZGVyXHJcbiAqIEBzaW5jZSAzLjE3LjBcclxuICpcclxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIGNyZWF0ZSBpdHNlbGYuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FkZFRvU2NlbmVdIC0gQWRkIHRoaXMgR2FtZSBPYmplY3QgdG8gdGhlIFNjZW5lIGFmdGVyIGNyZWF0aW5nIGl0PyBJZiBzZXQgdGhpcyBhcmd1bWVudCBvdmVycmlkZXMgdGhlIGBhZGRgIHByb3BlcnR5IGluIHRoZSBjb25maWcgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuU2hhZGVyfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RDcmVhdG9yLnJlZ2lzdGVyKCdzaGFkZXInLCBmdW5jdGlvbiAoY29uZmlnLCBhZGRUb1NjZW5lKVxyXG57XHJcbiAgICBpZiAoY29uZmlnID09PSB1bmRlZmluZWQpIHsgY29uZmlnID0ge307IH1cclxuXHJcbiAgICB2YXIga2V5ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdrZXknLCBudWxsKTtcclxuICAgIHZhciB4ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICd4JywgMCk7XHJcbiAgICB2YXIgeSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAneScsIDApO1xyXG4gICAgdmFyIHdpZHRoID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICd3aWR0aCcsIDEyOCk7XHJcbiAgICB2YXIgaGVpZ2h0ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdoZWlnaHQnLCAxMjgpO1xyXG5cclxuICAgIHZhciBzaGFkZXIgPSBuZXcgU2hhZGVyKHRoaXMuc2NlbmUsIGtleSwgeCwgeSwgd2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgaWYgKGFkZFRvU2NlbmUgIT09IHVuZGVmaW5lZClcclxuICAgIHtcclxuICAgICAgICBjb25maWcuYWRkID0gYWRkVG9TY2VuZTtcclxuICAgIH1cclxuXHJcbiAgICBCdWlsZEdhbWVPYmplY3QodGhpcy5zY2VuZSwgc2hhZGVyLCBjb25maWcpO1xyXG5cclxuICAgIHJldHVybiBzaGFkZXI7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RDcmVhdG9yIGNvbnRleHQuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shader/ShaderCreator.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shader/ShaderFactory.js":
/*!*********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shader/ShaderFactory.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Shader = __webpack_require__(/*! ./Shader */ \"./node_modules/phaser/src/gameobjects/shader/Shader.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Shader Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Shader Game Object and WebGL support have been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#shader\r\n * @webglOnly\r\n * @since 3.17.0\r\n *\r\n * @param {(string|Phaser.Display.BaseShader)} key - The key of the shader to use from the shader cache, or a BaseShader instance.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [width=128] - The width of the Game Object.\r\n * @param {number} [height=128] - The height of the Game Object.\r\n * @param {string[]} [textures] - Optional array of texture keys to bind to the iChannel0...3 uniforms. The textures must already exist in the Texture Manager.\r\n * @param {object} [textureData] - Optional additional texture data.\r\n *\r\n * @return {Phaser.GameObjects.Shader} The Game Object that was created.\r\n */\r\nif (true)\r\n{\r\n GameObjectFactory.register('shader', function (key, x, y, width, height, textures, textureData)\r\n {\r\n return this.displayList.add(new Shader(this.scene, key, x, y, width, height, textures, textureData));\r\n });\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFkZXIvU2hhZGVyRmFjdG9yeS5qcz9jY2YwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsd0VBQVU7QUFDL0Isd0JBQXdCLG1CQUFPLENBQUMsd0ZBQXNCOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1DQUFtQztBQUM5QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksMEJBQTBCO0FBQ3RDO0FBQ0EsSUFBSSxJQUFxQjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYWRlci9TaGFkZXJGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcclxudmFyIEdhbWVPYmplY3RGYWN0b3J5ID0gcmVxdWlyZSgnLi4vR2FtZU9iamVjdEZhY3RvcnknKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFNoYWRlciBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFNoYWRlciBHYW1lIE9iamVjdCBhbmQgV2ViR0wgc3VwcG9ydCBoYXZlIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I3NoYWRlclxyXG4gKiBAd2ViZ2xPbmx5XHJcbiAqIEBzaW5jZSAzLjE3LjBcclxuICpcclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5EaXNwbGF5LkJhc2VTaGFkZXIpfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBzaGFkZXIgdG8gdXNlIGZyb20gdGhlIHNoYWRlciBjYWNoZSwgb3IgYSBCYXNlU2hhZGVyIGluc3RhbmNlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3dpZHRoPTEyOF0gLSBUaGUgd2lkdGggb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodD0xMjhdIC0gVGhlIGhlaWdodCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7c3RyaW5nW119IFt0ZXh0dXJlc10gLSBPcHRpb25hbCBhcnJheSBvZiB0ZXh0dXJlIGtleXMgdG8gYmluZCB0byB0aGUgaUNoYW5uZWwwLi4uMyB1bmlmb3Jtcy4gVGhlIHRleHR1cmVzIG11c3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0ge29iamVjdH0gW3RleHR1cmVEYXRhXSAtIE9wdGlvbmFsIGFkZGl0aW9uYWwgdGV4dHVyZSBkYXRhLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuU2hhZGVyfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbmlmICh0eXBlb2YgV0VCR0xfUkVOREVSRVIpXHJcbntcclxuICAgIEdhbWVPYmplY3RGYWN0b3J5LnJlZ2lzdGVyKCdzaGFkZXInLCBmdW5jdGlvbiAoa2V5LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0dXJlcywgdGV4dHVyZURhdGEpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheUxpc3QuYWRkKG5ldyBTaGFkZXIodGhpcy5zY2VuZSwga2V5LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0dXJlcywgdGV4dHVyZURhdGEpKTtcclxuICAgIH0pO1xyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shader/ShaderFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shader/ShaderRender.js":
/*!********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shader/ShaderRender.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./ShaderWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/shader/ShaderWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./ShaderCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/shader/ShaderCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFkZXIvU2hhZGVyUmVuZGVyLmpzPzhiZDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLGlFQUFrQjtBQUM1QyxtQkFBbUIsbUJBQU8sQ0FBQyxpRUFBa0I7O0FBRTdDLElBQUksSUFBcUI7QUFDekI7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxrR0FBdUI7QUFDakQ7O0FBRUEsSUFBSSxJQUFzQjtBQUMxQjtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLG9HQUF3QjtBQUNuRDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhZGVyL1NoYWRlclJlbmRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG52YXIgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG5cclxuaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuL1NoYWRlcldlYkdMUmVuZGVyZXInKTtcclxufVxyXG5cclxuaWYgKHR5cGVvZiBDQU5WQVNfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4vU2hhZGVyQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shader/ShaderRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shader/ShaderWebGLRenderer.js":
/*!***************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shader/ShaderWebGLRenderer.js ***!
\***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Shader#renderWebGL\r\n * @since 3.17.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Shader} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar ShaderWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n if (!src.shader)\r\n {\r\n return;\r\n }\r\n\r\n var pipeline = renderer.currentPipeline;\r\n\r\n renderer.clearPipeline();\r\n\r\n if (src.renderToTexture)\r\n {\r\n src.load();\r\n src.flush();\r\n }\r\n else\r\n {\r\n var camMatrix = src._tempMatrix1;\r\n var shapeMatrix = src._tempMatrix2;\r\n var calcMatrix = src._tempMatrix3;\r\n \r\n shapeMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n \r\n camMatrix.copyFrom(camera.matrix);\r\n \r\n if (parentMatrix)\r\n {\r\n // Multiply the camera by the parent matrix\r\n camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n \r\n // Undo the camera scroll\r\n shapeMatrix.e = src.x;\r\n shapeMatrix.f = src.y;\r\n }\r\n else\r\n {\r\n shapeMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n shapeMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n }\r\n \r\n camMatrix.multiply(shapeMatrix, calcMatrix);\r\n \r\n // Renderer size changed?\r\n if (renderer.width !== src._rendererWidth || renderer.height !== src._rendererHeight)\r\n {\r\n src.projOrtho(0, renderer.width, renderer.height, 0);\r\n }\r\n \r\n src.load(calcMatrix.matrix);\r\n src.flush();\r\n }\r\n\r\n renderer.rebindPipeline(pipeline);\r\n};\r\n\r\nmodule.exports = ShaderWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFkZXIvU2hhZGVyV2ViR0xSZW5kZXJlci5qcz8xMDVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9DQUFvQztBQUMvQyxXQUFXLDBCQUEwQjtBQUNyQyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFkZXIvU2hhZGVyV2ViR0xSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBXZWJHTCBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlNoYWRlciNyZW5kZXJXZWJHTFxyXG4gKiBAc2luY2UgMy4xNy4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIFdlYkdMIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5TaGFkZXJ9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBTaGFkZXJXZWJHTFJlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgaWYgKCFzcmMuc2hhZGVyKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgcGlwZWxpbmUgPSByZW5kZXJlci5jdXJyZW50UGlwZWxpbmU7XHJcblxyXG4gICAgcmVuZGVyZXIuY2xlYXJQaXBlbGluZSgpO1xyXG5cclxuICAgIGlmIChzcmMucmVuZGVyVG9UZXh0dXJlKVxyXG4gICAge1xyXG4gICAgICAgIHNyYy5sb2FkKCk7XHJcbiAgICAgICAgc3JjLmZsdXNoKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGNhbU1hdHJpeCA9IHNyYy5fdGVtcE1hdHJpeDE7XHJcbiAgICAgICAgdmFyIHNoYXBlTWF0cml4ID0gc3JjLl90ZW1wTWF0cml4MjtcclxuICAgICAgICB2YXIgY2FsY01hdHJpeCA9IHNyYy5fdGVtcE1hdHJpeDM7XHJcbiAgICBcclxuICAgICAgICBzaGFwZU1hdHJpeC5hcHBseUlUUlMoc3JjLngsIHNyYy55LCBzcmMucm90YXRpb24sIHNyYy5zY2FsZVgsIHNyYy5zY2FsZVkpO1xyXG4gICAgXHJcbiAgICAgICAgY2FtTWF0cml4LmNvcHlGcm9tKGNhbWVyYS5tYXRyaXgpO1xyXG4gICAgXHJcbiAgICAgICAgaWYgKHBhcmVudE1hdHJpeClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBNdWx0aXBseSB0aGUgY2FtZXJhIGJ5IHRoZSBwYXJlbnQgbWF0cml4XHJcbiAgICAgICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseVdpdGhPZmZzZXQocGFyZW50TWF0cml4LCAtY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWCwgLWNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3RvclkpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIC8vICBVbmRvIHRoZSBjYW1lcmEgc2Nyb2xsXHJcbiAgICAgICAgICAgIHNoYXBlTWF0cml4LmUgPSBzcmMueDtcclxuICAgICAgICAgICAgc2hhcGVNYXRyaXguZiA9IHNyYy55O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzaGFwZU1hdHJpeC5lIC09IGNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3Rvclg7XHJcbiAgICAgICAgICAgIHNoYXBlTWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHkoc2hhcGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG4gICAgXHJcbiAgICAgICAgLy8gIFJlbmRlcmVyIHNpemUgY2hhbmdlZD9cclxuICAgICAgICBpZiAocmVuZGVyZXIud2lkdGggIT09IHNyYy5fcmVuZGVyZXJXaWR0aCB8fCByZW5kZXJlci5oZWlnaHQgIT09IHNyYy5fcmVuZGVyZXJIZWlnaHQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzcmMucHJvak9ydGhvKDAsIHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQsIDApO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIHNyYy5sb2FkKGNhbGNNYXRyaXgubWF0cml4KTtcclxuICAgICAgICBzcmMuZmx1c2goKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXJlci5yZWJpbmRQaXBlbGluZShwaXBlbGluZSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlcldlYkdMUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shader/ShaderWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/FillPathWebGL.js":
/*!********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/FillPathWebGL.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders a filled path for the given Shape.\r\n *\r\n * @method Phaser.GameObjects.Shape#FillPathWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLPipeline} pipeline - The WebGL Pipeline used to render this Shape.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} calcMatrix - The transform matrix used to get the position values.\r\n * @param {Phaser.GameObjects.Shape} src - The Game Object shape being rendered in this call.\r\n * @param {number} alpha - The base alpha value.\r\n * @param {number} dx - The source displayOriginX.\r\n * @param {number} dy - The source displayOriginY.\r\n */\r\nvar FillPathWebGL = function (pipeline, calcMatrix, src, alpha, dx, dy)\r\n{\r\n var fillTintColor = Utils.getTintAppendFloatAlphaAndSwap(src.fillColor, src.fillAlpha * alpha);\r\n\r\n var path = src.pathData;\r\n var pathIndexes = src.pathIndexes;\r\n\r\n for (var i = 0; i < pathIndexes.length; i += 3)\r\n {\r\n var p0 = pathIndexes[i] * 2;\r\n var p1 = pathIndexes[i + 1] * 2;\r\n var p2 = pathIndexes[i + 2] * 2;\r\n\r\n var x0 = path[p0 + 0] - dx;\r\n var y0 = path[p0 + 1] - dy;\r\n var x1 = path[p1 + 0] - dx;\r\n var y1 = path[p1 + 1] - dy;\r\n var x2 = path[p2 + 0] - dx;\r\n var y2 = path[p2 + 1] - dy;\r\n\r\n var tx0 = calcMatrix.getX(x0, y0);\r\n var ty0 = calcMatrix.getY(x0, y0);\r\n\r\n var tx1 = calcMatrix.getX(x1, y1);\r\n var ty1 = calcMatrix.getY(x1, y1);\r\n\r\n var tx2 = calcMatrix.getX(x2, y2);\r\n var ty2 = calcMatrix.getY(x2, y2);\r\n \r\n pipeline.setTexture2D();\r\n\r\n pipeline.batchTri(tx0, ty0, tx1, ty1, tx2, ty2, 0, 0, 1, 1, fillTintColor, fillTintColor, fillTintColor, pipeline.tintEffect);\r\n }\r\n};\r\n\r\nmodule.exports = FillPathWebGL;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9GaWxsUGF0aFdlYkdMLmpzPzkwYjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRkFBNEI7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQ0FBb0M7QUFDL0MsV0FBVyw4Q0FBOEM7QUFDekQsV0FBVyx5QkFBeUI7QUFDcEMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsd0JBQXdCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9GaWxsUGF0aFdlYkdMLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgVXRpbHMgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlci93ZWJnbC9VdGlscycpO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgYSBmaWxsZWQgcGF0aCBmb3IgdGhlIGdpdmVuIFNoYXBlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFwZSNGaWxsUGF0aFdlYkdMXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZX0gcGlwZWxpbmUgLSBUaGUgV2ViR0wgUGlwZWxpbmUgdXNlZCB0byByZW5kZXIgdGhpcyBTaGFwZS5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IGNhbGNNYXRyaXggLSBUaGUgdHJhbnNmb3JtIG1hdHJpeCB1c2VkIHRvIGdldCB0aGUgcG9zaXRpb24gdmFsdWVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5TaGFwZX0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IHNoYXBlIGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGFscGhhIC0gVGhlIGJhc2UgYWxwaGEgdmFsdWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkeCAtIFRoZSBzb3VyY2UgZGlzcGxheU9yaWdpblguXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkeSAtIFRoZSBzb3VyY2UgZGlzcGxheU9yaWdpblkuXHJcbiAqL1xyXG52YXIgRmlsbFBhdGhXZWJHTCA9IGZ1bmN0aW9uIChwaXBlbGluZSwgY2FsY01hdHJpeCwgc3JjLCBhbHBoYSwgZHgsIGR5KVxyXG57XHJcbiAgICB2YXIgZmlsbFRpbnRDb2xvciA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhQW5kU3dhcChzcmMuZmlsbENvbG9yLCBzcmMuZmlsbEFscGhhICogYWxwaGEpO1xyXG5cclxuICAgIHZhciBwYXRoID0gc3JjLnBhdGhEYXRhO1xyXG4gICAgdmFyIHBhdGhJbmRleGVzID0gc3JjLnBhdGhJbmRleGVzO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aEluZGV4ZXMubGVuZ3RoOyBpICs9IDMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHAwID0gcGF0aEluZGV4ZXNbaV0gKiAyO1xyXG4gICAgICAgIHZhciBwMSA9IHBhdGhJbmRleGVzW2kgKyAxXSAqIDI7XHJcbiAgICAgICAgdmFyIHAyID0gcGF0aEluZGV4ZXNbaSArIDJdICogMjtcclxuXHJcbiAgICAgICAgdmFyIHgwID0gcGF0aFtwMCArIDBdIC0gZHg7XHJcbiAgICAgICAgdmFyIHkwID0gcGF0aFtwMCArIDFdIC0gZHk7XHJcbiAgICAgICAgdmFyIHgxID0gcGF0aFtwMSArIDBdIC0gZHg7XHJcbiAgICAgICAgdmFyIHkxID0gcGF0aFtwMSArIDFdIC0gZHk7XHJcbiAgICAgICAgdmFyIHgyID0gcGF0aFtwMiArIDBdIC0gZHg7XHJcbiAgICAgICAgdmFyIHkyID0gcGF0aFtwMiArIDFdIC0gZHk7XHJcblxyXG4gICAgICAgIHZhciB0eDAgPSBjYWxjTWF0cml4LmdldFgoeDAsIHkwKTtcclxuICAgICAgICB2YXIgdHkwID0gY2FsY01hdHJpeC5nZXRZKHgwLCB5MCk7XHJcblxyXG4gICAgICAgIHZhciB0eDEgPSBjYWxjTWF0cml4LmdldFgoeDEsIHkxKTtcclxuICAgICAgICB2YXIgdHkxID0gY2FsY01hdHJpeC5nZXRZKHgxLCB5MSk7XHJcblxyXG4gICAgICAgIHZhciB0eDIgPSBjYWxjTWF0cml4LmdldFgoeDIsIHkyKTtcclxuICAgICAgICB2YXIgdHkyID0gY2FsY01hdHJpeC5nZXRZKHgyLCB5Mik7XHJcbiAgICBcclxuICAgICAgICBwaXBlbGluZS5zZXRUZXh0dXJlMkQoKTtcclxuXHJcbiAgICAgICAgcGlwZWxpbmUuYmF0Y2hUcmkodHgwLCB0eTAsIHR4MSwgdHkxLCB0eDIsIHR5MiwgMCwgMCwgMSwgMSwgZmlsbFRpbnRDb2xvciwgZmlsbFRpbnRDb2xvciwgZmlsbFRpbnRDb2xvciwgcGlwZWxpbmUudGludEVmZmVjdCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEZpbGxQYXRoV2ViR0w7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/FillPathWebGL.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js":
/*!**********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Sets the fillStyle on the target context based on the given Shape.\r\n *\r\n * @method Phaser.GameObjects.Shape#FillStyleCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {CanvasRenderingContext2D} ctx - The context to set the fill style on.\r\n * @param {Phaser.GameObjects.Shape} src - The Game Object to set the fill style from.\r\n * @param {number} [altColor] - An alternative color to render with.\r\n * @param {number} [altAlpha] - An alternative alpha to render with.\r\n */\r\nvar FillStyleCanvas = function (ctx, src, altColor, altAlpha)\r\n{\r\n var fillColor = (altColor) ? altColor : src.fillColor;\r\n var fillAlpha = (altAlpha) ? altAlpha : src.fillAlpha;\r\n\r\n var red = ((fillColor & 0xFF0000) >>> 16);\r\n var green = ((fillColor & 0xFF00) >>> 8);\r\n var blue = (fillColor & 0xFF);\r\n\r\n ctx.fillStyle = 'rgba(' + red + ',' + green + ',' + blue + ',' + fillAlpha + ')';\r\n};\r\n\r\nmodule.exports = FillStyleCanvas;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9GaWxsU3R5bGVDYW52YXMuanM/OTBlNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlCQUF5QjtBQUNwQyxXQUFXLHlCQUF5QjtBQUNwQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9GaWxsU3R5bGVDYW52YXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBTZXRzIHRoZSBmaWxsU3R5bGUgb24gdGhlIHRhcmdldCBjb250ZXh0IGJhc2VkIG9uIHRoZSBnaXZlbiBTaGFwZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU2hhcGUjRmlsbFN0eWxlQ2FudmFzXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCAtIFRoZSBjb250ZXh0IHRvIHNldCB0aGUgZmlsbCBzdHlsZSBvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuU2hhcGV9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCB0byBzZXQgdGhlIGZpbGwgc3R5bGUgZnJvbS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFthbHRDb2xvcl0gLSBBbiBhbHRlcm5hdGl2ZSBjb2xvciB0byByZW5kZXIgd2l0aC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFthbHRBbHBoYV0gLSBBbiBhbHRlcm5hdGl2ZSBhbHBoYSB0byByZW5kZXIgd2l0aC5cclxuICovXHJcbnZhciBGaWxsU3R5bGVDYW52YXMgPSBmdW5jdGlvbiAoY3R4LCBzcmMsIGFsdENvbG9yLCBhbHRBbHBoYSlcclxue1xyXG4gICAgdmFyIGZpbGxDb2xvciA9IChhbHRDb2xvcikgPyBhbHRDb2xvciA6IHNyYy5maWxsQ29sb3I7XHJcbiAgICB2YXIgZmlsbEFscGhhID0gKGFsdEFscGhhKSA/IGFsdEFscGhhIDogc3JjLmZpbGxBbHBoYTtcclxuXHJcbiAgICB2YXIgcmVkID0gKChmaWxsQ29sb3IgJiAweEZGMDAwMCkgPj4+IDE2KTtcclxuICAgIHZhciBncmVlbiA9ICgoZmlsbENvbG9yICYgMHhGRjAwKSA+Pj4gOCk7XHJcbiAgICB2YXIgYmx1ZSA9IChmaWxsQ29sb3IgJiAweEZGKTtcclxuXHJcbiAgICBjdHguZmlsbFN0eWxlID0gJ3JnYmEoJyArIHJlZCArICcsJyArIGdyZWVuICsgJywnICsgYmx1ZSArICcsJyArIGZpbGxBbHBoYSArICcpJztcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRmlsbFN0eWxlQ2FudmFzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/LineStyleCanvas.js":
/*!**********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/LineStyleCanvas.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Sets the strokeStyle and lineWidth on the target context based on the given Shape.\r\n *\r\n * @method Phaser.GameObjects.Shape#LineStyleCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {CanvasRenderingContext2D} ctx - The context to set the stroke style on.\r\n * @param {Phaser.GameObjects.Shape} src - The Game Object to set the stroke style from.\r\n * @param {number} [altColor] - An alternative color to render with.\r\n * @param {number} [altAlpha] - An alternative alpha to render with.\r\n */\r\nvar LineStyleCanvas = function (ctx, src, altColor, altAlpha)\r\n{\r\n var strokeColor = (altColor) ? altColor : src.strokeColor;\r\n var strokeAlpha = (altAlpha) ? altAlpha : src.strokeAlpha;\r\n\r\n var red = ((strokeColor & 0xFF0000) >>> 16);\r\n var green = ((strokeColor & 0xFF00) >>> 8);\r\n var blue = (strokeColor & 0xFF);\r\n\r\n ctx.strokeStyle = 'rgba(' + red + ',' + green + ',' + blue + ',' + strokeAlpha + ')';\r\n ctx.lineWidth = src.lineWidth;\r\n};\r\n\r\nmodule.exports = LineStyleCanvas;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9MaW5lU3R5bGVDYW52YXMuanM/N2QzMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlCQUF5QjtBQUNwQyxXQUFXLHlCQUF5QjtBQUNwQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL0xpbmVTdHlsZUNhbnZhcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFNldHMgdGhlIHN0cm9rZVN0eWxlIGFuZCBsaW5lV2lkdGggb24gdGhlIHRhcmdldCBjb250ZXh0IGJhc2VkIG9uIHRoZSBnaXZlbiBTaGFwZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU2hhcGUjTGluZVN0eWxlQ2FudmFzXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCAtIFRoZSBjb250ZXh0IHRvIHNldCB0aGUgc3Ryb2tlIHN0eWxlIG9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5TaGFwZX0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IHRvIHNldCB0aGUgc3Ryb2tlIHN0eWxlIGZyb20uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYWx0Q29sb3JdIC0gQW4gYWx0ZXJuYXRpdmUgY29sb3IgdG8gcmVuZGVyIHdpdGguXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYWx0QWxwaGFdIC0gQW4gYWx0ZXJuYXRpdmUgYWxwaGEgdG8gcmVuZGVyIHdpdGguXHJcbiAqL1xyXG52YXIgTGluZVN0eWxlQ2FudmFzID0gZnVuY3Rpb24gKGN0eCwgc3JjLCBhbHRDb2xvciwgYWx0QWxwaGEpXHJcbntcclxuICAgIHZhciBzdHJva2VDb2xvciA9IChhbHRDb2xvcikgPyBhbHRDb2xvciA6IHNyYy5zdHJva2VDb2xvcjtcclxuICAgIHZhciBzdHJva2VBbHBoYSA9IChhbHRBbHBoYSkgPyBhbHRBbHBoYSA6IHNyYy5zdHJva2VBbHBoYTtcclxuXHJcbiAgICB2YXIgcmVkID0gKChzdHJva2VDb2xvciAmIDB4RkYwMDAwKSA+Pj4gMTYpO1xyXG4gICAgdmFyIGdyZWVuID0gKChzdHJva2VDb2xvciAmIDB4RkYwMCkgPj4+IDgpO1xyXG4gICAgdmFyIGJsdWUgPSAoc3Ryb2tlQ29sb3IgJiAweEZGKTtcclxuXHJcbiAgICBjdHguc3Ryb2tlU3R5bGUgPSAncmdiYSgnICsgcmVkICsgJywnICsgZ3JlZW4gKyAnLCcgKyBibHVlICsgJywnICsgc3Ryb2tlQWxwaGEgKyAnKSc7XHJcbiAgICBjdHgubGluZVdpZHRoID0gc3JjLmxpbmVXaWR0aDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTGluZVN0eWxlQ2FudmFzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/LineStyleCanvas.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/Shape.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/Shape.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar Line = __webpack_require__(/*! ../../geom/line/Line */ \"./node_modules/phaser/src/geom/line/Line.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Shape Game Object is a base class for the various different shapes, such as the Arc, Star or Polygon.\r\n * You cannot add a Shape directly to your Scene, it is meant as a base for your own custom Shape classes.\r\n *\r\n * @class Shape\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.13.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.ComputedSize\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {string} [type] - The internal type of the Shape.\r\n * @param {any} [data] - The data of the source shape geometry, if any.\r\n */\r\nvar Shape = new Class({\r\n\r\n Extends: GameObject,\r\n\r\n Mixins: [\r\n Components.Alpha,\r\n Components.BlendMode,\r\n Components.ComputedSize,\r\n Components.Depth,\r\n Components.GetBounds,\r\n Components.Mask,\r\n Components.Origin,\r\n Components.Pipeline,\r\n Components.ScrollFactor,\r\n Components.Transform,\r\n Components.Visible\r\n ],\r\n\r\n initialize:\r\n\r\n function Shape (scene, type, data)\r\n {\r\n if (type === undefined) { type = 'Shape'; }\r\n\r\n GameObject.call(this, scene, type);\r\n\r\n /**\r\n * The source Shape data. Typically a geometry object.\r\n * You should not manipulate this directly.\r\n *\r\n * @name Phaser.GameObjects.Shape#data\r\n * @type {any}\r\n * @readonly\r\n * @since 3.13.0\r\n */\r\n this.geom = data;\r\n\r\n /**\r\n * Holds the polygon path data for filled rendering.\r\n *\r\n * @name Phaser.GameObjects.Shape#pathData\r\n * @type {number[]}\r\n * @readonly\r\n * @since 3.13.0\r\n */\r\n this.pathData = [];\r\n\r\n /**\r\n * Holds the earcut polygon path index data for filled rendering.\r\n *\r\n * @name Phaser.GameObjects.Shape#pathIndexes\r\n * @type {integer[]}\r\n * @readonly\r\n * @since 3.13.0\r\n */\r\n this.pathIndexes = [];\r\n\r\n /**\r\n * The fill color used by this Shape.\r\n *\r\n * @name Phaser.GameObjects.Shape#fillColor\r\n * @type {number}\r\n * @since 3.13.0\r\n */\r\n this.fillColor = 0xffffff;\r\n\r\n /**\r\n * The fill alpha value used by this Shape.\r\n *\r\n * @name Phaser.GameObjects.Shape#fillAlpha\r\n * @type {number}\r\n * @since 3.13.0\r\n */\r\n this.fillAlpha = 1;\r\n\r\n /**\r\n * The stroke color used by this Shape.\r\n *\r\n * @name Phaser.GameObjects.Shape#strokeColor\r\n * @type {number}\r\n * @since 3.13.0\r\n */\r\n this.strokeColor = 0xffffff;\r\n\r\n /**\r\n * The stroke alpha value used by this Shape.\r\n *\r\n * @name Phaser.GameObjects.Shape#strokeAlpha\r\n * @type {number}\r\n * @since 3.13.0\r\n */\r\n this.strokeAlpha = 1;\r\n\r\n /**\r\n * The stroke line width used by this Shape.\r\n *\r\n * @name Phaser.GameObjects.Shape#lineWidth\r\n * @type {number}\r\n * @since 3.13.0\r\n */\r\n this.lineWidth = 1;\r\n\r\n /**\r\n * Controls if this Shape is filled or not.\r\n * Note that some Shapes do not support being filled (such as Line shapes)\r\n *\r\n * @name Phaser.GameObjects.Shape#isFilled\r\n * @type {boolean}\r\n * @since 3.13.0\r\n */\r\n this.isFilled = false;\r\n\r\n /**\r\n * Controls if this Shape is stroked or not.\r\n * Note that some Shapes do not support being stroked (such as Iso Box shapes)\r\n *\r\n * @name Phaser.GameObjects.Shape#isStroked\r\n * @type {boolean}\r\n * @since 3.13.0\r\n */\r\n this.isStroked = false;\r\n\r\n /**\r\n * Controls if this Shape path is closed during rendering when stroked.\r\n * Note that some Shapes are always closed when stroked (such as Ellipse shapes)\r\n *\r\n * @name Phaser.GameObjects.Shape#closePath\r\n * @type {boolean}\r\n * @since 3.13.0\r\n */\r\n this.closePath = true;\r\n\r\n /**\r\n * Private internal value.\r\n * A Line used when parsing internal path data to avoid constant object re-creation.\r\n *\r\n * @name Phaser.GameObjects.Curve#_tempLine\r\n * @type {Phaser.Geom.Line}\r\n * @private\r\n * @since 3.13.0\r\n */\r\n this._tempLine = new Line();\r\n\r\n this.initPipeline();\r\n },\r\n\r\n /**\r\n * Sets the fill color and alpha for this Shape.\r\n * \r\n * If you wish for the Shape to not be filled then call this method with no arguments, or just set `isFilled` to `false`.\r\n * \r\n * Note that some Shapes do not support fill colors, such as the Line shape.\r\n * \r\n * This call can be chained.\r\n *\r\n * @method Phaser.GameObjects.Shape#setFillStyle\r\n * @since 3.13.0\r\n * \r\n * @param {number} [color] - The color used to fill this shape. If not provided the Shape will not be filled.\r\n * @param {number} [alpha=1] - The alpha value used when filling this shape, if a fill color is given.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setFillStyle: function (color, alpha)\r\n {\r\n if (alpha === undefined) { alpha = 1; }\r\n\r\n if (color === undefined)\r\n {\r\n this.isFilled = false;\r\n }\r\n else\r\n {\r\n this.fillColor = color;\r\n this.fillAlpha = alpha;\r\n this.isFilled = true;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the stroke color and alpha for this Shape.\r\n * \r\n * If you wish for the Shape to not be stroked then call this method with no arguments, or just set `isStroked` to `false`.\r\n * \r\n * Note that some Shapes do not support being stroked, such as the Iso Box shape.\r\n * \r\n * This call can be chained.\r\n *\r\n * @method Phaser.GameObjects.Shape#setStrokeStyle\r\n * @since 3.13.0\r\n * \r\n * @param {number} [lineWidth] - The width of line to stroke with. If not provided or undefined the Shape will not be stroked.\r\n * @param {number} [color] - The color used to stroke this shape. If not provided the Shape will not be stroked.\r\n * @param {number} [alpha=1] - The alpha value used when stroking this shape, if a stroke color is given.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setStrokeStyle: function (lineWidth, color, alpha)\r\n {\r\n if (alpha === undefined) { alpha = 1; }\r\n\r\n if (lineWidth === undefined)\r\n {\r\n this.isStroked = false;\r\n }\r\n else\r\n {\r\n this.lineWidth = lineWidth;\r\n this.strokeColor = color;\r\n this.strokeAlpha = alpha;\r\n this.isStroked = true;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets if this Shape path is closed during rendering when stroked.\r\n * Note that some Shapes are always closed when stroked (such as Ellipse shapes)\r\n * \r\n * This call can be chained.\r\n *\r\n * @method Phaser.GameObjects.Shape#setClosePath\r\n * @since 3.13.0\r\n * \r\n * @param {boolean} value - Set to `true` if the Shape should be closed when stroked, otherwise `false`.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setClosePath: function (value)\r\n {\r\n this.closePath = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Internal destroy handler, called as part of the destroy process.\r\n *\r\n * @method Phaser.GameObjects.Shape#preDestroy\r\n * @protected\r\n * @since 3.13.0\r\n */\r\n preDestroy: function ()\r\n {\r\n this.geom = null;\r\n this._tempLine = null;\r\n this.pathData = [];\r\n this.pathIndexes = [];\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Shape;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9TaGFwZS5qcz9hMjAzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLGdGQUFlO0FBQ3hDLGlCQUFpQixtQkFBTyxDQUFDLDBFQUFlO0FBQ3hDLFdBQVcsbUJBQU8sQ0FBQyx5RUFBc0I7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsSUFBSTtBQUNmO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGlDQUFpQyxnQkFBZ0I7O0FBRWpEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLFdBQVc7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxXQUFXOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvU2hhcGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cycpO1xyXG52YXIgR2FtZU9iamVjdCA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3QnKTtcclxudmFyIExpbmUgPSByZXF1aXJlKCcuLi8uLi9nZW9tL2xpbmUvTGluZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIFNoYXBlIEdhbWUgT2JqZWN0IGlzIGEgYmFzZSBjbGFzcyBmb3IgdGhlIHZhcmlvdXMgZGlmZmVyZW50IHNoYXBlcywgc3VjaCBhcyB0aGUgQXJjLCBTdGFyIG9yIFBvbHlnb24uXHJcbiAqIFlvdSBjYW5ub3QgYWRkIGEgU2hhcGUgZGlyZWN0bHkgdG8geW91ciBTY2VuZSwgaXQgaXMgbWVhbnQgYXMgYSBiYXNlIGZvciB5b3VyIG93biBjdXN0b20gU2hhcGUgY2xhc3Nlcy5cclxuICpcclxuICogQGNsYXNzIFNoYXBlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICpcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQWxwaGFcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQmxlbmRNb2RlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkNvbXB1dGVkU2l6ZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5EZXB0aFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHNcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuTWFza1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5PcmlnaW5cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGlwZWxpbmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2Nyb2xsRmFjdG9yXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5WaXNpYmxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuIEEgR2FtZSBPYmplY3QgY2FuIG9ubHkgYmVsb25nIHRvIG9uZSBTY2VuZSBhdCBhIHRpbWUuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZV0gLSBUaGUgaW50ZXJuYWwgdHlwZSBvZiB0aGUgU2hhcGUuXHJcbiAqIEBwYXJhbSB7YW55fSBbZGF0YV0gLSBUaGUgZGF0YSBvZiB0aGUgc291cmNlIHNoYXBlIGdlb21ldHJ5LCBpZiBhbnkuXHJcbiAqL1xyXG52YXIgU2hhcGUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEdhbWVPYmplY3QsXHJcblxyXG4gICAgTWl4aW5zOiBbXHJcbiAgICAgICAgQ29tcG9uZW50cy5BbHBoYSxcclxuICAgICAgICBDb21wb25lbnRzLkJsZW5kTW9kZSxcclxuICAgICAgICBDb21wb25lbnRzLkNvbXB1dGVkU2l6ZSxcclxuICAgICAgICBDb21wb25lbnRzLkRlcHRoLFxyXG4gICAgICAgIENvbXBvbmVudHMuR2V0Qm91bmRzLFxyXG4gICAgICAgIENvbXBvbmVudHMuTWFzayxcclxuICAgICAgICBDb21wb25lbnRzLk9yaWdpbixcclxuICAgICAgICBDb21wb25lbnRzLlBpcGVsaW5lLFxyXG4gICAgICAgIENvbXBvbmVudHMuU2Nyb2xsRmFjdG9yLFxyXG4gICAgICAgIENvbXBvbmVudHMuVHJhbnNmb3JtLFxyXG4gICAgICAgIENvbXBvbmVudHMuVmlzaWJsZVxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFNoYXBlIChzY2VuZSwgdHlwZSwgZGF0YSlcclxuICAgIHtcclxuICAgICAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7IHR5cGUgPSAnU2hhcGUnOyB9XHJcblxyXG4gICAgICAgIEdhbWVPYmplY3QuY2FsbCh0aGlzLCBzY2VuZSwgdHlwZSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBzb3VyY2UgU2hhcGUgZGF0YS4gVHlwaWNhbGx5IGEgZ2VvbWV0cnkgb2JqZWN0LlxyXG4gICAgICAgICAqIFlvdSBzaG91bGQgbm90IG1hbmlwdWxhdGUgdGhpcyBkaXJlY3RseS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFwZSNkYXRhXHJcbiAgICAgICAgICogQHR5cGUge2FueX1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nZW9tID0gZGF0YTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSG9sZHMgdGhlIHBvbHlnb24gcGF0aCBkYXRhIGZvciBmaWxsZWQgcmVuZGVyaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYXBlI3BhdGhEYXRhXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcltdfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBhdGhEYXRhID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEhvbGRzIHRoZSBlYXJjdXQgcG9seWdvbiBwYXRoIGluZGV4IGRhdGEgZm9yIGZpbGxlZCByZW5kZXJpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuU2hhcGUjcGF0aEluZGV4ZXNcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcltdfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBhdGhJbmRleGVzID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBmaWxsIGNvbG9yIHVzZWQgYnkgdGhpcyBTaGFwZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFwZSNmaWxsQ29sb3JcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZpbGxDb2xvciA9IDB4ZmZmZmZmO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZmlsbCBhbHBoYSB2YWx1ZSB1c2VkIGJ5IHRoaXMgU2hhcGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuU2hhcGUjZmlsbEFscGhhXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5maWxsQWxwaGEgPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc3Ryb2tlIGNvbG9yIHVzZWQgYnkgdGhpcyBTaGFwZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFwZSNzdHJva2VDb2xvclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3Ryb2tlQ29sb3IgPSAweGZmZmZmZjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHN0cm9rZSBhbHBoYSB2YWx1ZSB1c2VkIGJ5IHRoaXMgU2hhcGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuU2hhcGUjc3Ryb2tlQWxwaGFcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnN0cm9rZUFscGhhID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHN0cm9rZSBsaW5lIHdpZHRoIHVzZWQgYnkgdGhpcyBTaGFwZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFwZSNsaW5lV2lkdGhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxpbmVXaWR0aCA9IDE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENvbnRyb2xzIGlmIHRoaXMgU2hhcGUgaXMgZmlsbGVkIG9yIG5vdC5cclxuICAgICAgICAgKiBOb3RlIHRoYXQgc29tZSBTaGFwZXMgZG8gbm90IHN1cHBvcnQgYmVpbmcgZmlsbGVkIChzdWNoIGFzIExpbmUgc2hhcGVzKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYXBlI2lzRmlsbGVkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaXNGaWxsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ29udHJvbHMgaWYgdGhpcyBTaGFwZSBpcyBzdHJva2VkIG9yIG5vdC5cclxuICAgICAgICAgKiBOb3RlIHRoYXQgc29tZSBTaGFwZXMgZG8gbm90IHN1cHBvcnQgYmVpbmcgc3Ryb2tlZCAoc3VjaCBhcyBJc28gQm94IHNoYXBlcylcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFwZSNpc1N0cm9rZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc1N0cm9rZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ29udHJvbHMgaWYgdGhpcyBTaGFwZSBwYXRoIGlzIGNsb3NlZCBkdXJpbmcgcmVuZGVyaW5nIHdoZW4gc3Ryb2tlZC5cclxuICAgICAgICAgKiBOb3RlIHRoYXQgc29tZSBTaGFwZXMgYXJlIGFsd2F5cyBjbG9zZWQgd2hlbiBzdHJva2VkIChzdWNoIGFzIEVsbGlwc2Ugc2hhcGVzKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNoYXBlI2Nsb3NlUGF0aFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNsb3NlUGF0aCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFByaXZhdGUgaW50ZXJuYWwgdmFsdWUuXHJcbiAgICAgICAgICogQSBMaW5lIHVzZWQgd2hlbiBwYXJzaW5nIGludGVybmFsIHBhdGggZGF0YSB0byBhdm9pZCBjb25zdGFudCBvYmplY3QgcmUtY3JlYXRpb24uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ3VydmUjX3RlbXBMaW5lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HZW9tLkxpbmV9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGVtcExpbmUgPSBuZXcgTGluZSgpO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRQaXBlbGluZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGZpbGwgY29sb3IgYW5kIGFscGhhIGZvciB0aGlzIFNoYXBlLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB5b3Ugd2lzaCBmb3IgdGhlIFNoYXBlIHRvIG5vdCBiZSBmaWxsZWQgdGhlbiBjYWxsIHRoaXMgbWV0aG9kIHdpdGggbm8gYXJndW1lbnRzLCBvciBqdXN0IHNldCBgaXNGaWxsZWRgIHRvIGBmYWxzZWAuXHJcbiAgICAgKiBcclxuICAgICAqIE5vdGUgdGhhdCBzb21lIFNoYXBlcyBkbyBub3Qgc3VwcG9ydCBmaWxsIGNvbG9ycywgc3VjaCBhcyB0aGUgTGluZSBzaGFwZS5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBjYWxsIGNhbiBiZSBjaGFpbmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlNoYXBlI3NldEZpbGxTdHlsZVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2NvbG9yXSAtIFRoZSBjb2xvciB1c2VkIHRvIGZpbGwgdGhpcyBzaGFwZS4gSWYgbm90IHByb3ZpZGVkIHRoZSBTaGFwZSB3aWxsIG5vdCBiZSBmaWxsZWQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FscGhhPTFdIC0gVGhlIGFscGhhIHZhbHVlIHVzZWQgd2hlbiBmaWxsaW5nIHRoaXMgc2hhcGUsIGlmIGEgZmlsbCBjb2xvciBpcyBnaXZlbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRGaWxsU3R5bGU6IGZ1bmN0aW9uIChjb2xvciwgYWxwaGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGFscGhhID09PSB1bmRlZmluZWQpIHsgYWxwaGEgPSAxOyB9XHJcblxyXG4gICAgICAgIGlmIChjb2xvciA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5pc0ZpbGxlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGxDb2xvciA9IGNvbG9yO1xyXG4gICAgICAgICAgICB0aGlzLmZpbGxBbHBoYSA9IGFscGhhO1xyXG4gICAgICAgICAgICB0aGlzLmlzRmlsbGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHN0cm9rZSBjb2xvciBhbmQgYWxwaGEgZm9yIHRoaXMgU2hhcGUuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHlvdSB3aXNoIGZvciB0aGUgU2hhcGUgdG8gbm90IGJlIHN0cm9rZWQgdGhlbiBjYWxsIHRoaXMgbWV0aG9kIHdpdGggbm8gYXJndW1lbnRzLCBvciBqdXN0IHNldCBgaXNTdHJva2VkYCB0byBgZmFsc2VgLlxyXG4gICAgICogXHJcbiAgICAgKiBOb3RlIHRoYXQgc29tZSBTaGFwZXMgZG8gbm90IHN1cHBvcnQgYmVpbmcgc3Ryb2tlZCwgc3VjaCBhcyB0aGUgSXNvIEJveCBzaGFwZS5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBjYWxsIGNhbiBiZSBjaGFpbmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlNoYXBlI3NldFN0cm9rZVN0eWxlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGluZVdpZHRoXSAtIFRoZSB3aWR0aCBvZiBsaW5lIHRvIHN0cm9rZSB3aXRoLiBJZiBub3QgcHJvdmlkZWQgb3IgdW5kZWZpbmVkIHRoZSBTaGFwZSB3aWxsIG5vdCBiZSBzdHJva2VkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtjb2xvcl0gLSBUaGUgY29sb3IgdXNlZCB0byBzdHJva2UgdGhpcyBzaGFwZS4gSWYgbm90IHByb3ZpZGVkIHRoZSBTaGFwZSB3aWxsIG5vdCBiZSBzdHJva2VkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthbHBoYT0xXSAtIFRoZSBhbHBoYSB2YWx1ZSB1c2VkIHdoZW4gc3Ryb2tpbmcgdGhpcyBzaGFwZSwgaWYgYSBzdHJva2UgY29sb3IgaXMgZ2l2ZW4uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0U3Ryb2tlU3R5bGU6IGZ1bmN0aW9uIChsaW5lV2lkdGgsIGNvbG9yLCBhbHBoYSlcclxuICAgIHtcclxuICAgICAgICBpZiAoYWxwaGEgPT09IHVuZGVmaW5lZCkgeyBhbHBoYSA9IDE7IH1cclxuXHJcbiAgICAgICAgaWYgKGxpbmVXaWR0aCA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5pc1N0cm9rZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XHJcbiAgICAgICAgICAgIHRoaXMuc3Ryb2tlQ29sb3IgPSBjb2xvcjtcclxuICAgICAgICAgICAgdGhpcy5zdHJva2VBbHBoYSA9IGFscGhhO1xyXG4gICAgICAgICAgICB0aGlzLmlzU3Ryb2tlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGlmIHRoaXMgU2hhcGUgcGF0aCBpcyBjbG9zZWQgZHVyaW5nIHJlbmRlcmluZyB3aGVuIHN0cm9rZWQuXHJcbiAgICAgKiBOb3RlIHRoYXQgc29tZSBTaGFwZXMgYXJlIGFsd2F5cyBjbG9zZWQgd2hlbiBzdHJva2VkIChzdWNoIGFzIEVsbGlwc2Ugc2hhcGVzKVxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIGNhbGwgY2FuIGJlIGNoYWluZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU2hhcGUjc2V0Q2xvc2VQYXRoXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBTZXQgdG8gYHRydWVgIGlmIHRoZSBTaGFwZSBzaG91bGQgYmUgY2xvc2VkIHdoZW4gc3Ryb2tlZCwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0Q2xvc2VQYXRoOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jbG9zZVBhdGggPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgZGVzdHJveSBoYW5kbGVyLCBjYWxsZWQgYXMgcGFydCBvZiB0aGUgZGVzdHJveSBwcm9jZXNzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlNoYXBlI3ByZURlc3Ryb3lcclxuICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqL1xyXG4gICAgcHJlRGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmdlb20gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX3RlbXBMaW5lID0gbnVsbDtcclxuICAgICAgICB0aGlzLnBhdGhEYXRhID0gW107XHJcbiAgICAgICAgdGhpcy5wYXRoSW5kZXhlcyA9IFtdO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNoYXBlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/Shape.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/StrokePathWebGL.js":
/*!**********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/StrokePathWebGL.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders a stroke outline around the given Shape.\r\n *\r\n * @method Phaser.GameObjects.Shape#StrokePathWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLPipeline} pipeline - The WebGL Pipeline used to render this Shape.\r\n * @param {Phaser.GameObjects.Shape} src - The Game Object shape being rendered in this call.\r\n * @param {number} alpha - The base alpha value.\r\n * @param {number} dx - The source displayOriginX.\r\n * @param {number} dy - The source displayOriginY.\r\n */\r\nvar StrokePathWebGL = function (pipeline, src, alpha, dx, dy)\r\n{\r\n var strokeTint = pipeline.strokeTint;\r\n var strokeTintColor = Utils.getTintAppendFloatAlphaAndSwap(src.strokeColor, src.strokeAlpha * alpha);\r\n\r\n strokeTint.TL = strokeTintColor;\r\n strokeTint.TR = strokeTintColor;\r\n strokeTint.BL = strokeTintColor;\r\n strokeTint.BR = strokeTintColor;\r\n\r\n var path = src.pathData;\r\n var pathLength = path.length - 1;\r\n var lineWidth = src.lineWidth;\r\n var halfLineWidth = lineWidth / 2;\r\n\r\n var px1 = path[0] - dx;\r\n var py1 = path[1] - dy;\r\n\r\n if (!src.closePath)\r\n {\r\n pathLength -= 2;\r\n }\r\n\r\n for (var i = 2; i < pathLength; i += 2)\r\n {\r\n var px2 = path[i] - dx;\r\n var py2 = path[i + 1] - dy;\r\n\r\n pipeline.setTexture2D();\r\n\r\n pipeline.batchLine(\r\n px1,\r\n py1,\r\n px2,\r\n py2,\r\n halfLineWidth,\r\n halfLineWidth,\r\n lineWidth,\r\n i - 2,\r\n (src.closePath) ? (i === pathLength - 1) : false\r\n );\r\n\r\n px1 = px2;\r\n py1 = py2;\r\n }\r\n};\r\n\r\nmodule.exports = StrokePathWebGL;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9TdHJva2VQYXRoV2ViR0wuanM/ZDE5MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFGQUE0Qjs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9DQUFvQztBQUMvQyxXQUFXLHlCQUF5QjtBQUNwQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGdCQUFnQjtBQUNuQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL1N0cm9rZVBhdGhXZWJHTC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXIvd2ViZ2wvVXRpbHMnKTtcclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIGEgc3Ryb2tlIG91dGxpbmUgYXJvdW5kIHRoZSBnaXZlbiBTaGFwZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU2hhcGUjU3Ryb2tlUGF0aFdlYkdMXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xQaXBlbGluZX0gcGlwZWxpbmUgLSBUaGUgV2ViR0wgUGlwZWxpbmUgdXNlZCB0byByZW5kZXIgdGhpcyBTaGFwZS5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuU2hhcGV9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBzaGFwZSBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbHBoYSAtIFRoZSBiYXNlIGFscGhhIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZHggLSBUaGUgc291cmNlIGRpc3BsYXlPcmlnaW5YLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZHkgLSBUaGUgc291cmNlIGRpc3BsYXlPcmlnaW5ZLlxyXG4gKi9cclxudmFyIFN0cm9rZVBhdGhXZWJHTCA9IGZ1bmN0aW9uIChwaXBlbGluZSwgc3JjLCBhbHBoYSwgZHgsIGR5KVxyXG57XHJcbiAgICB2YXIgc3Ryb2tlVGludCA9IHBpcGVsaW5lLnN0cm9rZVRpbnQ7XHJcbiAgICB2YXIgc3Ryb2tlVGludENvbG9yID0gVXRpbHMuZ2V0VGludEFwcGVuZEZsb2F0QWxwaGFBbmRTd2FwKHNyYy5zdHJva2VDb2xvciwgc3JjLnN0cm9rZUFscGhhICogYWxwaGEpO1xyXG5cclxuICAgIHN0cm9rZVRpbnQuVEwgPSBzdHJva2VUaW50Q29sb3I7XHJcbiAgICBzdHJva2VUaW50LlRSID0gc3Ryb2tlVGludENvbG9yO1xyXG4gICAgc3Ryb2tlVGludC5CTCA9IHN0cm9rZVRpbnRDb2xvcjtcclxuICAgIHN0cm9rZVRpbnQuQlIgPSBzdHJva2VUaW50Q29sb3I7XHJcblxyXG4gICAgdmFyIHBhdGggPSBzcmMucGF0aERhdGE7XHJcbiAgICB2YXIgcGF0aExlbmd0aCA9IHBhdGgubGVuZ3RoIC0gMTtcclxuICAgIHZhciBsaW5lV2lkdGggPSBzcmMubGluZVdpZHRoO1xyXG4gICAgdmFyIGhhbGZMaW5lV2lkdGggPSBsaW5lV2lkdGggLyAyO1xyXG5cclxuICAgIHZhciBweDEgPSBwYXRoWzBdIC0gZHg7XHJcbiAgICB2YXIgcHkxID0gcGF0aFsxXSAtIGR5O1xyXG5cclxuICAgIGlmICghc3JjLmNsb3NlUGF0aClcclxuICAgIHtcclxuICAgICAgICBwYXRoTGVuZ3RoIC09IDI7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDI7IGkgPCBwYXRoTGVuZ3RoOyBpICs9IDIpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHB4MiA9IHBhdGhbaV0gLSBkeDtcclxuICAgICAgICB2YXIgcHkyID0gcGF0aFtpICsgMV0gLSBkeTtcclxuXHJcbiAgICAgICAgcGlwZWxpbmUuc2V0VGV4dHVyZTJEKCk7XHJcblxyXG4gICAgICAgIHBpcGVsaW5lLmJhdGNoTGluZShcclxuICAgICAgICAgICAgcHgxLFxyXG4gICAgICAgICAgICBweTEsXHJcbiAgICAgICAgICAgIHB4MixcclxuICAgICAgICAgICAgcHkyLFxyXG4gICAgICAgICAgICBoYWxmTGluZVdpZHRoLFxyXG4gICAgICAgICAgICBoYWxmTGluZVdpZHRoLFxyXG4gICAgICAgICAgICBsaW5lV2lkdGgsXHJcbiAgICAgICAgICAgIGkgLSAyLFxyXG4gICAgICAgICAgICAoc3JjLmNsb3NlUGF0aCkgPyAoaSA9PT0gcGF0aExlbmd0aCAtIDEpIDogZmFsc2VcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBweDEgPSBweDI7XHJcbiAgICAgICAgcHkxID0gcHkyO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTdHJva2VQYXRoV2ViR0w7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/StrokePathWebGL.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/arc/Arc.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/arc/Arc.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar ArcRender = __webpack_require__(/*! ./ArcRender */ \"./node_modules/phaser/src/gameobjects/shape/arc/ArcRender.js\");\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar DegToRad = __webpack_require__(/*! ../../../math/DegToRad */ \"./node_modules/phaser/src/math/DegToRad.js\");\r\nvar Earcut = __webpack_require__(/*! ../../../geom/polygon/Earcut */ \"./node_modules/phaser/src/geom/polygon/Earcut.js\");\r\nvar GeomCircle = __webpack_require__(/*! ../../../geom/circle/Circle */ \"./node_modules/phaser/src/geom/circle/Circle.js\");\r\nvar MATH_CONST = __webpack_require__(/*! ../../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\nvar Shape = __webpack_require__(/*! ../Shape */ \"./node_modules/phaser/src/gameobjects/shape/Shape.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Arc Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * When it renders it displays an arc shape. You can control the start and end angles of the arc,\r\n * as well as if the angles are winding clockwise or anti-clockwise. With the default settings\r\n * it renders as a complete circle. By changing the angles you can create other arc shapes,\r\n * such as half-circles.\r\n * \r\n * Arcs also have an `iterations` property and corresponding `setIterations` method. This allows\r\n * you to control how smooth the shape renders in WebGL, by controlling the number of iterations\r\n * that take place during construction.\r\n *\r\n * @class Arc\r\n * @extends Phaser.GameObjects.Shape\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [radius=128] - The radius of the arc.\r\n * @param {integer} [startAngle=0] - The start angle of the arc, in degrees.\r\n * @param {integer} [endAngle=360] - The end angle of the arc, in degrees.\r\n * @param {boolean} [anticlockwise=false] - The winding order of the start and end angles.\r\n * @param {number} [fillColor] - The color the arc will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the arc will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n */\r\nvar Arc = new Class({\r\n\r\n Extends: Shape,\r\n\r\n Mixins: [\r\n ArcRender\r\n ],\r\n\r\n initialize:\r\n\r\n function Arc (scene, x, y, radius, startAngle, endAngle, anticlockwise, fillColor, fillAlpha)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n if (radius === undefined) { radius = 128; }\r\n if (startAngle === undefined) { startAngle = 0; }\r\n if (endAngle === undefined) { endAngle = 360; }\r\n if (anticlockwise === undefined) { anticlockwise = false; }\r\n\r\n Shape.call(this, scene, 'Arc', new GeomCircle(0, 0, radius));\r\n\r\n /**\r\n * Private internal value. Holds the start angle in degrees.\r\n *\r\n * @name Phaser.GameObjects.Arc#_startAngle\r\n * @type {integer}\r\n * @private\r\n * @since 3.13.0\r\n */\r\n this._startAngle = startAngle;\r\n\r\n /**\r\n * Private internal value. Holds the end angle in degrees.\r\n *\r\n * @name Phaser.GameObjects.Arc#_endAngle\r\n * @type {integer}\r\n * @private\r\n * @since 3.13.0\r\n */\r\n this._endAngle = endAngle;\r\n\r\n /**\r\n * Private internal value. Holds the winding order of the start and end angles.\r\n *\r\n * @name Phaser.GameObjects.Arc#_anticlockwise\r\n * @type {boolean}\r\n * @private\r\n * @since 3.13.0\r\n */\r\n this._anticlockwise = anticlockwise;\r\n\r\n /**\r\n * Private internal value. Holds the number of iterations used when drawing the arc.\r\n *\r\n * @name Phaser.GameObjects.Arc#_iterations\r\n * @type {number}\r\n * @default 0.01\r\n * @private\r\n * @since 3.13.0\r\n */\r\n this._iterations = 0.01;\r\n\r\n this.setPosition(x, y);\r\n\r\n var diameter = this.geom.radius * 2;\r\n this.setSize(diameter, diameter);\r\n\r\n if (fillColor !== undefined)\r\n {\r\n this.setFillStyle(fillColor, fillAlpha);\r\n }\r\n\r\n this.updateDisplayOrigin();\r\n this.updateData();\r\n },\r\n\r\n /**\r\n * The number of iterations used when drawing the arc.\r\n * Increase this value for smoother arcs, at the cost of more polygons being rendered.\r\n * Modify this value by small amounts, such as 0.01.\r\n *\r\n * @name Phaser.GameObjects.Arc#iterations\r\n * @type {number}\r\n * @default 0.01\r\n * @since 3.13.0\r\n */\r\n iterations: {\r\n\r\n get: function ()\r\n {\r\n return this._iterations;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._iterations = value;\r\n\r\n this.updateData();\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The radius of the arc.\r\n *\r\n * @name Phaser.GameObjects.Arc#radius\r\n * @type {number}\r\n * @since 3.13.0\r\n */\r\n radius: {\r\n\r\n get: function ()\r\n {\r\n return this.geom.radius;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.geom.radius = value;\r\n\r\n var diameter = value * 2;\r\n this.setSize(diameter, diameter);\r\n this.updateDisplayOrigin();\r\n this.updateData();\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The start angle of the arc, in degrees.\r\n *\r\n * @name Phaser.GameObjects.Arc#startAngle\r\n * @type {integer}\r\n * @since 3.13.0\r\n */\r\n startAngle: {\r\n\r\n get: function ()\r\n {\r\n return this._startAngle;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._startAngle = value;\r\n\r\n this.updateData();\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The end angle of the arc, in degrees.\r\n *\r\n * @name Phaser.GameObjects.Arc#endAngle\r\n * @type {integer}\r\n * @since 3.13.0\r\n */\r\n endAngle: {\r\n\r\n get: function ()\r\n {\r\n return this._endAngle;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._endAngle = value;\r\n\r\n this.updateData();\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The winding order of the start and end angles.\r\n *\r\n * @name Phaser.GameObjects.Arc#anticlockwise\r\n * @type {boolean}\r\n * @since 3.13.0\r\n */\r\n anticlockwise: {\r\n\r\n get: function ()\r\n {\r\n return this._anticlockwise;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._anticlockwise = value;\r\n\r\n this.updateData();\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Sets the radius of the arc.\r\n * This call can be chained.\r\n *\r\n * @method Phaser.GameObjects.Arc#setRadius\r\n * @since 3.13.0\r\n * \r\n * @param {number} value - The value to set the radius to.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setRadius: function (value)\r\n {\r\n this.radius = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the number of iterations used when drawing the arc.\r\n * Increase this value for smoother arcs, at the cost of more polygons being rendered.\r\n * Modify this value by small amounts, such as 0.01.\r\n * This call can be chained.\r\n *\r\n * @method Phaser.GameObjects.Arc#setIterations\r\n * @since 3.13.0\r\n * \r\n * @param {number} value - The value to set the iterations to.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setIterations: function (value)\r\n {\r\n if (value === undefined) { value = 0.01; }\r\n\r\n this.iterations = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the starting angle of the arc, in degrees.\r\n * This call can be chained.\r\n *\r\n * @method Phaser.GameObjects.Arc#setStartAngle\r\n * @since 3.13.0\r\n * \r\n * @param {integer} value - The value to set the starting angle to.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setStartAngle: function (angle, anticlockwise)\r\n {\r\n this._startAngle = angle;\r\n\r\n if (anticlockwise !== undefined)\r\n {\r\n this._anticlockwise = anticlockwise;\r\n }\r\n\r\n return this.updateData();\r\n },\r\n\r\n /**\r\n * Sets the ending angle of the arc, in degrees.\r\n * This call can be chained.\r\n *\r\n * @method Phaser.GameObjects.Arc#setEndAngle\r\n * @since 3.13.0\r\n * \r\n * @param {integer} value - The value to set the ending angle to.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setEndAngle: function (angle, anticlockwise)\r\n {\r\n this._endAngle = angle;\r\n\r\n if (anticlockwise !== undefined)\r\n {\r\n this._anticlockwise = anticlockwise;\r\n }\r\n\r\n return this.updateData();\r\n },\r\n\r\n /**\r\n * Internal method that updates the data and path values.\r\n *\r\n * @method Phaser.GameObjects.Arc#updateData\r\n * @private\r\n * @since 3.13.0\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n updateData: function ()\r\n {\r\n var step = this._iterations;\r\n var iteration = step;\r\n\r\n var radius = this.geom.radius;\r\n var startAngle = DegToRad(this._startAngle);\r\n var endAngle = DegToRad(this._endAngle);\r\n var anticlockwise = this._anticlockwise;\r\n\r\n var x = radius;\r\n var y = radius;\r\n\r\n endAngle -= startAngle;\r\n\r\n if (anticlockwise)\r\n {\r\n if (endAngle < -MATH_CONST.PI2)\r\n {\r\n endAngle = -MATH_CONST.PI2;\r\n }\r\n else if (endAngle > 0)\r\n {\r\n endAngle = -MATH_CONST.PI2 + endAngle % MATH_CONST.PI2;\r\n }\r\n }\r\n else if (endAngle > MATH_CONST.PI2)\r\n {\r\n endAngle = MATH_CONST.PI2;\r\n }\r\n else if (endAngle < 0)\r\n {\r\n endAngle = MATH_CONST.PI2 + endAngle % MATH_CONST.PI2;\r\n }\r\n\r\n var path = [ x + Math.cos(startAngle) * radius, y + Math.sin(startAngle) * radius ];\r\n\r\n var ta;\r\n\r\n while (iteration < 1)\r\n {\r\n ta = endAngle * iteration + startAngle;\r\n\r\n path.push(x + Math.cos(ta) * radius, y + Math.sin(ta) * radius);\r\n\r\n iteration += step;\r\n }\r\n\r\n ta = endAngle + startAngle;\r\n\r\n path.push(x + Math.cos(ta) * radius, y + Math.sin(ta) * radius);\r\n\r\n path.push(x + Math.cos(startAngle) * radius, y + Math.sin(startAngle) * radius);\r\n\r\n this.pathIndexes = Earcut(path);\r\n this.pathData = path;\r\n\r\n return this;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Arc;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9hcmMvQXJjLmpzPzVlMDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLGlGQUFhO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxzRUFBc0I7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLDBFQUF3QjtBQUMvQyxhQUFhLG1CQUFPLENBQUMsc0ZBQThCO0FBQ25ELGlCQUFpQixtQkFBTyxDQUFDLG9GQUE2QjtBQUN0RCxpQkFBaUIsbUJBQU8sQ0FBQyxvRUFBcUI7QUFDOUMsWUFBWSxtQkFBTyxDQUFDLHNFQUFVOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87QUFDckMsbUNBQW1DLGNBQWM7QUFDakQsdUNBQXVDLGdCQUFnQjtBQUN2RCxxQ0FBcUMsZ0JBQWdCO0FBQ3JELDBDQUEwQyx1QkFBdUI7O0FBRWpFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLGNBQWM7O0FBRWhEOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL2FyYy9BcmMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBBcmNSZW5kZXIgPSByZXF1aXJlKCcuL0FyY1JlbmRlcicpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgRGVnVG9SYWQgPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoL0RlZ1RvUmFkJyk7XHJcbnZhciBFYXJjdXQgPSByZXF1aXJlKCcuLi8uLi8uLi9nZW9tL3BvbHlnb24vRWFyY3V0Jyk7XHJcbnZhciBHZW9tQ2lyY2xlID0gcmVxdWlyZSgnLi4vLi4vLi4vZ2VvbS9jaXJjbGUvQ2lyY2xlJyk7XHJcbnZhciBNQVRIX0NPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aC9jb25zdCcpO1xyXG52YXIgU2hhcGUgPSByZXF1aXJlKCcuLi9TaGFwZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIEFyYyBTaGFwZSBpcyBhIEdhbWUgT2JqZWN0IHRoYXQgY2FuIGJlIGFkZGVkIHRvIGEgU2NlbmUsIEdyb3VwIG9yIENvbnRhaW5lci4gWW91IGNhblxyXG4gKiB0cmVhdCBpdCBsaWtlIGFueSBvdGhlciBHYW1lIE9iamVjdCBpbiB5b3VyIGdhbWUsIHN1Y2ggYXMgdHdlZW5pbmcgaXQsIHNjYWxpbmcgaXQsIG9yIGVuYWJsaW5nXHJcbiAqIGl0IGZvciBpbnB1dCBvciBwaHlzaWNzLiBJdCBwcm92aWRlcyBhIHF1aWNrIGFuZCBlYXN5IHdheSBmb3IgeW91IHRvIHJlbmRlciB0aGlzIHNoYXBlIGluIHlvdXJcclxuICogZ2FtZSB3aXRob3V0IHVzaW5nIGEgdGV4dHVyZSwgd2hpbGUgc3RpbGwgdGFraW5nIGFkdmFudGFnZSBvZiBiZWluZyBmdWxseSBiYXRjaGVkIGluIFdlYkdMLlxyXG4gKiBcclxuICogVGhpcyBzaGFwZSBzdXBwb3J0cyBib3RoIGZpbGwgYW5kIHN0cm9rZSBjb2xvcnMuXHJcbiAqIFxyXG4gKiBXaGVuIGl0IHJlbmRlcnMgaXQgZGlzcGxheXMgYW4gYXJjIHNoYXBlLiBZb3UgY2FuIGNvbnRyb2wgdGhlIHN0YXJ0IGFuZCBlbmQgYW5nbGVzIG9mIHRoZSBhcmMsXHJcbiAqIGFzIHdlbGwgYXMgaWYgdGhlIGFuZ2xlcyBhcmUgd2luZGluZyBjbG9ja3dpc2Ugb3IgYW50aS1jbG9ja3dpc2UuIFdpdGggdGhlIGRlZmF1bHQgc2V0dGluZ3NcclxuICogaXQgcmVuZGVycyBhcyBhIGNvbXBsZXRlIGNpcmNsZS4gQnkgY2hhbmdpbmcgdGhlIGFuZ2xlcyB5b3UgY2FuIGNyZWF0ZSBvdGhlciBhcmMgc2hhcGVzLFxyXG4gKiBzdWNoIGFzIGhhbGYtY2lyY2xlcy5cclxuICogXHJcbiAqIEFyY3MgYWxzbyBoYXZlIGFuIGBpdGVyYXRpb25zYCBwcm9wZXJ0eSBhbmQgY29ycmVzcG9uZGluZyBgc2V0SXRlcmF0aW9uc2AgbWV0aG9kLiBUaGlzIGFsbG93c1xyXG4gKiB5b3UgdG8gY29udHJvbCBob3cgc21vb3RoIHRoZSBzaGFwZSByZW5kZXJzIGluIFdlYkdMLCBieSBjb250cm9sbGluZyB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnNcclxuICogdGhhdCB0YWtlIHBsYWNlIGR1cmluZyBjb25zdHJ1Y3Rpb24uXHJcbiAqXHJcbiAqIEBjbGFzcyBBcmNcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLlNoYXBlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgYmVsb25ncy4gQSBHYW1lIE9iamVjdCBjYW4gb25seSBiZWxvbmcgdG8gb25lIFNjZW5lIGF0IGEgdGltZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtyYWRpdXM9MTI4XSAtIFRoZSByYWRpdXMgb2YgdGhlIGFyYy5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbc3RhcnRBbmdsZT0wXSAtIFRoZSBzdGFydCBhbmdsZSBvZiB0aGUgYXJjLCBpbiBkZWdyZWVzLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtlbmRBbmdsZT0zNjBdIC0gVGhlIGVuZCBhbmdsZSBvZiB0aGUgYXJjLCBpbiBkZWdyZWVzLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthbnRpY2xvY2t3aXNlPWZhbHNlXSAtIFRoZSB3aW5kaW5nIG9yZGVyIG9mIHRoZSBzdGFydCBhbmQgZW5kIGFuZ2xlcy5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsQ29sb3JdIC0gVGhlIGNvbG9yIHRoZSBhcmMgd2lsbCBiZSBmaWxsZWQgd2l0aCwgaS5lLiAweGZmMDAwMCBmb3IgcmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxBbHBoYV0gLSBUaGUgYWxwaGEgdGhlIGFyYyB3aWxsIGJlIGZpbGxlZCB3aXRoLiBZb3UgY2FuIGFsc28gc2V0IHRoZSBhbHBoYSBvZiB0aGUgb3ZlcmFsbCBTaGFwZSB1c2luZyBpdHMgYGFscGhhYCBwcm9wZXJ0eS5cclxuICovXHJcbnZhciBBcmMgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IFNoYXBlLFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIEFyY1JlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEFyYyAoc2NlbmUsIHgsIHksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UsIGZpbGxDb2xvciwgZmlsbEFscGhhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcbiAgICAgICAgaWYgKHJhZGl1cyA9PT0gdW5kZWZpbmVkKSB7IHJhZGl1cyA9IDEyODsgfVxyXG4gICAgICAgIGlmIChzdGFydEFuZ2xlID09PSB1bmRlZmluZWQpIHsgc3RhcnRBbmdsZSA9IDA7IH1cclxuICAgICAgICBpZiAoZW5kQW5nbGUgPT09IHVuZGVmaW5lZCkgeyBlbmRBbmdsZSA9IDM2MDsgfVxyXG4gICAgICAgIGlmIChhbnRpY2xvY2t3aXNlID09PSB1bmRlZmluZWQpIHsgYW50aWNsb2Nrd2lzZSA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIFNoYXBlLmNhbGwodGhpcywgc2NlbmUsICdBcmMnLCBuZXcgR2VvbUNpcmNsZSgwLCAwLCByYWRpdXMpKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS4gSG9sZHMgdGhlIHN0YXJ0IGFuZ2xlIGluIGRlZ3JlZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQXJjI19zdGFydEFuZ2xlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fc3RhcnRBbmdsZSA9IHN0YXJ0QW5nbGU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFByaXZhdGUgaW50ZXJuYWwgdmFsdWUuIEhvbGRzIHRoZSBlbmQgYW5nbGUgaW4gZGVncmVlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5BcmMjX2VuZEFuZ2xlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fZW5kQW5nbGUgPSBlbmRBbmdsZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS4gSG9sZHMgdGhlIHdpbmRpbmcgb3JkZXIgb2YgdGhlIHN0YXJ0IGFuZCBlbmQgYW5nbGVzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkFyYyNfYW50aWNsb2Nrd2lzZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2FudGljbG9ja3dpc2UgPSBhbnRpY2xvY2t3aXNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQcml2YXRlIGludGVybmFsIHZhbHVlLiBIb2xkcyB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdXNlZCB3aGVuIGRyYXdpbmcgdGhlIGFyYy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5BcmMjX2l0ZXJhdGlvbnNcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDAuMDFcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9pdGVyYXRpb25zID0gMC4wMTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcclxuXHJcbiAgICAgICAgdmFyIGRpYW1ldGVyID0gdGhpcy5nZW9tLnJhZGl1cyAqIDI7XHJcbiAgICAgICAgdGhpcy5zZXRTaXplKGRpYW1ldGVyLCBkaWFtZXRlcik7XHJcblxyXG4gICAgICAgIGlmIChmaWxsQ29sb3IgIT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsbFN0eWxlKGZpbGxDb2xvciwgZmlsbEFscGhhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlRGlzcGxheU9yaWdpbigpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGF0YSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyB1c2VkIHdoZW4gZHJhd2luZyB0aGUgYXJjLlxyXG4gICAgICogSW5jcmVhc2UgdGhpcyB2YWx1ZSBmb3Igc21vb3RoZXIgYXJjcywgYXQgdGhlIGNvc3Qgb2YgbW9yZSBwb2x5Z29ucyBiZWluZyByZW5kZXJlZC5cclxuICAgICAqIE1vZGlmeSB0aGlzIHZhbHVlIGJ5IHNtYWxsIGFtb3VudHMsIHN1Y2ggYXMgMC4wMS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQXJjI2l0ZXJhdGlvbnNcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCAwLjAxXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKi9cclxuICAgIGl0ZXJhdGlvbnM6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZXJhdGlvbnM7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9pdGVyYXRpb25zID0gdmFsdWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURhdGEoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSByYWRpdXMgb2YgdGhlIGFyYy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQXJjI3JhZGl1c1xyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqL1xyXG4gICAgcmFkaXVzOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdlb20ucmFkaXVzO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5nZW9tLnJhZGl1cyA9IHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgdmFyIGRpYW1ldGVyID0gdmFsdWUgKiAyO1xyXG4gICAgICAgICAgICB0aGlzLnNldFNpemUoZGlhbWV0ZXIsIGRpYW1ldGVyKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5T3JpZ2luKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHN0YXJ0IGFuZ2xlIG9mIHRoZSBhcmMsIGluIGRlZ3JlZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkFyYyNzdGFydEFuZ2xlXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqL1xyXG4gICAgc3RhcnRBbmdsZToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRBbmdsZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0QW5nbGUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGVuZCBhbmdsZSBvZiB0aGUgYXJjLCBpbiBkZWdyZWVzLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5BcmMjZW5kQW5nbGVcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICovXHJcbiAgICBlbmRBbmdsZToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZW5kQW5nbGU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9lbmRBbmdsZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgd2luZGluZyBvcmRlciBvZiB0aGUgc3RhcnQgYW5kIGVuZCBhbmdsZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkFyYyNhbnRpY2xvY2t3aXNlXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqL1xyXG4gICAgYW50aWNsb2Nrd2lzZToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYW50aWNsb2Nrd2lzZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FudGljbG9ja3dpc2UgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcmFkaXVzIG9mIHRoZSBhcmMuXHJcbiAgICAgKiBUaGlzIGNhbGwgY2FuIGJlIGNoYWluZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQXJjI3NldFJhZGl1c1xyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0IHRoZSByYWRpdXMgdG8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0UmFkaXVzOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yYWRpdXMgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdXNlZCB3aGVuIGRyYXdpbmcgdGhlIGFyYy5cclxuICAgICAqIEluY3JlYXNlIHRoaXMgdmFsdWUgZm9yIHNtb290aGVyIGFyY3MsIGF0IHRoZSBjb3N0IG9mIG1vcmUgcG9seWdvbnMgYmVpbmcgcmVuZGVyZWQuXHJcbiAgICAgKiBNb2RpZnkgdGhpcyB2YWx1ZSBieSBzbWFsbCBhbW91bnRzLCBzdWNoIGFzIDAuMDEuXHJcbiAgICAgKiBUaGlzIGNhbGwgY2FuIGJlIGNoYWluZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQXJjI3NldEl0ZXJhdGlvbnNcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHNldCB0aGUgaXRlcmF0aW9ucyB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRJdGVyYXRpb25zOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsgdmFsdWUgPSAwLjAxOyB9XHJcblxyXG4gICAgICAgIHRoaXMuaXRlcmF0aW9ucyA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBzdGFydGluZyBhbmdsZSBvZiB0aGUgYXJjLCBpbiBkZWdyZWVzLlxyXG4gICAgICogVGhpcyBjYWxsIGNhbiBiZSBjaGFpbmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkFyYyNzZXRTdGFydEFuZ2xlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0IHRoZSBzdGFydGluZyBhbmdsZSB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRTdGFydEFuZ2xlOiBmdW5jdGlvbiAoYW5nbGUsIGFudGljbG9ja3dpc2UpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fc3RhcnRBbmdsZSA9IGFuZ2xlO1xyXG5cclxuICAgICAgICBpZiAoYW50aWNsb2Nrd2lzZSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVEYXRhKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgZW5kaW5nIGFuZ2xlIG9mIHRoZSBhcmMsIGluIGRlZ3JlZXMuXHJcbiAgICAgKiBUaGlzIGNhbGwgY2FuIGJlIGNoYWluZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQXJjI3NldEVuZEFuZ2xlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0IHRoZSBlbmRpbmcgYW5nbGUgdG8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0RW5kQW5nbGU6IGZ1bmN0aW9uIChhbmdsZSwgYW50aWNsb2Nrd2lzZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9lbmRBbmdsZSA9IGFuZ2xlO1xyXG5cclxuICAgICAgICBpZiAoYW50aWNsb2Nrd2lzZSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVEYXRhKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRoYXQgdXBkYXRlcyB0aGUgZGF0YSBhbmQgcGF0aCB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQXJjI3VwZGF0ZURhdGFcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlRGF0YTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgc3RlcCA9IHRoaXMuX2l0ZXJhdGlvbnM7XHJcbiAgICAgICAgdmFyIGl0ZXJhdGlvbiA9IHN0ZXA7XHJcblxyXG4gICAgICAgIHZhciByYWRpdXMgPSB0aGlzLmdlb20ucmFkaXVzO1xyXG4gICAgICAgIHZhciBzdGFydEFuZ2xlID0gRGVnVG9SYWQodGhpcy5fc3RhcnRBbmdsZSk7XHJcbiAgICAgICAgdmFyIGVuZEFuZ2xlID0gRGVnVG9SYWQodGhpcy5fZW5kQW5nbGUpO1xyXG4gICAgICAgIHZhciBhbnRpY2xvY2t3aXNlID0gdGhpcy5fYW50aWNsb2Nrd2lzZTtcclxuXHJcbiAgICAgICAgdmFyIHggPSByYWRpdXM7XHJcbiAgICAgICAgdmFyIHkgPSByYWRpdXM7XHJcblxyXG4gICAgICAgIGVuZEFuZ2xlIC09IHN0YXJ0QW5nbGU7XHJcblxyXG4gICAgICAgIGlmIChhbnRpY2xvY2t3aXNlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGVuZEFuZ2xlIDwgLU1BVEhfQ09OU1QuUEkyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBlbmRBbmdsZSA9IC1NQVRIX0NPTlNULlBJMjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChlbmRBbmdsZSA+IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGVuZEFuZ2xlID0gLU1BVEhfQ09OU1QuUEkyICsgZW5kQW5nbGUgJSBNQVRIX0NPTlNULlBJMjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlbmRBbmdsZSA+IE1BVEhfQ09OU1QuUEkyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZW5kQW5nbGUgPSBNQVRIX0NPTlNULlBJMjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZW5kQW5nbGUgPCAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZW5kQW5nbGUgPSBNQVRIX0NPTlNULlBJMiArIGVuZEFuZ2xlICUgTUFUSF9DT05TVC5QSTI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcGF0aCA9IFsgeCArIE1hdGguY29zKHN0YXJ0QW5nbGUpICogcmFkaXVzLCB5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXMgXTtcclxuXHJcbiAgICAgICAgdmFyIHRhO1xyXG5cclxuICAgICAgICB3aGlsZSAoaXRlcmF0aW9uIDwgMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRhID0gZW5kQW5nbGUgKiBpdGVyYXRpb24gKyBzdGFydEFuZ2xlO1xyXG5cclxuICAgICAgICAgICAgcGF0aC5wdXNoKHggKyBNYXRoLmNvcyh0YSkgKiByYWRpdXMsIHkgKyBNYXRoLnNpbih0YSkgKiByYWRpdXMpO1xyXG5cclxuICAgICAgICAgICAgaXRlcmF0aW9uICs9IHN0ZXA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0YSA9IGVuZEFuZ2xlICsgc3RhcnRBbmdsZTtcclxuXHJcbiAgICAgICAgcGF0aC5wdXNoKHggKyBNYXRoLmNvcyh0YSkgKiByYWRpdXMsIHkgKyBNYXRoLnNpbih0YSkgKiByYWRpdXMpO1xyXG5cclxuICAgICAgICBwYXRoLnB1c2goeCArIE1hdGguY29zKHN0YXJ0QW5nbGUpICogcmFkaXVzLCB5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXMpO1xyXG5cclxuICAgICAgICB0aGlzLnBhdGhJbmRleGVzID0gRWFyY3V0KHBhdGgpO1xyXG4gICAgICAgIHRoaXMucGF0aERhdGEgPSBwYXRoO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBcmM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/arc/Arc.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/arc/ArcCanvasRenderer.js":
/*!****************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/arc/ArcCanvasRenderer.js ***!
\****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar DegToRad = __webpack_require__(/*! ../../../math/DegToRad */ \"./node_modules/phaser/src/math/DegToRad.js\");\r\nvar FillStyleCanvas = __webpack_require__(/*! ../FillStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js\");\r\nvar LineStyleCanvas = __webpack_require__(/*! ../LineStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/LineStyleCanvas.js\");\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Arc#renderCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Arc} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar ArcCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var ctx = renderer.currentContext;\r\n\r\n if (SetTransform(renderer, ctx, src, camera, parentMatrix))\r\n {\r\n var radius = src.radius;\r\n\r\n ctx.beginPath();\r\n\r\n ctx.arc(\r\n (radius) - src.originX * (radius * 2),\r\n (radius) - src.originY * (radius * 2),\r\n radius,\r\n DegToRad(src._startAngle),\r\n DegToRad(src._endAngle),\r\n src.anticlockwise\r\n );\r\n\r\n if (src.closePath)\r\n {\r\n ctx.closePath();\r\n }\r\n\r\n if (src.isFilled)\r\n {\r\n FillStyleCanvas(ctx, src);\r\n\r\n ctx.fill();\r\n }\r\n\r\n if (src.isStroked)\r\n {\r\n LineStyleCanvas(ctx, src);\r\n\r\n ctx.stroke();\r\n }\r\n\r\n // Restore the context saved in SetTransform\r\n ctx.restore();\r\n }\r\n};\r\n\r\nmodule.exports = ArcCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9hcmMvQXJjQ2FudmFzUmVuZGVyZXIuanM/ZTRjMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLDBFQUF3QjtBQUMvQyxzQkFBc0IsbUJBQU8sQ0FBQywwRkFBb0I7QUFDbEQsc0JBQXNCLG1CQUFPLENBQUMsMEZBQW9CO0FBQ2xELG1CQUFtQixtQkFBTyxDQUFDLG9IQUE2Qzs7QUFFeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVyx1QkFBdUI7QUFDbEMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvYXJjL0FyY0NhbnZhc1JlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgRGVnVG9SYWQgPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoL0RlZ1RvUmFkJyk7XHJcbnZhciBGaWxsU3R5bGVDYW52YXMgPSByZXF1aXJlKCcuLi9GaWxsU3R5bGVDYW52YXMnKTtcclxudmFyIExpbmVTdHlsZUNhbnZhcyA9IHJlcXVpcmUoJy4uL0xpbmVTdHlsZUNhbnZhcycpO1xyXG52YXIgU2V0VHJhbnNmb3JtID0gcmVxdWlyZSgnLi4vLi4vLi4vcmVuZGVyZXIvY2FudmFzL3V0aWxzL1NldFRyYW5zZm9ybScpO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBDYW52YXMgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5BcmMjcmVuZGVyQ2FudmFzXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBDYW52YXMgcmVuZGVyZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkFyY30gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIEFyY0NhbnZhc1JlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgdmFyIGN0eCA9IHJlbmRlcmVyLmN1cnJlbnRDb250ZXh0O1xyXG5cclxuICAgIGlmIChTZXRUcmFuc2Zvcm0ocmVuZGVyZXIsIGN0eCwgc3JjLCBjYW1lcmEsIHBhcmVudE1hdHJpeCkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHJhZGl1cyA9IHNyYy5yYWRpdXM7XHJcblxyXG4gICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuXHJcbiAgICAgICAgY3R4LmFyYyhcclxuICAgICAgICAgICAgKHJhZGl1cykgLSBzcmMub3JpZ2luWCAqIChyYWRpdXMgKiAyKSxcclxuICAgICAgICAgICAgKHJhZGl1cykgLSBzcmMub3JpZ2luWSAqIChyYWRpdXMgKiAyKSxcclxuICAgICAgICAgICAgcmFkaXVzLFxyXG4gICAgICAgICAgICBEZWdUb1JhZChzcmMuX3N0YXJ0QW5nbGUpLFxyXG4gICAgICAgICAgICBEZWdUb1JhZChzcmMuX2VuZEFuZ2xlKSxcclxuICAgICAgICAgICAgc3JjLmFudGljbG9ja3dpc2VcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoc3JjLmNsb3NlUGF0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzcmMuaXNGaWxsZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBGaWxsU3R5bGVDYW52YXMoY3R4LCBzcmMpO1xyXG5cclxuICAgICAgICAgICAgY3R4LmZpbGwoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzcmMuaXNTdHJva2VkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgTGluZVN0eWxlQ2FudmFzKGN0eCwgc3JjKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5zdHJva2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBSZXN0b3JlIHRoZSBjb250ZXh0IHNhdmVkIGluIFNldFRyYW5zZm9ybVxyXG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEFyY0NhbnZhc1JlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/arc/ArcCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/arc/ArcFactory.js":
/*!*********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/arc/ArcFactory.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Arc = __webpack_require__(/*! ./Arc */ \"./node_modules/phaser/src/gameobjects/shape/arc/Arc.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Arc Shape Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Arc Game Object has been built into Phaser.\r\n * \r\n * The Arc Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * When it renders it displays an arc shape. You can control the start and end angles of the arc,\r\n * as well as if the angles are winding clockwise or anti-clockwise. With the default settings\r\n * it renders as a complete circle. By changing the angles you can create other arc shapes,\r\n * such as half-circles.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#arc\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [radius=128] - The radius of the arc.\r\n * @param {integer} [startAngle=0] - The start angle of the arc, in degrees.\r\n * @param {integer} [endAngle=360] - The end angle of the arc, in degrees.\r\n * @param {boolean} [anticlockwise=false] - The winding order of the start and end angles.\r\n * @param {number} [fillColor] - The color the arc will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the arc will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n *\r\n * @return {Phaser.GameObjects.Arc} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('arc', function (x, y, radius, startAngle, endAngle, anticlockwise, fillColor, fillAlpha)\r\n{\r\n return this.displayList.add(new Arc(this.scene, x, y, radius, startAngle, endAngle, anticlockwise, fillColor, fillAlpha));\r\n});\r\n\r\n/**\r\n * Creates a new Circle Shape Game Object and adds it to the Scene.\r\n * \r\n * A Circle is an Arc with no defined start and end angle, making it render as a complete circle.\r\n *\r\n * Note: This method will only be available if the Arc Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#circle\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [radius=128] - The radius of the circle.\r\n * @param {number} [fillColor] - The color the circle will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the circle will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n *\r\n * @return {Phaser.GameObjects.Arc} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('circle', function (x, y, radius, fillColor, fillAlpha)\r\n{\r\n return this.displayList.add(new Arc(this.scene, x, y, radius, 0, 360, false, fillColor, fillAlpha));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9hcmMvQXJjRmFjdG9yeS5qcz9mNzU1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxVQUFVLG1CQUFPLENBQUMscUVBQU87QUFDekIsd0JBQXdCLG1CQUFPLENBQUMsMkZBQXlCOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksdUJBQXVCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHVCQUF1QjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9hcmMvQXJjRmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEFyYyA9IHJlcXVpcmUoJy4vQXJjJyk7XHJcbnZhciBHYW1lT2JqZWN0RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uL0dhbWVPYmplY3RGYWN0b3J5Jyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBBcmMgU2hhcGUgR2FtZSBPYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIFNjZW5lLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBBcmMgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIFxyXG4gKiBUaGUgQXJjIFNoYXBlIGlzIGEgR2FtZSBPYmplY3QgdGhhdCBjYW4gYmUgYWRkZWQgdG8gYSBTY2VuZSwgR3JvdXAgb3IgQ29udGFpbmVyLiBZb3UgY2FuXHJcbiAqIHRyZWF0IGl0IGxpa2UgYW55IG90aGVyIEdhbWUgT2JqZWN0IGluIHlvdXIgZ2FtZSwgc3VjaCBhcyB0d2VlbmluZyBpdCwgc2NhbGluZyBpdCwgb3IgZW5hYmxpbmdcclxuICogaXQgZm9yIGlucHV0IG9yIHBoeXNpY3MuIEl0IHByb3ZpZGVzIGEgcXVpY2sgYW5kIGVhc3kgd2F5IGZvciB5b3UgdG8gcmVuZGVyIHRoaXMgc2hhcGUgaW4geW91clxyXG4gKiBnYW1lIHdpdGhvdXQgdXNpbmcgYSB0ZXh0dXJlLCB3aGlsZSBzdGlsbCB0YWtpbmcgYWR2YW50YWdlIG9mIGJlaW5nIGZ1bGx5IGJhdGNoZWQgaW4gV2ViR0wuXHJcbiAqIFxyXG4gKiBUaGlzIHNoYXBlIHN1cHBvcnRzIGJvdGggZmlsbCBhbmQgc3Ryb2tlIGNvbG9ycy5cclxuICogXHJcbiAqIFdoZW4gaXQgcmVuZGVycyBpdCBkaXNwbGF5cyBhbiBhcmMgc2hhcGUuIFlvdSBjYW4gY29udHJvbCB0aGUgc3RhcnQgYW5kIGVuZCBhbmdsZXMgb2YgdGhlIGFyYyxcclxuICogYXMgd2VsbCBhcyBpZiB0aGUgYW5nbGVzIGFyZSB3aW5kaW5nIGNsb2Nrd2lzZSBvciBhbnRpLWNsb2Nrd2lzZS4gV2l0aCB0aGUgZGVmYXVsdCBzZXR0aW5nc1xyXG4gKiBpdCByZW5kZXJzIGFzIGEgY29tcGxldGUgY2lyY2xlLiBCeSBjaGFuZ2luZyB0aGUgYW5nbGVzIHlvdSBjYW4gY3JlYXRlIG90aGVyIGFyYyBzaGFwZXMsXHJcbiAqIHN1Y2ggYXMgaGFsZi1jaXJjbGVzLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0RmFjdG9yeSNhcmNcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3JhZGl1cz0xMjhdIC0gVGhlIHJhZGl1cyBvZiB0aGUgYXJjLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtzdGFydEFuZ2xlPTBdIC0gVGhlIHN0YXJ0IGFuZ2xlIG9mIHRoZSBhcmMsIGluIGRlZ3JlZXMuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2VuZEFuZ2xlPTM2MF0gLSBUaGUgZW5kIGFuZ2xlIG9mIHRoZSBhcmMsIGluIGRlZ3JlZXMuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FudGljbG9ja3dpc2U9ZmFsc2VdIC0gVGhlIHdpbmRpbmcgb3JkZXIgb2YgdGhlIHN0YXJ0IGFuZCBlbmQgYW5nbGVzLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxDb2xvcl0gLSBUaGUgY29sb3IgdGhlIGFyYyB3aWxsIGJlIGZpbGxlZCB3aXRoLCBpLmUuIDB4ZmYwMDAwIGZvciByZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbEFscGhhXSAtIFRoZSBhbHBoYSB0aGUgYXJjIHdpbGwgYmUgZmlsbGVkIHdpdGguIFlvdSBjYW4gYWxzbyBzZXQgdGhlIGFscGhhIG9mIHRoZSBvdmVyYWxsIFNoYXBlIHVzaW5nIGl0cyBgYWxwaGFgIHByb3BlcnR5LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQXJjfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RGYWN0b3J5LnJlZ2lzdGVyKCdhcmMnLCBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYW50aWNsb2Nrd2lzZSwgZmlsbENvbG9yLCBmaWxsQWxwaGEpXHJcbntcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXlMaXN0LmFkZChuZXcgQXJjKHRoaXMuc2NlbmUsIHgsIHksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UsIGZpbGxDb2xvciwgZmlsbEFscGhhKSk7XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgQ2lyY2xlIFNoYXBlIEdhbWUgT2JqZWN0IGFuZCBhZGRzIGl0IHRvIHRoZSBTY2VuZS5cclxuICogXHJcbiAqIEEgQ2lyY2xlIGlzIGFuIEFyYyB3aXRoIG5vIGRlZmluZWQgc3RhcnQgYW5kIGVuZCBhbmdsZSwgbWFraW5nIGl0IHJlbmRlciBhcyBhIGNvbXBsZXRlIGNpcmNsZS5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgQXJjIEdhbWUgT2JqZWN0IGhhcyBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0RmFjdG9yeSNjaXJjbGVcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3JhZGl1cz0xMjhdIC0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxDb2xvcl0gLSBUaGUgY29sb3IgdGhlIGNpcmNsZSB3aWxsIGJlIGZpbGxlZCB3aXRoLCBpLmUuIDB4ZmYwMDAwIGZvciByZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbEFscGhhXSAtIFRoZSBhbHBoYSB0aGUgY2lyY2xlIHdpbGwgYmUgZmlsbGVkIHdpdGguIFlvdSBjYW4gYWxzbyBzZXQgdGhlIGFscGhhIG9mIHRoZSBvdmVyYWxsIFNoYXBlIHVzaW5nIGl0cyBgYWxwaGFgIHByb3BlcnR5LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuQXJjfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RGYWN0b3J5LnJlZ2lzdGVyKCdjaXJjbGUnLCBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSlcclxue1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheUxpc3QuYWRkKG5ldyBBcmModGhpcy5zY2VuZSwgeCwgeSwgcmFkaXVzLCAwLCAzNjAsIGZhbHNlLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSkpO1xyXG59KTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/arc/ArcFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/arc/ArcRender.js":
/*!********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/arc/ArcRender.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./ArcWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/shape/arc/ArcWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./ArcCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/shape/arc/ArcCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9hcmMvQXJjUmVuZGVyLmpzP2ZlNDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLG9FQUFxQjtBQUMvQyxtQkFBbUIsbUJBQU8sQ0FBQyxvRUFBcUI7O0FBRWhELElBQUksSUFBcUI7QUFDekI7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQywrRkFBb0I7QUFDOUM7O0FBRUEsSUFBSSxJQUFzQjtBQUMxQjtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLGlHQUFxQjtBQUNoRDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvYXJjL0FyY1JlbmRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG52YXIgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG5cclxuaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuL0FyY1dlYkdMUmVuZGVyZXInKTtcclxufVxyXG5cclxuaWYgKHR5cGVvZiBDQU5WQVNfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4vQXJjQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/arc/ArcRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/arc/ArcWebGLRenderer.js":
/*!***************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/arc/ArcWebGLRenderer.js ***!
\***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillPathWebGL = __webpack_require__(/*! ../FillPathWebGL */ \"./node_modules/phaser/src/gameobjects/shape/FillPathWebGL.js\");\r\nvar StrokePathWebGL = __webpack_require__(/*! ../StrokePathWebGL */ \"./node_modules/phaser/src/gameobjects/shape/StrokePathWebGL.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Arc#renderWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Arc} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar ArcWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var pipeline = this.pipeline;\r\n\r\n var camMatrix = pipeline._tempMatrix1;\r\n var shapeMatrix = pipeline._tempMatrix2;\r\n var calcMatrix = pipeline._tempMatrix3;\r\n\r\n renderer.setPipeline(pipeline);\r\n\r\n shapeMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n camMatrix.copyFrom(camera.matrix);\r\n\r\n if (parentMatrix)\r\n {\r\n // Multiply the camera by the parent matrix\r\n camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n // Undo the camera scroll\r\n shapeMatrix.e = src.x;\r\n shapeMatrix.f = src.y;\r\n }\r\n else\r\n {\r\n shapeMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n shapeMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n }\r\n\r\n camMatrix.multiply(shapeMatrix, calcMatrix);\r\n\r\n var dx = src._displayOriginX;\r\n var dy = src._displayOriginY;\r\n\r\n var alpha = camera.alpha * src.alpha;\r\n\r\n if (src.isFilled)\r\n {\r\n FillPathWebGL(pipeline, calcMatrix, src, alpha, dx, dy);\r\n }\r\n\r\n if (src.isStroked)\r\n {\r\n StrokePathWebGL(pipeline, src, alpha, dx, dy);\r\n }\r\n};\r\n\r\nmodule.exports = ArcWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9hcmMvQXJjV2ViR0xSZW5kZXJlci5qcz9hY2E4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxzRkFBa0I7QUFDOUMsc0JBQXNCLG1CQUFPLENBQUMsMEZBQW9COztBQUVsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9DQUFvQztBQUMvQyxXQUFXLHVCQUF1QjtBQUNsQyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9hcmMvQXJjV2ViR0xSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEZpbGxQYXRoV2ViR0wgPSByZXF1aXJlKCcuLi9GaWxsUGF0aFdlYkdMJyk7XHJcbnZhciBTdHJva2VQYXRoV2ViR0wgPSByZXF1aXJlKCcuLi9TdHJva2VQYXRoV2ViR0wnKTtcclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5BcmMjcmVuZGVyV2ViR0xcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBXZWJHTCByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQXJjfSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgQXJjV2ViR0xSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHZhciBwaXBlbGluZSA9IHRoaXMucGlwZWxpbmU7XHJcblxyXG4gICAgdmFyIGNhbU1hdHJpeCA9IHBpcGVsaW5lLl90ZW1wTWF0cml4MTtcclxuICAgIHZhciBzaGFwZU1hdHJpeCA9IHBpcGVsaW5lLl90ZW1wTWF0cml4MjtcclxuICAgIHZhciBjYWxjTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgzO1xyXG5cclxuICAgIHJlbmRlcmVyLnNldFBpcGVsaW5lKHBpcGVsaW5lKTtcclxuXHJcbiAgICBzaGFwZU1hdHJpeC5hcHBseUlUUlMoc3JjLngsIHNyYy55LCBzcmMucm90YXRpb24sIHNyYy5zY2FsZVgsIHNyYy5zY2FsZVkpO1xyXG5cclxuICAgIGNhbU1hdHJpeC5jb3B5RnJvbShjYW1lcmEubWF0cml4KTtcclxuXHJcbiAgICBpZiAocGFyZW50TWF0cml4KVxyXG4gICAge1xyXG4gICAgICAgIC8vICBNdWx0aXBseSB0aGUgY2FtZXJhIGJ5IHRoZSBwYXJlbnQgbWF0cml4XHJcbiAgICAgICAgY2FtTWF0cml4Lm11bHRpcGx5V2l0aE9mZnNldChwYXJlbnRNYXRyaXgsIC1jYW1lcmEuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYLCAtY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWSk7XHJcblxyXG4gICAgICAgIC8vICBVbmRvIHRoZSBjYW1lcmEgc2Nyb2xsXHJcbiAgICAgICAgc2hhcGVNYXRyaXguZSA9IHNyYy54O1xyXG4gICAgICAgIHNoYXBlTWF0cml4LmYgPSBzcmMueTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBzaGFwZU1hdHJpeC5lIC09IGNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3Rvclg7XHJcbiAgICAgICAgc2hhcGVNYXRyaXguZiAtPSBjYW1lcmEuc2Nyb2xsWSAqIHNyYy5zY3JvbGxGYWN0b3JZO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbU1hdHJpeC5tdWx0aXBseShzaGFwZU1hdHJpeCwgY2FsY01hdHJpeCk7XHJcblxyXG4gICAgdmFyIGR4ID0gc3JjLl9kaXNwbGF5T3JpZ2luWDtcclxuICAgIHZhciBkeSA9IHNyYy5fZGlzcGxheU9yaWdpblk7XHJcblxyXG4gICAgdmFyIGFscGhhID0gY2FtZXJhLmFscGhhICogc3JjLmFscGhhO1xyXG5cclxuICAgIGlmIChzcmMuaXNGaWxsZWQpXHJcbiAgICB7XHJcbiAgICAgICAgRmlsbFBhdGhXZWJHTChwaXBlbGluZSwgY2FsY01hdHJpeCwgc3JjLCBhbHBoYSwgZHgsIGR5KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3JjLmlzU3Ryb2tlZClcclxuICAgIHtcclxuICAgICAgICBTdHJva2VQYXRoV2ViR0wocGlwZWxpbmUsIHNyYywgYWxwaGEsIGR4LCBkeSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEFyY1dlYkdMUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/arc/ArcWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/curve/Curve.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/curve/Curve.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CurveRender = __webpack_require__(/*! ./CurveRender */ \"./node_modules/phaser/src/gameobjects/shape/curve/CurveRender.js\");\r\nvar Earcut = __webpack_require__(/*! ../../../geom/polygon/Earcut */ \"./node_modules/phaser/src/geom/polygon/Earcut.js\");\r\nvar Rectangle = __webpack_require__(/*! ../../../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar Shape = __webpack_require__(/*! ../Shape */ \"./node_modules/phaser/src/gameobjects/shape/Shape.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Curve Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * To render a Curve Shape you must first create a `Phaser.Curves.Curve` object, then pass it to\r\n * the Curve Shape in the constructor.\r\n * \r\n * The Curve shape also has a `smoothness` property and corresponding `setSmoothness` method.\r\n * This allows you to control how smooth the shape renders in WebGL, by controlling the number of iterations\r\n * that take place during construction. Increase and decrease the default value for smoother, or more\r\n * jagged, shapes.\r\n *\r\n * @class Curve\r\n * @extends Phaser.GameObjects.Shape\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {Phaser.Curves.Curve} [curve] - The Curve object to use to create the Shape.\r\n * @param {number} [fillColor] - The color the curve will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the curve will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n */\r\nvar Curve = new Class({\r\n\r\n Extends: Shape,\r\n\r\n Mixins: [\r\n CurveRender\r\n ],\r\n\r\n initialize:\r\n\r\n function Curve (scene, x, y, curve, fillColor, fillAlpha)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n\r\n Shape.call(this, scene, 'Curve', curve);\r\n\r\n /**\r\n * Private internal value.\r\n * The number of points used to draw the curve. Higher values create smoother renders at the cost of more triangles being drawn.\r\n *\r\n * @name Phaser.GameObjects.Curve#_smoothness\r\n * @type {integer}\r\n * @private\r\n * @since 3.13.0\r\n */\r\n this._smoothness = 32;\r\n\r\n /**\r\n * Private internal value.\r\n * The Curve bounds rectangle.\r\n *\r\n * @name Phaser.GameObjects.Curve#_curveBounds\r\n * @type {Phaser.Geom.Rectangle}\r\n * @private\r\n * @since 3.13.0\r\n */\r\n this._curveBounds = new Rectangle();\r\n\r\n this.closePath = false;\r\n\r\n this.setPosition(x, y);\r\n\r\n if (fillColor !== undefined)\r\n {\r\n this.setFillStyle(fillColor, fillAlpha);\r\n }\r\n\r\n this.updateData();\r\n },\r\n\r\n /**\r\n * The smoothness of the curve. The number of points used when rendering it.\r\n * Increase this value for smoother curves, at the cost of more polygons being rendered.\r\n *\r\n * @name Phaser.GameObjects.Curve#smoothness\r\n * @type {integer}\r\n * @default 32\r\n * @since 3.13.0\r\n */\r\n smoothness: {\r\n\r\n get: function ()\r\n {\r\n return this._smoothness;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._smoothness = value;\r\n\r\n this.updateData();\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Sets the smoothness of the curve. The number of points used when rendering it.\r\n * Increase this value for smoother curves, at the cost of more polygons being rendered.\r\n * This call can be chained.\r\n *\r\n * @method Phaser.GameObjects.Curve#setSmoothness\r\n * @since 3.13.0\r\n * \r\n * @param {integer} value - The value to set the smoothness to.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setSmoothness: function (value)\r\n {\r\n this._smoothness = value;\r\n\r\n return this.updateData();\r\n },\r\n\r\n /**\r\n * Internal method that updates the data and path values.\r\n *\r\n * @method Phaser.GameObjects.Curve#updateData\r\n * @private\r\n * @since 3.13.0\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n updateData: function ()\r\n {\r\n var bounds = this._curveBounds;\r\n var smoothness = this._smoothness;\r\n\r\n // Update the bounds in case the underlying data has changed\r\n this.geom.getBounds(bounds, smoothness);\r\n\r\n this.setSize(bounds.width, bounds.height);\r\n this.updateDisplayOrigin();\r\n\r\n var path = [];\r\n var points = this.geom.getPoints(smoothness);\r\n\r\n for (var i = 0; i < points.length; i++)\r\n {\r\n path.push(points[i].x, points[i].y);\r\n }\r\n\r\n path.push(points[0].x, points[0].y);\r\n\r\n this.pathIndexes = Earcut(path);\r\n this.pathData = path;\r\n\r\n return this;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Curve;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9jdXJ2ZS9DdXJ2ZS5qcz80OTk2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsc0VBQXNCO0FBQzFDLGtCQUFrQixtQkFBTyxDQUFDLHVGQUFlO0FBQ3pDLGFBQWEsbUJBQU8sQ0FBQyxzRkFBOEI7QUFDbkQsZ0JBQWdCLG1CQUFPLENBQUMsZ0dBQW1DO0FBQzNELFlBQVksbUJBQU8sQ0FBQyxzRUFBVTs7QUFFOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvY3VydmUvQ3VydmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDdXJ2ZVJlbmRlciA9IHJlcXVpcmUoJy4vQ3VydmVSZW5kZXInKTtcclxudmFyIEVhcmN1dCA9IHJlcXVpcmUoJy4uLy4uLy4uL2dlb20vcG9seWdvbi9FYXJjdXQnKTtcclxudmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4uLy4uLy4uL2dlb20vcmVjdGFuZ2xlL1JlY3RhbmdsZScpO1xyXG52YXIgU2hhcGUgPSByZXF1aXJlKCcuLi9TaGFwZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIEN1cnZlIFNoYXBlIGlzIGEgR2FtZSBPYmplY3QgdGhhdCBjYW4gYmUgYWRkZWQgdG8gYSBTY2VuZSwgR3JvdXAgb3IgQ29udGFpbmVyLiBZb3UgY2FuXHJcbiAqIHRyZWF0IGl0IGxpa2UgYW55IG90aGVyIEdhbWUgT2JqZWN0IGluIHlvdXIgZ2FtZSwgc3VjaCBhcyB0d2VlbmluZyBpdCwgc2NhbGluZyBpdCwgb3IgZW5hYmxpbmdcclxuICogaXQgZm9yIGlucHV0IG9yIHBoeXNpY3MuIEl0IHByb3ZpZGVzIGEgcXVpY2sgYW5kIGVhc3kgd2F5IGZvciB5b3UgdG8gcmVuZGVyIHRoaXMgc2hhcGUgaW4geW91clxyXG4gKiBnYW1lIHdpdGhvdXQgdXNpbmcgYSB0ZXh0dXJlLCB3aGlsZSBzdGlsbCB0YWtpbmcgYWR2YW50YWdlIG9mIGJlaW5nIGZ1bGx5IGJhdGNoZWQgaW4gV2ViR0wuXHJcbiAqIFxyXG4gKiBUaGlzIHNoYXBlIHN1cHBvcnRzIGJvdGggZmlsbCBhbmQgc3Ryb2tlIGNvbG9ycy5cclxuICogXHJcbiAqIFRvIHJlbmRlciBhIEN1cnZlIFNoYXBlIHlvdSBtdXN0IGZpcnN0IGNyZWF0ZSBhIGBQaGFzZXIuQ3VydmVzLkN1cnZlYCBvYmplY3QsIHRoZW4gcGFzcyBpdCB0b1xyXG4gKiB0aGUgQ3VydmUgU2hhcGUgaW4gdGhlIGNvbnN0cnVjdG9yLlxyXG4gKiBcclxuICogVGhlIEN1cnZlIHNoYXBlIGFsc28gaGFzIGEgYHNtb290aG5lc3NgIHByb3BlcnR5IGFuZCBjb3JyZXNwb25kaW5nIGBzZXRTbW9vdGhuZXNzYCBtZXRob2QuXHJcbiAqIFRoaXMgYWxsb3dzIHlvdSB0byBjb250cm9sIGhvdyBzbW9vdGggdGhlIHNoYXBlIHJlbmRlcnMgaW4gV2ViR0wsIGJ5IGNvbnRyb2xsaW5nIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9uc1xyXG4gKiB0aGF0IHRha2UgcGxhY2UgZHVyaW5nIGNvbnN0cnVjdGlvbi4gSW5jcmVhc2UgYW5kIGRlY3JlYXNlIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBzbW9vdGhlciwgb3IgbW9yZVxyXG4gKiBqYWdnZWQsIHNoYXBlcy5cclxuICpcclxuICogQGNsYXNzIEN1cnZlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFwZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuIEEgR2FtZSBPYmplY3QgY2FuIG9ubHkgYmVsb25nIHRvIG9uZSBTY2VuZSBhdCBhIHRpbWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkN1cnZlcy5DdXJ2ZX0gW2N1cnZlXSAtIFRoZSBDdXJ2ZSBvYmplY3QgdG8gdXNlIHRvIGNyZWF0ZSB0aGUgU2hhcGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbENvbG9yXSAtIFRoZSBjb2xvciB0aGUgY3VydmUgd2lsbCBiZSBmaWxsZWQgd2l0aCwgaS5lLiAweGZmMDAwMCBmb3IgcmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxBbHBoYV0gLSBUaGUgYWxwaGEgdGhlIGN1cnZlIHdpbGwgYmUgZmlsbGVkIHdpdGguIFlvdSBjYW4gYWxzbyBzZXQgdGhlIGFscGhhIG9mIHRoZSBvdmVyYWxsIFNoYXBlIHVzaW5nIGl0cyBgYWxwaGFgIHByb3BlcnR5LlxyXG4gKi9cclxudmFyIEN1cnZlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBTaGFwZSxcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBDdXJ2ZVJlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEN1cnZlIChzY2VuZSwgeCwgeSwgY3VydmUsIGZpbGxDb2xvciwgZmlsbEFscGhhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcblxyXG4gICAgICAgIFNoYXBlLmNhbGwodGhpcywgc2NlbmUsICdDdXJ2ZScsIGN1cnZlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS5cclxuICAgICAgICAgKiBUaGUgbnVtYmVyIG9mIHBvaW50cyB1c2VkIHRvIGRyYXcgdGhlIGN1cnZlLiBIaWdoZXIgdmFsdWVzIGNyZWF0ZSBzbW9vdGhlciByZW5kZXJzIGF0IHRoZSBjb3N0IG9mIG1vcmUgdHJpYW5nbGVzIGJlaW5nIGRyYXduLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkN1cnZlI19zbW9vdGhuZXNzXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fc21vb3RobmVzcyA9IDMyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQcml2YXRlIGludGVybmFsIHZhbHVlLlxyXG4gICAgICAgICAqIFRoZSBDdXJ2ZSBib3VuZHMgcmVjdGFuZ2xlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkN1cnZlI19jdXJ2ZUJvdW5kc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fY3VydmVCb3VuZHMgPSBuZXcgUmVjdGFuZ2xlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2VQYXRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24oeCwgeSk7XHJcblxyXG4gICAgICAgIGlmIChmaWxsQ29sb3IgIT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsbFN0eWxlKGZpbGxDb2xvciwgZmlsbEFscGhhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlRGF0YSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzbW9vdGhuZXNzIG9mIHRoZSBjdXJ2ZS4gVGhlIG51bWJlciBvZiBwb2ludHMgdXNlZCB3aGVuIHJlbmRlcmluZyBpdC5cclxuICAgICAqIEluY3JlYXNlIHRoaXMgdmFsdWUgZm9yIHNtb290aGVyIGN1cnZlcywgYXQgdGhlIGNvc3Qgb2YgbW9yZSBwb2x5Z29ucyBiZWluZyByZW5kZXJlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuQ3VydmUjc21vb3RobmVzc1xyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCAzMlxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICovXHJcbiAgICBzbW9vdGhuZXNzOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zbW9vdGhuZXNzO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fc21vb3RobmVzcyA9IHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBzbW9vdGhuZXNzIG9mIHRoZSBjdXJ2ZS4gVGhlIG51bWJlciBvZiBwb2ludHMgdXNlZCB3aGVuIHJlbmRlcmluZyBpdC5cclxuICAgICAqIEluY3JlYXNlIHRoaXMgdmFsdWUgZm9yIHNtb290aGVyIGN1cnZlcywgYXQgdGhlIGNvc3Qgb2YgbW9yZSBwb2x5Z29ucyBiZWluZyByZW5kZXJlZC5cclxuICAgICAqIFRoaXMgY2FsbCBjYW4gYmUgY2hhaW5lZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5DdXJ2ZSNzZXRTbW9vdGhuZXNzXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0IHRoZSBzbW9vdGhuZXNzIHRvLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFNtb290aG5lc3M6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9zbW9vdGhuZXNzID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZURhdGEoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdGhhdCB1cGRhdGVzIHRoZSBkYXRhIGFuZCBwYXRoIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5DdXJ2ZSN1cGRhdGVEYXRhXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZURhdGE6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2N1cnZlQm91bmRzO1xyXG4gICAgICAgIHZhciBzbW9vdGhuZXNzID0gdGhpcy5fc21vb3RobmVzcztcclxuXHJcbiAgICAgICAgLy8gIFVwZGF0ZSB0aGUgYm91bmRzIGluIGNhc2UgdGhlIHVuZGVybHlpbmcgZGF0YSBoYXMgY2hhbmdlZFxyXG4gICAgICAgIHRoaXMuZ2VvbS5nZXRCb3VuZHMoYm91bmRzLCBzbW9vdGhuZXNzKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTaXplKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5T3JpZ2luKCk7XHJcblxyXG4gICAgICAgIHZhciBwYXRoID0gW107XHJcbiAgICAgICAgdmFyIHBvaW50cyA9IHRoaXMuZ2VvbS5nZXRQb2ludHMoc21vb3RobmVzcyk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcGF0aC5wdXNoKHBvaW50c1tpXS54LCBwb2ludHNbaV0ueSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwYXRoLnB1c2gocG9pbnRzWzBdLngsIHBvaW50c1swXS55KTtcclxuXHJcbiAgICAgICAgdGhpcy5wYXRoSW5kZXhlcyA9IEVhcmN1dChwYXRoKTtcclxuICAgICAgICB0aGlzLnBhdGhEYXRhID0gcGF0aDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ3VydmU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/curve/Curve.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/curve/CurveCanvasRenderer.js":
/*!********************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/curve/CurveCanvasRenderer.js ***!
\********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillStyleCanvas = __webpack_require__(/*! ../FillStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js\");\r\nvar LineStyleCanvas = __webpack_require__(/*! ../LineStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/LineStyleCanvas.js\");\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Curve#renderCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Curve} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar CurveCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var ctx = renderer.currentContext;\r\n\r\n if (SetTransform(renderer, ctx, src, camera, parentMatrix))\r\n {\r\n var dx = src._displayOriginX + src._curveBounds.x;\r\n var dy = src._displayOriginY + src._curveBounds.y;\r\n \r\n var path = src.pathData;\r\n var pathLength = path.length - 1;\r\n \r\n var px1 = path[0] - dx;\r\n var py1 = path[1] - dy;\r\n\r\n ctx.beginPath();\r\n\r\n ctx.moveTo(px1, py1);\r\n \r\n if (!src.closePath)\r\n {\r\n pathLength -= 2;\r\n }\r\n \r\n for (var i = 2; i < pathLength; i += 2)\r\n {\r\n var px2 = path[i] - dx;\r\n var py2 = path[i + 1] - dy;\r\n \r\n ctx.lineTo(px2, py2);\r\n }\r\n\r\n if (src.closePath)\r\n {\r\n ctx.closePath();\r\n }\r\n\r\n if (src.isFilled)\r\n {\r\n FillStyleCanvas(ctx, src);\r\n\r\n ctx.fill();\r\n }\r\n\r\n if (src.isStroked)\r\n {\r\n LineStyleCanvas(ctx, src);\r\n\r\n ctx.stroke();\r\n }\r\n\r\n // Restore the context saved in SetTransform\r\n ctx.restore();\r\n }\r\n};\r\n\r\nmodule.exports = CurveCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9jdXJ2ZS9DdXJ2ZUNhbnZhc1JlbmRlcmVyLmpzP2JjZTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHNCQUFzQixtQkFBTyxDQUFDLDBGQUFvQjtBQUNsRCxzQkFBc0IsbUJBQU8sQ0FBQywwRkFBb0I7QUFDbEQsbUJBQW1CLG1CQUFPLENBQUMsb0hBQTZDOztBQUV4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNDQUFzQztBQUNqRCxXQUFXLHlCQUF5QjtBQUNwQyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9jdXJ2ZS9DdXJ2ZUNhbnZhc1JlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgRmlsbFN0eWxlQ2FudmFzID0gcmVxdWlyZSgnLi4vRmlsbFN0eWxlQ2FudmFzJyk7XHJcbnZhciBMaW5lU3R5bGVDYW52YXMgPSByZXF1aXJlKCcuLi9MaW5lU3R5bGVDYW52YXMnKTtcclxudmFyIFNldFRyYW5zZm9ybSA9IHJlcXVpcmUoJy4uLy4uLy4uL3JlbmRlcmVyL2NhbnZhcy91dGlscy9TZXRUcmFuc2Zvcm0nKTtcclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgQ2FudmFzIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuQ3VydmUjcmVuZGVyQ2FudmFzXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBDYW52YXMgcmVuZGVyZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkN1cnZlfSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgQ3VydmVDYW52YXNSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHZhciBjdHggPSByZW5kZXJlci5jdXJyZW50Q29udGV4dDtcclxuXHJcbiAgICBpZiAoU2V0VHJhbnNmb3JtKHJlbmRlcmVyLCBjdHgsIHNyYywgY2FtZXJhLCBwYXJlbnRNYXRyaXgpKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBkeCA9IHNyYy5fZGlzcGxheU9yaWdpblggKyBzcmMuX2N1cnZlQm91bmRzLng7XHJcbiAgICAgICAgdmFyIGR5ID0gc3JjLl9kaXNwbGF5T3JpZ2luWSArIHNyYy5fY3VydmVCb3VuZHMueTtcclxuICAgIFxyXG4gICAgICAgIHZhciBwYXRoID0gc3JjLnBhdGhEYXRhO1xyXG4gICAgICAgIHZhciBwYXRoTGVuZ3RoID0gcGF0aC5sZW5ndGggLSAxO1xyXG4gICAgXHJcbiAgICAgICAgdmFyIHB4MSA9IHBhdGhbMF0gLSBkeDtcclxuICAgICAgICB2YXIgcHkxID0gcGF0aFsxXSAtIGR5O1xyXG5cclxuICAgICAgICBjdHguYmVnaW5QYXRoKCk7XHJcblxyXG4gICAgICAgIGN0eC5tb3ZlVG8ocHgxLCBweTEpO1xyXG4gICAgXHJcbiAgICAgICAgaWYgKCFzcmMuY2xvc2VQYXRoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcGF0aExlbmd0aCAtPSAyO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIGZvciAodmFyIGkgPSAyOyBpIDwgcGF0aExlbmd0aDsgaSArPSAyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHB4MiA9IHBhdGhbaV0gLSBkeDtcclxuICAgICAgICAgICAgdmFyIHB5MiA9IHBhdGhbaSArIDFdIC0gZHk7XHJcbiAgICBcclxuICAgICAgICAgICAgY3R4LmxpbmVUbyhweDIsIHB5Mik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3JjLmNsb3NlUGF0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzcmMuaXNGaWxsZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBGaWxsU3R5bGVDYW52YXMoY3R4LCBzcmMpO1xyXG5cclxuICAgICAgICAgICAgY3R4LmZpbGwoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzcmMuaXNTdHJva2VkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgTGluZVN0eWxlQ2FudmFzKGN0eCwgc3JjKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5zdHJva2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBSZXN0b3JlIHRoZSBjb250ZXh0IHNhdmVkIGluIFNldFRyYW5zZm9ybVxyXG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEN1cnZlQ2FudmFzUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/curve/CurveCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/curve/CurveFactory.js":
/*!*************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/curve/CurveFactory.js ***!
\*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar Curve = __webpack_require__(/*! ./Curve */ \"./node_modules/phaser/src/gameobjects/shape/curve/Curve.js\");\r\n\r\n/**\r\n * Creates a new Curve Shape Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Curve Game Object has been built into Phaser.\r\n * \r\n * The Curve Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * To render a Curve Shape you must first create a `Phaser.Curves.Curve` object, then pass it to\r\n * the Curve Shape in the constructor.\r\n * \r\n * The Curve shape also has a `smoothness` property and corresponding `setSmoothness` method.\r\n * This allows you to control how smooth the shape renders in WebGL, by controlling the number of iterations\r\n * that take place during construction. Increase and decrease the default value for smoother, or more\r\n * jagged, shapes.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#curve\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {Phaser.Curves.Curve} [curve] - The Curve object to use to create the Shape.\r\n * @param {number} [fillColor] - The color the curve will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the curve will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n *\r\n * @return {Phaser.GameObjects.Curve} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('curve', function (x, y, curve, fillColor, fillAlpha)\r\n{\r\n return this.displayList.add(new Curve(this.scene, x, y, curve, fillColor, fillAlpha));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9jdXJ2ZS9DdXJ2ZUZhY3RvcnkuanM/MmQzMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsd0JBQXdCLG1CQUFPLENBQUMsMkZBQXlCO0FBQ3pELFlBQVksbUJBQU8sQ0FBQywyRUFBUzs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVkseUJBQXlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL2N1cnZlL0N1cnZlRmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdhbWVPYmplY3RGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vR2FtZU9iamVjdEZhY3RvcnknKTtcclxudmFyIEN1cnZlID0gcmVxdWlyZSgnLi9DdXJ2ZScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgQ3VydmUgU2hhcGUgR2FtZSBPYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIFNjZW5lLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBDdXJ2ZSBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogXHJcbiAqIFRoZSBDdXJ2ZSBTaGFwZSBpcyBhIEdhbWUgT2JqZWN0IHRoYXQgY2FuIGJlIGFkZGVkIHRvIGEgU2NlbmUsIEdyb3VwIG9yIENvbnRhaW5lci4gWW91IGNhblxyXG4gKiB0cmVhdCBpdCBsaWtlIGFueSBvdGhlciBHYW1lIE9iamVjdCBpbiB5b3VyIGdhbWUsIHN1Y2ggYXMgdHdlZW5pbmcgaXQsIHNjYWxpbmcgaXQsIG9yIGVuYWJsaW5nXHJcbiAqIGl0IGZvciBpbnB1dCBvciBwaHlzaWNzLiBJdCBwcm92aWRlcyBhIHF1aWNrIGFuZCBlYXN5IHdheSBmb3IgeW91IHRvIHJlbmRlciB0aGlzIHNoYXBlIGluIHlvdXJcclxuICogZ2FtZSB3aXRob3V0IHVzaW5nIGEgdGV4dHVyZSwgd2hpbGUgc3RpbGwgdGFraW5nIGFkdmFudGFnZSBvZiBiZWluZyBmdWxseSBiYXRjaGVkIGluIFdlYkdMLlxyXG4gKiBcclxuICogVGhpcyBzaGFwZSBzdXBwb3J0cyBib3RoIGZpbGwgYW5kIHN0cm9rZSBjb2xvcnMuXHJcbiAqIFxyXG4gKiBUbyByZW5kZXIgYSBDdXJ2ZSBTaGFwZSB5b3UgbXVzdCBmaXJzdCBjcmVhdGUgYSBgUGhhc2VyLkN1cnZlcy5DdXJ2ZWAgb2JqZWN0LCB0aGVuIHBhc3MgaXQgdG9cclxuICogdGhlIEN1cnZlIFNoYXBlIGluIHRoZSBjb25zdHJ1Y3Rvci5cclxuICogXHJcbiAqIFRoZSBDdXJ2ZSBzaGFwZSBhbHNvIGhhcyBhIGBzbW9vdGhuZXNzYCBwcm9wZXJ0eSBhbmQgY29ycmVzcG9uZGluZyBgc2V0U21vb3RobmVzc2AgbWV0aG9kLlxyXG4gKiBUaGlzIGFsbG93cyB5b3UgdG8gY29udHJvbCBob3cgc21vb3RoIHRoZSBzaGFwZSByZW5kZXJzIGluIFdlYkdMLCBieSBjb250cm9sbGluZyB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnNcclxuICogdGhhdCB0YWtlIHBsYWNlIGR1cmluZyBjb25zdHJ1Y3Rpb24uIEluY3JlYXNlIGFuZCBkZWNyZWFzZSB0aGUgZGVmYXVsdCB2YWx1ZSBmb3Igc21vb3RoZXIsIG9yIG1vcmVcclxuICogamFnZ2VkLCBzaGFwZXMuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I2N1cnZlXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtQaGFzZXIuQ3VydmVzLkN1cnZlfSBbY3VydmVdIC0gVGhlIEN1cnZlIG9iamVjdCB0byB1c2UgdG8gY3JlYXRlIHRoZSBTaGFwZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsQ29sb3JdIC0gVGhlIGNvbG9yIHRoZSBjdXJ2ZSB3aWxsIGJlIGZpbGxlZCB3aXRoLCBpLmUuIDB4ZmYwMDAwIGZvciByZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbEFscGhhXSAtIFRoZSBhbHBoYSB0aGUgY3VydmUgd2lsbCBiZSBmaWxsZWQgd2l0aC4gWW91IGNhbiBhbHNvIHNldCB0aGUgYWxwaGEgb2YgdGhlIG92ZXJhbGwgU2hhcGUgdXNpbmcgaXRzIGBhbHBoYWAgcHJvcGVydHkuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5DdXJ2ZX0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0RmFjdG9yeS5yZWdpc3RlcignY3VydmUnLCBmdW5jdGlvbiAoeCwgeSwgY3VydmUsIGZpbGxDb2xvciwgZmlsbEFscGhhKVxyXG57XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TGlzdC5hZGQobmV3IEN1cnZlKHRoaXMuc2NlbmUsIHgsIHksIGN1cnZlLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSkpO1xyXG59KTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/curve/CurveFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/curve/CurveRender.js":
/*!************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/curve/CurveRender.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./CurveWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/shape/curve/CurveWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./CurveCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/shape/curve/CurveCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9jdXJ2ZS9DdXJ2ZVJlbmRlci5qcz8yOGVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxvRUFBcUI7QUFDL0MsbUJBQW1CLG1CQUFPLENBQUMsb0VBQXFCOztBQUVoRCxJQUFJLElBQXFCO0FBQ3pCO0FBQ0Esa0JBQWtCLG1CQUFPLENBQUMscUdBQXNCO0FBQ2hEOztBQUVBLElBQUksSUFBc0I7QUFDMUI7QUFDQSxtQkFBbUIsbUJBQU8sQ0FBQyx1R0FBdUI7QUFDbEQ7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL2N1cnZlL0N1cnZlUmVuZGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9OT09QJyk7XHJcbnZhciByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9OT09QJyk7XHJcblxyXG5pZiAodHlwZW9mIFdFQkdMX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4vQ3VydmVXZWJHTFJlbmRlcmVyJyk7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgQ0FOVkFTX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuL0N1cnZlQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/curve/CurveRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/curve/CurveWebGLRenderer.js":
/*!*******************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/curve/CurveWebGLRenderer.js ***!
\*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillPathWebGL = __webpack_require__(/*! ../FillPathWebGL */ \"./node_modules/phaser/src/gameobjects/shape/FillPathWebGL.js\");\r\nvar StrokePathWebGL = __webpack_require__(/*! ../StrokePathWebGL */ \"./node_modules/phaser/src/gameobjects/shape/StrokePathWebGL.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Curve#renderWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Curve} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar CurveWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var pipeline = this.pipeline;\r\n\r\n var camMatrix = pipeline._tempMatrix1;\r\n var shapeMatrix = pipeline._tempMatrix2;\r\n var calcMatrix = pipeline._tempMatrix3;\r\n\r\n renderer.setPipeline(pipeline);\r\n\r\n shapeMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n camMatrix.copyFrom(camera.matrix);\r\n\r\n if (parentMatrix)\r\n {\r\n // Multiply the camera by the parent matrix\r\n camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n // Undo the camera scroll\r\n shapeMatrix.e = src.x;\r\n shapeMatrix.f = src.y;\r\n }\r\n else\r\n {\r\n shapeMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n shapeMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n }\r\n\r\n camMatrix.multiply(shapeMatrix, calcMatrix);\r\n\r\n var dx = src._displayOriginX + src._curveBounds.x;\r\n var dy = src._displayOriginY + src._curveBounds.y;\r\n\r\n var alpha = camera.alpha * src.alpha;\r\n\r\n if (src.isFilled)\r\n {\r\n FillPathWebGL(pipeline, calcMatrix, src, alpha, dx, dy);\r\n }\r\n\r\n if (src.isStroked)\r\n {\r\n StrokePathWebGL(pipeline, src, alpha, dx, dy);\r\n }\r\n};\r\n\r\nmodule.exports = CurveWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9jdXJ2ZS9DdXJ2ZVdlYkdMUmVuZGVyZXIuanM/ZjMyMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsb0JBQW9CLG1CQUFPLENBQUMsc0ZBQWtCO0FBQzlDLHNCQUFzQixtQkFBTyxDQUFDLDBGQUFvQjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQ0FBb0M7QUFDL0MsV0FBVyx5QkFBeUI7QUFDcEMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvY3VydmUvQ3VydmVXZWJHTFJlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgRmlsbFBhdGhXZWJHTCA9IHJlcXVpcmUoJy4uL0ZpbGxQYXRoV2ViR0wnKTtcclxudmFyIFN0cm9rZVBhdGhXZWJHTCA9IHJlcXVpcmUoJy4uL1N0cm9rZVBhdGhXZWJHTCcpO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBXZWJHTCBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkN1cnZlI3JlbmRlcldlYkdMXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgV2ViR0wgcmVuZGVyZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkN1cnZlfSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgQ3VydmVXZWJHTFJlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgdmFyIHBpcGVsaW5lID0gdGhpcy5waXBlbGluZTtcclxuXHJcbiAgICB2YXIgY2FtTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgxO1xyXG4gICAgdmFyIHNoYXBlTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgyO1xyXG4gICAgdmFyIGNhbGNNYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDM7XHJcblxyXG4gICAgcmVuZGVyZXIuc2V0UGlwZWxpbmUocGlwZWxpbmUpO1xyXG5cclxuICAgIHNoYXBlTWF0cml4LmFwcGx5SVRSUyhzcmMueCwgc3JjLnksIHNyYy5yb3RhdGlvbiwgc3JjLnNjYWxlWCwgc3JjLnNjYWxlWSk7XHJcblxyXG4gICAgY2FtTWF0cml4LmNvcHlGcm9tKGNhbWVyYS5tYXRyaXgpO1xyXG5cclxuICAgIGlmIChwYXJlbnRNYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIE11bHRpcGx5IHRoZSBjYW1lcmEgYnkgdGhlIHBhcmVudCBtYXRyaXhcclxuICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHlXaXRoT2Zmc2V0KHBhcmVudE1hdHJpeCwgLWNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3RvclgsIC1jYW1lcmEuc2Nyb2xsWSAqIHNyYy5zY3JvbGxGYWN0b3JZKTtcclxuXHJcbiAgICAgICAgLy8gIFVuZG8gdGhlIGNhbWVyYSBzY3JvbGxcclxuICAgICAgICBzaGFwZU1hdHJpeC5lID0gc3JjLng7XHJcbiAgICAgICAgc2hhcGVNYXRyaXguZiA9IHNyYy55O1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHNoYXBlTWF0cml4LmUgLT0gY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWDtcclxuICAgICAgICBzaGFwZU1hdHJpeC5mIC09IGNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3Rvclk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FtTWF0cml4Lm11bHRpcGx5KHNoYXBlTWF0cml4LCBjYWxjTWF0cml4KTtcclxuXHJcbiAgICB2YXIgZHggPSBzcmMuX2Rpc3BsYXlPcmlnaW5YICsgc3JjLl9jdXJ2ZUJvdW5kcy54O1xyXG4gICAgdmFyIGR5ID0gc3JjLl9kaXNwbGF5T3JpZ2luWSArIHNyYy5fY3VydmVCb3VuZHMueTtcclxuXHJcbiAgICB2YXIgYWxwaGEgPSBjYW1lcmEuYWxwaGEgKiBzcmMuYWxwaGE7XHJcblxyXG4gICAgaWYgKHNyYy5pc0ZpbGxlZClcclxuICAgIHtcclxuICAgICAgICBGaWxsUGF0aFdlYkdMKHBpcGVsaW5lLCBjYWxjTWF0cml4LCBzcmMsIGFscGhhLCBkeCwgZHkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzcmMuaXNTdHJva2VkKVxyXG4gICAge1xyXG4gICAgICAgIFN0cm9rZVBhdGhXZWJHTChwaXBlbGluZSwgc3JjLCBhbHBoYSwgZHgsIGR5KTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ3VydmVXZWJHTFJlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/curve/CurveWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/ellipse/Ellipse.js":
/*!**********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/ellipse/Ellipse.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Earcut = __webpack_require__(/*! ../../../geom/polygon/Earcut */ \"./node_modules/phaser/src/geom/polygon/Earcut.js\");\r\nvar EllipseRender = __webpack_require__(/*! ./EllipseRender */ \"./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseRender.js\");\r\nvar GeomEllipse = __webpack_require__(/*! ../../../geom/ellipse/Ellipse */ \"./node_modules/phaser/src/geom/ellipse/Ellipse.js\");\r\nvar Shape = __webpack_require__(/*! ../Shape */ \"./node_modules/phaser/src/gameobjects/shape/Shape.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Ellipse Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * When it renders it displays an ellipse shape. You can control the width and height of the ellipse.\r\n * If the width and height match it will render as a circle. If the width is less than the height,\r\n * it will look more like an egg shape.\r\n * \r\n * The Ellipse shape also has a `smoothness` property and corresponding `setSmoothness` method.\r\n * This allows you to control how smooth the shape renders in WebGL, by controlling the number of iterations\r\n * that take place during construction. Increase and decrease the default value for smoother, or more\r\n * jagged, shapes.\r\n *\r\n * @class Ellipse\r\n * @extends Phaser.GameObjects.Shape\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [width=128] - The width of the ellipse. An ellipse with equal width and height renders as a circle.\r\n * @param {number} [height=128] - The height of the ellipse. An ellipse with equal width and height renders as a circle.\r\n * @param {number} [fillColor] - The color the ellipse will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the ellipse will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n */\r\nvar Ellipse = new Class({\r\n\r\n Extends: Shape,\r\n\r\n Mixins: [\r\n EllipseRender\r\n ],\r\n\r\n initialize:\r\n\r\n function Ellipse (scene, x, y, width, height, fillColor, fillAlpha)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n if (width === undefined) { width = 128; }\r\n if (height === undefined) { height = 128; }\r\n\r\n Shape.call(this, scene, 'Ellipse', new GeomEllipse(width / 2, height / 2, width, height));\r\n\r\n /**\r\n * Private internal value.\r\n * The number of points used to draw the curve. Higher values create smoother renders at the cost of more triangles being drawn.\r\n *\r\n * @name Phaser.GameObjects.Ellipse#_smoothness\r\n * @type {integer}\r\n * @private\r\n * @since 3.13.0\r\n */\r\n this._smoothness = 64;\r\n\r\n this.setPosition(x, y);\r\n\r\n this.width = width;\r\n this.height = height;\r\n\r\n if (fillColor !== undefined)\r\n {\r\n this.setFillStyle(fillColor, fillAlpha);\r\n }\r\n\r\n this.updateDisplayOrigin();\r\n this.updateData();\r\n },\r\n\r\n /**\r\n * The smoothness of the ellipse. The number of points used when rendering it.\r\n * Increase this value for a smoother ellipse, at the cost of more polygons being rendered.\r\n *\r\n * @name Phaser.GameObjects.Ellipse#smoothness\r\n * @type {integer}\r\n * @default 64\r\n * @since 3.13.0\r\n */\r\n smoothness: {\r\n\r\n get: function ()\r\n {\r\n return this._smoothness;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._smoothness = value;\r\n\r\n this.updateData();\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Sets the size of the ellipse by changing the underlying geometry data, rather than scaling the object.\r\n * This call can be chained.\r\n *\r\n * @method Phaser.GameObjects.Ellipse#setSize\r\n * @since 3.13.0\r\n * \r\n * @param {number} width - The width of the ellipse.\r\n * @param {number} height - The height of the ellipse.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setSize: function (width, height)\r\n {\r\n this.geom.setSize(width, height);\r\n\r\n return this.updateData();\r\n },\r\n\r\n /**\r\n * Sets the smoothness of the ellipse. The number of points used when rendering it.\r\n * Increase this value for a smoother ellipse, at the cost of more polygons being rendered.\r\n * This call can be chained.\r\n *\r\n * @method Phaser.GameObjects.Ellipse#setSmoothness\r\n * @since 3.13.0\r\n * \r\n * @param {integer} value - The value to set the smoothness to.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setSmoothness: function (value)\r\n {\r\n this._smoothness = value;\r\n\r\n return this.updateData();\r\n },\r\n\r\n /**\r\n * Internal method that updates the data and path values.\r\n *\r\n * @method Phaser.GameObjects.Ellipse#updateData\r\n * @private\r\n * @since 3.13.0\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n updateData: function ()\r\n {\r\n var path = [];\r\n var points = this.geom.getPoints(this._smoothness);\r\n\r\n for (var i = 0; i < points.length; i++)\r\n {\r\n path.push(points[i].x, points[i].y);\r\n }\r\n\r\n path.push(points[0].x, points[0].y);\r\n\r\n this.pathIndexes = Earcut(path);\r\n this.pathData = path;\r\n\r\n return this;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Ellipse;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9lbGxpcHNlL0VsbGlwc2UuanM/MzMzYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHNFQUFzQjtBQUMxQyxhQUFhLG1CQUFPLENBQUMsc0ZBQThCO0FBQ25ELG9CQUFvQixtQkFBTyxDQUFDLDZGQUFpQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyx3RkFBK0I7QUFDekQsWUFBWSxtQkFBTyxDQUFDLHNFQUFVOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPO0FBQ3JDLGtDQUFrQyxhQUFhO0FBQy9DLG1DQUFtQyxjQUFjOztBQUVqRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvZWxsaXBzZS9FbGxpcHNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgRWFyY3V0ID0gcmVxdWlyZSgnLi4vLi4vLi4vZ2VvbS9wb2x5Z29uL0VhcmN1dCcpO1xyXG52YXIgRWxsaXBzZVJlbmRlciA9IHJlcXVpcmUoJy4vRWxsaXBzZVJlbmRlcicpO1xyXG52YXIgR2VvbUVsbGlwc2UgPSByZXF1aXJlKCcuLi8uLi8uLi9nZW9tL2VsbGlwc2UvRWxsaXBzZScpO1xyXG52YXIgU2hhcGUgPSByZXF1aXJlKCcuLi9TaGFwZScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIEVsbGlwc2UgU2hhcGUgaXMgYSBHYW1lIE9iamVjdCB0aGF0IGNhbiBiZSBhZGRlZCB0byBhIFNjZW5lLCBHcm91cCBvciBDb250YWluZXIuIFlvdSBjYW5cclxuICogdHJlYXQgaXQgbGlrZSBhbnkgb3RoZXIgR2FtZSBPYmplY3QgaW4geW91ciBnYW1lLCBzdWNoIGFzIHR3ZWVuaW5nIGl0LCBzY2FsaW5nIGl0LCBvciBlbmFibGluZ1xyXG4gKiBpdCBmb3IgaW5wdXQgb3IgcGh5c2ljcy4gSXQgcHJvdmlkZXMgYSBxdWljayBhbmQgZWFzeSB3YXkgZm9yIHlvdSB0byByZW5kZXIgdGhpcyBzaGFwZSBpbiB5b3VyXHJcbiAqIGdhbWUgd2l0aG91dCB1c2luZyBhIHRleHR1cmUsIHdoaWxlIHN0aWxsIHRha2luZyBhZHZhbnRhZ2Ugb2YgYmVpbmcgZnVsbHkgYmF0Y2hlZCBpbiBXZWJHTC5cclxuICogXHJcbiAqIFRoaXMgc2hhcGUgc3VwcG9ydHMgYm90aCBmaWxsIGFuZCBzdHJva2UgY29sb3JzLlxyXG4gKiBcclxuICogV2hlbiBpdCByZW5kZXJzIGl0IGRpc3BsYXlzIGFuIGVsbGlwc2Ugc2hhcGUuIFlvdSBjYW4gY29udHJvbCB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgZWxsaXBzZS5cclxuICogSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgbWF0Y2ggaXQgd2lsbCByZW5kZXIgYXMgYSBjaXJjbGUuIElmIHRoZSB3aWR0aCBpcyBsZXNzIHRoYW4gdGhlIGhlaWdodCxcclxuICogaXQgd2lsbCBsb29rIG1vcmUgbGlrZSBhbiBlZ2cgc2hhcGUuXHJcbiAqIFxyXG4gKiBUaGUgRWxsaXBzZSBzaGFwZSBhbHNvIGhhcyBhIGBzbW9vdGhuZXNzYCBwcm9wZXJ0eSBhbmQgY29ycmVzcG9uZGluZyBgc2V0U21vb3RobmVzc2AgbWV0aG9kLlxyXG4gKiBUaGlzIGFsbG93cyB5b3UgdG8gY29udHJvbCBob3cgc21vb3RoIHRoZSBzaGFwZSByZW5kZXJzIGluIFdlYkdMLCBieSBjb250cm9sbGluZyB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnNcclxuICogdGhhdCB0YWtlIHBsYWNlIGR1cmluZyBjb25zdHJ1Y3Rpb24uIEluY3JlYXNlIGFuZCBkZWNyZWFzZSB0aGUgZGVmYXVsdCB2YWx1ZSBmb3Igc21vb3RoZXIsIG9yIG1vcmVcclxuICogamFnZ2VkLCBzaGFwZXMuXHJcbiAqXHJcbiAqIEBjbGFzcyBFbGxpcHNlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFwZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuIEEgR2FtZSBPYmplY3QgY2FuIG9ubHkgYmVsb25nIHRvIG9uZSBTY2VuZSBhdCBhIHRpbWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGg9MTI4XSAtIFRoZSB3aWR0aCBvZiB0aGUgZWxsaXBzZS4gQW4gZWxsaXBzZSB3aXRoIGVxdWFsIHdpZHRoIGFuZCBoZWlnaHQgcmVuZGVycyBhcyBhIGNpcmNsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtoZWlnaHQ9MTI4XSAtIFRoZSBoZWlnaHQgb2YgdGhlIGVsbGlwc2UuIEFuIGVsbGlwc2Ugd2l0aCBlcXVhbCB3aWR0aCBhbmQgaGVpZ2h0IHJlbmRlcnMgYXMgYSBjaXJjbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbENvbG9yXSAtIFRoZSBjb2xvciB0aGUgZWxsaXBzZSB3aWxsIGJlIGZpbGxlZCB3aXRoLCBpLmUuIDB4ZmYwMDAwIGZvciByZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbEFscGhhXSAtIFRoZSBhbHBoYSB0aGUgZWxsaXBzZSB3aWxsIGJlIGZpbGxlZCB3aXRoLiBZb3UgY2FuIGFsc28gc2V0IHRoZSBhbHBoYSBvZiB0aGUgb3ZlcmFsbCBTaGFwZSB1c2luZyBpdHMgYGFscGhhYCBwcm9wZXJ0eS5cclxuICovXHJcbnZhciBFbGxpcHNlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBTaGFwZSxcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBFbGxpcHNlUmVuZGVyXHJcbiAgICBdLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gRWxsaXBzZSAoc2NlbmUsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZpbGxDb2xvciwgZmlsbEFscGhhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHsgd2lkdGggPSAxMjg7IH1cclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gMTI4OyB9XHJcblxyXG4gICAgICAgIFNoYXBlLmNhbGwodGhpcywgc2NlbmUsICdFbGxpcHNlJywgbmV3IEdlb21FbGxpcHNlKHdpZHRoIC8gMiwgaGVpZ2h0IC8gMiwgd2lkdGgsIGhlaWdodCkpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQcml2YXRlIGludGVybmFsIHZhbHVlLlxyXG4gICAgICAgICAqIFRoZSBudW1iZXIgb2YgcG9pbnRzIHVzZWQgdG8gZHJhdyB0aGUgY3VydmUuIEhpZ2hlciB2YWx1ZXMgY3JlYXRlIHNtb290aGVyIHJlbmRlcnMgYXQgdGhlIGNvc3Qgb2YgbW9yZSB0cmlhbmdsZXMgYmVpbmcgZHJhd24uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuRWxsaXBzZSNfc21vb3RobmVzc1xyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3Ntb290aG5lc3MgPSA2NDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcclxuXHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICBpZiAoZmlsbENvbG9yICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldEZpbGxTdHlsZShmaWxsQ29sb3IsIGZpbGxBbHBoYSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXlPcmlnaW4oKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhdGEoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc21vb3RobmVzcyBvZiB0aGUgZWxsaXBzZS4gVGhlIG51bWJlciBvZiBwb2ludHMgdXNlZCB3aGVuIHJlbmRlcmluZyBpdC5cclxuICAgICAqIEluY3JlYXNlIHRoaXMgdmFsdWUgZm9yIGEgc21vb3RoZXIgZWxsaXBzZSwgYXQgdGhlIGNvc3Qgb2YgbW9yZSBwb2x5Z29ucyBiZWluZyByZW5kZXJlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuRWxsaXBzZSNzbW9vdGhuZXNzXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBkZWZhdWx0IDY0XHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKi9cclxuICAgIHNtb290aG5lc3M6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Ntb290aG5lc3M7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9zbW9vdGhuZXNzID0gdmFsdWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURhdGEoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHNpemUgb2YgdGhlIGVsbGlwc2UgYnkgY2hhbmdpbmcgdGhlIHVuZGVybHlpbmcgZ2VvbWV0cnkgZGF0YSwgcmF0aGVyIHRoYW4gc2NhbGluZyB0aGUgb2JqZWN0LlxyXG4gICAgICogVGhpcyBjYWxsIGNhbiBiZSBjaGFpbmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkVsbGlwc2Ujc2V0U2l6ZVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIGVsbGlwc2UuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgZWxsaXBzZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRTaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmdlb20uc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlRGF0YSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHNtb290aG5lc3Mgb2YgdGhlIGVsbGlwc2UuIFRoZSBudW1iZXIgb2YgcG9pbnRzIHVzZWQgd2hlbiByZW5kZXJpbmcgaXQuXHJcbiAgICAgKiBJbmNyZWFzZSB0aGlzIHZhbHVlIGZvciBhIHNtb290aGVyIGVsbGlwc2UsIGF0IHRoZSBjb3N0IG9mIG1vcmUgcG9seWdvbnMgYmVpbmcgcmVuZGVyZWQuXHJcbiAgICAgKiBUaGlzIGNhbGwgY2FuIGJlIGNoYWluZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRWxsaXBzZSNzZXRTbW9vdGhuZXNzXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0IHRoZSBzbW9vdGhuZXNzIHRvLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFNtb290aG5lc3M6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9zbW9vdGhuZXNzID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZURhdGEoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdGhhdCB1cGRhdGVzIHRoZSBkYXRhIGFuZCBwYXRoIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5FbGxpcHNlI3VwZGF0ZURhdGFcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlRGF0YTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgcGF0aCA9IFtdO1xyXG4gICAgICAgIHZhciBwb2ludHMgPSB0aGlzLmdlb20uZ2V0UG9pbnRzKHRoaXMuX3Ntb290aG5lc3MpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBhdGgucHVzaChwb2ludHNbaV0ueCwgcG9pbnRzW2ldLnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcGF0aC5wdXNoKHBvaW50c1swXS54LCBwb2ludHNbMF0ueSk7XHJcblxyXG4gICAgICAgIHRoaXMucGF0aEluZGV4ZXMgPSBFYXJjdXQocGF0aCk7XHJcbiAgICAgICAgdGhpcy5wYXRoRGF0YSA9IHBhdGg7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEVsbGlwc2U7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/ellipse/Ellipse.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseCanvasRenderer.js":
/*!************************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseCanvasRenderer.js ***!
\************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillStyleCanvas = __webpack_require__(/*! ../FillStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js\");\r\nvar LineStyleCanvas = __webpack_require__(/*! ../LineStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/LineStyleCanvas.js\");\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Ellipse#renderCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Ellipse} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar EllipseCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var ctx = renderer.currentContext;\r\n\r\n if (SetTransform(renderer, ctx, src, camera, parentMatrix))\r\n {\r\n var dx = src._displayOriginX;\r\n var dy = src._displayOriginY;\r\n\r\n var path = src.pathData;\r\n var pathLength = path.length - 1;\r\n \r\n var px1 = path[0] - dx;\r\n var py1 = path[1] - dy;\r\n\r\n ctx.beginPath();\r\n\r\n ctx.moveTo(px1, py1);\r\n \r\n if (!src.closePath)\r\n {\r\n pathLength -= 2;\r\n }\r\n \r\n for (var i = 2; i < pathLength; i += 2)\r\n {\r\n var px2 = path[i] - dx;\r\n var py2 = path[i + 1] - dy;\r\n \r\n ctx.lineTo(px2, py2);\r\n }\r\n\r\n ctx.closePath();\r\n\r\n if (src.isFilled)\r\n {\r\n FillStyleCanvas(ctx, src);\r\n\r\n ctx.fill();\r\n }\r\n\r\n if (src.isStroked)\r\n {\r\n LineStyleCanvas(ctx, src);\r\n\r\n ctx.stroke();\r\n }\r\n\r\n // Restore the context saved in SetTransform\r\n ctx.restore();\r\n }\r\n};\r\n\r\nmodule.exports = EllipseCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9lbGxpcHNlL0VsbGlwc2VDYW52YXNSZW5kZXJlci5qcz9iMjAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQywwRkFBb0I7QUFDbEQsc0JBQXNCLG1CQUFPLENBQUMsMEZBQW9CO0FBQ2xELG1CQUFtQixtQkFBTyxDQUFDLG9IQUE2Qzs7QUFFeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvZWxsaXBzZS9FbGxpcHNlQ2FudmFzUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBGaWxsU3R5bGVDYW52YXMgPSByZXF1aXJlKCcuLi9GaWxsU3R5bGVDYW52YXMnKTtcclxudmFyIExpbmVTdHlsZUNhbnZhcyA9IHJlcXVpcmUoJy4uL0xpbmVTdHlsZUNhbnZhcycpO1xyXG52YXIgU2V0VHJhbnNmb3JtID0gcmVxdWlyZSgnLi4vLi4vLi4vcmVuZGVyZXIvY2FudmFzL3V0aWxzL1NldFRyYW5zZm9ybScpO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBDYW52YXMgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5FbGxpcHNlI3JlbmRlckNhbnZhc1xyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgQ2FudmFzIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5FbGxpcHNlfSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgRWxsaXBzZUNhbnZhc1JlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgdmFyIGN0eCA9IHJlbmRlcmVyLmN1cnJlbnRDb250ZXh0O1xyXG5cclxuICAgIGlmIChTZXRUcmFuc2Zvcm0ocmVuZGVyZXIsIGN0eCwgc3JjLCBjYW1lcmEsIHBhcmVudE1hdHJpeCkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGR4ID0gc3JjLl9kaXNwbGF5T3JpZ2luWDtcclxuICAgICAgICB2YXIgZHkgPSBzcmMuX2Rpc3BsYXlPcmlnaW5ZO1xyXG5cclxuICAgICAgICB2YXIgcGF0aCA9IHNyYy5wYXRoRGF0YTtcclxuICAgICAgICB2YXIgcGF0aExlbmd0aCA9IHBhdGgubGVuZ3RoIC0gMTtcclxuICAgIFxyXG4gICAgICAgIHZhciBweDEgPSBwYXRoWzBdIC0gZHg7XHJcbiAgICAgICAgdmFyIHB5MSA9IHBhdGhbMV0gLSBkeTtcclxuXHJcbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG5cclxuICAgICAgICBjdHgubW92ZVRvKHB4MSwgcHkxKTtcclxuICAgIFxyXG4gICAgICAgIGlmICghc3JjLmNsb3NlUGF0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBhdGhMZW5ndGggLT0gMjtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICBmb3IgKHZhciBpID0gMjsgaSA8IHBhdGhMZW5ndGg7IGkgKz0gMilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBweDIgPSBwYXRoW2ldIC0gZHg7XHJcbiAgICAgICAgICAgIHZhciBweTIgPSBwYXRoW2kgKyAxXSAtIGR5O1xyXG4gICAgXHJcbiAgICAgICAgICAgIGN0eC5saW5lVG8ocHgyLCBweTIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xyXG5cclxuICAgICAgICBpZiAoc3JjLmlzRmlsbGVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgRmlsbFN0eWxlQ2FudmFzKGN0eCwgc3JjKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5maWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3JjLmlzU3Ryb2tlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIExpbmVTdHlsZUNhbnZhcyhjdHgsIHNyYyk7XHJcblxyXG4gICAgICAgICAgICBjdHguc3Ryb2tlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgUmVzdG9yZSB0aGUgY29udGV4dCBzYXZlZCBpbiBTZXRUcmFuc2Zvcm1cclxuICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFbGxpcHNlQ2FudmFzUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseFactory.js":
/*!*****************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseFactory.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Ellipse = __webpack_require__(/*! ./Ellipse */ \"./node_modules/phaser/src/gameobjects/shape/ellipse/Ellipse.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Ellipse Shape Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Ellipse Game Object has been built into Phaser.\r\n * \r\n * The Ellipse Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * When it renders it displays an ellipse shape. You can control the width and height of the ellipse.\r\n * If the width and height match it will render as a circle. If the width is less than the height,\r\n * it will look more like an egg shape.\r\n * \r\n * The Ellipse shape also has a `smoothness` property and corresponding `setSmoothness` method.\r\n * This allows you to control how smooth the shape renders in WebGL, by controlling the number of iterations\r\n * that take place during construction. Increase and decrease the default value for smoother, or more\r\n * jagged, shapes.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#ellipse\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [width=128] - The width of the ellipse. An ellipse with equal width and height renders as a circle.\r\n * @param {number} [height=128] - The height of the ellipse. An ellipse with equal width and height renders as a circle.\r\n * @param {number} [fillColor] - The color the ellipse will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the ellipse will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n *\r\n * @return {Phaser.GameObjects.Ellipse} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('ellipse', function (x, y, width, height, fillColor, fillAlpha)\r\n{\r\n return this.displayList.add(new Ellipse(this.scene, x, y, width, height, fillColor, fillAlpha));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9lbGxpcHNlL0VsbGlwc2VGYWN0b3J5LmpzP2JiNjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxpRkFBVztBQUNqQyx3QkFBd0IsbUJBQU8sQ0FBQywyRkFBeUI7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvZWxsaXBzZS9FbGxpcHNlRmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEVsbGlwc2UgPSByZXF1aXJlKCcuL0VsbGlwc2UnKTtcclxudmFyIEdhbWVPYmplY3RGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vR2FtZU9iamVjdEZhY3RvcnknKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IEVsbGlwc2UgU2hhcGUgR2FtZSBPYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIFNjZW5lLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBFbGxpcHNlIEdhbWUgT2JqZWN0IGhhcyBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLlxyXG4gKiBcclxuICogVGhlIEVsbGlwc2UgU2hhcGUgaXMgYSBHYW1lIE9iamVjdCB0aGF0IGNhbiBiZSBhZGRlZCB0byBhIFNjZW5lLCBHcm91cCBvciBDb250YWluZXIuIFlvdSBjYW5cclxuICogdHJlYXQgaXQgbGlrZSBhbnkgb3RoZXIgR2FtZSBPYmplY3QgaW4geW91ciBnYW1lLCBzdWNoIGFzIHR3ZWVuaW5nIGl0LCBzY2FsaW5nIGl0LCBvciBlbmFibGluZ1xyXG4gKiBpdCBmb3IgaW5wdXQgb3IgcGh5c2ljcy4gSXQgcHJvdmlkZXMgYSBxdWljayBhbmQgZWFzeSB3YXkgZm9yIHlvdSB0byByZW5kZXIgdGhpcyBzaGFwZSBpbiB5b3VyXHJcbiAqIGdhbWUgd2l0aG91dCB1c2luZyBhIHRleHR1cmUsIHdoaWxlIHN0aWxsIHRha2luZyBhZHZhbnRhZ2Ugb2YgYmVpbmcgZnVsbHkgYmF0Y2hlZCBpbiBXZWJHTC5cclxuICogXHJcbiAqIFRoaXMgc2hhcGUgc3VwcG9ydHMgYm90aCBmaWxsIGFuZCBzdHJva2UgY29sb3JzLlxyXG4gKiBcclxuICogV2hlbiBpdCByZW5kZXJzIGl0IGRpc3BsYXlzIGFuIGVsbGlwc2Ugc2hhcGUuIFlvdSBjYW4gY29udHJvbCB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgZWxsaXBzZS5cclxuICogSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgbWF0Y2ggaXQgd2lsbCByZW5kZXIgYXMgYSBjaXJjbGUuIElmIHRoZSB3aWR0aCBpcyBsZXNzIHRoYW4gdGhlIGhlaWdodCxcclxuICogaXQgd2lsbCBsb29rIG1vcmUgbGlrZSBhbiBlZ2cgc2hhcGUuXHJcbiAqIFxyXG4gKiBUaGUgRWxsaXBzZSBzaGFwZSBhbHNvIGhhcyBhIGBzbW9vdGhuZXNzYCBwcm9wZXJ0eSBhbmQgY29ycmVzcG9uZGluZyBgc2V0U21vb3RobmVzc2AgbWV0aG9kLlxyXG4gKiBUaGlzIGFsbG93cyB5b3UgdG8gY29udHJvbCBob3cgc21vb3RoIHRoZSBzaGFwZSByZW5kZXJzIGluIFdlYkdMLCBieSBjb250cm9sbGluZyB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnNcclxuICogdGhhdCB0YWtlIHBsYWNlIGR1cmluZyBjb25zdHJ1Y3Rpb24uIEluY3JlYXNlIGFuZCBkZWNyZWFzZSB0aGUgZGVmYXVsdCB2YWx1ZSBmb3Igc21vb3RoZXIsIG9yIG1vcmVcclxuICogamFnZ2VkLCBzaGFwZXMuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I2VsbGlwc2VcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3dpZHRoPTEyOF0gLSBUaGUgd2lkdGggb2YgdGhlIGVsbGlwc2UuIEFuIGVsbGlwc2Ugd2l0aCBlcXVhbCB3aWR0aCBhbmQgaGVpZ2h0IHJlbmRlcnMgYXMgYSBjaXJjbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0PTEyOF0gLSBUaGUgaGVpZ2h0IG9mIHRoZSBlbGxpcHNlLiBBbiBlbGxpcHNlIHdpdGggZXF1YWwgd2lkdGggYW5kIGhlaWdodCByZW5kZXJzIGFzIGEgY2lyY2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxDb2xvcl0gLSBUaGUgY29sb3IgdGhlIGVsbGlwc2Ugd2lsbCBiZSBmaWxsZWQgd2l0aCwgaS5lLiAweGZmMDAwMCBmb3IgcmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxBbHBoYV0gLSBUaGUgYWxwaGEgdGhlIGVsbGlwc2Ugd2lsbCBiZSBmaWxsZWQgd2l0aC4gWW91IGNhbiBhbHNvIHNldCB0aGUgYWxwaGEgb2YgdGhlIG92ZXJhbGwgU2hhcGUgdXNpbmcgaXRzIGBhbHBoYWAgcHJvcGVydHkuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5FbGxpcHNlfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RGYWN0b3J5LnJlZ2lzdGVyKCdlbGxpcHNlJywgZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZpbGxDb2xvciwgZmlsbEFscGhhKVxyXG57XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TGlzdC5hZGQobmV3IEVsbGlwc2UodGhpcy5zY2VuZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZmlsbENvbG9yLCBmaWxsQWxwaGEpKTtcclxufSk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseRender.js":
/*!****************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseRender.js ***!
\****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./EllipseWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./EllipseCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9lbGxpcHNlL0VsbGlwc2VSZW5kZXIuanM/M2UxNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsb0VBQXFCO0FBQy9DLG1CQUFtQixtQkFBTyxDQUFDLG9FQUFxQjs7QUFFaEQsSUFBSSxJQUFxQjtBQUN6QjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLDJHQUF3QjtBQUNsRDs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsNkdBQXlCO0FBQ3BEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9lbGxpcHNlL0VsbGlwc2VSZW5kZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL05PT1AnKTtcclxudmFyIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL05PT1AnKTtcclxuXHJcbmlmICh0eXBlb2YgV0VCR0xfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi9FbGxpcHNlV2ViR0xSZW5kZXJlcicpO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIENBTlZBU19SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi9FbGxpcHNlQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseWebGLRenderer.js":
/*!***********************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseWebGLRenderer.js ***!
\***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillPathWebGL = __webpack_require__(/*! ../FillPathWebGL */ \"./node_modules/phaser/src/gameobjects/shape/FillPathWebGL.js\");\r\nvar StrokePathWebGL = __webpack_require__(/*! ../StrokePathWebGL */ \"./node_modules/phaser/src/gameobjects/shape/StrokePathWebGL.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Ellipse#renderWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Ellipse} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar EllipseWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var pipeline = this.pipeline;\r\n\r\n var camMatrix = pipeline._tempMatrix1;\r\n var shapeMatrix = pipeline._tempMatrix2;\r\n var calcMatrix = pipeline._tempMatrix3;\r\n\r\n renderer.setPipeline(pipeline);\r\n\r\n shapeMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n camMatrix.copyFrom(camera.matrix);\r\n\r\n if (parentMatrix)\r\n {\r\n // Multiply the camera by the parent matrix\r\n camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n // Undo the camera scroll\r\n shapeMatrix.e = src.x;\r\n shapeMatrix.f = src.y;\r\n }\r\n else\r\n {\r\n shapeMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n shapeMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n }\r\n\r\n camMatrix.multiply(shapeMatrix, calcMatrix);\r\n\r\n var dx = src._displayOriginX;\r\n var dy = src._displayOriginY;\r\n\r\n var alpha = camera.alpha * src.alpha;\r\n\r\n if (src.isFilled)\r\n {\r\n FillPathWebGL(pipeline, calcMatrix, src, alpha, dx, dy);\r\n }\r\n\r\n if (src.isStroked)\r\n {\r\n StrokePathWebGL(pipeline, src, alpha, dx, dy);\r\n }\r\n};\r\n\r\nmodule.exports = EllipseWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9lbGxpcHNlL0VsbGlwc2VXZWJHTFJlbmRlcmVyLmpzP2EwMmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLHNGQUFrQjtBQUM5QyxzQkFBc0IsbUJBQU8sQ0FBQywwRkFBb0I7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL2VsbGlwc2UvRWxsaXBzZVdlYkdMUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBGaWxsUGF0aFdlYkdMID0gcmVxdWlyZSgnLi4vRmlsbFBhdGhXZWJHTCcpO1xyXG52YXIgU3Ryb2tlUGF0aFdlYkdMID0gcmVxdWlyZSgnLi4vU3Ryb2tlUGF0aFdlYkdMJyk7XHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIFdlYkdMIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuRWxsaXBzZSNyZW5kZXJXZWJHTFxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIFdlYkdMIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5FbGxpcHNlfSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgRWxsaXBzZVdlYkdMUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgcGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lO1xyXG5cclxuICAgIHZhciBjYW1NYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDE7XHJcbiAgICB2YXIgc2hhcGVNYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDI7XHJcbiAgICB2YXIgY2FsY01hdHJpeCA9IHBpcGVsaW5lLl90ZW1wTWF0cml4MztcclxuXHJcbiAgICByZW5kZXJlci5zZXRQaXBlbGluZShwaXBlbGluZSk7XHJcblxyXG4gICAgc2hhcGVNYXRyaXguYXBwbHlJVFJTKHNyYy54LCBzcmMueSwgc3JjLnJvdGF0aW9uLCBzcmMuc2NhbGVYLCBzcmMuc2NhbGVZKTtcclxuXHJcbiAgICBjYW1NYXRyaXguY29weUZyb20oY2FtZXJhLm1hdHJpeCk7XHJcblxyXG4gICAgaWYgKHBhcmVudE1hdHJpeClcclxuICAgIHtcclxuICAgICAgICAvLyAgTXVsdGlwbHkgdGhlIGNhbWVyYSBieSB0aGUgcGFyZW50IG1hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseVdpdGhPZmZzZXQocGFyZW50TWF0cml4LCAtY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWCwgLWNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3RvclkpO1xyXG5cclxuICAgICAgICAvLyAgVW5kbyB0aGUgY2FtZXJhIHNjcm9sbFxyXG4gICAgICAgIHNoYXBlTWF0cml4LmUgPSBzcmMueDtcclxuICAgICAgICBzaGFwZU1hdHJpeC5mID0gc3JjLnk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgc2hhcGVNYXRyaXguZSAtPSBjYW1lcmEuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYO1xyXG4gICAgICAgIHNoYXBlTWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuICAgIH1cclxuXHJcbiAgICBjYW1NYXRyaXgubXVsdGlwbHkoc2hhcGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG5cclxuICAgIHZhciBkeCA9IHNyYy5fZGlzcGxheU9yaWdpblg7XHJcbiAgICB2YXIgZHkgPSBzcmMuX2Rpc3BsYXlPcmlnaW5ZO1xyXG5cclxuICAgIHZhciBhbHBoYSA9IGNhbWVyYS5hbHBoYSAqIHNyYy5hbHBoYTtcclxuXHJcbiAgICBpZiAoc3JjLmlzRmlsbGVkKVxyXG4gICAge1xyXG4gICAgICAgIEZpbGxQYXRoV2ViR0wocGlwZWxpbmUsIGNhbGNNYXRyaXgsIHNyYywgYWxwaGEsIGR4LCBkeSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNyYy5pc1N0cm9rZWQpXHJcbiAgICB7XHJcbiAgICAgICAgU3Ryb2tlUGF0aFdlYkdMKHBpcGVsaW5lLCBzcmMsIGFscGhhLCBkeCwgZHkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFbGxpcHNlV2ViR0xSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/ellipse/EllipseWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/grid/Grid.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/grid/Grid.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Shape = __webpack_require__(/*! ../Shape */ \"./node_modules/phaser/src/gameobjects/shape/Shape.js\");\r\nvar GridRender = __webpack_require__(/*! ./GridRender */ \"./node_modules/phaser/src/gameobjects/shape/grid/GridRender.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Grid Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports only fill colors and cannot be stroked.\r\n * \r\n * A Grid Shape allows you to display a grid in your game, where you can control the size of the\r\n * grid as well as the width and height of the grid cells. You can set a fill color for each grid\r\n * cell as well as an alternate fill color. When the alternate fill color is set then the grid\r\n * cells will alternate the fill colors as they render, creating a chess-board effect. You can\r\n * also optionally have an outline fill color. If set, this draws lines between the grid cells\r\n * in the given color. If you specify an outline color with an alpha of zero, then it will draw\r\n * the cells spaced out, but without the lines between them.\r\n *\r\n * @class Grid\r\n * @extends Phaser.GameObjects.Shape\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [width=128] - The width of the grid.\r\n * @param {number} [height=128] - The height of the grid.\r\n * @param {number} [cellWidth=32] - The width of one cell in the grid.\r\n * @param {number} [cellHeight=32] - The height of one cell in the grid.\r\n * @param {number} [fillColor] - The color the grid cells will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the grid cells will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n * @param {number} [outlineFillColor] - The color of the lines between the grid cells. See the `setOutline` method.\r\n * @param {number} [outlineFillAlpha] - The alpha of the lines between the grid cells.\r\n */\r\nvar Grid = new Class({\r\n\r\n Extends: Shape,\r\n\r\n Mixins: [\r\n GridRender\r\n ],\r\n\r\n initialize:\r\n\r\n function Grid (scene, x, y, width, height, cellWidth, cellHeight, fillColor, fillAlpha, outlineFillColor, outlineFillAlpha)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n if (width === undefined) { width = 128; }\r\n if (height === undefined) { height = 128; }\r\n if (cellWidth === undefined) { cellWidth = 32; }\r\n if (cellHeight === undefined) { cellHeight = 32; }\r\n\r\n Shape.call(this, scene, 'Grid', null);\r\n\r\n /**\r\n * The width of each grid cell.\r\n * Must be a positive value.\r\n *\r\n * @name Phaser.GameObjects.Grid#cellWidth\r\n * @type {number}\r\n * @since 3.13.0\r\n */\r\n this.cellWidth = cellWidth;\r\n\r\n /**\r\n * The height of each grid cell.\r\n * Must be a positive value.\r\n *\r\n * @name Phaser.GameObjects.Grid#cellHeight\r\n * @type {number}\r\n * @since 3.13.0\r\n */\r\n this.cellHeight = cellHeight;\r\n\r\n /**\r\n * Will the grid render its cells in the `fillColor`?\r\n *\r\n * @name Phaser.GameObjects.Grid#showCells\r\n * @type {boolean}\r\n * @since 3.13.0\r\n */\r\n this.showCells = true;\r\n\r\n /**\r\n * The color of the lines between each grid cell.\r\n *\r\n * @name Phaser.GameObjects.Grid#outlineFillColor\r\n * @type {number}\r\n * @since 3.13.0\r\n */\r\n this.outlineFillColor = 0;\r\n\r\n /**\r\n * The alpha value for the color of the lines between each grid cell.\r\n *\r\n * @name Phaser.GameObjects.Grid#outlineFillAlpha\r\n * @type {number}\r\n * @since 3.13.0\r\n */\r\n this.outlineFillAlpha = 0;\r\n\r\n /**\r\n * Will the grid display the lines between each cell when it renders?\r\n *\r\n * @name Phaser.GameObjects.Grid#showOutline\r\n * @type {boolean}\r\n * @since 3.13.0\r\n */\r\n this.showOutline = true;\r\n\r\n /**\r\n * Will the grid render the alternating cells in the `altFillColor`?\r\n *\r\n * @name Phaser.GameObjects.Grid#showAltCells\r\n * @type {boolean}\r\n * @since 3.13.0\r\n */\r\n this.showAltCells = false;\r\n\r\n /**\r\n * The color the alternating grid cells will be filled with, i.e. 0xff0000 for red.\r\n *\r\n * @name Phaser.GameObjects.Grid#altFillColor\r\n * @type {number}\r\n * @since 3.13.0\r\n */\r\n this.altFillColor;\r\n\r\n /**\r\n * The alpha the alternating grid cells will be filled with.\r\n * You can also set the alpha of the overall Shape using its `alpha` property.\r\n *\r\n * @name Phaser.GameObjects.Grid#altFillAlpha\r\n * @type {number}\r\n * @since 3.13.0\r\n */\r\n this.altFillAlpha;\r\n\r\n this.setPosition(x, y);\r\n this.setSize(width, height);\r\n\r\n if (fillColor !== undefined)\r\n {\r\n this.setFillStyle(fillColor, fillAlpha);\r\n }\r\n\r\n if (outlineFillColor !== undefined)\r\n {\r\n this.setOutlineStyle(outlineFillColor, outlineFillAlpha);\r\n }\r\n\r\n this.updateDisplayOrigin();\r\n },\r\n\r\n /**\r\n * Sets the fill color and alpha level the grid cells will use when rendering.\r\n * \r\n * If this method is called with no values then the grid cells will not be rendered, \r\n * however the grid lines and alternating cells may still be.\r\n * \r\n * Also see the `setOutlineStyle` and `setAltFillStyle` methods.\r\n * \r\n * This call can be chained.\r\n *\r\n * @method Phaser.GameObjects.Grid#setFillStyle\r\n * @since 3.13.0\r\n * \r\n * @param {number} [fillColor] - The color the grid cells will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha=1] - The alpha the grid cells will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setFillStyle: function (fillColor, fillAlpha)\r\n {\r\n if (fillAlpha === undefined) { fillAlpha = 1; }\r\n\r\n if (fillColor === undefined)\r\n {\r\n this.showCells = false;\r\n }\r\n else\r\n {\r\n this.fillColor = fillColor;\r\n this.fillAlpha = fillAlpha;\r\n this.showCells = true;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the fill color and alpha level that the alternating grid cells will use.\r\n * \r\n * If this method is called with no values then alternating grid cells will not be rendered in a different color.\r\n * \r\n * Also see the `setOutlineStyle` and `setFillStyle` methods.\r\n * \r\n * This call can be chained.\r\n *\r\n * @method Phaser.GameObjects.Grid#setAltFillStyle\r\n * @since 3.13.0\r\n * \r\n * @param {number} [fillColor] - The color the alternating grid cells will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha=1] - The alpha the alternating grid cells will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setAltFillStyle: function (fillColor, fillAlpha)\r\n {\r\n if (fillAlpha === undefined) { fillAlpha = 1; }\r\n\r\n if (fillColor === undefined)\r\n {\r\n this.showAltCells = false;\r\n }\r\n else\r\n {\r\n this.altFillColor = fillColor;\r\n this.altFillAlpha = fillAlpha;\r\n this.showAltCells = true;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the fill color and alpha level that the lines between each grid cell will use.\r\n * \r\n * If this method is called with no values then the grid lines will not be rendered at all, however\r\n * the cells themselves may still be if they have colors set.\r\n * \r\n * Also see the `setFillStyle` and `setAltFillStyle` methods.\r\n * \r\n * This call can be chained.\r\n *\r\n * @method Phaser.GameObjects.Grid#setOutlineStyle\r\n * @since 3.13.0\r\n * \r\n * @param {number} [fillColor] - The color the lines between the grid cells will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha=1] - The alpha the lines between the grid cells will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setOutlineStyle: function (fillColor, fillAlpha)\r\n {\r\n if (fillAlpha === undefined) { fillAlpha = 1; }\r\n\r\n if (fillColor === undefined)\r\n {\r\n this.showOutline = false;\r\n }\r\n else\r\n {\r\n this.outlineFillColor = fillColor;\r\n this.outlineFillAlpha = fillAlpha;\r\n this.showOutline = true;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Grid;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9ncmlkL0dyaWQuanM/ODBmYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHNFQUFzQjtBQUMxQyxZQUFZLG1CQUFPLENBQUMsc0VBQVU7QUFDOUIsaUJBQWlCLG1CQUFPLENBQUMsb0ZBQWM7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTztBQUNyQyw4QkFBOEIsT0FBTztBQUNyQyxrQ0FBa0MsYUFBYTtBQUMvQyxtQ0FBbUMsY0FBYztBQUNqRCxzQ0FBc0MsZ0JBQWdCO0FBQ3RELHVDQUF1QyxpQkFBaUI7O0FBRXhEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxlQUFlOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxlQUFlOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLGVBQWU7O0FBRXJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL2dyaWQvR3JpZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIFNoYXBlID0gcmVxdWlyZSgnLi4vU2hhcGUnKTtcclxudmFyIEdyaWRSZW5kZXIgPSByZXF1aXJlKCcuL0dyaWRSZW5kZXInKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBHcmlkIFNoYXBlIGlzIGEgR2FtZSBPYmplY3QgdGhhdCBjYW4gYmUgYWRkZWQgdG8gYSBTY2VuZSwgR3JvdXAgb3IgQ29udGFpbmVyLiBZb3UgY2FuXHJcbiAqIHRyZWF0IGl0IGxpa2UgYW55IG90aGVyIEdhbWUgT2JqZWN0IGluIHlvdXIgZ2FtZSwgc3VjaCBhcyB0d2VlbmluZyBpdCwgc2NhbGluZyBpdCwgb3IgZW5hYmxpbmdcclxuICogaXQgZm9yIGlucHV0IG9yIHBoeXNpY3MuIEl0IHByb3ZpZGVzIGEgcXVpY2sgYW5kIGVhc3kgd2F5IGZvciB5b3UgdG8gcmVuZGVyIHRoaXMgc2hhcGUgaW4geW91clxyXG4gKiBnYW1lIHdpdGhvdXQgdXNpbmcgYSB0ZXh0dXJlLCB3aGlsZSBzdGlsbCB0YWtpbmcgYWR2YW50YWdlIG9mIGJlaW5nIGZ1bGx5IGJhdGNoZWQgaW4gV2ViR0wuXHJcbiAqIFxyXG4gKiBUaGlzIHNoYXBlIHN1cHBvcnRzIG9ubHkgZmlsbCBjb2xvcnMgYW5kIGNhbm5vdCBiZSBzdHJva2VkLlxyXG4gKiBcclxuICogQSBHcmlkIFNoYXBlIGFsbG93cyB5b3UgdG8gZGlzcGxheSBhIGdyaWQgaW4geW91ciBnYW1lLCB3aGVyZSB5b3UgY2FuIGNvbnRyb2wgdGhlIHNpemUgb2YgdGhlXHJcbiAqIGdyaWQgYXMgd2VsbCBhcyB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgZ3JpZCBjZWxscy4gWW91IGNhbiBzZXQgYSBmaWxsIGNvbG9yIGZvciBlYWNoIGdyaWRcclxuICogY2VsbCBhcyB3ZWxsIGFzIGFuIGFsdGVybmF0ZSBmaWxsIGNvbG9yLiBXaGVuIHRoZSBhbHRlcm5hdGUgZmlsbCBjb2xvciBpcyBzZXQgdGhlbiB0aGUgZ3JpZFxyXG4gKiBjZWxscyB3aWxsIGFsdGVybmF0ZSB0aGUgZmlsbCBjb2xvcnMgYXMgdGhleSByZW5kZXIsIGNyZWF0aW5nIGEgY2hlc3MtYm9hcmQgZWZmZWN0LiBZb3UgY2FuXHJcbiAqIGFsc28gb3B0aW9uYWxseSBoYXZlIGFuIG91dGxpbmUgZmlsbCBjb2xvci4gSWYgc2V0LCB0aGlzIGRyYXdzIGxpbmVzIGJldHdlZW4gdGhlIGdyaWQgY2VsbHNcclxuICogaW4gdGhlIGdpdmVuIGNvbG9yLiBJZiB5b3Ugc3BlY2lmeSBhbiBvdXRsaW5lIGNvbG9yIHdpdGggYW4gYWxwaGEgb2YgemVybywgdGhlbiBpdCB3aWxsIGRyYXdcclxuICogdGhlIGNlbGxzIHNwYWNlZCBvdXQsIGJ1dCB3aXRob3V0IHRoZSBsaW5lcyBiZXR3ZWVuIHRoZW0uXHJcbiAqXHJcbiAqIEBjbGFzcyBHcmlkXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFwZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuIEEgR2FtZSBPYmplY3QgY2FuIG9ubHkgYmVsb25nIHRvIG9uZSBTY2VuZSBhdCBhIHRpbWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGg9MTI4XSAtIFRoZSB3aWR0aCBvZiB0aGUgZ3JpZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtoZWlnaHQ9MTI4XSAtIFRoZSBoZWlnaHQgb2YgdGhlIGdyaWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbY2VsbFdpZHRoPTMyXSAtIFRoZSB3aWR0aCBvZiBvbmUgY2VsbCBpbiB0aGUgZ3JpZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtjZWxsSGVpZ2h0PTMyXSAtIFRoZSBoZWlnaHQgb2Ygb25lIGNlbGwgaW4gdGhlIGdyaWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbENvbG9yXSAtIFRoZSBjb2xvciB0aGUgZ3JpZCBjZWxscyB3aWxsIGJlIGZpbGxlZCB3aXRoLCBpLmUuIDB4ZmYwMDAwIGZvciByZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbEFscGhhXSAtIFRoZSBhbHBoYSB0aGUgZ3JpZCBjZWxscyB3aWxsIGJlIGZpbGxlZCB3aXRoLiBZb3UgY2FuIGFsc28gc2V0IHRoZSBhbHBoYSBvZiB0aGUgb3ZlcmFsbCBTaGFwZSB1c2luZyBpdHMgYGFscGhhYCBwcm9wZXJ0eS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvdXRsaW5lRmlsbENvbG9yXSAtIFRoZSBjb2xvciBvZiB0aGUgbGluZXMgYmV0d2VlbiB0aGUgZ3JpZCBjZWxscy4gU2VlIHRoZSBgc2V0T3V0bGluZWAgbWV0aG9kLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW291dGxpbmVGaWxsQWxwaGFdIC0gVGhlIGFscGhhIG9mIHRoZSBsaW5lcyBiZXR3ZWVuIHRoZSBncmlkIGNlbGxzLlxyXG4gKi9cclxudmFyIEdyaWQgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IFNoYXBlLFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIEdyaWRSZW5kZXJcclxuICAgIF0sXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBHcmlkIChzY2VuZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgY2VsbFdpZHRoLCBjZWxsSGVpZ2h0LCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgb3V0bGluZUZpbGxDb2xvciwgb3V0bGluZUZpbGxBbHBoYSlcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7IHggPSAwOyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0gMDsgfVxyXG4gICAgICAgIGlmICh3aWR0aCA9PT0gdW5kZWZpbmVkKSB7IHdpZHRoID0gMTI4OyB9XHJcbiAgICAgICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IGhlaWdodCA9IDEyODsgfVxyXG4gICAgICAgIGlmIChjZWxsV2lkdGggPT09IHVuZGVmaW5lZCkgeyBjZWxsV2lkdGggPSAzMjsgfVxyXG4gICAgICAgIGlmIChjZWxsSGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgY2VsbEhlaWdodCA9IDMyOyB9XHJcblxyXG4gICAgICAgIFNoYXBlLmNhbGwodGhpcywgc2NlbmUsICdHcmlkJywgbnVsbCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB3aWR0aCBvZiBlYWNoIGdyaWQgY2VsbC5cclxuICAgICAgICAgKiBNdXN0IGJlIGEgcG9zaXRpdmUgdmFsdWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JpZCNjZWxsV2lkdGhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNlbGxXaWR0aCA9IGNlbGxXaWR0aDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGhlaWdodCBvZiBlYWNoIGdyaWQgY2VsbC5cclxuICAgICAgICAgKiBNdXN0IGJlIGEgcG9zaXRpdmUgdmFsdWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JpZCNjZWxsSGVpZ2h0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jZWxsSGVpZ2h0ID0gY2VsbEhlaWdodDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2lsbCB0aGUgZ3JpZCByZW5kZXIgaXRzIGNlbGxzIGluIHRoZSBgZmlsbENvbG9yYD9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HcmlkI3Nob3dDZWxsc1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNob3dDZWxscyA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjb2xvciBvZiB0aGUgbGluZXMgYmV0d2VlbiBlYWNoIGdyaWQgY2VsbC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HcmlkI291dGxpbmVGaWxsQ29sb3JcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm91dGxpbmVGaWxsQ29sb3IgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYWxwaGEgdmFsdWUgZm9yIHRoZSBjb2xvciBvZiB0aGUgbGluZXMgYmV0d2VlbiBlYWNoIGdyaWQgY2VsbC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HcmlkI291dGxpbmVGaWxsQWxwaGFcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm91dGxpbmVGaWxsQWxwaGEgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaWxsIHRoZSBncmlkIGRpc3BsYXkgdGhlIGxpbmVzIGJldHdlZW4gZWFjaCBjZWxsIHdoZW4gaXQgcmVuZGVycz9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5HcmlkI3Nob3dPdXRsaW5lXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2hvd091dGxpbmUgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaWxsIHRoZSBncmlkIHJlbmRlciB0aGUgYWx0ZXJuYXRpbmcgY2VsbHMgaW4gdGhlIGBhbHRGaWxsQ29sb3JgP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkdyaWQjc2hvd0FsdENlbGxzXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2hvd0FsdENlbGxzID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjb2xvciB0aGUgYWx0ZXJuYXRpbmcgZ3JpZCBjZWxscyB3aWxsIGJlIGZpbGxlZCB3aXRoLCBpLmUuIDB4ZmYwMDAwIGZvciByZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JpZCNhbHRGaWxsQ29sb3JcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFsdEZpbGxDb2xvcjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGFscGhhIHRoZSBhbHRlcm5hdGluZyBncmlkIGNlbGxzIHdpbGwgYmUgZmlsbGVkIHdpdGguXHJcbiAgICAgICAgICogWW91IGNhbiBhbHNvIHNldCB0aGUgYWxwaGEgb2YgdGhlIG92ZXJhbGwgU2hhcGUgdXNpbmcgaXRzIGBhbHBoYWAgcHJvcGVydHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuR3JpZCNhbHRGaWxsQWxwaGFcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFsdEZpbGxBbHBoYTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcclxuICAgICAgICB0aGlzLnNldFNpemUod2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgICAgIGlmIChmaWxsQ29sb3IgIT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsbFN0eWxlKGZpbGxDb2xvciwgZmlsbEFscGhhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvdXRsaW5lRmlsbENvbG9yICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldE91dGxpbmVTdHlsZShvdXRsaW5lRmlsbENvbG9yLCBvdXRsaW5lRmlsbEFscGhhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlRGlzcGxheU9yaWdpbigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGZpbGwgY29sb3IgYW5kIGFscGhhIGxldmVsIHRoZSBncmlkIGNlbGxzIHdpbGwgdXNlIHdoZW4gcmVuZGVyaW5nLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgd2l0aCBubyB2YWx1ZXMgdGhlbiB0aGUgZ3JpZCBjZWxscyB3aWxsIG5vdCBiZSByZW5kZXJlZCwgXHJcbiAgICAgKiBob3dldmVyIHRoZSBncmlkIGxpbmVzIGFuZCBhbHRlcm5hdGluZyBjZWxscyBtYXkgc3RpbGwgYmUuXHJcbiAgICAgKiBcclxuICAgICAqIEFsc28gc2VlIHRoZSBgc2V0T3V0bGluZVN0eWxlYCBhbmQgYHNldEFsdEZpbGxTdHlsZWAgbWV0aG9kcy5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBjYWxsIGNhbiBiZSBjaGFpbmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyaWQjc2V0RmlsbFN0eWxlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbENvbG9yXSAtIFRoZSBjb2xvciB0aGUgZ3JpZCBjZWxscyB3aWxsIGJlIGZpbGxlZCB3aXRoLCBpLmUuIDB4ZmYwMDAwIGZvciByZWQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxBbHBoYT0xXSAtIFRoZSBhbHBoYSB0aGUgZ3JpZCBjZWxscyB3aWxsIGJlIGZpbGxlZCB3aXRoLiBZb3UgY2FuIGFsc28gc2V0IHRoZSBhbHBoYSBvZiB0aGUgb3ZlcmFsbCBTaGFwZSB1c2luZyBpdHMgYGFscGhhYCBwcm9wZXJ0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRGaWxsU3R5bGU6IGZ1bmN0aW9uIChmaWxsQ29sb3IsIGZpbGxBbHBoYSlcclxuICAgIHtcclxuICAgICAgICBpZiAoZmlsbEFscGhhID09PSB1bmRlZmluZWQpIHsgZmlsbEFscGhhID0gMTsgfVxyXG5cclxuICAgICAgICBpZiAoZmlsbENvbG9yID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dDZWxscyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGxDb2xvciA9IGZpbGxDb2xvcjtcclxuICAgICAgICAgICAgdGhpcy5maWxsQWxwaGEgPSBmaWxsQWxwaGE7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0NlbGxzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGZpbGwgY29sb3IgYW5kIGFscGhhIGxldmVsIHRoYXQgdGhlIGFsdGVybmF0aW5nIGdyaWQgY2VsbHMgd2lsbCB1c2UuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aXRoIG5vIHZhbHVlcyB0aGVuIGFsdGVybmF0aW5nIGdyaWQgY2VsbHMgd2lsbCBub3QgYmUgcmVuZGVyZWQgaW4gYSBkaWZmZXJlbnQgY29sb3IuXHJcbiAgICAgKiBcclxuICAgICAqIEFsc28gc2VlIHRoZSBgc2V0T3V0bGluZVN0eWxlYCBhbmQgYHNldEZpbGxTdHlsZWAgbWV0aG9kcy5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBjYWxsIGNhbiBiZSBjaGFpbmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdyaWQjc2V0QWx0RmlsbFN0eWxlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbENvbG9yXSAtIFRoZSBjb2xvciB0aGUgYWx0ZXJuYXRpbmcgZ3JpZCBjZWxscyB3aWxsIGJlIGZpbGxlZCB3aXRoLCBpLmUuIDB4ZmYwMDAwIGZvciByZWQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxBbHBoYT0xXSAtIFRoZSBhbHBoYSB0aGUgYWx0ZXJuYXRpbmcgZ3JpZCBjZWxscyB3aWxsIGJlIGZpbGxlZCB3aXRoLiBZb3UgY2FuIGFsc28gc2V0IHRoZSBhbHBoYSBvZiB0aGUgb3ZlcmFsbCBTaGFwZSB1c2luZyBpdHMgYGFscGhhYCBwcm9wZXJ0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRBbHRGaWxsU3R5bGU6IGZ1bmN0aW9uIChmaWxsQ29sb3IsIGZpbGxBbHBoYSlcclxuICAgIHtcclxuICAgICAgICBpZiAoZmlsbEFscGhhID09PSB1bmRlZmluZWQpIHsgZmlsbEFscGhhID0gMTsgfVxyXG5cclxuICAgICAgICBpZiAoZmlsbENvbG9yID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dBbHRDZWxscyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmFsdEZpbGxDb2xvciA9IGZpbGxDb2xvcjtcclxuICAgICAgICAgICAgdGhpcy5hbHRGaWxsQWxwaGEgPSBmaWxsQWxwaGE7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0FsdENlbGxzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGZpbGwgY29sb3IgYW5kIGFscGhhIGxldmVsIHRoYXQgdGhlIGxpbmVzIGJldHdlZW4gZWFjaCBncmlkIGNlbGwgd2lsbCB1c2UuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aXRoIG5vIHZhbHVlcyB0aGVuIHRoZSBncmlkIGxpbmVzIHdpbGwgbm90IGJlIHJlbmRlcmVkIGF0IGFsbCwgaG93ZXZlclxyXG4gICAgICogdGhlIGNlbGxzIHRoZW1zZWx2ZXMgbWF5IHN0aWxsIGJlIGlmIHRoZXkgaGF2ZSBjb2xvcnMgc2V0LlxyXG4gICAgICogXHJcbiAgICAgKiBBbHNvIHNlZSB0aGUgYHNldEZpbGxTdHlsZWAgYW5kIGBzZXRBbHRGaWxsU3R5bGVgIG1ldGhvZHMuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgY2FsbCBjYW4gYmUgY2hhaW5lZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HcmlkI3NldE91dGxpbmVTdHlsZVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxDb2xvcl0gLSBUaGUgY29sb3IgdGhlIGxpbmVzIGJldHdlZW4gdGhlIGdyaWQgY2VsbHMgd2lsbCBiZSBmaWxsZWQgd2l0aCwgaS5lLiAweGZmMDAwMCBmb3IgcmVkLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsQWxwaGE9MV0gLSBUaGUgYWxwaGEgdGhlIGxpbmVzIGJldHdlZW4gdGhlIGdyaWQgY2VsbHMgd2lsbCBiZSBmaWxsZWQgd2l0aC4gWW91IGNhbiBhbHNvIHNldCB0aGUgYWxwaGEgb2YgdGhlIG92ZXJhbGwgU2hhcGUgdXNpbmcgaXRzIGBhbHBoYWAgcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0T3V0bGluZVN0eWxlOiBmdW5jdGlvbiAoZmlsbENvbG9yLCBmaWxsQWxwaGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGZpbGxBbHBoYSA9PT0gdW5kZWZpbmVkKSB7IGZpbGxBbHBoYSA9IDE7IH1cclxuXHJcbiAgICAgICAgaWYgKGZpbGxDb2xvciA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93T3V0bGluZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm91dGxpbmVGaWxsQ29sb3IgPSBmaWxsQ29sb3I7XHJcbiAgICAgICAgICAgIHRoaXMub3V0bGluZUZpbGxBbHBoYSA9IGZpbGxBbHBoYTtcclxuICAgICAgICAgICAgdGhpcy5zaG93T3V0bGluZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHcmlkO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/grid/Grid.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/grid/GridCanvasRenderer.js":
/*!******************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/grid/GridCanvasRenderer.js ***!
\******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillStyleCanvas = __webpack_require__(/*! ../FillStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js\");\r\nvar LineStyleCanvas = __webpack_require__(/*! ../LineStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/LineStyleCanvas.js\");\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Grid#renderCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Grid} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar GridCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var ctx = renderer.currentContext;\r\n\r\n if (SetTransform(renderer, ctx, src, camera, parentMatrix))\r\n {\r\n var dx = -src._displayOriginX;\r\n var dy = -src._displayOriginY;\r\n\r\n var alpha = camera.alpha * src.alpha;\r\n\r\n // Work out the grid size\r\n\r\n var width = src.width;\r\n var height = src.height;\r\n\r\n var cellWidth = src.cellWidth;\r\n var cellHeight = src.cellHeight;\r\n\r\n var gridWidth = Math.ceil(width / cellWidth);\r\n var gridHeight = Math.ceil(height / cellHeight);\r\n\r\n var cellWidthA = cellWidth;\r\n var cellHeightA = cellHeight;\r\n\r\n var cellWidthB = cellWidth - ((gridWidth * cellWidth) - width);\r\n var cellHeightB = cellHeight - ((gridHeight * cellHeight) - height);\r\n\r\n var showCells = src.showCells;\r\n var showAltCells = src.showAltCells;\r\n var showOutline = src.showOutline;\r\n\r\n var x = 0;\r\n var y = 0;\r\n var r = 0;\r\n var cw = 0;\r\n var ch = 0;\r\n\r\n if (showOutline)\r\n {\r\n // To make room for the grid lines (in case alpha < 1)\r\n cellWidthA--;\r\n cellHeightA--;\r\n\r\n if (cellWidthB === cellWidth)\r\n {\r\n cellWidthB--;\r\n }\r\n\r\n if (cellHeightB === cellHeight)\r\n {\r\n cellHeightB--;\r\n }\r\n }\r\n\r\n if (showCells && src.fillAlpha > 0)\r\n {\r\n FillStyleCanvas(ctx, src);\r\n\r\n for (y = 0; y < gridHeight; y++)\r\n {\r\n if (showAltCells)\r\n {\r\n r = y % 2;\r\n }\r\n\r\n for (x = 0; x < gridWidth; x++)\r\n {\r\n if (showAltCells && r)\r\n {\r\n r = 0;\r\n continue;\r\n }\r\n\r\n r++;\r\n\r\n cw = (x < gridWidth - 1) ? cellWidthA : cellWidthB;\r\n ch = (y < gridHeight - 1) ? cellHeightA : cellHeightB;\r\n\r\n ctx.fillRect(\r\n dx + x * cellWidth,\r\n dy + y * cellHeight,\r\n cw,\r\n ch\r\n );\r\n }\r\n }\r\n }\r\n\r\n if (showAltCells && src.altFillAlpha > 0)\r\n {\r\n FillStyleCanvas(ctx, src, src.altFillColor, src.altFillAlpha * alpha);\r\n\r\n for (y = 0; y < gridHeight; y++)\r\n {\r\n if (showAltCells)\r\n {\r\n r = y % 2;\r\n }\r\n\r\n for (x = 0; x < gridWidth; x++)\r\n {\r\n if (showAltCells && !r)\r\n {\r\n r = 1;\r\n continue;\r\n }\r\n\r\n r = 0;\r\n\r\n cw = (x < gridWidth - 1) ? cellWidthA : cellWidthB;\r\n ch = (y < gridHeight - 1) ? cellHeightA : cellHeightB;\r\n\r\n ctx.fillRect(\r\n dx + x * cellWidth,\r\n dy + y * cellHeight,\r\n cw,\r\n ch\r\n );\r\n }\r\n }\r\n }\r\n\r\n if (showOutline && src.outlineFillAlpha > 0)\r\n {\r\n LineStyleCanvas(ctx, src, src.outlineFillColor, src.outlineFillAlpha * alpha);\r\n\r\n for (x = 1; x < gridWidth; x++)\r\n {\r\n var x1 = x * cellWidth;\r\n\r\n ctx.beginPath();\r\n\r\n ctx.moveTo(x1 + dx, dy);\r\n ctx.lineTo(x1 + dx, height + dy);\r\n\r\n ctx.stroke();\r\n }\r\n\r\n for (y = 1; y < gridHeight; y++)\r\n {\r\n var y1 = y * cellHeight;\r\n\r\n ctx.beginPath();\r\n\r\n ctx.moveTo(dx, y1 + dy);\r\n ctx.lineTo(dx + width, y1 + dy);\r\n\r\n ctx.stroke();\r\n }\r\n }\r\n\r\n // Restore the context saved in SetTransform\r\n ctx.restore();\r\n }\r\n};\r\n\r\nmodule.exports = GridCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9ncmlkL0dyaWRDYW52YXNSZW5kZXJlci5qcz9mZmU2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQywwRkFBb0I7QUFDbEQsc0JBQXNCLG1CQUFPLENBQUMsMEZBQW9CO0FBQ2xELG1CQUFtQixtQkFBTyxDQUFDLG9IQUE2Qzs7QUFFeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVyx3QkFBd0I7QUFDbkMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkIsZUFBZTtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkIsZUFBZTtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixlQUFlO0FBQ3RDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL2dyaWQvR3JpZENhbnZhc1JlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgRmlsbFN0eWxlQ2FudmFzID0gcmVxdWlyZSgnLi4vRmlsbFN0eWxlQ2FudmFzJyk7XHJcbnZhciBMaW5lU3R5bGVDYW52YXMgPSByZXF1aXJlKCcuLi9MaW5lU3R5bGVDYW52YXMnKTtcclxudmFyIFNldFRyYW5zZm9ybSA9IHJlcXVpcmUoJy4uLy4uLy4uL3JlbmRlcmVyL2NhbnZhcy91dGlscy9TZXRUcmFuc2Zvcm0nKTtcclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgQ2FudmFzIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JpZCNyZW5kZXJDYW52YXNcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIENhbnZhcyByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JpZH0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIEdyaWRDYW52YXNSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHZhciBjdHggPSByZW5kZXJlci5jdXJyZW50Q29udGV4dDtcclxuXHJcbiAgICBpZiAoU2V0VHJhbnNmb3JtKHJlbmRlcmVyLCBjdHgsIHNyYywgY2FtZXJhLCBwYXJlbnRNYXRyaXgpKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBkeCA9IC1zcmMuX2Rpc3BsYXlPcmlnaW5YO1xyXG4gICAgICAgIHZhciBkeSA9IC1zcmMuX2Rpc3BsYXlPcmlnaW5ZO1xyXG5cclxuICAgICAgICB2YXIgYWxwaGEgPSBjYW1lcmEuYWxwaGEgKiBzcmMuYWxwaGE7XHJcblxyXG4gICAgICAgIC8vICBXb3JrIG91dCB0aGUgZ3JpZCBzaXplXHJcblxyXG4gICAgICAgIHZhciB3aWR0aCA9IHNyYy53aWR0aDtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gc3JjLmhlaWdodDtcclxuXHJcbiAgICAgICAgdmFyIGNlbGxXaWR0aCA9IHNyYy5jZWxsV2lkdGg7XHJcbiAgICAgICAgdmFyIGNlbGxIZWlnaHQgPSBzcmMuY2VsbEhlaWdodDtcclxuXHJcbiAgICAgICAgdmFyIGdyaWRXaWR0aCA9IE1hdGguY2VpbCh3aWR0aCAvIGNlbGxXaWR0aCk7XHJcbiAgICAgICAgdmFyIGdyaWRIZWlnaHQgPSBNYXRoLmNlaWwoaGVpZ2h0IC8gY2VsbEhlaWdodCk7XHJcblxyXG4gICAgICAgIHZhciBjZWxsV2lkdGhBID0gY2VsbFdpZHRoO1xyXG4gICAgICAgIHZhciBjZWxsSGVpZ2h0QSA9IGNlbGxIZWlnaHQ7XHJcblxyXG4gICAgICAgIHZhciBjZWxsV2lkdGhCID0gY2VsbFdpZHRoIC0gKChncmlkV2lkdGggKiBjZWxsV2lkdGgpIC0gd2lkdGgpO1xyXG4gICAgICAgIHZhciBjZWxsSGVpZ2h0QiA9IGNlbGxIZWlnaHQgLSAoKGdyaWRIZWlnaHQgKiBjZWxsSGVpZ2h0KSAtIGhlaWdodCk7XHJcblxyXG4gICAgICAgIHZhciBzaG93Q2VsbHMgPSBzcmMuc2hvd0NlbGxzO1xyXG4gICAgICAgIHZhciBzaG93QWx0Q2VsbHMgPSBzcmMuc2hvd0FsdENlbGxzO1xyXG4gICAgICAgIHZhciBzaG93T3V0bGluZSA9IHNyYy5zaG93T3V0bGluZTtcclxuXHJcbiAgICAgICAgdmFyIHggPSAwO1xyXG4gICAgICAgIHZhciB5ID0gMDtcclxuICAgICAgICB2YXIgciA9IDA7XHJcbiAgICAgICAgdmFyIGN3ID0gMDtcclxuICAgICAgICB2YXIgY2ggPSAwO1xyXG5cclxuICAgICAgICBpZiAoc2hvd091dGxpbmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgVG8gbWFrZSByb29tIGZvciB0aGUgZ3JpZCBsaW5lcyAoaW4gY2FzZSBhbHBoYSA8IDEpXHJcbiAgICAgICAgICAgIGNlbGxXaWR0aEEtLTtcclxuICAgICAgICAgICAgY2VsbEhlaWdodEEtLTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjZWxsV2lkdGhCID09PSBjZWxsV2lkdGgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNlbGxXaWR0aEItLTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNlbGxIZWlnaHRCID09PSBjZWxsSGVpZ2h0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjZWxsSGVpZ2h0Qi0tO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2hvd0NlbGxzICYmIHNyYy5maWxsQWxwaGEgPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgRmlsbFN0eWxlQ2FudmFzKGN0eCwgc3JjKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCBncmlkSGVpZ2h0OyB5KyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmIChzaG93QWx0Q2VsbHMpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgciA9IHkgJSAyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCBncmlkV2lkdGg7IHgrKylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvd0FsdENlbGxzICYmIHIpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByKys7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGN3ID0gKHggPCBncmlkV2lkdGggLSAxKSA/IGNlbGxXaWR0aEEgOiBjZWxsV2lkdGhCO1xyXG4gICAgICAgICAgICAgICAgICAgIGNoID0gKHkgPCBncmlkSGVpZ2h0IC0gMSkgPyBjZWxsSGVpZ2h0QSA6IGNlbGxIZWlnaHRCO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGR4ICsgeCAqIGNlbGxXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZHkgKyB5ICogY2VsbEhlaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3csXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNob3dBbHRDZWxscyAmJiBzcmMuYWx0RmlsbEFscGhhID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIEZpbGxTdHlsZUNhbnZhcyhjdHgsIHNyYywgc3JjLmFsdEZpbGxDb2xvciwgc3JjLmFsdEZpbGxBbHBoYSAqIGFscGhhKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCBncmlkSGVpZ2h0OyB5KyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmIChzaG93QWx0Q2VsbHMpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgciA9IHkgJSAyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCBncmlkV2lkdGg7IHgrKylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvd0FsdENlbGxzICYmICFyKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgciA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgciA9IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGN3ID0gKHggPCBncmlkV2lkdGggLSAxKSA/IGNlbGxXaWR0aEEgOiBjZWxsV2lkdGhCO1xyXG4gICAgICAgICAgICAgICAgICAgIGNoID0gKHkgPCBncmlkSGVpZ2h0IC0gMSkgPyBjZWxsSGVpZ2h0QSA6IGNlbGxIZWlnaHRCO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGR4ICsgeCAqIGNlbGxXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZHkgKyB5ICogY2VsbEhlaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3csXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNob3dPdXRsaW5lICYmIHNyYy5vdXRsaW5lRmlsbEFscGhhID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIExpbmVTdHlsZUNhbnZhcyhjdHgsIHNyYywgc3JjLm91dGxpbmVGaWxsQ29sb3IsIHNyYy5vdXRsaW5lRmlsbEFscGhhICogYWxwaGEpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh4ID0gMTsgeCA8IGdyaWRXaWR0aDsgeCsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgeDEgPSB4ICogY2VsbFdpZHRoO1xyXG5cclxuICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjdHgubW92ZVRvKHgxICsgZHgsIGR5KTtcclxuICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oeDEgKyBkeCwgaGVpZ2h0ICsgZHkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGN0eC5zdHJva2UoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yICh5ID0gMTsgeSA8IGdyaWRIZWlnaHQ7IHkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIHkxID0geSAqIGNlbGxIZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oZHgsIHkxICsgZHkpO1xyXG4gICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhkeCArIHdpZHRoLCB5MSArIGR5KTtcclxuXHJcbiAgICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBSZXN0b3JlIHRoZSBjb250ZXh0IHNhdmVkIGluIFNldFRyYW5zZm9ybVxyXG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdyaWRDYW52YXNSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/grid/GridCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/grid/GridFactory.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/grid/GridFactory.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar Grid = __webpack_require__(/*! ./Grid */ \"./node_modules/phaser/src/gameobjects/shape/grid/Grid.js\");\r\n\r\n/**\r\n * Creates a new Grid Shape Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Grid Game Object has been built into Phaser.\r\n * \r\n * The Grid Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports only fill colors and cannot be stroked.\r\n * \r\n * A Grid Shape allows you to display a grid in your game, where you can control the size of the\r\n * grid as well as the width and height of the grid cells. You can set a fill color for each grid\r\n * cell as well as an alternate fill color. When the alternate fill color is set then the grid\r\n * cells will alternate the fill colors as they render, creating a chess-board effect. You can\r\n * also optionally have an outline fill color. If set, this draws lines between the grid cells\r\n * in the given color. If you specify an outline color with an alpha of zero, then it will draw\r\n * the cells spaced out, but without the lines between them.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#grid\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [width=128] - The width of the grid.\r\n * @param {number} [height=128] - The height of the grid.\r\n * @param {number} [cellWidth=32] - The width of one cell in the grid.\r\n * @param {number} [cellHeight=32] - The height of one cell in the grid.\r\n * @param {number} [fillColor] - The color the grid cells will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the grid cells will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n * @param {number} [outlineFillColor] - The color of the lines between the grid cells.\r\n * @param {number} [outlineFillAlpha] - The alpha of the lines between the grid cells.\r\n *\r\n * @return {Phaser.GameObjects.Grid} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('grid', function (x, y, width, height, cellWidth, cellHeight, fillColor, fillAlpha, outlineFillColor, outlineFillAlpha)\r\n{\r\n return this.displayList.add(new Grid(this.scene, x, y, width, height, cellWidth, cellHeight, fillColor, fillAlpha, outlineFillColor, outlineFillAlpha));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9ncmlkL0dyaWRGYWN0b3J5LmpzP2IxMGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHdCQUF3QixtQkFBTyxDQUFDLDJGQUF5QjtBQUN6RCxXQUFXLG1CQUFPLENBQUMsd0VBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHdCQUF3QjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9ncmlkL0dyaWRGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG52YXIgR3JpZCA9IHJlcXVpcmUoJy4vR3JpZCcpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgR3JpZCBTaGFwZSBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIEdyaWQgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIFxyXG4gKiBUaGUgR3JpZCBTaGFwZSBpcyBhIEdhbWUgT2JqZWN0IHRoYXQgY2FuIGJlIGFkZGVkIHRvIGEgU2NlbmUsIEdyb3VwIG9yIENvbnRhaW5lci4gWW91IGNhblxyXG4gKiB0cmVhdCBpdCBsaWtlIGFueSBvdGhlciBHYW1lIE9iamVjdCBpbiB5b3VyIGdhbWUsIHN1Y2ggYXMgdHdlZW5pbmcgaXQsIHNjYWxpbmcgaXQsIG9yIGVuYWJsaW5nXHJcbiAqIGl0IGZvciBpbnB1dCBvciBwaHlzaWNzLiBJdCBwcm92aWRlcyBhIHF1aWNrIGFuZCBlYXN5IHdheSBmb3IgeW91IHRvIHJlbmRlciB0aGlzIHNoYXBlIGluIHlvdXJcclxuICogZ2FtZSB3aXRob3V0IHVzaW5nIGEgdGV4dHVyZSwgd2hpbGUgc3RpbGwgdGFraW5nIGFkdmFudGFnZSBvZiBiZWluZyBmdWxseSBiYXRjaGVkIGluIFdlYkdMLlxyXG4gKiBcclxuICogVGhpcyBzaGFwZSBzdXBwb3J0cyBvbmx5IGZpbGwgY29sb3JzIGFuZCBjYW5ub3QgYmUgc3Ryb2tlZC5cclxuICogXHJcbiAqIEEgR3JpZCBTaGFwZSBhbGxvd3MgeW91IHRvIGRpc3BsYXkgYSBncmlkIGluIHlvdXIgZ2FtZSwgd2hlcmUgeW91IGNhbiBjb250cm9sIHRoZSBzaXplIG9mIHRoZVxyXG4gKiBncmlkIGFzIHdlbGwgYXMgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGdyaWQgY2VsbHMuIFlvdSBjYW4gc2V0IGEgZmlsbCBjb2xvciBmb3IgZWFjaCBncmlkXHJcbiAqIGNlbGwgYXMgd2VsbCBhcyBhbiBhbHRlcm5hdGUgZmlsbCBjb2xvci4gV2hlbiB0aGUgYWx0ZXJuYXRlIGZpbGwgY29sb3IgaXMgc2V0IHRoZW4gdGhlIGdyaWRcclxuICogY2VsbHMgd2lsbCBhbHRlcm5hdGUgdGhlIGZpbGwgY29sb3JzIGFzIHRoZXkgcmVuZGVyLCBjcmVhdGluZyBhIGNoZXNzLWJvYXJkIGVmZmVjdC4gWW91IGNhblxyXG4gKiBhbHNvIG9wdGlvbmFsbHkgaGF2ZSBhbiBvdXRsaW5lIGZpbGwgY29sb3IuIElmIHNldCwgdGhpcyBkcmF3cyBsaW5lcyBiZXR3ZWVuIHRoZSBncmlkIGNlbGxzXHJcbiAqIGluIHRoZSBnaXZlbiBjb2xvci4gSWYgeW91IHNwZWNpZnkgYW4gb3V0bGluZSBjb2xvciB3aXRoIGFuIGFscGhhIG9mIHplcm8sIHRoZW4gaXQgd2lsbCBkcmF3XHJcbiAqIHRoZSBjZWxscyBzcGFjZWQgb3V0LCBidXQgd2l0aG91dCB0aGUgbGluZXMgYmV0d2VlbiB0aGVtLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0RmFjdG9yeSNncmlkXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt3aWR0aD0xMjhdIC0gVGhlIHdpZHRoIG9mIHRoZSBncmlkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodD0xMjhdIC0gVGhlIGhlaWdodCBvZiB0aGUgZ3JpZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtjZWxsV2lkdGg9MzJdIC0gVGhlIHdpZHRoIG9mIG9uZSBjZWxsIGluIHRoZSBncmlkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2NlbGxIZWlnaHQ9MzJdIC0gVGhlIGhlaWdodCBvZiBvbmUgY2VsbCBpbiB0aGUgZ3JpZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsQ29sb3JdIC0gVGhlIGNvbG9yIHRoZSBncmlkIGNlbGxzIHdpbGwgYmUgZmlsbGVkIHdpdGgsIGkuZS4gMHhmZjAwMDAgZm9yIHJlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsQWxwaGFdIC0gVGhlIGFscGhhIHRoZSBncmlkIGNlbGxzIHdpbGwgYmUgZmlsbGVkIHdpdGguIFlvdSBjYW4gYWxzbyBzZXQgdGhlIGFscGhhIG9mIHRoZSBvdmVyYWxsIFNoYXBlIHVzaW5nIGl0cyBgYWxwaGFgIHByb3BlcnR5LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW291dGxpbmVGaWxsQ29sb3JdIC0gVGhlIGNvbG9yIG9mIHRoZSBsaW5lcyBiZXR3ZWVuIHRoZSBncmlkIGNlbGxzLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW291dGxpbmVGaWxsQWxwaGFdIC0gVGhlIGFscGhhIG9mIHRoZSBsaW5lcyBiZXR3ZWVuIHRoZSBncmlkIGNlbGxzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR3JpZH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0RmFjdG9yeS5yZWdpc3RlcignZ3JpZCcsIGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjZWxsV2lkdGgsIGNlbGxIZWlnaHQsIGZpbGxDb2xvciwgZmlsbEFscGhhLCBvdXRsaW5lRmlsbENvbG9yLCBvdXRsaW5lRmlsbEFscGhhKVxyXG57XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TGlzdC5hZGQobmV3IEdyaWQodGhpcy5zY2VuZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgY2VsbFdpZHRoLCBjZWxsSGVpZ2h0LCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgb3V0bGluZUZpbGxDb2xvciwgb3V0bGluZUZpbGxBbHBoYSkpO1xyXG59KTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/grid/GridFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/grid/GridRender.js":
/*!**********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/grid/GridRender.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./GridWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/shape/grid/GridWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./GridCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/shape/grid/GridCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9ncmlkL0dyaWRSZW5kZXIuanM/MTcxNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsb0VBQXFCO0FBQy9DLG1CQUFtQixtQkFBTyxDQUFDLG9FQUFxQjs7QUFFaEQsSUFBSSxJQUFxQjtBQUN6QjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLGtHQUFxQjtBQUMvQzs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsb0dBQXNCO0FBQ2pEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9ncmlkL0dyaWRSZW5kZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL05PT1AnKTtcclxudmFyIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL05PT1AnKTtcclxuXHJcbmlmICh0eXBlb2YgV0VCR0xfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi9HcmlkV2ViR0xSZW5kZXJlcicpO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIENBTlZBU19SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi9HcmlkQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/grid/GridRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/grid/GridWebGLRenderer.js":
/*!*****************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/grid/GridWebGLRenderer.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Grid#renderWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Grid} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar GridWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var pipeline = this.pipeline;\r\n\r\n var camMatrix = pipeline._tempMatrix1;\r\n var shapeMatrix = pipeline._tempMatrix2;\r\n var calcMatrix = pipeline._tempMatrix3;\r\n\r\n renderer.setPipeline(pipeline);\r\n\r\n shapeMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n camMatrix.copyFrom(camera.matrix);\r\n\r\n if (parentMatrix)\r\n {\r\n // Multiply the camera by the parent matrix\r\n camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n // Undo the camera scroll\r\n shapeMatrix.e = src.x;\r\n shapeMatrix.f = src.y;\r\n }\r\n else\r\n {\r\n shapeMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n shapeMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n }\r\n\r\n camMatrix.multiply(shapeMatrix, calcMatrix);\r\n\r\n calcMatrix.translate(-src._displayOriginX, -src._displayOriginY);\r\n\r\n var alpha = camera.alpha * src.alpha;\r\n\r\n // Work out the grid size\r\n\r\n var width = src.width;\r\n var height = src.height;\r\n\r\n var cellWidth = src.cellWidth;\r\n var cellHeight = src.cellHeight;\r\n\r\n var gridWidth = Math.ceil(width / cellWidth);\r\n var gridHeight = Math.ceil(height / cellHeight);\r\n\r\n var cellWidthA = cellWidth;\r\n var cellHeightA = cellHeight;\r\n\r\n var cellWidthB = cellWidth - ((gridWidth * cellWidth) - width);\r\n var cellHeightB = cellHeight - ((gridHeight * cellHeight) - height);\r\n\r\n var fillTint;\r\n var fillTintColor;\r\n\r\n var showCells = src.showCells;\r\n var showAltCells = src.showAltCells;\r\n var showOutline = src.showOutline;\r\n\r\n var x = 0;\r\n var y = 0;\r\n var r = 0;\r\n var cw = 0;\r\n var ch = 0;\r\n\r\n if (showOutline)\r\n {\r\n // To make room for the grid lines (in case alpha < 1)\r\n cellWidthA--;\r\n cellHeightA--;\r\n\r\n if (cellWidthB === cellWidth)\r\n {\r\n cellWidthB--;\r\n }\r\n\r\n if (cellHeightB === cellHeight)\r\n {\r\n cellHeightB--;\r\n }\r\n }\r\n\r\n if (showCells && src.fillAlpha > 0)\r\n {\r\n fillTint = pipeline.fillTint;\r\n fillTintColor = Utils.getTintAppendFloatAlphaAndSwap(src.fillColor, src.fillAlpha * alpha);\r\n \r\n fillTint.TL = fillTintColor;\r\n fillTint.TR = fillTintColor;\r\n fillTint.BL = fillTintColor;\r\n fillTint.BR = fillTintColor;\r\n\r\n for (y = 0; y < gridHeight; y++)\r\n {\r\n if (showAltCells)\r\n {\r\n r = y % 2;\r\n }\r\n\r\n for (x = 0; x < gridWidth; x++)\r\n {\r\n if (showAltCells && r)\r\n {\r\n r = 0;\r\n continue;\r\n }\r\n\r\n r++;\r\n\r\n cw = (x < gridWidth - 1) ? cellWidthA : cellWidthB;\r\n ch = (y < gridHeight - 1) ? cellHeightA : cellHeightB;\r\n\r\n pipeline.setTexture2D();\r\n\r\n pipeline.batchFillRect(\r\n x * cellWidth,\r\n y * cellHeight,\r\n cw,\r\n ch\r\n );\r\n }\r\n }\r\n }\r\n\r\n if (showAltCells && src.altFillAlpha > 0)\r\n {\r\n fillTint = pipeline.fillTint;\r\n fillTintColor = Utils.getTintAppendFloatAlphaAndSwap(src.altFillColor, src.altFillAlpha * alpha);\r\n \r\n fillTint.TL = fillTintColor;\r\n fillTint.TR = fillTintColor;\r\n fillTint.BL = fillTintColor;\r\n fillTint.BR = fillTintColor;\r\n\r\n for (y = 0; y < gridHeight; y++)\r\n {\r\n if (showAltCells)\r\n {\r\n r = y % 2;\r\n }\r\n\r\n for (x = 0; x < gridWidth; x++)\r\n {\r\n if (showAltCells && !r)\r\n {\r\n r = 1;\r\n continue;\r\n }\r\n\r\n r = 0;\r\n\r\n cw = (x < gridWidth - 1) ? cellWidthA : cellWidthB;\r\n ch = (y < gridHeight - 1) ? cellHeightA : cellHeightB;\r\n\r\n pipeline.setTexture2D();\r\n\r\n pipeline.batchFillRect(\r\n x * cellWidth,\r\n y * cellHeight,\r\n cw,\r\n ch\r\n );\r\n }\r\n }\r\n }\r\n\r\n if (showOutline && src.outlineFillAlpha > 0)\r\n {\r\n var strokeTint = pipeline.strokeTint;\r\n var color = Utils.getTintAppendFloatAlphaAndSwap(src.outlineFillColor, src.outlineFillAlpha * alpha);\r\n\r\n strokeTint.TL = color;\r\n strokeTint.TR = color;\r\n strokeTint.BL = color;\r\n strokeTint.BR = color;\r\n\r\n for (x = 1; x < gridWidth; x++)\r\n {\r\n var x1 = x * cellWidth;\r\n\r\n pipeline.setTexture2D();\r\n\r\n pipeline.batchLine(x1, 0, x1, height, 1, 1, 1, 0, false);\r\n }\r\n\r\n for (y = 1; y < gridHeight; y++)\r\n {\r\n var y1 = y * cellHeight;\r\n\r\n pipeline.setTexture2D();\r\n\r\n pipeline.batchLine(0, y1, width, y1, 1, 1, 1, 0, false);\r\n }\r\n }\r\n};\r\n\r\nmodule.exports = GridWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9ncmlkL0dyaWRXZWJHTFJlbmRlcmVyLmpzP2M3NjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyx3RkFBK0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsd0JBQXdCO0FBQ25DLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsZ0JBQWdCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGVBQWU7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixnQkFBZ0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsZUFBZTtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGVBQWU7QUFDbEM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQixnQkFBZ0I7QUFDbkM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL2dyaWQvR3JpZFdlYkdMUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBVdGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3JlbmRlcmVyL3dlYmdsL1V0aWxzJyk7XHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIFdlYkdMIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR3JpZCNyZW5kZXJXZWJHTFxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIFdlYkdMIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HcmlkfSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgR3JpZFdlYkdMUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgcGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lO1xyXG5cclxuICAgIHZhciBjYW1NYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDE7XHJcbiAgICB2YXIgc2hhcGVNYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDI7XHJcbiAgICB2YXIgY2FsY01hdHJpeCA9IHBpcGVsaW5lLl90ZW1wTWF0cml4MztcclxuXHJcbiAgICByZW5kZXJlci5zZXRQaXBlbGluZShwaXBlbGluZSk7XHJcblxyXG4gICAgc2hhcGVNYXRyaXguYXBwbHlJVFJTKHNyYy54LCBzcmMueSwgc3JjLnJvdGF0aW9uLCBzcmMuc2NhbGVYLCBzcmMuc2NhbGVZKTtcclxuXHJcbiAgICBjYW1NYXRyaXguY29weUZyb20oY2FtZXJhLm1hdHJpeCk7XHJcblxyXG4gICAgaWYgKHBhcmVudE1hdHJpeClcclxuICAgIHtcclxuICAgICAgICAvLyAgTXVsdGlwbHkgdGhlIGNhbWVyYSBieSB0aGUgcGFyZW50IG1hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseVdpdGhPZmZzZXQocGFyZW50TWF0cml4LCAtY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWCwgLWNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3RvclkpO1xyXG5cclxuICAgICAgICAvLyAgVW5kbyB0aGUgY2FtZXJhIHNjcm9sbFxyXG4gICAgICAgIHNoYXBlTWF0cml4LmUgPSBzcmMueDtcclxuICAgICAgICBzaGFwZU1hdHJpeC5mID0gc3JjLnk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgc2hhcGVNYXRyaXguZSAtPSBjYW1lcmEuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYO1xyXG4gICAgICAgIHNoYXBlTWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuICAgIH1cclxuXHJcbiAgICBjYW1NYXRyaXgubXVsdGlwbHkoc2hhcGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG5cclxuICAgIGNhbGNNYXRyaXgudHJhbnNsYXRlKC1zcmMuX2Rpc3BsYXlPcmlnaW5YLCAtc3JjLl9kaXNwbGF5T3JpZ2luWSk7XHJcblxyXG4gICAgdmFyIGFscGhhID0gY2FtZXJhLmFscGhhICogc3JjLmFscGhhO1xyXG5cclxuICAgIC8vICBXb3JrIG91dCB0aGUgZ3JpZCBzaXplXHJcblxyXG4gICAgdmFyIHdpZHRoID0gc3JjLndpZHRoO1xyXG4gICAgdmFyIGhlaWdodCA9IHNyYy5oZWlnaHQ7XHJcblxyXG4gICAgdmFyIGNlbGxXaWR0aCA9IHNyYy5jZWxsV2lkdGg7XHJcbiAgICB2YXIgY2VsbEhlaWdodCA9IHNyYy5jZWxsSGVpZ2h0O1xyXG5cclxuICAgIHZhciBncmlkV2lkdGggPSBNYXRoLmNlaWwod2lkdGggLyBjZWxsV2lkdGgpO1xyXG4gICAgdmFyIGdyaWRIZWlnaHQgPSBNYXRoLmNlaWwoaGVpZ2h0IC8gY2VsbEhlaWdodCk7XHJcblxyXG4gICAgdmFyIGNlbGxXaWR0aEEgPSBjZWxsV2lkdGg7XHJcbiAgICB2YXIgY2VsbEhlaWdodEEgPSBjZWxsSGVpZ2h0O1xyXG5cclxuICAgIHZhciBjZWxsV2lkdGhCID0gY2VsbFdpZHRoIC0gKChncmlkV2lkdGggKiBjZWxsV2lkdGgpIC0gd2lkdGgpO1xyXG4gICAgdmFyIGNlbGxIZWlnaHRCID0gY2VsbEhlaWdodCAtICgoZ3JpZEhlaWdodCAqIGNlbGxIZWlnaHQpIC0gaGVpZ2h0KTtcclxuXHJcbiAgICB2YXIgZmlsbFRpbnQ7XHJcbiAgICB2YXIgZmlsbFRpbnRDb2xvcjtcclxuXHJcbiAgICB2YXIgc2hvd0NlbGxzID0gc3JjLnNob3dDZWxscztcclxuICAgIHZhciBzaG93QWx0Q2VsbHMgPSBzcmMuc2hvd0FsdENlbGxzO1xyXG4gICAgdmFyIHNob3dPdXRsaW5lID0gc3JjLnNob3dPdXRsaW5lO1xyXG5cclxuICAgIHZhciB4ID0gMDtcclxuICAgIHZhciB5ID0gMDtcclxuICAgIHZhciByID0gMDtcclxuICAgIHZhciBjdyA9IDA7XHJcbiAgICB2YXIgY2ggPSAwO1xyXG5cclxuICAgIGlmIChzaG93T3V0bGluZSlcclxuICAgIHtcclxuICAgICAgICAvLyAgVG8gbWFrZSByb29tIGZvciB0aGUgZ3JpZCBsaW5lcyAoaW4gY2FzZSBhbHBoYSA8IDEpXHJcbiAgICAgICAgY2VsbFdpZHRoQS0tO1xyXG4gICAgICAgIGNlbGxIZWlnaHRBLS07XHJcblxyXG4gICAgICAgIGlmIChjZWxsV2lkdGhCID09PSBjZWxsV2lkdGgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjZWxsV2lkdGhCLS07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2VsbEhlaWdodEIgPT09IGNlbGxIZWlnaHQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjZWxsSGVpZ2h0Qi0tO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2hvd0NlbGxzICYmIHNyYy5maWxsQWxwaGEgPiAwKVxyXG4gICAge1xyXG4gICAgICAgIGZpbGxUaW50ID0gcGlwZWxpbmUuZmlsbFRpbnQ7XHJcbiAgICAgICAgZmlsbFRpbnRDb2xvciA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhQW5kU3dhcChzcmMuZmlsbENvbG9yLCBzcmMuZmlsbEFscGhhICogYWxwaGEpO1xyXG4gICAgXHJcbiAgICAgICAgZmlsbFRpbnQuVEwgPSBmaWxsVGludENvbG9yO1xyXG4gICAgICAgIGZpbGxUaW50LlRSID0gZmlsbFRpbnRDb2xvcjtcclxuICAgICAgICBmaWxsVGludC5CTCA9IGZpbGxUaW50Q29sb3I7XHJcbiAgICAgICAgZmlsbFRpbnQuQlIgPSBmaWxsVGludENvbG9yO1xyXG5cclxuICAgICAgICBmb3IgKHkgPSAwOyB5IDwgZ3JpZEhlaWdodDsgeSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHNob3dBbHRDZWxscylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgciA9IHkgJSAyO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgZ3JpZFdpZHRoOyB4KyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmIChzaG93QWx0Q2VsbHMgJiYgcilcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICByID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByKys7XHJcblxyXG4gICAgICAgICAgICAgICAgY3cgPSAoeCA8IGdyaWRXaWR0aCAtIDEpID8gY2VsbFdpZHRoQSA6IGNlbGxXaWR0aEI7XHJcbiAgICAgICAgICAgICAgICBjaCA9ICh5IDwgZ3JpZEhlaWdodCAtIDEpID8gY2VsbEhlaWdodEEgOiBjZWxsSGVpZ2h0QjtcclxuXHJcbiAgICAgICAgICAgICAgICBwaXBlbGluZS5zZXRUZXh0dXJlMkQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBwaXBlbGluZS5iYXRjaEZpbGxSZWN0KFxyXG4gICAgICAgICAgICAgICAgICAgIHggKiBjZWxsV2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgeSAqIGNlbGxIZWlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgY3csXHJcbiAgICAgICAgICAgICAgICAgICAgY2hcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNob3dBbHRDZWxscyAmJiBzcmMuYWx0RmlsbEFscGhhID4gMClcclxuICAgIHtcclxuICAgICAgICBmaWxsVGludCA9IHBpcGVsaW5lLmZpbGxUaW50O1xyXG4gICAgICAgIGZpbGxUaW50Q29sb3IgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYUFuZFN3YXAoc3JjLmFsdEZpbGxDb2xvciwgc3JjLmFsdEZpbGxBbHBoYSAqIGFscGhhKTtcclxuICAgIFxyXG4gICAgICAgIGZpbGxUaW50LlRMID0gZmlsbFRpbnRDb2xvcjtcclxuICAgICAgICBmaWxsVGludC5UUiA9IGZpbGxUaW50Q29sb3I7XHJcbiAgICAgICAgZmlsbFRpbnQuQkwgPSBmaWxsVGludENvbG9yO1xyXG4gICAgICAgIGZpbGxUaW50LkJSID0gZmlsbFRpbnRDb2xvcjtcclxuXHJcbiAgICAgICAgZm9yICh5ID0gMDsgeSA8IGdyaWRIZWlnaHQ7IHkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChzaG93QWx0Q2VsbHMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHIgPSB5ICUgMjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IGdyaWRXaWR0aDsgeCsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hvd0FsdENlbGxzICYmICFyKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHIgPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHIgPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgIGN3ID0gKHggPCBncmlkV2lkdGggLSAxKSA/IGNlbGxXaWR0aEEgOiBjZWxsV2lkdGhCO1xyXG4gICAgICAgICAgICAgICAgY2ggPSAoeSA8IGdyaWRIZWlnaHQgLSAxKSA/IGNlbGxIZWlnaHRBIDogY2VsbEhlaWdodEI7XHJcblxyXG4gICAgICAgICAgICAgICAgcGlwZWxpbmUuc2V0VGV4dHVyZTJEKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcGlwZWxpbmUuYmF0Y2hGaWxsUmVjdChcclxuICAgICAgICAgICAgICAgICAgICB4ICogY2VsbFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHkgKiBjZWxsSGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIGN3LFxyXG4gICAgICAgICAgICAgICAgICAgIGNoXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChzaG93T3V0bGluZSAmJiBzcmMub3V0bGluZUZpbGxBbHBoYSA+IDApXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHN0cm9rZVRpbnQgPSBwaXBlbGluZS5zdHJva2VUaW50O1xyXG4gICAgICAgIHZhciBjb2xvciA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhQW5kU3dhcChzcmMub3V0bGluZUZpbGxDb2xvciwgc3JjLm91dGxpbmVGaWxsQWxwaGEgKiBhbHBoYSk7XHJcblxyXG4gICAgICAgIHN0cm9rZVRpbnQuVEwgPSBjb2xvcjtcclxuICAgICAgICBzdHJva2VUaW50LlRSID0gY29sb3I7XHJcbiAgICAgICAgc3Ryb2tlVGludC5CTCA9IGNvbG9yO1xyXG4gICAgICAgIHN0cm9rZVRpbnQuQlIgPSBjb2xvcjtcclxuXHJcbiAgICAgICAgZm9yICh4ID0gMTsgeCA8IGdyaWRXaWR0aDsgeCsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHgxID0geCAqIGNlbGxXaWR0aDtcclxuXHJcbiAgICAgICAgICAgIHBpcGVsaW5lLnNldFRleHR1cmUyRCgpO1xyXG5cclxuICAgICAgICAgICAgcGlwZWxpbmUuYmF0Y2hMaW5lKHgxLCAwLCB4MSwgaGVpZ2h0LCAxLCAxLCAxLCAwLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHkgPSAxOyB5IDwgZ3JpZEhlaWdodDsgeSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHkxID0geSAqIGNlbGxIZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICBwaXBlbGluZS5zZXRUZXh0dXJlMkQoKTtcclxuXHJcbiAgICAgICAgICAgIHBpcGVsaW5lLmJhdGNoTGluZSgwLCB5MSwgd2lkdGgsIHkxLCAxLCAxLCAxLCAwLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHcmlkV2ViR0xSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/grid/GridWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/isobox/IsoBox.js":
/*!********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/isobox/IsoBox.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar IsoBoxRender = __webpack_require__(/*! ./IsoBoxRender */ \"./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxRender.js\");\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Shape = __webpack_require__(/*! ../Shape */ \"./node_modules/phaser/src/gameobjects/shape/Shape.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The IsoBox Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports only fill colors and cannot be stroked.\r\n * \r\n * An IsoBox is an 'isometric' rectangle. Each face of it has a different fill color. You can set\r\n * the color of the top, left and right faces of the rectangle respectively. You can also choose\r\n * which of the faces are rendered via the `showTop`, `showLeft` and `showRight` properties.\r\n * \r\n * You cannot view an IsoBox from under-neath, however you can change the 'angle' by setting\r\n * the `projection` property.\r\n *\r\n * @class IsoBox\r\n * @extends Phaser.GameObjects.Shape\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [size=48] - The width of the iso box in pixels. The left and right faces will be exactly half this value.\r\n * @param {number} [height=32] - The height of the iso box. The left and right faces will be this tall. The overall height of the isobox will be this value plus half the `size` value.\r\n * @param {number} [fillTop=0xeeeeee] - The fill color of the top face of the iso box.\r\n * @param {number} [fillLeft=0x999999] - The fill color of the left face of the iso box.\r\n * @param {number} [fillRight=0xcccccc] - The fill color of the right face of the iso box.\r\n */\r\nvar IsoBox = new Class({\r\n\r\n Extends: Shape,\r\n\r\n Mixins: [\r\n IsoBoxRender\r\n ],\r\n\r\n initialize:\r\n\r\n function IsoBox (scene, x, y, size, height, fillTop, fillLeft, fillRight)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n if (size === undefined) { size = 48; }\r\n if (height === undefined) { height = 32; }\r\n if (fillTop === undefined) { fillTop = 0xeeeeee; }\r\n if (fillLeft === undefined) { fillLeft = 0x999999; }\r\n if (fillRight === undefined) { fillRight = 0xcccccc; }\r\n\r\n Shape.call(this, scene, 'IsoBox', null);\r\n\r\n /**\r\n * The projection level of the iso box. Change this to change the 'angle' at which you are looking at the box.\r\n *\r\n * @name Phaser.GameObjects.IsoBox#projection\r\n * @type {integer}\r\n * @default 4\r\n * @since 3.13.0\r\n */\r\n this.projection = 4;\r\n\r\n /**\r\n * The color used to fill in the top of the iso box.\r\n *\r\n * @name Phaser.GameObjects.IsoBox#fillTop\r\n * @type {number}\r\n * @since 3.13.0\r\n */\r\n this.fillTop = fillTop;\r\n\r\n /**\r\n * The color used to fill in the left-facing side of the iso box.\r\n *\r\n * @name Phaser.GameObjects.IsoBox#fillLeft\r\n * @type {number}\r\n * @since 3.13.0\r\n */\r\n this.fillLeft = fillLeft;\r\n\r\n /**\r\n * The color used to fill in the right-facing side of the iso box.\r\n *\r\n * @name Phaser.GameObjects.IsoBox#fillRight\r\n * @type {number}\r\n * @since 3.13.0\r\n */\r\n this.fillRight = fillRight;\r\n\r\n /**\r\n * Controls if the top-face of the iso box be rendered.\r\n *\r\n * @name Phaser.GameObjects.IsoBox#showTop\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.13.0\r\n */\r\n this.showTop = true;\r\n\r\n /**\r\n * Controls if the left-face of the iso box be rendered.\r\n *\r\n * @name Phaser.GameObjects.IsoBox#showLeft\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.13.0\r\n */\r\n this.showLeft = true;\r\n\r\n /**\r\n * Controls if the right-face of the iso box be rendered.\r\n *\r\n * @name Phaser.GameObjects.IsoBox#showRight\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.13.0\r\n */\r\n this.showRight = true;\r\n\r\n this.isFilled = true;\r\n\r\n this.setPosition(x, y);\r\n this.setSize(size, height);\r\n\r\n this.updateDisplayOrigin();\r\n },\r\n\r\n /**\r\n * Sets the projection level of the iso box. Change this to change the 'angle' at which you are looking at the box.\r\n * This call can be chained.\r\n *\r\n * @method Phaser.GameObjects.IsoBox#setProjection\r\n * @since 3.13.0\r\n * \r\n * @param {integer} value - The value to set the projection to.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setProjection: function (value)\r\n {\r\n this.projection = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets which faces of the iso box will be rendered.\r\n * This call can be chained.\r\n *\r\n * @method Phaser.GameObjects.IsoBox#setFaces\r\n * @since 3.13.0\r\n * \r\n * @param {boolean} [showTop=true] - Show the top-face of the iso box.\r\n * @param {boolean} [showLeft=true] - Show the left-face of the iso box.\r\n * @param {boolean} [showRight=true] - Show the right-face of the iso box.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setFaces: function (showTop, showLeft, showRight)\r\n {\r\n if (showTop === undefined) { showTop = true; }\r\n if (showLeft === undefined) { showLeft = true; }\r\n if (showRight === undefined) { showRight = true; }\r\n\r\n this.showTop = showTop;\r\n this.showLeft = showLeft;\r\n this.showRight = showRight;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the fill colors for each face of the iso box.\r\n * This call can be chained.\r\n *\r\n * @method Phaser.GameObjects.IsoBox#setFillStyle\r\n * @since 3.13.0\r\n * \r\n * @param {number} [fillTop] - The color used to fill the top of the iso box.\r\n * @param {number} [fillLeft] - The color used to fill in the left-facing side of the iso box.\r\n * @param {number} [fillRight] - The color used to fill in the right-facing side of the iso box.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setFillStyle: function (fillTop, fillLeft, fillRight)\r\n {\r\n this.fillTop = fillTop;\r\n this.fillLeft = fillLeft;\r\n this.fillRight = fillRight;\r\n\r\n this.isFilled = true;\r\n\r\n return this;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = IsoBox;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9pc29ib3gvSXNvQm94LmpzP2Y3N2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLG1CQUFtQixtQkFBTyxDQUFDLDBGQUFnQjtBQUMzQyxZQUFZLG1CQUFPLENBQUMsc0VBQXNCO0FBQzFDLFlBQVksbUJBQU8sQ0FBQyxzRUFBVTs7QUFFOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTztBQUNyQyw4QkFBOEIsT0FBTztBQUNyQyxpQ0FBaUMsV0FBVztBQUM1QyxtQ0FBbUMsYUFBYTtBQUNoRCxvQ0FBb0Msb0JBQW9CO0FBQ3hELHFDQUFxQyxxQkFBcUI7QUFDMUQsc0NBQXNDLHNCQUFzQjs7QUFFNUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxnQkFBZ0I7QUFDcEQscUNBQXFDLGlCQUFpQjtBQUN0RCxzQ0FBc0Msa0JBQWtCOztBQUV4RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvaXNvYm94L0lzb0JveC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIElzb0JveFJlbmRlciA9IHJlcXVpcmUoJy4vSXNvQm94UmVuZGVyJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBTaGFwZSA9IHJlcXVpcmUoJy4uL1NoYXBlJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgSXNvQm94IFNoYXBlIGlzIGEgR2FtZSBPYmplY3QgdGhhdCBjYW4gYmUgYWRkZWQgdG8gYSBTY2VuZSwgR3JvdXAgb3IgQ29udGFpbmVyLiBZb3UgY2FuXHJcbiAqIHRyZWF0IGl0IGxpa2UgYW55IG90aGVyIEdhbWUgT2JqZWN0IGluIHlvdXIgZ2FtZSwgc3VjaCBhcyB0d2VlbmluZyBpdCwgc2NhbGluZyBpdCwgb3IgZW5hYmxpbmdcclxuICogaXQgZm9yIGlucHV0IG9yIHBoeXNpY3MuIEl0IHByb3ZpZGVzIGEgcXVpY2sgYW5kIGVhc3kgd2F5IGZvciB5b3UgdG8gcmVuZGVyIHRoaXMgc2hhcGUgaW4geW91clxyXG4gKiBnYW1lIHdpdGhvdXQgdXNpbmcgYSB0ZXh0dXJlLCB3aGlsZSBzdGlsbCB0YWtpbmcgYWR2YW50YWdlIG9mIGJlaW5nIGZ1bGx5IGJhdGNoZWQgaW4gV2ViR0wuXHJcbiAqIFxyXG4gKiBUaGlzIHNoYXBlIHN1cHBvcnRzIG9ubHkgZmlsbCBjb2xvcnMgYW5kIGNhbm5vdCBiZSBzdHJva2VkLlxyXG4gKiBcclxuICogQW4gSXNvQm94IGlzIGFuICdpc29tZXRyaWMnIHJlY3RhbmdsZS4gRWFjaCBmYWNlIG9mIGl0IGhhcyBhIGRpZmZlcmVudCBmaWxsIGNvbG9yLiBZb3UgY2FuIHNldFxyXG4gKiB0aGUgY29sb3Igb2YgdGhlIHRvcCwgbGVmdCBhbmQgcmlnaHQgZmFjZXMgb2YgdGhlIHJlY3RhbmdsZSByZXNwZWN0aXZlbHkuIFlvdSBjYW4gYWxzbyBjaG9vc2VcclxuICogd2hpY2ggb2YgdGhlIGZhY2VzIGFyZSByZW5kZXJlZCB2aWEgdGhlIGBzaG93VG9wYCwgYHNob3dMZWZ0YCBhbmQgYHNob3dSaWdodGAgcHJvcGVydGllcy5cclxuICogXHJcbiAqIFlvdSBjYW5ub3QgdmlldyBhbiBJc29Cb3ggZnJvbSB1bmRlci1uZWF0aCwgaG93ZXZlciB5b3UgY2FuIGNoYW5nZSB0aGUgJ2FuZ2xlJyBieSBzZXR0aW5nXHJcbiAqIHRoZSBgcHJvamVjdGlvbmAgcHJvcGVydHkuXHJcbiAqXHJcbiAqIEBjbGFzcyBJc29Cb3hcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLlNoYXBlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgYmVsb25ncy4gQSBHYW1lIE9iamVjdCBjYW4gb25seSBiZWxvbmcgdG8gb25lIFNjZW5lIGF0IGEgdGltZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPTQ4XSAtIFRoZSB3aWR0aCBvZiB0aGUgaXNvIGJveCBpbiBwaXhlbHMuIFRoZSBsZWZ0IGFuZCByaWdodCBmYWNlcyB3aWxsIGJlIGV4YWN0bHkgaGFsZiB0aGlzIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodD0zMl0gLSBUaGUgaGVpZ2h0IG9mIHRoZSBpc28gYm94LiBUaGUgbGVmdCBhbmQgcmlnaHQgZmFjZXMgd2lsbCBiZSB0aGlzIHRhbGwuIFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGUgaXNvYm94IHdpbGwgYmUgdGhpcyB2YWx1ZSBwbHVzIGhhbGYgdGhlIGBzaXplYCB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsVG9wPTB4ZWVlZWVlXSAtIFRoZSBmaWxsIGNvbG9yIG9mIHRoZSB0b3AgZmFjZSBvZiB0aGUgaXNvIGJveC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsTGVmdD0weDk5OTk5OV0gLSBUaGUgZmlsbCBjb2xvciBvZiB0aGUgbGVmdCBmYWNlIG9mIHRoZSBpc28gYm94LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxSaWdodD0weGNjY2NjY10gLSBUaGUgZmlsbCBjb2xvciBvZiB0aGUgcmlnaHQgZmFjZSBvZiB0aGUgaXNvIGJveC5cclxuICovXHJcbnZhciBJc29Cb3ggPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IFNoYXBlLFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIElzb0JveFJlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIElzb0JveCAoc2NlbmUsIHgsIHksIHNpemUsIGhlaWdodCwgZmlsbFRvcCwgZmlsbExlZnQsIGZpbGxSaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7IHggPSAwOyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0gMDsgfVxyXG4gICAgICAgIGlmIChzaXplID09PSB1bmRlZmluZWQpIHsgc2l6ZSA9IDQ4OyB9XHJcbiAgICAgICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IGhlaWdodCA9IDMyOyB9XHJcbiAgICAgICAgaWYgKGZpbGxUb3AgPT09IHVuZGVmaW5lZCkgeyBmaWxsVG9wID0gMHhlZWVlZWU7IH1cclxuICAgICAgICBpZiAoZmlsbExlZnQgPT09IHVuZGVmaW5lZCkgeyBmaWxsTGVmdCA9IDB4OTk5OTk5OyB9XHJcbiAgICAgICAgaWYgKGZpbGxSaWdodCA9PT0gdW5kZWZpbmVkKSB7IGZpbGxSaWdodCA9IDB4Y2NjY2NjOyB9XHJcblxyXG4gICAgICAgIFNoYXBlLmNhbGwodGhpcywgc2NlbmUsICdJc29Cb3gnLCBudWxsKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHByb2plY3Rpb24gbGV2ZWwgb2YgdGhlIGlzbyBib3guIENoYW5nZSB0aGlzIHRvIGNoYW5nZSB0aGUgJ2FuZ2xlJyBhdCB3aGljaCB5b3UgYXJlIGxvb2tpbmcgYXQgdGhlIGJveC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Jc29Cb3gjcHJvamVjdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDRcclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uID0gNDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNvbG9yIHVzZWQgdG8gZmlsbCBpbiB0aGUgdG9wIG9mIHRoZSBpc28gYm94LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLklzb0JveCNmaWxsVG9wXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5maWxsVG9wID0gZmlsbFRvcDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNvbG9yIHVzZWQgdG8gZmlsbCBpbiB0aGUgbGVmdC1mYWNpbmcgc2lkZSBvZiB0aGUgaXNvIGJveC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Jc29Cb3gjZmlsbExlZnRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZpbGxMZWZ0ID0gZmlsbExlZnQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjb2xvciB1c2VkIHRvIGZpbGwgaW4gdGhlIHJpZ2h0LWZhY2luZyBzaWRlIG9mIHRoZSBpc28gYm94LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLklzb0JveCNmaWxsUmlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZpbGxSaWdodCA9IGZpbGxSaWdodDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ29udHJvbHMgaWYgdGhlIHRvcC1mYWNlIG9mIHRoZSBpc28gYm94IGJlIHJlbmRlcmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLklzb0JveCNzaG93VG9wXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNob3dUb3AgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb250cm9scyBpZiB0aGUgbGVmdC1mYWNlIG9mIHRoZSBpc28gYm94IGJlIHJlbmRlcmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLklzb0JveCNzaG93TGVmdFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zaG93TGVmdCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENvbnRyb2xzIGlmIHRoZSByaWdodC1mYWNlIG9mIHRoZSBpc28gYm94IGJlIHJlbmRlcmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLklzb0JveCNzaG93UmlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2hvd1JpZ2h0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0ZpbGxlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24oeCwgeSk7XHJcbiAgICAgICAgdGhpcy5zZXRTaXplKHNpemUsIGhlaWdodCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlRGlzcGxheU9yaWdpbigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHByb2plY3Rpb24gbGV2ZWwgb2YgdGhlIGlzbyBib3guIENoYW5nZSB0aGlzIHRvIGNoYW5nZSB0aGUgJ2FuZ2xlJyBhdCB3aGljaCB5b3UgYXJlIGxvb2tpbmcgYXQgdGhlIGJveC5cclxuICAgICAqIFRoaXMgY2FsbCBjYW4gYmUgY2hhaW5lZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Jc29Cb3gjc2V0UHJvamVjdGlvblxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHNldCB0aGUgcHJvamVjdGlvbiB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRQcm9qZWN0aW9uOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgd2hpY2ggZmFjZXMgb2YgdGhlIGlzbyBib3ggd2lsbCBiZSByZW5kZXJlZC5cclxuICAgICAqIFRoaXMgY2FsbCBjYW4gYmUgY2hhaW5lZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Jc29Cb3gjc2V0RmFjZXNcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbc2hvd1RvcD10cnVlXSAtIFNob3cgdGhlIHRvcC1mYWNlIG9mIHRoZSBpc28gYm94LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbc2hvd0xlZnQ9dHJ1ZV0gLSBTaG93IHRoZSBsZWZ0LWZhY2Ugb2YgdGhlIGlzbyBib3guXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzaG93UmlnaHQ9dHJ1ZV0gLSBTaG93IHRoZSByaWdodC1mYWNlIG9mIHRoZSBpc28gYm94LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEZhY2VzOiBmdW5jdGlvbiAoc2hvd1RvcCwgc2hvd0xlZnQsIHNob3dSaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAoc2hvd1RvcCA9PT0gdW5kZWZpbmVkKSB7IHNob3dUb3AgPSB0cnVlOyB9XHJcbiAgICAgICAgaWYgKHNob3dMZWZ0ID09PSB1bmRlZmluZWQpIHsgc2hvd0xlZnQgPSB0cnVlOyB9XHJcbiAgICAgICAgaWYgKHNob3dSaWdodCA9PT0gdW5kZWZpbmVkKSB7IHNob3dSaWdodCA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdGhpcy5zaG93VG9wID0gc2hvd1RvcDtcclxuICAgICAgICB0aGlzLnNob3dMZWZ0ID0gc2hvd0xlZnQ7XHJcbiAgICAgICAgdGhpcy5zaG93UmlnaHQgPSBzaG93UmlnaHQ7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGZpbGwgY29sb3JzIGZvciBlYWNoIGZhY2Ugb2YgdGhlIGlzbyBib3guXHJcbiAgICAgKiBUaGlzIGNhbGwgY2FuIGJlIGNoYWluZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuSXNvQm94I3NldEZpbGxTdHlsZVxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxUb3BdIC0gVGhlIGNvbG9yIHVzZWQgdG8gZmlsbCB0aGUgdG9wIG9mIHRoZSBpc28gYm94LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsTGVmdF0gLSBUaGUgY29sb3IgdXNlZCB0byBmaWxsIGluIHRoZSBsZWZ0LWZhY2luZyBzaWRlIG9mIHRoZSBpc28gYm94LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsUmlnaHRdIC0gVGhlIGNvbG9yIHVzZWQgdG8gZmlsbCBpbiB0aGUgcmlnaHQtZmFjaW5nIHNpZGUgb2YgdGhlIGlzbyBib3guXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0RmlsbFN0eWxlOiBmdW5jdGlvbiAoZmlsbFRvcCwgZmlsbExlZnQsIGZpbGxSaWdodClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmZpbGxUb3AgPSBmaWxsVG9wO1xyXG4gICAgICAgIHRoaXMuZmlsbExlZnQgPSBmaWxsTGVmdDtcclxuICAgICAgICB0aGlzLmZpbGxSaWdodCA9IGZpbGxSaWdodDtcclxuXHJcbiAgICAgICAgdGhpcy5pc0ZpbGxlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IElzb0JveDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/isobox/IsoBox.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxCanvasRenderer.js":
/*!**********************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxCanvasRenderer.js ***!
\**********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillStyleCanvas = __webpack_require__(/*! ../FillStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js\");\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.IsoBox#renderCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.IsoBox} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar IsoBoxCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var ctx = renderer.currentContext;\r\n\r\n if (SetTransform(renderer, ctx, src, camera, parentMatrix) && src.isFilled)\r\n {\r\n var size = src.width;\r\n var height = src.height;\r\n \r\n var sizeA = size / 2;\r\n var sizeB = size / src.projection;\r\n\r\n // Top Face\r\n\r\n if (src.showTop)\r\n {\r\n FillStyleCanvas(ctx, src, src.fillTop);\r\n\r\n ctx.beginPath();\r\n\r\n ctx.moveTo(-sizeA, -height);\r\n ctx.lineTo(0, -sizeB - height);\r\n ctx.lineTo(sizeA, -height);\r\n ctx.lineTo(sizeA, -1);\r\n ctx.lineTo(0, sizeB - 1);\r\n ctx.lineTo(-sizeA, -1);\r\n ctx.lineTo(-sizeA, -height);\r\n\r\n ctx.fill();\r\n }\r\n\r\n // Left Face\r\n\r\n if (src.showLeft)\r\n {\r\n FillStyleCanvas(ctx, src, src.fillLeft);\r\n\r\n ctx.beginPath();\r\n \r\n ctx.moveTo(-sizeA, 0);\r\n ctx.lineTo(0, sizeB);\r\n ctx.lineTo(0, sizeB - height);\r\n ctx.lineTo(-sizeA, -height);\r\n ctx.lineTo(-sizeA, 0);\r\n\r\n ctx.fill();\r\n }\r\n\r\n // Right Face\r\n\r\n if (src.showRight)\r\n {\r\n FillStyleCanvas(ctx, src, src.fillRight);\r\n\r\n ctx.beginPath();\r\n\r\n ctx.moveTo(sizeA, 0);\r\n ctx.lineTo(0, sizeB);\r\n ctx.lineTo(0, sizeB - height);\r\n ctx.lineTo(sizeA, -height);\r\n ctx.lineTo(sizeA, 0);\r\n\r\n ctx.fill();\r\n }\r\n\r\n // Restore the context saved in SetTransform\r\n ctx.restore();\r\n }\r\n};\r\n\r\nmodule.exports = IsoBoxCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9pc29ib3gvSXNvQm94Q2FudmFzUmVuZGVyZXIuanM/YTA0MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsc0JBQXNCLG1CQUFPLENBQUMsMEZBQW9CO0FBQ2xELG1CQUFtQixtQkFBTyxDQUFDLG9IQUE2Qzs7QUFFeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVywwQkFBMEI7QUFDckMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvaXNvYm94L0lzb0JveENhbnZhc1JlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgRmlsbFN0eWxlQ2FudmFzID0gcmVxdWlyZSgnLi4vRmlsbFN0eWxlQ2FudmFzJyk7XHJcbnZhciBTZXRUcmFuc2Zvcm0gPSByZXF1aXJlKCcuLi8uLi8uLi9yZW5kZXJlci9jYW52YXMvdXRpbHMvU2V0VHJhbnNmb3JtJyk7XHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIENhbnZhcyBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLklzb0JveCNyZW5kZXJDYW52YXNcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIENhbnZhcyByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuSXNvQm94fSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgSXNvQm94Q2FudmFzUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgY3R4ID0gcmVuZGVyZXIuY3VycmVudENvbnRleHQ7XHJcblxyXG4gICAgaWYgKFNldFRyYW5zZm9ybShyZW5kZXJlciwgY3R4LCBzcmMsIGNhbWVyYSwgcGFyZW50TWF0cml4KSAmJiBzcmMuaXNGaWxsZWQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHNpemUgPSBzcmMud2lkdGg7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IHNyYy5oZWlnaHQ7XHJcbiAgICBcclxuICAgICAgICB2YXIgc2l6ZUEgPSBzaXplIC8gMjtcclxuICAgICAgICB2YXIgc2l6ZUIgPSBzaXplIC8gc3JjLnByb2plY3Rpb247XHJcblxyXG4gICAgICAgIC8vICBUb3AgRmFjZVxyXG5cclxuICAgICAgICBpZiAoc3JjLnNob3dUb3ApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBGaWxsU3R5bGVDYW52YXMoY3R4LCBzcmMsIHNyYy5maWxsVG9wKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5tb3ZlVG8oLXNpemVBLCAtaGVpZ2h0KTtcclxuICAgICAgICAgICAgY3R4LmxpbmVUbygwLCAtc2l6ZUIgLSBoZWlnaHQpO1xyXG4gICAgICAgICAgICBjdHgubGluZVRvKHNpemVBLCAtaGVpZ2h0KTtcclxuICAgICAgICAgICAgY3R4LmxpbmVUbyhzaXplQSwgLTEpO1xyXG4gICAgICAgICAgICBjdHgubGluZVRvKDAsIHNpemVCIC0gMSk7XHJcbiAgICAgICAgICAgIGN0eC5saW5lVG8oLXNpemVBLCAtMSk7XHJcbiAgICAgICAgICAgIGN0eC5saW5lVG8oLXNpemVBLCAtaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5maWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgTGVmdCBGYWNlXHJcblxyXG4gICAgICAgIGlmIChzcmMuc2hvd0xlZnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBGaWxsU3R5bGVDYW52YXMoY3R4LCBzcmMsIHNyYy5maWxsTGVmdCk7XHJcblxyXG4gICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XHJcbiAgICBcclxuICAgICAgICAgICAgY3R4Lm1vdmVUbygtc2l6ZUEsIDApO1xyXG4gICAgICAgICAgICBjdHgubGluZVRvKDAsIHNpemVCKTtcclxuICAgICAgICAgICAgY3R4LmxpbmVUbygwLCBzaXplQiAtIGhlaWdodCk7XHJcbiAgICAgICAgICAgIGN0eC5saW5lVG8oLXNpemVBLCAtaGVpZ2h0KTtcclxuICAgICAgICAgICAgY3R4LmxpbmVUbygtc2l6ZUEsIDApO1xyXG5cclxuICAgICAgICAgICAgY3R4LmZpbGwoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBSaWdodCBGYWNlXHJcblxyXG4gICAgICAgIGlmIChzcmMuc2hvd1JpZ2h0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgRmlsbFN0eWxlQ2FudmFzKGN0eCwgc3JjLCBzcmMuZmlsbFJpZ2h0KTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5tb3ZlVG8oc2l6ZUEsIDApO1xyXG4gICAgICAgICAgICBjdHgubGluZVRvKDAsIHNpemVCKTtcclxuICAgICAgICAgICAgY3R4LmxpbmVUbygwLCBzaXplQiAtIGhlaWdodCk7XHJcbiAgICAgICAgICAgIGN0eC5saW5lVG8oc2l6ZUEsIC1oZWlnaHQpO1xyXG4gICAgICAgICAgICBjdHgubGluZVRvKHNpemVBLCAwKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5maWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgUmVzdG9yZSB0aGUgY29udGV4dCBzYXZlZCBpbiBTZXRUcmFuc2Zvcm1cclxuICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJc29Cb3hDYW52YXNSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxFactory.js":
/*!***************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxFactory.js ***!
\***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar IsoBox = __webpack_require__(/*! ./IsoBox */ \"./node_modules/phaser/src/gameobjects/shape/isobox/IsoBox.js\");\r\n\r\n/**\r\n * Creates a new IsoBox Shape Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the IsoBox Game Object has been built into Phaser.\r\n * \r\n * The IsoBox Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports only fill colors and cannot be stroked.\r\n * \r\n * An IsoBox is an 'isometric' rectangle. Each face of it has a different fill color. You can set\r\n * the color of the top, left and right faces of the rectangle respectively. You can also choose\r\n * which of the faces are rendered via the `showTop`, `showLeft` and `showRight` properties.\r\n * \r\n * You cannot view an IsoBox from under-neath, however you can change the 'angle' by setting\r\n * the `projection` property.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#isobox\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [size=48] - The width of the iso box in pixels. The left and right faces will be exactly half this value.\r\n * @param {number} [height=32] - The height of the iso box. The left and right faces will be this tall. The overall height of the isobox will be this value plus half the `size` value.\r\n * @param {number} [fillTop=0xeeeeee] - The fill color of the top face of the iso box.\r\n * @param {number} [fillLeft=0x999999] - The fill color of the left face of the iso box.\r\n * @param {number} [fillRight=0xcccccc] - The fill color of the right face of the iso box.\r\n *\r\n * @return {Phaser.GameObjects.IsoBox} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('isobox', function (x, y, size, height, fillTop, fillLeft, fillRight)\r\n{\r\n return this.displayList.add(new IsoBox(this.scene, x, y, size, height, fillTop, fillLeft, fillRight));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9pc29ib3gvSXNvQm94RmFjdG9yeS5qcz83ZDE2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQywyRkFBeUI7QUFDekQsYUFBYSxtQkFBTyxDQUFDLDhFQUFVOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksMEJBQTBCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL2lzb2JveC9Jc29Cb3hGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG52YXIgSXNvQm94ID0gcmVxdWlyZSgnLi9Jc29Cb3gnKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IElzb0JveCBTaGFwZSBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIElzb0JveCBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogXHJcbiAqIFRoZSBJc29Cb3ggU2hhcGUgaXMgYSBHYW1lIE9iamVjdCB0aGF0IGNhbiBiZSBhZGRlZCB0byBhIFNjZW5lLCBHcm91cCBvciBDb250YWluZXIuIFlvdSBjYW5cclxuICogdHJlYXQgaXQgbGlrZSBhbnkgb3RoZXIgR2FtZSBPYmplY3QgaW4geW91ciBnYW1lLCBzdWNoIGFzIHR3ZWVuaW5nIGl0LCBzY2FsaW5nIGl0LCBvciBlbmFibGluZ1xyXG4gKiBpdCBmb3IgaW5wdXQgb3IgcGh5c2ljcy4gSXQgcHJvdmlkZXMgYSBxdWljayBhbmQgZWFzeSB3YXkgZm9yIHlvdSB0byByZW5kZXIgdGhpcyBzaGFwZSBpbiB5b3VyXHJcbiAqIGdhbWUgd2l0aG91dCB1c2luZyBhIHRleHR1cmUsIHdoaWxlIHN0aWxsIHRha2luZyBhZHZhbnRhZ2Ugb2YgYmVpbmcgZnVsbHkgYmF0Y2hlZCBpbiBXZWJHTC5cclxuICogXHJcbiAqIFRoaXMgc2hhcGUgc3VwcG9ydHMgb25seSBmaWxsIGNvbG9ycyBhbmQgY2Fubm90IGJlIHN0cm9rZWQuXHJcbiAqIFxyXG4gKiBBbiBJc29Cb3ggaXMgYW4gJ2lzb21ldHJpYycgcmVjdGFuZ2xlLiBFYWNoIGZhY2Ugb2YgaXQgaGFzIGEgZGlmZmVyZW50IGZpbGwgY29sb3IuIFlvdSBjYW4gc2V0XHJcbiAqIHRoZSBjb2xvciBvZiB0aGUgdG9wLCBsZWZ0IGFuZCByaWdodCBmYWNlcyBvZiB0aGUgcmVjdGFuZ2xlIHJlc3BlY3RpdmVseS4gWW91IGNhbiBhbHNvIGNob29zZVxyXG4gKiB3aGljaCBvZiB0aGUgZmFjZXMgYXJlIHJlbmRlcmVkIHZpYSB0aGUgYHNob3dUb3BgLCBgc2hvd0xlZnRgIGFuZCBgc2hvd1JpZ2h0YCBwcm9wZXJ0aWVzLlxyXG4gKiBcclxuICogWW91IGNhbm5vdCB2aWV3IGFuIElzb0JveCBmcm9tIHVuZGVyLW5lYXRoLCBob3dldmVyIHlvdSBjYW4gY2hhbmdlIHRoZSAnYW5nbGUnIGJ5IHNldHRpbmdcclxuICogdGhlIGBwcm9qZWN0aW9uYCBwcm9wZXJ0eS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3RvcnkjaXNvYm94XHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPTQ4XSAtIFRoZSB3aWR0aCBvZiB0aGUgaXNvIGJveCBpbiBwaXhlbHMuIFRoZSBsZWZ0IGFuZCByaWdodCBmYWNlcyB3aWxsIGJlIGV4YWN0bHkgaGFsZiB0aGlzIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodD0zMl0gLSBUaGUgaGVpZ2h0IG9mIHRoZSBpc28gYm94LiBUaGUgbGVmdCBhbmQgcmlnaHQgZmFjZXMgd2lsbCBiZSB0aGlzIHRhbGwuIFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGUgaXNvYm94IHdpbGwgYmUgdGhpcyB2YWx1ZSBwbHVzIGhhbGYgdGhlIGBzaXplYCB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsVG9wPTB4ZWVlZWVlXSAtIFRoZSBmaWxsIGNvbG9yIG9mIHRoZSB0b3AgZmFjZSBvZiB0aGUgaXNvIGJveC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsTGVmdD0weDk5OTk5OV0gLSBUaGUgZmlsbCBjb2xvciBvZiB0aGUgbGVmdCBmYWNlIG9mIHRoZSBpc28gYm94LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxSaWdodD0weGNjY2NjY10gLSBUaGUgZmlsbCBjb2xvciBvZiB0aGUgcmlnaHQgZmFjZSBvZiB0aGUgaXNvIGJveC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLklzb0JveH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0RmFjdG9yeS5yZWdpc3RlcignaXNvYm94JywgZnVuY3Rpb24gKHgsIHksIHNpemUsIGhlaWdodCwgZmlsbFRvcCwgZmlsbExlZnQsIGZpbGxSaWdodClcclxue1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheUxpc3QuYWRkKG5ldyBJc29Cb3godGhpcy5zY2VuZSwgeCwgeSwgc2l6ZSwgaGVpZ2h0LCBmaWxsVG9wLCBmaWxsTGVmdCwgZmlsbFJpZ2h0KSk7XHJcbn0pO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxRender.js":
/*!**************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxRender.js ***!
\**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./IsoBoxWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./IsoBoxCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9pc29ib3gvSXNvQm94UmVuZGVyLmpzPzI3YmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLG9FQUFxQjtBQUMvQyxtQkFBbUIsbUJBQU8sQ0FBQyxvRUFBcUI7O0FBRWhELElBQUksSUFBcUI7QUFDekI7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyx3R0FBdUI7QUFDakQ7O0FBRUEsSUFBSSxJQUFzQjtBQUMxQjtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLDBHQUF3QjtBQUNuRDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvaXNvYm94L0lzb0JveFJlbmRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG52YXIgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG5cclxuaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuL0lzb0JveFdlYkdMUmVuZGVyZXInKTtcclxufVxyXG5cclxuaWYgKHR5cGVvZiBDQU5WQVNfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4vSXNvQm94Q2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxWebGLRenderer.js":
/*!*********************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxWebGLRenderer.js ***!
\*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.IsoBox#renderWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.IsoBox} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar IsoBoxWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var pipeline = this.pipeline;\r\n\r\n var camMatrix = pipeline._tempMatrix1;\r\n var shapeMatrix = pipeline._tempMatrix2;\r\n var calcMatrix = pipeline._tempMatrix3;\r\n\r\n renderer.setPipeline(pipeline);\r\n\r\n shapeMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n camMatrix.copyFrom(camera.matrix);\r\n\r\n if (parentMatrix)\r\n {\r\n // Multiply the camera by the parent matrix\r\n camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n // Undo the camera scroll\r\n shapeMatrix.e = src.x;\r\n shapeMatrix.f = src.y;\r\n }\r\n else\r\n {\r\n shapeMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n shapeMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n }\r\n\r\n camMatrix.multiply(shapeMatrix, calcMatrix);\r\n\r\n var size = src.width;\r\n var height = src.height;\r\n\r\n var sizeA = size / 2;\r\n var sizeB = size / src.projection;\r\n\r\n var alpha = camera.alpha * src.alpha;\r\n\r\n if (!src.isFilled)\r\n {\r\n return;\r\n }\r\n\r\n var tint;\r\n\r\n var x0;\r\n var y0;\r\n\r\n var x1;\r\n var y1;\r\n\r\n var x2;\r\n var y2;\r\n\r\n var x3;\r\n var y3;\r\n\r\n // Top Face\r\n\r\n if (src.showTop)\r\n {\r\n tint = Utils.getTintAppendFloatAlphaAndSwap(src.fillTop, alpha);\r\n\r\n x0 = calcMatrix.getX(-sizeA, -height);\r\n y0 = calcMatrix.getY(-sizeA, -height);\r\n \r\n x1 = calcMatrix.getX(0, -sizeB - height);\r\n y1 = calcMatrix.getY(0, -sizeB - height);\r\n \r\n x2 = calcMatrix.getX(sizeA, -height);\r\n y2 = calcMatrix.getY(sizeA, -height);\r\n \r\n x3 = calcMatrix.getX(0, sizeB - height);\r\n y3 = calcMatrix.getY(0, sizeB - height);\r\n\r\n pipeline.setTexture2D();\r\n \r\n pipeline.batchQuad(x0, y0, x1, y1, x2, y2, x3, y3, 0, 0, 1, 1, tint, tint, tint, tint, 2);\r\n }\r\n\r\n // Left Face\r\n\r\n if (src.showLeft)\r\n {\r\n tint = Utils.getTintAppendFloatAlphaAndSwap(src.fillLeft, alpha);\r\n\r\n x0 = calcMatrix.getX(-sizeA, 0);\r\n y0 = calcMatrix.getY(-sizeA, 0);\r\n \r\n x1 = calcMatrix.getX(0, sizeB);\r\n y1 = calcMatrix.getY(0, sizeB);\r\n \r\n x2 = calcMatrix.getX(0, sizeB - height);\r\n y2 = calcMatrix.getY(0, sizeB - height);\r\n \r\n x3 = calcMatrix.getX(-sizeA, -height);\r\n y3 = calcMatrix.getY(-sizeA, -height);\r\n\r\n pipeline.setTexture2D();\r\n \r\n pipeline.batchQuad(x0, y0, x1, y1, x2, y2, x3, y3, 0, 0, 1, 1, tint, tint, tint, tint, 2);\r\n }\r\n\r\n // Right Face\r\n\r\n if (src.showRight)\r\n {\r\n tint = Utils.getTintAppendFloatAlphaAndSwap(src.fillRight, alpha);\r\n\r\n x0 = calcMatrix.getX(sizeA, 0);\r\n y0 = calcMatrix.getY(sizeA, 0);\r\n \r\n x1 = calcMatrix.getX(0, sizeB);\r\n y1 = calcMatrix.getY(0, sizeB);\r\n \r\n x2 = calcMatrix.getX(0, sizeB - height);\r\n y2 = calcMatrix.getY(0, sizeB - height);\r\n \r\n x3 = calcMatrix.getX(sizeA, -height);\r\n y3 = calcMatrix.getY(sizeA, -height);\r\n\r\n pipeline.setTexture2D();\r\n \r\n pipeline.batchQuad(x0, y0, x1, y1, x2, y2, x3, y3, 0, 0, 1, 1, tint, tint, tint, tint, 2);\r\n }\r\n};\r\n\r\nmodule.exports = IsoBoxWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9pc29ib3gvSXNvQm94V2ViR0xSZW5kZXJlci5qcz9iZGE3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsd0ZBQStCOztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9DQUFvQztBQUMvQyxXQUFXLDBCQUEwQjtBQUNyQyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvaXNvYm94L0lzb0JveFdlYkdMUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBVdGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3JlbmRlcmVyL3dlYmdsL1V0aWxzJyk7XHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIFdlYkdMIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuSXNvQm94I3JlbmRlcldlYkdMXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgV2ViR0wgcmVuZGVyZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLklzb0JveH0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIElzb0JveFdlYkdMUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgcGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lO1xyXG5cclxuICAgIHZhciBjYW1NYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDE7XHJcbiAgICB2YXIgc2hhcGVNYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDI7XHJcbiAgICB2YXIgY2FsY01hdHJpeCA9IHBpcGVsaW5lLl90ZW1wTWF0cml4MztcclxuXHJcbiAgICByZW5kZXJlci5zZXRQaXBlbGluZShwaXBlbGluZSk7XHJcblxyXG4gICAgc2hhcGVNYXRyaXguYXBwbHlJVFJTKHNyYy54LCBzcmMueSwgc3JjLnJvdGF0aW9uLCBzcmMuc2NhbGVYLCBzcmMuc2NhbGVZKTtcclxuXHJcbiAgICBjYW1NYXRyaXguY29weUZyb20oY2FtZXJhLm1hdHJpeCk7XHJcblxyXG4gICAgaWYgKHBhcmVudE1hdHJpeClcclxuICAgIHtcclxuICAgICAgICAvLyAgTXVsdGlwbHkgdGhlIGNhbWVyYSBieSB0aGUgcGFyZW50IG1hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseVdpdGhPZmZzZXQocGFyZW50TWF0cml4LCAtY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWCwgLWNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3RvclkpO1xyXG5cclxuICAgICAgICAvLyAgVW5kbyB0aGUgY2FtZXJhIHNjcm9sbFxyXG4gICAgICAgIHNoYXBlTWF0cml4LmUgPSBzcmMueDtcclxuICAgICAgICBzaGFwZU1hdHJpeC5mID0gc3JjLnk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgc2hhcGVNYXRyaXguZSAtPSBjYW1lcmEuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYO1xyXG4gICAgICAgIHNoYXBlTWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuICAgIH1cclxuXHJcbiAgICBjYW1NYXRyaXgubXVsdGlwbHkoc2hhcGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG5cclxuICAgIHZhciBzaXplID0gc3JjLndpZHRoO1xyXG4gICAgdmFyIGhlaWdodCA9IHNyYy5oZWlnaHQ7XHJcblxyXG4gICAgdmFyIHNpemVBID0gc2l6ZSAvIDI7XHJcbiAgICB2YXIgc2l6ZUIgPSBzaXplIC8gc3JjLnByb2plY3Rpb247XHJcblxyXG4gICAgdmFyIGFscGhhID0gY2FtZXJhLmFscGhhICogc3JjLmFscGhhO1xyXG5cclxuICAgIGlmICghc3JjLmlzRmlsbGVkKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgdGludDtcclxuXHJcbiAgICB2YXIgeDA7XHJcbiAgICB2YXIgeTA7XHJcblxyXG4gICAgdmFyIHgxO1xyXG4gICAgdmFyIHkxO1xyXG5cclxuICAgIHZhciB4MjtcclxuICAgIHZhciB5MjtcclxuXHJcbiAgICB2YXIgeDM7XHJcbiAgICB2YXIgeTM7XHJcblxyXG4gICAgLy8gIFRvcCBGYWNlXHJcblxyXG4gICAgaWYgKHNyYy5zaG93VG9wKVxyXG4gICAge1xyXG4gICAgICAgIHRpbnQgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYUFuZFN3YXAoc3JjLmZpbGxUb3AsIGFscGhhKTtcclxuXHJcbiAgICAgICAgeDAgPSBjYWxjTWF0cml4LmdldFgoLXNpemVBLCAtaGVpZ2h0KTtcclxuICAgICAgICB5MCA9IGNhbGNNYXRyaXguZ2V0WSgtc2l6ZUEsIC1oZWlnaHQpO1xyXG4gICAgXHJcbiAgICAgICAgeDEgPSBjYWxjTWF0cml4LmdldFgoMCwgLXNpemVCIC0gaGVpZ2h0KTtcclxuICAgICAgICB5MSA9IGNhbGNNYXRyaXguZ2V0WSgwLCAtc2l6ZUIgLSBoZWlnaHQpO1xyXG4gICAgXHJcbiAgICAgICAgeDIgPSBjYWxjTWF0cml4LmdldFgoc2l6ZUEsIC1oZWlnaHQpO1xyXG4gICAgICAgIHkyID0gY2FsY01hdHJpeC5nZXRZKHNpemVBLCAtaGVpZ2h0KTtcclxuICAgIFxyXG4gICAgICAgIHgzID0gY2FsY01hdHJpeC5nZXRYKDAsIHNpemVCIC0gaGVpZ2h0KTtcclxuICAgICAgICB5MyA9IGNhbGNNYXRyaXguZ2V0WSgwLCBzaXplQiAtIGhlaWdodCk7XHJcblxyXG4gICAgICAgIHBpcGVsaW5lLnNldFRleHR1cmUyRCgpO1xyXG4gICAgXHJcbiAgICAgICAgcGlwZWxpbmUuYmF0Y2hRdWFkKHgwLCB5MCwgeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgMCwgMCwgMSwgMSwgdGludCwgdGludCwgdGludCwgdGludCwgMik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIExlZnQgRmFjZVxyXG5cclxuICAgIGlmIChzcmMuc2hvd0xlZnQpXHJcbiAgICB7XHJcbiAgICAgICAgdGludCA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhQW5kU3dhcChzcmMuZmlsbExlZnQsIGFscGhhKTtcclxuXHJcbiAgICAgICAgeDAgPSBjYWxjTWF0cml4LmdldFgoLXNpemVBLCAwKTtcclxuICAgICAgICB5MCA9IGNhbGNNYXRyaXguZ2V0WSgtc2l6ZUEsIDApO1xyXG4gICAgXHJcbiAgICAgICAgeDEgPSBjYWxjTWF0cml4LmdldFgoMCwgc2l6ZUIpO1xyXG4gICAgICAgIHkxID0gY2FsY01hdHJpeC5nZXRZKDAsIHNpemVCKTtcclxuICAgIFxyXG4gICAgICAgIHgyID0gY2FsY01hdHJpeC5nZXRYKDAsIHNpemVCIC0gaGVpZ2h0KTtcclxuICAgICAgICB5MiA9IGNhbGNNYXRyaXguZ2V0WSgwLCBzaXplQiAtIGhlaWdodCk7XHJcbiAgICBcclxuICAgICAgICB4MyA9IGNhbGNNYXRyaXguZ2V0WCgtc2l6ZUEsIC1oZWlnaHQpO1xyXG4gICAgICAgIHkzID0gY2FsY01hdHJpeC5nZXRZKC1zaXplQSwgLWhlaWdodCk7XHJcblxyXG4gICAgICAgIHBpcGVsaW5lLnNldFRleHR1cmUyRCgpO1xyXG4gICAgXHJcbiAgICAgICAgcGlwZWxpbmUuYmF0Y2hRdWFkKHgwLCB5MCwgeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgMCwgMCwgMSwgMSwgdGludCwgdGludCwgdGludCwgdGludCwgMik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIFJpZ2h0IEZhY2VcclxuXHJcbiAgICBpZiAoc3JjLnNob3dSaWdodClcclxuICAgIHtcclxuICAgICAgICB0aW50ID0gVXRpbHMuZ2V0VGludEFwcGVuZEZsb2F0QWxwaGFBbmRTd2FwKHNyYy5maWxsUmlnaHQsIGFscGhhKTtcclxuXHJcbiAgICAgICAgeDAgPSBjYWxjTWF0cml4LmdldFgoc2l6ZUEsIDApO1xyXG4gICAgICAgIHkwID0gY2FsY01hdHJpeC5nZXRZKHNpemVBLCAwKTtcclxuICAgIFxyXG4gICAgICAgIHgxID0gY2FsY01hdHJpeC5nZXRYKDAsIHNpemVCKTtcclxuICAgICAgICB5MSA9IGNhbGNNYXRyaXguZ2V0WSgwLCBzaXplQik7XHJcbiAgICBcclxuICAgICAgICB4MiA9IGNhbGNNYXRyaXguZ2V0WCgwLCBzaXplQiAtIGhlaWdodCk7XHJcbiAgICAgICAgeTIgPSBjYWxjTWF0cml4LmdldFkoMCwgc2l6ZUIgLSBoZWlnaHQpO1xyXG4gICAgXHJcbiAgICAgICAgeDMgPSBjYWxjTWF0cml4LmdldFgoc2l6ZUEsIC1oZWlnaHQpO1xyXG4gICAgICAgIHkzID0gY2FsY01hdHJpeC5nZXRZKHNpemVBLCAtaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgcGlwZWxpbmUuc2V0VGV4dHVyZTJEKCk7XHJcbiAgICBcclxuICAgICAgICBwaXBlbGluZS5iYXRjaFF1YWQoeDAsIHkwLCB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCAwLCAwLCAxLCAxLCB0aW50LCB0aW50LCB0aW50LCB0aW50LCAyKTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSXNvQm94V2ViR0xSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/isobox/IsoBoxWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangle.js":
/*!******************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangle.js ***!
\******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar IsoTriangleRender = __webpack_require__(/*! ./IsoTriangleRender */ \"./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleRender.js\");\r\nvar Shape = __webpack_require__(/*! ../Shape */ \"./node_modules/phaser/src/gameobjects/shape/Shape.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The IsoTriangle Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports only fill colors and cannot be stroked.\r\n * \r\n * An IsoTriangle is an 'isometric' triangle. Think of it like a pyramid. Each face has a different\r\n * fill color. You can set the color of the top, left and right faces of the triangle respectively\r\n * You can also choose which of the faces are rendered via the `showTop`, `showLeft` and `showRight` properties.\r\n * \r\n * You cannot view an IsoTriangle from under-neath, however you can change the 'angle' by setting\r\n * the `projection` property. The `reversed` property controls if the IsoTriangle is rendered upside\r\n * down or not.\r\n *\r\n * @class IsoTriangle\r\n * @extends Phaser.GameObjects.Shape\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [size=48] - The width of the iso triangle in pixels. The left and right faces will be exactly half this value.\r\n * @param {number} [height=32] - The height of the iso triangle. The left and right faces will be this tall. The overall height of the iso triangle will be this value plus half the `size` value.\r\n * @param {boolean} [reversed=false] - Is the iso triangle upside down?\r\n * @param {number} [fillTop=0xeeeeee] - The fill color of the top face of the iso triangle.\r\n * @param {number} [fillLeft=0x999999] - The fill color of the left face of the iso triangle.\r\n * @param {number} [fillRight=0xcccccc] - The fill color of the right face of the iso triangle.\r\n */\r\nvar IsoTriangle = new Class({\r\n\r\n Extends: Shape,\r\n\r\n Mixins: [\r\n IsoTriangleRender\r\n ],\r\n\r\n initialize:\r\n\r\n function IsoTriangle (scene, x, y, size, height, reversed, fillTop, fillLeft, fillRight)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n if (size === undefined) { size = 48; }\r\n if (height === undefined) { height = 32; }\r\n if (reversed === undefined) { reversed = false; }\r\n if (fillTop === undefined) { fillTop = 0xeeeeee; }\r\n if (fillLeft === undefined) { fillLeft = 0x999999; }\r\n if (fillRight === undefined) { fillRight = 0xcccccc; }\r\n\r\n Shape.call(this, scene, 'IsoTriangle', null);\r\n\r\n /**\r\n * The projection level of the iso box. Change this to change the 'angle' at which you are looking at the box.\r\n *\r\n * @name Phaser.GameObjects.IsoTriangle#projection\r\n * @type {integer}\r\n * @default 4\r\n * @since 3.13.0\r\n */\r\n this.projection = 4;\r\n\r\n /**\r\n * The color used to fill in the top of the iso triangle. This is only used if the triangle is reversed.\r\n *\r\n * @name Phaser.GameObjects.IsoTriangle#fillTop\r\n * @type {number}\r\n * @since 3.13.0\r\n */\r\n this.fillTop = fillTop;\r\n\r\n /**\r\n * The color used to fill in the left-facing side of the iso triangle.\r\n *\r\n * @name Phaser.GameObjects.IsoTriangle#fillLeft\r\n * @type {number}\r\n * @since 3.13.0\r\n */\r\n this.fillLeft = fillLeft;\r\n\r\n /**\r\n * The color used to fill in the right-facing side of the iso triangle.\r\n *\r\n * @name Phaser.GameObjects.IsoTriangle#fillRight\r\n * @type {number}\r\n * @since 3.13.0\r\n */\r\n this.fillRight = fillRight;\r\n\r\n /**\r\n * Controls if the top-face of the iso triangle be rendered.\r\n *\r\n * @name Phaser.GameObjects.IsoTriangle#showTop\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.13.0\r\n */\r\n this.showTop = true;\r\n\r\n /**\r\n * Controls if the left-face of the iso triangle be rendered.\r\n *\r\n * @name Phaser.GameObjects.IsoTriangle#showLeft\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.13.0\r\n */\r\n this.showLeft = true;\r\n\r\n /**\r\n * Controls if the right-face of the iso triangle be rendered.\r\n *\r\n * @name Phaser.GameObjects.IsoTriangle#showRight\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.13.0\r\n */\r\n this.showRight = true;\r\n\r\n /**\r\n * Sets if the iso triangle will be rendered upside down or not.\r\n *\r\n * @name Phaser.GameObjects.IsoTriangle#isReversed\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.13.0\r\n */\r\n this.isReversed = reversed;\r\n\r\n this.isFilled = true;\r\n\r\n this.setPosition(x, y);\r\n this.setSize(size, height);\r\n\r\n this.updateDisplayOrigin();\r\n },\r\n\r\n /**\r\n * Sets the projection level of the iso triangle. Change this to change the 'angle' at which you are looking at the pyramid.\r\n * This call can be chained.\r\n *\r\n * @method Phaser.GameObjects.IsoTriangle#setProjection\r\n * @since 3.13.0\r\n * \r\n * @param {integer} value - The value to set the projection to.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setProjection: function (value)\r\n {\r\n this.projection = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets if the iso triangle will be rendered upside down or not.\r\n * This call can be chained.\r\n *\r\n * @method Phaser.GameObjects.IsoTriangle#setReversed\r\n * @since 3.13.0\r\n * \r\n * @param {boolean} reversed - Sets if the iso triangle will be rendered upside down or not.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setReversed: function (reversed)\r\n {\r\n this.isReversed = reversed;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets which faces of the iso triangle will be rendered.\r\n * This call can be chained.\r\n *\r\n * @method Phaser.GameObjects.IsoTriangle#setFaces\r\n * @since 3.13.0\r\n * \r\n * @param {boolean} [showTop=true] - Show the top-face of the iso triangle (only if `reversed` is true)\r\n * @param {boolean} [showLeft=true] - Show the left-face of the iso triangle.\r\n * @param {boolean} [showRight=true] - Show the right-face of the iso triangle.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setFaces: function (showTop, showLeft, showRight)\r\n {\r\n if (showTop === undefined) { showTop = true; }\r\n if (showLeft === undefined) { showLeft = true; }\r\n if (showRight === undefined) { showRight = true; }\r\n\r\n this.showTop = showTop;\r\n this.showLeft = showLeft;\r\n this.showRight = showRight;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the fill colors for each face of the iso triangle.\r\n * This call can be chained.\r\n *\r\n * @method Phaser.GameObjects.IsoTriangle#setFillStyle\r\n * @since 3.13.0\r\n * \r\n * @param {number} [fillTop] - The color used to fill the top of the iso triangle.\r\n * @param {number} [fillLeft] - The color used to fill in the left-facing side of the iso triangle.\r\n * @param {number} [fillRight] - The color used to fill in the right-facing side of the iso triangle.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setFillStyle: function (fillTop, fillLeft, fillRight)\r\n {\r\n this.fillTop = fillTop;\r\n this.fillLeft = fillLeft;\r\n this.fillRight = fillRight;\r\n\r\n this.isFilled = true;\r\n\r\n return this;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = IsoTriangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9pc290cmlhbmdsZS9Jc29UcmlhbmdsZS5qcz82YjlhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsc0VBQXNCO0FBQzFDLHdCQUF3QixtQkFBTyxDQUFDLHlHQUFxQjtBQUNyRCxZQUFZLG1CQUFPLENBQUMsc0VBQVU7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87QUFDckMsaUNBQWlDLFdBQVc7QUFDNUMsbUNBQW1DLGFBQWE7QUFDaEQscUNBQXFDLGtCQUFrQjtBQUN2RCxvQ0FBb0Msb0JBQW9CO0FBQ3hELHFDQUFxQyxxQkFBcUI7QUFDMUQsc0NBQXNDLHNCQUFzQjs7QUFFNUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxnQkFBZ0I7QUFDcEQscUNBQXFDLGlCQUFpQjtBQUN0RCxzQ0FBc0Msa0JBQWtCOztBQUV4RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvaXNvdHJpYW5nbGUvSXNvVHJpYW5nbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBJc29UcmlhbmdsZVJlbmRlciA9IHJlcXVpcmUoJy4vSXNvVHJpYW5nbGVSZW5kZXInKTtcclxudmFyIFNoYXBlID0gcmVxdWlyZSgnLi4vU2hhcGUnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBJc29UcmlhbmdsZSBTaGFwZSBpcyBhIEdhbWUgT2JqZWN0IHRoYXQgY2FuIGJlIGFkZGVkIHRvIGEgU2NlbmUsIEdyb3VwIG9yIENvbnRhaW5lci4gWW91IGNhblxyXG4gKiB0cmVhdCBpdCBsaWtlIGFueSBvdGhlciBHYW1lIE9iamVjdCBpbiB5b3VyIGdhbWUsIHN1Y2ggYXMgdHdlZW5pbmcgaXQsIHNjYWxpbmcgaXQsIG9yIGVuYWJsaW5nXHJcbiAqIGl0IGZvciBpbnB1dCBvciBwaHlzaWNzLiBJdCBwcm92aWRlcyBhIHF1aWNrIGFuZCBlYXN5IHdheSBmb3IgeW91IHRvIHJlbmRlciB0aGlzIHNoYXBlIGluIHlvdXJcclxuICogZ2FtZSB3aXRob3V0IHVzaW5nIGEgdGV4dHVyZSwgd2hpbGUgc3RpbGwgdGFraW5nIGFkdmFudGFnZSBvZiBiZWluZyBmdWxseSBiYXRjaGVkIGluIFdlYkdMLlxyXG4gKiBcclxuICogVGhpcyBzaGFwZSBzdXBwb3J0cyBvbmx5IGZpbGwgY29sb3JzIGFuZCBjYW5ub3QgYmUgc3Ryb2tlZC5cclxuICogXHJcbiAqIEFuIElzb1RyaWFuZ2xlIGlzIGFuICdpc29tZXRyaWMnIHRyaWFuZ2xlLiBUaGluayBvZiBpdCBsaWtlIGEgcHlyYW1pZC4gRWFjaCBmYWNlIGhhcyBhIGRpZmZlcmVudFxyXG4gKiBmaWxsIGNvbG9yLiBZb3UgY2FuIHNldCB0aGUgY29sb3Igb2YgdGhlIHRvcCwgbGVmdCBhbmQgcmlnaHQgZmFjZXMgb2YgdGhlIHRyaWFuZ2xlIHJlc3BlY3RpdmVseVxyXG4gKiBZb3UgY2FuIGFsc28gY2hvb3NlIHdoaWNoIG9mIHRoZSBmYWNlcyBhcmUgcmVuZGVyZWQgdmlhIHRoZSBgc2hvd1RvcGAsIGBzaG93TGVmdGAgYW5kIGBzaG93UmlnaHRgIHByb3BlcnRpZXMuXHJcbiAqIFxyXG4gKiBZb3UgY2Fubm90IHZpZXcgYW4gSXNvVHJpYW5nbGUgZnJvbSB1bmRlci1uZWF0aCwgaG93ZXZlciB5b3UgY2FuIGNoYW5nZSB0aGUgJ2FuZ2xlJyBieSBzZXR0aW5nXHJcbiAqIHRoZSBgcHJvamVjdGlvbmAgcHJvcGVydHkuIFRoZSBgcmV2ZXJzZWRgIHByb3BlcnR5IGNvbnRyb2xzIGlmIHRoZSBJc29UcmlhbmdsZSBpcyByZW5kZXJlZCB1cHNpZGVcclxuICogZG93biBvciBub3QuXHJcbiAqXHJcbiAqIEBjbGFzcyBJc29UcmlhbmdsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuU2hhcGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5HYW1lT2JqZWN0c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBHYW1lIE9iamVjdCBiZWxvbmdzLiBBIEdhbWUgT2JqZWN0IGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgU2NlbmUgYXQgYSB0aW1lLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3NpemU9NDhdIC0gVGhlIHdpZHRoIG9mIHRoZSBpc28gdHJpYW5nbGUgaW4gcGl4ZWxzLiBUaGUgbGVmdCBhbmQgcmlnaHQgZmFjZXMgd2lsbCBiZSBleGFjdGx5IGhhbGYgdGhpcyB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtoZWlnaHQ9MzJdIC0gVGhlIGhlaWdodCBvZiB0aGUgaXNvIHRyaWFuZ2xlLiBUaGUgbGVmdCBhbmQgcmlnaHQgZmFjZXMgd2lsbCBiZSB0aGlzIHRhbGwuIFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGUgaXNvIHRyaWFuZ2xlIHdpbGwgYmUgdGhpcyB2YWx1ZSBwbHVzIGhhbGYgdGhlIGBzaXplYCB2YWx1ZS5cclxuICogQHBhcmFtIHtib29sZWFufSBbcmV2ZXJzZWQ9ZmFsc2VdIC0gSXMgdGhlIGlzbyB0cmlhbmdsZSB1cHNpZGUgZG93bj9cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsVG9wPTB4ZWVlZWVlXSAtIFRoZSBmaWxsIGNvbG9yIG9mIHRoZSB0b3AgZmFjZSBvZiB0aGUgaXNvIHRyaWFuZ2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxMZWZ0PTB4OTk5OTk5XSAtIFRoZSBmaWxsIGNvbG9yIG9mIHRoZSBsZWZ0IGZhY2Ugb2YgdGhlIGlzbyB0cmlhbmdsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsUmlnaHQ9MHhjY2NjY2NdIC0gVGhlIGZpbGwgY29sb3Igb2YgdGhlIHJpZ2h0IGZhY2Ugb2YgdGhlIGlzbyB0cmlhbmdsZS5cclxuICovXHJcbnZhciBJc29UcmlhbmdsZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogU2hhcGUsXHJcblxyXG4gICAgTWl4aW5zOiBbXHJcbiAgICAgICAgSXNvVHJpYW5nbGVSZW5kZXJcclxuICAgIF0sXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBJc29UcmlhbmdsZSAoc2NlbmUsIHgsIHksIHNpemUsIGhlaWdodCwgcmV2ZXJzZWQsIGZpbGxUb3AsIGZpbGxMZWZ0LCBmaWxsUmlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IDA7IH1cclxuICAgICAgICBpZiAoc2l6ZSA9PT0gdW5kZWZpbmVkKSB7IHNpemUgPSA0ODsgfVxyXG4gICAgICAgIGlmIChoZWlnaHQgPT09IHVuZGVmaW5lZCkgeyBoZWlnaHQgPSAzMjsgfVxyXG4gICAgICAgIGlmIChyZXZlcnNlZCA9PT0gdW5kZWZpbmVkKSB7IHJldmVyc2VkID0gZmFsc2U7IH1cclxuICAgICAgICBpZiAoZmlsbFRvcCA9PT0gdW5kZWZpbmVkKSB7IGZpbGxUb3AgPSAweGVlZWVlZTsgfVxyXG4gICAgICAgIGlmIChmaWxsTGVmdCA9PT0gdW5kZWZpbmVkKSB7IGZpbGxMZWZ0ID0gMHg5OTk5OTk7IH1cclxuICAgICAgICBpZiAoZmlsbFJpZ2h0ID09PSB1bmRlZmluZWQpIHsgZmlsbFJpZ2h0ID0gMHhjY2NjY2M7IH1cclxuXHJcbiAgICAgICAgU2hhcGUuY2FsbCh0aGlzLCBzY2VuZSwgJ0lzb1RyaWFuZ2xlJywgbnVsbCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBwcm9qZWN0aW9uIGxldmVsIG9mIHRoZSBpc28gYm94LiBDaGFuZ2UgdGhpcyB0byBjaGFuZ2UgdGhlICdhbmdsZScgYXQgd2hpY2ggeW91IGFyZSBsb29raW5nIGF0IHRoZSBib3guXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuSXNvVHJpYW5nbGUjcHJvamVjdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDRcclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uID0gNDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNvbG9yIHVzZWQgdG8gZmlsbCBpbiB0aGUgdG9wIG9mIHRoZSBpc28gdHJpYW5nbGUuIFRoaXMgaXMgb25seSB1c2VkIGlmIHRoZSB0cmlhbmdsZSBpcyByZXZlcnNlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Jc29UcmlhbmdsZSNmaWxsVG9wXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5maWxsVG9wID0gZmlsbFRvcDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNvbG9yIHVzZWQgdG8gZmlsbCBpbiB0aGUgbGVmdC1mYWNpbmcgc2lkZSBvZiB0aGUgaXNvIHRyaWFuZ2xlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLklzb1RyaWFuZ2xlI2ZpbGxMZWZ0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5maWxsTGVmdCA9IGZpbGxMZWZ0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY29sb3IgdXNlZCB0byBmaWxsIGluIHRoZSByaWdodC1mYWNpbmcgc2lkZSBvZiB0aGUgaXNvIHRyaWFuZ2xlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLklzb1RyaWFuZ2xlI2ZpbGxSaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZmlsbFJpZ2h0ID0gZmlsbFJpZ2h0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb250cm9scyBpZiB0aGUgdG9wLWZhY2Ugb2YgdGhlIGlzbyB0cmlhbmdsZSBiZSByZW5kZXJlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5Jc29UcmlhbmdsZSNzaG93VG9wXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNob3dUb3AgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb250cm9scyBpZiB0aGUgbGVmdC1mYWNlIG9mIHRoZSBpc28gdHJpYW5nbGUgYmUgcmVuZGVyZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuSXNvVHJpYW5nbGUjc2hvd0xlZnRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2hvd0xlZnQgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb250cm9scyBpZiB0aGUgcmlnaHQtZmFjZSBvZiB0aGUgaXNvIHRyaWFuZ2xlIGJlIHJlbmRlcmVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLklzb1RyaWFuZ2xlI3Nob3dSaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zaG93UmlnaHQgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTZXRzIGlmIHRoZSBpc28gdHJpYW5nbGUgd2lsbCBiZSByZW5kZXJlZCB1cHNpZGUgZG93biBvciBub3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuSXNvVHJpYW5nbGUjaXNSZXZlcnNlZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaXNSZXZlcnNlZCA9IHJldmVyc2VkO1xyXG5cclxuICAgICAgICB0aGlzLmlzRmlsbGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcclxuICAgICAgICB0aGlzLnNldFNpemUoc2l6ZSwgaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5T3JpZ2luKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcHJvamVjdGlvbiBsZXZlbCBvZiB0aGUgaXNvIHRyaWFuZ2xlLiBDaGFuZ2UgdGhpcyB0byBjaGFuZ2UgdGhlICdhbmdsZScgYXQgd2hpY2ggeW91IGFyZSBsb29raW5nIGF0IHRoZSBweXJhbWlkLlxyXG4gICAgICogVGhpcyBjYWxsIGNhbiBiZSBjaGFpbmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLklzb1RyaWFuZ2xlI3NldFByb2plY3Rpb25cclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzZXQgdGhlIHByb2plY3Rpb24gdG8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0UHJvamVjdGlvbjogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucHJvamVjdGlvbiA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGlmIHRoZSBpc28gdHJpYW5nbGUgd2lsbCBiZSByZW5kZXJlZCB1cHNpZGUgZG93biBvciBub3QuXHJcbiAgICAgKiBUaGlzIGNhbGwgY2FuIGJlIGNoYWluZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuSXNvVHJpYW5nbGUjc2V0UmV2ZXJzZWRcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSByZXZlcnNlZCAtIFNldHMgaWYgdGhlIGlzbyB0cmlhbmdsZSB3aWxsIGJlIHJlbmRlcmVkIHVwc2lkZSBkb3duIG9yIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRSZXZlcnNlZDogZnVuY3Rpb24gKHJldmVyc2VkKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuaXNSZXZlcnNlZCA9IHJldmVyc2VkO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHdoaWNoIGZhY2VzIG9mIHRoZSBpc28gdHJpYW5nbGUgd2lsbCBiZSByZW5kZXJlZC5cclxuICAgICAqIFRoaXMgY2FsbCBjYW4gYmUgY2hhaW5lZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Jc29UcmlhbmdsZSNzZXRGYWNlc1xyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzaG93VG9wPXRydWVdIC0gU2hvdyB0aGUgdG9wLWZhY2Ugb2YgdGhlIGlzbyB0cmlhbmdsZSAob25seSBpZiBgcmV2ZXJzZWRgIGlzIHRydWUpXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzaG93TGVmdD10cnVlXSAtIFNob3cgdGhlIGxlZnQtZmFjZSBvZiB0aGUgaXNvIHRyaWFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbc2hvd1JpZ2h0PXRydWVdIC0gU2hvdyB0aGUgcmlnaHQtZmFjZSBvZiB0aGUgaXNvIHRyaWFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEZhY2VzOiBmdW5jdGlvbiAoc2hvd1RvcCwgc2hvd0xlZnQsIHNob3dSaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAoc2hvd1RvcCA9PT0gdW5kZWZpbmVkKSB7IHNob3dUb3AgPSB0cnVlOyB9XHJcbiAgICAgICAgaWYgKHNob3dMZWZ0ID09PSB1bmRlZmluZWQpIHsgc2hvd0xlZnQgPSB0cnVlOyB9XHJcbiAgICAgICAgaWYgKHNob3dSaWdodCA9PT0gdW5kZWZpbmVkKSB7IHNob3dSaWdodCA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdGhpcy5zaG93VG9wID0gc2hvd1RvcDtcclxuICAgICAgICB0aGlzLnNob3dMZWZ0ID0gc2hvd0xlZnQ7XHJcbiAgICAgICAgdGhpcy5zaG93UmlnaHQgPSBzaG93UmlnaHQ7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGZpbGwgY29sb3JzIGZvciBlYWNoIGZhY2Ugb2YgdGhlIGlzbyB0cmlhbmdsZS5cclxuICAgICAqIFRoaXMgY2FsbCBjYW4gYmUgY2hhaW5lZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Jc29UcmlhbmdsZSNzZXRGaWxsU3R5bGVcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsVG9wXSAtIFRoZSBjb2xvciB1c2VkIHRvIGZpbGwgdGhlIHRvcCBvZiB0aGUgaXNvIHRyaWFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsTGVmdF0gLSBUaGUgY29sb3IgdXNlZCB0byBmaWxsIGluIHRoZSBsZWZ0LWZhY2luZyBzaWRlIG9mIHRoZSBpc28gdHJpYW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxSaWdodF0gLSBUaGUgY29sb3IgdXNlZCB0byBmaWxsIGluIHRoZSByaWdodC1mYWNpbmcgc2lkZSBvZiB0aGUgaXNvIHRyaWFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldEZpbGxTdHlsZTogZnVuY3Rpb24gKGZpbGxUb3AsIGZpbGxMZWZ0LCBmaWxsUmlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5maWxsVG9wID0gZmlsbFRvcDtcclxuICAgICAgICB0aGlzLmZpbGxMZWZ0ID0gZmlsbExlZnQ7XHJcbiAgICAgICAgdGhpcy5maWxsUmlnaHQgPSBmaWxsUmlnaHQ7XHJcblxyXG4gICAgICAgIHRoaXMuaXNGaWxsZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJc29UcmlhbmdsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleCanvasRenderer.js":
/*!********************************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleCanvasRenderer.js ***!
\********************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillStyleCanvas = __webpack_require__(/*! ../FillStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js\");\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.IsoTriangle#renderCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.IsoTriangle} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar IsoTriangleCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var ctx = renderer.currentContext;\r\n\r\n if (SetTransform(renderer, ctx, src, camera, parentMatrix) && src.isFilled)\r\n {\r\n var size = src.width;\r\n var height = src.height;\r\n \r\n var sizeA = size / 2;\r\n var sizeB = size / src.projection;\r\n\r\n var reversed = src.isReversed;\r\n\r\n // Top Face\r\n\r\n if (src.showTop && reversed)\r\n {\r\n FillStyleCanvas(ctx, src, src.fillTop);\r\n\r\n ctx.beginPath();\r\n\r\n ctx.moveTo(-sizeA, -height);\r\n ctx.lineTo(0, -sizeB - height);\r\n ctx.lineTo(sizeA, -height);\r\n ctx.lineTo(0, sizeB - height);\r\n\r\n ctx.fill();\r\n }\r\n\r\n // Left Face\r\n\r\n if (src.showLeft)\r\n {\r\n FillStyleCanvas(ctx, src, src.fillLeft);\r\n\r\n ctx.beginPath();\r\n\r\n if (reversed)\r\n {\r\n ctx.moveTo(-sizeA, -height);\r\n ctx.lineTo(0, sizeB);\r\n ctx.lineTo(0, sizeB - height);\r\n }\r\n else\r\n {\r\n ctx.moveTo(-sizeA, 0);\r\n ctx.lineTo(0, sizeB);\r\n ctx.lineTo(0, sizeB - height);\r\n }\r\n\r\n ctx.fill();\r\n }\r\n\r\n // Right Face\r\n\r\n if (src.showRight)\r\n {\r\n FillStyleCanvas(ctx, src, src.fillRight);\r\n\r\n ctx.beginPath();\r\n\r\n if (reversed)\r\n {\r\n ctx.moveTo(sizeA, -height);\r\n ctx.lineTo(0, sizeB);\r\n ctx.lineTo(0, sizeB - height);\r\n }\r\n else\r\n {\r\n ctx.moveTo(sizeA, 0);\r\n ctx.lineTo(0, sizeB);\r\n ctx.lineTo(0, sizeB - height);\r\n }\r\n\r\n ctx.fill();\r\n }\r\n\r\n // Restore the context saved in SetTransform\r\n ctx.restore();\r\n }\r\n};\r\n\r\nmodule.exports = IsoTriangleCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9pc290cmlhbmdsZS9Jc29UcmlhbmdsZUNhbnZhc1JlbmRlcmVyLmpzP2Y5MTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHNCQUFzQixtQkFBTyxDQUFDLDBGQUFvQjtBQUNsRCxtQkFBbUIsbUJBQU8sQ0FBQyxvSEFBNkM7O0FBRXhFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsK0JBQStCO0FBQzFDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9pc290cmlhbmdsZS9Jc29UcmlhbmdsZUNhbnZhc1JlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgRmlsbFN0eWxlQ2FudmFzID0gcmVxdWlyZSgnLi4vRmlsbFN0eWxlQ2FudmFzJyk7XHJcbnZhciBTZXRUcmFuc2Zvcm0gPSByZXF1aXJlKCcuLi8uLi8uLi9yZW5kZXJlci9jYW52YXMvdXRpbHMvU2V0VHJhbnNmb3JtJyk7XHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIENhbnZhcyBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLklzb1RyaWFuZ2xlI3JlbmRlckNhbnZhc1xyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgQ2FudmFzIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Jc29UcmlhbmdsZX0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIElzb1RyaWFuZ2xlQ2FudmFzUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgY3R4ID0gcmVuZGVyZXIuY3VycmVudENvbnRleHQ7XHJcblxyXG4gICAgaWYgKFNldFRyYW5zZm9ybShyZW5kZXJlciwgY3R4LCBzcmMsIGNhbWVyYSwgcGFyZW50TWF0cml4KSAmJiBzcmMuaXNGaWxsZWQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHNpemUgPSBzcmMud2lkdGg7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IHNyYy5oZWlnaHQ7XHJcbiAgICBcclxuICAgICAgICB2YXIgc2l6ZUEgPSBzaXplIC8gMjtcclxuICAgICAgICB2YXIgc2l6ZUIgPSBzaXplIC8gc3JjLnByb2plY3Rpb247XHJcblxyXG4gICAgICAgIHZhciByZXZlcnNlZCA9IHNyYy5pc1JldmVyc2VkO1xyXG5cclxuICAgICAgICAvLyAgVG9wIEZhY2VcclxuXHJcbiAgICAgICAgaWYgKHNyYy5zaG93VG9wICYmIHJldmVyc2VkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgRmlsbFN0eWxlQ2FudmFzKGN0eCwgc3JjLCBzcmMuZmlsbFRvcCk7XHJcblxyXG4gICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XHJcblxyXG4gICAgICAgICAgICBjdHgubW92ZVRvKC1zaXplQSwgLWhlaWdodCk7XHJcbiAgICAgICAgICAgIGN0eC5saW5lVG8oMCwgLXNpemVCIC0gaGVpZ2h0KTtcclxuICAgICAgICAgICAgY3R4LmxpbmVUbyhzaXplQSwgLWhlaWdodCk7XHJcbiAgICAgICAgICAgIGN0eC5saW5lVG8oMCwgc2l6ZUIgLSBoZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgY3R4LmZpbGwoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBMZWZ0IEZhY2VcclxuXHJcbiAgICAgICAgaWYgKHNyYy5zaG93TGVmdClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIEZpbGxTdHlsZUNhbnZhcyhjdHgsIHNyYywgc3JjLmZpbGxMZWZ0KTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXZlcnNlZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY3R4Lm1vdmVUbygtc2l6ZUEsIC1oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgY3R4LmxpbmVUbygwLCBzaXplQik7XHJcbiAgICAgICAgICAgICAgICBjdHgubGluZVRvKDAsIHNpemVCIC0gaGVpZ2h0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oLXNpemVBLCAwKTtcclxuICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oMCwgc2l6ZUIpO1xyXG4gICAgICAgICAgICAgICAgY3R4LmxpbmVUbygwLCBzaXplQiAtIGhlaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGN0eC5maWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgUmlnaHQgRmFjZVxyXG5cclxuICAgICAgICBpZiAoc3JjLnNob3dSaWdodClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIEZpbGxTdHlsZUNhbnZhcyhjdHgsIHNyYywgc3JjLmZpbGxSaWdodCk7XHJcblxyXG4gICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAocmV2ZXJzZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oc2l6ZUEsIC1oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgY3R4LmxpbmVUbygwLCBzaXplQik7XHJcbiAgICAgICAgICAgICAgICBjdHgubGluZVRvKDAsIHNpemVCIC0gaGVpZ2h0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oc2l6ZUEsIDApO1xyXG4gICAgICAgICAgICAgICAgY3R4LmxpbmVUbygwLCBzaXplQik7XHJcbiAgICAgICAgICAgICAgICBjdHgubGluZVRvKDAsIHNpemVCIC0gaGVpZ2h0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY3R4LmZpbGwoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBSZXN0b3JlIHRoZSBjb250ZXh0IHNhdmVkIGluIFNldFRyYW5zZm9ybVxyXG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IElzb1RyaWFuZ2xlQ2FudmFzUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleFactory.js":
/*!*************************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleFactory.js ***!
\*************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar IsoTriangle = __webpack_require__(/*! ./IsoTriangle */ \"./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangle.js\");\r\n\r\n/**\r\n * Creates a new IsoTriangle Shape Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the IsoTriangle Game Object has been built into Phaser.\r\n * \r\n * The IsoTriangle Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports only fill colors and cannot be stroked.\r\n * \r\n * An IsoTriangle is an 'isometric' triangle. Think of it like a pyramid. Each face has a different\r\n * fill color. You can set the color of the top, left and right faces of the triangle respectively\r\n * You can also choose which of the faces are rendered via the `showTop`, `showLeft` and `showRight` properties.\r\n * \r\n * You cannot view an IsoTriangle from under-neath, however you can change the 'angle' by setting\r\n * the `projection` property. The `reversed` property controls if the IsoTriangle is rendered upside\r\n * down or not.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#isotriangle\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [size=48] - The width of the iso triangle in pixels. The left and right faces will be exactly half this value.\r\n * @param {number} [height=32] - The height of the iso triangle. The left and right faces will be this tall. The overall height of the iso triangle will be this value plus half the `size` value.\r\n * @param {boolean} [reversed=false] - Is the iso triangle upside down?\r\n * @param {number} [fillTop=0xeeeeee] - The fill color of the top face of the iso triangle.\r\n * @param {number} [fillLeft=0x999999] - The fill color of the left face of the iso triangle.\r\n * @param {number} [fillRight=0xcccccc] - The fill color of the right face of the iso triangle.\r\n *\r\n * @return {Phaser.GameObjects.IsoTriangle} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('isotriangle', function (x, y, size, height, reversed, fillTop, fillLeft, fillRight)\r\n{\r\n return this.displayList.add(new IsoTriangle(this.scene, x, y, size, height, reversed, fillTop, fillLeft, fillRight));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9pc290cmlhbmdsZS9Jc29UcmlhbmdsZUZhY3RvcnkuanM/NWZiZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsd0JBQXdCLG1CQUFPLENBQUMsMkZBQXlCO0FBQ3pELGtCQUFrQixtQkFBTyxDQUFDLDZGQUFlOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksK0JBQStCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL2lzb3RyaWFuZ2xlL0lzb1RyaWFuZ2xlRmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdhbWVPYmplY3RGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vR2FtZU9iamVjdEZhY3RvcnknKTtcclxudmFyIElzb1RyaWFuZ2xlID0gcmVxdWlyZSgnLi9Jc29UcmlhbmdsZScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgSXNvVHJpYW5nbGUgU2hhcGUgR2FtZSBPYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIFNjZW5lLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBJc29UcmlhbmdsZSBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogXHJcbiAqIFRoZSBJc29UcmlhbmdsZSBTaGFwZSBpcyBhIEdhbWUgT2JqZWN0IHRoYXQgY2FuIGJlIGFkZGVkIHRvIGEgU2NlbmUsIEdyb3VwIG9yIENvbnRhaW5lci4gWW91IGNhblxyXG4gKiB0cmVhdCBpdCBsaWtlIGFueSBvdGhlciBHYW1lIE9iamVjdCBpbiB5b3VyIGdhbWUsIHN1Y2ggYXMgdHdlZW5pbmcgaXQsIHNjYWxpbmcgaXQsIG9yIGVuYWJsaW5nXHJcbiAqIGl0IGZvciBpbnB1dCBvciBwaHlzaWNzLiBJdCBwcm92aWRlcyBhIHF1aWNrIGFuZCBlYXN5IHdheSBmb3IgeW91IHRvIHJlbmRlciB0aGlzIHNoYXBlIGluIHlvdXJcclxuICogZ2FtZSB3aXRob3V0IHVzaW5nIGEgdGV4dHVyZSwgd2hpbGUgc3RpbGwgdGFraW5nIGFkdmFudGFnZSBvZiBiZWluZyBmdWxseSBiYXRjaGVkIGluIFdlYkdMLlxyXG4gKiBcclxuICogVGhpcyBzaGFwZSBzdXBwb3J0cyBvbmx5IGZpbGwgY29sb3JzIGFuZCBjYW5ub3QgYmUgc3Ryb2tlZC5cclxuICogXHJcbiAqIEFuIElzb1RyaWFuZ2xlIGlzIGFuICdpc29tZXRyaWMnIHRyaWFuZ2xlLiBUaGluayBvZiBpdCBsaWtlIGEgcHlyYW1pZC4gRWFjaCBmYWNlIGhhcyBhIGRpZmZlcmVudFxyXG4gKiBmaWxsIGNvbG9yLiBZb3UgY2FuIHNldCB0aGUgY29sb3Igb2YgdGhlIHRvcCwgbGVmdCBhbmQgcmlnaHQgZmFjZXMgb2YgdGhlIHRyaWFuZ2xlIHJlc3BlY3RpdmVseVxyXG4gKiBZb3UgY2FuIGFsc28gY2hvb3NlIHdoaWNoIG9mIHRoZSBmYWNlcyBhcmUgcmVuZGVyZWQgdmlhIHRoZSBgc2hvd1RvcGAsIGBzaG93TGVmdGAgYW5kIGBzaG93UmlnaHRgIHByb3BlcnRpZXMuXHJcbiAqIFxyXG4gKiBZb3UgY2Fubm90IHZpZXcgYW4gSXNvVHJpYW5nbGUgZnJvbSB1bmRlci1uZWF0aCwgaG93ZXZlciB5b3UgY2FuIGNoYW5nZSB0aGUgJ2FuZ2xlJyBieSBzZXR0aW5nXHJcbiAqIHRoZSBgcHJvamVjdGlvbmAgcHJvcGVydHkuIFRoZSBgcmV2ZXJzZWRgIHByb3BlcnR5IGNvbnRyb2xzIGlmIHRoZSBJc29UcmlhbmdsZSBpcyByZW5kZXJlZCB1cHNpZGVcclxuICogZG93biBvciBub3QuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I2lzb3RyaWFuZ2xlXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPTQ4XSAtIFRoZSB3aWR0aCBvZiB0aGUgaXNvIHRyaWFuZ2xlIGluIHBpeGVscy4gVGhlIGxlZnQgYW5kIHJpZ2h0IGZhY2VzIHdpbGwgYmUgZXhhY3RseSBoYWxmIHRoaXMgdmFsdWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0PTMyXSAtIFRoZSBoZWlnaHQgb2YgdGhlIGlzbyB0cmlhbmdsZS4gVGhlIGxlZnQgYW5kIHJpZ2h0IGZhY2VzIHdpbGwgYmUgdGhpcyB0YWxsLiBUaGUgb3ZlcmFsbCBoZWlnaHQgb2YgdGhlIGlzbyB0cmlhbmdsZSB3aWxsIGJlIHRoaXMgdmFsdWUgcGx1cyBoYWxmIHRoZSBgc2l6ZWAgdmFsdWUuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldmVyc2VkPWZhbHNlXSAtIElzIHRoZSBpc28gdHJpYW5nbGUgdXBzaWRlIGRvd24/XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbFRvcD0weGVlZWVlZV0gLSBUaGUgZmlsbCBjb2xvciBvZiB0aGUgdG9wIGZhY2Ugb2YgdGhlIGlzbyB0cmlhbmdsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsTGVmdD0weDk5OTk5OV0gLSBUaGUgZmlsbCBjb2xvciBvZiB0aGUgbGVmdCBmYWNlIG9mIHRoZSBpc28gdHJpYW5nbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbFJpZ2h0PTB4Y2NjY2NjXSAtIFRoZSBmaWxsIGNvbG9yIG9mIHRoZSByaWdodCBmYWNlIG9mIHRoZSBpc28gdHJpYW5nbGUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Jc29UcmlhbmdsZX0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0RmFjdG9yeS5yZWdpc3RlcignaXNvdHJpYW5nbGUnLCBmdW5jdGlvbiAoeCwgeSwgc2l6ZSwgaGVpZ2h0LCByZXZlcnNlZCwgZmlsbFRvcCwgZmlsbExlZnQsIGZpbGxSaWdodClcclxue1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheUxpc3QuYWRkKG5ldyBJc29UcmlhbmdsZSh0aGlzLnNjZW5lLCB4LCB5LCBzaXplLCBoZWlnaHQsIHJldmVyc2VkLCBmaWxsVG9wLCBmaWxsTGVmdCwgZmlsbFJpZ2h0KSk7XHJcbn0pO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleRender.js":
/*!************************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleRender.js ***!
\************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./IsoTriangleWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./IsoTriangleCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9pc290cmlhbmdsZS9Jc29UcmlhbmdsZVJlbmRlci5qcz9hMWE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxvRUFBcUI7QUFDL0MsbUJBQW1CLG1CQUFPLENBQUMsb0VBQXFCOztBQUVoRCxJQUFJLElBQXFCO0FBQ3pCO0FBQ0Esa0JBQWtCLG1CQUFPLENBQUMsdUhBQTRCO0FBQ3REOztBQUVBLElBQUksSUFBc0I7QUFDMUI7QUFDQSxtQkFBbUIsbUJBQU8sQ0FBQyx5SEFBNkI7QUFDeEQ7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL2lzb3RyaWFuZ2xlL0lzb1RyaWFuZ2xlUmVuZGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9OT09QJyk7XHJcbnZhciByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9OT09QJyk7XHJcblxyXG5pZiAodHlwZW9mIFdFQkdMX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4vSXNvVHJpYW5nbGVXZWJHTFJlbmRlcmVyJyk7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgQ0FOVkFTX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuL0lzb1RyaWFuZ2xlQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleWebGLRenderer.js":
/*!*******************************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleWebGLRenderer.js ***!
\*******************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.IsoTriangle#renderWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.IsoTriangle} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar IsoTriangleWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var pipeline = this.pipeline;\r\n\r\n var camMatrix = pipeline._tempMatrix1;\r\n var shapeMatrix = pipeline._tempMatrix2;\r\n var calcMatrix = pipeline._tempMatrix3;\r\n\r\n renderer.setPipeline(pipeline);\r\n\r\n shapeMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n camMatrix.copyFrom(camera.matrix);\r\n\r\n if (parentMatrix)\r\n {\r\n // Multiply the camera by the parent matrix\r\n camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n // Undo the camera scroll\r\n shapeMatrix.e = src.x;\r\n shapeMatrix.f = src.y;\r\n }\r\n else\r\n {\r\n shapeMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n shapeMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n }\r\n\r\n camMatrix.multiply(shapeMatrix, calcMatrix);\r\n\r\n var size = src.width;\r\n var height = src.height;\r\n\r\n var sizeA = size / 2;\r\n var sizeB = size / src.projection;\r\n\r\n var reversed = src.isReversed;\r\n\r\n var alpha = camera.alpha * src.alpha;\r\n\r\n if (!src.isFilled)\r\n {\r\n return;\r\n }\r\n\r\n var tint;\r\n\r\n var x0;\r\n var y0;\r\n\r\n var x1;\r\n var y1;\r\n\r\n var x2;\r\n var y2;\r\n\r\n // Top Face\r\n\r\n if (src.showTop && reversed)\r\n {\r\n tint = Utils.getTintAppendFloatAlphaAndSwap(src.fillTop, alpha);\r\n\r\n x0 = calcMatrix.getX(-sizeA, -height);\r\n y0 = calcMatrix.getY(-sizeA, -height);\r\n \r\n x1 = calcMatrix.getX(0, -sizeB - height);\r\n y1 = calcMatrix.getY(0, -sizeB - height);\r\n \r\n x2 = calcMatrix.getX(sizeA, -height);\r\n y2 = calcMatrix.getY(sizeA, -height);\r\n \r\n var x3 = calcMatrix.getX(0, sizeB - height);\r\n var y3 = calcMatrix.getY(0, sizeB - height);\r\n\r\n pipeline.setTexture2D();\r\n \r\n pipeline.batchQuad(x0, y0, x1, y1, x2, y2, x3, y3, 0, 0, 1, 1, tint, tint, tint, tint, 2);\r\n }\r\n\r\n // Left Face\r\n\r\n if (src.showLeft)\r\n {\r\n tint = Utils.getTintAppendFloatAlphaAndSwap(src.fillLeft, alpha);\r\n\r\n if (reversed)\r\n {\r\n x0 = calcMatrix.getX(-sizeA, -height);\r\n y0 = calcMatrix.getY(-sizeA, -height);\r\n \r\n x1 = calcMatrix.getX(0, sizeB);\r\n y1 = calcMatrix.getY(0, sizeB);\r\n \r\n x2 = calcMatrix.getX(0, sizeB - height);\r\n y2 = calcMatrix.getY(0, sizeB - height);\r\n }\r\n else\r\n {\r\n x0 = calcMatrix.getX(-sizeA, 0);\r\n y0 = calcMatrix.getY(-sizeA, 0);\r\n \r\n x1 = calcMatrix.getX(0, sizeB);\r\n y1 = calcMatrix.getY(0, sizeB);\r\n \r\n x2 = calcMatrix.getX(0, sizeB - height);\r\n y2 = calcMatrix.getY(0, sizeB - height);\r\n }\r\n \r\n pipeline.batchTri(x0, y0, x1, y1, x2, y2, 0, 0, 1, 1, tint, tint, tint, 2);\r\n }\r\n\r\n // Right Face\r\n\r\n if (src.showRight)\r\n {\r\n tint = Utils.getTintAppendFloatAlphaAndSwap(src.fillRight, alpha);\r\n\r\n if (reversed)\r\n {\r\n x0 = calcMatrix.getX(sizeA, -height);\r\n y0 = calcMatrix.getY(sizeA, -height);\r\n \r\n x1 = calcMatrix.getX(0, sizeB);\r\n y1 = calcMatrix.getY(0, sizeB);\r\n \r\n x2 = calcMatrix.getX(0, sizeB - height);\r\n y2 = calcMatrix.getY(0, sizeB - height);\r\n }\r\n else\r\n {\r\n x0 = calcMatrix.getX(sizeA, 0);\r\n y0 = calcMatrix.getY(sizeA, 0);\r\n \r\n x1 = calcMatrix.getX(0, sizeB);\r\n y1 = calcMatrix.getY(0, sizeB);\r\n \r\n x2 = calcMatrix.getX(0, sizeB - height);\r\n y2 = calcMatrix.getY(0, sizeB - height);\r\n }\r\n\r\n pipeline.setTexture2D();\r\n \r\n pipeline.batchTri(x0, y0, x1, y1, x2, y2, 0, 0, 1, 1, tint, tint, tint, 2);\r\n }\r\n};\r\n\r\nmodule.exports = IsoTriangleWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9pc290cmlhbmdsZS9Jc29UcmlhbmdsZVdlYkdMUmVuZGVyZXIuanM/MDRmYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHdGQUErQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQ0FBb0M7QUFDL0MsV0FBVywrQkFBK0I7QUFDMUMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9pc290cmlhbmdsZS9Jc29UcmlhbmdsZVdlYkdMUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBVdGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3JlbmRlcmVyL3dlYmdsL1V0aWxzJyk7XHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIFdlYkdMIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuSXNvVHJpYW5nbGUjcmVuZGVyV2ViR0xcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBXZWJHTCByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuSXNvVHJpYW5nbGV9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBJc29UcmlhbmdsZVdlYkdMUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgcGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lO1xyXG5cclxuICAgIHZhciBjYW1NYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDE7XHJcbiAgICB2YXIgc2hhcGVNYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDI7XHJcbiAgICB2YXIgY2FsY01hdHJpeCA9IHBpcGVsaW5lLl90ZW1wTWF0cml4MztcclxuXHJcbiAgICByZW5kZXJlci5zZXRQaXBlbGluZShwaXBlbGluZSk7XHJcblxyXG4gICAgc2hhcGVNYXRyaXguYXBwbHlJVFJTKHNyYy54LCBzcmMueSwgc3JjLnJvdGF0aW9uLCBzcmMuc2NhbGVYLCBzcmMuc2NhbGVZKTtcclxuXHJcbiAgICBjYW1NYXRyaXguY29weUZyb20oY2FtZXJhLm1hdHJpeCk7XHJcblxyXG4gICAgaWYgKHBhcmVudE1hdHJpeClcclxuICAgIHtcclxuICAgICAgICAvLyAgTXVsdGlwbHkgdGhlIGNhbWVyYSBieSB0aGUgcGFyZW50IG1hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseVdpdGhPZmZzZXQocGFyZW50TWF0cml4LCAtY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWCwgLWNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3RvclkpO1xyXG5cclxuICAgICAgICAvLyAgVW5kbyB0aGUgY2FtZXJhIHNjcm9sbFxyXG4gICAgICAgIHNoYXBlTWF0cml4LmUgPSBzcmMueDtcclxuICAgICAgICBzaGFwZU1hdHJpeC5mID0gc3JjLnk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgc2hhcGVNYXRyaXguZSAtPSBjYW1lcmEuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYO1xyXG4gICAgICAgIHNoYXBlTWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuICAgIH1cclxuXHJcbiAgICBjYW1NYXRyaXgubXVsdGlwbHkoc2hhcGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG5cclxuICAgIHZhciBzaXplID0gc3JjLndpZHRoO1xyXG4gICAgdmFyIGhlaWdodCA9IHNyYy5oZWlnaHQ7XHJcblxyXG4gICAgdmFyIHNpemVBID0gc2l6ZSAvIDI7XHJcbiAgICB2YXIgc2l6ZUIgPSBzaXplIC8gc3JjLnByb2plY3Rpb247XHJcblxyXG4gICAgdmFyIHJldmVyc2VkID0gc3JjLmlzUmV2ZXJzZWQ7XHJcblxyXG4gICAgdmFyIGFscGhhID0gY2FtZXJhLmFscGhhICogc3JjLmFscGhhO1xyXG5cclxuICAgIGlmICghc3JjLmlzRmlsbGVkKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgdGludDtcclxuXHJcbiAgICB2YXIgeDA7XHJcbiAgICB2YXIgeTA7XHJcblxyXG4gICAgdmFyIHgxO1xyXG4gICAgdmFyIHkxO1xyXG5cclxuICAgIHZhciB4MjtcclxuICAgIHZhciB5MjtcclxuXHJcbiAgICAvLyAgVG9wIEZhY2VcclxuXHJcbiAgICBpZiAoc3JjLnNob3dUb3AgJiYgcmV2ZXJzZWQpXHJcbiAgICB7XHJcbiAgICAgICAgdGludCA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhQW5kU3dhcChzcmMuZmlsbFRvcCwgYWxwaGEpO1xyXG5cclxuICAgICAgICB4MCA9IGNhbGNNYXRyaXguZ2V0WCgtc2l6ZUEsIC1oZWlnaHQpO1xyXG4gICAgICAgIHkwID0gY2FsY01hdHJpeC5nZXRZKC1zaXplQSwgLWhlaWdodCk7XHJcbiAgICBcclxuICAgICAgICB4MSA9IGNhbGNNYXRyaXguZ2V0WCgwLCAtc2l6ZUIgLSBoZWlnaHQpO1xyXG4gICAgICAgIHkxID0gY2FsY01hdHJpeC5nZXRZKDAsIC1zaXplQiAtIGhlaWdodCk7XHJcbiAgICBcclxuICAgICAgICB4MiA9IGNhbGNNYXRyaXguZ2V0WChzaXplQSwgLWhlaWdodCk7XHJcbiAgICAgICAgeTIgPSBjYWxjTWF0cml4LmdldFkoc2l6ZUEsIC1oZWlnaHQpO1xyXG4gICAgXHJcbiAgICAgICAgdmFyIHgzID0gY2FsY01hdHJpeC5nZXRYKDAsIHNpemVCIC0gaGVpZ2h0KTtcclxuICAgICAgICB2YXIgeTMgPSBjYWxjTWF0cml4LmdldFkoMCwgc2l6ZUIgLSBoZWlnaHQpO1xyXG5cclxuICAgICAgICBwaXBlbGluZS5zZXRUZXh0dXJlMkQoKTtcclxuICAgIFxyXG4gICAgICAgIHBpcGVsaW5lLmJhdGNoUXVhZCh4MCwgeTAsIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIDAsIDAsIDEsIDEsIHRpbnQsIHRpbnQsIHRpbnQsIHRpbnQsIDIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBMZWZ0IEZhY2VcclxuXHJcbiAgICBpZiAoc3JjLnNob3dMZWZ0KVxyXG4gICAge1xyXG4gICAgICAgIHRpbnQgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYUFuZFN3YXAoc3JjLmZpbGxMZWZ0LCBhbHBoYSk7XHJcblxyXG4gICAgICAgIGlmIChyZXZlcnNlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHgwID0gY2FsY01hdHJpeC5nZXRYKC1zaXplQSwgLWhlaWdodCk7XHJcbiAgICAgICAgICAgIHkwID0gY2FsY01hdHJpeC5nZXRZKC1zaXplQSwgLWhlaWdodCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHgxID0gY2FsY01hdHJpeC5nZXRYKDAsIHNpemVCKTtcclxuICAgICAgICAgICAgeTEgPSBjYWxjTWF0cml4LmdldFkoMCwgc2l6ZUIpO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICB4MiA9IGNhbGNNYXRyaXguZ2V0WCgwLCBzaXplQiAtIGhlaWdodCk7XHJcbiAgICAgICAgICAgIHkyID0gY2FsY01hdHJpeC5nZXRZKDAsIHNpemVCIC0gaGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgeDAgPSBjYWxjTWF0cml4LmdldFgoLXNpemVBLCAwKTtcclxuICAgICAgICAgICAgeTAgPSBjYWxjTWF0cml4LmdldFkoLXNpemVBLCAwKTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgeDEgPSBjYWxjTWF0cml4LmdldFgoMCwgc2l6ZUIpO1xyXG4gICAgICAgICAgICB5MSA9IGNhbGNNYXRyaXguZ2V0WSgwLCBzaXplQik7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHgyID0gY2FsY01hdHJpeC5nZXRYKDAsIHNpemVCIC0gaGVpZ2h0KTtcclxuICAgICAgICAgICAgeTIgPSBjYWxjTWF0cml4LmdldFkoMCwgc2l6ZUIgLSBoZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIHBpcGVsaW5lLmJhdGNoVHJpKHgwLCB5MCwgeDEsIHkxLCB4MiwgeTIsIDAsIDAsIDEsIDEsIHRpbnQsIHRpbnQsIHRpbnQsIDIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBSaWdodCBGYWNlXHJcblxyXG4gICAgaWYgKHNyYy5zaG93UmlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgdGludCA9IFV0aWxzLmdldFRpbnRBcHBlbmRGbG9hdEFscGhhQW5kU3dhcChzcmMuZmlsbFJpZ2h0LCBhbHBoYSk7XHJcblxyXG4gICAgICAgIGlmIChyZXZlcnNlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHgwID0gY2FsY01hdHJpeC5nZXRYKHNpemVBLCAtaGVpZ2h0KTtcclxuICAgICAgICAgICAgeTAgPSBjYWxjTWF0cml4LmdldFkoc2l6ZUEsIC1oZWlnaHQpO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICB4MSA9IGNhbGNNYXRyaXguZ2V0WCgwLCBzaXplQik7XHJcbiAgICAgICAgICAgIHkxID0gY2FsY01hdHJpeC5nZXRZKDAsIHNpemVCKTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgeDIgPSBjYWxjTWF0cml4LmdldFgoMCwgc2l6ZUIgLSBoZWlnaHQpO1xyXG4gICAgICAgICAgICB5MiA9IGNhbGNNYXRyaXguZ2V0WSgwLCBzaXplQiAtIGhlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHgwID0gY2FsY01hdHJpeC5nZXRYKHNpemVBLCAwKTtcclxuICAgICAgICAgICAgeTAgPSBjYWxjTWF0cml4LmdldFkoc2l6ZUEsIDApO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICB4MSA9IGNhbGNNYXRyaXguZ2V0WCgwLCBzaXplQik7XHJcbiAgICAgICAgICAgIHkxID0gY2FsY01hdHJpeC5nZXRZKDAsIHNpemVCKTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgeDIgPSBjYWxjTWF0cml4LmdldFgoMCwgc2l6ZUIgLSBoZWlnaHQpO1xyXG4gICAgICAgICAgICB5MiA9IGNhbGNNYXRyaXguZ2V0WSgwLCBzaXplQiAtIGhlaWdodCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwaXBlbGluZS5zZXRUZXh0dXJlMkQoKTtcclxuICAgIFxyXG4gICAgICAgIHBpcGVsaW5lLmJhdGNoVHJpKHgwLCB5MCwgeDEsIHkxLCB4MiwgeTIsIDAsIDAsIDEsIDEsIHRpbnQsIHRpbnQsIHRpbnQsIDIpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJc29UcmlhbmdsZVdlYkdMUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/isotriangle/IsoTriangleWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/line/Line.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/line/Line.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Shape = __webpack_require__(/*! ../Shape */ \"./node_modules/phaser/src/gameobjects/shape/Shape.js\");\r\nvar GeomLine = __webpack_require__(/*! ../../../geom/line/Line */ \"./node_modules/phaser/src/geom/line/Line.js\");\r\nvar LineRender = __webpack_require__(/*! ./LineRender */ \"./node_modules/phaser/src/gameobjects/shape/line/LineRender.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Line Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports only stroke colors and cannot be filled.\r\n * \r\n * A Line Shape allows you to draw a line between two points in your game. You can control the\r\n * stroke color and thickness of the line. In WebGL only you can also specify a different\r\n * thickness for the start and end of the line, allowing you to render lines that taper-off.\r\n * \r\n * If you need to draw multiple lines in a sequence you may wish to use the Polygon Shape instead.\r\n *\r\n * Be aware that as with all Game Objects the default origin is 0.5. If you need to draw a Line\r\n * between two points and want the x1/y1 values to match the x/y values, then set the origin to 0.\r\n *\r\n * @class Line\r\n * @extends Phaser.GameObjects.Shape\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [x1=0] - The horizontal position of the start of the line.\r\n * @param {number} [y1=0] - The vertical position of the start of the line.\r\n * @param {number} [x2=128] - The horizontal position of the end of the line.\r\n * @param {number} [y2=0] - The vertical position of the end of the line.\r\n * @param {number} [strokeColor] - The color the line will be drawn in, i.e. 0xff0000 for red.\r\n * @param {number} [strokeAlpha] - The alpha the line will be drawn in. You can also set the alpha of the overall Shape using its `alpha` property.\r\n */\r\nvar Line = new Class({\r\n\r\n Extends: Shape,\r\n\r\n Mixins: [\r\n LineRender\r\n ],\r\n\r\n initialize:\r\n\r\n function Line (scene, x, y, x1, y1, x2, y2, strokeColor, strokeAlpha)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n if (x1 === undefined) { x1 = 0; }\r\n if (y1 === undefined) { y1 = 0; }\r\n if (x2 === undefined) { x2 = 128; }\r\n if (y2 === undefined) { y2 = 0; }\r\n\r\n Shape.call(this, scene, 'Line', new GeomLine(x1, y1, x2, y2));\r\n\r\n var width = this.geom.right - this.geom.left;\r\n var height = this.geom.bottom - this.geom.top;\r\n\r\n /**\r\n * The width (or thickness) of the line.\r\n * See the setLineWidth method for extra details on changing this on WebGL.\r\n *\r\n * @name Phaser.GameObjects.Line#lineWidth\r\n * @type {number}\r\n * @since 3.13.0\r\n */\r\n this.lineWidth = 1;\r\n\r\n /**\r\n * Private internal value. Holds the start width of the line.\r\n *\r\n * @name Phaser.GameObjects.Line#_startWidth\r\n * @type {number}\r\n * @private\r\n * @since 3.13.0\r\n */\r\n this._startWidth = 1;\r\n\r\n /**\r\n * Private internal value. Holds the end width of the line.\r\n *\r\n * @name Phaser.GameObjects.Line#_endWidth\r\n * @type {number}\r\n * @private\r\n * @since 3.13.0\r\n */\r\n this._endWidth = 1;\r\n\r\n this.setPosition(x, y);\r\n this.setSize(width, height);\r\n\r\n if (strokeColor !== undefined)\r\n {\r\n this.setStrokeStyle(1, strokeColor, strokeAlpha);\r\n }\r\n\r\n this.updateDisplayOrigin();\r\n },\r\n\r\n /**\r\n * Sets the width of the line.\r\n * \r\n * When using the WebGL renderer you can have different start and end widths.\r\n * When using the Canvas renderer only the `startWidth` value is used. The `endWidth` is ignored.\r\n * \r\n * This call can be chained.\r\n *\r\n * @method Phaser.GameObjects.Line#setLineWidth\r\n * @since 3.13.0\r\n * \r\n * @param {number} startWidth - The start width of the line.\r\n * @param {number} [endWidth] - The end width of the line. Only used in WebGL.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setLineWidth: function (startWidth, endWidth)\r\n {\r\n if (endWidth === undefined) { endWidth = startWidth; }\r\n\r\n this._startWidth = startWidth;\r\n this._endWidth = endWidth;\r\n\r\n this.lineWidth = startWidth;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the start and end coordinates of this Line.\r\n *\r\n * @method Phaser.GameObjects.Line#setTo\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x1=0] - The horizontal position of the start of the line.\r\n * @param {number} [y1=0] - The vertical position of the start of the line.\r\n * @param {number} [x2=0] - The horizontal position of the end of the line.\r\n * @param {number} [y2=0] - The vertical position of the end of the line.\r\n *\r\n * @return {this} This Line object.\r\n */\r\n setTo: function (x1, y1, x2, y2)\r\n {\r\n this.geom.setTo(x1, y1, x2, y2);\r\n\r\n return this;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Line;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9saW5lL0xpbmUuanM/OTQ4YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHNFQUFzQjtBQUMxQyxZQUFZLG1CQUFPLENBQUMsc0VBQVU7QUFDOUIsZUFBZSxtQkFBTyxDQUFDLDRFQUF5QjtBQUNoRCxpQkFBaUIsbUJBQU8sQ0FBQyxvRkFBYzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPO0FBQ3JDLCtCQUErQixRQUFRO0FBQ3ZDLCtCQUErQixRQUFRO0FBQ3ZDLCtCQUErQixVQUFVO0FBQ3pDLCtCQUErQixRQUFROztBQUV2Qzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLHVCQUF1Qjs7QUFFNUQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvbGluZS9MaW5lLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgU2hhcGUgPSByZXF1aXJlKCcuLi9TaGFwZScpO1xyXG52YXIgR2VvbUxpbmUgPSByZXF1aXJlKCcuLi8uLi8uLi9nZW9tL2xpbmUvTGluZScpO1xyXG52YXIgTGluZVJlbmRlciA9IHJlcXVpcmUoJy4vTGluZVJlbmRlcicpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIExpbmUgU2hhcGUgaXMgYSBHYW1lIE9iamVjdCB0aGF0IGNhbiBiZSBhZGRlZCB0byBhIFNjZW5lLCBHcm91cCBvciBDb250YWluZXIuIFlvdSBjYW5cclxuICogdHJlYXQgaXQgbGlrZSBhbnkgb3RoZXIgR2FtZSBPYmplY3QgaW4geW91ciBnYW1lLCBzdWNoIGFzIHR3ZWVuaW5nIGl0LCBzY2FsaW5nIGl0LCBvciBlbmFibGluZ1xyXG4gKiBpdCBmb3IgaW5wdXQgb3IgcGh5c2ljcy4gSXQgcHJvdmlkZXMgYSBxdWljayBhbmQgZWFzeSB3YXkgZm9yIHlvdSB0byByZW5kZXIgdGhpcyBzaGFwZSBpbiB5b3VyXHJcbiAqIGdhbWUgd2l0aG91dCB1c2luZyBhIHRleHR1cmUsIHdoaWxlIHN0aWxsIHRha2luZyBhZHZhbnRhZ2Ugb2YgYmVpbmcgZnVsbHkgYmF0Y2hlZCBpbiBXZWJHTC5cclxuICogXHJcbiAqIFRoaXMgc2hhcGUgc3VwcG9ydHMgb25seSBzdHJva2UgY29sb3JzIGFuZCBjYW5ub3QgYmUgZmlsbGVkLlxyXG4gKiBcclxuICogQSBMaW5lIFNoYXBlIGFsbG93cyB5b3UgdG8gZHJhdyBhIGxpbmUgYmV0d2VlbiB0d28gcG9pbnRzIGluIHlvdXIgZ2FtZS4gWW91IGNhbiBjb250cm9sIHRoZVxyXG4gKiBzdHJva2UgY29sb3IgYW5kIHRoaWNrbmVzcyBvZiB0aGUgbGluZS4gSW4gV2ViR0wgb25seSB5b3UgY2FuIGFsc28gc3BlY2lmeSBhIGRpZmZlcmVudFxyXG4gKiB0aGlja25lc3MgZm9yIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBsaW5lLCBhbGxvd2luZyB5b3UgdG8gcmVuZGVyIGxpbmVzIHRoYXQgdGFwZXItb2ZmLlxyXG4gKiBcclxuICogSWYgeW91IG5lZWQgdG8gZHJhdyBtdWx0aXBsZSBsaW5lcyBpbiBhIHNlcXVlbmNlIHlvdSBtYXkgd2lzaCB0byB1c2UgdGhlIFBvbHlnb24gU2hhcGUgaW5zdGVhZC5cclxuICpcclxuICogQmUgYXdhcmUgdGhhdCBhcyB3aXRoIGFsbCBHYW1lIE9iamVjdHMgdGhlIGRlZmF1bHQgb3JpZ2luIGlzIDAuNS4gSWYgeW91IG5lZWQgdG8gZHJhdyBhIExpbmVcclxuICogYmV0d2VlbiB0d28gcG9pbnRzIGFuZCB3YW50IHRoZSB4MS95MSB2YWx1ZXMgdG8gbWF0Y2ggdGhlIHgveSB2YWx1ZXMsIHRoZW4gc2V0IHRoZSBvcmlnaW4gdG8gMC5cclxuICpcclxuICogQGNsYXNzIExpbmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLlNoYXBlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgYmVsb25ncy4gQSBHYW1lIE9iamVjdCBjYW4gb25seSBiZWxvbmcgdG8gb25lIFNjZW5lIGF0IGEgdGltZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt4MT0wXSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBzdGFydCBvZiB0aGUgbGluZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5MT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgc3RhcnQgb2YgdGhlIGxpbmUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeDI9MTI4XSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBlbmQgb2YgdGhlIGxpbmUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeTI9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIGVuZCBvZiB0aGUgbGluZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdHJva2VDb2xvcl0gLSBUaGUgY29sb3IgdGhlIGxpbmUgd2lsbCBiZSBkcmF3biBpbiwgaS5lLiAweGZmMDAwMCBmb3IgcmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0cm9rZUFscGhhXSAtIFRoZSBhbHBoYSB0aGUgbGluZSB3aWxsIGJlIGRyYXduIGluLiBZb3UgY2FuIGFsc28gc2V0IHRoZSBhbHBoYSBvZiB0aGUgb3ZlcmFsbCBTaGFwZSB1c2luZyBpdHMgYGFscGhhYCBwcm9wZXJ0eS5cclxuICovXHJcbnZhciBMaW5lID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBTaGFwZSxcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBMaW5lUmVuZGVyXHJcbiAgICBdLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gTGluZSAoc2NlbmUsIHgsIHksIHgxLCB5MSwgeDIsIHkyLCBzdHJva2VDb2xvciwgc3Ryb2tlQWxwaGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IDA7IH1cclxuICAgICAgICBpZiAoeDEgPT09IHVuZGVmaW5lZCkgeyB4MSA9IDA7IH1cclxuICAgICAgICBpZiAoeTEgPT09IHVuZGVmaW5lZCkgeyB5MSA9IDA7IH1cclxuICAgICAgICBpZiAoeDIgPT09IHVuZGVmaW5lZCkgeyB4MiA9IDEyODsgfVxyXG4gICAgICAgIGlmICh5MiA9PT0gdW5kZWZpbmVkKSB7IHkyID0gMDsgfVxyXG5cclxuICAgICAgICBTaGFwZS5jYWxsKHRoaXMsIHNjZW5lLCAnTGluZScsIG5ldyBHZW9tTGluZSh4MSwgeTEsIHgyLCB5MikpO1xyXG5cclxuICAgICAgICB2YXIgd2lkdGggPSB0aGlzLmdlb20ucmlnaHQgLSB0aGlzLmdlb20ubGVmdDtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZW9tLmJvdHRvbSAtIHRoaXMuZ2VvbS50b3A7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB3aWR0aCAob3IgdGhpY2tuZXNzKSBvZiB0aGUgbGluZS5cclxuICAgICAgICAgKiBTZWUgdGhlIHNldExpbmVXaWR0aCBtZXRob2QgZm9yIGV4dHJhIGRldGFpbHMgb24gY2hhbmdpbmcgdGhpcyBvbiBXZWJHTC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5MaW5lI2xpbmVXaWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubGluZVdpZHRoID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS4gSG9sZHMgdGhlIHN0YXJ0IHdpZHRoIG9mIHRoZSBsaW5lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkxpbmUjX3N0YXJ0V2lkdGhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3N0YXJ0V2lkdGggPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQcml2YXRlIGludGVybmFsIHZhbHVlLiBIb2xkcyB0aGUgZW5kIHdpZHRoIG9mIHRoZSBsaW5lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLkxpbmUjX2VuZFdpZHRoXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9lbmRXaWR0aCA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24oeCwgeSk7XHJcbiAgICAgICAgdGhpcy5zZXRTaXplKHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICBpZiAoc3Ryb2tlQ29sb3IgIT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3Ryb2tlU3R5bGUoMSwgc3Ryb2tlQ29sb3IsIHN0cm9rZUFscGhhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlRGlzcGxheU9yaWdpbigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHdpZHRoIG9mIHRoZSBsaW5lLlxyXG4gICAgICogXHJcbiAgICAgKiBXaGVuIHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlciB5b3UgY2FuIGhhdmUgZGlmZmVyZW50IHN0YXJ0IGFuZCBlbmQgd2lkdGhzLlxyXG4gICAgICogV2hlbiB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyIG9ubHkgdGhlIGBzdGFydFdpZHRoYCB2YWx1ZSBpcyB1c2VkLiBUaGUgYGVuZFdpZHRoYCBpcyBpZ25vcmVkLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIGNhbGwgY2FuIGJlIGNoYWluZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuTGluZSNzZXRMaW5lV2lkdGhcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0V2lkdGggLSBUaGUgc3RhcnQgd2lkdGggb2YgdGhlIGxpbmUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuZFdpZHRoXSAtIFRoZSBlbmQgd2lkdGggb2YgdGhlIGxpbmUuIE9ubHkgdXNlZCBpbiBXZWJHTC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRMaW5lV2lkdGg6IGZ1bmN0aW9uIChzdGFydFdpZHRoLCBlbmRXaWR0aClcclxuICAgIHtcclxuICAgICAgICBpZiAoZW5kV2lkdGggPT09IHVuZGVmaW5lZCkgeyBlbmRXaWR0aCA9IHN0YXJ0V2lkdGg7IH1cclxuXHJcbiAgICAgICAgdGhpcy5fc3RhcnRXaWR0aCA9IHN0YXJ0V2lkdGg7XHJcbiAgICAgICAgdGhpcy5fZW5kV2lkdGggPSBlbmRXaWR0aDtcclxuXHJcbiAgICAgICAgdGhpcy5saW5lV2lkdGggPSBzdGFydFdpZHRoO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBzdGFydCBhbmQgZW5kIGNvb3JkaW5hdGVzIG9mIHRoaXMgTGluZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5MaW5lI3NldFRvXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4MT0wXSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBzdGFydCBvZiB0aGUgbGluZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeTE9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4Mj0wXSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBlbmQgb2YgdGhlIGxpbmUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3kyPTBdIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBlbmQgb2YgdGhlIGxpbmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBMaW5lIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0VG86IGZ1bmN0aW9uICh4MSwgeTEsIHgyLCB5MilcclxuICAgIHtcclxuICAgICAgICB0aGlzLmdlb20uc2V0VG8oeDEsIHkxLCB4MiwgeTIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBMaW5lO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/line/Line.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/line/LineCanvasRenderer.js":
/*!******************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/line/LineCanvasRenderer.js ***!
\******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar LineStyleCanvas = __webpack_require__(/*! ../LineStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/LineStyleCanvas.js\");\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Line#renderCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Line} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar LineCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var ctx = renderer.currentContext;\r\n\r\n if (SetTransform(renderer, ctx, src, camera, parentMatrix))\r\n {\r\n var dx = src._displayOriginX;\r\n var dy = src._displayOriginY;\r\n\r\n if (src.isStroked)\r\n {\r\n LineStyleCanvas(ctx, src);\r\n\r\n ctx.beginPath();\r\n\r\n ctx.moveTo(src.geom.x1 - dx, src.geom.y1 - dy);\r\n ctx.lineTo(src.geom.x2 - dx, src.geom.y2 - dy);\r\n \r\n ctx.stroke();\r\n }\r\n\r\n // Restore the context saved in SetTransform\r\n ctx.restore();\r\n }\r\n};\r\n\r\nmodule.exports = LineCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9saW5lL0xpbmVDYW52YXNSZW5kZXJlci5qcz9mZTE0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQywwRkFBb0I7QUFDbEQsbUJBQW1CLG1CQUFPLENBQUMsb0hBQTZDOztBQUV4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNDQUFzQztBQUNqRCxXQUFXLHdCQUF3QjtBQUNuQyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL2xpbmUvTGluZUNhbnZhc1JlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTGluZVN0eWxlQ2FudmFzID0gcmVxdWlyZSgnLi4vTGluZVN0eWxlQ2FudmFzJyk7XHJcbnZhciBTZXRUcmFuc2Zvcm0gPSByZXF1aXJlKCcuLi8uLi8uLi9yZW5kZXJlci9jYW52YXMvdXRpbHMvU2V0VHJhbnNmb3JtJyk7XHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIENhbnZhcyBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkxpbmUjcmVuZGVyQ2FudmFzXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBDYW52YXMgcmVuZGVyZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkxpbmV9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBMaW5lQ2FudmFzUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgY3R4ID0gcmVuZGVyZXIuY3VycmVudENvbnRleHQ7XHJcblxyXG4gICAgaWYgKFNldFRyYW5zZm9ybShyZW5kZXJlciwgY3R4LCBzcmMsIGNhbWVyYSwgcGFyZW50TWF0cml4KSlcclxuICAgIHtcclxuICAgICAgICB2YXIgZHggPSBzcmMuX2Rpc3BsYXlPcmlnaW5YO1xyXG4gICAgICAgIHZhciBkeSA9IHNyYy5fZGlzcGxheU9yaWdpblk7XHJcblxyXG4gICAgICAgIGlmIChzcmMuaXNTdHJva2VkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgTGluZVN0eWxlQ2FudmFzKGN0eCwgc3JjKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5tb3ZlVG8oc3JjLmdlb20ueDEgLSBkeCwgc3JjLmdlb20ueTEgLSBkeSk7XHJcbiAgICAgICAgICAgIGN0eC5saW5lVG8oc3JjLmdlb20ueDIgLSBkeCwgc3JjLmdlb20ueTIgLSBkeSk7XHJcbiAgICBcclxuICAgICAgICAgICAgY3R4LnN0cm9rZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFJlc3RvcmUgdGhlIGNvbnRleHQgc2F2ZWQgaW4gU2V0VHJhbnNmb3JtXHJcbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTGluZUNhbnZhc1JlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/line/LineCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/line/LineFactory.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/line/LineFactory.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar Line = __webpack_require__(/*! ./Line */ \"./node_modules/phaser/src/gameobjects/shape/line/Line.js\");\r\n\r\n/**\r\n * Creates a new Line Shape Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Line Game Object has been built into Phaser.\r\n * \r\n * The Line Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports only stroke colors and cannot be filled.\r\n * \r\n * A Line Shape allows you to draw a line between two points in your game. You can control the\r\n * stroke color and thickness of the line. In WebGL only you can also specify a different\r\n * thickness for the start and end of the line, allowing you to render lines that taper-off.\r\n * \r\n * If you need to draw multiple lines in a sequence you may wish to use the Polygon Shape instead.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#line\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [x1=0] - The horizontal position of the start of the line.\r\n * @param {number} [y1=0] - The vertical position of the start of the line.\r\n * @param {number} [x2=128] - The horizontal position of the end of the line.\r\n * @param {number} [y2=0] - The vertical position of the end of the line.\r\n * @param {number} [strokeColor] - The color the line will be drawn in, i.e. 0xff0000 for red.\r\n * @param {number} [strokeAlpha] - The alpha the line will be drawn in. You can also set the alpha of the overall Shape using its `alpha` property.\r\n *\r\n * @return {Phaser.GameObjects.Line} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('line', function (x, y, x1, y1, x2, y2, strokeColor, strokeAlpha)\r\n{\r\n return this.displayList.add(new Line(this.scene, x, y, x1, y1, x2, y2, strokeColor, strokeAlpha));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9saW5lL0xpbmVGYWN0b3J5LmpzPzU2MjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHdCQUF3QixtQkFBTyxDQUFDLDJGQUF5QjtBQUN6RCxXQUFXLG1CQUFPLENBQUMsd0VBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHdCQUF3QjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9saW5lL0xpbmVGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG52YXIgTGluZSA9IHJlcXVpcmUoJy4vTGluZScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgTGluZSBTaGFwZSBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIExpbmUgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIFxyXG4gKiBUaGUgTGluZSBTaGFwZSBpcyBhIEdhbWUgT2JqZWN0IHRoYXQgY2FuIGJlIGFkZGVkIHRvIGEgU2NlbmUsIEdyb3VwIG9yIENvbnRhaW5lci4gWW91IGNhblxyXG4gKiB0cmVhdCBpdCBsaWtlIGFueSBvdGhlciBHYW1lIE9iamVjdCBpbiB5b3VyIGdhbWUsIHN1Y2ggYXMgdHdlZW5pbmcgaXQsIHNjYWxpbmcgaXQsIG9yIGVuYWJsaW5nXHJcbiAqIGl0IGZvciBpbnB1dCBvciBwaHlzaWNzLiBJdCBwcm92aWRlcyBhIHF1aWNrIGFuZCBlYXN5IHdheSBmb3IgeW91IHRvIHJlbmRlciB0aGlzIHNoYXBlIGluIHlvdXJcclxuICogZ2FtZSB3aXRob3V0IHVzaW5nIGEgdGV4dHVyZSwgd2hpbGUgc3RpbGwgdGFraW5nIGFkdmFudGFnZSBvZiBiZWluZyBmdWxseSBiYXRjaGVkIGluIFdlYkdMLlxyXG4gKiBcclxuICogVGhpcyBzaGFwZSBzdXBwb3J0cyBvbmx5IHN0cm9rZSBjb2xvcnMgYW5kIGNhbm5vdCBiZSBmaWxsZWQuXHJcbiAqIFxyXG4gKiBBIExpbmUgU2hhcGUgYWxsb3dzIHlvdSB0byBkcmF3IGEgbGluZSBiZXR3ZWVuIHR3byBwb2ludHMgaW4geW91ciBnYW1lLiBZb3UgY2FuIGNvbnRyb2wgdGhlXHJcbiAqIHN0cm9rZSBjb2xvciBhbmQgdGhpY2tuZXNzIG9mIHRoZSBsaW5lLiBJbiBXZWJHTCBvbmx5IHlvdSBjYW4gYWxzbyBzcGVjaWZ5IGEgZGlmZmVyZW50XHJcbiAqIHRoaWNrbmVzcyBmb3IgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIGxpbmUsIGFsbG93aW5nIHlvdSB0byByZW5kZXIgbGluZXMgdGhhdCB0YXBlci1vZmYuXHJcbiAqIFxyXG4gKiBJZiB5b3UgbmVlZCB0byBkcmF3IG11bHRpcGxlIGxpbmVzIGluIGEgc2VxdWVuY2UgeW91IG1heSB3aXNoIHRvIHVzZSB0aGUgUG9seWdvbiBTaGFwZSBpbnN0ZWFkLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0RmFjdG9yeSNsaW5lXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt4MT0wXSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBzdGFydCBvZiB0aGUgbGluZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5MT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgc3RhcnQgb2YgdGhlIGxpbmUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeDI9MTI4XSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBlbmQgb2YgdGhlIGxpbmUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeTI9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIGVuZCBvZiB0aGUgbGluZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdHJva2VDb2xvcl0gLSBUaGUgY29sb3IgdGhlIGxpbmUgd2lsbCBiZSBkcmF3biBpbiwgaS5lLiAweGZmMDAwMCBmb3IgcmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0cm9rZUFscGhhXSAtIFRoZSBhbHBoYSB0aGUgbGluZSB3aWxsIGJlIGRyYXduIGluLiBZb3UgY2FuIGFsc28gc2V0IHRoZSBhbHBoYSBvZiB0aGUgb3ZlcmFsbCBTaGFwZSB1c2luZyBpdHMgYGFscGhhYCBwcm9wZXJ0eS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLkxpbmV9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdEZhY3RvcnkucmVnaXN0ZXIoJ2xpbmUnLCBmdW5jdGlvbiAoeCwgeSwgeDEsIHkxLCB4MiwgeTIsIHN0cm9rZUNvbG9yLCBzdHJva2VBbHBoYSlcclxue1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheUxpc3QuYWRkKG5ldyBMaW5lKHRoaXMuc2NlbmUsIHgsIHksIHgxLCB5MSwgeDIsIHkyLCBzdHJva2VDb2xvciwgc3Ryb2tlQWxwaGEpKTtcclxufSk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/line/LineFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/line/LineRender.js":
/*!**********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/line/LineRender.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./LineWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/shape/line/LineWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./LineCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/shape/line/LineCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9saW5lL0xpbmVSZW5kZXIuanM/MGIwZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsb0VBQXFCO0FBQy9DLG1CQUFtQixtQkFBTyxDQUFDLG9FQUFxQjs7QUFFaEQsSUFBSSxJQUFxQjtBQUN6QjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLGtHQUFxQjtBQUMvQzs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsb0dBQXNCO0FBQ2pEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9saW5lL0xpbmVSZW5kZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL05PT1AnKTtcclxudmFyIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL05PT1AnKTtcclxuXHJcbmlmICh0eXBlb2YgV0VCR0xfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi9MaW5lV2ViR0xSZW5kZXJlcicpO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIENBTlZBU19SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi9MaW5lQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/line/LineRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/line/LineWebGLRenderer.js":
/*!*****************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/line/LineWebGLRenderer.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Line#renderWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Line} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar LineWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var pipeline = this.pipeline;\r\n\r\n var camMatrix = pipeline._tempMatrix1;\r\n var shapeMatrix = pipeline._tempMatrix2;\r\n\r\n renderer.setPipeline(pipeline);\r\n\r\n shapeMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n camMatrix.copyFrom(camera.matrix);\r\n\r\n if (parentMatrix)\r\n {\r\n // Multiply the camera by the parent matrix\r\n camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n // Undo the camera scroll\r\n shapeMatrix.e = src.x;\r\n shapeMatrix.f = src.y;\r\n }\r\n else\r\n {\r\n shapeMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n shapeMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n }\r\n\r\n var dx = src._displayOriginX;\r\n var dy = src._displayOriginY;\r\n var alpha = camera.alpha * src.alpha;\r\n\r\n if (src.isStroked)\r\n {\r\n var strokeTint = pipeline.strokeTint;\r\n var color = Utils.getTintAppendFloatAlphaAndSwap(src.strokeColor, src.strokeAlpha * alpha);\r\n\r\n strokeTint.TL = color;\r\n strokeTint.TR = color;\r\n strokeTint.BL = color;\r\n strokeTint.BR = color;\r\n\r\n var startWidth = src._startWidth;\r\n var endWidth = src._endWidth;\r\n\r\n pipeline.setTexture2D();\r\n\r\n pipeline.batchLine(\r\n src.geom.x1 - dx,\r\n src.geom.y1 - dy,\r\n src.geom.x2 - dx,\r\n src.geom.y2 - dy,\r\n startWidth,\r\n endWidth,\r\n 1,\r\n 0,\r\n false,\r\n shapeMatrix,\r\n camMatrix\r\n );\r\n }\r\n};\r\n\r\nmodule.exports = LineWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9saW5lL0xpbmVXZWJHTFJlbmRlcmVyLmpzPzkxNzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyx3RkFBK0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsd0JBQXdCO0FBQ25DLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9saW5lL0xpbmVXZWJHTFJlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgVXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi9yZW5kZXJlci93ZWJnbC9VdGlscycpO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBXZWJHTCBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkxpbmUjcmVuZGVyV2ViR0xcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBXZWJHTCByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuTGluZX0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIExpbmVXZWJHTFJlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgdmFyIHBpcGVsaW5lID0gdGhpcy5waXBlbGluZTtcclxuXHJcbiAgICB2YXIgY2FtTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgxO1xyXG4gICAgdmFyIHNoYXBlTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgyO1xyXG5cclxuICAgIHJlbmRlcmVyLnNldFBpcGVsaW5lKHBpcGVsaW5lKTtcclxuXHJcbiAgICBzaGFwZU1hdHJpeC5hcHBseUlUUlMoc3JjLngsIHNyYy55LCBzcmMucm90YXRpb24sIHNyYy5zY2FsZVgsIHNyYy5zY2FsZVkpO1xyXG5cclxuICAgIGNhbU1hdHJpeC5jb3B5RnJvbShjYW1lcmEubWF0cml4KTtcclxuXHJcbiAgICBpZiAocGFyZW50TWF0cml4KVxyXG4gICAge1xyXG4gICAgICAgIC8vICBNdWx0aXBseSB0aGUgY2FtZXJhIGJ5IHRoZSBwYXJlbnQgbWF0cml4XHJcbiAgICAgICAgY2FtTWF0cml4Lm11bHRpcGx5V2l0aE9mZnNldChwYXJlbnRNYXRyaXgsIC1jYW1lcmEuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYLCAtY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWSk7XHJcblxyXG4gICAgICAgIC8vICBVbmRvIHRoZSBjYW1lcmEgc2Nyb2xsXHJcbiAgICAgICAgc2hhcGVNYXRyaXguZSA9IHNyYy54O1xyXG4gICAgICAgIHNoYXBlTWF0cml4LmYgPSBzcmMueTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBzaGFwZU1hdHJpeC5lIC09IGNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3Rvclg7XHJcbiAgICAgICAgc2hhcGVNYXRyaXguZiAtPSBjYW1lcmEuc2Nyb2xsWSAqIHNyYy5zY3JvbGxGYWN0b3JZO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBkeCA9IHNyYy5fZGlzcGxheU9yaWdpblg7XHJcbiAgICB2YXIgZHkgPSBzcmMuX2Rpc3BsYXlPcmlnaW5ZO1xyXG4gICAgdmFyIGFscGhhID0gY2FtZXJhLmFscGhhICogc3JjLmFscGhhO1xyXG5cclxuICAgIGlmIChzcmMuaXNTdHJva2VkKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzdHJva2VUaW50ID0gcGlwZWxpbmUuc3Ryb2tlVGludDtcclxuICAgICAgICB2YXIgY29sb3IgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYUFuZFN3YXAoc3JjLnN0cm9rZUNvbG9yLCBzcmMuc3Ryb2tlQWxwaGEgKiBhbHBoYSk7XHJcblxyXG4gICAgICAgIHN0cm9rZVRpbnQuVEwgPSBjb2xvcjtcclxuICAgICAgICBzdHJva2VUaW50LlRSID0gY29sb3I7XHJcbiAgICAgICAgc3Ryb2tlVGludC5CTCA9IGNvbG9yO1xyXG4gICAgICAgIHN0cm9rZVRpbnQuQlIgPSBjb2xvcjtcclxuXHJcbiAgICAgICAgdmFyIHN0YXJ0V2lkdGggPSBzcmMuX3N0YXJ0V2lkdGg7XHJcbiAgICAgICAgdmFyIGVuZFdpZHRoID0gc3JjLl9lbmRXaWR0aDtcclxuXHJcbiAgICAgICAgcGlwZWxpbmUuc2V0VGV4dHVyZTJEKCk7XHJcblxyXG4gICAgICAgIHBpcGVsaW5lLmJhdGNoTGluZShcclxuICAgICAgICAgICAgc3JjLmdlb20ueDEgLSBkeCxcclxuICAgICAgICAgICAgc3JjLmdlb20ueTEgLSBkeSxcclxuICAgICAgICAgICAgc3JjLmdlb20ueDIgLSBkeCxcclxuICAgICAgICAgICAgc3JjLmdlb20ueTIgLSBkeSxcclxuICAgICAgICAgICAgc3RhcnRXaWR0aCxcclxuICAgICAgICAgICAgZW5kV2lkdGgsXHJcbiAgICAgICAgICAgIDEsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIGZhbHNlLFxyXG4gICAgICAgICAgICBzaGFwZU1hdHJpeCxcclxuICAgICAgICAgICAgY2FtTWF0cml4XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTGluZVdlYkdMUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/line/LineWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/polygon/Polygon.js":
/*!**********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/polygon/Polygon.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PolygonRender = __webpack_require__(/*! ./PolygonRender */ \"./node_modules/phaser/src/gameobjects/shape/polygon/PolygonRender.js\");\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Earcut = __webpack_require__(/*! ../../../geom/polygon/Earcut */ \"./node_modules/phaser/src/geom/polygon/Earcut.js\");\r\nvar GetAABB = __webpack_require__(/*! ../../../geom/polygon/GetAABB */ \"./node_modules/phaser/src/geom/polygon/GetAABB.js\");\r\nvar GeomPolygon = __webpack_require__(/*! ../../../geom/polygon/Polygon */ \"./node_modules/phaser/src/geom/polygon/Polygon.js\");\r\nvar Shape = __webpack_require__(/*! ../Shape */ \"./node_modules/phaser/src/gameobjects/shape/Shape.js\");\r\nvar Smooth = __webpack_require__(/*! ../../../geom/polygon/Smooth */ \"./node_modules/phaser/src/geom/polygon/Smooth.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Polygon Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * The Polygon Shape is created by providing a list of points, which are then used to create an\r\n * internal Polygon geometry object. The points can be set from a variety of formats:\r\n *\r\n * - A string containing paired values separated by a single space: `'40 0 40 20 100 20 100 80 40 80 40 100 0 50'`\r\n * - An array of Point or Vector2 objects: `[new Phaser.Math.Vec2(x1, y1), ...]`\r\n * - An array of objects with public x/y properties: `[obj1, obj2, ...]`\r\n * - An array of paired numbers that represent point coordinates: `[x1,y1, x2,y2, ...]`\r\n * - An array of arrays with two elements representing x/y coordinates: `[[x1, y1], [x2, y2], ...]`\r\n * \r\n * By default the `x` and `y` coordinates of this Shape refer to the center of it. However, depending\r\n * on the coordinates of the points provided, the final shape may be rendered offset from its origin.\r\n *\r\n * @class Polygon\r\n * @extends Phaser.GameObjects.Shape\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {any} [points] - The points that make up the polygon.\r\n * @param {number} [fillColor] - The color the polygon will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the polygon will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n */\r\nvar Polygon = new Class({\r\n\r\n Extends: Shape,\r\n\r\n Mixins: [\r\n PolygonRender\r\n ],\r\n\r\n initialize:\r\n\r\n function Polygon (scene, x, y, points, fillColor, fillAlpha)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n\r\n Shape.call(this, scene, 'Polygon', new GeomPolygon(points));\r\n\r\n var bounds = GetAABB(this.geom);\r\n\r\n this.setPosition(x, y);\r\n this.setSize(bounds.width, bounds.height);\r\n\r\n if (fillColor !== undefined)\r\n {\r\n this.setFillStyle(fillColor, fillAlpha);\r\n }\r\n\r\n this.updateDisplayOrigin();\r\n this.updateData();\r\n },\r\n\r\n /**\r\n * Smooths the polygon over the number of iterations specified.\r\n * The base polygon data will be updated and replaced with the smoothed values.\r\n * This call can be chained.\r\n *\r\n * @method Phaser.GameObjects.Polygon#smooth\r\n * @since 3.13.0\r\n * \r\n * @param {integer} [iterations=1] - The number of times to apply the polygon smoothing.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n smooth: function (iterations)\r\n {\r\n if (iterations === undefined) { iterations = 1; }\r\n\r\n for (var i = 0; i < iterations; i++)\r\n {\r\n Smooth(this.geom);\r\n }\r\n\r\n return this.updateData();\r\n },\r\n\r\n /**\r\n * Internal method that updates the data and path values.\r\n *\r\n * @method Phaser.GameObjects.Polygon#updateData\r\n * @private\r\n * @since 3.13.0\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n updateData: function ()\r\n {\r\n var path = [];\r\n var points = this.geom.points;\r\n\r\n for (var i = 0; i < points.length; i++)\r\n {\r\n path.push(points[i].x, points[i].y);\r\n }\r\n\r\n path.push(points[0].x, points[0].y);\r\n\r\n this.pathIndexes = Earcut(path);\r\n this.pathData = path;\r\n\r\n return this;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Polygon;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9wb2x5Z29uL1BvbHlnb24uanM/ODEyZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsb0JBQW9CLG1CQUFPLENBQUMsNkZBQWlCO0FBQzdDLFlBQVksbUJBQU8sQ0FBQyxzRUFBc0I7QUFDMUMsYUFBYSxtQkFBTyxDQUFDLHNGQUE4QjtBQUNuRCxjQUFjLG1CQUFPLENBQUMsd0ZBQStCO0FBQ3JELGtCQUFrQixtQkFBTyxDQUFDLHdGQUErQjtBQUN6RCxZQUFZLG1CQUFPLENBQUMsc0VBQVU7QUFDOUIsYUFBYSxtQkFBTyxDQUFDLHNGQUE4Qjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxJQUFJO0FBQ2YsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87O0FBRXJDOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxnQkFBZ0I7O0FBRXZELHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9wb2x5Z29uL1BvbHlnb24uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQb2x5Z29uUmVuZGVyID0gcmVxdWlyZSgnLi9Qb2x5Z29uUmVuZGVyJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBFYXJjdXQgPSByZXF1aXJlKCcuLi8uLi8uLi9nZW9tL3BvbHlnb24vRWFyY3V0Jyk7XHJcbnZhciBHZXRBQUJCID0gcmVxdWlyZSgnLi4vLi4vLi4vZ2VvbS9wb2x5Z29uL0dldEFBQkInKTtcclxudmFyIEdlb21Qb2x5Z29uID0gcmVxdWlyZSgnLi4vLi4vLi4vZ2VvbS9wb2x5Z29uL1BvbHlnb24nKTtcclxudmFyIFNoYXBlID0gcmVxdWlyZSgnLi4vU2hhcGUnKTtcclxudmFyIFNtb290aCA9IHJlcXVpcmUoJy4uLy4uLy4uL2dlb20vcG9seWdvbi9TbW9vdGgnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBQb2x5Z29uIFNoYXBlIGlzIGEgR2FtZSBPYmplY3QgdGhhdCBjYW4gYmUgYWRkZWQgdG8gYSBTY2VuZSwgR3JvdXAgb3IgQ29udGFpbmVyLiBZb3UgY2FuXHJcbiAqIHRyZWF0IGl0IGxpa2UgYW55IG90aGVyIEdhbWUgT2JqZWN0IGluIHlvdXIgZ2FtZSwgc3VjaCBhcyB0d2VlbmluZyBpdCwgc2NhbGluZyBpdCwgb3IgZW5hYmxpbmdcclxuICogaXQgZm9yIGlucHV0IG9yIHBoeXNpY3MuIEl0IHByb3ZpZGVzIGEgcXVpY2sgYW5kIGVhc3kgd2F5IGZvciB5b3UgdG8gcmVuZGVyIHRoaXMgc2hhcGUgaW4geW91clxyXG4gKiBnYW1lIHdpdGhvdXQgdXNpbmcgYSB0ZXh0dXJlLCB3aGlsZSBzdGlsbCB0YWtpbmcgYWR2YW50YWdlIG9mIGJlaW5nIGZ1bGx5IGJhdGNoZWQgaW4gV2ViR0wuXHJcbiAqIFxyXG4gKiBUaGlzIHNoYXBlIHN1cHBvcnRzIGJvdGggZmlsbCBhbmQgc3Ryb2tlIGNvbG9ycy5cclxuICogXHJcbiAqIFRoZSBQb2x5Z29uIFNoYXBlIGlzIGNyZWF0ZWQgYnkgcHJvdmlkaW5nIGEgbGlzdCBvZiBwb2ludHMsIHdoaWNoIGFyZSB0aGVuIHVzZWQgdG8gY3JlYXRlIGFuXHJcbiAqIGludGVybmFsIFBvbHlnb24gZ2VvbWV0cnkgb2JqZWN0LiBUaGUgcG9pbnRzIGNhbiBiZSBzZXQgZnJvbSBhIHZhcmlldHkgb2YgZm9ybWF0czpcclxuICpcclxuICogLSBBIHN0cmluZyBjb250YWluaW5nIHBhaXJlZCB2YWx1ZXMgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIHNwYWNlOiBgJzQwIDAgNDAgMjAgMTAwIDIwIDEwMCA4MCA0MCA4MCA0MCAxMDAgMCA1MCdgXHJcbiAqIC0gQW4gYXJyYXkgb2YgUG9pbnQgb3IgVmVjdG9yMiBvYmplY3RzOiBgW25ldyBQaGFzZXIuTWF0aC5WZWMyKHgxLCB5MSksIC4uLl1gXHJcbiAqIC0gQW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIHB1YmxpYyB4L3kgcHJvcGVydGllczogYFtvYmoxLCBvYmoyLCAuLi5dYFxyXG4gKiAtIEFuIGFycmF5IG9mIHBhaXJlZCBudW1iZXJzIHRoYXQgcmVwcmVzZW50IHBvaW50IGNvb3JkaW5hdGVzOiBgW3gxLHkxLCB4Mix5MiwgLi4uXWBcclxuICogLSBBbiBhcnJheSBvZiBhcnJheXMgd2l0aCB0d28gZWxlbWVudHMgcmVwcmVzZW50aW5nIHgveSBjb29yZGluYXRlczogYFtbeDEsIHkxXSwgW3gyLCB5Ml0sIC4uLl1gXHJcbiAqIFxyXG4gKiBCeSBkZWZhdWx0IHRoZSBgeGAgYW5kIGB5YCBjb29yZGluYXRlcyBvZiB0aGlzIFNoYXBlIHJlZmVyIHRvIHRoZSBjZW50ZXIgb2YgaXQuIEhvd2V2ZXIsIGRlcGVuZGluZ1xyXG4gKiBvbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50cyBwcm92aWRlZCwgdGhlIGZpbmFsIHNoYXBlIG1heSBiZSByZW5kZXJlZCBvZmZzZXQgZnJvbSBpdHMgb3JpZ2luLlxyXG4gKlxyXG4gKiBAY2xhc3MgUG9seWdvblxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuU2hhcGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5HYW1lT2JqZWN0c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBHYW1lIE9iamVjdCBiZWxvbmdzLiBBIEdhbWUgT2JqZWN0IGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgU2NlbmUgYXQgYSB0aW1lLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge2FueX0gW3BvaW50c10gLSBUaGUgcG9pbnRzIHRoYXQgbWFrZSB1cCB0aGUgcG9seWdvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsQ29sb3JdIC0gVGhlIGNvbG9yIHRoZSBwb2x5Z29uIHdpbGwgYmUgZmlsbGVkIHdpdGgsIGkuZS4gMHhmZjAwMDAgZm9yIHJlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsQWxwaGFdIC0gVGhlIGFscGhhIHRoZSBwb2x5Z29uIHdpbGwgYmUgZmlsbGVkIHdpdGguIFlvdSBjYW4gYWxzbyBzZXQgdGhlIGFscGhhIG9mIHRoZSBvdmVyYWxsIFNoYXBlIHVzaW5nIGl0cyBgYWxwaGFgIHByb3BlcnR5LlxyXG4gKi9cclxudmFyIFBvbHlnb24gPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IFNoYXBlLFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIFBvbHlnb25SZW5kZXJcclxuICAgIF0sXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBQb2x5Z29uIChzY2VuZSwgeCwgeSwgcG9pbnRzLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSlcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7IHggPSAwOyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0gMDsgfVxyXG5cclxuICAgICAgICBTaGFwZS5jYWxsKHRoaXMsIHNjZW5lLCAnUG9seWdvbicsIG5ldyBHZW9tUG9seWdvbihwb2ludHMpKTtcclxuXHJcbiAgICAgICAgdmFyIGJvdW5kcyA9IEdldEFBQkIodGhpcy5nZW9tKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcclxuICAgICAgICB0aGlzLnNldFNpemUoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgaWYgKGZpbGxDb2xvciAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRGaWxsU3R5bGUoZmlsbENvbG9yLCBmaWxsQWxwaGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5T3JpZ2luKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXRhKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU21vb3RocyB0aGUgcG9seWdvbiBvdmVyIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBzcGVjaWZpZWQuXHJcbiAgICAgKiBUaGUgYmFzZSBwb2x5Z29uIGRhdGEgd2lsbCBiZSB1cGRhdGVkIGFuZCByZXBsYWNlZCB3aXRoIHRoZSBzbW9vdGhlZCB2YWx1ZXMuXHJcbiAgICAgKiBUaGlzIGNhbGwgY2FuIGJlIGNoYWluZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUG9seWdvbiNzbW9vdGhcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbaXRlcmF0aW9ucz0xXSAtIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gYXBwbHkgdGhlIHBvbHlnb24gc21vb3RoaW5nLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgR2FtZSBPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNtb290aDogZnVuY3Rpb24gKGl0ZXJhdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGl0ZXJhdGlvbnMgPT09IHVuZGVmaW5lZCkgeyBpdGVyYXRpb25zID0gMTsgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIFNtb290aCh0aGlzLmdlb20pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlRGF0YSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIG1ldGhvZCB0aGF0IHVwZGF0ZXMgdGhlIGRhdGEgYW5kIHBhdGggdmFsdWVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlBvbHlnb24jdXBkYXRlRGF0YVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVEYXRhOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBwYXRoID0gW107XHJcbiAgICAgICAgdmFyIHBvaW50cyA9IHRoaXMuZ2VvbS5wb2ludHM7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcGF0aC5wdXNoKHBvaW50c1tpXS54LCBwb2ludHNbaV0ueSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwYXRoLnB1c2gocG9pbnRzWzBdLngsIHBvaW50c1swXS55KTtcclxuXHJcbiAgICAgICAgdGhpcy5wYXRoSW5kZXhlcyA9IEVhcmN1dChwYXRoKTtcclxuICAgICAgICB0aGlzLnBhdGhEYXRhID0gcGF0aDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUG9seWdvbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/polygon/Polygon.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/polygon/PolygonCanvasRenderer.js":
/*!************************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/polygon/PolygonCanvasRenderer.js ***!
\************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillStyleCanvas = __webpack_require__(/*! ../FillStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js\");\r\nvar LineStyleCanvas = __webpack_require__(/*! ../LineStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/LineStyleCanvas.js\");\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Polygon#renderCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Polygon} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar PolygonCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var ctx = renderer.currentContext;\r\n\r\n if (SetTransform(renderer, ctx, src, camera, parentMatrix))\r\n {\r\n var dx = src._displayOriginX;\r\n var dy = src._displayOriginY;\r\n\r\n var path = src.pathData;\r\n var pathLength = path.length - 1;\r\n \r\n var px1 = path[0] - dx;\r\n var py1 = path[1] - dy;\r\n\r\n ctx.beginPath();\r\n\r\n ctx.moveTo(px1, py1);\r\n \r\n if (!src.closePath)\r\n {\r\n pathLength -= 2;\r\n }\r\n \r\n for (var i = 2; i < pathLength; i += 2)\r\n {\r\n var px2 = path[i] - dx;\r\n var py2 = path[i + 1] - dy;\r\n \r\n ctx.lineTo(px2, py2);\r\n }\r\n\r\n ctx.closePath();\r\n\r\n if (src.isFilled)\r\n {\r\n FillStyleCanvas(ctx, src);\r\n\r\n ctx.fill();\r\n }\r\n\r\n if (src.isStroked)\r\n {\r\n LineStyleCanvas(ctx, src);\r\n\r\n ctx.stroke();\r\n }\r\n\r\n // Restore the context saved in SetTransform\r\n ctx.restore();\r\n }\r\n};\r\n\r\nmodule.exports = PolygonCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9wb2x5Z29uL1BvbHlnb25DYW52YXNSZW5kZXJlci5qcz9hOTU4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQywwRkFBb0I7QUFDbEQsc0JBQXNCLG1CQUFPLENBQUMsMEZBQW9CO0FBQ2xELG1CQUFtQixtQkFBTyxDQUFDLG9IQUE2Qzs7QUFFeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvcG9seWdvbi9Qb2x5Z29uQ2FudmFzUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBGaWxsU3R5bGVDYW52YXMgPSByZXF1aXJlKCcuLi9GaWxsU3R5bGVDYW52YXMnKTtcclxudmFyIExpbmVTdHlsZUNhbnZhcyA9IHJlcXVpcmUoJy4uL0xpbmVTdHlsZUNhbnZhcycpO1xyXG52YXIgU2V0VHJhbnNmb3JtID0gcmVxdWlyZSgnLi4vLi4vLi4vcmVuZGVyZXIvY2FudmFzL3V0aWxzL1NldFRyYW5zZm9ybScpO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBDYW52YXMgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5Qb2x5Z29uI3JlbmRlckNhbnZhc1xyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgQ2FudmFzIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Qb2x5Z29ufSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgUG9seWdvbkNhbnZhc1JlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgdmFyIGN0eCA9IHJlbmRlcmVyLmN1cnJlbnRDb250ZXh0O1xyXG5cclxuICAgIGlmIChTZXRUcmFuc2Zvcm0ocmVuZGVyZXIsIGN0eCwgc3JjLCBjYW1lcmEsIHBhcmVudE1hdHJpeCkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGR4ID0gc3JjLl9kaXNwbGF5T3JpZ2luWDtcclxuICAgICAgICB2YXIgZHkgPSBzcmMuX2Rpc3BsYXlPcmlnaW5ZO1xyXG5cclxuICAgICAgICB2YXIgcGF0aCA9IHNyYy5wYXRoRGF0YTtcclxuICAgICAgICB2YXIgcGF0aExlbmd0aCA9IHBhdGgubGVuZ3RoIC0gMTtcclxuICAgIFxyXG4gICAgICAgIHZhciBweDEgPSBwYXRoWzBdIC0gZHg7XHJcbiAgICAgICAgdmFyIHB5MSA9IHBhdGhbMV0gLSBkeTtcclxuXHJcbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG5cclxuICAgICAgICBjdHgubW92ZVRvKHB4MSwgcHkxKTtcclxuICAgIFxyXG4gICAgICAgIGlmICghc3JjLmNsb3NlUGF0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBhdGhMZW5ndGggLT0gMjtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICBmb3IgKHZhciBpID0gMjsgaSA8IHBhdGhMZW5ndGg7IGkgKz0gMilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBweDIgPSBwYXRoW2ldIC0gZHg7XHJcbiAgICAgICAgICAgIHZhciBweTIgPSBwYXRoW2kgKyAxXSAtIGR5O1xyXG4gICAgXHJcbiAgICAgICAgICAgIGN0eC5saW5lVG8ocHgyLCBweTIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xyXG5cclxuICAgICAgICBpZiAoc3JjLmlzRmlsbGVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgRmlsbFN0eWxlQ2FudmFzKGN0eCwgc3JjKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5maWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3JjLmlzU3Ryb2tlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIExpbmVTdHlsZUNhbnZhcyhjdHgsIHNyYyk7XHJcblxyXG4gICAgICAgICAgICBjdHguc3Ryb2tlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgUmVzdG9yZSB0aGUgY29udGV4dCBzYXZlZCBpbiBTZXRUcmFuc2Zvcm1cclxuICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQb2x5Z29uQ2FudmFzUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/polygon/PolygonCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/polygon/PolygonFactory.js":
/*!*****************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/polygon/PolygonFactory.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar Polygon = __webpack_require__(/*! ./Polygon */ \"./node_modules/phaser/src/gameobjects/shape/polygon/Polygon.js\");\r\n\r\n/**\r\n * Creates a new Polygon Shape Game Object and adds it to the Scene.\r\n * \r\n * Note: This method will only be available if the Polygon Game Object has been built into Phaser.\r\n * \r\n * The Polygon Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * The Polygon Shape is created by providing a list of points, which are then used to create an\r\n * internal Polygon geometry object. The points can be set from a variety of formats:\r\n *\r\n * - An array of Point or Vector2 objects: `[new Phaser.Math.Vec2(x1, y1), ...]`\r\n * - An array of objects with public x/y properties: `[obj1, obj2, ...]`\r\n * - An array of paired numbers that represent point coordinates: `[x1,y1, x2,y2, ...]`\r\n * - An array of arrays with two elements representing x/y coordinates: `[[x1, y1], [x2, y2], ...]`\r\n * \r\n * By default the `x` and `y` coordinates of this Shape refer to the center of it. However, depending\r\n * on the coordinates of the points provided, the final shape may be rendered offset from its origin.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#polygon\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {any} [points] - The points that make up the polygon.\r\n * @param {number} [fillColor] - The color the polygon will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the polygon will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n *\r\n * @return {Phaser.GameObjects.Polygon} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('polygon', function (x, y, points, fillColor, fillAlpha)\r\n{\r\n return this.displayList.add(new Polygon(this.scene, x, y, points, fillColor, fillAlpha));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9wb2x5Z29uL1BvbHlnb25GYWN0b3J5LmpzPzllODEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHdCQUF3QixtQkFBTyxDQUFDLDJGQUF5QjtBQUN6RCxjQUFjLG1CQUFPLENBQUMsaUZBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsSUFBSTtBQUNmLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9wb2x5Z29uL1BvbHlnb25GYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG52YXIgUG9seWdvbiA9IHJlcXVpcmUoJy4vUG9seWdvbicpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgUG9seWdvbiBTaGFwZSBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqIFxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBQb2x5Z29uIEdhbWUgT2JqZWN0IGhhcyBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLlxyXG4gKiBcclxuICogVGhlIFBvbHlnb24gU2hhcGUgaXMgYSBHYW1lIE9iamVjdCB0aGF0IGNhbiBiZSBhZGRlZCB0byBhIFNjZW5lLCBHcm91cCBvciBDb250YWluZXIuIFlvdSBjYW5cclxuICogdHJlYXQgaXQgbGlrZSBhbnkgb3RoZXIgR2FtZSBPYmplY3QgaW4geW91ciBnYW1lLCBzdWNoIGFzIHR3ZWVuaW5nIGl0LCBzY2FsaW5nIGl0LCBvciBlbmFibGluZ1xyXG4gKiBpdCBmb3IgaW5wdXQgb3IgcGh5c2ljcy4gSXQgcHJvdmlkZXMgYSBxdWljayBhbmQgZWFzeSB3YXkgZm9yIHlvdSB0byByZW5kZXIgdGhpcyBzaGFwZSBpbiB5b3VyXHJcbiAqIGdhbWUgd2l0aG91dCB1c2luZyBhIHRleHR1cmUsIHdoaWxlIHN0aWxsIHRha2luZyBhZHZhbnRhZ2Ugb2YgYmVpbmcgZnVsbHkgYmF0Y2hlZCBpbiBXZWJHTC5cclxuICogXHJcbiAqIFRoaXMgc2hhcGUgc3VwcG9ydHMgYm90aCBmaWxsIGFuZCBzdHJva2UgY29sb3JzLlxyXG4gKiBcclxuICogVGhlIFBvbHlnb24gU2hhcGUgaXMgY3JlYXRlZCBieSBwcm92aWRpbmcgYSBsaXN0IG9mIHBvaW50cywgd2hpY2ggYXJlIHRoZW4gdXNlZCB0byBjcmVhdGUgYW5cclxuICogaW50ZXJuYWwgUG9seWdvbiBnZW9tZXRyeSBvYmplY3QuIFRoZSBwb2ludHMgY2FuIGJlIHNldCBmcm9tIGEgdmFyaWV0eSBvZiBmb3JtYXRzOlxyXG4gKlxyXG4gKiAtIEFuIGFycmF5IG9mIFBvaW50IG9yIFZlY3RvcjIgb2JqZWN0czogYFtuZXcgUGhhc2VyLk1hdGguVmVjMih4MSwgeTEpLCAuLi5dYFxyXG4gKiAtIEFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBwdWJsaWMgeC95IHByb3BlcnRpZXM6IGBbb2JqMSwgb2JqMiwgLi4uXWBcclxuICogLSBBbiBhcnJheSBvZiBwYWlyZWQgbnVtYmVycyB0aGF0IHJlcHJlc2VudCBwb2ludCBjb29yZGluYXRlczogYFt4MSx5MSwgeDIseTIsIC4uLl1gXHJcbiAqIC0gQW4gYXJyYXkgb2YgYXJyYXlzIHdpdGggdHdvIGVsZW1lbnRzIHJlcHJlc2VudGluZyB4L3kgY29vcmRpbmF0ZXM6IGBbW3gxLCB5MV0sIFt4MiwgeTJdLCAuLi5dYFxyXG4gKiBcclxuICogQnkgZGVmYXVsdCB0aGUgYHhgIGFuZCBgeWAgY29vcmRpbmF0ZXMgb2YgdGhpcyBTaGFwZSByZWZlciB0byB0aGUgY2VudGVyIG9mIGl0LiBIb3dldmVyLCBkZXBlbmRpbmdcclxuICogb24gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludHMgcHJvdmlkZWQsIHRoZSBmaW5hbCBzaGFwZSBtYXkgYmUgcmVuZGVyZWQgb2Zmc2V0IGZyb20gaXRzIG9yaWdpbi5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3RvcnkjcG9seWdvblxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7YW55fSBbcG9pbnRzXSAtIFRoZSBwb2ludHMgdGhhdCBtYWtlIHVwIHRoZSBwb2x5Z29uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxDb2xvcl0gLSBUaGUgY29sb3IgdGhlIHBvbHlnb24gd2lsbCBiZSBmaWxsZWQgd2l0aCwgaS5lLiAweGZmMDAwMCBmb3IgcmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxBbHBoYV0gLSBUaGUgYWxwaGEgdGhlIHBvbHlnb24gd2lsbCBiZSBmaWxsZWQgd2l0aC4gWW91IGNhbiBhbHNvIHNldCB0aGUgYWxwaGEgb2YgdGhlIG92ZXJhbGwgU2hhcGUgdXNpbmcgaXRzIGBhbHBoYWAgcHJvcGVydHkuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5Qb2x5Z29ufSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RGYWN0b3J5LnJlZ2lzdGVyKCdwb2x5Z29uJywgZnVuY3Rpb24gKHgsIHksIHBvaW50cywgZmlsbENvbG9yLCBmaWxsQWxwaGEpXHJcbntcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXlMaXN0LmFkZChuZXcgUG9seWdvbih0aGlzLnNjZW5lLCB4LCB5LCBwb2ludHMsIGZpbGxDb2xvciwgZmlsbEFscGhhKSk7XHJcbn0pO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/polygon/PolygonFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/polygon/PolygonRender.js":
/*!****************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/polygon/PolygonRender.js ***!
\****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./PolygonWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/shape/polygon/PolygonWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./PolygonCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/shape/polygon/PolygonCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9wb2x5Z29uL1BvbHlnb25SZW5kZXIuanM/Nzc1MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsb0VBQXFCO0FBQy9DLG1CQUFtQixtQkFBTyxDQUFDLG9FQUFxQjs7QUFFaEQsSUFBSSxJQUFxQjtBQUN6QjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLDJHQUF3QjtBQUNsRDs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsNkdBQXlCO0FBQ3BEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9wb2x5Z29uL1BvbHlnb25SZW5kZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL05PT1AnKTtcclxudmFyIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL05PT1AnKTtcclxuXHJcbmlmICh0eXBlb2YgV0VCR0xfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi9Qb2x5Z29uV2ViR0xSZW5kZXJlcicpO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIENBTlZBU19SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi9Qb2x5Z29uQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/polygon/PolygonRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/polygon/PolygonWebGLRenderer.js":
/*!***********************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/polygon/PolygonWebGLRenderer.js ***!
\***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillPathWebGL = __webpack_require__(/*! ../FillPathWebGL */ \"./node_modules/phaser/src/gameobjects/shape/FillPathWebGL.js\");\r\nvar StrokePathWebGL = __webpack_require__(/*! ../StrokePathWebGL */ \"./node_modules/phaser/src/gameobjects/shape/StrokePathWebGL.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Polygon#renderWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Polygon} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar PolygonWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var pipeline = this.pipeline;\r\n\r\n var camMatrix = pipeline._tempMatrix1;\r\n var shapeMatrix = pipeline._tempMatrix2;\r\n var calcMatrix = pipeline._tempMatrix3;\r\n\r\n renderer.setPipeline(pipeline);\r\n\r\n shapeMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n camMatrix.copyFrom(camera.matrix);\r\n\r\n if (parentMatrix)\r\n {\r\n // Multiply the camera by the parent matrix\r\n camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n // Undo the camera scroll\r\n shapeMatrix.e = src.x;\r\n shapeMatrix.f = src.y;\r\n }\r\n else\r\n {\r\n shapeMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n shapeMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n }\r\n\r\n camMatrix.multiply(shapeMatrix, calcMatrix);\r\n\r\n var dx = src._displayOriginX;\r\n var dy = src._displayOriginY;\r\n\r\n var alpha = camera.alpha * src.alpha;\r\n\r\n if (src.isFilled)\r\n {\r\n FillPathWebGL(pipeline, calcMatrix, src, alpha, dx, dy);\r\n }\r\n\r\n if (src.isStroked)\r\n {\r\n StrokePathWebGL(pipeline, src, alpha, dx, dy);\r\n }\r\n};\r\n\r\nmodule.exports = PolygonWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9wb2x5Z29uL1BvbHlnb25XZWJHTFJlbmRlcmVyLmpzPzZhOTAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLHNGQUFrQjtBQUM5QyxzQkFBc0IsbUJBQU8sQ0FBQywwRkFBb0I7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL3BvbHlnb24vUG9seWdvbldlYkdMUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBGaWxsUGF0aFdlYkdMID0gcmVxdWlyZSgnLi4vRmlsbFBhdGhXZWJHTCcpO1xyXG52YXIgU3Ryb2tlUGF0aFdlYkdMID0gcmVxdWlyZSgnLi4vU3Ryb2tlUGF0aFdlYkdMJyk7XHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIFdlYkdMIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUG9seWdvbiNyZW5kZXJXZWJHTFxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIFdlYkdMIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Qb2x5Z29ufSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgUG9seWdvbldlYkdMUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgcGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lO1xyXG5cclxuICAgIHZhciBjYW1NYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDE7XHJcbiAgICB2YXIgc2hhcGVNYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDI7XHJcbiAgICB2YXIgY2FsY01hdHJpeCA9IHBpcGVsaW5lLl90ZW1wTWF0cml4MztcclxuXHJcbiAgICByZW5kZXJlci5zZXRQaXBlbGluZShwaXBlbGluZSk7XHJcblxyXG4gICAgc2hhcGVNYXRyaXguYXBwbHlJVFJTKHNyYy54LCBzcmMueSwgc3JjLnJvdGF0aW9uLCBzcmMuc2NhbGVYLCBzcmMuc2NhbGVZKTtcclxuXHJcbiAgICBjYW1NYXRyaXguY29weUZyb20oY2FtZXJhLm1hdHJpeCk7XHJcblxyXG4gICAgaWYgKHBhcmVudE1hdHJpeClcclxuICAgIHtcclxuICAgICAgICAvLyAgTXVsdGlwbHkgdGhlIGNhbWVyYSBieSB0aGUgcGFyZW50IG1hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseVdpdGhPZmZzZXQocGFyZW50TWF0cml4LCAtY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWCwgLWNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3RvclkpO1xyXG5cclxuICAgICAgICAvLyAgVW5kbyB0aGUgY2FtZXJhIHNjcm9sbFxyXG4gICAgICAgIHNoYXBlTWF0cml4LmUgPSBzcmMueDtcclxuICAgICAgICBzaGFwZU1hdHJpeC5mID0gc3JjLnk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgc2hhcGVNYXRyaXguZSAtPSBjYW1lcmEuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYO1xyXG4gICAgICAgIHNoYXBlTWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuICAgIH1cclxuXHJcbiAgICBjYW1NYXRyaXgubXVsdGlwbHkoc2hhcGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG5cclxuICAgIHZhciBkeCA9IHNyYy5fZGlzcGxheU9yaWdpblg7XHJcbiAgICB2YXIgZHkgPSBzcmMuX2Rpc3BsYXlPcmlnaW5ZO1xyXG5cclxuICAgIHZhciBhbHBoYSA9IGNhbWVyYS5hbHBoYSAqIHNyYy5hbHBoYTtcclxuXHJcbiAgICBpZiAoc3JjLmlzRmlsbGVkKVxyXG4gICAge1xyXG4gICAgICAgIEZpbGxQYXRoV2ViR0wocGlwZWxpbmUsIGNhbGNNYXRyaXgsIHNyYywgYWxwaGEsIGR4LCBkeSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNyYy5pc1N0cm9rZWQpXHJcbiAgICB7XHJcbiAgICAgICAgU3Ryb2tlUGF0aFdlYkdMKHBpcGVsaW5lLCBzcmMsIGFscGhhLCBkeCwgZHkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQb2x5Z29uV2ViR0xSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/polygon/PolygonWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/rectangle/Rectangle.js":
/*!**************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/rectangle/Rectangle.js ***!
\**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GeomRectangle = __webpack_require__(/*! ../../../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar Shape = __webpack_require__(/*! ../Shape */ \"./node_modules/phaser/src/gameobjects/shape/Shape.js\");\r\nvar RectangleRender = __webpack_require__(/*! ./RectangleRender */ \"./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleRender.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Rectangle Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * You can change the size of the rectangle by changing the `width` and `height` properties.\r\n *\r\n * @class Rectangle\r\n * @extends Phaser.GameObjects.Shape\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {number} [width=128] - The width of the rectangle.\r\n * @param {number} [height=128] - The height of the rectangle.\r\n * @param {number} [fillColor] - The color the rectangle will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the rectangle will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n */\r\nvar Rectangle = new Class({\r\n\r\n Extends: Shape,\r\n\r\n Mixins: [\r\n RectangleRender\r\n ],\r\n\r\n initialize:\r\n\r\n function Rectangle (scene, x, y, width, height, fillColor, fillAlpha)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n if (width === undefined) { width = 128; }\r\n if (height === undefined) { height = 128; }\r\n\r\n Shape.call(this, scene, 'Rectangle', new GeomRectangle(0, 0, width, height));\r\n\r\n this.setPosition(x, y);\r\n this.setSize(width, height);\r\n\r\n if (fillColor !== undefined)\r\n {\r\n this.setFillStyle(fillColor, fillAlpha);\r\n }\r\n\r\n this.updateDisplayOrigin();\r\n this.updateData();\r\n },\r\n\r\n /**\r\n * Internal method that updates the data and path values.\r\n *\r\n * @method Phaser.GameObjects.Rectangle#updateData\r\n * @private\r\n * @since 3.13.0\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n updateData: function ()\r\n {\r\n var path = [];\r\n var rect = this.geom;\r\n var line = this._tempLine;\r\n\r\n rect.getLineA(line);\r\n\r\n path.push(line.x1, line.y1, line.x2, line.y2);\r\n\r\n rect.getLineB(line);\r\n\r\n path.push(line.x2, line.y2);\r\n\r\n rect.getLineC(line);\r\n\r\n path.push(line.x2, line.y2);\r\n\r\n rect.getLineD(line);\r\n\r\n path.push(line.x2, line.y2);\r\n\r\n this.pathData = path;\r\n\r\n return this;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Rectangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9yZWN0YW5nbGUvUmVjdGFuZ2xlLmpzPzUxYmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxzRUFBc0I7QUFDMUMsb0JBQW9CLG1CQUFPLENBQUMsZ0dBQW1DO0FBQy9ELFlBQVksbUJBQU8sQ0FBQyxzRUFBVTtBQUM5QixzQkFBc0IsbUJBQU8sQ0FBQyxtR0FBbUI7O0FBRWpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPO0FBQ3JDLGtDQUFrQyxhQUFhO0FBQy9DLG1DQUFtQyxjQUFjOztBQUVqRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL3JlY3RhbmdsZS9SZWN0YW5nbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBHZW9tUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi4vLi4vLi4vZ2VvbS9yZWN0YW5nbGUvUmVjdGFuZ2xlJyk7XHJcbnZhciBTaGFwZSA9IHJlcXVpcmUoJy4uL1NoYXBlJyk7XHJcbnZhciBSZWN0YW5nbGVSZW5kZXIgPSByZXF1aXJlKCcuL1JlY3RhbmdsZVJlbmRlcicpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIFJlY3RhbmdsZSBTaGFwZSBpcyBhIEdhbWUgT2JqZWN0IHRoYXQgY2FuIGJlIGFkZGVkIHRvIGEgU2NlbmUsIEdyb3VwIG9yIENvbnRhaW5lci4gWW91IGNhblxyXG4gKiB0cmVhdCBpdCBsaWtlIGFueSBvdGhlciBHYW1lIE9iamVjdCBpbiB5b3VyIGdhbWUsIHN1Y2ggYXMgdHdlZW5pbmcgaXQsIHNjYWxpbmcgaXQsIG9yIGVuYWJsaW5nXHJcbiAqIGl0IGZvciBpbnB1dCBvciBwaHlzaWNzLiBJdCBwcm92aWRlcyBhIHF1aWNrIGFuZCBlYXN5IHdheSBmb3IgeW91IHRvIHJlbmRlciB0aGlzIHNoYXBlIGluIHlvdXJcclxuICogZ2FtZSB3aXRob3V0IHVzaW5nIGEgdGV4dHVyZSwgd2hpbGUgc3RpbGwgdGFraW5nIGFkdmFudGFnZSBvZiBiZWluZyBmdWxseSBiYXRjaGVkIGluIFdlYkdMLlxyXG4gKiBcclxuICogVGhpcyBzaGFwZSBzdXBwb3J0cyBib3RoIGZpbGwgYW5kIHN0cm9rZSBjb2xvcnMuXHJcbiAqIFxyXG4gKiBZb3UgY2FuIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgcmVjdGFuZ2xlIGJ5IGNoYW5naW5nIHRoZSBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzLlxyXG4gKlxyXG4gKiBAY2xhc3MgUmVjdGFuZ2xlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFwZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuIEEgR2FtZSBPYmplY3QgY2FuIG9ubHkgYmVsb25nIHRvIG9uZSBTY2VuZSBhdCBhIHRpbWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3dpZHRoPTEyOF0gLSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtoZWlnaHQ9MTI4XSAtIFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsQ29sb3JdIC0gVGhlIGNvbG9yIHRoZSByZWN0YW5nbGUgd2lsbCBiZSBmaWxsZWQgd2l0aCwgaS5lLiAweGZmMDAwMCBmb3IgcmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxBbHBoYV0gLSBUaGUgYWxwaGEgdGhlIHJlY3RhbmdsZSB3aWxsIGJlIGZpbGxlZCB3aXRoLiBZb3UgY2FuIGFsc28gc2V0IHRoZSBhbHBoYSBvZiB0aGUgb3ZlcmFsbCBTaGFwZSB1c2luZyBpdHMgYGFscGhhYCBwcm9wZXJ0eS5cclxuICovXHJcbnZhciBSZWN0YW5nbGUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IFNoYXBlLFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIFJlY3RhbmdsZVJlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFJlY3RhbmdsZSAoc2NlbmUsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZpbGxDb2xvciwgZmlsbEFscGhhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHsgd2lkdGggPSAxMjg7IH1cclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gMTI4OyB9XHJcblxyXG4gICAgICAgIFNoYXBlLmNhbGwodGhpcywgc2NlbmUsICdSZWN0YW5nbGUnLCBuZXcgR2VvbVJlY3RhbmdsZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24oeCwgeSk7XHJcbiAgICAgICAgdGhpcy5zZXRTaXplKHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICBpZiAoZmlsbENvbG9yICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldEZpbGxTdHlsZShmaWxsQ29sb3IsIGZpbGxBbHBoYSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXlPcmlnaW4oKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhdGEoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdGhhdCB1cGRhdGVzIHRoZSBkYXRhIGFuZCBwYXRoIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5SZWN0YW5nbGUjdXBkYXRlRGF0YVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVEYXRhOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBwYXRoID0gW107XHJcbiAgICAgICAgdmFyIHJlY3QgPSB0aGlzLmdlb207XHJcbiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLl90ZW1wTGluZTtcclxuXHJcbiAgICAgICAgcmVjdC5nZXRMaW5lQShsaW5lKTtcclxuXHJcbiAgICAgICAgcGF0aC5wdXNoKGxpbmUueDEsIGxpbmUueTEsIGxpbmUueDIsIGxpbmUueTIpO1xyXG5cclxuICAgICAgICByZWN0LmdldExpbmVCKGxpbmUpO1xyXG5cclxuICAgICAgICBwYXRoLnB1c2gobGluZS54MiwgbGluZS55Mik7XHJcblxyXG4gICAgICAgIHJlY3QuZ2V0TGluZUMobGluZSk7XHJcblxyXG4gICAgICAgIHBhdGgucHVzaChsaW5lLngyLCBsaW5lLnkyKTtcclxuXHJcbiAgICAgICAgcmVjdC5nZXRMaW5lRChsaW5lKTtcclxuXHJcbiAgICAgICAgcGF0aC5wdXNoKGxpbmUueDIsIGxpbmUueTIpO1xyXG5cclxuICAgICAgICB0aGlzLnBhdGhEYXRhID0gcGF0aDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmVjdGFuZ2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/rectangle/Rectangle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleCanvasRenderer.js":
/*!****************************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleCanvasRenderer.js ***!
\****************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillStyleCanvas = __webpack_require__(/*! ../FillStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js\");\r\nvar LineStyleCanvas = __webpack_require__(/*! ../LineStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/LineStyleCanvas.js\");\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Rectangle#renderCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Rectangle} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar RectangleCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var ctx = renderer.currentContext;\r\n\r\n if (SetTransform(renderer, ctx, src, camera, parentMatrix))\r\n {\r\n var dx = src._displayOriginX;\r\n var dy = src._displayOriginY;\r\n\r\n if (src.isFilled)\r\n {\r\n FillStyleCanvas(ctx, src);\r\n \r\n ctx.fillRect(\r\n -dx,\r\n -dy,\r\n src.width,\r\n src.height\r\n );\r\n }\r\n\r\n if (src.isStroked)\r\n {\r\n LineStyleCanvas(ctx, src);\r\n\r\n ctx.beginPath();\r\n\r\n ctx.rect(\r\n -dx,\r\n -dy,\r\n src.width,\r\n src.height\r\n );\r\n\r\n ctx.stroke();\r\n }\r\n\r\n // Restore the context saved in SetTransform\r\n ctx.restore();\r\n }\r\n};\r\n\r\nmodule.exports = RectangleCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9yZWN0YW5nbGUvUmVjdGFuZ2xlQ2FudmFzUmVuZGVyZXIuanM/NDQ3NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsc0JBQXNCLG1CQUFPLENBQUMsMEZBQW9CO0FBQ2xELHNCQUFzQixtQkFBTyxDQUFDLDBGQUFvQjtBQUNsRCxtQkFBbUIsbUJBQU8sQ0FBQyxvSEFBNkM7O0FBRXhFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsNkJBQTZCO0FBQ3hDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvcmVjdGFuZ2xlL1JlY3RhbmdsZUNhbnZhc1JlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgRmlsbFN0eWxlQ2FudmFzID0gcmVxdWlyZSgnLi4vRmlsbFN0eWxlQ2FudmFzJyk7XHJcbnZhciBMaW5lU3R5bGVDYW52YXMgPSByZXF1aXJlKCcuLi9MaW5lU3R5bGVDYW52YXMnKTtcclxudmFyIFNldFRyYW5zZm9ybSA9IHJlcXVpcmUoJy4uLy4uLy4uL3JlbmRlcmVyL2NhbnZhcy91dGlscy9TZXRUcmFuc2Zvcm0nKTtcclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgQ2FudmFzIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuUmVjdGFuZ2xlI3JlbmRlckNhbnZhc1xyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgQ2FudmFzIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5SZWN0YW5nbGV9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBSZWN0YW5nbGVDYW52YXNSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHZhciBjdHggPSByZW5kZXJlci5jdXJyZW50Q29udGV4dDtcclxuXHJcbiAgICBpZiAoU2V0VHJhbnNmb3JtKHJlbmRlcmVyLCBjdHgsIHNyYywgY2FtZXJhLCBwYXJlbnRNYXRyaXgpKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBkeCA9IHNyYy5fZGlzcGxheU9yaWdpblg7XHJcbiAgICAgICAgdmFyIGR5ID0gc3JjLl9kaXNwbGF5T3JpZ2luWTtcclxuXHJcbiAgICAgICAgaWYgKHNyYy5pc0ZpbGxlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIEZpbGxTdHlsZUNhbnZhcyhjdHgsIHNyYyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIGN0eC5maWxsUmVjdChcclxuICAgICAgICAgICAgICAgIC1keCxcclxuICAgICAgICAgICAgICAgIC1keSxcclxuICAgICAgICAgICAgICAgIHNyYy53aWR0aCxcclxuICAgICAgICAgICAgICAgIHNyYy5oZWlnaHRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzcmMuaXNTdHJva2VkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgTGluZVN0eWxlQ2FudmFzKGN0eCwgc3JjKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5yZWN0KFxyXG4gICAgICAgICAgICAgICAgLWR4LFxyXG4gICAgICAgICAgICAgICAgLWR5LFxyXG4gICAgICAgICAgICAgICAgc3JjLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgc3JjLmhlaWdodFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgY3R4LnN0cm9rZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFJlc3RvcmUgdGhlIGNvbnRleHQgc2F2ZWQgaW4gU2V0VHJhbnNmb3JtXHJcbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmVjdGFuZ2xlQ2FudmFzUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleFactory.js":
/*!*********************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleFactory.js ***!
\*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar Rectangle = __webpack_require__(/*! ./Rectangle */ \"./node_modules/phaser/src/gameobjects/shape/rectangle/Rectangle.js\");\r\n\r\n/**\r\n * Creates a new Rectangle Shape Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Rectangle Game Object has been built into Phaser.\r\n * \r\n * The Rectangle Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * You can change the size of the rectangle by changing the `width` and `height` properties.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#rectangle\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [width=128] - The width of the rectangle.\r\n * @param {number} [height=128] - The height of the rectangle.\r\n * @param {number} [fillColor] - The color the rectangle will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the rectangle will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n *\r\n * @return {Phaser.GameObjects.Rectangle} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('rectangle', function (x, y, width, height, fillColor, fillAlpha)\r\n{\r\n return this.displayList.add(new Rectangle(this.scene, x, y, width, height, fillColor, fillAlpha));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9yZWN0YW5nbGUvUmVjdGFuZ2xlRmFjdG9yeS5qcz85ZWRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQywyRkFBeUI7QUFDekQsZ0JBQWdCLG1CQUFPLENBQUMsdUZBQWE7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksNkJBQTZCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL3JlY3RhbmdsZS9SZWN0YW5nbGVGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG52YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFJlY3RhbmdsZSBTaGFwZSBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFJlY3RhbmdsZSBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogXHJcbiAqIFRoZSBSZWN0YW5nbGUgU2hhcGUgaXMgYSBHYW1lIE9iamVjdCB0aGF0IGNhbiBiZSBhZGRlZCB0byBhIFNjZW5lLCBHcm91cCBvciBDb250YWluZXIuIFlvdSBjYW5cclxuICogdHJlYXQgaXQgbGlrZSBhbnkgb3RoZXIgR2FtZSBPYmplY3QgaW4geW91ciBnYW1lLCBzdWNoIGFzIHR3ZWVuaW5nIGl0LCBzY2FsaW5nIGl0LCBvciBlbmFibGluZ1xyXG4gKiBpdCBmb3IgaW5wdXQgb3IgcGh5c2ljcy4gSXQgcHJvdmlkZXMgYSBxdWljayBhbmQgZWFzeSB3YXkgZm9yIHlvdSB0byByZW5kZXIgdGhpcyBzaGFwZSBpbiB5b3VyXHJcbiAqIGdhbWUgd2l0aG91dCB1c2luZyBhIHRleHR1cmUsIHdoaWxlIHN0aWxsIHRha2luZyBhZHZhbnRhZ2Ugb2YgYmVpbmcgZnVsbHkgYmF0Y2hlZCBpbiBXZWJHTC5cclxuICogXHJcbiAqIFRoaXMgc2hhcGUgc3VwcG9ydHMgYm90aCBmaWxsIGFuZCBzdHJva2UgY29sb3JzLlxyXG4gKiBcclxuICogWW91IGNhbiBjaGFuZ2UgdGhlIHNpemUgb2YgdGhlIHJlY3RhbmdsZSBieSBjaGFuZ2luZyB0aGUgYHdpZHRoYCBhbmQgYGhlaWdodGAgcHJvcGVydGllcy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3RvcnkjcmVjdGFuZ2xlXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt3aWR0aD0xMjhdIC0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0PTEyOF0gLSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbENvbG9yXSAtIFRoZSBjb2xvciB0aGUgcmVjdGFuZ2xlIHdpbGwgYmUgZmlsbGVkIHdpdGgsIGkuZS4gMHhmZjAwMDAgZm9yIHJlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsQWxwaGFdIC0gVGhlIGFscGhhIHRoZSByZWN0YW5nbGUgd2lsbCBiZSBmaWxsZWQgd2l0aC4gWW91IGNhbiBhbHNvIHNldCB0aGUgYWxwaGEgb2YgdGhlIG92ZXJhbGwgU2hhcGUgdXNpbmcgaXRzIGBhbHBoYWAgcHJvcGVydHkuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5SZWN0YW5nbGV9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdEZhY3RvcnkucmVnaXN0ZXIoJ3JlY3RhbmdsZScsIGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmaWxsQ29sb3IsIGZpbGxBbHBoYSlcclxue1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheUxpc3QuYWRkKG5ldyBSZWN0YW5nbGUodGhpcy5zY2VuZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZmlsbENvbG9yLCBmaWxsQWxwaGEpKTtcclxufSk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleRender.js":
/*!********************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleRender.js ***!
\********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./RectangleWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./RectangleCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9yZWN0YW5nbGUvUmVjdGFuZ2xlUmVuZGVyLmpzPzI2NmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLG9FQUFxQjtBQUMvQyxtQkFBbUIsbUJBQU8sQ0FBQyxvRUFBcUI7O0FBRWhELElBQUksSUFBcUI7QUFDekI7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxpSEFBMEI7QUFDcEQ7O0FBRUEsSUFBSSxJQUFzQjtBQUMxQjtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLG1IQUEyQjtBQUN0RDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvcmVjdGFuZ2xlL1JlY3RhbmdsZVJlbmRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG52YXIgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG5cclxuaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuL1JlY3RhbmdsZVdlYkdMUmVuZGVyZXInKTtcclxufVxyXG5cclxuaWYgKHR5cGVvZiBDQU5WQVNfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleWebGLRenderer.js":
/*!***************************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleWebGLRenderer.js ***!
\***************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar StrokePathWebGL = __webpack_require__(/*! ../StrokePathWebGL */ \"./node_modules/phaser/src/gameobjects/shape/StrokePathWebGL.js\");\r\nvar Utils = __webpack_require__(/*! ../../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Rectangle#renderWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Rectangle} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar RectangleWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var pipeline = this.pipeline;\r\n\r\n var camMatrix = pipeline._tempMatrix1;\r\n var shapeMatrix = pipeline._tempMatrix2;\r\n var calcMatrix = pipeline._tempMatrix3;\r\n\r\n renderer.setPipeline(pipeline);\r\n\r\n shapeMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n camMatrix.copyFrom(camera.matrix);\r\n\r\n if (parentMatrix)\r\n {\r\n // Multiply the camera by the parent matrix\r\n camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n // Undo the camera scroll\r\n shapeMatrix.e = src.x;\r\n shapeMatrix.f = src.y;\r\n }\r\n else\r\n {\r\n shapeMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n shapeMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n }\r\n\r\n camMatrix.multiply(shapeMatrix, calcMatrix);\r\n\r\n var dx = src._displayOriginX;\r\n var dy = src._displayOriginY;\r\n var alpha = camera.alpha * src.alpha;\r\n\r\n if (src.isFilled)\r\n {\r\n var fillTint = pipeline.fillTint;\r\n var fillTintColor = Utils.getTintAppendFloatAlphaAndSwap(src.fillColor, src.fillAlpha * alpha);\r\n \r\n fillTint.TL = fillTintColor;\r\n fillTint.TR = fillTintColor;\r\n fillTint.BL = fillTintColor;\r\n fillTint.BR = fillTintColor;\r\n\r\n pipeline.setTexture2D();\r\n\r\n pipeline.batchFillRect(\r\n -dx,\r\n -dy,\r\n src.width,\r\n src.height\r\n );\r\n }\r\n\r\n if (src.isStroked)\r\n {\r\n StrokePathWebGL(pipeline, src, alpha, dx, dy);\r\n }\r\n};\r\n\r\nmodule.exports = RectangleWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9yZWN0YW5nbGUvUmVjdGFuZ2xlV2ViR0xSZW5kZXJlci5qcz85MTgxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQywwRkFBb0I7QUFDbEQsWUFBWSxtQkFBTyxDQUFDLHdGQUErQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQ0FBb0M7QUFDL0MsV0FBVyw2QkFBNkI7QUFDeEMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9yZWN0YW5nbGUvUmVjdGFuZ2xlV2ViR0xSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFN0cm9rZVBhdGhXZWJHTCA9IHJlcXVpcmUoJy4uL1N0cm9rZVBhdGhXZWJHTCcpO1xyXG52YXIgVXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi9yZW5kZXJlci93ZWJnbC9VdGlscycpO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBXZWJHTCBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlJlY3RhbmdsZSNyZW5kZXJXZWJHTFxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIFdlYkdMIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5SZWN0YW5nbGV9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBSZWN0YW5nbGVXZWJHTFJlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgdmFyIHBpcGVsaW5lID0gdGhpcy5waXBlbGluZTtcclxuXHJcbiAgICB2YXIgY2FtTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgxO1xyXG4gICAgdmFyIHNoYXBlTWF0cml4ID0gcGlwZWxpbmUuX3RlbXBNYXRyaXgyO1xyXG4gICAgdmFyIGNhbGNNYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDM7XHJcblxyXG4gICAgcmVuZGVyZXIuc2V0UGlwZWxpbmUocGlwZWxpbmUpO1xyXG5cclxuICAgIHNoYXBlTWF0cml4LmFwcGx5SVRSUyhzcmMueCwgc3JjLnksIHNyYy5yb3RhdGlvbiwgc3JjLnNjYWxlWCwgc3JjLnNjYWxlWSk7XHJcblxyXG4gICAgY2FtTWF0cml4LmNvcHlGcm9tKGNhbWVyYS5tYXRyaXgpO1xyXG5cclxuICAgIGlmIChwYXJlbnRNYXRyaXgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIE11bHRpcGx5IHRoZSBjYW1lcmEgYnkgdGhlIHBhcmVudCBtYXRyaXhcclxuICAgICAgICBjYW1NYXRyaXgubXVsdGlwbHlXaXRoT2Zmc2V0KHBhcmVudE1hdHJpeCwgLWNhbWVyYS5zY3JvbGxYICogc3JjLnNjcm9sbEZhY3RvclgsIC1jYW1lcmEuc2Nyb2xsWSAqIHNyYy5zY3JvbGxGYWN0b3JZKTtcclxuXHJcbiAgICAgICAgLy8gIFVuZG8gdGhlIGNhbWVyYSBzY3JvbGxcclxuICAgICAgICBzaGFwZU1hdHJpeC5lID0gc3JjLng7XHJcbiAgICAgICAgc2hhcGVNYXRyaXguZiA9IHNyYy55O1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHNoYXBlTWF0cml4LmUgLT0gY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWDtcclxuICAgICAgICBzaGFwZU1hdHJpeC5mIC09IGNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3Rvclk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FtTWF0cml4Lm11bHRpcGx5KHNoYXBlTWF0cml4LCBjYWxjTWF0cml4KTtcclxuXHJcbiAgICB2YXIgZHggPSBzcmMuX2Rpc3BsYXlPcmlnaW5YO1xyXG4gICAgdmFyIGR5ID0gc3JjLl9kaXNwbGF5T3JpZ2luWTtcclxuICAgIHZhciBhbHBoYSA9IGNhbWVyYS5hbHBoYSAqIHNyYy5hbHBoYTtcclxuXHJcbiAgICBpZiAoc3JjLmlzRmlsbGVkKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBmaWxsVGludCA9IHBpcGVsaW5lLmZpbGxUaW50O1xyXG4gICAgICAgIHZhciBmaWxsVGludENvbG9yID0gVXRpbHMuZ2V0VGludEFwcGVuZEZsb2F0QWxwaGFBbmRTd2FwKHNyYy5maWxsQ29sb3IsIHNyYy5maWxsQWxwaGEgKiBhbHBoYSk7XHJcbiAgICBcclxuICAgICAgICBmaWxsVGludC5UTCA9IGZpbGxUaW50Q29sb3I7XHJcbiAgICAgICAgZmlsbFRpbnQuVFIgPSBmaWxsVGludENvbG9yO1xyXG4gICAgICAgIGZpbGxUaW50LkJMID0gZmlsbFRpbnRDb2xvcjtcclxuICAgICAgICBmaWxsVGludC5CUiA9IGZpbGxUaW50Q29sb3I7XHJcblxyXG4gICAgICAgIHBpcGVsaW5lLnNldFRleHR1cmUyRCgpO1xyXG5cclxuICAgICAgICBwaXBlbGluZS5iYXRjaEZpbGxSZWN0KFxyXG4gICAgICAgICAgICAtZHgsXHJcbiAgICAgICAgICAgIC1keSxcclxuICAgICAgICAgICAgc3JjLndpZHRoLFxyXG4gICAgICAgICAgICBzcmMuaGVpZ2h0XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3JjLmlzU3Ryb2tlZClcclxuICAgIHtcclxuICAgICAgICBTdHJva2VQYXRoV2ViR0wocGlwZWxpbmUsIHNyYywgYWxwaGEsIGR4LCBkeSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJlY3RhbmdsZVdlYkdMUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/rectangle/RectangleWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/star/Star.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/star/Star.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar StarRender = __webpack_require__(/*! ./StarRender */ \"./node_modules/phaser/src/gameobjects/shape/star/StarRender.js\");\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Earcut = __webpack_require__(/*! ../../../geom/polygon/Earcut */ \"./node_modules/phaser/src/geom/polygon/Earcut.js\");\r\nvar Shape = __webpack_require__(/*! ../Shape */ \"./node_modules/phaser/src/gameobjects/shape/Shape.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Star Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * As the name implies, the Star shape will display a star in your game. You can control several\r\n * aspects of it including the number of points that constitute the star. The default is 5. If\r\n * you change it to 4 it will render as a diamond. If you increase them, you'll get a more spiky\r\n * star shape.\r\n * \r\n * You can also control the inner and outer radius, which is how 'long' each point of the star is.\r\n * Modify these values to create more interesting shapes.\r\n *\r\n * @class Star\r\n * @extends Phaser.GameObjects.Shape\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [points=5] - The number of points on the star.\r\n * @param {number} [innerRadius=32] - The inner radius of the star.\r\n * @param {number} [outerRadius=64] - The outer radius of the star.\r\n * @param {number} [fillColor] - The color the star will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the star will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n */\r\nvar Star = new Class({\r\n\r\n Extends: Shape,\r\n\r\n Mixins: [\r\n StarRender\r\n ],\r\n\r\n initialize:\r\n\r\n function Star (scene, x, y, points, innerRadius, outerRadius, fillColor, fillAlpha)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n if (points === undefined) { points = 5; }\r\n if (innerRadius === undefined) { innerRadius = 32; }\r\n if (outerRadius === undefined) { outerRadius = 64; }\r\n\r\n Shape.call(this, scene, 'Star', null);\r\n\r\n /**\r\n * Private internal value.\r\n * The number of points in the star.\r\n *\r\n * @name Phaser.GameObjects.Star#_points\r\n * @type {integer}\r\n * @private\r\n * @since 3.13.0\r\n */\r\n this._points = points;\r\n\r\n /**\r\n * Private internal value.\r\n * The inner radius of the star.\r\n *\r\n * @name Phaser.GameObjects.Star#_innerRadius\r\n * @type {number}\r\n * @private\r\n * @since 3.13.0\r\n */\r\n this._innerRadius = innerRadius;\r\n\r\n /**\r\n * Private internal value.\r\n * The outer radius of the star.\r\n *\r\n * @name Phaser.GameObjects.Star#_outerRadius\r\n * @type {number}\r\n * @private\r\n * @since 3.13.0\r\n */\r\n this._outerRadius = outerRadius;\r\n\r\n this.setPosition(x, y);\r\n this.setSize(outerRadius * 2, outerRadius * 2);\r\n\r\n if (fillColor !== undefined)\r\n {\r\n this.setFillStyle(fillColor, fillAlpha);\r\n }\r\n\r\n this.updateDisplayOrigin();\r\n this.updateData();\r\n },\r\n\r\n /**\r\n * Sets the number of points that make up the Star shape.\r\n * This call can be chained.\r\n *\r\n * @method Phaser.GameObjects.Star#setPoints\r\n * @since 3.13.0\r\n * \r\n * @param {integer} value - The amount of points the Star will have.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setPoints: function (value)\r\n {\r\n this._points = value;\r\n\r\n return this.updateData();\r\n },\r\n\r\n /**\r\n * Sets the inner radius of the Star shape.\r\n * This call can be chained.\r\n *\r\n * @method Phaser.GameObjects.Star#setInnerRadius\r\n * @since 3.13.0\r\n * \r\n * @param {number} value - The amount to set the inner radius to.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setInnerRadius: function (value)\r\n {\r\n this._innerRadius = value;\r\n\r\n return this.updateData();\r\n },\r\n\r\n /**\r\n * Sets the outer radius of the Star shape.\r\n * This call can be chained.\r\n *\r\n * @method Phaser.GameObjects.Star#setOuterRadius\r\n * @since 3.13.0\r\n * \r\n * @param {number} value - The amount to set the outer radius to.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setOuterRadius: function (value)\r\n {\r\n this._outerRadius = value;\r\n\r\n return this.updateData();\r\n },\r\n\r\n /**\r\n * The number of points that make up the Star shape.\r\n *\r\n * @name Phaser.GameObjects.Star#points\r\n * @type {integer}\r\n * @default 5\r\n * @since 3.13.0\r\n */\r\n points: {\r\n\r\n get: function ()\r\n {\r\n return this._points;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._points = value;\r\n\r\n this.updateData();\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The inner radius of the Star shape.\r\n *\r\n * @name Phaser.GameObjects.Star#innerRadius\r\n * @type {number}\r\n * @default 32\r\n * @since 3.13.0\r\n */\r\n innerRadius: {\r\n\r\n get: function ()\r\n {\r\n return this._innerRadius;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._innerRadius = value;\r\n\r\n this.updateData();\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The outer radius of the Star shape.\r\n *\r\n * @name Phaser.GameObjects.Star#outerRadius\r\n * @type {number}\r\n * @default 64\r\n * @since 3.13.0\r\n */\r\n outerRadius: {\r\n\r\n get: function ()\r\n {\r\n return this._outerRadius;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._outerRadius = value;\r\n\r\n this.updateData();\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Internal method that updates the data and path values.\r\n *\r\n * @method Phaser.GameObjects.Star#updateData\r\n * @private\r\n * @since 3.13.0\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n updateData: function ()\r\n {\r\n var path = [];\r\n\r\n var points = this._points;\r\n var innerRadius = this._innerRadius;\r\n var outerRadius = this._outerRadius;\r\n\r\n var rot = Math.PI / 2 * 3;\r\n var step = Math.PI / points;\r\n\r\n // So origin 0.5 = the center of the star\r\n var x = outerRadius;\r\n var y = outerRadius;\r\n \r\n path.push(x, y + -outerRadius);\r\n\r\n for (var i = 0; i < points; i++)\r\n {\r\n path.push(x + Math.cos(rot) * outerRadius, y + Math.sin(rot) * outerRadius);\r\n\r\n rot += step;\r\n\r\n path.push(x + Math.cos(rot) * innerRadius, y + Math.sin(rot) * innerRadius);\r\n \r\n rot += step;\r\n }\r\n\r\n path.push(x, y + -outerRadius);\r\n\r\n this.pathIndexes = Earcut(path);\r\n this.pathData = path;\r\n\r\n return this;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Star;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9zdGFyL1N0YXIuanM/MzVkZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsb0ZBQWM7QUFDdkMsWUFBWSxtQkFBTyxDQUFDLHNFQUFzQjtBQUMxQyxhQUFhLG1CQUFPLENBQUMsc0ZBQThCO0FBQ25ELFlBQVksbUJBQU8sQ0FBQyxzRUFBVTs7QUFFOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPO0FBQ3JDLG1DQUFtQyxZQUFZO0FBQy9DLHdDQUF3QyxrQkFBa0I7QUFDMUQsd0NBQXdDLGtCQUFrQjs7QUFFMUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx1QkFBdUIsWUFBWTtBQUNuQztBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9zdGFyL1N0YXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBTdGFyUmVuZGVyID0gcmVxdWlyZSgnLi9TdGFyUmVuZGVyJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBFYXJjdXQgPSByZXF1aXJlKCcuLi8uLi8uLi9nZW9tL3BvbHlnb24vRWFyY3V0Jyk7XHJcbnZhciBTaGFwZSA9IHJlcXVpcmUoJy4uL1NoYXBlJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgU3RhciBTaGFwZSBpcyBhIEdhbWUgT2JqZWN0IHRoYXQgY2FuIGJlIGFkZGVkIHRvIGEgU2NlbmUsIEdyb3VwIG9yIENvbnRhaW5lci4gWW91IGNhblxyXG4gKiB0cmVhdCBpdCBsaWtlIGFueSBvdGhlciBHYW1lIE9iamVjdCBpbiB5b3VyIGdhbWUsIHN1Y2ggYXMgdHdlZW5pbmcgaXQsIHNjYWxpbmcgaXQsIG9yIGVuYWJsaW5nXHJcbiAqIGl0IGZvciBpbnB1dCBvciBwaHlzaWNzLiBJdCBwcm92aWRlcyBhIHF1aWNrIGFuZCBlYXN5IHdheSBmb3IgeW91IHRvIHJlbmRlciB0aGlzIHNoYXBlIGluIHlvdXJcclxuICogZ2FtZSB3aXRob3V0IHVzaW5nIGEgdGV4dHVyZSwgd2hpbGUgc3RpbGwgdGFraW5nIGFkdmFudGFnZSBvZiBiZWluZyBmdWxseSBiYXRjaGVkIGluIFdlYkdMLlxyXG4gKiBcclxuICogVGhpcyBzaGFwZSBzdXBwb3J0cyBib3RoIGZpbGwgYW5kIHN0cm9rZSBjb2xvcnMuXHJcbiAqIFxyXG4gKiBBcyB0aGUgbmFtZSBpbXBsaWVzLCB0aGUgU3RhciBzaGFwZSB3aWxsIGRpc3BsYXkgYSBzdGFyIGluIHlvdXIgZ2FtZS4gWW91IGNhbiBjb250cm9sIHNldmVyYWxcclxuICogYXNwZWN0cyBvZiBpdCBpbmNsdWRpbmcgdGhlIG51bWJlciBvZiBwb2ludHMgdGhhdCBjb25zdGl0dXRlIHRoZSBzdGFyLiBUaGUgZGVmYXVsdCBpcyA1LiBJZlxyXG4gKiB5b3UgY2hhbmdlIGl0IHRvIDQgaXQgd2lsbCByZW5kZXIgYXMgYSBkaWFtb25kLiBJZiB5b3UgaW5jcmVhc2UgdGhlbSwgeW91J2xsIGdldCBhIG1vcmUgc3Bpa3lcclxuICogc3RhciBzaGFwZS5cclxuICogXHJcbiAqIFlvdSBjYW4gYWxzbyBjb250cm9sIHRoZSBpbm5lciBhbmQgb3V0ZXIgcmFkaXVzLCB3aGljaCBpcyBob3cgJ2xvbmcnIGVhY2ggcG9pbnQgb2YgdGhlIHN0YXIgaXMuXHJcbiAqIE1vZGlmeSB0aGVzZSB2YWx1ZXMgdG8gY3JlYXRlIG1vcmUgaW50ZXJlc3Rpbmcgc2hhcGVzLlxyXG4gKlxyXG4gKiBAY2xhc3MgU3RhclxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuU2hhcGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5HYW1lT2JqZWN0c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBHYW1lIE9iamVjdCBiZWxvbmdzLiBBIEdhbWUgT2JqZWN0IGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgU2NlbmUgYXQgYSB0aW1lLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3BvaW50cz01XSAtIFRoZSBudW1iZXIgb2YgcG9pbnRzIG9uIHRoZSBzdGFyLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2lubmVyUmFkaXVzPTMyXSAtIFRoZSBpbm5lciByYWRpdXMgb2YgdGhlIHN0YXIuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3V0ZXJSYWRpdXM9NjRdIC0gVGhlIG91dGVyIHJhZGl1cyBvZiB0aGUgc3Rhci5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsQ29sb3JdIC0gVGhlIGNvbG9yIHRoZSBzdGFyIHdpbGwgYmUgZmlsbGVkIHdpdGgsIGkuZS4gMHhmZjAwMDAgZm9yIHJlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsQWxwaGFdIC0gVGhlIGFscGhhIHRoZSBzdGFyIHdpbGwgYmUgZmlsbGVkIHdpdGguIFlvdSBjYW4gYWxzbyBzZXQgdGhlIGFscGhhIG9mIHRoZSBvdmVyYWxsIFNoYXBlIHVzaW5nIGl0cyBgYWxwaGFgIHByb3BlcnR5LlxyXG4gKi9cclxudmFyIFN0YXIgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IFNoYXBlLFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIFN0YXJSZW5kZXJcclxuICAgIF0sXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBTdGFyIChzY2VuZSwgeCwgeSwgcG9pbnRzLCBpbm5lclJhZGl1cywgb3V0ZXJSYWRpdXMsIGZpbGxDb2xvciwgZmlsbEFscGhhKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcbiAgICAgICAgaWYgKHBvaW50cyA9PT0gdW5kZWZpbmVkKSB7IHBvaW50cyA9IDU7IH1cclxuICAgICAgICBpZiAoaW5uZXJSYWRpdXMgPT09IHVuZGVmaW5lZCkgeyBpbm5lclJhZGl1cyA9IDMyOyB9XHJcbiAgICAgICAgaWYgKG91dGVyUmFkaXVzID09PSB1bmRlZmluZWQpIHsgb3V0ZXJSYWRpdXMgPSA2NDsgfVxyXG5cclxuICAgICAgICBTaGFwZS5jYWxsKHRoaXMsIHNjZW5lLCAnU3RhcicsIG51bGwpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQcml2YXRlIGludGVybmFsIHZhbHVlLlxyXG4gICAgICAgICAqIFRoZSBudW1iZXIgb2YgcG9pbnRzIGluIHRoZSBzdGFyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlN0YXIjX3BvaW50c1xyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3BvaW50cyA9IHBvaW50cztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUHJpdmF0ZSBpbnRlcm5hbCB2YWx1ZS5cclxuICAgICAgICAgKiBUaGUgaW5uZXIgcmFkaXVzIG9mIHRoZSBzdGFyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlN0YXIjX2lubmVyUmFkaXVzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9pbm5lclJhZGl1cyA9IGlubmVyUmFkaXVzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQcml2YXRlIGludGVybmFsIHZhbHVlLlxyXG4gICAgICAgICAqIFRoZSBvdXRlciByYWRpdXMgb2YgdGhlIHN0YXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuU3RhciNfb3V0ZXJSYWRpdXNcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX291dGVyUmFkaXVzID0gb3V0ZXJSYWRpdXM7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24oeCwgeSk7XHJcbiAgICAgICAgdGhpcy5zZXRTaXplKG91dGVyUmFkaXVzICogMiwgb3V0ZXJSYWRpdXMgKiAyKTtcclxuXHJcbiAgICAgICAgaWYgKGZpbGxDb2xvciAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRGaWxsU3R5bGUoZmlsbENvbG9yLCBmaWxsQWxwaGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5T3JpZ2luKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXRhKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBvaW50cyB0aGF0IG1ha2UgdXAgdGhlIFN0YXIgc2hhcGUuXHJcbiAgICAgKiBUaGlzIGNhbGwgY2FuIGJlIGNoYWluZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU3RhciNzZXRQb2ludHNcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB2YWx1ZSAtIFRoZSBhbW91bnQgb2YgcG9pbnRzIHRoZSBTdGFyIHdpbGwgaGF2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRQb2ludHM6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9wb2ludHMgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlRGF0YSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGlubmVyIHJhZGl1cyBvZiB0aGUgU3RhciBzaGFwZS5cclxuICAgICAqIFRoaXMgY2FsbCBjYW4gYmUgY2hhaW5lZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TdGFyI3NldElubmVyUmFkaXVzXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBhbW91bnQgdG8gc2V0IHRoZSBpbm5lciByYWRpdXMgdG8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0SW5uZXJSYWRpdXM6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9pbm5lclJhZGl1cyA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVEYXRhKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgb3V0ZXIgcmFkaXVzIG9mIHRoZSBTdGFyIHNoYXBlLlxyXG4gICAgICogVGhpcyBjYWxsIGNhbiBiZSBjaGFpbmVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlN0YXIjc2V0T3V0ZXJSYWRpdXNcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIGFtb3VudCB0byBzZXQgdGhlIG91dGVyIHJhZGl1cyB0by5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRPdXRlclJhZGl1czogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX291dGVyUmFkaXVzID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZURhdGEoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHBvaW50cyB0aGF0IG1ha2UgdXAgdGhlIFN0YXIgc2hhcGUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlN0YXIjcG9pbnRzXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBkZWZhdWx0IDVcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqL1xyXG4gICAgcG9pbnRzOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb2ludHM7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9wb2ludHMgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGlubmVyIHJhZGl1cyBvZiB0aGUgU3RhciBzaGFwZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuU3RhciNpbm5lclJhZGl1c1xyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IDMyXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKi9cclxuICAgIGlubmVyUmFkaXVzOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbm5lclJhZGl1cztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2lubmVyUmFkaXVzID0gdmFsdWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURhdGEoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBvdXRlciByYWRpdXMgb2YgdGhlIFN0YXIgc2hhcGUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlN0YXIjb3V0ZXJSYWRpdXNcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCA2NFxyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICovXHJcbiAgICBvdXRlclJhZGl1czoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0ZXJSYWRpdXM7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRlclJhZGl1cyA9IHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdGhhdCB1cGRhdGVzIHRoZSBkYXRhIGFuZCBwYXRoIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TdGFyI3VwZGF0ZURhdGFcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlRGF0YTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgcGF0aCA9IFtdO1xyXG5cclxuICAgICAgICB2YXIgcG9pbnRzID0gdGhpcy5fcG9pbnRzO1xyXG4gICAgICAgIHZhciBpbm5lclJhZGl1cyA9IHRoaXMuX2lubmVyUmFkaXVzO1xyXG4gICAgICAgIHZhciBvdXRlclJhZGl1cyA9IHRoaXMuX291dGVyUmFkaXVzO1xyXG5cclxuICAgICAgICB2YXIgcm90ID0gTWF0aC5QSSAvIDIgKiAzO1xyXG4gICAgICAgIHZhciBzdGVwID0gTWF0aC5QSSAvIHBvaW50cztcclxuXHJcbiAgICAgICAgLy8gIFNvIG9yaWdpbiAwLjUgPSB0aGUgY2VudGVyIG9mIHRoZSBzdGFyXHJcbiAgICAgICAgdmFyIHggPSBvdXRlclJhZGl1cztcclxuICAgICAgICB2YXIgeSA9IG91dGVyUmFkaXVzO1xyXG4gICAgXHJcbiAgICAgICAgcGF0aC5wdXNoKHgsIHkgKyAtb3V0ZXJSYWRpdXMpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50czsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcGF0aC5wdXNoKHggKyBNYXRoLmNvcyhyb3QpICogb3V0ZXJSYWRpdXMsIHkgKyBNYXRoLnNpbihyb3QpICogb3V0ZXJSYWRpdXMpO1xyXG5cclxuICAgICAgICAgICAgcm90ICs9IHN0ZXA7XHJcblxyXG4gICAgICAgICAgICBwYXRoLnB1c2goeCArIE1hdGguY29zKHJvdCkgKiBpbm5lclJhZGl1cywgeSArIE1hdGguc2luKHJvdCkgKiBpbm5lclJhZGl1cyk7XHJcbiAgICBcclxuICAgICAgICAgICAgcm90ICs9IHN0ZXA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwYXRoLnB1c2goeCwgeSArIC1vdXRlclJhZGl1cyk7XHJcblxyXG4gICAgICAgIHRoaXMucGF0aEluZGV4ZXMgPSBFYXJjdXQocGF0aCk7XHJcbiAgICAgICAgdGhpcy5wYXRoRGF0YSA9IHBhdGg7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/star/Star.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/star/StarCanvasRenderer.js":
/*!******************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/star/StarCanvasRenderer.js ***!
\******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillStyleCanvas = __webpack_require__(/*! ../FillStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js\");\r\nvar LineStyleCanvas = __webpack_require__(/*! ../LineStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/LineStyleCanvas.js\");\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Star#renderCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Star} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar StarCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var ctx = renderer.currentContext;\r\n\r\n if (SetTransform(renderer, ctx, src, camera, parentMatrix))\r\n {\r\n var dx = src._displayOriginX;\r\n var dy = src._displayOriginY;\r\n\r\n var path = src.pathData;\r\n var pathLength = path.length - 1;\r\n \r\n var px1 = path[0] - dx;\r\n var py1 = path[1] - dy;\r\n\r\n ctx.beginPath();\r\n\r\n ctx.moveTo(px1, py1);\r\n \r\n if (!src.closePath)\r\n {\r\n pathLength -= 2;\r\n }\r\n \r\n for (var i = 2; i < pathLength; i += 2)\r\n {\r\n var px2 = path[i] - dx;\r\n var py2 = path[i + 1] - dy;\r\n \r\n ctx.lineTo(px2, py2);\r\n }\r\n\r\n ctx.closePath();\r\n\r\n if (src.isFilled)\r\n {\r\n FillStyleCanvas(ctx, src);\r\n\r\n ctx.fill();\r\n }\r\n\r\n if (src.isStroked)\r\n {\r\n LineStyleCanvas(ctx, src);\r\n\r\n ctx.stroke();\r\n }\r\n\r\n // Restore the context saved in SetTransform\r\n ctx.restore();\r\n }\r\n};\r\n\r\nmodule.exports = StarCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9zdGFyL1N0YXJDYW52YXNSZW5kZXJlci5qcz9kMTk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQywwRkFBb0I7QUFDbEQsc0JBQXNCLG1CQUFPLENBQUMsMEZBQW9CO0FBQ2xELG1CQUFtQixtQkFBTyxDQUFDLG9IQUE2Qzs7QUFFeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVyx3QkFBd0I7QUFDbkMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvc3Rhci9TdGFyQ2FudmFzUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBGaWxsU3R5bGVDYW52YXMgPSByZXF1aXJlKCcuLi9GaWxsU3R5bGVDYW52YXMnKTtcclxudmFyIExpbmVTdHlsZUNhbnZhcyA9IHJlcXVpcmUoJy4uL0xpbmVTdHlsZUNhbnZhcycpO1xyXG52YXIgU2V0VHJhbnNmb3JtID0gcmVxdWlyZSgnLi4vLi4vLi4vcmVuZGVyZXIvY2FudmFzL3V0aWxzL1NldFRyYW5zZm9ybScpO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBDYW52YXMgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TdGFyI3JlbmRlckNhbnZhc1xyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgQ2FudmFzIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5TdGFyfSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgU3RhckNhbnZhc1JlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgdmFyIGN0eCA9IHJlbmRlcmVyLmN1cnJlbnRDb250ZXh0O1xyXG5cclxuICAgIGlmIChTZXRUcmFuc2Zvcm0ocmVuZGVyZXIsIGN0eCwgc3JjLCBjYW1lcmEsIHBhcmVudE1hdHJpeCkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGR4ID0gc3JjLl9kaXNwbGF5T3JpZ2luWDtcclxuICAgICAgICB2YXIgZHkgPSBzcmMuX2Rpc3BsYXlPcmlnaW5ZO1xyXG5cclxuICAgICAgICB2YXIgcGF0aCA9IHNyYy5wYXRoRGF0YTtcclxuICAgICAgICB2YXIgcGF0aExlbmd0aCA9IHBhdGgubGVuZ3RoIC0gMTtcclxuICAgIFxyXG4gICAgICAgIHZhciBweDEgPSBwYXRoWzBdIC0gZHg7XHJcbiAgICAgICAgdmFyIHB5MSA9IHBhdGhbMV0gLSBkeTtcclxuXHJcbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG5cclxuICAgICAgICBjdHgubW92ZVRvKHB4MSwgcHkxKTtcclxuICAgIFxyXG4gICAgICAgIGlmICghc3JjLmNsb3NlUGF0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBhdGhMZW5ndGggLT0gMjtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICBmb3IgKHZhciBpID0gMjsgaSA8IHBhdGhMZW5ndGg7IGkgKz0gMilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBweDIgPSBwYXRoW2ldIC0gZHg7XHJcbiAgICAgICAgICAgIHZhciBweTIgPSBwYXRoW2kgKyAxXSAtIGR5O1xyXG4gICAgXHJcbiAgICAgICAgICAgIGN0eC5saW5lVG8ocHgyLCBweTIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xyXG5cclxuICAgICAgICBpZiAoc3JjLmlzRmlsbGVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgRmlsbFN0eWxlQ2FudmFzKGN0eCwgc3JjKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5maWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3JjLmlzU3Ryb2tlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIExpbmVTdHlsZUNhbnZhcyhjdHgsIHNyYyk7XHJcblxyXG4gICAgICAgICAgICBjdHguc3Ryb2tlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgUmVzdG9yZSB0aGUgY29udGV4dCBzYXZlZCBpbiBTZXRUcmFuc2Zvcm1cclxuICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTdGFyQ2FudmFzUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/star/StarCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/star/StarFactory.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/star/StarFactory.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Star = __webpack_require__(/*! ./Star */ \"./node_modules/phaser/src/gameobjects/shape/star/Star.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Star Shape Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Star Game Object has been built into Phaser.\r\n * \r\n * The Star Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * As the name implies, the Star shape will display a star in your game. You can control several\r\n * aspects of it including the number of points that constitute the star. The default is 5. If\r\n * you change it to 4 it will render as a diamond. If you increase them, you'll get a more spiky\r\n * star shape.\r\n * \r\n * You can also control the inner and outer radius, which is how 'long' each point of the star is.\r\n * Modify these values to create more interesting shapes.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#star\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [points=5] - The number of points on the star.\r\n * @param {number} [innerRadius=32] - The inner radius of the star.\r\n * @param {number} [outerRadius=64] - The outer radius of the star.\r\n * @param {number} [fillColor] - The color the star will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the star will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n *\r\n * @return {Phaser.GameObjects.Star} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('star', function (x, y, points, innerRadius, outerRadius, fillColor, fillAlpha)\r\n{\r\n return this.displayList.add(new Star(this.scene, x, y, points, innerRadius, outerRadius, fillColor, fillAlpha));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9zdGFyL1N0YXJGYWN0b3J5LmpzPzNmOWQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFdBQVcsbUJBQU8sQ0FBQyx3RUFBUTtBQUMzQix3QkFBd0IsbUJBQU8sQ0FBQywyRkFBeUI7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHdCQUF3QjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9zdGFyL1N0YXJGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgU3RhciA9IHJlcXVpcmUoJy4vU3RhcicpO1xyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgU3RhciBTaGFwZSBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFN0YXIgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIFxyXG4gKiBUaGUgU3RhciBTaGFwZSBpcyBhIEdhbWUgT2JqZWN0IHRoYXQgY2FuIGJlIGFkZGVkIHRvIGEgU2NlbmUsIEdyb3VwIG9yIENvbnRhaW5lci4gWW91IGNhblxyXG4gKiB0cmVhdCBpdCBsaWtlIGFueSBvdGhlciBHYW1lIE9iamVjdCBpbiB5b3VyIGdhbWUsIHN1Y2ggYXMgdHdlZW5pbmcgaXQsIHNjYWxpbmcgaXQsIG9yIGVuYWJsaW5nXHJcbiAqIGl0IGZvciBpbnB1dCBvciBwaHlzaWNzLiBJdCBwcm92aWRlcyBhIHF1aWNrIGFuZCBlYXN5IHdheSBmb3IgeW91IHRvIHJlbmRlciB0aGlzIHNoYXBlIGluIHlvdXJcclxuICogZ2FtZSB3aXRob3V0IHVzaW5nIGEgdGV4dHVyZSwgd2hpbGUgc3RpbGwgdGFraW5nIGFkdmFudGFnZSBvZiBiZWluZyBmdWxseSBiYXRjaGVkIGluIFdlYkdMLlxyXG4gKiBcclxuICogVGhpcyBzaGFwZSBzdXBwb3J0cyBib3RoIGZpbGwgYW5kIHN0cm9rZSBjb2xvcnMuXHJcbiAqIFxyXG4gKiBBcyB0aGUgbmFtZSBpbXBsaWVzLCB0aGUgU3RhciBzaGFwZSB3aWxsIGRpc3BsYXkgYSBzdGFyIGluIHlvdXIgZ2FtZS4gWW91IGNhbiBjb250cm9sIHNldmVyYWxcclxuICogYXNwZWN0cyBvZiBpdCBpbmNsdWRpbmcgdGhlIG51bWJlciBvZiBwb2ludHMgdGhhdCBjb25zdGl0dXRlIHRoZSBzdGFyLiBUaGUgZGVmYXVsdCBpcyA1LiBJZlxyXG4gKiB5b3UgY2hhbmdlIGl0IHRvIDQgaXQgd2lsbCByZW5kZXIgYXMgYSBkaWFtb25kLiBJZiB5b3UgaW5jcmVhc2UgdGhlbSwgeW91J2xsIGdldCBhIG1vcmUgc3Bpa3lcclxuICogc3RhciBzaGFwZS5cclxuICogXHJcbiAqIFlvdSBjYW4gYWxzbyBjb250cm9sIHRoZSBpbm5lciBhbmQgb3V0ZXIgcmFkaXVzLCB3aGljaCBpcyBob3cgJ2xvbmcnIGVhY2ggcG9pbnQgb2YgdGhlIHN0YXIgaXMuXHJcbiAqIE1vZGlmeSB0aGVzZSB2YWx1ZXMgdG8gY3JlYXRlIG1vcmUgaW50ZXJlc3Rpbmcgc2hhcGVzLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0RmFjdG9yeSNzdGFyXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtwb2ludHM9NV0gLSBUaGUgbnVtYmVyIG9mIHBvaW50cyBvbiB0aGUgc3Rhci5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtpbm5lclJhZGl1cz0zMl0gLSBUaGUgaW5uZXIgcmFkaXVzIG9mIHRoZSBzdGFyLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW291dGVyUmFkaXVzPTY0XSAtIFRoZSBvdXRlciByYWRpdXMgb2YgdGhlIHN0YXIuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbENvbG9yXSAtIFRoZSBjb2xvciB0aGUgc3RhciB3aWxsIGJlIGZpbGxlZCB3aXRoLCBpLmUuIDB4ZmYwMDAwIGZvciByZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbEFscGhhXSAtIFRoZSBhbHBoYSB0aGUgc3RhciB3aWxsIGJlIGZpbGxlZCB3aXRoLiBZb3UgY2FuIGFsc28gc2V0IHRoZSBhbHBoYSBvZiB0aGUgb3ZlcmFsbCBTaGFwZSB1c2luZyBpdHMgYGFscGhhYCBwcm9wZXJ0eS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlN0YXJ9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdEZhY3RvcnkucmVnaXN0ZXIoJ3N0YXInLCBmdW5jdGlvbiAoeCwgeSwgcG9pbnRzLCBpbm5lclJhZGl1cywgb3V0ZXJSYWRpdXMsIGZpbGxDb2xvciwgZmlsbEFscGhhKVxyXG57XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TGlzdC5hZGQobmV3IFN0YXIodGhpcy5zY2VuZSwgeCwgeSwgcG9pbnRzLCBpbm5lclJhZGl1cywgb3V0ZXJSYWRpdXMsIGZpbGxDb2xvciwgZmlsbEFscGhhKSk7XHJcbn0pO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/star/StarFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/star/StarRender.js":
/*!**********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/star/StarRender.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./StarWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/shape/star/StarWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./StarCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/shape/star/StarCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9zdGFyL1N0YXJSZW5kZXIuanM/NTUwZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsb0VBQXFCO0FBQy9DLG1CQUFtQixtQkFBTyxDQUFDLG9FQUFxQjs7QUFFaEQsSUFBSSxJQUFxQjtBQUN6QjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLGtHQUFxQjtBQUMvQzs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsb0dBQXNCO0FBQ2pEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9zdGFyL1N0YXJSZW5kZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL05PT1AnKTtcclxudmFyIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL05PT1AnKTtcclxuXHJcbmlmICh0eXBlb2YgV0VCR0xfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi9TdGFyV2ViR0xSZW5kZXJlcicpO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIENBTlZBU19SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi9TdGFyQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/star/StarRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/star/StarWebGLRenderer.js":
/*!*****************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/star/StarWebGLRenderer.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillPathWebGL = __webpack_require__(/*! ../FillPathWebGL */ \"./node_modules/phaser/src/gameobjects/shape/FillPathWebGL.js\");\r\nvar StrokePathWebGL = __webpack_require__(/*! ../StrokePathWebGL */ \"./node_modules/phaser/src/gameobjects/shape/StrokePathWebGL.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Star#renderWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Star} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar StarWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var pipeline = this.pipeline;\r\n\r\n var camMatrix = pipeline._tempMatrix1;\r\n var shapeMatrix = pipeline._tempMatrix2;\r\n var calcMatrix = pipeline._tempMatrix3;\r\n\r\n renderer.setPipeline(pipeline);\r\n\r\n shapeMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n camMatrix.copyFrom(camera.matrix);\r\n\r\n if (parentMatrix)\r\n {\r\n // Multiply the camera by the parent matrix\r\n camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n // Undo the camera scroll\r\n shapeMatrix.e = src.x;\r\n shapeMatrix.f = src.y;\r\n }\r\n else\r\n {\r\n shapeMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n shapeMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n }\r\n\r\n camMatrix.multiply(shapeMatrix, calcMatrix);\r\n\r\n var dx = src._displayOriginX;\r\n var dy = src._displayOriginY;\r\n\r\n var alpha = camera.alpha * src.alpha;\r\n\r\n if (src.isFilled)\r\n {\r\n FillPathWebGL(pipeline, calcMatrix, src, alpha, dx, dy);\r\n }\r\n\r\n if (src.isStroked)\r\n {\r\n StrokePathWebGL(pipeline, src, alpha, dx, dy);\r\n }\r\n};\r\n\r\nmodule.exports = StarWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS9zdGFyL1N0YXJXZWJHTFJlbmRlcmVyLmpzPzg2ZTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLHNGQUFrQjtBQUM5QyxzQkFBc0IsbUJBQU8sQ0FBQywwRkFBb0I7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsd0JBQXdCO0FBQ25DLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL3N0YXIvU3RhcldlYkdMUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBGaWxsUGF0aFdlYkdMID0gcmVxdWlyZSgnLi4vRmlsbFBhdGhXZWJHTCcpO1xyXG52YXIgU3Ryb2tlUGF0aFdlYkdMID0gcmVxdWlyZSgnLi4vU3Ryb2tlUGF0aFdlYkdMJyk7XHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIFdlYkdMIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU3RhciNyZW5kZXJXZWJHTFxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIFdlYkdMIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5TdGFyfSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgU3RhcldlYkdMUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgcGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lO1xyXG5cclxuICAgIHZhciBjYW1NYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDE7XHJcbiAgICB2YXIgc2hhcGVNYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDI7XHJcbiAgICB2YXIgY2FsY01hdHJpeCA9IHBpcGVsaW5lLl90ZW1wTWF0cml4MztcclxuXHJcbiAgICByZW5kZXJlci5zZXRQaXBlbGluZShwaXBlbGluZSk7XHJcblxyXG4gICAgc2hhcGVNYXRyaXguYXBwbHlJVFJTKHNyYy54LCBzcmMueSwgc3JjLnJvdGF0aW9uLCBzcmMuc2NhbGVYLCBzcmMuc2NhbGVZKTtcclxuXHJcbiAgICBjYW1NYXRyaXguY29weUZyb20oY2FtZXJhLm1hdHJpeCk7XHJcblxyXG4gICAgaWYgKHBhcmVudE1hdHJpeClcclxuICAgIHtcclxuICAgICAgICAvLyAgTXVsdGlwbHkgdGhlIGNhbWVyYSBieSB0aGUgcGFyZW50IG1hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseVdpdGhPZmZzZXQocGFyZW50TWF0cml4LCAtY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWCwgLWNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3RvclkpO1xyXG5cclxuICAgICAgICAvLyAgVW5kbyB0aGUgY2FtZXJhIHNjcm9sbFxyXG4gICAgICAgIHNoYXBlTWF0cml4LmUgPSBzcmMueDtcclxuICAgICAgICBzaGFwZU1hdHJpeC5mID0gc3JjLnk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgc2hhcGVNYXRyaXguZSAtPSBjYW1lcmEuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYO1xyXG4gICAgICAgIHNoYXBlTWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuICAgIH1cclxuXHJcbiAgICBjYW1NYXRyaXgubXVsdGlwbHkoc2hhcGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG5cclxuICAgIHZhciBkeCA9IHNyYy5fZGlzcGxheU9yaWdpblg7XHJcbiAgICB2YXIgZHkgPSBzcmMuX2Rpc3BsYXlPcmlnaW5ZO1xyXG5cclxuICAgIHZhciBhbHBoYSA9IGNhbWVyYS5hbHBoYSAqIHNyYy5hbHBoYTtcclxuXHJcbiAgICBpZiAoc3JjLmlzRmlsbGVkKVxyXG4gICAge1xyXG4gICAgICAgIEZpbGxQYXRoV2ViR0wocGlwZWxpbmUsIGNhbGNNYXRyaXgsIHNyYywgYWxwaGEsIGR4LCBkeSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNyYy5pc1N0cm9rZWQpXHJcbiAgICB7XHJcbiAgICAgICAgU3Ryb2tlUGF0aFdlYkdMKHBpcGVsaW5lLCBzcmMsIGFscGhhLCBkeCwgZHkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTdGFyV2ViR0xSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/star/StarWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/triangle/Triangle.js":
/*!************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/triangle/Triangle.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Shape = __webpack_require__(/*! ../Shape */ \"./node_modules/phaser/src/gameobjects/shape/Shape.js\");\r\nvar GeomTriangle = __webpack_require__(/*! ../../../geom/triangle/Triangle */ \"./node_modules/phaser/src/geom/triangle/Triangle.js\");\r\nvar TriangleRender = __webpack_require__(/*! ./TriangleRender */ \"./node_modules/phaser/src/gameobjects/shape/triangle/TriangleRender.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Triangle Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * The Triangle consists of 3 lines, joining up to form a triangular shape. You can control the\r\n * position of each point of these lines. The triangle is always closed and cannot have an open\r\n * face. If you require that, consider using a Polygon instead.\r\n *\r\n * @class Triangle\r\n * @extends Phaser.GameObjects.Shape\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.13.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [x1=0] - The horizontal position of the first point in the triangle.\r\n * @param {number} [y1=128] - The vertical position of the first point in the triangle.\r\n * @param {number} [x2=64] - The horizontal position of the second point in the triangle.\r\n * @param {number} [y2=0] - The vertical position of the second point in the triangle.\r\n * @param {number} [x3=128] - The horizontal position of the third point in the triangle.\r\n * @param {number} [y3=128] - The vertical position of the third point in the triangle.\r\n * @param {number} [fillColor] - The color the triangle will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the triangle will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n */\r\nvar Triangle = new Class({\r\n\r\n Extends: Shape,\r\n\r\n Mixins: [\r\n TriangleRender\r\n ],\r\n\r\n initialize:\r\n\r\n function Triangle (scene, x, y, x1, y1, x2, y2, x3, y3, fillColor, fillAlpha)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n if (x1 === undefined) { x1 = 0; }\r\n if (y1 === undefined) { y1 = 128; }\r\n if (x2 === undefined) { x2 = 64; }\r\n if (y2 === undefined) { y2 = 0; }\r\n if (x3 === undefined) { x3 = 128; }\r\n if (y3 === undefined) { y3 = 128; }\r\n\r\n Shape.call(this, scene, 'Triangle', new GeomTriangle(x1, y1, x2, y2, x3, y3));\r\n\r\n var width = this.geom.right - this.geom.left;\r\n var height = this.geom.bottom - this.geom.top;\r\n\r\n this.setPosition(x, y);\r\n this.setSize(width, height);\r\n\r\n if (fillColor !== undefined)\r\n {\r\n this.setFillStyle(fillColor, fillAlpha);\r\n }\r\n\r\n this.updateDisplayOrigin();\r\n this.updateData();\r\n },\r\n\r\n /**\r\n * Sets the data for the lines that make up this Triangle shape.\r\n *\r\n * @method Phaser.GameObjects.Triangle#setTo\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x1=0] - The horizontal position of the first point in the triangle.\r\n * @param {number} [y1=0] - The vertical position of the first point in the triangle.\r\n * @param {number} [x2=0] - The horizontal position of the second point in the triangle.\r\n * @param {number} [y2=0] - The vertical position of the second point in the triangle.\r\n * @param {number} [x3=0] - The horizontal position of the third point in the triangle.\r\n * @param {number} [y3=0] - The vertical position of the third point in the triangle.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setTo: function (x1, y1, x2, y2, x3, y3)\r\n {\r\n this.geom.setTo(x1, y1, x2, y2, x3, y3);\r\n\r\n return this.updateData();\r\n },\r\n\r\n /**\r\n * Internal method that updates the data and path values.\r\n *\r\n * @method Phaser.GameObjects.Triangle#updateData\r\n * @private\r\n * @since 3.13.0\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n updateData: function ()\r\n {\r\n var path = [];\r\n var tri = this.geom;\r\n var line = this._tempLine;\r\n\r\n tri.getLineA(line);\r\n\r\n path.push(line.x1, line.y1, line.x2, line.y2);\r\n\r\n tri.getLineB(line);\r\n\r\n path.push(line.x2, line.y2);\r\n\r\n tri.getLineC(line);\r\n\r\n path.push(line.x2, line.y2);\r\n\r\n this.pathData = path;\r\n\r\n return this;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Triangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS90cmlhbmdsZS9UcmlhbmdsZS5qcz8yN2ExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsc0VBQXNCO0FBQzFDLFlBQVksbUJBQU8sQ0FBQyxzRUFBVTtBQUM5QixtQkFBbUIsbUJBQU8sQ0FBQyw0RkFBaUM7QUFDNUQscUJBQXFCLG1CQUFPLENBQUMsZ0dBQWtCOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPO0FBQ3JDLCtCQUErQixRQUFRO0FBQ3ZDLCtCQUErQixVQUFVO0FBQ3pDLCtCQUErQixTQUFTO0FBQ3hDLCtCQUErQixRQUFRO0FBQ3ZDLCtCQUErQixVQUFVO0FBQ3pDLCtCQUErQixVQUFVOztBQUV6Qzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvdHJpYW5nbGUvVHJpYW5nbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBTaGFwZSA9IHJlcXVpcmUoJy4uL1NoYXBlJyk7XHJcbnZhciBHZW9tVHJpYW5nbGUgPSByZXF1aXJlKCcuLi8uLi8uLi9nZW9tL3RyaWFuZ2xlL1RyaWFuZ2xlJyk7XHJcbnZhciBUcmlhbmdsZVJlbmRlciA9IHJlcXVpcmUoJy4vVHJpYW5nbGVSZW5kZXInKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBUcmlhbmdsZSBTaGFwZSBpcyBhIEdhbWUgT2JqZWN0IHRoYXQgY2FuIGJlIGFkZGVkIHRvIGEgU2NlbmUsIEdyb3VwIG9yIENvbnRhaW5lci4gWW91IGNhblxyXG4gKiB0cmVhdCBpdCBsaWtlIGFueSBvdGhlciBHYW1lIE9iamVjdCBpbiB5b3VyIGdhbWUsIHN1Y2ggYXMgdHdlZW5pbmcgaXQsIHNjYWxpbmcgaXQsIG9yIGVuYWJsaW5nXHJcbiAqIGl0IGZvciBpbnB1dCBvciBwaHlzaWNzLiBJdCBwcm92aWRlcyBhIHF1aWNrIGFuZCBlYXN5IHdheSBmb3IgeW91IHRvIHJlbmRlciB0aGlzIHNoYXBlIGluIHlvdXJcclxuICogZ2FtZSB3aXRob3V0IHVzaW5nIGEgdGV4dHVyZSwgd2hpbGUgc3RpbGwgdGFraW5nIGFkdmFudGFnZSBvZiBiZWluZyBmdWxseSBiYXRjaGVkIGluIFdlYkdMLlxyXG4gKiBcclxuICogVGhpcyBzaGFwZSBzdXBwb3J0cyBib3RoIGZpbGwgYW5kIHN0cm9rZSBjb2xvcnMuXHJcbiAqIFxyXG4gKiBUaGUgVHJpYW5nbGUgY29uc2lzdHMgb2YgMyBsaW5lcywgam9pbmluZyB1cCB0byBmb3JtIGEgdHJpYW5ndWxhciBzaGFwZS4gWW91IGNhbiBjb250cm9sIHRoZVxyXG4gKiBwb3NpdGlvbiBvZiBlYWNoIHBvaW50IG9mIHRoZXNlIGxpbmVzLiBUaGUgdHJpYW5nbGUgaXMgYWx3YXlzIGNsb3NlZCBhbmQgY2Fubm90IGhhdmUgYW4gb3BlblxyXG4gKiBmYWNlLiBJZiB5b3UgcmVxdWlyZSB0aGF0LCBjb25zaWRlciB1c2luZyBhIFBvbHlnb24gaW5zdGVhZC5cclxuICpcclxuICogQGNsYXNzIFRyaWFuZ2xlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5TaGFwZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4xMy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuIEEgR2FtZSBPYmplY3QgY2FuIG9ubHkgYmVsb25nIHRvIG9uZSBTY2VuZSBhdCBhIHRpbWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeDE9MF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgcG9pbnQgaW4gdGhlIHRyaWFuZ2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3kxPTEyOF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIGZpcnN0IHBvaW50IGluIHRoZSB0cmlhbmdsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt4Mj02NF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgc2Vjb25kIHBvaW50IGluIHRoZSB0cmlhbmdsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5Mj0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgc2Vjb25kIHBvaW50IGluIHRoZSB0cmlhbmdsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt4Mz0xMjhdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHRoaXJkIHBvaW50IGluIHRoZSB0cmlhbmdsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5Mz0xMjhdIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSB0aGlyZCBwb2ludCBpbiB0aGUgdHJpYW5nbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbENvbG9yXSAtIFRoZSBjb2xvciB0aGUgdHJpYW5nbGUgd2lsbCBiZSBmaWxsZWQgd2l0aCwgaS5lLiAweGZmMDAwMCBmb3IgcmVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGxBbHBoYV0gLSBUaGUgYWxwaGEgdGhlIHRyaWFuZ2xlIHdpbGwgYmUgZmlsbGVkIHdpdGguIFlvdSBjYW4gYWxzbyBzZXQgdGhlIGFscGhhIG9mIHRoZSBvdmVyYWxsIFNoYXBlIHVzaW5nIGl0cyBgYWxwaGFgIHByb3BlcnR5LlxyXG4gKi9cclxudmFyIFRyaWFuZ2xlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBTaGFwZSxcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBUcmlhbmdsZVJlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFRyaWFuZ2xlIChzY2VuZSwgeCwgeSwgeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgZmlsbENvbG9yLCBmaWxsQWxwaGEpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IDA7IH1cclxuICAgICAgICBpZiAoeDEgPT09IHVuZGVmaW5lZCkgeyB4MSA9IDA7IH1cclxuICAgICAgICBpZiAoeTEgPT09IHVuZGVmaW5lZCkgeyB5MSA9IDEyODsgfVxyXG4gICAgICAgIGlmICh4MiA9PT0gdW5kZWZpbmVkKSB7IHgyID0gNjQ7IH1cclxuICAgICAgICBpZiAoeTIgPT09IHVuZGVmaW5lZCkgeyB5MiA9IDA7IH1cclxuICAgICAgICBpZiAoeDMgPT09IHVuZGVmaW5lZCkgeyB4MyA9IDEyODsgfVxyXG4gICAgICAgIGlmICh5MyA9PT0gdW5kZWZpbmVkKSB7IHkzID0gMTI4OyB9XHJcblxyXG4gICAgICAgIFNoYXBlLmNhbGwodGhpcywgc2NlbmUsICdUcmlhbmdsZScsIG5ldyBHZW9tVHJpYW5nbGUoeDEsIHkxLCB4MiwgeTIsIHgzLCB5MykpO1xyXG5cclxuICAgICAgICB2YXIgd2lkdGggPSB0aGlzLmdlb20ucmlnaHQgLSB0aGlzLmdlb20ubGVmdDtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZW9tLmJvdHRvbSAtIHRoaXMuZ2VvbS50b3A7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24oeCwgeSk7XHJcbiAgICAgICAgdGhpcy5zZXRTaXplKHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICBpZiAoZmlsbENvbG9yICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldEZpbGxTdHlsZShmaWxsQ29sb3IsIGZpbGxBbHBoYSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXlPcmlnaW4oKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhdGEoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBkYXRhIGZvciB0aGUgbGluZXMgdGhhdCBtYWtlIHVwIHRoaXMgVHJpYW5nbGUgc2hhcGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVHJpYW5nbGUjc2V0VG9cclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3gxPTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIGZpcnN0IHBvaW50IGluIHRoZSB0cmlhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeTE9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIGZpcnN0IHBvaW50IGluIHRoZSB0cmlhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeDI9MF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgc2Vjb25kIHBvaW50IGluIHRoZSB0cmlhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeTI9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHNlY29uZCBwb2ludCBpbiB0aGUgdHJpYW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3gzPTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHRoaXJkIHBvaW50IGluIHRoZSB0cmlhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeTM9MF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHRoaXJkIHBvaW50IGluIHRoZSB0cmlhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRUbzogZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5nZW9tLnNldFRvKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVEYXRhKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRoYXQgdXBkYXRlcyB0aGUgZGF0YSBhbmQgcGF0aCB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVHJpYW5nbGUjdXBkYXRlRGF0YVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVEYXRhOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBwYXRoID0gW107XHJcbiAgICAgICAgdmFyIHRyaSA9IHRoaXMuZ2VvbTtcclxuICAgICAgICB2YXIgbGluZSA9IHRoaXMuX3RlbXBMaW5lO1xyXG5cclxuICAgICAgICB0cmkuZ2V0TGluZUEobGluZSk7XHJcblxyXG4gICAgICAgIHBhdGgucHVzaChsaW5lLngxLCBsaW5lLnkxLCBsaW5lLngyLCBsaW5lLnkyKTtcclxuXHJcbiAgICAgICAgdHJpLmdldExpbmVCKGxpbmUpO1xyXG5cclxuICAgICAgICBwYXRoLnB1c2gobGluZS54MiwgbGluZS55Mik7XHJcblxyXG4gICAgICAgIHRyaS5nZXRMaW5lQyhsaW5lKTtcclxuXHJcbiAgICAgICAgcGF0aC5wdXNoKGxpbmUueDIsIGxpbmUueTIpO1xyXG5cclxuICAgICAgICB0aGlzLnBhdGhEYXRhID0gcGF0aDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVHJpYW5nbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/triangle/Triangle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/triangle/TriangleCanvasRenderer.js":
/*!**************************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/triangle/TriangleCanvasRenderer.js ***!
\**************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FillStyleCanvas = __webpack_require__(/*! ../FillStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/FillStyleCanvas.js\");\r\nvar LineStyleCanvas = __webpack_require__(/*! ../LineStyleCanvas */ \"./node_modules/phaser/src/gameobjects/shape/LineStyleCanvas.js\");\r\nvar SetTransform = __webpack_require__(/*! ../../../renderer/canvas/utils/SetTransform */ \"./node_modules/phaser/src/renderer/canvas/utils/SetTransform.js\");\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Triangle#renderCanvas\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Triangle} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar TriangleCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var ctx = renderer.currentContext;\r\n\r\n if (SetTransform(renderer, ctx, src, camera, parentMatrix))\r\n {\r\n var dx = src._displayOriginX;\r\n var dy = src._displayOriginY;\r\n\r\n var x1 = src.geom.x1 - dx;\r\n var y1 = src.geom.y1 - dy;\r\n var x2 = src.geom.x2 - dx;\r\n var y2 = src.geom.y2 - dy;\r\n var x3 = src.geom.x3 - dx;\r\n var y3 = src.geom.y3 - dy;\r\n\r\n ctx.beginPath();\r\n\r\n ctx.moveTo(x1, y1);\r\n ctx.lineTo(x2, y2);\r\n ctx.lineTo(x3, y3);\r\n\r\n ctx.closePath();\r\n\r\n if (src.isFilled)\r\n {\r\n FillStyleCanvas(ctx, src);\r\n\r\n ctx.fill();\r\n }\r\n\r\n if (src.isStroked)\r\n {\r\n LineStyleCanvas(ctx, src);\r\n\r\n ctx.stroke();\r\n }\r\n\r\n // Restore the context saved in SetTransform\r\n ctx.restore();\r\n }\r\n};\r\n\r\nmodule.exports = TriangleCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS90cmlhbmdsZS9UcmlhbmdsZUNhbnZhc1JlbmRlcmVyLmpzPzkwYTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHNCQUFzQixtQkFBTyxDQUFDLDBGQUFvQjtBQUNsRCxzQkFBc0IsbUJBQU8sQ0FBQywwRkFBb0I7QUFDbEQsbUJBQW1CLG1CQUFPLENBQUMsb0hBQTZDOztBQUV4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNDQUFzQztBQUNqRCxXQUFXLDRCQUE0QjtBQUN2QyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL3RyaWFuZ2xlL1RyaWFuZ2xlQ2FudmFzUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBGaWxsU3R5bGVDYW52YXMgPSByZXF1aXJlKCcuLi9GaWxsU3R5bGVDYW52YXMnKTtcclxudmFyIExpbmVTdHlsZUNhbnZhcyA9IHJlcXVpcmUoJy4uL0xpbmVTdHlsZUNhbnZhcycpO1xyXG52YXIgU2V0VHJhbnNmb3JtID0gcmVxdWlyZSgnLi4vLi4vLi4vcmVuZGVyZXIvY2FudmFzL3V0aWxzL1NldFRyYW5zZm9ybScpO1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBDYW52YXMgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UcmlhbmdsZSNyZW5kZXJDYW52YXNcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIENhbnZhcyByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuVHJpYW5nbGV9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBUcmlhbmdsZUNhbnZhc1JlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgdmFyIGN0eCA9IHJlbmRlcmVyLmN1cnJlbnRDb250ZXh0O1xyXG5cclxuICAgIGlmIChTZXRUcmFuc2Zvcm0ocmVuZGVyZXIsIGN0eCwgc3JjLCBjYW1lcmEsIHBhcmVudE1hdHJpeCkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGR4ID0gc3JjLl9kaXNwbGF5T3JpZ2luWDtcclxuICAgICAgICB2YXIgZHkgPSBzcmMuX2Rpc3BsYXlPcmlnaW5ZO1xyXG5cclxuICAgICAgICB2YXIgeDEgPSBzcmMuZ2VvbS54MSAtIGR4O1xyXG4gICAgICAgIHZhciB5MSA9IHNyYy5nZW9tLnkxIC0gZHk7XHJcbiAgICAgICAgdmFyIHgyID0gc3JjLmdlb20ueDIgLSBkeDtcclxuICAgICAgICB2YXIgeTIgPSBzcmMuZ2VvbS55MiAtIGR5O1xyXG4gICAgICAgIHZhciB4MyA9IHNyYy5nZW9tLngzIC0gZHg7XHJcbiAgICAgICAgdmFyIHkzID0gc3JjLmdlb20ueTMgLSBkeTtcclxuXHJcbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG5cclxuICAgICAgICBjdHgubW92ZVRvKHgxLCB5MSk7XHJcbiAgICAgICAgY3R4LmxpbmVUbyh4MiwgeTIpO1xyXG4gICAgICAgIGN0eC5saW5lVG8oeDMsIHkzKTtcclxuXHJcbiAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xyXG5cclxuICAgICAgICBpZiAoc3JjLmlzRmlsbGVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgRmlsbFN0eWxlQ2FudmFzKGN0eCwgc3JjKTtcclxuXHJcbiAgICAgICAgICAgIGN0eC5maWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3JjLmlzU3Ryb2tlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIExpbmVTdHlsZUNhbnZhcyhjdHgsIHNyYyk7XHJcblxyXG4gICAgICAgICAgICBjdHguc3Ryb2tlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgUmVzdG9yZSB0aGUgY29udGV4dCBzYXZlZCBpbiBTZXRUcmFuc2Zvcm1cclxuICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUcmlhbmdsZUNhbnZhc1JlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/triangle/TriangleCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/triangle/TriangleFactory.js":
/*!*******************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/triangle/TriangleFactory.js ***!
\*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar Triangle = __webpack_require__(/*! ./Triangle */ \"./node_modules/phaser/src/gameobjects/shape/triangle/Triangle.js\");\r\n\r\n/**\r\n * Creates a new Triangle Shape Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Triangle Game Object has been built into Phaser.\r\n * \r\n * The Triangle Shape is a Game Object that can be added to a Scene, Group or Container. You can\r\n * treat it like any other Game Object in your game, such as tweening it, scaling it, or enabling\r\n * it for input or physics. It provides a quick and easy way for you to render this shape in your\r\n * game without using a texture, while still taking advantage of being fully batched in WebGL.\r\n * \r\n * This shape supports both fill and stroke colors.\r\n * \r\n * The Triangle consists of 3 lines, joining up to form a triangular shape. You can control the\r\n * position of each point of these lines. The triangle is always closed and cannot have an open\r\n * face. If you require that, consider using a Polygon instead.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#triangle\r\n * @since 3.13.0\r\n *\r\n * @param {number} [x=0] - The horizontal position of this Game Object in the world.\r\n * @param {number} [y=0] - The vertical position of this Game Object in the world.\r\n * @param {number} [x1=0] - The horizontal position of the first point in the triangle.\r\n * @param {number} [y1=128] - The vertical position of the first point in the triangle.\r\n * @param {number} [x2=64] - The horizontal position of the second point in the triangle.\r\n * @param {number} [y2=0] - The vertical position of the second point in the triangle.\r\n * @param {number} [x3=128] - The horizontal position of the third point in the triangle.\r\n * @param {number} [y3=128] - The vertical position of the third point in the triangle.\r\n * @param {number} [fillColor] - The color the triangle will be filled with, i.e. 0xff0000 for red.\r\n * @param {number} [fillAlpha] - The alpha the triangle will be filled with. You can also set the alpha of the overall Shape using its `alpha` property.\r\n *\r\n * @return {Phaser.GameObjects.Triangle} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('triangle', function (x, y, x1, y1, x2, y2, x3, y3, fillColor, fillAlpha)\r\n{\r\n return this.displayList.add(new Triangle(this.scene, x, y, x1, y1, x2, y2, x3, y3, fillColor, fillAlpha));\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS90cmlhbmdsZS9UcmlhbmdsZUZhY3RvcnkuanM/MGUxMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsd0JBQXdCLG1CQUFPLENBQUMsMkZBQXlCO0FBQ3pELGVBQWUsbUJBQU8sQ0FBQyxvRkFBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLDRCQUE0QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS90cmlhbmdsZS9UcmlhbmdsZUZhY3RvcnkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHYW1lT2JqZWN0RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uL0dhbWVPYmplY3RGYWN0b3J5Jyk7XHJcbnZhciBUcmlhbmdsZSA9IHJlcXVpcmUoJy4vVHJpYW5nbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFRyaWFuZ2xlIFNoYXBlIEdhbWUgT2JqZWN0IGFuZCBhZGRzIGl0IHRvIHRoZSBTY2VuZS5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgVHJpYW5nbGUgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIFxyXG4gKiBUaGUgVHJpYW5nbGUgU2hhcGUgaXMgYSBHYW1lIE9iamVjdCB0aGF0IGNhbiBiZSBhZGRlZCB0byBhIFNjZW5lLCBHcm91cCBvciBDb250YWluZXIuIFlvdSBjYW5cclxuICogdHJlYXQgaXQgbGlrZSBhbnkgb3RoZXIgR2FtZSBPYmplY3QgaW4geW91ciBnYW1lLCBzdWNoIGFzIHR3ZWVuaW5nIGl0LCBzY2FsaW5nIGl0LCBvciBlbmFibGluZ1xyXG4gKiBpdCBmb3IgaW5wdXQgb3IgcGh5c2ljcy4gSXQgcHJvdmlkZXMgYSBxdWljayBhbmQgZWFzeSB3YXkgZm9yIHlvdSB0byByZW5kZXIgdGhpcyBzaGFwZSBpbiB5b3VyXHJcbiAqIGdhbWUgd2l0aG91dCB1c2luZyBhIHRleHR1cmUsIHdoaWxlIHN0aWxsIHRha2luZyBhZHZhbnRhZ2Ugb2YgYmVpbmcgZnVsbHkgYmF0Y2hlZCBpbiBXZWJHTC5cclxuICogXHJcbiAqIFRoaXMgc2hhcGUgc3VwcG9ydHMgYm90aCBmaWxsIGFuZCBzdHJva2UgY29sb3JzLlxyXG4gKiBcclxuICogVGhlIFRyaWFuZ2xlIGNvbnNpc3RzIG9mIDMgbGluZXMsIGpvaW5pbmcgdXAgdG8gZm9ybSBhIHRyaWFuZ3VsYXIgc2hhcGUuIFlvdSBjYW4gY29udHJvbCB0aGVcclxuICogcG9zaXRpb24gb2YgZWFjaCBwb2ludCBvZiB0aGVzZSBsaW5lcy4gVGhlIHRyaWFuZ2xlIGlzIGFsd2F5cyBjbG9zZWQgYW5kIGNhbm5vdCBoYXZlIGFuIG9wZW5cclxuICogZmFjZS4gSWYgeW91IHJlcXVpcmUgdGhhdCwgY29uc2lkZXIgdXNpbmcgYSBQb2x5Z29uIGluc3RlYWQuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I3RyaWFuZ2xlXHJcbiAqIEBzaW5jZSAzLjEzLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt4MT0wXSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBwb2ludCBpbiB0aGUgdHJpYW5nbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeTE9MTI4XSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgcG9pbnQgaW4gdGhlIHRyaWFuZ2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3gyPTY0XSAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBzZWNvbmQgcG9pbnQgaW4gdGhlIHRyaWFuZ2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3kyPTBdIC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBzZWNvbmQgcG9pbnQgaW4gdGhlIHRyaWFuZ2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3gzPTEyOF0gLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgdGhpcmQgcG9pbnQgaW4gdGhlIHRyaWFuZ2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3kzPTEyOF0gLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHRoaXJkIHBvaW50IGluIHRoZSB0cmlhbmdsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsQ29sb3JdIC0gVGhlIGNvbG9yIHRoZSB0cmlhbmdsZSB3aWxsIGJlIGZpbGxlZCB3aXRoLCBpLmUuIDB4ZmYwMDAwIGZvciByZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbEFscGhhXSAtIFRoZSBhbHBoYSB0aGUgdHJpYW5nbGUgd2lsbCBiZSBmaWxsZWQgd2l0aC4gWW91IGNhbiBhbHNvIHNldCB0aGUgYWxwaGEgb2YgdGhlIG92ZXJhbGwgU2hhcGUgdXNpbmcgaXRzIGBhbHBoYWAgcHJvcGVydHkuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UcmlhbmdsZX0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0RmFjdG9yeS5yZWdpc3RlcigndHJpYW5nbGUnLCBmdW5jdGlvbiAoeCwgeSwgeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgZmlsbENvbG9yLCBmaWxsQWxwaGEpXHJcbntcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXlMaXN0LmFkZChuZXcgVHJpYW5nbGUodGhpcy5zY2VuZSwgeCwgeSwgeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgZmlsbENvbG9yLCBmaWxsQWxwaGEpKTtcclxufSk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/triangle/TriangleFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/triangle/TriangleRender.js":
/*!******************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/triangle/TriangleRender.js ***!
\******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./TriangleWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/shape/triangle/TriangleWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./TriangleCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/shape/triangle/TriangleCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS90cmlhbmdsZS9UcmlhbmdsZVJlbmRlci5qcz8zZGUzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxvRUFBcUI7QUFDL0MsbUJBQW1CLG1CQUFPLENBQUMsb0VBQXFCOztBQUVoRCxJQUFJLElBQXFCO0FBQ3pCO0FBQ0Esa0JBQWtCLG1CQUFPLENBQUMsOEdBQXlCO0FBQ25EOztBQUVBLElBQUksSUFBc0I7QUFDMUI7QUFDQSxtQkFBbUIsbUJBQU8sQ0FBQyxnSEFBMEI7QUFDckQ7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3NoYXBlL3RyaWFuZ2xlL1RyaWFuZ2xlUmVuZGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9OT09QJyk7XHJcbnZhciByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9OT09QJyk7XHJcblxyXG5pZiAodHlwZW9mIFdFQkdMX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4vVHJpYW5nbGVXZWJHTFJlbmRlcmVyJyk7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgQ0FOVkFTX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuL1RyaWFuZ2xlQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/triangle/TriangleRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/shape/triangle/TriangleWebGLRenderer.js":
/*!*************************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/shape/triangle/TriangleWebGLRenderer.js ***!
\*************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar StrokePathWebGL = __webpack_require__(/*! ../StrokePathWebGL */ \"./node_modules/phaser/src/gameobjects/shape/StrokePathWebGL.js\");\r\nvar Utils = __webpack_require__(/*! ../../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Triangle#renderWebGL\r\n * @since 3.13.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Triangle} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar TriangleWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n var pipeline = this.pipeline;\r\n\r\n var camMatrix = pipeline._tempMatrix1;\r\n var shapeMatrix = pipeline._tempMatrix2;\r\n var calcMatrix = pipeline._tempMatrix3;\r\n\r\n renderer.setPipeline(pipeline);\r\n\r\n shapeMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);\r\n\r\n camMatrix.copyFrom(camera.matrix);\r\n\r\n if (parentMatrix)\r\n {\r\n // Multiply the camera by the parent matrix\r\n camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);\r\n\r\n // Undo the camera scroll\r\n shapeMatrix.e = src.x;\r\n shapeMatrix.f = src.y;\r\n }\r\n else\r\n {\r\n shapeMatrix.e -= camera.scrollX * src.scrollFactorX;\r\n shapeMatrix.f -= camera.scrollY * src.scrollFactorY;\r\n }\r\n\r\n camMatrix.multiply(shapeMatrix, calcMatrix);\r\n\r\n var dx = src._displayOriginX;\r\n var dy = src._displayOriginY;\r\n var alpha = camera.alpha * src.alpha;\r\n\r\n if (src.isFilled)\r\n {\r\n var fillTint = pipeline.fillTint;\r\n var fillTintColor = Utils.getTintAppendFloatAlphaAndSwap(src.fillColor, src.fillAlpha * alpha);\r\n\r\n fillTint.TL = fillTintColor;\r\n fillTint.TR = fillTintColor;\r\n fillTint.BL = fillTintColor;\r\n fillTint.BR = fillTintColor;\r\n\r\n var x1 = src.geom.x1 - dx;\r\n var y1 = src.geom.y1 - dy;\r\n var x2 = src.geom.x2 - dx;\r\n var y2 = src.geom.y2 - dy;\r\n var x3 = src.geom.x3 - dx;\r\n var y3 = src.geom.y3 - dy;\r\n\r\n pipeline.setTexture2D();\r\n\r\n pipeline.batchFillTriangle(\r\n x1,\r\n y1,\r\n x2,\r\n y2,\r\n x3,\r\n y3,\r\n shapeMatrix,\r\n camMatrix\r\n );\r\n }\r\n\r\n if (src.isStroked)\r\n {\r\n StrokePathWebGL(pipeline, src, alpha, dx, dy);\r\n }\r\n};\r\n\r\nmodule.exports = TriangleWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zaGFwZS90cmlhbmdsZS9UcmlhbmdsZVdlYkdMUmVuZGVyZXIuanM/ZTA3NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsc0JBQXNCLG1CQUFPLENBQUMsMEZBQW9CO0FBQ2xELFlBQVksbUJBQU8sQ0FBQyx3RkFBK0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsNEJBQTRCO0FBQ3ZDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc2hhcGUvdHJpYW5nbGUvVHJpYW5nbGVXZWJHTFJlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgU3Ryb2tlUGF0aFdlYkdMID0gcmVxdWlyZSgnLi4vU3Ryb2tlUGF0aFdlYkdMJyk7XHJcbnZhciBVdGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3JlbmRlcmVyL3dlYmdsL1V0aWxzJyk7XHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIFdlYkdMIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVHJpYW5nbGUjcmVuZGVyV2ViR0xcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBXZWJHTCByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuVHJpYW5nbGV9IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBUcmlhbmdsZVdlYkdMUmVuZGVyZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNyYywgaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UsIGNhbWVyYSwgcGFyZW50TWF0cml4KVxyXG57XHJcbiAgICB2YXIgcGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lO1xyXG5cclxuICAgIHZhciBjYW1NYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDE7XHJcbiAgICB2YXIgc2hhcGVNYXRyaXggPSBwaXBlbGluZS5fdGVtcE1hdHJpeDI7XHJcbiAgICB2YXIgY2FsY01hdHJpeCA9IHBpcGVsaW5lLl90ZW1wTWF0cml4MztcclxuXHJcbiAgICByZW5kZXJlci5zZXRQaXBlbGluZShwaXBlbGluZSk7XHJcblxyXG4gICAgc2hhcGVNYXRyaXguYXBwbHlJVFJTKHNyYy54LCBzcmMueSwgc3JjLnJvdGF0aW9uLCBzcmMuc2NhbGVYLCBzcmMuc2NhbGVZKTtcclxuXHJcbiAgICBjYW1NYXRyaXguY29weUZyb20oY2FtZXJhLm1hdHJpeCk7XHJcblxyXG4gICAgaWYgKHBhcmVudE1hdHJpeClcclxuICAgIHtcclxuICAgICAgICAvLyAgTXVsdGlwbHkgdGhlIGNhbWVyYSBieSB0aGUgcGFyZW50IG1hdHJpeFxyXG4gICAgICAgIGNhbU1hdHJpeC5tdWx0aXBseVdpdGhPZmZzZXQocGFyZW50TWF0cml4LCAtY2FtZXJhLnNjcm9sbFggKiBzcmMuc2Nyb2xsRmFjdG9yWCwgLWNhbWVyYS5zY3JvbGxZICogc3JjLnNjcm9sbEZhY3RvclkpO1xyXG5cclxuICAgICAgICAvLyAgVW5kbyB0aGUgY2FtZXJhIHNjcm9sbFxyXG4gICAgICAgIHNoYXBlTWF0cml4LmUgPSBzcmMueDtcclxuICAgICAgICBzaGFwZU1hdHJpeC5mID0gc3JjLnk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgc2hhcGVNYXRyaXguZSAtPSBjYW1lcmEuc2Nyb2xsWCAqIHNyYy5zY3JvbGxGYWN0b3JYO1xyXG4gICAgICAgIHNoYXBlTWF0cml4LmYgLT0gY2FtZXJhLnNjcm9sbFkgKiBzcmMuc2Nyb2xsRmFjdG9yWTtcclxuICAgIH1cclxuXHJcbiAgICBjYW1NYXRyaXgubXVsdGlwbHkoc2hhcGVNYXRyaXgsIGNhbGNNYXRyaXgpO1xyXG5cclxuICAgIHZhciBkeCA9IHNyYy5fZGlzcGxheU9yaWdpblg7XHJcbiAgICB2YXIgZHkgPSBzcmMuX2Rpc3BsYXlPcmlnaW5ZO1xyXG4gICAgdmFyIGFscGhhID0gY2FtZXJhLmFscGhhICogc3JjLmFscGhhO1xyXG5cclxuICAgIGlmIChzcmMuaXNGaWxsZWQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGZpbGxUaW50ID0gcGlwZWxpbmUuZmlsbFRpbnQ7XHJcbiAgICAgICAgdmFyIGZpbGxUaW50Q29sb3IgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYUFuZFN3YXAoc3JjLmZpbGxDb2xvciwgc3JjLmZpbGxBbHBoYSAqIGFscGhhKTtcclxuXHJcbiAgICAgICAgZmlsbFRpbnQuVEwgPSBmaWxsVGludENvbG9yO1xyXG4gICAgICAgIGZpbGxUaW50LlRSID0gZmlsbFRpbnRDb2xvcjtcclxuICAgICAgICBmaWxsVGludC5CTCA9IGZpbGxUaW50Q29sb3I7XHJcbiAgICAgICAgZmlsbFRpbnQuQlIgPSBmaWxsVGludENvbG9yO1xyXG5cclxuICAgICAgICB2YXIgeDEgPSBzcmMuZ2VvbS54MSAtIGR4O1xyXG4gICAgICAgIHZhciB5MSA9IHNyYy5nZW9tLnkxIC0gZHk7XHJcbiAgICAgICAgdmFyIHgyID0gc3JjLmdlb20ueDIgLSBkeDtcclxuICAgICAgICB2YXIgeTIgPSBzcmMuZ2VvbS55MiAtIGR5O1xyXG4gICAgICAgIHZhciB4MyA9IHNyYy5nZW9tLngzIC0gZHg7XHJcbiAgICAgICAgdmFyIHkzID0gc3JjLmdlb20ueTMgLSBkeTtcclxuXHJcbiAgICAgICAgcGlwZWxpbmUuc2V0VGV4dHVyZTJEKCk7XHJcblxyXG4gICAgICAgIHBpcGVsaW5lLmJhdGNoRmlsbFRyaWFuZ2xlKFxyXG4gICAgICAgICAgICB4MSxcclxuICAgICAgICAgICAgeTEsXHJcbiAgICAgICAgICAgIHgyLFxyXG4gICAgICAgICAgICB5MixcclxuICAgICAgICAgICAgeDMsXHJcbiAgICAgICAgICAgIHkzLFxyXG4gICAgICAgICAgICBzaGFwZU1hdHJpeCxcclxuICAgICAgICAgICAgY2FtTWF0cml4XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3JjLmlzU3Ryb2tlZClcclxuICAgIHtcclxuICAgICAgICBTdHJva2VQYXRoV2ViR0wocGlwZWxpbmUsIHNyYywgYWxwaGEsIGR4LCBkeSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRyaWFuZ2xlV2ViR0xSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/shape/triangle/TriangleWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/sprite/Sprite.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/sprite/Sprite.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar SpriteRender = __webpack_require__(/*! ./SpriteRender */ \"./node_modules/phaser/src/gameobjects/sprite/SpriteRender.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Sprite Game Object.\r\n *\r\n * A Sprite Game Object is used for the display of both static and animated images in your game.\r\n * Sprites can have input events and physics bodies. They can also be tweened, tinted, scrolled\r\n * and animated.\r\n *\r\n * The main difference between a Sprite and an Image Game Object is that you cannot animate Images.\r\n * As such, Sprites take a fraction longer to process and have a larger API footprint due to the Animation\r\n * Component. If you do not require animation then you can safely use Images to replace Sprites in all cases.\r\n *\r\n * @class Sprite\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Flip\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Size\r\n * @extends Phaser.GameObjects.Components.TextureCrop\r\n * @extends Phaser.GameObjects.Components.Tint\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n */\r\nvar Sprite = new Class({\r\n\r\n Extends: GameObject,\r\n\r\n Mixins: [\r\n Components.Alpha,\r\n Components.BlendMode,\r\n Components.Depth,\r\n Components.Flip,\r\n Components.GetBounds,\r\n Components.Mask,\r\n Components.Origin,\r\n Components.Pipeline,\r\n Components.ScrollFactor,\r\n Components.Size,\r\n Components.TextureCrop,\r\n Components.Tint,\r\n Components.Transform,\r\n Components.Visible,\r\n SpriteRender\r\n ],\r\n\r\n initialize:\r\n\r\n function Sprite (scene, x, y, texture, frame)\r\n {\r\n GameObject.call(this, scene, 'Sprite');\r\n\r\n /**\r\n * The internal crop data object, as used by `setCrop` and passed to the `Frame.setCropUVs` method.\r\n *\r\n * @name Phaser.GameObjects.Sprite#_crop\r\n * @type {object}\r\n * @private\r\n * @since 3.11.0\r\n */\r\n this._crop = this.resetCropObject();\r\n\r\n /**\r\n * The Animation Controller of this Sprite.\r\n *\r\n * @name Phaser.GameObjects.Sprite#anims\r\n * @type {Phaser.GameObjects.Components.Animation}\r\n * @since 3.0.0\r\n */\r\n this.anims = new Components.Animation(this);\r\n\r\n this.setTexture(texture, frame);\r\n this.setPosition(x, y);\r\n this.setSizeToFrame();\r\n this.setOriginFromFrame();\r\n this.initPipeline();\r\n },\r\n\r\n /**\r\n * Update this Sprite's animations.\r\n *\r\n * @method Phaser.GameObjects.Sprite#preUpdate\r\n * @protected\r\n * @since 3.0.0\r\n *\r\n * @param {number} time - The current timestamp.\r\n * @param {number} delta - The delta time, in ms, elapsed since the last frame.\r\n */\r\n preUpdate: function (time, delta)\r\n {\r\n this.anims.update(time, delta);\r\n },\r\n\r\n /**\r\n * Start playing the given animation.\r\n *\r\n * @method Phaser.GameObjects.Sprite#play\r\n * @since 3.0.0\r\n *\r\n * @param {string} key - The string-based key of the animation to play.\r\n * @param {boolean} [ignoreIfPlaying=false] - If an animation is already playing then ignore this call.\r\n * @param {integer} [startFrame=0] - Optionally start the animation playing from this frame index.\r\n *\r\n * @return {Phaser.GameObjects.Sprite} This Game Object.\r\n */\r\n play: function (key, ignoreIfPlaying, startFrame)\r\n {\r\n this.anims.play(key, ignoreIfPlaying, startFrame);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Build a JSON representation of this Sprite.\r\n *\r\n * @method Phaser.GameObjects.Sprite#toJSON\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Types.GameObjects.JSONGameObject} A JSON representation of the Game Object.\r\n */\r\n toJSON: function ()\r\n {\r\n var data = Components.ToJSON(this);\r\n\r\n // Extra Sprite data is added here\r\n\r\n return data;\r\n },\r\n\r\n /**\r\n * Handles the pre-destroy step for the Sprite, which removes the Animation component.\r\n *\r\n * @method Phaser.GameObjects.Sprite#preDestroy\r\n * @private\r\n * @since 3.14.0\r\n */\r\n preDestroy: function ()\r\n {\r\n this.anims.destroy();\r\n\r\n this.anims = undefined;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Sprite;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zcHJpdGUvU3ByaXRlLmpzP2VhMzMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsZ0ZBQWU7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsMEVBQWU7QUFDeEMsbUJBQW1CLG1CQUFPLENBQUMsb0ZBQWdCOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiwwQkFBMEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix3Q0FBd0M7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3Nwcml0ZS9TcHJpdGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cycpO1xyXG52YXIgR2FtZU9iamVjdCA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3QnKTtcclxudmFyIFNwcml0ZVJlbmRlciA9IHJlcXVpcmUoJy4vU3ByaXRlUmVuZGVyJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIFNwcml0ZSBHYW1lIE9iamVjdC5cclxuICpcclxuICogQSBTcHJpdGUgR2FtZSBPYmplY3QgaXMgdXNlZCBmb3IgdGhlIGRpc3BsYXkgb2YgYm90aCBzdGF0aWMgYW5kIGFuaW1hdGVkIGltYWdlcyBpbiB5b3VyIGdhbWUuXHJcbiAqIFNwcml0ZXMgY2FuIGhhdmUgaW5wdXQgZXZlbnRzIGFuZCBwaHlzaWNzIGJvZGllcy4gVGhleSBjYW4gYWxzbyBiZSB0d2VlbmVkLCB0aW50ZWQsIHNjcm9sbGVkXHJcbiAqIGFuZCBhbmltYXRlZC5cclxuICpcclxuICogVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGEgU3ByaXRlIGFuZCBhbiBJbWFnZSBHYW1lIE9iamVjdCBpcyB0aGF0IHlvdSBjYW5ub3QgYW5pbWF0ZSBJbWFnZXMuXHJcbiAqIEFzIHN1Y2gsIFNwcml0ZXMgdGFrZSBhIGZyYWN0aW9uIGxvbmdlciB0byBwcm9jZXNzIGFuZCBoYXZlIGEgbGFyZ2VyIEFQSSBmb290cHJpbnQgZHVlIHRvIHRoZSBBbmltYXRpb25cclxuICogQ29tcG9uZW50LiBJZiB5b3UgZG8gbm90IHJlcXVpcmUgYW5pbWF0aW9uIHRoZW4geW91IGNhbiBzYWZlbHkgdXNlIEltYWdlcyB0byByZXBsYWNlIFNwcml0ZXMgaW4gYWxsIGNhc2VzLlxyXG4gKlxyXG4gKiBAY2xhc3MgU3ByaXRlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbHBoYVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5CbGVuZE1vZGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGhcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRmxpcFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHNcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuTWFza1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5PcmlnaW5cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGlwZWxpbmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2Nyb2xsRmFjdG9yXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNpemVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGV4dHVyZUNyb3BcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVGludFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVmlzaWJsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5TY2VuZX0gc2NlbmUgLSBUaGUgU2NlbmUgdG8gd2hpY2ggdGhpcyBHYW1lIE9iamVjdCBiZWxvbmdzLiBBIEdhbWUgT2JqZWN0IGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgU2NlbmUgYXQgYSB0aW1lLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRleHR1cmUgLSBUaGUga2V5IG9mIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gcmVuZGVyIHdpdGgsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBBbiBvcHRpb25hbCBmcmFtZSBmcm9tIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyaW5nIHdpdGguXHJcbiAqL1xyXG52YXIgU3ByaXRlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBHYW1lT2JqZWN0LFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIENvbXBvbmVudHMuQWxwaGEsXHJcbiAgICAgICAgQ29tcG9uZW50cy5CbGVuZE1vZGUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5EZXB0aCxcclxuICAgICAgICBDb21wb25lbnRzLkZsaXAsXHJcbiAgICAgICAgQ29tcG9uZW50cy5HZXRCb3VuZHMsXHJcbiAgICAgICAgQ29tcG9uZW50cy5NYXNrLFxyXG4gICAgICAgIENvbXBvbmVudHMuT3JpZ2luLFxyXG4gICAgICAgIENvbXBvbmVudHMuUGlwZWxpbmUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5TY3JvbGxGYWN0b3IsXHJcbiAgICAgICAgQ29tcG9uZW50cy5TaXplLFxyXG4gICAgICAgIENvbXBvbmVudHMuVGV4dHVyZUNyb3AsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UaW50LFxyXG4gICAgICAgIENvbXBvbmVudHMuVHJhbnNmb3JtLFxyXG4gICAgICAgIENvbXBvbmVudHMuVmlzaWJsZSxcclxuICAgICAgICBTcHJpdGVSZW5kZXJcclxuICAgIF0sXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBTcHJpdGUgKHNjZW5lLCB4LCB5LCB0ZXh0dXJlLCBmcmFtZSlcclxuICAgIHtcclxuICAgICAgICBHYW1lT2JqZWN0LmNhbGwodGhpcywgc2NlbmUsICdTcHJpdGUnKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGludGVybmFsIGNyb3AgZGF0YSBvYmplY3QsIGFzIHVzZWQgYnkgYHNldENyb3BgIGFuZCBwYXNzZWQgdG8gdGhlIGBGcmFtZS5zZXRDcm9wVVZzYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlI19jcm9wXHJcbiAgICAgICAgICogQHR5cGUge29iamVjdH1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9jcm9wID0gdGhpcy5yZXNldENyb3BPYmplY3QoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEFuaW1hdGlvbiBDb250cm9sbGVyIG9mIHRoaXMgU3ByaXRlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZSNhbmltc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbmltYXRpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hbmltcyA9IG5ldyBDb21wb25lbnRzLkFuaW1hdGlvbih0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRUZXh0dXJlKHRleHR1cmUsIGZyYW1lKTtcclxuICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHgsIHkpO1xyXG4gICAgICAgIHRoaXMuc2V0U2l6ZVRvRnJhbWUoKTtcclxuICAgICAgICB0aGlzLnNldE9yaWdpbkZyb21GcmFtZSgpO1xyXG4gICAgICAgIHRoaXMuaW5pdFBpcGVsaW5lKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHRoaXMgU3ByaXRlJ3MgYW5pbWF0aW9ucy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGUjcHJlVXBkYXRlXHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGltZSAtIFRoZSBjdXJyZW50IHRpbWVzdGFtcC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lLCBpbiBtcywgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCBmcmFtZS5cclxuICAgICAqL1xyXG4gICAgcHJlVXBkYXRlOiBmdW5jdGlvbiAodGltZSwgZGVsdGEpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hbmltcy51cGRhdGUodGltZSwgZGVsdGEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YXJ0IHBsYXlpbmcgdGhlIGdpdmVuIGFuaW1hdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGUjcGxheVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBzdHJpbmctYmFzZWQga2V5IG9mIHRoZSBhbmltYXRpb24gdG8gcGxheS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lnbm9yZUlmUGxheWluZz1mYWxzZV0gLSBJZiBhbiBhbmltYXRpb24gaXMgYWxyZWFkeSBwbGF5aW5nIHRoZW4gaWdub3JlIHRoaXMgY2FsbC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3N0YXJ0RnJhbWU9MF0gLSBPcHRpb25hbGx5IHN0YXJ0IHRoZSBhbmltYXRpb24gcGxheWluZyBmcm9tIHRoaXMgZnJhbWUgaW5kZXguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZX0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcGxheTogZnVuY3Rpb24gKGtleSwgaWdub3JlSWZQbGF5aW5nLCBzdGFydEZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYW5pbXMucGxheShrZXksIGlnbm9yZUlmUGxheWluZywgc3RhcnRGcmFtZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGlzIFNwcml0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGUjdG9KU09OXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuSlNPTkdhbWVPYmplY3R9IEEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHRvSlNPTjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgZGF0YSA9IENvbXBvbmVudHMuVG9KU09OKHRoaXMpO1xyXG5cclxuICAgICAgICAvLyAgRXh0cmEgU3ByaXRlIGRhdGEgaXMgYWRkZWQgaGVyZVxyXG5cclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGVzIHRoZSBwcmUtZGVzdHJveSBzdGVwIGZvciB0aGUgU3ByaXRlLCB3aGljaCByZW1vdmVzIHRoZSBBbmltYXRpb24gY29tcG9uZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZSNwcmVEZXN0cm95XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTQuMFxyXG4gICAgICovXHJcbiAgICBwcmVEZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYW5pbXMuZGVzdHJveSgpO1xyXG5cclxuICAgICAgICB0aGlzLmFuaW1zID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/sprite/Sprite.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/sprite/SpriteCanvasRenderer.js":
/*!****************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/sprite/SpriteCanvasRenderer.js ***!
\****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Sprite#renderCanvas\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Sprite} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar SpriteCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n renderer.batchSprite(src, src.frame, camera, parentMatrix);\r\n};\r\n\r\nmodule.exports = SpriteCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zcHJpdGUvU3ByaXRlQ2FudmFzUmVuZGVyZXIuanM/NDk3MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVywwQkFBMEI7QUFDckMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zcHJpdGUvU3ByaXRlQ2FudmFzUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgQ2FudmFzIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlI3JlbmRlckNhbnZhc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICogQHByaXZhdGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuUmVuZGVyZXIuQ2FudmFzLkNhbnZhc1JlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBDYW52YXMgcmVuZGVyZXIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlNwcml0ZX0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIFNwcml0ZUNhbnZhc1JlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgcmVuZGVyZXIuYmF0Y2hTcHJpdGUoc3JjLCBzcmMuZnJhbWUsIGNhbWVyYSwgcGFyZW50TWF0cml4KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlQ2FudmFzUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/sprite/SpriteCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/sprite/SpriteCreator.js":
/*!*********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/sprite/SpriteCreator.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BuildGameObject = __webpack_require__(/*! ../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar BuildGameObjectAnimation = __webpack_require__(/*! ../BuildGameObjectAnimation */ \"./node_modules/phaser/src/gameobjects/BuildGameObjectAnimation.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar Sprite = __webpack_require__(/*! ./Sprite */ \"./node_modules/phaser/src/gameobjects/sprite/Sprite.js\");\r\n\r\n/**\r\n * Creates a new Sprite Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Sprite Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#sprite\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Sprite.SpriteConfig} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.Sprite} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('sprite', function (config, addToScene)\r\n{\r\n if (config === undefined) { config = {}; }\r\n\r\n var key = GetAdvancedValue(config, 'key', null);\r\n var frame = GetAdvancedValue(config, 'frame', null);\r\n\r\n var sprite = new Sprite(this.scene, 0, 0, key, frame);\r\n\r\n if (addToScene !== undefined)\r\n {\r\n config.add = addToScene;\r\n }\r\n\r\n BuildGameObject(this.scene, sprite, config);\r\n\r\n // Sprite specific config options:\r\n\r\n BuildGameObjectAnimation(sprite, config);\r\n\r\n return sprite;\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zcHJpdGUvU3ByaXRlQ3JlYXRvci5qcz84NTRiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQyxvRkFBb0I7QUFDbEQsK0JBQStCLG1CQUFPLENBQUMsc0dBQTZCO0FBQ3BFLHdCQUF3QixtQkFBTyxDQUFDLHdGQUFzQjtBQUN0RCx1QkFBdUIsbUJBQU8sQ0FBQyx1R0FBcUM7QUFDcEUsYUFBYSxtQkFBTyxDQUFDLHdFQUFVOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw2Q0FBNkM7QUFDeEQsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSwwQkFBMEI7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGFBQWE7O0FBRTVDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc3ByaXRlL1Nwcml0ZUNyZWF0b3IuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCdWlsZEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi9CdWlsZEdhbWVPYmplY3QnKTtcclxudmFyIEJ1aWxkR2FtZU9iamVjdEFuaW1hdGlvbiA9IHJlcXVpcmUoJy4uL0J1aWxkR2FtZU9iamVjdEFuaW1hdGlvbicpO1xyXG52YXIgR2FtZU9iamVjdENyZWF0b3IgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Q3JlYXRvcicpO1xyXG52YXIgR2V0QWR2YW5jZWRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRBZHZhbmNlZFZhbHVlJyk7XHJcbnZhciBTcHJpdGUgPSByZXF1aXJlKCcuL1Nwcml0ZScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgU3ByaXRlIEdhbWUgT2JqZWN0IGFuZCByZXR1cm5zIGl0LlxyXG4gKlxyXG4gKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBTcHJpdGUgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI3Nwcml0ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuU3ByaXRlLlNwcml0ZUNvbmZpZ30gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gY3JlYXRlIGl0c2VsZi5cclxuICogQHBhcmFtIHtib29sZWFufSBbYWRkVG9TY2VuZV0gLSBBZGQgdGhpcyBHYW1lIE9iamVjdCB0byB0aGUgU2NlbmUgYWZ0ZXIgY3JlYXRpbmcgaXQ/IElmIHNldCB0aGlzIGFyZ3VtZW50IG92ZXJyaWRlcyB0aGUgYGFkZGAgcHJvcGVydHkgaW4gdGhlIGNvbmZpZyBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGV9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdENyZWF0b3IucmVnaXN0ZXIoJ3Nwcml0ZScsIGZ1bmN0aW9uIChjb25maWcsIGFkZFRvU2NlbmUpXHJcbntcclxuICAgIGlmIChjb25maWcgPT09IHVuZGVmaW5lZCkgeyBjb25maWcgPSB7fTsgfVxyXG5cclxuICAgIHZhciBrZXkgPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ2tleScsIG51bGwpO1xyXG4gICAgdmFyIGZyYW1lID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdmcmFtZScsIG51bGwpO1xyXG5cclxuICAgIHZhciBzcHJpdGUgPSBuZXcgU3ByaXRlKHRoaXMuc2NlbmUsIDAsIDAsIGtleSwgZnJhbWUpO1xyXG5cclxuICAgIGlmIChhZGRUb1NjZW5lICE9PSB1bmRlZmluZWQpXHJcbiAgICB7XHJcbiAgICAgICAgY29uZmlnLmFkZCA9IGFkZFRvU2NlbmU7XHJcbiAgICB9XHJcblxyXG4gICAgQnVpbGRHYW1lT2JqZWN0KHRoaXMuc2NlbmUsIHNwcml0ZSwgY29uZmlnKTtcclxuXHJcbiAgICAvLyAgU3ByaXRlIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zOlxyXG5cclxuICAgIEJ1aWxkR2FtZU9iamVjdEFuaW1hdGlvbihzcHJpdGUsIGNvbmZpZyk7XHJcblxyXG4gICAgcmV0dXJuIHNwcml0ZTtcclxufSk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/sprite/SpriteCreator.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/sprite/SpriteFactory.js":
/*!*********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/sprite/SpriteFactory.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\nvar Sprite = __webpack_require__(/*! ./Sprite */ \"./node_modules/phaser/src/gameobjects/sprite/Sprite.js\");\r\n\r\n/**\r\n * Creates a new Sprite Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Sprite Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#sprite\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n *\r\n * @return {Phaser.GameObjects.Sprite} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('sprite', function (x, y, key, frame)\r\n{\r\n var sprite = new Sprite(this.scene, x, y, key, frame);\r\n\r\n this.displayList.add(sprite);\r\n this.updateList.add(sprite);\r\n\r\n return sprite;\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n// There are several properties available to use:\r\n//\r\n// this.scene - a reference to the Scene that owns the GameObjectFactory\r\n// this.displayList - a reference to the Display List the Scene owns\r\n// this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zcHJpdGUvU3ByaXRlRmFjdG9yeS5qcz85M2E5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7QUFDdEQsYUFBYSxtQkFBTyxDQUFDLHdFQUFVOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQSxZQUFZLDBCQUEwQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3Nwcml0ZS9TcHJpdGVGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG52YXIgU3ByaXRlID0gcmVxdWlyZSgnLi9TcHJpdGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFNwcml0ZSBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFNwcml0ZSBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3Rvcnkjc3ByaXRlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRleHR1cmUgLSBUaGUga2V5IG9mIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gcmVuZGVyIHdpdGgsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBBbiBvcHRpb25hbCBmcmFtZSBmcm9tIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyaW5nIHdpdGguXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5TcHJpdGV9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdEZhY3RvcnkucmVnaXN0ZXIoJ3Nwcml0ZScsIGZ1bmN0aW9uICh4LCB5LCBrZXksIGZyYW1lKVxyXG57XHJcbiAgICB2YXIgc3ByaXRlID0gbmV3IFNwcml0ZSh0aGlzLnNjZW5lLCB4LCB5LCBrZXksIGZyYW1lKTtcclxuXHJcbiAgICB0aGlzLmRpc3BsYXlMaXN0LmFkZChzcHJpdGUpO1xyXG4gICAgdGhpcy51cGRhdGVMaXN0LmFkZChzcHJpdGUpO1xyXG5cclxuICAgIHJldHVybiBzcHJpdGU7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RGYWN0b3J5IGNvbnRleHQuXHJcbi8vXHJcbi8vICBUaGVyZSBhcmUgc2V2ZXJhbCBwcm9wZXJ0aWVzIGF2YWlsYWJsZSB0byB1c2U6XHJcbi8vXHJcbi8vICB0aGlzLnNjZW5lIC0gYSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgb3ducyB0aGUgR2FtZU9iamVjdEZhY3RvcnlcclxuLy8gIHRoaXMuZGlzcGxheUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgRGlzcGxheSBMaXN0IHRoZSBTY2VuZSBvd25zXHJcbi8vICB0aGlzLnVwZGF0ZUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgVXBkYXRlIExpc3QgdGhlIFNjZW5lIG93bnNcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/sprite/SpriteFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/sprite/SpriteRender.js":
/*!********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/sprite/SpriteRender.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./SpriteWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/sprite/SpriteWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./SpriteCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/sprite/SpriteCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zcHJpdGUvU3ByaXRlUmVuZGVyLmpzP2ExNzgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLGlFQUFrQjtBQUM1QyxtQkFBbUIsbUJBQU8sQ0FBQyxpRUFBa0I7O0FBRTdDLElBQUksSUFBcUI7QUFDekI7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxrR0FBdUI7QUFDakQ7O0FBRUEsSUFBSSxJQUFzQjtBQUMxQjtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLG9HQUF3QjtBQUNuRDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvc3ByaXRlL1Nwcml0ZVJlbmRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG52YXIgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG5cclxuaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuL1Nwcml0ZVdlYkdMUmVuZGVyZXInKTtcclxufVxyXG5cclxuaWYgKHR5cGVvZiBDQU5WQVNfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4vU3ByaXRlQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/sprite/SpriteRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/sprite/SpriteWebGLRenderer.js":
/*!***************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/sprite/SpriteWebGLRenderer.js ***!
\***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Sprite#renderWebGL\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Sprite} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar SpriteWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n this.pipeline.batchSprite(src, camera, parentMatrix);\r\n};\r\n\r\nmodule.exports = SpriteWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy9zcHJpdGUvU3ByaXRlV2ViR0xSZW5kZXJlci5qcz9kYTdlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9DQUFvQztBQUMvQyxXQUFXLDBCQUEwQjtBQUNyQyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3Nwcml0ZS9TcHJpdGVXZWJHTFJlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIFdlYkdMIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlI3JlbmRlcldlYkdMXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBXZWJHTCByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuU3ByaXRlfSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgU3ByaXRlV2ViR0xSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHRoaXMucGlwZWxpbmUuYmF0Y2hTcHJpdGUoc3JjLCBjYW1lcmEsIHBhcmVudE1hdHJpeCk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZVdlYkdMUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/sprite/SpriteWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/text/GetTextSize.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/text/GetTextSize.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns an object containing dimensions of the Text object.\r\n *\r\n * @function Phaser.GameObjects.Text.GetTextSize\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Text} text - The Text object to calculate the size from.\r\n * @param {Phaser.Types.GameObjects.Text.TextMetrics} size - The Text metrics to use when calculating the size.\r\n * @param {array} lines - The lines of text to calculate the size from.\r\n *\r\n * @return {object} An object containing dimensions of the Text object.\r\n */\r\nvar GetTextSize = function (text, size, lines)\r\n{\r\n var canvas = text.canvas;\r\n var context = text.context;\r\n var style = text.style;\r\n\r\n var lineWidths = [];\r\n var maxLineWidth = 0;\r\n var drawnLines = lines.length;\r\n\r\n if (style.maxLines > 0 && style.maxLines < lines.length)\r\n {\r\n drawnLines = style.maxLines;\r\n }\r\n\r\n style.syncFont(canvas, context);\r\n\r\n // Text Width\r\n\r\n for (var i = 0; i < drawnLines; i++)\r\n {\r\n var lineWidth = style.strokeThickness;\r\n\r\n lineWidth += context.measureText(lines[i]).width;\r\n\r\n // Adjust for wrapped text\r\n if (style.wordWrap)\r\n {\r\n lineWidth -= context.measureText(' ').width;\r\n }\r\n\r\n lineWidths[i] = Math.ceil(lineWidth);\r\n maxLineWidth = Math.max(maxLineWidth, lineWidths[i]);\r\n }\r\n\r\n // Text Height\r\n\r\n var lineHeight = size.fontSize + style.strokeThickness;\r\n var height = lineHeight * drawnLines;\r\n var lineSpacing = text.lineSpacing;\r\n\r\n // Adjust for line spacing\r\n if (drawnLines > 1)\r\n {\r\n height += lineSpacing * (drawnLines - 1);\r\n }\r\n\r\n return {\r\n width: maxLineWidth,\r\n height: height,\r\n lines: drawnLines,\r\n lineWidths: lineWidths,\r\n lineSpacing: lineSpacing,\r\n lineHeight: lineHeight\r\n };\r\n};\r\n\r\nmodule.exports = GetTextSize;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L0dldFRleHRTaXplLmpzP2VjNjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsd0JBQXdCO0FBQ25DLFdBQVcsMENBQTBDO0FBQ3JELFdBQVcsTUFBTTtBQUNqQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLG1CQUFtQixnQkFBZ0I7QUFDbkM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L0dldFRleHRTaXplLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyBkaW1lbnNpb25zIG9mIHRoZSBUZXh0IG9iamVjdC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0LkdldFRleHRTaXplXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSB0ZXh0IC0gVGhlIFRleHQgb2JqZWN0IHRvIGNhbGN1bGF0ZSB0aGUgc2l6ZSBmcm9tLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5UZXh0LlRleHRNZXRyaWNzfSBzaXplIC0gVGhlIFRleHQgbWV0cmljcyB0byB1c2Ugd2hlbiBjYWxjdWxhdGluZyB0aGUgc2l6ZS5cclxuICogQHBhcmFtIHthcnJheX0gbGluZXMgLSBUaGUgbGluZXMgb2YgdGV4dCB0byBjYWxjdWxhdGUgdGhlIHNpemUgZnJvbS5cclxuICpcclxuICogQHJldHVybiB7b2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyBkaW1lbnNpb25zIG9mIHRoZSBUZXh0IG9iamVjdC5cclxuICovXHJcbnZhciBHZXRUZXh0U2l6ZSA9IGZ1bmN0aW9uICh0ZXh0LCBzaXplLCBsaW5lcylcclxue1xyXG4gICAgdmFyIGNhbnZhcyA9IHRleHQuY2FudmFzO1xyXG4gICAgdmFyIGNvbnRleHQgPSB0ZXh0LmNvbnRleHQ7XHJcbiAgICB2YXIgc3R5bGUgPSB0ZXh0LnN0eWxlO1xyXG5cclxuICAgIHZhciBsaW5lV2lkdGhzID0gW107XHJcbiAgICB2YXIgbWF4TGluZVdpZHRoID0gMDtcclxuICAgIHZhciBkcmF3bkxpbmVzID0gbGluZXMubGVuZ3RoO1xyXG5cclxuICAgIGlmIChzdHlsZS5tYXhMaW5lcyA+IDAgJiYgc3R5bGUubWF4TGluZXMgPCBsaW5lcy5sZW5ndGgpXHJcbiAgICB7XHJcbiAgICAgICAgZHJhd25MaW5lcyA9IHN0eWxlLm1heExpbmVzO1xyXG4gICAgfVxyXG5cclxuICAgIHN0eWxlLnN5bmNGb250KGNhbnZhcywgY29udGV4dCk7XHJcblxyXG4gICAgLy8gIFRleHQgV2lkdGhcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRyYXduTGluZXM7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgbGluZVdpZHRoID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xyXG5cclxuICAgICAgICBsaW5lV2lkdGggKz0gY29udGV4dC5tZWFzdXJlVGV4dChsaW5lc1tpXSkud2lkdGg7XHJcblxyXG4gICAgICAgIC8vIEFkanVzdCBmb3Igd3JhcHBlZCB0ZXh0XHJcbiAgICAgICAgaWYgKHN0eWxlLndvcmRXcmFwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbGluZVdpZHRoIC09IGNvbnRleHQubWVhc3VyZVRleHQoJyAnKS53aWR0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxpbmVXaWR0aHNbaV0gPSBNYXRoLmNlaWwobGluZVdpZHRoKTtcclxuICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxpbmVXaWR0aHNbaV0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBUZXh0IEhlaWdodFxyXG5cclxuICAgIHZhciBsaW5lSGVpZ2h0ID0gc2l6ZS5mb250U2l6ZSArIHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcclxuICAgIHZhciBoZWlnaHQgPSBsaW5lSGVpZ2h0ICogZHJhd25MaW5lcztcclxuICAgIHZhciBsaW5lU3BhY2luZyA9IHRleHQubGluZVNwYWNpbmc7XHJcblxyXG4gICAgLy8gIEFkanVzdCBmb3IgbGluZSBzcGFjaW5nXHJcbiAgICBpZiAoZHJhd25MaW5lcyA+IDEpXHJcbiAgICB7XHJcbiAgICAgICAgaGVpZ2h0ICs9IGxpbmVTcGFjaW5nICogKGRyYXduTGluZXMgLSAxKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHdpZHRoOiBtYXhMaW5lV2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgICAgbGluZXM6IGRyYXduTGluZXMsXHJcbiAgICAgICAgbGluZVdpZHRoczogbGluZVdpZHRocyxcclxuICAgICAgICBsaW5lU3BhY2luZzogbGluZVNwYWNpbmcsXHJcbiAgICAgICAgbGluZUhlaWdodDogbGluZUhlaWdodFxyXG4gICAgfTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0VGV4dFNpemU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/text/GetTextSize.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/text/MeasureText.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/text/MeasureText.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CanvasPool = __webpack_require__(/*! ../../display/canvas/CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\");\r\n\r\n/**\r\n * Calculates the ascent, descent and fontSize of a given font style.\r\n *\r\n * @function Phaser.GameObjects.Text.MeasureText\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.TextStyle} textStyle - The TextStyle object to measure.\r\n *\r\n * @return {Phaser.Types.GameObjects.Text.TextMetrics} An object containing the ascent, descent and fontSize of the TextStyle.\r\n */\r\nvar MeasureText = function (textStyle)\r\n{\r\n // @property {HTMLCanvasElement} canvas - The canvas element that the text is rendered.\r\n var canvas = CanvasPool.create(this);\r\n\r\n // @property {HTMLCanvasElement} context - The context of the canvas element that the text is rendered to.\r\n var context = canvas.getContext('2d');\r\n\r\n textStyle.syncFont(canvas, context);\r\n\r\n var width = Math.ceil(context.measureText(textStyle.testString).width * textStyle.baselineX);\r\n var baseline = width;\r\n var height = 2 * baseline;\r\n\r\n baseline = baseline * textStyle.baselineY | 0;\r\n\r\n canvas.width = width;\r\n canvas.height = height;\r\n\r\n context.fillStyle = '#f00';\r\n context.fillRect(0, 0, width, height);\r\n\r\n context.font = textStyle._font;\r\n\r\n context.textBaseline = 'alphabetic';\r\n context.fillStyle = '#000';\r\n context.fillText(textStyle.testString, 0, baseline);\r\n\r\n var output = {\r\n ascent: 0,\r\n descent: 0,\r\n fontSize: 0\r\n };\r\n\r\n if (!context.getImageData(0, 0, width, height))\r\n {\r\n output.ascent = baseline;\r\n output.descent = baseline + 6;\r\n output.fontSize = output.ascent + output.descent;\r\n\r\n CanvasPool.remove(canvas);\r\n\r\n return output;\r\n }\r\n\r\n var imagedata = context.getImageData(0, 0, width, height).data;\r\n var pixels = imagedata.length;\r\n var line = width * 4;\r\n var i;\r\n var j;\r\n var idx = 0;\r\n var stop = false;\r\n\r\n // ascent. scan from top to bottom until we find a non red pixel\r\n for (i = 0; i < baseline; i++)\r\n {\r\n for (j = 0; j < line; j += 4)\r\n {\r\n if (imagedata[idx + j] !== 255)\r\n {\r\n stop = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!stop)\r\n {\r\n idx += line;\r\n }\r\n else\r\n {\r\n break;\r\n }\r\n }\r\n\r\n output.ascent = baseline - i;\r\n\r\n idx = pixels - line;\r\n stop = false;\r\n\r\n // descent. scan from bottom to top until we find a non red pixel\r\n for (i = height; i > baseline; i--)\r\n {\r\n for (j = 0; j < line; j += 4)\r\n {\r\n if (imagedata[idx + j] !== 255)\r\n {\r\n stop = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!stop)\r\n {\r\n idx -= line;\r\n }\r\n else\r\n {\r\n break;\r\n }\r\n }\r\n\r\n output.descent = (i - baseline);\r\n output.fontSize = output.ascent + output.descent;\r\n\r\n CanvasPool.remove(canvas);\r\n\r\n return output;\r\n};\r\n\r\nmodule.exports = MeasureText;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L01lYXN1cmVUZXh0LmpzP2ExZDQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLCtGQUFpQzs7QUFFMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw2QkFBNkI7QUFDeEM7QUFDQSxZQUFZLDBDQUEwQztBQUN0RDtBQUNBO0FBQ0E7QUFDQSxrQkFBa0Isa0JBQWtCO0FBQ3BDOztBQUVBLGtCQUFrQixrQkFBa0I7QUFDcEM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlLGNBQWM7QUFDN0I7QUFDQSxtQkFBbUIsVUFBVTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQixjQUFjO0FBQ2xDO0FBQ0EsbUJBQW1CLFVBQVU7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3RleHQvTWVhc3VyZVRleHQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDYW52YXNQb29sID0gcmVxdWlyZSgnLi4vLi4vZGlzcGxheS9jYW52YXMvQ2FudmFzUG9vbCcpO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGFzY2VudCwgZGVzY2VudCBhbmQgZm9udFNpemUgb2YgYSBnaXZlbiBmb250IHN0eWxlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdhbWVPYmplY3RzLlRleHQuTWVhc3VyZVRleHRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZX0gdGV4dFN0eWxlIC0gVGhlIFRleHRTdHlsZSBvYmplY3QgdG8gbWVhc3VyZS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlRleHQuVGV4dE1ldHJpY3N9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBhc2NlbnQsIGRlc2NlbnQgYW5kIGZvbnRTaXplIG9mIHRoZSBUZXh0U3R5bGUuXHJcbiAqL1xyXG52YXIgTWVhc3VyZVRleHQgPSBmdW5jdGlvbiAodGV4dFN0eWxlKVxyXG57XHJcbiAgICAvLyBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBjYW52YXMgLSBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCB0aGUgdGV4dCBpcyByZW5kZXJlZC5cclxuICAgIHZhciBjYW52YXMgPSBDYW52YXNQb29sLmNyZWF0ZSh0aGlzKTtcclxuXHJcbiAgICAvLyBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBjb250ZXh0IC0gVGhlIGNvbnRleHQgb2YgdGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgdGhlIHRleHQgaXMgcmVuZGVyZWQgdG8uXHJcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG5cclxuICAgIHRleHRTdHlsZS5zeW5jRm9udChjYW52YXMsIGNvbnRleHQpO1xyXG5cclxuICAgIHZhciB3aWR0aCA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KHRleHRTdHlsZS50ZXN0U3RyaW5nKS53aWR0aCAqIHRleHRTdHlsZS5iYXNlbGluZVgpO1xyXG4gICAgdmFyIGJhc2VsaW5lID0gd2lkdGg7XHJcbiAgICB2YXIgaGVpZ2h0ID0gMiAqIGJhc2VsaW5lO1xyXG5cclxuICAgIGJhc2VsaW5lID0gYmFzZWxpbmUgKiB0ZXh0U3R5bGUuYmFzZWxpbmVZIHwgMDtcclxuXHJcbiAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcclxuICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnI2YwMCc7XHJcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgIGNvbnRleHQuZm9udCA9IHRleHRTdHlsZS5fZm9udDtcclxuXHJcbiAgICBjb250ZXh0LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcclxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMwMDAnO1xyXG4gICAgY29udGV4dC5maWxsVGV4dCh0ZXh0U3R5bGUudGVzdFN0cmluZywgMCwgYmFzZWxpbmUpO1xyXG5cclxuICAgIHZhciBvdXRwdXQgPSB7XHJcbiAgICAgICAgYXNjZW50OiAwLFxyXG4gICAgICAgIGRlc2NlbnQ6IDAsXHJcbiAgICAgICAgZm9udFNpemU6IDBcclxuICAgIH07XHJcblxyXG4gICAgaWYgKCFjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KSlcclxuICAgIHtcclxuICAgICAgICBvdXRwdXQuYXNjZW50ID0gYmFzZWxpbmU7XHJcbiAgICAgICAgb3V0cHV0LmRlc2NlbnQgPSBiYXNlbGluZSArIDY7XHJcbiAgICAgICAgb3V0cHV0LmZvbnRTaXplID0gb3V0cHV0LmFzY2VudCArIG91dHB1dC5kZXNjZW50O1xyXG5cclxuICAgICAgICBDYW52YXNQb29sLnJlbW92ZShjYW52YXMpO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBpbWFnZWRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xyXG4gICAgdmFyIHBpeGVscyA9IGltYWdlZGF0YS5sZW5ndGg7XHJcbiAgICB2YXIgbGluZSA9IHdpZHRoICogNDtcclxuICAgIHZhciBpO1xyXG4gICAgdmFyIGo7XHJcbiAgICB2YXIgaWR4ID0gMDtcclxuICAgIHZhciBzdG9wID0gZmFsc2U7XHJcblxyXG4gICAgLy8gYXNjZW50LiBzY2FuIGZyb20gdG9wIHRvIGJvdHRvbSB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxyXG4gICAgZm9yIChpID0gMDsgaSA8IGJhc2VsaW5lOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzdG9wKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWR4ICs9IGxpbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvdXRwdXQuYXNjZW50ID0gYmFzZWxpbmUgLSBpO1xyXG5cclxuICAgIGlkeCA9IHBpeGVscyAtIGxpbmU7XHJcbiAgICBzdG9wID0gZmFsc2U7XHJcblxyXG4gICAgLy8gZGVzY2VudC4gc2NhbiBmcm9tIGJvdHRvbSB0byB0b3AgdW50aWwgd2UgZmluZCBhIG5vbiByZWQgcGl4ZWxcclxuICAgIGZvciAoaSA9IGhlaWdodDsgaSA+IGJhc2VsaW5lOyBpLS0pXHJcbiAgICB7XHJcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzdG9wKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWR4IC09IGxpbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvdXRwdXQuZGVzY2VudCA9IChpIC0gYmFzZWxpbmUpO1xyXG4gICAgb3V0cHV0LmZvbnRTaXplID0gb3V0cHV0LmFzY2VudCArIG91dHB1dC5kZXNjZW50O1xyXG5cclxuICAgIENhbnZhc1Bvb2wucmVtb3ZlKGNhbnZhcyk7XHJcblxyXG4gICAgcmV0dXJuIG91dHB1dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTWVhc3VyZVRleHQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/text/MeasureText.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/text/TextStyle.js":
/*!***************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/text/TextStyle.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar MeasureText = __webpack_require__(/*! ./MeasureText */ \"./node_modules/phaser/src/gameobjects/text/MeasureText.js\");\r\n\r\n// Key: [ Object Key, Default Value ]\r\n\r\nvar propertyMap = {\r\n fontFamily: [ 'fontFamily', 'Courier' ],\r\n fontSize: [ 'fontSize', '16px' ],\r\n fontStyle: [ 'fontStyle', '' ],\r\n backgroundColor: [ 'backgroundColor', null ],\r\n color: [ 'color', '#fff' ],\r\n stroke: [ 'stroke', '#fff' ],\r\n strokeThickness: [ 'strokeThickness', 0 ],\r\n shadowOffsetX: [ 'shadow.offsetX', 0 ],\r\n shadowOffsetY: [ 'shadow.offsetY', 0 ],\r\n shadowColor: [ 'shadow.color', '#000' ],\r\n shadowBlur: [ 'shadow.blur', 0 ],\r\n shadowStroke: [ 'shadow.stroke', false ],\r\n shadowFill: [ 'shadow.fill', false ],\r\n align: [ 'align', 'left' ],\r\n maxLines: [ 'maxLines', 0 ],\r\n fixedWidth: [ 'fixedWidth', 0 ],\r\n fixedHeight: [ 'fixedHeight', 0 ],\r\n resolution: [ 'resolution', 0 ],\r\n rtl: [ 'rtl', false ],\r\n testString: [ 'testString', '|MÉqgy' ],\r\n baselineX: [ 'baselineX', 1.2 ],\r\n baselineY: [ 'baselineY', 1.4 ],\r\n wordWrapWidth: [ 'wordWrap.width', null ],\r\n wordWrapCallback: [ 'wordWrap.callback', null ],\r\n wordWrapCallbackScope: [ 'wordWrap.callbackScope', null ],\r\n wordWrapUseAdvanced: [ 'wordWrap.useAdvancedWrap', false ]\r\n};\r\n\r\n/**\r\n * @classdesc\r\n * A TextStyle class manages all of the style settings for a Text object.\r\n * \r\n * Text Game Objects create a TextStyle instance automatically, which is\r\n * accessed via the `Text.style` property. You do not normally need to\r\n * instantiate one yourself.\r\n *\r\n * @class TextStyle\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.Text} text - The Text object that this TextStyle is styling.\r\n * @param {Phaser.Types.GameObjects.Text.TextStyle} style - The style settings to set.\r\n */\r\nvar TextStyle = new Class({\r\n\r\n initialize:\r\n\r\n function TextStyle (text, style)\r\n {\r\n /**\r\n * The Text object that this TextStyle is styling.\r\n *\r\n * @name Phaser.GameObjects.TextStyle#parent\r\n * @type {Phaser.GameObjects.Text}\r\n * @since 3.0.0\r\n */\r\n this.parent = text;\r\n\r\n /**\r\n * The font family.\r\n *\r\n * @name Phaser.GameObjects.TextStyle#fontFamily\r\n * @type {string}\r\n * @default 'Courier'\r\n * @since 3.0.0\r\n */\r\n this.fontFamily;\r\n\r\n /**\r\n * The font size.\r\n *\r\n * @name Phaser.GameObjects.TextStyle#fontSize\r\n * @type {string}\r\n * @default '16px'\r\n * @since 3.0.0\r\n */\r\n this.fontSize;\r\n\r\n /**\r\n * The font style.\r\n *\r\n * @name Phaser.GameObjects.TextStyle#fontStyle\r\n * @type {string}\r\n * @since 3.0.0\r\n */\r\n this.fontStyle;\r\n\r\n /**\r\n * The background color.\r\n *\r\n * @name Phaser.GameObjects.TextStyle#backgroundColor\r\n * @type {string}\r\n * @since 3.0.0\r\n */\r\n this.backgroundColor;\r\n\r\n /**\r\n * The text fill color.\r\n *\r\n * @name Phaser.GameObjects.TextStyle#color\r\n * @type {string}\r\n * @default '#fff'\r\n * @since 3.0.0\r\n */\r\n this.color;\r\n\r\n /**\r\n * The text stroke color.\r\n *\r\n * @name Phaser.GameObjects.TextStyle#stroke\r\n * @type {string}\r\n * @default '#fff'\r\n * @since 3.0.0\r\n */\r\n this.stroke;\r\n\r\n /**\r\n * The text stroke thickness.\r\n *\r\n * @name Phaser.GameObjects.TextStyle#strokeThickness\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.strokeThickness;\r\n\r\n /**\r\n * The horizontal shadow offset.\r\n *\r\n * @name Phaser.GameObjects.TextStyle#shadowOffsetX\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.shadowOffsetX;\r\n\r\n /**\r\n * The vertical shadow offset.\r\n *\r\n * @name Phaser.GameObjects.TextStyle#shadowOffsetY\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.shadowOffsetY;\r\n\r\n /**\r\n * The shadow color.\r\n *\r\n * @name Phaser.GameObjects.TextStyle#shadowColor\r\n * @type {string}\r\n * @default '#000'\r\n * @since 3.0.0\r\n */\r\n this.shadowColor;\r\n\r\n /**\r\n * The shadow blur radius.\r\n *\r\n * @name Phaser.GameObjects.TextStyle#shadowBlur\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.shadowBlur;\r\n\r\n /**\r\n * Whether shadow stroke is enabled or not.\r\n *\r\n * @name Phaser.GameObjects.TextStyle#shadowStroke\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.shadowStroke;\r\n\r\n /**\r\n * Whether shadow fill is enabled or not.\r\n *\r\n * @name Phaser.GameObjects.TextStyle#shadowFill\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.shadowFill;\r\n\r\n /**\r\n * The text alignment.\r\n *\r\n * @name Phaser.GameObjects.TextStyle#align\r\n * @type {string}\r\n * @default 'left'\r\n * @since 3.0.0\r\n */\r\n this.align;\r\n\r\n /**\r\n * The maximum number of lines to draw.\r\n *\r\n * @name Phaser.GameObjects.TextStyle#maxLines\r\n * @type {integer}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.maxLines;\r\n\r\n /**\r\n * The fixed width of the text.\r\n *\r\n * `0` means no fixed with.\r\n *\r\n * @name Phaser.GameObjects.TextStyle#fixedWidth\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.fixedWidth;\r\n\r\n /**\r\n * The fixed height of the text.\r\n *\r\n * `0` means no fixed height.\r\n *\r\n * @name Phaser.GameObjects.TextStyle#fixedHeight\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.fixedHeight;\r\n\r\n /**\r\n * The resolution the text is rendered to its internal canvas at.\r\n * The default is 0, which means it will use the resolution set in the Game Config.\r\n *\r\n * @name Phaser.GameObjects.TextStyle#resolution\r\n * @type {number}\r\n * @default 0\r\n * @since 3.12.0\r\n */\r\n this.resolution;\r\n\r\n /**\r\n * Whether the text should render right to left.\r\n *\r\n * @name Phaser.GameObjects.TextStyle#rtl\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.rtl;\r\n\r\n /**\r\n * The test string to use when measuring the font.\r\n *\r\n * @name Phaser.GameObjects.TextStyle#testString\r\n * @type {string}\r\n * @default '|MÉqgy'\r\n * @since 3.0.0\r\n */\r\n this.testString;\r\n\r\n /**\r\n * The amount of horizontal padding added to the width of the text when calculating the font metrics.\r\n *\r\n * @name Phaser.GameObjects.TextStyle#baselineX\r\n * @type {number}\r\n * @default 1.2\r\n * @since 3.3.0\r\n */\r\n this.baselineX;\r\n\r\n /**\r\n * The amount of vertical padding added to the height of the text when calculating the font metrics.\r\n *\r\n * @name Phaser.GameObjects.TextStyle#baselineY\r\n * @type {number}\r\n * @default 1.4\r\n * @since 3.3.0\r\n */\r\n this.baselineY;\r\n\r\n /**\r\n * The font style, size and family.\r\n *\r\n * @name Phaser.GameObjects.TextStyle#_font\r\n * @type {string}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._font;\r\n\r\n // Set to defaults + user style\r\n this.setStyle(style, false, true);\r\n\r\n var metrics = GetValue(style, 'metrics', false);\r\n\r\n // Provide optional TextMetrics in the style object to avoid the canvas look-up / scanning\r\n // Doing this is reset if you then change the font of this TextStyle after creation\r\n if (metrics)\r\n {\r\n this.metrics = {\r\n ascent: GetValue(metrics, 'ascent', 0),\r\n descent: GetValue(metrics, 'descent', 0),\r\n fontSize: GetValue(metrics, 'fontSize', 0)\r\n };\r\n }\r\n else\r\n {\r\n this.metrics = MeasureText(this);\r\n }\r\n },\r\n\r\n /**\r\n * Set the text style.\r\n *\r\n * @example\r\n * text.setStyle({\r\n * fontSize: '64px',\r\n * fontFamily: 'Arial',\r\n * color: '#ffffff',\r\n * align: 'center',\r\n * backgroundColor: '#ff00ff'\r\n * });\r\n *\r\n * @method Phaser.GameObjects.TextStyle#setStyle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.Text.TextStyle} style - The style settings to set.\r\n * @param {boolean} [updateText=true] - Whether to update the text immediately.\r\n * @param {boolean} [setDefaults=false] - Use the default values is not set, or the local values.\r\n *\r\n * @return {Phaser.GameObjects.Text} The parent Text object.\r\n */\r\n setStyle: function (style, updateText, setDefaults)\r\n {\r\n if (updateText === undefined) { updateText = true; }\r\n if (setDefaults === undefined) { setDefaults = false; }\r\n\r\n // Avoid type mutation\r\n if (style && style.hasOwnProperty('fontSize') && typeof style.fontSize === 'number')\r\n {\r\n style.fontSize = style.fontSize.toString() + 'px';\r\n }\r\n\r\n for (var key in propertyMap)\r\n {\r\n var value = (setDefaults) ? propertyMap[key][1] : this[key];\r\n\r\n if (key === 'wordWrapCallback' || key === 'wordWrapCallbackScope')\r\n {\r\n // Callback & scope should be set without processing the values\r\n this[key] = GetValue(style, propertyMap[key][0], value);\r\n }\r\n else\r\n {\r\n this[key] = GetAdvancedValue(style, propertyMap[key][0], value);\r\n }\r\n }\r\n\r\n // Allow for 'font' override\r\n var font = GetValue(style, 'font', null);\r\n\r\n if (font !== null)\r\n {\r\n this.setFont(font, false);\r\n }\r\n\r\n this._font = [ this.fontStyle, this.fontSize, this.fontFamily ].join(' ').trim();\r\n\r\n // Allow for 'fill' to be used in place of 'color'\r\n var fill = GetValue(style, 'fill', null);\r\n\r\n if (fill !== null)\r\n {\r\n this.color = fill;\r\n }\r\n\r\n if (updateText)\r\n {\r\n return this.update(true);\r\n }\r\n else\r\n {\r\n return this.parent;\r\n }\r\n },\r\n\r\n /**\r\n * Synchronize the font settings to the given Canvas Rendering Context.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#syncFont\r\n * @since 3.0.0\r\n *\r\n * @param {HTMLCanvasElement} canvas - The Canvas Element.\r\n * @param {CanvasRenderingContext2D} context - The Canvas Rendering Context.\r\n */\r\n syncFont: function (canvas, context)\r\n {\r\n context.font = this._font;\r\n },\r\n\r\n /**\r\n * Synchronize the text style settings to the given Canvas Rendering Context.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#syncStyle\r\n * @since 3.0.0\r\n *\r\n * @param {HTMLCanvasElement} canvas - The Canvas Element.\r\n * @param {CanvasRenderingContext2D} context - The Canvas Rendering Context.\r\n */\r\n syncStyle: function (canvas, context)\r\n {\r\n context.textBaseline = 'alphabetic';\r\n\r\n context.fillStyle = this.color;\r\n context.strokeStyle = this.stroke;\r\n\r\n context.lineWidth = this.strokeThickness;\r\n context.lineCap = 'round';\r\n context.lineJoin = 'round';\r\n },\r\n\r\n /**\r\n * Synchronize the shadow settings to the given Canvas Rendering Context.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#syncShadow\r\n * @since 3.0.0\r\n *\r\n * @param {CanvasRenderingContext2D} context - The Canvas Rendering Context.\r\n * @param {boolean} enabled - Whether shadows are enabled or not.\r\n */\r\n syncShadow: function (context, enabled)\r\n {\r\n if (enabled)\r\n {\r\n context.shadowOffsetX = this.shadowOffsetX;\r\n context.shadowOffsetY = this.shadowOffsetY;\r\n context.shadowColor = this.shadowColor;\r\n context.shadowBlur = this.shadowBlur;\r\n }\r\n else\r\n {\r\n context.shadowOffsetX = 0;\r\n context.shadowOffsetY = 0;\r\n context.shadowColor = 0;\r\n context.shadowBlur = 0;\r\n }\r\n },\r\n\r\n /**\r\n * Update the style settings for the parent Text object.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#update\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} recalculateMetrics - Whether to recalculate font and text metrics.\r\n *\r\n * @return {Phaser.GameObjects.Text} The parent Text object.\r\n */\r\n update: function (recalculateMetrics)\r\n {\r\n if (recalculateMetrics)\r\n {\r\n this._font = [ this.fontStyle, this.fontSize, this.fontFamily ].join(' ').trim();\r\n\r\n this.metrics = MeasureText(this);\r\n }\r\n\r\n return this.parent.updateText();\r\n },\r\n\r\n /**\r\n * Set the font.\r\n *\r\n * If a string is given, the font family is set.\r\n *\r\n * If an object is given, the `fontFamily`, `fontSize` and `fontStyle`\r\n * properties of that object are set.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#setFont\r\n * @since 3.0.0\r\n *\r\n * @param {(string|object)} font - The font family or font settings to set.\r\n * @param {boolean} [updateText=true] - Whether to update the text immediately.\r\n *\r\n * @return {Phaser.GameObjects.Text} The parent Text object.\r\n */\r\n setFont: function (font, updateText)\r\n {\r\n if (updateText === undefined) { updateText = true; }\r\n\r\n var fontFamily = font;\r\n var fontSize = '';\r\n var fontStyle = '';\r\n\r\n if (typeof font !== 'string')\r\n {\r\n fontFamily = GetValue(font, 'fontFamily', 'Courier');\r\n fontSize = GetValue(font, 'fontSize', '16px');\r\n fontStyle = GetValue(font, 'fontStyle', '');\r\n }\r\n else\r\n {\r\n var fontSplit = font.split(' ');\r\n\r\n var i = 0;\r\n\r\n fontStyle = (fontSplit.length > 2) ? fontSplit[i++] : '';\r\n fontSize = fontSplit[i++] || '16px';\r\n fontFamily = fontSplit[i++] || 'Courier';\r\n }\r\n\r\n if (fontFamily !== this.fontFamily || fontSize !== this.fontSize || fontStyle !== this.fontStyle)\r\n {\r\n this.fontFamily = fontFamily;\r\n this.fontSize = fontSize;\r\n this.fontStyle = fontStyle;\r\n\r\n if (updateText)\r\n {\r\n this.update(true);\r\n }\r\n }\r\n\r\n return this.parent;\r\n },\r\n\r\n /**\r\n * Set the font family.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#setFontFamily\r\n * @since 3.0.0\r\n *\r\n * @param {string} family - The font family.\r\n *\r\n * @return {Phaser.GameObjects.Text} The parent Text object.\r\n */\r\n setFontFamily: function (family)\r\n {\r\n if (this.fontFamily !== family)\r\n {\r\n this.fontFamily = family;\r\n\r\n this.update(true);\r\n }\r\n\r\n return this.parent;\r\n },\r\n\r\n /**\r\n * Set the font style.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#setFontStyle\r\n * @since 3.0.0\r\n *\r\n * @param {string} style - The font style.\r\n *\r\n * @return {Phaser.GameObjects.Text} The parent Text object.\r\n */\r\n setFontStyle: function (style)\r\n {\r\n if (this.fontStyle !== style)\r\n {\r\n this.fontStyle = style;\r\n\r\n this.update(true);\r\n }\r\n\r\n return this.parent;\r\n },\r\n\r\n /**\r\n * Set the font size.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#setFontSize\r\n * @since 3.0.0\r\n *\r\n * @param {(number|string)} size - The font size.\r\n *\r\n * @return {Phaser.GameObjects.Text} The parent Text object.\r\n */\r\n setFontSize: function (size)\r\n {\r\n if (typeof size === 'number')\r\n {\r\n size = size.toString() + 'px';\r\n }\r\n\r\n if (this.fontSize !== size)\r\n {\r\n this.fontSize = size;\r\n\r\n this.update(true);\r\n }\r\n\r\n return this.parent;\r\n },\r\n\r\n /**\r\n * Set the test string to use when measuring the font.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#setTestString\r\n * @since 3.0.0\r\n *\r\n * @param {string} string - The test string to use when measuring the font.\r\n *\r\n * @return {Phaser.GameObjects.Text} The parent Text object.\r\n */\r\n setTestString: function (string)\r\n {\r\n this.testString = string;\r\n\r\n return this.update(true);\r\n },\r\n\r\n /**\r\n * Set a fixed width and height for the text.\r\n *\r\n * Pass in `0` for either of these parameters to disable fixed width or height respectively.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#setFixedSize\r\n * @since 3.0.0\r\n *\r\n * @param {number} width - The fixed width to set.\r\n * @param {number} height - The fixed height to set.\r\n *\r\n * @return {Phaser.GameObjects.Text} The parent Text object.\r\n */\r\n setFixedSize: function (width, height)\r\n {\r\n this.fixedWidth = width;\r\n this.fixedHeight = height;\r\n\r\n if (width)\r\n {\r\n this.parent.width = width;\r\n }\r\n\r\n if (height)\r\n {\r\n this.parent.height = height;\r\n }\r\n\r\n return this.update(false);\r\n },\r\n\r\n /**\r\n * Set the background color.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#setBackgroundColor\r\n * @since 3.0.0\r\n *\r\n * @param {string} color - The background color.\r\n *\r\n * @return {Phaser.GameObjects.Text} The parent Text object.\r\n */\r\n setBackgroundColor: function (color)\r\n {\r\n this.backgroundColor = color;\r\n\r\n return this.update(false);\r\n },\r\n\r\n /**\r\n * Set the text fill color.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#setFill\r\n * @since 3.0.0\r\n *\r\n * @param {string} color - The text fill color.\r\n *\r\n * @return {Phaser.GameObjects.Text} The parent Text object.\r\n */\r\n setFill: function (color)\r\n {\r\n this.color = color;\r\n\r\n return this.update(false);\r\n },\r\n\r\n /**\r\n * Set the text fill color.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#setColor\r\n * @since 3.0.0\r\n *\r\n * @param {string} color - The text fill color.\r\n *\r\n * @return {Phaser.GameObjects.Text} The parent Text object.\r\n */\r\n setColor: function (color)\r\n {\r\n this.color = color;\r\n\r\n return this.update(false);\r\n },\r\n\r\n /**\r\n * Set the resolution used by the Text object.\r\n *\r\n * By default it will be set to match the resolution set in the Game Config,\r\n * but you can override it via this method. It allows for much clearer text on High DPI devices,\r\n * at the cost of memory because it uses larger internal Canvas textures for the Text.\r\n * \r\n * Please use with caution, as the more high res Text you have, the more memory it uses up.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#setResolution\r\n * @since 3.12.0\r\n *\r\n * @param {number} value - The resolution for this Text object to use.\r\n *\r\n * @return {Phaser.GameObjects.Text} The parent Text object.\r\n */\r\n setResolution: function (value)\r\n {\r\n this.resolution = value;\r\n\r\n return this.update(false);\r\n },\r\n\r\n /**\r\n * Set the stroke settings.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#setStroke\r\n * @since 3.0.0\r\n *\r\n * @param {string} color - The stroke color.\r\n * @param {number} thickness - The stroke thickness.\r\n *\r\n * @return {Phaser.GameObjects.Text} The parent Text object.\r\n */\r\n setStroke: function (color, thickness)\r\n {\r\n if (thickness === undefined) { thickness = this.strokeThickness; }\r\n\r\n if (color === undefined && this.strokeThickness !== 0)\r\n {\r\n // Reset the stroke to zero (disabling it)\r\n this.strokeThickness = 0;\r\n\r\n this.update(true);\r\n }\r\n else if (this.stroke !== color || this.strokeThickness !== thickness)\r\n {\r\n this.stroke = color;\r\n this.strokeThickness = thickness;\r\n\r\n this.update(true);\r\n }\r\n\r\n return this.parent;\r\n },\r\n\r\n /**\r\n * Set the shadow settings.\r\n * \r\n * Calling this method always re-measures the parent Text object,\r\n * so only call it when you actually change the shadow settings.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#setShadow\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x=0] - The horizontal shadow offset.\r\n * @param {number} [y=0] - The vertical shadow offset.\r\n * @param {string} [color='#000'] - The shadow color.\r\n * @param {number} [blur=0] - The shadow blur radius.\r\n * @param {boolean} [shadowStroke=false] - Whether to stroke the shadow.\r\n * @param {boolean} [shadowFill=true] - Whether to fill the shadow.\r\n *\r\n * @return {Phaser.GameObjects.Text} The parent Text object.\r\n */\r\n setShadow: function (x, y, color, blur, shadowStroke, shadowFill)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n if (color === undefined) { color = '#000'; }\r\n if (blur === undefined) { blur = 0; }\r\n if (shadowStroke === undefined) { shadowStroke = false; }\r\n if (shadowFill === undefined) { shadowFill = true; }\r\n\r\n this.shadowOffsetX = x;\r\n this.shadowOffsetY = y;\r\n this.shadowColor = color;\r\n this.shadowBlur = blur;\r\n this.shadowStroke = shadowStroke;\r\n this.shadowFill = shadowFill;\r\n\r\n return this.update(false);\r\n },\r\n\r\n /**\r\n * Set the shadow offset.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#setShadowOffset\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x=0] - The horizontal shadow offset.\r\n * @param {number} [y=0] - The vertical shadow offset.\r\n *\r\n * @return {Phaser.GameObjects.Text} The parent Text object.\r\n */\r\n setShadowOffset: function (x, y)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = x; }\r\n\r\n this.shadowOffsetX = x;\r\n this.shadowOffsetY = y;\r\n\r\n return this.update(false);\r\n },\r\n\r\n /**\r\n * Set the shadow color.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#setShadowColor\r\n * @since 3.0.0\r\n *\r\n * @param {string} [color='#000'] - The shadow color.\r\n *\r\n * @return {Phaser.GameObjects.Text} The parent Text object.\r\n */\r\n setShadowColor: function (color)\r\n {\r\n if (color === undefined) { color = '#000'; }\r\n\r\n this.shadowColor = color;\r\n\r\n return this.update(false);\r\n },\r\n\r\n /**\r\n * Set the shadow blur radius.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#setShadowBlur\r\n * @since 3.0.0\r\n *\r\n * @param {number} [blur=0] - The shadow blur radius.\r\n *\r\n * @return {Phaser.GameObjects.Text} The parent Text object.\r\n */\r\n setShadowBlur: function (blur)\r\n {\r\n if (blur === undefined) { blur = 0; }\r\n\r\n this.shadowBlur = blur;\r\n\r\n return this.update(false);\r\n },\r\n\r\n /**\r\n * Enable or disable shadow stroke.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#setShadowStroke\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} enabled - Whether shadow stroke is enabled or not.\r\n *\r\n * @return {Phaser.GameObjects.Text} The parent Text object.\r\n */\r\n setShadowStroke: function (enabled)\r\n {\r\n this.shadowStroke = enabled;\r\n\r\n return this.update(false);\r\n },\r\n\r\n /**\r\n * Enable or disable shadow fill.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#setShadowFill\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} enabled - Whether shadow fill is enabled or not.\r\n *\r\n * @return {Phaser.GameObjects.Text} The parent Text object.\r\n */\r\n setShadowFill: function (enabled)\r\n {\r\n this.shadowFill = enabled;\r\n\r\n return this.update(false);\r\n },\r\n\r\n /**\r\n * Set the width (in pixels) to use for wrapping lines.\r\n *\r\n * Pass in null to remove wrapping by width.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#setWordWrapWidth\r\n * @since 3.0.0\r\n *\r\n * @param {number} width - The maximum width of a line in pixels. Set to null to remove wrapping.\r\n * @param {boolean} [useAdvancedWrap=false] - Whether or not to use the advanced wrapping\r\n * algorithm. If true, spaces are collapsed and whitespace is trimmed from lines. If false,\r\n * spaces and whitespace are left as is.\r\n *\r\n * @return {Phaser.GameObjects.Text} The parent Text object.\r\n */\r\n setWordWrapWidth: function (width, useAdvancedWrap)\r\n {\r\n if (useAdvancedWrap === undefined) { useAdvancedWrap = false; }\r\n\r\n this.wordWrapWidth = width;\r\n this.wordWrapUseAdvanced = useAdvancedWrap;\r\n\r\n return this.update(false);\r\n },\r\n\r\n /**\r\n * Set a custom callback for wrapping lines.\r\n *\r\n * Pass in null to remove wrapping by callback.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#setWordWrapCallback\r\n * @since 3.0.0\r\n *\r\n * @param {TextStyleWordWrapCallback} callback - A custom function that will be responsible for wrapping the\r\n * text. It will receive two arguments: text (the string to wrap), textObject (this Text\r\n * instance). It should return the wrapped lines either as an array of lines or as a string with\r\n * newline characters in place to indicate where breaks should happen.\r\n * @param {object} [scope=null] - The scope that will be applied when the callback is invoked.\r\n *\r\n * @return {Phaser.GameObjects.Text} The parent Text object.\r\n */\r\n setWordWrapCallback: function (callback, scope)\r\n {\r\n if (scope === undefined) { scope = null; }\r\n\r\n this.wordWrapCallback = callback;\r\n this.wordWrapCallbackScope = scope;\r\n\r\n return this.update(false);\r\n },\r\n\r\n /**\r\n * Set the alignment of the text in this Text object.\r\n * \r\n * The argument can be one of: `left`, `right`, `center` or `justify`.\r\n * \r\n * Alignment only works if the Text object has more than one line of text.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#setAlign\r\n * @since 3.0.0\r\n *\r\n * @param {string} [align='left'] - The text alignment for multi-line text.\r\n *\r\n * @return {Phaser.GameObjects.Text} The parent Text object.\r\n */\r\n setAlign: function (align)\r\n {\r\n if (align === undefined) { align = 'left'; }\r\n\r\n this.align = align;\r\n\r\n return this.update(false);\r\n },\r\n\r\n /**\r\n * Set the maximum number of lines to draw.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#setMaxLines\r\n * @since 3.0.0\r\n *\r\n * @param {integer} [max=0] - The maximum number of lines to draw.\r\n *\r\n * @return {Phaser.GameObjects.Text} The parent Text object.\r\n */\r\n setMaxLines: function (max)\r\n {\r\n if (max === undefined) { max = 0; }\r\n\r\n this.maxLines = max;\r\n\r\n return this.update(false);\r\n },\r\n\r\n /**\r\n * Get the current text metrics.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#getTextMetrics\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Types.GameObjects.Text.TextMetrics} The text metrics.\r\n */\r\n getTextMetrics: function ()\r\n {\r\n var metrics = this.metrics;\r\n\r\n return {\r\n ascent: metrics.ascent,\r\n descent: metrics.descent,\r\n fontSize: metrics.fontSize\r\n };\r\n },\r\n\r\n /**\r\n * Build a JSON representation of this Text Style.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#toJSON\r\n * @since 3.0.0\r\n *\r\n * @return {object} A JSON representation of this Text Style.\r\n */\r\n toJSON: function ()\r\n {\r\n var output = {};\r\n\r\n for (var key in propertyMap)\r\n {\r\n output[key] = this[key];\r\n }\r\n\r\n output.metrics = this.getTextMetrics();\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Destroy this Text Style.\r\n *\r\n * @method Phaser.GameObjects.TextStyle#destroy\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.parent = undefined;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = TextStyle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L1RleHRTdHlsZS5qcz9iNDk2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLHVCQUF1QixtQkFBTyxDQUFDLHVHQUFxQztBQUNwRSxlQUFlLG1CQUFPLENBQUMsdUZBQTZCO0FBQ3BELGtCQUFrQixtQkFBTyxDQUFDLGdGQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsd0JBQXdCO0FBQ25DLFdBQVcsd0NBQXdDO0FBQ25EO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3Q0FBd0M7QUFDdkQsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLG1CQUFtQjtBQUMxRCx3Q0FBd0MscUJBQXFCOztBQUU3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxrQkFBa0I7QUFDakMsZUFBZSx5QkFBeUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0JBQWtCO0FBQ2pDLGVBQWUseUJBQXlCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHlCQUF5QjtBQUN4QyxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0JBQWdCO0FBQy9CLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLG1CQUFtQjs7QUFFMUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0JBQWdCO0FBQy9CO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxrQ0FBa0M7O0FBRXhFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87QUFDckMsa0NBQWtDLGdCQUFnQjtBQUNsRCxpQ0FBaUMsVUFBVTtBQUMzQyx5Q0FBeUMsc0JBQXNCO0FBQy9ELHVDQUF1QyxtQkFBbUI7O0FBRTFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLGdCQUFnQjs7QUFFbEQ7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLFVBQVU7O0FBRTNDOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLDRDQUE0Qyx5QkFBeUI7O0FBRXJFO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDBCQUEwQjtBQUN6QztBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxjQUFjOztBQUVoRDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLGdCQUFnQjs7QUFFbEQ7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLFNBQVM7O0FBRXpDOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsMENBQTBDO0FBQzFEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvdGV4dC9UZXh0U3R5bGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBHZXRBZHZhbmNlZFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEFkdmFuY2VkVmFsdWUnKTtcclxudmFyIEdldFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldFZhbHVlJyk7XHJcbnZhciBNZWFzdXJlVGV4dCA9IHJlcXVpcmUoJy4vTWVhc3VyZVRleHQnKTtcclxuXHJcbi8vICBLZXk6IFsgT2JqZWN0IEtleSwgRGVmYXVsdCBWYWx1ZSBdXHJcblxyXG52YXIgcHJvcGVydHlNYXAgPSB7XHJcbiAgICBmb250RmFtaWx5OiBbICdmb250RmFtaWx5JywgJ0NvdXJpZXInIF0sXHJcbiAgICBmb250U2l6ZTogWyAnZm9udFNpemUnLCAnMTZweCcgXSxcclxuICAgIGZvbnRTdHlsZTogWyAnZm9udFN0eWxlJywgJycgXSxcclxuICAgIGJhY2tncm91bmRDb2xvcjogWyAnYmFja2dyb3VuZENvbG9yJywgbnVsbCBdLFxyXG4gICAgY29sb3I6IFsgJ2NvbG9yJywgJyNmZmYnIF0sXHJcbiAgICBzdHJva2U6IFsgJ3N0cm9rZScsICcjZmZmJyBdLFxyXG4gICAgc3Ryb2tlVGhpY2tuZXNzOiBbICdzdHJva2VUaGlja25lc3MnLCAwIF0sXHJcbiAgICBzaGFkb3dPZmZzZXRYOiBbICdzaGFkb3cub2Zmc2V0WCcsIDAgXSxcclxuICAgIHNoYWRvd09mZnNldFk6IFsgJ3NoYWRvdy5vZmZzZXRZJywgMCBdLFxyXG4gICAgc2hhZG93Q29sb3I6IFsgJ3NoYWRvdy5jb2xvcicsICcjMDAwJyBdLFxyXG4gICAgc2hhZG93Qmx1cjogWyAnc2hhZG93LmJsdXInLCAwIF0sXHJcbiAgICBzaGFkb3dTdHJva2U6IFsgJ3NoYWRvdy5zdHJva2UnLCBmYWxzZSBdLFxyXG4gICAgc2hhZG93RmlsbDogWyAnc2hhZG93LmZpbGwnLCBmYWxzZSBdLFxyXG4gICAgYWxpZ246IFsgJ2FsaWduJywgJ2xlZnQnIF0sXHJcbiAgICBtYXhMaW5lczogWyAnbWF4TGluZXMnLCAwIF0sXHJcbiAgICBmaXhlZFdpZHRoOiBbICdmaXhlZFdpZHRoJywgMCBdLFxyXG4gICAgZml4ZWRIZWlnaHQ6IFsgJ2ZpeGVkSGVpZ2h0JywgMCBdLFxyXG4gICAgcmVzb2x1dGlvbjogWyAncmVzb2x1dGlvbicsIDAgXSxcclxuICAgIHJ0bDogWyAncnRsJywgZmFsc2UgXSxcclxuICAgIHRlc3RTdHJpbmc6IFsgJ3Rlc3RTdHJpbmcnLCAnfE3Dg+KAsHFneScgXSxcclxuICAgIGJhc2VsaW5lWDogWyAnYmFzZWxpbmVYJywgMS4yIF0sXHJcbiAgICBiYXNlbGluZVk6IFsgJ2Jhc2VsaW5lWScsIDEuNCBdLFxyXG4gICAgd29yZFdyYXBXaWR0aDogWyAnd29yZFdyYXAud2lkdGgnLCBudWxsIF0sXHJcbiAgICB3b3JkV3JhcENhbGxiYWNrOiBbICd3b3JkV3JhcC5jYWxsYmFjaycsIG51bGwgXSxcclxuICAgIHdvcmRXcmFwQ2FsbGJhY2tTY29wZTogWyAnd29yZFdyYXAuY2FsbGJhY2tTY29wZScsIG51bGwgXSxcclxuICAgIHdvcmRXcmFwVXNlQWR2YW5jZWQ6IFsgJ3dvcmRXcmFwLnVzZUFkdmFuY2VkV3JhcCcsIGZhbHNlIF1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgVGV4dFN0eWxlIGNsYXNzIG1hbmFnZXMgYWxsIG9mIHRoZSBzdHlsZSBzZXR0aW5ncyBmb3IgYSBUZXh0IG9iamVjdC5cclxuICogXHJcbiAqIFRleHQgR2FtZSBPYmplY3RzIGNyZWF0ZSBhIFRleHRTdHlsZSBpbnN0YW5jZSBhdXRvbWF0aWNhbGx5LCB3aGljaCBpc1xyXG4gKiBhY2Nlc3NlZCB2aWEgdGhlIGBUZXh0LnN0eWxlYCBwcm9wZXJ0eS4gWW91IGRvIG5vdCBub3JtYWxseSBuZWVkIHRvXHJcbiAqIGluc3RhbnRpYXRlIG9uZSB5b3Vyc2VsZi5cclxuICpcclxuICogQGNsYXNzIFRleHRTdHlsZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gdGV4dCAtIFRoZSBUZXh0IG9iamVjdCB0aGF0IHRoaXMgVGV4dFN0eWxlIGlzIHN0eWxpbmcuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlRleHQuVGV4dFN0eWxlfSBzdHlsZSAtIFRoZSBzdHlsZSBzZXR0aW5ncyB0byBzZXQuXHJcbiAqL1xyXG52YXIgVGV4dFN0eWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFRleHRTdHlsZSAodGV4dCwgc3R5bGUpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFRleHQgb2JqZWN0IHRoYXQgdGhpcyBUZXh0U3R5bGUgaXMgc3R5bGluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjcGFyZW50XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGFyZW50ID0gdGV4dDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGZvbnQgZmFtaWx5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNmb250RmFtaWx5XHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAZGVmYXVsdCAnQ291cmllcidcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZvbnRGYW1pbHk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBmb250IHNpemUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI2ZvbnRTaXplXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAZGVmYXVsdCAnMTZweCdcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZvbnRTaXplO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZm9udCBzdHlsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjZm9udFN0eWxlXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZvbnRTdHlsZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGJhY2tncm91bmQgY29sb3IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI2JhY2tncm91bmRDb2xvclxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3I7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB0ZXh0IGZpbGwgY29sb3IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI2NvbG9yXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAZGVmYXVsdCAnI2ZmZidcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbG9yO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGV4dCBzdHJva2UgY29sb3IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3N0cm9rZVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQGRlZmF1bHQgJyNmZmYnXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zdHJva2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB0ZXh0IHN0cm9rZSB0aGlja25lc3MuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3N0cm9rZVRoaWNrbmVzc1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3Ryb2tlVGhpY2tuZXNzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaG9yaXpvbnRhbCBzaGFkb3cgb2Zmc2V0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNzaGFkb3dPZmZzZXRYXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zaGFkb3dPZmZzZXRYO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmVydGljYWwgc2hhZG93IG9mZnNldC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjc2hhZG93T2Zmc2V0WVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2hhZG93T2Zmc2V0WTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHNoYWRvdyBjb2xvci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjc2hhZG93Q29sb3JcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBkZWZhdWx0ICcjMDAwJ1xyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2hhZG93Q29sb3I7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBzaGFkb3cgYmx1ciByYWRpdXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3NoYWRvd0JsdXJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNoYWRvd0JsdXI7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgc2hhZG93IHN0cm9rZSBpcyBlbmFibGVkIG9yIG5vdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjc2hhZG93U3Ryb2tlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNoYWRvd1N0cm9rZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciBzaGFkb3cgZmlsbCBpcyBlbmFibGVkIG9yIG5vdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjc2hhZG93RmlsbFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zaGFkb3dGaWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGV4dCBhbGlnbm1lbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI2FsaWduXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAZGVmYXVsdCAnbGVmdCdcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFsaWduO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8gZHJhdy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjbWF4TGluZXNcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYXhMaW5lcztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGZpeGVkIHdpZHRoIG9mIHRoZSB0ZXh0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogYDBgIG1lYW5zIG5vIGZpeGVkIHdpdGguXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI2ZpeGVkV2lkdGhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZpeGVkV2lkdGg7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBmaXhlZCBoZWlnaHQgb2YgdGhlIHRleHQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBgMGAgbWVhbnMgbm8gZml4ZWQgaGVpZ2h0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNmaXhlZEhlaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZml4ZWRIZWlnaHQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSByZXNvbHV0aW9uIHRoZSB0ZXh0IGlzIHJlbmRlcmVkIHRvIGl0cyBpbnRlcm5hbCBjYW52YXMgYXQuXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHQgaXMgMCwgd2hpY2ggbWVhbnMgaXQgd2lsbCB1c2UgdGhlIHJlc29sdXRpb24gc2V0IGluIHRoZSBHYW1lIENvbmZpZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjcmVzb2x1dGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJlc29sdXRpb247XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhlIHRleHQgc2hvdWxkIHJlbmRlciByaWdodCB0byBsZWZ0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNydGxcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucnRsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGVzdCBzdHJpbmcgdG8gdXNlIHdoZW4gbWVhc3VyaW5nIHRoZSBmb250LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSN0ZXN0U3RyaW5nXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAZGVmYXVsdCAnfE3DiXFneSdcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRlc3RTdHJpbmc7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBhbW91bnQgb2YgaG9yaXpvbnRhbCBwYWRkaW5nIGFkZGVkIHRvIHRoZSB3aWR0aCBvZiB0aGUgdGV4dCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBmb250IG1ldHJpY3MuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI2Jhc2VsaW5lWFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMS4yXHJcbiAgICAgICAgICogQHNpbmNlIDMuMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5iYXNlbGluZVg7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBhbW91bnQgb2YgdmVydGljYWwgcGFkZGluZyBhZGRlZCB0byB0aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0IHdoZW4gY2FsY3VsYXRpbmcgdGhlIGZvbnQgbWV0cmljcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjYmFzZWxpbmVZXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxLjRcclxuICAgICAgICAgKiBAc2luY2UgMy4zLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJhc2VsaW5lWTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGZvbnQgc3R5bGUsIHNpemUgYW5kIGZhbWlseS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjX2ZvbnRcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fZm9udDtcclxuXHJcbiAgICAgICAgLy8gIFNldCB0byBkZWZhdWx0cyArIHVzZXIgc3R5bGVcclxuICAgICAgICB0aGlzLnNldFN0eWxlKHN0eWxlLCBmYWxzZSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIHZhciBtZXRyaWNzID0gR2V0VmFsdWUoc3R5bGUsICdtZXRyaWNzJywgZmFsc2UpO1xyXG5cclxuICAgICAgICAvLyAgUHJvdmlkZSBvcHRpb25hbCBUZXh0TWV0cmljcyBpbiB0aGUgc3R5bGUgb2JqZWN0IHRvIGF2b2lkIHRoZSBjYW52YXMgbG9vay11cCAvIHNjYW5uaW5nXHJcbiAgICAgICAgLy8gIERvaW5nIHRoaXMgaXMgcmVzZXQgaWYgeW91IHRoZW4gY2hhbmdlIHRoZSBmb250IG9mIHRoaXMgVGV4dFN0eWxlIGFmdGVyIGNyZWF0aW9uXHJcbiAgICAgICAgaWYgKG1ldHJpY3MpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1ldHJpY3MgPSB7XHJcbiAgICAgICAgICAgICAgICBhc2NlbnQ6IEdldFZhbHVlKG1ldHJpY3MsICdhc2NlbnQnLCAwKSxcclxuICAgICAgICAgICAgICAgIGRlc2NlbnQ6IEdldFZhbHVlKG1ldHJpY3MsICdkZXNjZW50JywgMCksXHJcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogR2V0VmFsdWUobWV0cmljcywgJ2ZvbnRTaXplJywgMClcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tZXRyaWNzID0gTWVhc3VyZVRleHQodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgdGV4dCBzdHlsZS5cclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdGV4dC5zZXRTdHlsZSh7XHJcbiAgICAgKiAgICAgZm9udFNpemU6ICc2NHB4JyxcclxuICAgICAqICAgICBmb250RmFtaWx5OiAnQXJpYWwnLFxyXG4gICAgICogICAgIGNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgKiAgICAgYWxpZ246ICdjZW50ZXInLFxyXG4gICAgICogICAgIGJhY2tncm91bmRDb2xvcjogJyNmZjAwZmYnXHJcbiAgICAgKiB9KTtcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjc2V0U3R5bGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlRleHQuVGV4dFN0eWxlfSBzdHlsZSAtIFRoZSBzdHlsZSBzZXR0aW5ncyB0byBzZXQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt1cGRhdGVUZXh0PXRydWVdIC0gV2hldGhlciB0byB1cGRhdGUgdGhlIHRleHQgaW1tZWRpYXRlbHkuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZXREZWZhdWx0cz1mYWxzZV0gLSBVc2UgdGhlIGRlZmF1bHQgdmFsdWVzIGlzIG5vdCBzZXQsIG9yIHRoZSBsb2NhbCB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoZSBwYXJlbnQgVGV4dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFN0eWxlOiBmdW5jdGlvbiAoc3R5bGUsIHVwZGF0ZVRleHQsIHNldERlZmF1bHRzKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh1cGRhdGVUZXh0ID09PSB1bmRlZmluZWQpIHsgdXBkYXRlVGV4dCA9IHRydWU7IH1cclxuICAgICAgICBpZiAoc2V0RGVmYXVsdHMgPT09IHVuZGVmaW5lZCkgeyBzZXREZWZhdWx0cyA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIC8vICBBdm9pZCB0eXBlIG11dGF0aW9uXHJcbiAgICAgICAgaWYgKHN0eWxlICYmIHN0eWxlLmhhc093blByb3BlcnR5KCdmb250U2l6ZScpICYmIHR5cGVvZiBzdHlsZS5mb250U2l6ZSA9PT0gJ251bWJlcicpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzdHlsZS5mb250U2l6ZSA9IHN0eWxlLmZvbnRTaXplLnRvU3RyaW5nKCkgKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHByb3BlcnR5TWFwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gKHNldERlZmF1bHRzKSA/IHByb3BlcnR5TWFwW2tleV1bMV0gOiB0aGlzW2tleV07XHJcblxyXG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnd29yZFdyYXBDYWxsYmFjaycgfHwga2V5ID09PSAnd29yZFdyYXBDYWxsYmFja1Njb3BlJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gQ2FsbGJhY2sgJiBzY29wZSBzaG91bGQgYmUgc2V0IHdpdGhvdXQgcHJvY2Vzc2luZyB0aGUgdmFsdWVzXHJcbiAgICAgICAgICAgICAgICB0aGlzW2tleV0gPSBHZXRWYWx1ZShzdHlsZSwgcHJvcGVydHlNYXBba2V5XVswXSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpc1trZXldID0gR2V0QWR2YW5jZWRWYWx1ZShzdHlsZSwgcHJvcGVydHlNYXBba2V5XVswXSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgQWxsb3cgZm9yICdmb250JyBvdmVycmlkZVxyXG4gICAgICAgIHZhciBmb250ID0gR2V0VmFsdWUoc3R5bGUsICdmb250JywgbnVsbCk7XHJcblxyXG4gICAgICAgIGlmIChmb250ICE9PSBudWxsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRGb250KGZvbnQsIGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2ZvbnQgPSBbIHRoaXMuZm9udFN0eWxlLCB0aGlzLmZvbnRTaXplLCB0aGlzLmZvbnRGYW1pbHkgXS5qb2luKCcgJykudHJpbSgpO1xyXG5cclxuICAgICAgICAvLyAgQWxsb3cgZm9yICdmaWxsJyB0byBiZSB1c2VkIGluIHBsYWNlIG9mICdjb2xvcidcclxuICAgICAgICB2YXIgZmlsbCA9IEdldFZhbHVlKHN0eWxlLCAnZmlsbCcsIG51bGwpO1xyXG5cclxuICAgICAgICBpZiAoZmlsbCAhPT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sb3IgPSBmaWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHVwZGF0ZVRleHQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3luY2hyb25pemUgdGhlIGZvbnQgc2V0dGluZ3MgdG8gdGhlIGdpdmVuIENhbnZhcyBSZW5kZXJpbmcgQ29udGV4dC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjc3luY0ZvbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7SFRNTENhbnZhc0VsZW1lbnR9IGNhbnZhcyAtIFRoZSBDYW52YXMgRWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjb250ZXh0IC0gVGhlIENhbnZhcyBSZW5kZXJpbmcgQ29udGV4dC5cclxuICAgICAqL1xyXG4gICAgc3luY0ZvbnQ6IGZ1bmN0aW9uIChjYW52YXMsIGNvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgY29udGV4dC5mb250ID0gdGhpcy5fZm9udDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTeW5jaHJvbml6ZSB0aGUgdGV4dCBzdHlsZSBzZXR0aW5ncyB0byB0aGUgZ2l2ZW4gQ2FudmFzIFJlbmRlcmluZyBDb250ZXh0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNzeW5jU3R5bGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7SFRNTENhbnZhc0VsZW1lbnR9IGNhbnZhcyAtIFRoZSBDYW52YXMgRWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjb250ZXh0IC0gVGhlIENhbnZhcyBSZW5kZXJpbmcgQ29udGV4dC5cclxuICAgICAqL1xyXG4gICAgc3luY1N0eWxlOiBmdW5jdGlvbiAoY2FudmFzLCBjb250ZXh0KVxyXG4gICAge1xyXG4gICAgICAgIGNvbnRleHQudGV4dEJhc2VsaW5lID0gJ2FscGhhYmV0aWMnO1xyXG5cclxuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHRoaXMuY29sb3I7XHJcbiAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IHRoaXMuc3Ryb2tlO1xyXG5cclxuICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IHRoaXMuc3Ryb2tlVGhpY2tuZXNzO1xyXG4gICAgICAgIGNvbnRleHQubGluZUNhcCA9ICdyb3VuZCc7XHJcbiAgICAgICAgY29udGV4dC5saW5lSm9pbiA9ICdyb3VuZCc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3luY2hyb25pemUgdGhlIHNoYWRvdyBzZXR0aW5ncyB0byB0aGUgZ2l2ZW4gQ2FudmFzIFJlbmRlcmluZyBDb250ZXh0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNzeW5jU2hhZG93XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY29udGV4dCAtIFRoZSBDYW52YXMgUmVuZGVyaW5nIENvbnRleHQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQgLSBXaGV0aGVyIHNoYWRvd3MgYXJlIGVuYWJsZWQgb3Igbm90LlxyXG4gICAgICovXHJcbiAgICBzeW5jU2hhZG93OiBmdW5jdGlvbiAoY29udGV4dCwgZW5hYmxlZClcclxuICAgIHtcclxuICAgICAgICBpZiAoZW5hYmxlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRleHQuc2hhZG93T2Zmc2V0WCA9IHRoaXMuc2hhZG93T2Zmc2V0WDtcclxuICAgICAgICAgICAgY29udGV4dC5zaGFkb3dPZmZzZXRZID0gdGhpcy5zaGFkb3dPZmZzZXRZO1xyXG4gICAgICAgICAgICBjb250ZXh0LnNoYWRvd0NvbG9yID0gdGhpcy5zaGFkb3dDb2xvcjtcclxuICAgICAgICAgICAgY29udGV4dC5zaGFkb3dCbHVyID0gdGhpcy5zaGFkb3dCbHVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb250ZXh0LnNoYWRvd09mZnNldFggPSAwO1xyXG4gICAgICAgICAgICBjb250ZXh0LnNoYWRvd09mZnNldFkgPSAwO1xyXG4gICAgICAgICAgICBjb250ZXh0LnNoYWRvd0NvbG9yID0gMDtcclxuICAgICAgICAgICAgY29udGV4dC5zaGFkb3dCbHVyID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHRoZSBzdHlsZSBzZXR0aW5ncyBmb3IgdGhlIHBhcmVudCBUZXh0IG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjdXBkYXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlY2FsY3VsYXRlTWV0cmljcyAtIFdoZXRoZXIgdG8gcmVjYWxjdWxhdGUgZm9udCBhbmQgdGV4dCBtZXRyaWNzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGUgcGFyZW50IFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChyZWNhbGN1bGF0ZU1ldHJpY3MpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHJlY2FsY3VsYXRlTWV0cmljcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZvbnQgPSBbIHRoaXMuZm9udFN0eWxlLCB0aGlzLmZvbnRTaXplLCB0aGlzLmZvbnRGYW1pbHkgXS5qb2luKCcgJykudHJpbSgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tZXRyaWNzID0gTWVhc3VyZVRleHQodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQudXBkYXRlVGV4dCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgZm9udC5cclxuICAgICAqXHJcbiAgICAgKiBJZiBhIHN0cmluZyBpcyBnaXZlbiwgdGhlIGZvbnQgZmFtaWx5IGlzIHNldC5cclxuICAgICAqXHJcbiAgICAgKiBJZiBhbiBvYmplY3QgaXMgZ2l2ZW4sIHRoZSBgZm9udEZhbWlseWAsIGBmb250U2l6ZWAgYW5kIGBmb250U3R5bGVgXHJcbiAgICAgKiBwcm9wZXJ0aWVzIG9mIHRoYXQgb2JqZWN0IGFyZSBzZXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3NldEZvbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xvYmplY3QpfSBmb250IC0gVGhlIGZvbnQgZmFtaWx5IG9yIGZvbnQgc2V0dGluZ3MgdG8gc2V0LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdXBkYXRlVGV4dD10cnVlXSAtIFdoZXRoZXIgdG8gdXBkYXRlIHRoZSB0ZXh0IGltbWVkaWF0ZWx5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGUgcGFyZW50IFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRGb250OiBmdW5jdGlvbiAoZm9udCwgdXBkYXRlVGV4dClcclxuICAgIHtcclxuICAgICAgICBpZiAodXBkYXRlVGV4dCA9PT0gdW5kZWZpbmVkKSB7IHVwZGF0ZVRleHQgPSB0cnVlOyB9XHJcblxyXG4gICAgICAgIHZhciBmb250RmFtaWx5ID0gZm9udDtcclxuICAgICAgICB2YXIgZm9udFNpemUgPSAnJztcclxuICAgICAgICB2YXIgZm9udFN0eWxlID0gJyc7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgZm9udCAhPT0gJ3N0cmluZycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmb250RmFtaWx5ID0gR2V0VmFsdWUoZm9udCwgJ2ZvbnRGYW1pbHknLCAnQ291cmllcicpO1xyXG4gICAgICAgICAgICBmb250U2l6ZSA9IEdldFZhbHVlKGZvbnQsICdmb250U2l6ZScsICcxNnB4Jyk7XHJcbiAgICAgICAgICAgIGZvbnRTdHlsZSA9IEdldFZhbHVlKGZvbnQsICdmb250U3R5bGUnLCAnJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBmb250U3BsaXQgPSBmb250LnNwbGl0KCcgJyk7XHJcblxyXG4gICAgICAgICAgICB2YXIgaSA9IDA7XHJcblxyXG4gICAgICAgICAgICBmb250U3R5bGUgPSAoZm9udFNwbGl0Lmxlbmd0aCA+IDIpID8gZm9udFNwbGl0W2krK10gOiAnJztcclxuICAgICAgICAgICAgZm9udFNpemUgPSBmb250U3BsaXRbaSsrXSB8fCAnMTZweCc7XHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHkgPSBmb250U3BsaXRbaSsrXSB8fCAnQ291cmllcic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZm9udEZhbWlseSAhPT0gdGhpcy5mb250RmFtaWx5IHx8IGZvbnRTaXplICE9PSB0aGlzLmZvbnRTaXplIHx8IGZvbnRTdHlsZSAhPT0gdGhpcy5mb250U3R5bGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZvbnRGYW1pbHkgPSBmb250RmFtaWx5O1xyXG4gICAgICAgICAgICB0aGlzLmZvbnRTaXplID0gZm9udFNpemU7XHJcbiAgICAgICAgICAgIHRoaXMuZm9udFN0eWxlID0gZm9udFN0eWxlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHVwZGF0ZVRleHQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBmb250IGZhbWlseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjc2V0Rm9udEZhbWlseVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGZhbWlseSAtIFRoZSBmb250IGZhbWlseS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhlIHBhcmVudCBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Rm9udEZhbWlseTogZnVuY3Rpb24gKGZhbWlseSlcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5mb250RmFtaWx5ICE9PSBmYW1pbHkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZvbnRGYW1pbHkgPSBmYW1pbHk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIGZvbnQgc3R5bGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3NldEZvbnRTdHlsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN0eWxlIC0gVGhlIGZvbnQgc3R5bGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoZSBwYXJlbnQgVGV4dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEZvbnRTdHlsZTogZnVuY3Rpb24gKHN0eWxlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmZvbnRTdHlsZSAhPT0gc3R5bGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZvbnRTdHlsZSA9IHN0eWxlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBmb250IHNpemUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3NldEZvbnRTaXplXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhudW1iZXJ8c3RyaW5nKX0gc2l6ZSAtIFRoZSBmb250IHNpemUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoZSBwYXJlbnQgVGV4dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEZvbnRTaXplOiBmdW5jdGlvbiAoc2l6ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodHlwZW9mIHNpemUgPT09ICdudW1iZXInKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc2l6ZSA9IHNpemUudG9TdHJpbmcoKSArICdweCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5mb250U2l6ZSAhPT0gc2l6ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9udFNpemUgPSBzaXplO1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSB0ZXN0IHN0cmluZyB0byB1c2Ugd2hlbiBtZWFzdXJpbmcgdGhlIGZvbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3NldFRlc3RTdHJpbmdcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgLSBUaGUgdGVzdCBzdHJpbmcgdG8gdXNlIHdoZW4gbWVhc3VyaW5nIHRoZSBmb250LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGUgcGFyZW50IFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRUZXN0U3RyaW5nOiBmdW5jdGlvbiAoc3RyaW5nKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMudGVzdFN0cmluZyA9IHN0cmluZztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhIGZpeGVkIHdpZHRoIGFuZCBoZWlnaHQgZm9yIHRoZSB0ZXh0LlxyXG4gICAgICpcclxuICAgICAqIFBhc3MgaW4gYDBgIGZvciBlaXRoZXIgb2YgdGhlc2UgcGFyYW1ldGVycyB0byBkaXNhYmxlIGZpeGVkIHdpZHRoIG9yIGhlaWdodCByZXNwZWN0aXZlbHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3NldEZpeGVkU2l6ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIGZpeGVkIHdpZHRoIHRvIHNldC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgZml4ZWQgaGVpZ2h0IHRvIHNldC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhlIHBhcmVudCBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Rml4ZWRTaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmZpeGVkV2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLmZpeGVkSGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICBpZiAod2lkdGgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGhlaWdodClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmhlaWdodCA9IGhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBiYWNrZ3JvdW5kIGNvbG9yLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNzZXRCYWNrZ3JvdW5kQ29sb3JcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIFRoZSBiYWNrZ3JvdW5kIGNvbG9yLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGUgcGFyZW50IFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRCYWNrZ3JvdW5kQ29sb3I6IGZ1bmN0aW9uIChjb2xvcilcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IGNvbG9yO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgdGV4dCBmaWxsIGNvbG9yLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNzZXRGaWxsXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBUaGUgdGV4dCBmaWxsIGNvbG9yLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGUgcGFyZW50IFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRGaWxsOiBmdW5jdGlvbiAoY29sb3IpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5jb2xvciA9IGNvbG9yO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgdGV4dCBmaWxsIGNvbG9yLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNzZXRDb2xvclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gVGhlIHRleHQgZmlsbCBjb2xvci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhlIHBhcmVudCBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Q29sb3I6IGZ1bmN0aW9uIChjb2xvcilcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNvbG9yID0gY29sb3I7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSByZXNvbHV0aW9uIHVzZWQgYnkgdGhlIFRleHQgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEJ5IGRlZmF1bHQgaXQgd2lsbCBiZSBzZXQgdG8gbWF0Y2ggdGhlIHJlc29sdXRpb24gc2V0IGluIHRoZSBHYW1lIENvbmZpZyxcclxuICAgICAqIGJ1dCB5b3UgY2FuIG92ZXJyaWRlIGl0IHZpYSB0aGlzIG1ldGhvZC4gSXQgYWxsb3dzIGZvciBtdWNoIGNsZWFyZXIgdGV4dCBvbiBIaWdoIERQSSBkZXZpY2VzLFxyXG4gICAgICogYXQgdGhlIGNvc3Qgb2YgbWVtb3J5IGJlY2F1c2UgaXQgdXNlcyBsYXJnZXIgaW50ZXJuYWwgQ2FudmFzIHRleHR1cmVzIGZvciB0aGUgVGV4dC5cclxuICAgICAqIFxyXG4gICAgICogUGxlYXNlIHVzZSB3aXRoIGNhdXRpb24sIGFzIHRoZSBtb3JlIGhpZ2ggcmVzIFRleHQgeW91IGhhdmUsIHRoZSBtb3JlIG1lbW9yeSBpdCB1c2VzIHVwLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNzZXRSZXNvbHV0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHJlc29sdXRpb24gZm9yIHRoaXMgVGV4dCBvYmplY3QgdG8gdXNlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGUgcGFyZW50IFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRSZXNvbHV0aW9uOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5yZXNvbHV0aW9uID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBzdHJva2Ugc2V0dGluZ3MuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3NldFN0cm9rZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gVGhlIHN0cm9rZSBjb2xvci5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aGlja25lc3MgLSBUaGUgc3Ryb2tlIHRoaWNrbmVzcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhlIHBhcmVudCBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U3Ryb2tlOiBmdW5jdGlvbiAoY29sb3IsIHRoaWNrbmVzcylcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpY2tuZXNzID09PSB1bmRlZmluZWQpIHsgdGhpY2tuZXNzID0gdGhpcy5zdHJva2VUaGlja25lc3M7IH1cclxuXHJcbiAgICAgICAgaWYgKGNvbG9yID09PSB1bmRlZmluZWQgJiYgdGhpcy5zdHJva2VUaGlja25lc3MgIT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgUmVzZXQgdGhlIHN0cm9rZSB0byB6ZXJvIChkaXNhYmxpbmcgaXQpXHJcbiAgICAgICAgICAgIHRoaXMuc3Ryb2tlVGhpY2tuZXNzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnN0cm9rZSAhPT0gY29sb3IgfHwgdGhpcy5zdHJva2VUaGlja25lc3MgIT09IHRoaWNrbmVzcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc3Ryb2tlID0gY29sb3I7XHJcbiAgICAgICAgICAgIHRoaXMuc3Ryb2tlVGhpY2tuZXNzID0gdGhpY2tuZXNzO1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBzaGFkb3cgc2V0dGluZ3MuXHJcbiAgICAgKiBcclxuICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2QgYWx3YXlzIHJlLW1lYXN1cmVzIHRoZSBwYXJlbnQgVGV4dCBvYmplY3QsXHJcbiAgICAgKiBzbyBvbmx5IGNhbGwgaXQgd2hlbiB5b3UgYWN0dWFsbHkgY2hhbmdlIHRoZSBzaGFkb3cgc2V0dGluZ3MuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3NldFNoYWRvd1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgc2hhZG93IG9mZnNldC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBzaGFkb3cgb2Zmc2V0LlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjb2xvcj0nIzAwMCddIC0gVGhlIHNoYWRvdyBjb2xvci5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYmx1cj0wXSAtIFRoZSBzaGFkb3cgYmx1ciByYWRpdXMuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzaGFkb3dTdHJva2U9ZmFsc2VdIC0gV2hldGhlciB0byBzdHJva2UgdGhlIHNoYWRvdy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NoYWRvd0ZpbGw9dHJ1ZV0gLSBXaGV0aGVyIHRvIGZpbGwgdGhlIHNoYWRvdy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhlIHBhcmVudCBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U2hhZG93OiBmdW5jdGlvbiAoeCwgeSwgY29sb3IsIGJsdXIsIHNoYWRvd1N0cm9rZSwgc2hhZG93RmlsbClcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7IHggPSAwOyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0gMDsgfVxyXG4gICAgICAgIGlmIChjb2xvciA9PT0gdW5kZWZpbmVkKSB7IGNvbG9yID0gJyMwMDAnOyB9XHJcbiAgICAgICAgaWYgKGJsdXIgPT09IHVuZGVmaW5lZCkgeyBibHVyID0gMDsgfVxyXG4gICAgICAgIGlmIChzaGFkb3dTdHJva2UgPT09IHVuZGVmaW5lZCkgeyBzaGFkb3dTdHJva2UgPSBmYWxzZTsgfVxyXG4gICAgICAgIGlmIChzaGFkb3dGaWxsID09PSB1bmRlZmluZWQpIHsgc2hhZG93RmlsbCA9IHRydWU7IH1cclxuXHJcbiAgICAgICAgdGhpcy5zaGFkb3dPZmZzZXRYID0geDtcclxuICAgICAgICB0aGlzLnNoYWRvd09mZnNldFkgPSB5O1xyXG4gICAgICAgIHRoaXMuc2hhZG93Q29sb3IgPSBjb2xvcjtcclxuICAgICAgICB0aGlzLnNoYWRvd0JsdXIgPSBibHVyO1xyXG4gICAgICAgIHRoaXMuc2hhZG93U3Ryb2tlID0gc2hhZG93U3Ryb2tlO1xyXG4gICAgICAgIHRoaXMuc2hhZG93RmlsbCA9IHNoYWRvd0ZpbGw7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBzaGFkb3cgb2Zmc2V0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNzZXRTaGFkb3dPZmZzZXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSBob3Jpem9udGFsIHNoYWRvdyBvZmZzZXQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgdmVydGljYWwgc2hhZG93IG9mZnNldC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhlIHBhcmVudCBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U2hhZG93T2Zmc2V0OiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7IHggPSAwOyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0geDsgfVxyXG5cclxuICAgICAgICB0aGlzLnNoYWRvd09mZnNldFggPSB4O1xyXG4gICAgICAgIHRoaXMuc2hhZG93T2Zmc2V0WSA9IHk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBzaGFkb3cgY29sb3IuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3NldFNoYWRvd0NvbG9yXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NvbG9yPScjMDAwJ10gLSBUaGUgc2hhZG93IGNvbG9yLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGUgcGFyZW50IFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTaGFkb3dDb2xvcjogZnVuY3Rpb24gKGNvbG9yKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChjb2xvciA9PT0gdW5kZWZpbmVkKSB7IGNvbG9yID0gJyMwMDAnOyB9XHJcblxyXG4gICAgICAgIHRoaXMuc2hhZG93Q29sb3IgPSBjb2xvcjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHNoYWRvdyBibHVyIHJhZGl1cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjc2V0U2hhZG93Qmx1clxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtibHVyPTBdIC0gVGhlIHNoYWRvdyBibHVyIHJhZGl1cy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhlIHBhcmVudCBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U2hhZG93Qmx1cjogZnVuY3Rpb24gKGJsdXIpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGJsdXIgPT09IHVuZGVmaW5lZCkgeyBibHVyID0gMDsgfVxyXG5cclxuICAgICAgICB0aGlzLnNoYWRvd0JsdXIgPSBibHVyO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVuYWJsZSBvciBkaXNhYmxlIHNoYWRvdyBzdHJva2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3NldFNoYWRvd1N0cm9rZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkIC0gV2hldGhlciBzaGFkb3cgc3Ryb2tlIGlzIGVuYWJsZWQgb3Igbm90LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGUgcGFyZW50IFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTaGFkb3dTdHJva2U6IGZ1bmN0aW9uIChlbmFibGVkKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2hhZG93U3Ryb2tlID0gZW5hYmxlZDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbmFibGUgb3IgZGlzYWJsZSBzaGFkb3cgZmlsbC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjc2V0U2hhZG93RmlsbFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkIC0gV2hldGhlciBzaGFkb3cgZmlsbCBpcyBlbmFibGVkIG9yIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhlIHBhcmVudCBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U2hhZG93RmlsbDogZnVuY3Rpb24gKGVuYWJsZWQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zaGFkb3dGaWxsID0gZW5hYmxlZDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHdpZHRoIChpbiBwaXhlbHMpIHRvIHVzZSBmb3Igd3JhcHBpbmcgbGluZXMuXHJcbiAgICAgKlxyXG4gICAgICogUGFzcyBpbiBudWxsIHRvIHJlbW92ZSB3cmFwcGluZyBieSB3aWR0aC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjc2V0V29yZFdyYXBXaWR0aFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIG1heGltdW0gd2lkdGggb2YgYSBsaW5lIGluIHBpeGVscy4gU2V0IHRvIG51bGwgdG8gcmVtb3ZlIHdyYXBwaW5nLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdXNlQWR2YW5jZWRXcmFwPWZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRvIHVzZSB0aGUgYWR2YW5jZWQgd3JhcHBpbmdcclxuICAgICAqIGFsZ29yaXRobS4gSWYgdHJ1ZSwgc3BhY2VzIGFyZSBjb2xsYXBzZWQgYW5kIHdoaXRlc3BhY2UgaXMgdHJpbW1lZCBmcm9tIGxpbmVzLiBJZiBmYWxzZSxcclxuICAgICAqIHNwYWNlcyBhbmQgd2hpdGVzcGFjZSBhcmUgbGVmdCBhcyBpcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhlIHBhcmVudCBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0V29yZFdyYXBXaWR0aDogZnVuY3Rpb24gKHdpZHRoLCB1c2VBZHZhbmNlZFdyYXApXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHVzZUFkdmFuY2VkV3JhcCA9PT0gdW5kZWZpbmVkKSB7IHVzZUFkdmFuY2VkV3JhcCA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIHRoaXMud29yZFdyYXBXaWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMud29yZFdyYXBVc2VBZHZhbmNlZCA9IHVzZUFkdmFuY2VkV3JhcDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKGZhbHNlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYSBjdXN0b20gY2FsbGJhY2sgZm9yIHdyYXBwaW5nIGxpbmVzLlxyXG4gICAgICpcclxuICAgICAqIFBhc3MgaW4gbnVsbCB0byByZW1vdmUgd3JhcHBpbmcgYnkgY2FsbGJhY2suXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3NldFdvcmRXcmFwQ2FsbGJhY2tcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7VGV4dFN0eWxlV29yZFdyYXBDYWxsYmFja30gY2FsbGJhY2sgLSBBIGN1c3RvbSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIHdyYXBwaW5nIHRoZVxyXG4gICAgICogdGV4dC4gSXQgd2lsbCByZWNlaXZlIHR3byBhcmd1bWVudHM6IHRleHQgKHRoZSBzdHJpbmcgdG8gd3JhcCksIHRleHRPYmplY3QgKHRoaXMgVGV4dFxyXG4gICAgICogaW5zdGFuY2UpLiBJdCBzaG91bGQgcmV0dXJuIHRoZSB3cmFwcGVkIGxpbmVzIGVpdGhlciBhcyBhbiBhcnJheSBvZiBsaW5lcyBvciBhcyBhIHN0cmluZyB3aXRoXHJcbiAgICAgKiBuZXdsaW5lIGNoYXJhY3RlcnMgaW4gcGxhY2UgdG8gaW5kaWNhdGUgd2hlcmUgYnJlYWtzIHNob3VsZCBoYXBwZW4uXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW3Njb3BlPW51bGxdIC0gVGhlIHNjb3BlIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHdoZW4gdGhlIGNhbGxiYWNrIGlzIGludm9rZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoZSBwYXJlbnQgVGV4dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFdvcmRXcmFwQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgc2NvcGUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHNjb3BlID09PSB1bmRlZmluZWQpIHsgc2NvcGUgPSBudWxsOyB9XHJcblxyXG4gICAgICAgIHRoaXMud29yZFdyYXBDYWxsYmFjayA9IGNhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMud29yZFdyYXBDYWxsYmFja1Njb3BlID0gc2NvcGU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShmYWxzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBhbGlnbm1lbnQgb2YgdGhlIHRleHQgaW4gdGhpcyBUZXh0IG9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGFyZ3VtZW50IGNhbiBiZSBvbmUgb2Y6IGBsZWZ0YCwgYHJpZ2h0YCwgYGNlbnRlcmAgb3IgYGp1c3RpZnlgLlxyXG4gICAgICogXHJcbiAgICAgKiBBbGlnbm1lbnQgb25seSB3b3JrcyBpZiB0aGUgVGV4dCBvYmplY3QgaGFzIG1vcmUgdGhhbiBvbmUgbGluZSBvZiB0ZXh0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNzZXRBbGlnblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFthbGlnbj0nbGVmdCddIC0gVGhlIHRleHQgYWxpZ25tZW50IGZvciBtdWx0aS1saW5lIHRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoZSBwYXJlbnQgVGV4dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEFsaWduOiBmdW5jdGlvbiAoYWxpZ24pXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGFsaWduID09PSB1bmRlZmluZWQpIHsgYWxpZ24gPSAnbGVmdCc7IH1cclxuXHJcbiAgICAgICAgdGhpcy5hbGlnbiA9IGFsaWduO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8gZHJhdy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0U3R5bGUjc2V0TWF4TGluZXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW21heD0wXSAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0byBkcmF3LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGUgcGFyZW50IFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRNYXhMaW5lczogZnVuY3Rpb24gKG1heClcclxuICAgIHtcclxuICAgICAgICBpZiAobWF4ID09PSB1bmRlZmluZWQpIHsgbWF4ID0gMDsgfVxyXG5cclxuICAgICAgICB0aGlzLm1heExpbmVzID0gbWF4O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgY3VycmVudCB0ZXh0IG1ldHJpY3MuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI2dldFRleHRNZXRyaWNzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuVGV4dC5UZXh0TWV0cmljc30gVGhlIHRleHQgbWV0cmljcy5cclxuICAgICAqL1xyXG4gICAgZ2V0VGV4dE1ldHJpY3M6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG1ldHJpY3MgPSB0aGlzLm1ldHJpY3M7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGFzY2VudDogbWV0cmljcy5hc2NlbnQsXHJcbiAgICAgICAgICAgIGRlc2NlbnQ6IG1ldHJpY3MuZGVzY2VudCxcclxuICAgICAgICAgICAgZm9udFNpemU6IG1ldHJpY3MuZm9udFNpemVcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGlzIFRleHQgU3R5bGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlI3RvSlNPTlxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7b2JqZWN0fSBBIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhpcyBUZXh0IFN0eWxlLlxyXG4gICAgICovXHJcbiAgICB0b0pTT046IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG91dHB1dCA9IHt9O1xyXG5cclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcGVydHlNYXApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvdXRwdXRba2V5XSA9IHRoaXNba2V5XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG91dHB1dC5tZXRyaWNzID0gdGhpcy5nZXRUZXh0TWV0cmljcygpO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3kgdGhpcyBUZXh0IFN0eWxlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHRTdHlsZSNkZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnBhcmVudCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUZXh0U3R5bGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/text/TextStyle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/text/static/Text.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/text/static/Text.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar AddToDOM = __webpack_require__(/*! ../../../dom/AddToDOM */ \"./node_modules/phaser/src/dom/AddToDOM.js\");\r\nvar CanvasPool = __webpack_require__(/*! ../../../display/canvas/CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\");\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar GameEvents = __webpack_require__(/*! ../../../core/events */ \"./node_modules/phaser/src/core/events/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar GetTextSize = __webpack_require__(/*! ../GetTextSize */ \"./node_modules/phaser/src/gameobjects/text/GetTextSize.js\");\r\nvar GetValue = __webpack_require__(/*! ../../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar RemoveFromDOM = __webpack_require__(/*! ../../../dom/RemoveFromDOM */ \"./node_modules/phaser/src/dom/RemoveFromDOM.js\");\r\nvar TextRender = __webpack_require__(/*! ./TextRender */ \"./node_modules/phaser/src/gameobjects/text/static/TextRender.js\");\r\nvar TextStyle = __webpack_require__(/*! ../TextStyle */ \"./node_modules/phaser/src/gameobjects/text/TextStyle.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Text Game Object.\r\n * \r\n * Text objects work by creating their own internal hidden Canvas and then renders text to it using\r\n * the standard Canvas `fillText` API. It then creates a texture from this canvas which is rendered\r\n * to your game during the render pass.\r\n * \r\n * Because it uses the Canvas API you can take advantage of all the features this offers, such as\r\n * applying gradient fills to the text, or strokes, shadows and more. You can also use custom fonts\r\n * loaded externally, such as Google or TypeKit Web fonts.\r\n * \r\n * **Important:** If the font you wish to use has a space or digit in its name, such as\r\n * 'Press Start 2P' or 'Roboto Condensed', then you _must_ put the font name in quotes, either\r\n * when creating the Text object, or when setting the font via `setFont` or `setFontFamily`. I.e.:\r\n * \r\n * ```javascript\r\n * this.add.text(0, 0, 'Hello World', { fontFamily: '\"Roboto Condensed\"' });\r\n * ```\r\n * \r\n * Equally, if you wish to provide a list of fallback fonts, then you should ensure they are all\r\n * quoted properly, too:\r\n * \r\n * ```javascript\r\n * this.add.text(0, 0, 'Hello World', { fontFamily: 'Verdana, \"Times New Roman\", Tahoma, serif' });\r\n * ```\r\n *\r\n * You can only display fonts that are currently loaded and available to the browser: therefore fonts must\r\n * be pre-loaded. Phaser does not do ths for you, so you will require the use of a 3rd party font loader,\r\n * or have the fonts ready available in the CSS on the page in which your Phaser game resides.\r\n *\r\n * See {@link http://www.jordanm.co.uk/tinytype this compatibility table} for the available default fonts\r\n * across mobile browsers.\r\n * \r\n * A note on performance: Every time the contents of a Text object changes, i.e. changing the text being\r\n * displayed, or the style of the text, it needs to remake the Text canvas, and if on WebGL, re-upload the\r\n * new texture to the GPU. This can be an expensive operation if used often, or with large quantities of\r\n * Text objects in your game. If you run into performance issues you would be better off using Bitmap Text\r\n * instead, as it benefits from batching and avoids expensive Canvas API calls.\r\n *\r\n * @class Text\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.ComputedSize\r\n * @extends Phaser.GameObjects.Components.Crop\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Flip\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Tint\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {(string|string[])} text - The text this Text object will display.\r\n * @param {Phaser.Types.GameObjects.Text.TextStyle} style - The text style configuration object.\r\n */\r\nvar Text = new Class({\r\n\r\n Extends: GameObject,\r\n\r\n Mixins: [\r\n Components.Alpha,\r\n Components.BlendMode,\r\n Components.ComputedSize,\r\n Components.Crop,\r\n Components.Depth,\r\n Components.Flip,\r\n Components.GetBounds,\r\n Components.Mask,\r\n Components.Origin,\r\n Components.Pipeline,\r\n Components.ScrollFactor,\r\n Components.Tint,\r\n Components.Transform,\r\n Components.Visible,\r\n TextRender\r\n ],\r\n\r\n initialize:\r\n\r\n function Text (scene, x, y, text, style)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n\r\n GameObject.call(this, scene, 'Text');\r\n\r\n /**\r\n * The renderer in use by this Text object.\r\n *\r\n * @name Phaser.GameObjects.Text#renderer\r\n * @type {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)}\r\n * @since 3.12.0\r\n */\r\n this.renderer = scene.sys.game.renderer;\r\n\r\n this.setPosition(x, y);\r\n this.setOrigin(0, 0);\r\n this.initPipeline();\r\n\r\n /**\r\n * The canvas element that the text is rendered to.\r\n *\r\n * @name Phaser.GameObjects.Text#canvas\r\n * @type {HTMLCanvasElement}\r\n * @since 3.0.0\r\n */\r\n this.canvas = CanvasPool.create(this);\r\n\r\n /**\r\n * The context of the canvas element that the text is rendered to.\r\n *\r\n * @name Phaser.GameObjects.Text#context\r\n * @type {CanvasRenderingContext2D}\r\n * @since 3.0.0\r\n */\r\n this.context = this.canvas.getContext('2d');\r\n\r\n /**\r\n * The Text Style object.\r\n *\r\n * Manages the style of this Text object.\r\n *\r\n * @name Phaser.GameObjects.Text#style\r\n * @type {Phaser.GameObjects.TextStyle}\r\n * @since 3.0.0\r\n */\r\n this.style = new TextStyle(this, style);\r\n\r\n /**\r\n * Whether to automatically round line positions.\r\n *\r\n * @name Phaser.GameObjects.Text#autoRound\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.autoRound = true;\r\n\r\n /**\r\n * The Regular Expression that is used to split the text up into lines, in\r\n * multi-line text. By default this is `/(?:\\r\\n|\\r|\\n)/`.\r\n * You can change this RegExp to be anything else that you may need.\r\n *\r\n * @name Phaser.GameObjects.Text#splitRegExp\r\n * @type {object}\r\n * @since 3.0.0\r\n */\r\n this.splitRegExp = /(?:\\r\\n|\\r|\\n)/;\r\n\r\n /**\r\n * The text to display.\r\n *\r\n * @name Phaser.GameObjects.Text#_text\r\n * @type {string}\r\n * @private\r\n * @since 3.12.0\r\n */\r\n this._text = undefined;\r\n\r\n /**\r\n * Specify a padding value which is added to the line width and height when calculating the Text size.\r\n * Allows you to add extra spacing if the browser is unable to accurately determine the true font dimensions.\r\n *\r\n * @name Phaser.GameObjects.Text#padding\r\n * @type {{left:number,right:number,top:number,bottom:number}}\r\n * @since 3.0.0\r\n */\r\n this.padding = { left: 0, right: 0, top: 0, bottom: 0 };\r\n\r\n /**\r\n * The width of this Text object.\r\n *\r\n * @name Phaser.GameObjects.Text#width\r\n * @type {number}\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n this.width = 1;\r\n\r\n /**\r\n * The height of this Text object.\r\n *\r\n * @name Phaser.GameObjects.Text#height\r\n * @type {number}\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n this.height = 1;\r\n\r\n /**\r\n * The line spacing value.\r\n * This value is added to the font height to calculate the overall line height.\r\n * Only has an effect if this Text object contains multiple lines of text.\r\n * \r\n * If you update this property directly, instead of using the `setLineSpacing` method, then\r\n * be sure to call `updateText` after, or you won't see the change reflected in the Text object.\r\n *\r\n * @name Phaser.GameObjects.Text#lineSpacing\r\n * @type {number}\r\n * @since 3.13.0\r\n */\r\n this.lineSpacing = 0;\r\n\r\n /**\r\n * Whether the text or its settings have changed and need updating.\r\n *\r\n * @name Phaser.GameObjects.Text#dirty\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.dirty = false;\r\n\r\n // If resolution wasn't set, then we get it from the game config\r\n if (this.style.resolution === 0)\r\n {\r\n this.style.resolution = scene.sys.game.config.resolution;\r\n }\r\n\r\n /**\r\n * The internal crop data object, as used by `setCrop` and passed to the `Frame.setCropUVs` method.\r\n *\r\n * @name Phaser.GameObjects.Text#_crop\r\n * @type {object}\r\n * @private\r\n * @since 3.12.0\r\n */\r\n this._crop = this.resetCropObject();\r\n\r\n // Create a Texture for this Text object\r\n this.texture = scene.sys.textures.addCanvas(null, this.canvas, true);\r\n\r\n // Get the frame\r\n this.frame = this.texture.get();\r\n\r\n // Set the resolution\r\n this.frame.source.resolution = this.style.resolution;\r\n\r\n if (this.renderer && this.renderer.gl)\r\n {\r\n // Clear the default 1x1 glTexture, as we override it later\r\n this.renderer.deleteTexture(this.frame.source.glTexture);\r\n\r\n this.frame.source.glTexture = null;\r\n }\r\n\r\n this.initRTL();\r\n\r\n this.setText(text);\r\n\r\n if (style && style.padding)\r\n {\r\n this.setPadding(style.padding);\r\n }\r\n\r\n if (style && style.lineSpacing)\r\n {\r\n this.lineSpacing = style.lineSpacing;\r\n }\r\n\r\n scene.sys.game.events.on(GameEvents.CONTEXT_RESTORED, function ()\r\n {\r\n this.dirty = true;\r\n }, this);\r\n },\r\n\r\n /**\r\n * Initialize right to left text.\r\n *\r\n * @method Phaser.GameObjects.Text#initRTL\r\n * @since 3.0.0\r\n */\r\n initRTL: function ()\r\n {\r\n if (!this.style.rtl)\r\n {\r\n return;\r\n }\r\n\r\n // Here is where the crazy starts.\r\n //\r\n // Due to browser implementation issues, you cannot fillText BiDi text to a canvas\r\n // that is not part of the DOM. It just completely ignores the direction property.\r\n\r\n this.canvas.dir = 'rtl';\r\n\r\n // Experimental atm, but one day ...\r\n this.context.direction = 'rtl';\r\n\r\n // Add it to the DOM, but hidden within the parent canvas.\r\n this.canvas.style.display = 'none';\r\n\r\n AddToDOM(this.canvas, this.scene.sys.canvas);\r\n\r\n // And finally we set the x origin\r\n this.originX = 1;\r\n },\r\n\r\n /**\r\n * Greedy wrapping algorithm that will wrap words as the line grows longer than its horizontal\r\n * bounds.\r\n *\r\n * @method Phaser.GameObjects.Text#runWordWrap\r\n * @since 3.0.0\r\n *\r\n * @param {string} text - The text to perform word wrap detection against.\r\n *\r\n * @return {string} The text after wrapping has been applied.\r\n */\r\n runWordWrap: function (text)\r\n {\r\n var style = this.style;\r\n\r\n if (style.wordWrapCallback)\r\n {\r\n var wrappedLines = style.wordWrapCallback.call(style.wordWrapCallbackScope, text, this);\r\n\r\n if (Array.isArray(wrappedLines))\r\n {\r\n wrappedLines = wrappedLines.join('\\n');\r\n }\r\n\r\n return wrappedLines;\r\n }\r\n else if (style.wordWrapWidth)\r\n {\r\n if (style.wordWrapUseAdvanced)\r\n {\r\n return this.advancedWordWrap(text, this.context, this.style.wordWrapWidth);\r\n }\r\n else\r\n {\r\n return this.basicWordWrap(text, this.context, this.style.wordWrapWidth);\r\n }\r\n }\r\n else\r\n {\r\n return text;\r\n }\r\n },\r\n\r\n /**\r\n * Advanced wrapping algorithm that will wrap words as the line grows longer than its horizontal\r\n * bounds. Consecutive spaces will be collapsed and replaced with a single space. Lines will be\r\n * trimmed of white space before processing. Throws an error if wordWrapWidth is less than a\r\n * single character.\r\n *\r\n * @method Phaser.GameObjects.Text#advancedWordWrap\r\n * @since 3.0.0\r\n *\r\n * @param {string} text - The text to perform word wrap detection against.\r\n * @param {CanvasRenderingContext2D} context - The Canvas Rendering Context.\r\n * @param {number} wordWrapWidth - The word wrap width.\r\n *\r\n * @return {string} The wrapped text.\r\n */\r\n advancedWordWrap: function (text, context, wordWrapWidth)\r\n {\r\n var output = '';\r\n\r\n // Condense consecutive spaces and split into lines\r\n var lines = text\r\n .replace(/ +/gi, ' ')\r\n .split(this.splitRegExp);\r\n\r\n var linesCount = lines.length;\r\n\r\n for (var i = 0; i < linesCount; i++)\r\n {\r\n var line = lines[i];\r\n var out = '';\r\n\r\n // Trim whitespace\r\n line = line.replace(/^ *|\\s*$/gi, '');\r\n\r\n // If entire line is less than wordWrapWidth append the entire line and exit early\r\n var lineWidth = context.measureText(line).width;\r\n\r\n if (lineWidth < wordWrapWidth)\r\n {\r\n output += line + '\\n';\r\n continue;\r\n }\r\n\r\n // Otherwise, calculate new lines\r\n var currentLineWidth = wordWrapWidth;\r\n\r\n // Split into words\r\n var words = line.split(' ');\r\n\r\n for (var j = 0; j < words.length; j++)\r\n {\r\n var word = words[j];\r\n var wordWithSpace = word + ' ';\r\n var wordWidth = context.measureText(wordWithSpace).width;\r\n\r\n if (wordWidth > currentLineWidth)\r\n {\r\n // Break word\r\n if (j === 0)\r\n {\r\n // Shave off letters from word until it's small enough\r\n var newWord = wordWithSpace;\r\n\r\n while (newWord.length)\r\n {\r\n newWord = newWord.slice(0, -1);\r\n wordWidth = context.measureText(newWord).width;\r\n\r\n if (wordWidth <= currentLineWidth)\r\n {\r\n break;\r\n }\r\n }\r\n\r\n // If wordWrapWidth is too small for even a single letter, shame user\r\n // failure with a fatal error\r\n if (!newWord.length)\r\n {\r\n throw new Error('This text\\'s wordWrapWidth setting is less than a single character!');\r\n }\r\n\r\n // Replace current word in array with remainder\r\n var secondPart = word.substr(newWord.length);\r\n\r\n words[j] = secondPart;\r\n\r\n // Append first piece to output\r\n out += newWord;\r\n }\r\n\r\n // If existing word length is 0, don't include it\r\n var offset = (words[j].length) ? j : j + 1;\r\n\r\n // Collapse rest of sentence and remove any trailing white space\r\n var remainder = words.slice(offset).join(' ')\r\n .replace(/[ \\n]*$/gi, '');\r\n\r\n // Prepend remainder to next line\r\n lines[i + 1] = remainder + ' ' + (lines[i + 1] || '');\r\n linesCount = lines.length;\r\n\r\n break; // Processing on this line\r\n\r\n // Append word with space to output\r\n }\r\n else\r\n {\r\n out += wordWithSpace;\r\n currentLineWidth -= wordWidth;\r\n }\r\n }\r\n\r\n // Append processed line to output\r\n output += out.replace(/[ \\n]*$/gi, '') + '\\n';\r\n }\r\n\r\n // Trim the end of the string\r\n output = output.replace(/[\\s|\\n]*$/gi, '');\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Greedy wrapping algorithm that will wrap words as the line grows longer than its horizontal\r\n * bounds. Spaces are not collapsed and whitespace is not trimmed.\r\n *\r\n * @method Phaser.GameObjects.Text#basicWordWrap\r\n * @since 3.0.0\r\n *\r\n * @param {string} text - The text to perform word wrap detection against.\r\n * @param {CanvasRenderingContext2D} context - The Canvas Rendering Context.\r\n * @param {number} wordWrapWidth - The word wrap width.\r\n *\r\n * @return {string} The wrapped text.\r\n */\r\n basicWordWrap: function (text, context, wordWrapWidth)\r\n {\r\n var result = '';\r\n var lines = text.split(this.splitRegExp);\r\n\r\n for (var i = 0; i < lines.length; i++)\r\n {\r\n var spaceLeft = wordWrapWidth;\r\n var words = lines[i].split(' ');\r\n\r\n for (var j = 0; j < words.length; j++)\r\n {\r\n var wordWidth = context.measureText(words[j]).width;\r\n var wordWidthWithSpace = wordWidth + context.measureText(' ').width;\r\n\r\n if (wordWidthWithSpace > spaceLeft)\r\n {\r\n // Skip printing the newline if it's the first word of the line that is greater\r\n // than the word wrap width.\r\n if (j > 0)\r\n {\r\n result += '\\n';\r\n }\r\n\r\n result += words[j] + ' ';\r\n spaceLeft = wordWrapWidth - wordWidthWithSpace;\r\n }\r\n else\r\n {\r\n spaceLeft -= wordWidthWithSpace;\r\n result += words[j];\r\n\r\n if (j < (words.length - 1))\r\n {\r\n result += ' ';\r\n }\r\n }\r\n }\r\n\r\n if (i < lines.length - 1)\r\n {\r\n result += '\\n';\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n\r\n /**\r\n * Runs the given text through this Text objects word wrapping and returns the results as an\r\n * array, where each element of the array corresponds to a wrapped line of text.\r\n *\r\n * @method Phaser.GameObjects.Text#getWrappedText\r\n * @since 3.0.0\r\n *\r\n * @param {string} text - The text for which the wrapping will be calculated. If unspecified, the Text objects current text will be used.\r\n *\r\n * @return {string[]} An array of strings with the pieces of wrapped text.\r\n */\r\n getWrappedText: function (text)\r\n {\r\n if (text === undefined) { text = this._text; }\r\n\r\n this.style.syncFont(this.canvas, this.context);\r\n\r\n var wrappedLines = this.runWordWrap(text);\r\n\r\n return wrappedLines.split(this.splitRegExp);\r\n },\r\n\r\n /**\r\n * Set the text to display.\r\n *\r\n * An array of strings will be joined with `\\n` line breaks.\r\n *\r\n * @method Phaser.GameObjects.Text#setText\r\n * @since 3.0.0\r\n *\r\n * @param {(string|string[])} value - The string, or array of strings, to be set as the content of this Text object.\r\n *\r\n * @return {Phaser.GameObjects.Text} This Text object.\r\n */\r\n setText: function (value)\r\n {\r\n if (!value && value !== 0)\r\n {\r\n value = '';\r\n }\r\n\r\n if (Array.isArray(value))\r\n {\r\n value = value.join('\\n');\r\n }\r\n\r\n if (value !== this._text)\r\n {\r\n this._text = value.toString();\r\n\r\n this.updateText();\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Set the text style.\r\n *\r\n * @example\r\n * text.setStyle({\r\n * fontSize: '64px',\r\n * fontFamily: 'Arial',\r\n * color: '#ffffff',\r\n * align: 'center',\r\n * backgroundColor: '#ff00ff'\r\n * });\r\n *\r\n * @method Phaser.GameObjects.Text#setStyle\r\n * @since 3.0.0\r\n *\r\n * @param {object} style - The style settings to set.\r\n *\r\n * @return {Phaser.GameObjects.Text} This Text object.\r\n */\r\n setStyle: function (style)\r\n {\r\n return this.style.setStyle(style);\r\n },\r\n\r\n /**\r\n * Set the font.\r\n *\r\n * If a string is given, the font family is set.\r\n *\r\n * If an object is given, the `fontFamily`, `fontSize` and `fontStyle`\r\n * properties of that object are set.\r\n * \r\n * **Important:** If the font you wish to use has a space or digit in its name, such as\r\n * 'Press Start 2P' or 'Roboto Condensed', then you _must_ put the font name in quotes:\r\n * \r\n * ```javascript\r\n * Text.setFont('\"Roboto Condensed\"');\r\n * ```\r\n * \r\n * Equally, if you wish to provide a list of fallback fonts, then you should ensure they are all\r\n * quoted properly, too:\r\n * \r\n * ```javascript\r\n * Text.setFont('Verdana, \"Times New Roman\", Tahoma, serif');\r\n * ```\r\n *\r\n * @method Phaser.GameObjects.Text#setFont\r\n * @since 3.0.0\r\n *\r\n * @param {string} font - The font family or font settings to set.\r\n *\r\n * @return {Phaser.GameObjects.Text} This Text object.\r\n */\r\n setFont: function (font)\r\n {\r\n return this.style.setFont(font);\r\n },\r\n\r\n /**\r\n * Set the font family.\r\n * \r\n * **Important:** If the font you wish to use has a space or digit in its name, such as\r\n * 'Press Start 2P' or 'Roboto Condensed', then you _must_ put the font name in quotes:\r\n * \r\n * ```javascript\r\n * Text.setFont('\"Roboto Condensed\"');\r\n * ```\r\n * \r\n * Equally, if you wish to provide a list of fallback fonts, then you should ensure they are all\r\n * quoted properly, too:\r\n * \r\n * ```javascript\r\n * Text.setFont('Verdana, \"Times New Roman\", Tahoma, serif');\r\n * ```\r\n *\r\n * @method Phaser.GameObjects.Text#setFontFamily\r\n * @since 3.0.0\r\n *\r\n * @param {string} family - The font family.\r\n *\r\n * @return {Phaser.GameObjects.Text} This Text object.\r\n */\r\n setFontFamily: function (family)\r\n {\r\n return this.style.setFontFamily(family);\r\n },\r\n\r\n /**\r\n * Set the font size.\r\n *\r\n * @method Phaser.GameObjects.Text#setFontSize\r\n * @since 3.0.0\r\n *\r\n * @param {number} size - The font size.\r\n *\r\n * @return {Phaser.GameObjects.Text} This Text object.\r\n */\r\n setFontSize: function (size)\r\n {\r\n return this.style.setFontSize(size);\r\n },\r\n\r\n /**\r\n * Set the font style.\r\n *\r\n * @method Phaser.GameObjects.Text#setFontStyle\r\n * @since 3.0.0\r\n *\r\n * @param {string} style - The font style.\r\n *\r\n * @return {Phaser.GameObjects.Text} This Text object.\r\n */\r\n setFontStyle: function (style)\r\n {\r\n return this.style.setFontStyle(style);\r\n },\r\n\r\n /**\r\n * Set a fixed width and height for the text.\r\n *\r\n * Pass in `0` for either of these parameters to disable fixed width or height respectively.\r\n *\r\n * @method Phaser.GameObjects.Text#setFixedSize\r\n * @since 3.0.0\r\n *\r\n * @param {number} width - The fixed width to set. `0` disables fixed width.\r\n * @param {number} height - The fixed height to set. `0` disables fixed height.\r\n *\r\n * @return {Phaser.GameObjects.Text} This Text object.\r\n */\r\n setFixedSize: function (width, height)\r\n {\r\n return this.style.setFixedSize(width, height);\r\n },\r\n\r\n /**\r\n * Set the background color.\r\n *\r\n * @method Phaser.GameObjects.Text#setBackgroundColor\r\n * @since 3.0.0\r\n *\r\n * @param {string} color - The background color.\r\n *\r\n * @return {Phaser.GameObjects.Text} This Text object.\r\n */\r\n setBackgroundColor: function (color)\r\n {\r\n return this.style.setBackgroundColor(color);\r\n },\r\n\r\n /**\r\n * Set the fill style to be used by the Text object.\r\n *\r\n * This can be any valid CanvasRenderingContext2D fillStyle value, such as\r\n * a color (in hex, rgb, rgba, hsl or named values), a gradient or a pattern.\r\n *\r\n * See the [MDN fillStyle docs](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/fillStyle) for more details.\r\n *\r\n * @method Phaser.GameObjects.Text#setFill\r\n * @since 3.0.0\r\n *\r\n * @param {(string|any)} color - The text fill style. Can be any valid CanvasRenderingContext `fillStyle` value.\r\n *\r\n * @return {Phaser.GameObjects.Text} This Text object.\r\n */\r\n setFill: function (fillStyle)\r\n {\r\n return this.style.setFill(fillStyle);\r\n },\r\n\r\n /**\r\n * Set the text fill color.\r\n *\r\n * @method Phaser.GameObjects.Text#setColor\r\n * @since 3.0.0\r\n *\r\n * @param {string} color - The text fill color.\r\n *\r\n * @return {Phaser.GameObjects.Text} This Text object.\r\n */\r\n setColor: function (color)\r\n {\r\n return this.style.setColor(color);\r\n },\r\n\r\n /**\r\n * Set the stroke settings.\r\n *\r\n * @method Phaser.GameObjects.Text#setStroke\r\n * @since 3.0.0\r\n *\r\n * @param {string} color - The stroke color.\r\n * @param {number} thickness - The stroke thickness.\r\n *\r\n * @return {Phaser.GameObjects.Text} This Text object.\r\n */\r\n setStroke: function (color, thickness)\r\n {\r\n return this.style.setStroke(color, thickness);\r\n },\r\n\r\n /**\r\n * Set the shadow settings.\r\n *\r\n * @method Phaser.GameObjects.Text#setShadow\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x=0] - The horizontal shadow offset.\r\n * @param {number} [y=0] - The vertical shadow offset.\r\n * @param {string} [color='#000'] - The shadow color.\r\n * @param {number} [blur=0] - The shadow blur radius.\r\n * @param {boolean} [shadowStroke=false] - Whether to stroke the shadow.\r\n * @param {boolean} [shadowFill=true] - Whether to fill the shadow.\r\n *\r\n * @return {Phaser.GameObjects.Text} This Text object.\r\n */\r\n setShadow: function (x, y, color, blur, shadowStroke, shadowFill)\r\n {\r\n return this.style.setShadow(x, y, color, blur, shadowStroke, shadowFill);\r\n },\r\n\r\n /**\r\n * Set the shadow offset.\r\n *\r\n * @method Phaser.GameObjects.Text#setShadowOffset\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal shadow offset.\r\n * @param {number} y - The vertical shadow offset.\r\n *\r\n * @return {Phaser.GameObjects.Text} This Text object.\r\n */\r\n setShadowOffset: function (x, y)\r\n {\r\n return this.style.setShadowOffset(x, y);\r\n },\r\n\r\n /**\r\n * Set the shadow color.\r\n *\r\n * @method Phaser.GameObjects.Text#setShadowColor\r\n * @since 3.0.0\r\n *\r\n * @param {string} color - The shadow color.\r\n *\r\n * @return {Phaser.GameObjects.Text} This Text object.\r\n */\r\n setShadowColor: function (color)\r\n {\r\n return this.style.setShadowColor(color);\r\n },\r\n\r\n /**\r\n * Set the shadow blur radius.\r\n *\r\n * @method Phaser.GameObjects.Text#setShadowBlur\r\n * @since 3.0.0\r\n *\r\n * @param {number} blur - The shadow blur radius.\r\n *\r\n * @return {Phaser.GameObjects.Text} This Text object.\r\n */\r\n setShadowBlur: function (blur)\r\n {\r\n return this.style.setShadowBlur(blur);\r\n },\r\n\r\n /**\r\n * Enable or disable shadow stroke.\r\n *\r\n * @method Phaser.GameObjects.Text#setShadowStroke\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} enabled - Whether shadow stroke is enabled or not.\r\n *\r\n * @return {Phaser.GameObjects.Text} This Text object.\r\n */\r\n setShadowStroke: function (enabled)\r\n {\r\n return this.style.setShadowStroke(enabled);\r\n },\r\n\r\n /**\r\n * Enable or disable shadow fill.\r\n *\r\n * @method Phaser.GameObjects.Text#setShadowFill\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} enabled - Whether shadow fill is enabled or not.\r\n *\r\n * @return {Phaser.GameObjects.Text} This Text object.\r\n */\r\n setShadowFill: function (enabled)\r\n {\r\n return this.style.setShadowFill(enabled);\r\n },\r\n\r\n /**\r\n * Set the width (in pixels) to use for wrapping lines. Pass in null to remove wrapping by width.\r\n *\r\n * @method Phaser.GameObjects.Text#setWordWrapWidth\r\n * @since 3.0.0\r\n *\r\n * @param {?number} width - The maximum width of a line in pixels. Set to null to remove wrapping.\r\n * @param {boolean} [useAdvancedWrap=false] - Whether or not to use the advanced wrapping\r\n * algorithm. If true, spaces are collapsed and whitespace is trimmed from lines. If false,\r\n * spaces and whitespace are left as is.\r\n *\r\n * @return {Phaser.GameObjects.Text} This Text object.\r\n */\r\n setWordWrapWidth: function (width, useAdvancedWrap)\r\n {\r\n return this.style.setWordWrapWidth(width, useAdvancedWrap);\r\n },\r\n\r\n /**\r\n * Set a custom callback for wrapping lines. Pass in null to remove wrapping by callback.\r\n *\r\n * @method Phaser.GameObjects.Text#setWordWrapCallback\r\n * @since 3.0.0\r\n *\r\n * @param {TextStyleWordWrapCallback} callback - A custom function that will be responsible for wrapping the\r\n * text. It will receive two arguments: text (the string to wrap), textObject (this Text\r\n * instance). It should return the wrapped lines either as an array of lines or as a string with\r\n * newline characters in place to indicate where breaks should happen.\r\n * @param {object} [scope=null] - The scope that will be applied when the callback is invoked.\r\n *\r\n * @return {Phaser.GameObjects.Text} This Text object.\r\n */\r\n setWordWrapCallback: function (callback, scope)\r\n {\r\n return this.style.setWordWrapCallback(callback, scope);\r\n },\r\n\r\n /**\r\n * Set the alignment of the text in this Text object.\r\n * \r\n * The argument can be one of: `left`, `right`, `center` or `justify`.\r\n * \r\n * Alignment only works if the Text object has more than one line of text.\r\n *\r\n * @method Phaser.GameObjects.Text#setAlign\r\n * @since 3.0.0\r\n *\r\n * @param {string} [align='left'] - The text alignment for multi-line text.\r\n *\r\n * @return {Phaser.GameObjects.Text} This Text object.\r\n */\r\n setAlign: function (align)\r\n {\r\n return this.style.setAlign(align);\r\n },\r\n\r\n /**\r\n * Set the resolution used by this Text object.\r\n *\r\n * By default it will be set to match the resolution set in the Game Config,\r\n * but you can override it via this method, or by specifying it in the Text style configuration object.\r\n * \r\n * It allows for much clearer text on High DPI devices, at the cost of memory because it uses larger\r\n * internal Canvas textures for the Text.\r\n * \r\n * Therefore, please use with caution, as the more high res Text you have, the more memory it uses.\r\n *\r\n * @method Phaser.GameObjects.Text#setResolution\r\n * @since 3.12.0\r\n *\r\n * @param {number} value - The resolution for this Text object to use.\r\n *\r\n * @return {Phaser.GameObjects.Text} This Text object.\r\n */\r\n setResolution: function (value)\r\n {\r\n return this.style.setResolution(value);\r\n },\r\n\r\n /**\r\n * Sets the line spacing value.\r\n *\r\n * This value is _added_ to the height of the font when calculating the overall line height.\r\n * This only has an effect if this Text object consists of multiple lines of text.\r\n *\r\n * @method Phaser.GameObjects.Text#setLineSpacing\r\n * @since 3.13.0\r\n *\r\n * @param {number} value - The amount to add to the font height to achieve the overall line height.\r\n *\r\n * @return {Phaser.GameObjects.Text} This Text object.\r\n */\r\n setLineSpacing: function (value)\r\n {\r\n this.lineSpacing = value;\r\n\r\n return this.updateText();\r\n },\r\n\r\n /**\r\n * Set the text padding.\r\n *\r\n * 'left' can be an object.\r\n *\r\n * If only 'left' and 'top' are given they are treated as 'x' and 'y'.\r\n *\r\n * @method Phaser.GameObjects.Text#setPadding\r\n * @since 3.0.0\r\n *\r\n * @param {(number|Phaser.Types.GameObjects.Text.TextPadding)} left - The left padding value, or a padding config object.\r\n * @param {number} top - The top padding value.\r\n * @param {number} right - The right padding value.\r\n * @param {number} bottom - The bottom padding value.\r\n *\r\n * @return {Phaser.GameObjects.Text} This Text object.\r\n */\r\n setPadding: function (left, top, right, bottom)\r\n {\r\n if (typeof left === 'object')\r\n {\r\n var config = left;\r\n\r\n // If they specify x and/or y this applies to all\r\n var x = GetValue(config, 'x', null);\r\n\r\n if (x !== null)\r\n {\r\n left = x;\r\n right = x;\r\n }\r\n else\r\n {\r\n left = GetValue(config, 'left', 0);\r\n right = GetValue(config, 'right', left);\r\n }\r\n\r\n var y = GetValue(config, 'y', null);\r\n\r\n if (y !== null)\r\n {\r\n top = y;\r\n bottom = y;\r\n }\r\n else\r\n {\r\n top = GetValue(config, 'top', 0);\r\n bottom = GetValue(config, 'bottom', top);\r\n }\r\n }\r\n else\r\n {\r\n if (left === undefined) { left = 0; }\r\n if (top === undefined) { top = left; }\r\n if (right === undefined) { right = left; }\r\n if (bottom === undefined) { bottom = top; }\r\n }\r\n\r\n this.padding.left = left;\r\n this.padding.top = top;\r\n this.padding.right = right;\r\n this.padding.bottom = bottom;\r\n\r\n return this.updateText();\r\n },\r\n\r\n /**\r\n * Set the maximum number of lines to draw.\r\n *\r\n * @method Phaser.GameObjects.Text#setMaxLines\r\n * @since 3.0.0\r\n *\r\n * @param {integer} [max=0] - The maximum number of lines to draw.\r\n *\r\n * @return {Phaser.GameObjects.Text} This Text object.\r\n */\r\n setMaxLines: function (max)\r\n {\r\n return this.style.setMaxLines(max);\r\n },\r\n\r\n /**\r\n * Update the displayed text.\r\n *\r\n * @method Phaser.GameObjects.Text#updateText\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.GameObjects.Text} This Text object.\r\n */\r\n updateText: function ()\r\n {\r\n var canvas = this.canvas;\r\n var context = this.context;\r\n var style = this.style;\r\n var resolution = style.resolution;\r\n var size = style.metrics;\r\n\r\n style.syncFont(canvas, context);\r\n\r\n var outputText = this._text;\r\n\r\n if (style.wordWrapWidth || style.wordWrapCallback)\r\n {\r\n outputText = this.runWordWrap(this._text);\r\n }\r\n\r\n // Split text into lines\r\n var lines = outputText.split(this.splitRegExp);\r\n\r\n var textSize = GetTextSize(this, size, lines);\r\n\r\n var padding = this.padding;\r\n\r\n var textWidth;\r\n\r\n if (style.fixedWidth === 0)\r\n {\r\n this.width = textSize.width + padding.left + padding.right;\r\n\r\n textWidth = textSize.width;\r\n }\r\n else\r\n {\r\n this.width = style.fixedWidth;\r\n\r\n textWidth = this.width - padding.left - padding.right;\r\n\r\n if (textWidth < textSize.width)\r\n {\r\n textWidth = textSize.width;\r\n }\r\n }\r\n\r\n if (style.fixedHeight === 0)\r\n {\r\n this.height = textSize.height + padding.top + padding.bottom;\r\n }\r\n else\r\n {\r\n this.height = style.fixedHeight;\r\n }\r\n\r\n var w = this.width;\r\n var h = this.height;\r\n\r\n this.updateDisplayOrigin();\r\n\r\n w *= resolution;\r\n h *= resolution;\r\n\r\n w = Math.max(w, 1);\r\n h = Math.max(h, 1);\r\n\r\n if (canvas.width !== w || canvas.height !== h)\r\n {\r\n canvas.width = w;\r\n canvas.height = h;\r\n\r\n this.frame.setSize(w, h);\r\n\r\n // Because resizing the canvas resets the context\r\n style.syncFont(canvas, context);\r\n }\r\n else\r\n {\r\n context.clearRect(0, 0, w, h);\r\n }\r\n\r\n context.save();\r\n\r\n context.scale(resolution, resolution);\r\n\r\n if (style.backgroundColor)\r\n {\r\n context.fillStyle = style.backgroundColor;\r\n context.fillRect(0, 0, w, h);\r\n }\r\n\r\n style.syncStyle(canvas, context);\r\n\r\n context.textBaseline = 'alphabetic';\r\n\r\n // Apply padding\r\n context.translate(padding.left, padding.top);\r\n\r\n var linePositionX;\r\n var linePositionY;\r\n\r\n // Draw text line by line\r\n for (var i = 0; i < textSize.lines; i++)\r\n {\r\n linePositionX = style.strokeThickness / 2;\r\n linePositionY = (style.strokeThickness / 2 + i * textSize.lineHeight) + size.ascent;\r\n\r\n if (i > 0)\r\n {\r\n linePositionY += (textSize.lineSpacing * i);\r\n }\r\n\r\n if (style.rtl)\r\n {\r\n linePositionX = w - linePositionX;\r\n }\r\n else if (style.align === 'right')\r\n {\r\n linePositionX += textWidth - textSize.lineWidths[i];\r\n }\r\n else if (style.align === 'center')\r\n {\r\n linePositionX += (textWidth - textSize.lineWidths[i]) / 2;\r\n }\r\n else if (style.align === 'justify')\r\n {\r\n // To justify text line its width must be no less than 85% of defined width\r\n var minimumLengthToApplyJustification = 0.85;\r\n\r\n if (textSize.lineWidths[i] / textSize.width >= minimumLengthToApplyJustification)\r\n {\r\n var extraSpace = textSize.width - textSize.lineWidths[i];\r\n var spaceSize = context.measureText(' ').width;\r\n var trimmedLine = lines[i].trim();\r\n var array = trimmedLine.split(' ');\r\n \r\n extraSpace += (lines[i].length - trimmedLine.length) * spaceSize;\r\n \r\n var extraSpaceCharacters = Math.floor(extraSpace / spaceSize);\r\n var idx = 0;\r\n\r\n while (extraSpaceCharacters > 0)\r\n {\r\n array[idx] += ' ';\r\n idx = (idx + 1) % (array.length - 1 || 1);\r\n --extraSpaceCharacters;\r\n }\r\n \r\n lines[i] = array.join(' ');\r\n }\r\n }\r\n\r\n if (this.autoRound)\r\n {\r\n linePositionX = Math.round(linePositionX);\r\n linePositionY = Math.round(linePositionY);\r\n }\r\n\r\n if (style.strokeThickness)\r\n {\r\n this.style.syncShadow(context, style.shadowStroke);\r\n\r\n context.strokeText(lines[i], linePositionX, linePositionY);\r\n }\r\n\r\n if (style.color)\r\n {\r\n this.style.syncShadow(context, style.shadowFill);\r\n\r\n context.fillText(lines[i], linePositionX, linePositionY);\r\n }\r\n }\r\n\r\n context.restore();\r\n\r\n if (this.renderer.gl)\r\n {\r\n this.frame.source.glTexture = this.renderer.canvasToTexture(canvas, this.frame.source.glTexture, true);\r\n\r\n this.frame.glTexture = this.frame.source.glTexture;\r\n }\r\n\r\n this.dirty = true;\r\n\r\n var input = this.input;\r\n\r\n if (input && !input.customHitArea)\r\n {\r\n input.hitArea.width = this.width;\r\n input.hitArea.height = this.height;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Get the current text metrics.\r\n *\r\n * @method Phaser.GameObjects.Text#getTextMetrics\r\n * @since 3.0.0\r\n *\r\n * @return {object} The text metrics.\r\n */\r\n getTextMetrics: function ()\r\n {\r\n return this.style.getTextMetrics();\r\n },\r\n\r\n /**\r\n * The text string being rendered by this Text Game Object.\r\n *\r\n * @name Phaser.GameObjects.Text#text\r\n * @type {string}\r\n * @since 3.0.0\r\n */\r\n text: {\r\n\r\n get: function ()\r\n {\r\n return this._text;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.setText(value);\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Build a JSON representation of the Text object.\r\n *\r\n * @method Phaser.GameObjects.Text#toJSON\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Types.GameObjects.JSONGameObject} A JSON representation of the Text object.\r\n */\r\n toJSON: function ()\r\n {\r\n var out = Components.ToJSON(this);\r\n\r\n // Extra Text data is added here\r\n\r\n var data = {\r\n autoRound: this.autoRound,\r\n text: this._text,\r\n style: this.style.toJSON(),\r\n padding: {\r\n left: this.padding.left,\r\n right: this.padding.right,\r\n top: this.padding.top,\r\n bottom: this.padding.bottom\r\n }\r\n };\r\n\r\n out.data = data;\r\n\r\n return out;\r\n },\r\n\r\n /**\r\n * Internal destroy handler, called as part of the destroy process.\r\n *\r\n * @method Phaser.GameObjects.Text#preDestroy\r\n * @protected\r\n * @since 3.0.0\r\n */\r\n preDestroy: function ()\r\n {\r\n if (this.style.rtl)\r\n {\r\n RemoveFromDOM(this.canvas);\r\n }\r\n\r\n CanvasPool.remove(this.canvas);\r\n\r\n this.texture.destroy();\r\n }\r\n\r\n /**\r\n * The horizontal origin of this Game Object.\r\n * The origin maps the relationship between the size and position of the Game Object.\r\n * The default value is 0.5, meaning all Game Objects are positioned based on their center.\r\n * Setting the value to 0 means the position now relates to the left of the Game Object.\r\n *\r\n * @name Phaser.GameObjects.Text#originX\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n\r\n /**\r\n * The vertical origin of this Game Object.\r\n * The origin maps the relationship between the size and position of the Game Object.\r\n * The default value is 0.5, meaning all Game Objects are positioned based on their center.\r\n * Setting the value to 0 means the position now relates to the top of the Game Object.\r\n *\r\n * @name Phaser.GameObjects.Text#originY\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n\r\n});\r\n\r\nmodule.exports = Text;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L3N0YXRpYy9UZXh0LmpzP2Y3OGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyx3RUFBdUI7QUFDOUMsaUJBQWlCLG1CQUFPLENBQUMsa0dBQW9DO0FBQzdELFlBQVksbUJBQU8sQ0FBQyxzRUFBc0I7QUFDMUMsaUJBQWlCLG1CQUFPLENBQUMsbUZBQWtCO0FBQzNDLGlCQUFpQixtQkFBTyxDQUFDLDRFQUFzQjtBQUMvQyxpQkFBaUIsbUJBQU8sQ0FBQyw2RUFBa0I7QUFDM0Msa0JBQWtCLG1CQUFPLENBQUMsaUZBQWdCO0FBQzFDLGVBQWUsbUJBQU8sQ0FBQywwRkFBZ0M7QUFDdkQsb0JBQW9CLG1CQUFPLENBQUMsa0ZBQTRCO0FBQ3hELGlCQUFpQixtQkFBTyxDQUFDLHFGQUFjO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLDZFQUFjOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLG1DQUFtQztBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsMERBQTBEO0FBQ2pHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsaUVBQWlFO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLGtCQUFrQjtBQUM3QixXQUFXLHdDQUF3QztBQUNuRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBLHdCQUF3Qjs7QUFFeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSx5QkFBeUI7QUFDeEMsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsdUJBQXVCLGdCQUFnQjtBQUN2QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDJCQUEyQixrQkFBa0I7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSx5QkFBeUI7QUFDeEMsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsa0JBQWtCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkIsa0JBQWtCO0FBQzdDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxtQkFBbUI7O0FBRXBEOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxrQkFBa0I7QUFDakM7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTtBQUM1QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMEJBQTBCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtREFBbUQ7QUFDbEUsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLFVBQVU7QUFDL0Msb0NBQW9DLFlBQVk7QUFDaEQsc0NBQXNDLGNBQWM7QUFDcEQsdUNBQXVDLGNBQWM7QUFDckQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHVCQUF1QixvQkFBb0I7QUFDM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix3Q0FBd0M7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L3N0YXRpYy9UZXh0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQWRkVG9ET00gPSByZXF1aXJlKCcuLi8uLi8uLi9kb20vQWRkVG9ET00nKTtcclxudmFyIENhbnZhc1Bvb2wgPSByZXF1aXJlKCcuLi8uLi8uLi9kaXNwbGF5L2NhbnZhcy9DYW52YXNQb29sJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDb21wb25lbnRzID0gcmVxdWlyZSgnLi4vLi4vY29tcG9uZW50cycpO1xyXG52YXIgR2FtZUV2ZW50cyA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvcmUvZXZlbnRzJyk7XHJcbnZhciBHYW1lT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vR2FtZU9iamVjdCcpO1xyXG52YXIgR2V0VGV4dFNpemUgPSByZXF1aXJlKCcuLi9HZXRUZXh0U2l6ZScpO1xyXG52YXIgR2V0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscy9vYmplY3QvR2V0VmFsdWUnKTtcclxudmFyIFJlbW92ZUZyb21ET00gPSByZXF1aXJlKCcuLi8uLi8uLi9kb20vUmVtb3ZlRnJvbURPTScpO1xyXG52YXIgVGV4dFJlbmRlciA9IHJlcXVpcmUoJy4vVGV4dFJlbmRlcicpO1xyXG52YXIgVGV4dFN0eWxlID0gcmVxdWlyZSgnLi4vVGV4dFN0eWxlJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIFRleHQgR2FtZSBPYmplY3QuXHJcbiAqIFxyXG4gKiBUZXh0IG9iamVjdHMgd29yayBieSBjcmVhdGluZyB0aGVpciBvd24gaW50ZXJuYWwgaGlkZGVuIENhbnZhcyBhbmQgdGhlbiByZW5kZXJzIHRleHQgdG8gaXQgdXNpbmdcclxuICogdGhlIHN0YW5kYXJkIENhbnZhcyBgZmlsbFRleHRgIEFQSS4gSXQgdGhlbiBjcmVhdGVzIGEgdGV4dHVyZSBmcm9tIHRoaXMgY2FudmFzIHdoaWNoIGlzIHJlbmRlcmVkXHJcbiAqIHRvIHlvdXIgZ2FtZSBkdXJpbmcgdGhlIHJlbmRlciBwYXNzLlxyXG4gKiBcclxuICogQmVjYXVzZSBpdCB1c2VzIHRoZSBDYW52YXMgQVBJIHlvdSBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgYWxsIHRoZSBmZWF0dXJlcyB0aGlzIG9mZmVycywgc3VjaCBhc1xyXG4gKiBhcHBseWluZyBncmFkaWVudCBmaWxscyB0byB0aGUgdGV4dCwgb3Igc3Ryb2tlcywgc2hhZG93cyBhbmQgbW9yZS4gWW91IGNhbiBhbHNvIHVzZSBjdXN0b20gZm9udHNcclxuICogbG9hZGVkIGV4dGVybmFsbHksIHN1Y2ggYXMgR29vZ2xlIG9yIFR5cGVLaXQgV2ViIGZvbnRzLlxyXG4gKiBcclxuICogKipJbXBvcnRhbnQ6KiogSWYgdGhlIGZvbnQgeW91IHdpc2ggdG8gdXNlIGhhcyBhIHNwYWNlIG9yIGRpZ2l0IGluIGl0cyBuYW1lLCBzdWNoIGFzXHJcbiAqICdQcmVzcyBTdGFydCAyUCcgb3IgJ1JvYm90byBDb25kZW5zZWQnLCB0aGVuIHlvdSBfbXVzdF8gcHV0IHRoZSBmb250IG5hbWUgaW4gcXVvdGVzLCBlaXRoZXJcclxuICogd2hlbiBjcmVhdGluZyB0aGUgVGV4dCBvYmplY3QsIG9yIHdoZW4gc2V0dGluZyB0aGUgZm9udCB2aWEgYHNldEZvbnRgIG9yIGBzZXRGb250RmFtaWx5YC4gSS5lLjpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5hZGQudGV4dCgwLCAwLCAnSGVsbG8gV29ybGQnLCB7IGZvbnRGYW1pbHk6ICdcIlJvYm90byBDb25kZW5zZWRcIicgfSk7XHJcbiAqIGBgYFxyXG4gKiBcclxuICogRXF1YWxseSwgaWYgeW91IHdpc2ggdG8gcHJvdmlkZSBhIGxpc3Qgb2YgZmFsbGJhY2sgZm9udHMsIHRoZW4geW91IHNob3VsZCBlbnN1cmUgdGhleSBhcmUgYWxsXHJcbiAqIHF1b3RlZCBwcm9wZXJseSwgdG9vOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmFkZC50ZXh0KDAsIDAsICdIZWxsbyBXb3JsZCcsIHsgZm9udEZhbWlseTogJ1ZlcmRhbmEsIFwiVGltZXMgTmV3IFJvbWFuXCIsIFRhaG9tYSwgc2VyaWYnIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogWW91IGNhbiBvbmx5IGRpc3BsYXkgZm9udHMgdGhhdCBhcmUgY3VycmVudGx5IGxvYWRlZCBhbmQgYXZhaWxhYmxlIHRvIHRoZSBicm93c2VyOiB0aGVyZWZvcmUgZm9udHMgbXVzdFxyXG4gKiBiZSBwcmUtbG9hZGVkLiBQaGFzZXIgZG9lcyBub3QgZG8gdGhzIGZvciB5b3UsIHNvIHlvdSB3aWxsIHJlcXVpcmUgdGhlIHVzZSBvZiBhIDNyZCBwYXJ0eSBmb250IGxvYWRlcixcclxuICogb3IgaGF2ZSB0aGUgZm9udHMgcmVhZHkgYXZhaWxhYmxlIGluIHRoZSBDU1Mgb24gdGhlIHBhZ2UgaW4gd2hpY2ggeW91ciBQaGFzZXIgZ2FtZSByZXNpZGVzLlxyXG4gKlxyXG4gKiBTZWUge0BsaW5rIGh0dHA6Ly93d3cuam9yZGFubS5jby51ay90aW55dHlwZSB0aGlzIGNvbXBhdGliaWxpdHkgdGFibGV9IGZvciB0aGUgYXZhaWxhYmxlIGRlZmF1bHQgZm9udHNcclxuICogYWNyb3NzIG1vYmlsZSBicm93c2Vycy5cclxuICogXHJcbiAqIEEgbm90ZSBvbiBwZXJmb3JtYW5jZTogRXZlcnkgdGltZSB0aGUgY29udGVudHMgb2YgYSBUZXh0IG9iamVjdCBjaGFuZ2VzLCBpLmUuIGNoYW5naW5nIHRoZSB0ZXh0IGJlaW5nXHJcbiAqIGRpc3BsYXllZCwgb3IgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0LCBpdCBuZWVkcyB0byByZW1ha2UgdGhlIFRleHQgY2FudmFzLCBhbmQgaWYgb24gV2ViR0wsIHJlLXVwbG9hZCB0aGVcclxuICogbmV3IHRleHR1cmUgdG8gdGhlIEdQVS4gVGhpcyBjYW4gYmUgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbiBpZiB1c2VkIG9mdGVuLCBvciB3aXRoIGxhcmdlIHF1YW50aXRpZXMgb2ZcclxuICogVGV4dCBvYmplY3RzIGluIHlvdXIgZ2FtZS4gSWYgeW91IHJ1biBpbnRvIHBlcmZvcm1hbmNlIGlzc3VlcyB5b3Ugd291bGQgYmUgYmV0dGVyIG9mZiB1c2luZyBCaXRtYXAgVGV4dFxyXG4gKiBpbnN0ZWFkLCBhcyBpdCBiZW5lZml0cyBmcm9tIGJhdGNoaW5nIGFuZCBhdm9pZHMgZXhwZW5zaXZlIENhbnZhcyBBUEkgY2FsbHMuXHJcbiAqXHJcbiAqIEBjbGFzcyBUZXh0XHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2FtZU9iamVjdHNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5BbHBoYVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5CbGVuZE1vZGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQ29tcHV0ZWRTaXplXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkNyb3BcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGhcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRmxpcFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5HZXRCb3VuZHNcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuTWFza1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5PcmlnaW5cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuUGlwZWxpbmVcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2Nyb2xsRmFjdG9yXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRpbnRcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgYmVsb25ncy4gQSBHYW1lIE9iamVjdCBjYW4gb25seSBiZWxvbmcgdG8gb25lIFNjZW5lIGF0IGEgdGltZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xzdHJpbmdbXSl9IHRleHQgLSBUaGUgdGV4dCB0aGlzIFRleHQgb2JqZWN0IHdpbGwgZGlzcGxheS5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuVGV4dC5UZXh0U3R5bGV9IHN0eWxlIC0gVGhlIHRleHQgc3R5bGUgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAqL1xyXG52YXIgVGV4dCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogR2FtZU9iamVjdCxcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBDb21wb25lbnRzLkFscGhhLFxyXG4gICAgICAgIENvbXBvbmVudHMuQmxlbmRNb2RlLFxyXG4gICAgICAgIENvbXBvbmVudHMuQ29tcHV0ZWRTaXplLFxyXG4gICAgICAgIENvbXBvbmVudHMuQ3JvcCxcclxuICAgICAgICBDb21wb25lbnRzLkRlcHRoLFxyXG4gICAgICAgIENvbXBvbmVudHMuRmxpcCxcclxuICAgICAgICBDb21wb25lbnRzLkdldEJvdW5kcyxcclxuICAgICAgICBDb21wb25lbnRzLk1hc2ssXHJcbiAgICAgICAgQ29tcG9uZW50cy5PcmlnaW4sXHJcbiAgICAgICAgQ29tcG9uZW50cy5QaXBlbGluZSxcclxuICAgICAgICBDb21wb25lbnRzLlNjcm9sbEZhY3RvcixcclxuICAgICAgICBDb21wb25lbnRzLlRpbnQsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UcmFuc2Zvcm0sXHJcbiAgICAgICAgQ29tcG9uZW50cy5WaXNpYmxlLFxyXG4gICAgICAgIFRleHRSZW5kZXJcclxuICAgIF0sXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBUZXh0IChzY2VuZSwgeCwgeSwgdGV4dCwgc3R5bGUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IDA7IH1cclxuXHJcbiAgICAgICAgR2FtZU9iamVjdC5jYWxsKHRoaXMsIHNjZW5lLCAnVGV4dCcpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcmVuZGVyZXIgaW4gdXNlIGJ5IHRoaXMgVGV4dCBvYmplY3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNyZW5kZXJlclxyXG4gICAgICAgICAqIEB0eXBlIHsoUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcnxQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcil9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSBzY2VuZS5zeXMuZ2FtZS5yZW5kZXJlcjtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih4LCB5KTtcclxuICAgICAgICB0aGlzLnNldE9yaWdpbigwLCAwKTtcclxuICAgICAgICB0aGlzLmluaXRQaXBlbGluZSgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCB0aGUgdGV4dCBpcyByZW5kZXJlZCB0by5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I2NhbnZhc1xyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MQ2FudmFzRWxlbWVudH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNhbnZhcyA9IENhbnZhc1Bvb2wuY3JlYXRlKHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY29udGV4dCBvZiB0aGUgY2FudmFzIGVsZW1lbnQgdGhhdCB0aGUgdGV4dCBpcyByZW5kZXJlZCB0by5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I2NvbnRleHRcclxuICAgICAgICAgKiBAdHlwZSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBUZXh0IFN0eWxlIG9iamVjdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIE1hbmFnZXMgdGhlIHN0eWxlIG9mIHRoaXMgVGV4dCBvYmplY3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNzdHlsZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dFN0eWxlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3R5bGUgPSBuZXcgVGV4dFN0eWxlKHRoaXMsIHN0eWxlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hldGhlciB0byBhdXRvbWF0aWNhbGx5IHJvdW5kIGxpbmUgcG9zaXRpb25zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjYXV0b1JvdW5kXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYXV0b1JvdW5kID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFJlZ3VsYXIgRXhwcmVzc2lvbiB0aGF0IGlzIHVzZWQgdG8gc3BsaXQgdGhlIHRleHQgdXAgaW50byBsaW5lcywgaW5cclxuICAgICAgICAgKiBtdWx0aS1saW5lIHRleHQuIEJ5IGRlZmF1bHQgdGhpcyBpcyBgLyg/OlxcclxcbnxcXHJ8XFxuKS9gLlxyXG4gICAgICAgICAqIFlvdSBjYW4gY2hhbmdlIHRoaXMgUmVnRXhwIHRvIGJlIGFueXRoaW5nIGVsc2UgdGhhdCB5b3UgbWF5IG5lZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNzcGxpdFJlZ0V4cFxyXG4gICAgICAgICAqIEB0eXBlIHtvYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zcGxpdFJlZ0V4cCA9IC8oPzpcXHJcXG58XFxyfFxcbikvO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGV4dCB0byBkaXNwbGF5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjX3RleHRcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RleHQgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNwZWNpZnkgYSBwYWRkaW5nIHZhbHVlIHdoaWNoIGlzIGFkZGVkIHRvIHRoZSBsaW5lIHdpZHRoIGFuZCBoZWlnaHQgd2hlbiBjYWxjdWxhdGluZyB0aGUgVGV4dCBzaXplLlxyXG4gICAgICAgICAqIEFsbG93cyB5b3UgdG8gYWRkIGV4dHJhIHNwYWNpbmcgaWYgdGhlIGJyb3dzZXIgaXMgdW5hYmxlIHRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHRoZSB0cnVlIGZvbnQgZGltZW5zaW9ucy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I3BhZGRpbmdcclxuICAgICAgICAgKiBAdHlwZSB7e2xlZnQ6bnVtYmVyLHJpZ2h0Om51bWJlcix0b3A6bnVtYmVyLGJvdHRvbTpudW1iZXJ9fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGFkZGluZyA9IHsgbGVmdDogMCwgcmlnaHQ6IDAsIHRvcDogMCwgYm90dG9tOiAwIH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB3aWR0aCBvZiB0aGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjd2lkdGhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLndpZHRoID0gMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGhlaWdodCBvZiB0aGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjaGVpZ2h0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSAxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbGluZSBzcGFjaW5nIHZhbHVlLlxyXG4gICAgICAgICAqIFRoaXMgdmFsdWUgaXMgYWRkZWQgdG8gdGhlIGZvbnQgaGVpZ2h0IHRvIGNhbGN1bGF0ZSB0aGUgb3ZlcmFsbCBsaW5lIGhlaWdodC5cclxuICAgICAgICAgKiBPbmx5IGhhcyBhbiBlZmZlY3QgaWYgdGhpcyBUZXh0IG9iamVjdCBjb250YWlucyBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0LlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIElmIHlvdSB1cGRhdGUgdGhpcyBwcm9wZXJ0eSBkaXJlY3RseSwgaW5zdGVhZCBvZiB1c2luZyB0aGUgYHNldExpbmVTcGFjaW5nYCBtZXRob2QsIHRoZW5cclxuICAgICAgICAgKiBiZSBzdXJlIHRvIGNhbGwgYHVwZGF0ZVRleHRgIGFmdGVyLCBvciB5b3Ugd29uJ3Qgc2VlIHRoZSBjaGFuZ2UgcmVmbGVjdGVkIGluIHRoZSBUZXh0IG9iamVjdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I2xpbmVTcGFjaW5nXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5saW5lU3BhY2luZyA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZXRoZXIgdGhlIHRleHQgb3IgaXRzIHNldHRpbmdzIGhhdmUgY2hhbmdlZCBhbmQgbmVlZCB1cGRhdGluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I2RpcnR5XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vICBJZiByZXNvbHV0aW9uIHdhc24ndCBzZXQsIHRoZW4gd2UgZ2V0IGl0IGZyb20gdGhlIGdhbWUgY29uZmlnXHJcbiAgICAgICAgaWYgKHRoaXMuc3R5bGUucmVzb2x1dGlvbiA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc3R5bGUucmVzb2x1dGlvbiA9IHNjZW5lLnN5cy5nYW1lLmNvbmZpZy5yZXNvbHV0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGludGVybmFsIGNyb3AgZGF0YSBvYmplY3QsIGFzIHVzZWQgYnkgYHNldENyb3BgIGFuZCBwYXNzZWQgdG8gdGhlIGBGcmFtZS5zZXRDcm9wVVZzYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNfY3JvcFxyXG4gICAgICAgICAqIEB0eXBlIHtvYmplY3R9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fY3JvcCA9IHRoaXMucmVzZXRDcm9wT2JqZWN0KCk7XHJcblxyXG4gICAgICAgIC8vICBDcmVhdGUgYSBUZXh0dXJlIGZvciB0aGlzIFRleHQgb2JqZWN0XHJcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gc2NlbmUuc3lzLnRleHR1cmVzLmFkZENhbnZhcyhudWxsLCB0aGlzLmNhbnZhcywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIC8vICBHZXQgdGhlIGZyYW1lXHJcbiAgICAgICAgdGhpcy5mcmFtZSA9IHRoaXMudGV4dHVyZS5nZXQoKTtcclxuXHJcbiAgICAgICAgLy8gIFNldCB0aGUgcmVzb2x1dGlvblxyXG4gICAgICAgIHRoaXMuZnJhbWUuc291cmNlLnJlc29sdXRpb24gPSB0aGlzLnN0eWxlLnJlc29sdXRpb247XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlbmRlcmVyICYmIHRoaXMucmVuZGVyZXIuZ2wpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgQ2xlYXIgdGhlIGRlZmF1bHQgMXgxIGdsVGV4dHVyZSwgYXMgd2Ugb3ZlcnJpZGUgaXQgbGF0ZXJcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kZWxldGVUZXh0dXJlKHRoaXMuZnJhbWUuc291cmNlLmdsVGV4dHVyZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLnNvdXJjZS5nbFRleHR1cmUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pbml0UlRMKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VGV4dCh0ZXh0KTtcclxuXHJcbiAgICAgICAgaWYgKHN0eWxlICYmIHN0eWxlLnBhZGRpbmcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldFBhZGRpbmcoc3R5bGUucGFkZGluZyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3R5bGUgJiYgc3R5bGUubGluZVNwYWNpbmcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmxpbmVTcGFjaW5nID0gc3R5bGUubGluZVNwYWNpbmc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzY2VuZS5zeXMuZ2FtZS5ldmVudHMub24oR2FtZUV2ZW50cy5DT05URVhUX1JFU1RPUkVELCBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZSByaWdodCB0byBsZWZ0IHRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNpbml0UlRMXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgaW5pdFJUTDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuc3R5bGUucnRsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIEhlcmUgaXMgd2hlcmUgdGhlIGNyYXp5IHN0YXJ0cy5cclxuICAgICAgICAvL1xyXG4gICAgICAgIC8vICBEdWUgdG8gYnJvd3NlciBpbXBsZW1lbnRhdGlvbiBpc3N1ZXMsIHlvdSBjYW5ub3QgZmlsbFRleHQgQmlEaSB0ZXh0IHRvIGEgY2FudmFzXHJcbiAgICAgICAgLy8gIHRoYXQgaXMgbm90IHBhcnQgb2YgdGhlIERPTS4gSXQganVzdCBjb21wbGV0ZWx5IGlnbm9yZXMgdGhlIGRpcmVjdGlvbiBwcm9wZXJ0eS5cclxuXHJcbiAgICAgICAgdGhpcy5jYW52YXMuZGlyID0gJ3J0bCc7XHJcblxyXG4gICAgICAgIC8vICBFeHBlcmltZW50YWwgYXRtLCBidXQgb25lIGRheSAuLi5cclxuICAgICAgICB0aGlzLmNvbnRleHQuZGlyZWN0aW9uID0gJ3J0bCc7XHJcblxyXG4gICAgICAgIC8vICBBZGQgaXQgdG8gdGhlIERPTSwgYnV0IGhpZGRlbiB3aXRoaW4gdGhlIHBhcmVudCBjYW52YXMuXHJcbiAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHJcbiAgICAgICAgQWRkVG9ET00odGhpcy5jYW52YXMsIHRoaXMuc2NlbmUuc3lzLmNhbnZhcyk7XHJcblxyXG4gICAgICAgIC8vICBBbmQgZmluYWxseSB3ZSBzZXQgdGhlIHggb3JpZ2luXHJcbiAgICAgICAgdGhpcy5vcmlnaW5YID0gMTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHcmVlZHkgd3JhcHBpbmcgYWxnb3JpdGhtIHRoYXQgd2lsbCB3cmFwIHdvcmRzIGFzIHRoZSBsaW5lIGdyb3dzIGxvbmdlciB0aGFuIGl0cyBob3Jpem9udGFsXHJcbiAgICAgKiBib3VuZHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNydW5Xb3JkV3JhcFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCB0byBwZXJmb3JtIHdvcmQgd3JhcCBkZXRlY3Rpb24gYWdhaW5zdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSB0ZXh0IGFmdGVyIHdyYXBwaW5nIGhhcyBiZWVuIGFwcGxpZWQuXHJcbiAgICAgKi9cclxuICAgIHJ1bldvcmRXcmFwOiBmdW5jdGlvbiAodGV4dClcclxuICAgIHtcclxuICAgICAgICB2YXIgc3R5bGUgPSB0aGlzLnN0eWxlO1xyXG5cclxuICAgICAgICBpZiAoc3R5bGUud29yZFdyYXBDYWxsYmFjaylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB3cmFwcGVkTGluZXMgPSBzdHlsZS53b3JkV3JhcENhbGxiYWNrLmNhbGwoc3R5bGUud29yZFdyYXBDYWxsYmFja1Njb3BlLCB0ZXh0LCB0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHdyYXBwZWRMaW5lcykpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHdyYXBwZWRMaW5lcyA9IHdyYXBwZWRMaW5lcy5qb2luKCdcXG4nKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWRMaW5lcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3R5bGUud29yZFdyYXBXaWR0aClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChzdHlsZS53b3JkV3JhcFVzZUFkdmFuY2VkKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hZHZhbmNlZFdvcmRXcmFwKHRleHQsIHRoaXMuY29udGV4dCwgdGhpcy5zdHlsZS53b3JkV3JhcFdpZHRoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJhc2ljV29yZFdyYXAodGV4dCwgdGhpcy5jb250ZXh0LCB0aGlzLnN0eWxlLndvcmRXcmFwV2lkdGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0ZXh0O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZHZhbmNlZCB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyIHRoYW4gaXRzIGhvcml6b250YWxcclxuICAgICAqIGJvdW5kcy4gQ29uc2VjdXRpdmUgc3BhY2VzIHdpbGwgYmUgY29sbGFwc2VkIGFuZCByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIHNwYWNlLiBMaW5lcyB3aWxsIGJlXHJcbiAgICAgKiB0cmltbWVkIG9mIHdoaXRlIHNwYWNlIGJlZm9yZSBwcm9jZXNzaW5nLiBUaHJvd3MgYW4gZXJyb3IgaWYgd29yZFdyYXBXaWR0aCBpcyBsZXNzIHRoYW4gYVxyXG4gICAgICogc2luZ2xlIGNoYXJhY3Rlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I2FkdmFuY2VkV29yZFdyYXBcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgdG8gcGVyZm9ybSB3b3JkIHdyYXAgZGV0ZWN0aW9uIGFnYWluc3QuXHJcbiAgICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY29udGV4dCAtIFRoZSBDYW52YXMgUmVuZGVyaW5nIENvbnRleHQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd29yZFdyYXBXaWR0aCAtIFRoZSB3b3JkIHdyYXAgd2lkdGguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgd3JhcHBlZCB0ZXh0LlxyXG4gICAgICovXHJcbiAgICBhZHZhbmNlZFdvcmRXcmFwOiBmdW5jdGlvbiAodGV4dCwgY29udGV4dCwgd29yZFdyYXBXaWR0aClcclxuICAgIHtcclxuICAgICAgICB2YXIgb3V0cHV0ID0gJyc7XHJcblxyXG4gICAgICAgIC8vIENvbmRlbnNlIGNvbnNlY3V0aXZlIHNwYWNlcyBhbmQgc3BsaXQgaW50byBsaW5lc1xyXG4gICAgICAgIHZhciBsaW5lcyA9IHRleHRcclxuICAgICAgICAgICAgLnJlcGxhY2UoLyArL2dpLCAnICcpXHJcbiAgICAgICAgICAgIC5zcGxpdCh0aGlzLnNwbGl0UmVnRXhwKTtcclxuXHJcbiAgICAgICAgdmFyIGxpbmVzQ291bnQgPSBsaW5lcy5sZW5ndGg7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXNDb3VudDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGxpbmUgPSBsaW5lc1tpXTtcclxuICAgICAgICAgICAgdmFyIG91dCA9ICcnO1xyXG5cclxuICAgICAgICAgICAgLy8gVHJpbSB3aGl0ZXNwYWNlXHJcbiAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoL14gKnxcXHMqJC9naSwgJycpO1xyXG5cclxuICAgICAgICAgICAgLy8gSWYgZW50aXJlIGxpbmUgaXMgbGVzcyB0aGFuIHdvcmRXcmFwV2lkdGggYXBwZW5kIHRoZSBlbnRpcmUgbGluZSBhbmQgZXhpdCBlYXJseVxyXG4gICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gY29udGV4dC5tZWFzdXJlVGV4dChsaW5lKS53aWR0aDtcclxuXHJcbiAgICAgICAgICAgIGlmIChsaW5lV2lkdGggPCB3b3JkV3JhcFdpZHRoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gbGluZSArICdcXG4nO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgY2FsY3VsYXRlIG5ldyBsaW5lc1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudExpbmVXaWR0aCA9IHdvcmRXcmFwV2lkdGg7XHJcblxyXG4gICAgICAgICAgICAvLyBTcGxpdCBpbnRvIHdvcmRzXHJcbiAgICAgICAgICAgIHZhciB3b3JkcyA9IGxpbmUuc3BsaXQoJyAnKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciB3b3JkID0gd29yZHNbal07XHJcbiAgICAgICAgICAgICAgICB2YXIgd29yZFdpdGhTcGFjZSA9IHdvcmQgKyAnICc7XHJcbiAgICAgICAgICAgICAgICB2YXIgd29yZFdpZHRoID0gY29udGV4dC5tZWFzdXJlVGV4dCh3b3JkV2l0aFNwYWNlKS53aWR0aDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAod29yZFdpZHRoID4gY3VycmVudExpbmVXaWR0aClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBCcmVhayB3b3JkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGogPT09IDApXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTaGF2ZSBvZmYgbGV0dGVycyBmcm9tIHdvcmQgdW50aWwgaXQncyBzbWFsbCBlbm91Z2hcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1dvcmQgPSB3b3JkV2l0aFNwYWNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5ld1dvcmQubGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdXb3JkID0gbmV3V29yZC5zbGljZSgwLCAtMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkV2lkdGggPSBjb250ZXh0Lm1lYXN1cmVUZXh0KG5ld1dvcmQpLndpZHRoO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3b3JkV2lkdGggPD0gY3VycmVudExpbmVXaWR0aClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd29yZFdyYXBXaWR0aCBpcyB0b28gc21hbGwgZm9yIGV2ZW4gYSBzaW5nbGUgbGV0dGVyLCBzaGFtZSB1c2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZhaWx1cmUgd2l0aCBhIGZhdGFsIGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmV3V29yZC5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyB0ZXh0XFwncyB3b3JkV3JhcFdpZHRoIHNldHRpbmcgaXMgbGVzcyB0aGFuIGEgc2luZ2xlIGNoYXJhY3RlciEnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBjdXJyZW50IHdvcmQgaW4gYXJyYXkgd2l0aCByZW1haW5kZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlY29uZFBhcnQgPSB3b3JkLnN1YnN0cihuZXdXb3JkLmxlbmd0aCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3b3Jkc1tqXSA9IHNlY29uZFBhcnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBcHBlbmQgZmlyc3QgcGllY2UgdG8gb3V0cHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dCArPSBuZXdXb3JkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgZXhpc3Rpbmcgd29yZCBsZW5ndGggaXMgMCwgZG9uJ3QgaW5jbHVkZSBpdFxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAod29yZHNbal0ubGVuZ3RoKSA/IGogOiBqICsgMTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29sbGFwc2UgcmVzdCBvZiBzZW50ZW5jZSBhbmQgcmVtb3ZlIGFueSB0cmFpbGluZyB3aGl0ZSBzcGFjZVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciByZW1haW5kZXIgPSB3b3Jkcy5zbGljZShvZmZzZXQpLmpvaW4oJyAnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvWyBcXG5dKiQvZ2ksICcnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUHJlcGVuZCByZW1haW5kZXIgdG8gbmV4dCBsaW5lXHJcbiAgICAgICAgICAgICAgICAgICAgbGluZXNbaSArIDFdID0gcmVtYWluZGVyICsgJyAnICsgKGxpbmVzW2kgKyAxXSB8fCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGluZXNDb3VudCA9IGxpbmVzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIFByb2Nlc3Npbmcgb24gdGhpcyBsaW5lXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB3b3JkIHdpdGggc3BhY2UgdG8gb3V0cHV0XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9IHdvcmRXaXRoU3BhY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudExpbmVXaWR0aCAtPSB3b3JkV2lkdGg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIEFwcGVuZCBwcm9jZXNzZWQgbGluZSB0byBvdXRwdXRcclxuICAgICAgICAgICAgb3V0cHV0ICs9IG91dC5yZXBsYWNlKC9bIFxcbl0qJC9naSwgJycpICsgJ1xcbic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBUcmltIHRoZSBlbmQgb2YgdGhlIHN0cmluZ1xyXG4gICAgICAgIG91dHB1dCA9IG91dHB1dC5yZXBsYWNlKC9bXFxzfFxcbl0qJC9naSwgJycpO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdyZWVkeSB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyIHRoYW4gaXRzIGhvcml6b250YWxcclxuICAgICAqIGJvdW5kcy4gU3BhY2VzIGFyZSBub3QgY29sbGFwc2VkIGFuZCB3aGl0ZXNwYWNlIGlzIG5vdCB0cmltbWVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjYmFzaWNXb3JkV3JhcFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCB0byBwZXJmb3JtIHdvcmQgd3JhcCBkZXRlY3Rpb24gYWdhaW5zdC5cclxuICAgICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjb250ZXh0IC0gVGhlIENhbnZhcyBSZW5kZXJpbmcgQ29udGV4dC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3b3JkV3JhcFdpZHRoIC0gVGhlIHdvcmQgd3JhcCB3aWR0aC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSB3cmFwcGVkIHRleHQuXHJcbiAgICAgKi9cclxuICAgIGJhc2ljV29yZFdyYXA6IGZ1bmN0aW9uICh0ZXh0LCBjb250ZXh0LCB3b3JkV3JhcFdpZHRoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSAnJztcclxuICAgICAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KHRoaXMuc3BsaXRSZWdFeHApO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGg7XHJcbiAgICAgICAgICAgIHZhciB3b3JkcyA9IGxpbmVzW2ldLnNwbGl0KCcgJyk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdvcmRzLmxlbmd0aDsgaisrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgd29yZFdpZHRoID0gY29udGV4dC5tZWFzdXJlVGV4dCh3b3Jkc1tqXSkud2lkdGg7XHJcbiAgICAgICAgICAgICAgICB2YXIgd29yZFdpZHRoV2l0aFNwYWNlID0gd29yZFdpZHRoICsgY29udGV4dC5tZWFzdXJlVGV4dCgnICcpLndpZHRoO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh3b3JkV2lkdGhXaXRoU3BhY2UgPiBzcGFjZUxlZnQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2tpcCBwcmludGluZyB0aGUgbmV3bGluZSBpZiBpdCdzIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBsaW5lIHRoYXQgaXMgZ3JlYXRlclxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoYW4gdGhlIHdvcmQgd3JhcCB3aWR0aC5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaiA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZHNbal0gKyAnICc7XHJcbiAgICAgICAgICAgICAgICAgICAgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aCAtIHdvcmRXaWR0aFdpdGhTcGFjZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBzcGFjZUxlZnQgLT0gd29yZFdpZHRoV2l0aFNwYWNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3b3Jkc1tqXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGogPCAod29yZHMubGVuZ3RoIC0gMSkpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyAnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGkgPCBsaW5lcy5sZW5ndGggLSAxKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUnVucyB0aGUgZ2l2ZW4gdGV4dCB0aHJvdWdoIHRoaXMgVGV4dCBvYmplY3RzIHdvcmQgd3JhcHBpbmcgYW5kIHJldHVybnMgdGhlIHJlc3VsdHMgYXMgYW5cclxuICAgICAqIGFycmF5LCB3aGVyZSBlYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5IGNvcnJlc3BvbmRzIHRvIGEgd3JhcHBlZCBsaW5lIG9mIHRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNnZXRXcmFwcGVkVGV4dFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCBmb3Igd2hpY2ggdGhlIHdyYXBwaW5nIHdpbGwgYmUgY2FsY3VsYXRlZC4gSWYgdW5zcGVjaWZpZWQsIHRoZSBUZXh0IG9iamVjdHMgY3VycmVudCB0ZXh0IHdpbGwgYmUgdXNlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gQW4gYXJyYXkgb2Ygc3RyaW5ncyB3aXRoIHRoZSBwaWVjZXMgb2Ygd3JhcHBlZCB0ZXh0LlxyXG4gICAgICovXHJcbiAgICBnZXRXcmFwcGVkVGV4dDogZnVuY3Rpb24gKHRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCkgeyB0ZXh0ID0gdGhpcy5fdGV4dDsgfVxyXG5cclxuICAgICAgICB0aGlzLnN0eWxlLnN5bmNGb250KHRoaXMuY2FudmFzLCB0aGlzLmNvbnRleHQpO1xyXG5cclxuICAgICAgICB2YXIgd3JhcHBlZExpbmVzID0gdGhpcy5ydW5Xb3JkV3JhcCh0ZXh0KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHdyYXBwZWRMaW5lcy5zcGxpdCh0aGlzLnNwbGl0UmVnRXhwKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHRleHQgdG8gZGlzcGxheS5cclxuICAgICAqXHJcbiAgICAgKiBBbiBhcnJheSBvZiBzdHJpbmdzIHdpbGwgYmUgam9pbmVkIHdpdGggYFxcbmAgbGluZSBicmVha3MuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNzZXRUZXh0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8c3RyaW5nW10pfSB2YWx1ZSAtIFRoZSBzdHJpbmcsIG9yIGFycmF5IG9mIHN0cmluZ3MsIHRvIGJlIHNldCBhcyB0aGUgY29udGVudCBvZiB0aGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmpvaW4oJ1xcbicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLl90ZXh0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fdGV4dCA9IHZhbHVlLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgdGV4dCBzdHlsZS5cclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdGV4dC5zZXRTdHlsZSh7XHJcbiAgICAgKiAgICAgZm9udFNpemU6ICc2NHB4JyxcclxuICAgICAqICAgICBmb250RmFtaWx5OiAnQXJpYWwnLFxyXG4gICAgICogICAgIGNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgKiAgICAgYWxpZ246ICdjZW50ZXInLFxyXG4gICAgICogICAgIGJhY2tncm91bmRDb2xvcjogJyNmZjAwZmYnXHJcbiAgICAgKiB9KTtcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I3NldFN0eWxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gc3R5bGUgLSBUaGUgc3R5bGUgc2V0dGluZ3MgdG8gc2V0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTdHlsZTogZnVuY3Rpb24gKHN0eWxlKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnNldFN0eWxlKHN0eWxlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIGZvbnQuXHJcbiAgICAgKlxyXG4gICAgICogSWYgYSBzdHJpbmcgaXMgZ2l2ZW4sIHRoZSBmb250IGZhbWlseSBpcyBzZXQuXHJcbiAgICAgKlxyXG4gICAgICogSWYgYW4gb2JqZWN0IGlzIGdpdmVuLCB0aGUgYGZvbnRGYW1pbHlgLCBgZm9udFNpemVgIGFuZCBgZm9udFN0eWxlYFxyXG4gICAgICogcHJvcGVydGllcyBvZiB0aGF0IG9iamVjdCBhcmUgc2V0LlxyXG4gICAgICogXHJcbiAgICAgKiAqKkltcG9ydGFudDoqKiBJZiB0aGUgZm9udCB5b3Ugd2lzaCB0byB1c2UgaGFzIGEgc3BhY2Ugb3IgZGlnaXQgaW4gaXRzIG5hbWUsIHN1Y2ggYXNcclxuICAgICAqICdQcmVzcyBTdGFydCAyUCcgb3IgJ1JvYm90byBDb25kZW5zZWQnLCB0aGVuIHlvdSBfbXVzdF8gcHV0IHRoZSBmb250IG5hbWUgaW4gcXVvdGVzOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBUZXh0LnNldEZvbnQoJ1wiUm9ib3RvIENvbmRlbnNlZFwiJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogRXF1YWxseSwgaWYgeW91IHdpc2ggdG8gcHJvdmlkZSBhIGxpc3Qgb2YgZmFsbGJhY2sgZm9udHMsIHRoZW4geW91IHNob3VsZCBlbnN1cmUgdGhleSBhcmUgYWxsXHJcbiAgICAgKiBxdW90ZWQgcHJvcGVybHksIHRvbzpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogVGV4dC5zZXRGb250KCdWZXJkYW5hLCBcIlRpbWVzIE5ldyBSb21hblwiLCBUYWhvbWEsIHNlcmlmJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I3NldEZvbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmb250IC0gVGhlIGZvbnQgZmFtaWx5IG9yIGZvbnQgc2V0dGluZ3MgdG8gc2V0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRGb250OiBmdW5jdGlvbiAoZm9udClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5zZXRGb250KGZvbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgZm9udCBmYW1pbHkuXHJcbiAgICAgKiBcclxuICAgICAqICoqSW1wb3J0YW50OioqIElmIHRoZSBmb250IHlvdSB3aXNoIHRvIHVzZSBoYXMgYSBzcGFjZSBvciBkaWdpdCBpbiBpdHMgbmFtZSwgc3VjaCBhc1xyXG4gICAgICogJ1ByZXNzIFN0YXJ0IDJQJyBvciAnUm9ib3RvIENvbmRlbnNlZCcsIHRoZW4geW91IF9tdXN0XyBwdXQgdGhlIGZvbnQgbmFtZSBpbiBxdW90ZXM6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIFRleHQuc2V0Rm9udCgnXCJSb2JvdG8gQ29uZGVuc2VkXCInKTtcclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiBFcXVhbGx5LCBpZiB5b3Ugd2lzaCB0byBwcm92aWRlIGEgbGlzdCBvZiBmYWxsYmFjayBmb250cywgdGhlbiB5b3Ugc2hvdWxkIGVuc3VyZSB0aGV5IGFyZSBhbGxcclxuICAgICAqIHF1b3RlZCBwcm9wZXJseSwgdG9vOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBUZXh0LnNldEZvbnQoJ1ZlcmRhbmEsIFwiVGltZXMgTmV3IFJvbWFuXCIsIFRhaG9tYSwgc2VyaWYnKTtcclxuICAgICAqIGBgYFxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjc2V0Rm9udEZhbWlseVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGZhbWlseSAtIFRoZSBmb250IGZhbWlseS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhpcyBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Rm9udEZhbWlseTogZnVuY3Rpb24gKGZhbWlseSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5zZXRGb250RmFtaWx5KGZhbWlseSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBmb250IHNpemUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNzZXRGb250U2l6ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNpemUgLSBUaGUgZm9udCBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRGb250U2l6ZTogZnVuY3Rpb24gKHNpemUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuc2V0Rm9udFNpemUoc2l6ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBmb250IHN0eWxlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjc2V0Rm9udFN0eWxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3R5bGUgLSBUaGUgZm9udCBzdHlsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhpcyBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Rm9udFN0eWxlOiBmdW5jdGlvbiAoc3R5bGUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuc2V0Rm9udFN0eWxlKHN0eWxlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYSBmaXhlZCB3aWR0aCBhbmQgaGVpZ2h0IGZvciB0aGUgdGV4dC5cclxuICAgICAqXHJcbiAgICAgKiBQYXNzIGluIGAwYCBmb3IgZWl0aGVyIG9mIHRoZXNlIHBhcmFtZXRlcnMgdG8gZGlzYWJsZSBmaXhlZCB3aWR0aCBvciBoZWlnaHQgcmVzcGVjdGl2ZWx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjc2V0Rml4ZWRTaXplXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgZml4ZWQgd2lkdGggdG8gc2V0LiBgMGAgZGlzYWJsZXMgZml4ZWQgd2lkdGguXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGZpeGVkIGhlaWdodCB0byBzZXQuIGAwYCBkaXNhYmxlcyBmaXhlZCBoZWlnaHQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoaXMgVGV4dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEZpeGVkU2l6ZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuc2V0Rml4ZWRTaXplKHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgYmFja2dyb3VuZCBjb2xvci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I3NldEJhY2tncm91bmRDb2xvclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gVGhlIGJhY2tncm91bmQgY29sb3IuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoaXMgVGV4dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEJhY2tncm91bmRDb2xvcjogZnVuY3Rpb24gKGNvbG9yKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnNldEJhY2tncm91bmRDb2xvcihjb2xvcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBmaWxsIHN0eWxlIHRvIGJlIHVzZWQgYnkgdGhlIFRleHQgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgY2FuIGJlIGFueSB2YWxpZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgZmlsbFN0eWxlIHZhbHVlLCBzdWNoIGFzXHJcbiAgICAgKiBhIGNvbG9yIChpbiBoZXgsIHJnYiwgcmdiYSwgaHNsIG9yIG5hbWVkIHZhbHVlcyksIGEgZ3JhZGllbnQgb3IgYSBwYXR0ZXJuLlxyXG4gICAgICpcclxuICAgICAqIFNlZSB0aGUgW01ETiBmaWxsU3R5bGUgZG9jc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC9maWxsU3R5bGUpIGZvciBtb3JlIGRldGFpbHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNzZXRGaWxsXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8YW55KX0gY29sb3IgLSBUaGUgdGV4dCBmaWxsIHN0eWxlLiBDYW4gYmUgYW55IHZhbGlkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgYGZpbGxTdHlsZWAgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoaXMgVGV4dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEZpbGw6IGZ1bmN0aW9uIChmaWxsU3R5bGUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuc2V0RmlsbChmaWxsU3R5bGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgdGV4dCBmaWxsIGNvbG9yLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjc2V0Q29sb3JcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIFRoZSB0ZXh0IGZpbGwgY29sb3IuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoaXMgVGV4dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldENvbG9yOiBmdW5jdGlvbiAoY29sb3IpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuc2V0Q29sb3IoY29sb3IpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgc3Ryb2tlIHNldHRpbmdzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjc2V0U3Ryb2tlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBUaGUgc3Ryb2tlIGNvbG9yLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRoaWNrbmVzcyAtIFRoZSBzdHJva2UgdGhpY2tuZXNzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTdHJva2U6IGZ1bmN0aW9uIChjb2xvciwgdGhpY2tuZXNzKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnNldFN0cm9rZShjb2xvciwgdGhpY2tuZXNzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHNoYWRvdyBzZXR0aW5ncy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I3NldFNoYWRvd1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIGhvcml6b250YWwgc2hhZG93IG9mZnNldC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB2ZXJ0aWNhbCBzaGFkb3cgb2Zmc2V0LlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjb2xvcj0nIzAwMCddIC0gVGhlIHNoYWRvdyBjb2xvci5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYmx1cj0wXSAtIFRoZSBzaGFkb3cgYmx1ciByYWRpdXMuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzaGFkb3dTdHJva2U9ZmFsc2VdIC0gV2hldGhlciB0byBzdHJva2UgdGhlIHNoYWRvdy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NoYWRvd0ZpbGw9dHJ1ZV0gLSBXaGV0aGVyIHRvIGZpbGwgdGhlIHNoYWRvdy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhpcyBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U2hhZG93OiBmdW5jdGlvbiAoeCwgeSwgY29sb3IsIGJsdXIsIHNoYWRvd1N0cm9rZSwgc2hhZG93RmlsbClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5zZXRTaGFkb3coeCwgeSwgY29sb3IsIGJsdXIsIHNoYWRvd1N0cm9rZSwgc2hhZG93RmlsbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBzaGFkb3cgb2Zmc2V0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjc2V0U2hhZG93T2Zmc2V0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHNoYWRvdyBvZmZzZXQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBzaGFkb3cgb2Zmc2V0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTaGFkb3dPZmZzZXQ6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnNldFNoYWRvd09mZnNldCh4LCB5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHNoYWRvdyBjb2xvci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I3NldFNoYWRvd0NvbG9yXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBUaGUgc2hhZG93IGNvbG9yLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTaGFkb3dDb2xvcjogZnVuY3Rpb24gKGNvbG9yKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnNldFNoYWRvd0NvbG9yKGNvbG9yKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHNoYWRvdyBibHVyIHJhZGl1cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I3NldFNoYWRvd0JsdXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBibHVyIC0gVGhlIHNoYWRvdyBibHVyIHJhZGl1cy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhpcyBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U2hhZG93Qmx1cjogZnVuY3Rpb24gKGJsdXIpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuc2V0U2hhZG93Qmx1cihibHVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbmFibGUgb3IgZGlzYWJsZSBzaGFkb3cgc3Ryb2tlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjc2V0U2hhZG93U3Ryb2tlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQgLSBXaGV0aGVyIHNoYWRvdyBzdHJva2UgaXMgZW5hYmxlZCBvciBub3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoaXMgVGV4dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFNoYWRvd1N0cm9rZTogZnVuY3Rpb24gKGVuYWJsZWQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuc2V0U2hhZG93U3Ryb2tlKGVuYWJsZWQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVuYWJsZSBvciBkaXNhYmxlIHNoYWRvdyBmaWxsLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjc2V0U2hhZG93RmlsbFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkIC0gV2hldGhlciBzaGFkb3cgZmlsbCBpcyBlbmFibGVkIG9yIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhpcyBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0U2hhZG93RmlsbDogZnVuY3Rpb24gKGVuYWJsZWQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuc2V0U2hhZG93RmlsbChlbmFibGVkKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHdpZHRoIChpbiBwaXhlbHMpIHRvIHVzZSBmb3Igd3JhcHBpbmcgbGluZXMuIFBhc3MgaW4gbnVsbCB0byByZW1vdmUgd3JhcHBpbmcgYnkgd2lkdGguXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNzZXRXb3JkV3JhcFdpZHRoXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gez9udW1iZXJ9IHdpZHRoIC0gVGhlIG1heGltdW0gd2lkdGggb2YgYSBsaW5lIGluIHBpeGVscy4gU2V0IHRvIG51bGwgdG8gcmVtb3ZlIHdyYXBwaW5nLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdXNlQWR2YW5jZWRXcmFwPWZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRvIHVzZSB0aGUgYWR2YW5jZWQgd3JhcHBpbmdcclxuICAgICAqIGFsZ29yaXRobS4gSWYgdHJ1ZSwgc3BhY2VzIGFyZSBjb2xsYXBzZWQgYW5kIHdoaXRlc3BhY2UgaXMgdHJpbW1lZCBmcm9tIGxpbmVzLiBJZiBmYWxzZSxcclxuICAgICAqIHNwYWNlcyBhbmQgd2hpdGVzcGFjZSBhcmUgbGVmdCBhcyBpcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhpcyBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0V29yZFdyYXBXaWR0aDogZnVuY3Rpb24gKHdpZHRoLCB1c2VBZHZhbmNlZFdyYXApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuc2V0V29yZFdyYXBXaWR0aCh3aWR0aCwgdXNlQWR2YW5jZWRXcmFwKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYSBjdXN0b20gY2FsbGJhY2sgZm9yIHdyYXBwaW5nIGxpbmVzLiBQYXNzIGluIG51bGwgdG8gcmVtb3ZlIHdyYXBwaW5nIGJ5IGNhbGxiYWNrLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjc2V0V29yZFdyYXBDYWxsYmFja1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtUZXh0U3R5bGVXb3JkV3JhcENhbGxiYWNrfSBjYWxsYmFjayAtIEEgY3VzdG9tIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3Igd3JhcHBpbmcgdGhlXHJcbiAgICAgKiB0ZXh0LiBJdCB3aWxsIHJlY2VpdmUgdHdvIGFyZ3VtZW50czogdGV4dCAodGhlIHN0cmluZyB0byB3cmFwKSwgdGV4dE9iamVjdCAodGhpcyBUZXh0XHJcbiAgICAgKiBpbnN0YW5jZSkuIEl0IHNob3VsZCByZXR1cm4gdGhlIHdyYXBwZWQgbGluZXMgZWl0aGVyIGFzIGFuIGFycmF5IG9mIGxpbmVzIG9yIGFzIGEgc3RyaW5nIHdpdGhcclxuICAgICAqIG5ld2xpbmUgY2hhcmFjdGVycyBpbiBwbGFjZSB0byBpbmRpY2F0ZSB3aGVyZSBicmVha3Mgc2hvdWxkIGhhcHBlbi5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbc2NvcGU9bnVsbF0gLSBUaGUgc2NvcGUgdGhhdCB3aWxsIGJlIGFwcGxpZWQgd2hlbiB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhpcyBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0V29yZFdyYXBDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBzY29wZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5zZXRXb3JkV3JhcENhbGxiYWNrKGNhbGxiYWNrLCBzY29wZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBhbGlnbm1lbnQgb2YgdGhlIHRleHQgaW4gdGhpcyBUZXh0IG9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGFyZ3VtZW50IGNhbiBiZSBvbmUgb2Y6IGBsZWZ0YCwgYHJpZ2h0YCwgYGNlbnRlcmAgb3IgYGp1c3RpZnlgLlxyXG4gICAgICogXHJcbiAgICAgKiBBbGlnbm1lbnQgb25seSB3b3JrcyBpZiB0aGUgVGV4dCBvYmplY3QgaGFzIG1vcmUgdGhhbiBvbmUgbGluZSBvZiB0ZXh0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjc2V0QWxpZ25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbYWxpZ249J2xlZnQnXSAtIFRoZSB0ZXh0IGFsaWdubWVudCBmb3IgbXVsdGktbGluZSB0ZXh0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRBbGlnbjogZnVuY3Rpb24gKGFsaWduKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnNldEFsaWduKGFsaWduKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHJlc29sdXRpb24gdXNlZCBieSB0aGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEJ5IGRlZmF1bHQgaXQgd2lsbCBiZSBzZXQgdG8gbWF0Y2ggdGhlIHJlc29sdXRpb24gc2V0IGluIHRoZSBHYW1lIENvbmZpZyxcclxuICAgICAqIGJ1dCB5b3UgY2FuIG92ZXJyaWRlIGl0IHZpYSB0aGlzIG1ldGhvZCwgb3IgYnkgc3BlY2lmeWluZyBpdCBpbiB0aGUgVGV4dCBzdHlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogSXQgYWxsb3dzIGZvciBtdWNoIGNsZWFyZXIgdGV4dCBvbiBIaWdoIERQSSBkZXZpY2VzLCBhdCB0aGUgY29zdCBvZiBtZW1vcnkgYmVjYXVzZSBpdCB1c2VzIGxhcmdlclxyXG4gICAgICogaW50ZXJuYWwgQ2FudmFzIHRleHR1cmVzIGZvciB0aGUgVGV4dC5cclxuICAgICAqIFxyXG4gICAgICogVGhlcmVmb3JlLCBwbGVhc2UgdXNlIHdpdGggY2F1dGlvbiwgYXMgdGhlIG1vcmUgaGlnaCByZXMgVGV4dCB5b3UgaGF2ZSwgdGhlIG1vcmUgbWVtb3J5IGl0IHVzZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNzZXRSZXNvbHV0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHJlc29sdXRpb24gZm9yIHRoaXMgVGV4dCBvYmplY3QgdG8gdXNlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRSZXNvbHV0aW9uOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuc2V0UmVzb2x1dGlvbih2YWx1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgbGluZSBzcGFjaW5nIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgdmFsdWUgaXMgX2FkZGVkXyB0byB0aGUgaGVpZ2h0IG9mIHRoZSBmb250IHdoZW4gY2FsY3VsYXRpbmcgdGhlIG92ZXJhbGwgbGluZSBoZWlnaHQuXHJcbiAgICAgKiBUaGlzIG9ubHkgaGFzIGFuIGVmZmVjdCBpZiB0aGlzIFRleHQgb2JqZWN0IGNvbnNpc3RzIG9mIG11bHRpcGxlIGxpbmVzIG9mIHRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNzZXRMaW5lU3BhY2luZ1xyXG4gICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBhbW91bnQgdG8gYWRkIHRvIHRoZSBmb250IGhlaWdodCB0byBhY2hpZXZlIHRoZSBvdmVyYWxsIGxpbmUgaGVpZ2h0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRMaW5lU3BhY2luZzogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMubGluZVNwYWNpbmcgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlVGV4dCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgdGV4dCBwYWRkaW5nLlxyXG4gICAgICpcclxuICAgICAqICdsZWZ0JyBjYW4gYmUgYW4gb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIElmIG9ubHkgJ2xlZnQnIGFuZCAndG9wJyBhcmUgZ2l2ZW4gdGhleSBhcmUgdHJlYXRlZCBhcyAneCcgYW5kICd5Jy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I3NldFBhZGRpbmdcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KG51bWJlcnxQaGFzZXIuVHlwZXMuR2FtZU9iamVjdHMuVGV4dC5UZXh0UGFkZGluZyl9IGxlZnQgLSBUaGUgbGVmdCBwYWRkaW5nIHZhbHVlLCBvciBhIHBhZGRpbmcgY29uZmlnIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0b3AgLSBUaGUgdG9wIHBhZGRpbmcgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmlnaHQgLSBUaGUgcmlnaHQgcGFkZGluZyB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBib3R0b20gLSBUaGUgYm90dG9tIHBhZGRpbmcgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoaXMgVGV4dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFBhZGRpbmc6IGZ1bmN0aW9uIChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBsZWZ0ID09PSAnb2JqZWN0JylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjb25maWcgPSBsZWZ0O1xyXG5cclxuICAgICAgICAgICAgLy8gIElmIHRoZXkgc3BlY2lmeSB4IGFuZC9vciB5IHRoaXMgYXBwbGllcyB0byBhbGxcclxuICAgICAgICAgICAgdmFyIHggPSBHZXRWYWx1ZShjb25maWcsICd4JywgbnVsbCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoeCAhPT0gbnVsbClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGVmdCA9IHg7XHJcbiAgICAgICAgICAgICAgICByaWdodCA9IHg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0ID0gR2V0VmFsdWUoY29uZmlnLCAnbGVmdCcsIDApO1xyXG4gICAgICAgICAgICAgICAgcmlnaHQgPSBHZXRWYWx1ZShjb25maWcsICdyaWdodCcsIGxlZnQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgeSA9IEdldFZhbHVlKGNvbmZpZywgJ3knLCBudWxsKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh5ICE9PSBudWxsKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0b3AgPSB5O1xyXG4gICAgICAgICAgICAgICAgYm90dG9tID0geTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRvcCA9IEdldFZhbHVlKGNvbmZpZywgJ3RvcCcsIDApO1xyXG4gICAgICAgICAgICAgICAgYm90dG9tID0gR2V0VmFsdWUoY29uZmlnLCAnYm90dG9tJywgdG9wKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAobGVmdCA9PT0gdW5kZWZpbmVkKSB7IGxlZnQgPSAwOyB9XHJcbiAgICAgICAgICAgIGlmICh0b3AgPT09IHVuZGVmaW5lZCkgeyB0b3AgPSBsZWZ0OyB9XHJcbiAgICAgICAgICAgIGlmIChyaWdodCA9PT0gdW5kZWZpbmVkKSB7IHJpZ2h0ID0gbGVmdDsgfVxyXG4gICAgICAgICAgICBpZiAoYm90dG9tID09PSB1bmRlZmluZWQpIHsgYm90dG9tID0gdG9wOyB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBhZGRpbmcubGVmdCA9IGxlZnQ7XHJcbiAgICAgICAgdGhpcy5wYWRkaW5nLnRvcCA9IHRvcDtcclxuICAgICAgICB0aGlzLnBhZGRpbmcucmlnaHQgPSByaWdodDtcclxuICAgICAgICB0aGlzLnBhZGRpbmcuYm90dG9tID0gYm90dG9tO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVUZXh0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0byBkcmF3LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjc2V0TWF4TGluZXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW21heD0wXSAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0byBkcmF3LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBUaGlzIFRleHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRNYXhMaW5lczogZnVuY3Rpb24gKG1heClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5zZXRNYXhMaW5lcyhtYXgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB0aGUgZGlzcGxheWVkIHRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCN1cGRhdGVUZXh0XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gVGhpcyBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlVGV4dDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgY2FudmFzID0gdGhpcy5jYW52YXM7XHJcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XHJcbiAgICAgICAgdmFyIHN0eWxlID0gdGhpcy5zdHlsZTtcclxuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IHN0eWxlLnJlc29sdXRpb247XHJcbiAgICAgICAgdmFyIHNpemUgPSBzdHlsZS5tZXRyaWNzO1xyXG5cclxuICAgICAgICBzdHlsZS5zeW5jRm9udChjYW52YXMsIGNvbnRleHQpO1xyXG5cclxuICAgICAgICB2YXIgb3V0cHV0VGV4dCA9IHRoaXMuX3RleHQ7XHJcblxyXG4gICAgICAgIGlmIChzdHlsZS53b3JkV3JhcFdpZHRoIHx8IHN0eWxlLndvcmRXcmFwQ2FsbGJhY2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvdXRwdXRUZXh0ID0gdGhpcy5ydW5Xb3JkV3JhcCh0aGlzLl90ZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBTcGxpdCB0ZXh0IGludG8gbGluZXNcclxuICAgICAgICB2YXIgbGluZXMgPSBvdXRwdXRUZXh0LnNwbGl0KHRoaXMuc3BsaXRSZWdFeHApO1xyXG5cclxuICAgICAgICB2YXIgdGV4dFNpemUgPSBHZXRUZXh0U2l6ZSh0aGlzLCBzaXplLCBsaW5lcyk7XHJcblxyXG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5wYWRkaW5nO1xyXG5cclxuICAgICAgICB2YXIgdGV4dFdpZHRoO1xyXG5cclxuICAgICAgICBpZiAoc3R5bGUuZml4ZWRXaWR0aCA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMud2lkdGggPSB0ZXh0U2l6ZS53aWR0aCArIHBhZGRpbmcubGVmdCArIHBhZGRpbmcucmlnaHQ7XHJcblxyXG4gICAgICAgICAgICB0ZXh0V2lkdGggPSB0ZXh0U2l6ZS53aWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IHN0eWxlLmZpeGVkV2lkdGg7XHJcblxyXG4gICAgICAgICAgICB0ZXh0V2lkdGggPSB0aGlzLndpZHRoIC0gcGFkZGluZy5sZWZ0IC0gcGFkZGluZy5yaWdodDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0ZXh0V2lkdGggPCB0ZXh0U2l6ZS53aWR0aClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGV4dFdpZHRoID0gdGV4dFNpemUud2lkdGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdHlsZS5maXhlZEhlaWdodCA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGV4dFNpemUuaGVpZ2h0ICsgcGFkZGluZy50b3AgKyBwYWRkaW5nLmJvdHRvbTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBzdHlsZS5maXhlZEhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB3ID0gdGhpcy53aWR0aDtcclxuICAgICAgICB2YXIgaCA9IHRoaXMuaGVpZ2h0O1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXlPcmlnaW4oKTtcclxuXHJcbiAgICAgICAgdyAqPSByZXNvbHV0aW9uO1xyXG4gICAgICAgIGggKj0gcmVzb2x1dGlvbjtcclxuXHJcbiAgICAgICAgdyA9IE1hdGgubWF4KHcsIDEpO1xyXG4gICAgICAgIGggPSBNYXRoLm1heChoLCAxKTtcclxuXHJcbiAgICAgICAgaWYgKGNhbnZhcy53aWR0aCAhPT0gdyB8fCBjYW52YXMuaGVpZ2h0ICE9PSBoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2FudmFzLndpZHRoID0gdztcclxuICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IGg7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLnNldFNpemUodywgaCk7XHJcblxyXG4gICAgICAgICAgICAvLyAgQmVjYXVzZSByZXNpemluZyB0aGUgY2FudmFzIHJlc2V0cyB0aGUgY29udGV4dFxyXG4gICAgICAgICAgICBzdHlsZS5zeW5jRm9udChjYW52YXMsIGNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnRleHQuc2F2ZSgpO1xyXG5cclxuICAgICAgICBjb250ZXh0LnNjYWxlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xyXG5cclxuICAgICAgICBpZiAoc3R5bGUuYmFja2dyb3VuZENvbG9yKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBzdHlsZS5iYWNrZ3JvdW5kQ29sb3I7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdywgaCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdHlsZS5zeW5jU3R5bGUoY2FudmFzLCBjb250ZXh0KTtcclxuXHJcbiAgICAgICAgY29udGV4dC50ZXh0QmFzZWxpbmUgPSAnYWxwaGFiZXRpYyc7XHJcblxyXG4gICAgICAgIC8vICBBcHBseSBwYWRkaW5nXHJcbiAgICAgICAgY29udGV4dC50cmFuc2xhdGUocGFkZGluZy5sZWZ0LCBwYWRkaW5nLnRvcCk7XHJcblxyXG4gICAgICAgIHZhciBsaW5lUG9zaXRpb25YO1xyXG4gICAgICAgIHZhciBsaW5lUG9zaXRpb25ZO1xyXG5cclxuICAgICAgICAvLyAgRHJhdyB0ZXh0IGxpbmUgYnkgbGluZVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dFNpemUubGluZXM7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggPSBzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyO1xyXG4gICAgICAgICAgICBsaW5lUG9zaXRpb25ZID0gKHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDIgKyBpICogdGV4dFNpemUubGluZUhlaWdodCkgKyBzaXplLmFzY2VudDtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID4gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWSArPSAodGV4dFNpemUubGluZVNwYWNpbmcgKiBpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHN0eWxlLnJ0bClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWCA9IHcgLSBsaW5lUG9zaXRpb25YO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IHRleHRXaWR0aCAtIHRleHRTaXplLmxpbmVXaWR0aHNbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGUuYWxpZ24gPT09ICdjZW50ZXInKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9ICh0ZXh0V2lkdGggLSB0ZXh0U2l6ZS5saW5lV2lkdGhzW2ldKSAvIDI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGUuYWxpZ24gPT09ICdqdXN0aWZ5JylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIFRvIGp1c3RpZnkgdGV4dCBsaW5lIGl0cyB3aWR0aCBtdXN0IGJlIG5vIGxlc3MgdGhhbiA4NSUgb2YgZGVmaW5lZCB3aWR0aFxyXG4gICAgICAgICAgICAgICAgdmFyIG1pbmltdW1MZW5ndGhUb0FwcGx5SnVzdGlmaWNhdGlvbiA9IDAuODU7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRleHRTaXplLmxpbmVXaWR0aHNbaV0gLyB0ZXh0U2l6ZS53aWR0aCA+PSBtaW5pbXVtTGVuZ3RoVG9BcHBseUp1c3RpZmljYXRpb24pXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGV4dHJhU3BhY2UgPSB0ZXh0U2l6ZS53aWR0aCAtIHRleHRTaXplLmxpbmVXaWR0aHNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNwYWNlU2l6ZSA9IGNvbnRleHQubWVhc3VyZVRleHQoJyAnKS53aWR0aDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdHJpbW1lZExpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gdHJpbW1lZExpbmUuc3BsaXQoJyAnKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFTcGFjZSArPSAobGluZXNbaV0ubGVuZ3RoIC0gdHJpbW1lZExpbmUubGVuZ3RoKSAqIHNwYWNlU2l6ZTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGV4dHJhU3BhY2VDaGFyYWN0ZXJzID0gTWF0aC5mbG9vcihleHRyYVNwYWNlIC8gc3BhY2VTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaWR4ID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGV4dHJhU3BhY2VDaGFyYWN0ZXJzID4gMClcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2lkeF0gKz0gJyAnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZHggPSAoaWR4ICsgMSkgJSAoYXJyYXkubGVuZ3RoIC0gMSB8fCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLS1leHRyYVNwYWNlQ2hhcmFjdGVycztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGxpbmVzW2ldID0gYXJyYXkuam9pbignICcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvUm91bmQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggPSBNYXRoLnJvdW5kKGxpbmVQb3NpdGlvblgpO1xyXG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWSA9IE1hdGgucm91bmQobGluZVBvc2l0aW9uWSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzdHlsZS5zdHJva2VUaGlja25lc3MpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3R5bGUuc3luY1NoYWRvdyhjb250ZXh0LCBzdHlsZS5zaGFkb3dTdHJva2UpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCwgbGluZVBvc2l0aW9uWSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzdHlsZS5jb2xvcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5zeW5jU2hhZG93KGNvbnRleHQsIHN0eWxlLnNoYWRvd0ZpbGwpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblgsIGxpbmVQb3NpdGlvblkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVuZGVyZXIuZ2wpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLnNvdXJjZS5nbFRleHR1cmUgPSB0aGlzLnJlbmRlcmVyLmNhbnZhc1RvVGV4dHVyZShjYW52YXMsIHRoaXMuZnJhbWUuc291cmNlLmdsVGV4dHVyZSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmdsVGV4dHVyZSA9IHRoaXMuZnJhbWUuc291cmNlLmdsVGV4dHVyZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLmlucHV0O1xyXG5cclxuICAgICAgICBpZiAoaW5wdXQgJiYgIWlucHV0LmN1c3RvbUhpdEFyZWEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpbnB1dC5oaXRBcmVhLndpZHRoID0gdGhpcy53aWR0aDtcclxuICAgICAgICAgICAgaW5wdXQuaGl0QXJlYS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgY3VycmVudCB0ZXh0IG1ldHJpY3MuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNnZXRUZXh0TWV0cmljc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7b2JqZWN0fSBUaGUgdGV4dCBtZXRyaWNzLlxyXG4gICAgICovXHJcbiAgICBnZXRUZXh0TWV0cmljczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5nZXRUZXh0TWV0cmljcygpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0ZXh0IHN0cmluZyBiZWluZyByZW5kZXJlZCBieSB0aGlzIFRleHQgR2FtZSBPYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjdGV4dFxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB0ZXh0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRUZXh0KHZhbHVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgVGV4dCBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCN0b0pTT05cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UeXBlcy5HYW1lT2JqZWN0cy5KU09OR2FtZU9iamVjdH0gQSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBUZXh0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgdG9KU09OOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBvdXQgPSBDb21wb25lbnRzLlRvSlNPTih0aGlzKTtcclxuXHJcbiAgICAgICAgLy8gIEV4dHJhIFRleHQgZGF0YSBpcyBhZGRlZCBoZXJlXHJcblxyXG4gICAgICAgIHZhciBkYXRhID0ge1xyXG4gICAgICAgICAgICBhdXRvUm91bmQ6IHRoaXMuYXV0b1JvdW5kLFxyXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLl90ZXh0LFxyXG4gICAgICAgICAgICBzdHlsZTogdGhpcy5zdHlsZS50b0pTT04oKSxcclxuICAgICAgICAgICAgcGFkZGluZzoge1xyXG4gICAgICAgICAgICAgICAgbGVmdDogdGhpcy5wYWRkaW5nLmxlZnQsXHJcbiAgICAgICAgICAgICAgICByaWdodDogdGhpcy5wYWRkaW5nLnJpZ2h0LFxyXG4gICAgICAgICAgICAgICAgdG9wOiB0aGlzLnBhZGRpbmcudG9wLFxyXG4gICAgICAgICAgICAgICAgYm90dG9tOiB0aGlzLnBhZGRpbmcuYm90dG9tXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBvdXQuZGF0YSA9IGRhdGE7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgZGVzdHJveSBoYW5kbGVyLCBjYWxsZWQgYXMgcGFydCBvZiB0aGUgZGVzdHJveSBwcm9jZXNzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRleHQjcHJlRGVzdHJveVxyXG4gICAgICogQHByb3RlY3RlZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHByZURlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3R5bGUucnRsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgUmVtb3ZlRnJvbURPTSh0aGlzLmNhbnZhcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBDYW52YXNQb29sLnJlbW92ZSh0aGlzLmNhbnZhcyk7XHJcblxyXG4gICAgICAgIHRoaXMudGV4dHVyZS5kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaG9yaXpvbnRhbCBvcmlnaW4gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFRoZSBvcmlnaW4gbWFwcyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHNpemUgYW5kIHBvc2l0aW9uIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDAuNSwgbWVhbmluZyBhbGwgR2FtZSBPYmplY3RzIGFyZSBwb3NpdGlvbmVkIGJhc2VkIG9uIHRoZWlyIGNlbnRlci5cclxuICAgICAqIFNldHRpbmcgdGhlIHZhbHVlIHRvIDAgbWVhbnMgdGhlIHBvc2l0aW9uIG5vdyByZWxhdGVzIHRvIHRoZSBsZWZ0IG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNvcmlnaW5YXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGRlZmF1bHQgMFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2ZXJ0aWNhbCBvcmlnaW4gb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIFRoZSBvcmlnaW4gbWFwcyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHNpemUgYW5kIHBvc2l0aW9uIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDAuNSwgbWVhbmluZyBhbGwgR2FtZSBPYmplY3RzIGFyZSBwb3NpdGlvbmVkIGJhc2VkIG9uIHRoZWlyIGNlbnRlci5cclxuICAgICAqIFNldHRpbmcgdGhlIHZhbHVlIHRvIDAgbWVhbnMgdGhlIHBvc2l0aW9uIG5vdyByZWxhdGVzIHRvIHRoZSB0b3Agb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I29yaWdpbllcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRleHQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/text/static/Text.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/text/static/TextCanvasRenderer.js":
/*!*******************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/text/static/TextCanvasRenderer.js ***!
\*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Text#renderCanvas\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Text} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar TextCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n if ((src.width === 0) || (src.height === 0))\r\n {\r\n return;\r\n }\r\n\r\n renderer.batchSprite(src, src.frame, camera, parentMatrix);\r\n};\r\n\r\nmodule.exports = TextCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L3N0YXRpYy9UZXh0Q2FudmFzUmVuZGVyZXIuanM/NzVlNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVyx3QkFBd0I7QUFDbkMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L3N0YXRpYy9UZXh0Q2FudmFzUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgQ2FudmFzIFJlbmRlcmVyIHRvIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAqIFRoZSBvYmplY3Qgd2lsbCBub3QgcmVuZGVyIGlmIGFueSBvZiBpdHMgcmVuZGVyRmxhZ3MgYXJlIHNldCBvciBpdCBpcyBiZWluZyBhY3RpdmVseSBmaWx0ZXJlZCBvdXQgYnkgdGhlIENhbWVyYS5cclxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEl0IGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBvZiB0aGUgUmVuZGVyIG1vZHVsZS5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGV4dCNyZW5kZXJDYW52YXNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcn0gcmVuZGVyZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhY3RpdmUgQ2FudmFzIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5UZXh0fSBzcmMgLSBUaGUgR2FtZSBPYmplY3QgYmVpbmcgcmVuZGVyZWQgaW4gdGhpcyBjYWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJwb2xhdGlvblBlcmNlbnRhZ2UgLSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgY3VzdG9tIHBpcGVsaW5lcy5cclxuICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB0aGF0IGlzIHJlbmRlcmluZyB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuVHJhbnNmb3JtTWF0cml4fSBwYXJlbnRNYXRyaXggLSBUaGlzIHRyYW5zZm9ybSBtYXRyaXggaXMgZGVmaW5lZCBpZiB0aGUgZ2FtZSBvYmplY3QgaXMgbmVzdGVkXHJcbiAqL1xyXG52YXIgVGV4dENhbnZhc1JlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgaWYgKChzcmMud2lkdGggPT09IDApIHx8IChzcmMuaGVpZ2h0ID09PSAwKSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyZXIuYmF0Y2hTcHJpdGUoc3JjLCBzcmMuZnJhbWUsIGNhbWVyYSwgcGFyZW50TWF0cml4KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVGV4dENhbnZhc1JlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/text/static/TextCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/text/static/TextCreator.js":
/*!************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/text/static/TextCreator.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BuildGameObject = __webpack_require__(/*! ../../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar Text = __webpack_require__(/*! ./Text */ \"./node_modules/phaser/src/gameobjects/text/static/Text.js\");\r\n\r\n/**\r\n * Creates a new Text Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Text Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#text\r\n * @since 3.0.0\r\n *\r\n * @param {object} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.Text} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('text', function (config, addToScene)\r\n{\r\n if (config === undefined) { config = {}; }\r\n\r\n // style Object = {\r\n // font: [ 'font', '16px Courier' ],\r\n // backgroundColor: [ 'backgroundColor', null ],\r\n // fill: [ 'fill', '#fff' ],\r\n // stroke: [ 'stroke', '#fff' ],\r\n // strokeThickness: [ 'strokeThickness', 0 ],\r\n // shadowOffsetX: [ 'shadow.offsetX', 0 ],\r\n // shadowOffsetY: [ 'shadow.offsetY', 0 ],\r\n // shadowColor: [ 'shadow.color', '#000' ],\r\n // shadowBlur: [ 'shadow.blur', 0 ],\r\n // shadowStroke: [ 'shadow.stroke', false ],\r\n // shadowFill: [ 'shadow.fill', false ],\r\n // align: [ 'align', 'left' ],\r\n // maxLines: [ 'maxLines', 0 ],\r\n // fixedWidth: [ 'fixedWidth', false ],\r\n // fixedHeight: [ 'fixedHeight', false ],\r\n // rtl: [ 'rtl', false ]\r\n // }\r\n\r\n var content = GetAdvancedValue(config, 'text', '');\r\n var style = GetAdvancedValue(config, 'style', null);\r\n\r\n // Padding\r\n // { padding: 2 }\r\n // { padding: { x: , y: }}\r\n // { padding: { left: , top: }}\r\n // { padding: { left: , right: , top: , bottom: }}\r\n\r\n var padding = GetAdvancedValue(config, 'padding', null);\r\n\r\n if (padding !== null)\r\n {\r\n style.padding = padding;\r\n }\r\n\r\n var text = new Text(this.scene, 0, 0, content, style);\r\n\r\n if (addToScene !== undefined)\r\n {\r\n config.add = addToScene;\r\n }\r\n\r\n BuildGameObject(this.scene, text, config);\r\n\r\n // Text specific config options:\r\n\r\n text.autoRound = GetAdvancedValue(config, 'autoRound', true);\r\n text.resolution = GetAdvancedValue(config, 'resolution', 1);\r\n\r\n return text;\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectCreator context.\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L3N0YXRpYy9UZXh0Q3JlYXRvci5qcz8yNDdkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQyx1RkFBdUI7QUFDckQsd0JBQXdCLG1CQUFPLENBQUMsMkZBQXlCO0FBQ3pELHVCQUF1QixtQkFBTyxDQUFDLDBHQUF3QztBQUN2RSxXQUFXLG1CQUFPLENBQUMseUVBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSx3QkFBd0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGFBQWE7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsYUFBYTtBQUNiLGFBQWEsV0FBVztBQUN4QixhQUFhLFdBQVc7QUFDeEIsYUFBYSxXQUFXOztBQUV4Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3RleHQvc3RhdGljL1RleHRDcmVhdG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQnVpbGRHYW1lT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vQnVpbGRHYW1lT2JqZWN0Jyk7XHJcbnZhciBHYW1lT2JqZWN0Q3JlYXRvciA9IHJlcXVpcmUoJy4uLy4uL0dhbWVPYmplY3RDcmVhdG9yJyk7XHJcbnZhciBHZXRBZHZhbmNlZFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvb2JqZWN0L0dldEFkdmFuY2VkVmFsdWUnKTtcclxudmFyIFRleHQgPSByZXF1aXJlKCcuL1RleHQnKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFRleHQgR2FtZSBPYmplY3QgYW5kIHJldHVybnMgaXQuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFRleHQgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI3RleHRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byBjcmVhdGUgaXRzZWxmLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthZGRUb1NjZW5lXSAtIEFkZCB0aGlzIEdhbWUgT2JqZWN0IHRvIHRoZSBTY2VuZSBhZnRlciBjcmVhdGluZyBpdD8gSWYgc2V0IHRoaXMgYXJndW1lbnQgb3ZlcnJpZGVzIHRoZSBgYWRkYCBwcm9wZXJ0eSBpbiB0aGUgY29uZmlnIG9iamVjdC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdENyZWF0b3IucmVnaXN0ZXIoJ3RleHQnLCBmdW5jdGlvbiAoY29uZmlnLCBhZGRUb1NjZW5lKVxyXG57XHJcbiAgICBpZiAoY29uZmlnID09PSB1bmRlZmluZWQpIHsgY29uZmlnID0ge307IH1cclxuXHJcbiAgICAvLyBzdHlsZSBPYmplY3QgPSB7XHJcbiAgICAvLyAgICAgZm9udDogWyAnZm9udCcsICcxNnB4IENvdXJpZXInIF0sXHJcbiAgICAvLyAgICAgYmFja2dyb3VuZENvbG9yOiBbICdiYWNrZ3JvdW5kQ29sb3InLCBudWxsIF0sXHJcbiAgICAvLyAgICAgZmlsbDogWyAnZmlsbCcsICcjZmZmJyBdLFxyXG4gICAgLy8gICAgIHN0cm9rZTogWyAnc3Ryb2tlJywgJyNmZmYnIF0sXHJcbiAgICAvLyAgICAgc3Ryb2tlVGhpY2tuZXNzOiBbICdzdHJva2VUaGlja25lc3MnLCAwIF0sXHJcbiAgICAvLyAgICAgc2hhZG93T2Zmc2V0WDogWyAnc2hhZG93Lm9mZnNldFgnLCAwIF0sXHJcbiAgICAvLyAgICAgc2hhZG93T2Zmc2V0WTogWyAnc2hhZG93Lm9mZnNldFknLCAwIF0sXHJcbiAgICAvLyAgICAgc2hhZG93Q29sb3I6IFsgJ3NoYWRvdy5jb2xvcicsICcjMDAwJyBdLFxyXG4gICAgLy8gICAgIHNoYWRvd0JsdXI6IFsgJ3NoYWRvdy5ibHVyJywgMCBdLFxyXG4gICAgLy8gICAgIHNoYWRvd1N0cm9rZTogWyAnc2hhZG93LnN0cm9rZScsIGZhbHNlIF0sXHJcbiAgICAvLyAgICAgc2hhZG93RmlsbDogWyAnc2hhZG93LmZpbGwnLCBmYWxzZSBdLFxyXG4gICAgLy8gICAgIGFsaWduOiBbICdhbGlnbicsICdsZWZ0JyBdLFxyXG4gICAgLy8gICAgIG1heExpbmVzOiBbICdtYXhMaW5lcycsIDAgXSxcclxuICAgIC8vICAgICBmaXhlZFdpZHRoOiBbICdmaXhlZFdpZHRoJywgZmFsc2UgXSxcclxuICAgIC8vICAgICBmaXhlZEhlaWdodDogWyAnZml4ZWRIZWlnaHQnLCBmYWxzZSBdLFxyXG4gICAgLy8gICAgIHJ0bDogWyAncnRsJywgZmFsc2UgXVxyXG4gICAgLy8gfVxyXG5cclxuICAgIHZhciBjb250ZW50ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICd0ZXh0JywgJycpO1xyXG4gICAgdmFyIHN0eWxlID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdzdHlsZScsIG51bGwpO1xyXG5cclxuICAgIC8vICBQYWRkaW5nXHJcbiAgICAvLyAgICAgIHsgcGFkZGluZzogMiB9XHJcbiAgICAvLyAgICAgIHsgcGFkZGluZzogeyB4OiAsIHk6IH19XHJcbiAgICAvLyAgICAgIHsgcGFkZGluZzogeyBsZWZ0OiAsIHRvcDogfX1cclxuICAgIC8vICAgICAgeyBwYWRkaW5nOiB7IGxlZnQ6ICwgcmlnaHQ6ICwgdG9wOiAsIGJvdHRvbTogfX1cclxuXHJcbiAgICB2YXIgcGFkZGluZyA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAncGFkZGluZycsIG51bGwpO1xyXG5cclxuICAgIGlmIChwYWRkaW5nICE9PSBudWxsKVxyXG4gICAge1xyXG4gICAgICAgIHN0eWxlLnBhZGRpbmcgPSBwYWRkaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciB0ZXh0ID0gbmV3IFRleHQodGhpcy5zY2VuZSwgMCwgMCwgY29udGVudCwgc3R5bGUpO1xyXG5cclxuICAgIGlmIChhZGRUb1NjZW5lICE9PSB1bmRlZmluZWQpXHJcbiAgICB7XHJcbiAgICAgICAgY29uZmlnLmFkZCA9IGFkZFRvU2NlbmU7XHJcbiAgICB9XHJcblxyXG4gICAgQnVpbGRHYW1lT2JqZWN0KHRoaXMuc2NlbmUsIHRleHQsIGNvbmZpZyk7XHJcblxyXG4gICAgLy8gIFRleHQgc3BlY2lmaWMgY29uZmlnIG9wdGlvbnM6XHJcblxyXG4gICAgdGV4dC5hdXRvUm91bmQgPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ2F1dG9Sb3VuZCcsIHRydWUpO1xyXG4gICAgdGV4dC5yZXNvbHV0aW9uID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdyZXNvbHV0aW9uJywgMSk7XHJcblxyXG4gICAgcmV0dXJuIHRleHQ7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RDcmVhdG9yIGNvbnRleHQuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/text/static/TextCreator.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/text/static/TextFactory.js":
/*!************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/text/static/TextFactory.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Text = __webpack_require__(/*! ./Text */ \"./node_modules/phaser/src/gameobjects/text/static/Text.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Text Game Object and adds it to the Scene.\r\n * \r\n * A Text Game Object.\r\n * \r\n * Text objects work by creating their own internal hidden Canvas and then renders text to it using\r\n * the standard Canvas `fillText` API. It then creates a texture from this canvas which is rendered\r\n * to your game during the render pass.\r\n * \r\n * Because it uses the Canvas API you can take advantage of all the features this offers, such as\r\n * applying gradient fills to the text, or strokes, shadows and more. You can also use custom fonts\r\n * loaded externally, such as Google or TypeKit Web fonts.\r\n *\r\n * You can only display fonts that are currently loaded and available to the browser: therefore fonts must\r\n * be pre-loaded. Phaser does not do ths for you, so you will require the use of a 3rd party font loader,\r\n * or have the fonts ready available in the CSS on the page in which your Phaser game resides.\r\n *\r\n * See {@link http://www.jordanm.co.uk/tinytype this compatibility table} for the available default fonts\r\n * across mobile browsers.\r\n * \r\n * A note on performance: Every time the contents of a Text object changes, i.e. changing the text being\r\n * displayed, or the style of the text, it needs to remake the Text canvas, and if on WebGL, re-upload the\r\n * new texture to the GPU. This can be an expensive operation if used often, or with large quantities of\r\n * Text objects in your game. If you run into performance issues you would be better off using Bitmap Text\r\n * instead, as it benefits from batching and avoids expensive Canvas API calls.\r\n *\r\n * Note: This method will only be available if the Text Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#text\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {(string|string[])} text - The text this Text object will display.\r\n * @param {object} [style] - The Text style configuration object.\r\n *\r\n * @return {Phaser.GameObjects.Text} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('text', function (x, y, text, style)\r\n{\r\n return this.displayList.add(new Text(this.scene, x, y, text, style));\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n// There are several properties available to use:\r\n//\r\n// this.scene - a reference to the Scene that owns the GameObjectFactory\r\n// this.displayList - a reference to the Display List the Scene owns\r\n// this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L3N0YXRpYy9UZXh0RmFjdG9yeS5qcz9mOTg4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxXQUFXLG1CQUFPLENBQUMseUVBQVE7QUFDM0Isd0JBQXdCLG1CQUFPLENBQUMsMkZBQXlCOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxpRUFBaUU7QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsa0JBQWtCO0FBQzdCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksd0JBQXdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3RleHQvc3RhdGljL1RleHRGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgVGV4dCA9IHJlcXVpcmUoJy4vVGV4dCcpO1xyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgVGV4dCBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqIFxyXG4gKiBBIFRleHQgR2FtZSBPYmplY3QuXHJcbiAqIFxyXG4gKiBUZXh0IG9iamVjdHMgd29yayBieSBjcmVhdGluZyB0aGVpciBvd24gaW50ZXJuYWwgaGlkZGVuIENhbnZhcyBhbmQgdGhlbiByZW5kZXJzIHRleHQgdG8gaXQgdXNpbmdcclxuICogdGhlIHN0YW5kYXJkIENhbnZhcyBgZmlsbFRleHRgIEFQSS4gSXQgdGhlbiBjcmVhdGVzIGEgdGV4dHVyZSBmcm9tIHRoaXMgY2FudmFzIHdoaWNoIGlzIHJlbmRlcmVkXHJcbiAqIHRvIHlvdXIgZ2FtZSBkdXJpbmcgdGhlIHJlbmRlciBwYXNzLlxyXG4gKiBcclxuICogQmVjYXVzZSBpdCB1c2VzIHRoZSBDYW52YXMgQVBJIHlvdSBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgYWxsIHRoZSBmZWF0dXJlcyB0aGlzIG9mZmVycywgc3VjaCBhc1xyXG4gKiBhcHBseWluZyBncmFkaWVudCBmaWxscyB0byB0aGUgdGV4dCwgb3Igc3Ryb2tlcywgc2hhZG93cyBhbmQgbW9yZS4gWW91IGNhbiBhbHNvIHVzZSBjdXN0b20gZm9udHNcclxuICogbG9hZGVkIGV4dGVybmFsbHksIHN1Y2ggYXMgR29vZ2xlIG9yIFR5cGVLaXQgV2ViIGZvbnRzLlxyXG4gKlxyXG4gKiBZb3UgY2FuIG9ubHkgZGlzcGxheSBmb250cyB0aGF0IGFyZSBjdXJyZW50bHkgbG9hZGVkIGFuZCBhdmFpbGFibGUgdG8gdGhlIGJyb3dzZXI6IHRoZXJlZm9yZSBmb250cyBtdXN0XHJcbiAqIGJlIHByZS1sb2FkZWQuIFBoYXNlciBkb2VzIG5vdCBkbyB0aHMgZm9yIHlvdSwgc28geW91IHdpbGwgcmVxdWlyZSB0aGUgdXNlIG9mIGEgM3JkIHBhcnR5IGZvbnQgbG9hZGVyLFxyXG4gKiBvciBoYXZlIHRoZSBmb250cyByZWFkeSBhdmFpbGFibGUgaW4gdGhlIENTUyBvbiB0aGUgcGFnZSBpbiB3aGljaCB5b3VyIFBoYXNlciBnYW1lIHJlc2lkZXMuXHJcbiAqXHJcbiAqIFNlZSB7QGxpbmsgaHR0cDovL3d3dy5qb3JkYW5tLmNvLnVrL3Rpbnl0eXBlIHRoaXMgY29tcGF0aWJpbGl0eSB0YWJsZX0gZm9yIHRoZSBhdmFpbGFibGUgZGVmYXVsdCBmb250c1xyXG4gKiBhY3Jvc3MgbW9iaWxlIGJyb3dzZXJzLlxyXG4gKiBcclxuICogQSBub3RlIG9uIHBlcmZvcm1hbmNlOiBFdmVyeSB0aW1lIHRoZSBjb250ZW50cyBvZiBhIFRleHQgb2JqZWN0IGNoYW5nZXMsIGkuZS4gY2hhbmdpbmcgdGhlIHRleHQgYmVpbmdcclxuICogZGlzcGxheWVkLCBvciB0aGUgc3R5bGUgb2YgdGhlIHRleHQsIGl0IG5lZWRzIHRvIHJlbWFrZSB0aGUgVGV4dCBjYW52YXMsIGFuZCBpZiBvbiBXZWJHTCwgcmUtdXBsb2FkIHRoZVxyXG4gKiBuZXcgdGV4dHVyZSB0byB0aGUgR1BVLiBUaGlzIGNhbiBiZSBhbiBleHBlbnNpdmUgb3BlcmF0aW9uIGlmIHVzZWQgb2Z0ZW4sIG9yIHdpdGggbGFyZ2UgcXVhbnRpdGllcyBvZlxyXG4gKiBUZXh0IG9iamVjdHMgaW4geW91ciBnYW1lLiBJZiB5b3UgcnVuIGludG8gcGVyZm9ybWFuY2UgaXNzdWVzIHlvdSB3b3VsZCBiZSBiZXR0ZXIgb2ZmIHVzaW5nIEJpdG1hcCBUZXh0XHJcbiAqIGluc3RlYWQsIGFzIGl0IGJlbmVmaXRzIGZyb20gYmF0Y2hpbmcgYW5kIGF2b2lkcyBleHBlbnNpdmUgQ2FudmFzIEFQSSBjYWxscy5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgVGV4dCBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdEZhY3RvcnkjdGV4dFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xzdHJpbmdbXSl9IHRleHQgLSBUaGUgdGV4dCB0aGlzIFRleHQgb2JqZWN0IHdpbGwgZGlzcGxheS5cclxuICogQHBhcmFtIHtvYmplY3R9IFtzdHlsZV0gLSBUaGUgVGV4dCBzdHlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdhbWVPYmplY3RzLlRleHR9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdEZhY3RvcnkucmVnaXN0ZXIoJ3RleHQnLCBmdW5jdGlvbiAoeCwgeSwgdGV4dCwgc3R5bGUpXHJcbntcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXlMaXN0LmFkZChuZXcgVGV4dCh0aGlzLnNjZW5lLCB4LCB5LCB0ZXh0LCBzdHlsZSkpO1xyXG59KTtcclxuXHJcbi8vICBXaGVuIHJlZ2lzdGVyaW5nIGEgZmFjdG9yeSBmdW5jdGlvbiAndGhpcycgcmVmZXJzIHRvIHRoZSBHYW1lT2JqZWN0RmFjdG9yeSBjb250ZXh0LlxyXG4vL1xyXG4vLyAgVGhlcmUgYXJlIHNldmVyYWwgcHJvcGVydGllcyBhdmFpbGFibGUgdG8gdXNlOlxyXG4vL1xyXG4vLyAgdGhpcy5zY2VuZSAtIGEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSB0aGF0IG93bnMgdGhlIEdhbWVPYmplY3RGYWN0b3J5XHJcbi8vICB0aGlzLmRpc3BsYXlMaXN0IC0gYSByZWZlcmVuY2UgdG8gdGhlIERpc3BsYXkgTGlzdCB0aGUgU2NlbmUgb3duc1xyXG4vLyAgdGhpcy51cGRhdGVMaXN0IC0gYSByZWZlcmVuY2UgdG8gdGhlIFVwZGF0ZSBMaXN0IHRoZSBTY2VuZSBvd25zXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/text/static/TextFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/text/static/TextRender.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/text/static/TextRender.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./TextWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/text/static/TextWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./TextCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/text/static/TextCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L3N0YXRpYy9UZXh0UmVuZGVyLmpzP2Q5MzQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLG9FQUFxQjtBQUMvQyxtQkFBbUIsbUJBQU8sQ0FBQyxvRUFBcUI7O0FBRWhELElBQUksSUFBcUI7QUFDekI7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxtR0FBcUI7QUFDL0M7O0FBRUEsSUFBSSxJQUFzQjtBQUMxQjtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLHFHQUFzQjtBQUNqRDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvdGV4dC9zdGF0aWMvVGV4dFJlbmRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG52YXIgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG5cclxuaWYgKHR5cGVvZiBXRUJHTF9SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuL1RleHRXZWJHTFJlbmRlcmVyJyk7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgQ0FOVkFTX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuL1RleHRDYW52YXNSZW5kZXJlcicpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICByZW5kZXJXZWJHTDogcmVuZGVyV2ViR0wsXHJcbiAgICByZW5kZXJDYW52YXM6IHJlbmRlckNhbnZhc1xyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/text/static/TextRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/text/static/TextWebGLRenderer.js":
/*!******************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/text/static/TextWebGLRenderer.js ***!
\******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Text#renderWebGL\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Text} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar TextWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n if ((src.width === 0) || (src.height === 0))\r\n {\r\n return;\r\n }\r\n\r\n var frame = src.frame;\r\n var width = frame.width;\r\n var height = frame.height;\r\n var getTint = Utils.getTintAppendFloatAlpha;\r\n\r\n this.pipeline.batchTexture(\r\n src,\r\n frame.glTexture,\r\n width, height,\r\n src.x, src.y,\r\n width / src.style.resolution, height / src.style.resolution,\r\n src.scaleX, src.scaleY,\r\n src.rotation,\r\n src.flipX, src.flipY,\r\n src.scrollFactorX, src.scrollFactorY,\r\n src.displayOriginX, src.displayOriginY,\r\n 0, 0, width, height,\r\n getTint(src._tintTL, camera.alpha * src._alphaTL),\r\n getTint(src._tintTR, camera.alpha * src._alphaTR),\r\n getTint(src._tintBL, camera.alpha * src._alphaBL),\r\n getTint(src._tintBR, camera.alpha * src._alphaBR),\r\n (src._isTinted && src.tintFill),\r\n 0, 0,\r\n camera,\r\n parentMatrix\r\n );\r\n};\r\n\r\nmodule.exports = TextWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L3N0YXRpYy9UZXh0V2ViR0xSZW5kZXJlci5qcz9kNjE5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsd0ZBQStCOztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9DQUFvQztBQUMvQyxXQUFXLHdCQUF3QjtBQUNuQyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90ZXh0L3N0YXRpYy9UZXh0V2ViR0xSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vcmVuZGVyZXIvd2ViZ2wvVXRpbHMnKTtcclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UZXh0I3JlbmRlcldlYkdMXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBXZWJHTCByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuVGV4dH0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIFRleHRXZWJHTFJlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgaWYgKChzcmMud2lkdGggPT09IDApIHx8IChzcmMuaGVpZ2h0ID09PSAwKSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGZyYW1lID0gc3JjLmZyYW1lO1xyXG4gICAgdmFyIHdpZHRoID0gZnJhbWUud2lkdGg7XHJcbiAgICB2YXIgaGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xyXG4gICAgdmFyIGdldFRpbnQgPSBVdGlscy5nZXRUaW50QXBwZW5kRmxvYXRBbHBoYTtcclxuXHJcbiAgICB0aGlzLnBpcGVsaW5lLmJhdGNoVGV4dHVyZShcclxuICAgICAgICBzcmMsXHJcbiAgICAgICAgZnJhbWUuZ2xUZXh0dXJlLFxyXG4gICAgICAgIHdpZHRoLCBoZWlnaHQsXHJcbiAgICAgICAgc3JjLngsIHNyYy55LFxyXG4gICAgICAgIHdpZHRoIC8gc3JjLnN0eWxlLnJlc29sdXRpb24sIGhlaWdodCAvIHNyYy5zdHlsZS5yZXNvbHV0aW9uLFxyXG4gICAgICAgIHNyYy5zY2FsZVgsIHNyYy5zY2FsZVksXHJcbiAgICAgICAgc3JjLnJvdGF0aW9uLFxyXG4gICAgICAgIHNyYy5mbGlwWCwgc3JjLmZsaXBZLFxyXG4gICAgICAgIHNyYy5zY3JvbGxGYWN0b3JYLCBzcmMuc2Nyb2xsRmFjdG9yWSxcclxuICAgICAgICBzcmMuZGlzcGxheU9yaWdpblgsIHNyYy5kaXNwbGF5T3JpZ2luWSxcclxuICAgICAgICAwLCAwLCB3aWR0aCwgaGVpZ2h0LFxyXG4gICAgICAgIGdldFRpbnQoc3JjLl90aW50VEwsIGNhbWVyYS5hbHBoYSAqIHNyYy5fYWxwaGFUTCksXHJcbiAgICAgICAgZ2V0VGludChzcmMuX3RpbnRUUiwgY2FtZXJhLmFscGhhICogc3JjLl9hbHBoYVRSKSxcclxuICAgICAgICBnZXRUaW50KHNyYy5fdGludEJMLCBjYW1lcmEuYWxwaGEgKiBzcmMuX2FscGhhQkwpLFxyXG4gICAgICAgIGdldFRpbnQoc3JjLl90aW50QlIsIGNhbWVyYS5hbHBoYSAqIHNyYy5fYWxwaGFCUiksXHJcbiAgICAgICAgKHNyYy5faXNUaW50ZWQgJiYgc3JjLnRpbnRGaWxsKSxcclxuICAgICAgICAwLCAwLFxyXG4gICAgICAgIGNhbWVyYSxcclxuICAgICAgICBwYXJlbnRNYXRyaXhcclxuICAgICk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRleHRXZWJHTFJlbmRlcmVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/text/static/TextWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/tilesprite/TileSprite.js":
/*!**********************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/tilesprite/TileSprite.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CanvasPool = __webpack_require__(/*! ../../display/canvas/CanvasPool */ \"./node_modules/phaser/src/display/canvas/CanvasPool.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar GameEvents = __webpack_require__(/*! ../../core/events */ \"./node_modules/phaser/src/core/events/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar GetPowerOfTwo = __webpack_require__(/*! ../../math/pow2/GetPowerOfTwo */ \"./node_modules/phaser/src/math/pow2/GetPowerOfTwo.js\");\r\nvar Smoothing = __webpack_require__(/*! ../../display/canvas/Smoothing */ \"./node_modules/phaser/src/display/canvas/Smoothing.js\");\r\nvar TileSpriteRender = __webpack_require__(/*! ./TileSpriteRender */ \"./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteRender.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n// bitmask flag for GameObject.renderMask\r\nvar _FLAG = 8; // 1000\r\n\r\n/**\r\n * @classdesc\r\n * A TileSprite is a Sprite that has a repeating texture.\r\n *\r\n * The texture can be scrolled and scaled independently of the TileSprite itself. Textures will automatically wrap and\r\n * are designed so that you can create game backdrops using seamless textures as a source.\r\n *\r\n * You shouldn't ever create a TileSprite any larger than your actual canvas size. If you want to create a large repeating background\r\n * that scrolls across the whole map of your game, then you create a TileSprite that fits the canvas size and then use the `tilePosition`\r\n * property to scroll the texture as the player moves. If you create a TileSprite that is thousands of pixels in size then it will \r\n * consume huge amounts of memory and cause performance issues. Remember: use `tilePosition` to scroll your texture and `tileScale` to\r\n * adjust the scale of the texture - don't resize the sprite itself or make it larger than it needs.\r\n * \r\n * An important note about Tile Sprites and NPOT textures: Internally, TileSprite textures use GL_REPEAT to provide\r\n * seamless repeating of the textures. This, combined with the way in which the textures are handled in WebGL, means\r\n * they need to be POT (power-of-two) sizes in order to wrap. If you provide a NPOT (non power-of-two) texture to a\r\n * TileSprite it will generate a POT sized canvas and draw your texture to it, scaled up to the POT size. It's then\r\n * scaled back down again during rendering to the original dimensions. While this works, in that it allows you to use\r\n * any size texture for a Tile Sprite, it does mean that NPOT textures are going to appear anti-aliased when rendered,\r\n * due to the interpolation that took place when it was resized into a POT texture. This is especially visible in\r\n * pixel art graphics. If you notice it and it becomes an issue, the only way to avoid it is to ensure that you\r\n * provide POT textures for Tile Sprites.\r\n *\r\n * @class TileSprite\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.ComputedSize\r\n * @extends Phaser.GameObjects.Components.Crop\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Flip\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Tint\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {integer} width - The width of the Game Object. If zero it will use the size of the texture frame.\r\n * @param {integer} height - The height of the Game Object. If zero it will use the size of the texture frame.\r\n * @param {string} textureKey - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frameKey] - An optional frame from the Texture this Game Object is rendering with.\r\n */\r\nvar TileSprite = new Class({\r\n\r\n Extends: GameObject,\r\n\r\n Mixins: [\r\n Components.Alpha,\r\n Components.BlendMode,\r\n Components.ComputedSize,\r\n Components.Crop,\r\n Components.Depth,\r\n Components.Flip,\r\n Components.GetBounds,\r\n Components.Mask,\r\n Components.Origin,\r\n Components.Pipeline,\r\n Components.ScrollFactor,\r\n Components.Tint,\r\n Components.Transform,\r\n Components.Visible,\r\n TileSpriteRender\r\n ],\r\n\r\n initialize:\r\n\r\n function TileSprite (scene, x, y, width, height, textureKey, frameKey)\r\n {\r\n var renderer = scene.sys.game.renderer;\r\n\r\n GameObject.call(this, scene, 'TileSprite');\r\n\r\n var displayTexture = scene.sys.textures.get(textureKey);\r\n var displayFrame = displayTexture.get(frameKey);\r\n\r\n if (!width || !height)\r\n {\r\n width = displayFrame.width;\r\n height = displayFrame.height;\r\n }\r\n else\r\n {\r\n width = Math.floor(width);\r\n height = Math.floor(height);\r\n }\r\n\r\n /**\r\n * Internal tile position vector.\r\n *\r\n * @name Phaser.GameObjects.TileSprite#_tilePosition\r\n * @type {Phaser.Math.Vector2}\r\n * @private\r\n * @since 3.12.0\r\n */\r\n this._tilePosition = new Vector2();\r\n\r\n /**\r\n * Internal tile scale vector.\r\n *\r\n * @name Phaser.GameObjects.TileSprite#_tileScale\r\n * @type {Phaser.Math.Vector2}\r\n * @private\r\n * @since 3.12.0\r\n */\r\n this._tileScale = new Vector2(1, 1);\r\n\r\n /**\r\n * Whether the Tile Sprite has changed in some way, requiring an re-render of its tile texture.\r\n *\r\n * Such changes include the texture frame and scroll position of the Tile Sprite.\r\n *\r\n * @name Phaser.GameObjects.TileSprite#dirty\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.dirty = false;\r\n\r\n /**\r\n * The renderer in use by this Tile Sprite.\r\n *\r\n * @name Phaser.GameObjects.TileSprite#renderer\r\n * @type {(Phaser.Renderer.Canvas.CanvasRenderer|Phaser.Renderer.WebGL.WebGLRenderer)}\r\n * @since 3.0.0\r\n */\r\n this.renderer = renderer;\r\n\r\n /**\r\n * The Canvas element that the TileSprite renders its fill pattern in to.\r\n * Only used in Canvas mode.\r\n *\r\n * @name Phaser.GameObjects.TileSprite#canvas\r\n * @type {?HTMLCanvasElement}\r\n * @since 3.12.0\r\n */\r\n this.canvas = CanvasPool.create(this, width, height);\r\n\r\n /**\r\n * The Context of the Canvas element that the TileSprite renders its fill pattern in to.\r\n * Only used in Canvas mode.\r\n *\r\n * @name Phaser.GameObjects.TileSprite#context\r\n * @type {CanvasRenderingContext2D}\r\n * @since 3.12.0\r\n */\r\n this.context = this.canvas.getContext('2d');\r\n\r\n /**\r\n * The Texture the TileSprite is using as its fill pattern.\r\n *\r\n * @name Phaser.GameObjects.TileSprite#displayTexture\r\n * @type {Phaser.Textures.Texture|Phaser.Textures.CanvasTexture}\r\n * @private\r\n * @since 3.12.0\r\n */\r\n this.displayTexture = displayTexture;\r\n\r\n /**\r\n * The Frame the TileSprite is using as its fill pattern.\r\n *\r\n * @name Phaser.GameObjects.TileSprite#displayFrame\r\n * @type {Phaser.Textures.Frame}\r\n * @private\r\n * @since 3.12.0\r\n */\r\n this.displayFrame = displayFrame;\r\n\r\n /**\r\n * The internal crop data object, as used by `setCrop` and passed to the `Frame.setCropUVs` method.\r\n *\r\n * @name Phaser.GameObjects.TileSprite#_crop\r\n * @type {object}\r\n * @private\r\n * @since 3.12.0\r\n */\r\n this._crop = this.resetCropObject();\r\n\r\n /**\r\n * The Texture this Game Object is using to render with.\r\n *\r\n * @name Phaser.GameObjects.TileSprite#texture\r\n * @type {Phaser.Textures.Texture|Phaser.Textures.CanvasTexture}\r\n * @since 3.0.0\r\n */\r\n this.texture = scene.sys.textures.addCanvas(null, this.canvas, true);\r\n\r\n /**\r\n * The Texture Frame this Game Object is using to render with.\r\n *\r\n * @name Phaser.GameObjects.TileSprite#frame\r\n * @type {Phaser.Textures.Frame}\r\n * @since 3.0.0\r\n */\r\n this.frame = this.texture.get();\r\n\r\n /**\r\n * The next power of two value from the width of the Fill Pattern frame.\r\n *\r\n * @name Phaser.GameObjects.TileSprite#potWidth\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n this.potWidth = GetPowerOfTwo(displayFrame.width);\r\n\r\n /**\r\n * The next power of two value from the height of the Fill Pattern frame.\r\n *\r\n * @name Phaser.GameObjects.TileSprite#potHeight\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n this.potHeight = GetPowerOfTwo(displayFrame.height);\r\n\r\n /**\r\n * The Canvas that the TileSprites texture is rendered to.\r\n * This is used to create a WebGL texture from.\r\n *\r\n * @name Phaser.GameObjects.TileSprite#fillCanvas\r\n * @type {HTMLCanvasElement}\r\n * @since 3.12.0\r\n */\r\n this.fillCanvas = CanvasPool.create2D(this, this.potWidth, this.potHeight);\r\n\r\n /**\r\n * The Canvas Context used to render the TileSprites texture.\r\n *\r\n * @name Phaser.GameObjects.TileSprite#fillContext\r\n * @type {CanvasRenderingContext2D}\r\n * @since 3.12.0\r\n */\r\n this.fillContext = this.fillCanvas.getContext('2d');\r\n\r\n /**\r\n * The texture that the Tile Sprite is rendered to, which is then rendered to a Scene.\r\n * In WebGL this is a WebGLTexture. In Canvas it's a Canvas Fill Pattern.\r\n *\r\n * @name Phaser.GameObjects.TileSprite#fillPattern\r\n * @type {?(WebGLTexture|CanvasPattern)}\r\n * @since 3.12.0\r\n */\r\n this.fillPattern = null;\r\n\r\n this.setPosition(x, y);\r\n this.setSize(width, height);\r\n this.setFrame(frameKey);\r\n this.setOriginFromFrame();\r\n this.initPipeline();\r\n\r\n scene.sys.game.events.on(GameEvents.CONTEXT_RESTORED, function (renderer)\r\n {\r\n var gl = renderer.gl;\r\n\r\n this.dirty = true;\r\n this.fillPattern = null;\r\n this.fillPattern = renderer.createTexture2D(0, gl.LINEAR, gl.LINEAR, gl.REPEAT, gl.REPEAT, gl.RGBA, this.fillCanvas, this.potWidth, this.potHeight);\r\n\r\n }, this);\r\n },\r\n\r\n /**\r\n * Sets the texture and frame this Game Object will use to render with.\r\n *\r\n * Textures are referenced by their string-based keys, as stored in the Texture Manager.\r\n *\r\n * @method Phaser.GameObjects.TileSprite#setTexture\r\n * @since 3.0.0\r\n *\r\n * @param {string} key - The key of the texture to be used, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - The name or index of the frame within the Texture.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setTexture: function (key, frame)\r\n {\r\n this.displayTexture = this.scene.sys.textures.get(key);\r\n\r\n return this.setFrame(frame);\r\n },\r\n\r\n /**\r\n * Sets the frame this Game Object will use to render with.\r\n *\r\n * The Frame has to belong to the current Texture being used.\r\n *\r\n * It can be either a string or an index.\r\n *\r\n * @method Phaser.GameObjects.TileSprite#setFrame\r\n * @since 3.0.0\r\n *\r\n * @param {(string|integer)} frame - The name or index of the frame within the Texture.\r\n *\r\n * @return {this} This Game Object instance.\r\n */\r\n setFrame: function (frame)\r\n {\r\n var newFrame = this.displayTexture.get(frame);\r\n\r\n this.potWidth = GetPowerOfTwo(newFrame.width);\r\n this.potHeight = GetPowerOfTwo(newFrame.height);\r\n\r\n // So updateCanvas is triggered\r\n this.canvas.width = 0;\r\n\r\n if (!newFrame.cutWidth || !newFrame.cutHeight)\r\n {\r\n this.renderFlags &= ~_FLAG;\r\n }\r\n else\r\n {\r\n this.renderFlags |= _FLAG;\r\n }\r\n\r\n this.displayFrame = newFrame;\r\n\r\n this.dirty = true;\r\n\r\n this.updateTileTexture();\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets {@link Phaser.GameObjects.TileSprite#tilePositionX} and {@link Phaser.GameObjects.TileSprite#tilePositionY}.\r\n *\r\n * @method Phaser.GameObjects.TileSprite#setTilePosition\r\n * @since 3.3.0\r\n *\r\n * @param {number} [x] - The x position of this sprite's tiling texture.\r\n * @param {number} [y] - The y position of this sprite's tiling texture.\r\n *\r\n * @return {this} This Tile Sprite instance.\r\n */\r\n setTilePosition: function (x, y)\r\n {\r\n if (x !== undefined)\r\n {\r\n this.tilePositionX = x;\r\n }\r\n\r\n if (y !== undefined)\r\n {\r\n this.tilePositionY = y;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets {@link Phaser.GameObjects.TileSprite#tileScaleX} and {@link Phaser.GameObjects.TileSprite#tileScaleY}.\r\n *\r\n * @method Phaser.GameObjects.TileSprite#setTileScale\r\n * @since 3.12.0\r\n *\r\n * @param {number} [x] - The horizontal scale of the tiling texture. If not given it will use the current `tileScaleX` value.\r\n * @param {number} [y=x] - The vertical scale of the tiling texture. If not given it will use the `x` value.\r\n *\r\n * @return {this} This Tile Sprite instance.\r\n */\r\n setTileScale: function (x, y)\r\n {\r\n if (x === undefined) { x = this.tileScaleX; }\r\n if (y === undefined) { y = x; }\r\n\r\n this.tileScaleX = x;\r\n this.tileScaleY = y;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Render the tile texture if it is dirty, or if the frame has changed.\r\n *\r\n * @method Phaser.GameObjects.TileSprite#updateTileTexture\r\n * @private\r\n * @since 3.0.0\r\n */\r\n updateTileTexture: function ()\r\n {\r\n if (!this.dirty || !this.renderer)\r\n {\r\n return;\r\n }\r\n\r\n // Draw the displayTexture to our fillCanvas\r\n\r\n var frame = this.displayFrame;\r\n\r\n if (frame.source.isRenderTexture || frame.source.isGLTexture)\r\n {\r\n console.warn('TileSprites can only use Image or Canvas based textures');\r\n\r\n this.dirty = false;\r\n\r\n return;\r\n }\r\n\r\n var ctx = this.fillContext;\r\n var canvas = this.fillCanvas;\r\n\r\n var fw = this.potWidth;\r\n var fh = this.potHeight;\r\n\r\n if (!this.renderer.gl)\r\n {\r\n fw = frame.cutWidth;\r\n fh = frame.cutHeight;\r\n }\r\n\r\n ctx.clearRect(0, 0, fw, fh);\r\n\r\n canvas.width = fw;\r\n canvas.height = fh;\r\n\r\n ctx.drawImage(\r\n frame.source.image,\r\n frame.cutX, frame.cutY,\r\n frame.cutWidth, frame.cutHeight,\r\n 0, 0,\r\n fw, fh\r\n );\r\n\r\n if (this.renderer.gl)\r\n {\r\n this.fillPattern = this.renderer.canvasToTexture(canvas, this.fillPattern);\r\n }\r\n else\r\n {\r\n this.fillPattern = ctx.createPattern(canvas, 'repeat');\r\n }\r\n\r\n this.updateCanvas();\r\n\r\n this.dirty = false;\r\n },\r\n\r\n /**\r\n * Draw the fill pattern to the internal canvas.\r\n *\r\n * @method Phaser.GameObjects.TileSprite#updateCanvas\r\n * @private\r\n * @since 3.12.0\r\n */\r\n updateCanvas: function ()\r\n {\r\n var canvas = this.canvas;\r\n\r\n if (canvas.width !== this.width || canvas.height !== this.height)\r\n {\r\n canvas.width = this.width;\r\n canvas.height = this.height;\r\n\r\n this.frame.setSize(this.width, this.height);\r\n this.updateDisplayOrigin();\r\n\r\n this.dirty = true;\r\n }\r\n\r\n if (!this.dirty || this.renderer && this.renderer.gl)\r\n {\r\n this.dirty = false;\r\n return;\r\n }\r\n\r\n var ctx = this.context;\r\n\r\n if (!this.scene.sys.game.config.antialias)\r\n {\r\n Smoothing.disable(ctx);\r\n }\r\n\r\n var scaleX = this._tileScale.x;\r\n var scaleY = this._tileScale.y;\r\n\r\n var positionX = this._tilePosition.x;\r\n var positionY = this._tilePosition.y;\r\n\r\n ctx.clearRect(0, 0, this.width, this.height);\r\n\r\n ctx.save();\r\n\r\n ctx.scale(scaleX, scaleY);\r\n\r\n ctx.translate(-positionX, -positionY);\r\n\r\n ctx.fillStyle = this.fillPattern;\r\n\r\n ctx.fillRect(positionX, positionY, this.width / scaleX, this.height / scaleY);\r\n\r\n ctx.restore();\r\n\r\n this.dirty = false;\r\n },\r\n\r\n /**\r\n * Internal destroy handler, called as part of the destroy process.\r\n *\r\n * @method Phaser.GameObjects.TileSprite#preDestroy\r\n * @protected\r\n * @since 3.9.0\r\n */\r\n preDestroy: function ()\r\n {\r\n if (this.renderer && this.renderer.gl)\r\n {\r\n this.renderer.deleteTexture(this.fillPattern);\r\n }\r\n\r\n CanvasPool.remove(this.canvas);\r\n CanvasPool.remove(this.fillCanvas);\r\n\r\n this.fillPattern = null;\r\n this.fillContext = null;\r\n this.fillCanvas = null;\r\n\r\n this.displayTexture = null;\r\n this.displayFrame = null;\r\n\r\n this.texture.destroy();\r\n\r\n this.renderer = null;\r\n },\r\n\r\n /**\r\n * The horizontal scroll position of the Tile Sprite.\r\n *\r\n * @name Phaser.GameObjects.TileSprite#tilePositionX\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n tilePositionX: {\r\n\r\n get: function ()\r\n {\r\n return this._tilePosition.x;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._tilePosition.x = value;\r\n this.dirty = true;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The vertical scroll position of the Tile Sprite.\r\n *\r\n * @name Phaser.GameObjects.TileSprite#tilePositionY\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n tilePositionY: {\r\n\r\n get: function ()\r\n {\r\n return this._tilePosition.y;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._tilePosition.y = value;\r\n this.dirty = true;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The horizontal scale of the Tile Sprite texture.\r\n *\r\n * @name Phaser.GameObjects.TileSprite#tileScaleX\r\n * @type {number}\r\n * @default 1\r\n * @since 3.11.0\r\n */\r\n tileScaleX: {\r\n\r\n get: function ()\r\n {\r\n return this._tileScale.x;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._tileScale.x = value;\r\n this.dirty = true;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The vertical scale of the Tile Sprite texture.\r\n *\r\n * @name Phaser.GameObjects.TileSprite#tileScaleY\r\n * @type {number}\r\n * @default 1\r\n * @since 3.11.0\r\n */\r\n tileScaleY: {\r\n\r\n get: function ()\r\n {\r\n return this._tileScale.y;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._tileScale.y = value;\r\n this.dirty = true;\r\n }\r\n\r\n }\r\n\r\n});\r\n\r\nmodule.exports = TileSprite;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90aWxlc3ByaXRlL1RpbGVTcHJpdGUuanM/ZGRlNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsK0ZBQWlDO0FBQzFELFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsZ0ZBQWU7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMseUVBQW1CO0FBQzVDLGlCQUFpQixtQkFBTyxDQUFDLDBFQUFlO0FBQ3hDLG9CQUFvQixtQkFBTyxDQUFDLDJGQUErQjtBQUMzRCxnQkFBZ0IsbUJBQU8sQ0FBQyw2RkFBZ0M7QUFDeEQsdUJBQXVCLG1CQUFPLENBQUMsZ0dBQW9CO0FBQ25ELGNBQWMsbUJBQU8sQ0FBQyxxRUFBb0I7O0FBRTFDO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNULEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLGlCQUFpQjtBQUNoQztBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0EsYUFBYSxrREFBa0QsTUFBTSxrREFBa0Q7QUFDdkg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0EsYUFBYSwrQ0FBK0MsTUFBTSwrQ0FBK0M7QUFDakg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLHFCQUFxQjtBQUNuRCw4QkFBOEIsT0FBTzs7QUFFckM7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvdGlsZXNwcml0ZS9UaWxlU3ByaXRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2FudmFzUG9vbCA9IHJlcXVpcmUoJy4uLy4uL2Rpc3BsYXkvY2FudmFzL0NhbnZhc1Bvb2wnKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENvbXBvbmVudHMgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzJyk7XHJcbnZhciBHYW1lRXZlbnRzID0gcmVxdWlyZSgnLi4vLi4vY29yZS9ldmVudHMnKTtcclxudmFyIEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Jyk7XHJcbnZhciBHZXRQb3dlck9mVHdvID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9wb3cyL0dldFBvd2VyT2ZUd28nKTtcclxudmFyIFNtb290aGluZyA9IHJlcXVpcmUoJy4uLy4uL2Rpc3BsYXkvY2FudmFzL1Ntb290aGluZycpO1xyXG52YXIgVGlsZVNwcml0ZVJlbmRlciA9IHJlcXVpcmUoJy4vVGlsZVNwcml0ZVJlbmRlcicpO1xyXG52YXIgVmVjdG9yMiA9IHJlcXVpcmUoJy4uLy4uL21hdGgvVmVjdG9yMicpO1xyXG5cclxuLy8gIGJpdG1hc2sgZmxhZyBmb3IgR2FtZU9iamVjdC5yZW5kZXJNYXNrXHJcbnZhciBfRkxBRyA9IDg7IC8vIDEwMDBcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgVGlsZVNwcml0ZSBpcyBhIFNwcml0ZSB0aGF0IGhhcyBhIHJlcGVhdGluZyB0ZXh0dXJlLlxyXG4gKlxyXG4gKiBUaGUgdGV4dHVyZSBjYW4gYmUgc2Nyb2xsZWQgYW5kIHNjYWxlZCBpbmRlcGVuZGVudGx5IG9mIHRoZSBUaWxlU3ByaXRlIGl0c2VsZi4gVGV4dHVyZXMgd2lsbCBhdXRvbWF0aWNhbGx5IHdyYXAgYW5kXHJcbiAqIGFyZSBkZXNpZ25lZCBzbyB0aGF0IHlvdSBjYW4gY3JlYXRlIGdhbWUgYmFja2Ryb3BzIHVzaW5nIHNlYW1sZXNzIHRleHR1cmVzIGFzIGEgc291cmNlLlxyXG4gKlxyXG4gKiBZb3Ugc2hvdWxkbid0IGV2ZXIgY3JlYXRlIGEgVGlsZVNwcml0ZSBhbnkgbGFyZ2VyIHRoYW4geW91ciBhY3R1YWwgY2FudmFzIHNpemUuIElmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIGxhcmdlIHJlcGVhdGluZyBiYWNrZ3JvdW5kXHJcbiAqIHRoYXQgc2Nyb2xscyBhY3Jvc3MgdGhlIHdob2xlIG1hcCBvZiB5b3VyIGdhbWUsIHRoZW4geW91IGNyZWF0ZSBhIFRpbGVTcHJpdGUgdGhhdCBmaXRzIHRoZSBjYW52YXMgc2l6ZSBhbmQgdGhlbiB1c2UgdGhlIGB0aWxlUG9zaXRpb25gXHJcbiAqIHByb3BlcnR5IHRvIHNjcm9sbCB0aGUgdGV4dHVyZSBhcyB0aGUgcGxheWVyIG1vdmVzLiBJZiB5b3UgY3JlYXRlIGEgVGlsZVNwcml0ZSB0aGF0IGlzIHRob3VzYW5kcyBvZiBwaXhlbHMgaW4gc2l6ZSB0aGVuIGl0IHdpbGwgXHJcbiAqIGNvbnN1bWUgaHVnZSBhbW91bnRzIG9mIG1lbW9yeSBhbmQgY2F1c2UgcGVyZm9ybWFuY2UgaXNzdWVzLiBSZW1lbWJlcjogdXNlIGB0aWxlUG9zaXRpb25gIHRvIHNjcm9sbCB5b3VyIHRleHR1cmUgYW5kIGB0aWxlU2NhbGVgIHRvXHJcbiAqIGFkanVzdCB0aGUgc2NhbGUgb2YgdGhlIHRleHR1cmUgLSBkb24ndCByZXNpemUgdGhlIHNwcml0ZSBpdHNlbGYgb3IgbWFrZSBpdCBsYXJnZXIgdGhhbiBpdCBuZWVkcy5cclxuICogXHJcbiAqIEFuIGltcG9ydGFudCBub3RlIGFib3V0IFRpbGUgU3ByaXRlcyBhbmQgTlBPVCB0ZXh0dXJlczogSW50ZXJuYWxseSwgVGlsZVNwcml0ZSB0ZXh0dXJlcyB1c2UgR0xfUkVQRUFUIHRvIHByb3ZpZGVcclxuICogc2VhbWxlc3MgcmVwZWF0aW5nIG9mIHRoZSB0ZXh0dXJlcy4gVGhpcywgY29tYmluZWQgd2l0aCB0aGUgd2F5IGluIHdoaWNoIHRoZSB0ZXh0dXJlcyBhcmUgaGFuZGxlZCBpbiBXZWJHTCwgbWVhbnNcclxuICogdGhleSBuZWVkIHRvIGJlIFBPVCAocG93ZXItb2YtdHdvKSBzaXplcyBpbiBvcmRlciB0byB3cmFwLiBJZiB5b3UgcHJvdmlkZSBhIE5QT1QgKG5vbiBwb3dlci1vZi10d28pIHRleHR1cmUgdG8gYVxyXG4gKiBUaWxlU3ByaXRlIGl0IHdpbGwgZ2VuZXJhdGUgYSBQT1Qgc2l6ZWQgY2FudmFzIGFuZCBkcmF3IHlvdXIgdGV4dHVyZSB0byBpdCwgc2NhbGVkIHVwIHRvIHRoZSBQT1Qgc2l6ZS4gSXQncyB0aGVuXHJcbiAqIHNjYWxlZCBiYWNrIGRvd24gYWdhaW4gZHVyaW5nIHJlbmRlcmluZyB0byB0aGUgb3JpZ2luYWwgZGltZW5zaW9ucy4gV2hpbGUgdGhpcyB3b3JrcywgaW4gdGhhdCBpdCBhbGxvd3MgeW91IHRvIHVzZVxyXG4gKiBhbnkgc2l6ZSB0ZXh0dXJlIGZvciBhIFRpbGUgU3ByaXRlLCBpdCBkb2VzIG1lYW4gdGhhdCBOUE9UIHRleHR1cmVzIGFyZSBnb2luZyB0byBhcHBlYXIgYW50aS1hbGlhc2VkIHdoZW4gcmVuZGVyZWQsXHJcbiAqIGR1ZSB0byB0aGUgaW50ZXJwb2xhdGlvbiB0aGF0IHRvb2sgcGxhY2Ugd2hlbiBpdCB3YXMgcmVzaXplZCBpbnRvIGEgUE9UIHRleHR1cmUuIFRoaXMgaXMgZXNwZWNpYWxseSB2aXNpYmxlIGluXHJcbiAqIHBpeGVsIGFydCBncmFwaGljcy4gSWYgeW91IG5vdGljZSBpdCBhbmQgaXQgYmVjb21lcyBhbiBpc3N1ZSwgdGhlIG9ubHkgd2F5IHRvIGF2b2lkIGl0IGlzIHRvIGVuc3VyZSB0aGF0IHlvdVxyXG4gKiBwcm92aWRlIFBPVCB0ZXh0dXJlcyBmb3IgVGlsZSBTcHJpdGVzLlxyXG4gKlxyXG4gKiBAY2xhc3MgVGlsZVNwcml0ZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQWxwaGFcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuQmxlbmRNb2RlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkNvbXB1dGVkU2l6ZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5Dcm9wXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkRlcHRoXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkZsaXBcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuR2V0Qm91bmRzXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk1hc2tcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuT3JpZ2luXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlBpcGVsaW5lXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlNjcm9sbEZhY3RvclxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UaW50XHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5WaXNpYmxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuIEEgR2FtZSBPYmplY3QgY2FuIG9ubHkgYmVsb25nIHRvIG9uZSBTY2VuZSBhdCBhIHRpbWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBHYW1lIE9iamVjdC4gSWYgemVybyBpdCB3aWxsIHVzZSB0aGUgc2l6ZSBvZiB0aGUgdGV4dHVyZSBmcmFtZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBHYW1lIE9iamVjdC4gSWYgemVybyBpdCB3aWxsIHVzZSB0aGUgc2l6ZSBvZiB0aGUgdGV4dHVyZSBmcmFtZS5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRleHR1cmVLZXkgLSBUaGUga2V5IG9mIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gcmVuZGVyIHdpdGgsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZUtleV0gLSBBbiBvcHRpb25hbCBmcmFtZSBmcm9tIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyaW5nIHdpdGguXHJcbiAqL1xyXG52YXIgVGlsZVNwcml0ZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogR2FtZU9iamVjdCxcclxuXHJcbiAgICBNaXhpbnM6IFtcclxuICAgICAgICBDb21wb25lbnRzLkFscGhhLFxyXG4gICAgICAgIENvbXBvbmVudHMuQmxlbmRNb2RlLFxyXG4gICAgICAgIENvbXBvbmVudHMuQ29tcHV0ZWRTaXplLFxyXG4gICAgICAgIENvbXBvbmVudHMuQ3JvcCxcclxuICAgICAgICBDb21wb25lbnRzLkRlcHRoLFxyXG4gICAgICAgIENvbXBvbmVudHMuRmxpcCxcclxuICAgICAgICBDb21wb25lbnRzLkdldEJvdW5kcyxcclxuICAgICAgICBDb21wb25lbnRzLk1hc2ssXHJcbiAgICAgICAgQ29tcG9uZW50cy5PcmlnaW4sXHJcbiAgICAgICAgQ29tcG9uZW50cy5QaXBlbGluZSxcclxuICAgICAgICBDb21wb25lbnRzLlNjcm9sbEZhY3RvcixcclxuICAgICAgICBDb21wb25lbnRzLlRpbnQsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UcmFuc2Zvcm0sXHJcbiAgICAgICAgQ29tcG9uZW50cy5WaXNpYmxlLFxyXG4gICAgICAgIFRpbGVTcHJpdGVSZW5kZXJcclxuICAgIF0sXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBUaWxlU3ByaXRlIChzY2VuZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgdGV4dHVyZUtleSwgZnJhbWVLZXkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHJlbmRlcmVyID0gc2NlbmUuc3lzLmdhbWUucmVuZGVyZXI7XHJcblxyXG4gICAgICAgIEdhbWVPYmplY3QuY2FsbCh0aGlzLCBzY2VuZSwgJ1RpbGVTcHJpdGUnKTtcclxuXHJcbiAgICAgICAgdmFyIGRpc3BsYXlUZXh0dXJlID0gc2NlbmUuc3lzLnRleHR1cmVzLmdldCh0ZXh0dXJlS2V5KTtcclxuICAgICAgICB2YXIgZGlzcGxheUZyYW1lID0gZGlzcGxheVRleHR1cmUuZ2V0KGZyYW1lS2V5KTtcclxuXHJcbiAgICAgICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgd2lkdGggPSBkaXNwbGF5RnJhbWUud2lkdGg7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IGRpc3BsYXlGcmFtZS5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5mbG9vcih3aWR0aCk7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IE1hdGguZmxvb3IoaGVpZ2h0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIHRpbGUgcG9zaXRpb24gdmVjdG9yLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjX3RpbGVQb3NpdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RpbGVQb3NpdGlvbiA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIHRpbGUgc2NhbGUgdmVjdG9yLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjX3RpbGVTY2FsZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RpbGVTY2FsZSA9IG5ldyBWZWN0b3IyKDEsIDEpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGV0aGVyIHRoZSBUaWxlIFNwcml0ZSBoYXMgY2hhbmdlZCBpbiBzb21lIHdheSwgcmVxdWlyaW5nIGFuIHJlLXJlbmRlciBvZiBpdHMgdGlsZSB0ZXh0dXJlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogU3VjaCBjaGFuZ2VzIGluY2x1ZGUgdGhlIHRleHR1cmUgZnJhbWUgYW5kIHNjcm9sbCBwb3NpdGlvbiBvZiB0aGUgVGlsZSBTcHJpdGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGlsZVNwcml0ZSNkaXJ0eVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcmVuZGVyZXIgaW4gdXNlIGJ5IHRoaXMgVGlsZSBTcHJpdGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGlsZVNwcml0ZSNyZW5kZXJlclxyXG4gICAgICAgICAqIEB0eXBlIHsoUGhhc2VyLlJlbmRlcmVyLkNhbnZhcy5DYW52YXNSZW5kZXJlcnxQaGFzZXIuUmVuZGVyZXIuV2ViR0wuV2ViR0xSZW5kZXJlcil9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQ2FudmFzIGVsZW1lbnQgdGhhdCB0aGUgVGlsZVNwcml0ZSByZW5kZXJzIGl0cyBmaWxsIHBhdHRlcm4gaW4gdG8uXHJcbiAgICAgICAgICogT25seSB1c2VkIGluIENhbnZhcyBtb2RlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjY2FudmFzXHJcbiAgICAgICAgICogQHR5cGUgez9IVE1MQ2FudmFzRWxlbWVudH1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYW52YXMgPSBDYW52YXNQb29sLmNyZWF0ZSh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIENvbnRleHQgb2YgdGhlIENhbnZhcyBlbGVtZW50IHRoYXQgdGhlIFRpbGVTcHJpdGUgcmVuZGVycyBpdHMgZmlsbCBwYXR0ZXJuIGluIHRvLlxyXG4gICAgICAgICAqIE9ubHkgdXNlZCBpbiBDYW52YXMgbW9kZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlI2NvbnRleHRcclxuICAgICAgICAgKiBAdHlwZSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgVGV4dHVyZSB0aGUgVGlsZVNwcml0ZSBpcyB1c2luZyBhcyBpdHMgZmlsbCBwYXR0ZXJuLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjZGlzcGxheVRleHR1cmVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlRleHR1cmVzLlRleHR1cmV8UGhhc2VyLlRleHR1cmVzLkNhbnZhc1RleHR1cmV9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kaXNwbGF5VGV4dHVyZSA9IGRpc3BsYXlUZXh0dXJlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgRnJhbWUgdGhlIFRpbGVTcHJpdGUgaXMgdXNpbmcgYXMgaXRzIGZpbGwgcGF0dGVybi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlI2Rpc3BsYXlGcmFtZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVGV4dHVyZXMuRnJhbWV9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kaXNwbGF5RnJhbWUgPSBkaXNwbGF5RnJhbWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBpbnRlcm5hbCBjcm9wIGRhdGEgb2JqZWN0LCBhcyB1c2VkIGJ5IGBzZXRDcm9wYCBhbmQgcGFzc2VkIHRvIHRoZSBgRnJhbWUuc2V0Q3JvcFVWc2AgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjX2Nyb3BcclxuICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2Nyb3AgPSB0aGlzLnJlc2V0Q3JvcE9iamVjdCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHVzaW5nIHRvIHJlbmRlciB3aXRoLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjdGV4dHVyZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZXxQaGFzZXIuVGV4dHVyZXMuQ2FudmFzVGV4dHVyZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRleHR1cmUgPSBzY2VuZS5zeXMudGV4dHVyZXMuYWRkQ2FudmFzKG51bGwsIHRoaXMuY2FudmFzLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFRleHR1cmUgRnJhbWUgdGhpcyBHYW1lIE9iamVjdCBpcyB1c2luZyB0byByZW5kZXIgd2l0aC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlI2ZyYW1lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UZXh0dXJlcy5GcmFtZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy50ZXh0dXJlLmdldCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbmV4dCBwb3dlciBvZiB0d28gdmFsdWUgZnJvbSB0aGUgd2lkdGggb2YgdGhlIEZpbGwgUGF0dGVybiBmcmFtZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlI3BvdFdpZHRoXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wb3RXaWR0aCA9IEdldFBvd2VyT2ZUd28oZGlzcGxheUZyYW1lLndpZHRoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG5leHQgcG93ZXIgb2YgdHdvIHZhbHVlIGZyb20gdGhlIGhlaWdodCBvZiB0aGUgRmlsbCBQYXR0ZXJuIGZyYW1lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjcG90SGVpZ2h0XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wb3RIZWlnaHQgPSBHZXRQb3dlck9mVHdvKGRpc3BsYXlGcmFtZS5oZWlnaHQpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQ2FudmFzIHRoYXQgdGhlIFRpbGVTcHJpdGVzIHRleHR1cmUgaXMgcmVuZGVyZWQgdG8uXHJcbiAgICAgICAgICogVGhpcyBpcyB1c2VkIHRvIGNyZWF0ZSBhIFdlYkdMIHRleHR1cmUgZnJvbS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlI2ZpbGxDYW52YXNcclxuICAgICAgICAgKiBAdHlwZSB7SFRNTENhbnZhc0VsZW1lbnR9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZmlsbENhbnZhcyA9IENhbnZhc1Bvb2wuY3JlYXRlMkQodGhpcywgdGhpcy5wb3RXaWR0aCwgdGhpcy5wb3RIZWlnaHQpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQ2FudmFzIENvbnRleHQgdXNlZCB0byByZW5kZXIgdGhlIFRpbGVTcHJpdGVzIHRleHR1cmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGlsZVNwcml0ZSNmaWxsQ29udGV4dFxyXG4gICAgICAgICAqIEB0eXBlIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZmlsbENvbnRleHQgPSB0aGlzLmZpbGxDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgVGlsZSBTcHJpdGUgaXMgcmVuZGVyZWQgdG8sIHdoaWNoIGlzIHRoZW4gcmVuZGVyZWQgdG8gYSBTY2VuZS5cclxuICAgICAgICAgKiBJbiBXZWJHTCB0aGlzIGlzIGEgV2ViR0xUZXh0dXJlLiBJbiBDYW52YXMgaXQncyBhIENhbnZhcyBGaWxsIFBhdHRlcm4uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGlsZVNwcml0ZSNmaWxsUGF0dGVyblxyXG4gICAgICAgICAqIEB0eXBlIHs/KFdlYkdMVGV4dHVyZXxDYW52YXNQYXR0ZXJuKX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5maWxsUGF0dGVybiA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24oeCwgeSk7XHJcbiAgICAgICAgdGhpcy5zZXRTaXplKHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgIHRoaXMuc2V0RnJhbWUoZnJhbWVLZXkpO1xyXG4gICAgICAgIHRoaXMuc2V0T3JpZ2luRnJvbUZyYW1lKCk7XHJcbiAgICAgICAgdGhpcy5pbml0UGlwZWxpbmUoKTtcclxuXHJcbiAgICAgICAgc2NlbmUuc3lzLmdhbWUuZXZlbnRzLm9uKEdhbWVFdmVudHMuQ09OVEVYVF9SRVNUT1JFRCwgZnVuY3Rpb24gKHJlbmRlcmVyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5maWxsUGF0dGVybiA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsbFBhdHRlcm4gPSByZW5kZXJlci5jcmVhdGVUZXh0dXJlMkQoMCwgZ2wuTElORUFSLCBnbC5MSU5FQVIsIGdsLlJFUEVBVCwgZ2wuUkVQRUFULCBnbC5SR0JBLCB0aGlzLmZpbGxDYW52YXMsIHRoaXMucG90V2lkdGgsIHRoaXMucG90SGVpZ2h0KTtcclxuXHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdGV4dHVyZSBhbmQgZnJhbWUgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byByZW5kZXIgd2l0aC5cclxuICAgICAqXHJcbiAgICAgKiBUZXh0dXJlcyBhcmUgcmVmZXJlbmNlZCBieSB0aGVpciBzdHJpbmctYmFzZWQga2V5cywgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGlsZVNwcml0ZSNzZXRUZXh0dXJlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgdGV4dHVyZSB0byBiZSB1c2VkLCBhcyBzdG9yZWQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyKX0gW2ZyYW1lXSAtIFRoZSBuYW1lIG9yIGluZGV4IG9mIHRoZSBmcmFtZSB3aXRoaW4gdGhlIFRleHR1cmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBHYW1lIE9iamVjdCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0VGV4dHVyZTogZnVuY3Rpb24gKGtleSwgZnJhbWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5VGV4dHVyZSA9IHRoaXMuc2NlbmUuc3lzLnRleHR1cmVzLmdldChrZXkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRGcmFtZShmcmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgZnJhbWUgdGhpcyBHYW1lIE9iamVjdCB3aWxsIHVzZSB0byByZW5kZXIgd2l0aC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgRnJhbWUgaGFzIHRvIGJlbG9uZyB0byB0aGUgY3VycmVudCBUZXh0dXJlIGJlaW5nIHVzZWQuXHJcbiAgICAgKlxyXG4gICAgICogSXQgY2FuIGJlIGVpdGhlciBhIHN0cmluZyBvciBhbiBpbmRleC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlI3NldEZyYW1lXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IGZyYW1lIC0gVGhlIG5hbWUgb3IgaW5kZXggb2YgdGhlIGZyYW1lIHdpdGhpbiB0aGUgVGV4dHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIEdhbWUgT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXRGcmFtZTogZnVuY3Rpb24gKGZyYW1lKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBuZXdGcmFtZSA9IHRoaXMuZGlzcGxheVRleHR1cmUuZ2V0KGZyYW1lKTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3RXaWR0aCA9IEdldFBvd2VyT2ZUd28obmV3RnJhbWUud2lkdGgpO1xyXG4gICAgICAgIHRoaXMucG90SGVpZ2h0ID0gR2V0UG93ZXJPZlR3byhuZXdGcmFtZS5oZWlnaHQpO1xyXG5cclxuICAgICAgICAvLyAgU28gdXBkYXRlQ2FudmFzIGlzIHRyaWdnZXJlZFxyXG4gICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gMDtcclxuXHJcbiAgICAgICAgaWYgKCFuZXdGcmFtZS5jdXRXaWR0aCB8fCAhbmV3RnJhbWUuY3V0SGVpZ2h0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJGbGFncyAmPSB+X0ZMQUc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRmxhZ3MgfD0gX0ZMQUc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRpc3BsYXlGcmFtZSA9IG5ld0ZyYW1lO1xyXG5cclxuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVUaWxlVGV4dHVyZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuVGlsZVNwcml0ZSN0aWxlUG9zaXRpb25YfSBhbmQge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlI3RpbGVQb3NpdGlvbll9LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjc2V0VGlsZVBvc2l0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4zLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3hdIC0gVGhlIHggcG9zaXRpb24gb2YgdGhpcyBzcHJpdGUncyB0aWxpbmcgdGV4dHVyZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeV0gLSBUaGUgeSBwb3NpdGlvbiBvZiB0aGlzIHNwcml0ZSdzIHRpbGluZyB0ZXh0dXJlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgVGlsZSBTcHJpdGUgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHNldFRpbGVQb3NpdGlvbjogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggIT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudGlsZVBvc2l0aW9uWCA9IHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoeSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy50aWxlUG9zaXRpb25ZID0geTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMge0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlI3RpbGVTY2FsZVh9IGFuZCB7QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjdGlsZVNjYWxlWX0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVGlsZVNwcml0ZSNzZXRUaWxlU2NhbGVcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3hdIC0gVGhlIGhvcml6b250YWwgc2NhbGUgb2YgdGhlIHRpbGluZyB0ZXh0dXJlLiBJZiBub3QgZ2l2ZW4gaXQgd2lsbCB1c2UgdGhlIGN1cnJlbnQgYHRpbGVTY2FsZVhgIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PXhdIC0gVGhlIHZlcnRpY2FsIHNjYWxlIG9mIHRoZSB0aWxpbmcgdGV4dHVyZS4gSWYgbm90IGdpdmVuIGl0IHdpbGwgdXNlIHRoZSBgeGAgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBUaWxlIFNwcml0ZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0VGlsZVNjYWxlOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7IHggPSB0aGlzLnRpbGVTY2FsZVg7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSB4OyB9XHJcblxyXG4gICAgICAgIHRoaXMudGlsZVNjYWxlWCA9IHg7XHJcbiAgICAgICAgdGhpcy50aWxlU2NhbGVZID0geTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVuZGVyIHRoZSB0aWxlIHRleHR1cmUgaWYgaXQgaXMgZGlydHksIG9yIGlmIHRoZSBmcmFtZSBoYXMgY2hhbmdlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlI3VwZGF0ZVRpbGVUZXh0dXJlXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVRpbGVUZXh0dXJlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5kaXJ0eSB8fCAhdGhpcy5yZW5kZXJlcilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBEcmF3IHRoZSBkaXNwbGF5VGV4dHVyZSB0byBvdXIgZmlsbENhbnZhc1xyXG5cclxuICAgICAgICB2YXIgZnJhbWUgPSB0aGlzLmRpc3BsYXlGcmFtZTtcclxuXHJcbiAgICAgICAgaWYgKGZyYW1lLnNvdXJjZS5pc1JlbmRlclRleHR1cmUgfHwgZnJhbWUuc291cmNlLmlzR0xUZXh0dXJlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaWxlU3ByaXRlcyBjYW4gb25seSB1c2UgSW1hZ2Ugb3IgQ2FudmFzIGJhc2VkIHRleHR1cmVzJyk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY3R4ID0gdGhpcy5maWxsQ29udGV4dDtcclxuICAgICAgICB2YXIgY2FudmFzID0gdGhpcy5maWxsQ2FudmFzO1xyXG5cclxuICAgICAgICB2YXIgZncgPSB0aGlzLnBvdFdpZHRoO1xyXG4gICAgICAgIHZhciBmaCA9IHRoaXMucG90SGVpZ2h0O1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyZXIuZ2wpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmdyA9IGZyYW1lLmN1dFdpZHRoO1xyXG4gICAgICAgICAgICBmaCA9IGZyYW1lLmN1dEhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgZncsIGZoKTtcclxuXHJcbiAgICAgICAgY2FudmFzLndpZHRoID0gZnc7XHJcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGZoO1xyXG5cclxuICAgICAgICBjdHguZHJhd0ltYWdlKFxyXG4gICAgICAgICAgICBmcmFtZS5zb3VyY2UuaW1hZ2UsXHJcbiAgICAgICAgICAgIGZyYW1lLmN1dFgsIGZyYW1lLmN1dFksXHJcbiAgICAgICAgICAgIGZyYW1lLmN1dFdpZHRoLCBmcmFtZS5jdXRIZWlnaHQsXHJcbiAgICAgICAgICAgIDAsIDAsXHJcbiAgICAgICAgICAgIGZ3LCBmaFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlbmRlcmVyLmdsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5maWxsUGF0dGVybiA9IHRoaXMucmVuZGVyZXIuY2FudmFzVG9UZXh0dXJlKGNhbnZhcywgdGhpcy5maWxsUGF0dGVybik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsbFBhdHRlcm4gPSBjdHguY3JlYXRlUGF0dGVybihjYW52YXMsICdyZXBlYXQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQ2FudmFzKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3IHRoZSBmaWxsIHBhdHRlcm4gdG8gdGhlIGludGVybmFsIGNhbnZhcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlI3VwZGF0ZUNhbnZhc1xyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEyLjBcclxuICAgICAqL1xyXG4gICAgdXBkYXRlQ2FudmFzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjYW52YXMgPSB0aGlzLmNhbnZhcztcclxuXHJcbiAgICAgICAgaWYgKGNhbnZhcy53aWR0aCAhPT0gdGhpcy53aWR0aCB8fCBjYW52YXMuaGVpZ2h0ICE9PSB0aGlzLmhlaWdodClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuc2V0U2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzcGxheU9yaWdpbigpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZGlydHkgfHwgdGhpcy5yZW5kZXJlciAmJiB0aGlzLnJlbmRlcmVyLmdsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY3R4ID0gdGhpcy5jb250ZXh0O1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuc2NlbmUuc3lzLmdhbWUuY29uZmlnLmFudGlhbGlhcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIFNtb290aGluZy5kaXNhYmxlKGN0eCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc2NhbGVYID0gdGhpcy5fdGlsZVNjYWxlLng7XHJcbiAgICAgICAgdmFyIHNjYWxlWSA9IHRoaXMuX3RpbGVTY2FsZS55O1xyXG5cclxuICAgICAgICB2YXIgcG9zaXRpb25YID0gdGhpcy5fdGlsZVBvc2l0aW9uLng7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uWSA9IHRoaXMuX3RpbGVQb3NpdGlvbi55O1xyXG5cclxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgY3R4LnNhdmUoKTtcclxuXHJcbiAgICAgICAgY3R4LnNjYWxlKHNjYWxlWCwgc2NhbGVZKTtcclxuXHJcbiAgICAgICAgY3R4LnRyYW5zbGF0ZSgtcG9zaXRpb25YLCAtcG9zaXRpb25ZKTtcclxuXHJcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuZmlsbFBhdHRlcm47XHJcblxyXG4gICAgICAgIGN0eC5maWxsUmVjdChwb3NpdGlvblgsIHBvc2l0aW9uWSwgdGhpcy53aWR0aCAvIHNjYWxlWCwgdGhpcy5oZWlnaHQgLyBzY2FsZVkpO1xyXG5cclxuICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG5cclxuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgZGVzdHJveSBoYW5kbGVyLCBjYWxsZWQgYXMgcGFydCBvZiB0aGUgZGVzdHJveSBwcm9jZXNzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjcHJlRGVzdHJveVxyXG4gICAgICogQHByb3RlY3RlZFxyXG4gICAgICogQHNpbmNlIDMuOS4wXHJcbiAgICAgKi9cclxuICAgIHByZURlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVuZGVyZXIgJiYgdGhpcy5yZW5kZXJlci5nbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZGVsZXRlVGV4dHVyZSh0aGlzLmZpbGxQYXR0ZXJuKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIENhbnZhc1Bvb2wucmVtb3ZlKHRoaXMuY2FudmFzKTtcclxuICAgICAgICBDYW52YXNQb29sLnJlbW92ZSh0aGlzLmZpbGxDYW52YXMpO1xyXG5cclxuICAgICAgICB0aGlzLmZpbGxQYXR0ZXJuID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZpbGxDb250ZXh0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZpbGxDYW52YXMgPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLmRpc3BsYXlUZXh0dXJlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmRpc3BsYXlGcmFtZSA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMudGV4dHVyZS5kZXN0cm95KCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBob3Jpem9udGFsIHNjcm9sbCBwb3NpdGlvbiBvZiB0aGUgVGlsZSBTcHJpdGUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjdGlsZVBvc2l0aW9uWFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB0aWxlUG9zaXRpb25YOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90aWxlUG9zaXRpb24ueDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbGVQb3NpdGlvbi54ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHZlcnRpY2FsIHNjcm9sbCBwb3NpdGlvbiBvZiB0aGUgVGlsZSBTcHJpdGUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjdGlsZVBvc2l0aW9uWVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB0aWxlUG9zaXRpb25ZOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90aWxlUG9zaXRpb24ueTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbGVQb3NpdGlvbi55ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGhvcml6b250YWwgc2NhbGUgb2YgdGhlIFRpbGUgU3ByaXRlIHRleHR1cmUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjdGlsZVNjYWxlWFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqL1xyXG4gICAgdGlsZVNjYWxlWDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGlsZVNjYWxlLng7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl90aWxlU2NhbGUueCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2ZXJ0aWNhbCBzY2FsZSBvZiB0aGUgVGlsZSBTcHJpdGUgdGV4dHVyZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVGlsZVNwcml0ZSN0aWxlU2NhbGVZXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGRlZmF1bHQgMVxyXG4gICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICovXHJcbiAgICB0aWxlU2NhbGVZOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90aWxlU2NhbGUueTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbGVTY2FsZS55ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVGlsZVNwcml0ZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/tilesprite/TileSprite.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteCanvasRenderer.js":
/*!************************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteCanvasRenderer.js ***!
\************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.TileSprite#renderCanvas\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.TileSprite} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar TileSpriteCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n src.updateCanvas();\r\n\r\n renderer.batchSprite(src, src.frame, camera, parentMatrix);\r\n};\r\n\r\nmodule.exports = TileSpriteCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90aWxlc3ByaXRlL1RpbGVTcHJpdGVDYW52YXNSZW5kZXJlci5qcz8wMzY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNDQUFzQztBQUNqRCxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEIsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4Q0FBOEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3RpbGVzcHJpdGUvVGlsZVNwcml0ZUNhbnZhc1JlbmRlcmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmVuZGVycyB0aGlzIEdhbWUgT2JqZWN0IHdpdGggdGhlIENhbnZhcyBSZW5kZXJlciB0byB0aGUgZ2l2ZW4gQ2FtZXJhLlxyXG4gKiBUaGUgb2JqZWN0IHdpbGwgbm90IHJlbmRlciBpZiBhbnkgb2YgaXRzIHJlbmRlckZsYWdzIGFyZSBzZXQgb3IgaXQgaXMgYmVpbmcgYWN0aXZlbHkgZmlsdGVyZWQgb3V0IGJ5IHRoZSBDYW1lcmEuXHJcbiAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gb2YgdGhlIFJlbmRlciBtb2R1bGUuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUjcmVuZGVyQ2FudmFzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIENhbnZhcyByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuVGlsZVNwcml0ZX0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIFRpbGVTcHJpdGVDYW52YXNSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIHNyYy51cGRhdGVDYW52YXMoKTtcclxuXHJcbiAgICByZW5kZXJlci5iYXRjaFNwcml0ZShzcmMsIHNyYy5mcmFtZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUaWxlU3ByaXRlQ2FudmFzUmVuZGVyZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteCreator.js":
/*!*****************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteCreator.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BuildGameObject = __webpack_require__(/*! ../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar TileSprite = __webpack_require__(/*! ./TileSprite */ \"./node_modules/phaser/src/gameobjects/tilesprite/TileSprite.js\");\r\n\r\n/**\r\n * Creates a new TileSprite Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the TileSprite Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#tileSprite\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.GameObjects.TileSprite.TileSpriteConfig} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.TileSprite} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('tileSprite', function (config, addToScene)\r\n{\r\n if (config === undefined) { config = {}; }\r\n\r\n var x = GetAdvancedValue(config, 'x', 0);\r\n var y = GetAdvancedValue(config, 'y', 0);\r\n var width = GetAdvancedValue(config, 'width', 512);\r\n var height = GetAdvancedValue(config, 'height', 512);\r\n var key = GetAdvancedValue(config, 'key', '');\r\n var frame = GetAdvancedValue(config, 'frame', '');\r\n\r\n var tile = new TileSprite(this.scene, x, y, width, height, key, frame);\r\n\r\n if (addToScene !== undefined)\r\n {\r\n config.add = addToScene;\r\n }\r\n\r\n BuildGameObject(this.scene, tile, config);\r\n\r\n return tile;\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90aWxlc3ByaXRlL1RpbGVTcHJpdGVDcmVhdG9yLmpzP2M5NjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHNCQUFzQixtQkFBTyxDQUFDLG9GQUFvQjtBQUNsRCx3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7QUFDdEQsdUJBQXVCLG1CQUFPLENBQUMsdUdBQXFDO0FBQ3BFLGlCQUFpQixtQkFBTyxDQUFDLG9GQUFjOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxREFBcUQ7QUFDaEUsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGFBQWE7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90aWxlc3ByaXRlL1RpbGVTcHJpdGVDcmVhdG9yLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQnVpbGRHYW1lT2JqZWN0ID0gcmVxdWlyZSgnLi4vQnVpbGRHYW1lT2JqZWN0Jyk7XHJcbnZhciBHYW1lT2JqZWN0Q3JlYXRvciA9IHJlcXVpcmUoJy4uL0dhbWVPYmplY3RDcmVhdG9yJyk7XHJcbnZhciBHZXRBZHZhbmNlZFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEFkdmFuY2VkVmFsdWUnKTtcclxudmFyIFRpbGVTcHJpdGUgPSByZXF1aXJlKCcuL1RpbGVTcHJpdGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFRpbGVTcHJpdGUgR2FtZSBPYmplY3QgYW5kIHJldHVybnMgaXQuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFRpbGVTcHJpdGUgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI3RpbGVTcHJpdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkdhbWVPYmplY3RzLlRpbGVTcHJpdGUuVGlsZVNwcml0ZUNvbmZpZ30gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gY3JlYXRlIGl0c2VsZi5cclxuICogQHBhcmFtIHtib29sZWFufSBbYWRkVG9TY2VuZV0gLSBBZGQgdGhpcyBHYW1lIE9iamVjdCB0byB0aGUgU2NlbmUgYWZ0ZXIgY3JlYXRpbmcgaXQ/IElmIHNldCB0aGlzIGFyZ3VtZW50IG92ZXJyaWRlcyB0aGUgYGFkZGAgcHJvcGVydHkgaW4gdGhlIGNvbmZpZyBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RDcmVhdG9yLnJlZ2lzdGVyKCd0aWxlU3ByaXRlJywgZnVuY3Rpb24gKGNvbmZpZywgYWRkVG9TY2VuZSlcclxue1xyXG4gICAgaWYgKGNvbmZpZyA9PT0gdW5kZWZpbmVkKSB7IGNvbmZpZyA9IHt9OyB9XHJcblxyXG4gICAgdmFyIHggPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ3gnLCAwKTtcclxuICAgIHZhciB5ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICd5JywgMCk7XHJcbiAgICB2YXIgd2lkdGggPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ3dpZHRoJywgNTEyKTtcclxuICAgIHZhciBoZWlnaHQgPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ2hlaWdodCcsIDUxMik7XHJcbiAgICB2YXIga2V5ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdrZXknLCAnJyk7XHJcbiAgICB2YXIgZnJhbWUgPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ2ZyYW1lJywgJycpO1xyXG5cclxuICAgIHZhciB0aWxlID0gbmV3IFRpbGVTcHJpdGUodGhpcy5zY2VuZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwga2V5LCBmcmFtZSk7XHJcblxyXG4gICAgaWYgKGFkZFRvU2NlbmUgIT09IHVuZGVmaW5lZClcclxuICAgIHtcclxuICAgICAgICBjb25maWcuYWRkID0gYWRkVG9TY2VuZTtcclxuICAgIH1cclxuXHJcbiAgICBCdWlsZEdhbWVPYmplY3QodGhpcy5zY2VuZSwgdGlsZSwgY29uZmlnKTtcclxuXHJcbiAgICByZXR1cm4gdGlsZTtcclxufSk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteCreator.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteFactory.js":
/*!*****************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteFactory.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar TileSprite = __webpack_require__(/*! ./TileSprite */ \"./node_modules/phaser/src/gameobjects/tilesprite/TileSprite.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new TileSprite Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the TileSprite Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#tileSprite\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {integer} width - The width of the Game Object. If zero it will use the size of the texture frame.\r\n * @param {integer} height - The height of the Game Object. If zero it will use the size of the texture frame.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n *\r\n * @return {Phaser.GameObjects.TileSprite} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('tileSprite', function (x, y, width, height, key, frame)\r\n{\r\n return this.displayList.add(new TileSprite(this.scene, x, y, width, height, key, frame));\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n// There are several properties available to use:\r\n//\r\n// this.scene - a reference to the Scene that owns the GameObjectFactory\r\n// this.displayList - a reference to the Display List the Scene owns\r\n// this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90aWxlc3ByaXRlL1RpbGVTcHJpdGVGYWN0b3J5LmpzP2Q2MjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLG9GQUFjO0FBQ3ZDLHdCQUF3QixtQkFBTyxDQUFDLHdGQUFzQjs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEIsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90aWxlc3ByaXRlL1RpbGVTcHJpdGVGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgVGlsZVNwcml0ZSA9IHJlcXVpcmUoJy4vVGlsZVNwcml0ZScpO1xyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgVGlsZVNwcml0ZSBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFRpbGVTcHJpdGUgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I3RpbGVTcHJpdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBHYW1lIE9iamVjdC4gSWYgemVybyBpdCB3aWxsIHVzZSB0aGUgc2l6ZSBvZiB0aGUgdGV4dHVyZSBmcmFtZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBHYW1lIE9iamVjdC4gSWYgemVybyBpdCB3aWxsIHVzZSB0aGUgc2l6ZSBvZiB0aGUgdGV4dHVyZSBmcmFtZS5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRleHR1cmUgLSBUaGUga2V5IG9mIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCB1c2UgdG8gcmVuZGVyIHdpdGgsIGFzIHN0b3JlZCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcil9IFtmcmFtZV0gLSBBbiBvcHRpb25hbCBmcmFtZSBmcm9tIHRoZSBUZXh0dXJlIHRoaXMgR2FtZSBPYmplY3QgaXMgcmVuZGVyaW5nIHdpdGguXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RGYWN0b3J5LnJlZ2lzdGVyKCd0aWxlU3ByaXRlJywgZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIGtleSwgZnJhbWUpXHJcbntcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXlMaXN0LmFkZChuZXcgVGlsZVNwcml0ZSh0aGlzLnNjZW5lLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBrZXksIGZyYW1lKSk7XHJcbn0pO1xyXG5cclxuLy8gIFdoZW4gcmVnaXN0ZXJpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uICd0aGlzJyByZWZlcnMgdG8gdGhlIEdhbWVPYmplY3RGYWN0b3J5IGNvbnRleHQuXHJcbi8vXHJcbi8vICBUaGVyZSBhcmUgc2V2ZXJhbCBwcm9wZXJ0aWVzIGF2YWlsYWJsZSB0byB1c2U6XHJcbi8vXHJcbi8vICB0aGlzLnNjZW5lIC0gYSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgb3ducyB0aGUgR2FtZU9iamVjdEZhY3RvcnlcclxuLy8gIHRoaXMuZGlzcGxheUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgRGlzcGxheSBMaXN0IHRoZSBTY2VuZSBvd25zXHJcbi8vICB0aGlzLnVwZGF0ZUxpc3QgLSBhIHJlZmVyZW5jZSB0byB0aGUgVXBkYXRlIExpc3QgdGhlIFNjZW5lIG93bnNcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteRender.js":
/*!****************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteRender.js ***!
\****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./TileSpriteWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./TileSpriteCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90aWxlc3ByaXRlL1RpbGVTcHJpdGVSZW5kZXIuanM/MDU1NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsaUVBQWtCO0FBQzVDLG1CQUFtQixtQkFBTyxDQUFDLGlFQUFrQjs7QUFFN0MsSUFBSSxJQUFxQjtBQUN6QjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLDhHQUEyQjtBQUNyRDs7QUFFQSxJQUFJLElBQXNCO0FBQzFCO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsZ0hBQTRCO0FBQ3ZEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90aWxlc3ByaXRlL1RpbGVTcHJpdGVSZW5kZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL05PT1AnKTtcclxudmFyIHJlbmRlckNhbnZhcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL05PT1AnKTtcclxuXHJcbmlmICh0eXBlb2YgV0VCR0xfUkVOREVSRVIpXHJcbntcclxuICAgIHJlbmRlcldlYkdMID0gcmVxdWlyZSgnLi9UaWxlU3ByaXRlV2ViR0xSZW5kZXJlcicpO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIENBTlZBU19SRU5ERVJFUilcclxue1xyXG4gICAgcmVuZGVyQ2FudmFzID0gcmVxdWlyZSgnLi9UaWxlU3ByaXRlQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteWebGLRenderer.js":
/*!***********************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteWebGLRenderer.js ***!
\***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Utils = __webpack_require__(/*! ../../renderer/webgl/Utils */ \"./node_modules/phaser/src/renderer/webgl/Utils.js\");\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.TileSprite#renderWebGL\r\n * @since 3.0.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.TileSprite} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar TileSpriteWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n src.updateCanvas();\r\n\r\n var getTint = Utils.getTintAppendFloatAlpha;\r\n\r\n this.pipeline.batchTexture(\r\n src,\r\n src.fillPattern,\r\n src.displayFrame.width * src.tileScaleX, src.displayFrame.height * src.tileScaleY,\r\n src.x, src.y,\r\n src.width, src.height,\r\n src.scaleX, src.scaleY,\r\n src.rotation,\r\n src.flipX, src.flipY,\r\n src.scrollFactorX, src.scrollFactorY,\r\n src.originX * src.width, src.originY * src.height,\r\n 0, 0, src.width, src.height,\r\n getTint(src._tintTL, camera.alpha * src._alphaTL),\r\n getTint(src._tintTR, camera.alpha * src._alphaTR),\r\n getTint(src._tintBL, camera.alpha * src._alphaBL),\r\n getTint(src._tintBR, camera.alpha * src._alphaBR),\r\n (src._isTinted && src.tintFill),\r\n (src.tilePositionX % src.displayFrame.width) / src.displayFrame.width,\r\n (src.tilePositionY % src.displayFrame.height) / src.displayFrame.height,\r\n camera,\r\n parentMatrix\r\n );\r\n};\r\n\r\nmodule.exports = TileSpriteWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy90aWxlc3ByaXRlL1RpbGVTcHJpdGVXZWJHTFJlbmRlcmVyLmpzPzY1NWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRkFBNEI7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvdGlsZXNwcml0ZS9UaWxlU3ByaXRlV2ViR0xSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXIvd2ViZ2wvVXRpbHMnKTtcclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5UaWxlU3ByaXRlI3JlbmRlcldlYkdMXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5XZWJHTC5XZWJHTFJlbmRlcmVyfSByZW5kZXJlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSBXZWJHTCByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuVGlsZVNwcml0ZX0gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIFRpbGVTcHJpdGVXZWJHTFJlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgc3JjLnVwZGF0ZUNhbnZhcygpO1xyXG5cclxuICAgIHZhciBnZXRUaW50ID0gVXRpbHMuZ2V0VGludEFwcGVuZEZsb2F0QWxwaGE7XHJcblxyXG4gICAgdGhpcy5waXBlbGluZS5iYXRjaFRleHR1cmUoXHJcbiAgICAgICAgc3JjLFxyXG4gICAgICAgIHNyYy5maWxsUGF0dGVybixcclxuICAgICAgICBzcmMuZGlzcGxheUZyYW1lLndpZHRoICogc3JjLnRpbGVTY2FsZVgsIHNyYy5kaXNwbGF5RnJhbWUuaGVpZ2h0ICogc3JjLnRpbGVTY2FsZVksXHJcbiAgICAgICAgc3JjLngsIHNyYy55LFxyXG4gICAgICAgIHNyYy53aWR0aCwgc3JjLmhlaWdodCxcclxuICAgICAgICBzcmMuc2NhbGVYLCBzcmMuc2NhbGVZLFxyXG4gICAgICAgIHNyYy5yb3RhdGlvbixcclxuICAgICAgICBzcmMuZmxpcFgsIHNyYy5mbGlwWSxcclxuICAgICAgICBzcmMuc2Nyb2xsRmFjdG9yWCwgc3JjLnNjcm9sbEZhY3RvclksXHJcbiAgICAgICAgc3JjLm9yaWdpblggKiBzcmMud2lkdGgsIHNyYy5vcmlnaW5ZICogc3JjLmhlaWdodCxcclxuICAgICAgICAwLCAwLCBzcmMud2lkdGgsIHNyYy5oZWlnaHQsXHJcbiAgICAgICAgZ2V0VGludChzcmMuX3RpbnRUTCwgY2FtZXJhLmFscGhhICogc3JjLl9hbHBoYVRMKSxcclxuICAgICAgICBnZXRUaW50KHNyYy5fdGludFRSLCBjYW1lcmEuYWxwaGEgKiBzcmMuX2FscGhhVFIpLFxyXG4gICAgICAgIGdldFRpbnQoc3JjLl90aW50QkwsIGNhbWVyYS5hbHBoYSAqIHNyYy5fYWxwaGFCTCksXHJcbiAgICAgICAgZ2V0VGludChzcmMuX3RpbnRCUiwgY2FtZXJhLmFscGhhICogc3JjLl9hbHBoYUJSKSxcclxuICAgICAgICAoc3JjLl9pc1RpbnRlZCAmJiBzcmMudGludEZpbGwpLFxyXG4gICAgICAgIChzcmMudGlsZVBvc2l0aW9uWCAlIHNyYy5kaXNwbGF5RnJhbWUud2lkdGgpIC8gc3JjLmRpc3BsYXlGcmFtZS53aWR0aCxcclxuICAgICAgICAoc3JjLnRpbGVQb3NpdGlvblkgJSBzcmMuZGlzcGxheUZyYW1lLmhlaWdodCkgLyBzcmMuZGlzcGxheUZyYW1lLmhlaWdodCxcclxuICAgICAgICBjYW1lcmEsXHJcbiAgICAgICAgcGFyZW50TWF0cml4XHJcbiAgICApO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUaWxlU3ByaXRlV2ViR0xSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/tilesprite/TileSpriteWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/video/Video.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/video/Video.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Clamp = __webpack_require__(/*! ../../math/Clamp */ \"./node_modules/phaser/src/math/Clamp.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/gameobjects/events/index.js\");\r\nvar GameEvents = __webpack_require__(/*! ../../core/events/ */ \"./node_modules/phaser/src/core/events/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar SoundEvents = __webpack_require__(/*! ../../sound/events/ */ \"./node_modules/phaser/src/sound/events/index.js\");\r\nvar UUID = __webpack_require__(/*! ../../utils/string/UUID */ \"./node_modules/phaser/src/utils/string/UUID.js\");\r\nvar VideoRender = __webpack_require__(/*! ./VideoRender */ \"./node_modules/phaser/src/gameobjects/video/VideoRender.js\");\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Video Game Object.\r\n * \r\n * This Game Object is capable of handling playback of a previously loaded video from the Phaser Video Cache,\r\n * or playing a video based on a given URL. Videos can be either local, or streamed.\r\n * \r\n * ```javascript\r\n * preload () {\r\n * this.load.video('pixar', 'nemo.mp4');\r\n * }\r\n * \r\n * create () {\r\n * this.add.video(400, 300, 'pixar');\r\n * }\r\n * ```\r\n * \r\n * To all intents and purposes, a video is a standard Game Object, just like a Sprite. And as such, you can do\r\n * all the usual things to it, such as scaling, rotating, cropping, tinting, making interactive, giving a\r\n * physics body, etc.\r\n * \r\n * Transparent videos are also possible via the WebM file format. Providing the video file has was encoded with\r\n * an alpha channel, and providing the browser supports WebM playback (not all of them do), then it will render\r\n * in-game with full transparency.\r\n * \r\n * ### Autoplaying Videos\r\n * \r\n * Videos can only autoplay if the browser has been unlocked with an interaction, or satisfies the MEI settings.\r\n * The policies that control autoplaying are vast and vary between browser.\r\n * You can, ahd should, read more about it here: https://developer.mozilla.org/en-US/docs/Web/Media/Autoplay_guide\r\n * \r\n * If your video doesn't contain any audio, then set the `noAudio` parameter to `true` when the video is _loaded_,\r\n * and it will often allow the video to play immediately:\r\n * \r\n * ```javascript\r\n * preload () {\r\n * this.load.video('pixar', 'nemo.mp4', 'loadeddata', false, true);\r\n * }\r\n * ```\r\n * \r\n * The 5th parameter in the load call tells Phaser that the video doesn't contain any audio tracks. Video without\r\n * audio can autoplay without requiring a user interaction. Video with audio cannot do this unless it satisfies\r\n * the browsers MEI settings. See the MDN Autoplay Guide for further details.\r\n * \r\n * Note that due to a bug in IE11 you cannot play a video texture to a Sprite in WebGL. For IE11 force Canvas mode.\r\n * \r\n * More details about video playback and the supported media formats can be found on MDN:\r\n * \r\n * https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement\r\n * https://developer.mozilla.org/en-US/docs/Web/Media/Formats\r\n *\r\n * @class Video\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.20.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Alpha\r\n * @extends Phaser.GameObjects.Components.BlendMode\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.Flip\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Mask\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Pipeline\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Size\r\n * @extends Phaser.GameObjects.Components.TextureCrop\r\n * @extends Phaser.GameObjects.Components.Tint\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} [key] - Optional key of the Video this Game Object will play, as stored in the Video Cache.\r\n */\r\nvar Video = new Class({\r\n\r\n Extends: GameObject,\r\n\r\n Mixins: [\r\n Components.Alpha,\r\n Components.BlendMode,\r\n Components.Depth,\r\n Components.Flip,\r\n Components.GetBounds,\r\n Components.Mask,\r\n Components.Origin,\r\n Components.Pipeline,\r\n Components.ScrollFactor,\r\n Components.Size,\r\n Components.TextureCrop,\r\n Components.Tint,\r\n Components.Transform,\r\n Components.Visible,\r\n VideoRender\r\n ],\r\n\r\n initialize:\r\n\r\n function Video (scene, x, y, key)\r\n {\r\n GameObject.call(this, scene, 'Video');\r\n\r\n /**\r\n * A reference to the HTML Video Element this Video Game Object is playing.\r\n * Will be `null` until a video is loaded for playback.\r\n *\r\n * @name Phaser.GameObjects.Video#video\r\n * @type {?HTMLVideoElement}\r\n * @since 3.20.0\r\n */\r\n this.video = null;\r\n\r\n /**\r\n * The Phaser Texture this Game Object is using to render the video to.\r\n * Will be `null` until a video is loaded for playback.\r\n *\r\n * @name Phaser.GameObjects.Video#videoTexture\r\n * @type {?Phaser.Textures.Texture}\r\n * @since 3.20.0\r\n */\r\n this.videoTexture = null;\r\n\r\n /**\r\n * A reference to the TextureSource belong to the `videoTexture` Texture object.\r\n * Will be `null` until a video is loaded for playback.\r\n *\r\n * @name Phaser.GameObjects.Video#videoTextureSource\r\n * @type {?Phaser.Textures.TextureSource}\r\n * @since 3.20.0\r\n */\r\n this.videoTextureSource = null;\r\n\r\n /**\r\n * A Phaser CanvasTexture instance that holds the most recent snapshot taken from the video.\r\n * This will only be set if `snapshot` or `snapshotArea` have been called, and will be `null` until that point.\r\n *\r\n * @name Phaser.GameObjects.Video#snapshotTexture\r\n * @type {?Phaser.Textures.CanvasTexture}\r\n * @since 3.20.0\r\n */\r\n this.snapshotTexture = null;\r\n\r\n /**\r\n * If you have saved this video to a texture via the `saveTexture` method, this controls if the video\r\n * is rendered with `flipY` in WebGL or not. You often need to set this if you wish to use the video texture\r\n * as the input source for a shader. If you find your video is appearing upside down within a shader or\r\n * custom pipeline, flip this property.\r\n *\r\n * @name Phaser.GameObjects.Video#flipY\r\n * @type {boolean}\r\n * @since 3.20.0\r\n */\r\n this.flipY = false;\r\n\r\n /**\r\n * The key used by the texture as stored in the Texture Manager.\r\n *\r\n * @name Phaser.GameObjects.Video#_key\r\n * @type {string}\r\n * @private\r\n * @since 3.20.0\r\n */\r\n this._key = UUID();\r\n\r\n /**\r\n * An internal flag holding the current state of the video lock, should document interaction be required\r\n * before playback can begin.\r\n *\r\n * @name Phaser.GameObjects.Video#touchLocked\r\n * @type {boolean}\r\n * @since 3.20.0\r\n */\r\n this.touchLocked = true;\r\n\r\n /**\r\n * Should the video auto play when document interaction is required and happens?\r\n *\r\n * @name Phaser.GameObjects.Video#playWhenUnlocked\r\n * @type {boolean}\r\n * @since 3.20.0\r\n */\r\n this.playWhenUnlocked = false;\r\n\r\n /**\r\n * When starting playback of a video Phaser will monitor its `readyState` using a `setTimeout` call.\r\n * The `setTimeout` happens once every `Video.retryInterval` ms. It will carry on monitoring the video\r\n * state in this manner until the `retryLimit` is reached and then abort.\r\n *\r\n * @name Phaser.GameObjects.Video#retryLimit\r\n * @type {integer}\r\n * @since 3.20.0\r\n */\r\n this.retryLimit = 20;\r\n\r\n /**\r\n * The current retry attempt.\r\n *\r\n * @name Phaser.GameObjects.Video#retry\r\n * @type {integer}\r\n * @since 3.20.0\r\n */\r\n this.retry = 0;\r\n\r\n /**\r\n * The number of ms between each retry while monitoring the ready state of a downloading video.\r\n *\r\n * @name Phaser.GameObjects.Video#retryInterval\r\n * @type {integer}\r\n * @since 3.20.0\r\n */\r\n this.retryInterval = 500;\r\n\r\n /**\r\n * The setTimeout callback ID.\r\n *\r\n * @name Phaser.GameObjects.Video#_retryID\r\n * @type {integer}\r\n * @private\r\n * @since 3.20.0\r\n */\r\n this._retryID = null;\r\n\r\n /**\r\n * The video was muted due to a system event, such as the game losing focus.\r\n *\r\n * @name Phaser.GameObjects.Video#_systemMuted\r\n * @type {boolean}\r\n * @private\r\n * @since 3.20.0\r\n */\r\n this._systemMuted = false;\r\n\r\n /**\r\n * The video was muted due to game code, not a system event.\r\n *\r\n * @name Phaser.GameObjects.Video#_codeMuted\r\n * @type {boolean}\r\n * @private\r\n * @since 3.20.0\r\n */\r\n this._codeMuted = false;\r\n\r\n /**\r\n * The video was paused due to a system event, such as the game losing focus.\r\n *\r\n * @name Phaser.GameObjects.Video#_systemPaused\r\n * @type {boolean}\r\n * @private\r\n * @since 3.20.0\r\n */\r\n this._systemPaused = false;\r\n\r\n /**\r\n * The video was paused due to game code, not a system event.\r\n *\r\n * @name Phaser.GameObjects.Video#_codePaused\r\n * @type {boolean}\r\n * @private\r\n * @since 3.20.0\r\n */\r\n this._codePaused = false;\r\n\r\n /**\r\n * The locally bound event callback handlers.\r\n *\r\n * @name Phaser.GameObjects.Video#_callbacks\r\n * @type {any}\r\n * @private\r\n * @since 3.20.0\r\n */\r\n this._callbacks = {\r\n play: this.playHandler.bind(this),\r\n error: this.loadErrorHandler.bind(this),\r\n end: this.completeHandler.bind(this),\r\n time: this.timeUpdateHandler.bind(this),\r\n seeking: this.seekingHandler.bind(this),\r\n seeked: this.seekedHandler.bind(this)\r\n };\r\n\r\n /**\r\n * The internal crop data object, as used by `setCrop` and passed to the `Frame.setCropUVs` method.\r\n *\r\n * @name Phaser.GameObjects.Video#_crop\r\n * @type {object}\r\n * @private\r\n * @since 3.20.0\r\n */\r\n this._crop = this.resetCropObject();\r\n\r\n /**\r\n * An object containing in and out markers for sequence playback.\r\n *\r\n * @name Phaser.GameObjects.Video#markers\r\n * @type {any}\r\n * @since 3.20.0\r\n */\r\n this.markers = {};\r\n\r\n /**\r\n * The in marker.\r\n *\r\n * @name Phaser.GameObjects.Video#_markerIn\r\n * @type {integer}\r\n * @private\r\n * @since 3.20.0\r\n */\r\n this._markerIn = -1;\r\n\r\n /**\r\n * The out marker.\r\n *\r\n * @name Phaser.GameObjects.Video#_markerOut\r\n * @type {integer}\r\n * @private\r\n * @since 3.20.0\r\n */\r\n this._markerOut = MATH_CONST.MAX_SAFE_INTEGER;\r\n\r\n /**\r\n * The last time the TextureSource was updated.\r\n *\r\n * @name Phaser.GameObjects.Video#_lastUpdate\r\n * @type {integer}\r\n * @private\r\n * @since 3.20.0\r\n */\r\n this._lastUpdate = 0;\r\n\r\n /**\r\n * The key of the video being played from the Video cache, if any.\r\n *\r\n * @name Phaser.GameObjects.Video#_cacheKey\r\n * @type {string}\r\n * @private\r\n * @since 3.20.0\r\n */\r\n this._cacheKey = '';\r\n\r\n /**\r\n * Is the video currently seeking?\r\n *\r\n * @name Phaser.GameObjects.Video#_isSeeking\r\n * @type {boolean}\r\n * @private\r\n * @since 3.20.0\r\n */\r\n this._isSeeking = false;\r\n\r\n /**\r\n * Should the Video element that this Video is using, be removed from the DOM\r\n * when this Video is destroyed?\r\n *\r\n * @name Phaser.GameObjects.Video#removeVideoElementOnDestroy\r\n * @type {boolean}\r\n * @since 3.21.0\r\n */\r\n this.removeVideoElementOnDestroy = false;\r\n\r\n this.setPosition(x, y);\r\n this.initPipeline();\r\n\r\n if (key)\r\n {\r\n this.changeSource(key, false);\r\n }\r\n\r\n var game = scene.sys.game.events;\r\n\r\n game.on(GameEvents.PAUSE, this.globalPause, this);\r\n game.on(GameEvents.RESUME, this.globalResume, this);\r\n\r\n var sound = scene.sys.sound;\r\n\r\n if (sound)\r\n {\r\n sound.on(SoundEvents.GLOBAL_MUTE, this.globalMute, this);\r\n }\r\n },\r\n\r\n /**\r\n * Starts this video playing.\r\n *\r\n * If the video is already playing, or has been queued to play with `changeSource` then this method just returns.\r\n * \r\n * Videos can only autoplay if the browser has been unlocked. This happens if you have interacted with the browser, i.e.\r\n * by clicking on it or pressing a key, or due to server settings. The policies that control autoplaying are vast and\r\n * vary between browser. You can read more here: https://developer.mozilla.org/en-US/docs/Web/Media/Autoplay_guide\r\n * \r\n * If your video doesn't contain any audio, then set the `noAudio` parameter to `true` when the video is loaded,\r\n * and it will often allow the video to play immediately:\r\n * \r\n * ```javascript\r\n * preload () {\r\n * this.load.video('pixar', 'nemo.mp4', 'loadeddata', false, true);\r\n * }\r\n * ```\r\n * \r\n * The 5th parameter in the load call tells Phaser that the video doesn't contain any audio tracks. Video without\r\n * audio can autoplay without requiring a user interaction. Video with audio cannot do this unless it satisfies\r\n * the browsers MEI settings. See the MDN Autoplay Guide for details.\r\n * \r\n * If you need audio in your videos, then you'll have to consider the fact that the video cannot start playing until the\r\n * user has interacted with the browser, into your game flow.\r\n *\r\n * @method Phaser.GameObjects.Video#play\r\n * @since 3.20.0\r\n * \r\n * @param {boolean} [loop=false] - Should the video loop automatically when it reaches the end? Please note that not all browsers support _seamless_ video looping for all encoding formats.\r\n * @param {integer} [markerIn] - Optional in marker time, in seconds, for playback of a sequence of the video.\r\n * @param {integer} [markerOut] - Optional out marker time, in seconds, for playback of a sequence of the video.\r\n * \r\n * @return {this} This Video Game Object for method chaining.\r\n */\r\n play: function (loop, markerIn, markerOut)\r\n {\r\n if ((this.touchLocked && this.playWhenUnlocked) || this.isPlaying())\r\n {\r\n return this;\r\n }\r\n\r\n var video = this.video;\r\n\r\n if (!video)\r\n {\r\n console.warn('Video not loaded');\r\n\r\n return this;\r\n }\r\n\r\n if (loop === undefined) { loop = video.loop; }\r\n\r\n var sound = this.scene.sys.sound;\r\n \r\n if (sound && sound.mute)\r\n {\r\n // Mute will be set based on the global mute state of the Sound Manager (if there is one)\r\n this.setMute(true);\r\n }\r\n\r\n if (!isNaN(markerIn))\r\n {\r\n this._markerIn = markerIn;\r\n }\r\n\r\n if (!isNaN(markerOut) && markerOut > markerIn)\r\n {\r\n this._markerOut = markerOut;\r\n }\r\n\r\n video.loop = loop;\r\n\r\n var callbacks = this._callbacks;\r\n\r\n var playPromise = video.play();\r\n\r\n if (playPromise !== undefined)\r\n {\r\n playPromise.then(this.playPromiseSuccessHandler.bind(this)).catch(this.playPromiseErrorHandler.bind(this));\r\n }\r\n else\r\n {\r\n // Old-school browsers with no Promises\r\n video.addEventListener('playing', callbacks.play, true);\r\n\r\n // If video hasn't downloaded properly yet ...\r\n if (video.readyState < 2)\r\n {\r\n this.retry = this.retryLimit;\r\n\r\n this._retryID = window.setTimeout(this.checkVideoProgress.bind(this), this.retryInterval);\r\n }\r\n }\r\n\r\n // Set these _after_ calling `play` or they don't fire (useful, thanks browsers)\r\n video.addEventListener('ended', callbacks.end, true);\r\n video.addEventListener('timeupdate', callbacks.time, true);\r\n video.addEventListener('seeking', callbacks.seeking, true);\r\n video.addEventListener('seeked', callbacks.seeked, true);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * This method allows you to change the source of the current video element. It works by first stopping the\r\n * current video, if playing. Then deleting the video texture, if one has been created. Finally, it makes a\r\n * new video texture and starts playback of the new source through the existing video element.\r\n * \r\n * The reason you may wish to do this is because videos that require interaction to unlock, remain in an unlocked\r\n * state, even if you change the source of the video. By changing the source to a new video you avoid having to\r\n * go through the unlock process again.\r\n *\r\n * @method Phaser.GameObjects.Video#changeSource\r\n * @since 3.20.0\r\n * \r\n * @param {string} key - The key of the Video this Game Object will swap to playing, as stored in the Video Cache.\r\n * @param {boolean} [autoplay=true] - Should the video start playing immediately, once the swap is complete?\r\n * @param {boolean} [loop=false] - Should the video loop automatically when it reaches the end? Please note that not all browsers support _seamless_ video looping for all encoding formats.\r\n * @param {integer} [markerIn] - Optional in marker time, in seconds, for playback of a sequence of the video.\r\n * @param {integer} [markerOut] - Optional out marker time, in seconds, for playback of a sequence of the video.\r\n * \r\n * @return {this} This Video Game Object for method chaining.\r\n */\r\n changeSource: function (key, autoplay, loop, markerIn, markerOut)\r\n {\r\n if (autoplay === undefined) { autoplay = true; }\r\n\r\n var currentVideo = this.video;\r\n\r\n if (currentVideo)\r\n {\r\n this.stop();\r\n }\r\n\r\n var newVideo = this.scene.sys.cache.video.get(key);\r\n\r\n if (newVideo)\r\n {\r\n this.video = newVideo;\r\n\r\n this._cacheKey = key;\r\n\r\n this._codePaused = newVideo.paused;\r\n this._codeMuted = newVideo.muted;\r\n\r\n if (this.videoTexture)\r\n {\r\n this.scene.sys.textures.remove(this._key);\r\n\r\n this.videoTexture = this.scene.sys.textures.create(this._key, newVideo, newVideo.videoWidth, newVideo.videoHeight);\r\n this.videoTextureSource = this.videoTexture.source[0];\r\n this.videoTexture.add('__BASE', 0, 0, 0, newVideo.videoWidth, newVideo.videoHeight);\r\n \r\n this.setTexture(this.videoTexture);\r\n this.setSizeToFrame();\r\n this.updateDisplayOrigin();\r\n\r\n this.emit(Events.VIDEO_CREATED, this, newVideo.videoWidth, newVideo.videoHeight);\r\n }\r\n else\r\n {\r\n this.updateTexture();\r\n }\r\n\r\n newVideo.currentTime = 0;\r\n\r\n this._lastUpdate = 0;\r\n\r\n if (autoplay)\r\n {\r\n this.play(loop, markerIn, markerOut);\r\n }\r\n }\r\n else\r\n {\r\n this.video = null;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Adds a sequence marker to this video.\r\n * \r\n * Markers allow you to split a video up into sequences, delineated by a start and end time, given in seconds.\r\n * \r\n * You can then play back specific markers via the `playMarker` method.\r\n * \r\n * Note that marker timing is _not_ frame-perfect. You should construct your videos in such a way that you allow for\r\n * plenty of extra padding before and after each sequence to allow for discrepancies in browser seek and currentTime accuracy.\r\n * \r\n * See https://github.com/w3c/media-and-entertainment/issues/4 for more details about this issue.\r\n *\r\n * @method Phaser.GameObjects.Video#addMarker\r\n * @since 3.20.0\r\n * \r\n * @param {string} key - A unique name to give this marker.\r\n * @param {integer} markerIn - The time, in seconds, representing the start of this marker.\r\n * @param {integer} markerOut - The time, in seconds, representing the end of this marker.\r\n * \r\n * @return {this} This Video Game Object for method chaining.\r\n */\r\n addMarker: function (key, markerIn, markerOut)\r\n {\r\n if (!isNaN(markerIn) && markerIn >= 0 && !isNaN(markerOut))\r\n {\r\n this.markers[key] = [ markerIn, markerOut ];\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Plays a pre-defined sequence in this video.\r\n * \r\n * Markers allow you to split a video up into sequences, delineated by a start and end time, given in seconds and\r\n * specified via the `addMarker` method.\r\n * \r\n * Note that marker timing is _not_ frame-perfect. You should construct your videos in such a way that you allow for\r\n * plenty of extra padding before and after each sequence to allow for discrepancies in browser seek and currentTime accuracy.\r\n * \r\n * See https://github.com/w3c/media-and-entertainment/issues/4 for more details about this issue.\r\n *\r\n * @method Phaser.GameObjects.Video#playMarker\r\n * @since 3.20.0\r\n * \r\n * @param {string} key - The name of the marker sequence to play.\r\n * @param {boolean} [loop=false] - Should the video loop automatically when it reaches the end? Please note that not all browsers support _seamless_ video looping for all encoding formats.\r\n * \r\n * @return {this} This Video Game Object for method chaining.\r\n */\r\n playMarker: function (key, loop)\r\n {\r\n var marker = this.markers[key];\r\n\r\n if (marker)\r\n {\r\n this.play(loop, marker[0], marker[1]);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Removes a previously set marker from this video.\r\n * \r\n * If the marker is currently playing it will _not_ stop playback.\r\n *\r\n * @method Phaser.GameObjects.Video#removeMarker\r\n * @since 3.20.0\r\n * \r\n * @param {string} key - The name of the marker to remove.\r\n * \r\n * @return {this} This Video Game Object for method chaining.\r\n */\r\n removeMarker: function (key)\r\n {\r\n delete this.markers[key];\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Takes a snapshot of the current frame of the video and renders it to a CanvasTexture object,\r\n * which is then returned. You can optionally resize the grab by passing a width and height.\r\n * \r\n * This method returns a reference to the `Video.snapshotTexture` object. Calling this method\r\n * multiple times will overwrite the previous snapshot with the most recent one.\r\n *\r\n * @method Phaser.GameObjects.Video#snapshot\r\n * @since 3.20.0\r\n * \r\n * @param {integer} [width] - The width of the resulting CanvasTexture.\r\n * @param {integer} [height] - The height of the resulting CanvasTexture.\r\n * \r\n * @return {Phaser.Textures.CanvasTexture} \r\n */\r\n snapshot: function (width, height)\r\n {\r\n if (width === undefined) { width = this.width; }\r\n if (height === undefined) { height = this.height; }\r\n\r\n return this.snapshotArea(0, 0, this.width, this.height, width, height);\r\n },\r\n\r\n /**\r\n * Takes a snapshot of the specified area of the current frame of the video and renders it to a CanvasTexture object,\r\n * which is then returned. You can optionally resize the grab by passing a different `destWidth` and `destHeight`.\r\n * \r\n * This method returns a reference to the `Video.snapshotTexture` object. Calling this method\r\n * multiple times will overwrite the previous snapshot with the most recent one.\r\n *\r\n * @method Phaser.GameObjects.Video#snapshotArea\r\n * @since 3.20.0\r\n * \r\n * @param {integer} [x=0] - The horizontal location of the top-left of the area to grab from.\r\n * @param {integer} [y=0] - The vertical location of the top-left of the area to grab from.\r\n * @param {integer} [srcWidth] - The width of area to grab from the video. If not given it will grab the full video dimensions.\r\n * @param {integer} [srcHeight] - The height of area to grab from the video. If not given it will grab the full video dimensions.\r\n * @param {integer} [destWidth] - The destination width of the grab, allowing you to resize it.\r\n * @param {integer} [destHeight] - The destination height of the grab, allowing you to resize it.\r\n * \r\n * @return {Phaser.Textures.CanvasTexture} \r\n */\r\n snapshotArea: function (x, y, srcWidth, srcHeight, destWidth, destHeight)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n if (srcWidth === undefined) { srcWidth = this.width; }\r\n if (srcHeight === undefined) { srcHeight = this.height; }\r\n if (destWidth === undefined) { destWidth = srcWidth; }\r\n if (destHeight === undefined) { destHeight = srcHeight; }\r\n\r\n var video = this.video;\r\n var snap = this.snapshotTexture;\r\n\r\n if (!snap)\r\n {\r\n snap = this.scene.sys.textures.createCanvas(UUID(), destWidth, destHeight);\r\n\r\n this.snapshotTexture = snap;\r\n\r\n if (video)\r\n {\r\n snap.context.drawImage(video, x, y, srcWidth, srcHeight, 0, 0, destWidth, destHeight);\r\n }\r\n }\r\n else\r\n {\r\n snap.setSize(destWidth, destHeight);\r\n\r\n if (video)\r\n {\r\n snap.context.drawImage(video, x, y, srcWidth, srcHeight, 0, 0, destWidth, destHeight);\r\n }\r\n }\r\n\r\n return snap.update();\r\n },\r\n\r\n /**\r\n * Stores a copy of this Videos `snapshotTexture` in the Texture Manager using the given key.\r\n * \r\n * This texture is created when the `snapshot` or `snapshotArea` methods are called.\r\n * \r\n * After doing this, any texture based Game Object, such as a Sprite, can use the contents of the\r\n * snapshot by using the texture key:\r\n * \r\n * ```javascript\r\n * var vid = this.add.video(0, 0, 'intro');\r\n * \r\n * vid.snapshot();\r\n * \r\n * vid.saveSnapshotTexture('doodle');\r\n * \r\n * this.add.image(400, 300, 'doodle');\r\n * ```\r\n * \r\n * Updating the contents of the `snapshotTexture`, for example by calling `snapshot` again,\r\n * will automatically update _any_ Game Object that is using it as a texture.\r\n * Calling `saveSnapshotTexture` again will not save another copy of the same texture,\r\n * it will just rename the existing one.\r\n * \r\n * By default it will create a single base texture. You can add frames to the texture\r\n * by using the `Texture.add` method. After doing this, you can then allow Game Objects\r\n * to use a specific frame.\r\n *\r\n * @method Phaser.GameObjects.Video#saveSnapshotTexture\r\n * @since 3.20.0\r\n *\r\n * @param {string} key - The unique key to store the texture as within the global Texture Manager.\r\n *\r\n * @return {Phaser.Textures.CanvasTexture} The Texture that was saved.\r\n */\r\n saveSnapshotTexture: function (key)\r\n {\r\n if (this.snapshotTexture)\r\n {\r\n this.scene.sys.textures.renameTexture(this.snapshotTexture.key, key);\r\n }\r\n else\r\n {\r\n this.snapshotTexture = this.scene.sys.textures.createCanvas(key, this.width, this.height);\r\n }\r\n\r\n return this.snapshotTexture;\r\n },\r\n\r\n /**\r\n * Loads a Video from the given URL, ready for playback with the `Video.play` method.\r\n * \r\n * You can control at what point the browser determines the video as being ready for playback via\r\n * the `loadEvent` parameter. See https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement\r\n * for more details.\r\n *\r\n * @method Phaser.GameObjects.Video#loadURL\r\n * @since 3.20.0\r\n * \r\n * @param {string} url - The URL of the video to load or be streamed.\r\n * @param {string} [loadEvent='loadeddata'] - The load event to listen for. Either `loadeddata`, `canplay` or `canplaythrough`.\r\n * @param {boolean} [noAudio=false] - Does the video have an audio track? If not you can enable auto-playing on it.\r\n * \r\n * @return {this} This Video Game Object for method chaining.\r\n */\r\n loadURL: function (url, loadEvent, noAudio)\r\n {\r\n if (loadEvent === undefined) { loadEvent = 'loadeddata'; }\r\n if (noAudio === undefined) { noAudio = false; }\r\n\r\n if (this.video)\r\n {\r\n this.stop();\r\n }\r\n\r\n if (this.videoTexture)\r\n {\r\n this.scene.sys.textures.remove(this._key);\r\n }\r\n\r\n var video = document.createElement('video');\r\n \r\n video.controls = false;\r\n\r\n if (noAudio)\r\n {\r\n video.muted = true;\r\n video.defaultMuted = true;\r\n\r\n video.setAttribute('autoplay', 'autoplay');\r\n }\r\n\r\n video.setAttribute('playsinline', 'playsinline');\r\n video.setAttribute('preload', 'auto');\r\n\r\n video.addEventListener('error', this._callbacks.error, true);\r\n\r\n video.src = url;\r\n\r\n video.load();\r\n\r\n this.video = video;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * This internal method is called automatically if the playback Promise resolves successfully.\r\n *\r\n * @method Phaser.GameObjects.Video#playPromiseSuccessHandler\r\n * @fires Phaser.GameObjects.Events#VIDEO_PLAY\r\n * @private\r\n * @since 3.20.0\r\n */\r\n playPromiseSuccessHandler: function ()\r\n {\r\n this.touchLocked = false;\r\n\r\n this.emit(Events.VIDEO_PLAY, this);\r\n\r\n if (this._markerIn > -1)\r\n {\r\n this.video.currentTime = this._markerIn;\r\n }\r\n },\r\n\r\n /**\r\n * This internal method is called automatically if the playback Promise fails to resolve.\r\n *\r\n * @method Phaser.GameObjects.Video#playPromiseErrorHandler\r\n * @fires Phaser.GameObjects.Events#VIDEO_ERROR\r\n * @private\r\n * @since 3.20.0\r\n * \r\n * @param {any} error - The Promise resolution error.\r\n */\r\n playPromiseErrorHandler: function (error)\r\n {\r\n this.scene.sys.input.once('pointerdown', this.unlockHandler, this);\r\n\r\n this.touchLocked = true;\r\n this.playWhenUnlocked = true;\r\n\r\n this.emit(Events.VIDEO_ERROR, this, error);\r\n },\r\n\r\n /**\r\n * Called when the video emits a `playing` event during load.\r\n * \r\n * This is only listened for if the browser doesn't support Promises.\r\n *\r\n * @method Phaser.GameObjects.Video#playHandler\r\n * @fires Phaser.GameObjects.Events#VIDEO_PLAY\r\n * @since 3.20.0\r\n */\r\n playHandler: function ()\r\n {\r\n this.touchLocked = false;\r\n\r\n this.emit(Events.VIDEO_PLAY, this);\r\n \r\n this.video.removeEventListener('playing', this._callbacks.play, true);\r\n },\r\n\r\n /**\r\n * This internal method is called automatically if the video fails to load.\r\n *\r\n * @method Phaser.GameObjects.Video#loadErrorHandler\r\n * @fires Phaser.GameObjects.Events#VIDEO_ERROR\r\n * @private\r\n * @since 3.20.0\r\n * \r\n * @param {Event} event - The error Event.\r\n */\r\n loadErrorHandler: function (event)\r\n {\r\n this.stop();\r\n\r\n this.emit(Events.VIDEO_ERROR, this, event);\r\n },\r\n\r\n /**\r\n * This internal method is called if the video couldn't be played because it was interaction locked\r\n * by the browser, but an input event has since been received.\r\n *\r\n * @method Phaser.GameObjects.Video#unlockHandler\r\n * @fires Phaser.GameObjects.Events#VIDEO_UNLOCKED\r\n * @fires Phaser.GameObjects.Events#VIDEO_PLAY\r\n * @private\r\n * @since 3.20.0\r\n * \r\n * @param {any} error - The Promise resolution error.\r\n */\r\n unlockHandler: function ()\r\n {\r\n this.touchLocked = false;\r\n this.playWhenUnlocked = false;\r\n\r\n this.emit(Events.VIDEO_UNLOCKED, this);\r\n\r\n if (this._markerIn > -1)\r\n {\r\n this.video.currentTime = this._markerIn;\r\n }\r\n\r\n this.video.play();\r\n\r\n this.emit(Events.VIDEO_PLAY, this);\r\n },\r\n\r\n /**\r\n * Called when the video completes playback, i.e. reaches an `ended` state.\r\n * \r\n * This will never happen if the video is coming from a live stream, where the duration is `Infinity`.\r\n *\r\n * @method Phaser.GameObjects.Video#completeHandler\r\n * @fires Phaser.GameObjects.Events#VIDEO_COMPLETE\r\n * @since 3.20.0\r\n */\r\n completeHandler: function ()\r\n {\r\n this.emit(Events.VIDEO_COMPLETE, this);\r\n },\r\n\r\n /**\r\n * Called when the video emits a `timeUpdate` event during playback.\r\n * \r\n * This event is too slow and irregular to be used for actual video timing or texture updating,\r\n * but we can use it to determine if a video has looped.\r\n *\r\n * @method Phaser.GameObjects.Video#timeUpdateHandler\r\n * @fires Phaser.GameObjects.Events#VIDEO_LOOP\r\n * @since 3.20.0\r\n */\r\n timeUpdateHandler: function ()\r\n {\r\n if (this.video && this.video.currentTime < this._lastUpdate)\r\n {\r\n this.emit(Events.VIDEO_LOOP, this);\r\n\r\n this._lastUpdate = 0;\r\n }\r\n },\r\n\r\n /**\r\n * The internal update step.\r\n *\r\n * @method Phaser.GameObjects.Video#preUpdate\r\n * @private\r\n * @since 3.20.0\r\n */\r\n preUpdate: function ()\r\n {\r\n var video = this.video;\r\n\r\n if (video)\r\n {\r\n var currentTime = video.currentTime;\r\n\r\n // Don't render a new frame unless the video has actually changed time\r\n if (currentTime !== this._lastUpdate)\r\n {\r\n this._lastUpdate = currentTime;\r\n\r\n this.updateTexture();\r\n\r\n if (currentTime >= this._markerOut)\r\n {\r\n if (video.loop)\r\n {\r\n video.currentTime = this._markerIn;\r\n\r\n this.updateTexture();\r\n\r\n this._lastUpdate = currentTime;\r\n\r\n this.emit(Events.VIDEO_LOOP, this);\r\n }\r\n else\r\n {\r\n this.emit(Events.VIDEO_COMPLETE, this);\r\n\r\n this.stop();\r\n }\r\n }\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Internal callback that monitors the download progress of a video after changing its source.\r\n *\r\n * @method Phaser.GameObjects.Video#checkVideoProgress\r\n * @fires Phaser.GameObjects.Events#VIDEO_TIMEOUT\r\n * @private\r\n * @since 3.20.0\r\n */\r\n checkVideoProgress: function ()\r\n {\r\n if (this.video.readyState >= 2)\r\n {\r\n // We've got enough data to update the texture for playback\r\n this.updateTexture();\r\n }\r\n else\r\n {\r\n this.retry--;\r\n\r\n if (this.retry > 0)\r\n {\r\n this._retryID = window.setTimeout(this.checkVideoProgress.bind(this), this.retryInterval);\r\n }\r\n else\r\n {\r\n this.emit(Events.VIDEO_TIMEOUT, this);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Internal method that is called when enough video data has been received in order to create a texture\r\n * from it. The texture is assigned to the `Video.videoTexture` property and given a base frame that\r\n * encompases the whole video size.\r\n *\r\n * @method Phaser.GameObjects.Video#updateTexture\r\n * @since 3.20.0\r\n */\r\n updateTexture: function ()\r\n {\r\n var video = this.video;\r\n\r\n var width = video.videoWidth;\r\n var height = video.videoHeight;\r\n\r\n if (!this.videoTexture)\r\n {\r\n this.videoTexture = this.scene.sys.textures.create(this._key, video, width, height);\r\n this.videoTextureSource = this.videoTexture.source[0];\r\n this.videoTexture.add('__BASE', 0, 0, 0, width, height);\r\n \r\n this.setTexture(this.videoTexture);\r\n this.setSizeToFrame();\r\n this.updateDisplayOrigin();\r\n \r\n this.emit(Events.VIDEO_CREATED, this, width, height);\r\n }\r\n else\r\n {\r\n var textureSource = this.videoTextureSource;\r\n\r\n if (textureSource.source !== video)\r\n {\r\n textureSource.source = video;\r\n textureSource.width = width;\r\n textureSource.height = height;\r\n }\r\n \r\n textureSource.update();\r\n }\r\n },\r\n\r\n /**\r\n * Returns the key of the currently played video, as stored in the Video Cache.\r\n * If the video did not come from the cache this will return an empty string.\r\n *\r\n * @method Phaser.GameObjects.Video#getVideoKey\r\n * @since 3.20.0\r\n * \r\n * @return {string} The key of the video being played from the Video Cache, if any.\r\n */\r\n getVideoKey: function ()\r\n {\r\n return this._cacheKey;\r\n },\r\n\r\n /**\r\n * Seeks to a given point in the video. The value is given as a float between 0 and 1,\r\n * where 0 represents the start of the video and 1 represents the end.\r\n * \r\n * Seeking only works if the video has a duration, so will not work for live streams.\r\n * \r\n * When seeking begins, this video will emit a `seeking` event. When the video completes\r\n * seeking (i.e. reaches its designated timestamp) it will emit a `seeked` event.\r\n * \r\n * If you wish to seek based on time instead, use the `Video.setCurrentTime` method.\r\n *\r\n * @method Phaser.GameObjects.Video#seekTo\r\n * @since 3.20.0\r\n * \r\n * @param {number} value - The point in the video to seek to. A value between 0 and 1.\r\n * \r\n * @return {this} This Video Game Object for method chaining.\r\n */\r\n seekTo: function (value)\r\n {\r\n var video = this.video;\r\n\r\n if (video)\r\n {\r\n var duration = video.duration;\r\n\r\n if (duration !== Infinity && !isNaN(duration))\r\n {\r\n var seekTime = duration * value;\r\n\r\n this.setCurrentTime(seekTime);\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * A double-precision floating-point value indicating the current playback time in seconds.\r\n * If the media has not started to play and has not been seeked, this value is the media's initial playback time.\r\n *\r\n * @method Phaser.GameObjects.Video#getCurrentTime\r\n * @since 3.20.0\r\n * \r\n * @return {number} A double-precision floating-point value indicating the current playback time in seconds.\r\n */\r\n getCurrentTime: function ()\r\n {\r\n return (this.video) ? this.video.currentTime : 0;\r\n },\r\n\r\n /**\r\n * Seeks to a given playback time in the video. The value is given in _seconds_ or as a string.\r\n * \r\n * Seeking only works if the video has a duration, so will not work for live streams.\r\n * \r\n * When seeking begins, this video will emit a `seeking` event. When the video completes\r\n * seeking (i.e. reaches its designated timestamp) it will emit a `seeked` event.\r\n * \r\n * You can provide a string prefixed with either a `+` or a `-`, such as `+2.5` or `-2.5`.\r\n * In this case it will seek to +/- the value given, relative to the _current time_.\r\n * \r\n * If you wish to seek based on a duration percentage instead, use the `Video.seekTo` method.\r\n *\r\n * @method Phaser.GameObjects.Video#setCurrentTime\r\n * @since 3.20.0\r\n * \r\n * @param {(string|number)} value - The playback time to seek to in seconds. Can be expressed as a string, such as `+2` to seek 2 seconds ahead from the current time.\r\n * \r\n * @return {this} This Video Game Object for method chaining.\r\n */\r\n setCurrentTime: function (value)\r\n {\r\n var video = this.video;\r\n\r\n if (video)\r\n {\r\n if (typeof value === 'string')\r\n {\r\n var op = value[0];\r\n var num = parseFloat(value.substr(1));\r\n\r\n if (op === '+')\r\n {\r\n value = video.currentTime + num;\r\n }\r\n else if (op === '-')\r\n {\r\n value = video.currentTime - num;\r\n }\r\n }\r\n\r\n video.currentTime = value;\r\n\r\n this._lastUpdate = value;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Returns a boolean indicating if this Video is currently seeking, or not.\r\n *\r\n * @method Phaser.GameObjects.Video#isSeeking\r\n * @since 3.20.0\r\n * \r\n * @return {boolean} A boolean indicating if this Video is currently seeking, or not.\r\n */\r\n isSeeking: function ()\r\n {\r\n return this._isSeeking;\r\n },\r\n\r\n /**\r\n * Internal seeking handler.\r\n *\r\n * @method Phaser.GameObjects.Video#seekingHandler\r\n * @fires Phaser.GameObjects.Events#VIDEO_SEEKING\r\n * @private\r\n * @since 3.20.0\r\n */\r\n seekingHandler: function ()\r\n {\r\n this._isSeeking = true;\r\n\r\n this.emit(Events.VIDEO_SEEKING, this);\r\n },\r\n\r\n /**\r\n * Internal seeked handler.\r\n *\r\n * @method Phaser.GameObjects.Video#seekedHandler\r\n * @fires Phaser.GameObjects.Events#VIDEO_SEEKED\r\n * @private\r\n * @since 3.20.0\r\n */\r\n seekedHandler: function ()\r\n {\r\n this._isSeeking = false;\r\n\r\n this.emit(Events.VIDEO_SEEKED, this);\r\n\r\n var video = this.video;\r\n\r\n if (video)\r\n {\r\n this.updateTexture();\r\n }\r\n },\r\n\r\n /**\r\n * Returns the current progress of the video. Progress is defined as a value between 0 (the start)\r\n * and 1 (the end).\r\n * \r\n * Progress can only be returned if the video has a duration, otherwise it will always return zero.\r\n *\r\n * @method Phaser.GameObjects.Video#getProgress\r\n * @since 3.20.0\r\n * \r\n * @return {number} The current progress of playback. If the video has no duration, will always return zero.\r\n */\r\n getProgress: function ()\r\n {\r\n var video = this.video;\r\n\r\n if (video)\r\n {\r\n var now = video.currentTime;\r\n var duration = video.duration;\r\n\r\n if (duration !== Infinity && !isNaN(duration))\r\n {\r\n return now / duration;\r\n }\r\n }\r\n \r\n return 0;\r\n },\r\n\r\n /**\r\n * A double-precision floating-point value which indicates the duration (total length) of the media in seconds,\r\n * on the media's timeline. If no media is present on the element, or the media is not valid, the returned value is NaN.\r\n * \r\n * If the media has no known end (such as for live streams of unknown duration, web radio, media incoming from WebRTC,\r\n * and so forth), this value is +Infinity.\r\n * \r\n * @method Phaser.GameObjects.Video#getDuration\r\n * @since 3.20.0\r\n * \r\n * @return {number} A double-precision floating-point value indicating the duration of the media in seconds.\r\n */\r\n getDuration: function ()\r\n {\r\n return (this.video) ? this.video.duration : 0;\r\n },\r\n\r\n /**\r\n * Sets the muted state of the currently playing video, if one is loaded.\r\n *\r\n * @method Phaser.GameObjects.Video#setMute\r\n * @since 3.20.0\r\n * \r\n * @param {boolean} [value=true] - The mute value. `true` if the video should be muted, otherwise `false`.\r\n * \r\n * @return {this} This Video Game Object for method chaining.\r\n */\r\n setMute: function (value)\r\n {\r\n if (value === undefined) { value = true; }\r\n\r\n this._codeMuted = value;\r\n\r\n var video = this.video;\r\n\r\n if (video)\r\n {\r\n video.muted = (this._systemMuted) ? true : value;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Returns a boolean indicating if this Video is currently muted.\r\n *\r\n * @method Phaser.GameObjects.Video#isMuted\r\n * @since 3.20.0\r\n * \r\n * @return {boolean} A boolean indicating if this Video is currently muted, or not.\r\n */\r\n isMuted: function ()\r\n {\r\n return this._codeMuted;\r\n },\r\n\r\n /**\r\n * Internal global mute handler. Will mute the video, if playing, if the global sound system mutes.\r\n *\r\n * @method Phaser.GameObjects.Video#globalMute\r\n * @private\r\n * @since 3.20.0\r\n * \r\n * @param {(Phaser.Sound.WebAudioSoundManager|Phaser.Sound.HTML5AudioSoundManager)} soundManager - A reference to the Sound Manager that emitted the event.\r\n * @param {boolean} mute - The mute value. `true` if the Sound Manager is now muted, otherwise `false`.\r\n */\r\n globalMute: function (soundManager, value)\r\n {\r\n this._systemMuted = value;\r\n\r\n var video = this.video;\r\n\r\n if (video)\r\n {\r\n video.muted = (this._codeMuted) ? true : value;\r\n }\r\n },\r\n\r\n /**\r\n * Internal global pause handler. Will pause the video if the Game itself pauses.\r\n *\r\n * @method Phaser.GameObjects.Video#globalPause\r\n * @private\r\n * @since 3.20.0\r\n */\r\n globalPause: function ()\r\n {\r\n this._systemPaused = true;\r\n\r\n if (this.video)\r\n {\r\n this.video.pause();\r\n }\r\n },\r\n\r\n /**\r\n * Internal global resume handler. Will resume a paused video if the Game itself resumes.\r\n *\r\n * @method Phaser.GameObjects.Video#globalResume\r\n * @private\r\n * @since 3.20.0\r\n */\r\n globalResume: function ()\r\n {\r\n this._systemPaused = false;\r\n\r\n if (this.video && !this._codePaused)\r\n {\r\n this.video.play();\r\n }\r\n },\r\n\r\n /**\r\n * Sets the paused state of the currently loaded video.\r\n * \r\n * If the video is playing, calling this method with `true` will pause playback.\r\n * If the video is paused, calling this method with `false` will resume playback.\r\n * \r\n * If no video is loaded, this method does nothing.\r\n *\r\n * @method Phaser.GameObjects.Video#setPaused\r\n * @since 3.20.0\r\n * \r\n * @param {boolean} [value=true] - The paused value. `true` if the video should be paused, `false` to resume it.\r\n * \r\n * @return {this} This Video Game Object for method chaining.\r\n */\r\n setPaused: function (value)\r\n {\r\n if (value === undefined) { value = true; }\r\n\r\n var video = this.video;\r\n\r\n this._codePaused = value;\r\n\r\n if (video)\r\n {\r\n if (value)\r\n {\r\n if (!video.paused)\r\n {\r\n video.pause();\r\n }\r\n }\r\n else if (!value)\r\n {\r\n if (video.paused && !this._systemPaused)\r\n {\r\n video.play();\r\n }\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Returns a double indicating the audio volume, from 0.0 (silent) to 1.0 (loudest).\r\n * \r\n * @method Phaser.GameObjects.Video#getVolume\r\n * @since 3.20.0\r\n * \r\n * @return {number} A double indicating the audio volume, from 0.0 (silent) to 1.0 (loudest).\r\n */\r\n getVolume: function ()\r\n {\r\n return (this.video) ? this.video.volume : 1;\r\n },\r\n \r\n /**\r\n * Sets the volume of the currently playing video.\r\n * \r\n * The value given is a double indicating the audio volume, from 0.0 (silent) to 1.0 (loudest).\r\n * \r\n * @method Phaser.GameObjects.Video#setVolume\r\n * @since 3.20.0\r\n * \r\n * @param {number} [value=1] - A double indicating the audio volume, from 0.0 (silent) to 1.0 (loudest).\r\n * \r\n * @return {this} This Video Game Object for method chaining.\r\n */\r\n setVolume: function (value)\r\n {\r\n if (value === undefined) { value = 1; }\r\n\r\n if (this.video)\r\n {\r\n this.video.volume = Clamp(value, 0, 1);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Returns a double that indicates the rate at which the media is being played back.\r\n * \r\n * @method Phaser.GameObjects.Video#getPlaybackRate\r\n * @since 3.20.0\r\n * \r\n * @return {number} A double that indicates the rate at which the media is being played back.\r\n */\r\n getPlaybackRate: function ()\r\n {\r\n return (this.video) ? this.video.playbackRate : 1;\r\n },\r\n\r\n /**\r\n * Sets the playback rate of the current video.\r\n * \r\n * The value given is a double that indicates the rate at which the media is being played back.\r\n * \r\n * @method Phaser.GameObjects.Video#setPlaybackRate\r\n * @since 3.20.0\r\n * \r\n * @param {number} [rate] - A double that indicates the rate at which the media is being played back.\r\n * \r\n * @return {this} This Video Game Object for method chaining.\r\n */\r\n setPlaybackRate: function (rate)\r\n {\r\n if (this.video)\r\n {\r\n this.video.playbackRate = rate;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Returns a boolean which indicates whether the media element should start over when it reaches the end.\r\n * \r\n * @method Phaser.GameObjects.Video#getLoop\r\n * @since 3.20.0\r\n * \r\n * @return {boolean} A boolean which indicates whether the media element will start over when it reaches the end.\r\n */\r\n getLoop: function ()\r\n {\r\n return (this.video) ? this.video.loop : false;\r\n },\r\n\r\n /**\r\n * Sets the loop state of the current video.\r\n * \r\n * The value given is a boolean which indicates whether the media element will start over when it reaches the end.\r\n * \r\n * Not all videos can loop, for example live streams.\r\n * \r\n * Please note that not all browsers support _seamless_ video looping for all encoding formats.\r\n * \r\n * @method Phaser.GameObjects.Video#setLoop\r\n * @since 3.20.0\r\n * \r\n * @param {boolean} [value=true] - A boolean which indicates whether the media element will start over when it reaches the end.\r\n * \r\n * @return {this} This Video Game Object for method chaining.\r\n */\r\n setLoop: function (value)\r\n {\r\n if (value === undefined) { value = true; }\r\n\r\n if (this.video)\r\n {\r\n this.video.loop = value;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Returns a boolean which indicates whether the video is currently playing.\r\n * \r\n * @method Phaser.GameObjects.Video#isPlaying\r\n * @since 3.20.0\r\n * \r\n * @return {boolean} A boolean which indicates whether the video is playing, or not.\r\n */\r\n isPlaying: function ()\r\n {\r\n return (this.video) ? !(this.video.paused || this.video.ended) : false;\r\n },\r\n \r\n /**\r\n * Returns a boolean which indicates whether the video is currently paused.\r\n * \r\n * @method Phaser.GameObjects.Video#isPaused\r\n * @since 3.20.0\r\n * \r\n * @return {boolean} A boolean which indicates whether the video is paused, or not.\r\n */\r\n isPaused: function ()\r\n {\r\n return ((this.video && this.video.paused) || this._codePaused || this._systemPaused);\r\n },\r\n\r\n /**\r\n * Stores this Video in the Texture Manager using the given key as a dynamic texture,\r\n * which any texture-based Game Object, such as a Sprite, can use as its texture:\r\n * \r\n * ```javascript\r\n * var vid = this.add.video(0, 0, 'intro');\r\n * \r\n * vid.play();\r\n * \r\n * vid.saveTexture('doodle');\r\n * \r\n * this.add.image(400, 300, 'doodle');\r\n * ```\r\n * \r\n * The saved texture is automatically updated as the video plays. If you pause this video,\r\n * or change its source, then the saved texture updates instantly.\r\n * \r\n * Calling `saveTexture` again will not save another copy of the same texture, it will just rename the existing one.\r\n * \r\n * By default it will create a single base texture. You can add frames to the texture\r\n * by using the `Texture.add` method. After doing this, you can then allow Game Objects\r\n * to use a specific frame.\r\n * \r\n * If you intend to save the texture so you can use it as the input for a Shader, you may need to set the\r\n * `flipY` parameter to `true` if you find the video renders upside down in your shader.\r\n *\r\n * @method Phaser.GameObjects.Video#saveTexture\r\n * @since 3.20.0\r\n *\r\n * @param {string} key - The unique key to store the texture as within the global Texture Manager.\r\n * @param {boolean} [flipY=false] - Should the WebGL Texture set `UNPACK_MULTIPLY_FLIP_Y` during upload?\r\n *\r\n * @return {Phaser.Textures.Texture} The Texture that was saved.\r\n */\r\n saveTexture: function (key, flipY)\r\n {\r\n if (flipY === undefined) { flipY = false; }\r\n\r\n if (this.videoTexture)\r\n {\r\n this.scene.sys.textures.renameTexture(this._key, key);\r\n }\r\n\r\n this._key = key;\r\n\r\n this.flipY = flipY;\r\n\r\n if (this.videoTextureSource)\r\n {\r\n this.videoTextureSource.setFlipY(flipY);\r\n }\r\n\r\n return this.videoTexture;\r\n },\r\n\r\n /**\r\n * Stops the video playing and clears all internal event listeners.\r\n *\r\n * If you only wish to pause playback of the video, and resume it a later time, use the `Video.pause` method instead.\r\n * \r\n * If the video hasn't finished downloading, calling this method will not abort the download. To do that you need to\r\n * call `destroy` instead.\r\n *\r\n * @method Phaser.GameObjects.Video#stop\r\n * @fires Phaser.GameObjects.Events#VIDEO_STOP\r\n * @since 3.20.0\r\n * \r\n * @return {this} This Video Game Object for method chaining.\r\n */\r\n stop: function ()\r\n {\r\n var video = this.video;\r\n\r\n if (video)\r\n {\r\n var callbacks = this._callbacks;\r\n\r\n for (var callback in callbacks)\r\n {\r\n video.removeEventListener(callback, callbacks[callback], true);\r\n }\r\n\r\n video.pause();\r\n }\r\n\r\n if (this._retryID)\r\n {\r\n window.clearTimeout(this._retryID);\r\n }\r\n\r\n this.emit(Events.VIDEO_STOP, this);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Removes the Video element from the DOM by calling parentNode.removeChild on itself.\r\n * \r\n * Also removes the autoplay and src attributes and nulls the Video reference.\r\n * \r\n * You should not call this method if you were playing a video from the Video Cache that\r\n * you wish to play again in your game, or if another Video object is also using the same\r\n * video.\r\n * \r\n * If you loaded an external video via `Video.loadURL` then you should call this function\r\n * to clear up once you are done with the instance.\r\n *\r\n * @method Phaser.GameObjects.Video#removeVideoElement\r\n * @since 3.20.0\r\n */\r\n removeVideoElement: function ()\r\n {\r\n var video = this.video;\r\n\r\n if (!video)\r\n {\r\n return;\r\n }\r\n\r\n if (video.parentNode)\r\n {\r\n video.parentNode.removeChild(video);\r\n }\r\n\r\n while (video.hasChildNodes())\r\n {\r\n video.removeChild(video.firstChild);\r\n }\r\n\r\n video.removeAttribute('autoplay');\r\n video.removeAttribute('src');\r\n\r\n this.video = null;\r\n },\r\n\r\n /**\r\n * Handles the pre-destroy step for the Video object.\r\n * \r\n * This calls `Video.stop` and optionally `Video.removeVideoElement`.\r\n * \r\n * If any Sprites are using this Video as their texture it is up to you to manage those.\r\n *\r\n * @method Phaser.GameObjects.Video#preDestroy\r\n * @private\r\n * @since 3.21.0\r\n */\r\n preDestroy: function ()\r\n {\r\n this.stop();\r\n\r\n if (this.removeVideoElementOnDestroy)\r\n {\r\n this.removeVideoElement();\r\n }\r\n\r\n var game = this.scene.sys.game.events;\r\n\r\n game.off(GameEvents.PAUSE, this.globalPause, this);\r\n game.off(GameEvents.RESUME, this.globalResume, this);\r\n\r\n var sound = this.scene.sys.sound;\r\n\r\n if (sound)\r\n {\r\n sound.off(SoundEvents.GLOBAL_MUTE, this.globalMute, this);\r\n }\r\n\r\n if (this._retryID)\r\n {\r\n window.clearTimeout(this._retryID);\r\n }\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Video;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy92aWRlby9WaWRlby5qcz9iOWIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLFlBQVksbUJBQU8sQ0FBQyxpRUFBa0I7QUFDdEMsaUJBQWlCLG1CQUFPLENBQUMsZ0ZBQWU7QUFDeEMsYUFBYSxtQkFBTyxDQUFDLHdFQUFXO0FBQ2hDLGlCQUFpQixtQkFBTyxDQUFDLDBFQUFvQjtBQUM3QyxpQkFBaUIsbUJBQU8sQ0FBQywwRUFBZTtBQUN4QyxrQkFBa0IsbUJBQU8sQ0FBQyw0RUFBcUI7QUFDL0MsV0FBVyxtQkFBTyxDQUFDLCtFQUF5QjtBQUM1QyxrQkFBa0IsbUJBQU8sQ0FBQyxpRkFBZTtBQUN6QyxpQkFBaUIsbUJBQU8sQ0FBQyxpRUFBa0I7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlDQUFpQyxtQkFBbUI7O0FBRXBEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxpQkFBaUI7O0FBRXREOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDhCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxvQkFBb0I7QUFDdEQsbUNBQW1DLHNCQUFzQjs7QUFFekQ7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsOEI7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87QUFDckMscUNBQXFDLHVCQUF1QjtBQUM1RCxzQ0FBc0MseUJBQXlCO0FBQy9ELHNDQUFzQyxzQkFBc0I7QUFDNUQsdUNBQXVDLHdCQUF3Qjs7QUFFL0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsOEJBQThCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsMEJBQTBCO0FBQ2hFLG9DQUFvQyxpQkFBaUI7O0FBRXJEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsSUFBSTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxJQUFJO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdCQUFnQjtBQUMvQjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxjQUFjOztBQUVoRDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3RUFBd0U7QUFDdkYsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsY0FBYzs7QUFFaEQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsV0FBVzs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsY0FBYzs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxlQUFlOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvdmlkZW8vVmlkZW8uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDbGFtcCA9IHJlcXVpcmUoJy4uLy4uL21hdGgvQ2xhbXAnKTtcclxudmFyIENvbXBvbmVudHMgPSByZXF1aXJlKCcuLi9jb21wb25lbnRzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuLi9ldmVudHMnKTtcclxudmFyIEdhbWVFdmVudHMgPSByZXF1aXJlKCcuLi8uLi9jb3JlL2V2ZW50cy8nKTtcclxudmFyIEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Jyk7XHJcbnZhciBTb3VuZEV2ZW50cyA9IHJlcXVpcmUoJy4uLy4uL3NvdW5kL2V2ZW50cy8nKTtcclxudmFyIFVVSUQgPSByZXF1aXJlKCcuLi8uLi91dGlscy9zdHJpbmcvVVVJRCcpO1xyXG52YXIgVmlkZW9SZW5kZXIgPSByZXF1aXJlKCcuL1ZpZGVvUmVuZGVyJyk7XHJcbnZhciBNQVRIX0NPTlNUID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9jb25zdCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBWaWRlbyBHYW1lIE9iamVjdC5cclxuICogXHJcbiAqIFRoaXMgR2FtZSBPYmplY3QgaXMgY2FwYWJsZSBvZiBoYW5kbGluZyBwbGF5YmFjayBvZiBhIHByZXZpb3VzbHkgbG9hZGVkIHZpZGVvIGZyb20gdGhlIFBoYXNlciBWaWRlbyBDYWNoZSxcclxuICogb3IgcGxheWluZyBhIHZpZGVvIGJhc2VkIG9uIGEgZ2l2ZW4gVVJMLiBWaWRlb3MgY2FuIGJlIGVpdGhlciBsb2NhbCwgb3Igc3RyZWFtZWQuXHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHByZWxvYWQgKCkge1xyXG4gKiAgIHRoaXMubG9hZC52aWRlbygncGl4YXInLCAnbmVtby5tcDQnKTtcclxuICogfVxyXG4gKiBcclxuICogY3JlYXRlICgpIHtcclxuICogICB0aGlzLmFkZC52aWRlbyg0MDAsIDMwMCwgJ3BpeGFyJyk7XHJcbiAqIH1cclxuICogYGBgXHJcbiAqIFxyXG4gKiBUbyBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMsIGEgdmlkZW8gaXMgYSBzdGFuZGFyZCBHYW1lIE9iamVjdCwganVzdCBsaWtlIGEgU3ByaXRlLiBBbmQgYXMgc3VjaCwgeW91IGNhbiBkb1xyXG4gKiBhbGwgdGhlIHVzdWFsIHRoaW5ncyB0byBpdCwgc3VjaCBhcyBzY2FsaW5nLCByb3RhdGluZywgY3JvcHBpbmcsIHRpbnRpbmcsIG1ha2luZyBpbnRlcmFjdGl2ZSwgZ2l2aW5nIGFcclxuICogcGh5c2ljcyBib2R5LCBldGMuXHJcbiAqIFxyXG4gKiBUcmFuc3BhcmVudCB2aWRlb3MgYXJlIGFsc28gcG9zc2libGUgdmlhIHRoZSBXZWJNIGZpbGUgZm9ybWF0LiBQcm92aWRpbmcgdGhlIHZpZGVvIGZpbGUgaGFzIHdhcyBlbmNvZGVkIHdpdGhcclxuICogYW4gYWxwaGEgY2hhbm5lbCwgYW5kIHByb3ZpZGluZyB0aGUgYnJvd3NlciBzdXBwb3J0cyBXZWJNIHBsYXliYWNrIChub3QgYWxsIG9mIHRoZW0gZG8pLCB0aGVuIGl0IHdpbGwgcmVuZGVyXHJcbiAqIGluLWdhbWUgd2l0aCBmdWxsIHRyYW5zcGFyZW5jeS5cclxuICogXHJcbiAqICMjIyBBdXRvcGxheWluZyBWaWRlb3NcclxuICogXHJcbiAqIFZpZGVvcyBjYW4gb25seSBhdXRvcGxheSBpZiB0aGUgYnJvd3NlciBoYXMgYmVlbiB1bmxvY2tlZCB3aXRoIGFuIGludGVyYWN0aW9uLCBvciBzYXRpc2ZpZXMgdGhlIE1FSSBzZXR0aW5ncy5cclxuICogVGhlIHBvbGljaWVzIHRoYXQgY29udHJvbCBhdXRvcGxheWluZyBhcmUgdmFzdCBhbmQgdmFyeSBiZXR3ZWVuIGJyb3dzZXIuXHJcbiAqIFlvdSBjYW4sIGFoZCBzaG91bGQsIHJlYWQgbW9yZSBhYm91dCBpdCBoZXJlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9NZWRpYS9BdXRvcGxheV9ndWlkZVxyXG4gKiBcclxuICogSWYgeW91ciB2aWRlbyBkb2Vzbid0IGNvbnRhaW4gYW55IGF1ZGlvLCB0aGVuIHNldCB0aGUgYG5vQXVkaW9gIHBhcmFtZXRlciB0byBgdHJ1ZWAgd2hlbiB0aGUgdmlkZW8gaXMgX2xvYWRlZF8sXHJcbiAqIGFuZCBpdCB3aWxsIG9mdGVuIGFsbG93IHRoZSB2aWRlbyB0byBwbGF5IGltbWVkaWF0ZWx5OlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiBwcmVsb2FkICgpIHtcclxuICogICB0aGlzLmxvYWQudmlkZW8oJ3BpeGFyJywgJ25lbW8ubXA0JywgJ2xvYWRlZGRhdGEnLCBmYWxzZSwgdHJ1ZSk7XHJcbiAqIH1cclxuICogYGBgXHJcbiAqIFxyXG4gKiBUaGUgNXRoIHBhcmFtZXRlciBpbiB0aGUgbG9hZCBjYWxsIHRlbGxzIFBoYXNlciB0aGF0IHRoZSB2aWRlbyBkb2Vzbid0IGNvbnRhaW4gYW55IGF1ZGlvIHRyYWNrcy4gVmlkZW8gd2l0aG91dFxyXG4gKiBhdWRpbyBjYW4gYXV0b3BsYXkgd2l0aG91dCByZXF1aXJpbmcgYSB1c2VyIGludGVyYWN0aW9uLiBWaWRlbyB3aXRoIGF1ZGlvIGNhbm5vdCBkbyB0aGlzIHVubGVzcyBpdCBzYXRpc2ZpZXNcclxuICogdGhlIGJyb3dzZXJzIE1FSSBzZXR0aW5ncy4gU2VlIHRoZSBNRE4gQXV0b3BsYXkgR3VpZGUgZm9yIGZ1cnRoZXIgZGV0YWlscy5cclxuICogXHJcbiAqIE5vdGUgdGhhdCBkdWUgdG8gYSBidWcgaW4gSUUxMSB5b3UgY2Fubm90IHBsYXkgYSB2aWRlbyB0ZXh0dXJlIHRvIGEgU3ByaXRlIGluIFdlYkdMLiBGb3IgSUUxMSBmb3JjZSBDYW52YXMgbW9kZS5cclxuICogXHJcbiAqIE1vcmUgZGV0YWlscyBhYm91dCB2aWRlbyBwbGF5YmFjayBhbmQgdGhlIHN1cHBvcnRlZCBtZWRpYSBmb3JtYXRzIGNhbiBiZSBmb3VuZCBvbiBNRE46XHJcbiAqIFxyXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTFZpZGVvRWxlbWVudFxyXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9NZWRpYS9Gb3JtYXRzXHJcbiAqXHJcbiAqIEBjbGFzcyBWaWRlb1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4yMC4wXHJcbiAqXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkFscGhhXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkJsZW5kTW9kZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5EZXB0aFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5GbGlwXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLkdldEJvdW5kc1xyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5NYXNrXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk9yaWdpblxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5QaXBlbGluZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5TY3JvbGxGYWN0b3JcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2l6ZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UZXh0dXJlQ3JvcFxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UaW50XHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5WaXNpYmxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIFRoZSBTY2VuZSB0byB3aGljaCB0aGlzIEdhbWUgT2JqZWN0IGJlbG9uZ3MuIEEgR2FtZSBPYmplY3QgY2FuIG9ubHkgYmVsb25nIHRvIG9uZSBTY2VuZSBhdCBhIHRpbWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gLSBPcHRpb25hbCBrZXkgb2YgdGhlIFZpZGVvIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCBwbGF5LCBhcyBzdG9yZWQgaW4gdGhlIFZpZGVvIENhY2hlLlxyXG4gKi9cclxudmFyIFZpZGVvID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBHYW1lT2JqZWN0LFxyXG5cclxuICAgIE1peGluczogW1xyXG4gICAgICAgIENvbXBvbmVudHMuQWxwaGEsXHJcbiAgICAgICAgQ29tcG9uZW50cy5CbGVuZE1vZGUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5EZXB0aCxcclxuICAgICAgICBDb21wb25lbnRzLkZsaXAsXHJcbiAgICAgICAgQ29tcG9uZW50cy5HZXRCb3VuZHMsXHJcbiAgICAgICAgQ29tcG9uZW50cy5NYXNrLFxyXG4gICAgICAgIENvbXBvbmVudHMuT3JpZ2luLFxyXG4gICAgICAgIENvbXBvbmVudHMuUGlwZWxpbmUsXHJcbiAgICAgICAgQ29tcG9uZW50cy5TY3JvbGxGYWN0b3IsXHJcbiAgICAgICAgQ29tcG9uZW50cy5TaXplLFxyXG4gICAgICAgIENvbXBvbmVudHMuVGV4dHVyZUNyb3AsXHJcbiAgICAgICAgQ29tcG9uZW50cy5UaW50LFxyXG4gICAgICAgIENvbXBvbmVudHMuVHJhbnNmb3JtLFxyXG4gICAgICAgIENvbXBvbmVudHMuVmlzaWJsZSxcclxuICAgICAgICBWaWRlb1JlbmRlclxyXG4gICAgXSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFZpZGVvIChzY2VuZSwgeCwgeSwga2V5KVxyXG4gICAge1xyXG4gICAgICAgIEdhbWVPYmplY3QuY2FsbCh0aGlzLCBzY2VuZSwgJ1ZpZGVvJyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBIVE1MIFZpZGVvIEVsZW1lbnQgdGhpcyBWaWRlbyBHYW1lIE9iamVjdCBpcyBwbGF5aW5nLlxyXG4gICAgICAgICAqIFdpbGwgYmUgYG51bGxgIHVudGlsIGEgdmlkZW8gaXMgbG9hZGVkIGZvciBwbGF5YmFjay5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyN2aWRlb1xyXG4gICAgICAgICAqIEB0eXBlIHs/SFRNTFZpZGVvRWxlbWVudH1cclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52aWRlbyA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBQaGFzZXIgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHVzaW5nIHRvIHJlbmRlciB0aGUgdmlkZW8gdG8uXHJcbiAgICAgICAgICogV2lsbCBiZSBgbnVsbGAgdW50aWwgYSB2aWRlbyBpcyBsb2FkZWQgZm9yIHBsYXliYWNrLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3ZpZGVvVGV4dHVyZVxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLlRleHR1cmVzLlRleHR1cmV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudmlkZW9UZXh0dXJlID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFRleHR1cmVTb3VyY2UgYmVsb25nIHRvIHRoZSBgdmlkZW9UZXh0dXJlYCBUZXh0dXJlIG9iamVjdC5cclxuICAgICAgICAgKiBXaWxsIGJlIGBudWxsYCB1bnRpbCBhIHZpZGVvIGlzIGxvYWRlZCBmb3IgcGxheWJhY2suXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jdmlkZW9UZXh0dXJlU291cmNlXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuVGV4dHVyZXMuVGV4dHVyZVNvdXJjZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy52aWRlb1RleHR1cmVTb3VyY2UgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIFBoYXNlciBDYW52YXNUZXh0dXJlIGluc3RhbmNlIHRoYXQgaG9sZHMgdGhlIG1vc3QgcmVjZW50IHNuYXBzaG90IHRha2VuIGZyb20gdGhlIHZpZGVvLlxyXG4gICAgICAgICAqIFRoaXMgd2lsbCBvbmx5IGJlIHNldCBpZiBgc25hcHNob3RgIG9yIGBzbmFwc2hvdEFyZWFgIGhhdmUgYmVlbiBjYWxsZWQsIGFuZCB3aWxsIGJlIGBudWxsYCB1bnRpbCB0aGF0IHBvaW50LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3NuYXBzaG90VGV4dHVyZVxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLlRleHR1cmVzLkNhbnZhc1RleHR1cmV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc25hcHNob3RUZXh0dXJlID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgeW91IGhhdmUgc2F2ZWQgdGhpcyB2aWRlbyB0byBhIHRleHR1cmUgdmlhIHRoZSBgc2F2ZVRleHR1cmVgIG1ldGhvZCwgdGhpcyBjb250cm9scyBpZiB0aGUgdmlkZW9cclxuICAgICAgICAgKiBpcyByZW5kZXJlZCB3aXRoIGBmbGlwWWAgaW4gV2ViR0wgb3Igbm90LiBZb3Ugb2Z0ZW4gbmVlZCB0byBzZXQgdGhpcyBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlIHZpZGVvIHRleHR1cmVcclxuICAgICAgICAgKiBhcyB0aGUgaW5wdXQgc291cmNlIGZvciBhIHNoYWRlci4gSWYgeW91IGZpbmQgeW91ciB2aWRlbyBpcyBhcHBlYXJpbmcgdXBzaWRlIGRvd24gd2l0aGluIGEgc2hhZGVyIG9yXHJcbiAgICAgICAgICogY3VzdG9tIHBpcGVsaW5lLCBmbGlwIHRoaXMgcHJvcGVydHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jZmxpcFlcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mbGlwWSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUga2V5IHVzZWQgYnkgdGhlIHRleHR1cmUgYXMgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jX2tleVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fa2V5ID0gVVVJRCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBpbnRlcm5hbCBmbGFnIGhvbGRpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHZpZGVvIGxvY2ssIHNob3VsZCBkb2N1bWVudCBpbnRlcmFjdGlvbiBiZSByZXF1aXJlZFxyXG4gICAgICAgICAqIGJlZm9yZSBwbGF5YmFjayBjYW4gYmVnaW4uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jdG91Y2hMb2NrZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50b3VjaExvY2tlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNob3VsZCB0aGUgdmlkZW8gYXV0byBwbGF5IHdoZW4gZG9jdW1lbnQgaW50ZXJhY3Rpb24gaXMgcmVxdWlyZWQgYW5kIGhhcHBlbnM/XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jcGxheVdoZW5VbmxvY2tlZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBsYXlXaGVuVW5sb2NrZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hlbiBzdGFydGluZyBwbGF5YmFjayBvZiBhIHZpZGVvIFBoYXNlciB3aWxsIG1vbml0b3IgaXRzIGByZWFkeVN0YXRlYCB1c2luZyBhIGBzZXRUaW1lb3V0YCBjYWxsLlxyXG4gICAgICAgICAqIFRoZSBgc2V0VGltZW91dGAgaGFwcGVucyBvbmNlIGV2ZXJ5IGBWaWRlby5yZXRyeUludGVydmFsYCBtcy4gSXQgd2lsbCBjYXJyeSBvbiBtb25pdG9yaW5nIHRoZSB2aWRlb1xyXG4gICAgICAgICAqIHN0YXRlIGluIHRoaXMgbWFubmVyIHVudGlsIHRoZSBgcmV0cnlMaW1pdGAgaXMgcmVhY2hlZCBhbmQgdGhlbiBhYm9ydC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNyZXRyeUxpbWl0XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmV0cnlMaW1pdCA9IDIwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY3VycmVudCByZXRyeSBhdHRlbXB0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3JldHJ5XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmV0cnkgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbnVtYmVyIG9mIG1zIGJldHdlZW4gZWFjaCByZXRyeSB3aGlsZSBtb25pdG9yaW5nIHRoZSByZWFkeSBzdGF0ZSBvZiBhIGRvd25sb2FkaW5nIHZpZGVvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3JldHJ5SW50ZXJ2YWxcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5yZXRyeUludGVydmFsID0gNTAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc2V0VGltZW91dCBjYWxsYmFjayBJRC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNfcmV0cnlJRFxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3JldHJ5SUQgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmlkZW8gd2FzIG11dGVkIGR1ZSB0byBhIHN5c3RlbSBldmVudCwgc3VjaCBhcyB0aGUgZ2FtZSBsb3NpbmcgZm9jdXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jX3N5c3RlbU11dGVkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fc3lzdGVtTXV0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHZpZGVvIHdhcyBtdXRlZCBkdWUgdG8gZ2FtZSBjb2RlLCBub3QgYSBzeXN0ZW0gZXZlbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jX2NvZGVNdXRlZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2NvZGVNdXRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdmlkZW8gd2FzIHBhdXNlZCBkdWUgdG8gYSBzeXN0ZW0gZXZlbnQsIHN1Y2ggYXMgdGhlIGdhbWUgbG9zaW5nIGZvY3VzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI19zeXN0ZW1QYXVzZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9zeXN0ZW1QYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHZpZGVvIHdhcyBwYXVzZWQgZHVlIHRvIGdhbWUgY29kZSwgbm90IGEgc3lzdGVtIGV2ZW50LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI19jb2RlUGF1c2VkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fY29kZVBhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbG9jYWxseSBib3VuZCBldmVudCBjYWxsYmFjayBoYW5kbGVycy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNfY2FsbGJhY2tzXHJcbiAgICAgICAgICogQHR5cGUge2FueX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9jYWxsYmFja3MgPSB7XHJcbiAgICAgICAgICAgIHBsYXk6IHRoaXMucGxheUhhbmRsZXIuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgZXJyb3I6IHRoaXMubG9hZEVycm9ySGFuZGxlci5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICBlbmQ6IHRoaXMuY29tcGxldGVIYW5kbGVyLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIHRpbWU6IHRoaXMudGltZVVwZGF0ZUhhbmRsZXIuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgc2Vla2luZzogdGhpcy5zZWVraW5nSGFuZGxlci5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICBzZWVrZWQ6IHRoaXMuc2Vla2VkSGFuZGxlci5iaW5kKHRoaXMpXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGludGVybmFsIGNyb3AgZGF0YSBvYmplY3QsIGFzIHVzZWQgYnkgYHNldENyb3BgIGFuZCBwYXNzZWQgdG8gdGhlIGBGcmFtZS5zZXRDcm9wVVZzYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jX2Nyb3BcclxuICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2Nyb3AgPSB0aGlzLnJlc2V0Q3JvcE9iamVjdCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyBpbiBhbmQgb3V0IG1hcmtlcnMgZm9yIHNlcXVlbmNlIHBsYXliYWNrLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI21hcmtlcnNcclxuICAgICAgICAgKiBAdHlwZSB7YW55fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1hcmtlcnMgPSB7fTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGluIG1hcmtlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNfbWFya2VySW5cclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9tYXJrZXJJbiA9IC0xO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgb3V0IG1hcmtlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNfbWFya2VyT3V0XHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fbWFya2VyT3V0ID0gTUFUSF9DT05TVC5NQVhfU0FGRV9JTlRFR0VSO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbGFzdCB0aW1lIHRoZSBUZXh0dXJlU291cmNlIHdhcyB1cGRhdGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI19sYXN0VXBkYXRlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fbGFzdFVwZGF0ZSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBrZXkgb2YgdGhlIHZpZGVvIGJlaW5nIHBsYXllZCBmcm9tIHRoZSBWaWRlbyBjYWNoZSwgaWYgYW55LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI19jYWNoZUtleVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fY2FjaGVLZXkgPSAnJztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXMgdGhlIHZpZGVvIGN1cnJlbnRseSBzZWVraW5nP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI19pc1NlZWtpbmdcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9pc1NlZWtpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2hvdWxkIHRoZSBWaWRlbyBlbGVtZW50IHRoYXQgdGhpcyBWaWRlbyBpcyB1c2luZywgYmUgcmVtb3ZlZCBmcm9tIHRoZSBET01cclxuICAgICAgICAgKiB3aGVuIHRoaXMgVmlkZW8gaXMgZGVzdHJveWVkP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3JlbW92ZVZpZGVvRWxlbWVudE9uRGVzdHJveVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIxLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJlbW92ZVZpZGVvRWxlbWVudE9uRGVzdHJveSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHgsIHkpO1xyXG4gICAgICAgIHRoaXMuaW5pdFBpcGVsaW5lKCk7XHJcblxyXG4gICAgICAgIGlmIChrZXkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZVNvdXJjZShrZXksIGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBnYW1lID0gc2NlbmUuc3lzLmdhbWUuZXZlbnRzO1xyXG5cclxuICAgICAgICBnYW1lLm9uKEdhbWVFdmVudHMuUEFVU0UsIHRoaXMuZ2xvYmFsUGF1c2UsIHRoaXMpO1xyXG4gICAgICAgIGdhbWUub24oR2FtZUV2ZW50cy5SRVNVTUUsIHRoaXMuZ2xvYmFsUmVzdW1lLCB0aGlzKTtcclxuXHJcbiAgICAgICAgdmFyIHNvdW5kID0gc2NlbmUuc3lzLnNvdW5kO1xyXG5cclxuICAgICAgICBpZiAoc291bmQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzb3VuZC5vbihTb3VuZEV2ZW50cy5HTE9CQUxfTVVURSwgdGhpcy5nbG9iYWxNdXRlLCB0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RhcnRzIHRoaXMgdmlkZW8gcGxheWluZy5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgdmlkZW8gaXMgYWxyZWFkeSBwbGF5aW5nLCBvciBoYXMgYmVlbiBxdWV1ZWQgdG8gcGxheSB3aXRoIGBjaGFuZ2VTb3VyY2VgIHRoZW4gdGhpcyBtZXRob2QganVzdCByZXR1cm5zLlxyXG4gICAgICogXHJcbiAgICAgKiBWaWRlb3MgY2FuIG9ubHkgYXV0b3BsYXkgaWYgdGhlIGJyb3dzZXIgaGFzIGJlZW4gdW5sb2NrZWQuIFRoaXMgaGFwcGVucyBpZiB5b3UgaGF2ZSBpbnRlcmFjdGVkIHdpdGggdGhlIGJyb3dzZXIsIGkuZS5cclxuICAgICAqIGJ5IGNsaWNraW5nIG9uIGl0IG9yIHByZXNzaW5nIGEga2V5LCBvciBkdWUgdG8gc2VydmVyIHNldHRpbmdzLiBUaGUgcG9saWNpZXMgdGhhdCBjb250cm9sIGF1dG9wbGF5aW5nIGFyZSB2YXN0IGFuZFxyXG4gICAgICogdmFyeSBiZXR3ZWVuIGJyb3dzZXIuIFlvdSBjYW4gcmVhZCBtb3JlIGhlcmU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL01lZGlhL0F1dG9wbGF5X2d1aWRlXHJcbiAgICAgKiBcclxuICAgICAqIElmIHlvdXIgdmlkZW8gZG9lc24ndCBjb250YWluIGFueSBhdWRpbywgdGhlbiBzZXQgdGhlIGBub0F1ZGlvYCBwYXJhbWV0ZXIgdG8gYHRydWVgIHdoZW4gdGhlIHZpZGVvIGlzIGxvYWRlZCxcclxuICAgICAqIGFuZCBpdCB3aWxsIG9mdGVuIGFsbG93IHRoZSB2aWRlbyB0byBwbGF5IGltbWVkaWF0ZWx5OlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiBwcmVsb2FkICgpIHtcclxuICAgICAqICAgdGhpcy5sb2FkLnZpZGVvKCdwaXhhcicsICduZW1vLm1wNCcsICdsb2FkZWRkYXRhJywgZmFsc2UsIHRydWUpO1xyXG4gICAgICogfVxyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSA1dGggcGFyYW1ldGVyIGluIHRoZSBsb2FkIGNhbGwgdGVsbHMgUGhhc2VyIHRoYXQgdGhlIHZpZGVvIGRvZXNuJ3QgY29udGFpbiBhbnkgYXVkaW8gdHJhY2tzLiBWaWRlbyB3aXRob3V0XHJcbiAgICAgKiBhdWRpbyBjYW4gYXV0b3BsYXkgd2l0aG91dCByZXF1aXJpbmcgYSB1c2VyIGludGVyYWN0aW9uLiBWaWRlbyB3aXRoIGF1ZGlvIGNhbm5vdCBkbyB0aGlzIHVubGVzcyBpdCBzYXRpc2ZpZXNcclxuICAgICAqIHRoZSBicm93c2VycyBNRUkgc2V0dGluZ3MuIFNlZSB0aGUgTUROIEF1dG9wbGF5IEd1aWRlIGZvciBkZXRhaWxzLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB5b3UgbmVlZCBhdWRpbyBpbiB5b3VyIHZpZGVvcywgdGhlbiB5b3UnbGwgaGF2ZSB0byBjb25zaWRlciB0aGUgZmFjdCB0aGF0IHRoZSB2aWRlbyBjYW5ub3Qgc3RhcnQgcGxheWluZyB1bnRpbCB0aGVcclxuICAgICAqIHVzZXIgaGFzIGludGVyYWN0ZWQgd2l0aCB0aGUgYnJvd3NlciwgaW50byB5b3VyIGdhbWUgZmxvdy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNwbGF5XHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2xvb3A9ZmFsc2VdIC0gU2hvdWxkIHRoZSB2aWRlbyBsb29wIGF1dG9tYXRpY2FsbHkgd2hlbiBpdCByZWFjaGVzIHRoZSBlbmQ/IFBsZWFzZSBub3RlIHRoYXQgbm90IGFsbCBicm93c2VycyBzdXBwb3J0IF9zZWFtbGVzc18gdmlkZW8gbG9vcGluZyBmb3IgYWxsIGVuY29kaW5nIGZvcm1hdHMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFttYXJrZXJJbl0gLSBPcHRpb25hbCBpbiBtYXJrZXIgdGltZSwgaW4gc2Vjb25kcywgZm9yIHBsYXliYWNrIG9mIGEgc2VxdWVuY2Ugb2YgdGhlIHZpZGVvLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbbWFya2VyT3V0XSAtIE9wdGlvbmFsIG91dCBtYXJrZXIgdGltZSwgaW4gc2Vjb25kcywgZm9yIHBsYXliYWNrIG9mIGEgc2VxdWVuY2Ugb2YgdGhlIHZpZGVvLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFZpZGVvIEdhbWUgT2JqZWN0IGZvciBtZXRob2QgY2hhaW5pbmcuXHJcbiAgICAgKi9cclxuICAgIHBsYXk6IGZ1bmN0aW9uIChsb29wLCBtYXJrZXJJbiwgbWFya2VyT3V0KVxyXG4gICAge1xyXG4gICAgICAgIGlmICgodGhpcy50b3VjaExvY2tlZCAmJiB0aGlzLnBsYXlXaGVuVW5sb2NrZWQpIHx8IHRoaXMuaXNQbGF5aW5nKCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2aWRlbyA9IHRoaXMudmlkZW87XHJcblxyXG4gICAgICAgIGlmICghdmlkZW8pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1ZpZGVvIG5vdCBsb2FkZWQnKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGxvb3AgPT09IHVuZGVmaW5lZCkgeyBsb29wID0gdmlkZW8ubG9vcDsgfVxyXG5cclxuICAgICAgICB2YXIgc291bmQgPSB0aGlzLnNjZW5lLnN5cy5zb3VuZDtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoc291bmQgJiYgc291bmQubXV0ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBNdXRlIHdpbGwgYmUgc2V0IGJhc2VkIG9uIHRoZSBnbG9iYWwgbXV0ZSBzdGF0ZSBvZiB0aGUgU291bmQgTWFuYWdlciAoaWYgdGhlcmUgaXMgb25lKVxyXG4gICAgICAgICAgICB0aGlzLnNldE11dGUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWlzTmFOKG1hcmtlckluKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX21hcmtlckluID0gbWFya2VySW47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWlzTmFOKG1hcmtlck91dCkgJiYgbWFya2VyT3V0ID4gbWFya2VySW4pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9tYXJrZXJPdXQgPSBtYXJrZXJPdXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2aWRlby5sb29wID0gbG9vcDtcclxuXHJcbiAgICAgICAgdmFyIGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcztcclxuXHJcbiAgICAgICAgdmFyIHBsYXlQcm9taXNlID0gdmlkZW8ucGxheSgpO1xyXG5cclxuICAgICAgICBpZiAocGxheVByb21pc2UgIT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBsYXlQcm9taXNlLnRoZW4odGhpcy5wbGF5UHJvbWlzZVN1Y2Nlc3NIYW5kbGVyLmJpbmQodGhpcykpLmNhdGNoKHRoaXMucGxheVByb21pc2VFcnJvckhhbmRsZXIuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBPbGQtc2Nob29sIGJyb3dzZXJzIHdpdGggbm8gUHJvbWlzZXNcclxuICAgICAgICAgICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsIGNhbGxiYWNrcy5wbGF5LCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIC8vICBJZiB2aWRlbyBoYXNuJ3QgZG93bmxvYWRlZCBwcm9wZXJseSB5ZXQgLi4uXHJcbiAgICAgICAgICAgIGlmICh2aWRlby5yZWFkeVN0YXRlIDwgMilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXRyeSA9IHRoaXMucmV0cnlMaW1pdDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXRyeUlEID0gd2luZG93LnNldFRpbWVvdXQodGhpcy5jaGVja1ZpZGVvUHJvZ3Jlc3MuYmluZCh0aGlzKSwgdGhpcy5yZXRyeUludGVydmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFNldCB0aGVzZSBfYWZ0ZXJfIGNhbGxpbmcgYHBsYXlgIG9yIHRoZXkgZG9uJ3QgZmlyZSAodXNlZnVsLCB0aGFua3MgYnJvd3NlcnMpXHJcbiAgICAgICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignZW5kZWQnLCBjYWxsYmFja3MuZW5kLCB0cnVlKTtcclxuICAgICAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgY2FsbGJhY2tzLnRpbWUsIHRydWUpO1xyXG4gICAgICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3NlZWtpbmcnLCBjYWxsYmFja3Muc2Vla2luZywgdHJ1ZSk7XHJcbiAgICAgICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc2Vla2VkJywgY2FsbGJhY2tzLnNlZWtlZCwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzb3VyY2Ugb2YgdGhlIGN1cnJlbnQgdmlkZW8gZWxlbWVudC4gSXQgd29ya3MgYnkgZmlyc3Qgc3RvcHBpbmcgdGhlXHJcbiAgICAgKiBjdXJyZW50IHZpZGVvLCBpZiBwbGF5aW5nLiBUaGVuIGRlbGV0aW5nIHRoZSB2aWRlbyB0ZXh0dXJlLCBpZiBvbmUgaGFzIGJlZW4gY3JlYXRlZC4gRmluYWxseSwgaXQgbWFrZXMgYVxyXG4gICAgICogbmV3IHZpZGVvIHRleHR1cmUgYW5kIHN0YXJ0cyBwbGF5YmFjayBvZiB0aGUgbmV3IHNvdXJjZSB0aHJvdWdoIHRoZSBleGlzdGluZyB2aWRlbyBlbGVtZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgcmVhc29uIHlvdSBtYXkgd2lzaCB0byBkbyB0aGlzIGlzIGJlY2F1c2UgdmlkZW9zIHRoYXQgcmVxdWlyZSBpbnRlcmFjdGlvbiB0byB1bmxvY2ssIHJlbWFpbiBpbiBhbiB1bmxvY2tlZFxyXG4gICAgICogc3RhdGUsIGV2ZW4gaWYgeW91IGNoYW5nZSB0aGUgc291cmNlIG9mIHRoZSB2aWRlby4gQnkgY2hhbmdpbmcgdGhlIHNvdXJjZSB0byBhIG5ldyB2aWRlbyB5b3UgYXZvaWQgaGF2aW5nIHRvXHJcbiAgICAgKiBnbyB0aHJvdWdoIHRoZSB1bmxvY2sgcHJvY2VzcyBhZ2Fpbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNjaGFuZ2VTb3VyY2VcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIFZpZGVvIHRoaXMgR2FtZSBPYmplY3Qgd2lsbCBzd2FwIHRvIHBsYXlpbmcsIGFzIHN0b3JlZCBpbiB0aGUgVmlkZW8gQ2FjaGUuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthdXRvcGxheT10cnVlXSAtIFNob3VsZCB0aGUgdmlkZW8gc3RhcnQgcGxheWluZyBpbW1lZGlhdGVseSwgb25jZSB0aGUgc3dhcCBpcyBjb21wbGV0ZT9cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2xvb3A9ZmFsc2VdIC0gU2hvdWxkIHRoZSB2aWRlbyBsb29wIGF1dG9tYXRpY2FsbHkgd2hlbiBpdCByZWFjaGVzIHRoZSBlbmQ/IFBsZWFzZSBub3RlIHRoYXQgbm90IGFsbCBicm93c2VycyBzdXBwb3J0IF9zZWFtbGVzc18gdmlkZW8gbG9vcGluZyBmb3IgYWxsIGVuY29kaW5nIGZvcm1hdHMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFttYXJrZXJJbl0gLSBPcHRpb25hbCBpbiBtYXJrZXIgdGltZSwgaW4gc2Vjb25kcywgZm9yIHBsYXliYWNrIG9mIGEgc2VxdWVuY2Ugb2YgdGhlIHZpZGVvLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbbWFya2VyT3V0XSAtIE9wdGlvbmFsIG91dCBtYXJrZXIgdGltZSwgaW4gc2Vjb25kcywgZm9yIHBsYXliYWNrIG9mIGEgc2VxdWVuY2Ugb2YgdGhlIHZpZGVvLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFZpZGVvIEdhbWUgT2JqZWN0IGZvciBtZXRob2QgY2hhaW5pbmcuXHJcbiAgICAgKi9cclxuICAgIGNoYW5nZVNvdXJjZTogZnVuY3Rpb24gKGtleSwgYXV0b3BsYXksIGxvb3AsIG1hcmtlckluLCBtYXJrZXJPdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGF1dG9wbGF5ID09PSB1bmRlZmluZWQpIHsgYXV0b3BsYXkgPSB0cnVlOyB9XHJcblxyXG4gICAgICAgIHZhciBjdXJyZW50VmlkZW8gPSB0aGlzLnZpZGVvO1xyXG5cclxuICAgICAgICBpZiAoY3VycmVudFZpZGVvKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9wKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbmV3VmlkZW8gPSB0aGlzLnNjZW5lLnN5cy5jYWNoZS52aWRlby5nZXQoa2V5KTtcclxuXHJcbiAgICAgICAgaWYgKG5ld1ZpZGVvKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy52aWRlbyA9IG5ld1ZpZGVvO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fY2FjaGVLZXkgPSBrZXk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9jb2RlUGF1c2VkID0gbmV3VmlkZW8ucGF1c2VkO1xyXG4gICAgICAgICAgICB0aGlzLl9jb2RlTXV0ZWQgPSBuZXdWaWRlby5tdXRlZDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZpZGVvVGV4dHVyZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5zeXMudGV4dHVyZXMucmVtb3ZlKHRoaXMuX2tleSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52aWRlb1RleHR1cmUgPSB0aGlzLnNjZW5lLnN5cy50ZXh0dXJlcy5jcmVhdGUodGhpcy5fa2V5LCBuZXdWaWRlbywgbmV3VmlkZW8udmlkZW9XaWR0aCwgbmV3VmlkZW8udmlkZW9IZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWRlb1RleHR1cmVTb3VyY2UgPSB0aGlzLnZpZGVvVGV4dHVyZS5zb3VyY2VbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZGVvVGV4dHVyZS5hZGQoJ19fQkFTRScsIDAsIDAsIDAsIG5ld1ZpZGVvLnZpZGVvV2lkdGgsIG5ld1ZpZGVvLnZpZGVvSGVpZ2h0KTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0VGV4dHVyZSh0aGlzLnZpZGVvVGV4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNpemVUb0ZyYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXlPcmlnaW4oKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlZJREVPX0NSRUFURUQsIHRoaXMsIG5ld1ZpZGVvLnZpZGVvV2lkdGgsIG5ld1ZpZGVvLnZpZGVvSGVpZ2h0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dHVyZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBuZXdWaWRlby5jdXJyZW50VGltZSA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9sYXN0VXBkYXRlID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmIChhdXRvcGxheSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbGF5KGxvb3AsIG1hcmtlckluLCBtYXJrZXJPdXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudmlkZW8gPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIHNlcXVlbmNlIG1hcmtlciB0byB0aGlzIHZpZGVvLlxyXG4gICAgICogXHJcbiAgICAgKiBNYXJrZXJzIGFsbG93IHlvdSB0byBzcGxpdCBhIHZpZGVvIHVwIGludG8gc2VxdWVuY2VzLCBkZWxpbmVhdGVkIGJ5IGEgc3RhcnQgYW5kIGVuZCB0aW1lLCBnaXZlbiBpbiBzZWNvbmRzLlxyXG4gICAgICogXHJcbiAgICAgKiBZb3UgY2FuIHRoZW4gcGxheSBiYWNrIHNwZWNpZmljIG1hcmtlcnMgdmlhIHRoZSBgcGxheU1hcmtlcmAgbWV0aG9kLlxyXG4gICAgICogXHJcbiAgICAgKiBOb3RlIHRoYXQgbWFya2VyIHRpbWluZyBpcyBfbm90XyBmcmFtZS1wZXJmZWN0LiBZb3Ugc2hvdWxkIGNvbnN0cnVjdCB5b3VyIHZpZGVvcyBpbiBzdWNoIGEgd2F5IHRoYXQgeW91IGFsbG93IGZvclxyXG4gICAgICogcGxlbnR5IG9mIGV4dHJhIHBhZGRpbmcgYmVmb3JlIGFuZCBhZnRlciBlYWNoIHNlcXVlbmNlIHRvIGFsbG93IGZvciBkaXNjcmVwYW5jaWVzIGluIGJyb3dzZXIgc2VlayBhbmQgY3VycmVudFRpbWUgYWNjdXJhY3kuXHJcbiAgICAgKiBcclxuICAgICAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdzNjL21lZGlhLWFuZC1lbnRlcnRhaW5tZW50L2lzc3Vlcy80IGZvciBtb3JlIGRldGFpbHMgYWJvdXQgdGhpcyBpc3N1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNhZGRNYXJrZXJcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIEEgdW5pcXVlIG5hbWUgdG8gZ2l2ZSB0aGlzIG1hcmtlci5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gbWFya2VySW4gLSBUaGUgdGltZSwgaW4gc2Vjb25kcywgcmVwcmVzZW50aW5nIHRoZSBzdGFydCBvZiB0aGlzIG1hcmtlci5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gbWFya2VyT3V0IC0gVGhlIHRpbWUsIGluIHNlY29uZHMsIHJlcHJlc2VudGluZyB0aGUgZW5kIG9mIHRoaXMgbWFya2VyLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFZpZGVvIEdhbWUgT2JqZWN0IGZvciBtZXRob2QgY2hhaW5pbmcuXHJcbiAgICAgKi9cclxuICAgIGFkZE1hcmtlcjogZnVuY3Rpb24gKGtleSwgbWFya2VySW4sIG1hcmtlck91dClcclxuICAgIHtcclxuICAgICAgICBpZiAoIWlzTmFOKG1hcmtlckluKSAmJiBtYXJrZXJJbiA+PSAwICYmICFpc05hTihtYXJrZXJPdXQpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tYXJrZXJzW2tleV0gPSBbIG1hcmtlckluLCBtYXJrZXJPdXQgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBsYXlzIGEgcHJlLWRlZmluZWQgc2VxdWVuY2UgaW4gdGhpcyB2aWRlby5cclxuICAgICAqIFxyXG4gICAgICogTWFya2VycyBhbGxvdyB5b3UgdG8gc3BsaXQgYSB2aWRlbyB1cCBpbnRvIHNlcXVlbmNlcywgZGVsaW5lYXRlZCBieSBhIHN0YXJ0IGFuZCBlbmQgdGltZSwgZ2l2ZW4gaW4gc2Vjb25kcyBhbmRcclxuICAgICAqIHNwZWNpZmllZCB2aWEgdGhlIGBhZGRNYXJrZXJgIG1ldGhvZC5cclxuICAgICAqIFxyXG4gICAgICogTm90ZSB0aGF0IG1hcmtlciB0aW1pbmcgaXMgX25vdF8gZnJhbWUtcGVyZmVjdC4gWW91IHNob3VsZCBjb25zdHJ1Y3QgeW91ciB2aWRlb3MgaW4gc3VjaCBhIHdheSB0aGF0IHlvdSBhbGxvdyBmb3JcclxuICAgICAqIHBsZW50eSBvZiBleHRyYSBwYWRkaW5nIGJlZm9yZSBhbmQgYWZ0ZXIgZWFjaCBzZXF1ZW5jZSB0byBhbGxvdyBmb3IgZGlzY3JlcGFuY2llcyBpbiBicm93c2VyIHNlZWsgYW5kIGN1cnJlbnRUaW1lIGFjY3VyYWN5LlxyXG4gICAgICogXHJcbiAgICAgKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3czYy9tZWRpYS1hbmQtZW50ZXJ0YWlubWVudC9pc3N1ZXMvNCBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoaXMgaXNzdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jcGxheU1hcmtlclxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIG5hbWUgb2YgdGhlIG1hcmtlciBzZXF1ZW5jZSB0byBwbGF5LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbbG9vcD1mYWxzZV0gLSBTaG91bGQgdGhlIHZpZGVvIGxvb3AgYXV0b21hdGljYWxseSB3aGVuIGl0IHJlYWNoZXMgdGhlIGVuZD8gUGxlYXNlIG5vdGUgdGhhdCBub3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgX3NlYW1sZXNzXyB2aWRlbyBsb29waW5nIGZvciBhbGwgZW5jb2RpbmcgZm9ybWF0cy5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBWaWRlbyBHYW1lIE9iamVjdCBmb3IgbWV0aG9kIGNoYWluaW5nLlxyXG4gICAgICovXHJcbiAgICBwbGF5TWFya2VyOiBmdW5jdGlvbiAoa2V5LCBsb29wKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBtYXJrZXIgPSB0aGlzLm1hcmtlcnNba2V5XTtcclxuXHJcbiAgICAgICAgaWYgKG1hcmtlcilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucGxheShsb29wLCBtYXJrZXJbMF0sIG1hcmtlclsxXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGEgcHJldmlvdXNseSBzZXQgbWFya2VyIGZyb20gdGhpcyB2aWRlby5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIG1hcmtlciBpcyBjdXJyZW50bHkgcGxheWluZyBpdCB3aWxsIF9ub3RfIHN0b3AgcGxheWJhY2suXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jcmVtb3ZlTWFya2VyXHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgbmFtZSBvZiB0aGUgbWFya2VyIHRvIHJlbW92ZS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBWaWRlbyBHYW1lIE9iamVjdCBmb3IgbWV0aG9kIGNoYWluaW5nLlxyXG4gICAgICovXHJcbiAgICByZW1vdmVNYXJrZXI6IGZ1bmN0aW9uIChrZXkpXHJcbiAgICB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMubWFya2Vyc1trZXldO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIHNuYXBzaG90IG9mIHRoZSBjdXJyZW50IGZyYW1lIG9mIHRoZSB2aWRlbyBhbmQgcmVuZGVycyBpdCB0byBhIENhbnZhc1RleHR1cmUgb2JqZWN0LFxyXG4gICAgICogd2hpY2ggaXMgdGhlbiByZXR1cm5lZC4gWW91IGNhbiBvcHRpb25hbGx5IHJlc2l6ZSB0aGUgZ3JhYiBieSBwYXNzaW5nIGEgd2lkdGggYW5kIGhlaWdodC5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgYFZpZGVvLnNuYXBzaG90VGV4dHVyZWAgb2JqZWN0LiBDYWxsaW5nIHRoaXMgbWV0aG9kXHJcbiAgICAgKiBtdWx0aXBsZSB0aW1lcyB3aWxsIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgc25hcHNob3Qgd2l0aCB0aGUgbW9zdCByZWNlbnQgb25lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3NuYXBzaG90XHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3dpZHRoXSAtIFRoZSB3aWR0aCBvZiB0aGUgcmVzdWx0aW5nIENhbnZhc1RleHR1cmUuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtoZWlnaHRdIC0gVGhlIGhlaWdodCBvZiB0aGUgcmVzdWx0aW5nIENhbnZhc1RleHR1cmUuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UZXh0dXJlcy5DYW52YXNUZXh0dXJlfSBcclxuICAgICAqL1xyXG4gICAgc25hcHNob3Q6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh3aWR0aCA9PT0gdW5kZWZpbmVkKSB7IHdpZHRoID0gdGhpcy53aWR0aDsgfVxyXG4gICAgICAgIGlmIChoZWlnaHQgPT09IHVuZGVmaW5lZCkgeyBoZWlnaHQgPSB0aGlzLmhlaWdodDsgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5zbmFwc2hvdEFyZWEoMCwgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRha2VzIGEgc25hcHNob3Qgb2YgdGhlIHNwZWNpZmllZCBhcmVhIG9mIHRoZSBjdXJyZW50IGZyYW1lIG9mIHRoZSB2aWRlbyBhbmQgcmVuZGVycyBpdCB0byBhIENhbnZhc1RleHR1cmUgb2JqZWN0LFxyXG4gICAgICogd2hpY2ggaXMgdGhlbiByZXR1cm5lZC4gWW91IGNhbiBvcHRpb25hbGx5IHJlc2l6ZSB0aGUgZ3JhYiBieSBwYXNzaW5nIGEgZGlmZmVyZW50IGBkZXN0V2lkdGhgIGFuZCBgZGVzdEhlaWdodGAuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGBWaWRlby5zbmFwc2hvdFRleHR1cmVgIG9iamVjdC4gQ2FsbGluZyB0aGlzIG1ldGhvZFxyXG4gICAgICogbXVsdGlwbGUgdGltZXMgd2lsbCBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIHNuYXBzaG90IHdpdGggdGhlIG1vc3QgcmVjZW50IG9uZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNzbmFwc2hvdEFyZWFcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbeD0wXSAtIFRoZSBob3Jpem9udGFsIGxvY2F0aW9uIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgYXJlYSB0byBncmFiIGZyb20uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFt5PTBdIC0gVGhlIHZlcnRpY2FsIGxvY2F0aW9uIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgYXJlYSB0byBncmFiIGZyb20uXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtzcmNXaWR0aF0gLSBUaGUgd2lkdGggb2YgYXJlYSB0byBncmFiIGZyb20gdGhlIHZpZGVvLiBJZiBub3QgZ2l2ZW4gaXQgd2lsbCBncmFiIHRoZSBmdWxsIHZpZGVvIGRpbWVuc2lvbnMuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtzcmNIZWlnaHRdIC0gVGhlIGhlaWdodCBvZiBhcmVhIHRvIGdyYWIgZnJvbSB0aGUgdmlkZW8uIElmIG5vdCBnaXZlbiBpdCB3aWxsIGdyYWIgdGhlIGZ1bGwgdmlkZW8gZGltZW5zaW9ucy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW2Rlc3RXaWR0aF0gLSBUaGUgZGVzdGluYXRpb24gd2lkdGggb2YgdGhlIGdyYWIsIGFsbG93aW5nIHlvdSB0byByZXNpemUgaXQuXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IFtkZXN0SGVpZ2h0XSAtIFRoZSBkZXN0aW5hdGlvbiBoZWlnaHQgb2YgdGhlIGdyYWIsIGFsbG93aW5nIHlvdSB0byByZXNpemUgaXQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5UZXh0dXJlcy5DYW52YXNUZXh0dXJlfSBcclxuICAgICAqL1xyXG4gICAgc25hcHNob3RBcmVhOiBmdW5jdGlvbiAoeCwgeSwgc3JjV2lkdGgsIHNyY0hlaWdodCwgZGVzdFdpZHRoLCBkZXN0SGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcbiAgICAgICAgaWYgKHNyY1dpZHRoID09PSB1bmRlZmluZWQpIHsgc3JjV2lkdGggPSB0aGlzLndpZHRoOyB9XHJcbiAgICAgICAgaWYgKHNyY0hlaWdodCA9PT0gdW5kZWZpbmVkKSB7IHNyY0hlaWdodCA9IHRoaXMuaGVpZ2h0OyB9XHJcbiAgICAgICAgaWYgKGRlc3RXaWR0aCA9PT0gdW5kZWZpbmVkKSB7IGRlc3RXaWR0aCA9IHNyY1dpZHRoOyB9XHJcbiAgICAgICAgaWYgKGRlc3RIZWlnaHQgPT09IHVuZGVmaW5lZCkgeyBkZXN0SGVpZ2h0ID0gc3JjSGVpZ2h0OyB9XHJcblxyXG4gICAgICAgIHZhciB2aWRlbyA9IHRoaXMudmlkZW87XHJcbiAgICAgICAgdmFyIHNuYXAgPSB0aGlzLnNuYXBzaG90VGV4dHVyZTtcclxuXHJcbiAgICAgICAgaWYgKCFzbmFwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc25hcCA9IHRoaXMuc2NlbmUuc3lzLnRleHR1cmVzLmNyZWF0ZUNhbnZhcyhVVUlEKCksIGRlc3RXaWR0aCwgZGVzdEhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNuYXBzaG90VGV4dHVyZSA9IHNuYXA7XHJcblxyXG4gICAgICAgICAgICBpZiAodmlkZW8pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNuYXAuY29udGV4dC5kcmF3SW1hZ2UodmlkZW8sIHgsIHksIHNyY1dpZHRoLCBzcmNIZWlnaHQsIDAsIDAsIGRlc3RXaWR0aCwgZGVzdEhlaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc25hcC5zZXRTaXplKGRlc3RXaWR0aCwgZGVzdEhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodmlkZW8pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNuYXAuY29udGV4dC5kcmF3SW1hZ2UodmlkZW8sIHgsIHksIHNyY1dpZHRoLCBzcmNIZWlnaHQsIDAsIDAsIGRlc3RXaWR0aCwgZGVzdEhlaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzbmFwLnVwZGF0ZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3JlcyBhIGNvcHkgb2YgdGhpcyBWaWRlb3MgYHNuYXBzaG90VGV4dHVyZWAgaW4gdGhlIFRleHR1cmUgTWFuYWdlciB1c2luZyB0aGUgZ2l2ZW4ga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIHRleHR1cmUgaXMgY3JlYXRlZCB3aGVuIHRoZSBgc25hcHNob3RgIG9yIGBzbmFwc2hvdEFyZWFgIG1ldGhvZHMgYXJlIGNhbGxlZC5cclxuICAgICAqIFxyXG4gICAgICogQWZ0ZXIgZG9pbmcgdGhpcywgYW55IHRleHR1cmUgYmFzZWQgR2FtZSBPYmplY3QsIHN1Y2ggYXMgYSBTcHJpdGUsIGNhbiB1c2UgdGhlIGNvbnRlbnRzIG9mIHRoZVxyXG4gICAgICogc25hcHNob3QgYnkgdXNpbmcgdGhlIHRleHR1cmUga2V5OlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB2YXIgdmlkID0gdGhpcy5hZGQudmlkZW8oMCwgMCwgJ2ludHJvJyk7XHJcbiAgICAgKiBcclxuICAgICAqIHZpZC5zbmFwc2hvdCgpO1xyXG4gICAgICogXHJcbiAgICAgKiB2aWQuc2F2ZVNuYXBzaG90VGV4dHVyZSgnZG9vZGxlJyk7XHJcbiAgICAgKiBcclxuICAgICAqIHRoaXMuYWRkLmltYWdlKDQwMCwgMzAwLCAnZG9vZGxlJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogVXBkYXRpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBgc25hcHNob3RUZXh0dXJlYCwgZm9yIGV4YW1wbGUgYnkgY2FsbGluZyBgc25hcHNob3RgIGFnYWluLFxyXG4gICAgICogd2lsbCBhdXRvbWF0aWNhbGx5IHVwZGF0ZSBfYW55XyBHYW1lIE9iamVjdCB0aGF0IGlzIHVzaW5nIGl0IGFzIGEgdGV4dHVyZS5cclxuICAgICAqIENhbGxpbmcgYHNhdmVTbmFwc2hvdFRleHR1cmVgIGFnYWluIHdpbGwgbm90IHNhdmUgYW5vdGhlciBjb3B5IG9mIHRoZSBzYW1lIHRleHR1cmUsXHJcbiAgICAgKiBpdCB3aWxsIGp1c3QgcmVuYW1lIHRoZSBleGlzdGluZyBvbmUuXHJcbiAgICAgKiBcclxuICAgICAqIEJ5IGRlZmF1bHQgaXQgd2lsbCBjcmVhdGUgYSBzaW5nbGUgYmFzZSB0ZXh0dXJlLiBZb3UgY2FuIGFkZCBmcmFtZXMgdG8gdGhlIHRleHR1cmVcclxuICAgICAqIGJ5IHVzaW5nIHRoZSBgVGV4dHVyZS5hZGRgIG1ldGhvZC4gQWZ0ZXIgZG9pbmcgdGhpcywgeW91IGNhbiB0aGVuIGFsbG93IEdhbWUgT2JqZWN0c1xyXG4gICAgICogdG8gdXNlIGEgc3BlY2lmaWMgZnJhbWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jc2F2ZVNuYXBzaG90VGV4dHVyZVxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgdW5pcXVlIGtleSB0byBzdG9yZSB0aGUgdGV4dHVyZSBhcyB3aXRoaW4gdGhlIGdsb2JhbCBUZXh0dXJlIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLlRleHR1cmVzLkNhbnZhc1RleHR1cmV9IFRoZSBUZXh0dXJlIHRoYXQgd2FzIHNhdmVkLlxyXG4gICAgICovXHJcbiAgICBzYXZlU25hcHNob3RUZXh0dXJlOiBmdW5jdGlvbiAoa2V5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLnNuYXBzaG90VGV4dHVyZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuc3lzLnRleHR1cmVzLnJlbmFtZVRleHR1cmUodGhpcy5zbmFwc2hvdFRleHR1cmUua2V5LCBrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNuYXBzaG90VGV4dHVyZSA9IHRoaXMuc2NlbmUuc3lzLnRleHR1cmVzLmNyZWF0ZUNhbnZhcyhrZXksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnNuYXBzaG90VGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2FkcyBhIFZpZGVvIGZyb20gdGhlIGdpdmVuIFVSTCwgcmVhZHkgZm9yIHBsYXliYWNrIHdpdGggdGhlIGBWaWRlby5wbGF5YCBtZXRob2QuXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBjYW4gY29udHJvbCBhdCB3aGF0IHBvaW50IHRoZSBicm93c2VyIGRldGVybWluZXMgdGhlIHZpZGVvIGFzIGJlaW5nIHJlYWR5IGZvciBwbGF5YmFjayB2aWFcclxuICAgICAqIHRoZSBgbG9hZEV2ZW50YCBwYXJhbWV0ZXIuIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTFZpZGVvRWxlbWVudFxyXG4gICAgICogZm9yIG1vcmUgZGV0YWlscy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNsb2FkVVJMXHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSBUaGUgVVJMIG9mIHRoZSB2aWRlbyB0byBsb2FkIG9yIGJlIHN0cmVhbWVkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtsb2FkRXZlbnQ9J2xvYWRlZGRhdGEnXSAtIFRoZSBsb2FkIGV2ZW50IHRvIGxpc3RlbiBmb3IuIEVpdGhlciBgbG9hZGVkZGF0YWAsIGBjYW5wbGF5YCBvciBgY2FucGxheXRocm91Z2hgLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbbm9BdWRpbz1mYWxzZV0gLSBEb2VzIHRoZSB2aWRlbyBoYXZlIGFuIGF1ZGlvIHRyYWNrPyBJZiBub3QgeW91IGNhbiBlbmFibGUgYXV0by1wbGF5aW5nIG9uIGl0LlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFZpZGVvIEdhbWUgT2JqZWN0IGZvciBtZXRob2QgY2hhaW5pbmcuXHJcbiAgICAgKi9cclxuICAgIGxvYWRVUkw6IGZ1bmN0aW9uICh1cmwsIGxvYWRFdmVudCwgbm9BdWRpbylcclxuICAgIHtcclxuICAgICAgICBpZiAobG9hZEV2ZW50ID09PSB1bmRlZmluZWQpIHsgbG9hZEV2ZW50ID0gJ2xvYWRlZGRhdGEnOyB9XHJcbiAgICAgICAgaWYgKG5vQXVkaW8gPT09IHVuZGVmaW5lZCkgeyBub0F1ZGlvID0gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmlkZW8pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3AoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZpZGVvVGV4dHVyZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuc3lzLnRleHR1cmVzLnJlbW92ZSh0aGlzLl9rZXkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHZpZGVvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcclxuICAgIFxyXG4gICAgICAgIHZpZGVvLmNvbnRyb2xzID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChub0F1ZGlvKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmlkZW8ubXV0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB2aWRlby5kZWZhdWx0TXV0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdmlkZW8uc2V0QXR0cmlidXRlKCdhdXRvcGxheScsICdhdXRvcGxheScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmlkZW8uc2V0QXR0cmlidXRlKCdwbGF5c2lubGluZScsICdwbGF5c2lubGluZScpO1xyXG4gICAgICAgIHZpZGVvLnNldEF0dHJpYnV0ZSgncHJlbG9hZCcsICdhdXRvJyk7XHJcblxyXG4gICAgICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fY2FsbGJhY2tzLmVycm9yLCB0cnVlKTtcclxuXHJcbiAgICAgICAgdmlkZW8uc3JjID0gdXJsO1xyXG5cclxuICAgICAgICB2aWRlby5sb2FkKCk7XHJcblxyXG4gICAgICAgIHRoaXMudmlkZW8gPSB2aWRlbztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpbnRlcm5hbCBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgaWYgdGhlIHBsYXliYWNrIFByb21pc2UgcmVzb2x2ZXMgc3VjY2Vzc2Z1bGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3BsYXlQcm9taXNlU3VjY2Vzc0hhbmRsZXJcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuR2FtZU9iamVjdHMuRXZlbnRzI1ZJREVPX1BMQVlcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKi9cclxuICAgIHBsYXlQcm9taXNlU3VjY2Vzc0hhbmRsZXI6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy50b3VjaExvY2tlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlZJREVPX1BMQVksIHRoaXMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fbWFya2VySW4gPiAtMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudmlkZW8uY3VycmVudFRpbWUgPSB0aGlzLl9tYXJrZXJJbjtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpbnRlcm5hbCBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgaWYgdGhlIHBsYXliYWNrIFByb21pc2UgZmFpbHMgdG8gcmVzb2x2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNwbGF5UHJvbWlzZUVycm9ySGFuZGxlclxyXG4gICAgICogQGZpcmVzIFBoYXNlci5HYW1lT2JqZWN0cy5FdmVudHMjVklERU9fRVJST1JcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55fSBlcnJvciAtIFRoZSBQcm9taXNlIHJlc29sdXRpb24gZXJyb3IuXHJcbiAgICAgKi9cclxuICAgIHBsYXlQcm9taXNlRXJyb3JIYW5kbGVyOiBmdW5jdGlvbiAoZXJyb3IpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zY2VuZS5zeXMuaW5wdXQub25jZSgncG9pbnRlcmRvd24nLCB0aGlzLnVubG9ja0hhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLnRvdWNoTG9ja2VkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnBsYXlXaGVuVW5sb2NrZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlZJREVPX0VSUk9SLCB0aGlzLCBlcnJvcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIHZpZGVvIGVtaXRzIGEgYHBsYXlpbmdgIGV2ZW50IGR1cmluZyBsb2FkLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIGlzIG9ubHkgbGlzdGVuZWQgZm9yIGlmIHRoZSBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBQcm9taXNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNwbGF5SGFuZGxlclxyXG4gICAgICogQGZpcmVzIFBoYXNlci5HYW1lT2JqZWN0cy5FdmVudHMjVklERU9fUExBWVxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICovXHJcbiAgICBwbGF5SGFuZGxlcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnRvdWNoTG9ja2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuZW1pdChFdmVudHMuVklERU9fUExBWSwgdGhpcyk7XHJcbiAgICAgICBcclxuICAgICAgICB0aGlzLnZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9jYWxsYmFja3MucGxheSwgdHJ1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpbnRlcm5hbCBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgaWYgdGhlIHZpZGVvIGZhaWxzIHRvIGxvYWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jbG9hZEVycm9ySGFuZGxlclxyXG4gICAgICogQGZpcmVzIFBoYXNlci5HYW1lT2JqZWN0cy5FdmVudHMjVklERU9fRVJST1JcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gVGhlIGVycm9yIEV2ZW50LlxyXG4gICAgICovXHJcbiAgICBsb2FkRXJyb3JIYW5kbGVyOiBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zdG9wKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZW1pdChFdmVudHMuVklERU9fRVJST1IsIHRoaXMsIGV2ZW50KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGludGVybmFsIG1ldGhvZCBpcyBjYWxsZWQgaWYgdGhlIHZpZGVvIGNvdWxkbid0IGJlIHBsYXllZCBiZWNhdXNlIGl0IHdhcyBpbnRlcmFjdGlvbiBsb2NrZWRcclxuICAgICAqIGJ5IHRoZSBicm93c2VyLCBidXQgYW4gaW5wdXQgZXZlbnQgaGFzIHNpbmNlIGJlZW4gcmVjZWl2ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jdW5sb2NrSGFuZGxlclxyXG4gICAgICogQGZpcmVzIFBoYXNlci5HYW1lT2JqZWN0cy5FdmVudHMjVklERU9fVU5MT0NLRURcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuR2FtZU9iamVjdHMuRXZlbnRzI1ZJREVPX1BMQVlcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55fSBlcnJvciAtIFRoZSBQcm9taXNlIHJlc29sdXRpb24gZXJyb3IuXHJcbiAgICAgKi9cclxuICAgIHVubG9ja0hhbmRsZXI6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy50b3VjaExvY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucGxheVdoZW5VbmxvY2tlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlZJREVPX1VOTE9DS0VELCB0aGlzKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX21hcmtlckluID4gLTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnZpZGVvLmN1cnJlbnRUaW1lID0gdGhpcy5fbWFya2VySW47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnZpZGVvLnBsYXkoKTtcclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5WSURFT19QTEFZLCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgdmlkZW8gY29tcGxldGVzIHBsYXliYWNrLCBpLmUuIHJlYWNoZXMgYW4gYGVuZGVkYCBzdGF0ZS5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyB3aWxsIG5ldmVyIGhhcHBlbiBpZiB0aGUgdmlkZW8gaXMgY29taW5nIGZyb20gYSBsaXZlIHN0cmVhbSwgd2hlcmUgdGhlIGR1cmF0aW9uIGlzIGBJbmZpbml0eWAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jY29tcGxldGVIYW5kbGVyXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkdhbWVPYmplY3RzLkV2ZW50cyNWSURFT19DT01QTEVURVxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICovXHJcbiAgICBjb21wbGV0ZUhhbmRsZXI6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5WSURFT19DT01QTEVURSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIHZpZGVvIGVtaXRzIGEgYHRpbWVVcGRhdGVgIGV2ZW50IGR1cmluZyBwbGF5YmFjay5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBldmVudCBpcyB0b28gc2xvdyBhbmQgaXJyZWd1bGFyIHRvIGJlIHVzZWQgZm9yIGFjdHVhbCB2aWRlbyB0aW1pbmcgb3IgdGV4dHVyZSB1cGRhdGluZyxcclxuICAgICAqIGJ1dCB3ZSBjYW4gdXNlIGl0IHRvIGRldGVybWluZSBpZiBhIHZpZGVvIGhhcyBsb29wZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jdGltZVVwZGF0ZUhhbmRsZXJcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuR2FtZU9iamVjdHMuRXZlbnRzI1ZJREVPX0xPT1BcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqL1xyXG4gICAgdGltZVVwZGF0ZUhhbmRsZXI6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMudmlkZW8gJiYgdGhpcy52aWRlby5jdXJyZW50VGltZSA8IHRoaXMuX2xhc3RVcGRhdGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlZJREVPX0xPT1AsIHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fbGFzdFVwZGF0ZSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBpbnRlcm5hbCB1cGRhdGUgc3RlcC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNwcmVVcGRhdGVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKi9cclxuICAgIHByZVVwZGF0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgdmlkZW8gPSB0aGlzLnZpZGVvO1xyXG5cclxuICAgICAgICBpZiAodmlkZW8pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudFRpbWUgPSB2aWRlby5jdXJyZW50VGltZTtcclxuXHJcbiAgICAgICAgICAgIC8vICBEb24ndCByZW5kZXIgYSBuZXcgZnJhbWUgdW5sZXNzIHRoZSB2aWRlbyBoYXMgYWN0dWFsbHkgY2hhbmdlZCB0aW1lXHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50VGltZSAhPT0gdGhpcy5fbGFzdFVwZGF0ZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbGFzdFVwZGF0ZSA9IGN1cnJlbnRUaW1lO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dHVyZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VGltZSA+PSB0aGlzLl9tYXJrZXJPdXQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvLmxvb3ApXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWRlby5jdXJyZW50VGltZSA9IHRoaXMuX21hcmtlckluO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0dXJlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYXN0VXBkYXRlID0gY3VycmVudFRpbWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlZJREVPX0xPT1AsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlZJREVPX0NPTVBMRVRFLCB0aGlzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBjYWxsYmFjayB0aGF0IG1vbml0b3JzIHRoZSBkb3dubG9hZCBwcm9ncmVzcyBvZiBhIHZpZGVvIGFmdGVyIGNoYW5naW5nIGl0cyBzb3VyY2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jY2hlY2tWaWRlb1Byb2dyZXNzXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkdhbWVPYmplY3RzLkV2ZW50cyNWSURFT19USU1FT1VUXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICovXHJcbiAgICBjaGVja1ZpZGVvUHJvZ3Jlc3M6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMudmlkZW8ucmVhZHlTdGF0ZSA+PSAyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFdlJ3ZlIGdvdCBlbm91Z2ggZGF0YSB0byB1cGRhdGUgdGhlIHRleHR1cmUgZm9yIHBsYXliYWNrXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dHVyZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJldHJ5LS07XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXRyeSA+IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JldHJ5SUQgPSB3aW5kb3cuc2V0VGltZW91dCh0aGlzLmNoZWNrVmlkZW9Qcm9ncmVzcy5iaW5kKHRoaXMpLCB0aGlzLnJldHJ5SW50ZXJ2YWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5WSURFT19USU1FT1VULCB0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdGhhdCBpcyBjYWxsZWQgd2hlbiBlbm91Z2ggdmlkZW8gZGF0YSBoYXMgYmVlbiByZWNlaXZlZCBpbiBvcmRlciB0byBjcmVhdGUgYSB0ZXh0dXJlXHJcbiAgICAgKiBmcm9tIGl0LiBUaGUgdGV4dHVyZSBpcyBhc3NpZ25lZCB0byB0aGUgYFZpZGVvLnZpZGVvVGV4dHVyZWAgcHJvcGVydHkgYW5kIGdpdmVuIGEgYmFzZSBmcmFtZSB0aGF0XHJcbiAgICAgKiBlbmNvbXBhc2VzIHRoZSB3aG9sZSB2aWRlbyBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3VwZGF0ZVRleHR1cmVcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqL1xyXG4gICAgdXBkYXRlVGV4dHVyZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgdmlkZW8gPSB0aGlzLnZpZGVvO1xyXG5cclxuICAgICAgICB2YXIgd2lkdGggPSB2aWRlby52aWRlb1dpZHRoO1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSB2aWRlby52aWRlb0hlaWdodDtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnZpZGVvVGV4dHVyZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudmlkZW9UZXh0dXJlID0gdGhpcy5zY2VuZS5zeXMudGV4dHVyZXMuY3JlYXRlKHRoaXMuX2tleSwgdmlkZW8sIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgICAgICB0aGlzLnZpZGVvVGV4dHVyZVNvdXJjZSA9IHRoaXMudmlkZW9UZXh0dXJlLnNvdXJjZVswXTtcclxuICAgICAgICAgICAgdGhpcy52aWRlb1RleHR1cmUuYWRkKCdfX0JBU0UnLCAwLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNldFRleHR1cmUodGhpcy52aWRlb1RleHR1cmUpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFNpemVUb0ZyYW1lKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzcGxheU9yaWdpbigpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuVklERU9fQ1JFQVRFRCwgdGhpcywgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0ZXh0dXJlU291cmNlID0gdGhpcy52aWRlb1RleHR1cmVTb3VyY2U7XHJcblxyXG4gICAgICAgICAgICBpZiAodGV4dHVyZVNvdXJjZS5zb3VyY2UgIT09IHZpZGVvKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlU291cmNlLnNvdXJjZSA9IHZpZGVvO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZVNvdXJjZS53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZVNvdXJjZS5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRleHR1cmVTb3VyY2UudXBkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGtleSBvZiB0aGUgY3VycmVudGx5IHBsYXllZCB2aWRlbywgYXMgc3RvcmVkIGluIHRoZSBWaWRlbyBDYWNoZS5cclxuICAgICAqIElmIHRoZSB2aWRlbyBkaWQgbm90IGNvbWUgZnJvbSB0aGUgY2FjaGUgdGhpcyB3aWxsIHJldHVybiBhbiBlbXB0eSBzdHJpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jZ2V0VmlkZW9LZXlcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUga2V5IG9mIHRoZSB2aWRlbyBiZWluZyBwbGF5ZWQgZnJvbSB0aGUgVmlkZW8gQ2FjaGUsIGlmIGFueS5cclxuICAgICAqL1xyXG4gICAgZ2V0VmlkZW9LZXk6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlS2V5O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlZWtzIHRvIGEgZ2l2ZW4gcG9pbnQgaW4gdGhlIHZpZGVvLiBUaGUgdmFsdWUgaXMgZ2l2ZW4gYXMgYSBmbG9hdCBiZXR3ZWVuIDAgYW5kIDEsXHJcbiAgICAgKiB3aGVyZSAwIHJlcHJlc2VudHMgdGhlIHN0YXJ0IG9mIHRoZSB2aWRlbyBhbmQgMSByZXByZXNlbnRzIHRoZSBlbmQuXHJcbiAgICAgKiBcclxuICAgICAqIFNlZWtpbmcgb25seSB3b3JrcyBpZiB0aGUgdmlkZW8gaGFzIGEgZHVyYXRpb24sIHNvIHdpbGwgbm90IHdvcmsgZm9yIGxpdmUgc3RyZWFtcy5cclxuICAgICAqIFxyXG4gICAgICogV2hlbiBzZWVraW5nIGJlZ2lucywgdGhpcyB2aWRlbyB3aWxsIGVtaXQgYSBgc2Vla2luZ2AgZXZlbnQuIFdoZW4gdGhlIHZpZGVvIGNvbXBsZXRlc1xyXG4gICAgICogc2Vla2luZyAoaS5lLiByZWFjaGVzIGl0cyBkZXNpZ25hdGVkIHRpbWVzdGFtcCkgaXQgd2lsbCBlbWl0IGEgYHNlZWtlZGAgZXZlbnQuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHlvdSB3aXNoIHRvIHNlZWsgYmFzZWQgb24gdGltZSBpbnN0ZWFkLCB1c2UgdGhlIGBWaWRlby5zZXRDdXJyZW50VGltZWAgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3NlZWtUb1xyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgcG9pbnQgaW4gdGhlIHZpZGVvIHRvIHNlZWsgdG8uIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFZpZGVvIEdhbWUgT2JqZWN0IGZvciBtZXRob2QgY2hhaW5pbmcuXHJcbiAgICAgKi9cclxuICAgIHNlZWtUbzogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB2aWRlbyA9IHRoaXMudmlkZW87XHJcblxyXG4gICAgICAgIGlmICh2aWRlbylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBkdXJhdGlvbiA9IHZpZGVvLmR1cmF0aW9uO1xyXG5cclxuICAgICAgICAgICAgaWYgKGR1cmF0aW9uICE9PSBJbmZpbml0eSAmJiAhaXNOYU4oZHVyYXRpb24pKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2Vla1RpbWUgPSBkdXJhdGlvbiAqIHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q3VycmVudFRpbWUoc2Vla1RpbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgaW5kaWNhdGluZyB0aGUgY3VycmVudCBwbGF5YmFjayB0aW1lIGluIHNlY29uZHMuXHJcbiAgICAgKiBJZiB0aGUgbWVkaWEgaGFzIG5vdCBzdGFydGVkIHRvIHBsYXkgYW5kIGhhcyBub3QgYmVlbiBzZWVrZWQsIHRoaXMgdmFsdWUgaXMgdGhlIG1lZGlhJ3MgaW5pdGlhbCBwbGF5YmFjayB0aW1lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI2dldEN1cnJlbnRUaW1lXHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gQSBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlIGluZGljYXRpbmcgdGhlIGN1cnJlbnQgcGxheWJhY2sgdGltZSBpbiBzZWNvbmRzLlxyXG4gICAgICovXHJcbiAgICBnZXRDdXJyZW50VGltZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMudmlkZW8pID8gdGhpcy52aWRlby5jdXJyZW50VGltZSA6IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2Vla3MgdG8gYSBnaXZlbiBwbGF5YmFjayB0aW1lIGluIHRoZSB2aWRlby4gVGhlIHZhbHVlIGlzIGdpdmVuIGluIF9zZWNvbmRzXyBvciBhcyBhIHN0cmluZy5cclxuICAgICAqIFxyXG4gICAgICogU2Vla2luZyBvbmx5IHdvcmtzIGlmIHRoZSB2aWRlbyBoYXMgYSBkdXJhdGlvbiwgc28gd2lsbCBub3Qgd29yayBmb3IgbGl2ZSBzdHJlYW1zLlxyXG4gICAgICogXHJcbiAgICAgKiBXaGVuIHNlZWtpbmcgYmVnaW5zLCB0aGlzIHZpZGVvIHdpbGwgZW1pdCBhIGBzZWVraW5nYCBldmVudC4gV2hlbiB0aGUgdmlkZW8gY29tcGxldGVzXHJcbiAgICAgKiBzZWVraW5nIChpLmUuIHJlYWNoZXMgaXRzIGRlc2lnbmF0ZWQgdGltZXN0YW1wKSBpdCB3aWxsIGVtaXQgYSBgc2Vla2VkYCBldmVudC5cclxuICAgICAqIFxyXG4gICAgICogWW91IGNhbiBwcm92aWRlIGEgc3RyaW5nIHByZWZpeGVkIHdpdGggZWl0aGVyIGEgYCtgIG9yIGEgYC1gLCBzdWNoIGFzIGArMi41YCBvciBgLTIuNWAuXHJcbiAgICAgKiBJbiB0aGlzIGNhc2UgaXQgd2lsbCBzZWVrIHRvICsvLSB0aGUgdmFsdWUgZ2l2ZW4sIHJlbGF0aXZlIHRvIHRoZSBfY3VycmVudCB0aW1lXy5cclxuICAgICAqIFxyXG4gICAgICogSWYgeW91IHdpc2ggdG8gc2VlayBiYXNlZCBvbiBhIGR1cmF0aW9uIHBlcmNlbnRhZ2UgaW5zdGVhZCwgdXNlIHRoZSBgVmlkZW8uc2Vla1RvYCBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jc2V0Q3VycmVudFRpbWVcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfG51bWJlcil9IHZhbHVlIC0gVGhlIHBsYXliYWNrIHRpbWUgdG8gc2VlayB0byBpbiBzZWNvbmRzLiBDYW4gYmUgZXhwcmVzc2VkIGFzIGEgc3RyaW5nLCBzdWNoIGFzIGArMmAgdG8gc2VlayAyIHNlY29uZHMgYWhlYWQgZnJvbSB0aGUgY3VycmVudCB0aW1lLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFZpZGVvIEdhbWUgT2JqZWN0IGZvciBtZXRob2QgY2hhaW5pbmcuXHJcbiAgICAgKi9cclxuICAgIHNldEN1cnJlbnRUaW1lOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHZpZGVvID0gdGhpcy52aWRlbztcclxuXHJcbiAgICAgICAgaWYgKHZpZGVvKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBvcCA9IHZhbHVlWzBdO1xyXG4gICAgICAgICAgICAgICAgdmFyIG51bSA9IHBhcnNlRmxvYXQodmFsdWUuc3Vic3RyKDEpKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAob3AgPT09ICcrJylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZpZGVvLmN1cnJlbnRUaW1lICsgbnVtO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAob3AgPT09ICctJylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZpZGVvLmN1cnJlbnRUaW1lIC0gbnVtO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2aWRlby5jdXJyZW50VGltZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fbGFzdFVwZGF0ZSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGlzIFZpZGVvIGlzIGN1cnJlbnRseSBzZWVraW5nLCBvciBub3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jaXNTZWVraW5nXHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoaXMgVmlkZW8gaXMgY3VycmVudGx5IHNlZWtpbmcsIG9yIG5vdC5cclxuICAgICAqL1xyXG4gICAgaXNTZWVraW5nOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc1NlZWtpbmc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgc2Vla2luZyBoYW5kbGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3NlZWtpbmdIYW5kbGVyXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkdhbWVPYmplY3RzLkV2ZW50cyNWSURFT19TRUVLSU5HXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICovXHJcbiAgICBzZWVraW5nSGFuZGxlcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9pc1NlZWtpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlZJREVPX1NFRUtJTkcsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIHNlZWtlZCBoYW5kbGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3NlZWtlZEhhbmRsZXJcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuR2FtZU9iamVjdHMuRXZlbnRzI1ZJREVPX1NFRUtFRFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqL1xyXG4gICAgc2Vla2VkSGFuZGxlcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9pc1NlZWtpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5WSURFT19TRUVLRUQsIHRoaXMpO1xyXG5cclxuICAgICAgICB2YXIgdmlkZW8gPSB0aGlzLnZpZGVvO1xyXG5cclxuICAgICAgICBpZiAodmlkZW8pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHR1cmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBwcm9ncmVzcyBvZiB0aGUgdmlkZW8uIFByb2dyZXNzIGlzIGRlZmluZWQgYXMgYSB2YWx1ZSBiZXR3ZWVuIDAgKHRoZSBzdGFydClcclxuICAgICAqIGFuZCAxICh0aGUgZW5kKS5cclxuICAgICAqIFxyXG4gICAgICogUHJvZ3Jlc3MgY2FuIG9ubHkgYmUgcmV0dXJuZWQgaWYgdGhlIHZpZGVvIGhhcyBhIGR1cmF0aW9uLCBvdGhlcndpc2UgaXQgd2lsbCBhbHdheXMgcmV0dXJuIHplcm8uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jZ2V0UHJvZ3Jlc3NcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgY3VycmVudCBwcm9ncmVzcyBvZiBwbGF5YmFjay4gSWYgdGhlIHZpZGVvIGhhcyBubyBkdXJhdGlvbiwgd2lsbCBhbHdheXMgcmV0dXJuIHplcm8uXHJcbiAgICAgKi9cclxuICAgIGdldFByb2dyZXNzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB2aWRlbyA9IHRoaXMudmlkZW87XHJcblxyXG4gICAgICAgIGlmICh2aWRlbylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBub3cgPSB2aWRlby5jdXJyZW50VGltZTtcclxuICAgICAgICAgICAgdmFyIGR1cmF0aW9uID0gdmlkZW8uZHVyYXRpb247XHJcblxyXG4gICAgICAgICAgICBpZiAoZHVyYXRpb24gIT09IEluZmluaXR5ICYmICFpc05hTihkdXJhdGlvbikpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBub3cgLyBkdXJhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgd2hpY2ggaW5kaWNhdGVzIHRoZSBkdXJhdGlvbiAodG90YWwgbGVuZ3RoKSBvZiB0aGUgbWVkaWEgaW4gc2Vjb25kcyxcclxuICAgICAqIG9uIHRoZSBtZWRpYSdzIHRpbWVsaW5lLiBJZiBubyBtZWRpYSBpcyBwcmVzZW50IG9uIHRoZSBlbGVtZW50LCBvciB0aGUgbWVkaWEgaXMgbm90IHZhbGlkLCB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgTmFOLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgbWVkaWEgaGFzIG5vIGtub3duIGVuZCAoc3VjaCBhcyBmb3IgbGl2ZSBzdHJlYW1zIG9mIHVua25vd24gZHVyYXRpb24sIHdlYiByYWRpbywgbWVkaWEgaW5jb21pbmcgZnJvbSBXZWJSVEMsXHJcbiAgICAgKiBhbmQgc28gZm9ydGgpLCB0aGlzIHZhbHVlIGlzICtJbmZpbml0eS5cclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jZ2V0RHVyYXRpb25cclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBBIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgaW5kaWNhdGluZyB0aGUgZHVyYXRpb24gb2YgdGhlIG1lZGlhIGluIHNlY29uZHMuXHJcbiAgICAgKi9cclxuICAgIGdldER1cmF0aW9uOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAodGhpcy52aWRlbykgPyB0aGlzLnZpZGVvLmR1cmF0aW9uIDogMDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBtdXRlZCBzdGF0ZSBvZiB0aGUgY3VycmVudGx5IHBsYXlpbmcgdmlkZW8sIGlmIG9uZSBpcyBsb2FkZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jc2V0TXV0ZVxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt2YWx1ZT10cnVlXSAtIFRoZSBtdXRlIHZhbHVlLiBgdHJ1ZWAgaWYgdGhlIHZpZGVvIHNob3VsZCBiZSBtdXRlZCwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgVmlkZW8gR2FtZSBPYmplY3QgZm9yIG1ldGhvZCBjaGFpbmluZy5cclxuICAgICAqL1xyXG4gICAgc2V0TXV0ZTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7IHZhbHVlID0gdHJ1ZTsgfVxyXG5cclxuICAgICAgICB0aGlzLl9jb2RlTXV0ZWQgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgdmFyIHZpZGVvID0gdGhpcy52aWRlbztcclxuXHJcbiAgICAgICAgaWYgKHZpZGVvKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmlkZW8ubXV0ZWQgPSAodGhpcy5fc3lzdGVtTXV0ZWQpID8gdHJ1ZSA6IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGlzIFZpZGVvIGlzIGN1cnJlbnRseSBtdXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNpc011dGVkXHJcbiAgICAgKiBAc2luY2UgMy4yMC4wXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoaXMgVmlkZW8gaXMgY3VycmVudGx5IG11dGVkLCBvciBub3QuXHJcbiAgICAgKi9cclxuICAgIGlzTXV0ZWQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvZGVNdXRlZDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBnbG9iYWwgbXV0ZSBoYW5kbGVyLiBXaWxsIG11dGUgdGhlIHZpZGVvLCBpZiBwbGF5aW5nLCBpZiB0aGUgZ2xvYmFsIHNvdW5kIHN5c3RlbSBtdXRlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNnbG9iYWxNdXRlXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuU291bmQuV2ViQXVkaW9Tb3VuZE1hbmFnZXJ8UGhhc2VyLlNvdW5kLkhUTUw1QXVkaW9Tb3VuZE1hbmFnZXIpfSBzb3VuZE1hbmFnZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgU291bmQgTWFuYWdlciB0aGF0IGVtaXR0ZWQgdGhlIGV2ZW50LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBtdXRlIC0gVGhlIG11dGUgdmFsdWUuIGB0cnVlYCBpZiB0aGUgU291bmQgTWFuYWdlciBpcyBub3cgbXV0ZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBnbG9iYWxNdXRlOiBmdW5jdGlvbiAoc291bmRNYW5hZ2VyLCB2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9zeXN0ZW1NdXRlZCA9IHZhbHVlO1xyXG5cclxuICAgICAgICB2YXIgdmlkZW8gPSB0aGlzLnZpZGVvO1xyXG5cclxuICAgICAgICBpZiAodmlkZW8pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2aWRlby5tdXRlZCA9ICh0aGlzLl9jb2RlTXV0ZWQpID8gdHJ1ZSA6IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBnbG9iYWwgcGF1c2UgaGFuZGxlci4gV2lsbCBwYXVzZSB0aGUgdmlkZW8gaWYgdGhlIEdhbWUgaXRzZWxmIHBhdXNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNnbG9iYWxQYXVzZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqL1xyXG4gICAgZ2xvYmFsUGF1c2U6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fc3lzdGVtUGF1c2VkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmlkZW8pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnZpZGVvLnBhdXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIGdsb2JhbCByZXN1bWUgaGFuZGxlci4gV2lsbCByZXN1bWUgYSBwYXVzZWQgdmlkZW8gaWYgdGhlIEdhbWUgaXRzZWxmIHJlc3VtZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jZ2xvYmFsUmVzdW1lXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICovXHJcbiAgICBnbG9iYWxSZXN1bWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fc3lzdGVtUGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZpZGVvICYmICF0aGlzLl9jb2RlUGF1c2VkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy52aWRlby5wbGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHBhdXNlZCBzdGF0ZSBvZiB0aGUgY3VycmVudGx5IGxvYWRlZCB2aWRlby5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIHZpZGVvIGlzIHBsYXlpbmcsIGNhbGxpbmcgdGhpcyBtZXRob2Qgd2l0aCBgdHJ1ZWAgd2lsbCBwYXVzZSBwbGF5YmFjay5cclxuICAgICAqIElmIHRoZSB2aWRlbyBpcyBwYXVzZWQsIGNhbGxpbmcgdGhpcyBtZXRob2Qgd2l0aCBgZmFsc2VgIHdpbGwgcmVzdW1lIHBsYXliYWNrLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiBubyB2aWRlbyBpcyBsb2FkZWQsIHRoaXMgbWV0aG9kIGRvZXMgbm90aGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNzZXRQYXVzZWRcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdmFsdWU9dHJ1ZV0gLSBUaGUgcGF1c2VkIHZhbHVlLiBgdHJ1ZWAgaWYgdGhlIHZpZGVvIHNob3VsZCBiZSBwYXVzZWQsIGBmYWxzZWAgdG8gcmVzdW1lIGl0LlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFZpZGVvIEdhbWUgT2JqZWN0IGZvciBtZXRob2QgY2hhaW5pbmcuXHJcbiAgICAgKi9cclxuICAgIHNldFBhdXNlZDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7IHZhbHVlID0gdHJ1ZTsgfVxyXG5cclxuICAgICAgICB2YXIgdmlkZW8gPSB0aGlzLnZpZGVvO1xyXG5cclxuICAgICAgICB0aGlzLl9jb2RlUGF1c2VkID0gdmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh2aWRlbylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF2aWRlby5wYXVzZWQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmlkZW8ucGF1c2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICghdmFsdWUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmICh2aWRlby5wYXVzZWQgJiYgIXRoaXMuX3N5c3RlbVBhdXNlZClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2aWRlby5wbGF5KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBkb3VibGUgaW5kaWNhdGluZyB0aGUgYXVkaW8gdm9sdW1lLCBmcm9tIDAuMCAoc2lsZW50KSB0byAxLjAgKGxvdWRlc3QpLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNnZXRWb2x1bWVcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBBIGRvdWJsZSBpbmRpY2F0aW5nIHRoZSBhdWRpbyB2b2x1bWUsIGZyb20gMC4wIChzaWxlbnQpIHRvIDEuMCAobG91ZGVzdCkuXHJcbiAgICAgKi9cclxuICAgIGdldFZvbHVtZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMudmlkZW8pID8gdGhpcy52aWRlby52b2x1bWUgOiAxO1xyXG4gICAgfSxcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB2b2x1bWUgb2YgdGhlIGN1cnJlbnRseSBwbGF5aW5nIHZpZGVvLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgdmFsdWUgZ2l2ZW4gaXMgYSBkb3VibGUgaW5kaWNhdGluZyB0aGUgYXVkaW8gdm9sdW1lLCBmcm9tIDAuMCAoc2lsZW50KSB0byAxLjAgKGxvdWRlc3QpLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNzZXRWb2x1bWVcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt2YWx1ZT0xXSAtIEEgZG91YmxlIGluZGljYXRpbmcgdGhlIGF1ZGlvIHZvbHVtZSwgZnJvbSAwLjAgKHNpbGVudCkgdG8gMS4wIChsb3VkZXN0KS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBWaWRlbyBHYW1lIE9iamVjdCBmb3IgbWV0aG9kIGNoYWluaW5nLlxyXG4gICAgICovXHJcbiAgICBzZXRWb2x1bWU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZSA9IDE7IH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmlkZW8pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnZpZGVvLnZvbHVtZSA9IENsYW1wKHZhbHVlLCAwLCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBkb3VibGUgdGhhdCBpbmRpY2F0ZXMgdGhlIHJhdGUgYXQgd2hpY2ggdGhlIG1lZGlhIGlzIGJlaW5nIHBsYXllZCBiYWNrLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNnZXRQbGF5YmFja1JhdGVcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBBIGRvdWJsZSB0aGF0IGluZGljYXRlcyB0aGUgcmF0ZSBhdCB3aGljaCB0aGUgbWVkaWEgaXMgYmVpbmcgcGxheWVkIGJhY2suXHJcbiAgICAgKi9cclxuICAgIGdldFBsYXliYWNrUmF0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMudmlkZW8pID8gdGhpcy52aWRlby5wbGF5YmFja1JhdGUgOiAxO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIGN1cnJlbnQgdmlkZW8uXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSB2YWx1ZSBnaXZlbiBpcyBhIGRvdWJsZSB0aGF0IGluZGljYXRlcyB0aGUgcmF0ZSBhdCB3aGljaCB0aGUgbWVkaWEgaXMgYmVpbmcgcGxheWVkIGJhY2suXHJcbiAgICAgKiBcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3NldFBsYXliYWNrUmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3JhdGVdIC0gQSBkb3VibGUgdGhhdCBpbmRpY2F0ZXMgdGhlIHJhdGUgYXQgd2hpY2ggdGhlIG1lZGlhIGlzIGJlaW5nIHBsYXllZCBiYWNrLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFZpZGVvIEdhbWUgT2JqZWN0IGZvciBtZXRob2QgY2hhaW5pbmcuXHJcbiAgICAgKi9cclxuICAgIHNldFBsYXliYWNrUmF0ZTogZnVuY3Rpb24gKHJhdGUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMudmlkZW8pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnZpZGVvLnBsYXliYWNrUmF0ZSA9IHJhdGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgYm9vbGVhbiB3aGljaCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgbWVkaWEgZWxlbWVudCBzaG91bGQgc3RhcnQgb3ZlciB3aGVuIGl0IHJlYWNoZXMgdGhlIGVuZC5cclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jZ2V0TG9vcFxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBBIGJvb2xlYW4gd2hpY2ggaW5kaWNhdGVzIHdoZXRoZXIgdGhlIG1lZGlhIGVsZW1lbnQgd2lsbCBzdGFydCBvdmVyIHdoZW4gaXQgcmVhY2hlcyB0aGUgZW5kLlxyXG4gICAgICovXHJcbiAgICBnZXRMb29wOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAodGhpcy52aWRlbykgPyB0aGlzLnZpZGVvLmxvb3AgOiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBsb29wIHN0YXRlIG9mIHRoZSBjdXJyZW50IHZpZGVvLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgdmFsdWUgZ2l2ZW4gaXMgYSBib29sZWFuIHdoaWNoIGluZGljYXRlcyB3aGV0aGVyIHRoZSBtZWRpYSBlbGVtZW50IHdpbGwgc3RhcnQgb3ZlciB3aGVuIGl0IHJlYWNoZXMgdGhlIGVuZC5cclxuICAgICAqIFxyXG4gICAgICogTm90IGFsbCB2aWRlb3MgY2FuIGxvb3AsIGZvciBleGFtcGxlIGxpdmUgc3RyZWFtcy5cclxuICAgICAqIFxyXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCBub3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgX3NlYW1sZXNzXyB2aWRlbyBsb29waW5nIGZvciBhbGwgZW5jb2RpbmcgZm9ybWF0cy5cclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jc2V0TG9vcFxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt2YWx1ZT10cnVlXSAtIEEgYm9vbGVhbiB3aGljaCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgbWVkaWEgZWxlbWVudCB3aWxsIHN0YXJ0IG92ZXIgd2hlbiBpdCByZWFjaGVzIHRoZSBlbmQuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3RoaXN9IFRoaXMgVmlkZW8gR2FtZSBPYmplY3QgZm9yIG1ldGhvZCBjaGFpbmluZy5cclxuICAgICAqL1xyXG4gICAgc2V0TG9vcDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7IHZhbHVlID0gdHJ1ZTsgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy52aWRlbylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudmlkZW8ubG9vcCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIGJvb2xlYW4gd2hpY2ggaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHZpZGVvIGlzIGN1cnJlbnRseSBwbGF5aW5nLlxyXG4gICAgICogXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNpc1BsYXlpbmdcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gQSBib29sZWFuIHdoaWNoIGluZGljYXRlcyB3aGV0aGVyIHRoZSB2aWRlbyBpcyBwbGF5aW5nLCBvciBub3QuXHJcbiAgICAgKi9cclxuICAgIGlzUGxheWluZzogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMudmlkZW8pID8gISh0aGlzLnZpZGVvLnBhdXNlZCB8fCB0aGlzLnZpZGVvLmVuZGVkKSA6IGZhbHNlO1xyXG4gICAgfSxcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgYm9vbGVhbiB3aGljaCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgdmlkZW8gaXMgY3VycmVudGx5IHBhdXNlZC5cclxuICAgICAqIFxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jaXNQYXVzZWRcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gQSBib29sZWFuIHdoaWNoIGluZGljYXRlcyB3aGV0aGVyIHRoZSB2aWRlbyBpcyBwYXVzZWQsIG9yIG5vdC5cclxuICAgICAqL1xyXG4gICAgaXNQYXVzZWQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICgodGhpcy52aWRlbyAmJiB0aGlzLnZpZGVvLnBhdXNlZCkgfHwgdGhpcy5fY29kZVBhdXNlZCB8fCB0aGlzLl9zeXN0ZW1QYXVzZWQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3JlcyB0aGlzIFZpZGVvIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIgdXNpbmcgdGhlIGdpdmVuIGtleSBhcyBhIGR5bmFtaWMgdGV4dHVyZSxcclxuICAgICAqIHdoaWNoIGFueSB0ZXh0dXJlLWJhc2VkIEdhbWUgT2JqZWN0LCBzdWNoIGFzIGEgU3ByaXRlLCBjYW4gdXNlIGFzIGl0cyB0ZXh0dXJlOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB2YXIgdmlkID0gdGhpcy5hZGQudmlkZW8oMCwgMCwgJ2ludHJvJyk7XHJcbiAgICAgKiBcclxuICAgICAqIHZpZC5wbGF5KCk7XHJcbiAgICAgKiBcclxuICAgICAqIHZpZC5zYXZlVGV4dHVyZSgnZG9vZGxlJyk7XHJcbiAgICAgKiBcclxuICAgICAqIHRoaXMuYWRkLmltYWdlKDQwMCwgMzAwLCAnZG9vZGxlJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogVGhlIHNhdmVkIHRleHR1cmUgaXMgYXV0b21hdGljYWxseSB1cGRhdGVkIGFzIHRoZSB2aWRlbyBwbGF5cy4gSWYgeW91IHBhdXNlIHRoaXMgdmlkZW8sXHJcbiAgICAgKiBvciBjaGFuZ2UgaXRzIHNvdXJjZSwgdGhlbiB0aGUgc2F2ZWQgdGV4dHVyZSB1cGRhdGVzIGluc3RhbnRseS5cclxuICAgICAqIFxyXG4gICAgICogQ2FsbGluZyBgc2F2ZVRleHR1cmVgIGFnYWluIHdpbGwgbm90IHNhdmUgYW5vdGhlciBjb3B5IG9mIHRoZSBzYW1lIHRleHR1cmUsIGl0IHdpbGwganVzdCByZW5hbWUgdGhlIGV4aXN0aW5nIG9uZS5cclxuICAgICAqIFxyXG4gICAgICogQnkgZGVmYXVsdCBpdCB3aWxsIGNyZWF0ZSBhIHNpbmdsZSBiYXNlIHRleHR1cmUuIFlvdSBjYW4gYWRkIGZyYW1lcyB0byB0aGUgdGV4dHVyZVxyXG4gICAgICogYnkgdXNpbmcgdGhlIGBUZXh0dXJlLmFkZGAgbWV0aG9kLiBBZnRlciBkb2luZyB0aGlzLCB5b3UgY2FuIHRoZW4gYWxsb3cgR2FtZSBPYmplY3RzXHJcbiAgICAgKiB0byB1c2UgYSBzcGVjaWZpYyBmcmFtZS5cclxuICAgICAqIFxyXG4gICAgICogSWYgeW91IGludGVuZCB0byBzYXZlIHRoZSB0ZXh0dXJlIHNvIHlvdSBjYW4gdXNlIGl0IGFzIHRoZSBpbnB1dCBmb3IgYSBTaGFkZXIsIHlvdSBtYXkgbmVlZCB0byBzZXQgdGhlXHJcbiAgICAgKiBgZmxpcFlgIHBhcmFtZXRlciB0byBgdHJ1ZWAgaWYgeW91IGZpbmQgdGhlIHZpZGVvIHJlbmRlcnMgdXBzaWRlIGRvd24gaW4geW91ciBzaGFkZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW8jc2F2ZVRleHR1cmVcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBrZXkgdG8gc3RvcmUgdGhlIHRleHR1cmUgYXMgd2l0aGluIHRoZSBnbG9iYWwgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZmxpcFk9ZmFsc2VdIC0gU2hvdWxkIHRoZSBXZWJHTCBUZXh0dXJlIHNldCBgVU5QQUNLX01VTFRJUExZX0ZMSVBfWWAgZHVyaW5nIHVwbG9hZD9cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZX0gVGhlIFRleHR1cmUgdGhhdCB3YXMgc2F2ZWQuXHJcbiAgICAgKi9cclxuICAgIHNhdmVUZXh0dXJlOiBmdW5jdGlvbiAoa2V5LCBmbGlwWSlcclxuICAgIHtcclxuICAgICAgICBpZiAoZmxpcFkgPT09IHVuZGVmaW5lZCkgeyBmbGlwWSA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZpZGVvVGV4dHVyZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuc3lzLnRleHR1cmVzLnJlbmFtZVRleHR1cmUodGhpcy5fa2V5LCBrZXkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fa2V5ID0ga2V5O1xyXG5cclxuICAgICAgICB0aGlzLmZsaXBZID0gZmxpcFk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZpZGVvVGV4dHVyZVNvdXJjZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudmlkZW9UZXh0dXJlU291cmNlLnNldEZsaXBZKGZsaXBZKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZGVvVGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9wcyB0aGUgdmlkZW8gcGxheWluZyBhbmQgY2xlYXJzIGFsbCBpbnRlcm5hbCBldmVudCBsaXN0ZW5lcnMuXHJcbiAgICAgKlxyXG4gICAgICogSWYgeW91IG9ubHkgd2lzaCB0byBwYXVzZSBwbGF5YmFjayBvZiB0aGUgdmlkZW8sIGFuZCByZXN1bWUgaXQgYSBsYXRlciB0aW1lLCB1c2UgdGhlIGBWaWRlby5wYXVzZWAgbWV0aG9kIGluc3RlYWQuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZSB2aWRlbyBoYXNuJ3QgZmluaXNoZWQgZG93bmxvYWRpbmcsIGNhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBub3QgYWJvcnQgdGhlIGRvd25sb2FkLiBUbyBkbyB0aGF0IHlvdSBuZWVkIHRvXHJcbiAgICAgKiBjYWxsIGBkZXN0cm95YCBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3N0b3BcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuR2FtZU9iamVjdHMuRXZlbnRzI1ZJREVPX1NUT1BcclxuICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7dGhpc30gVGhpcyBWaWRlbyBHYW1lIE9iamVjdCBmb3IgbWV0aG9kIGNoYWluaW5nLlxyXG4gICAgICovXHJcbiAgICBzdG9wOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB2aWRlbyA9IHRoaXMudmlkZW87XHJcblxyXG4gICAgICAgIGlmICh2aWRlbylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3M7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBjYWxsYmFjayBpbiBjYWxsYmFja3MpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoY2FsbGJhY2ssIGNhbGxiYWNrc1tjYWxsYmFja10sIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2aWRlby5wYXVzZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3JldHJ5SUQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX3JldHJ5SUQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5WSURFT19TVE9QLCB0aGlzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgVmlkZW8gZWxlbWVudCBmcm9tIHRoZSBET00gYnkgY2FsbGluZyBwYXJlbnROb2RlLnJlbW92ZUNoaWxkIG9uIGl0c2VsZi5cclxuICAgICAqIFxyXG4gICAgICogQWxzbyByZW1vdmVzIHRoZSBhdXRvcGxheSBhbmQgc3JjIGF0dHJpYnV0ZXMgYW5kIG51bGxzIHRoZSBWaWRlbyByZWZlcmVuY2UuXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBzaG91bGQgbm90IGNhbGwgdGhpcyBtZXRob2QgaWYgeW91IHdlcmUgcGxheWluZyBhIHZpZGVvIGZyb20gdGhlIFZpZGVvIENhY2hlIHRoYXRcclxuICAgICAqIHlvdSB3aXNoIHRvIHBsYXkgYWdhaW4gaW4geW91ciBnYW1lLCBvciBpZiBhbm90aGVyIFZpZGVvIG9iamVjdCBpcyBhbHNvIHVzaW5nIHRoZSBzYW1lXHJcbiAgICAgKiB2aWRlby5cclxuICAgICAqIFxyXG4gICAgICogSWYgeW91IGxvYWRlZCBhbiBleHRlcm5hbCB2aWRlbyB2aWEgYFZpZGVvLmxvYWRVUkxgIHRoZW4geW91IHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb25cclxuICAgICAqIHRvIGNsZWFyIHVwIG9uY2UgeW91IGFyZSBkb25lIHdpdGggdGhlIGluc3RhbmNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlZpZGVvI3JlbW92ZVZpZGVvRWxlbWVudFxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICovXHJcbiAgICByZW1vdmVWaWRlb0VsZW1lbnQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHZpZGVvID0gdGhpcy52aWRlbztcclxuXHJcbiAgICAgICAgaWYgKCF2aWRlbylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2aWRlby5wYXJlbnROb2RlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmlkZW8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh2aWRlbyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSAodmlkZW8uaGFzQ2hpbGROb2RlcygpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmlkZW8ucmVtb3ZlQ2hpbGQodmlkZW8uZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2aWRlby5yZW1vdmVBdHRyaWJ1dGUoJ2F1dG9wbGF5Jyk7XHJcbiAgICAgICAgdmlkZW8ucmVtb3ZlQXR0cmlidXRlKCdzcmMnKTtcclxuXHJcbiAgICAgICAgdGhpcy52aWRlbyA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyB0aGUgcHJlLWRlc3Ryb3kgc3RlcCBmb3IgdGhlIFZpZGVvIG9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBjYWxscyBgVmlkZW8uc3RvcGAgYW5kIG9wdGlvbmFsbHkgYFZpZGVvLnJlbW92ZVZpZGVvRWxlbWVudGAuXHJcbiAgICAgKiBcclxuICAgICAqIElmIGFueSBTcHJpdGVzIGFyZSB1c2luZyB0aGlzIFZpZGVvIGFzIHRoZWlyIHRleHR1cmUgaXQgaXMgdXAgdG8geW91IHRvIG1hbmFnZSB0aG9zZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNwcmVEZXN0cm95XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICovXHJcbiAgICBwcmVEZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc3RvcCgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5yZW1vdmVWaWRlb0VsZW1lbnRPbkRlc3Ryb3kpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVZpZGVvRWxlbWVudCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGdhbWUgPSB0aGlzLnNjZW5lLnN5cy5nYW1lLmV2ZW50cztcclxuXHJcbiAgICAgICAgZ2FtZS5vZmYoR2FtZUV2ZW50cy5QQVVTRSwgdGhpcy5nbG9iYWxQYXVzZSwgdGhpcyk7XHJcbiAgICAgICAgZ2FtZS5vZmYoR2FtZUV2ZW50cy5SRVNVTUUsIHRoaXMuZ2xvYmFsUmVzdW1lLCB0aGlzKTtcclxuXHJcbiAgICAgICAgdmFyIHNvdW5kID0gdGhpcy5zY2VuZS5zeXMuc291bmQ7XHJcblxyXG4gICAgICAgIGlmIChzb3VuZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHNvdW5kLm9mZihTb3VuZEV2ZW50cy5HTE9CQUxfTVVURSwgdGhpcy5nbG9iYWxNdXRlLCB0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9yZXRyeUlEKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLl9yZXRyeUlEKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVmlkZW87XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/video/Video.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/video/VideoCanvasRenderer.js":
/*!**************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/video/VideoCanvasRenderer.js ***!
\**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the Canvas Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Video#renderCanvas\r\n * @since 3.20.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer.\r\n * @param {Phaser.GameObjects.Video} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar VideoCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n if (src.videoTexture)\r\n {\r\n renderer.batchSprite(src, src.frame, camera, parentMatrix);\r\n }\r\n};\r\n\r\nmodule.exports = VideoCanvasRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy92aWRlby9WaWRlb0NhbnZhc1JlbmRlcmVyLmpzP2I3NDciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcseUJBQXlCO0FBQ3BDLFdBQVcsT0FBTztBQUNsQixXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhDQUE4QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvdmlkZW8vVmlkZW9DYW52YXNSZW5kZXJlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlbmRlcnMgdGhpcyBHYW1lIE9iamVjdCB3aXRoIHRoZSBDYW52YXMgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNyZW5kZXJDYW52YXNcclxuICogQHNpbmNlIDMuMjAuMFxyXG4gKiBAcHJpdmF0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5SZW5kZXJlci5DYW52YXMuQ2FudmFzUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIENhbnZhcyByZW5kZXJlci5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW99IHNyYyAtIFRoZSBHYW1lIE9iamVjdCBiZWluZyByZW5kZXJlZCBpbiB0aGlzIGNhbGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBjdXN0b20gcGlwZWxpbmVzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHRoYXQgaXMgcmVuZGVyaW5nIHRoZSBHYW1lIE9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9IHBhcmVudE1hdHJpeCAtIFRoaXMgdHJhbnNmb3JtIG1hdHJpeCBpcyBkZWZpbmVkIGlmIHRoZSBnYW1lIG9iamVjdCBpcyBuZXN0ZWRcclxuICovXHJcbnZhciBWaWRlb0NhbnZhc1JlbmRlcmVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzcmMsIGludGVycG9sYXRpb25QZXJjZW50YWdlLCBjYW1lcmEsIHBhcmVudE1hdHJpeClcclxue1xyXG4gICAgaWYgKHNyYy52aWRlb1RleHR1cmUpXHJcbiAgICB7XHJcbiAgICAgICAgcmVuZGVyZXIuYmF0Y2hTcHJpdGUoc3JjLCBzcmMuZnJhbWUsIGNhbWVyYSwgcGFyZW50TWF0cml4KTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVmlkZW9DYW52YXNSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/video/VideoCanvasRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/video/VideoCreator.js":
/*!*******************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/video/VideoCreator.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BuildGameObject = __webpack_require__(/*! ../BuildGameObject */ \"./node_modules/phaser/src/gameobjects/BuildGameObject.js\");\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar Video = __webpack_require__(/*! ./Video */ \"./node_modules/phaser/src/gameobjects/video/Video.js\");\r\n\r\n/**\r\n * Creates a new Video Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Video Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#video\r\n * @since 3.20.0\r\n *\r\n * @param {object} config - The configuration object this Game Object will use to create itself.\r\n * @param {boolean} [addToScene] - Add this Game Object to the Scene after creating it? If set this argument overrides the `add` property in the config object.\r\n *\r\n * @return {Phaser.GameObjects.Video} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('video', function (config, addToScene)\r\n{\r\n if (config === undefined) { config = {}; }\r\n\r\n var key = GetAdvancedValue(config, 'key', null);\r\n\r\n var video = new Video(this.scene, 0, 0, key);\r\n\r\n if (addToScene !== undefined)\r\n {\r\n config.add = addToScene;\r\n }\r\n\r\n BuildGameObject(this.scene, video, config);\r\n\r\n return video;\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectCreator context.\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy92aWRlby9WaWRlb0NyZWF0b3IuanM/ODZlYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsc0JBQXNCLG1CQUFPLENBQUMsb0ZBQW9CO0FBQ2xELHdCQUF3QixtQkFBTyxDQUFDLHdGQUFzQjtBQUN0RCx1QkFBdUIsbUJBQU8sQ0FBQyx1R0FBcUM7QUFDcEUsWUFBWSxtQkFBTyxDQUFDLHFFQUFTOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVkseUJBQXlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixhQUFhOztBQUU1Qzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy92aWRlby9WaWRlb0NyZWF0b3IuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCdWlsZEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi9CdWlsZEdhbWVPYmplY3QnKTtcclxudmFyIEdhbWVPYmplY3RDcmVhdG9yID0gcmVxdWlyZSgnLi4vR2FtZU9iamVjdENyZWF0b3InKTtcclxudmFyIEdldEFkdmFuY2VkVmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0QWR2YW5jZWRWYWx1ZScpO1xyXG52YXIgVmlkZW8gPSByZXF1aXJlKCcuL1ZpZGVvJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBWaWRlbyBHYW1lIE9iamVjdCBhbmQgcmV0dXJucyBpdC5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgVmlkZW8gR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RDcmVhdG9yI3ZpZGVvXHJcbiAqIEBzaW5jZSAzLjIwLjBcclxuICpcclxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIGNyZWF0ZSBpdHNlbGYuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FkZFRvU2NlbmVdIC0gQWRkIHRoaXMgR2FtZSBPYmplY3QgdG8gdGhlIFNjZW5lIGFmdGVyIGNyZWF0aW5nIGl0PyBJZiBzZXQgdGhpcyBhcmd1bWVudCBvdmVycmlkZXMgdGhlIGBhZGRgIHByb3BlcnR5IGluIHRoZSBjb25maWcgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuVmlkZW99IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdENyZWF0b3IucmVnaXN0ZXIoJ3ZpZGVvJywgZnVuY3Rpb24gKGNvbmZpZywgYWRkVG9TY2VuZSlcclxue1xyXG4gICAgaWYgKGNvbmZpZyA9PT0gdW5kZWZpbmVkKSB7IGNvbmZpZyA9IHt9OyB9XHJcblxyXG4gICAgdmFyIGtleSA9IEdldEFkdmFuY2VkVmFsdWUoY29uZmlnLCAna2V5JywgbnVsbCk7XHJcblxyXG4gICAgdmFyIHZpZGVvID0gbmV3IFZpZGVvKHRoaXMuc2NlbmUsIDAsIDAsIGtleSk7XHJcblxyXG4gICAgaWYgKGFkZFRvU2NlbmUgIT09IHVuZGVmaW5lZClcclxuICAgIHtcclxuICAgICAgICBjb25maWcuYWRkID0gYWRkVG9TY2VuZTtcclxuICAgIH1cclxuXHJcbiAgICBCdWlsZEdhbWVPYmplY3QodGhpcy5zY2VuZSwgdmlkZW8sIGNvbmZpZyk7XHJcblxyXG4gICAgcmV0dXJuIHZpZGVvO1xyXG59KTtcclxuXHJcbi8vICBXaGVuIHJlZ2lzdGVyaW5nIGEgZmFjdG9yeSBmdW5jdGlvbiAndGhpcycgcmVmZXJzIHRvIHRoZSBHYW1lT2JqZWN0Q3JlYXRvciBjb250ZXh0LlxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/video/VideoCreator.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/video/VideoFactory.js":
/*!*******************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/video/VideoFactory.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Video = __webpack_require__(/*! ./Video */ \"./node_modules/phaser/src/gameobjects/video/Video.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Image Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Image Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#video\r\n * @since 3.20.0\r\n *\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.\r\n * @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.\r\n *\r\n * @return {Phaser.GameObjects.Image} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('video', function (x, y, key)\r\n{\r\n var video = new Video(this.scene, x, y, key);\r\n\r\n this.displayList.add(video);\r\n this.updateList.add(video);\r\n\r\n return video;\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectFactory context.\r\n//\r\n// There are several properties available to use:\r\n//\r\n// this.scene - a reference to the Scene that owns the GameObjectFactory\r\n// this.displayList - a reference to the Display List the Scene owns\r\n// this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy92aWRlby9WaWRlb0ZhY3RvcnkuanM/Y2IzOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFFQUFTO0FBQzdCLHdCQUF3QixtQkFBTyxDQUFDLHdGQUFzQjs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsWUFBWSx5QkFBeUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy92aWRlby9WaWRlb0ZhY3RvcnkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBWaWRlbyA9IHJlcXVpcmUoJy4vVmlkZW8nKTtcclxudmFyIEdhbWVPYmplY3RGYWN0b3J5ID0gcmVxdWlyZSgnLi4vR2FtZU9iamVjdEZhY3RvcnknKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IEltYWdlIEdhbWUgT2JqZWN0IGFuZCBhZGRzIGl0IHRvIHRoZSBTY2VuZS5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgSW1hZ2UgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I3ZpZGVvXHJcbiAqIEBzaW5jZSAzLjIwLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0dXJlIC0gVGhlIGtleSBvZiB0aGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIHJlbmRlciB3aXRoLCBhcyBzdG9yZWQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXIpfSBbZnJhbWVdIC0gQW4gb3B0aW9uYWwgZnJhbWUgZnJvbSB0aGUgVGV4dHVyZSB0aGlzIEdhbWUgT2JqZWN0IGlzIHJlbmRlcmluZyB3aXRoLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuSW1hZ2V9IFRoZSBHYW1lIE9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLlxyXG4gKi9cclxuR2FtZU9iamVjdEZhY3RvcnkucmVnaXN0ZXIoJ3ZpZGVvJywgZnVuY3Rpb24gKHgsIHksIGtleSlcclxue1xyXG4gICAgdmFyIHZpZGVvID0gbmV3IFZpZGVvKHRoaXMuc2NlbmUsIHgsIHksIGtleSk7XHJcblxyXG4gICAgdGhpcy5kaXNwbGF5TGlzdC5hZGQodmlkZW8pO1xyXG4gICAgdGhpcy51cGRhdGVMaXN0LmFkZCh2aWRlbyk7XHJcblxyXG4gICAgcmV0dXJuIHZpZGVvO1xyXG59KTtcclxuXHJcbi8vICBXaGVuIHJlZ2lzdGVyaW5nIGEgZmFjdG9yeSBmdW5jdGlvbiAndGhpcycgcmVmZXJzIHRvIHRoZSBHYW1lT2JqZWN0RmFjdG9yeSBjb250ZXh0LlxyXG4vL1xyXG4vLyAgVGhlcmUgYXJlIHNldmVyYWwgcHJvcGVydGllcyBhdmFpbGFibGUgdG8gdXNlOlxyXG4vL1xyXG4vLyAgdGhpcy5zY2VuZSAtIGEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSB0aGF0IG93bnMgdGhlIEdhbWVPYmplY3RGYWN0b3J5XHJcbi8vICB0aGlzLmRpc3BsYXlMaXN0IC0gYSByZWZlcmVuY2UgdG8gdGhlIERpc3BsYXkgTGlzdCB0aGUgU2NlbmUgb3duc1xyXG4vLyAgdGhpcy51cGRhdGVMaXN0IC0gYSByZWZlcmVuY2UgdG8gdGhlIFVwZGF0ZSBMaXN0IHRoZSBTY2VuZSBvd25zXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/video/VideoFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/video/VideoRender.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/video/VideoRender.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar renderWebGL = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\nvar renderCanvas = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\nif (true)\r\n{\r\n renderWebGL = __webpack_require__(/*! ./VideoWebGLRenderer */ \"./node_modules/phaser/src/gameobjects/video/VideoWebGLRenderer.js\");\r\n}\r\n\r\nif (true)\r\n{\r\n renderCanvas = __webpack_require__(/*! ./VideoCanvasRenderer */ \"./node_modules/phaser/src/gameobjects/video/VideoCanvasRenderer.js\");\r\n}\r\n\r\nmodule.exports = {\r\n\r\n renderWebGL: renderWebGL,\r\n renderCanvas: renderCanvas\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy92aWRlby9WaWRlb1JlbmRlci5qcz9jZjM0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxpRUFBa0I7QUFDNUMsbUJBQW1CLG1CQUFPLENBQUMsaUVBQWtCOztBQUU3QyxJQUFJLElBQXFCO0FBQ3pCO0FBQ0Esa0JBQWtCLG1CQUFPLENBQUMsK0ZBQXNCO0FBQ2hEOztBQUVBLElBQUksSUFBc0I7QUFDMUI7QUFDQSxtQkFBbUIsbUJBQU8sQ0FBQyxpR0FBdUI7QUFDbEQ7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dhbWVvYmplY3RzL3ZpZGVvL1ZpZGVvUmVuZGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgcmVuZGVyV2ViR0wgPSByZXF1aXJlKCcuLi8uLi91dGlscy9OT09QJyk7XHJcbnZhciByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9OT09QJyk7XHJcblxyXG5pZiAodHlwZW9mIFdFQkdMX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJXZWJHTCA9IHJlcXVpcmUoJy4vVmlkZW9XZWJHTFJlbmRlcmVyJyk7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgQ0FOVkFTX1JFTkRFUkVSKVxyXG57XHJcbiAgICByZW5kZXJDYW52YXMgPSByZXF1aXJlKCcuL1ZpZGVvQ2FudmFzUmVuZGVyZXInKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgcmVuZGVyV2ViR0w6IHJlbmRlcldlYkdMLFxyXG4gICAgcmVuZGVyQ2FudmFzOiByZW5kZXJDYW52YXNcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/video/VideoRender.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/video/VideoWebGLRenderer.js":
/*!*************************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/video/VideoWebGLRenderer.js ***!
\*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Renders this Game Object with the WebGL Renderer to the given Camera.\r\n * The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.\r\n * This method should not be called directly. It is a utility function of the Render module.\r\n *\r\n * @method Phaser.GameObjects.Video#renderWebGL\r\n * @since 3.20.0\r\n * @private\r\n *\r\n * @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.\r\n * @param {Phaser.GameObjects.Video} src - The Game Object being rendered in this call.\r\n * @param {number} interpolationPercentage - Reserved for future use and custom pipelines.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.\r\n * @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested\r\n */\r\nvar VideoWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)\r\n{\r\n if (src.videoTexture)\r\n {\r\n this.pipeline.batchSprite(src, camera, parentMatrix);\r\n }\r\n};\r\n\r\nmodule.exports = VideoWebGLRenderer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy92aWRlby9WaWRlb1dlYkdMUmVuZGVyZXIuanM/ZWM4MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQ0FBb0M7QUFDL0MsV0FBVyx5QkFBeUI7QUFDcEMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsOENBQThDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy92aWRlby9WaWRlb1dlYkdMUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIHRoaXMgR2FtZSBPYmplY3Qgd2l0aCB0aGUgV2ViR0wgUmVuZGVyZXIgdG8gdGhlIGdpdmVuIENhbWVyYS5cclxuICogVGhlIG9iamVjdCB3aWxsIG5vdCByZW5kZXIgaWYgYW55IG9mIGl0cyByZW5kZXJGbGFncyBhcmUgc2V0IG9yIGl0IGlzIGJlaW5nIGFjdGl2ZWx5IGZpbHRlcmVkIG91dCBieSB0aGUgQ2FtZXJhLlxyXG4gKiBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIG9mIHRoZSBSZW5kZXIgbW9kdWxlLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5WaWRlbyNyZW5kZXJXZWJHTFxyXG4gKiBAc2luY2UgMy4yMC4wXHJcbiAqIEBwcml2YXRlXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlJlbmRlcmVyLldlYkdMLldlYkdMUmVuZGVyZXJ9IHJlbmRlcmVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIFdlYkdMIHJlbmRlcmVyLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5WaWRlb30gc3JjIC0gVGhlIEdhbWUgT2JqZWN0IGJlaW5nIHJlbmRlcmVkIGluIHRoaXMgY2FsbC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGludGVycG9sYXRpb25QZXJjZW50YWdlIC0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIGN1c3RvbSBwaXBlbGluZXMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdGhhdCBpcyByZW5kZXJpbmcgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlRyYW5zZm9ybU1hdHJpeH0gcGFyZW50TWF0cml4IC0gVGhpcyB0cmFuc2Zvcm0gbWF0cml4IGlzIGRlZmluZWQgaWYgdGhlIGdhbWUgb2JqZWN0IGlzIG5lc3RlZFxyXG4gKi9cclxudmFyIFZpZGVvV2ViR0xSZW5kZXJlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc3JjLCBpbnRlcnBvbGF0aW9uUGVyY2VudGFnZSwgY2FtZXJhLCBwYXJlbnRNYXRyaXgpXHJcbntcclxuICAgIGlmIChzcmMudmlkZW9UZXh0dXJlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucGlwZWxpbmUuYmF0Y2hTcHJpdGUoc3JjLCBjYW1lcmEsIHBhcmVudE1hdHJpeCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFZpZGVvV2ViR0xSZW5kZXJlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/video/VideoWebGLRenderer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/zone/Zone.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/zone/Zone.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar BlendModes = __webpack_require__(/*! ../../renderer/BlendModes */ \"./node_modules/phaser/src/renderer/BlendModes.js\");\r\nvar Circle = __webpack_require__(/*! ../../geom/circle/Circle */ \"./node_modules/phaser/src/geom/circle/Circle.js\");\r\nvar CircleContains = __webpack_require__(/*! ../../geom/circle/Contains */ \"./node_modules/phaser/src/geom/circle/Contains.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Components = __webpack_require__(/*! ../components */ \"./node_modules/phaser/src/gameobjects/components/index.js\");\r\nvar GameObject = __webpack_require__(/*! ../GameObject */ \"./node_modules/phaser/src/gameobjects/GameObject.js\");\r\nvar Rectangle = __webpack_require__(/*! ../../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar RectangleContains = __webpack_require__(/*! ../../geom/rectangle/Contains */ \"./node_modules/phaser/src/geom/rectangle/Contains.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Zone Game Object.\r\n *\r\n * A Zone is a non-rendering rectangular Game Object that has a position and size.\r\n * It has no texture and never displays, but does live on the display list and\r\n * can be moved, scaled and rotated like any other Game Object.\r\n *\r\n * Its primary use is for creating Drop Zones and Input Hit Areas and it has a couple of helper methods\r\n * specifically for this. It is also useful for object overlap checks, or as a base for your own\r\n * non-displaying Game Objects.\r\n\r\n * The default origin is 0.5, the center of the Zone, the same as with Game Objects.\r\n *\r\n * @class Zone\r\n * @extends Phaser.GameObjects.GameObject\r\n * @memberof Phaser.GameObjects\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @extends Phaser.GameObjects.Components.Depth\r\n * @extends Phaser.GameObjects.Components.GetBounds\r\n * @extends Phaser.GameObjects.Components.Origin\r\n * @extends Phaser.GameObjects.Components.Transform\r\n * @extends Phaser.GameObjects.Components.ScrollFactor\r\n * @extends Phaser.GameObjects.Components.Visible\r\n *\r\n * @param {Phaser.Scene} scene - The Scene to which this Game Object belongs.\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {number} [width=1] - The width of the Game Object.\r\n * @param {number} [height=1] - The height of the Game Object.\r\n */\r\nvar Zone = new Class({\r\n\r\n Extends: GameObject,\r\n\r\n Mixins: [\r\n Components.Depth,\r\n Components.GetBounds,\r\n Components.Origin,\r\n Components.Transform,\r\n Components.ScrollFactor,\r\n Components.Visible\r\n ],\r\n\r\n initialize:\r\n\r\n function Zone (scene, x, y, width, height)\r\n {\r\n if (width === undefined) { width = 1; }\r\n if (height === undefined) { height = width; }\r\n\r\n GameObject.call(this, scene, 'Zone');\r\n\r\n this.setPosition(x, y);\r\n\r\n /**\r\n * The native (un-scaled) width of this Game Object.\r\n *\r\n * @name Phaser.GameObjects.Zone#width\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.width = width;\r\n\r\n /**\r\n * The native (un-scaled) height of this Game Object.\r\n *\r\n * @name Phaser.GameObjects.Zone#height\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.height = height;\r\n\r\n /**\r\n * The Blend Mode of the Game Object.\r\n * Although a Zone never renders, it still has a blend mode to allow it to fit seamlessly into\r\n * display lists without causing a batch flush.\r\n *\r\n * @name Phaser.GameObjects.Zone#blendMode\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n this.blendMode = BlendModes.NORMAL;\r\n\r\n this.updateDisplayOrigin();\r\n },\r\n\r\n /**\r\n * The displayed width of this Game Object.\r\n * This value takes into account the scale factor.\r\n *\r\n * @name Phaser.GameObjects.Zone#displayWidth\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n displayWidth: {\r\n\r\n get: function ()\r\n {\r\n return this.scaleX * this.width;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.scaleX = value / this.width;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The displayed height of this Game Object.\r\n * This value takes into account the scale factor.\r\n *\r\n * @name Phaser.GameObjects.Zone#displayHeight\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n displayHeight: {\r\n\r\n get: function ()\r\n {\r\n return this.scaleY * this.height;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.scaleY = value / this.height;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Sets the size of this Game Object.\r\n *\r\n * @method Phaser.GameObjects.Zone#setSize\r\n * @since 3.0.0\r\n *\r\n * @param {number} width - The width of this Game Object.\r\n * @param {number} height - The height of this Game Object.\r\n * @param {boolean} [resizeInput=true] - If this Zone has a Rectangle for a hit area this argument will resize the hit area as well.\r\n *\r\n * @return {Phaser.GameObjects.Zone} This Game Object.\r\n */\r\n setSize: function (width, height, resizeInput)\r\n {\r\n if (resizeInput === undefined) { resizeInput = true; }\r\n\r\n this.width = width;\r\n this.height = height;\r\n\r\n this.updateDisplayOrigin();\r\n\r\n var input = this.input;\r\n\r\n if (resizeInput && input && !input.customHitArea)\r\n {\r\n input.hitArea.width = width;\r\n input.hitArea.height = height;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the display size of this Game Object.\r\n * Calling this will adjust the scale.\r\n *\r\n * @method Phaser.GameObjects.Zone#setDisplaySize\r\n * @since 3.0.0\r\n *\r\n * @param {number} width - The width of this Game Object.\r\n * @param {number} height - The height of this Game Object.\r\n *\r\n * @return {Phaser.GameObjects.Zone} This Game Object.\r\n */\r\n setDisplaySize: function (width, height)\r\n {\r\n this.displayWidth = width;\r\n this.displayHeight = height;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets this Zone to be a Circular Drop Zone.\r\n * The circle is centered on this Zones `x` and `y` coordinates.\r\n *\r\n * @method Phaser.GameObjects.Zone#setCircleDropZone\r\n * @since 3.0.0\r\n *\r\n * @param {number} radius - The radius of the Circle that will form the Drop Zone.\r\n *\r\n * @return {Phaser.GameObjects.Zone} This Game Object.\r\n */\r\n setCircleDropZone: function (radius)\r\n {\r\n return this.setDropZone(new Circle(0, 0, radius), CircleContains);\r\n },\r\n\r\n /**\r\n * Sets this Zone to be a Rectangle Drop Zone.\r\n * The rectangle is centered on this Zones `x` and `y` coordinates.\r\n *\r\n * @method Phaser.GameObjects.Zone#setRectangleDropZone\r\n * @since 3.0.0\r\n *\r\n * @param {number} width - The width of the rectangle drop zone.\r\n * @param {number} height - The height of the rectangle drop zone.\r\n *\r\n * @return {Phaser.GameObjects.Zone} This Game Object.\r\n */\r\n setRectangleDropZone: function (width, height)\r\n {\r\n return this.setDropZone(new Rectangle(0, 0, width, height), RectangleContains);\r\n },\r\n\r\n /**\r\n * Allows you to define your own Geometry shape to be used as a Drop Zone.\r\n *\r\n * @method Phaser.GameObjects.Zone#setDropZone\r\n * @since 3.0.0\r\n *\r\n * @param {object} shape - A Geometry shape instance, such as Phaser.Geom.Ellipse, or your own custom shape.\r\n * @param {Phaser.Types.Input.HitAreaCallback} callback - A function that will return `true` if the given x/y coords it is sent are within the shape.\r\n *\r\n * @return {Phaser.GameObjects.Zone} This Game Object.\r\n */\r\n setDropZone: function (shape, callback)\r\n {\r\n if (shape === undefined)\r\n {\r\n this.setRectangleDropZone(this.width, this.height);\r\n }\r\n else if (!this.input)\r\n {\r\n this.setInteractive(shape, callback, true);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * A NOOP method so you can pass a Zone to a Container.\r\n * Calling this method will do nothing. It is intentionally empty.\r\n *\r\n * @method Phaser.GameObjects.Zone#setAlpha\r\n * @private\r\n * @since 3.11.0\r\n */\r\n setAlpha: function ()\r\n {\r\n },\r\n \r\n /**\r\n * A NOOP method so you can pass a Zone to a Container in Canvas.\r\n * Calling this method will do nothing. It is intentionally empty.\r\n *\r\n * @method Phaser.GameObjects.Zone#setBlendMode\r\n * @private\r\n * @since 3.16.2\r\n */\r\n setBlendMode: function ()\r\n {\r\n },\r\n\r\n /**\r\n * A Zone does not render.\r\n *\r\n * @method Phaser.GameObjects.Zone#renderCanvas\r\n * @private\r\n * @since 3.0.0\r\n */\r\n renderCanvas: function ()\r\n {\r\n },\r\n\r\n /**\r\n * A Zone does not render.\r\n *\r\n * @method Phaser.GameObjects.Zone#renderWebGL\r\n * @private\r\n * @since 3.0.0\r\n */\r\n renderWebGL: function ()\r\n {\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Zone;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy96b25lL1pvbmUuanM/MTBjYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsbUZBQTJCO0FBQ3BELGFBQWEsbUJBQU8sQ0FBQyxpRkFBMEI7QUFDL0MscUJBQXFCLG1CQUFPLENBQUMscUZBQTRCO0FBQ3pELFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsZ0ZBQWU7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsMEVBQWU7QUFDeEMsZ0JBQWdCLG1CQUFPLENBQUMsNkZBQWdDO0FBQ3hELHdCQUF3QixtQkFBTyxDQUFDLDJGQUErQjs7QUFFL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDLFdBQVc7QUFDN0MsbUNBQW1DLGdCQUFnQjs7QUFFbkQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0E7QUFDQSx3Q0FBd0Msb0JBQW9COztBQUU1RDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxtQ0FBbUM7QUFDbEQ7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvem9uZS9ab25lLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQmxlbmRNb2RlcyA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVyL0JsZW5kTW9kZXMnKTtcclxudmFyIENpcmNsZSA9IHJlcXVpcmUoJy4uLy4uL2dlb20vY2lyY2xlL0NpcmNsZScpO1xyXG52YXIgQ2lyY2xlQ29udGFpbnMgPSByZXF1aXJlKCcuLi8uLi9nZW9tL2NpcmNsZS9Db250YWlucycpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ29tcG9uZW50cyA9IHJlcXVpcmUoJy4uL2NvbXBvbmVudHMnKTtcclxudmFyIEdhbWVPYmplY3QgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0Jyk7XHJcbnZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuLi8uLi9nZW9tL3JlY3RhbmdsZS9SZWN0YW5nbGUnKTtcclxudmFyIFJlY3RhbmdsZUNvbnRhaW5zID0gcmVxdWlyZSgnLi4vLi4vZ2VvbS9yZWN0YW5nbGUvQ29udGFpbnMnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgWm9uZSBHYW1lIE9iamVjdC5cclxuICpcclxuICogQSBab25lIGlzIGEgbm9uLXJlbmRlcmluZyByZWN0YW5ndWxhciBHYW1lIE9iamVjdCB0aGF0IGhhcyBhIHBvc2l0aW9uIGFuZCBzaXplLlxyXG4gKiBJdCBoYXMgbm8gdGV4dHVyZSBhbmQgbmV2ZXIgZGlzcGxheXMsIGJ1dCBkb2VzIGxpdmUgb24gdGhlIGRpc3BsYXkgbGlzdCBhbmRcclxuICogY2FuIGJlIG1vdmVkLCBzY2FsZWQgYW5kIHJvdGF0ZWQgbGlrZSBhbnkgb3RoZXIgR2FtZSBPYmplY3QuXHJcbiAqXHJcbiAqIEl0cyBwcmltYXJ5IHVzZSBpcyBmb3IgY3JlYXRpbmcgRHJvcCBab25lcyBhbmQgSW5wdXQgSGl0IEFyZWFzIGFuZCBpdCBoYXMgYSBjb3VwbGUgb2YgaGVscGVyIG1ldGhvZHNcclxuICogc3BlY2lmaWNhbGx5IGZvciB0aGlzLiBJdCBpcyBhbHNvIHVzZWZ1bCBmb3Igb2JqZWN0IG92ZXJsYXAgY2hlY2tzLCBvciBhcyBhIGJhc2UgZm9yIHlvdXIgb3duXHJcbiAqIG5vbi1kaXNwbGF5aW5nIEdhbWUgT2JqZWN0cy5cclxuXHJcbiAqIFRoZSBkZWZhdWx0IG9yaWdpbiBpcyAwLjUsIHRoZSBjZW50ZXIgb2YgdGhlIFpvbmUsIHRoZSBzYW1lIGFzIHdpdGggR2FtZSBPYmplY3RzLlxyXG4gKlxyXG4gKiBAY2xhc3MgWm9uZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdhbWVPYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuRGVwdGhcclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuR2V0Qm91bmRzXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLk9yaWdpblxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1cclxuICogQGV4dGVuZHMgUGhhc2VyLkdhbWVPYmplY3RzLkNvbXBvbmVudHMuU2Nyb2xsRmFjdG9yXHJcbiAqIEBleHRlbmRzIFBoYXNlci5HYW1lT2JqZWN0cy5Db21wb25lbnRzLlZpc2libGVcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHRvIHdoaWNoIHRoaXMgR2FtZSBPYmplY3QgYmVsb25ncy5cclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGlzIEdhbWUgT2JqZWN0IGluIHRoZSB3b3JsZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGg9MV0gLSBUaGUgd2lkdGggb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodD0xXSAtIFRoZSBoZWlnaHQgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKi9cclxudmFyIFpvbmUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEdhbWVPYmplY3QsXHJcblxyXG4gICAgTWl4aW5zOiBbXHJcbiAgICAgICAgQ29tcG9uZW50cy5EZXB0aCxcclxuICAgICAgICBDb21wb25lbnRzLkdldEJvdW5kcyxcclxuICAgICAgICBDb21wb25lbnRzLk9yaWdpbixcclxuICAgICAgICBDb21wb25lbnRzLlRyYW5zZm9ybSxcclxuICAgICAgICBDb21wb25lbnRzLlNjcm9sbEZhY3RvcixcclxuICAgICAgICBDb21wb25lbnRzLlZpc2libGVcclxuICAgIF0sXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBab25lIChzY2VuZSwgeCwgeSwgd2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAod2lkdGggPT09IHVuZGVmaW5lZCkgeyB3aWR0aCA9IDE7IH1cclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gd2lkdGg7IH1cclxuXHJcbiAgICAgICAgR2FtZU9iamVjdC5jYWxsKHRoaXMsIHNjZW5lLCAnWm9uZScpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHgsIHkpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbmF0aXZlICh1bi1zY2FsZWQpIHdpZHRoIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuWm9uZSN3aWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbmF0aXZlICh1bi1zY2FsZWQpIGhlaWdodCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlpvbmUjaGVpZ2h0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEJsZW5kIE1vZGUgb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICAgICAqIEFsdGhvdWdoIGEgWm9uZSBuZXZlciByZW5kZXJzLCBpdCBzdGlsbCBoYXMgYSBibGVuZCBtb2RlIHRvIGFsbG93IGl0IHRvIGZpdCBzZWFtbGVzc2x5IGludG9cclxuICAgICAgICAgKiBkaXNwbGF5IGxpc3RzIHdpdGhvdXQgY2F1c2luZyBhIGJhdGNoIGZsdXNoLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdhbWVPYmplY3RzLlpvbmUjYmxlbmRNb2RlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5ibGVuZE1vZGUgPSBCbGVuZE1vZGVzLk5PUk1BTDtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5T3JpZ2luKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRpc3BsYXllZCB3aWR0aCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogVGhpcyB2YWx1ZSB0YWtlcyBpbnRvIGFjY291bnQgdGhlIHNjYWxlIGZhY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2FtZU9iamVjdHMuWm9uZSNkaXNwbGF5V2lkdGhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGlzcGxheVdpZHRoOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlWCAqIHRoaXMud2lkdGg7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNjYWxlWCA9IHZhbHVlIC8gdGhpcy53aWR0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkaXNwbGF5ZWQgaGVpZ2h0IG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBUaGlzIHZhbHVlIHRha2VzIGludG8gYWNjb3VudCB0aGUgc2NhbGUgZmFjdG9yLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HYW1lT2JqZWN0cy5ab25lI2Rpc3BsYXlIZWlnaHRcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGlzcGxheUhlaWdodDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZVkgKiB0aGlzLmhlaWdodDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NhbGVZID0gdmFsdWUgLyB0aGlzLmhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHNpemUgb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HYW1lT2JqZWN0cy5ab25lI3NldFNpemVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Jlc2l6ZUlucHV0PXRydWVdIC0gSWYgdGhpcyBab25lIGhhcyBhIFJlY3RhbmdsZSBmb3IgYSBoaXQgYXJlYSB0aGlzIGFyZ3VtZW50IHdpbGwgcmVzaXplIHRoZSBoaXQgYXJlYSBhcyB3ZWxsLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5ab25lfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgcmVzaXplSW5wdXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHJlc2l6ZUlucHV0ID09PSB1bmRlZmluZWQpIHsgcmVzaXplSW5wdXQgPSB0cnVlOyB9XHJcblxyXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5T3JpZ2luKCk7XHJcblxyXG4gICAgICAgIHZhciBpbnB1dCA9IHRoaXMuaW5wdXQ7XHJcblxyXG4gICAgICAgIGlmIChyZXNpemVJbnB1dCAmJiBpbnB1dCAmJiAhaW5wdXQuY3VzdG9tSGl0QXJlYSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlucHV0LmhpdEFyZWEud2lkdGggPSB3aWR0aDtcclxuICAgICAgICAgICAgaW5wdXQuaGl0QXJlYS5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBkaXNwbGF5IHNpemUgb2YgdGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqIENhbGxpbmcgdGhpcyB3aWxsIGFkanVzdCB0aGUgc2NhbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuWm9uZSNzZXREaXNwbGF5U2l6ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoaXMgR2FtZSBPYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5ab25lfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXREaXNwbGF5U2l6ZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5V2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLmRpc3BsYXlIZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhpcyBab25lIHRvIGJlIGEgQ2lyY3VsYXIgRHJvcCBab25lLlxyXG4gICAgICogVGhlIGNpcmNsZSBpcyBjZW50ZXJlZCBvbiB0aGlzIFpvbmVzIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlpvbmUjc2V0Q2lyY2xlRHJvcFpvbmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRpdXMgLSBUaGUgcmFkaXVzIG9mIHRoZSBDaXJjbGUgdGhhdCB3aWxsIGZvcm0gdGhlIERyb3AgWm9uZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuWm9uZX0gVGhpcyBHYW1lIE9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Q2lyY2xlRHJvcFpvbmU6IGZ1bmN0aW9uIChyYWRpdXMpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0RHJvcFpvbmUobmV3IENpcmNsZSgwLCAwLCByYWRpdXMpLCBDaXJjbGVDb250YWlucyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGlzIFpvbmUgdG8gYmUgYSBSZWN0YW5nbGUgRHJvcCBab25lLlxyXG4gICAgICogVGhlIHJlY3RhbmdsZSBpcyBjZW50ZXJlZCBvbiB0aGlzIFpvbmVzIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlpvbmUjc2V0UmVjdGFuZ2xlRHJvcFpvbmVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlIGRyb3Agem9uZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUgZHJvcCB6b25lLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5ab25lfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRSZWN0YW5nbGVEcm9wWm9uZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0RHJvcFpvbmUobmV3IFJlY3RhbmdsZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KSwgUmVjdGFuZ2xlQ29udGFpbnMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsbG93cyB5b3UgdG8gZGVmaW5lIHlvdXIgb3duIEdlb21ldHJ5IHNoYXBlIHRvIGJlIHVzZWQgYXMgYSBEcm9wIFpvbmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuWm9uZSNzZXREcm9wWm9uZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHNoYXBlIC0gQSBHZW9tZXRyeSBzaGFwZSBpbnN0YW5jZSwgc3VjaCBhcyBQaGFzZXIuR2VvbS5FbGxpcHNlLCBvciB5b3VyIG93biBjdXN0b20gc2hhcGUuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5IaXRBcmVhQ2FsbGJhY2t9IGNhbGxiYWNrIC0gQSBmdW5jdGlvbiB0aGF0IHdpbGwgcmV0dXJuIGB0cnVlYCBpZiB0aGUgZ2l2ZW4geC95IGNvb3JkcyBpdCBpcyBzZW50IGFyZSB3aXRoaW4gdGhlIHNoYXBlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5ab25lfSBUaGlzIEdhbWUgT2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXREcm9wWm9uZTogZnVuY3Rpb24gKHNoYXBlLCBjYWxsYmFjaylcclxuICAgIHtcclxuICAgICAgICBpZiAoc2hhcGUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UmVjdGFuZ2xlRHJvcFpvbmUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghdGhpcy5pbnB1dClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW50ZXJhY3RpdmUoc2hhcGUsIGNhbGxiYWNrLCB0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgTk9PUCBtZXRob2Qgc28geW91IGNhbiBwYXNzIGEgWm9uZSB0byBhIENvbnRhaW5lci5cclxuICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBkbyBub3RoaW5nLiBJdCBpcyBpbnRlbnRpb25hbGx5IGVtcHR5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlpvbmUjc2V0QWxwaGFcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKi9cclxuICAgIHNldEFscGhhOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgfSxcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBBIE5PT1AgbWV0aG9kIHNvIHlvdSBjYW4gcGFzcyBhIFpvbmUgdG8gYSBDb250YWluZXIgaW4gQ2FudmFzLlxyXG4gICAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIGRvIG5vdGhpbmcuIEl0IGlzIGludGVudGlvbmFsbHkgZW1wdHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuWm9uZSNzZXRCbGVuZE1vZGVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xNi4yXHJcbiAgICAgKi9cclxuICAgIHNldEJsZW5kTW9kZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIFpvbmUgZG9lcyBub3QgcmVuZGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlpvbmUjcmVuZGVyQ2FudmFzXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHJlbmRlckNhbnZhczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIFpvbmUgZG9lcyBub3QgcmVuZGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLlpvbmUjcmVuZGVyV2ViR0xcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgcmVuZGVyV2ViR0w6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gWm9uZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/zone/Zone.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/zone/ZoneCreator.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/zone/ZoneCreator.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GameObjectCreator = __webpack_require__(/*! ../GameObjectCreator */ \"./node_modules/phaser/src/gameobjects/GameObjectCreator.js\");\r\nvar GetAdvancedValue = __webpack_require__(/*! ../../utils/object/GetAdvancedValue */ \"./node_modules/phaser/src/utils/object/GetAdvancedValue.js\");\r\nvar Zone = __webpack_require__(/*! ./Zone */ \"./node_modules/phaser/src/gameobjects/zone/Zone.js\");\r\n\r\n/**\r\n * Creates a new Zone Game Object and returns it.\r\n *\r\n * Note: This method will only be available if the Zone Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectCreator#zone\r\n * @since 3.0.0\r\n *\r\n * @param {object} config - The configuration object this Game Object will use to create itself.\r\n *\r\n * @return {Phaser.GameObjects.Zone} The Game Object that was created.\r\n */\r\nGameObjectCreator.register('zone', function (config)\r\n{\r\n var x = GetAdvancedValue(config, 'x', 0);\r\n var y = GetAdvancedValue(config, 'y', 0);\r\n var width = GetAdvancedValue(config, 'width', 1);\r\n var height = GetAdvancedValue(config, 'height', width);\r\n\r\n return new Zone(this.scene, x, y, width, height);\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectCreator context.\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy96b25lL1pvbmVDcmVhdG9yLmpzPzdjOTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHdCQUF3QixtQkFBTyxDQUFDLHdGQUFzQjtBQUN0RCx1QkFBdUIsbUJBQU8sQ0FBQyx1R0FBcUM7QUFDcEUsV0FBVyxtQkFBTyxDQUFDLGtFQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSx3QkFBd0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2FtZW9iamVjdHMvem9uZS9ab25lQ3JlYXRvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdhbWVPYmplY3RDcmVhdG9yID0gcmVxdWlyZSgnLi4vR2FtZU9iamVjdENyZWF0b3InKTtcclxudmFyIEdldEFkdmFuY2VkVmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0QWR2YW5jZWRWYWx1ZScpO1xyXG52YXIgWm9uZSA9IHJlcXVpcmUoJy4vWm9uZScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgWm9uZSBHYW1lIE9iamVjdCBhbmQgcmV0dXJucyBpdC5cclxuICpcclxuICogTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgWm9uZSBHYW1lIE9iamVjdCBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdENyZWF0b3Ijem9uZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCB0aGlzIEdhbWUgT2JqZWN0IHdpbGwgdXNlIHRvIGNyZWF0ZSBpdHNlbGYuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5ab25lfSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3YXMgY3JlYXRlZC5cclxuICovXHJcbkdhbWVPYmplY3RDcmVhdG9yLnJlZ2lzdGVyKCd6b25lJywgZnVuY3Rpb24gKGNvbmZpZylcclxue1xyXG4gICAgdmFyIHggPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ3gnLCAwKTtcclxuICAgIHZhciB5ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICd5JywgMCk7XHJcbiAgICB2YXIgd2lkdGggPSBHZXRBZHZhbmNlZFZhbHVlKGNvbmZpZywgJ3dpZHRoJywgMSk7XHJcbiAgICB2YXIgaGVpZ2h0ID0gR2V0QWR2YW5jZWRWYWx1ZShjb25maWcsICdoZWlnaHQnLCB3aWR0aCk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBab25lKHRoaXMuc2NlbmUsIHgsIHksIHdpZHRoLCBoZWlnaHQpO1xyXG59KTtcclxuXHJcbi8vICBXaGVuIHJlZ2lzdGVyaW5nIGEgZmFjdG9yeSBmdW5jdGlvbiAndGhpcycgcmVmZXJzIHRvIHRoZSBHYW1lT2JqZWN0Q3JlYXRvciBjb250ZXh0LlxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/zone/ZoneCreator.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/gameobjects/zone/ZoneFactory.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/gameobjects/zone/ZoneFactory.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Zone = __webpack_require__(/*! ./Zone */ \"./node_modules/phaser/src/gameobjects/zone/Zone.js\");\r\nvar GameObjectFactory = __webpack_require__(/*! ../GameObjectFactory */ \"./node_modules/phaser/src/gameobjects/GameObjectFactory.js\");\r\n\r\n/**\r\n * Creates a new Zone Game Object and adds it to the Scene.\r\n *\r\n * Note: This method will only be available if the Zone Game Object has been built into Phaser.\r\n *\r\n * @method Phaser.GameObjects.GameObjectFactory#zone\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The horizontal position of this Game Object in the world.\r\n * @param {number} y - The vertical position of this Game Object in the world.\r\n * @param {number} width - The width of the Game Object.\r\n * @param {number} height - The height of the Game Object.\r\n * \r\n * @return {Phaser.GameObjects.Zone} The Game Object that was created.\r\n */\r\nGameObjectFactory.register('zone', function (x, y, width, height)\r\n{\r\n return this.displayList.add(new Zone(this.scene, x, y, width, height));\r\n});\r\n\r\n// When registering a factory function 'this' refers to the GameObjectFactory context.\r\n// \r\n// There are several properties available to use:\r\n// \r\n// this.scene - a reference to the Scene that owns the GameObjectFactory\r\n// this.displayList - a reference to the Display List the Scene owns\r\n// this.updateList - a reference to the Update List the Scene owns\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy96b25lL1pvbmVGYWN0b3J5LmpzP2I2YjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFdBQVcsbUJBQU8sQ0FBQyxrRUFBUTtBQUMzQix3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBc0I7O0FBRXREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHdCQUF3QjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nYW1lb2JqZWN0cy96b25lL1pvbmVGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgWm9uZSA9IHJlcXVpcmUoJy4vWm9uZScpO1xyXG52YXIgR2FtZU9iamVjdEZhY3RvcnkgPSByZXF1aXJlKCcuLi9HYW1lT2JqZWN0RmFjdG9yeScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgWm9uZSBHYW1lIE9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgU2NlbmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFpvbmUgR2FtZSBPYmplY3QgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RGYWN0b3J5I3pvbmVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhpcyBHYW1lIE9iamVjdCBpbiB0aGUgd29ybGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoaXMgR2FtZSBPYmplY3QgaW4gdGhlIHdvcmxkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgR2FtZSBPYmplY3QuXHJcbiAqIFxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuWm9uZX0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5HYW1lT2JqZWN0RmFjdG9yeS5yZWdpc3Rlcignem9uZScsIGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxyXG57XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TGlzdC5hZGQobmV3IFpvbmUodGhpcy5zY2VuZSwgeCwgeSwgd2lkdGgsIGhlaWdodCkpO1xyXG59KTtcclxuXHJcbi8vICBXaGVuIHJlZ2lzdGVyaW5nIGEgZmFjdG9yeSBmdW5jdGlvbiAndGhpcycgcmVmZXJzIHRvIHRoZSBHYW1lT2JqZWN0RmFjdG9yeSBjb250ZXh0LlxyXG4vLyAgXHJcbi8vICBUaGVyZSBhcmUgc2V2ZXJhbCBwcm9wZXJ0aWVzIGF2YWlsYWJsZSB0byB1c2U6XHJcbi8vICBcclxuLy8gIHRoaXMuc2NlbmUgLSBhIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgdGhhdCBvd25zIHRoZSBHYW1lT2JqZWN0RmFjdG9yeVxyXG4vLyAgdGhpcy5kaXNwbGF5TGlzdCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBEaXNwbGF5IExpc3QgdGhlIFNjZW5lIG93bnNcclxuLy8gIHRoaXMudXBkYXRlTGlzdCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBVcGRhdGUgTGlzdCB0aGUgU2NlbmUgb3duc1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/gameobjects/zone/ZoneFactory.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/circle/Area.js":
/*!*****************************************************!*\
!*** ./node_modules/phaser/src/geom/circle/Area.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculates the area of the circle.\r\n *\r\n * @function Phaser.Geom.Circle.Area\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The Circle to get the area of.\r\n *\r\n * @return {number} The area of the Circle.\r\n */\r\nvar Area = function (circle)\r\n{\r\n return (circle.radius > 0) ? Math.PI * circle.radius * circle.radius : 0;\r\n};\r\n\r\nmodule.exports = Area;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9BcmVhLmpzP2U0NmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbUJBQW1CO0FBQzlCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9BcmVhLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgYXJlYSBvZiB0aGUgY2lyY2xlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uQ2lyY2xlLkFyZWFcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBjaXJjbGUgLSBUaGUgQ2lyY2xlIHRvIGdldCB0aGUgYXJlYSBvZi5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgYXJlYSBvZiB0aGUgQ2lyY2xlLlxyXG4gKi9cclxudmFyIEFyZWEgPSBmdW5jdGlvbiAoY2lyY2xlKVxyXG57XHJcbiAgICByZXR1cm4gKGNpcmNsZS5yYWRpdXMgPiAwKSA/IE1hdGguUEkgKiBjaXJjbGUucmFkaXVzICogY2lyY2xlLnJhZGl1cyA6IDA7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEFyZWE7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/Area.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/circle/Circle.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/geom/circle/Circle.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/circle/Contains.js\");\r\nvar GetPoint = __webpack_require__(/*! ./GetPoint */ \"./node_modules/phaser/src/geom/circle/GetPoint.js\");\r\nvar GetPoints = __webpack_require__(/*! ./GetPoints */ \"./node_modules/phaser/src/geom/circle/GetPoints.js\");\r\nvar GEOM_CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/geom/const.js\");\r\nvar Random = __webpack_require__(/*! ./Random */ \"./node_modules/phaser/src/geom/circle/Random.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Circle object.\r\n *\r\n * This is a geometry object, containing numerical values and related methods to inspect and modify them.\r\n * It is not a Game Object, in that you cannot add it to the display list, and it has no texture.\r\n * To render a Circle you should look at the capabilities of the Graphics class.\r\n *\r\n * @class Circle\r\n * @memberof Phaser.Geom\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x=0] - The x position of the center of the circle.\r\n * @param {number} [y=0] - The y position of the center of the circle.\r\n * @param {number} [radius=0] - The radius of the circle.\r\n */\r\nvar Circle = new Class({\r\n\r\n initialize:\r\n\r\n function Circle (x, y, radius)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n if (radius === undefined) { radius = 0; }\r\n\r\n /**\r\n * The geometry constant type of this object: `GEOM_CONST.CIRCLE`.\r\n * Used for fast type comparisons.\r\n *\r\n * @name Phaser.Geom.Circle#type\r\n * @type {integer}\r\n * @readonly\r\n * @since 3.19.0\r\n */\r\n this.type = GEOM_CONST.CIRCLE;\r\n\r\n /**\r\n * The x position of the center of the circle.\r\n *\r\n * @name Phaser.Geom.Circle#x\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.x = x;\r\n\r\n /**\r\n * The y position of the center of the circle.\r\n *\r\n * @name Phaser.Geom.Circle#y\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.y = y;\r\n\r\n /**\r\n * The internal radius of the circle.\r\n *\r\n * @name Phaser.Geom.Circle#_radius\r\n * @type {number}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._radius = radius;\r\n\r\n /**\r\n * The internal diameter of the circle.\r\n *\r\n * @name Phaser.Geom.Circle#_diameter\r\n * @type {number}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._diameter = radius * 2;\r\n },\r\n\r\n /**\r\n * Check to see if the Circle contains the given x / y coordinates.\r\n *\r\n * @method Phaser.Geom.Circle#contains\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x coordinate to check within the circle.\r\n * @param {number} y - The y coordinate to check within the circle.\r\n *\r\n * @return {boolean} True if the coordinates are within the circle, otherwise false.\r\n */\r\n contains: function (x, y)\r\n {\r\n return Contains(this, x, y);\r\n },\r\n\r\n /**\r\n * Returns a Point object containing the coordinates of a point on the circumference of the Circle\r\n * based on the given angle normalized to the range 0 to 1. I.e. a value of 0.5 will give the point\r\n * at 180 degrees around the circle.\r\n *\r\n * @method Phaser.Geom.Circle#getPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {number} position - A value between 0 and 1, where 0 equals 0 degrees, 0.5 equals 180 degrees and 1 equals 360 around the circle.\r\n * @param {(Phaser.Geom.Point|object)} [out] - An object to store the return values in. If not given a Point object will be created.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} A Point, or point-like object, containing the coordinates of the point around the circle.\r\n */\r\n getPoint: function (position, point)\r\n {\r\n return GetPoint(this, position, point);\r\n },\r\n\r\n /**\r\n * Returns an array of Point objects containing the coordinates of the points around the circumference of the Circle,\r\n * based on the given quantity or stepRate values.\r\n *\r\n * @method Phaser.Geom.Circle#getPoints\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point[]} O - [output,$return]\r\n *\r\n * @param {integer} quantity - The amount of points to return. If a falsey value the quantity will be derived from the `stepRate` instead.\r\n * @param {number} [stepRate] - Sets the quantity by getting the circumference of the circle and dividing it by the stepRate.\r\n * @param {(array|Phaser.Geom.Point[])} [output] - An array to insert the points in to. If not provided a new array will be created.\r\n *\r\n * @return {(array|Phaser.Geom.Point[])} An array of Point objects pertaining to the points around the circumference of the circle.\r\n */\r\n getPoints: function (quantity, stepRate, output)\r\n {\r\n return GetPoints(this, quantity, stepRate, output);\r\n },\r\n\r\n /**\r\n * Returns a uniformly distributed random point from anywhere within the Circle.\r\n *\r\n * @method Phaser.Geom.Circle#getRandomPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [point,$return]\r\n *\r\n * @param {(Phaser.Geom.Point|object)} [point] - A Point or point-like object to set the random `x` and `y` values in.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} A Point object with the random values set in the `x` and `y` properties.\r\n */\r\n getRandomPoint: function (point)\r\n {\r\n return Random(this, point);\r\n },\r\n\r\n /**\r\n * Sets the x, y and radius of this circle.\r\n *\r\n * @method Phaser.Geom.Circle#setTo\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x=0] - The x position of the center of the circle.\r\n * @param {number} [y=0] - The y position of the center of the circle.\r\n * @param {number} [radius=0] - The radius of the circle.\r\n *\r\n * @return {Phaser.Geom.Circle} This Circle object.\r\n */\r\n setTo: function (x, y, radius)\r\n {\r\n this.x = x;\r\n this.y = y;\r\n this._radius = radius;\r\n this._diameter = radius * 2;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets this Circle to be empty with a radius of zero.\r\n * Does not change its position.\r\n *\r\n * @method Phaser.Geom.Circle#setEmpty\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Geom.Circle} This Circle object.\r\n */\r\n setEmpty: function ()\r\n {\r\n this._radius = 0;\r\n this._diameter = 0;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the position of this Circle.\r\n *\r\n * @method Phaser.Geom.Circle#setPosition\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x=0] - The x position of the center of the circle.\r\n * @param {number} [y=0] - The y position of the center of the circle.\r\n *\r\n * @return {Phaser.Geom.Circle} This Circle object.\r\n */\r\n setPosition: function (x, y)\r\n {\r\n if (y === undefined) { y = x; }\r\n\r\n this.x = x;\r\n this.y = y;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Checks to see if the Circle is empty: has a radius of zero.\r\n *\r\n * @method Phaser.Geom.Circle#isEmpty\r\n * @since 3.0.0\r\n *\r\n * @return {boolean} True if the Circle is empty, otherwise false.\r\n */\r\n isEmpty: function ()\r\n {\r\n return (this._radius <= 0);\r\n },\r\n\r\n /**\r\n * The radius of the Circle.\r\n *\r\n * @name Phaser.Geom.Circle#radius\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n radius: {\r\n\r\n get: function ()\r\n {\r\n return this._radius;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._radius = value;\r\n this._diameter = value * 2;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The diameter of the Circle.\r\n *\r\n * @name Phaser.Geom.Circle#diameter\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n diameter: {\r\n\r\n get: function ()\r\n {\r\n return this._diameter;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this._diameter = value;\r\n this._radius = value * 0.5;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The left position of the Circle.\r\n *\r\n * @name Phaser.Geom.Circle#left\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n left: {\r\n\r\n get: function ()\r\n {\r\n return this.x - this._radius;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.x = value + this._radius;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The right position of the Circle.\r\n *\r\n * @name Phaser.Geom.Circle#right\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n right: {\r\n\r\n get: function ()\r\n {\r\n return this.x + this._radius;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.x = value - this._radius;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The top position of the Circle.\r\n *\r\n * @name Phaser.Geom.Circle#top\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n top: {\r\n\r\n get: function ()\r\n {\r\n return this.y - this._radius;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.y = value + this._radius;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The bottom position of the Circle.\r\n *\r\n * @name Phaser.Geom.Circle#bottom\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n bottom: {\r\n\r\n get: function ()\r\n {\r\n return this.y + this._radius;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.y = value - this._radius;\r\n }\r\n\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Circle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9DaXJjbGUuanM/ZGIxMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxlQUFlLG1CQUFPLENBQUMscUVBQVk7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLHFFQUFZO0FBQ25DLGdCQUFnQixtQkFBTyxDQUFDLHVFQUFhO0FBQ3JDLGlCQUFpQixtQkFBTyxDQUFDLHlEQUFVO0FBQ25DLGFBQWEsbUJBQU8sQ0FBQyxpRUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTztBQUNyQyw4QkFBOEIsT0FBTztBQUNyQyxtQ0FBbUMsWUFBWTs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLDJCQUEyQjtBQUMxQztBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEIsZUFBZSw0QkFBNEI7QUFDM0M7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0EsZUFBZSwyQkFBMkI7QUFDMUM7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTzs7QUFFckM7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vY2lyY2xlL0NpcmNsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENvbnRhaW5zID0gcmVxdWlyZSgnLi9Db250YWlucycpO1xyXG52YXIgR2V0UG9pbnQgPSByZXF1aXJlKCcuL0dldFBvaW50Jyk7XHJcbnZhciBHZXRQb2ludHMgPSByZXF1aXJlKCcuL0dldFBvaW50cycpO1xyXG52YXIgR0VPTV9DT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XHJcbnZhciBSYW5kb20gPSByZXF1aXJlKCcuL1JhbmRvbScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBDaXJjbGUgb2JqZWN0LlxyXG4gKlxyXG4gKiBUaGlzIGlzIGEgZ2VvbWV0cnkgb2JqZWN0LCBjb250YWluaW5nIG51bWVyaWNhbCB2YWx1ZXMgYW5kIHJlbGF0ZWQgbWV0aG9kcyB0byBpbnNwZWN0IGFuZCBtb2RpZnkgdGhlbS5cclxuICogSXQgaXMgbm90IGEgR2FtZSBPYmplY3QsIGluIHRoYXQgeW91IGNhbm5vdCBhZGQgaXQgdG8gdGhlIGRpc3BsYXkgbGlzdCwgYW5kIGl0IGhhcyBubyB0ZXh0dXJlLlxyXG4gKiBUbyByZW5kZXIgYSBDaXJjbGUgeW91IHNob3VsZCBsb29rIGF0IHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIEdyYXBoaWNzIGNsYXNzLlxyXG4gKlxyXG4gKiBAY2xhc3MgQ2lyY2xlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2VvbVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSB4IHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHkgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3JhZGl1cz0wXSAtIFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZS5cclxuICovXHJcbnZhciBDaXJjbGUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gQ2lyY2xlICh4LCB5LCByYWRpdXMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IDA7IH1cclxuICAgICAgICBpZiAocmFkaXVzID09PSB1bmRlZmluZWQpIHsgcmFkaXVzID0gMDsgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZ2VvbWV0cnkgY29uc3RhbnQgdHlwZSBvZiB0aGlzIG9iamVjdDogYEdFT01fQ09OU1QuQ0lSQ0xFYC5cclxuICAgICAgICAgKiBVc2VkIGZvciBmYXN0IHR5cGUgY29tcGFyaXNvbnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5DaXJjbGUjdHlwZVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE5LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnR5cGUgPSBHRU9NX0NPTlNULkNJUkNMRTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHggcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdlb20uQ2lyY2xlI3hcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnggPSB4O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5DaXJjbGUjeVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueSA9IHk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBpbnRlcm5hbCByYWRpdXMgb2YgdGhlIGNpcmNsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLkNpcmNsZSNfcmFkaXVzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3JhZGl1cyA9IHJhZGl1cztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGludGVybmFsIGRpYW1ldGVyIG9mIHRoZSBjaXJjbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5DaXJjbGUjX2RpYW1ldGVyXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2RpYW1ldGVyID0gcmFkaXVzICogMjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayB0byBzZWUgaWYgdGhlIENpcmNsZSBjb250YWlucyB0aGUgZ2l2ZW4geCAvIHkgY29vcmRpbmF0ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5DaXJjbGUjY29udGFpbnNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSB0byBjaGVjayB3aXRoaW4gdGhlIGNpcmNsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSB0byBjaGVjayB3aXRoaW4gdGhlIGNpcmNsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoZSBjaXJjbGUsIG90aGVyd2lzZSBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgY29udGFpbnM6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBDb250YWlucyh0aGlzLCB4LCB5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgUG9pbnQgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIGEgcG9pbnQgb24gdGhlIGNpcmN1bWZlcmVuY2Ugb2YgdGhlIENpcmNsZVxyXG4gICAgICogYmFzZWQgb24gdGhlIGdpdmVuIGFuZ2xlIG5vcm1hbGl6ZWQgdG8gdGhlIHJhbmdlIDAgdG8gMS4gSS5lLiBhIHZhbHVlIG9mIDAuNSB3aWxsIGdpdmUgdGhlIHBvaW50XHJcbiAgICAgKiBhdCAxODAgZGVncmVlcyBhcm91bmQgdGhlIGNpcmNsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLkNpcmNsZSNnZXRQb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvbiAtIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLCB3aGVyZSAwIGVxdWFscyAwIGRlZ3JlZXMsIDAuNSBlcXVhbHMgMTgwIGRlZ3JlZXMgYW5kIDEgZXF1YWxzIDM2MCBhcm91bmQgdGhlIGNpcmNsZS5cclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IFtvdXRdIC0gQW4gb2JqZWN0IHRvIHN0b3JlIHRoZSByZXR1cm4gdmFsdWVzIGluLiBJZiBub3QgZ2l2ZW4gYSBQb2ludCBvYmplY3Qgd2lsbCBiZSBjcmVhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBBIFBvaW50LCBvciBwb2ludC1saWtlIG9iamVjdCwgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50IGFyb3VuZCB0aGUgY2lyY2xlLlxyXG4gICAgICovXHJcbiAgICBnZXRQb2ludDogZnVuY3Rpb24gKHBvc2l0aW9uLCBwb2ludClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gR2V0UG9pbnQodGhpcywgcG9zaXRpb24sIHBvaW50KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIFBvaW50IG9iamVjdHMgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50cyBhcm91bmQgdGhlIGNpcmN1bWZlcmVuY2Ugb2YgdGhlIENpcmNsZSxcclxuICAgICAqIGJhc2VkIG9uIHRoZSBnaXZlbiBxdWFudGl0eSBvciBzdGVwUmF0ZSB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5DaXJjbGUjZ2V0UG9pbnRzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnRbXX0gTyAtIFtvdXRwdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHF1YW50aXR5IC0gVGhlIGFtb3VudCBvZiBwb2ludHMgdG8gcmV0dXJuLiBJZiBhIGZhbHNleSB2YWx1ZSB0aGUgcXVhbnRpdHkgd2lsbCBiZSBkZXJpdmVkIGZyb20gdGhlIGBzdGVwUmF0ZWAgaW5zdGVhZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFJhdGVdIC0gU2V0cyB0aGUgcXVhbnRpdHkgYnkgZ2V0dGluZyB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgY2lyY2xlIGFuZCBkaXZpZGluZyBpdCBieSB0aGUgc3RlcFJhdGUuXHJcbiAgICAgKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2VvbS5Qb2ludFtdKX0gW291dHB1dF0gLSBBbiBhcnJheSB0byBpbnNlcnQgdGhlIHBvaW50cyBpbiB0by4gSWYgbm90IHByb3ZpZGVkIGEgbmV3IGFycmF5IHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdlb20uUG9pbnRbXSl9IEFuIGFycmF5IG9mIFBvaW50IG9iamVjdHMgcGVydGFpbmluZyB0byB0aGUgcG9pbnRzIGFyb3VuZCB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgY2lyY2xlLlxyXG4gICAgICovXHJcbiAgICBnZXRQb2ludHM6IGZ1bmN0aW9uIChxdWFudGl0eSwgc3RlcFJhdGUsIG91dHB1dClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gR2V0UG9pbnRzKHRoaXMsIHF1YW50aXR5LCBzdGVwUmF0ZSwgb3V0cHV0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgdW5pZm9ybWx5IGRpc3RyaWJ1dGVkIHJhbmRvbSBwb2ludCBmcm9tIGFueXdoZXJlIHdpdGhpbiB0aGUgQ2lyY2xlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uQ2lyY2xlI2dldFJhbmRvbVBvaW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnR9IE8gLSBbcG9pbnQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBbcG9pbnRdIC0gQSBQb2ludCBvciBwb2ludC1saWtlIG9iamVjdCB0byBzZXQgdGhlIHJhbmRvbSBgeGAgYW5kIGB5YCB2YWx1ZXMgaW4uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IEEgUG9pbnQgb2JqZWN0IHdpdGggdGhlIHJhbmRvbSB2YWx1ZXMgc2V0IGluIHRoZSBgeGAgYW5kIGB5YCBwcm9wZXJ0aWVzLlxyXG4gICAgICovXHJcbiAgICBnZXRSYW5kb21Qb2ludDogZnVuY3Rpb24gKHBvaW50KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBSYW5kb20odGhpcywgcG9pbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHgsIHkgYW5kIHJhZGl1cyBvZiB0aGlzIGNpcmNsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLkNpcmNsZSNzZXRUb1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIHggcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdIC0gVGhlIHkgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtyYWRpdXM9MF0gLSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdlb20uQ2lyY2xlfSBUaGlzIENpcmNsZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFRvOiBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMueCA9IHg7XHJcbiAgICAgICAgdGhpcy55ID0geTtcclxuICAgICAgICB0aGlzLl9yYWRpdXMgPSByYWRpdXM7XHJcbiAgICAgICAgdGhpcy5fZGlhbWV0ZXIgPSByYWRpdXMgKiAyO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoaXMgQ2lyY2xlIHRvIGJlIGVtcHR5IHdpdGggYSByYWRpdXMgb2YgemVyby5cclxuICAgICAqIERvZXMgbm90IGNoYW5nZSBpdHMgcG9zaXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5DaXJjbGUjc2V0RW1wdHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HZW9tLkNpcmNsZX0gVGhpcyBDaXJjbGUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRFbXB0eTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9yYWRpdXMgPSAwO1xyXG4gICAgICAgIHRoaXMuX2RpYW1ldGVyID0gMDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcG9zaXRpb24gb2YgdGhpcyBDaXJjbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5DaXJjbGUjc2V0UG9zaXRpb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSB4IHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSB5IHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5DaXJjbGV9IFRoaXMgQ2lyY2xlIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0UG9zaXRpb246IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IHg7IH1cclxuXHJcbiAgICAgICAgdGhpcy54ID0geDtcclxuICAgICAgICB0aGlzLnkgPSB5O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBDaXJjbGUgaXMgZW1wdHk6IGhhcyBhIHJhZGl1cyBvZiB6ZXJvLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uQ2lyY2xlI2lzRW1wdHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIENpcmNsZSBpcyBlbXB0eSwgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBpc0VtcHR5OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5fcmFkaXVzIDw9IDApO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSByYWRpdXMgb2YgdGhlIENpcmNsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5DaXJjbGUjcmFkaXVzXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHJhZGl1czoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmFkaXVzO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fcmFkaXVzID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpYW1ldGVyID0gdmFsdWUgKiAyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRpYW1ldGVyIG9mIHRoZSBDaXJjbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdlb20uQ2lyY2xlI2RpYW1ldGVyXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRpYW1ldGVyOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kaWFtZXRlcjtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpYW1ldGVyID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3JhZGl1cyA9IHZhbHVlICogMC41O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGxlZnQgcG9zaXRpb24gb2YgdGhlIENpcmNsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5DaXJjbGUjbGVmdFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBsZWZ0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnggLSB0aGlzLl9yYWRpdXM7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnggPSB2YWx1ZSArIHRoaXMuX3JhZGl1cztcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSByaWdodCBwb3NpdGlvbiBvZiB0aGUgQ2lyY2xlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLkNpcmNsZSNyaWdodFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICByaWdodDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy54ICsgdGhpcy5fcmFkaXVzO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy54ID0gdmFsdWUgLSB0aGlzLl9yYWRpdXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBDaXJjbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdlb20uQ2lyY2xlI3RvcFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB0b3A6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMueSAtIHRoaXMuX3JhZGl1cztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueSA9IHZhbHVlICsgdGhpcy5fcmFkaXVzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGJvdHRvbSBwb3NpdGlvbiBvZiB0aGUgQ2lyY2xlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLkNpcmNsZSNib3R0b21cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgYm90dG9tOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnkgKyB0aGlzLl9yYWRpdXM7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnkgPSB2YWx1ZSAtIHRoaXMuX3JhZGl1cztcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENpcmNsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/Circle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/circle/Circumference.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/geom/circle/Circumference.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns the circumference of the given Circle.\r\n *\r\n * @function Phaser.Geom.Circle.Circumference\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The Circle to get the circumference of.\r\n *\r\n * @return {number} The circumference of the Circle.\r\n */\r\nvar Circumference = function (circle)\r\n{\r\n return 2 * (Math.PI * circle.radius);\r\n};\r\n\r\nmodule.exports = Circumference;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9DaXJjdW1mZXJlbmNlLmpzP2EwZTQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbUJBQW1CO0FBQzlCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9DaXJjdW1mZXJlbmNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgZ2l2ZW4gQ2lyY2xlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uQ2lyY2xlLkNpcmN1bWZlcmVuY2VcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBjaXJjbGUgLSBUaGUgQ2lyY2xlIHRvIGdldCB0aGUgY2lyY3VtZmVyZW5jZSBvZi5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgQ2lyY2xlLlxyXG4gKi9cclxudmFyIENpcmN1bWZlcmVuY2UgPSBmdW5jdGlvbiAoY2lyY2xlKVxyXG57XHJcbiAgICByZXR1cm4gMiAqIChNYXRoLlBJICogY2lyY2xlLnJhZGl1cyk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENpcmN1bWZlcmVuY2U7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/Circumference.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/circle/CircumferencePoint.js":
/*!*******************************************************************!*\
!*** ./node_modules/phaser/src/geom/circle/CircumferencePoint.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Returns a Point object containing the coordinates of a point on the circumference of the Circle based on the given angle.\r\n *\r\n * @function Phaser.Geom.Circle.CircumferencePoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The Circle to get the circumference point on.\r\n * @param {number} angle - The angle from the center of the Circle to the circumference to return the point from. Given in radians.\r\n * @param {(Phaser.Geom.Point|object)} [out] - A Point, or point-like object, to store the results in. If not given a Point will be created.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} A Point object where the `x` and `y` properties are the point on the circumference.\r\n */\r\nvar CircumferencePoint = function (circle, angle, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n out.x = circle.x + (circle.radius * Math.cos(angle));\r\n out.y = circle.y + (circle.radius * Math.sin(angle));\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = CircumferencePoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9DaXJjdW1mZXJlbmNlUG9pbnQuanM/YzcwOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLG1CQUFtQjtBQUM5QixXQUFXLE9BQU87QUFDbEIsV0FBVywyQkFBMkI7QUFDdEM7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsbUJBQW1COztBQUUvQztBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9DaXJjdW1mZXJlbmNlUG9pbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQb2ludCA9IHJlcXVpcmUoJy4uL3BvaW50L1BvaW50Jyk7XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIFBvaW50IG9iamVjdCBjb250YWluaW5nIHRoZSBjb29yZGluYXRlcyBvZiBhIHBvaW50IG9uIHRoZSBjaXJjdW1mZXJlbmNlIG9mIHRoZSBDaXJjbGUgYmFzZWQgb24gdGhlIGdpdmVuIGFuZ2xlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uQ2lyY2xlLkNpcmN1bWZlcmVuY2VQb2ludFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkNpcmNsZX0gY2lyY2xlIC0gVGhlIENpcmNsZSB0byBnZXQgdGhlIGNpcmN1bWZlcmVuY2UgcG9pbnQgb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZSAtIFRoZSBhbmdsZSBmcm9tIHRoZSBjZW50ZXIgb2YgdGhlIENpcmNsZSB0byB0aGUgY2lyY3VtZmVyZW5jZSB0byByZXR1cm4gdGhlIHBvaW50IGZyb20uIEdpdmVuIGluIHJhZGlhbnMuXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IFtvdXRdIC0gQSBQb2ludCwgb3IgcG9pbnQtbGlrZSBvYmplY3QsIHRvIHN0b3JlIHRoZSByZXN1bHRzIGluLiBJZiBub3QgZ2l2ZW4gYSBQb2ludCB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBBIFBvaW50IG9iamVjdCB3aGVyZSB0aGUgYHhgIGFuZCBgeWAgcHJvcGVydGllcyBhcmUgdGhlIHBvaW50IG9uIHRoZSBjaXJjdW1mZXJlbmNlLlxyXG4gKi9cclxudmFyIENpcmN1bWZlcmVuY2VQb2ludCA9IGZ1bmN0aW9uIChjaXJjbGUsIGFuZ2xlLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgUG9pbnQoKTsgfVxyXG5cclxuICAgIG91dC54ID0gY2lyY2xlLnggKyAoY2lyY2xlLnJhZGl1cyAqIE1hdGguY29zKGFuZ2xlKSk7XHJcbiAgICBvdXQueSA9IGNpcmNsZS55ICsgKGNpcmNsZS5yYWRpdXMgKiBNYXRoLnNpbihhbmdsZSkpO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENpcmN1bWZlcmVuY2VQb2ludDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/CircumferencePoint.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/circle/Clone.js":
/*!******************************************************!*\
!*** ./node_modules/phaser/src/geom/circle/Clone.js ***!
\******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Circle = __webpack_require__(/*! ./Circle */ \"./node_modules/phaser/src/geom/circle/Circle.js\");\r\n\r\n/**\r\n * Creates a new Circle instance based on the values contained in the given source.\r\n *\r\n * @function Phaser.Geom.Circle.Clone\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Geom.Circle|object)} source - The Circle to be cloned. Can be an instance of a Circle or a circle-like object, with x, y and radius properties.\r\n *\r\n * @return {Phaser.Geom.Circle} A clone of the source Circle.\r\n */\r\nvar Clone = function (source)\r\n{\r\n return new Circle(source.x, source.y, source.radius);\r\n};\r\n\r\nmodule.exports = Clone;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9DbG9uZS5qcz85OWE2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsaUVBQVU7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNEJBQTRCO0FBQ3ZDO0FBQ0EsWUFBWSxtQkFBbUI7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vY2lyY2xlL0Nsb25lLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2lyY2xlID0gcmVxdWlyZSgnLi9DaXJjbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IENpcmNsZSBpbnN0YW5jZSBiYXNlZCBvbiB0aGUgdmFsdWVzIGNvbnRhaW5lZCBpbiB0aGUgZ2l2ZW4gc291cmNlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uQ2lyY2xlLkNsb25lXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5DaXJjbGV8b2JqZWN0KX0gc291cmNlIC0gVGhlIENpcmNsZSB0byBiZSBjbG9uZWQuIENhbiBiZSBhbiBpbnN0YW5jZSBvZiBhIENpcmNsZSBvciBhIGNpcmNsZS1saWtlIG9iamVjdCwgd2l0aCB4LCB5IGFuZCByYWRpdXMgcHJvcGVydGllcy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uQ2lyY2xlfSBBIGNsb25lIG9mIHRoZSBzb3VyY2UgQ2lyY2xlLlxyXG4gKi9cclxudmFyIENsb25lID0gZnVuY3Rpb24gKHNvdXJjZSlcclxue1xyXG4gICAgcmV0dXJuIG5ldyBDaXJjbGUoc291cmNlLngsIHNvdXJjZS55LCBzb3VyY2UucmFkaXVzKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2xvbmU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/Clone.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/circle/Contains.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/geom/circle/Contains.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Check to see if the Circle contains the given x / y coordinates.\r\n *\r\n * @function Phaser.Geom.Circle.Contains\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The Circle to check.\r\n * @param {number} x - The x coordinate to check within the circle.\r\n * @param {number} y - The y coordinate to check within the circle.\r\n *\r\n * @return {boolean} True if the coordinates are within the circle, otherwise false.\r\n */\r\nvar Contains = function (circle, x, y)\r\n{\r\n // Check if x/y are within the bounds first\r\n if (circle.radius > 0 && x >= circle.left && x <= circle.right && y >= circle.top && y <= circle.bottom)\r\n {\r\n var dx = (circle.x - x) * (circle.x - x);\r\n var dy = (circle.y - y) * (circle.y - y);\r\n\r\n return (dx + dy) <= (circle.radius * circle.radius);\r\n }\r\n else\r\n {\r\n return false;\r\n }\r\n};\r\n\r\nmodule.exports = Contains;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9Db250YWlucy5qcz80MDk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1CQUFtQjtBQUM5QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9Db250YWlucy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIHRvIHNlZSBpZiB0aGUgQ2lyY2xlIGNvbnRhaW5zIHRoZSBnaXZlbiB4IC8geSBjb29yZGluYXRlcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkNpcmNsZS5Db250YWluc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5DaXJjbGV9IGNpcmNsZSAtIFRoZSBDaXJjbGUgdG8gY2hlY2suXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSB0byBjaGVjayB3aXRoaW4gdGhlIGNpcmNsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIHRvIGNoZWNrIHdpdGhpbiB0aGUgY2lyY2xlLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoZSBjaXJjbGUsIG90aGVyd2lzZSBmYWxzZS5cclxuICovXHJcbnZhciBDb250YWlucyA9IGZ1bmN0aW9uIChjaXJjbGUsIHgsIHkpXHJcbntcclxuICAgIC8vICBDaGVjayBpZiB4L3kgYXJlIHdpdGhpbiB0aGUgYm91bmRzIGZpcnN0XHJcbiAgICBpZiAoY2lyY2xlLnJhZGl1cyA+IDAgJiYgeCA+PSBjaXJjbGUubGVmdCAmJiB4IDw9IGNpcmNsZS5yaWdodCAmJiB5ID49IGNpcmNsZS50b3AgJiYgeSA8PSBjaXJjbGUuYm90dG9tKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBkeCA9IChjaXJjbGUueCAtIHgpICogKGNpcmNsZS54IC0geCk7XHJcbiAgICAgICAgdmFyIGR5ID0gKGNpcmNsZS55IC0geSkgKiAoY2lyY2xlLnkgLSB5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIChkeCArIGR5KSA8PSAoY2lyY2xlLnJhZGl1cyAqIGNpcmNsZS5yYWRpdXMpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ29udGFpbnM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/Contains.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/circle/ContainsPoint.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/geom/circle/ContainsPoint.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/circle/Contains.js\");\r\n\r\n/**\r\n * Check to see if the Circle contains the given Point object.\r\n *\r\n * @function Phaser.Geom.Circle.ContainsPoint\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The Circle to check.\r\n * @param {(Phaser.Geom.Point|object)} point - The Point object to check if it's within the Circle or not.\r\n *\r\n * @return {boolean} True if the Point coordinates are within the circle, otherwise false.\r\n */\r\nvar ContainsPoint = function (circle, point)\r\n{\r\n return Contains(circle, point.x, point.y);\r\n};\r\n\r\nmodule.exports = ContainsPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9Db250YWluc1BvaW50LmpzPzNkZGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxxRUFBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxtQkFBbUI7QUFDOUIsV0FBVywyQkFBMkI7QUFDdEM7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vY2lyY2xlL0NvbnRhaW5zUG9pbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDb250YWlucyA9IHJlcXVpcmUoJy4vQ29udGFpbnMnKTtcclxuXHJcbi8qKlxyXG4gKiBDaGVjayB0byBzZWUgaWYgdGhlIENpcmNsZSBjb250YWlucyB0aGUgZ2l2ZW4gUG9pbnQgb2JqZWN0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uQ2lyY2xlLkNvbnRhaW5zUG9pbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBjaXJjbGUgLSBUaGUgQ2lyY2xlIHRvIGNoZWNrLlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBwb2ludCAtIFRoZSBQb2ludCBvYmplY3QgdG8gY2hlY2sgaWYgaXQncyB3aXRoaW4gdGhlIENpcmNsZSBvciBub3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIFBvaW50IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhlIGNpcmNsZSwgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gKi9cclxudmFyIENvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiAoY2lyY2xlLCBwb2ludClcclxue1xyXG4gICAgcmV0dXJuIENvbnRhaW5zKGNpcmNsZSwgcG9pbnQueCwgcG9pbnQueSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5zUG9pbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/ContainsPoint.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/circle/ContainsRect.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/geom/circle/ContainsRect.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/circle/Contains.js\");\r\n\r\n/**\r\n * Check to see if the Circle contains all four points of the given Rectangle object.\r\n *\r\n * @function Phaser.Geom.Circle.ContainsRect\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The Circle to check.\r\n * @param {(Phaser.Geom.Rectangle|object)} rect - The Rectangle object to check if it's within the Circle or not.\r\n *\r\n * @return {boolean} True if all of the Rectangle coordinates are within the circle, otherwise false.\r\n */\r\nvar ContainsRect = function (circle, rect)\r\n{\r\n return (\r\n Contains(circle, rect.x, rect.y) &&\r\n Contains(circle, rect.right, rect.y) &&\r\n Contains(circle, rect.x, rect.bottom) &&\r\n Contains(circle, rect.right, rect.bottom)\r\n );\r\n};\r\n\r\nmodule.exports = ContainsRect;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9Db250YWluc1JlY3QuanM/ZDYzZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLHFFQUFZOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1CQUFtQjtBQUM5QixXQUFXLCtCQUErQjtBQUMxQztBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vY2lyY2xlL0NvbnRhaW5zUmVjdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENvbnRhaW5zID0gcmVxdWlyZSgnLi9Db250YWlucycpO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIHRvIHNlZSBpZiB0aGUgQ2lyY2xlIGNvbnRhaW5zIGFsbCBmb3VyIHBvaW50cyBvZiB0aGUgZ2l2ZW4gUmVjdGFuZ2xlIG9iamVjdC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkNpcmNsZS5Db250YWluc1JlY3RcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBjaXJjbGUgLSBUaGUgQ2lyY2xlIHRvIGNoZWNrLlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5SZWN0YW5nbGV8b2JqZWN0KX0gcmVjdCAtIFRoZSBSZWN0YW5nbGUgb2JqZWN0IHRvIGNoZWNrIGlmIGl0J3Mgd2l0aGluIHRoZSBDaXJjbGUgb3Igbm90LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGFsbCBvZiB0aGUgUmVjdGFuZ2xlIGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhlIGNpcmNsZSwgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gKi9cclxudmFyIENvbnRhaW5zUmVjdCA9IGZ1bmN0aW9uIChjaXJjbGUsIHJlY3QpXHJcbntcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgQ29udGFpbnMoY2lyY2xlLCByZWN0LngsIHJlY3QueSkgJiZcclxuICAgICAgICBDb250YWlucyhjaXJjbGUsIHJlY3QucmlnaHQsIHJlY3QueSkgJiZcclxuICAgICAgICBDb250YWlucyhjaXJjbGUsIHJlY3QueCwgcmVjdC5ib3R0b20pICYmXHJcbiAgICAgICAgQ29udGFpbnMoY2lyY2xlLCByZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSlcclxuICAgICk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5zUmVjdDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/ContainsRect.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/circle/CopyFrom.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/geom/circle/CopyFrom.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Copies the `x`, `y` and `radius` properties from the `source` Circle\r\n * into the given `dest` Circle, then returns the `dest` Circle.\r\n *\r\n * @function Phaser.Geom.Circle.CopyFrom\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Circle} O - [dest,$return]\r\n *\r\n * @param {Phaser.Geom.Circle} source - The source Circle to copy the values from.\r\n * @param {Phaser.Geom.Circle} dest - The destination Circle to copy the values to.\r\n *\r\n * @return {Phaser.Geom.Circle} The destination Circle.\r\n */\r\nvar CopyFrom = function (source, dest)\r\n{\r\n return dest.setTo(source.x, source.y, source.radius);\r\n};\r\n\r\nmodule.exports = CopyFrom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9Db3B5RnJvbS5qcz8zZTgyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsbUJBQW1CO0FBQ2hDO0FBQ0EsV0FBVyxtQkFBbUI7QUFDOUIsV0FBVyxtQkFBbUI7QUFDOUI7QUFDQSxZQUFZLG1CQUFtQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9jaXJjbGUvQ29weUZyb20uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDb3BpZXMgdGhlIGB4YCwgYHlgIGFuZCBgcmFkaXVzYCBwcm9wZXJ0aWVzIGZyb20gdGhlIGBzb3VyY2VgIENpcmNsZVxyXG4gKiBpbnRvIHRoZSBnaXZlbiBgZGVzdGAgQ2lyY2xlLCB0aGVuIHJldHVybnMgdGhlIGBkZXN0YCBDaXJjbGUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5DaXJjbGUuQ29weUZyb21cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5DaXJjbGV9IE8gLSBbZGVzdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkNpcmNsZX0gc291cmNlIC0gVGhlIHNvdXJjZSBDaXJjbGUgdG8gY29weSB0aGUgdmFsdWVzIGZyb20uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBkZXN0IC0gVGhlIGRlc3RpbmF0aW9uIENpcmNsZSB0byBjb3B5IHRoZSB2YWx1ZXMgdG8uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLkNpcmNsZX0gVGhlIGRlc3RpbmF0aW9uIENpcmNsZS5cclxuICovXHJcbnZhciBDb3B5RnJvbSA9IGZ1bmN0aW9uIChzb3VyY2UsIGRlc3QpXHJcbntcclxuICAgIHJldHVybiBkZXN0LnNldFRvKHNvdXJjZS54LCBzb3VyY2UueSwgc291cmNlLnJhZGl1cyk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvcHlGcm9tO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/CopyFrom.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/circle/Equals.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/geom/circle/Equals.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Compares the `x`, `y` and `radius` properties of the two given Circles.\r\n * Returns `true` if they all match, otherwise returns `false`.\r\n *\r\n * @function Phaser.Geom.Circle.Equals\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The first Circle to compare.\r\n * @param {Phaser.Geom.Circle} toCompare - The second Circle to compare.\r\n *\r\n * @return {boolean} `true` if the two Circles equal each other, otherwise `false`.\r\n */\r\nvar Equals = function (circle, toCompare)\r\n{\r\n return (\r\n circle.x === toCompare.x &&\r\n circle.y === toCompare.y &&\r\n circle.radius === toCompare.radius\r\n );\r\n};\r\n\r\nmodule.exports = Equals;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9FcXVhbHMuanM/YTZlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1CQUFtQjtBQUM5QixXQUFXLG1CQUFtQjtBQUM5QjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9FcXVhbHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDb21wYXJlcyB0aGUgYHhgLCBgeWAgYW5kIGByYWRpdXNgIHByb3BlcnRpZXMgb2YgdGhlIHR3byBnaXZlbiBDaXJjbGVzLlxyXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGV5IGFsbCBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybnMgYGZhbHNlYC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkNpcmNsZS5FcXVhbHNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBjaXJjbGUgLSBUaGUgZmlyc3QgQ2lyY2xlIHRvIGNvbXBhcmUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSB0b0NvbXBhcmUgLSBUaGUgc2Vjb25kIENpcmNsZSB0byBjb21wYXJlLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHR3byBDaXJjbGVzIGVxdWFsIGVhY2ggb3RoZXIsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxudmFyIEVxdWFscyA9IGZ1bmN0aW9uIChjaXJjbGUsIHRvQ29tcGFyZSlcclxue1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICBjaXJjbGUueCA9PT0gdG9Db21wYXJlLnggJiZcclxuICAgICAgICBjaXJjbGUueSA9PT0gdG9Db21wYXJlLnkgJiZcclxuICAgICAgICBjaXJjbGUucmFkaXVzID09PSB0b0NvbXBhcmUucmFkaXVzXHJcbiAgICApO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFcXVhbHM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/Equals.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/circle/GetBounds.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/geom/circle/GetBounds.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Rectangle = __webpack_require__(/*! ../rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\n\r\n/**\r\n * Returns the bounds of the Circle object.\r\n *\r\n * @function Phaser.Geom.Circle.GetBounds\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The Circle to get the bounds from.\r\n * @param {(Phaser.Geom.Rectangle|object)} [out] - A Rectangle, or rectangle-like object, to store the circle bounds in. If not given a new Rectangle will be created.\r\n *\r\n * @return {(Phaser.Geom.Rectangle|object)} The Rectangle object containing the Circles bounds.\r\n */\r\nvar GetBounds = function (circle, out)\r\n{\r\n if (out === undefined) { out = new Rectangle(); }\r\n\r\n out.x = circle.left;\r\n out.y = circle.top;\r\n out.width = circle.diameter;\r\n out.height = circle.diameter;\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetBounds;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9HZXRCb3VuZHMuanM/YTQ5ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMscUZBQXdCOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBLFdBQVcsbUJBQW1CO0FBQzlCLFdBQVcsK0JBQStCO0FBQzFDO0FBQ0EsWUFBWSwrQkFBK0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHVCQUF1Qjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vY2lyY2xlL0dldEJvdW5kcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4uL3JlY3RhbmdsZS9SZWN0YW5nbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIENpcmNsZSBvYmplY3QuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5DaXJjbGUuR2V0Qm91bmRzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkNpcmNsZX0gY2lyY2xlIC0gVGhlIENpcmNsZSB0byBnZXQgdGhlIGJvdW5kcyBmcm9tLlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5SZWN0YW5nbGV8b2JqZWN0KX0gW291dF0gLSBBIFJlY3RhbmdsZSwgb3IgcmVjdGFuZ2xlLWxpa2Ugb2JqZWN0LCB0byBzdG9yZSB0aGUgY2lyY2xlIGJvdW5kcyBpbi4gSWYgbm90IGdpdmVuIGEgbmV3IFJlY3RhbmdsZSB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5SZWN0YW5nbGV8b2JqZWN0KX0gVGhlIFJlY3RhbmdsZSBvYmplY3QgY29udGFpbmluZyB0aGUgQ2lyY2xlcyBib3VuZHMuXHJcbiAqL1xyXG52YXIgR2V0Qm91bmRzID0gZnVuY3Rpb24gKGNpcmNsZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFJlY3RhbmdsZSgpOyB9XHJcblxyXG4gICAgb3V0LnggPSBjaXJjbGUubGVmdDtcclxuICAgIG91dC55ID0gY2lyY2xlLnRvcDtcclxuICAgIG91dC53aWR0aCA9IGNpcmNsZS5kaWFtZXRlcjtcclxuICAgIG91dC5oZWlnaHQgPSBjaXJjbGUuZGlhbWV0ZXI7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0Qm91bmRzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/GetBounds.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/circle/GetPoint.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/geom/circle/GetPoint.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CircumferencePoint = __webpack_require__(/*! ./CircumferencePoint */ \"./node_modules/phaser/src/geom/circle/CircumferencePoint.js\");\r\nvar FromPercent = __webpack_require__(/*! ../../math/FromPercent */ \"./node_modules/phaser/src/math/FromPercent.js\");\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Returns a Point object containing the coordinates of a point on the circumference of the Circle\r\n * based on the given angle normalized to the range 0 to 1. I.e. a value of 0.5 will give the point\r\n * at 180 degrees around the circle.\r\n *\r\n * @function Phaser.Geom.Circle.GetPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The Circle to get the circumference point on.\r\n * @param {number} position - A value between 0 and 1, where 0 equals 0 degrees, 0.5 equals 180 degrees and 1 equals 360 around the circle.\r\n * @param {(Phaser.Geom.Point|object)} [out] - An object to store the return values in. If not given a Point object will be created.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} A Point, or point-like object, containing the coordinates of the point around the circle.\r\n */\r\nvar GetPoint = function (circle, position, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n var angle = FromPercent(position, 0, MATH_CONST.PI2);\r\n\r\n return CircumferencePoint(circle, angle, out);\r\n};\r\n\r\nmodule.exports = GetPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9HZXRQb2ludC5qcz9mOTU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyx5RkFBc0I7QUFDdkQsa0JBQWtCLG1CQUFPLENBQUMsNkVBQXdCO0FBQ2xELGlCQUFpQixtQkFBTyxDQUFDLGlFQUFrQjtBQUMzQyxZQUFZLG1CQUFPLENBQUMscUVBQWdCOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLG1CQUFtQjtBQUM5QixXQUFXLE9BQU87QUFDbEIsV0FBVywyQkFBMkI7QUFDdEM7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsbUJBQW1COztBQUUvQzs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9jaXJjbGUvR2V0UG9pbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDaXJjdW1mZXJlbmNlUG9pbnQgPSByZXF1aXJlKCcuL0NpcmN1bWZlcmVuY2VQb2ludCcpO1xyXG52YXIgRnJvbVBlcmNlbnQgPSByZXF1aXJlKCcuLi8uLi9tYXRoL0Zyb21QZXJjZW50Jyk7XHJcbnZhciBNQVRIX0NPTlNUID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9jb25zdCcpO1xyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYSBQb2ludCBvYmplY3QgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgYSBwb2ludCBvbiB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgQ2lyY2xlXHJcbiAqIGJhc2VkIG9uIHRoZSBnaXZlbiBhbmdsZSBub3JtYWxpemVkIHRvIHRoZSByYW5nZSAwIHRvIDEuIEkuZS4gYSB2YWx1ZSBvZiAwLjUgd2lsbCBnaXZlIHRoZSBwb2ludFxyXG4gKiBhdCAxODAgZGVncmVlcyBhcm91bmQgdGhlIGNpcmNsZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkNpcmNsZS5HZXRQb2ludFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkNpcmNsZX0gY2lyY2xlIC0gVGhlIENpcmNsZSB0byBnZXQgdGhlIGNpcmN1bWZlcmVuY2UgcG9pbnQgb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvbiAtIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLCB3aGVyZSAwIGVxdWFscyAwIGRlZ3JlZXMsIDAuNSBlcXVhbHMgMTgwIGRlZ3JlZXMgYW5kIDEgZXF1YWxzIDM2MCBhcm91bmQgdGhlIGNpcmNsZS5cclxuICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gW291dF0gLSBBbiBvYmplY3QgdG8gc3RvcmUgdGhlIHJldHVybiB2YWx1ZXMgaW4uIElmIG5vdCBnaXZlbiBhIFBvaW50IG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBBIFBvaW50LCBvciBwb2ludC1saWtlIG9iamVjdCwgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50IGFyb3VuZCB0aGUgY2lyY2xlLlxyXG4gKi9cclxudmFyIEdldFBvaW50ID0gZnVuY3Rpb24gKGNpcmNsZSwgcG9zaXRpb24sIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBQb2ludCgpOyB9XHJcblxyXG4gICAgdmFyIGFuZ2xlID0gRnJvbVBlcmNlbnQocG9zaXRpb24sIDAsIE1BVEhfQ09OU1QuUEkyKTtcclxuXHJcbiAgICByZXR1cm4gQ2lyY3VtZmVyZW5jZVBvaW50KGNpcmNsZSwgYW5nbGUsIG91dCk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldFBvaW50O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/GetPoint.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/circle/GetPoints.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/geom/circle/GetPoints.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Circumference = __webpack_require__(/*! ./Circumference */ \"./node_modules/phaser/src/geom/circle/Circumference.js\");\r\nvar CircumferencePoint = __webpack_require__(/*! ./CircumferencePoint */ \"./node_modules/phaser/src/geom/circle/CircumferencePoint.js\");\r\nvar FromPercent = __webpack_require__(/*! ../../math/FromPercent */ \"./node_modules/phaser/src/math/FromPercent.js\");\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\n\r\n/**\r\n * Returns an array of Point objects containing the coordinates of the points around the circumference of the Circle,\r\n * based on the given quantity or stepRate values.\r\n *\r\n * @function Phaser.Geom.Circle.GetPoints\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The Circle to get the points from.\r\n * @param {integer} quantity - The amount of points to return. If a falsey value the quantity will be derived from the `stepRate` instead.\r\n * @param {number} [stepRate] - Sets the quantity by getting the circumference of the circle and dividing it by the stepRate.\r\n * @param {array} [output] - An array to insert the points in to. If not provided a new array will be created.\r\n *\r\n * @return {Phaser.Geom.Point[]} An array of Point objects pertaining to the points around the circumference of the circle.\r\n */\r\nvar GetPoints = function (circle, quantity, stepRate, out)\r\n{\r\n if (out === undefined) { out = []; }\r\n\r\n // If quantity is a falsey value (false, null, 0, undefined, etc) then we calculate it based on the stepRate instead.\r\n if (!quantity)\r\n {\r\n quantity = Circumference(circle) / stepRate;\r\n }\r\n\r\n for (var i = 0; i < quantity; i++)\r\n {\r\n var angle = FromPercent(i / quantity, 0, MATH_CONST.PI2);\r\n\r\n out.push(CircumferencePoint(circle, angle));\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetPoints;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9HZXRQb2ludHMuanM/MWQ2MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsb0JBQW9CLG1CQUFPLENBQUMsK0VBQWlCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLHlGQUFzQjtBQUN2RCxrQkFBa0IsbUJBQU8sQ0FBQyw2RUFBd0I7QUFDbEQsaUJBQWlCLG1CQUFPLENBQUMsaUVBQWtCOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbUJBQW1CO0FBQzlCLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEIsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBWSxvQkFBb0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGNBQWM7QUFDakM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9HZXRQb2ludHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDaXJjdW1mZXJlbmNlID0gcmVxdWlyZSgnLi9DaXJjdW1mZXJlbmNlJyk7XHJcbnZhciBDaXJjdW1mZXJlbmNlUG9pbnQgPSByZXF1aXJlKCcuL0NpcmN1bWZlcmVuY2VQb2ludCcpO1xyXG52YXIgRnJvbVBlcmNlbnQgPSByZXF1aXJlKCcuLi8uLi9tYXRoL0Zyb21QZXJjZW50Jyk7XHJcbnZhciBNQVRIX0NPTlNUID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9jb25zdCcpO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgUG9pbnQgb2JqZWN0cyBjb250YWluaW5nIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnRzIGFyb3VuZCB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgQ2lyY2xlLFxyXG4gKiBiYXNlZCBvbiB0aGUgZ2l2ZW4gcXVhbnRpdHkgb3Igc3RlcFJhdGUgdmFsdWVzLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uQ2lyY2xlLkdldFBvaW50c1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5DaXJjbGV9IGNpcmNsZSAtIFRoZSBDaXJjbGUgdG8gZ2V0IHRoZSBwb2ludHMgZnJvbS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBxdWFudGl0eSAtIFRoZSBhbW91bnQgb2YgcG9pbnRzIHRvIHJldHVybi4gSWYgYSBmYWxzZXkgdmFsdWUgdGhlIHF1YW50aXR5IHdpbGwgYmUgZGVyaXZlZCBmcm9tIHRoZSBgc3RlcFJhdGVgIGluc3RlYWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFJhdGVdIC0gU2V0cyB0aGUgcXVhbnRpdHkgYnkgZ2V0dGluZyB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgY2lyY2xlIGFuZCBkaXZpZGluZyBpdCBieSB0aGUgc3RlcFJhdGUuXHJcbiAqIEBwYXJhbSB7YXJyYXl9IFtvdXRwdXRdIC0gQW4gYXJyYXkgdG8gaW5zZXJ0IHRoZSBwb2ludHMgaW4gdG8uIElmIG5vdCBwcm92aWRlZCBhIG5ldyBhcnJheSB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlBvaW50W119IEFuIGFycmF5IG9mIFBvaW50IG9iamVjdHMgcGVydGFpbmluZyB0byB0aGUgcG9pbnRzIGFyb3VuZCB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgY2lyY2xlLlxyXG4gKi9cclxudmFyIEdldFBvaW50cyA9IGZ1bmN0aW9uIChjaXJjbGUsIHF1YW50aXR5LCBzdGVwUmF0ZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gW107IH1cclxuXHJcbiAgICAvLyAgSWYgcXVhbnRpdHkgaXMgYSBmYWxzZXkgdmFsdWUgKGZhbHNlLCBudWxsLCAwLCB1bmRlZmluZWQsIGV0YykgdGhlbiB3ZSBjYWxjdWxhdGUgaXQgYmFzZWQgb24gdGhlIHN0ZXBSYXRlIGluc3RlYWQuXHJcbiAgICBpZiAoIXF1YW50aXR5KVxyXG4gICAge1xyXG4gICAgICAgIHF1YW50aXR5ID0gQ2lyY3VtZmVyZW5jZShjaXJjbGUpIC8gc3RlcFJhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWFudGl0eTsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBhbmdsZSA9IEZyb21QZXJjZW50KGkgLyBxdWFudGl0eSwgMCwgTUFUSF9DT05TVC5QSTIpO1xyXG5cclxuICAgICAgICBvdXQucHVzaChDaXJjdW1mZXJlbmNlUG9pbnQoY2lyY2xlLCBhbmdsZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldFBvaW50cztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/GetPoints.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/circle/Offset.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/geom/circle/Offset.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Offsets the Circle by the values given.\r\n *\r\n * @function Phaser.Geom.Circle.Offset\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Circle} O - [circle,$return]\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The Circle to be offset (translated.)\r\n * @param {number} x - The amount to horizontally offset the Circle by.\r\n * @param {number} y - The amount to vertically offset the Circle by.\r\n *\r\n * @return {Phaser.Geom.Circle} The Circle that was offset.\r\n */\r\nvar Offset = function (circle, x, y)\r\n{\r\n circle.x += x;\r\n circle.y += y;\r\n\r\n return circle;\r\n};\r\n\r\nmodule.exports = Offset;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9PZmZzZXQuanM/ZTgyNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxtQkFBbUI7QUFDaEM7QUFDQSxXQUFXLG1CQUFtQjtBQUM5QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxtQkFBbUI7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9jaXJjbGUvT2Zmc2V0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogT2Zmc2V0cyB0aGUgQ2lyY2xlIGJ5IHRoZSB2YWx1ZXMgZ2l2ZW4uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5DaXJjbGUuT2Zmc2V0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uQ2lyY2xlfSBPIC0gW2NpcmNsZSwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkNpcmNsZX0gY2lyY2xlIC0gVGhlIENpcmNsZSB0byBiZSBvZmZzZXQgKHRyYW5zbGF0ZWQuKVxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBhbW91bnQgdG8gaG9yaXpvbnRhbGx5IG9mZnNldCB0aGUgQ2lyY2xlIGJ5LlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSBhbW91bnQgdG8gdmVydGljYWxseSBvZmZzZXQgdGhlIENpcmNsZSBieS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uQ2lyY2xlfSBUaGUgQ2lyY2xlIHRoYXQgd2FzIG9mZnNldC5cclxuICovXHJcbnZhciBPZmZzZXQgPSBmdW5jdGlvbiAoY2lyY2xlLCB4LCB5KVxyXG57XHJcbiAgICBjaXJjbGUueCArPSB4O1xyXG4gICAgY2lyY2xlLnkgKz0geTtcclxuXHJcbiAgICByZXR1cm4gY2lyY2xlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBPZmZzZXQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/Offset.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/circle/OffsetPoint.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/geom/circle/OffsetPoint.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Offsets the Circle by the values given in the `x` and `y` properties of the Point object.\r\n *\r\n * @function Phaser.Geom.Circle.OffsetPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Circle} O - [circle,$return]\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The Circle to be offset (translated.)\r\n * @param {(Phaser.Geom.Point|object)} point - The Point object containing the values to offset the Circle by.\r\n *\r\n * @return {Phaser.Geom.Circle} The Circle that was offset.\r\n */\r\nvar OffsetPoint = function (circle, point)\r\n{\r\n circle.x += point.x;\r\n circle.y += point.y;\r\n\r\n return circle;\r\n};\r\n\r\nmodule.exports = OffsetPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9PZmZzZXRQb2ludC5qcz8yZDUyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLG1CQUFtQjtBQUNoQztBQUNBLFdBQVcsbUJBQW1CO0FBQzlCLFdBQVcsMkJBQTJCO0FBQ3RDO0FBQ0EsWUFBWSxtQkFBbUI7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9jaXJjbGUvT2Zmc2V0UG9pbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBPZmZzZXRzIHRoZSBDaXJjbGUgYnkgdGhlIHZhbHVlcyBnaXZlbiBpbiB0aGUgYHhgIGFuZCBgeWAgcHJvcGVydGllcyBvZiB0aGUgUG9pbnQgb2JqZWN0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uQ2lyY2xlLk9mZnNldFBvaW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uQ2lyY2xlfSBPIC0gW2NpcmNsZSwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkNpcmNsZX0gY2lyY2xlIC0gVGhlIENpcmNsZSB0byBiZSBvZmZzZXQgKHRyYW5zbGF0ZWQuKVxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBwb2ludCAtIFRoZSBQb2ludCBvYmplY3QgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIG9mZnNldCB0aGUgQ2lyY2xlIGJ5LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5DaXJjbGV9IFRoZSBDaXJjbGUgdGhhdCB3YXMgb2Zmc2V0LlxyXG4gKi9cclxudmFyIE9mZnNldFBvaW50ID0gZnVuY3Rpb24gKGNpcmNsZSwgcG9pbnQpXHJcbntcclxuICAgIGNpcmNsZS54ICs9IHBvaW50Lng7XHJcbiAgICBjaXJjbGUueSArPSBwb2ludC55O1xyXG5cclxuICAgIHJldHVybiBjaXJjbGU7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE9mZnNldFBvaW50O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/OffsetPoint.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/circle/Random.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/geom/circle/Random.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Returns a uniformly distributed random point from anywhere within the given Circle.\r\n *\r\n * @function Phaser.Geom.Circle.Random\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The Circle to get a random point from.\r\n * @param {(Phaser.Geom.Point|object)} [out] - A Point or point-like object to set the random `x` and `y` values in.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} A Point object with the random values set in the `x` and `y` properties.\r\n */\r\nvar Random = function (circle, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n var t = 2 * Math.PI * Math.random();\r\n var u = Math.random() + Math.random();\r\n var r = (u > 1) ? 2 - u : u;\r\n var x = r * Math.cos(t);\r\n var y = r * Math.sin(t);\r\n\r\n out.x = circle.x + (x * circle.radius);\r\n out.y = circle.y + (y * circle.radius);\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = Random;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9SYW5kb20uanM/MzEyZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLG1CQUFtQjtBQUM5QixXQUFXLDJCQUEyQjtBQUN0QztBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9jaXJjbGUvUmFuZG9tLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYSB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQgcmFuZG9tIHBvaW50IGZyb20gYW55d2hlcmUgd2l0aGluIHRoZSBnaXZlbiBDaXJjbGUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5DaXJjbGUuUmFuZG9tXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnR9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBjaXJjbGUgLSBUaGUgQ2lyY2xlIHRvIGdldCBhIHJhbmRvbSBwb2ludCBmcm9tLlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBbb3V0XSAtIEEgUG9pbnQgb3IgcG9pbnQtbGlrZSBvYmplY3QgdG8gc2V0IHRoZSByYW5kb20gYHhgIGFuZCBgeWAgdmFsdWVzIGluLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gQSBQb2ludCBvYmplY3Qgd2l0aCB0aGUgcmFuZG9tIHZhbHVlcyBzZXQgaW4gdGhlIGB4YCBhbmQgYHlgIHByb3BlcnRpZXMuXHJcbiAqL1xyXG52YXIgUmFuZG9tID0gZnVuY3Rpb24gKGNpcmNsZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFBvaW50KCk7IH1cclxuXHJcbiAgICB2YXIgdCA9IDIgKiBNYXRoLlBJICogTWF0aC5yYW5kb20oKTtcclxuICAgIHZhciB1ID0gTWF0aC5yYW5kb20oKSArIE1hdGgucmFuZG9tKCk7XHJcbiAgICB2YXIgciA9ICh1ID4gMSkgPyAyIC0gdSA6IHU7XHJcbiAgICB2YXIgeCA9IHIgKiBNYXRoLmNvcyh0KTtcclxuICAgIHZhciB5ID0gciAqIE1hdGguc2luKHQpO1xyXG5cclxuICAgIG91dC54ID0gY2lyY2xlLnggKyAoeCAqIGNpcmNsZS5yYWRpdXMpO1xyXG4gICAgb3V0LnkgPSBjaXJjbGUueSArICh5ICogY2lyY2xlLnJhZGl1cyk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmFuZG9tO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/Random.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/circle/index.js":
/*!******************************************************!*\
!*** ./node_modules/phaser/src/geom/circle/index.js ***!
\******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Circle = __webpack_require__(/*! ./Circle */ \"./node_modules/phaser/src/geom/circle/Circle.js\");\r\n\r\nCircle.Area = __webpack_require__(/*! ./Area */ \"./node_modules/phaser/src/geom/circle/Area.js\");\r\nCircle.Circumference = __webpack_require__(/*! ./Circumference */ \"./node_modules/phaser/src/geom/circle/Circumference.js\");\r\nCircle.CircumferencePoint = __webpack_require__(/*! ./CircumferencePoint */ \"./node_modules/phaser/src/geom/circle/CircumferencePoint.js\");\r\nCircle.Clone = __webpack_require__(/*! ./Clone */ \"./node_modules/phaser/src/geom/circle/Clone.js\");\r\nCircle.Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/circle/Contains.js\");\r\nCircle.ContainsPoint = __webpack_require__(/*! ./ContainsPoint */ \"./node_modules/phaser/src/geom/circle/ContainsPoint.js\");\r\nCircle.ContainsRect = __webpack_require__(/*! ./ContainsRect */ \"./node_modules/phaser/src/geom/circle/ContainsRect.js\");\r\nCircle.CopyFrom = __webpack_require__(/*! ./CopyFrom */ \"./node_modules/phaser/src/geom/circle/CopyFrom.js\");\r\nCircle.Equals = __webpack_require__(/*! ./Equals */ \"./node_modules/phaser/src/geom/circle/Equals.js\");\r\nCircle.GetBounds = __webpack_require__(/*! ./GetBounds */ \"./node_modules/phaser/src/geom/circle/GetBounds.js\");\r\nCircle.GetPoint = __webpack_require__(/*! ./GetPoint */ \"./node_modules/phaser/src/geom/circle/GetPoint.js\");\r\nCircle.GetPoints = __webpack_require__(/*! ./GetPoints */ \"./node_modules/phaser/src/geom/circle/GetPoints.js\");\r\nCircle.Offset = __webpack_require__(/*! ./Offset */ \"./node_modules/phaser/src/geom/circle/Offset.js\");\r\nCircle.OffsetPoint = __webpack_require__(/*! ./OffsetPoint */ \"./node_modules/phaser/src/geom/circle/OffsetPoint.js\");\r\nCircle.Random = __webpack_require__(/*! ./Random */ \"./node_modules/phaser/src/geom/circle/Random.js\");\r\n\r\nmodule.exports = Circle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NpcmNsZS9pbmRleC5qcz8wNGNjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsaUVBQVU7O0FBRS9CLGNBQWMsbUJBQU8sQ0FBQyw2REFBUTtBQUM5Qix1QkFBdUIsbUJBQU8sQ0FBQywrRUFBaUI7QUFDaEQsNEJBQTRCLG1CQUFPLENBQUMseUZBQXNCO0FBQzFELGVBQWUsbUJBQU8sQ0FBQywrREFBUztBQUNoQyxrQkFBa0IsbUJBQU8sQ0FBQyxxRUFBWTtBQUN0Qyx1QkFBdUIsbUJBQU8sQ0FBQywrRUFBaUI7QUFDaEQsc0JBQXNCLG1CQUFPLENBQUMsNkVBQWdCO0FBQzlDLGtCQUFrQixtQkFBTyxDQUFDLHFFQUFZO0FBQ3RDLGdCQUFnQixtQkFBTyxDQUFDLGlFQUFVO0FBQ2xDLG1CQUFtQixtQkFBTyxDQUFDLHVFQUFhO0FBQ3hDLGtCQUFrQixtQkFBTyxDQUFDLHFFQUFZO0FBQ3RDLG1CQUFtQixtQkFBTyxDQUFDLHVFQUFhO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLGlFQUFVO0FBQ2xDLHFCQUFxQixtQkFBTyxDQUFDLDJFQUFlO0FBQzVDLGdCQUFnQixtQkFBTyxDQUFDLGlFQUFVOztBQUVsQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vY2lyY2xlL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2lyY2xlID0gcmVxdWlyZSgnLi9DaXJjbGUnKTtcclxuXHJcbkNpcmNsZS5BcmVhID0gcmVxdWlyZSgnLi9BcmVhJyk7XHJcbkNpcmNsZS5DaXJjdW1mZXJlbmNlID0gcmVxdWlyZSgnLi9DaXJjdW1mZXJlbmNlJyk7XHJcbkNpcmNsZS5DaXJjdW1mZXJlbmNlUG9pbnQgPSByZXF1aXJlKCcuL0NpcmN1bWZlcmVuY2VQb2ludCcpO1xyXG5DaXJjbGUuQ2xvbmUgPSByZXF1aXJlKCcuL0Nsb25lJyk7XHJcbkNpcmNsZS5Db250YWlucyA9IHJlcXVpcmUoJy4vQ29udGFpbnMnKTtcclxuQ2lyY2xlLkNvbnRhaW5zUG9pbnQgPSByZXF1aXJlKCcuL0NvbnRhaW5zUG9pbnQnKTtcclxuQ2lyY2xlLkNvbnRhaW5zUmVjdCA9IHJlcXVpcmUoJy4vQ29udGFpbnNSZWN0Jyk7XHJcbkNpcmNsZS5Db3B5RnJvbSA9IHJlcXVpcmUoJy4vQ29weUZyb20nKTtcclxuQ2lyY2xlLkVxdWFscyA9IHJlcXVpcmUoJy4vRXF1YWxzJyk7XHJcbkNpcmNsZS5HZXRCb3VuZHMgPSByZXF1aXJlKCcuL0dldEJvdW5kcycpO1xyXG5DaXJjbGUuR2V0UG9pbnQgPSByZXF1aXJlKCcuL0dldFBvaW50Jyk7XHJcbkNpcmNsZS5HZXRQb2ludHMgPSByZXF1aXJlKCcuL0dldFBvaW50cycpO1xyXG5DaXJjbGUuT2Zmc2V0ID0gcmVxdWlyZSgnLi9PZmZzZXQnKTtcclxuQ2lyY2xlLk9mZnNldFBvaW50ID0gcmVxdWlyZSgnLi9PZmZzZXRQb2ludCcpO1xyXG5DaXJjbGUuUmFuZG9tID0gcmVxdWlyZSgnLi9SYW5kb20nKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2lyY2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/circle/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/const.js":
/*!***********************************************!*\
!*** ./node_modules/phaser/src/geom/const.js ***!
\***********************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GEOM_CONST = {\r\n\r\n /**\r\n * A Circle Geometry object type.\r\n * \r\n * @name Phaser.Geom.CIRCLE\r\n * @type {integer}\r\n * @since 3.19.0\r\n */\r\n CIRCLE: 0,\r\n\r\n /**\r\n * An Ellipse Geometry object type.\r\n * \r\n * @name Phaser.Geom.ELLIPSE\r\n * @type {integer}\r\n * @since 3.19.0\r\n */\r\n ELLIPSE: 1,\r\n\r\n /**\r\n * A Line Geometry object type.\r\n * \r\n * @name Phaser.Geom.LINE\r\n * @type {integer}\r\n * @since 3.19.0\r\n */\r\n LINE: 2,\r\n\r\n /**\r\n * A Point Geometry object type.\r\n * \r\n * @name Phaser.Geom.POINT\r\n * @type {integer}\r\n * @since 3.19.0\r\n */\r\n POINT: 3,\r\n\r\n /**\r\n * A Polygon Geometry object type.\r\n * \r\n * @name Phaser.Geom.POLYGON\r\n * @type {integer}\r\n * @since 3.19.0\r\n */\r\n POLYGON: 4,\r\n\r\n /**\r\n * A Rectangle Geometry object type.\r\n * \r\n * @name Phaser.Geom.RECTANGLE\r\n * @type {integer}\r\n * @since 3.19.0\r\n */\r\n RECTANGLE: 5,\r\n\r\n /**\r\n * A Triangle Geometry object type.\r\n * \r\n * @name Phaser.Geom.TRIANGLE\r\n * @type {integer}\r\n * @since 3.19.0\r\n */\r\n TRIANGLE: 6\r\n\r\n};\r\n\r\nmodule.exports = GEOM_CONST;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2NvbnN0LmpzPzg1ZjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vY29uc3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHRU9NX0NPTlNUID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBDaXJjbGUgR2VvbWV0cnkgb2JqZWN0IHR5cGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLkNJUkNMRVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgKi9cclxuICAgIENJUkNMRTogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuIEVsbGlwc2UgR2VvbWV0cnkgb2JqZWN0IHR5cGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLkVMTElQU0VcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMTkuMFxyXG4gICAgICovXHJcbiAgICBFTExJUFNFOiAxLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBMaW5lIEdlb21ldHJ5IG9iamVjdCB0eXBlLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5MSU5FXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjE5LjBcclxuICAgICAqL1xyXG4gICAgTElORTogMixcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgUG9pbnQgR2VvbWV0cnkgb2JqZWN0IHR5cGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLlBPSU5UXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjE5LjBcclxuICAgICAqL1xyXG4gICAgUE9JTlQ6IDMsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIFBvbHlnb24gR2VvbWV0cnkgb2JqZWN0IHR5cGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLlBPTFlHT05cclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMTkuMFxyXG4gICAgICovXHJcbiAgICBQT0xZR09OOiA0LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBSZWN0YW5nbGUgR2VvbWV0cnkgb2JqZWN0IHR5cGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLlJFQ1RBTkdMRVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgKi9cclxuICAgIFJFQ1RBTkdMRTogNSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgVHJpYW5nbGUgR2VvbWV0cnkgb2JqZWN0IHR5cGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLlRSSUFOR0xFXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjE5LjBcclxuICAgICAqL1xyXG4gICAgVFJJQU5HTEU6IDZcclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdFT01fQ09OU1Q7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/const.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/ellipse/Area.js":
/*!******************************************************!*\
!*** ./node_modules/phaser/src/geom/ellipse/Area.js ***!
\******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculates the area of the Ellipse.\r\n *\r\n * @function Phaser.Geom.Ellipse.Area\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to get the area of.\r\n *\r\n * @return {number} The area of the Ellipse.\r\n */\r\nvar Area = function (ellipse)\r\n{\r\n if (ellipse.isEmpty())\r\n {\r\n return 0;\r\n }\r\n\r\n // units squared\r\n return (ellipse.getMajorRadius() * ellipse.getMinorRadius() * Math.PI);\r\n};\r\n\r\nmodule.exports = Area;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQXJlYS5qcz9iOWQ1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9CQUFvQjtBQUMvQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQXJlYS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGFyZWEgb2YgdGhlIEVsbGlwc2UuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5FbGxpcHNlLkFyZWFcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uRWxsaXBzZX0gZWxsaXBzZSAtIFRoZSBFbGxpcHNlIHRvIGdldCB0aGUgYXJlYSBvZi5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgYXJlYSBvZiB0aGUgRWxsaXBzZS5cclxuICovXHJcbnZhciBBcmVhID0gZnVuY3Rpb24gKGVsbGlwc2UpXHJcbntcclxuICAgIGlmIChlbGxpcHNlLmlzRW1wdHkoKSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgdW5pdHMgc3F1YXJlZFxyXG4gICAgcmV0dXJuIChlbGxpcHNlLmdldE1ham9yUmFkaXVzKCkgKiBlbGxpcHNlLmdldE1pbm9yUmFkaXVzKCkgKiBNYXRoLlBJKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQXJlYTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/Area.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/ellipse/Circumference.js":
/*!***************************************************************!*\
!*** ./node_modules/phaser/src/geom/ellipse/Circumference.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns the circumference of the given Ellipse.\r\n *\r\n * @function Phaser.Geom.Ellipse.Circumference\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to get the circumference of.\r\n *\r\n * @return {number} The circumference of th Ellipse.\r\n */\r\nvar Circumference = function (ellipse)\r\n{\r\n var rx = ellipse.width / 2;\r\n var ry = ellipse.height / 2;\r\n var h = Math.pow((rx - ry), 2) / Math.pow((rx + ry), 2);\r\n\r\n return (Math.PI * (rx + ry)) * (1 + ((3 * h) / (10 + Math.sqrt(4 - (3 * h)))));\r\n};\r\n\r\nmodule.exports = Circumference;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQ2lyY3VtZmVyZW5jZS5qcz9mYmJkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9CQUFvQjtBQUMvQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vZWxsaXBzZS9DaXJjdW1mZXJlbmNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgZ2l2ZW4gRWxsaXBzZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkVsbGlwc2UuQ2lyY3VtZmVyZW5jZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5FbGxpcHNlfSBlbGxpcHNlIC0gVGhlIEVsbGlwc2UgdG8gZ2V0IHRoZSBjaXJjdW1mZXJlbmNlIG9mLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjaXJjdW1mZXJlbmNlIG9mIHRoIEVsbGlwc2UuXHJcbiAqL1xyXG52YXIgQ2lyY3VtZmVyZW5jZSA9IGZ1bmN0aW9uIChlbGxpcHNlKVxyXG57XHJcbiAgICB2YXIgcnggPSBlbGxpcHNlLndpZHRoIC8gMjtcclxuICAgIHZhciByeSA9IGVsbGlwc2UuaGVpZ2h0IC8gMjtcclxuICAgIHZhciBoID0gTWF0aC5wb3coKHJ4IC0gcnkpLCAyKSAvIE1hdGgucG93KChyeCArIHJ5KSwgMik7XHJcblxyXG4gICAgcmV0dXJuIChNYXRoLlBJICogKHJ4ICsgcnkpKSAqICgxICsgKCgzICogaCkgLyAoMTAgKyBNYXRoLnNxcnQoNCAtICgzICogaCkpKSkpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDaXJjdW1mZXJlbmNlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/Circumference.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/ellipse/CircumferencePoint.js":
/*!********************************************************************!*\
!*** ./node_modules/phaser/src/geom/ellipse/CircumferencePoint.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Returns a Point object containing the coordinates of a point on the circumference of the Ellipse based on the given angle.\r\n *\r\n * @function Phaser.Geom.Ellipse.CircumferencePoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to get the circumference point on.\r\n * @param {number} angle - The angle from the center of the Ellipse to the circumference to return the point from. Given in radians.\r\n * @param {(Phaser.Geom.Point|object)} [out] - A Point, or point-like object, to store the results in. If not given a Point will be created.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} A Point object where the `x` and `y` properties are the point on the circumference.\r\n */\r\nvar CircumferencePoint = function (ellipse, angle, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n var halfWidth = ellipse.width / 2;\r\n var halfHeight = ellipse.height / 2;\r\n\r\n out.x = ellipse.x + halfWidth * Math.cos(angle);\r\n out.y = ellipse.y + halfHeight * Math.sin(angle);\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = CircumferencePoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQ2lyY3VtZmVyZW5jZVBvaW50LmpzPzcyYTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRUFBZ0I7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsMkJBQTJCO0FBQ3RDO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLG1CQUFtQjs7QUFFL0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQ2lyY3VtZmVyZW5jZVBvaW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYSBQb2ludCBvYmplY3QgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgYSBwb2ludCBvbiB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgRWxsaXBzZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gYW5nbGUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5FbGxpcHNlLkNpcmN1bWZlcmVuY2VQb2ludFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkVsbGlwc2V9IGVsbGlwc2UgLSBUaGUgRWxsaXBzZSB0byBnZXQgdGhlIGNpcmN1bWZlcmVuY2UgcG9pbnQgb24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZSAtIFRoZSBhbmdsZSBmcm9tIHRoZSBjZW50ZXIgb2YgdGhlIEVsbGlwc2UgdG8gdGhlIGNpcmN1bWZlcmVuY2UgdG8gcmV0dXJuIHRoZSBwb2ludCBmcm9tLiBHaXZlbiBpbiByYWRpYW5zLlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBbb3V0XSAtIEEgUG9pbnQsIG9yIHBvaW50LWxpa2Ugb2JqZWN0LCB0byBzdG9yZSB0aGUgcmVzdWx0cyBpbi4gSWYgbm90IGdpdmVuIGEgUG9pbnQgd2lsbCBiZSBjcmVhdGVkLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gQSBQb2ludCBvYmplY3Qgd2hlcmUgdGhlIGB4YCBhbmQgYHlgIHByb3BlcnRpZXMgYXJlIHRoZSBwb2ludCBvbiB0aGUgY2lyY3VtZmVyZW5jZS5cclxuICovXHJcbnZhciBDaXJjdW1mZXJlbmNlUG9pbnQgPSBmdW5jdGlvbiAoZWxsaXBzZSwgYW5nbGUsIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBQb2ludCgpOyB9XHJcblxyXG4gICAgdmFyIGhhbGZXaWR0aCA9IGVsbGlwc2Uud2lkdGggLyAyO1xyXG4gICAgdmFyIGhhbGZIZWlnaHQgPSBlbGxpcHNlLmhlaWdodCAvIDI7XHJcblxyXG4gICAgb3V0LnggPSBlbGxpcHNlLnggKyBoYWxmV2lkdGggKiBNYXRoLmNvcyhhbmdsZSk7XHJcbiAgICBvdXQueSA9IGVsbGlwc2UueSArIGhhbGZIZWlnaHQgKiBNYXRoLnNpbihhbmdsZSk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2lyY3VtZmVyZW5jZVBvaW50O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/CircumferencePoint.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/ellipse/Clone.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/geom/ellipse/Clone.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Ellipse = __webpack_require__(/*! ./Ellipse */ \"./node_modules/phaser/src/geom/ellipse/Ellipse.js\");\r\n\r\n/**\r\n * Creates a new Ellipse instance based on the values contained in the given source.\r\n *\r\n * @function Phaser.Geom.Ellipse.Clone\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Ellipse} source - The Ellipse to be cloned. Can be an instance of an Ellipse or a ellipse-like object, with x, y, width and height properties.\r\n *\r\n * @return {Phaser.Geom.Ellipse} A clone of the source Ellipse.\r\n */\r\nvar Clone = function (source)\r\n{\r\n return new Ellipse(source.x, source.y, source.width, source.height);\r\n};\r\n\r\nmodule.exports = Clone;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQ2xvbmUuanM/MjRjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLG9FQUFXOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9CQUFvQjtBQUMvQjtBQUNBLFlBQVksb0JBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQ2xvbmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBFbGxpcHNlID0gcmVxdWlyZSgnLi9FbGxpcHNlJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBFbGxpcHNlIGluc3RhbmNlIGJhc2VkIG9uIHRoZSB2YWx1ZXMgY29udGFpbmVkIGluIHRoZSBnaXZlbiBzb3VyY2UuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5FbGxpcHNlLkNsb25lXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkVsbGlwc2V9IHNvdXJjZSAtIFRoZSBFbGxpcHNlIHRvIGJlIGNsb25lZC4gQ2FuIGJlIGFuIGluc3RhbmNlIG9mIGFuIEVsbGlwc2Ugb3IgYSBlbGxpcHNlLWxpa2Ugb2JqZWN0LCB3aXRoIHgsIHksIHdpZHRoIGFuZCBoZWlnaHQgcHJvcGVydGllcy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uRWxsaXBzZX0gQSBjbG9uZSBvZiB0aGUgc291cmNlIEVsbGlwc2UuXHJcbiAqL1xyXG52YXIgQ2xvbmUgPSBmdW5jdGlvbiAoc291cmNlKVxyXG57XHJcbiAgICByZXR1cm4gbmV3IEVsbGlwc2Uoc291cmNlLngsIHNvdXJjZS55LCBzb3VyY2Uud2lkdGgsIHNvdXJjZS5oZWlnaHQpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDbG9uZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/Clone.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/ellipse/Contains.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/geom/ellipse/Contains.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Check to see if the Ellipse contains the given x / y coordinates.\r\n *\r\n * @function Phaser.Geom.Ellipse.Contains\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to check.\r\n * @param {number} x - The x coordinate to check within the ellipse.\r\n * @param {number} y - The y coordinate to check within the ellipse.\r\n *\r\n * @return {boolean} True if the coordinates are within the ellipse, otherwise false.\r\n */\r\nvar Contains = function (ellipse, x, y)\r\n{\r\n if (ellipse.width <= 0 || ellipse.height <= 0)\r\n {\r\n return false;\r\n }\r\n\r\n // Normalize the coords to an ellipse with center 0,0 and a radius of 0.5\r\n var normx = ((x - ellipse.x) / ellipse.width);\r\n var normy = ((y - ellipse.y) / ellipse.height);\r\n\r\n normx *= normx;\r\n normy *= normy;\r\n\r\n return (normx + normy < 0.25);\r\n};\r\n\r\nmodule.exports = Contains;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQ29udGFpbnMuanM/M2MwNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9lbGxpcHNlL0NvbnRhaW5zLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBFbGxpcHNlIGNvbnRhaW5zIHRoZSBnaXZlbiB4IC8geSBjb29yZGluYXRlcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkVsbGlwc2UuQ29udGFpbnNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uRWxsaXBzZX0gZWxsaXBzZSAtIFRoZSBFbGxpcHNlIHRvIGNoZWNrLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gY2hlY2sgd2l0aGluIHRoZSBlbGxpcHNlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gY2hlY2sgd2l0aGluIHRoZSBlbGxpcHNlLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoZSBlbGxpcHNlLCBvdGhlcndpc2UgZmFsc2UuXHJcbiAqL1xyXG52YXIgQ29udGFpbnMgPSBmdW5jdGlvbiAoZWxsaXBzZSwgeCwgeSlcclxue1xyXG4gICAgaWYgKGVsbGlwc2Uud2lkdGggPD0gMCB8fCBlbGxpcHNlLmhlaWdodCA8PSAwKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgTm9ybWFsaXplIHRoZSBjb29yZHMgdG8gYW4gZWxsaXBzZSB3aXRoIGNlbnRlciAwLDAgYW5kIGEgcmFkaXVzIG9mIDAuNVxyXG4gICAgdmFyIG5vcm14ID0gKCh4IC0gZWxsaXBzZS54KSAvIGVsbGlwc2Uud2lkdGgpO1xyXG4gICAgdmFyIG5vcm15ID0gKCh5IC0gZWxsaXBzZS55KSAvIGVsbGlwc2UuaGVpZ2h0KTtcclxuXHJcbiAgICBub3JteCAqPSBub3JteDtcclxuICAgIG5vcm15ICo9IG5vcm15O1xyXG5cclxuICAgIHJldHVybiAobm9ybXggKyBub3JteSA8IDAuMjUpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb250YWlucztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/Contains.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/ellipse/ContainsPoint.js":
/*!***************************************************************!*\
!*** ./node_modules/phaser/src/geom/ellipse/ContainsPoint.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/ellipse/Contains.js\");\r\n\r\n/**\r\n * Check to see if the Ellipse contains the given Point object.\r\n *\r\n * @function Phaser.Geom.Ellipse.ContainsPoint\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to check.\r\n * @param {(Phaser.Geom.Point|object)} point - The Point object to check if it's within the Circle or not.\r\n *\r\n * @return {boolean} True if the Point coordinates are within the circle, otherwise false.\r\n */\r\nvar ContainsPoint = function (ellipse, point)\r\n{\r\n return Contains(ellipse, point.x, point.y);\r\n};\r\n\r\nmodule.exports = ContainsPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQ29udGFpbnNQb2ludC5qcz8xYmMxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxlQUFlLG1CQUFPLENBQUMsc0VBQVk7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsMkJBQTJCO0FBQ3RDO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQ29udGFpbnNQb2ludC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENvbnRhaW5zID0gcmVxdWlyZSgnLi9Db250YWlucycpO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIHRvIHNlZSBpZiB0aGUgRWxsaXBzZSBjb250YWlucyB0aGUgZ2l2ZW4gUG9pbnQgb2JqZWN0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uRWxsaXBzZS5Db250YWluc1BvaW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkVsbGlwc2V9IGVsbGlwc2UgLSBUaGUgRWxsaXBzZSB0byBjaGVjay5cclxuICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gcG9pbnQgLSBUaGUgUG9pbnQgb2JqZWN0IHRvIGNoZWNrIGlmIGl0J3Mgd2l0aGluIHRoZSBDaXJjbGUgb3Igbm90LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBQb2ludCBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoZSBjaXJjbGUsIG90aGVyd2lzZSBmYWxzZS5cclxuICovXHJcbnZhciBDb250YWluc1BvaW50ID0gZnVuY3Rpb24gKGVsbGlwc2UsIHBvaW50KVxyXG57XHJcbiAgICByZXR1cm4gQ29udGFpbnMoZWxsaXBzZSwgcG9pbnQueCwgcG9pbnQueSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5zUG9pbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/ContainsPoint.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/ellipse/ContainsRect.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/geom/ellipse/ContainsRect.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/ellipse/Contains.js\");\r\n\r\n/**\r\n * Check to see if the Ellipse contains all four points of the given Rectangle object.\r\n *\r\n * @function Phaser.Geom.Ellipse.ContainsRect\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to check.\r\n * @param {(Phaser.Geom.Rectangle|object)} rect - The Rectangle object to check if it's within the Ellipse or not.\r\n *\r\n * @return {boolean} True if all of the Rectangle coordinates are within the ellipse, otherwise false.\r\n */\r\nvar ContainsRect = function (ellipse, rect)\r\n{\r\n return (\r\n Contains(ellipse, rect.x, rect.y) &&\r\n Contains(ellipse, rect.right, rect.y) &&\r\n Contains(ellipse, rect.x, rect.bottom) &&\r\n Contains(ellipse, rect.right, rect.bottom)\r\n );\r\n};\r\n\r\nmodule.exports = ContainsRect;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQ29udGFpbnNSZWN0LmpzP2FlMDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxzRUFBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVywrQkFBK0I7QUFDMUM7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQ29udGFpbnNSZWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ29udGFpbnMgPSByZXF1aXJlKCcuL0NvbnRhaW5zJyk7XHJcblxyXG4vKipcclxuICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBFbGxpcHNlIGNvbnRhaW5zIGFsbCBmb3VyIHBvaW50cyBvZiB0aGUgZ2l2ZW4gUmVjdGFuZ2xlIG9iamVjdC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkVsbGlwc2UuQ29udGFpbnNSZWN0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkVsbGlwc2V9IGVsbGlwc2UgLSBUaGUgRWxsaXBzZSB0byBjaGVjay5cclxuICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUmVjdGFuZ2xlfG9iamVjdCl9IHJlY3QgLSBUaGUgUmVjdGFuZ2xlIG9iamVjdCB0byBjaGVjayBpZiBpdCdzIHdpdGhpbiB0aGUgRWxsaXBzZSBvciBub3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYWxsIG9mIHRoZSBSZWN0YW5nbGUgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGUgZWxsaXBzZSwgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gKi9cclxudmFyIENvbnRhaW5zUmVjdCA9IGZ1bmN0aW9uIChlbGxpcHNlLCByZWN0KVxyXG57XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIENvbnRhaW5zKGVsbGlwc2UsIHJlY3QueCwgcmVjdC55KSAmJlxyXG4gICAgICAgIENvbnRhaW5zKGVsbGlwc2UsIHJlY3QucmlnaHQsIHJlY3QueSkgJiZcclxuICAgICAgICBDb250YWlucyhlbGxpcHNlLCByZWN0LngsIHJlY3QuYm90dG9tKSAmJlxyXG4gICAgICAgIENvbnRhaW5zKGVsbGlwc2UsIHJlY3QucmlnaHQsIHJlY3QuYm90dG9tKVxyXG4gICAgKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ29udGFpbnNSZWN0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/ContainsRect.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/ellipse/CopyFrom.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/geom/ellipse/CopyFrom.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Copies the `x`, `y`, `width` and `height` properties from the `source` Ellipse\r\n * into the given `dest` Ellipse, then returns the `dest` Ellipse.\r\n *\r\n * @function Phaser.Geom.Ellipse.CopyFrom\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Ellipse} O - [dest,$return]\r\n *\r\n * @param {Phaser.Geom.Ellipse} source - The source Ellipse to copy the values from.\r\n * @param {Phaser.Geom.Ellipse} dest - The destination Ellipse to copy the values to.\r\n *\r\n * @return {Phaser.Geom.Ellipse} The destination Ellipse.\r\n */\r\nvar CopyFrom = function (source, dest)\r\n{\r\n return dest.setTo(source.x, source.y, source.width, source.height);\r\n};\r\n\r\nmodule.exports = CopyFrom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvQ29weUZyb20uanM/YmUzMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLG9CQUFvQjtBQUNqQztBQUNBLFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsb0JBQW9CO0FBQy9CO0FBQ0EsWUFBWSxvQkFBb0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vZWxsaXBzZS9Db3B5RnJvbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENvcGllcyB0aGUgYHhgLCBgeWAsIGB3aWR0aGAgYW5kIGBoZWlnaHRgIHByb3BlcnRpZXMgZnJvbSB0aGUgYHNvdXJjZWAgRWxsaXBzZVxyXG4gKiBpbnRvIHRoZSBnaXZlbiBgZGVzdGAgRWxsaXBzZSwgdGhlbiByZXR1cm5zIHRoZSBgZGVzdGAgRWxsaXBzZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkVsbGlwc2UuQ29weUZyb21cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5FbGxpcHNlfSBPIC0gW2Rlc3QsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5FbGxpcHNlfSBzb3VyY2UgLSBUaGUgc291cmNlIEVsbGlwc2UgdG8gY29weSB0aGUgdmFsdWVzIGZyb20uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uRWxsaXBzZX0gZGVzdCAtIFRoZSBkZXN0aW5hdGlvbiBFbGxpcHNlIHRvIGNvcHkgdGhlIHZhbHVlcyB0by5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uRWxsaXBzZX0gVGhlIGRlc3RpbmF0aW9uIEVsbGlwc2UuXHJcbiAqL1xyXG52YXIgQ29weUZyb20gPSBmdW5jdGlvbiAoc291cmNlLCBkZXN0KVxyXG57XHJcbiAgICByZXR1cm4gZGVzdC5zZXRUbyhzb3VyY2UueCwgc291cmNlLnksIHNvdXJjZS53aWR0aCwgc291cmNlLmhlaWdodCk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvcHlGcm9tO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/CopyFrom.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/ellipse/Ellipse.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/geom/ellipse/Ellipse.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/ellipse/Contains.js\");\r\nvar GetPoint = __webpack_require__(/*! ./GetPoint */ \"./node_modules/phaser/src/geom/ellipse/GetPoint.js\");\r\nvar GetPoints = __webpack_require__(/*! ./GetPoints */ \"./node_modules/phaser/src/geom/ellipse/GetPoints.js\");\r\nvar GEOM_CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/geom/const.js\");\r\nvar Random = __webpack_require__(/*! ./Random */ \"./node_modules/phaser/src/geom/ellipse/Random.js\");\r\n\r\n/**\r\n * @classdesc\r\n * An Ellipse object.\r\n *\r\n * This is a geometry object, containing numerical values and related methods to inspect and modify them.\r\n * It is not a Game Object, in that you cannot add it to the display list, and it has no texture.\r\n * To render an Ellipse you should look at the capabilities of the Graphics class.\r\n *\r\n * @class Ellipse\r\n * @memberof Phaser.Geom\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x=0] - The x position of the center of the ellipse.\r\n * @param {number} [y=0] - The y position of the center of the ellipse.\r\n * @param {number} [width=0] - The width of the ellipse.\r\n * @param {number} [height=0] - The height of the ellipse.\r\n */\r\nvar Ellipse = new Class({\r\n\r\n initialize:\r\n\r\n function Ellipse (x, y, width, height)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n if (width === undefined) { width = 0; }\r\n if (height === undefined) { height = 0; }\r\n\r\n /**\r\n * The geometry constant type of this object: `GEOM_CONST.ELLIPSE`.\r\n * Used for fast type comparisons.\r\n *\r\n * @name Phaser.Geom.Ellipse#type\r\n * @type {integer}\r\n * @readonly\r\n * @since 3.19.0\r\n */\r\n this.type = GEOM_CONST.ELLIPSE;\r\n\r\n /**\r\n * The x position of the center of the ellipse.\r\n *\r\n * @name Phaser.Geom.Ellipse#x\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.x = x;\r\n\r\n /**\r\n * The y position of the center of the ellipse.\r\n *\r\n * @name Phaser.Geom.Ellipse#y\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.y = y;\r\n\r\n /**\r\n * The width of the ellipse.\r\n *\r\n * @name Phaser.Geom.Ellipse#width\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.width = width;\r\n\r\n /**\r\n * The height of the ellipse.\r\n *\r\n * @name Phaser.Geom.Ellipse#height\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.height = height;\r\n },\r\n\r\n /**\r\n * Check to see if the Ellipse contains the given x / y coordinates.\r\n *\r\n * @method Phaser.Geom.Ellipse#contains\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x coordinate to check within the ellipse.\r\n * @param {number} y - The y coordinate to check within the ellipse.\r\n *\r\n * @return {boolean} True if the coordinates are within the ellipse, otherwise false.\r\n */\r\n contains: function (x, y)\r\n {\r\n return Contains(this, x, y);\r\n },\r\n\r\n /**\r\n * Returns a Point object containing the coordinates of a point on the circumference of the Ellipse\r\n * based on the given angle normalized to the range 0 to 1. I.e. a value of 0.5 will give the point\r\n * at 180 degrees around the circle.\r\n *\r\n * @method Phaser.Geom.Ellipse#getPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {number} position - A value between 0 and 1, where 0 equals 0 degrees, 0.5 equals 180 degrees and 1 equals 360 around the ellipse.\r\n * @param {(Phaser.Geom.Point|object)} [out] - An object to store the return values in. If not given a Point object will be created.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} A Point, or point-like object, containing the coordinates of the point around the ellipse.\r\n */\r\n getPoint: function (position, point)\r\n {\r\n return GetPoint(this, position, point);\r\n },\r\n\r\n /**\r\n * Returns an array of Point objects containing the coordinates of the points around the circumference of the Ellipse,\r\n * based on the given quantity or stepRate values.\r\n *\r\n * @method Phaser.Geom.Ellipse#getPoints\r\n * @since 3.0.0\r\n *\r\n * @param {integer} quantity - The amount of points to return. If a falsey value the quantity will be derived from the `stepRate` instead.\r\n * @param {number} [stepRate] - Sets the quantity by getting the circumference of the ellipse and dividing it by the stepRate.\r\n * @param {array} [output] - An array to insert the points in to. If not provided a new array will be created.\r\n *\r\n * @return {Phaser.Geom.Point[]} An array of Point objects pertaining to the points around the circumference of the ellipse.\r\n */\r\n getPoints: function (quantity, stepRate, output)\r\n {\r\n return GetPoints(this, quantity, stepRate, output);\r\n },\r\n\r\n /**\r\n * Returns a uniformly distributed random point from anywhere within the given Ellipse.\r\n *\r\n * @method Phaser.Geom.Ellipse#getRandomPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [point,$return]\r\n *\r\n * @param {(Phaser.Geom.Point|object)} [point] - A Point or point-like object to set the random `x` and `y` values in.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} A Point object with the random values set in the `x` and `y` properties.\r\n */\r\n getRandomPoint: function (point)\r\n {\r\n return Random(this, point);\r\n },\r\n\r\n /**\r\n * Sets the x, y, width and height of this ellipse.\r\n *\r\n * @method Phaser.Geom.Ellipse#setTo\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x position of the center of the ellipse.\r\n * @param {number} y - The y position of the center of the ellipse.\r\n * @param {number} width - The width of the ellipse.\r\n * @param {number} height - The height of the ellipse.\r\n *\r\n * @return {Phaser.Geom.Ellipse} This Ellipse object.\r\n */\r\n setTo: function (x, y, width, height)\r\n {\r\n this.x = x;\r\n this.y = y;\r\n this.width = width;\r\n this.height = height;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets this Ellipse to be empty with a width and height of zero.\r\n * Does not change its position.\r\n *\r\n * @method Phaser.Geom.Ellipse#setEmpty\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Geom.Ellipse} This Ellipse object.\r\n */\r\n setEmpty: function ()\r\n {\r\n this.width = 0;\r\n this.height = 0;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the position of this Ellipse.\r\n *\r\n * @method Phaser.Geom.Ellipse#setPosition\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x position of the center of the ellipse.\r\n * @param {number} y - The y position of the center of the ellipse.\r\n *\r\n * @return {Phaser.Geom.Ellipse} This Ellipse object.\r\n */\r\n setPosition: function (x, y)\r\n {\r\n if (y === undefined) { y = x; }\r\n\r\n this.x = x;\r\n this.y = y;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the size of this Ellipse.\r\n * Does not change its position.\r\n *\r\n * @method Phaser.Geom.Ellipse#setSize\r\n * @since 3.0.0\r\n *\r\n * @param {number} width - The width of the ellipse.\r\n * @param {number} [height=width] - The height of the ellipse.\r\n *\r\n * @return {Phaser.Geom.Ellipse} This Ellipse object.\r\n */\r\n setSize: function (width, height)\r\n {\r\n if (height === undefined) { height = width; }\r\n\r\n this.width = width;\r\n this.height = height;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Checks to see if the Ellipse is empty: has a width or height equal to zero.\r\n *\r\n * @method Phaser.Geom.Ellipse#isEmpty\r\n * @since 3.0.0\r\n *\r\n * @return {boolean} True if the Ellipse is empty, otherwise false.\r\n */\r\n isEmpty: function ()\r\n {\r\n return (this.width <= 0 || this.height <= 0);\r\n },\r\n\r\n /**\r\n * Returns the minor radius of the ellipse. Also known as the Semi Minor Axis.\r\n *\r\n * @method Phaser.Geom.Ellipse#getMinorRadius\r\n * @since 3.0.0\r\n *\r\n * @return {number} The minor radius.\r\n */\r\n getMinorRadius: function ()\r\n {\r\n return Math.min(this.width, this.height) / 2;\r\n },\r\n\r\n /**\r\n * Returns the major radius of the ellipse. Also known as the Semi Major Axis.\r\n *\r\n * @method Phaser.Geom.Ellipse#getMajorRadius\r\n * @since 3.0.0\r\n *\r\n * @return {number} The major radius.\r\n */\r\n getMajorRadius: function ()\r\n {\r\n return Math.max(this.width, this.height) / 2;\r\n },\r\n\r\n /**\r\n * The left position of the Ellipse.\r\n *\r\n * @name Phaser.Geom.Ellipse#left\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n left: {\r\n\r\n get: function ()\r\n {\r\n return this.x - (this.width / 2);\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.x = value + (this.width / 2);\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The right position of the Ellipse.\r\n *\r\n * @name Phaser.Geom.Ellipse#right\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n right: {\r\n\r\n get: function ()\r\n {\r\n return this.x + (this.width / 2);\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.x = value - (this.width / 2);\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The top position of the Ellipse.\r\n *\r\n * @name Phaser.Geom.Ellipse#top\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n top: {\r\n\r\n get: function ()\r\n {\r\n return this.y - (this.height / 2);\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.y = value + (this.height / 2);\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The bottom position of the Ellipse.\r\n *\r\n * @name Phaser.Geom.Ellipse#bottom\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n bottom: {\r\n\r\n get: function ()\r\n {\r\n return this.y + (this.height / 2);\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.y = value - (this.height / 2);\r\n }\r\n\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Ellipse;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvRWxsaXBzZS5qcz82MDE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxzRUFBWTtBQUNuQyxlQUFlLG1CQUFPLENBQUMsc0VBQVk7QUFDbkMsZ0JBQWdCLG1CQUFPLENBQUMsd0VBQWE7QUFDckMsaUJBQWlCLG1CQUFPLENBQUMseURBQVU7QUFDbkMsYUFBYSxtQkFBTyxDQUFDLGtFQUFVOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTztBQUNyQyw4QkFBOEIsT0FBTztBQUNyQyxrQ0FBa0MsV0FBVztBQUM3QyxtQ0FBbUMsWUFBWTs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLDJCQUEyQjtBQUMxQztBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QixlQUFlLE1BQU07QUFDckI7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0EsZUFBZSwyQkFBMkI7QUFDMUM7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLGdCQUFnQjs7QUFFbkQ7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vZWxsaXBzZS9FbGxpcHNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ29udGFpbnMgPSByZXF1aXJlKCcuL0NvbnRhaW5zJyk7XHJcbnZhciBHZXRQb2ludCA9IHJlcXVpcmUoJy4vR2V0UG9pbnQnKTtcclxudmFyIEdldFBvaW50cyA9IHJlcXVpcmUoJy4vR2V0UG9pbnRzJyk7XHJcbnZhciBHRU9NX0NPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcclxudmFyIFJhbmRvbSA9IHJlcXVpcmUoJy4vUmFuZG9tJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBbiBFbGxpcHNlIG9iamVjdC5cclxuICpcclxuICogVGhpcyBpcyBhIGdlb21ldHJ5IG9iamVjdCwgY29udGFpbmluZyBudW1lcmljYWwgdmFsdWVzIGFuZCByZWxhdGVkIG1ldGhvZHMgdG8gaW5zcGVjdCBhbmQgbW9kaWZ5IHRoZW0uXHJcbiAqIEl0IGlzIG5vdCBhIEdhbWUgT2JqZWN0LCBpbiB0aGF0IHlvdSBjYW5ub3QgYWRkIGl0IHRvIHRoZSBkaXNwbGF5IGxpc3QsIGFuZCBpdCBoYXMgbm8gdGV4dHVyZS5cclxuICogVG8gcmVuZGVyIGFuIEVsbGlwc2UgeW91IHNob3VsZCBsb29rIGF0IHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIEdyYXBoaWNzIGNsYXNzLlxyXG4gKlxyXG4gKiBAY2xhc3MgRWxsaXBzZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkdlb21cclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3g9MF0gLSBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3k9MF0gLSBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3dpZHRoPTBdIC0gVGhlIHdpZHRoIG9mIHRoZSBlbGxpcHNlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodD0wXSAtIFRoZSBoZWlnaHQgb2YgdGhlIGVsbGlwc2UuXHJcbiAqL1xyXG52YXIgRWxsaXBzZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBFbGxpcHNlICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSAwOyB9XHJcbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHsgd2lkdGggPSAwOyB9XHJcbiAgICAgICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IGhlaWdodCA9IDA7IH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGdlb21ldHJ5IGNvbnN0YW50IHR5cGUgb2YgdGhpcyBvYmplY3Q6IGBHRU9NX0NPTlNULkVMTElQU0VgLlxyXG4gICAgICAgICAqIFVzZWQgZm9yIGZhc3QgdHlwZSBjb21wYXJpc29ucy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLkVsbGlwc2UjdHlwZVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE5LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnR5cGUgPSBHRU9NX0NPTlNULkVMTElQU0U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB4IHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5FbGxpcHNlI3hcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnggPSB4O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdlb20uRWxsaXBzZSN5XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy55ID0geTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHdpZHRoIG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdlb20uRWxsaXBzZSN3aWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGhlaWdodCBvZiB0aGUgZWxsaXBzZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLkVsbGlwc2UjaGVpZ2h0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBFbGxpcHNlIGNvbnRhaW5zIHRoZSBnaXZlbiB4IC8geSBjb29yZGluYXRlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLkVsbGlwc2UjY29udGFpbnNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSB0byBjaGVjayB3aXRoaW4gdGhlIGVsbGlwc2UuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gY2hlY2sgd2l0aGluIHRoZSBlbGxpcHNlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhlIGVsbGlwc2UsIG90aGVyd2lzZSBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgY29udGFpbnM6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBDb250YWlucyh0aGlzLCB4LCB5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgUG9pbnQgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIGEgcG9pbnQgb24gdGhlIGNpcmN1bWZlcmVuY2Ugb2YgdGhlIEVsbGlwc2VcclxuICAgICAqIGJhc2VkIG9uIHRoZSBnaXZlbiBhbmdsZSBub3JtYWxpemVkIHRvIHRoZSByYW5nZSAwIHRvIDEuIEkuZS4gYSB2YWx1ZSBvZiAwLjUgd2lsbCBnaXZlIHRoZSBwb2ludFxyXG4gICAgICogYXQgMTgwIGRlZ3JlZXMgYXJvdW5kIHRoZSBjaXJjbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5FbGxpcHNlI2dldFBvaW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnR9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHBvc2l0aW9uIC0gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEsIHdoZXJlIDAgZXF1YWxzIDAgZGVncmVlcywgMC41IGVxdWFscyAxODAgZGVncmVlcyBhbmQgMSBlcXVhbHMgMzYwIGFyb3VuZCB0aGUgZWxsaXBzZS5cclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IFtvdXRdIC0gQW4gb2JqZWN0IHRvIHN0b3JlIHRoZSByZXR1cm4gdmFsdWVzIGluLiBJZiBub3QgZ2l2ZW4gYSBQb2ludCBvYmplY3Qgd2lsbCBiZSBjcmVhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBBIFBvaW50LCBvciBwb2ludC1saWtlIG9iamVjdCwgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50IGFyb3VuZCB0aGUgZWxsaXBzZS5cclxuICAgICAqL1xyXG4gICAgZ2V0UG9pbnQ6IGZ1bmN0aW9uIChwb3NpdGlvbiwgcG9pbnQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIEdldFBvaW50KHRoaXMsIHBvc2l0aW9uLCBwb2ludCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBQb2ludCBvYmplY3RzIGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludHMgYXJvdW5kIHRoZSBjaXJjdW1mZXJlbmNlIG9mIHRoZSBFbGxpcHNlLFxyXG4gICAgICogYmFzZWQgb24gdGhlIGdpdmVuIHF1YW50aXR5IG9yIHN0ZXBSYXRlIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLkVsbGlwc2UjZ2V0UG9pbnRzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHF1YW50aXR5IC0gVGhlIGFtb3VudCBvZiBwb2ludHMgdG8gcmV0dXJuLiBJZiBhIGZhbHNleSB2YWx1ZSB0aGUgcXVhbnRpdHkgd2lsbCBiZSBkZXJpdmVkIGZyb20gdGhlIGBzdGVwUmF0ZWAgaW5zdGVhZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFJhdGVdIC0gU2V0cyB0aGUgcXVhbnRpdHkgYnkgZ2V0dGluZyB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgZWxsaXBzZSBhbmQgZGl2aWRpbmcgaXQgYnkgdGhlIHN0ZXBSYXRlLlxyXG4gICAgICogQHBhcmFtIHthcnJheX0gW291dHB1dF0gLSBBbiBhcnJheSB0byBpbnNlcnQgdGhlIHBvaW50cyBpbiB0by4gSWYgbm90IHByb3ZpZGVkIGEgbmV3IGFycmF5IHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5Qb2ludFtdfSBBbiBhcnJheSBvZiBQb2ludCBvYmplY3RzIHBlcnRhaW5pbmcgdG8gdGhlIHBvaW50cyBhcm91bmQgdGhlIGNpcmN1bWZlcmVuY2Ugb2YgdGhlIGVsbGlwc2UuXHJcbiAgICAgKi9cclxuICAgIGdldFBvaW50czogZnVuY3Rpb24gKHF1YW50aXR5LCBzdGVwUmF0ZSwgb3V0cHV0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBHZXRQb2ludHModGhpcywgcXVhbnRpdHksIHN0ZXBSYXRlLCBvdXRwdXQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQgcmFuZG9tIHBvaW50IGZyb20gYW55d2hlcmUgd2l0aGluIHRoZSBnaXZlbiBFbGxpcHNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uRWxsaXBzZSNnZXRSYW5kb21Qb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW3BvaW50LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gW3BvaW50XSAtIEEgUG9pbnQgb3IgcG9pbnQtbGlrZSBvYmplY3QgdG8gc2V0IHRoZSByYW5kb20gYHhgIGFuZCBgeWAgdmFsdWVzIGluLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBBIFBvaW50IG9iamVjdCB3aXRoIHRoZSByYW5kb20gdmFsdWVzIHNldCBpbiB0aGUgYHhgIGFuZCBgeWAgcHJvcGVydGllcy5cclxuICAgICAqL1xyXG4gICAgZ2V0UmFuZG9tUG9pbnQ6IGZ1bmN0aW9uIChwb2ludClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gUmFuZG9tKHRoaXMsIHBvaW50KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB4LCB5LCB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoaXMgZWxsaXBzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLkVsbGlwc2Ujc2V0VG9cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHggcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgZWxsaXBzZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HZW9tLkVsbGlwc2V9IFRoaXMgRWxsaXBzZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFRvOiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnggPSB4O1xyXG4gICAgICAgIHRoaXMueSA9IHk7XHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoaXMgRWxsaXBzZSB0byBiZSBlbXB0eSB3aXRoIGEgd2lkdGggYW5kIGhlaWdodCBvZiB6ZXJvLlxyXG4gICAgICogRG9lcyBub3QgY2hhbmdlIGl0cyBwb3NpdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLkVsbGlwc2Ujc2V0RW1wdHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HZW9tLkVsbGlwc2V9IFRoaXMgRWxsaXBzZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEVtcHR5OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMud2lkdGggPSAwO1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gMDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcG9zaXRpb24gb2YgdGhpcyBFbGxpcHNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uRWxsaXBzZSNzZXRQb3NpdGlvblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HZW9tLkVsbGlwc2V9IFRoaXMgRWxsaXBzZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFBvc2l0aW9uOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSB4OyB9XHJcblxyXG4gICAgICAgIHRoaXMueCA9IHg7XHJcbiAgICAgICAgdGhpcy55ID0geTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgc2l6ZSBvZiB0aGlzIEVsbGlwc2UuXHJcbiAgICAgKiBEb2VzIG5vdCBjaGFuZ2UgaXRzIHBvc2l0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uRWxsaXBzZSNzZXRTaXplXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIGVsbGlwc2UuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodD13aWR0aF0gLSBUaGUgaGVpZ2h0IG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HZW9tLkVsbGlwc2V9IFRoaXMgRWxsaXBzZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFNpemU6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChoZWlnaHQgPT09IHVuZGVmaW5lZCkgeyBoZWlnaHQgPSB3aWR0aDsgfVxyXG5cclxuICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB0byBzZWUgaWYgdGhlIEVsbGlwc2UgaXMgZW1wdHk6IGhhcyBhIHdpZHRoIG9yIGhlaWdodCBlcXVhbCB0byB6ZXJvLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uRWxsaXBzZSNpc0VtcHR5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBFbGxpcHNlIGlzIGVtcHR5LCBvdGhlcndpc2UgZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIGlzRW1wdHk6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgbWlub3IgcmFkaXVzIG9mIHRoZSBlbGxpcHNlLiBBbHNvIGtub3duIGFzIHRoZSBTZW1pIE1pbm9yIEF4aXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5FbGxpcHNlI2dldE1pbm9yUmFkaXVzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBtaW5vciByYWRpdXMuXHJcbiAgICAgKi9cclxuICAgIGdldE1pbm9yUmFkaXVzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLndpZHRoLCB0aGlzLmhlaWdodCkgLyAyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIG1ham9yIHJhZGl1cyBvZiB0aGUgZWxsaXBzZS4gQWxzbyBrbm93biBhcyB0aGUgU2VtaSBNYWpvciBBeGlzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uRWxsaXBzZSNnZXRNYWpvclJhZGl1c1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbWFqb3IgcmFkaXVzLlxyXG4gICAgICovXHJcbiAgICBnZXRNYWpvclJhZGl1czogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpIC8gMjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbGVmdCBwb3NpdGlvbiBvZiB0aGUgRWxsaXBzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5FbGxpcHNlI2xlZnRcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgbGVmdDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy54IC0gKHRoaXMud2lkdGggLyAyKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueCA9IHZhbHVlICsgKHRoaXMud2lkdGggLyAyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSByaWdodCBwb3NpdGlvbiBvZiB0aGUgRWxsaXBzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5FbGxpcHNlI3JpZ2h0XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHJpZ2h0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnggKyAodGhpcy53aWR0aCAvIDIpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy54ID0gdmFsdWUgLSAodGhpcy53aWR0aCAvIDIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRvcCBwb3NpdGlvbiBvZiB0aGUgRWxsaXBzZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5FbGxpcHNlI3RvcFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB0b3A6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMueSAtICh0aGlzLmhlaWdodCAvIDIpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy55ID0gdmFsdWUgKyAodGhpcy5oZWlnaHQgLyAyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBib3R0b20gcG9zaXRpb24gb2YgdGhlIEVsbGlwc2UuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdlb20uRWxsaXBzZSNib3R0b21cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgYm90dG9tOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnkgKyAodGhpcy5oZWlnaHQgLyAyKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueSA9IHZhbHVlIC0gKHRoaXMuaGVpZ2h0IC8gMik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFbGxpcHNlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/Ellipse.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/ellipse/Equals.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/geom/ellipse/Equals.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Compares the `x`, `y`, `width` and `height` properties of the two given Ellipses.\r\n * Returns `true` if they all match, otherwise returns `false`.\r\n *\r\n * @function Phaser.Geom.Ellipse.Equals\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The first Ellipse to compare.\r\n * @param {Phaser.Geom.Ellipse} toCompare - The second Ellipse to compare.\r\n *\r\n * @return {boolean} `true` if the two Ellipse equal each other, otherwise `false`.\r\n */\r\nvar Equals = function (ellipse, toCompare)\r\n{\r\n return (\r\n ellipse.x === toCompare.x &&\r\n ellipse.y === toCompare.y &&\r\n ellipse.width === toCompare.width &&\r\n ellipse.height === toCompare.height\r\n );\r\n};\r\n\r\nmodule.exports = Equals;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvRXF1YWxzLmpzPzAwZWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVyxvQkFBb0I7QUFDL0I7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvRXF1YWxzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ29tcGFyZXMgdGhlIGB4YCwgYHlgLCBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzIG9mIHRoZSB0d28gZ2l2ZW4gRWxsaXBzZXMuXHJcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZXkgYWxsIG1hdGNoLCBvdGhlcndpc2UgcmV0dXJucyBgZmFsc2VgLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uRWxsaXBzZS5FcXVhbHNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uRWxsaXBzZX0gZWxsaXBzZSAtIFRoZSBmaXJzdCBFbGxpcHNlIHRvIGNvbXBhcmUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uRWxsaXBzZX0gdG9Db21wYXJlIC0gVGhlIHNlY29uZCBFbGxpcHNlIHRvIGNvbXBhcmUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdHdvIEVsbGlwc2UgZXF1YWwgZWFjaCBvdGhlciwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAqL1xyXG52YXIgRXF1YWxzID0gZnVuY3Rpb24gKGVsbGlwc2UsIHRvQ29tcGFyZSlcclxue1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICBlbGxpcHNlLnggPT09IHRvQ29tcGFyZS54ICYmXHJcbiAgICAgICAgZWxsaXBzZS55ID09PSB0b0NvbXBhcmUueSAmJlxyXG4gICAgICAgIGVsbGlwc2Uud2lkdGggPT09IHRvQ29tcGFyZS53aWR0aCAmJlxyXG4gICAgICAgIGVsbGlwc2UuaGVpZ2h0ID09PSB0b0NvbXBhcmUuaGVpZ2h0XHJcbiAgICApO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFcXVhbHM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/Equals.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/ellipse/GetBounds.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/geom/ellipse/GetBounds.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Rectangle = __webpack_require__(/*! ../rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\n\r\n/**\r\n * Returns the bounds of the Ellipse object.\r\n *\r\n * @function Phaser.Geom.Ellipse.GetBounds\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to get the bounds from.\r\n * @param {(Phaser.Geom.Rectangle|object)} [out] - A Rectangle, or rectangle-like object, to store the ellipse bounds in. If not given a new Rectangle will be created.\r\n *\r\n * @return {(Phaser.Geom.Rectangle|object)} The Rectangle object containing the Ellipse bounds.\r\n */\r\nvar GetBounds = function (ellipse, out)\r\n{\r\n if (out === undefined) { out = new Rectangle(); }\r\n\r\n out.x = ellipse.left;\r\n out.y = ellipse.top;\r\n out.width = ellipse.width;\r\n out.height = ellipse.height;\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetBounds;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvR2V0Qm91bmRzLmpzPzQ1YWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLHFGQUF3Qjs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxzQkFBc0I7QUFDbkM7QUFDQSxXQUFXLG9CQUFvQjtBQUMvQixXQUFXLCtCQUErQjtBQUMxQztBQUNBLFlBQVksK0JBQStCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qix1QkFBdUI7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvR2V0Qm91bmRzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi4vcmVjdGFuZ2xlL1JlY3RhbmdsZScpO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgRWxsaXBzZSBvYmplY3QuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5FbGxpcHNlLkdldEJvdW5kc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5FbGxpcHNlfSBlbGxpcHNlIC0gVGhlIEVsbGlwc2UgdG8gZ2V0IHRoZSBib3VuZHMgZnJvbS5cclxuICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUmVjdGFuZ2xlfG9iamVjdCl9IFtvdXRdIC0gQSBSZWN0YW5nbGUsIG9yIHJlY3RhbmdsZS1saWtlIG9iamVjdCwgdG8gc3RvcmUgdGhlIGVsbGlwc2UgYm91bmRzIGluLiBJZiBub3QgZ2l2ZW4gYSBuZXcgUmVjdGFuZ2xlIHdpbGwgYmUgY3JlYXRlZC5cclxuICpcclxuICogQHJldHVybiB7KFBoYXNlci5HZW9tLlJlY3RhbmdsZXxvYmplY3QpfSBUaGUgUmVjdGFuZ2xlIG9iamVjdCBjb250YWluaW5nIHRoZSBFbGxpcHNlIGJvdW5kcy5cclxuICovXHJcbnZhciBHZXRCb3VuZHMgPSBmdW5jdGlvbiAoZWxsaXBzZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFJlY3RhbmdsZSgpOyB9XHJcblxyXG4gICAgb3V0LnggPSBlbGxpcHNlLmxlZnQ7XHJcbiAgICBvdXQueSA9IGVsbGlwc2UudG9wO1xyXG4gICAgb3V0LndpZHRoID0gZWxsaXBzZS53aWR0aDtcclxuICAgIG91dC5oZWlnaHQgPSBlbGxpcHNlLmhlaWdodDtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRCb3VuZHM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/GetBounds.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/ellipse/GetPoint.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/geom/ellipse/GetPoint.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CircumferencePoint = __webpack_require__(/*! ./CircumferencePoint */ \"./node_modules/phaser/src/geom/ellipse/CircumferencePoint.js\");\r\nvar FromPercent = __webpack_require__(/*! ../../math/FromPercent */ \"./node_modules/phaser/src/math/FromPercent.js\");\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Returns a Point object containing the coordinates of a point on the circumference of the Ellipse\r\n * based on the given angle normalized to the range 0 to 1. I.e. a value of 0.5 will give the point\r\n * at 180 degrees around the circle.\r\n *\r\n * @function Phaser.Geom.Ellipse.GetPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to get the circumference point on.\r\n * @param {number} position - A value between 0 and 1, where 0 equals 0 degrees, 0.5 equals 180 degrees and 1 equals 360 around the ellipse.\r\n * @param {(Phaser.Geom.Point|object)} [out] - An object to store the return values in. If not given a Point object will be created.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} A Point, or point-like object, containing the coordinates of the point around the ellipse.\r\n */\r\nvar GetPoint = function (ellipse, position, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n var angle = FromPercent(position, 0, MATH_CONST.PI2);\r\n\r\n return CircumferencePoint(ellipse, angle, out);\r\n};\r\n\r\nmodule.exports = GetPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvR2V0UG9pbnQuanM/YmFjNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEseUJBQXlCLG1CQUFPLENBQUMsMEZBQXNCO0FBQ3ZELGtCQUFrQixtQkFBTyxDQUFDLDZFQUF3QjtBQUNsRCxpQkFBaUIsbUJBQU8sQ0FBQyxpRUFBa0I7QUFDM0MsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsMkJBQTJCO0FBQ3RDO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLG1CQUFtQjs7QUFFL0M7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vZWxsaXBzZS9HZXRQb2ludC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENpcmN1bWZlcmVuY2VQb2ludCA9IHJlcXVpcmUoJy4vQ2lyY3VtZmVyZW5jZVBvaW50Jyk7XHJcbnZhciBGcm9tUGVyY2VudCA9IHJlcXVpcmUoJy4uLy4uL21hdGgvRnJvbVBlcmNlbnQnKTtcclxudmFyIE1BVEhfQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9tYXRoL2NvbnN0Jyk7XHJcbnZhciBQb2ludCA9IHJlcXVpcmUoJy4uL3BvaW50L1BvaW50Jyk7XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIFBvaW50IG9iamVjdCBjb250YWluaW5nIHRoZSBjb29yZGluYXRlcyBvZiBhIHBvaW50IG9uIHRoZSBjaXJjdW1mZXJlbmNlIG9mIHRoZSBFbGxpcHNlXHJcbiAqIGJhc2VkIG9uIHRoZSBnaXZlbiBhbmdsZSBub3JtYWxpemVkIHRvIHRoZSByYW5nZSAwIHRvIDEuIEkuZS4gYSB2YWx1ZSBvZiAwLjUgd2lsbCBnaXZlIHRoZSBwb2ludFxyXG4gKiBhdCAxODAgZGVncmVlcyBhcm91bmQgdGhlIGNpcmNsZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkVsbGlwc2UuR2V0UG9pbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5FbGxpcHNlfSBlbGxpcHNlIC0gVGhlIEVsbGlwc2UgdG8gZ2V0IHRoZSBjaXJjdW1mZXJlbmNlIHBvaW50IG9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zaXRpb24gLSBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMSwgd2hlcmUgMCBlcXVhbHMgMCBkZWdyZWVzLCAwLjUgZXF1YWxzIDE4MCBkZWdyZWVzIGFuZCAxIGVxdWFscyAzNjAgYXJvdW5kIHRoZSBlbGxpcHNlLlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBbb3V0XSAtIEFuIG9iamVjdCB0byBzdG9yZSB0aGUgcmV0dXJuIHZhbHVlcyBpbi4gSWYgbm90IGdpdmVuIGEgUG9pbnQgb2JqZWN0IHdpbGwgYmUgY3JlYXRlZC5cclxuICpcclxuICogQHJldHVybiB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IEEgUG9pbnQsIG9yIHBvaW50LWxpa2Ugb2JqZWN0LCBjb250YWluaW5nIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnQgYXJvdW5kIHRoZSBlbGxpcHNlLlxyXG4gKi9cclxudmFyIEdldFBvaW50ID0gZnVuY3Rpb24gKGVsbGlwc2UsIHBvc2l0aW9uLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgUG9pbnQoKTsgfVxyXG5cclxuICAgIHZhciBhbmdsZSA9IEZyb21QZXJjZW50KHBvc2l0aW9uLCAwLCBNQVRIX0NPTlNULlBJMik7XHJcblxyXG4gICAgcmV0dXJuIENpcmN1bWZlcmVuY2VQb2ludChlbGxpcHNlLCBhbmdsZSwgb3V0KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0UG9pbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/GetPoint.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/ellipse/GetPoints.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/geom/ellipse/GetPoints.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Circumference = __webpack_require__(/*! ./Circumference */ \"./node_modules/phaser/src/geom/ellipse/Circumference.js\");\r\nvar CircumferencePoint = __webpack_require__(/*! ./CircumferencePoint */ \"./node_modules/phaser/src/geom/ellipse/CircumferencePoint.js\");\r\nvar FromPercent = __webpack_require__(/*! ../../math/FromPercent */ \"./node_modules/phaser/src/math/FromPercent.js\");\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\n\r\n/**\r\n * Returns an array of Point objects containing the coordinates of the points around the circumference of the Ellipse,\r\n * based on the given quantity or stepRate values.\r\n *\r\n * @function Phaser.Geom.Ellipse.GetPoints\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point[]} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to get the points from.\r\n * @param {integer} quantity - The amount of points to return. If a falsey value the quantity will be derived from the `stepRate` instead.\r\n * @param {number} [stepRate] - Sets the quantity by getting the circumference of the ellipse and dividing it by the stepRate.\r\n * @param {(array|Phaser.Geom.Point[])} [out] - An array to insert the points in to. If not provided a new array will be created.\r\n *\r\n * @return {(array|Phaser.Geom.Point[])} An array of Point objects pertaining to the points around the circumference of the ellipse.\r\n */\r\nvar GetPoints = function (ellipse, quantity, stepRate, out)\r\n{\r\n if (out === undefined) { out = []; }\r\n\r\n // If quantity is a falsey value (false, null, 0, undefined, etc) then we calculate it based on the stepRate instead.\r\n if (!quantity)\r\n {\r\n quantity = Circumference(ellipse) / stepRate;\r\n }\r\n\r\n for (var i = 0; i < quantity; i++)\r\n {\r\n var angle = FromPercent(i / quantity, 0, MATH_CONST.PI2);\r\n\r\n out.push(CircumferencePoint(ellipse, angle));\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetPoints;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvR2V0UG9pbnRzLmpzPzJhYmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLGdGQUFpQjtBQUM3Qyx5QkFBeUIsbUJBQU8sQ0FBQywwRkFBc0I7QUFDdkQsa0JBQWtCLG1CQUFPLENBQUMsNkVBQXdCO0FBQ2xELGlCQUFpQixtQkFBTyxDQUFDLGlFQUFrQjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLG9CQUFvQjtBQUNqQztBQUNBLFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEIsV0FBVyw0QkFBNEI7QUFDdkM7QUFDQSxZQUFZLDRCQUE0QjtBQUN4QztBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsVUFBVTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsY0FBYztBQUNqQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vZWxsaXBzZS9HZXRQb2ludHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDaXJjdW1mZXJlbmNlID0gcmVxdWlyZSgnLi9DaXJjdW1mZXJlbmNlJyk7XHJcbnZhciBDaXJjdW1mZXJlbmNlUG9pbnQgPSByZXF1aXJlKCcuL0NpcmN1bWZlcmVuY2VQb2ludCcpO1xyXG52YXIgRnJvbVBlcmNlbnQgPSByZXF1aXJlKCcuLi8uLi9tYXRoL0Zyb21QZXJjZW50Jyk7XHJcbnZhciBNQVRIX0NPTlNUID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9jb25zdCcpO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgUG9pbnQgb2JqZWN0cyBjb250YWluaW5nIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnRzIGFyb3VuZCB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgRWxsaXBzZSxcclxuICogYmFzZWQgb24gdGhlIGdpdmVuIHF1YW50aXR5IG9yIHN0ZXBSYXRlIHZhbHVlcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkVsbGlwc2UuR2V0UG9pbnRzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnRbXX0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5FbGxpcHNlfSBlbGxpcHNlIC0gVGhlIEVsbGlwc2UgdG8gZ2V0IHRoZSBwb2ludHMgZnJvbS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBxdWFudGl0eSAtIFRoZSBhbW91bnQgb2YgcG9pbnRzIHRvIHJldHVybi4gSWYgYSBmYWxzZXkgdmFsdWUgdGhlIHF1YW50aXR5IHdpbGwgYmUgZGVyaXZlZCBmcm9tIHRoZSBgc3RlcFJhdGVgIGluc3RlYWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFJhdGVdIC0gU2V0cyB0aGUgcXVhbnRpdHkgYnkgZ2V0dGluZyB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgZWxsaXBzZSBhbmQgZGl2aWRpbmcgaXQgYnkgdGhlIHN0ZXBSYXRlLlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2VvbS5Qb2ludFtdKX0gW291dF0gLSBBbiBhcnJheSB0byBpbnNlcnQgdGhlIHBvaW50cyBpbiB0by4gSWYgbm90IHByb3ZpZGVkIGEgbmV3IGFycmF5IHdpbGwgYmUgY3JlYXRlZC5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fFBoYXNlci5HZW9tLlBvaW50W10pfSBBbiBhcnJheSBvZiBQb2ludCBvYmplY3RzIHBlcnRhaW5pbmcgdG8gdGhlIHBvaW50cyBhcm91bmQgdGhlIGNpcmN1bWZlcmVuY2Ugb2YgdGhlIGVsbGlwc2UuXHJcbiAqL1xyXG52YXIgR2V0UG9pbnRzID0gZnVuY3Rpb24gKGVsbGlwc2UsIHF1YW50aXR5LCBzdGVwUmF0ZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gW107IH1cclxuXHJcbiAgICAvLyAgSWYgcXVhbnRpdHkgaXMgYSBmYWxzZXkgdmFsdWUgKGZhbHNlLCBudWxsLCAwLCB1bmRlZmluZWQsIGV0YykgdGhlbiB3ZSBjYWxjdWxhdGUgaXQgYmFzZWQgb24gdGhlIHN0ZXBSYXRlIGluc3RlYWQuXHJcbiAgICBpZiAoIXF1YW50aXR5KVxyXG4gICAge1xyXG4gICAgICAgIHF1YW50aXR5ID0gQ2lyY3VtZmVyZW5jZShlbGxpcHNlKSAvIHN0ZXBSYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVhbnRpdHk7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgYW5nbGUgPSBGcm9tUGVyY2VudChpIC8gcXVhbnRpdHksIDAsIE1BVEhfQ09OU1QuUEkyKTtcclxuXHJcbiAgICAgICAgb3V0LnB1c2goQ2lyY3VtZmVyZW5jZVBvaW50KGVsbGlwc2UsIGFuZ2xlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0UG9pbnRzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/GetPoints.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/ellipse/Offset.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/geom/ellipse/Offset.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Offsets the Ellipse by the values given.\r\n *\r\n * @function Phaser.Geom.Ellipse.Offset\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Ellipse} O - [ellipse,$return]\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to be offset (translated.)\r\n * @param {number} x - The amount to horizontally offset the Ellipse by.\r\n * @param {number} y - The amount to vertically offset the Ellipse by.\r\n *\r\n * @return {Phaser.Geom.Ellipse} The Ellipse that was offset.\r\n */\r\nvar Offset = function (ellipse, x, y)\r\n{\r\n ellipse.x += x;\r\n ellipse.y += y;\r\n\r\n return ellipse;\r\n};\r\n\r\nmodule.exports = Offset;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvT2Zmc2V0LmpzP2Q3Y2EiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsb0JBQW9CO0FBQ2pDO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksb0JBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vZWxsaXBzZS9PZmZzZXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBPZmZzZXRzIHRoZSBFbGxpcHNlIGJ5IHRoZSB2YWx1ZXMgZ2l2ZW4uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5FbGxpcHNlLk9mZnNldFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLkVsbGlwc2V9IE8gLSBbZWxsaXBzZSwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkVsbGlwc2V9IGVsbGlwc2UgLSBUaGUgRWxsaXBzZSB0byBiZSBvZmZzZXQgKHRyYW5zbGF0ZWQuKVxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBhbW91bnQgdG8gaG9yaXpvbnRhbGx5IG9mZnNldCB0aGUgRWxsaXBzZSBieS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgYW1vdW50IHRvIHZlcnRpY2FsbHkgb2Zmc2V0IHRoZSBFbGxpcHNlIGJ5LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5FbGxpcHNlfSBUaGUgRWxsaXBzZSB0aGF0IHdhcyBvZmZzZXQuXHJcbiAqL1xyXG52YXIgT2Zmc2V0ID0gZnVuY3Rpb24gKGVsbGlwc2UsIHgsIHkpXHJcbntcclxuICAgIGVsbGlwc2UueCArPSB4O1xyXG4gICAgZWxsaXBzZS55ICs9IHk7XHJcblxyXG4gICAgcmV0dXJuIGVsbGlwc2U7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE9mZnNldDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/Offset.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/ellipse/OffsetPoint.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/geom/ellipse/OffsetPoint.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Offsets the Ellipse by the values given in the `x` and `y` properties of the Point object.\r\n *\r\n * @function Phaser.Geom.Ellipse.OffsetPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Ellipse} O - [ellipse,$return]\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to be offset (translated.)\r\n * @param {(Phaser.Geom.Point|object)} point - The Point object containing the values to offset the Ellipse by.\r\n *\r\n * @return {Phaser.Geom.Ellipse} The Ellipse that was offset.\r\n */\r\nvar OffsetPoint = function (ellipse, point)\r\n{\r\n ellipse.x += point.x;\r\n ellipse.y += point.y;\r\n\r\n return ellipse;\r\n};\r\n\r\nmodule.exports = OffsetPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvT2Zmc2V0UG9pbnQuanM/NzE2YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxvQkFBb0I7QUFDakM7QUFDQSxXQUFXLG9CQUFvQjtBQUMvQixXQUFXLDJCQUEyQjtBQUN0QztBQUNBLFlBQVksb0JBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vZWxsaXBzZS9PZmZzZXRQb2ludC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIE9mZnNldHMgdGhlIEVsbGlwc2UgYnkgdGhlIHZhbHVlcyBnaXZlbiBpbiB0aGUgYHhgIGFuZCBgeWAgcHJvcGVydGllcyBvZiB0aGUgUG9pbnQgb2JqZWN0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uRWxsaXBzZS5PZmZzZXRQb2ludFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLkVsbGlwc2V9IE8gLSBbZWxsaXBzZSwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkVsbGlwc2V9IGVsbGlwc2UgLSBUaGUgRWxsaXBzZSB0byBiZSBvZmZzZXQgKHRyYW5zbGF0ZWQuKVxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBwb2ludCAtIFRoZSBQb2ludCBvYmplY3QgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIG9mZnNldCB0aGUgRWxsaXBzZSBieS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uRWxsaXBzZX0gVGhlIEVsbGlwc2UgdGhhdCB3YXMgb2Zmc2V0LlxyXG4gKi9cclxudmFyIE9mZnNldFBvaW50ID0gZnVuY3Rpb24gKGVsbGlwc2UsIHBvaW50KVxyXG57XHJcbiAgICBlbGxpcHNlLnggKz0gcG9pbnQueDtcclxuICAgIGVsbGlwc2UueSArPSBwb2ludC55O1xyXG5cclxuICAgIHJldHVybiBlbGxpcHNlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBPZmZzZXRQb2ludDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/OffsetPoint.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/ellipse/Random.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/geom/ellipse/Random.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Returns a uniformly distributed random point from anywhere within the given Ellipse.\r\n *\r\n * @function Phaser.Geom.Ellipse.Random\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Ellipse} ellipse - The Ellipse to get a random point from.\r\n * @param {(Phaser.Geom.Point|object)} [out] - A Point or point-like object to set the random `x` and `y` values in.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} A Point object with the random values set in the `x` and `y` properties.\r\n */\r\nvar Random = function (ellipse, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n var p = Math.random() * Math.PI * 2;\r\n var s = Math.sqrt(Math.random());\r\n\r\n out.x = ellipse.x + ((s * Math.cos(p)) * ellipse.width / 2);\r\n out.y = ellipse.y + ((s * Math.sin(p)) * ellipse.height / 2);\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = Random;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvUmFuZG9tLmpzPzBjMmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRUFBZ0I7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVywyQkFBMkI7QUFDdEM7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsbUJBQW1COztBQUUvQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vZWxsaXBzZS9SYW5kb20uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQb2ludCA9IHJlcXVpcmUoJy4uL3BvaW50L1BvaW50Jyk7XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIHVuaWZvcm1seSBkaXN0cmlidXRlZCByYW5kb20gcG9pbnQgZnJvbSBhbnl3aGVyZSB3aXRoaW4gdGhlIGdpdmVuIEVsbGlwc2UuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5FbGxpcHNlLlJhbmRvbVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkVsbGlwc2V9IGVsbGlwc2UgLSBUaGUgRWxsaXBzZSB0byBnZXQgYSByYW5kb20gcG9pbnQgZnJvbS5cclxuICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gW291dF0gLSBBIFBvaW50IG9yIHBvaW50LWxpa2Ugb2JqZWN0IHRvIHNldCB0aGUgcmFuZG9tIGB4YCBhbmQgYHlgIHZhbHVlcyBpbi5cclxuICpcclxuICogQHJldHVybiB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IEEgUG9pbnQgb2JqZWN0IHdpdGggdGhlIHJhbmRvbSB2YWx1ZXMgc2V0IGluIHRoZSBgeGAgYW5kIGB5YCBwcm9wZXJ0aWVzLlxyXG4gKi9cclxudmFyIFJhbmRvbSA9IGZ1bmN0aW9uIChlbGxpcHNlLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgUG9pbnQoKTsgfVxyXG5cclxuICAgIHZhciBwID0gTWF0aC5yYW5kb20oKSAqIE1hdGguUEkgKiAyO1xyXG4gICAgdmFyIHMgPSBNYXRoLnNxcnQoTWF0aC5yYW5kb20oKSk7XHJcblxyXG4gICAgb3V0LnggPSBlbGxpcHNlLnggKyAoKHMgKiBNYXRoLmNvcyhwKSkgKiBlbGxpcHNlLndpZHRoIC8gMik7XHJcbiAgICBvdXQueSA9IGVsbGlwc2UueSArICgocyAqIE1hdGguc2luKHApKSAqIGVsbGlwc2UuaGVpZ2h0IC8gMik7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmFuZG9tO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/Random.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/ellipse/index.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/geom/ellipse/index.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Ellipse = __webpack_require__(/*! ./Ellipse */ \"./node_modules/phaser/src/geom/ellipse/Ellipse.js\");\r\n\r\nEllipse.Area = __webpack_require__(/*! ./Area */ \"./node_modules/phaser/src/geom/ellipse/Area.js\");\r\nEllipse.Circumference = __webpack_require__(/*! ./Circumference */ \"./node_modules/phaser/src/geom/ellipse/Circumference.js\");\r\nEllipse.CircumferencePoint = __webpack_require__(/*! ./CircumferencePoint */ \"./node_modules/phaser/src/geom/ellipse/CircumferencePoint.js\");\r\nEllipse.Clone = __webpack_require__(/*! ./Clone */ \"./node_modules/phaser/src/geom/ellipse/Clone.js\");\r\nEllipse.Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/ellipse/Contains.js\");\r\nEllipse.ContainsPoint = __webpack_require__(/*! ./ContainsPoint */ \"./node_modules/phaser/src/geom/ellipse/ContainsPoint.js\");\r\nEllipse.ContainsRect = __webpack_require__(/*! ./ContainsRect */ \"./node_modules/phaser/src/geom/ellipse/ContainsRect.js\");\r\nEllipse.CopyFrom = __webpack_require__(/*! ./CopyFrom */ \"./node_modules/phaser/src/geom/ellipse/CopyFrom.js\");\r\nEllipse.Equals = __webpack_require__(/*! ./Equals */ \"./node_modules/phaser/src/geom/ellipse/Equals.js\");\r\nEllipse.GetBounds = __webpack_require__(/*! ./GetBounds */ \"./node_modules/phaser/src/geom/ellipse/GetBounds.js\");\r\nEllipse.GetPoint = __webpack_require__(/*! ./GetPoint */ \"./node_modules/phaser/src/geom/ellipse/GetPoint.js\");\r\nEllipse.GetPoints = __webpack_require__(/*! ./GetPoints */ \"./node_modules/phaser/src/geom/ellipse/GetPoints.js\");\r\nEllipse.Offset = __webpack_require__(/*! ./Offset */ \"./node_modules/phaser/src/geom/ellipse/Offset.js\");\r\nEllipse.OffsetPoint = __webpack_require__(/*! ./OffsetPoint */ \"./node_modules/phaser/src/geom/ellipse/OffsetPoint.js\");\r\nEllipse.Random = __webpack_require__(/*! ./Random */ \"./node_modules/phaser/src/geom/ellipse/Random.js\");\r\n\r\nmodule.exports = Ellipse;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2VsbGlwc2UvaW5kZXguanM/NDMzNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLG9FQUFXOztBQUVqQyxlQUFlLG1CQUFPLENBQUMsOERBQVE7QUFDL0Isd0JBQXdCLG1CQUFPLENBQUMsZ0ZBQWlCO0FBQ2pELDZCQUE2QixtQkFBTyxDQUFDLDBGQUFzQjtBQUMzRCxnQkFBZ0IsbUJBQU8sQ0FBQyxnRUFBUztBQUNqQyxtQkFBbUIsbUJBQU8sQ0FBQyxzRUFBWTtBQUN2Qyx3QkFBd0IsbUJBQU8sQ0FBQyxnRkFBaUI7QUFDakQsdUJBQXVCLG1CQUFPLENBQUMsOEVBQWdCO0FBQy9DLG1CQUFtQixtQkFBTyxDQUFDLHNFQUFZO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLGtFQUFVO0FBQ25DLG9CQUFvQixtQkFBTyxDQUFDLHdFQUFhO0FBQ3pDLG1CQUFtQixtQkFBTyxDQUFDLHNFQUFZO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLHdFQUFhO0FBQ3pDLGlCQUFpQixtQkFBTyxDQUFDLGtFQUFVO0FBQ25DLHNCQUFzQixtQkFBTyxDQUFDLDRFQUFlO0FBQzdDLGlCQUFpQixtQkFBTyxDQUFDLGtFQUFVOztBQUVuQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vZWxsaXBzZS9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEVsbGlwc2UgPSByZXF1aXJlKCcuL0VsbGlwc2UnKTtcclxuXHJcbkVsbGlwc2UuQXJlYSA9IHJlcXVpcmUoJy4vQXJlYScpO1xyXG5FbGxpcHNlLkNpcmN1bWZlcmVuY2UgPSByZXF1aXJlKCcuL0NpcmN1bWZlcmVuY2UnKTtcclxuRWxsaXBzZS5DaXJjdW1mZXJlbmNlUG9pbnQgPSByZXF1aXJlKCcuL0NpcmN1bWZlcmVuY2VQb2ludCcpO1xyXG5FbGxpcHNlLkNsb25lID0gcmVxdWlyZSgnLi9DbG9uZScpO1xyXG5FbGxpcHNlLkNvbnRhaW5zID0gcmVxdWlyZSgnLi9Db250YWlucycpO1xyXG5FbGxpcHNlLkNvbnRhaW5zUG9pbnQgPSByZXF1aXJlKCcuL0NvbnRhaW5zUG9pbnQnKTtcclxuRWxsaXBzZS5Db250YWluc1JlY3QgPSByZXF1aXJlKCcuL0NvbnRhaW5zUmVjdCcpO1xyXG5FbGxpcHNlLkNvcHlGcm9tID0gcmVxdWlyZSgnLi9Db3B5RnJvbScpO1xyXG5FbGxpcHNlLkVxdWFscyA9IHJlcXVpcmUoJy4vRXF1YWxzJyk7XHJcbkVsbGlwc2UuR2V0Qm91bmRzID0gcmVxdWlyZSgnLi9HZXRCb3VuZHMnKTtcclxuRWxsaXBzZS5HZXRQb2ludCA9IHJlcXVpcmUoJy4vR2V0UG9pbnQnKTtcclxuRWxsaXBzZS5HZXRQb2ludHMgPSByZXF1aXJlKCcuL0dldFBvaW50cycpO1xyXG5FbGxpcHNlLk9mZnNldCA9IHJlcXVpcmUoJy4vT2Zmc2V0Jyk7XHJcbkVsbGlwc2UuT2Zmc2V0UG9pbnQgPSByZXF1aXJlKCcuL09mZnNldFBvaW50Jyk7XHJcbkVsbGlwc2UuUmFuZG9tID0gcmVxdWlyZSgnLi9SYW5kb20nKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRWxsaXBzZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/ellipse/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/index.js":
/*!***********************************************!*\
!*** ./node_modules/phaser/src/geom/index.js ***!
\***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/geom/const.js\");\r\nvar Extend = __webpack_require__(/*! ../utils/object/Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\");\r\n\r\n/**\r\n * @namespace Phaser.Geom\r\n */\r\n\r\nvar Geom = {\r\n \r\n Circle: __webpack_require__(/*! ./circle */ \"./node_modules/phaser/src/geom/circle/index.js\"),\r\n Ellipse: __webpack_require__(/*! ./ellipse */ \"./node_modules/phaser/src/geom/ellipse/index.js\"),\r\n Intersects: __webpack_require__(/*! ./intersects */ \"./node_modules/phaser/src/geom/intersects/index.js\"),\r\n Line: __webpack_require__(/*! ./line */ \"./node_modules/phaser/src/geom/line/index.js\"),\r\n Point: __webpack_require__(/*! ./point */ \"./node_modules/phaser/src/geom/point/index.js\"),\r\n Polygon: __webpack_require__(/*! ./polygon */ \"./node_modules/phaser/src/geom/polygon/index.js\"),\r\n Rectangle: __webpack_require__(/*! ./rectangle */ \"./node_modules/phaser/src/geom/rectangle/index.js\"),\r\n Triangle: __webpack_require__(/*! ./triangle */ \"./node_modules/phaser/src/geom/triangle/index.js\")\r\n\r\n};\r\n\r\n// Merge in the consts\r\nGeom = Extend(false, Geom, CONST);\r\n\r\nmodule.exports = Geom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2luZGV4LmpzPzFkMWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyx3REFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsZ0ZBQXdCOztBQUU3QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGdFQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxrRUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyx3RUFBYztBQUN0QyxVQUFVLG1CQUFPLENBQUMsNERBQVE7QUFDMUIsV0FBVyxtQkFBTyxDQUFDLDhEQUFTO0FBQzVCLGFBQWEsbUJBQU8sQ0FBQyxrRUFBVztBQUNoQyxlQUFlLG1CQUFPLENBQUMsc0VBQWE7QUFDcEMsY0FBYyxtQkFBTyxDQUFDLG9FQUFZOztBQUVsQzs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi9jb25zdCcpO1xyXG52YXIgRXh0ZW5kID0gcmVxdWlyZSgnLi4vdXRpbHMvb2JqZWN0L0V4dGVuZCcpO1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkdlb21cclxuICovXHJcblxyXG52YXIgR2VvbSA9IHtcclxuICAgIFxyXG4gICAgQ2lyY2xlOiByZXF1aXJlKCcuL2NpcmNsZScpLFxyXG4gICAgRWxsaXBzZTogcmVxdWlyZSgnLi9lbGxpcHNlJyksXHJcbiAgICBJbnRlcnNlY3RzOiByZXF1aXJlKCcuL2ludGVyc2VjdHMnKSxcclxuICAgIExpbmU6IHJlcXVpcmUoJy4vbGluZScpLFxyXG4gICAgUG9pbnQ6IHJlcXVpcmUoJy4vcG9pbnQnKSxcclxuICAgIFBvbHlnb246IHJlcXVpcmUoJy4vcG9seWdvbicpLFxyXG4gICAgUmVjdGFuZ2xlOiByZXF1aXJlKCcuL3JlY3RhbmdsZScpLFxyXG4gICAgVHJpYW5nbGU6IHJlcXVpcmUoJy4vdHJpYW5nbGUnKVxyXG5cclxufTtcclxuXHJcbi8vICAgTWVyZ2UgaW4gdGhlIGNvbnN0c1xyXG5HZW9tID0gRXh0ZW5kKGZhbHNlLCBHZW9tLCBDT05TVCk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdlb207XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/intersects/CircleToCircle.js":
/*!*******************************************************************!*\
!*** ./node_modules/phaser/src/geom/intersects/CircleToCircle.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar DistanceBetween = __webpack_require__(/*! ../../math/distance/DistanceBetween */ \"./node_modules/phaser/src/math/distance/DistanceBetween.js\");\r\n\r\n/**\r\n * Checks if two Circles intersect.\r\n *\r\n * @function Phaser.Geom.Intersects.CircleToCircle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Circle} circleA - The first Circle to check for intersection.\r\n * @param {Phaser.Geom.Circle} circleB - The second Circle to check for intersection.\r\n *\r\n * @return {boolean} `true` if the two Circles intersect, otherwise `false`.\r\n */\r\nvar CircleToCircle = function (circleA, circleB)\r\n{\r\n return (DistanceBetween(circleA.x, circleA.y, circleB.x, circleB.y) <= (circleA.radius + circleB.radius));\r\n};\r\n\r\nmodule.exports = CircleToCircle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvQ2lyY2xlVG9DaXJjbGUuanM/MzVhNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsc0JBQXNCLG1CQUFPLENBQUMsdUdBQXFDOztBQUVuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1CQUFtQjtBQUM5QixXQUFXLG1CQUFtQjtBQUM5QjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9pbnRlcnNlY3RzL0NpcmNsZVRvQ2lyY2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgRGlzdGFuY2VCZXR3ZWVuID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9kaXN0YW5jZS9EaXN0YW5jZUJldHdlZW4nKTtcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgdHdvIENpcmNsZXMgaW50ZXJzZWN0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uSW50ZXJzZWN0cy5DaXJjbGVUb0NpcmNsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5DaXJjbGV9IGNpcmNsZUEgLSBUaGUgZmlyc3QgQ2lyY2xlIHRvIGNoZWNrIGZvciBpbnRlcnNlY3Rpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBjaXJjbGVCIC0gVGhlIHNlY29uZCBDaXJjbGUgdG8gY2hlY2sgZm9yIGludGVyc2VjdGlvbi5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB0d28gQ2lyY2xlcyBpbnRlcnNlY3QsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxudmFyIENpcmNsZVRvQ2lyY2xlID0gZnVuY3Rpb24gKGNpcmNsZUEsIGNpcmNsZUIpXHJcbntcclxuICAgIHJldHVybiAoRGlzdGFuY2VCZXR3ZWVuKGNpcmNsZUEueCwgY2lyY2xlQS55LCBjaXJjbGVCLngsIGNpcmNsZUIueSkgPD0gKGNpcmNsZUEucmFkaXVzICsgY2lyY2xlQi5yYWRpdXMpKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2lyY2xlVG9DaXJjbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/CircleToCircle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/intersects/CircleToRectangle.js":
/*!**********************************************************************!*\
!*** ./node_modules/phaser/src/geom/intersects/CircleToRectangle.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Checks for intersection between a circle and a rectangle.\r\n *\r\n * @function Phaser.Geom.Intersects.CircleToRectangle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The circle to be checked.\r\n * @param {Phaser.Geom.Rectangle} rect - The rectangle to be checked.\r\n *\r\n * @return {boolean} `true` if the two objects intersect, otherwise `false`.\r\n */\r\nvar CircleToRectangle = function (circle, rect)\r\n{\r\n var halfWidth = rect.width / 2;\r\n var halfHeight = rect.height / 2;\r\n\r\n var cx = Math.abs(circle.x - rect.x - halfWidth);\r\n var cy = Math.abs(circle.y - rect.y - halfHeight);\r\n var xDist = halfWidth + circle.radius;\r\n var yDist = halfHeight + circle.radius;\r\n\r\n if (cx > xDist || cy > yDist)\r\n {\r\n return false;\r\n }\r\n else if (cx <= halfWidth || cy <= halfHeight)\r\n {\r\n return true;\r\n }\r\n else\r\n {\r\n var xCornerDist = cx - halfWidth;\r\n var yCornerDist = cy - halfHeight;\r\n var xCornerDistSq = xCornerDist * xCornerDist;\r\n var yCornerDistSq = yCornerDist * yCornerDist;\r\n var maxCornerDistSq = circle.radius * circle.radius;\r\n\r\n return (xCornerDistSq + yCornerDistSq <= maxCornerDistSq);\r\n }\r\n};\r\n\r\nmodule.exports = CircleToRectangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvQ2lyY2xlVG9SZWN0YW5nbGUuanM/ZjVhOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxtQkFBbUI7QUFDOUIsV0FBVyxzQkFBc0I7QUFDakM7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9pbnRlcnNlY3RzL0NpcmNsZVRvUmVjdGFuZ2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2hlY2tzIGZvciBpbnRlcnNlY3Rpb24gYmV0d2VlbiBhIGNpcmNsZSBhbmQgYSByZWN0YW5nbGUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5JbnRlcnNlY3RzLkNpcmNsZVRvUmVjdGFuZ2xlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkNpcmNsZX0gY2lyY2xlIC0gVGhlIGNpcmNsZSB0byBiZSBjaGVja2VkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdCAtIFRoZSByZWN0YW5nbGUgdG8gYmUgY2hlY2tlZC5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB0d28gb2JqZWN0cyBpbnRlcnNlY3QsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxudmFyIENpcmNsZVRvUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGNpcmNsZSwgcmVjdClcclxue1xyXG4gICAgdmFyIGhhbGZXaWR0aCA9IHJlY3Qud2lkdGggLyAyO1xyXG4gICAgdmFyIGhhbGZIZWlnaHQgPSByZWN0LmhlaWdodCAvIDI7XHJcblxyXG4gICAgdmFyIGN4ID0gTWF0aC5hYnMoY2lyY2xlLnggLSByZWN0LnggLSBoYWxmV2lkdGgpO1xyXG4gICAgdmFyIGN5ID0gTWF0aC5hYnMoY2lyY2xlLnkgLSByZWN0LnkgLSBoYWxmSGVpZ2h0KTtcclxuICAgIHZhciB4RGlzdCA9IGhhbGZXaWR0aCArIGNpcmNsZS5yYWRpdXM7XHJcbiAgICB2YXIgeURpc3QgPSBoYWxmSGVpZ2h0ICsgY2lyY2xlLnJhZGl1cztcclxuXHJcbiAgICBpZiAoY3ggPiB4RGlzdCB8fCBjeSA+IHlEaXN0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGN4IDw9IGhhbGZXaWR0aCB8fCBjeSA8PSBoYWxmSGVpZ2h0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHZhciB4Q29ybmVyRGlzdCA9IGN4IC0gaGFsZldpZHRoO1xyXG4gICAgICAgIHZhciB5Q29ybmVyRGlzdCA9IGN5IC0gaGFsZkhlaWdodDtcclxuICAgICAgICB2YXIgeENvcm5lckRpc3RTcSA9IHhDb3JuZXJEaXN0ICogeENvcm5lckRpc3Q7XHJcbiAgICAgICAgdmFyIHlDb3JuZXJEaXN0U3EgPSB5Q29ybmVyRGlzdCAqIHlDb3JuZXJEaXN0O1xyXG4gICAgICAgIHZhciBtYXhDb3JuZXJEaXN0U3EgPSBjaXJjbGUucmFkaXVzICogY2lyY2xlLnJhZGl1cztcclxuXHJcbiAgICAgICAgcmV0dXJuICh4Q29ybmVyRGlzdFNxICsgeUNvcm5lckRpc3RTcSA8PSBtYXhDb3JuZXJEaXN0U3EpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDaXJjbGVUb1JlY3RhbmdsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/CircleToRectangle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/intersects/GetCircleToCircle.js":
/*!**********************************************************************!*\
!*** ./node_modules/phaser/src/geom/intersects/GetCircleToCircle.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Florian Vazelle\r\n * @author Geoffrey Glaive\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\nvar CircleToCircle = __webpack_require__(/*! ./CircleToCircle */ \"./node_modules/phaser/src/geom/intersects/CircleToCircle.js\");\r\n\r\n/**\r\n * Checks if two Circles intersect and returns the intersection points as a Point object array.\r\n *\r\n * @function Phaser.Geom.Intersects.GetCircleToCircle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Circle} circleA - The first Circle to check for intersection.\r\n * @param {Phaser.Geom.Circle} circleB - The second Circle to check for intersection.\r\n * @param {array} [out] - An optional array in which to store the points of intersection.\r\n *\r\n * @return {array} An array with the points of intersection if objects intersect, otherwise an empty array.\r\n */\r\nvar GetCircleToCircle = function (circleA, circleB, out)\r\n{\r\n if (out === undefined) { out = []; }\r\n\r\n if (CircleToCircle(circleA, circleB))\r\n {\r\n var x0 = circleA.x;\r\n var y0 = circleA.y;\r\n var r0 = circleA.radius;\r\n\r\n var x1 = circleB.x;\r\n var y1 = circleB.y;\r\n var r1 = circleB.radius;\r\n\r\n var coefficientA, coefficientB, coefficientC, lambda, x;\r\n\r\n if (y0 === y1)\r\n {\r\n x = ((r1 * r1) - (r0 * r0) - (x1 * x1) + (x0 * x0)) / (2 * (x0 - x1));\r\n\r\n coefficientA = 1;\r\n coefficientB = -2 * y1;\r\n coefficientC = (x1 * x1) + (x * x) - (2 * x1 * x) + (y1 * y1) - (r1 * r1);\r\n\r\n lambda = (coefficientB * coefficientB) - (4 * coefficientA * coefficientC);\r\n\r\n if (lambda === 0)\r\n {\r\n out.push(new Point(x, (-coefficientB / (2 * coefficientA))));\r\n }\r\n else if (lambda > 0)\r\n {\r\n out.push(new Point(x, (-coefficientB + Math.sqrt(lambda)) / (2 * coefficientA)));\r\n out.push(new Point(x, (-coefficientB - Math.sqrt(lambda)) / (2 * coefficientA)));\r\n }\r\n }\r\n else\r\n {\r\n var v1 = (x0 - x1) / (y0 - y1);\r\n var n = (r1 * r1 - r0 * r0 - x1 * x1 + x0 * x0 - y1 * y1 + y0 * y0) / (2 * (y0 - y1));\r\n\r\n coefficientA = (v1 * v1) + 1;\r\n coefficientB = (2 * y0 * v1) - (2 * n * v1) - (2 * x0);\r\n coefficientC = (x0 * x0) + (y0 * y0) + (n * n) - (r0 * r0) - (2 * y0 * n);\r\n\r\n lambda = (coefficientB * coefficientB) - (4 * coefficientA * coefficientC);\r\n\r\n if (lambda === 0)\r\n {\r\n x = (-coefficientB / (2 * coefficientA));\r\n out.push(new Point(x, (n - (x * v1))));\r\n }\r\n else if (lambda > 0)\r\n {\r\n x = (-coefficientB + Math.sqrt(lambda)) / (2 * coefficientA);\r\n out.push(new Point(x, (n - (x * v1))));\r\n x = (-coefficientB - Math.sqrt(lambda)) / (2 * coefficientA);\r\n out.push(new Point(x, (n - (x * v1))));\r\n }\r\n }\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetCircleToCircle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0Q2lyY2xlVG9DaXJjbGUuanM/N2VmOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMscUVBQWdCO0FBQ3BDLHFCQUFxQixtQkFBTyxDQUFDLHFGQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxtQkFBbUI7QUFDOUIsV0FBVyxtQkFBbUI7QUFDOUIsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vaW50ZXJzZWN0cy9HZXRDaXJjbGVUb0NpcmNsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIEZsb3JpYW4gVmF6ZWxsZVxyXG4gKiBAYXV0aG9yICAgICAgIEdlb2ZmcmV5IEdsYWl2ZVxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vcG9pbnQvUG9pbnQnKTtcclxudmFyIENpcmNsZVRvQ2lyY2xlID0gcmVxdWlyZSgnLi9DaXJjbGVUb0NpcmNsZScpO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBpZiB0d28gQ2lyY2xlcyBpbnRlcnNlY3QgYW5kIHJldHVybnMgdGhlIGludGVyc2VjdGlvbiBwb2ludHMgYXMgYSBQb2ludCBvYmplY3QgYXJyYXkuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5JbnRlcnNlY3RzLkdldENpcmNsZVRvQ2lyY2xlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkNpcmNsZX0gY2lyY2xlQSAtIFRoZSBmaXJzdCBDaXJjbGUgdG8gY2hlY2sgZm9yIGludGVyc2VjdGlvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5DaXJjbGV9IGNpcmNsZUIgLSBUaGUgc2Vjb25kIENpcmNsZSB0byBjaGVjayBmb3IgaW50ZXJzZWN0aW9uLlxyXG4gKiBAcGFyYW0ge2FycmF5fSBbb3V0XSAtIEFuIG9wdGlvbmFsIGFycmF5IGluIHdoaWNoIHRvIHN0b3JlIHRoZSBwb2ludHMgb2YgaW50ZXJzZWN0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHthcnJheX0gQW4gYXJyYXkgd2l0aCB0aGUgcG9pbnRzIG9mIGludGVyc2VjdGlvbiBpZiBvYmplY3RzIGludGVyc2VjdCwgb3RoZXJ3aXNlIGFuIGVtcHR5IGFycmF5LlxyXG4gKi9cclxudmFyIEdldENpcmNsZVRvQ2lyY2xlID0gZnVuY3Rpb24gKGNpcmNsZUEsIGNpcmNsZUIsIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IFtdOyB9XHJcblxyXG4gICAgaWYgKENpcmNsZVRvQ2lyY2xlKGNpcmNsZUEsIGNpcmNsZUIpKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB4MCA9IGNpcmNsZUEueDtcclxuICAgICAgICB2YXIgeTAgPSBjaXJjbGVBLnk7XHJcbiAgICAgICAgdmFyIHIwID0gY2lyY2xlQS5yYWRpdXM7XHJcblxyXG4gICAgICAgIHZhciB4MSA9IGNpcmNsZUIueDtcclxuICAgICAgICB2YXIgeTEgPSBjaXJjbGVCLnk7XHJcbiAgICAgICAgdmFyIHIxID0gY2lyY2xlQi5yYWRpdXM7XHJcblxyXG4gICAgICAgIHZhciBjb2VmZmljaWVudEEsIGNvZWZmaWNpZW50QiwgY29lZmZpY2llbnRDLCBsYW1iZGEsIHg7XHJcblxyXG4gICAgICAgIGlmICh5MCA9PT0geTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB4ID0gKChyMSAqIHIxKSAtIChyMCAqIHIwKSAtICh4MSAqIHgxKSArICh4MCAqIHgwKSkgLyAoMiAqICh4MCAtIHgxKSk7XHJcblxyXG4gICAgICAgICAgICBjb2VmZmljaWVudEEgPSAxO1xyXG4gICAgICAgICAgICBjb2VmZmljaWVudEIgPSAtMiAqIHkxO1xyXG4gICAgICAgICAgICBjb2VmZmljaWVudEMgPSAoeDEgKiB4MSkgKyAoeCAqIHgpIC0gKDIgKiB4MSAqIHgpICsgKHkxICogeTEpIC0gKHIxICogcjEpO1xyXG5cclxuICAgICAgICAgICAgbGFtYmRhID0gKGNvZWZmaWNpZW50QiAqIGNvZWZmaWNpZW50QikgLSAoNCAqIGNvZWZmaWNpZW50QSAqIGNvZWZmaWNpZW50Qyk7XHJcblxyXG4gICAgICAgICAgICBpZiAobGFtYmRhID09PSAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBvdXQucHVzaChuZXcgUG9pbnQoeCwgKC1jb2VmZmljaWVudEIgLyAoMiAqIGNvZWZmaWNpZW50QSkpKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobGFtYmRhID4gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3V0LnB1c2gobmV3IFBvaW50KHgsICgtY29lZmZpY2llbnRCICsgTWF0aC5zcXJ0KGxhbWJkYSkpIC8gKDIgKiBjb2VmZmljaWVudEEpKSk7XHJcbiAgICAgICAgICAgICAgICBvdXQucHVzaChuZXcgUG9pbnQoeCwgKC1jb2VmZmljaWVudEIgLSBNYXRoLnNxcnQobGFtYmRhKSkgLyAoMiAqIGNvZWZmaWNpZW50QSkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgdjEgPSAoeDAgLSB4MSkgLyAoeTAgLSB5MSk7XHJcbiAgICAgICAgICAgIHZhciBuID0gKHIxICogcjEgLSByMCAqIHIwIC0geDEgKiB4MSArIHgwICogeDAgLSB5MSAqIHkxICsgeTAgKiB5MCkgLyAoMiAqICh5MCAtIHkxKSk7XHJcblxyXG4gICAgICAgICAgICBjb2VmZmljaWVudEEgPSAodjEgKiB2MSkgKyAxO1xyXG4gICAgICAgICAgICBjb2VmZmljaWVudEIgPSAoMiAqIHkwICogdjEpIC0gKDIgKiBuICogdjEpIC0gKDIgKiB4MCk7XHJcbiAgICAgICAgICAgIGNvZWZmaWNpZW50QyA9ICh4MCAqIHgwKSArICh5MCAqIHkwKSArIChuICogbikgLSAocjAgKiByMCkgLSAoMiAqIHkwICogbik7XHJcblxyXG4gICAgICAgICAgICBsYW1iZGEgPSAoY29lZmZpY2llbnRCICogY29lZmZpY2llbnRCKSAtICg0ICogY29lZmZpY2llbnRBICogY29lZmZpY2llbnRDKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChsYW1iZGEgPT09IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHggPSAoLWNvZWZmaWNpZW50QiAvICgyICogY29lZmZpY2llbnRBKSk7XHJcbiAgICAgICAgICAgICAgICBvdXQucHVzaChuZXcgUG9pbnQoeCwgKG4gLSAoeCAqIHYxKSkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChsYW1iZGEgPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB4ID0gKC1jb2VmZmljaWVudEIgKyBNYXRoLnNxcnQobGFtYmRhKSkgLyAoMiAqIGNvZWZmaWNpZW50QSk7XHJcbiAgICAgICAgICAgICAgICBvdXQucHVzaChuZXcgUG9pbnQoeCwgKG4gLSAoeCAqIHYxKSkpKTtcclxuICAgICAgICAgICAgICAgIHggPSAoLWNvZWZmaWNpZW50QiAtIE1hdGguc3FydChsYW1iZGEpKSAvICgyICogY29lZmZpY2llbnRBKTtcclxuICAgICAgICAgICAgICAgIG91dC5wdXNoKG5ldyBQb2ludCh4LCAobiAtICh4ICogdjEpKSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldENpcmNsZVRvQ2lyY2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/GetCircleToCircle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/intersects/GetCircleToRectangle.js":
/*!*************************************************************************!*\
!*** ./node_modules/phaser/src/geom/intersects/GetCircleToRectangle.js ***!
\*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Florian Vazelle\r\n * @author Geoffrey Glaive\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetLineToCircle = __webpack_require__(/*! ./GetLineToCircle */ \"./node_modules/phaser/src/geom/intersects/GetLineToCircle.js\");\r\nvar CircleToRectangle = __webpack_require__(/*! ./CircleToRectangle */ \"./node_modules/phaser/src/geom/intersects/CircleToRectangle.js\");\r\n\r\n/**\r\n * Checks for intersection between a circle and a rectangle,\r\n * and returns the intersection points as a Point object array.\r\n *\r\n * @function Phaser.Geom.Intersects.GetCircleToRectangle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Circle} circle - The circle to be checked.\r\n * @param {Phaser.Geom.Rectangle} rect - The rectangle to be checked.\r\n * @param {array} [out] - An optional array in which to store the points of intersection.\r\n *\r\n * @return {array} An array with the points of intersection if objects intersect, otherwise an empty array.\r\n */\r\nvar GetCircleToRectangle = function (circle, rect, out)\r\n{\r\n if (out === undefined) { out = []; }\r\n\r\n if (CircleToRectangle(circle, rect))\r\n {\r\n var lineA = rect.getLineA();\r\n var lineB = rect.getLineB();\r\n var lineC = rect.getLineC();\r\n var lineD = rect.getLineD();\r\n\r\n GetLineToCircle(lineA, circle, out);\r\n GetLineToCircle(lineB, circle, out);\r\n GetLineToCircle(lineC, circle, out);\r\n GetLineToCircle(lineD, circle, out);\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetCircleToRectangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0Q2lyY2xlVG9SZWN0YW5nbGUuanM/YTlhYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxzQkFBc0IsbUJBQU8sQ0FBQyx1RkFBbUI7QUFDakQsd0JBQXdCLG1CQUFPLENBQUMsMkZBQXFCOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbUJBQW1CO0FBQzlCLFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcsTUFBTTtBQUNqQjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsVUFBVTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vaW50ZXJzZWN0cy9HZXRDaXJjbGVUb1JlY3RhbmdsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIEZsb3JpYW4gVmF6ZWxsZVxyXG4gKiBAYXV0aG9yICAgICAgIEdlb2ZmcmV5IEdsYWl2ZVxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldExpbmVUb0NpcmNsZSA9IHJlcXVpcmUoJy4vR2V0TGluZVRvQ2lyY2xlJyk7XHJcbnZhciBDaXJjbGVUb1JlY3RhbmdsZSA9IHJlcXVpcmUoJy4vQ2lyY2xlVG9SZWN0YW5nbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgZm9yIGludGVyc2VjdGlvbiBiZXR3ZWVuIGEgY2lyY2xlIGFuZCBhIHJlY3RhbmdsZSxcclxuICogYW5kIHJldHVybnMgdGhlIGludGVyc2VjdGlvbiBwb2ludHMgYXMgYSBQb2ludCBvYmplY3QgYXJyYXkuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5JbnRlcnNlY3RzLkdldENpcmNsZVRvUmVjdGFuZ2xlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkNpcmNsZX0gY2lyY2xlIC0gVGhlIGNpcmNsZSB0byBiZSBjaGVja2VkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdCAtIFRoZSByZWN0YW5nbGUgdG8gYmUgY2hlY2tlZC5cclxuICogQHBhcmFtIHthcnJheX0gW291dF0gLSBBbiBvcHRpb25hbCBhcnJheSBpbiB3aGljaCB0byBzdG9yZSB0aGUgcG9pbnRzIG9mIGludGVyc2VjdGlvbi5cclxuICpcclxuICogQHJldHVybiB7YXJyYXl9IEFuIGFycmF5IHdpdGggdGhlIHBvaW50cyBvZiBpbnRlcnNlY3Rpb24gaWYgb2JqZWN0cyBpbnRlcnNlY3QsIG90aGVyd2lzZSBhbiBlbXB0eSBhcnJheS5cclxuICovXHJcbnZhciBHZXRDaXJjbGVUb1JlY3RhbmdsZSA9IGZ1bmN0aW9uIChjaXJjbGUsIHJlY3QsIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IFtdOyB9XHJcblxyXG4gICAgaWYgKENpcmNsZVRvUmVjdGFuZ2xlKGNpcmNsZSwgcmVjdCkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGxpbmVBID0gcmVjdC5nZXRMaW5lQSgpO1xyXG4gICAgICAgIHZhciBsaW5lQiA9IHJlY3QuZ2V0TGluZUIoKTtcclxuICAgICAgICB2YXIgbGluZUMgPSByZWN0LmdldExpbmVDKCk7XHJcbiAgICAgICAgdmFyIGxpbmVEID0gcmVjdC5nZXRMaW5lRCgpO1xyXG5cclxuICAgICAgICBHZXRMaW5lVG9DaXJjbGUobGluZUEsIGNpcmNsZSwgb3V0KTtcclxuICAgICAgICBHZXRMaW5lVG9DaXJjbGUobGluZUIsIGNpcmNsZSwgb3V0KTtcclxuICAgICAgICBHZXRMaW5lVG9DaXJjbGUobGluZUMsIGNpcmNsZSwgb3V0KTtcclxuICAgICAgICBHZXRMaW5lVG9DaXJjbGUobGluZUQsIGNpcmNsZSwgb3V0KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRDaXJjbGVUb1JlY3RhbmdsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/GetCircleToRectangle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/intersects/GetLineToCircle.js":
/*!********************************************************************!*\
!*** ./node_modules/phaser/src/geom/intersects/GetLineToCircle.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Florian Vazelle\r\n * @author Geoffrey Glaive\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\nvar LineToCircle = __webpack_require__(/*! ./LineToCircle */ \"./node_modules/phaser/src/geom/intersects/LineToCircle.js\");\r\n\r\n/**\r\n * Checks for intersection between the line segment and circle,\r\n * and returns the intersection points as a Point object array.\r\n *\r\n * @function Phaser.Geom.Intersects.GetLineToCircle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line segment to check.\r\n * @param {Phaser.Geom.Circle} circle - The circle to check against the line.\r\n * @param {array} [out] - An optional array in which to store the points of intersection.\r\n *\r\n * @return {array} An array with the points of intersection if objects intersect, otherwise an empty array.\r\n */\r\nvar GetLineToCircle = function (line, circle, out)\r\n{\r\n if (out === undefined) { out = []; }\r\n\r\n if (LineToCircle(line, circle))\r\n {\r\n var lx1 = line.x1;\r\n var ly1 = line.y1;\r\n\r\n var lx2 = line.x2;\r\n var ly2 = line.y2;\r\n\r\n var cx = circle.x;\r\n var cy = circle.y;\r\n var cr = circle.radius;\r\n\r\n var lDirX = lx2 - lx1;\r\n var lDirY = ly2 - ly1;\r\n var oDirX = lx1 - cx;\r\n var oDirY = ly1 - cy;\r\n\r\n var coefficientA = lDirX * lDirX + lDirY * lDirY;\r\n var coefficientB = 2 * (lDirX * oDirX + lDirY * oDirY);\r\n var coefficientC = oDirX * oDirX + oDirY * oDirY - cr * cr;\r\n\r\n var lambda = (coefficientB * coefficientB) - (4 * coefficientA * coefficientC);\r\n\r\n var x, y;\r\n\r\n if (lambda === 0)\r\n {\r\n var root = -coefficientB / (2 * coefficientA);\r\n x = lx1 + root * lDirX;\r\n y = ly1 + root * lDirY;\r\n if (root >= 0 && root <= 1)\r\n {\r\n out.push(new Point(x, y));\r\n }\r\n }\r\n else if (lambda > 0)\r\n {\r\n var root1 = (-coefficientB - Math.sqrt(lambda)) / (2 * coefficientA);\r\n x = lx1 + root1 * lDirX;\r\n y = ly1 + root1 * lDirY;\r\n if (root1 >= 0 && root1 <= 1)\r\n {\r\n out.push(new Point(x, y));\r\n }\r\n\r\n var root2 = (-coefficientB + Math.sqrt(lambda)) / (2 * coefficientA);\r\n x = lx1 + root2 * lDirX;\r\n y = ly1 + root2 * lDirY;\r\n if (root2 >= 0 && root2 <= 1)\r\n {\r\n out.push(new Point(x, y));\r\n }\r\n }\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetLineToCircle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0TGluZVRvQ2lyY2xlLmpzPzNlODQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjtBQUNwQyxtQkFBbUIsbUJBQU8sQ0FBQyxpRkFBZ0I7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVyxtQkFBbUI7QUFDOUIsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVOztBQUV0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0TGluZVRvQ2lyY2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgRmxvcmlhbiBWYXplbGxlXHJcbiAqIEBhdXRob3IgICAgICAgR2VvZmZyZXkgR2xhaXZlXHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG52YXIgTGluZVRvQ2lyY2xlID0gcmVxdWlyZSgnLi9MaW5lVG9DaXJjbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgZm9yIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZSBsaW5lIHNlZ21lbnQgYW5kIGNpcmNsZSxcclxuICogYW5kIHJldHVybnMgdGhlIGludGVyc2VjdGlvbiBwb2ludHMgYXMgYSBQb2ludCBvYmplY3QgYXJyYXkuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5JbnRlcnNlY3RzLkdldExpbmVUb0NpcmNsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIGxpbmUgc2VnbWVudCB0byBjaGVjay5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5DaXJjbGV9IGNpcmNsZSAtIFRoZSBjaXJjbGUgdG8gY2hlY2sgYWdhaW5zdCB0aGUgbGluZS5cclxuICogQHBhcmFtIHthcnJheX0gW291dF0gLSBBbiBvcHRpb25hbCBhcnJheSBpbiB3aGljaCB0byBzdG9yZSB0aGUgcG9pbnRzIG9mIGludGVyc2VjdGlvbi5cclxuICpcclxuICogQHJldHVybiB7YXJyYXl9IEFuIGFycmF5IHdpdGggdGhlIHBvaW50cyBvZiBpbnRlcnNlY3Rpb24gaWYgb2JqZWN0cyBpbnRlcnNlY3QsIG90aGVyd2lzZSBhbiBlbXB0eSBhcnJheS5cclxuICovXHJcbnZhciBHZXRMaW5lVG9DaXJjbGUgPSBmdW5jdGlvbiAobGluZSwgY2lyY2xlLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBbXTsgfVxyXG5cclxuICAgIGlmIChMaW5lVG9DaXJjbGUobGluZSwgY2lyY2xlKSlcclxuICAgIHtcclxuICAgICAgICB2YXIgbHgxID0gbGluZS54MTtcclxuICAgICAgICB2YXIgbHkxID0gbGluZS55MTtcclxuXHJcbiAgICAgICAgdmFyIGx4MiA9IGxpbmUueDI7XHJcbiAgICAgICAgdmFyIGx5MiA9IGxpbmUueTI7XHJcblxyXG4gICAgICAgIHZhciBjeCA9IGNpcmNsZS54O1xyXG4gICAgICAgIHZhciBjeSA9IGNpcmNsZS55O1xyXG4gICAgICAgIHZhciBjciA9IGNpcmNsZS5yYWRpdXM7XHJcblxyXG4gICAgICAgIHZhciBsRGlyWCA9IGx4MiAtIGx4MTtcclxuICAgICAgICB2YXIgbERpclkgPSBseTIgLSBseTE7XHJcbiAgICAgICAgdmFyIG9EaXJYID0gbHgxIC0gY3g7XHJcbiAgICAgICAgdmFyIG9EaXJZID0gbHkxIC0gY3k7XHJcblxyXG4gICAgICAgIHZhciBjb2VmZmljaWVudEEgPSBsRGlyWCAqIGxEaXJYICsgbERpclkgKiBsRGlyWTtcclxuICAgICAgICB2YXIgY29lZmZpY2llbnRCID0gMiAqIChsRGlyWCAqIG9EaXJYICsgbERpclkgKiBvRGlyWSk7XHJcbiAgICAgICAgdmFyIGNvZWZmaWNpZW50QyA9IG9EaXJYICogb0RpclggKyBvRGlyWSAqIG9EaXJZIC0gY3IgKiBjcjtcclxuXHJcbiAgICAgICAgdmFyIGxhbWJkYSA9IChjb2VmZmljaWVudEIgKiBjb2VmZmljaWVudEIpIC0gKDQgKiBjb2VmZmljaWVudEEgKiBjb2VmZmljaWVudEMpO1xyXG5cclxuICAgICAgICB2YXIgeCwgeTtcclxuXHJcbiAgICAgICAgaWYgKGxhbWJkYSA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciByb290ID0gLWNvZWZmaWNpZW50QiAvICgyICogY29lZmZpY2llbnRBKTtcclxuICAgICAgICAgICAgeCA9IGx4MSArIHJvb3QgKiBsRGlyWDtcclxuICAgICAgICAgICAgeSA9IGx5MSArIHJvb3QgKiBsRGlyWTtcclxuICAgICAgICAgICAgaWYgKHJvb3QgPj0gMCAmJiByb290IDw9IDEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG91dC5wdXNoKG5ldyBQb2ludCh4LCB5KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobGFtYmRhID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciByb290MSA9ICgtY29lZmZpY2llbnRCIC0gTWF0aC5zcXJ0KGxhbWJkYSkpIC8gKDIgKiBjb2VmZmljaWVudEEpO1xyXG4gICAgICAgICAgICB4ID0gbHgxICsgcm9vdDEgKiBsRGlyWDtcclxuICAgICAgICAgICAgeSA9IGx5MSArIHJvb3QxICogbERpclk7XHJcbiAgICAgICAgICAgIGlmIChyb290MSA+PSAwICYmIHJvb3QxIDw9IDEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG91dC5wdXNoKG5ldyBQb2ludCh4LCB5KSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciByb290MiA9ICgtY29lZmZpY2llbnRCICsgTWF0aC5zcXJ0KGxhbWJkYSkpIC8gKDIgKiBjb2VmZmljaWVudEEpO1xyXG4gICAgICAgICAgICB4ID0gbHgxICsgcm9vdDIgKiBsRGlyWDtcclxuICAgICAgICAgICAgeSA9IGx5MSArIHJvb3QyICogbERpclk7XHJcbiAgICAgICAgICAgIGlmIChyb290MiA+PSAwICYmIHJvb3QyIDw9IDEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG91dC5wdXNoKG5ldyBQb2ludCh4LCB5KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0TGluZVRvQ2lyY2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/GetLineToCircle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/intersects/GetLineToRectangle.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/src/geom/intersects/GetLineToRectangle.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Florian Vazelle\r\n * @author Geoffrey Glaive\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\nvar LineToLine = __webpack_require__(/*! ./LineToLine */ \"./node_modules/phaser/src/geom/intersects/LineToLine.js\");\r\nvar LineToRectangle = __webpack_require__(/*! ./LineToRectangle */ \"./node_modules/phaser/src/geom/intersects/LineToRectangle.js\");\r\n\r\n/**\r\n * Checks for intersection between the Line and a Rectangle shape,\r\n * and returns the intersection points as a Point object array.\r\n *\r\n * @function Phaser.Geom.Intersects.GetLineToRectangle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The Line to check for intersection.\r\n * @param {(Phaser.Geom.Rectangle|object)} rect - The Rectangle to check for intersection.\r\n * @param {array} [out] - An optional array in which to store the points of intersection.\r\n *\r\n * @return {array} An array with the points of intersection if objects intersect, otherwise an empty array.\r\n */\r\nvar GetLineToRectangle = function (line, rect, out)\r\n{\r\n if (out === undefined) { out = []; }\r\n\r\n if (LineToRectangle(line, rect))\r\n {\r\n var lineA = rect.getLineA();\r\n var lineB = rect.getLineB();\r\n var lineC = rect.getLineC();\r\n var lineD = rect.getLineD();\r\n\r\n var output = [ new Point(), new Point(), new Point(), new Point() ];\r\n\r\n var result = [\r\n LineToLine(lineA, line, output[0]),\r\n LineToLine(lineB, line, output[1]),\r\n LineToLine(lineC, line, output[2]),\r\n LineToLine(lineD, line, output[3])\r\n ];\r\n\r\n for (var i = 0; i < 4; i++)\r\n {\r\n if (result[i]) { out.push(output[i]); }\r\n }\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetLineToRectangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0TGluZVRvUmVjdGFuZ2xlLmpzPzI1OWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyw2RUFBYztBQUN2QyxzQkFBc0IsbUJBQU8sQ0FBQyx1RkFBbUI7O0FBRWpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVywrQkFBK0I7QUFDMUMsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixPQUFPO0FBQzlCO0FBQ0EsNEJBQTRCLHFCQUFxQjtBQUNqRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0TGluZVRvUmVjdGFuZ2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgRmxvcmlhbiBWYXplbGxlXHJcbiAqIEBhdXRob3IgICAgICAgR2VvZmZyZXkgR2xhaXZlXHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG52YXIgTGluZVRvTGluZSA9IHJlcXVpcmUoJy4vTGluZVRvTGluZScpO1xyXG52YXIgTGluZVRvUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9MaW5lVG9SZWN0YW5nbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgZm9yIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZSBMaW5lIGFuZCBhIFJlY3RhbmdsZSBzaGFwZSxcclxuICogYW5kIHJldHVybnMgdGhlIGludGVyc2VjdGlvbiBwb2ludHMgYXMgYSBQb2ludCBvYmplY3QgYXJyYXkuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5JbnRlcnNlY3RzLkdldExpbmVUb1JlY3RhbmdsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIExpbmUgdG8gY2hlY2sgZm9yIGludGVyc2VjdGlvbi5cclxuICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUmVjdGFuZ2xlfG9iamVjdCl9IHJlY3QgLSBUaGUgUmVjdGFuZ2xlIHRvIGNoZWNrIGZvciBpbnRlcnNlY3Rpb24uXHJcbiAqIEBwYXJhbSB7YXJyYXl9IFtvdXRdIC0gQW4gb3B0aW9uYWwgYXJyYXkgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHBvaW50cyBvZiBpbnRlcnNlY3Rpb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge2FycmF5fSBBbiBhcnJheSB3aXRoIHRoZSBwb2ludHMgb2YgaW50ZXJzZWN0aW9uIGlmIG9iamVjdHMgaW50ZXJzZWN0LCBvdGhlcndpc2UgYW4gZW1wdHkgYXJyYXkuXHJcbiAqL1xyXG52YXIgR2V0TGluZVRvUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGxpbmUsIHJlY3QsIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IFtdOyB9XHJcblxyXG4gICAgaWYgKExpbmVUb1JlY3RhbmdsZShsaW5lLCByZWN0KSlcclxuICAgIHtcclxuICAgICAgICB2YXIgbGluZUEgPSByZWN0LmdldExpbmVBKCk7XHJcbiAgICAgICAgdmFyIGxpbmVCID0gcmVjdC5nZXRMaW5lQigpO1xyXG4gICAgICAgIHZhciBsaW5lQyA9IHJlY3QuZ2V0TGluZUMoKTtcclxuICAgICAgICB2YXIgbGluZUQgPSByZWN0LmdldExpbmVEKCk7XHJcblxyXG4gICAgICAgIHZhciBvdXRwdXQgPSBbIG5ldyBQb2ludCgpLCBuZXcgUG9pbnQoKSwgbmV3IFBvaW50KCksIG5ldyBQb2ludCgpIF07XHJcblxyXG4gICAgICAgIHZhciByZXN1bHQgPSBbXHJcbiAgICAgICAgICAgIExpbmVUb0xpbmUobGluZUEsIGxpbmUsIG91dHB1dFswXSksXHJcbiAgICAgICAgICAgIExpbmVUb0xpbmUobGluZUIsIGxpbmUsIG91dHB1dFsxXSksXHJcbiAgICAgICAgICAgIExpbmVUb0xpbmUobGluZUMsIGxpbmUsIG91dHB1dFsyXSksXHJcbiAgICAgICAgICAgIExpbmVUb0xpbmUobGluZUQsIGxpbmUsIG91dHB1dFszXSlcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRbaV0pIHsgb3V0LnB1c2gob3V0cHV0W2ldKTsgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRMaW5lVG9SZWN0YW5nbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/GetLineToRectangle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/intersects/GetRectangleIntersection.js":
/*!*****************************************************************************!*\
!*** ./node_modules/phaser/src/geom/intersects/GetRectangleIntersection.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Rectangle = __webpack_require__(/*! ../rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar RectangleToRectangle = __webpack_require__(/*! ./RectangleToRectangle */ \"./node_modules/phaser/src/geom/intersects/RectangleToRectangle.js\");\r\n\r\n/**\r\n * Checks if two Rectangle shapes intersect and returns the area of this intersection as Rectangle object.\r\n * \r\n * If optional `output` parameter is omitted, new Rectangle object is created and returned. If there is intersection, it will contain intersection area. If there is no intersection, it wil be empty Rectangle (all values set to zero).\r\n * \r\n * If Rectangle object is passed as `output` and there is intersection, then intersection area data will be loaded into it and it will be returned. If there is no intersection, it will be returned without any change.\r\n *\r\n * @function Phaser.Geom.Intersects.GetRectangleIntersection\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [output,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rectA - The first Rectangle object.\r\n * @param {Phaser.Geom.Rectangle} rectB - The second Rectangle object.\r\n * @param {Phaser.Geom.Rectangle} [output] - Optional Rectangle object. If given, the intersection data will be loaded into it (in case of no intersection, it will be left unchanged). Otherwise, new Rectangle object will be created and returned with either intersection data or empty (all values set to zero), if there is no intersection.\r\n *\r\n * @return {Phaser.Geom.Rectangle} A rectangle object with intersection data.\r\n */\r\nvar GetRectangleIntersection = function (rectA, rectB, output)\r\n{\r\n if (output === undefined) { output = new Rectangle(); }\r\n\r\n if (RectangleToRectangle(rectA, rectB))\r\n {\r\n output.x = Math.max(rectA.x, rectB.x);\r\n output.y = Math.max(rectA.y, rectB.y);\r\n output.width = Math.min(rectA.right, rectB.right) - output.x;\r\n output.height = Math.min(rectA.bottom, rectB.bottom) - output.y;\r\n }\r\n\r\n return output;\r\n};\r\n\r\nmodule.exports = GetRectangleIntersection;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0UmVjdGFuZ2xlSW50ZXJzZWN0aW9uLmpzP2FhNzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLHFGQUF3QjtBQUNoRCwyQkFBMkIsbUJBQU8sQ0FBQyxpR0FBd0I7O0FBRTNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxzQkFBc0I7QUFDbkM7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLHNCQUFzQjtBQUNqQztBQUNBLFlBQVksc0JBQXNCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLCtCQUErQiwwQkFBMEI7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0UmVjdGFuZ2xlSW50ZXJzZWN0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi4vcmVjdGFuZ2xlL1JlY3RhbmdsZScpO1xyXG52YXIgUmVjdGFuZ2xlVG9SZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZVRvUmVjdGFuZ2xlJyk7XHJcblxyXG4vKipcclxuICogQ2hlY2tzIGlmIHR3byBSZWN0YW5nbGUgc2hhcGVzIGludGVyc2VjdCBhbmQgcmV0dXJucyB0aGUgYXJlYSBvZiB0aGlzIGludGVyc2VjdGlvbiBhcyBSZWN0YW5nbGUgb2JqZWN0LlxyXG4gKiBcclxuICogSWYgb3B0aW9uYWwgYG91dHB1dGAgcGFyYW1ldGVyIGlzIG9taXR0ZWQsIG5ldyBSZWN0YW5nbGUgb2JqZWN0IGlzIGNyZWF0ZWQgYW5kIHJldHVybmVkLiBJZiB0aGVyZSBpcyBpbnRlcnNlY3Rpb24sIGl0IHdpbGwgY29udGFpbiBpbnRlcnNlY3Rpb24gYXJlYS4gSWYgdGhlcmUgaXMgbm8gaW50ZXJzZWN0aW9uLCBpdCB3aWwgYmUgZW1wdHkgUmVjdGFuZ2xlIChhbGwgdmFsdWVzIHNldCB0byB6ZXJvKS5cclxuICogXHJcbiAqIElmIFJlY3RhbmdsZSBvYmplY3QgaXMgcGFzc2VkIGFzIGBvdXRwdXRgIGFuZCB0aGVyZSBpcyBpbnRlcnNlY3Rpb24sIHRoZW4gaW50ZXJzZWN0aW9uIGFyZWEgZGF0YSB3aWxsIGJlIGxvYWRlZCBpbnRvIGl0IGFuZCBpdCB3aWxsIGJlIHJldHVybmVkLiBJZiB0aGVyZSBpcyBubyBpbnRlcnNlY3Rpb24sIGl0IHdpbGwgYmUgcmV0dXJuZWQgd2l0aG91dCBhbnkgY2hhbmdlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uSW50ZXJzZWN0cy5HZXRSZWN0YW5nbGVJbnRlcnNlY3Rpb25cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IE8gLSBbb3V0cHV0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0QSAtIFRoZSBmaXJzdCBSZWN0YW5nbGUgb2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdEIgLSBUaGUgc2Vjb25kIFJlY3RhbmdsZSBvYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBbb3V0cHV0XSAtIE9wdGlvbmFsIFJlY3RhbmdsZSBvYmplY3QuIElmIGdpdmVuLCB0aGUgaW50ZXJzZWN0aW9uIGRhdGEgd2lsbCBiZSBsb2FkZWQgaW50byBpdCAoaW4gY2FzZSBvZiBubyBpbnRlcnNlY3Rpb24sIGl0IHdpbGwgYmUgbGVmdCB1bmNoYW5nZWQpLiBPdGhlcndpc2UsIG5ldyBSZWN0YW5nbGUgb2JqZWN0IHdpbGwgYmUgY3JlYXRlZCBhbmQgcmV0dXJuZWQgd2l0aCBlaXRoZXIgaW50ZXJzZWN0aW9uIGRhdGEgb3IgZW1wdHkgKGFsbCB2YWx1ZXMgc2V0IHRvIHplcm8pLCBpZiB0aGVyZSBpcyBubyBpbnRlcnNlY3Rpb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gQSByZWN0YW5nbGUgb2JqZWN0IHdpdGggaW50ZXJzZWN0aW9uIGRhdGEuXHJcbiAqL1xyXG52YXIgR2V0UmVjdGFuZ2xlSW50ZXJzZWN0aW9uID0gZnVuY3Rpb24gKHJlY3RBLCByZWN0Qiwgb3V0cHV0KVxyXG57XHJcbiAgICBpZiAob3V0cHV0ID09PSB1bmRlZmluZWQpIHsgb3V0cHV0ID0gbmV3IFJlY3RhbmdsZSgpOyB9XHJcblxyXG4gICAgaWYgKFJlY3RhbmdsZVRvUmVjdGFuZ2xlKHJlY3RBLCByZWN0QikpXHJcbiAgICB7XHJcbiAgICAgICAgb3V0cHV0LnggPSBNYXRoLm1heChyZWN0QS54LCByZWN0Qi54KTtcclxuICAgICAgICBvdXRwdXQueSA9IE1hdGgubWF4KHJlY3RBLnksIHJlY3RCLnkpO1xyXG4gICAgICAgIG91dHB1dC53aWR0aCA9IE1hdGgubWluKHJlY3RBLnJpZ2h0LCByZWN0Qi5yaWdodCkgLSBvdXRwdXQueDtcclxuICAgICAgICBvdXRwdXQuaGVpZ2h0ID0gTWF0aC5taW4ocmVjdEEuYm90dG9tLCByZWN0Qi5ib3R0b20pIC0gb3V0cHV0Lnk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dHB1dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0UmVjdGFuZ2xlSW50ZXJzZWN0aW9uO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/GetRectangleIntersection.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/intersects/GetRectangleToRectangle.js":
/*!****************************************************************************!*\
!*** ./node_modules/phaser/src/geom/intersects/GetRectangleToRectangle.js ***!
\****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Florian Vazelle\r\n * @author Geoffrey Glaive\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetLineToRectangle = __webpack_require__(/*! ./GetLineToRectangle */ \"./node_modules/phaser/src/geom/intersects/GetLineToRectangle.js\");\r\nvar RectangleToRectangle = __webpack_require__(/*! ./RectangleToRectangle */ \"./node_modules/phaser/src/geom/intersects/RectangleToRectangle.js\");\r\n\r\n/**\r\n * Checks if two Rectangles intersect and returns the intersection points as a Point object array.\r\n *\r\n * A Rectangle intersects another Rectangle if any part of its bounds is within the other Rectangle's bounds. As such, the two Rectangles are considered \"solid\". A Rectangle with no width or no height will never intersect another Rectangle.\r\n *\r\n * @function Phaser.Geom.Intersects.GetRectangleToRectangle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rectA - The first Rectangle to check for intersection.\r\n * @param {Phaser.Geom.Rectangle} rectB - The second Rectangle to check for intersection.\r\n * @param {array} [out] - An optional array in which to store the points of intersection.\r\n *\r\n * @return {array} An array with the points of intersection if objects intersect, otherwise an empty array.\r\n */\r\nvar GetRectangleToRectangle = function (rectA, rectB, out)\r\n{\r\n if (out === undefined) { out = []; }\r\n\r\n if (RectangleToRectangle(rectA, rectB))\r\n {\r\n var lineA = rectA.getLineA();\r\n var lineB = rectA.getLineB();\r\n var lineC = rectA.getLineC();\r\n var lineD = rectA.getLineD();\r\n\r\n GetLineToRectangle(lineA, rectB, out);\r\n GetLineToRectangle(lineB, rectB, out);\r\n GetLineToRectangle(lineC, rectB, out);\r\n GetLineToRectangle(lineD, rectB, out);\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetRectangleToRectangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0UmVjdGFuZ2xlVG9SZWN0YW5nbGUuanM/ODdlYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyw2RkFBc0I7QUFDdkQsMkJBQTJCLG1CQUFPLENBQUMsaUdBQXdCOztBQUUzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9pbnRlcnNlY3RzL0dldFJlY3RhbmdsZVRvUmVjdGFuZ2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgRmxvcmlhbiBWYXplbGxlXHJcbiAqIEBhdXRob3IgICAgICAgR2VvZmZyZXkgR2xhaXZlXHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0TGluZVRvUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9HZXRMaW5lVG9SZWN0YW5nbGUnKTtcclxudmFyIFJlY3RhbmdsZVRvUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGVUb1JlY3RhbmdsZScpO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBpZiB0d28gUmVjdGFuZ2xlcyBpbnRlcnNlY3QgYW5kIHJldHVybnMgdGhlIGludGVyc2VjdGlvbiBwb2ludHMgYXMgYSBQb2ludCBvYmplY3QgYXJyYXkuXHJcbiAqXHJcbiAqIEEgUmVjdGFuZ2xlIGludGVyc2VjdHMgYW5vdGhlciBSZWN0YW5nbGUgaWYgYW55IHBhcnQgb2YgaXRzIGJvdW5kcyBpcyB3aXRoaW4gdGhlIG90aGVyIFJlY3RhbmdsZSdzIGJvdW5kcy4gQXMgc3VjaCwgdGhlIHR3byBSZWN0YW5nbGVzIGFyZSBjb25zaWRlcmVkIFwic29saWRcIi4gQSBSZWN0YW5nbGUgd2l0aCBubyB3aWR0aCBvciBubyBoZWlnaHQgd2lsbCBuZXZlciBpbnRlcnNlY3QgYW5vdGhlciBSZWN0YW5nbGUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5JbnRlcnNlY3RzLkdldFJlY3RhbmdsZVRvUmVjdGFuZ2xlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdEEgLSBUaGUgZmlyc3QgUmVjdGFuZ2xlIHRvIGNoZWNrIGZvciBpbnRlcnNlY3Rpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0QiAtIFRoZSBzZWNvbmQgUmVjdGFuZ2xlIHRvIGNoZWNrIGZvciBpbnRlcnNlY3Rpb24uXHJcbiAqIEBwYXJhbSB7YXJyYXl9IFtvdXRdIC0gQW4gb3B0aW9uYWwgYXJyYXkgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHBvaW50cyBvZiBpbnRlcnNlY3Rpb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge2FycmF5fSBBbiBhcnJheSB3aXRoIHRoZSBwb2ludHMgb2YgaW50ZXJzZWN0aW9uIGlmIG9iamVjdHMgaW50ZXJzZWN0LCBvdGhlcndpc2UgYW4gZW1wdHkgYXJyYXkuXHJcbiAqL1xyXG52YXIgR2V0UmVjdGFuZ2xlVG9SZWN0YW5nbGUgPSBmdW5jdGlvbiAocmVjdEEsIHJlY3RCLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBbXTsgfVxyXG5cclxuICAgIGlmIChSZWN0YW5nbGVUb1JlY3RhbmdsZShyZWN0QSwgcmVjdEIpKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBsaW5lQSA9IHJlY3RBLmdldExpbmVBKCk7XHJcbiAgICAgICAgdmFyIGxpbmVCID0gcmVjdEEuZ2V0TGluZUIoKTtcclxuICAgICAgICB2YXIgbGluZUMgPSByZWN0QS5nZXRMaW5lQygpO1xyXG4gICAgICAgIHZhciBsaW5lRCA9IHJlY3RBLmdldExpbmVEKCk7XHJcblxyXG4gICAgICAgIEdldExpbmVUb1JlY3RhbmdsZShsaW5lQSwgcmVjdEIsIG91dCk7XHJcbiAgICAgICAgR2V0TGluZVRvUmVjdGFuZ2xlKGxpbmVCLCByZWN0Qiwgb3V0KTtcclxuICAgICAgICBHZXRMaW5lVG9SZWN0YW5nbGUobGluZUMsIHJlY3RCLCBvdXQpO1xyXG4gICAgICAgIEdldExpbmVUb1JlY3RhbmdsZShsaW5lRCwgcmVjdEIsIG91dCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0UmVjdGFuZ2xlVG9SZWN0YW5nbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/GetRectangleToRectangle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/intersects/GetRectangleToTriangle.js":
/*!***************************************************************************!*\
!*** ./node_modules/phaser/src/geom/intersects/GetRectangleToTriangle.js ***!
\***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Florian Vazelle\r\n * @author Geoffrey Glaive\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar RectangleToTriangle = __webpack_require__(/*! ./RectangleToTriangle */ \"./node_modules/phaser/src/geom/intersects/RectangleToTriangle.js\");\r\nvar GetLineToRectangle = __webpack_require__(/*! ./GetLineToRectangle */ \"./node_modules/phaser/src/geom/intersects/GetLineToRectangle.js\");\r\n\r\n/**\r\n * Checks for intersection between Rectangle shape and Triangle shape,\r\n * and returns the intersection points as a Point object array.\r\n *\r\n * @function Phaser.Geom.Intersects.GetRectangleToTriangle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - Rectangle object to test.\r\n * @param {Phaser.Geom.Triangle} triangle - Triangle object to test.\r\n * @param {array} [out] - An optional array in which to store the points of intersection.\r\n *\r\n * @return {array} An array with the points of intersection if objects intersect, otherwise an empty array.\r\n */\r\nvar GetRectangleToTriangle = function (rect, triangle, out)\r\n{\r\n if (out === undefined) { out = []; }\r\n\r\n if (RectangleToTriangle(rect, triangle))\r\n {\r\n var lineA = triangle.getLineA();\r\n var lineB = triangle.getLineB();\r\n var lineC = triangle.getLineC();\r\n\r\n GetLineToRectangle(lineA, rect, out);\r\n GetLineToRectangle(lineB, rect, out);\r\n GetLineToRectangle(lineC, rect, out);\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetRectangleToTriangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0UmVjdGFuZ2xlVG9UcmlhbmdsZS5qcz9lYTFhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLDBCQUEwQixtQkFBTyxDQUFDLCtGQUF1QjtBQUN6RCx5QkFBeUIsbUJBQU8sQ0FBQyw2RkFBc0I7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0UmVjdGFuZ2xlVG9UcmlhbmdsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIEZsb3JpYW4gVmF6ZWxsZVxyXG4gKiBAYXV0aG9yICAgICAgIEdlb2ZmcmV5IEdsYWl2ZVxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFJlY3RhbmdsZVRvVHJpYW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZVRvVHJpYW5nbGUnKTtcclxudmFyIEdldExpbmVUb1JlY3RhbmdsZSA9IHJlcXVpcmUoJy4vR2V0TGluZVRvUmVjdGFuZ2xlJyk7XHJcblxyXG4vKipcclxuICogQ2hlY2tzIGZvciBpbnRlcnNlY3Rpb24gYmV0d2VlbiBSZWN0YW5nbGUgc2hhcGUgYW5kIFRyaWFuZ2xlIHNoYXBlLFxyXG4gKiBhbmQgcmV0dXJucyB0aGUgaW50ZXJzZWN0aW9uIHBvaW50cyBhcyBhIFBvaW50IG9iamVjdCBhcnJheS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkludGVyc2VjdHMuR2V0UmVjdGFuZ2xlVG9UcmlhbmdsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3QgLSBSZWN0YW5nbGUgb2JqZWN0IHRvIHRlc3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlIC0gVHJpYW5nbGUgb2JqZWN0IHRvIHRlc3QuXHJcbiAqIEBwYXJhbSB7YXJyYXl9IFtvdXRdIC0gQW4gb3B0aW9uYWwgYXJyYXkgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHBvaW50cyBvZiBpbnRlcnNlY3Rpb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge2FycmF5fSBBbiBhcnJheSB3aXRoIHRoZSBwb2ludHMgb2YgaW50ZXJzZWN0aW9uIGlmIG9iamVjdHMgaW50ZXJzZWN0LCBvdGhlcndpc2UgYW4gZW1wdHkgYXJyYXkuXHJcbiAqL1xyXG52YXIgR2V0UmVjdGFuZ2xlVG9UcmlhbmdsZSA9IGZ1bmN0aW9uIChyZWN0LCB0cmlhbmdsZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gW107IH1cclxuXHJcbiAgICBpZiAoUmVjdGFuZ2xlVG9UcmlhbmdsZShyZWN0LCB0cmlhbmdsZSkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGxpbmVBID0gdHJpYW5nbGUuZ2V0TGluZUEoKTtcclxuICAgICAgICB2YXIgbGluZUIgPSB0cmlhbmdsZS5nZXRMaW5lQigpO1xyXG4gICAgICAgIHZhciBsaW5lQyA9IHRyaWFuZ2xlLmdldExpbmVDKCk7XHJcblxyXG4gICAgICAgIEdldExpbmVUb1JlY3RhbmdsZShsaW5lQSwgcmVjdCwgb3V0KTtcclxuICAgICAgICBHZXRMaW5lVG9SZWN0YW5nbGUobGluZUIsIHJlY3QsIG91dCk7XHJcbiAgICAgICAgR2V0TGluZVRvUmVjdGFuZ2xlKGxpbmVDLCByZWN0LCBvdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldFJlY3RhbmdsZVRvVHJpYW5nbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/GetRectangleToTriangle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/intersects/GetTriangleToCircle.js":
/*!************************************************************************!*\
!*** ./node_modules/phaser/src/geom/intersects/GetTriangleToCircle.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Florian Vazelle\r\n * @author Geoffrey Glaive\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetLineToCircle = __webpack_require__(/*! ./GetLineToCircle */ \"./node_modules/phaser/src/geom/intersects/GetLineToCircle.js\");\r\nvar TriangleToCircle = __webpack_require__(/*! ./TriangleToCircle */ \"./node_modules/phaser/src/geom/intersects/TriangleToCircle.js\");\r\n\r\n/**\r\n * Checks if a Triangle and a Circle intersect, and returns the intersection points as a Point object array.\r\n *\r\n * A Circle intersects a Triangle if its center is located within it or if any of the Triangle's sides intersect the Circle. As such, the Triangle and the Circle are considered \"solid\" for the intersection.\r\n *\r\n * @function Phaser.Geom.Intersects.GetTriangleToCircle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to check for intersection.\r\n * @param {Phaser.Geom.Circle} circle - The Circle to check for intersection.\r\n * @param {array} [out] - An optional array in which to store the points of intersection.\r\n *\r\n * @return {array} An array with the points of intersection if objects intersect, otherwise an empty array.\r\n */\r\nvar GetTriangleToCircle = function (triangle, circle, out)\r\n{\r\n if (out === undefined) { out = []; }\r\n\r\n if (TriangleToCircle(triangle, circle))\r\n {\r\n var lineA = triangle.getLineA();\r\n var lineB = triangle.getLineB();\r\n var lineC = triangle.getLineC();\r\n\r\n GetLineToCircle(lineA, circle, out);\r\n GetLineToCircle(lineB, circle, out);\r\n GetLineToCircle(lineC, circle, out);\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetTriangleToCircle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0VHJpYW5nbGVUb0NpcmNsZS5qcz9lYzY2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHNCQUFzQixtQkFBTyxDQUFDLHVGQUFtQjtBQUNqRCx1QkFBdUIsbUJBQU8sQ0FBQyx5RkFBb0I7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLG1CQUFtQjtBQUM5QixXQUFXLE1BQU07QUFDakI7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vaW50ZXJzZWN0cy9HZXRUcmlhbmdsZVRvQ2lyY2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgRmxvcmlhbiBWYXplbGxlXHJcbiAqIEBhdXRob3IgICAgICAgR2VvZmZyZXkgR2xhaXZlXHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0TGluZVRvQ2lyY2xlID0gcmVxdWlyZSgnLi9HZXRMaW5lVG9DaXJjbGUnKTtcclxudmFyIFRyaWFuZ2xlVG9DaXJjbGUgPSByZXF1aXJlKCcuL1RyaWFuZ2xlVG9DaXJjbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgYSBUcmlhbmdsZSBhbmQgYSBDaXJjbGUgaW50ZXJzZWN0LCBhbmQgcmV0dXJucyB0aGUgaW50ZXJzZWN0aW9uIHBvaW50cyBhcyBhIFBvaW50IG9iamVjdCBhcnJheS5cclxuICpcclxuICogQSBDaXJjbGUgaW50ZXJzZWN0cyBhIFRyaWFuZ2xlIGlmIGl0cyBjZW50ZXIgaXMgbG9jYXRlZCB3aXRoaW4gaXQgb3IgaWYgYW55IG9mIHRoZSBUcmlhbmdsZSdzIHNpZGVzIGludGVyc2VjdCB0aGUgQ2lyY2xlLiBBcyBzdWNoLCB0aGUgVHJpYW5nbGUgYW5kIHRoZSBDaXJjbGUgYXJlIGNvbnNpZGVyZWQgXCJzb2xpZFwiIGZvciB0aGUgaW50ZXJzZWN0aW9uLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uSW50ZXJzZWN0cy5HZXRUcmlhbmdsZVRvQ2lyY2xlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSB0cmlhbmdsZSAtIFRoZSBUcmlhbmdsZSB0byBjaGVjayBmb3IgaW50ZXJzZWN0aW9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkNpcmNsZX0gY2lyY2xlIC0gVGhlIENpcmNsZSB0byBjaGVjayBmb3IgaW50ZXJzZWN0aW9uLlxyXG4gKiBAcGFyYW0ge2FycmF5fSBbb3V0XSAtIEFuIG9wdGlvbmFsIGFycmF5IGluIHdoaWNoIHRvIHN0b3JlIHRoZSBwb2ludHMgb2YgaW50ZXJzZWN0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHthcnJheX0gQW4gYXJyYXkgd2l0aCB0aGUgcG9pbnRzIG9mIGludGVyc2VjdGlvbiBpZiBvYmplY3RzIGludGVyc2VjdCwgb3RoZXJ3aXNlIGFuIGVtcHR5IGFycmF5LlxyXG4gKi9cclxudmFyIEdldFRyaWFuZ2xlVG9DaXJjbGUgPSBmdW5jdGlvbiAodHJpYW5nbGUsIGNpcmNsZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gW107IH1cclxuXHJcbiAgICBpZiAoVHJpYW5nbGVUb0NpcmNsZSh0cmlhbmdsZSwgY2lyY2xlKSlcclxuICAgIHtcclxuICAgICAgICB2YXIgbGluZUEgPSB0cmlhbmdsZS5nZXRMaW5lQSgpO1xyXG4gICAgICAgIHZhciBsaW5lQiA9IHRyaWFuZ2xlLmdldExpbmVCKCk7XHJcbiAgICAgICAgdmFyIGxpbmVDID0gdHJpYW5nbGUuZ2V0TGluZUMoKTtcclxuXHJcbiAgICAgICAgR2V0TGluZVRvQ2lyY2xlKGxpbmVBLCBjaXJjbGUsIG91dCk7XHJcbiAgICAgICAgR2V0TGluZVRvQ2lyY2xlKGxpbmVCLCBjaXJjbGUsIG91dCk7XHJcbiAgICAgICAgR2V0TGluZVRvQ2lyY2xlKGxpbmVDLCBjaXJjbGUsIG91dCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0VHJpYW5nbGVUb0NpcmNsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/GetTriangleToCircle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/intersects/GetTriangleToLine.js":
/*!**********************************************************************!*\
!*** ./node_modules/phaser/src/geom/intersects/GetTriangleToLine.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Florian Vazelle\r\n * @author Geoffrey Glaive\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\nvar TriangleToLine = __webpack_require__(/*! ./TriangleToLine */ \"./node_modules/phaser/src/geom/intersects/TriangleToLine.js\");\r\nvar LineToLine = __webpack_require__(/*! ./LineToLine */ \"./node_modules/phaser/src/geom/intersects/LineToLine.js\");\r\n\r\n/**\r\n * Checks if a Triangle and a Line intersect, and returns the intersection points as a Point object array.\r\n *\r\n * The Line intersects the Triangle if it starts inside of it, ends inside of it, or crosses any of the Triangle's sides. Thus, the Triangle is considered \"solid\".\r\n *\r\n * @function Phaser.Geom.Intersects.GetTriangleToLine\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to check with.\r\n * @param {Phaser.Geom.Line} line - The Line to check with.\r\n * @param {array} [out] - An optional array in which to store the points of intersection.\r\n *\r\n * @return {array} An array with the points of intersection if objects intersect, otherwise an empty array.\r\n */\r\nvar GetTriangleToLine = function (triangle, line, out)\r\n{\r\n if (out === undefined) { out = []; }\r\n\r\n if (TriangleToLine(triangle, line))\r\n {\r\n var lineA = triangle.getLineA();\r\n var lineB = triangle.getLineB();\r\n var lineC = triangle.getLineC();\r\n\r\n var output = [ new Point(), new Point(), new Point() ];\r\n\r\n var result = [\r\n LineToLine(lineA, line, output[0]),\r\n LineToLine(lineB, line, output[1]),\r\n LineToLine(lineC, line, output[2])\r\n ];\r\n\r\n for (var i = 0; i < 3; i++)\r\n {\r\n if (result[i]) { out.push(output[i]); }\r\n }\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetTriangleToLine;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0VHJpYW5nbGVUb0xpbmUuanM/NDVhNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMscUVBQWdCO0FBQ3BDLHFCQUFxQixtQkFBTyxDQUFDLHFGQUFrQjtBQUMvQyxpQkFBaUIsbUJBQU8sQ0FBQyw2RUFBYzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsTUFBTTtBQUNqQjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsVUFBVTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixPQUFPO0FBQzlCO0FBQ0EsNEJBQTRCLHFCQUFxQjtBQUNqRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0VHJpYW5nbGVUb0xpbmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBGbG9yaWFuIFZhemVsbGVcclxuICogQGF1dGhvciAgICAgICBHZW9mZnJleSBHbGFpdmVcclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQb2ludCA9IHJlcXVpcmUoJy4uL3BvaW50L1BvaW50Jyk7XHJcbnZhciBUcmlhbmdsZVRvTGluZSA9IHJlcXVpcmUoJy4vVHJpYW5nbGVUb0xpbmUnKTtcclxudmFyIExpbmVUb0xpbmUgPSByZXF1aXJlKCcuL0xpbmVUb0xpbmUnKTtcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgYSBUcmlhbmdsZSBhbmQgYSBMaW5lIGludGVyc2VjdCwgYW5kIHJldHVybnMgdGhlIGludGVyc2VjdGlvbiBwb2ludHMgYXMgYSBQb2ludCBvYmplY3QgYXJyYXkuXHJcbiAqXHJcbiAqIFRoZSBMaW5lIGludGVyc2VjdHMgdGhlIFRyaWFuZ2xlIGlmIGl0IHN0YXJ0cyBpbnNpZGUgb2YgaXQsIGVuZHMgaW5zaWRlIG9mIGl0LCBvciBjcm9zc2VzIGFueSBvZiB0aGUgVHJpYW5nbGUncyBzaWRlcy4gVGh1cywgdGhlIFRyaWFuZ2xlIGlzIGNvbnNpZGVyZWQgXCJzb2xpZFwiLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uSW50ZXJzZWN0cy5HZXRUcmlhbmdsZVRvTGluZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gdHJpYW5nbGUgLSBUaGUgVHJpYW5nbGUgdG8gY2hlY2sgd2l0aC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIExpbmUgdG8gY2hlY2sgd2l0aC5cclxuICogQHBhcmFtIHthcnJheX0gW291dF0gLSBBbiBvcHRpb25hbCBhcnJheSBpbiB3aGljaCB0byBzdG9yZSB0aGUgcG9pbnRzIG9mIGludGVyc2VjdGlvbi5cclxuICpcclxuICogQHJldHVybiB7YXJyYXl9IEFuIGFycmF5IHdpdGggdGhlIHBvaW50cyBvZiBpbnRlcnNlY3Rpb24gaWYgb2JqZWN0cyBpbnRlcnNlY3QsIG90aGVyd2lzZSBhbiBlbXB0eSBhcnJheS5cclxuICovXHJcbnZhciBHZXRUcmlhbmdsZVRvTGluZSA9IGZ1bmN0aW9uICh0cmlhbmdsZSwgbGluZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gW107IH1cclxuXHJcbiAgICBpZiAoVHJpYW5nbGVUb0xpbmUodHJpYW5nbGUsIGxpbmUpKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBsaW5lQSA9IHRyaWFuZ2xlLmdldExpbmVBKCk7XHJcbiAgICAgICAgdmFyIGxpbmVCID0gdHJpYW5nbGUuZ2V0TGluZUIoKTtcclxuICAgICAgICB2YXIgbGluZUMgPSB0cmlhbmdsZS5nZXRMaW5lQygpO1xyXG5cclxuICAgICAgICB2YXIgb3V0cHV0ID0gWyBuZXcgUG9pbnQoKSwgbmV3IFBvaW50KCksIG5ldyBQb2ludCgpIF07XHJcblxyXG4gICAgICAgIHZhciByZXN1bHQgPSBbXHJcbiAgICAgICAgICAgIExpbmVUb0xpbmUobGluZUEsIGxpbmUsIG91dHB1dFswXSksXHJcbiAgICAgICAgICAgIExpbmVUb0xpbmUobGluZUIsIGxpbmUsIG91dHB1dFsxXSksXHJcbiAgICAgICAgICAgIExpbmVUb0xpbmUobGluZUMsIGxpbmUsIG91dHB1dFsyXSlcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRbaV0pIHsgb3V0LnB1c2gob3V0cHV0W2ldKTsgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRUcmlhbmdsZVRvTGluZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/GetTriangleToLine.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/intersects/GetTriangleToTriangle.js":
/*!**************************************************************************!*\
!*** ./node_modules/phaser/src/geom/intersects/GetTriangleToTriangle.js ***!
\**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Florian Vazelle\r\n * @author Geoffrey Glaive\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar TriangleToTriangle = __webpack_require__(/*! ./TriangleToTriangle */ \"./node_modules/phaser/src/geom/intersects/TriangleToTriangle.js\");\r\nvar GetTriangleToLine = __webpack_require__(/*! ./GetTriangleToLine */ \"./node_modules/phaser/src/geom/intersects/GetTriangleToLine.js\");\r\n\r\n/**\r\n * Checks if two Triangles intersect, and returns the intersection points as a Point object array.\r\n *\r\n * A Triangle intersects another Triangle if any pair of their lines intersects or if any point of one Triangle is within the other Triangle. Thus, the Triangles are considered \"solid\".\r\n *\r\n * @function Phaser.Geom.Intersects.GetTriangleToTriangle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangleA - The first Triangle to check for intersection.\r\n * @param {Phaser.Geom.Triangle} triangleB - The second Triangle to check for intersection.\r\n * @param {array} [out] - An optional array in which to store the points of intersection.\r\n *\r\n * @return {array} An array with the points of intersection if objects intersect, otherwise an empty array.\r\n */\r\nvar GetTriangleToTriangle = function (triangleA, triangleB, out)\r\n{\r\n if (out === undefined) { out = []; }\r\n\r\n if (TriangleToTriangle(triangleA, triangleB))\r\n {\r\n var lineA = triangleB.getLineA();\r\n var lineB = triangleB.getLineB();\r\n var lineC = triangleB.getLineC();\r\n\r\n GetTriangleToLine(triangleA, lineA, out);\r\n GetTriangleToLine(triangleA, lineB, out);\r\n GetTriangleToLine(triangleA, lineC, out);\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetTriangleToTriangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvR2V0VHJpYW5nbGVUb1RyaWFuZ2xlLmpzPzMzYzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEseUJBQXlCLG1CQUFPLENBQUMsNkZBQXNCO0FBQ3ZELHdCQUF3QixtQkFBTyxDQUFDLDJGQUFxQjs7QUFFckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsTUFBTTtBQUNqQjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsVUFBVTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9pbnRlcnNlY3RzL0dldFRyaWFuZ2xlVG9UcmlhbmdsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIEZsb3JpYW4gVmF6ZWxsZVxyXG4gKiBAYXV0aG9yICAgICAgIEdlb2ZmcmV5IEdsYWl2ZVxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFRyaWFuZ2xlVG9UcmlhbmdsZSA9IHJlcXVpcmUoJy4vVHJpYW5nbGVUb1RyaWFuZ2xlJyk7XHJcbnZhciBHZXRUcmlhbmdsZVRvTGluZSA9IHJlcXVpcmUoJy4vR2V0VHJpYW5nbGVUb0xpbmUnKTtcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgdHdvIFRyaWFuZ2xlcyBpbnRlcnNlY3QsIGFuZCByZXR1cm5zIHRoZSBpbnRlcnNlY3Rpb24gcG9pbnRzIGFzIGEgUG9pbnQgb2JqZWN0IGFycmF5LlxyXG4gKlxyXG4gKiBBIFRyaWFuZ2xlIGludGVyc2VjdHMgYW5vdGhlciBUcmlhbmdsZSBpZiBhbnkgcGFpciBvZiB0aGVpciBsaW5lcyBpbnRlcnNlY3RzIG9yIGlmIGFueSBwb2ludCBvZiBvbmUgVHJpYW5nbGUgaXMgd2l0aGluIHRoZSBvdGhlciBUcmlhbmdsZS4gVGh1cywgdGhlIFRyaWFuZ2xlcyBhcmUgY29uc2lkZXJlZCBcInNvbGlkXCIuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5JbnRlcnNlY3RzLkdldFRyaWFuZ2xlVG9UcmlhbmdsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gdHJpYW5nbGVBIC0gVGhlIGZpcnN0IFRyaWFuZ2xlIHRvIGNoZWNrIGZvciBpbnRlcnNlY3Rpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlQiAtIFRoZSBzZWNvbmQgVHJpYW5nbGUgdG8gY2hlY2sgZm9yIGludGVyc2VjdGlvbi5cclxuICogQHBhcmFtIHthcnJheX0gW291dF0gLSBBbiBvcHRpb25hbCBhcnJheSBpbiB3aGljaCB0byBzdG9yZSB0aGUgcG9pbnRzIG9mIGludGVyc2VjdGlvbi5cclxuICpcclxuICogQHJldHVybiB7YXJyYXl9IEFuIGFycmF5IHdpdGggdGhlIHBvaW50cyBvZiBpbnRlcnNlY3Rpb24gaWYgb2JqZWN0cyBpbnRlcnNlY3QsIG90aGVyd2lzZSBhbiBlbXB0eSBhcnJheS5cclxuICovXHJcbnZhciBHZXRUcmlhbmdsZVRvVHJpYW5nbGUgPSBmdW5jdGlvbiAodHJpYW5nbGVBLCB0cmlhbmdsZUIsIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IFtdOyB9XHJcblxyXG4gICAgaWYgKFRyaWFuZ2xlVG9UcmlhbmdsZSh0cmlhbmdsZUEsIHRyaWFuZ2xlQikpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGxpbmVBID0gdHJpYW5nbGVCLmdldExpbmVBKCk7XHJcbiAgICAgICAgdmFyIGxpbmVCID0gdHJpYW5nbGVCLmdldExpbmVCKCk7XHJcbiAgICAgICAgdmFyIGxpbmVDID0gdHJpYW5nbGVCLmdldExpbmVDKCk7XHJcblxyXG4gICAgICAgIEdldFRyaWFuZ2xlVG9MaW5lKHRyaWFuZ2xlQSwgbGluZUEsIG91dCk7XHJcbiAgICAgICAgR2V0VHJpYW5nbGVUb0xpbmUodHJpYW5nbGVBLCBsaW5lQiwgb3V0KTtcclxuICAgICAgICBHZXRUcmlhbmdsZVRvTGluZSh0cmlhbmdsZUEsIGxpbmVDLCBvdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldFRyaWFuZ2xlVG9UcmlhbmdsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/GetTriangleToTriangle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/intersects/LineToCircle.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/geom/intersects/LineToCircle.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Contains = __webpack_require__(/*! ../circle/Contains */ \"./node_modules/phaser/src/geom/circle/Contains.js\");\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\nvar tmp = new Point();\r\n\r\n/**\r\n * Checks for intersection between the line segment and circle.\r\n *\r\n * Based on code by [Matt DesLauriers](https://github.com/mattdesl/line-circle-collision/blob/master/LICENSE.md).\r\n *\r\n * @function Phaser.Geom.Intersects.LineToCircle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line segment to check.\r\n * @param {Phaser.Geom.Circle} circle - The circle to check against the line.\r\n * @param {(Phaser.Geom.Point|any)} [nearest] - An optional Point-like object. If given the closest point on the Line where the circle intersects will be stored in this object.\r\n *\r\n * @return {boolean} `true` if the two objects intersect, otherwise `false`.\r\n */\r\nvar LineToCircle = function (line, circle, nearest)\r\n{\r\n if (nearest === undefined) { nearest = tmp; }\r\n\r\n if (Contains(circle, line.x1, line.y1))\r\n {\r\n nearest.x = line.x1;\r\n nearest.y = line.y1;\r\n\r\n return true;\r\n }\r\n\r\n if (Contains(circle, line.x2, line.y2))\r\n {\r\n nearest.x = line.x2;\r\n nearest.y = line.y2;\r\n\r\n return true;\r\n }\r\n\r\n var dx = line.x2 - line.x1;\r\n var dy = line.y2 - line.y1;\r\n\r\n var lcx = circle.x - line.x1;\r\n var lcy = circle.y - line.y1;\r\n\r\n // project lc onto d, resulting in vector p\r\n var dLen2 = (dx * dx) + (dy * dy);\r\n var px = dx;\r\n var py = dy;\r\n\r\n if (dLen2 > 0)\r\n {\r\n var dp = ((lcx * dx) + (lcy * dy)) / dLen2;\r\n\r\n px *= dp;\r\n py *= dp;\r\n }\r\n\r\n nearest.x = line.x1 + px;\r\n nearest.y = line.y1 + py;\r\n \r\n // len2 of p\r\n var pLen2 = (px * px) + (py * py);\r\n \r\n return (\r\n pLen2 <= dLen2 &&\r\n ((px * dx) + (py * dy)) >= 0 &&\r\n Contains(circle, nearest.x, nearest.y)\r\n );\r\n};\r\n\r\nmodule.exports = LineToCircle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvTGluZVRvQ2lyY2xlLmpzP2Y5YWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyw2RUFBb0I7QUFDM0MsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjs7QUFFcEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsbUJBQW1CO0FBQzlCLFdBQVcsd0JBQXdCO0FBQ25DO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxlQUFlOztBQUUvQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vaW50ZXJzZWN0cy9MaW5lVG9DaXJjbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDb250YWlucyA9IHJlcXVpcmUoJy4uL2NpcmNsZS9Db250YWlucycpO1xyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG5cclxudmFyIHRtcCA9IG5ldyBQb2ludCgpO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBmb3IgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGxpbmUgc2VnbWVudCBhbmQgY2lyY2xlLlxyXG4gKlxyXG4gKiBCYXNlZCBvbiBjb2RlIGJ5IFtNYXR0IERlc0xhdXJpZXJzXShodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvbGluZS1jaXJjbGUtY29sbGlzaW9uL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQpLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uSW50ZXJzZWN0cy5MaW5lVG9DaXJjbGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uTGluZX0gbGluZSAtIFRoZSBsaW5lIHNlZ21lbnQgdG8gY2hlY2suXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBjaXJjbGUgLSBUaGUgY2lyY2xlIHRvIGNoZWNrIGFnYWluc3QgdGhlIGxpbmUuXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlBvaW50fGFueSl9IFtuZWFyZXN0XSAtIEFuIG9wdGlvbmFsIFBvaW50LWxpa2Ugb2JqZWN0LiBJZiBnaXZlbiB0aGUgY2xvc2VzdCBwb2ludCBvbiB0aGUgTGluZSB3aGVyZSB0aGUgY2lyY2xlIGludGVyc2VjdHMgd2lsbCBiZSBzdG9yZWQgaW4gdGhpcyBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdHdvIG9iamVjdHMgaW50ZXJzZWN0LCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICovXHJcbnZhciBMaW5lVG9DaXJjbGUgPSBmdW5jdGlvbiAobGluZSwgY2lyY2xlLCBuZWFyZXN0KVxyXG57XHJcbiAgICBpZiAobmVhcmVzdCA9PT0gdW5kZWZpbmVkKSB7IG5lYXJlc3QgPSB0bXA7IH1cclxuXHJcbiAgICBpZiAoQ29udGFpbnMoY2lyY2xlLCBsaW5lLngxLCBsaW5lLnkxKSlcclxuICAgIHtcclxuICAgICAgICBuZWFyZXN0LnggPSBsaW5lLngxO1xyXG4gICAgICAgIG5lYXJlc3QueSA9IGxpbmUueTE7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChDb250YWlucyhjaXJjbGUsIGxpbmUueDIsIGxpbmUueTIpKVxyXG4gICAge1xyXG4gICAgICAgIG5lYXJlc3QueCA9IGxpbmUueDI7XHJcbiAgICAgICAgbmVhcmVzdC55ID0gbGluZS55MjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGR4ID0gbGluZS54MiAtIGxpbmUueDE7XHJcbiAgICB2YXIgZHkgPSBsaW5lLnkyIC0gbGluZS55MTtcclxuXHJcbiAgICB2YXIgbGN4ID0gY2lyY2xlLnggLSBsaW5lLngxO1xyXG4gICAgdmFyIGxjeSA9IGNpcmNsZS55IC0gbGluZS55MTtcclxuXHJcbiAgICAvLyAgcHJvamVjdCBsYyBvbnRvIGQsIHJlc3VsdGluZyBpbiB2ZWN0b3IgcFxyXG4gICAgdmFyIGRMZW4yID0gKGR4ICogZHgpICsgKGR5ICogZHkpO1xyXG4gICAgdmFyIHB4ID0gZHg7XHJcbiAgICB2YXIgcHkgPSBkeTtcclxuXHJcbiAgICBpZiAoZExlbjIgPiAwKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBkcCA9ICgobGN4ICogZHgpICsgKGxjeSAqIGR5KSkgLyBkTGVuMjtcclxuXHJcbiAgICAgICAgcHggKj0gZHA7XHJcbiAgICAgICAgcHkgKj0gZHA7XHJcbiAgICB9XHJcblxyXG4gICAgbmVhcmVzdC54ID0gbGluZS54MSArIHB4O1xyXG4gICAgbmVhcmVzdC55ID0gbGluZS55MSArIHB5O1xyXG4gICAgXHJcbiAgICAvLyAgbGVuMiBvZiBwXHJcbiAgICB2YXIgcExlbjIgPSAocHggKiBweCkgKyAocHkgKiBweSk7XHJcbiAgICBcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgcExlbjIgPD0gZExlbjIgJiZcclxuICAgICAgICAoKHB4ICogZHgpICsgKHB5ICogZHkpKSA+PSAwICYmXHJcbiAgICAgICAgQ29udGFpbnMoY2lyY2xlLCBuZWFyZXN0LngsIG5lYXJlc3QueSlcclxuICAgICk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IExpbmVUb0NpcmNsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/LineToCircle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/intersects/LineToLine.js":
/*!***************************************************************!*\
!*** ./node_modules/phaser/src/geom/intersects/LineToLine.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n// This is based off an explanation and expanded math presented by Paul Bourke:\r\n// See http:'local.wasp.uwa.edu.au/~pbourke/geometry/lineline2d/\r\n\r\n/**\r\n * Checks if two Lines intersect. If the Lines are identical, they will be treated as parallel and thus non-intersecting.\r\n *\r\n * @function Phaser.Geom.Intersects.LineToLine\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line1 - The first Line to check.\r\n * @param {Phaser.Geom.Line} line2 - The second Line to check.\r\n * @param {Phaser.Geom.Point} [out] - A Point in which to optionally store the point of intersection.\r\n *\r\n * @return {boolean} `true` if the two Lines intersect, and the `out` object will be populated, if given. Otherwise, `false`.\r\n */\r\nvar LineToLine = function (line1, line2, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n var x1 = line1.x1;\r\n var y1 = line1.y1;\r\n var x2 = line1.x2;\r\n var y2 = line1.y2;\r\n\r\n var x3 = line2.x1;\r\n var y3 = line2.y1;\r\n var x4 = line2.x2;\r\n var y4 = line2.y2;\r\n\r\n var numA = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3);\r\n var numB = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3);\r\n var deNom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);\r\n\r\n // Make sure there is not a division by zero - this also indicates that the lines are parallel.\r\n // If numA and numB were both equal to zero the lines would be on top of each other (coincidental).\r\n // This check is not done because it is not necessary for this implementation (the parallel check accounts for this).\r\n\r\n if (deNom === 0)\r\n {\r\n return false;\r\n }\r\n\r\n // Calculate the intermediate fractional point that the lines potentially intersect.\r\n\r\n var uA = numA / deNom;\r\n var uB = numB / deNom;\r\n\r\n // The fractional point will be between 0 and 1 inclusive if the lines intersect.\r\n // If the fractional calculation is larger than 1 or smaller than 0 the lines would need to be longer to intersect.\r\n\r\n if (uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1)\r\n {\r\n out.x = x1 + (uA * (x2 - x1));\r\n out.y = y1 + (uA * (y2 - y1));\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nmodule.exports = LineToLine;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvTGluZVRvTGluZS5qcz81MjExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMscUVBQWdCOztBQUVwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsa0JBQWtCO0FBQzdCO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vaW50ZXJzZWN0cy9MaW5lVG9MaW5lLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG5cclxuLy8gIFRoaXMgaXMgYmFzZWQgb2ZmIGFuIGV4cGxhbmF0aW9uIGFuZCBleHBhbmRlZCBtYXRoIHByZXNlbnRlZCBieSBQYXVsIEJvdXJrZTpcclxuLy8gIFNlZSBodHRwOidsb2NhbC53YXNwLnV3YS5lZHUuYXUvfnBib3Vya2UvZ2VvbWV0cnkvbGluZWxpbmUyZC9cclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgdHdvIExpbmVzIGludGVyc2VjdC4gSWYgdGhlIExpbmVzIGFyZSBpZGVudGljYWwsIHRoZXkgd2lsbCBiZSB0cmVhdGVkIGFzIHBhcmFsbGVsIGFuZCB0aHVzIG5vbi1pbnRlcnNlY3RpbmcuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5JbnRlcnNlY3RzLkxpbmVUb0xpbmVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uTGluZX0gbGluZTEgLSBUaGUgZmlyc3QgTGluZSB0byBjaGVjay5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lMiAtIFRoZSBzZWNvbmQgTGluZSB0byBjaGVjay5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2ludH0gW291dF0gLSBBIFBvaW50IGluIHdoaWNoIHRvIG9wdGlvbmFsbHkgc3RvcmUgdGhlIHBvaW50IG9mIGludGVyc2VjdGlvbi5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB0d28gTGluZXMgaW50ZXJzZWN0LCBhbmQgdGhlIGBvdXRgIG9iamVjdCB3aWxsIGJlIHBvcHVsYXRlZCwgaWYgZ2l2ZW4uIE90aGVyd2lzZSwgYGZhbHNlYC5cclxuICovXHJcbnZhciBMaW5lVG9MaW5lID0gZnVuY3Rpb24gKGxpbmUxLCBsaW5lMiwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFBvaW50KCk7IH1cclxuXHJcbiAgICB2YXIgeDEgPSBsaW5lMS54MTtcclxuICAgIHZhciB5MSA9IGxpbmUxLnkxO1xyXG4gICAgdmFyIHgyID0gbGluZTEueDI7XHJcbiAgICB2YXIgeTIgPSBsaW5lMS55MjtcclxuXHJcbiAgICB2YXIgeDMgPSBsaW5lMi54MTtcclxuICAgIHZhciB5MyA9IGxpbmUyLnkxO1xyXG4gICAgdmFyIHg0ID0gbGluZTIueDI7XHJcbiAgICB2YXIgeTQgPSBsaW5lMi55MjtcclxuXHJcbiAgICB2YXIgbnVtQSA9ICh4NCAtIHgzKSAqICh5MSAtIHkzKSAtICh5NCAtIHkzKSAqICh4MSAtIHgzKTtcclxuICAgIHZhciBudW1CID0gKHgyIC0geDEpICogKHkxIC0geTMpIC0gKHkyIC0geTEpICogKHgxIC0geDMpO1xyXG4gICAgdmFyIGRlTm9tID0gKHk0IC0geTMpICogKHgyIC0geDEpIC0gKHg0IC0geDMpICogKHkyIC0geTEpO1xyXG5cclxuICAgIC8vICBNYWtlIHN1cmUgdGhlcmUgaXMgbm90IGEgZGl2aXNpb24gYnkgemVybyAtIHRoaXMgYWxzbyBpbmRpY2F0ZXMgdGhhdCB0aGUgbGluZXMgYXJlIHBhcmFsbGVsLlxyXG4gICAgLy8gIElmIG51bUEgYW5kIG51bUIgd2VyZSBib3RoIGVxdWFsIHRvIHplcm8gdGhlIGxpbmVzIHdvdWxkIGJlIG9uIHRvcCBvZiBlYWNoIG90aGVyIChjb2luY2lkZW50YWwpLlxyXG4gICAgLy8gIFRoaXMgY2hlY2sgaXMgbm90IGRvbmUgYmVjYXVzZSBpdCBpcyBub3QgbmVjZXNzYXJ5IGZvciB0aGlzIGltcGxlbWVudGF0aW9uICh0aGUgcGFyYWxsZWwgY2hlY2sgYWNjb3VudHMgZm9yIHRoaXMpLlxyXG5cclxuICAgIGlmIChkZU5vbSA9PT0gMClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIENhbGN1bGF0ZSB0aGUgaW50ZXJtZWRpYXRlIGZyYWN0aW9uYWwgcG9pbnQgdGhhdCB0aGUgbGluZXMgcG90ZW50aWFsbHkgaW50ZXJzZWN0LlxyXG5cclxuICAgIHZhciB1QSA9IG51bUEgLyBkZU5vbTtcclxuICAgIHZhciB1QiA9IG51bUIgLyBkZU5vbTtcclxuXHJcbiAgICAvLyAgVGhlIGZyYWN0aW9uYWwgcG9pbnQgd2lsbCBiZSBiZXR3ZWVuIDAgYW5kIDEgaW5jbHVzaXZlIGlmIHRoZSBsaW5lcyBpbnRlcnNlY3QuXHJcbiAgICAvLyAgSWYgdGhlIGZyYWN0aW9uYWwgY2FsY3VsYXRpb24gaXMgbGFyZ2VyIHRoYW4gMSBvciBzbWFsbGVyIHRoYW4gMCB0aGUgbGluZXMgd291bGQgbmVlZCB0byBiZSBsb25nZXIgdG8gaW50ZXJzZWN0LlxyXG5cclxuICAgIGlmICh1QSA+PSAwICYmIHVBIDw9IDEgJiYgdUIgPj0gMCAmJiB1QiA8PSAxKVxyXG4gICAge1xyXG4gICAgICAgIG91dC54ID0geDEgKyAodUEgKiAoeDIgLSB4MSkpO1xyXG4gICAgICAgIG91dC55ID0geTEgKyAodUEgKiAoeTIgLSB5MSkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IExpbmVUb0xpbmU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/LineToLine.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/intersects/LineToRectangle.js":
/*!********************************************************************!*\
!*** ./node_modules/phaser/src/geom/intersects/LineToRectangle.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Checks for intersection between the Line and a Rectangle shape, or a rectangle-like\r\n * object, with public `x`, `y`, `right` and `bottom` properties, such as a Sprite or Body.\r\n *\r\n * An intersection is considered valid if:\r\n *\r\n * The line starts within, or ends within, the Rectangle.\r\n * The line segment intersects one of the 4 rectangle edges.\r\n *\r\n * The for the purposes of this function rectangles are considered 'solid'.\r\n *\r\n * @function Phaser.Geom.Intersects.LineToRectangle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The Line to check for intersection.\r\n * @param {(Phaser.Geom.Rectangle|object)} rect - The Rectangle to check for intersection.\r\n *\r\n * @return {boolean} `true` if the Line and the Rectangle intersect, `false` otherwise.\r\n */\r\nvar LineToRectangle = function (line, rect)\r\n{\r\n var x1 = line.x1;\r\n var y1 = line.y1;\r\n\r\n var x2 = line.x2;\r\n var y2 = line.y2;\r\n\r\n var bx1 = rect.x;\r\n var by1 = rect.y;\r\n var bx2 = rect.right;\r\n var by2 = rect.bottom;\r\n\r\n var t = 0;\r\n\r\n // If the start or end of the line is inside the rect then we assume\r\n // collision, as rects are solid for our use-case.\r\n\r\n if ((x1 >= bx1 && x1 <= bx2 && y1 >= by1 && y1 <= by2) ||\r\n (x2 >= bx1 && x2 <= bx2 && y2 >= by1 && y2 <= by2))\r\n {\r\n return true;\r\n }\r\n\r\n if (x1 < bx1 && x2 >= bx1)\r\n {\r\n // Left edge\r\n t = y1 + (y2 - y1) * (bx1 - x1) / (x2 - x1);\r\n\r\n if (t > by1 && t <= by2)\r\n {\r\n return true;\r\n }\r\n }\r\n else if (x1 > bx2 && x2 <= bx2)\r\n {\r\n // Right edge\r\n t = y1 + (y2 - y1) * (bx2 - x1) / (x2 - x1);\r\n\r\n if (t >= by1 && t <= by2)\r\n {\r\n return true;\r\n }\r\n }\r\n\r\n if (y1 < by1 && y2 >= by1)\r\n {\r\n // Top edge\r\n t = x1 + (x2 - x1) * (by1 - y1) / (y2 - y1);\r\n\r\n if (t >= bx1 && t <= bx2)\r\n {\r\n return true;\r\n }\r\n }\r\n else if (y1 > by2 && y2 <= by2)\r\n {\r\n // Bottom edge\r\n t = x1 + (x2 - x1) * (by2 - y1) / (y2 - y1);\r\n\r\n if (t >= bx1 && t <= bx2)\r\n {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n};\r\n\r\nmodule.exports = LineToRectangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvTGluZVRvUmVjdGFuZ2xlLmpzPzlkM2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLCtCQUErQjtBQUMxQztBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvTGluZVRvUmVjdGFuZ2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2hlY2tzIGZvciBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgTGluZSBhbmQgYSBSZWN0YW5nbGUgc2hhcGUsIG9yIGEgcmVjdGFuZ2xlLWxpa2VcclxuICogb2JqZWN0LCB3aXRoIHB1YmxpYyBgeGAsIGB5YCwgYHJpZ2h0YCBhbmQgYGJvdHRvbWAgcHJvcGVydGllcywgc3VjaCBhcyBhIFNwcml0ZSBvciBCb2R5LlxyXG4gKlxyXG4gKiBBbiBpbnRlcnNlY3Rpb24gaXMgY29uc2lkZXJlZCB2YWxpZCBpZjpcclxuICpcclxuICogVGhlIGxpbmUgc3RhcnRzIHdpdGhpbiwgb3IgZW5kcyB3aXRoaW4sIHRoZSBSZWN0YW5nbGUuXHJcbiAqIFRoZSBsaW5lIHNlZ21lbnQgaW50ZXJzZWN0cyBvbmUgb2YgdGhlIDQgcmVjdGFuZ2xlIGVkZ2VzLlxyXG4gKlxyXG4gKiBUaGUgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGZ1bmN0aW9uIHJlY3RhbmdsZXMgYXJlIGNvbnNpZGVyZWQgJ3NvbGlkJy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkludGVyc2VjdHMuTGluZVRvUmVjdGFuZ2xlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgTGluZSB0byBjaGVjayBmb3IgaW50ZXJzZWN0aW9uLlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5SZWN0YW5nbGV8b2JqZWN0KX0gcmVjdCAtIFRoZSBSZWN0YW5nbGUgdG8gY2hlY2sgZm9yIGludGVyc2VjdGlvbi5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBMaW5lIGFuZCB0aGUgUmVjdGFuZ2xlIGludGVyc2VjdCwgYGZhbHNlYCBvdGhlcndpc2UuXHJcbiAqL1xyXG52YXIgTGluZVRvUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGxpbmUsIHJlY3QpXHJcbntcclxuICAgIHZhciB4MSA9IGxpbmUueDE7XHJcbiAgICB2YXIgeTEgPSBsaW5lLnkxO1xyXG5cclxuICAgIHZhciB4MiA9IGxpbmUueDI7XHJcbiAgICB2YXIgeTIgPSBsaW5lLnkyO1xyXG5cclxuICAgIHZhciBieDEgPSByZWN0Lng7XHJcbiAgICB2YXIgYnkxID0gcmVjdC55O1xyXG4gICAgdmFyIGJ4MiA9IHJlY3QucmlnaHQ7XHJcbiAgICB2YXIgYnkyID0gcmVjdC5ib3R0b207XHJcblxyXG4gICAgdmFyIHQgPSAwO1xyXG5cclxuICAgIC8vICBJZiB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSBsaW5lIGlzIGluc2lkZSB0aGUgcmVjdCB0aGVuIHdlIGFzc3VtZVxyXG4gICAgLy8gIGNvbGxpc2lvbiwgYXMgcmVjdHMgYXJlIHNvbGlkIGZvciBvdXIgdXNlLWNhc2UuXHJcblxyXG4gICAgaWYgKCh4MSA+PSBieDEgJiYgeDEgPD0gYngyICYmIHkxID49IGJ5MSAmJiB5MSA8PSBieTIpIHx8XHJcbiAgICAgICAgKHgyID49IGJ4MSAmJiB4MiA8PSBieDIgJiYgeTIgPj0gYnkxICYmIHkyIDw9IGJ5MikpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHgxIDwgYngxICYmIHgyID49IGJ4MSlcclxuICAgIHtcclxuICAgICAgICAvLyAgTGVmdCBlZGdlXHJcbiAgICAgICAgdCA9IHkxICsgKHkyIC0geTEpICogKGJ4MSAtIHgxKSAvICh4MiAtIHgxKTtcclxuXHJcbiAgICAgICAgaWYgKHQgPiBieTEgJiYgdCA8PSBieTIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh4MSA+IGJ4MiAmJiB4MiA8PSBieDIpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFJpZ2h0IGVkZ2VcclxuICAgICAgICB0ID0geTEgKyAoeTIgLSB5MSkgKiAoYngyIC0geDEpIC8gKHgyIC0geDEpO1xyXG5cclxuICAgICAgICBpZiAodCA+PSBieTEgJiYgdCA8PSBieTIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHkxIDwgYnkxICYmIHkyID49IGJ5MSlcclxuICAgIHtcclxuICAgICAgICAvLyAgVG9wIGVkZ2VcclxuICAgICAgICB0ID0geDEgKyAoeDIgLSB4MSkgKiAoYnkxIC0geTEpIC8gKHkyIC0geTEpO1xyXG5cclxuICAgICAgICBpZiAodCA+PSBieDEgJiYgdCA8PSBieDIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh5MSA+IGJ5MiAmJiB5MiA8PSBieTIpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIEJvdHRvbSBlZGdlXHJcbiAgICAgICAgdCA9IHgxICsgKHgyIC0geDEpICogKGJ5MiAtIHkxKSAvICh5MiAtIHkxKTtcclxuXHJcbiAgICAgICAgaWYgKHQgPj0gYngxICYmIHQgPD0gYngyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTGluZVRvUmVjdGFuZ2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/LineToRectangle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/intersects/PointToLine.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/geom/intersects/PointToLine.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @author Florian Mertens\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Checks if the a Point falls between the two end-points of a Line, based on the given line thickness.\r\n * \r\n * Assumes that the line end points are circular, not square.\r\n *\r\n * @function Phaser.Geom.Intersects.PointToLine\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Geom.Point|any)} point - The point, or point-like object to check.\r\n * @param {Phaser.Geom.Line} line - The line segment to test for intersection on.\r\n * @param {number} [lineThickness=1] - The line thickness. Assumes that the line end points are circular.\r\n *\r\n * @return {boolean} `true` if the Point falls on the Line, otherwise `false`.\r\n */\r\nvar PointToLine = function (point, line, lineThickness)\r\n{\r\n if (lineThickness === undefined) { lineThickness = 1; }\r\n\r\n var x1 = line.x1;\r\n var y1 = line.y1;\r\n\r\n var x2 = line.x2;\r\n var y2 = line.y2;\r\n\r\n var px = point.x;\r\n var py = point.y;\r\n\r\n var L2 = (((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1)));\r\n\r\n if (L2 === 0)\r\n {\r\n return false;\r\n }\r\n\r\n var r = (((px - x1) * (x2 - x1)) + ((py - y1) * (y2 - y1))) / L2;\r\n\r\n // Assume line thickness is circular\r\n if (r < 0)\r\n {\r\n // Outside line1\r\n return (Math.sqrt(((x1 - px) * (x1 - px)) + ((y1 - py) * (y1 - py))) <= lineThickness);\r\n }\r\n else if ((r >= 0) && (r <= 1))\r\n {\r\n // On the line segment\r\n var s = (((y1 - py) * (x2 - x1)) - ((x1 - px) * (y2 - y1))) / L2;\r\n\r\n return (Math.abs(s) * Math.sqrt(L2) <= lineThickness);\r\n }\r\n else\r\n {\r\n // Outside line2\r\n return (Math.sqrt(((x2 - px) * (x2 - px)) + ((y2 - py) * (y2 - py))) <= lineThickness);\r\n }\r\n};\r\n\r\nmodule.exports = PointToLine;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvUG9pbnRUb0xpbmUuanM/Yjk2OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx3QkFBd0I7QUFDbkMsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxtQkFBbUI7O0FBRXpEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvUG9pbnRUb0xpbmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGF1dGhvciAgICAgICBGbG9yaWFuIE1lcnRlbnNcclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgdGhlIGEgUG9pbnQgZmFsbHMgYmV0d2VlbiB0aGUgdHdvIGVuZC1wb2ludHMgb2YgYSBMaW5lLCBiYXNlZCBvbiB0aGUgZ2l2ZW4gbGluZSB0aGlja25lc3MuXHJcbiAqIFxyXG4gKiBBc3N1bWVzIHRoYXQgdGhlIGxpbmUgZW5kIHBvaW50cyBhcmUgY2lyY3VsYXIsIG5vdCBzcXVhcmUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5JbnRlcnNlY3RzLlBvaW50VG9MaW5lXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxhbnkpfSBwb2ludCAtIFRoZSBwb2ludCwgb3IgcG9pbnQtbGlrZSBvYmplY3QgdG8gY2hlY2suXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uTGluZX0gbGluZSAtIFRoZSBsaW5lIHNlZ21lbnQgdG8gdGVzdCBmb3IgaW50ZXJzZWN0aW9uIG9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2xpbmVUaGlja25lc3M9MV0gLSBUaGUgbGluZSB0aGlja25lc3MuIEFzc3VtZXMgdGhhdCB0aGUgbGluZSBlbmQgcG9pbnRzIGFyZSBjaXJjdWxhci5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBQb2ludCBmYWxscyBvbiB0aGUgTGluZSwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAqL1xyXG52YXIgUG9pbnRUb0xpbmUgPSBmdW5jdGlvbiAocG9pbnQsIGxpbmUsIGxpbmVUaGlja25lc3MpXHJcbntcclxuICAgIGlmIChsaW5lVGhpY2tuZXNzID09PSB1bmRlZmluZWQpIHsgbGluZVRoaWNrbmVzcyA9IDE7IH1cclxuXHJcbiAgICB2YXIgeDEgPSBsaW5lLngxO1xyXG4gICAgdmFyIHkxID0gbGluZS55MTtcclxuXHJcbiAgICB2YXIgeDIgPSBsaW5lLngyO1xyXG4gICAgdmFyIHkyID0gbGluZS55MjtcclxuXHJcbiAgICB2YXIgcHggPSBwb2ludC54O1xyXG4gICAgdmFyIHB5ID0gcG9pbnQueTtcclxuXHJcbiAgICB2YXIgTDIgPSAoKCh4MiAtIHgxKSAqICh4MiAtIHgxKSkgKyAoKHkyIC0geTEpICogKHkyIC0geTEpKSk7XHJcblxyXG4gICAgaWYgKEwyID09PSAwKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgciA9ICgoKHB4IC0geDEpICogKHgyIC0geDEpKSArICgocHkgLSB5MSkgKiAoeTIgLSB5MSkpKSAvIEwyO1xyXG5cclxuICAgIC8vICBBc3N1bWUgbGluZSB0aGlja25lc3MgaXMgY2lyY3VsYXJcclxuICAgIGlmIChyIDwgMClcclxuICAgIHtcclxuICAgICAgICAvLyAgT3V0c2lkZSBsaW5lMVxyXG4gICAgICAgIHJldHVybiAoTWF0aC5zcXJ0KCgoeDEgLSBweCkgKiAoeDEgLSBweCkpICsgKCh5MSAtIHB5KSAqICh5MSAtIHB5KSkpIDw9IGxpbmVUaGlja25lc3MpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoKHIgPj0gMCkgJiYgKHIgPD0gMSkpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIE9uIHRoZSBsaW5lIHNlZ21lbnRcclxuICAgICAgICB2YXIgcyA9ICgoKHkxIC0gcHkpICogKHgyIC0geDEpKSAtICgoeDEgLSBweCkgKiAoeTIgLSB5MSkpKSAvIEwyO1xyXG5cclxuICAgICAgICByZXR1cm4gKE1hdGguYWJzKHMpICogTWF0aC5zcXJ0KEwyKSA8PSBsaW5lVGhpY2tuZXNzKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICAvLyAgT3V0c2lkZSBsaW5lMlxyXG4gICAgICAgIHJldHVybiAoTWF0aC5zcXJ0KCgoeDIgLSBweCkgKiAoeDIgLSBweCkpICsgKCh5MiAtIHB5KSAqICh5MiAtIHB5KSkpIDw9IGxpbmVUaGlja25lc3MpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQb2ludFRvTGluZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/PointToLine.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/intersects/PointToLineSegment.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/src/geom/intersects/PointToLineSegment.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar PointToLine = __webpack_require__(/*! ./PointToLine */ \"./node_modules/phaser/src/geom/intersects/PointToLine.js\");\r\n\r\n/**\r\n * Checks if a Point is located on the given line segment.\r\n *\r\n * @function Phaser.Geom.Intersects.PointToLineSegment\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Point} point - The Point to check for intersection.\r\n * @param {Phaser.Geom.Line} line - The line segment to check for intersection.\r\n *\r\n * @return {boolean} `true` if the Point is on the given line segment, otherwise `false`.\r\n */\r\nvar PointToLineSegment = function (point, line)\r\n{\r\n if (!PointToLine(point, line))\r\n {\r\n return false;\r\n }\r\n\r\n var xMin = Math.min(line.x1, line.x2);\r\n var xMax = Math.max(line.x1, line.x2);\r\n var yMin = Math.min(line.y1, line.y2);\r\n var yMax = Math.max(line.y1, line.y2);\r\n\r\n return ((point.x >= xMin && point.x <= xMax) && (point.y >= yMin && point.y <= yMax));\r\n};\r\n\r\nmodule.exports = PointToLineSegment;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvUG9pbnRUb0xpbmVTZWdtZW50LmpzP2QxOWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLCtFQUFlOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QixXQUFXLGlCQUFpQjtBQUM1QjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9pbnRlcnNlY3RzL1BvaW50VG9MaW5lU2VnbWVudC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBvaW50VG9MaW5lID0gcmVxdWlyZSgnLi9Qb2ludFRvTGluZScpO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBpZiBhIFBvaW50IGlzIGxvY2F0ZWQgb24gdGhlIGdpdmVuIGxpbmUgc2VnbWVudC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkludGVyc2VjdHMuUG9pbnRUb0xpbmVTZWdtZW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBwb2ludCAtIFRoZSBQb2ludCB0byBjaGVjayBmb3IgaW50ZXJzZWN0aW9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgbGluZSBzZWdtZW50IHRvIGNoZWNrIGZvciBpbnRlcnNlY3Rpb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgUG9pbnQgaXMgb24gdGhlIGdpdmVuIGxpbmUgc2VnbWVudCwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAqL1xyXG52YXIgUG9pbnRUb0xpbmVTZWdtZW50ID0gZnVuY3Rpb24gKHBvaW50LCBsaW5lKVxyXG57XHJcbiAgICBpZiAoIVBvaW50VG9MaW5lKHBvaW50LCBsaW5lKSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHhNaW4gPSBNYXRoLm1pbihsaW5lLngxLCBsaW5lLngyKTtcclxuICAgIHZhciB4TWF4ID0gTWF0aC5tYXgobGluZS54MSwgbGluZS54Mik7XHJcbiAgICB2YXIgeU1pbiA9IE1hdGgubWluKGxpbmUueTEsIGxpbmUueTIpO1xyXG4gICAgdmFyIHlNYXggPSBNYXRoLm1heChsaW5lLnkxLCBsaW5lLnkyKTtcclxuXHJcbiAgICByZXR1cm4gKChwb2ludC54ID49IHhNaW4gJiYgcG9pbnQueCA8PSB4TWF4KSAmJiAocG9pbnQueSA+PSB5TWluICYmIHBvaW50LnkgPD0geU1heCkpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQb2ludFRvTGluZVNlZ21lbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/PointToLineSegment.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/intersects/RectangleToRectangle.js":
/*!*************************************************************************!*\
!*** ./node_modules/phaser/src/geom/intersects/RectangleToRectangle.js ***!
\*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Checks if two Rectangles intersect.\r\n *\r\n * A Rectangle intersects another Rectangle if any part of its bounds is within the other Rectangle's bounds.\r\n * As such, the two Rectangles are considered \"solid\".\r\n * A Rectangle with no width or no height will never intersect another Rectangle.\r\n *\r\n * @function Phaser.Geom.Intersects.RectangleToRectangle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rectA - The first Rectangle to check for intersection.\r\n * @param {Phaser.Geom.Rectangle} rectB - The second Rectangle to check for intersection.\r\n *\r\n * @return {boolean} `true` if the two Rectangles intersect, otherwise `false`.\r\n */\r\nvar RectangleToRectangle = function (rectA, rectB)\r\n{\r\n if (rectA.width <= 0 || rectA.height <= 0 || rectB.width <= 0 || rectB.height <= 0)\r\n {\r\n return false;\r\n }\r\n\r\n return !(rectA.right < rectB.x || rectA.bottom < rectB.y || rectA.x > rectB.right || rectA.y > rectB.bottom);\r\n};\r\n\r\nmodule.exports = RectangleToRectangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvUmVjdGFuZ2xlVG9SZWN0YW5nbGUuanM/YWM4MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLHNCQUFzQjtBQUNqQztBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9pbnRlcnNlY3RzL1JlY3RhbmdsZVRvUmVjdGFuZ2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2hlY2tzIGlmIHR3byBSZWN0YW5nbGVzIGludGVyc2VjdC5cclxuICpcclxuICogQSBSZWN0YW5nbGUgaW50ZXJzZWN0cyBhbm90aGVyIFJlY3RhbmdsZSBpZiBhbnkgcGFydCBvZiBpdHMgYm91bmRzIGlzIHdpdGhpbiB0aGUgb3RoZXIgUmVjdGFuZ2xlJ3MgYm91bmRzLlxyXG4gKiBBcyBzdWNoLCB0aGUgdHdvIFJlY3RhbmdsZXMgYXJlIGNvbnNpZGVyZWQgXCJzb2xpZFwiLlxyXG4gKiBBIFJlY3RhbmdsZSB3aXRoIG5vIHdpZHRoIG9yIG5vIGhlaWdodCB3aWxsIG5ldmVyIGludGVyc2VjdCBhbm90aGVyIFJlY3RhbmdsZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkludGVyc2VjdHMuUmVjdGFuZ2xlVG9SZWN0YW5nbGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0QSAtIFRoZSBmaXJzdCBSZWN0YW5nbGUgdG8gY2hlY2sgZm9yIGludGVyc2VjdGlvbi5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3RCIC0gVGhlIHNlY29uZCBSZWN0YW5nbGUgdG8gY2hlY2sgZm9yIGludGVyc2VjdGlvbi5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB0d28gUmVjdGFuZ2xlcyBpbnRlcnNlY3QsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxudmFyIFJlY3RhbmdsZVRvUmVjdGFuZ2xlID0gZnVuY3Rpb24gKHJlY3RBLCByZWN0Qilcclxue1xyXG4gICAgaWYgKHJlY3RBLndpZHRoIDw9IDAgfHwgcmVjdEEuaGVpZ2h0IDw9IDAgfHwgcmVjdEIud2lkdGggPD0gMCB8fCByZWN0Qi5oZWlnaHQgPD0gMClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuICEocmVjdEEucmlnaHQgPCByZWN0Qi54IHx8IHJlY3RBLmJvdHRvbSA8IHJlY3RCLnkgfHwgcmVjdEEueCA+IHJlY3RCLnJpZ2h0IHx8IHJlY3RBLnkgPiByZWN0Qi5ib3R0b20pO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGVUb1JlY3RhbmdsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/RectangleToRectangle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/intersects/RectangleToTriangle.js":
/*!************************************************************************!*\
!*** ./node_modules/phaser/src/geom/intersects/RectangleToTriangle.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar LineToLine = __webpack_require__(/*! ./LineToLine */ \"./node_modules/phaser/src/geom/intersects/LineToLine.js\");\r\nvar Contains = __webpack_require__(/*! ../rectangle/Contains */ \"./node_modules/phaser/src/geom/rectangle/Contains.js\");\r\nvar ContainsArray = __webpack_require__(/*! ../triangle/ContainsArray */ \"./node_modules/phaser/src/geom/triangle/ContainsArray.js\");\r\nvar Decompose = __webpack_require__(/*! ../rectangle/Decompose */ \"./node_modules/phaser/src/geom/rectangle/Decompose.js\");\r\n\r\n/**\r\n * Checks for intersection between Rectangle shape and Triangle shape.\r\n *\r\n * @function Phaser.Geom.Intersects.RectangleToTriangle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - Rectangle object to test.\r\n * @param {Phaser.Geom.Triangle} triangle - Triangle object to test.\r\n *\r\n * @return {boolean} A value of `true` if objects intersect; otherwise `false`.\r\n */\r\nvar RectangleToTriangle = function (rect, triangle)\r\n{\r\n // First the cheapest ones:\r\n\r\n if (\r\n triangle.left > rect.right ||\r\n triangle.right < rect.left ||\r\n triangle.top > rect.bottom ||\r\n triangle.bottom < rect.top)\r\n {\r\n return false;\r\n }\r\n\r\n var triA = triangle.getLineA();\r\n var triB = triangle.getLineB();\r\n var triC = triangle.getLineC();\r\n\r\n // Are any of the triangle points within the rectangle?\r\n\r\n if (Contains(rect, triA.x1, triA.y1) || Contains(rect, triA.x2, triA.y2))\r\n {\r\n return true;\r\n }\r\n\r\n if (Contains(rect, triB.x1, triB.y1) || Contains(rect, triB.x2, triB.y2))\r\n {\r\n return true;\r\n }\r\n\r\n if (Contains(rect, triC.x1, triC.y1) || Contains(rect, triC.x2, triC.y2))\r\n {\r\n return true;\r\n }\r\n\r\n // Cheap tests over, now to see if any of the lines intersect ...\r\n\r\n var rectA = rect.getLineA();\r\n var rectB = rect.getLineB();\r\n var rectC = rect.getLineC();\r\n var rectD = rect.getLineD();\r\n\r\n if (LineToLine(triA, rectA) || LineToLine(triA, rectB) || LineToLine(triA, rectC) || LineToLine(triA, rectD))\r\n {\r\n return true;\r\n }\r\n\r\n if (LineToLine(triB, rectA) || LineToLine(triB, rectB) || LineToLine(triB, rectC) || LineToLine(triB, rectD))\r\n {\r\n return true;\r\n }\r\n\r\n if (LineToLine(triC, rectA) || LineToLine(triC, rectB) || LineToLine(triC, rectC) || LineToLine(triC, rectD))\r\n {\r\n return true;\r\n }\r\n\r\n // None of the lines intersect, so are any rectangle points within the triangle?\r\n\r\n var points = Decompose(rect);\r\n var within = ContainsArray(triangle, points, true);\r\n\r\n return (within.length > 0);\r\n};\r\n\r\nmodule.exports = RectangleToTriangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvUmVjdGFuZ2xlVG9UcmlhbmdsZS5qcz9mMTExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyw2RUFBYztBQUN2QyxlQUFlLG1CQUFPLENBQUMsbUZBQXVCO0FBQzlDLG9CQUFvQixtQkFBTyxDQUFDLDJGQUEyQjtBQUN2RCxnQkFBZ0IsbUJBQU8sQ0FBQyxxRkFBd0I7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcscUJBQXFCO0FBQ2hDO0FBQ0EsWUFBWSxRQUFRLHdDQUF3QztBQUM1RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvUmVjdGFuZ2xlVG9UcmlhbmdsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIExpbmVUb0xpbmUgPSByZXF1aXJlKCcuL0xpbmVUb0xpbmUnKTtcclxudmFyIENvbnRhaW5zID0gcmVxdWlyZSgnLi4vcmVjdGFuZ2xlL0NvbnRhaW5zJyk7XHJcbnZhciBDb250YWluc0FycmF5ID0gcmVxdWlyZSgnLi4vdHJpYW5nbGUvQ29udGFpbnNBcnJheScpO1xyXG52YXIgRGVjb21wb3NlID0gcmVxdWlyZSgnLi4vcmVjdGFuZ2xlL0RlY29tcG9zZScpO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBmb3IgaW50ZXJzZWN0aW9uIGJldHdlZW4gUmVjdGFuZ2xlIHNoYXBlIGFuZCBUcmlhbmdsZSBzaGFwZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkludGVyc2VjdHMuUmVjdGFuZ2xlVG9UcmlhbmdsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3QgLSBSZWN0YW5nbGUgb2JqZWN0IHRvIHRlc3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlIC0gVHJpYW5nbGUgb2JqZWN0IHRvIHRlc3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IEEgdmFsdWUgb2YgYHRydWVgIGlmIG9iamVjdHMgaW50ZXJzZWN0OyBvdGhlcndpc2UgYGZhbHNlYC5cclxuICovXHJcbnZhciBSZWN0YW5nbGVUb1RyaWFuZ2xlID0gZnVuY3Rpb24gKHJlY3QsIHRyaWFuZ2xlKVxyXG57XHJcbiAgICAvLyAgRmlyc3QgdGhlIGNoZWFwZXN0IG9uZXM6XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAgIHRyaWFuZ2xlLmxlZnQgPiByZWN0LnJpZ2h0IHx8XHJcbiAgICAgICAgdHJpYW5nbGUucmlnaHQgPCByZWN0LmxlZnQgfHxcclxuICAgICAgICB0cmlhbmdsZS50b3AgPiByZWN0LmJvdHRvbSB8fFxyXG4gICAgICAgIHRyaWFuZ2xlLmJvdHRvbSA8IHJlY3QudG9wKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgdHJpQSA9IHRyaWFuZ2xlLmdldExpbmVBKCk7XHJcbiAgICB2YXIgdHJpQiA9IHRyaWFuZ2xlLmdldExpbmVCKCk7XHJcbiAgICB2YXIgdHJpQyA9IHRyaWFuZ2xlLmdldExpbmVDKCk7XHJcblxyXG4gICAgLy8gIEFyZSBhbnkgb2YgdGhlIHRyaWFuZ2xlIHBvaW50cyB3aXRoaW4gdGhlIHJlY3RhbmdsZT9cclxuXHJcbiAgICBpZiAoQ29udGFpbnMocmVjdCwgdHJpQS54MSwgdHJpQS55MSkgfHwgQ29udGFpbnMocmVjdCwgdHJpQS54MiwgdHJpQS55MikpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKENvbnRhaW5zKHJlY3QsIHRyaUIueDEsIHRyaUIueTEpIHx8IENvbnRhaW5zKHJlY3QsIHRyaUIueDIsIHRyaUIueTIpKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChDb250YWlucyhyZWN0LCB0cmlDLngxLCB0cmlDLnkxKSB8fCBDb250YWlucyhyZWN0LCB0cmlDLngyLCB0cmlDLnkyKSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgQ2hlYXAgdGVzdHMgb3Zlciwgbm93IHRvIHNlZSBpZiBhbnkgb2YgdGhlIGxpbmVzIGludGVyc2VjdCAuLi5cclxuXHJcbiAgICB2YXIgcmVjdEEgPSByZWN0LmdldExpbmVBKCk7XHJcbiAgICB2YXIgcmVjdEIgPSByZWN0LmdldExpbmVCKCk7XHJcbiAgICB2YXIgcmVjdEMgPSByZWN0LmdldExpbmVDKCk7XHJcbiAgICB2YXIgcmVjdEQgPSByZWN0LmdldExpbmVEKCk7XHJcblxyXG4gICAgaWYgKExpbmVUb0xpbmUodHJpQSwgcmVjdEEpIHx8IExpbmVUb0xpbmUodHJpQSwgcmVjdEIpIHx8IExpbmVUb0xpbmUodHJpQSwgcmVjdEMpIHx8IExpbmVUb0xpbmUodHJpQSwgcmVjdEQpKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChMaW5lVG9MaW5lKHRyaUIsIHJlY3RBKSB8fCBMaW5lVG9MaW5lKHRyaUIsIHJlY3RCKSB8fCBMaW5lVG9MaW5lKHRyaUIsIHJlY3RDKSB8fCBMaW5lVG9MaW5lKHRyaUIsIHJlY3REKSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoTGluZVRvTGluZSh0cmlDLCByZWN0QSkgfHwgTGluZVRvTGluZSh0cmlDLCByZWN0QikgfHwgTGluZVRvTGluZSh0cmlDLCByZWN0QykgfHwgTGluZVRvTGluZSh0cmlDLCByZWN0RCkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIE5vbmUgb2YgdGhlIGxpbmVzIGludGVyc2VjdCwgc28gYXJlIGFueSByZWN0YW5nbGUgcG9pbnRzIHdpdGhpbiB0aGUgdHJpYW5nbGU/XHJcblxyXG4gICAgdmFyIHBvaW50cyA9IERlY29tcG9zZShyZWN0KTtcclxuICAgIHZhciB3aXRoaW4gPSBDb250YWluc0FycmF5KHRyaWFuZ2xlLCBwb2ludHMsIHRydWUpO1xyXG5cclxuICAgIHJldHVybiAod2l0aGluLmxlbmd0aCA+IDApO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGVUb1RyaWFuZ2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/RectangleToTriangle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/intersects/RectangleToValues.js":
/*!**********************************************************************!*\
!*** ./node_modules/phaser/src/geom/intersects/RectangleToValues.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Check if rectangle intersects with values.\r\n *\r\n * @function Phaser.Geom.Intersects.RectangleToValues\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The rectangle object\r\n * @param {number} left - The x coordinate of the left of the Rectangle.\r\n * @param {number} right - The x coordinate of the right of the Rectangle.\r\n * @param {number} top - The y coordinate of the top of the Rectangle.\r\n * @param {number} bottom - The y coordinate of the bottom of the Rectangle.\r\n * @param {number} [tolerance=0] - Tolerance allowed in the calculation, expressed in pixels.\r\n *\r\n * @return {boolean} Returns true if there is an intersection.\r\n */\r\nvar RectangleToValues = function (rect, left, right, top, bottom, tolerance)\r\n{\r\n if (tolerance === undefined) { tolerance = 0; }\r\n\r\n return !(\r\n left > rect.right + tolerance ||\r\n right < rect.left - tolerance ||\r\n top > rect.bottom + tolerance ||\r\n bottom < rect.top - tolerance\r\n );\r\n};\r\n\r\nmodule.exports = RectangleToValues;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvUmVjdGFuZ2xlVG9WYWx1ZXMuanM/NjZiZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsZUFBZTs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvUmVjdGFuZ2xlVG9WYWx1ZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiByZWN0YW5nbGUgaW50ZXJzZWN0cyB3aXRoIHZhbHVlcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkludGVyc2VjdHMuUmVjdGFuZ2xlVG9WYWx1ZXNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0IC0gVGhlIHJlY3RhbmdsZSBvYmplY3RcclxuICogQHBhcmFtIHtudW1iZXJ9IGxlZnQgLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBsZWZ0IG9mIHRoZSBSZWN0YW5nbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByaWdodCAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHJpZ2h0IG9mIHRoZSBSZWN0YW5nbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB0b3AgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSB0b3Agb2YgdGhlIFJlY3RhbmdsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IGJvdHRvbSAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGJvdHRvbSBvZiB0aGUgUmVjdGFuZ2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3RvbGVyYW5jZT0wXSAtIFRvbGVyYW5jZSBhbGxvd2VkIGluIHRoZSBjYWxjdWxhdGlvbiwgZXhwcmVzc2VkIGluIHBpeGVscy5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGludGVyc2VjdGlvbi5cclxuICovXHJcbnZhciBSZWN0YW5nbGVUb1ZhbHVlcyA9IGZ1bmN0aW9uIChyZWN0LCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIHRvbGVyYW5jZSlcclxue1xyXG4gICAgaWYgKHRvbGVyYW5jZSA9PT0gdW5kZWZpbmVkKSB7IHRvbGVyYW5jZSA9IDA7IH1cclxuXHJcbiAgICByZXR1cm4gIShcclxuICAgICAgICBsZWZ0ID4gcmVjdC5yaWdodCArIHRvbGVyYW5jZSB8fFxyXG4gICAgICAgIHJpZ2h0IDwgcmVjdC5sZWZ0IC0gdG9sZXJhbmNlIHx8XHJcbiAgICAgICAgdG9wID4gcmVjdC5ib3R0b20gKyB0b2xlcmFuY2UgfHxcclxuICAgICAgICBib3R0b20gPCByZWN0LnRvcCAtIHRvbGVyYW5jZVxyXG4gICAgKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmVjdGFuZ2xlVG9WYWx1ZXM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/RectangleToValues.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/intersects/TriangleToCircle.js":
/*!*********************************************************************!*\
!*** ./node_modules/phaser/src/geom/intersects/TriangleToCircle.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar LineToCircle = __webpack_require__(/*! ./LineToCircle */ \"./node_modules/phaser/src/geom/intersects/LineToCircle.js\");\r\nvar Contains = __webpack_require__(/*! ../triangle/Contains */ \"./node_modules/phaser/src/geom/triangle/Contains.js\");\r\n\r\n/**\r\n * Checks if a Triangle and a Circle intersect.\r\n *\r\n * A Circle intersects a Triangle if its center is located within it or if any of the Triangle's sides intersect the Circle. As such, the Triangle and the Circle are considered \"solid\" for the intersection.\r\n *\r\n * @function Phaser.Geom.Intersects.TriangleToCircle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to check for intersection.\r\n * @param {Phaser.Geom.Circle} circle - The Circle to check for intersection.\r\n *\r\n * @return {boolean} `true` if the Triangle and the `Circle` intersect, otherwise `false`.\r\n */\r\nvar TriangleToCircle = function (triangle, circle)\r\n{\r\n // First the cheapest ones:\r\n\r\n if (\r\n triangle.left > circle.right ||\r\n triangle.right < circle.left ||\r\n triangle.top > circle.bottom ||\r\n triangle.bottom < circle.top)\r\n {\r\n return false;\r\n }\r\n\r\n if (Contains(triangle, circle.x, circle.y))\r\n {\r\n return true;\r\n }\r\n\r\n if (LineToCircle(triangle.getLineA(), circle))\r\n {\r\n return true;\r\n }\r\n\r\n if (LineToCircle(triangle.getLineB(), circle))\r\n {\r\n return true;\r\n }\r\n\r\n if (LineToCircle(triangle.getLineC(), circle))\r\n {\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nmodule.exports = TriangleToCircle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvVHJpYW5nbGVUb0NpcmNsZS5qcz83YmZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxtQkFBbUIsbUJBQU8sQ0FBQyxpRkFBZ0I7QUFDM0MsZUFBZSxtQkFBTyxDQUFDLGlGQUFzQjs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsbUJBQW1CO0FBQzlCO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vaW50ZXJzZWN0cy9UcmlhbmdsZVRvQ2lyY2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTGluZVRvQ2lyY2xlID0gcmVxdWlyZSgnLi9MaW5lVG9DaXJjbGUnKTtcclxudmFyIENvbnRhaW5zID0gcmVxdWlyZSgnLi4vdHJpYW5nbGUvQ29udGFpbnMnKTtcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgYSBUcmlhbmdsZSBhbmQgYSBDaXJjbGUgaW50ZXJzZWN0LlxyXG4gKlxyXG4gKiBBIENpcmNsZSBpbnRlcnNlY3RzIGEgVHJpYW5nbGUgaWYgaXRzIGNlbnRlciBpcyBsb2NhdGVkIHdpdGhpbiBpdCBvciBpZiBhbnkgb2YgdGhlIFRyaWFuZ2xlJ3Mgc2lkZXMgaW50ZXJzZWN0IHRoZSBDaXJjbGUuIEFzIHN1Y2gsIHRoZSBUcmlhbmdsZSBhbmQgdGhlIENpcmNsZSBhcmUgY29uc2lkZXJlZCBcInNvbGlkXCIgZm9yIHRoZSBpbnRlcnNlY3Rpb24uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5JbnRlcnNlY3RzLlRyaWFuZ2xlVG9DaXJjbGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlIC0gVGhlIFRyaWFuZ2xlIHRvIGNoZWNrIGZvciBpbnRlcnNlY3Rpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uQ2lyY2xlfSBjaXJjbGUgLSBUaGUgQ2lyY2xlIHRvIGNoZWNrIGZvciBpbnRlcnNlY3Rpb24uXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgVHJpYW5nbGUgYW5kIHRoZSBgQ2lyY2xlYCBpbnRlcnNlY3QsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxudmFyIFRyaWFuZ2xlVG9DaXJjbGUgPSBmdW5jdGlvbiAodHJpYW5nbGUsIGNpcmNsZSlcclxue1xyXG4gICAgLy8gIEZpcnN0IHRoZSBjaGVhcGVzdCBvbmVzOlxyXG5cclxuICAgIGlmIChcclxuICAgICAgICB0cmlhbmdsZS5sZWZ0ID4gY2lyY2xlLnJpZ2h0IHx8XHJcbiAgICAgICAgdHJpYW5nbGUucmlnaHQgPCBjaXJjbGUubGVmdCB8fFxyXG4gICAgICAgIHRyaWFuZ2xlLnRvcCA+IGNpcmNsZS5ib3R0b20gfHxcclxuICAgICAgICB0cmlhbmdsZS5ib3R0b20gPCBjaXJjbGUudG9wKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoQ29udGFpbnModHJpYW5nbGUsIGNpcmNsZS54LCBjaXJjbGUueSkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKExpbmVUb0NpcmNsZSh0cmlhbmdsZS5nZXRMaW5lQSgpLCBjaXJjbGUpKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChMaW5lVG9DaXJjbGUodHJpYW5nbGUuZ2V0TGluZUIoKSwgY2lyY2xlKSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoTGluZVRvQ2lyY2xlKHRyaWFuZ2xlLmdldExpbmVDKCksIGNpcmNsZSkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUcmlhbmdsZVRvQ2lyY2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/TriangleToCircle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/intersects/TriangleToLine.js":
/*!*******************************************************************!*\
!*** ./node_modules/phaser/src/geom/intersects/TriangleToLine.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Contains = __webpack_require__(/*! ../triangle/Contains */ \"./node_modules/phaser/src/geom/triangle/Contains.js\");\r\nvar LineToLine = __webpack_require__(/*! ./LineToLine */ \"./node_modules/phaser/src/geom/intersects/LineToLine.js\");\r\n\r\n/**\r\n * Checks if a Triangle and a Line intersect.\r\n * \r\n * The Line intersects the Triangle if it starts inside of it, ends inside of it, or crosses any of the Triangle's sides. Thus, the Triangle is considered \"solid\".\r\n *\r\n * @function Phaser.Geom.Intersects.TriangleToLine\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to check with.\r\n * @param {Phaser.Geom.Line} line - The Line to check with.\r\n *\r\n * @return {boolean} `true` if the Triangle and the Line intersect, otherwise `false`.\r\n */\r\nvar TriangleToLine = function (triangle, line)\r\n{\r\n // If the Triangle contains either the start or end point of the line, it intersects\r\n if (Contains(triangle, line.getPointA()) || Contains(triangle, line.getPointB()))\r\n {\r\n return true;\r\n }\r\n\r\n // Now check the line against each line of the Triangle\r\n if (LineToLine(triangle.getLineA(), line))\r\n {\r\n return true;\r\n }\r\n\r\n if (LineToLine(triangle.getLineB(), line))\r\n {\r\n return true;\r\n }\r\n\r\n if (LineToLine(triangle.getLineC(), line))\r\n {\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nmodule.exports = TriangleToLine;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvVHJpYW5nbGVUb0xpbmUuanM/YzZlNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLGlGQUFzQjtBQUM3QyxpQkFBaUIsbUJBQU8sQ0FBQyw2RUFBYzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9pbnRlcnNlY3RzL1RyaWFuZ2xlVG9MaW5lLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ29udGFpbnMgPSByZXF1aXJlKCcuLi90cmlhbmdsZS9Db250YWlucycpO1xyXG52YXIgTGluZVRvTGluZSA9IHJlcXVpcmUoJy4vTGluZVRvTGluZScpO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBpZiBhIFRyaWFuZ2xlIGFuZCBhIExpbmUgaW50ZXJzZWN0LlxyXG4gKiBcclxuICogVGhlIExpbmUgaW50ZXJzZWN0cyB0aGUgVHJpYW5nbGUgaWYgaXQgc3RhcnRzIGluc2lkZSBvZiBpdCwgZW5kcyBpbnNpZGUgb2YgaXQsIG9yIGNyb3NzZXMgYW55IG9mIHRoZSBUcmlhbmdsZSdzIHNpZGVzLiBUaHVzLCB0aGUgVHJpYW5nbGUgaXMgY29uc2lkZXJlZCBcInNvbGlkXCIuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5JbnRlcnNlY3RzLlRyaWFuZ2xlVG9MaW5lXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSB0cmlhbmdsZSAtIFRoZSBUcmlhbmdsZSB0byBjaGVjayB3aXRoLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgTGluZSB0byBjaGVjayB3aXRoLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIFRyaWFuZ2xlIGFuZCB0aGUgTGluZSBpbnRlcnNlY3QsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxudmFyIFRyaWFuZ2xlVG9MaW5lID0gZnVuY3Rpb24gKHRyaWFuZ2xlLCBsaW5lKVxyXG57XHJcbiAgICAvLyAgSWYgdGhlIFRyaWFuZ2xlIGNvbnRhaW5zIGVpdGhlciB0aGUgc3RhcnQgb3IgZW5kIHBvaW50IG9mIHRoZSBsaW5lLCBpdCBpbnRlcnNlY3RzXHJcbiAgICBpZiAoQ29udGFpbnModHJpYW5nbGUsIGxpbmUuZ2V0UG9pbnRBKCkpIHx8IENvbnRhaW5zKHRyaWFuZ2xlLCBsaW5lLmdldFBvaW50QigpKSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgTm93IGNoZWNrIHRoZSBsaW5lIGFnYWluc3QgZWFjaCBsaW5lIG9mIHRoZSBUcmlhbmdsZVxyXG4gICAgaWYgKExpbmVUb0xpbmUodHJpYW5nbGUuZ2V0TGluZUEoKSwgbGluZSkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKExpbmVUb0xpbmUodHJpYW5nbGUuZ2V0TGluZUIoKSwgbGluZSkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKExpbmVUb0xpbmUodHJpYW5nbGUuZ2V0TGluZUMoKSwgbGluZSkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUcmlhbmdsZVRvTGluZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/TriangleToLine.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/intersects/TriangleToTriangle.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/src/geom/intersects/TriangleToTriangle.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar ContainsArray = __webpack_require__(/*! ../triangle/ContainsArray */ \"./node_modules/phaser/src/geom/triangle/ContainsArray.js\");\r\nvar Decompose = __webpack_require__(/*! ../triangle/Decompose */ \"./node_modules/phaser/src/geom/triangle/Decompose.js\");\r\nvar LineToLine = __webpack_require__(/*! ./LineToLine */ \"./node_modules/phaser/src/geom/intersects/LineToLine.js\");\r\n\r\n/**\r\n * Checks if two Triangles intersect.\r\n *\r\n * A Triangle intersects another Triangle if any pair of their lines intersects or if any point of one Triangle is within the other Triangle. Thus, the Triangles are considered \"solid\".\r\n *\r\n * @function Phaser.Geom.Intersects.TriangleToTriangle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangleA - The first Triangle to check for intersection.\r\n * @param {Phaser.Geom.Triangle} triangleB - The second Triangle to check for intersection.\r\n *\r\n * @return {boolean} `true` if the Triangles intersect, otherwise `false`.\r\n */\r\nvar TriangleToTriangle = function (triangleA, triangleB)\r\n{\r\n // First the cheapest ones:\r\n\r\n if (\r\n triangleA.left > triangleB.right ||\r\n triangleA.right < triangleB.left ||\r\n triangleA.top > triangleB.bottom ||\r\n triangleA.bottom < triangleB.top)\r\n {\r\n return false;\r\n }\r\n\r\n var lineAA = triangleA.getLineA();\r\n var lineAB = triangleA.getLineB();\r\n var lineAC = triangleA.getLineC();\r\n\r\n var lineBA = triangleB.getLineA();\r\n var lineBB = triangleB.getLineB();\r\n var lineBC = triangleB.getLineC();\r\n\r\n // Now check the lines against each line of TriangleB\r\n if (LineToLine(lineAA, lineBA) || LineToLine(lineAA, lineBB) || LineToLine(lineAA, lineBC))\r\n {\r\n return true;\r\n }\r\n\r\n if (LineToLine(lineAB, lineBA) || LineToLine(lineAB, lineBB) || LineToLine(lineAB, lineBC))\r\n {\r\n return true;\r\n }\r\n\r\n if (LineToLine(lineAC, lineBA) || LineToLine(lineAC, lineBB) || LineToLine(lineAC, lineBC))\r\n {\r\n return true;\r\n }\r\n\r\n // Nope, so check to see if any of the points of triangleA are within triangleB\r\n\r\n var points = Decompose(triangleA);\r\n var within = ContainsArray(triangleB, points, true);\r\n\r\n if (within.length > 0)\r\n {\r\n return true;\r\n }\r\n\r\n // Finally check to see if any of the points of triangleB are within triangleA\r\n\r\n points = Decompose(triangleB);\r\n within = ContainsArray(triangleA, points, true);\r\n\r\n if (within.length > 0)\r\n {\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nmodule.exports = TriangleToTriangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvVHJpYW5nbGVUb1RyaWFuZ2xlLmpzPzA2YjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLDJGQUEyQjtBQUN2RCxnQkFBZ0IsbUJBQU8sQ0FBQyxtRkFBdUI7QUFDL0MsaUJBQWlCLG1CQUFPLENBQUMsNkVBQWM7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLHFCQUFxQjtBQUNoQztBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vaW50ZXJzZWN0cy9UcmlhbmdsZVRvVHJpYW5nbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDb250YWluc0FycmF5ID0gcmVxdWlyZSgnLi4vdHJpYW5nbGUvQ29udGFpbnNBcnJheScpO1xyXG52YXIgRGVjb21wb3NlID0gcmVxdWlyZSgnLi4vdHJpYW5nbGUvRGVjb21wb3NlJyk7XHJcbnZhciBMaW5lVG9MaW5lID0gcmVxdWlyZSgnLi9MaW5lVG9MaW5lJyk7XHJcblxyXG4vKipcclxuICogQ2hlY2tzIGlmIHR3byBUcmlhbmdsZXMgaW50ZXJzZWN0LlxyXG4gKlxyXG4gKiBBIFRyaWFuZ2xlIGludGVyc2VjdHMgYW5vdGhlciBUcmlhbmdsZSBpZiBhbnkgcGFpciBvZiB0aGVpciBsaW5lcyBpbnRlcnNlY3RzIG9yIGlmIGFueSBwb2ludCBvZiBvbmUgVHJpYW5nbGUgaXMgd2l0aGluIHRoZSBvdGhlciBUcmlhbmdsZS4gVGh1cywgdGhlIFRyaWFuZ2xlcyBhcmUgY29uc2lkZXJlZCBcInNvbGlkXCIuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5JbnRlcnNlY3RzLlRyaWFuZ2xlVG9UcmlhbmdsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gdHJpYW5nbGVBIC0gVGhlIGZpcnN0IFRyaWFuZ2xlIHRvIGNoZWNrIGZvciBpbnRlcnNlY3Rpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlQiAtIFRoZSBzZWNvbmQgVHJpYW5nbGUgdG8gY2hlY2sgZm9yIGludGVyc2VjdGlvbi5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBUcmlhbmdsZXMgaW50ZXJzZWN0LCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICovXHJcbnZhciBUcmlhbmdsZVRvVHJpYW5nbGUgPSBmdW5jdGlvbiAodHJpYW5nbGVBLCB0cmlhbmdsZUIpXHJcbntcclxuICAgIC8vICBGaXJzdCB0aGUgY2hlYXBlc3Qgb25lczpcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICAgdHJpYW5nbGVBLmxlZnQgPiB0cmlhbmdsZUIucmlnaHQgfHxcclxuICAgICAgICB0cmlhbmdsZUEucmlnaHQgPCB0cmlhbmdsZUIubGVmdCB8fFxyXG4gICAgICAgIHRyaWFuZ2xlQS50b3AgPiB0cmlhbmdsZUIuYm90dG9tIHx8XHJcbiAgICAgICAgdHJpYW5nbGVBLmJvdHRvbSA8IHRyaWFuZ2xlQi50b3ApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBsaW5lQUEgPSB0cmlhbmdsZUEuZ2V0TGluZUEoKTtcclxuICAgIHZhciBsaW5lQUIgPSB0cmlhbmdsZUEuZ2V0TGluZUIoKTtcclxuICAgIHZhciBsaW5lQUMgPSB0cmlhbmdsZUEuZ2V0TGluZUMoKTtcclxuXHJcbiAgICB2YXIgbGluZUJBID0gdHJpYW5nbGVCLmdldExpbmVBKCk7XHJcbiAgICB2YXIgbGluZUJCID0gdHJpYW5nbGVCLmdldExpbmVCKCk7XHJcbiAgICB2YXIgbGluZUJDID0gdHJpYW5nbGVCLmdldExpbmVDKCk7XHJcblxyXG4gICAgLy8gIE5vdyBjaGVjayB0aGUgbGluZXMgYWdhaW5zdCBlYWNoIGxpbmUgb2YgVHJpYW5nbGVCXHJcbiAgICBpZiAoTGluZVRvTGluZShsaW5lQUEsIGxpbmVCQSkgfHwgTGluZVRvTGluZShsaW5lQUEsIGxpbmVCQikgfHwgTGluZVRvTGluZShsaW5lQUEsIGxpbmVCQykpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKExpbmVUb0xpbmUobGluZUFCLCBsaW5lQkEpIHx8IExpbmVUb0xpbmUobGluZUFCLCBsaW5lQkIpIHx8IExpbmVUb0xpbmUobGluZUFCLCBsaW5lQkMpKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChMaW5lVG9MaW5lKGxpbmVBQywgbGluZUJBKSB8fCBMaW5lVG9MaW5lKGxpbmVBQywgbGluZUJCKSB8fCBMaW5lVG9MaW5lKGxpbmVBQywgbGluZUJDKSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAgTm9wZSwgc28gY2hlY2sgdG8gc2VlIGlmIGFueSBvZiB0aGUgcG9pbnRzIG9mIHRyaWFuZ2xlQSBhcmUgd2l0aGluIHRyaWFuZ2xlQlxyXG5cclxuICAgIHZhciBwb2ludHMgPSBEZWNvbXBvc2UodHJpYW5nbGVBKTtcclxuICAgIHZhciB3aXRoaW4gPSBDb250YWluc0FycmF5KHRyaWFuZ2xlQiwgcG9pbnRzLCB0cnVlKTtcclxuXHJcbiAgICBpZiAod2l0aGluLmxlbmd0aCA+IDApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIEZpbmFsbHkgY2hlY2sgdG8gc2VlIGlmIGFueSBvZiB0aGUgcG9pbnRzIG9mIHRyaWFuZ2xlQiBhcmUgd2l0aGluIHRyaWFuZ2xlQVxyXG5cclxuICAgIHBvaW50cyA9IERlY29tcG9zZSh0cmlhbmdsZUIpO1xyXG4gICAgd2l0aGluID0gQ29udGFpbnNBcnJheSh0cmlhbmdsZUEsIHBvaW50cywgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKHdpdGhpbi5sZW5ndGggPiAwKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVHJpYW5nbGVUb1RyaWFuZ2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/TriangleToTriangle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/intersects/index.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/geom/intersects/index.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Geom.Intersects\r\n */\r\n\r\nmodule.exports = {\r\n\r\n CircleToCircle: __webpack_require__(/*! ./CircleToCircle */ \"./node_modules/phaser/src/geom/intersects/CircleToCircle.js\"),\r\n CircleToRectangle: __webpack_require__(/*! ./CircleToRectangle */ \"./node_modules/phaser/src/geom/intersects/CircleToRectangle.js\"),\r\n GetCircleToCircle: __webpack_require__(/*! ./GetCircleToCircle */ \"./node_modules/phaser/src/geom/intersects/GetCircleToCircle.js\"),\r\n GetCircleToRectangle: __webpack_require__(/*! ./GetCircleToRectangle */ \"./node_modules/phaser/src/geom/intersects/GetCircleToRectangle.js\"),\r\n GetLineToCircle: __webpack_require__(/*! ./GetLineToCircle */ \"./node_modules/phaser/src/geom/intersects/GetLineToCircle.js\"),\r\n GetLineToRectangle: __webpack_require__(/*! ./GetLineToRectangle */ \"./node_modules/phaser/src/geom/intersects/GetLineToRectangle.js\"),\r\n GetRectangleIntersection: __webpack_require__(/*! ./GetRectangleIntersection */ \"./node_modules/phaser/src/geom/intersects/GetRectangleIntersection.js\"),\r\n GetRectangleToRectangle: __webpack_require__(/*! ./GetRectangleToRectangle */ \"./node_modules/phaser/src/geom/intersects/GetRectangleToRectangle.js\"),\r\n GetRectangleToTriangle: __webpack_require__(/*! ./GetRectangleToTriangle */ \"./node_modules/phaser/src/geom/intersects/GetRectangleToTriangle.js\"),\r\n GetTriangleToCircle: __webpack_require__(/*! ./GetTriangleToCircle */ \"./node_modules/phaser/src/geom/intersects/GetTriangleToCircle.js\"),\r\n GetTriangleToLine: __webpack_require__(/*! ./GetTriangleToLine */ \"./node_modules/phaser/src/geom/intersects/GetTriangleToLine.js\"),\r\n GetTriangleToTriangle: __webpack_require__(/*! ./GetTriangleToTriangle */ \"./node_modules/phaser/src/geom/intersects/GetTriangleToTriangle.js\"),\r\n LineToCircle: __webpack_require__(/*! ./LineToCircle */ \"./node_modules/phaser/src/geom/intersects/LineToCircle.js\"),\r\n LineToLine: __webpack_require__(/*! ./LineToLine */ \"./node_modules/phaser/src/geom/intersects/LineToLine.js\"),\r\n LineToRectangle: __webpack_require__(/*! ./LineToRectangle */ \"./node_modules/phaser/src/geom/intersects/LineToRectangle.js\"),\r\n PointToLine: __webpack_require__(/*! ./PointToLine */ \"./node_modules/phaser/src/geom/intersects/PointToLine.js\"),\r\n PointToLineSegment: __webpack_require__(/*! ./PointToLineSegment */ \"./node_modules/phaser/src/geom/intersects/PointToLineSegment.js\"),\r\n RectangleToRectangle: __webpack_require__(/*! ./RectangleToRectangle */ \"./node_modules/phaser/src/geom/intersects/RectangleToRectangle.js\"),\r\n RectangleToTriangle: __webpack_require__(/*! ./RectangleToTriangle */ \"./node_modules/phaser/src/geom/intersects/RectangleToTriangle.js\"),\r\n RectangleToValues: __webpack_require__(/*! ./RectangleToValues */ \"./node_modules/phaser/src/geom/intersects/RectangleToValues.js\"),\r\n TriangleToCircle: __webpack_require__(/*! ./TriangleToCircle */ \"./node_modules/phaser/src/geom/intersects/TriangleToCircle.js\"),\r\n TriangleToLine: __webpack_require__(/*! ./TriangleToLine */ \"./node_modules/phaser/src/geom/intersects/TriangleToLine.js\"),\r\n TriangleToTriangle: __webpack_require__(/*! ./TriangleToTriangle */ \"./node_modules/phaser/src/geom/intersects/TriangleToTriangle.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2ludGVyc2VjdHMvaW5kZXguanM/OWMxNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLHFGQUFrQjtBQUM5Qyx1QkFBdUIsbUJBQU8sQ0FBQywyRkFBcUI7QUFDcEQsdUJBQXVCLG1CQUFPLENBQUMsMkZBQXFCO0FBQ3BELDBCQUEwQixtQkFBTyxDQUFDLGlHQUF3QjtBQUMxRCxxQkFBcUIsbUJBQU8sQ0FBQyx1RkFBbUI7QUFDaEQsd0JBQXdCLG1CQUFPLENBQUMsNkZBQXNCO0FBQ3RELDhCQUE4QixtQkFBTyxDQUFDLHlHQUE0QjtBQUNsRSw2QkFBNkIsbUJBQU8sQ0FBQyx1R0FBMkI7QUFDaEUsNEJBQTRCLG1CQUFPLENBQUMscUdBQTBCO0FBQzlELHlCQUF5QixtQkFBTyxDQUFDLCtGQUF1QjtBQUN4RCx1QkFBdUIsbUJBQU8sQ0FBQywyRkFBcUI7QUFDcEQsMkJBQTJCLG1CQUFPLENBQUMsbUdBQXlCO0FBQzVELGtCQUFrQixtQkFBTyxDQUFDLGlGQUFnQjtBQUMxQyxnQkFBZ0IsbUJBQU8sQ0FBQyw2RUFBYztBQUN0QyxxQkFBcUIsbUJBQU8sQ0FBQyx1RkFBbUI7QUFDaEQsaUJBQWlCLG1CQUFPLENBQUMsK0VBQWU7QUFDeEMsd0JBQXdCLG1CQUFPLENBQUMsNkZBQXNCO0FBQ3RELDBCQUEwQixtQkFBTyxDQUFDLGlHQUF3QjtBQUMxRCx5QkFBeUIsbUJBQU8sQ0FBQywrRkFBdUI7QUFDeEQsdUJBQXVCLG1CQUFPLENBQUMsMkZBQXFCO0FBQ3BELHNCQUFzQixtQkFBTyxDQUFDLHlGQUFvQjtBQUNsRCxvQkFBb0IsbUJBQU8sQ0FBQyxxRkFBa0I7QUFDOUMsd0JBQXdCLG1CQUFPLENBQUMsNkZBQXNCOztBQUV0RCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vaW50ZXJzZWN0cy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkdlb20uSW50ZXJzZWN0c1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIENpcmNsZVRvQ2lyY2xlOiByZXF1aXJlKCcuL0NpcmNsZVRvQ2lyY2xlJyksXHJcbiAgICBDaXJjbGVUb1JlY3RhbmdsZTogcmVxdWlyZSgnLi9DaXJjbGVUb1JlY3RhbmdsZScpLFxyXG4gICAgR2V0Q2lyY2xlVG9DaXJjbGU6IHJlcXVpcmUoJy4vR2V0Q2lyY2xlVG9DaXJjbGUnKSxcclxuICAgIEdldENpcmNsZVRvUmVjdGFuZ2xlOiByZXF1aXJlKCcuL0dldENpcmNsZVRvUmVjdGFuZ2xlJyksXHJcbiAgICBHZXRMaW5lVG9DaXJjbGU6IHJlcXVpcmUoJy4vR2V0TGluZVRvQ2lyY2xlJyksXHJcbiAgICBHZXRMaW5lVG9SZWN0YW5nbGU6IHJlcXVpcmUoJy4vR2V0TGluZVRvUmVjdGFuZ2xlJyksXHJcbiAgICBHZXRSZWN0YW5nbGVJbnRlcnNlY3Rpb246IHJlcXVpcmUoJy4vR2V0UmVjdGFuZ2xlSW50ZXJzZWN0aW9uJyksXHJcbiAgICBHZXRSZWN0YW5nbGVUb1JlY3RhbmdsZTogcmVxdWlyZSgnLi9HZXRSZWN0YW5nbGVUb1JlY3RhbmdsZScpLFxyXG4gICAgR2V0UmVjdGFuZ2xlVG9UcmlhbmdsZTogcmVxdWlyZSgnLi9HZXRSZWN0YW5nbGVUb1RyaWFuZ2xlJyksXHJcbiAgICBHZXRUcmlhbmdsZVRvQ2lyY2xlOiByZXF1aXJlKCcuL0dldFRyaWFuZ2xlVG9DaXJjbGUnKSxcclxuICAgIEdldFRyaWFuZ2xlVG9MaW5lOiByZXF1aXJlKCcuL0dldFRyaWFuZ2xlVG9MaW5lJyksXHJcbiAgICBHZXRUcmlhbmdsZVRvVHJpYW5nbGU6IHJlcXVpcmUoJy4vR2V0VHJpYW5nbGVUb1RyaWFuZ2xlJyksXHJcbiAgICBMaW5lVG9DaXJjbGU6IHJlcXVpcmUoJy4vTGluZVRvQ2lyY2xlJyksXHJcbiAgICBMaW5lVG9MaW5lOiByZXF1aXJlKCcuL0xpbmVUb0xpbmUnKSxcclxuICAgIExpbmVUb1JlY3RhbmdsZTogcmVxdWlyZSgnLi9MaW5lVG9SZWN0YW5nbGUnKSxcclxuICAgIFBvaW50VG9MaW5lOiByZXF1aXJlKCcuL1BvaW50VG9MaW5lJyksXHJcbiAgICBQb2ludFRvTGluZVNlZ21lbnQ6IHJlcXVpcmUoJy4vUG9pbnRUb0xpbmVTZWdtZW50JyksXHJcbiAgICBSZWN0YW5nbGVUb1JlY3RhbmdsZTogcmVxdWlyZSgnLi9SZWN0YW5nbGVUb1JlY3RhbmdsZScpLFxyXG4gICAgUmVjdGFuZ2xlVG9UcmlhbmdsZTogcmVxdWlyZSgnLi9SZWN0YW5nbGVUb1RyaWFuZ2xlJyksXHJcbiAgICBSZWN0YW5nbGVUb1ZhbHVlczogcmVxdWlyZSgnLi9SZWN0YW5nbGVUb1ZhbHVlcycpLFxyXG4gICAgVHJpYW5nbGVUb0NpcmNsZTogcmVxdWlyZSgnLi9UcmlhbmdsZVRvQ2lyY2xlJyksXHJcbiAgICBUcmlhbmdsZVRvTGluZTogcmVxdWlyZSgnLi9UcmlhbmdsZVRvTGluZScpLFxyXG4gICAgVHJpYW5nbGVUb1RyaWFuZ2xlOiByZXF1aXJlKCcuL1RyaWFuZ2xlVG9UcmlhbmdsZScpXHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/intersects/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/Angle.js":
/*!****************************************************!*\
!*** ./node_modules/phaser/src/geom/line/Angle.js ***!
\****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculate the angle of the line in radians.\r\n *\r\n * @function Phaser.Geom.Line.Angle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to calculate the angle of.\r\n *\r\n * @return {number} The angle of the line, in radians.\r\n */\r\nvar Angle = function (line)\r\n{\r\n return Math.atan2(line.y2 - line.y1, line.x2 - line.x1);\r\n};\r\n\r\nmodule.exports = Angle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvQW5nbGUuanM/OTVlYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vbGluZS9BbmdsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZSB0aGUgYW5nbGUgb2YgdGhlIGxpbmUgaW4gcmFkaWFucy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkxpbmUuQW5nbGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uTGluZX0gbGluZSAtIFRoZSBsaW5lIHRvIGNhbGN1bGF0ZSB0aGUgYW5nbGUgb2YuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGFuZ2xlIG9mIHRoZSBsaW5lLCBpbiByYWRpYW5zLlxyXG4gKi9cclxudmFyIEFuZ2xlID0gZnVuY3Rpb24gKGxpbmUpXHJcbntcclxuICAgIHJldHVybiBNYXRoLmF0YW4yKGxpbmUueTIgLSBsaW5lLnkxLCBsaW5lLngyIC0gbGluZS54MSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEFuZ2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/Angle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/BresenhamPoints.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/geom/line/BresenhamPoints.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Using Bresenham's line algorithm this will return an array of all coordinates on this line.\r\n *\r\n * The `start` and `end` points are rounded before this runs as the algorithm works on integers.\r\n *\r\n * @function Phaser.Geom.Line.BresenhamPoints\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line.\r\n * @param {integer} [stepRate=1] - The optional step rate for the points on the line.\r\n * @param {array} [results] - An optional array to push the resulting coordinates into.\r\n *\r\n * @return {object[]} The array of coordinates on the line.\r\n */\r\nvar BresenhamPoints = function (line, stepRate, results)\r\n{\r\n if (stepRate === undefined) { stepRate = 1; }\r\n if (results === undefined) { results = []; }\r\n\r\n var x1 = Math.round(line.x1);\r\n var y1 = Math.round(line.y1);\r\n var x2 = Math.round(line.x2);\r\n var y2 = Math.round(line.y2);\r\n\r\n var dx = Math.abs(x2 - x1);\r\n var dy = Math.abs(y2 - y1);\r\n var sx = (x1 < x2) ? 1 : -1;\r\n var sy = (y1 < y2) ? 1 : -1;\r\n var err = dx - dy;\r\n\r\n results.push({ x: x1, y: y1 });\r\n\r\n var i = 1;\r\n\r\n while (!((x1 === x2) && (y1 === y2)))\r\n {\r\n var e2 = err << 1;\r\n\r\n if (e2 > -dy)\r\n {\r\n err -= dy;\r\n x1 += sx;\r\n }\r\n\r\n if (e2 < dx)\r\n {\r\n err += dx;\r\n y1 += sy;\r\n }\r\n\r\n if (i % stepRate === 0)\r\n {\r\n results.push({ x: x1, y: y1 });\r\n }\r\n\r\n i++;\r\n }\r\n\r\n return results;\r\n};\r\n\r\nmodule.exports = BresenhamPoints;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvQnJlc2VuaGFtUG9pbnRzLmpzPzYzNDIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLFFBQVE7QUFDbkIsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBWSxTQUFTO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxjQUFjO0FBQy9DLGdDQUFnQyxjQUFjOztBQUU5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixlQUFlOztBQUVqQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwQkFBMEIsZUFBZTtBQUN6Qzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvQnJlc2VuaGFtUG9pbnRzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVXNpbmcgQnJlc2VuaGFtJ3MgbGluZSBhbGdvcml0aG0gdGhpcyB3aWxsIHJldHVybiBhbiBhcnJheSBvZiBhbGwgY29vcmRpbmF0ZXMgb24gdGhpcyBsaW5lLlxyXG4gKlxyXG4gKiBUaGUgYHN0YXJ0YCBhbmQgYGVuZGAgcG9pbnRzIGFyZSByb3VuZGVkIGJlZm9yZSB0aGlzIHJ1bnMgYXMgdGhlIGFsZ29yaXRobSB3b3JrcyBvbiBpbnRlZ2Vycy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkxpbmUuQnJlc2VuaGFtUG9pbnRzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgbGluZS5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbc3RlcFJhdGU9MV0gLSBUaGUgb3B0aW9uYWwgc3RlcCByYXRlIGZvciB0aGUgcG9pbnRzIG9uIHRoZSBsaW5lLlxyXG4gKiBAcGFyYW0ge2FycmF5fSBbcmVzdWx0c10gLSBBbiBvcHRpb25hbCBhcnJheSB0byBwdXNoIHRoZSByZXN1bHRpbmcgY29vcmRpbmF0ZXMgaW50by5cclxuICpcclxuICogQHJldHVybiB7b2JqZWN0W119IFRoZSBhcnJheSBvZiBjb29yZGluYXRlcyBvbiB0aGUgbGluZS5cclxuICovXHJcbnZhciBCcmVzZW5oYW1Qb2ludHMgPSBmdW5jdGlvbiAobGluZSwgc3RlcFJhdGUsIHJlc3VsdHMpXHJcbntcclxuICAgIGlmIChzdGVwUmF0ZSA9PT0gdW5kZWZpbmVkKSB7IHN0ZXBSYXRlID0gMTsgfVxyXG4gICAgaWYgKHJlc3VsdHMgPT09IHVuZGVmaW5lZCkgeyByZXN1bHRzID0gW107IH1cclxuXHJcbiAgICB2YXIgeDEgPSBNYXRoLnJvdW5kKGxpbmUueDEpO1xyXG4gICAgdmFyIHkxID0gTWF0aC5yb3VuZChsaW5lLnkxKTtcclxuICAgIHZhciB4MiA9IE1hdGgucm91bmQobGluZS54Mik7XHJcbiAgICB2YXIgeTIgPSBNYXRoLnJvdW5kKGxpbmUueTIpO1xyXG5cclxuICAgIHZhciBkeCA9IE1hdGguYWJzKHgyIC0geDEpO1xyXG4gICAgdmFyIGR5ID0gTWF0aC5hYnMoeTIgLSB5MSk7XHJcbiAgICB2YXIgc3ggPSAoeDEgPCB4MikgPyAxIDogLTE7XHJcbiAgICB2YXIgc3kgPSAoeTEgPCB5MikgPyAxIDogLTE7XHJcbiAgICB2YXIgZXJyID0gZHggLSBkeTtcclxuXHJcbiAgICByZXN1bHRzLnB1c2goeyB4OiB4MSwgeTogeTEgfSk7XHJcblxyXG4gICAgdmFyIGkgPSAxO1xyXG5cclxuICAgIHdoaWxlICghKCh4MSA9PT0geDIpICYmICh5MSA9PT0geTIpKSlcclxuICAgIHtcclxuICAgICAgICB2YXIgZTIgPSBlcnIgPDwgMTtcclxuXHJcbiAgICAgICAgaWYgKGUyID4gLWR5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZXJyIC09IGR5O1xyXG4gICAgICAgICAgICB4MSArPSBzeDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlMiA8IGR4KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZXJyICs9IGR4O1xyXG4gICAgICAgICAgICB5MSArPSBzeTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpICUgc3RlcFJhdGUgPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXN1bHRzLnB1c2goeyB4OiB4MSwgeTogeTEgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpKys7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJyZXNlbmhhbVBvaW50cztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/BresenhamPoints.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/CenterOn.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/geom/line/CenterOn.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n\r\n/**\r\n * Center a line on the given coordinates.\r\n *\r\n * @function Phaser.Geom.Line.CenterOn\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to center.\r\n * @param {number} x - The horizontal coordinate to center the line on.\r\n * @param {number} y - The vertical coordinate to center the line on.\r\n *\r\n * @return {Phaser.Geom.Line} The centered line.\r\n */\r\nvar CenterOn = function (line, x, y)\r\n{\r\n var tx = x - ((line.x1 + line.x2) / 2);\r\n var ty = y - ((line.y1 + line.y2) / 2);\r\n\r\n line.x1 += tx;\r\n line.y1 += ty;\r\n\r\n line.x2 += tx;\r\n line.y2 += ty;\r\n\r\n return line;\r\n};\r\n\r\nmodule.exports = CenterOn;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvQ2VudGVyT24uanM/ZDM5YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLGlCQUFpQjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9saW5lL0NlbnRlck9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG5cclxuLyoqXHJcbiAqIENlbnRlciBhIGxpbmUgb24gdGhlIGdpdmVuIGNvb3JkaW5hdGVzLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uTGluZS5DZW50ZXJPblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIGxpbmUgdG8gY2VudGVyLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIGNvb3JkaW5hdGUgdG8gY2VudGVyIHRoZSBsaW5lIG9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBjb29yZGluYXRlIHRvIGNlbnRlciB0aGUgbGluZSBvbi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uTGluZX0gVGhlIGNlbnRlcmVkIGxpbmUuXHJcbiAqL1xyXG52YXIgQ2VudGVyT24gPSBmdW5jdGlvbiAobGluZSwgeCwgeSlcclxue1xyXG4gICAgdmFyIHR4ID0geCAtICgobGluZS54MSArIGxpbmUueDIpIC8gMik7XHJcbiAgICB2YXIgdHkgPSB5IC0gKChsaW5lLnkxICsgbGluZS55MikgLyAyKTtcclxuXHJcbiAgICBsaW5lLngxICs9IHR4O1xyXG4gICAgbGluZS55MSArPSB0eTtcclxuXHJcbiAgICBsaW5lLngyICs9IHR4O1xyXG4gICAgbGluZS55MiArPSB0eTtcclxuXHJcbiAgICByZXR1cm4gbGluZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2VudGVyT247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/CenterOn.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/Clone.js":
/*!****************************************************!*\
!*** ./node_modules/phaser/src/geom/line/Clone.js ***!
\****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Line = __webpack_require__(/*! ./Line */ \"./node_modules/phaser/src/geom/line/Line.js\");\r\n\r\n/**\r\n * Clone the given line.\r\n *\r\n * @function Phaser.Geom.Line.Clone\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} source - The source line to clone.\r\n *\r\n * @return {Phaser.Geom.Line} The cloned line.\r\n */\r\nvar Clone = function (source)\r\n{\r\n return new Line(source.x1, source.y1, source.x2, source.y2);\r\n};\r\n\r\nmodule.exports = Clone;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvQ2xvbmUuanM/Y2MwMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLDJEQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QjtBQUNBLFlBQVksaUJBQWlCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvQ2xvbmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBMaW5lID0gcmVxdWlyZSgnLi9MaW5lJyk7XHJcblxyXG4vKipcclxuICogQ2xvbmUgdGhlIGdpdmVuIGxpbmUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5MaW5lLkNsb25lXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IHNvdXJjZSAtIFRoZSBzb3VyY2UgbGluZSB0byBjbG9uZS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uTGluZX0gVGhlIGNsb25lZCBsaW5lLlxyXG4gKi9cclxudmFyIENsb25lID0gZnVuY3Rpb24gKHNvdXJjZSlcclxue1xyXG4gICAgcmV0dXJuIG5ldyBMaW5lKHNvdXJjZS54MSwgc291cmNlLnkxLCBzb3VyY2UueDIsIHNvdXJjZS55Mik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENsb25lO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/Clone.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/CopyFrom.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/geom/line/CopyFrom.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Copy the values of one line to a destination line.\r\n *\r\n * @function Phaser.Geom.Line.CopyFrom\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Line} O - [dest,$return]\r\n *\r\n * @param {Phaser.Geom.Line} source - The source line to copy the values from.\r\n * @param {Phaser.Geom.Line} dest - The destination line to copy the values to.\r\n *\r\n * @return {Phaser.Geom.Line} The destination line.\r\n */\r\nvar CopyFrom = function (source, dest)\r\n{\r\n return dest.setTo(source.x1, source.y1, source.x2, source.y2);\r\n};\r\n\r\nmodule.exports = CopyFrom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvQ29weUZyb20uanM/MGNmMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUI7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLGlCQUFpQjtBQUM1QjtBQUNBLFlBQVksaUJBQWlCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvQ29weUZyb20uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgb2Ygb25lIGxpbmUgdG8gYSBkZXN0aW5hdGlvbiBsaW5lLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uTGluZS5Db3B5RnJvbVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLkxpbmV9IE8gLSBbZGVzdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IHNvdXJjZSAtIFRoZSBzb3VyY2UgbGluZSB0byBjb3B5IHRoZSB2YWx1ZXMgZnJvbS5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBkZXN0IC0gVGhlIGRlc3RpbmF0aW9uIGxpbmUgdG8gY29weSB0aGUgdmFsdWVzIHRvLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5MaW5lfSBUaGUgZGVzdGluYXRpb24gbGluZS5cclxuICovXHJcbnZhciBDb3B5RnJvbSA9IGZ1bmN0aW9uIChzb3VyY2UsIGRlc3QpXHJcbntcclxuICAgIHJldHVybiBkZXN0LnNldFRvKHNvdXJjZS54MSwgc291cmNlLnkxLCBzb3VyY2UueDIsIHNvdXJjZS55Mik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvcHlGcm9tO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/CopyFrom.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/Equals.js":
/*!*****************************************************!*\
!*** ./node_modules/phaser/src/geom/line/Equals.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Compare two lines for strict equality.\r\n *\r\n * @function Phaser.Geom.Line.Equals\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The first line to compare.\r\n * @param {Phaser.Geom.Line} toCompare - The second line to compare.\r\n *\r\n * @return {boolean} Whether the two lines are equal.\r\n */\r\nvar Equals = function (line, toCompare)\r\n{\r\n return (\r\n line.x1 === toCompare.x1 &&\r\n line.y1 === toCompare.y1 &&\r\n line.x2 === toCompare.x2 &&\r\n line.y2 === toCompare.y2\r\n );\r\n};\r\n\r\nmodule.exports = Equals;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvRXF1YWxzLmpzPzZjMjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9saW5lL0VxdWFscy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENvbXBhcmUgdHdvIGxpbmVzIGZvciBzdHJpY3QgZXF1YWxpdHkuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5MaW5lLkVxdWFsc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIGZpcnN0IGxpbmUgdG8gY29tcGFyZS5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSB0b0NvbXBhcmUgLSBUaGUgc2Vjb25kIGxpbmUgdG8gY29tcGFyZS5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgdHdvIGxpbmVzIGFyZSBlcXVhbC5cclxuICovXHJcbnZhciBFcXVhbHMgPSBmdW5jdGlvbiAobGluZSwgdG9Db21wYXJlKVxyXG57XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIGxpbmUueDEgPT09IHRvQ29tcGFyZS54MSAmJlxyXG4gICAgICAgIGxpbmUueTEgPT09IHRvQ29tcGFyZS55MSAmJlxyXG4gICAgICAgIGxpbmUueDIgPT09IHRvQ29tcGFyZS54MiAmJlxyXG4gICAgICAgIGxpbmUueTIgPT09IHRvQ29tcGFyZS55MlxyXG4gICAgKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRXF1YWxzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/Equals.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/Extend.js":
/*!*****************************************************!*\
!*** ./node_modules/phaser/src/geom/line/Extend.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Length = __webpack_require__(/*! ./Length */ \"./node_modules/phaser/src/geom/line/Length.js\");\r\n\r\n/**\r\n * Extends the start and end points of a Line by the given amounts.\r\n *\r\n * The amounts can be positive or negative. Positive points will increase the length of the line,\r\n * while negative ones will decrease it.\r\n *\r\n * If no `right` value is provided it will extend the length of the line equally in both directions.\r\n *\r\n * Pass a value of zero to leave the start or end point unchanged.\r\n *\r\n * @function Phaser.Geom.Line.Extend\r\n * @since 3.16.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line instance to extend.\r\n * @param {number} left - The amount to extend the start of the line by.\r\n * @param {number} [right] - The amount to extend the end of the line by. If not given it will be set to the `left` value.\r\n *\r\n * @return {Phaser.Geom.Line} The modified Line instance.\r\n */\r\nvar Extend = function (line, left, right)\r\n{\r\n if (right === undefined) { right = left; }\r\n\r\n var length = Length(line);\r\n\r\n var slopX = line.x2 - line.x1;\r\n var slopY = line.y2 - line.y1;\r\n\r\n if (left)\r\n {\r\n line.x1 = line.x1 - slopX / length * left;\r\n line.y1 = line.y1 - slopY / length * left;\r\n }\r\n\r\n if (right)\r\n {\r\n line.x2 = line.x2 + slopX / length * right;\r\n line.y2 = line.y2 + slopY / length * right;\r\n }\r\n\r\n return line;\r\n};\r\n\r\nmodule.exports = Extend;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvRXh0ZW5kLmpzPzI3NzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGFBQWEsbUJBQU8sQ0FBQywrREFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxpQkFBaUI7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLGNBQWM7O0FBRTVDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvRXh0ZW5kLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTGVuZ3RoID0gcmVxdWlyZSgnLi9MZW5ndGgnKTtcclxuXHJcbi8qKlxyXG4gKiBFeHRlbmRzIHRoZSBzdGFydCBhbmQgZW5kIHBvaW50cyBvZiBhIExpbmUgYnkgdGhlIGdpdmVuIGFtb3VudHMuXHJcbiAqXHJcbiAqIFRoZSBhbW91bnRzIGNhbiBiZSBwb3NpdGl2ZSBvciBuZWdhdGl2ZS4gUG9zaXRpdmUgcG9pbnRzIHdpbGwgaW5jcmVhc2UgdGhlIGxlbmd0aCBvZiB0aGUgbGluZSxcclxuICogd2hpbGUgbmVnYXRpdmUgb25lcyB3aWxsIGRlY3JlYXNlIGl0LlxyXG4gKlxyXG4gKiBJZiBubyBgcmlnaHRgIHZhbHVlIGlzIHByb3ZpZGVkIGl0IHdpbGwgZXh0ZW5kIHRoZSBsZW5ndGggb2YgdGhlIGxpbmUgZXF1YWxseSBpbiBib3RoIGRpcmVjdGlvbnMuXHJcbiAqXHJcbiAqIFBhc3MgYSB2YWx1ZSBvZiB6ZXJvIHRvIGxlYXZlIHRoZSBzdGFydCBvciBlbmQgcG9pbnQgdW5jaGFuZ2VkLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uTGluZS5FeHRlbmRcclxuICogQHNpbmNlIDMuMTYuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgbGluZSBpbnN0YW5jZSB0byBleHRlbmQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZWZ0IC0gVGhlIGFtb3VudCB0byBleHRlbmQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIGJ5LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3JpZ2h0XSAtIFRoZSBhbW91bnQgdG8gZXh0ZW5kIHRoZSBlbmQgb2YgdGhlIGxpbmUgYnkuIElmIG5vdCBnaXZlbiBpdCB3aWxsIGJlIHNldCB0byB0aGUgYGxlZnRgIHZhbHVlLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5MaW5lfSBUaGUgbW9kaWZpZWQgTGluZSBpbnN0YW5jZS5cclxuICovXHJcbnZhciBFeHRlbmQgPSBmdW5jdGlvbiAobGluZSwgbGVmdCwgcmlnaHQpXHJcbntcclxuICAgIGlmIChyaWdodCA9PT0gdW5kZWZpbmVkKSB7IHJpZ2h0ID0gbGVmdDsgfVxyXG5cclxuICAgIHZhciBsZW5ndGggPSBMZW5ndGgobGluZSk7XHJcblxyXG4gICAgdmFyIHNsb3BYID0gbGluZS54MiAtIGxpbmUueDE7XHJcbiAgICB2YXIgc2xvcFkgPSBsaW5lLnkyIC0gbGluZS55MTtcclxuXHJcbiAgICBpZiAobGVmdClcclxuICAgIHtcclxuICAgICAgICBsaW5lLngxID0gbGluZS54MSAtIHNsb3BYIC8gbGVuZ3RoICogbGVmdDtcclxuICAgICAgICBsaW5lLnkxID0gbGluZS55MSAtIHNsb3BZIC8gbGVuZ3RoICogbGVmdDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgbGluZS54MiA9IGxpbmUueDIgKyBzbG9wWCAvIGxlbmd0aCAqIHJpZ2h0O1xyXG4gICAgICAgIGxpbmUueTIgPSBsaW5lLnkyICsgc2xvcFkgLyBsZW5ndGggKiByaWdodDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGluZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRXh0ZW5kO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/Extend.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/GetMidPoint.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/geom/line/GetMidPoint.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Get the midpoint of the given line.\r\n *\r\n * @function Phaser.Geom.Line.GetMidPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to get the midpoint of.\r\n * @param {(Phaser.Geom.Point|object)} [out] - An optional point object to store the midpoint in.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} The midpoint of the Line.\r\n */\r\nvar GetMidPoint = function (line, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n out.x = (line.x1 + line.x2) / 2;\r\n out.y = (line.y1 + line.y2) / 2;\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetMidPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvR2V0TWlkUG9pbnQuanM/OWIyYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLDJCQUEyQjtBQUN0QztBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7O0FBRS9DO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vbGluZS9HZXRNaWRQb2ludC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vcG9pbnQvUG9pbnQnKTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgdGhlIG1pZHBvaW50IG9mIHRoZSBnaXZlbiBsaW5lLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uTGluZS5HZXRNaWRQb2ludFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgbGluZSB0byBnZXQgdGhlIG1pZHBvaW50IG9mLlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBbb3V0XSAtIEFuIG9wdGlvbmFsIHBvaW50IG9iamVjdCB0byBzdG9yZSB0aGUgbWlkcG9pbnQgaW4uXHJcbiAqXHJcbiAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBUaGUgbWlkcG9pbnQgb2YgdGhlIExpbmUuXHJcbiAqL1xyXG52YXIgR2V0TWlkUG9pbnQgPSBmdW5jdGlvbiAobGluZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFBvaW50KCk7IH1cclxuXHJcbiAgICBvdXQueCA9IChsaW5lLngxICsgbGluZS54MikgLyAyO1xyXG4gICAgb3V0LnkgPSAobGluZS55MSArIGxpbmUueTIpIC8gMjtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRNaWRQb2ludDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/GetMidPoint.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/GetNearestPoint.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/geom/line/GetNearestPoint.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @author Florian Mertens\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Get the nearest point on a line perpendicular to the given point.\r\n *\r\n * @function Phaser.Geom.Line.GetNearestPoint\r\n * @since 3.16.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to get the nearest point on.\r\n * @param {(Phaser.Geom.Point|object)} point - The point to get the nearest point to.\r\n * @param {(Phaser.Geom.Point|object)} [out] - An optional point, or point-like object, to store the coordinates of the nearest point on the line.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} The nearest point on the line.\r\n */\r\nvar GetNearestPoint = function (line, point, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n var x1 = line.x1;\r\n var y1 = line.y1;\r\n\r\n var x2 = line.x2;\r\n var y2 = line.y2;\r\n\r\n var L2 = (((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1)));\r\n\r\n if (L2 === 0)\r\n {\r\n return out;\r\n }\r\n\r\n var r = (((point.x - x1) * (x2 - x1)) + ((point.y - y1) * (y2 - y1))) / L2;\r\n\r\n out.x = x1 + (r * (x2 - x1));\r\n out.y = y1 + (r * (y2 - y1));\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetNearestPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvR2V0TmVhcmVzdFBvaW50LmpzPzUyOGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLDJCQUEyQjtBQUN0QztBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7O0FBRS9DO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvR2V0TmVhcmVzdFBvaW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBhdXRob3IgICAgICAgRmxvcmlhbiBNZXJ0ZW5zXHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgbmVhcmVzdCBwb2ludCBvbiBhIGxpbmUgcGVycGVuZGljdWxhciB0byB0aGUgZ2l2ZW4gcG9pbnQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5MaW5lLkdldE5lYXJlc3RQb2ludFxyXG4gKiBAc2luY2UgMy4xNi4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIGxpbmUgdG8gZ2V0IHRoZSBuZWFyZXN0IHBvaW50IG9uLlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBwb2ludCAtIFRoZSBwb2ludCB0byBnZXQgdGhlIG5lYXJlc3QgcG9pbnQgdG8uXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IFtvdXRdIC0gQW4gb3B0aW9uYWwgcG9pbnQsIG9yIHBvaW50LWxpa2Ugb2JqZWN0LCB0byBzdG9yZSB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIG5lYXJlc3QgcG9pbnQgb24gdGhlIGxpbmUuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBUaGUgbmVhcmVzdCBwb2ludCBvbiB0aGUgbGluZS5cclxuICovXHJcbnZhciBHZXROZWFyZXN0UG9pbnQgPSBmdW5jdGlvbiAobGluZSwgcG9pbnQsIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBQb2ludCgpOyB9XHJcblxyXG4gICAgdmFyIHgxID0gbGluZS54MTtcclxuICAgIHZhciB5MSA9IGxpbmUueTE7XHJcblxyXG4gICAgdmFyIHgyID0gbGluZS54MjtcclxuICAgIHZhciB5MiA9IGxpbmUueTI7XHJcblxyXG4gICAgdmFyIEwyID0gKCgoeDIgLSB4MSkgKiAoeDIgLSB4MSkpICsgKCh5MiAtIHkxKSAqICh5MiAtIHkxKSkpO1xyXG5cclxuICAgIGlmIChMMiA9PT0gMClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfVxyXG5cclxuICAgIHZhciByID0gKCgocG9pbnQueCAtIHgxKSAqICh4MiAtIHgxKSkgKyAoKHBvaW50LnkgLSB5MSkgKiAoeTIgLSB5MSkpKSAvIEwyO1xyXG5cclxuICAgIG91dC54ID0geDEgKyAociAqICh4MiAtIHgxKSk7XHJcbiAgICBvdXQueSA9IHkxICsgKHIgKiAoeTIgLSB5MSkpO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldE5lYXJlc3RQb2ludDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/GetNearestPoint.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/GetNormal.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/geom/line/GetNormal.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\nvar Angle = __webpack_require__(/*! ./Angle */ \"./node_modules/phaser/src/geom/line/Angle.js\");\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Calculate the normal of the given line.\r\n *\r\n * The normal of a line is a vector that points perpendicular from it.\r\n *\r\n * @function Phaser.Geom.Line.GetNormal\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to calculate the normal of.\r\n * @param {(Phaser.Geom.Point|object)} [out] - An optional point object to store the normal in.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} The normal of the Line.\r\n */\r\nvar GetNormal = function (line, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n var a = Angle(line) - MATH_CONST.TAU;\r\n\r\n out.x = Math.cos(a);\r\n out.y = Math.sin(a);\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetNormal;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvR2V0Tm9ybWFsLmpzPzYzOTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLGlFQUFrQjtBQUMzQyxZQUFZLG1CQUFPLENBQUMsNkRBQVM7QUFDN0IsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVywyQkFBMkI7QUFDdEM7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsbUJBQW1COztBQUUvQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvR2V0Tm9ybWFsLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTUFUSF9DT05TVCA9IHJlcXVpcmUoJy4uLy4uL21hdGgvY29uc3QnKTtcclxudmFyIEFuZ2xlID0gcmVxdWlyZSgnLi9BbmdsZScpO1xyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZSB0aGUgbm9ybWFsIG9mIHRoZSBnaXZlbiBsaW5lLlxyXG4gKlxyXG4gKiBUaGUgbm9ybWFsIG9mIGEgbGluZSBpcyBhIHZlY3RvciB0aGF0IHBvaW50cyBwZXJwZW5kaWN1bGFyIGZyb20gaXQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5MaW5lLkdldE5vcm1hbFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgbGluZSB0byBjYWxjdWxhdGUgdGhlIG5vcm1hbCBvZi5cclxuICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gW291dF0gLSBBbiBvcHRpb25hbCBwb2ludCBvYmplY3QgdG8gc3RvcmUgdGhlIG5vcm1hbCBpbi5cclxuICpcclxuICogQHJldHVybiB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IFRoZSBub3JtYWwgb2YgdGhlIExpbmUuXHJcbiAqL1xyXG52YXIgR2V0Tm9ybWFsID0gZnVuY3Rpb24gKGxpbmUsIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBQb2ludCgpOyB9XHJcblxyXG4gICAgdmFyIGEgPSBBbmdsZShsaW5lKSAtIE1BVEhfQ09OU1QuVEFVO1xyXG5cclxuICAgIG91dC54ID0gTWF0aC5jb3MoYSk7XHJcbiAgICBvdXQueSA9IE1hdGguc2luKGEpO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldE5vcm1hbDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/GetNormal.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/GetPoint.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/geom/line/GetPoint.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Get a point on a line that's a given percentage along its length.\r\n *\r\n * @function Phaser.Geom.Line.GetPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Line} line - The line.\r\n * @param {number} position - A value between 0 and 1, where 0 is the start, 0.5 is the middle and 1 is the end of the line.\r\n * @param {(Phaser.Geom.Point|object)} [out] - An optional point, or point-like object, to store the coordinates of the point on the line.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} The point on the line.\r\n */\r\nvar GetPoint = function (line, position, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n out.x = line.x1 + (line.x2 - line.x1) * position;\r\n out.y = line.y1 + (line.y2 - line.y1) * position;\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvR2V0UG9pbnQuanM/NTgzNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLE9BQU87QUFDbEIsV0FBVywyQkFBMkI7QUFDdEM7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsbUJBQW1COztBQUUvQztBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvR2V0UG9pbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQb2ludCA9IHJlcXVpcmUoJy4uL3BvaW50L1BvaW50Jyk7XHJcblxyXG4vKipcclxuICogR2V0IGEgcG9pbnQgb24gYSBsaW5lIHRoYXQncyBhIGdpdmVuIHBlcmNlbnRhZ2UgYWxvbmcgaXRzIGxlbmd0aC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkxpbmUuR2V0UG9pbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIGxpbmUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvbiAtIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLCB3aGVyZSAwIGlzIHRoZSBzdGFydCwgMC41IGlzIHRoZSBtaWRkbGUgYW5kIDEgaXMgdGhlIGVuZCBvZiB0aGUgbGluZS5cclxuICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gW291dF0gLSBBbiBvcHRpb25hbCBwb2ludCwgb3IgcG9pbnQtbGlrZSBvYmplY3QsIHRvIHN0b3JlIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnQgb24gdGhlIGxpbmUuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBUaGUgcG9pbnQgb24gdGhlIGxpbmUuXHJcbiAqL1xyXG52YXIgR2V0UG9pbnQgPSBmdW5jdGlvbiAobGluZSwgcG9zaXRpb24sIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBQb2ludCgpOyB9XHJcblxyXG4gICAgb3V0LnggPSBsaW5lLngxICsgKGxpbmUueDIgLSBsaW5lLngxKSAqIHBvc2l0aW9uO1xyXG4gICAgb3V0LnkgPSBsaW5lLnkxICsgKGxpbmUueTIgLSBsaW5lLnkxKSAqIHBvc2l0aW9uO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldFBvaW50O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/GetPoint.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/GetPoints.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/geom/line/GetPoints.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Length = __webpack_require__(/*! ./Length */ \"./node_modules/phaser/src/geom/line/Length.js\");\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Get a number of points along a line's length.\r\n *\r\n * Provide a `quantity` to get an exact number of points along the line.\r\n *\r\n * Provide a `stepRate` to ensure a specific distance between each point on the line. Set `quantity` to `0` when\r\n * providing a `stepRate`.\r\n *\r\n * @function Phaser.Geom.Line.GetPoints\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point[]} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Line} line - The line.\r\n * @param {integer} quantity - The number of points to place on the line. Set to `0` to use `stepRate` instead.\r\n * @param {number} [stepRate] - The distance between each point on the line. When set, `quantity` is implied and should be set to `0`.\r\n * @param {(array|Phaser.Geom.Point[])} [out] - An optional array of Points, or point-like objects, to store the coordinates of the points on the line.\r\n *\r\n * @return {(array|Phaser.Geom.Point[])} An array of Points, or point-like objects, containing the coordinates of the points on the line.\r\n */\r\nvar GetPoints = function (line, quantity, stepRate, out)\r\n{\r\n if (out === undefined) { out = []; }\r\n\r\n // If quantity is a falsey value (false, null, 0, undefined, etc) then we calculate it based on the stepRate instead.\r\n if (!quantity)\r\n {\r\n quantity = Length(line) / stepRate;\r\n }\r\n\r\n var x1 = line.x1;\r\n var y1 = line.y1;\r\n\r\n var x2 = line.x2;\r\n var y2 = line.y2;\r\n\r\n for (var i = 0; i < quantity; i++)\r\n {\r\n var position = i / quantity;\r\n\r\n var x = x1 + (x2 - x1) * position;\r\n var y = y1 + (y2 - y1) * position;\r\n\r\n out.push(new Point(x, y));\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetPoints;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvR2V0UG9pbnRzLmpzP2ExMjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGFBQWEsbUJBQU8sQ0FBQywrREFBVTtBQUMvQixZQUFZLG1CQUFPLENBQUMscUVBQWdCOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxvQkFBb0I7QUFDakM7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsNEJBQTRCO0FBQ3ZDO0FBQ0EsWUFBWSw0QkFBNEI7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQixjQUFjO0FBQ2pDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvR2V0UG9pbnRzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTGVuZ3RoID0gcmVxdWlyZSgnLi9MZW5ndGgnKTtcclxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vcG9pbnQvUG9pbnQnKTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgYSBudW1iZXIgb2YgcG9pbnRzIGFsb25nIGEgbGluZSdzIGxlbmd0aC5cclxuICpcclxuICogUHJvdmlkZSBhIGBxdWFudGl0eWAgdG8gZ2V0IGFuIGV4YWN0IG51bWJlciBvZiBwb2ludHMgYWxvbmcgdGhlIGxpbmUuXHJcbiAqXHJcbiAqIFByb3ZpZGUgYSBgc3RlcFJhdGVgIHRvIGVuc3VyZSBhIHNwZWNpZmljIGRpc3RhbmNlIGJldHdlZW4gZWFjaCBwb2ludCBvbiB0aGUgbGluZS4gU2V0IGBxdWFudGl0eWAgdG8gYDBgIHdoZW5cclxuICogcHJvdmlkaW5nIGEgYHN0ZXBSYXRlYC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkxpbmUuR2V0UG9pbnRzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnRbXX0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIGxpbmUuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gcXVhbnRpdHkgLSBUaGUgbnVtYmVyIG9mIHBvaW50cyB0byBwbGFjZSBvbiB0aGUgbGluZS4gU2V0IHRvIGAwYCB0byB1c2UgYHN0ZXBSYXRlYCBpbnN0ZWFkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXBSYXRlXSAtIFRoZSBkaXN0YW5jZSBiZXR3ZWVuIGVhY2ggcG9pbnQgb24gdGhlIGxpbmUuIFdoZW4gc2V0LCBgcXVhbnRpdHlgIGlzIGltcGxpZWQgYW5kIHNob3VsZCBiZSBzZXQgdG8gYDBgLlxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2VvbS5Qb2ludFtdKX0gW291dF0gLSBBbiBvcHRpb25hbCBhcnJheSBvZiBQb2ludHMsIG9yIHBvaW50LWxpa2Ugb2JqZWN0cywgdG8gc3RvcmUgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludHMgb24gdGhlIGxpbmUuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2VvbS5Qb2ludFtdKX0gQW4gYXJyYXkgb2YgUG9pbnRzLCBvciBwb2ludC1saWtlIG9iamVjdHMsIGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludHMgb24gdGhlIGxpbmUuXHJcbiAqL1xyXG52YXIgR2V0UG9pbnRzID0gZnVuY3Rpb24gKGxpbmUsIHF1YW50aXR5LCBzdGVwUmF0ZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gW107IH1cclxuXHJcbiAgICAvLyAgSWYgcXVhbnRpdHkgaXMgYSBmYWxzZXkgdmFsdWUgKGZhbHNlLCBudWxsLCAwLCB1bmRlZmluZWQsIGV0YykgdGhlbiB3ZSBjYWxjdWxhdGUgaXQgYmFzZWQgb24gdGhlIHN0ZXBSYXRlIGluc3RlYWQuXHJcbiAgICBpZiAoIXF1YW50aXR5KVxyXG4gICAge1xyXG4gICAgICAgIHF1YW50aXR5ID0gTGVuZ3RoKGxpbmUpIC8gc3RlcFJhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHgxID0gbGluZS54MTtcclxuICAgIHZhciB5MSA9IGxpbmUueTE7XHJcblxyXG4gICAgdmFyIHgyID0gbGluZS54MjtcclxuICAgIHZhciB5MiA9IGxpbmUueTI7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWFudGl0eTsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBwb3NpdGlvbiA9IGkgLyBxdWFudGl0eTtcclxuXHJcbiAgICAgICAgdmFyIHggPSB4MSArICh4MiAtIHgxKSAqIHBvc2l0aW9uO1xyXG4gICAgICAgIHZhciB5ID0geTEgKyAoeTIgLSB5MSkgKiBwb3NpdGlvbjtcclxuXHJcbiAgICAgICAgb3V0LnB1c2gobmV3IFBvaW50KHgsIHkpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRQb2ludHM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/GetPoints.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/GetShortestDistance.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/geom/line/GetShortestDistance.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @author Florian Mertens\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Get the shortest distance from a Line to the given Point.\r\n *\r\n * @function Phaser.Geom.Line.GetShortestDistance\r\n * @since 3.16.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to get the distance from.\r\n * @param {(Phaser.Geom.Point|object)} point - The point to get the shortest distance to.\r\n *\r\n * @return {number} The shortest distance from the line to the point.\r\n */\r\nvar GetShortestDistance = function (line, point)\r\n{\r\n var x1 = line.x1;\r\n var y1 = line.y1;\r\n\r\n var x2 = line.x2;\r\n var y2 = line.y2;\r\n\r\n var L2 = (((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1)));\r\n\r\n if (L2 === 0)\r\n {\r\n return false;\r\n }\r\n\r\n var s = (((y1 - point.y) * (x2 - x1)) - ((x1 - point.x) * (y2 - y1))) / L2;\r\n\r\n return Math.abs(s) * Math.sqrt(L2);\r\n};\r\n\r\nmodule.exports = GetShortestDistance;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvR2V0U2hvcnRlc3REaXN0YW5jZS5qcz85N2JkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVywyQkFBMkI7QUFDdEM7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvR2V0U2hvcnRlc3REaXN0YW5jZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAYXV0aG9yICAgICAgIEZsb3JpYW4gTWVydGVuc1xyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgc2hvcnRlc3QgZGlzdGFuY2UgZnJvbSBhIExpbmUgdG8gdGhlIGdpdmVuIFBvaW50LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uTGluZS5HZXRTaG9ydGVzdERpc3RhbmNlXHJcbiAqIEBzaW5jZSAzLjE2LjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgbGluZSB0byBnZXQgdGhlIGRpc3RhbmNlIGZyb20uXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IHBvaW50IC0gVGhlIHBvaW50IHRvIGdldCB0aGUgc2hvcnRlc3QgZGlzdGFuY2UgdG8uXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHNob3J0ZXN0IGRpc3RhbmNlIGZyb20gdGhlIGxpbmUgdG8gdGhlIHBvaW50LlxyXG4gKi9cclxudmFyIEdldFNob3J0ZXN0RGlzdGFuY2UgPSBmdW5jdGlvbiAobGluZSwgcG9pbnQpXHJcbntcclxuICAgIHZhciB4MSA9IGxpbmUueDE7XHJcbiAgICB2YXIgeTEgPSBsaW5lLnkxO1xyXG5cclxuICAgIHZhciB4MiA9IGxpbmUueDI7XHJcbiAgICB2YXIgeTIgPSBsaW5lLnkyO1xyXG5cclxuICAgIHZhciBMMiA9ICgoKHgyIC0geDEpICogKHgyIC0geDEpKSArICgoeTIgLSB5MSkgKiAoeTIgLSB5MSkpKTtcclxuXHJcbiAgICBpZiAoTDIgPT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBzID0gKCgoeTEgLSBwb2ludC55KSAqICh4MiAtIHgxKSkgLSAoKHgxIC0gcG9pbnQueCkgKiAoeTIgLSB5MSkpKSAvIEwyO1xyXG5cclxuICAgIHJldHVybiBNYXRoLmFicyhzKSAqIE1hdGguc3FydChMMik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldFNob3J0ZXN0RGlzdGFuY2U7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/GetShortestDistance.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/Height.js":
/*!*****************************************************!*\
!*** ./node_modules/phaser/src/geom/line/Height.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculate the height of the given line.\r\n *\r\n * @function Phaser.Geom.Line.Height\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to calculate the height of.\r\n *\r\n * @return {number} The height of the line.\r\n */\r\nvar Height = function (line)\r\n{\r\n return Math.abs(line.y1 - line.y2);\r\n};\r\n\r\nmodule.exports = Height;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvSGVpZ2h0LmpzP2NkNGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvSGVpZ2h0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlIHRoZSBoZWlnaHQgb2YgdGhlIGdpdmVuIGxpbmUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5MaW5lLkhlaWdodFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIGxpbmUgdG8gY2FsY3VsYXRlIHRoZSBoZWlnaHQgb2YuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgbGluZS5cclxuICovXHJcbnZhciBIZWlnaHQgPSBmdW5jdGlvbiAobGluZSlcclxue1xyXG4gICAgcmV0dXJuIE1hdGguYWJzKGxpbmUueTEgLSBsaW5lLnkyKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSGVpZ2h0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/Height.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/Length.js":
/*!*****************************************************!*\
!*** ./node_modules/phaser/src/geom/line/Length.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculate the length of the given line.\r\n *\r\n * @function Phaser.Geom.Line.Length\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to calculate the length of.\r\n *\r\n * @return {number} The length of the line.\r\n */\r\nvar Length = function (line)\r\n{\r\n return Math.sqrt((line.x2 - line.x1) * (line.x2 - line.x1) + (line.y2 - line.y1) * (line.y2 - line.y1));\r\n};\r\n\r\nmodule.exports = Length;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvTGVuZ3RoLmpzP2U5ZGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvTGVuZ3RoLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlIHRoZSBsZW5ndGggb2YgdGhlIGdpdmVuIGxpbmUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5MaW5lLkxlbmd0aFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIGxpbmUgdG8gY2FsY3VsYXRlIHRoZSBsZW5ndGggb2YuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGxlbmd0aCBvZiB0aGUgbGluZS5cclxuICovXHJcbnZhciBMZW5ndGggPSBmdW5jdGlvbiAobGluZSlcclxue1xyXG4gICAgcmV0dXJuIE1hdGguc3FydCgobGluZS54MiAtIGxpbmUueDEpICogKGxpbmUueDIgLSBsaW5lLngxKSArIChsaW5lLnkyIC0gbGluZS55MSkgKiAobGluZS55MiAtIGxpbmUueTEpKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTGVuZ3RoO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/Length.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/Line.js":
/*!***************************************************!*\
!*** ./node_modules/phaser/src/geom/line/Line.js ***!
\***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GetPoint = __webpack_require__(/*! ./GetPoint */ \"./node_modules/phaser/src/geom/line/GetPoint.js\");\r\nvar GetPoints = __webpack_require__(/*! ./GetPoints */ \"./node_modules/phaser/src/geom/line/GetPoints.js\");\r\nvar GEOM_CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/geom/const.js\");\r\nvar Random = __webpack_require__(/*! ./Random */ \"./node_modules/phaser/src/geom/line/Random.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * Defines a Line segment, a part of a line between two endpoints.\r\n *\r\n * @class Line\r\n * @memberof Phaser.Geom\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x1=0] - The x coordinate of the lines starting point.\r\n * @param {number} [y1=0] - The y coordinate of the lines starting point.\r\n * @param {number} [x2=0] - The x coordinate of the lines ending point.\r\n * @param {number} [y2=0] - The y coordinate of the lines ending point.\r\n */\r\nvar Line = new Class({\r\n\r\n initialize:\r\n\r\n function Line (x1, y1, x2, y2)\r\n {\r\n if (x1 === undefined) { x1 = 0; }\r\n if (y1 === undefined) { y1 = 0; }\r\n if (x2 === undefined) { x2 = 0; }\r\n if (y2 === undefined) { y2 = 0; }\r\n\r\n /**\r\n * The geometry constant type of this object: `GEOM_CONST.LINE`.\r\n * Used for fast type comparisons.\r\n *\r\n * @name Phaser.Geom.Line#type\r\n * @type {integer}\r\n * @readonly\r\n * @since 3.19.0\r\n */\r\n this.type = GEOM_CONST.LINE;\r\n\r\n /**\r\n * The x coordinate of the lines starting point.\r\n *\r\n * @name Phaser.Geom.Line#x1\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.x1 = x1;\r\n\r\n /**\r\n * The y coordinate of the lines starting point.\r\n *\r\n * @name Phaser.Geom.Line#y1\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.y1 = y1;\r\n\r\n /**\r\n * The x coordinate of the lines ending point.\r\n *\r\n * @name Phaser.Geom.Line#x2\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.x2 = x2;\r\n\r\n /**\r\n * The y coordinate of the lines ending point.\r\n *\r\n * @name Phaser.Geom.Line#y2\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.y2 = y2;\r\n },\r\n\r\n /**\r\n * Get a point on a line that's a given percentage along its length.\r\n *\r\n * @method Phaser.Geom.Line#getPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [output,$return]\r\n *\r\n * @param {number} position - A value between 0 and 1, where 0 is the start, 0.5 is the middle and 1 is the end of the line.\r\n * @param {(Phaser.Geom.Point|object)} [output] - An optional point, or point-like object, to store the coordinates of the point on the line.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} A Point, or point-like object, containing the coordinates of the point on the line.\r\n */\r\n getPoint: function (position, output)\r\n {\r\n return GetPoint(this, position, output);\r\n },\r\n\r\n /**\r\n * Get a number of points along a line's length.\r\n *\r\n * Provide a `quantity` to get an exact number of points along the line.\r\n *\r\n * Provide a `stepRate` to ensure a specific distance between each point on the line. Set `quantity` to `0` when\r\n * providing a `stepRate`.\r\n *\r\n * @method Phaser.Geom.Line#getPoints\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [output,$return]\r\n *\r\n * @param {integer} quantity - The number of points to place on the line. Set to `0` to use `stepRate` instead.\r\n * @param {integer} [stepRate] - The distance between each point on the line. When set, `quantity` is implied and should be set to `0`.\r\n * @param {(array|Phaser.Geom.Point[])} [output] - An optional array of Points, or point-like objects, to store the coordinates of the points on the line.\r\n *\r\n * @return {(array|Phaser.Geom.Point[])} An array of Points, or point-like objects, containing the coordinates of the points on the line.\r\n */\r\n getPoints: function (quantity, stepRate, output)\r\n {\r\n return GetPoints(this, quantity, stepRate, output);\r\n },\r\n\r\n /**\r\n * Get a random Point on the Line.\r\n *\r\n * @method Phaser.Geom.Line#getRandomPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [point,$return]\r\n *\r\n * @param {(Phaser.Geom.Point|object)} [point] - An instance of a Point to be modified.\r\n *\r\n * @return {Phaser.Geom.Point} A random Point on the Line.\r\n */\r\n getRandomPoint: function (point)\r\n {\r\n return Random(this, point);\r\n },\r\n\r\n /**\r\n * Set new coordinates for the line endpoints.\r\n *\r\n * @method Phaser.Geom.Line#setTo\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x1=0] - The x coordinate of the lines starting point.\r\n * @param {number} [y1=0] - The y coordinate of the lines starting point.\r\n * @param {number} [x2=0] - The x coordinate of the lines ending point.\r\n * @param {number} [y2=0] - The y coordinate of the lines ending point.\r\n *\r\n * @return {Phaser.Geom.Line} This Line object.\r\n */\r\n setTo: function (x1, y1, x2, y2)\r\n {\r\n if (x1 === undefined) { x1 = 0; }\r\n if (y1 === undefined) { y1 = 0; }\r\n if (x2 === undefined) { x2 = 0; }\r\n if (y2 === undefined) { y2 = 0; }\r\n\r\n this.x1 = x1;\r\n this.y1 = y1;\r\n\r\n this.x2 = x2;\r\n this.y2 = y2;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Returns a Vector2 object that corresponds to the start of this Line.\r\n *\r\n * @method Phaser.Geom.Line#getPointA\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [vec2,$return]\r\n *\r\n * @param {Phaser.Math.Vector2} [vec2] - A Vector2 object to set the results in. If `undefined` a new Vector2 will be created.\r\n *\r\n * @return {Phaser.Math.Vector2} A Vector2 object that corresponds to the start of this Line.\r\n */\r\n getPointA: function (vec2)\r\n {\r\n if (vec2 === undefined) { vec2 = new Vector2(); }\r\n\r\n vec2.set(this.x1, this.y1);\r\n\r\n return vec2;\r\n },\r\n\r\n /**\r\n * Returns a Vector2 object that corresponds to the end of this Line.\r\n *\r\n * @method Phaser.Geom.Line#getPointB\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [vec2,$return]\r\n *\r\n * @param {Phaser.Math.Vector2} [vec2] - A Vector2 object to set the results in. If `undefined` a new Vector2 will be created.\r\n *\r\n * @return {Phaser.Math.Vector2} A Vector2 object that corresponds to the end of this Line.\r\n */\r\n getPointB: function (vec2)\r\n {\r\n if (vec2 === undefined) { vec2 = new Vector2(); }\r\n\r\n vec2.set(this.x2, this.y2);\r\n\r\n return vec2;\r\n },\r\n\r\n /**\r\n * The left position of the Line.\r\n *\r\n * @name Phaser.Geom.Line#left\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n left: {\r\n\r\n get: function ()\r\n {\r\n return Math.min(this.x1, this.x2);\r\n },\r\n\r\n set: function (value)\r\n {\r\n if (this.x1 <= this.x2)\r\n {\r\n this.x1 = value;\r\n }\r\n else\r\n {\r\n this.x2 = value;\r\n }\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The right position of the Line.\r\n *\r\n * @name Phaser.Geom.Line#right\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n right: {\r\n\r\n get: function ()\r\n {\r\n return Math.max(this.x1, this.x2);\r\n },\r\n\r\n set: function (value)\r\n {\r\n if (this.x1 > this.x2)\r\n {\r\n this.x1 = value;\r\n }\r\n else\r\n {\r\n this.x2 = value;\r\n }\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The top position of the Line.\r\n *\r\n * @name Phaser.Geom.Line#top\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n top: {\r\n\r\n get: function ()\r\n {\r\n return Math.min(this.y1, this.y2);\r\n },\r\n\r\n set: function (value)\r\n {\r\n if (this.y1 <= this.y2)\r\n {\r\n this.y1 = value;\r\n }\r\n else\r\n {\r\n this.y2 = value;\r\n }\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The bottom position of the Line.\r\n *\r\n * @name Phaser.Geom.Line#bottom\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n bottom: {\r\n\r\n get: function ()\r\n {\r\n return Math.max(this.y1, this.y2);\r\n },\r\n\r\n set: function (value)\r\n {\r\n if (this.y1 > this.y2)\r\n {\r\n this.y1 = value;\r\n }\r\n else\r\n {\r\n this.y2 = value;\r\n }\r\n }\r\n\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Line;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvTGluZS5qcz85OTIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxtRUFBWTtBQUNuQyxnQkFBZ0IsbUJBQU8sQ0FBQyxxRUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyx5REFBVTtBQUNuQyxhQUFhLG1CQUFPLENBQUMsK0RBQVU7QUFDL0IsY0FBYyxtQkFBTyxDQUFDLHFFQUFvQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLCtCQUErQixRQUFRO0FBQ3ZDLCtCQUErQixRQUFRO0FBQ3ZDLCtCQUErQixRQUFRO0FBQ3ZDLCtCQUErQixRQUFROztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLDJCQUEyQjtBQUMxQztBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLDRCQUE0QjtBQUMzQztBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQSxlQUFlLDJCQUEyQjtBQUMxQztBQUNBLGdCQUFnQixrQkFBa0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixpQkFBaUI7QUFDakM7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLFFBQVE7QUFDdkMsK0JBQStCLFFBQVE7QUFDdkMsK0JBQStCLFFBQVE7QUFDdkMsK0JBQStCLFFBQVE7O0FBRXZDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsc0JBQXNCOztBQUV2RDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsc0JBQXNCOztBQUV2RDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9saW5lL0xpbmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBHZXRQb2ludCA9IHJlcXVpcmUoJy4vR2V0UG9pbnQnKTtcclxudmFyIEdldFBvaW50cyA9IHJlcXVpcmUoJy4vR2V0UG9pbnRzJyk7XHJcbnZhciBHRU9NX0NPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcclxudmFyIFJhbmRvbSA9IHJlcXVpcmUoJy4vUmFuZG9tJyk7XHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9WZWN0b3IyJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBEZWZpbmVzIGEgTGluZSBzZWdtZW50LCBhIHBhcnQgb2YgYSBsaW5lIGJldHdlZW4gdHdvIGVuZHBvaW50cy5cclxuICpcclxuICogQGNsYXNzIExpbmVcclxuICogQG1lbWJlcm9mIFBoYXNlci5HZW9tXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IFt4MT0wXSAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIGxpbmVzIHN0YXJ0aW5nIHBvaW50LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3kxPTBdIC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgbGluZXMgc3RhcnRpbmcgcG9pbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeDI9MF0gLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBsaW5lcyBlbmRpbmcgcG9pbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeTI9MF0gLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBsaW5lcyBlbmRpbmcgcG9pbnQuXHJcbiAqL1xyXG52YXIgTGluZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBMaW5lICh4MSwgeTEsIHgyLCB5MilcclxuICAgIHtcclxuICAgICAgICBpZiAoeDEgPT09IHVuZGVmaW5lZCkgeyB4MSA9IDA7IH1cclxuICAgICAgICBpZiAoeTEgPT09IHVuZGVmaW5lZCkgeyB5MSA9IDA7IH1cclxuICAgICAgICBpZiAoeDIgPT09IHVuZGVmaW5lZCkgeyB4MiA9IDA7IH1cclxuICAgICAgICBpZiAoeTIgPT09IHVuZGVmaW5lZCkgeyB5MiA9IDA7IH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGdlb21ldHJ5IGNvbnN0YW50IHR5cGUgb2YgdGhpcyBvYmplY3Q6IGBHRU9NX0NPTlNULkxJTkVgLlxyXG4gICAgICAgICAqIFVzZWQgZm9yIGZhc3QgdHlwZSBjb21wYXJpc29ucy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLkxpbmUjdHlwZVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE5LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnR5cGUgPSBHRU9NX0NPTlNULkxJTkU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIGxpbmVzIHN0YXJ0aW5nIHBvaW50LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdlb20uTGluZSN4MVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy54MSA9IHgxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBsaW5lcyBzdGFydGluZyBwb2ludC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLkxpbmUjeTFcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueTEgPSB5MTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgbGluZXMgZW5kaW5nIHBvaW50LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdlb20uTGluZSN4MlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy54MiA9IHgyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBsaW5lcyBlbmRpbmcgcG9pbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5MaW5lI3kyXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnkyID0geTI7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGEgcG9pbnQgb24gYSBsaW5lIHRoYXQncyBhIGdpdmVuIHBlcmNlbnRhZ2UgYWxvbmcgaXRzIGxlbmd0aC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLkxpbmUjZ2V0UG9pbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXRwdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcG9zaXRpb24gLSBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMSwgd2hlcmUgMCBpcyB0aGUgc3RhcnQsIDAuNSBpcyB0aGUgbWlkZGxlIGFuZCAxIGlzIHRoZSBlbmQgb2YgdGhlIGxpbmUuXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBbb3V0cHV0XSAtIEFuIG9wdGlvbmFsIHBvaW50LCBvciBwb2ludC1saWtlIG9iamVjdCwgdG8gc3RvcmUgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCBvbiB0aGUgbGluZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gQSBQb2ludCwgb3IgcG9pbnQtbGlrZSBvYmplY3QsIGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCBvbiB0aGUgbGluZS5cclxuICAgICAqL1xyXG4gICAgZ2V0UG9pbnQ6IGZ1bmN0aW9uIChwb3NpdGlvbiwgb3V0cHV0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBHZXRQb2ludCh0aGlzLCBwb3NpdGlvbiwgb3V0cHV0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYSBudW1iZXIgb2YgcG9pbnRzIGFsb25nIGEgbGluZSdzIGxlbmd0aC5cclxuICAgICAqXHJcbiAgICAgKiBQcm92aWRlIGEgYHF1YW50aXR5YCB0byBnZXQgYW4gZXhhY3QgbnVtYmVyIG9mIHBvaW50cyBhbG9uZyB0aGUgbGluZS5cclxuICAgICAqXHJcbiAgICAgKiBQcm92aWRlIGEgYHN0ZXBSYXRlYCB0byBlbnN1cmUgYSBzcGVjaWZpYyBkaXN0YW5jZSBiZXR3ZWVuIGVhY2ggcG9pbnQgb24gdGhlIGxpbmUuIFNldCBgcXVhbnRpdHlgIHRvIGAwYCB3aGVuXHJcbiAgICAgKiBwcm92aWRpbmcgYSBgc3RlcFJhdGVgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uTGluZSNnZXRQb2ludHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXRwdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHF1YW50aXR5IC0gVGhlIG51bWJlciBvZiBwb2ludHMgdG8gcGxhY2Ugb24gdGhlIGxpbmUuIFNldCB0byBgMGAgdG8gdXNlIGBzdGVwUmF0ZWAgaW5zdGVhZC5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3N0ZXBSYXRlXSAtIFRoZSBkaXN0YW5jZSBiZXR3ZWVuIGVhY2ggcG9pbnQgb24gdGhlIGxpbmUuIFdoZW4gc2V0LCBgcXVhbnRpdHlgIGlzIGltcGxpZWQgYW5kIHNob3VsZCBiZSBzZXQgdG8gYDBgLlxyXG4gICAgICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdlb20uUG9pbnRbXSl9IFtvdXRwdXRdIC0gQW4gb3B0aW9uYWwgYXJyYXkgb2YgUG9pbnRzLCBvciBwb2ludC1saWtlIG9iamVjdHMsIHRvIHN0b3JlIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnRzIG9uIHRoZSBsaW5lLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2VvbS5Qb2ludFtdKX0gQW4gYXJyYXkgb2YgUG9pbnRzLCBvciBwb2ludC1saWtlIG9iamVjdHMsIGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludHMgb24gdGhlIGxpbmUuXHJcbiAgICAgKi9cclxuICAgIGdldFBvaW50czogZnVuY3Rpb24gKHF1YW50aXR5LCBzdGVwUmF0ZSwgb3V0cHV0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBHZXRQb2ludHModGhpcywgcXVhbnRpdHksIHN0ZXBSYXRlLCBvdXRwdXQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhIHJhbmRvbSBQb2ludCBvbiB0aGUgTGluZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLkxpbmUjZ2V0UmFuZG9tUG9pbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtwb2ludCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IFtwb2ludF0gLSBBbiBpbnN0YW5jZSBvZiBhIFBvaW50IHRvIGJlIG1vZGlmaWVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlBvaW50fSBBIHJhbmRvbSBQb2ludCBvbiB0aGUgTGluZS5cclxuICAgICAqL1xyXG4gICAgZ2V0UmFuZG9tUG9pbnQ6IGZ1bmN0aW9uIChwb2ludClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gUmFuZG9tKHRoaXMsIHBvaW50KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgbmV3IGNvb3JkaW5hdGVzIGZvciB0aGUgbGluZSBlbmRwb2ludHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5MaW5lI3NldFRvXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3gxPTBdIC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgbGluZXMgc3RhcnRpbmcgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3kxPTBdIC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgbGluZXMgc3RhcnRpbmcgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3gyPTBdIC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgbGluZXMgZW5kaW5nIHBvaW50LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5Mj0wXSAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGxpbmVzIGVuZGluZyBwb2ludC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5MaW5lfSBUaGlzIExpbmUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRUbzogZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4MSA9PT0gdW5kZWZpbmVkKSB7IHgxID0gMDsgfVxyXG4gICAgICAgIGlmICh5MSA9PT0gdW5kZWZpbmVkKSB7IHkxID0gMDsgfVxyXG4gICAgICAgIGlmICh4MiA9PT0gdW5kZWZpbmVkKSB7IHgyID0gMDsgfVxyXG4gICAgICAgIGlmICh5MiA9PT0gdW5kZWZpbmVkKSB7IHkyID0gMDsgfVxyXG5cclxuICAgICAgICB0aGlzLngxID0geDE7XHJcbiAgICAgICAgdGhpcy55MSA9IHkxO1xyXG5cclxuICAgICAgICB0aGlzLngyID0geDI7XHJcbiAgICAgICAgdGhpcy55MiA9IHkyO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgVmVjdG9yMiBvYmplY3QgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgc3RhcnQgb2YgdGhpcyBMaW5lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uTGluZSNnZXRQb2ludEFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBPIC0gW3ZlYzIsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFt2ZWMyXSAtIEEgVmVjdG9yMiBvYmplY3QgdG8gc2V0IHRoZSByZXN1bHRzIGluLiBJZiBgdW5kZWZpbmVkYCBhIG5ldyBWZWN0b3IyIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBBIFZlY3RvcjIgb2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHN0YXJ0IG9mIHRoaXMgTGluZS5cclxuICAgICAqL1xyXG4gICAgZ2V0UG9pbnRBOiBmdW5jdGlvbiAodmVjMilcclxuICAgIHtcclxuICAgICAgICBpZiAodmVjMiA9PT0gdW5kZWZpbmVkKSB7IHZlYzIgPSBuZXcgVmVjdG9yMigpOyB9XHJcblxyXG4gICAgICAgIHZlYzIuc2V0KHRoaXMueDEsIHRoaXMueTEpO1xyXG5cclxuICAgICAgICByZXR1cm4gdmVjMjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgVmVjdG9yMiBvYmplY3QgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZW5kIG9mIHRoaXMgTGluZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLkxpbmUjZ2V0UG9pbnRCXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLk1hdGguVmVjdG9yMn0gTyAtIFt2ZWMyLCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTWF0aC5WZWN0b3IyfSBbdmVjMl0gLSBBIFZlY3RvcjIgb2JqZWN0IHRvIHNldCB0aGUgcmVzdWx0cyBpbi4gSWYgYHVuZGVmaW5lZGAgYSBuZXcgVmVjdG9yMiB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gQSBWZWN0b3IyIG9iamVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBlbmQgb2YgdGhpcyBMaW5lLlxyXG4gICAgICovXHJcbiAgICBnZXRQb2ludEI6IGZ1bmN0aW9uICh2ZWMyKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh2ZWMyID09PSB1bmRlZmluZWQpIHsgdmVjMiA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICAgICAgdmVjMi5zZXQodGhpcy54MiwgdGhpcy55Mik7XHJcblxyXG4gICAgICAgIHJldHVybiB2ZWMyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBsZWZ0IHBvc2l0aW9uIG9mIHRoZSBMaW5lLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLkxpbmUjbGVmdFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBsZWZ0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLngxLCB0aGlzLngyKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLngxIDw9IHRoaXMueDIpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMueDEgPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMueDIgPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHJpZ2h0IHBvc2l0aW9uIG9mIHRoZSBMaW5lLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLkxpbmUjcmlnaHRcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgcmlnaHQ6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMueDEsIHRoaXMueDIpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMueDEgPiB0aGlzLngyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLngxID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLngyID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0b3AgcG9zaXRpb24gb2YgdGhlIExpbmUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdlb20uTGluZSN0b3BcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdG9wOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLnkxLCB0aGlzLnkyKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnkxIDw9IHRoaXMueTIpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMueTEgPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMueTIgPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGJvdHRvbSBwb3NpdGlvbiBvZiB0aGUgTGluZS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5MaW5lI2JvdHRvbVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBib3R0b206IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMueTEsIHRoaXMueTIpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMueTEgPiB0aGlzLnkyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnkxID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnkyID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IExpbmU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/Line.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/NormalAngle.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/geom/line/NormalAngle.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\nvar Wrap = __webpack_require__(/*! ../../math/Wrap */ \"./node_modules/phaser/src/math/Wrap.js\");\r\nvar Angle = __webpack_require__(/*! ./Angle */ \"./node_modules/phaser/src/geom/line/Angle.js\");\r\n\r\n/**\r\n * Get the angle of the normal of the given line in radians.\r\n *\r\n * @function Phaser.Geom.Line.NormalAngle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to calculate the angle of the normal of.\r\n *\r\n * @return {number} The angle of the normal of the line in radians.\r\n */\r\nvar NormalAngle = function (line)\r\n{\r\n var angle = Angle(line) - MATH_CONST.TAU;\r\n\r\n return Wrap(angle, -Math.PI, Math.PI);\r\n};\r\n\r\nmodule.exports = NormalAngle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvTm9ybWFsQW5nbGUuanM/NGUzMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsaUVBQWtCO0FBQzNDLFdBQVcsbUJBQU8sQ0FBQywrREFBaUI7QUFDcEMsWUFBWSxtQkFBTyxDQUFDLDZEQUFTOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9saW5lL05vcm1hbEFuZ2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTUFUSF9DT05TVCA9IHJlcXVpcmUoJy4uLy4uL21hdGgvY29uc3QnKTtcclxudmFyIFdyYXAgPSByZXF1aXJlKCcuLi8uLi9tYXRoL1dyYXAnKTtcclxudmFyIEFuZ2xlID0gcmVxdWlyZSgnLi9BbmdsZScpO1xyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgYW5nbGUgb2YgdGhlIG5vcm1hbCBvZiB0aGUgZ2l2ZW4gbGluZSBpbiByYWRpYW5zLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uTGluZS5Ob3JtYWxBbmdsZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIGxpbmUgdG8gY2FsY3VsYXRlIHRoZSBhbmdsZSBvZiB0aGUgbm9ybWFsIG9mLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBhbmdsZSBvZiB0aGUgbm9ybWFsIG9mIHRoZSBsaW5lIGluIHJhZGlhbnMuXHJcbiAqL1xyXG52YXIgTm9ybWFsQW5nbGUgPSBmdW5jdGlvbiAobGluZSlcclxue1xyXG4gICAgdmFyIGFuZ2xlID0gQW5nbGUobGluZSkgLSBNQVRIX0NPTlNULlRBVTtcclxuXHJcbiAgICByZXR1cm4gV3JhcChhbmdsZSwgLU1hdGguUEksIE1hdGguUEkpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBOb3JtYWxBbmdsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/NormalAngle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/NormalX.js":
/*!******************************************************!*\
!*** ./node_modules/phaser/src/geom/line/NormalX.js ***!
\******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\nvar Angle = __webpack_require__(/*! ./Angle */ \"./node_modules/phaser/src/geom/line/Angle.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Geom.Line.NormalX\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The Line object to get the normal value from.\r\n *\r\n * @return {number} [description]\r\n */\r\nvar NormalX = function (line)\r\n{\r\n return Math.cos(Angle(line) - MATH_CONST.TAU);\r\n};\r\n\r\nmodule.exports = NormalX;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvTm9ybWFsWC5qcz9kOWQ1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyxpRUFBa0I7QUFDM0MsWUFBWSxtQkFBTyxDQUFDLDZEQUFTOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9saW5lL05vcm1hbFguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBNQVRIX0NPTlNUID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9jb25zdCcpO1xyXG52YXIgQW5nbGUgPSByZXF1aXJlKCcuL0FuZ2xlJyk7XHJcblxyXG4vKipcclxuICogW2Rlc2NyaXB0aW9uXVxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uTGluZS5Ob3JtYWxYXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgTGluZSBvYmplY3QgdG8gZ2V0IHRoZSBub3JtYWwgdmFsdWUgZnJvbS5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG52YXIgTm9ybWFsWCA9IGZ1bmN0aW9uIChsaW5lKVxyXG57XHJcbiAgICByZXR1cm4gTWF0aC5jb3MoQW5nbGUobGluZSkgLSBNQVRIX0NPTlNULlRBVSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE5vcm1hbFg7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/NormalX.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/NormalY.js":
/*!******************************************************!*\
!*** ./node_modules/phaser/src/geom/line/NormalY.js ***!
\******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\nvar Angle = __webpack_require__(/*! ./Angle */ \"./node_modules/phaser/src/geom/line/Angle.js\");\r\n\r\n/**\r\n * The Y value of the normal of the given line.\r\n * The normal of a line is a vector that points perpendicular from it.\r\n *\r\n * @function Phaser.Geom.Line.NormalY\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to calculate the normal of.\r\n *\r\n * @return {number} The Y value of the normal of the Line.\r\n */\r\nvar NormalY = function (line)\r\n{\r\n return Math.sin(Angle(line) - MATH_CONST.TAU);\r\n};\r\n\r\nmodule.exports = NormalY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvTm9ybWFsWS5qcz8yMWJkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyxpRUFBa0I7QUFDM0MsWUFBWSxtQkFBTyxDQUFDLDZEQUFTOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvTm9ybWFsWS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIE1BVEhfQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9tYXRoL2NvbnN0Jyk7XHJcbnZhciBBbmdsZSA9IHJlcXVpcmUoJy4vQW5nbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBUaGUgWSB2YWx1ZSBvZiB0aGUgbm9ybWFsIG9mIHRoZSBnaXZlbiBsaW5lLlxyXG4gKiBUaGUgbm9ybWFsIG9mIGEgbGluZSBpcyBhIHZlY3RvciB0aGF0IHBvaW50cyBwZXJwZW5kaWN1bGFyIGZyb20gaXQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5MaW5lLk5vcm1hbFlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uTGluZX0gbGluZSAtIFRoZSBsaW5lIHRvIGNhbGN1bGF0ZSB0aGUgbm9ybWFsIG9mLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBZIHZhbHVlIG9mIHRoZSBub3JtYWwgb2YgdGhlIExpbmUuXHJcbiAqL1xyXG52YXIgTm9ybWFsWSA9IGZ1bmN0aW9uIChsaW5lKVxyXG57XHJcbiAgICByZXR1cm4gTWF0aC5zaW4oQW5nbGUobGluZSkgLSBNQVRIX0NPTlNULlRBVSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE5vcm1hbFk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/NormalY.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/Offset.js":
/*!*****************************************************!*\
!*** ./node_modules/phaser/src/geom/line/Offset.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Offset a line by the given amount.\r\n *\r\n * @function Phaser.Geom.Line.Offset\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Line} O - [line,$return]\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to offset.\r\n * @param {number} x - The horizontal offset to add to the line.\r\n * @param {number} y - The vertical offset to add to the line.\r\n *\r\n * @return {Phaser.Geom.Line} The offset line.\r\n */\r\nvar Offset = function (line, x, y)\r\n{\r\n line.x1 += x;\r\n line.y1 += y;\r\n\r\n line.x2 += x;\r\n line.y2 += y;\r\n\r\n return line;\r\n};\r\n\r\nmodule.exports = Offset;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvT2Zmc2V0LmpzP2MyODAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsaUJBQWlCO0FBQzlCO0FBQ0EsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksaUJBQWlCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9saW5lL09mZnNldC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIE9mZnNldCBhIGxpbmUgYnkgdGhlIGdpdmVuIGFtb3VudC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkxpbmUuT2Zmc2V0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uTGluZX0gTyAtIFtsaW5lLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uTGluZX0gbGluZSAtIFRoZSBsaW5lIHRvIG9mZnNldC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBvZmZzZXQgdG8gYWRkIHRvIHRoZSBsaW5lLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBvZmZzZXQgdG8gYWRkIHRvIHRoZSBsaW5lLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5MaW5lfSBUaGUgb2Zmc2V0IGxpbmUuXHJcbiAqL1xyXG52YXIgT2Zmc2V0ID0gZnVuY3Rpb24gKGxpbmUsIHgsIHkpXHJcbntcclxuICAgIGxpbmUueDEgKz0geDtcclxuICAgIGxpbmUueTEgKz0geTtcclxuXHJcbiAgICBsaW5lLngyICs9IHg7XHJcbiAgICBsaW5lLnkyICs9IHk7XHJcblxyXG4gICAgcmV0dXJuIGxpbmU7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE9mZnNldDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/Offset.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/PerpSlope.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/geom/line/PerpSlope.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculate the perpendicular slope of the given line.\r\n *\r\n * @function Phaser.Geom.Line.PerpSlope\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to calculate the perpendicular slope of.\r\n *\r\n * @return {number} The perpendicular slope of the line.\r\n */\r\nvar PerpSlope = function (line)\r\n{\r\n return -((line.x2 - line.x1) / (line.y2 - line.y1));\r\n};\r\n\r\nmodule.exports = PerpSlope;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvUGVycFNsb3BlLmpzPzEyMzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvUGVycFNsb3BlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlIHRoZSBwZXJwZW5kaWN1bGFyIHNsb3BlIG9mIHRoZSBnaXZlbiBsaW5lLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uTGluZS5QZXJwU2xvcGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uTGluZX0gbGluZSAtIFRoZSBsaW5lIHRvIGNhbGN1bGF0ZSB0aGUgcGVycGVuZGljdWxhciBzbG9wZSBvZi5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgcGVycGVuZGljdWxhciBzbG9wZSBvZiB0aGUgbGluZS5cclxuICovXHJcbnZhciBQZXJwU2xvcGUgPSBmdW5jdGlvbiAobGluZSlcclxue1xyXG4gICAgcmV0dXJuIC0oKGxpbmUueDIgLSBsaW5lLngxKSAvIChsaW5lLnkyIC0gbGluZS55MSkpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQZXJwU2xvcGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/PerpSlope.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/Random.js":
/*!*****************************************************!*\
!*** ./node_modules/phaser/src/geom/line/Random.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Returns a random point on a given Line.\r\n *\r\n * @function Phaser.Geom.Line.Random\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Line} line - The Line to calculate the random Point on.\r\n * @param {(Phaser.Geom.Point|object)} [out] - An instance of a Point to be modified.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} A random Point on the Line.\r\n */\r\nvar Random = function (line, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n var t = Math.random();\r\n\r\n out.x = line.x1 + t * (line.x2 - line.x1);\r\n out.y = line.y1 + t * (line.y2 - line.y1);\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = Random;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvUmFuZG9tLmpzP2FhM2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRUFBZ0I7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVywyQkFBMkI7QUFDdEM7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsbUJBQW1COztBQUUvQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvUmFuZG9tLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYSByYW5kb20gcG9pbnQgb24gYSBnaXZlbiBMaW5lLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uTGluZS5SYW5kb21cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIExpbmUgdG8gY2FsY3VsYXRlIHRoZSByYW5kb20gUG9pbnQgb24uXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IFtvdXRdIC0gQW4gaW5zdGFuY2Ugb2YgYSBQb2ludCB0byBiZSBtb2RpZmllZC5cclxuICpcclxuICogQHJldHVybiB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IEEgcmFuZG9tIFBvaW50IG9uIHRoZSBMaW5lLlxyXG4gKi9cclxudmFyIFJhbmRvbSA9IGZ1bmN0aW9uIChsaW5lLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgUG9pbnQoKTsgfVxyXG5cclxuICAgIHZhciB0ID0gTWF0aC5yYW5kb20oKTtcclxuXHJcbiAgICBvdXQueCA9IGxpbmUueDEgKyB0ICogKGxpbmUueDIgLSBsaW5lLngxKTtcclxuICAgIG91dC55ID0gbGluZS55MSArIHQgKiAobGluZS55MiAtIGxpbmUueTEpO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJhbmRvbTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/Random.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/ReflectAngle.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/geom/line/ReflectAngle.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Angle = __webpack_require__(/*! ./Angle */ \"./node_modules/phaser/src/geom/line/Angle.js\");\r\nvar NormalAngle = __webpack_require__(/*! ./NormalAngle */ \"./node_modules/phaser/src/geom/line/NormalAngle.js\");\r\n\r\n/**\r\n * Calculate the reflected angle between two lines.\r\n *\r\n * This is the outgoing angle based on the angle of Line 1 and the normalAngle of Line 2.\r\n *\r\n * @function Phaser.Geom.Line.ReflectAngle\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} lineA - The first line.\r\n * @param {Phaser.Geom.Line} lineB - The second line.\r\n *\r\n * @return {number} The reflected angle between each line.\r\n */\r\nvar ReflectAngle = function (lineA, lineB)\r\n{\r\n return (2 * NormalAngle(lineB) - Math.PI - Angle(lineA));\r\n};\r\n\r\nmodule.exports = ReflectAngle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvUmVmbGVjdEFuZ2xlLmpzPzBhZTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyw2REFBUztBQUM3QixrQkFBa0IsbUJBQU8sQ0FBQyx5RUFBZTs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvUmVmbGVjdEFuZ2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQW5nbGUgPSByZXF1aXJlKCcuL0FuZ2xlJyk7XHJcbnZhciBOb3JtYWxBbmdsZSA9IHJlcXVpcmUoJy4vTm9ybWFsQW5nbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGUgdGhlIHJlZmxlY3RlZCBhbmdsZSBiZXR3ZWVuIHR3byBsaW5lcy5cclxuICpcclxuICogVGhpcyBpcyB0aGUgb3V0Z29pbmcgYW5nbGUgYmFzZWQgb24gdGhlIGFuZ2xlIG9mIExpbmUgMSBhbmQgdGhlIG5vcm1hbEFuZ2xlIG9mIExpbmUgMi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLkxpbmUuUmVmbGVjdEFuZ2xlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmVBIC0gVGhlIGZpcnN0IGxpbmUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uTGluZX0gbGluZUIgLSBUaGUgc2Vjb25kIGxpbmUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHJlZmxlY3RlZCBhbmdsZSBiZXR3ZWVuIGVhY2ggbGluZS5cclxuICovXHJcbnZhciBSZWZsZWN0QW5nbGUgPSBmdW5jdGlvbiAobGluZUEsIGxpbmVCKVxyXG57XHJcbiAgICByZXR1cm4gKDIgKiBOb3JtYWxBbmdsZShsaW5lQikgLSBNYXRoLlBJIC0gQW5nbGUobGluZUEpKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdEFuZ2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/ReflectAngle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/Rotate.js":
/*!*****************************************************!*\
!*** ./node_modules/phaser/src/geom/line/Rotate.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar RotateAroundXY = __webpack_require__(/*! ./RotateAroundXY */ \"./node_modules/phaser/src/geom/line/RotateAroundXY.js\");\r\n\r\n/**\r\n * Rotate a line around its midpoint by the given angle in radians.\r\n *\r\n * @function Phaser.Geom.Line.Rotate\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Line} O - [line,$return]\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to rotate.\r\n * @param {number} angle - The angle of rotation in radians.\r\n *\r\n * @return {Phaser.Geom.Line} The rotated line.\r\n */\r\nvar Rotate = function (line, angle)\r\n{\r\n var x = (line.x1 + line.x2) / 2;\r\n var y = (line.y1 + line.y2) / 2;\r\n\r\n return RotateAroundXY(line, x, y, angle);\r\n};\r\n\r\nmodule.exports = Rotate;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvUm90YXRlLmpzPzI3MWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHFCQUFxQixtQkFBTyxDQUFDLCtFQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUI7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLGlCQUFpQjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvUm90YXRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUm90YXRlQXJvdW5kWFkgPSByZXF1aXJlKCcuL1JvdGF0ZUFyb3VuZFhZJyk7XHJcblxyXG4vKipcclxuICogUm90YXRlIGEgbGluZSBhcm91bmQgaXRzIG1pZHBvaW50IGJ5IHRoZSBnaXZlbiBhbmdsZSBpbiByYWRpYW5zLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uTGluZS5Sb3RhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5MaW5lfSBPIC0gW2xpbmUsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIGxpbmUgdG8gcm90YXRlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgYW5nbGUgb2Ygcm90YXRpb24gaW4gcmFkaWFucy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uTGluZX0gVGhlIHJvdGF0ZWQgbGluZS5cclxuICovXHJcbnZhciBSb3RhdGUgPSBmdW5jdGlvbiAobGluZSwgYW5nbGUpXHJcbntcclxuICAgIHZhciB4ID0gKGxpbmUueDEgKyBsaW5lLngyKSAvIDI7XHJcbiAgICB2YXIgeSA9IChsaW5lLnkxICsgbGluZS55MikgLyAyO1xyXG5cclxuICAgIHJldHVybiBSb3RhdGVBcm91bmRYWShsaW5lLCB4LCB5LCBhbmdsZSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJvdGF0ZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/Rotate.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/RotateAroundPoint.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/geom/line/RotateAroundPoint.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar RotateAroundXY = __webpack_require__(/*! ./RotateAroundXY */ \"./node_modules/phaser/src/geom/line/RotateAroundXY.js\");\r\n\r\n/**\r\n * Rotate a line around a point by the given angle in radians.\r\n *\r\n * @function Phaser.Geom.Line.RotateAroundPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Line} O - [line,$return]\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to rotate.\r\n * @param {(Phaser.Geom.Point|object)} point - The point to rotate the line around.\r\n * @param {number} angle - The angle of rotation in radians.\r\n *\r\n * @return {Phaser.Geom.Line} The rotated line.\r\n */\r\nvar RotateAroundPoint = function (line, point, angle)\r\n{\r\n return RotateAroundXY(line, point.x, point.y, angle);\r\n};\r\n\r\nmodule.exports = RotateAroundPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvUm90YXRlQXJvdW5kUG9pbnQuanM/NTM3YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEscUJBQXFCLG1CQUFPLENBQUMsK0VBQWtCOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGlCQUFpQjtBQUM5QjtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksaUJBQWlCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvUm90YXRlQXJvdW5kUG9pbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBSb3RhdGVBcm91bmRYWSA9IHJlcXVpcmUoJy4vUm90YXRlQXJvdW5kWFknKTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGUgYSBsaW5lIGFyb3VuZCBhIHBvaW50IGJ5IHRoZSBnaXZlbiBhbmdsZSBpbiByYWRpYW5zLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uTGluZS5Sb3RhdGVBcm91bmRQb2ludFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLkxpbmV9IE8gLSBbbGluZSwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgbGluZSB0byByb3RhdGUuXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IHBvaW50IC0gVGhlIHBvaW50IHRvIHJvdGF0ZSB0aGUgbGluZSBhcm91bmQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZSAtIFRoZSBhbmdsZSBvZiByb3RhdGlvbiBpbiByYWRpYW5zLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5MaW5lfSBUaGUgcm90YXRlZCBsaW5lLlxyXG4gKi9cclxudmFyIFJvdGF0ZUFyb3VuZFBvaW50ID0gZnVuY3Rpb24gKGxpbmUsIHBvaW50LCBhbmdsZSlcclxue1xyXG4gICAgcmV0dXJuIFJvdGF0ZUFyb3VuZFhZKGxpbmUsIHBvaW50LngsIHBvaW50LnksIGFuZ2xlKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUm90YXRlQXJvdW5kUG9pbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/RotateAroundPoint.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/RotateAroundXY.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/geom/line/RotateAroundXY.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Rotate a line around the given coordinates by the given angle in radians.\r\n *\r\n * @function Phaser.Geom.Line.RotateAroundXY\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Line} O - [line,$return]\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to rotate.\r\n * @param {number} x - The horizontal coordinate to rotate the line around.\r\n * @param {number} y - The vertical coordinate to rotate the line around.\r\n * @param {number} angle - The angle of rotation in radians.\r\n *\r\n * @return {Phaser.Geom.Line} The rotated line.\r\n */\r\nvar RotateAroundXY = function (line, x, y, angle)\r\n{\r\n var c = Math.cos(angle);\r\n var s = Math.sin(angle);\r\n\r\n var tx = line.x1 - x;\r\n var ty = line.y1 - y;\r\n\r\n line.x1 = tx * c - ty * s + x;\r\n line.y1 = tx * s + ty * c + y;\r\n\r\n tx = line.x2 - x;\r\n ty = line.y2 - y;\r\n\r\n line.x2 = tx * c - ty * s + x;\r\n line.y2 = tx * s + ty * c + y;\r\n\r\n return line;\r\n};\r\n\r\nmodule.exports = RotateAroundXY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvUm90YXRlQXJvdW5kWFkuanM/MDQ5YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUI7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksaUJBQWlCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9saW5lL1JvdGF0ZUFyb3VuZFhZLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUm90YXRlIGEgbGluZSBhcm91bmQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzIGJ5IHRoZSBnaXZlbiBhbmdsZSBpbiByYWRpYW5zLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uTGluZS5Sb3RhdGVBcm91bmRYWVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLkxpbmV9IE8gLSBbbGluZSwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgbGluZSB0byByb3RhdGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgY29vcmRpbmF0ZSB0byByb3RhdGUgdGhlIGxpbmUgYXJvdW5kLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBjb29yZGluYXRlIHRvIHJvdGF0ZSB0aGUgbGluZSBhcm91bmQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZSAtIFRoZSBhbmdsZSBvZiByb3RhdGlvbiBpbiByYWRpYW5zLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5MaW5lfSBUaGUgcm90YXRlZCBsaW5lLlxyXG4gKi9cclxudmFyIFJvdGF0ZUFyb3VuZFhZID0gZnVuY3Rpb24gKGxpbmUsIHgsIHksIGFuZ2xlKVxyXG57XHJcbiAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTtcclxuICAgIHZhciBzID0gTWF0aC5zaW4oYW5nbGUpO1xyXG5cclxuICAgIHZhciB0eCA9IGxpbmUueDEgLSB4O1xyXG4gICAgdmFyIHR5ID0gbGluZS55MSAtIHk7XHJcblxyXG4gICAgbGluZS54MSA9IHR4ICogYyAtIHR5ICogcyArIHg7XHJcbiAgICBsaW5lLnkxID0gdHggKiBzICsgdHkgKiBjICsgeTtcclxuXHJcbiAgICB0eCA9IGxpbmUueDIgLSB4O1xyXG4gICAgdHkgPSBsaW5lLnkyIC0geTtcclxuXHJcbiAgICBsaW5lLngyID0gdHggKiBjIC0gdHkgKiBzICsgeDtcclxuICAgIGxpbmUueTIgPSB0eCAqIHMgKyB0eSAqIGMgKyB5O1xyXG5cclxuICAgIHJldHVybiBsaW5lO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSb3RhdGVBcm91bmRYWTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/RotateAroundXY.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/SetToAngle.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/geom/line/SetToAngle.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Set a line to a given position, angle and length.\r\n *\r\n * @function Phaser.Geom.Line.SetToAngle\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Line} O - [line,$return]\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to set.\r\n * @param {number} x - The horizontal start position of the line.\r\n * @param {number} y - The vertical start position of the line.\r\n * @param {number} angle - The angle of the line in radians.\r\n * @param {number} length - The length of the line.\r\n *\r\n * @return {Phaser.Geom.Line} The updated line.\r\n */\r\nvar SetToAngle = function (line, x, y, angle, length)\r\n{\r\n line.x1 = x;\r\n line.y1 = y;\r\n\r\n line.x2 = x + (Math.cos(angle) * length);\r\n line.y2 = y + (Math.sin(angle) * length);\r\n\r\n return line;\r\n};\r\n\r\nmodule.exports = SetToAngle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvU2V0VG9BbmdsZS5qcz83NDc2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGlCQUFpQjtBQUM5QjtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksaUJBQWlCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9saW5lL1NldFRvQW5nbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBTZXQgYSBsaW5lIHRvIGEgZ2l2ZW4gcG9zaXRpb24sIGFuZ2xlIGFuZCBsZW5ndGguXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5MaW5lLlNldFRvQW5nbGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5MaW5lfSBPIC0gW2xpbmUsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBsaW5lIC0gVGhlIGxpbmUgdG8gc2V0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBsaW5lLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBzdGFydCBwb3NpdGlvbiBvZiB0aGUgbGluZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIG9mIHRoZSBsaW5lIGluIHJhZGlhbnMuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggLSBUaGUgbGVuZ3RoIG9mIHRoZSBsaW5lLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5MaW5lfSBUaGUgdXBkYXRlZCBsaW5lLlxyXG4gKi9cclxudmFyIFNldFRvQW5nbGUgPSBmdW5jdGlvbiAobGluZSwgeCwgeSwgYW5nbGUsIGxlbmd0aClcclxue1xyXG4gICAgbGluZS54MSA9IHg7XHJcbiAgICBsaW5lLnkxID0geTtcclxuXHJcbiAgICBsaW5lLngyID0geCArIChNYXRoLmNvcyhhbmdsZSkgKiBsZW5ndGgpO1xyXG4gICAgbGluZS55MiA9IHkgKyAoTWF0aC5zaW4oYW5nbGUpICogbGVuZ3RoKTtcclxuXHJcbiAgICByZXR1cm4gbGluZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2V0VG9BbmdsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/SetToAngle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/Slope.js":
/*!****************************************************!*\
!*** ./node_modules/phaser/src/geom/line/Slope.js ***!
\****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculate the slope of the given line.\r\n *\r\n * @function Phaser.Geom.Line.Slope\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to calculate the slope of.\r\n *\r\n * @return {number} The slope of the line.\r\n */\r\nvar Slope = function (line)\r\n{\r\n return (line.y2 - line.y1) / (line.x2 - line.x1);\r\n};\r\n\r\nmodule.exports = Slope;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvU2xvcGUuanM/YTI5YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vbGluZS9TbG9wZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZSB0aGUgc2xvcGUgb2YgdGhlIGdpdmVuIGxpbmUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5MaW5lLlNsb3BlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgbGluZSB0byBjYWxjdWxhdGUgdGhlIHNsb3BlIG9mLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBzbG9wZSBvZiB0aGUgbGluZS5cclxuICovXHJcbnZhciBTbG9wZSA9IGZ1bmN0aW9uIChsaW5lKVxyXG57XHJcbiAgICByZXR1cm4gKGxpbmUueTIgLSBsaW5lLnkxKSAvIChsaW5lLngyIC0gbGluZS54MSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNsb3BlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/Slope.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/Width.js":
/*!****************************************************!*\
!*** ./node_modules/phaser/src/geom/line/Width.js ***!
\****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculate the width of the given line.\r\n *\r\n * @function Phaser.Geom.Line.Width\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Line} line - The line to calculate the width of.\r\n *\r\n * @return {number} The width of the line.\r\n */\r\nvar Width = function (line)\r\n{\r\n return Math.abs(line.x1 - line.x2);\r\n};\r\n\r\nmodule.exports = Width;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvV2lkdGguanM/ZDkzMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vbGluZS9XaWR0aC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZSB0aGUgd2lkdGggb2YgdGhlIGdpdmVuIGxpbmUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5MaW5lLldpZHRoXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IGxpbmUgLSBUaGUgbGluZSB0byBjYWxjdWxhdGUgdGhlIHdpZHRoIG9mLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgbGluZS5cclxuICovXHJcbnZhciBXaWR0aCA9IGZ1bmN0aW9uIChsaW5lKVxyXG57XHJcbiAgICByZXR1cm4gTWF0aC5hYnMobGluZS54MSAtIGxpbmUueDIpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBXaWR0aDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/Width.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/line/index.js":
/*!****************************************************!*\
!*** ./node_modules/phaser/src/geom/line/index.js ***!
\****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Line = __webpack_require__(/*! ./Line */ \"./node_modules/phaser/src/geom/line/Line.js\");\r\n\r\nLine.Angle = __webpack_require__(/*! ./Angle */ \"./node_modules/phaser/src/geom/line/Angle.js\");\r\nLine.BresenhamPoints = __webpack_require__(/*! ./BresenhamPoints */ \"./node_modules/phaser/src/geom/line/BresenhamPoints.js\");\r\nLine.CenterOn = __webpack_require__(/*! ./CenterOn */ \"./node_modules/phaser/src/geom/line/CenterOn.js\");\r\nLine.Clone = __webpack_require__(/*! ./Clone */ \"./node_modules/phaser/src/geom/line/Clone.js\");\r\nLine.CopyFrom = __webpack_require__(/*! ./CopyFrom */ \"./node_modules/phaser/src/geom/line/CopyFrom.js\");\r\nLine.Equals = __webpack_require__(/*! ./Equals */ \"./node_modules/phaser/src/geom/line/Equals.js\");\r\nLine.Extend = __webpack_require__(/*! ./Extend */ \"./node_modules/phaser/src/geom/line/Extend.js\");\r\nLine.GetMidPoint = __webpack_require__(/*! ./GetMidPoint */ \"./node_modules/phaser/src/geom/line/GetMidPoint.js\");\r\nLine.GetNearestPoint = __webpack_require__(/*! ./GetNearestPoint */ \"./node_modules/phaser/src/geom/line/GetNearestPoint.js\");\r\nLine.GetNormal = __webpack_require__(/*! ./GetNormal */ \"./node_modules/phaser/src/geom/line/GetNormal.js\");\r\nLine.GetPoint = __webpack_require__(/*! ./GetPoint */ \"./node_modules/phaser/src/geom/line/GetPoint.js\");\r\nLine.GetPoints = __webpack_require__(/*! ./GetPoints */ \"./node_modules/phaser/src/geom/line/GetPoints.js\");\r\nLine.GetShortestDistance = __webpack_require__(/*! ./GetShortestDistance */ \"./node_modules/phaser/src/geom/line/GetShortestDistance.js\");\r\nLine.Height = __webpack_require__(/*! ./Height */ \"./node_modules/phaser/src/geom/line/Height.js\");\r\nLine.Length = __webpack_require__(/*! ./Length */ \"./node_modules/phaser/src/geom/line/Length.js\");\r\nLine.NormalAngle = __webpack_require__(/*! ./NormalAngle */ \"./node_modules/phaser/src/geom/line/NormalAngle.js\");\r\nLine.NormalX = __webpack_require__(/*! ./NormalX */ \"./node_modules/phaser/src/geom/line/NormalX.js\");\r\nLine.NormalY = __webpack_require__(/*! ./NormalY */ \"./node_modules/phaser/src/geom/line/NormalY.js\");\r\nLine.Offset = __webpack_require__(/*! ./Offset */ \"./node_modules/phaser/src/geom/line/Offset.js\");\r\nLine.PerpSlope = __webpack_require__(/*! ./PerpSlope */ \"./node_modules/phaser/src/geom/line/PerpSlope.js\");\r\nLine.Random = __webpack_require__(/*! ./Random */ \"./node_modules/phaser/src/geom/line/Random.js\");\r\nLine.ReflectAngle = __webpack_require__(/*! ./ReflectAngle */ \"./node_modules/phaser/src/geom/line/ReflectAngle.js\");\r\nLine.Rotate = __webpack_require__(/*! ./Rotate */ \"./node_modules/phaser/src/geom/line/Rotate.js\");\r\nLine.RotateAroundPoint = __webpack_require__(/*! ./RotateAroundPoint */ \"./node_modules/phaser/src/geom/line/RotateAroundPoint.js\");\r\nLine.RotateAroundXY = __webpack_require__(/*! ./RotateAroundXY */ \"./node_modules/phaser/src/geom/line/RotateAroundXY.js\");\r\nLine.SetToAngle = __webpack_require__(/*! ./SetToAngle */ \"./node_modules/phaser/src/geom/line/SetToAngle.js\");\r\nLine.Slope = __webpack_require__(/*! ./Slope */ \"./node_modules/phaser/src/geom/line/Slope.js\");\r\nLine.Width = __webpack_require__(/*! ./Width */ \"./node_modules/phaser/src/geom/line/Width.js\");\r\n\r\nmodule.exports = Line;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL2xpbmUvaW5kZXguanM/OTRlMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLDJEQUFROztBQUUzQixhQUFhLG1CQUFPLENBQUMsNkRBQVM7QUFDOUIsdUJBQXVCLG1CQUFPLENBQUMsaUZBQW1CO0FBQ2xELGdCQUFnQixtQkFBTyxDQUFDLG1FQUFZO0FBQ3BDLGFBQWEsbUJBQU8sQ0FBQyw2REFBUztBQUM5QixnQkFBZ0IsbUJBQU8sQ0FBQyxtRUFBWTtBQUNwQyxjQUFjLG1CQUFPLENBQUMsK0RBQVU7QUFDaEMsY0FBYyxtQkFBTyxDQUFDLCtEQUFVO0FBQ2hDLG1CQUFtQixtQkFBTyxDQUFDLHlFQUFlO0FBQzFDLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFtQjtBQUNsRCxpQkFBaUIsbUJBQU8sQ0FBQyxxRUFBYTtBQUN0QyxnQkFBZ0IsbUJBQU8sQ0FBQyxtRUFBWTtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyxxRUFBYTtBQUN0QywyQkFBMkIsbUJBQU8sQ0FBQyx5RkFBdUI7QUFDMUQsY0FBYyxtQkFBTyxDQUFDLCtEQUFVO0FBQ2hDLGNBQWMsbUJBQU8sQ0FBQywrREFBVTtBQUNoQyxtQkFBbUIsbUJBQU8sQ0FBQyx5RUFBZTtBQUMxQyxlQUFlLG1CQUFPLENBQUMsaUVBQVc7QUFDbEMsZUFBZSxtQkFBTyxDQUFDLGlFQUFXO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQywrREFBVTtBQUNoQyxpQkFBaUIsbUJBQU8sQ0FBQyxxRUFBYTtBQUN0QyxjQUFjLG1CQUFPLENBQUMsK0RBQVU7QUFDaEMsb0JBQW9CLG1CQUFPLENBQUMsMkVBQWdCO0FBQzVDLGNBQWMsbUJBQU8sQ0FBQywrREFBVTtBQUNoQyx5QkFBeUIsbUJBQU8sQ0FBQyxxRkFBcUI7QUFDdEQsc0JBQXNCLG1CQUFPLENBQUMsK0VBQWtCO0FBQ2hELGtCQUFrQixtQkFBTyxDQUFDLHVFQUFjO0FBQ3hDLGFBQWEsbUJBQU8sQ0FBQyw2REFBUztBQUM5QixhQUFhLG1CQUFPLENBQUMsNkRBQVM7O0FBRTlCIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9saW5lL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTGluZSA9IHJlcXVpcmUoJy4vTGluZScpO1xyXG5cclxuTGluZS5BbmdsZSA9IHJlcXVpcmUoJy4vQW5nbGUnKTtcclxuTGluZS5CcmVzZW5oYW1Qb2ludHMgPSByZXF1aXJlKCcuL0JyZXNlbmhhbVBvaW50cycpO1xyXG5MaW5lLkNlbnRlck9uID0gcmVxdWlyZSgnLi9DZW50ZXJPbicpO1xyXG5MaW5lLkNsb25lID0gcmVxdWlyZSgnLi9DbG9uZScpO1xyXG5MaW5lLkNvcHlGcm9tID0gcmVxdWlyZSgnLi9Db3B5RnJvbScpO1xyXG5MaW5lLkVxdWFscyA9IHJlcXVpcmUoJy4vRXF1YWxzJyk7XHJcbkxpbmUuRXh0ZW5kID0gcmVxdWlyZSgnLi9FeHRlbmQnKTtcclxuTGluZS5HZXRNaWRQb2ludCA9IHJlcXVpcmUoJy4vR2V0TWlkUG9pbnQnKTtcclxuTGluZS5HZXROZWFyZXN0UG9pbnQgPSByZXF1aXJlKCcuL0dldE5lYXJlc3RQb2ludCcpO1xyXG5MaW5lLkdldE5vcm1hbCA9IHJlcXVpcmUoJy4vR2V0Tm9ybWFsJyk7XHJcbkxpbmUuR2V0UG9pbnQgPSByZXF1aXJlKCcuL0dldFBvaW50Jyk7XHJcbkxpbmUuR2V0UG9pbnRzID0gcmVxdWlyZSgnLi9HZXRQb2ludHMnKTtcclxuTGluZS5HZXRTaG9ydGVzdERpc3RhbmNlID0gcmVxdWlyZSgnLi9HZXRTaG9ydGVzdERpc3RhbmNlJyk7XHJcbkxpbmUuSGVpZ2h0ID0gcmVxdWlyZSgnLi9IZWlnaHQnKTtcclxuTGluZS5MZW5ndGggPSByZXF1aXJlKCcuL0xlbmd0aCcpO1xyXG5MaW5lLk5vcm1hbEFuZ2xlID0gcmVxdWlyZSgnLi9Ob3JtYWxBbmdsZScpO1xyXG5MaW5lLk5vcm1hbFggPSByZXF1aXJlKCcuL05vcm1hbFgnKTtcclxuTGluZS5Ob3JtYWxZID0gcmVxdWlyZSgnLi9Ob3JtYWxZJyk7XHJcbkxpbmUuT2Zmc2V0ID0gcmVxdWlyZSgnLi9PZmZzZXQnKTtcclxuTGluZS5QZXJwU2xvcGUgPSByZXF1aXJlKCcuL1BlcnBTbG9wZScpO1xyXG5MaW5lLlJhbmRvbSA9IHJlcXVpcmUoJy4vUmFuZG9tJyk7XHJcbkxpbmUuUmVmbGVjdEFuZ2xlID0gcmVxdWlyZSgnLi9SZWZsZWN0QW5nbGUnKTtcclxuTGluZS5Sb3RhdGUgPSByZXF1aXJlKCcuL1JvdGF0ZScpO1xyXG5MaW5lLlJvdGF0ZUFyb3VuZFBvaW50ID0gcmVxdWlyZSgnLi9Sb3RhdGVBcm91bmRQb2ludCcpO1xyXG5MaW5lLlJvdGF0ZUFyb3VuZFhZID0gcmVxdWlyZSgnLi9Sb3RhdGVBcm91bmRYWScpO1xyXG5MaW5lLlNldFRvQW5nbGUgPSByZXF1aXJlKCcuL1NldFRvQW5nbGUnKTtcclxuTGluZS5TbG9wZSA9IHJlcXVpcmUoJy4vU2xvcGUnKTtcclxuTGluZS5XaWR0aCA9IHJlcXVpcmUoJy4vV2lkdGgnKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTGluZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/line/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/point/Ceil.js":
/*!****************************************************!*\
!*** ./node_modules/phaser/src/geom/point/Ceil.js ***!
\****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Apply `Math.ceil()` to each coordinate of the given Point.\r\n *\r\n * @function Phaser.Geom.Point.Ceil\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [point,$return]\r\n *\r\n * @param {Phaser.Geom.Point} point - The Point to ceil.\r\n *\r\n * @return {Phaser.Geom.Point} The Point with `Math.ceil()` applied to its coordinates.\r\n */\r\nvar Ceil = function (point)\r\n{\r\n return point.setTo(Math.ceil(point.x), Math.ceil(point.y));\r\n};\r\n\r\nmodule.exports = Ceil;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0NlaWwuanM/YjYxNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QjtBQUNBLFlBQVksa0JBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0NlaWwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBcHBseSBgTWF0aC5jZWlsKClgIHRvIGVhY2ggY29vcmRpbmF0ZSBvZiB0aGUgZ2l2ZW4gUG9pbnQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5Qb2ludC5DZWlsXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnR9IE8gLSBbcG9pbnQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2ludH0gcG9pbnQgLSBUaGUgUG9pbnQgdG8gY2VpbC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUG9pbnR9IFRoZSBQb2ludCB3aXRoIGBNYXRoLmNlaWwoKWAgYXBwbGllZCB0byBpdHMgY29vcmRpbmF0ZXMuXHJcbiAqL1xyXG52YXIgQ2VpbCA9IGZ1bmN0aW9uIChwb2ludClcclxue1xyXG4gICAgcmV0dXJuIHBvaW50LnNldFRvKE1hdGguY2VpbChwb2ludC54KSwgTWF0aC5jZWlsKHBvaW50LnkpKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2VpbDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/Ceil.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/point/Clone.js":
/*!*****************************************************!*\
!*** ./node_modules/phaser/src/geom/point/Clone.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ./Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Clone the given Point.\r\n *\r\n * @function Phaser.Geom.Point.Clone\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Point} source - The source Point to clone.\r\n *\r\n * @return {Phaser.Geom.Point} The cloned Point.\r\n */\r\nvar Clone = function (source)\r\n{\r\n return new Point(source.x, source.y);\r\n};\r\n\r\nmodule.exports = Clone;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0Nsb25lLmpzP2FiOTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyw4REFBUzs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxrQkFBa0I7QUFDN0I7QUFDQSxZQUFZLGtCQUFrQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9wb2ludC9DbG9uZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xyXG5cclxuLyoqXHJcbiAqIENsb25lIHRoZSBnaXZlbiBQb2ludC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlBvaW50LkNsb25lXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBzb3VyY2UgLSBUaGUgc291cmNlIFBvaW50IHRvIGNsb25lLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5Qb2ludH0gVGhlIGNsb25lZCBQb2ludC5cclxuICovXHJcbnZhciBDbG9uZSA9IGZ1bmN0aW9uIChzb3VyY2UpXHJcbntcclxuICAgIHJldHVybiBuZXcgUG9pbnQoc291cmNlLngsIHNvdXJjZS55KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2xvbmU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/Clone.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/point/CopyFrom.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/geom/point/CopyFrom.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Copy the values of one Point to a destination Point.\r\n *\r\n * @function Phaser.Geom.Point.CopyFrom\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [dest,$return]\r\n *\r\n * @param {Phaser.Geom.Point} source - The source Point to copy the values from.\r\n * @param {Phaser.Geom.Point} dest - The destination Point to copy the values to.\r\n *\r\n * @return {Phaser.Geom.Point} The destination Point.\r\n */\r\nvar CopyFrom = function (source, dest)\r\n{\r\n return dest.setTo(source.x, source.y);\r\n};\r\n\r\nmodule.exports = CopyFrom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0NvcHlGcm9tLmpzP2JkZDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyxrQkFBa0I7QUFDN0I7QUFDQSxZQUFZLGtCQUFrQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9wb2ludC9Db3B5RnJvbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBvZiBvbmUgUG9pbnQgdG8gYSBkZXN0aW5hdGlvbiBQb2ludC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlBvaW50LkNvcHlGcm9tXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnR9IE8gLSBbZGVzdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBzb3VyY2UgLSBUaGUgc291cmNlIFBvaW50IHRvIGNvcHkgdGhlIHZhbHVlcyBmcm9tLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBkZXN0IC0gVGhlIGRlc3RpbmF0aW9uIFBvaW50IHRvIGNvcHkgdGhlIHZhbHVlcyB0by5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUG9pbnR9IFRoZSBkZXN0aW5hdGlvbiBQb2ludC5cclxuICovXHJcbnZhciBDb3B5RnJvbSA9IGZ1bmN0aW9uIChzb3VyY2UsIGRlc3QpXHJcbntcclxuICAgIHJldHVybiBkZXN0LnNldFRvKHNvdXJjZS54LCBzb3VyY2UueSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvcHlGcm9tO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/CopyFrom.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/point/Equals.js":
/*!******************************************************!*\
!*** ./node_modules/phaser/src/geom/point/Equals.js ***!
\******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * A comparison of two `Point` objects to see if they are equal.\r\n *\r\n * @function Phaser.Geom.Point.Equals\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Point} point - The original `Point` to compare against.\r\n * @param {Phaser.Geom.Point} toCompare - The second `Point` to compare.\r\n *\r\n * @return {boolean} Returns true if the both `Point` objects are equal.\r\n */\r\nvar Equals = function (point, toCompare)\r\n{\r\n return (point.x === toCompare.x && point.y === toCompare.y);\r\n};\r\n\r\nmodule.exports = Equals;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0VxdWFscy5qcz9lMDgzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QixXQUFXLGtCQUFrQjtBQUM3QjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9wb2ludC9FcXVhbHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIGNvbXBhcmlzb24gb2YgdHdvIGBQb2ludGAgb2JqZWN0cyB0byBzZWUgaWYgdGhleSBhcmUgZXF1YWwuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5Qb2ludC5FcXVhbHNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9pbnR9IHBvaW50IC0gVGhlIG9yaWdpbmFsIGBQb2ludGAgdG8gY29tcGFyZSBhZ2FpbnN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSB0b0NvbXBhcmUgLSBUaGUgc2Vjb25kIGBQb2ludGAgdG8gY29tcGFyZS5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBib3RoIGBQb2ludGAgb2JqZWN0cyBhcmUgZXF1YWwuXHJcbiAqL1xyXG52YXIgRXF1YWxzID0gZnVuY3Rpb24gKHBvaW50LCB0b0NvbXBhcmUpXHJcbntcclxuICAgIHJldHVybiAocG9pbnQueCA9PT0gdG9Db21wYXJlLnggJiYgcG9pbnQueSA9PT0gdG9Db21wYXJlLnkpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFcXVhbHM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/Equals.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/point/Floor.js":
/*!*****************************************************!*\
!*** ./node_modules/phaser/src/geom/point/Floor.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Apply `Math.ceil()` to each coordinate of the given Point.\r\n *\r\n * @function Phaser.Geom.Point.Floor\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [point,$return]\r\n *\r\n * @param {Phaser.Geom.Point} point - The Point to floor.\r\n *\r\n * @return {Phaser.Geom.Point} The Point with `Math.floor()` applied to its coordinates.\r\n */\r\nvar Floor = function (point)\r\n{\r\n return point.setTo(Math.floor(point.x), Math.floor(point.y));\r\n};\r\n\r\nmodule.exports = Floor;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0Zsb29yLmpzPzQ4ZDkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxrQkFBa0I7QUFDN0I7QUFDQSxZQUFZLGtCQUFrQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9wb2ludC9GbG9vci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEFwcGx5IGBNYXRoLmNlaWwoKWAgdG8gZWFjaCBjb29yZGluYXRlIG9mIHRoZSBnaXZlbiBQb2ludC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlBvaW50LkZsb29yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnR9IE8gLSBbcG9pbnQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2ludH0gcG9pbnQgLSBUaGUgUG9pbnQgdG8gZmxvb3IuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlBvaW50fSBUaGUgUG9pbnQgd2l0aCBgTWF0aC5mbG9vcigpYCBhcHBsaWVkIHRvIGl0cyBjb29yZGluYXRlcy5cclxuICovXHJcbnZhciBGbG9vciA9IGZ1bmN0aW9uIChwb2ludClcclxue1xyXG4gICAgcmV0dXJuIHBvaW50LnNldFRvKE1hdGguZmxvb3IocG9pbnQueCksIE1hdGguZmxvb3IocG9pbnQueSkpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBGbG9vcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/Floor.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/point/GetCentroid.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/geom/point/GetCentroid.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ./Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Get the centroid or geometric center of a plane figure (the arithmetic mean position of all the points in the figure).\r\n * Informally, it is the point at which a cutout of the shape could be perfectly balanced on the tip of a pin.\r\n *\r\n * @function Phaser.Geom.Point.GetCentroid\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Point[]} points - [description]\r\n * @param {Phaser.Geom.Point} [out] - [description]\r\n *\r\n * @return {Phaser.Geom.Point} [description]\r\n */\r\nvar GetCentroid = function (points, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n if (!Array.isArray(points))\r\n {\r\n throw new Error('GetCentroid points argument must be an array');\r\n }\r\n\r\n var len = points.length;\r\n\r\n if (len < 1)\r\n {\r\n throw new Error('GetCentroid points array must not be empty');\r\n }\r\n else if (len === 1)\r\n {\r\n out.x = points[0].x;\r\n out.y = points[0].y;\r\n }\r\n else\r\n {\r\n for (var i = 0; i < len; i++)\r\n {\r\n out.x += points[i].x;\r\n out.y += points[i].y;\r\n }\r\n\r\n out.x /= len;\r\n out.y /= len;\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetCentroid;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0dldENlbnRyb2lkLmpzP2Q2ODQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyw4REFBUzs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGtCQUFrQjtBQUMvQjtBQUNBLFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsa0JBQWtCO0FBQzdCO0FBQ0EsWUFBWSxrQkFBa0I7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLG1CQUFtQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixTQUFTO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9wb2ludC9HZXRDZW50cm9pZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgY2VudHJvaWQgb3IgZ2VvbWV0cmljIGNlbnRlciBvZiBhIHBsYW5lIGZpZ3VyZSAodGhlIGFyaXRobWV0aWMgbWVhbiBwb3NpdGlvbiBvZiBhbGwgdGhlIHBvaW50cyBpbiB0aGUgZmlndXJlKS5cclxuICogSW5mb3JtYWxseSwgaXQgaXMgdGhlIHBvaW50IGF0IHdoaWNoIGEgY3V0b3V0IG9mIHRoZSBzaGFwZSBjb3VsZCBiZSBwZXJmZWN0bHkgYmFsYW5jZWQgb24gdGhlIHRpcCBvZiBhIHBpbi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlBvaW50LkdldENlbnRyb2lkXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnR9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9pbnRbXX0gcG9pbnRzIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBbb3V0XSAtIFtkZXNjcmlwdGlvbl1cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUG9pbnR9IFtkZXNjcmlwdGlvbl1cclxuICovXHJcbnZhciBHZXRDZW50cm9pZCA9IGZ1bmN0aW9uIChwb2ludHMsIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBQb2ludCgpOyB9XHJcblxyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpXHJcbiAgICB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdHZXRDZW50cm9pZCBwb2ludHMgYXJndW1lbnQgbXVzdCBiZSBhbiBhcnJheScpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBsZW4gPSBwb2ludHMubGVuZ3RoO1xyXG5cclxuICAgIGlmIChsZW4gPCAxKVxyXG4gICAge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignR2V0Q2VudHJvaWQgcG9pbnRzIGFycmF5IG11c3Qgbm90IGJlIGVtcHR5Jyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChsZW4gPT09IDEpXHJcbiAgICB7XHJcbiAgICAgICAgb3V0LnggPSBwb2ludHNbMF0ueDtcclxuICAgICAgICBvdXQueSA9IHBvaW50c1swXS55O1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvdXQueCArPSBwb2ludHNbaV0ueDtcclxuICAgICAgICAgICAgb3V0LnkgKz0gcG9pbnRzW2ldLnk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBvdXQueCAvPSBsZW47XHJcbiAgICAgICAgb3V0LnkgLz0gbGVuO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldENlbnRyb2lkO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/GetCentroid.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/point/GetMagnitude.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/geom/point/GetMagnitude.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculate the magnitude of the point, which equivalent to the length of the line from the origin to this point.\r\n *\r\n * @function Phaser.Geom.Point.GetMagnitude\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Point} point - The point to calculate the magnitude for\r\n *\r\n * @return {number} The resulting magnitude\r\n */\r\nvar GetMagnitude = function (point)\r\n{\r\n return Math.sqrt((point.x * point.x) + (point.y * point.y));\r\n};\r\n\r\nmodule.exports = GetMagnitude;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0dldE1hZ25pdHVkZS5qcz9lOGYzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9wb2ludC9HZXRNYWduaXR1ZGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGUgdGhlIG1hZ25pdHVkZSBvZiB0aGUgcG9pbnQsIHdoaWNoIGVxdWl2YWxlbnQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgbGluZSBmcm9tIHRoZSBvcmlnaW4gdG8gdGhpcyBwb2ludC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlBvaW50LkdldE1hZ25pdHVkZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2ludH0gcG9pbnQgLSBUaGUgcG9pbnQgdG8gY2FsY3VsYXRlIHRoZSBtYWduaXR1ZGUgZm9yXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHJlc3VsdGluZyBtYWduaXR1ZGVcclxuICovXHJcbnZhciBHZXRNYWduaXR1ZGUgPSBmdW5jdGlvbiAocG9pbnQpXHJcbntcclxuICAgIHJldHVybiBNYXRoLnNxcnQoKHBvaW50LnggKiBwb2ludC54KSArIChwb2ludC55ICogcG9pbnQueSkpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRNYWduaXR1ZGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/GetMagnitude.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/point/GetMagnitudeSq.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/geom/point/GetMagnitudeSq.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculates the square of magnitude of given point.(Can be used for fast magnitude calculation of point)\r\n *\r\n * @function Phaser.Geom.Point.GetMagnitudeSq\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Point} point - Returns square of the magnitude/length of given point.\r\n *\r\n * @return {number} Returns square of the magnitude of given point.\r\n */\r\nvar GetMagnitudeSq = function (point)\r\n{\r\n return (point.x * point.x) + (point.y * point.y);\r\n};\r\n\r\nmodule.exports = GetMagnitudeSq;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0dldE1hZ25pdHVkZVNxLmpzP2ZmNTAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsa0JBQWtCO0FBQzdCO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0dldE1hZ25pdHVkZVNxLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlIG9mIG1hZ25pdHVkZSBvZiBnaXZlbiBwb2ludC4oQ2FuIGJlIHVzZWQgZm9yIGZhc3QgbWFnbml0dWRlIGNhbGN1bGF0aW9uIG9mIHBvaW50KVxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUG9pbnQuR2V0TWFnbml0dWRlU3FcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9pbnR9IHBvaW50IC0gUmV0dXJucyBzcXVhcmUgb2YgdGhlIG1hZ25pdHVkZS9sZW5ndGggb2YgZ2l2ZW4gcG9pbnQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gUmV0dXJucyBzcXVhcmUgb2YgdGhlIG1hZ25pdHVkZSBvZiBnaXZlbiBwb2ludC5cclxuICovXHJcbnZhciBHZXRNYWduaXR1ZGVTcSA9IGZ1bmN0aW9uIChwb2ludClcclxue1xyXG4gICAgcmV0dXJuIChwb2ludC54ICogcG9pbnQueCkgKyAocG9pbnQueSAqIHBvaW50LnkpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRNYWduaXR1ZGVTcTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/GetMagnitudeSq.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/point/GetRectangleFromPoints.js":
/*!**********************************************************************!*\
!*** ./node_modules/phaser/src/geom/point/GetRectangleFromPoints.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Rectangle = __webpack_require__(/*! ../rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\n\r\n/**\r\n * Calculates the Axis Aligned Bounding Box (or aabb) from an array of points.\r\n *\r\n * @function Phaser.Geom.Point.GetRectangleFromPoints\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Point[]} points - [description]\r\n * @param {Phaser.Geom.Rectangle} [out] - [description]\r\n *\r\n * @return {Phaser.Geom.Rectangle} [description]\r\n */\r\nvar GetRectangleFromPoints = function (points, out)\r\n{\r\n if (out === undefined) { out = new Rectangle(); }\r\n\r\n var xMax = Number.NEGATIVE_INFINITY;\r\n var xMin = Number.POSITIVE_INFINITY;\r\n var yMax = Number.NEGATIVE_INFINITY;\r\n var yMin = Number.POSITIVE_INFINITY;\r\n\r\n for (var i = 0; i < points.length; i++)\r\n {\r\n var point = points[i];\r\n\r\n if (point.x > xMax)\r\n {\r\n xMax = point.x;\r\n }\r\n\r\n if (point.x < xMin)\r\n {\r\n xMin = point.x;\r\n }\r\n\r\n if (point.y > yMax)\r\n {\r\n yMax = point.y;\r\n }\r\n\r\n if (point.y < yMin)\r\n {\r\n yMin = point.y;\r\n }\r\n }\r\n\r\n out.x = xMin;\r\n out.y = yMin;\r\n out.width = xMax - xMin;\r\n out.height = yMax - yMin;\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetRectangleFromPoints;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0dldFJlY3RhbmdsZUZyb21Qb2ludHMuanM/MDE3NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMscUZBQXdCOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBLFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsc0JBQXNCO0FBQ2pDO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHVCQUF1Qjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLG1CQUFtQjtBQUN0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcG9pbnQvR2V0UmVjdGFuZ2xlRnJvbVBvaW50cy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4uL3JlY3RhbmdsZS9SZWN0YW5nbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBBeGlzIEFsaWduZWQgQm91bmRpbmcgQm94IChvciBhYWJiKSBmcm9tIGFuIGFycmF5IG9mIHBvaW50cy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlBvaW50LkdldFJlY3RhbmdsZUZyb21Qb2ludHNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9pbnRbXX0gcG9pbnRzIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gW291dF0gLSBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gW2Rlc2NyaXB0aW9uXVxyXG4gKi9cclxudmFyIEdldFJlY3RhbmdsZUZyb21Qb2ludHMgPSBmdW5jdGlvbiAocG9pbnRzLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgUmVjdGFuZ2xlKCk7IH1cclxuXHJcbiAgICB2YXIgeE1heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcclxuICAgIHZhciB4TWluID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xyXG4gICAgdmFyIHlNYXggPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XHJcbiAgICB2YXIgeU1pbiA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgcG9pbnQgPSBwb2ludHNbaV07XHJcblxyXG4gICAgICAgIGlmIChwb2ludC54ID4geE1heClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHhNYXggPSBwb2ludC54O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHBvaW50LnggPCB4TWluKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgeE1pbiA9IHBvaW50Lng7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocG9pbnQueSA+IHlNYXgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB5TWF4ID0gcG9pbnQueTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwb2ludC55IDwgeU1pbilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHlNaW4gPSBwb2ludC55O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvdXQueCA9IHhNaW47XHJcbiAgICBvdXQueSA9IHlNaW47XHJcbiAgICBvdXQud2lkdGggPSB4TWF4IC0geE1pbjtcclxuICAgIG91dC5oZWlnaHQgPSB5TWF4IC0geU1pbjtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRSZWN0YW5nbGVGcm9tUG9pbnRzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/GetRectangleFromPoints.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/point/Interpolate.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/geom/point/Interpolate.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ./Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Geom.Point.Interpolate\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Point} pointA - The starting `Point` for the interpolation.\r\n * @param {Phaser.Geom.Point} pointB - The target `Point` for the interpolation.\r\n * @param {number} [t=0] - The amount to interpolate between the two points. Generally, a value between 0 (returns the starting `Point`) and 1 (returns the target `Point`). If omitted, 0 is used.\r\n * @param {(Phaser.Geom.Point|object)} [out] - An optional `Point` object whose `x` and `y` values will be set to the result of the interpolation (can also be any object with `x` and `y` properties). If omitted, a new `Point` created and returned.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} Either the object from the `out` argument with the properties `x` and `y` set to the result of the interpolation or a newly created `Point` object.\r\n */\r\nvar Interpolate = function (pointA, pointB, t, out)\r\n{\r\n if (t === undefined) { t = 0; }\r\n if (out === undefined) { out = new Point(); }\r\n\r\n out.x = pointA.x + ((pointB.x - pointA.x) * t);\r\n out.y = pointA.y + ((pointB.y - pointA.y) * t);\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = Interpolate;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0ludGVycG9sYXRlLmpzPzE5ZmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyw4REFBUzs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QixXQUFXLGtCQUFrQjtBQUM3QixXQUFXLE9BQU87QUFDbEIsV0FBVywyQkFBMkI7QUFDdEM7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsT0FBTztBQUNqQyw0QkFBNEIsbUJBQW1COztBQUUvQztBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0ludGVycG9sYXRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuL1BvaW50Jyk7XHJcblxyXG4vKipcclxuICogW2Rlc2NyaXB0aW9uXVxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUG9pbnQuSW50ZXJwb2xhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2ludH0gcG9pbnRBIC0gVGhlIHN0YXJ0aW5nIGBQb2ludGAgZm9yIHRoZSBpbnRlcnBvbGF0aW9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBwb2ludEIgLSBUaGUgdGFyZ2V0IGBQb2ludGAgZm9yIHRoZSBpbnRlcnBvbGF0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3Q9MF0gLSBUaGUgYW1vdW50IHRvIGludGVycG9sYXRlIGJldHdlZW4gdGhlIHR3byBwb2ludHMuIEdlbmVyYWxseSwgYSB2YWx1ZSBiZXR3ZWVuIDAgKHJldHVybnMgdGhlIHN0YXJ0aW5nIGBQb2ludGApIGFuZCAxIChyZXR1cm5zIHRoZSB0YXJnZXQgYFBvaW50YCkuIElmIG9taXR0ZWQsIDAgaXMgdXNlZC5cclxuICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gW291dF0gLSBBbiBvcHRpb25hbCBgUG9pbnRgIG9iamVjdCB3aG9zZSBgeGAgYW5kIGB5YCB2YWx1ZXMgd2lsbCBiZSBzZXQgdG8gdGhlIHJlc3VsdCBvZiB0aGUgaW50ZXJwb2xhdGlvbiAoY2FuIGFsc28gYmUgYW55IG9iamVjdCB3aXRoIGB4YCBhbmQgYHlgIHByb3BlcnRpZXMpLiBJZiBvbWl0dGVkLCBhIG5ldyBgUG9pbnRgIGNyZWF0ZWQgYW5kIHJldHVybmVkLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gRWl0aGVyIHRoZSBvYmplY3QgZnJvbSB0aGUgYG91dGAgYXJndW1lbnQgd2l0aCB0aGUgcHJvcGVydGllcyBgeGAgYW5kIGB5YCBzZXQgdG8gdGhlIHJlc3VsdCBvZiB0aGUgaW50ZXJwb2xhdGlvbiBvciBhIG5ld2x5IGNyZWF0ZWQgYFBvaW50YCBvYmplY3QuXHJcbiAqL1xyXG52YXIgSW50ZXJwb2xhdGUgPSBmdW5jdGlvbiAocG9pbnRBLCBwb2ludEIsIHQsIG91dClcclxue1xyXG4gICAgaWYgKHQgPT09IHVuZGVmaW5lZCkgeyB0ID0gMDsgfVxyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBQb2ludCgpOyB9XHJcblxyXG4gICAgb3V0LnggPSBwb2ludEEueCArICgocG9pbnRCLnggLSBwb2ludEEueCkgKiB0KTtcclxuICAgIG91dC55ID0gcG9pbnRBLnkgKyAoKHBvaW50Qi55IC0gcG9pbnRBLnkpICogdCk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJwb2xhdGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/Interpolate.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/point/Invert.js":
/*!******************************************************!*\
!*** ./node_modules/phaser/src/geom/point/Invert.js ***!
\******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Swaps the X and the Y coordinate of a point.\r\n *\r\n * @function Phaser.Geom.Point.Invert\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [point,$return]\r\n *\r\n * @param {Phaser.Geom.Point} point - The Point to modify.\r\n *\r\n * @return {Phaser.Geom.Point} The modified `point`.\r\n */\r\nvar Invert = function (point)\r\n{\r\n return point.setTo(point.y, point.x);\r\n};\r\n\r\nmodule.exports = Invert;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L0ludmVydC5qcz8yMTAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGtCQUFrQjtBQUMvQjtBQUNBLFdBQVcsa0JBQWtCO0FBQzdCO0FBQ0EsWUFBWSxrQkFBa0I7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcG9pbnQvSW52ZXJ0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogU3dhcHMgdGhlIFggYW5kIHRoZSBZIGNvb3JkaW5hdGUgb2YgYSBwb2ludC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlBvaW50LkludmVydFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW3BvaW50LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9pbnR9IHBvaW50IC0gVGhlIFBvaW50IHRvIG1vZGlmeS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUG9pbnR9IFRoZSBtb2RpZmllZCBgcG9pbnRgLlxyXG4gKi9cclxudmFyIEludmVydCA9IGZ1bmN0aW9uIChwb2ludClcclxue1xyXG4gICAgcmV0dXJuIHBvaW50LnNldFRvKHBvaW50LnksIHBvaW50LngpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbnZlcnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/Invert.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/point/Negative.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/geom/point/Negative.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ./Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Inverts a Point's coordinates.\r\n *\r\n * @function Phaser.Geom.Point.Negative\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Point} point - The Point to invert.\r\n * @param {Phaser.Geom.Point} [out] - The Point to return the inverted coordinates in.\r\n *\r\n * @return {Phaser.Geom.Point} The modified `out` Point, or a new Point if none was provided.\r\n */\r\nvar Negative = function (point, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n return out.setTo(-point.x, -point.y);\r\n};\r\n\r\nmodule.exports = Negative;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L05lZ2F0aXZlLmpzPzYwYzEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyw4REFBUzs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QixXQUFXLGtCQUFrQjtBQUM3QjtBQUNBLFlBQVksa0JBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7O0FBRS9DO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L05lZ2F0aXZlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuL1BvaW50Jyk7XHJcblxyXG4vKipcclxuICogSW52ZXJ0cyBhIFBvaW50J3MgY29vcmRpbmF0ZXMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5Qb2ludC5OZWdhdGl2ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBwb2ludCAtIFRoZSBQb2ludCB0byBpbnZlcnQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9pbnR9IFtvdXRdIC0gVGhlIFBvaW50IHRvIHJldHVybiB0aGUgaW52ZXJ0ZWQgY29vcmRpbmF0ZXMgaW4uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlBvaW50fSBUaGUgbW9kaWZpZWQgYG91dGAgUG9pbnQsIG9yIGEgbmV3IFBvaW50IGlmIG5vbmUgd2FzIHByb3ZpZGVkLlxyXG4gKi9cclxudmFyIE5lZ2F0aXZlID0gZnVuY3Rpb24gKHBvaW50LCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgUG9pbnQoKTsgfVxyXG5cclxuICAgIHJldHVybiBvdXQuc2V0VG8oLXBvaW50LngsIC1wb2ludC55KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTmVnYXRpdmU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/Negative.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/point/Point.js":
/*!*****************************************************!*\
!*** ./node_modules/phaser/src/geom/point/Point.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GEOM_CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/geom/const.js\");\r\n\r\n/**\r\n * @classdesc\r\n * Defines a Point in 2D space, with an x and y component.\r\n *\r\n * @class Point\r\n * @memberof Phaser.Geom\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x=0] - The x coordinate of this Point.\r\n * @param {number} [y=x] - The y coordinate of this Point.\r\n */\r\nvar Point = new Class({\r\n\r\n initialize:\r\n\r\n function Point (x, y)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = x; }\r\n\r\n /**\r\n * The geometry constant type of this object: `GEOM_CONST.POINT`.\r\n * Used for fast type comparisons.\r\n *\r\n * @name Phaser.Geom.Point#type\r\n * @type {integer}\r\n * @readonly\r\n * @since 3.19.0\r\n */\r\n this.type = GEOM_CONST.POINT;\r\n\r\n /**\r\n * The x coordinate of this Point.\r\n *\r\n * @name Phaser.Geom.Point#x\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.x = x;\r\n\r\n /**\r\n * The y coordinate of this Point.\r\n *\r\n * @name Phaser.Geom.Point#y\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.y = y;\r\n },\r\n\r\n /**\r\n * Set the x and y coordinates of the point to the given values.\r\n *\r\n * @method Phaser.Geom.Point#setTo\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x=0] - The x coordinate of this Point.\r\n * @param {number} [y=x] - The y coordinate of this Point.\r\n *\r\n * @return {Phaser.Geom.Point} This Point object.\r\n */\r\n setTo: function (x, y)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = x; }\r\n\r\n this.x = x;\r\n this.y = y;\r\n\r\n return this;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Point;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L1BvaW50LmpzPzMxZDkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMseURBQVU7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckMsOEJBQThCLE9BQU87O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isa0JBQWtCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDLDhCQUE4QixPQUFPOztBQUVyQztBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcG9pbnQvUG9pbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBHRU9NX0NPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIERlZmluZXMgYSBQb2ludCBpbiAyRCBzcGFjZSwgd2l0aCBhbiB4IGFuZCB5IGNvbXBvbmVudC5cclxuICpcclxuICogQGNsYXNzIFBvaW50XHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2VvbVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhpcyBQb2ludC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5PXhdIC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGlzIFBvaW50LlxyXG4gKi9cclxudmFyIFBvaW50ID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFBvaW50ICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IDA7IH1cclxuICAgICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7IHkgPSB4OyB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBnZW9tZXRyeSBjb25zdGFudCB0eXBlIG9mIHRoaXMgb2JqZWN0OiBgR0VPTV9DT05TVC5QT0lOVGAuXHJcbiAgICAgICAgICogVXNlZCBmb3IgZmFzdCB0eXBlIGNvbXBhcmlzb25zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdlb20uUG9pbnQjdHlwZVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE5LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnR5cGUgPSBHRU9NX0NPTlNULlBPSU5UO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgeCBjb29yZGluYXRlIG9mIHRoaXMgUG9pbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5Qb2ludCN4XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy54ID0geDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGlzIFBvaW50LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdlb20uUG9pbnQjeVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueSA9IHk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCB0byB0aGUgZ2l2ZW4gdmFsdWVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uUG9pbnQjc2V0VG9cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeD0wXSAtIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhpcyBQb2ludC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT14XSAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhpcyBQb2ludC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5Qb2ludH0gVGhpcyBQb2ludCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFRvOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7IHggPSAwOyB9XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0geDsgfVxyXG5cclxuICAgICAgICB0aGlzLnggPSB4O1xyXG4gICAgICAgIHRoaXMueSA9IHk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/Point.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/point/Project.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/geom/point/Project.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ./Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\nvar GetMagnitudeSq = __webpack_require__(/*! ./GetMagnitudeSq */ \"./node_modules/phaser/src/geom/point/GetMagnitudeSq.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Geom.Point.Project\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Point} pointA - [description]\r\n * @param {Phaser.Geom.Point} pointB - [description]\r\n * @param {Phaser.Geom.Point} [out] - [description]\r\n *\r\n * @return {Phaser.Geom.Point} [description]\r\n */\r\nvar Project = function (pointA, pointB, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n var dot = ((pointA.x * pointB.x) + (pointA.y * pointB.y));\r\n var amt = dot / GetMagnitudeSq(pointB);\r\n\r\n if (amt !== 0)\r\n {\r\n out.x = amt * pointB.x;\r\n out.y = amt * pointB.y;\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = Project;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L1Byb2plY3QuanM/ODBmNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLDhEQUFTO0FBQzdCLHFCQUFxQixtQkFBTyxDQUFDLGdGQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QixXQUFXLGtCQUFrQjtBQUM3QixXQUFXLGtCQUFrQjtBQUM3QjtBQUNBLFlBQVksa0JBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7O0FBRS9DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9wb2ludC9Qcm9qZWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuL1BvaW50Jyk7XHJcbnZhciBHZXRNYWduaXR1ZGVTcSA9IHJlcXVpcmUoJy4vR2V0TWFnbml0dWRlU3EnKTtcclxuXHJcbi8qKlxyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5Qb2ludC5Qcm9qZWN0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnR9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9pbnR9IHBvaW50QSAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2ludH0gcG9pbnRCIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBbb3V0XSAtIFtkZXNjcmlwdGlvbl1cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUG9pbnR9IFtkZXNjcmlwdGlvbl1cclxuICovXHJcbnZhciBQcm9qZWN0ID0gZnVuY3Rpb24gKHBvaW50QSwgcG9pbnRCLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgUG9pbnQoKTsgfVxyXG5cclxuICAgIHZhciBkb3QgPSAoKHBvaW50QS54ICogcG9pbnRCLngpICsgKHBvaW50QS55ICogcG9pbnRCLnkpKTtcclxuICAgIHZhciBhbXQgPSBkb3QgLyBHZXRNYWduaXR1ZGVTcShwb2ludEIpO1xyXG5cclxuICAgIGlmIChhbXQgIT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgb3V0LnggPSBhbXQgKiBwb2ludEIueDtcclxuICAgICAgICBvdXQueSA9IGFtdCAqIHBvaW50Qi55O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFByb2plY3Q7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/Project.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/point/ProjectUnit.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/geom/point/ProjectUnit.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ./Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Geom.Point.ProjectUnit\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Point} pointA - [description]\r\n * @param {Phaser.Geom.Point} pointB - [description]\r\n * @param {Phaser.Geom.Point} [out] - [description]\r\n *\r\n * @return {Phaser.Geom.Point} [description]\r\n */\r\nvar ProjectUnit = function (pointA, pointB, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n var amt = ((pointA.x * pointB.x) + (pointA.y * pointB.y));\r\n\r\n if (amt !== 0)\r\n {\r\n out.x = amt * pointB.x;\r\n out.y = amt * pointB.y;\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = ProjectUnit;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L1Byb2plY3RVbml0LmpzP2Q5NjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyw4REFBUzs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QixXQUFXLGtCQUFrQjtBQUM3QixXQUFXLGtCQUFrQjtBQUM3QjtBQUNBLFlBQVksa0JBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7O0FBRS9DOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcG9pbnQvUHJvamVjdFVuaXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQb2ludCA9IHJlcXVpcmUoJy4vUG9pbnQnKTtcclxuXHJcbi8qKlxyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5Qb2ludC5Qcm9qZWN0VW5pdFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBwb2ludEEgLSBbZGVzY3JpcHRpb25dXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9pbnR9IHBvaW50QiAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2ludH0gW291dF0gLSBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlBvaW50fSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG52YXIgUHJvamVjdFVuaXQgPSBmdW5jdGlvbiAocG9pbnRBLCBwb2ludEIsIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBQb2ludCgpOyB9XHJcblxyXG4gICAgdmFyIGFtdCA9ICgocG9pbnRBLnggKiBwb2ludEIueCkgKyAocG9pbnRBLnkgKiBwb2ludEIueSkpO1xyXG5cclxuICAgIGlmIChhbXQgIT09IDApXHJcbiAgICB7XHJcbiAgICAgICAgb3V0LnggPSBhbXQgKiBwb2ludEIueDtcclxuICAgICAgICBvdXQueSA9IGFtdCAqIHBvaW50Qi55O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFByb2plY3RVbml0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/ProjectUnit.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/point/SetMagnitude.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/geom/point/SetMagnitude.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetMagnitude = __webpack_require__(/*! ./GetMagnitude */ \"./node_modules/phaser/src/geom/point/GetMagnitude.js\");\r\n\r\n/**\r\n * Changes the magnitude (length) of a two-dimensional vector without changing its direction.\r\n *\r\n * @function Phaser.Geom.Point.SetMagnitude\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [point,$return]\r\n *\r\n * @param {Phaser.Geom.Point} point - The Point to treat as the end point of the vector.\r\n * @param {number} magnitude - The new magnitude of the vector.\r\n *\r\n * @return {Phaser.Geom.Point} The modified Point.\r\n */\r\nvar SetMagnitude = function (point, magnitude)\r\n{\r\n if (point.x !== 0 || point.y !== 0)\r\n {\r\n var m = GetMagnitude(point);\r\n\r\n point.x /= m;\r\n point.y /= m;\r\n }\r\n\r\n point.x *= magnitude;\r\n point.y *= magnitude;\r\n\r\n return point;\r\n};\r\n\r\nmodule.exports = SetMagnitude;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L1NldE1hZ25pdHVkZS5qcz81MzExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxtQkFBbUIsbUJBQU8sQ0FBQyw0RUFBZ0I7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxrQkFBa0I7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L1NldE1hZ25pdHVkZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEdldE1hZ25pdHVkZSA9IHJlcXVpcmUoJy4vR2V0TWFnbml0dWRlJyk7XHJcblxyXG4vKipcclxuICogQ2hhbmdlcyB0aGUgbWFnbml0dWRlIChsZW5ndGgpIG9mIGEgdHdvLWRpbWVuc2lvbmFsIHZlY3RvciB3aXRob3V0IGNoYW5naW5nIGl0cyBkaXJlY3Rpb24uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5Qb2ludC5TZXRNYWduaXR1ZGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtwb2ludCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBwb2ludCAtIFRoZSBQb2ludCB0byB0cmVhdCBhcyB0aGUgZW5kIHBvaW50IG9mIHRoZSB2ZWN0b3IuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYWduaXR1ZGUgLSBUaGUgbmV3IG1hZ25pdHVkZSBvZiB0aGUgdmVjdG9yLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5Qb2ludH0gVGhlIG1vZGlmaWVkIFBvaW50LlxyXG4gKi9cclxudmFyIFNldE1hZ25pdHVkZSA9IGZ1bmN0aW9uIChwb2ludCwgbWFnbml0dWRlKVxyXG57XHJcbiAgICBpZiAocG9pbnQueCAhPT0gMCB8fCBwb2ludC55ICE9PSAwKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBtID0gR2V0TWFnbml0dWRlKHBvaW50KTtcclxuXHJcbiAgICAgICAgcG9pbnQueCAvPSBtO1xyXG4gICAgICAgIHBvaW50LnkgLz0gbTtcclxuICAgIH1cclxuXHJcbiAgICBwb2ludC54ICo9IG1hZ25pdHVkZTtcclxuICAgIHBvaW50LnkgKj0gbWFnbml0dWRlO1xyXG5cclxuICAgIHJldHVybiBwb2ludDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2V0TWFnbml0dWRlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/SetMagnitude.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/point/index.js":
/*!*****************************************************!*\
!*** ./node_modules/phaser/src/geom/point/index.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ./Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\nPoint.Ceil = __webpack_require__(/*! ./Ceil */ \"./node_modules/phaser/src/geom/point/Ceil.js\");\r\nPoint.Clone = __webpack_require__(/*! ./Clone */ \"./node_modules/phaser/src/geom/point/Clone.js\");\r\nPoint.CopyFrom = __webpack_require__(/*! ./CopyFrom */ \"./node_modules/phaser/src/geom/point/CopyFrom.js\");\r\nPoint.Equals = __webpack_require__(/*! ./Equals */ \"./node_modules/phaser/src/geom/point/Equals.js\");\r\nPoint.Floor = __webpack_require__(/*! ./Floor */ \"./node_modules/phaser/src/geom/point/Floor.js\");\r\nPoint.GetCentroid = __webpack_require__(/*! ./GetCentroid */ \"./node_modules/phaser/src/geom/point/GetCentroid.js\");\r\nPoint.GetMagnitude = __webpack_require__(/*! ./GetMagnitude */ \"./node_modules/phaser/src/geom/point/GetMagnitude.js\");\r\nPoint.GetMagnitudeSq = __webpack_require__(/*! ./GetMagnitudeSq */ \"./node_modules/phaser/src/geom/point/GetMagnitudeSq.js\");\r\nPoint.GetRectangleFromPoints = __webpack_require__(/*! ./GetRectangleFromPoints */ \"./node_modules/phaser/src/geom/point/GetRectangleFromPoints.js\");\r\nPoint.Interpolate = __webpack_require__(/*! ./Interpolate */ \"./node_modules/phaser/src/geom/point/Interpolate.js\");\r\nPoint.Invert = __webpack_require__(/*! ./Invert */ \"./node_modules/phaser/src/geom/point/Invert.js\");\r\nPoint.Negative = __webpack_require__(/*! ./Negative */ \"./node_modules/phaser/src/geom/point/Negative.js\");\r\nPoint.Project = __webpack_require__(/*! ./Project */ \"./node_modules/phaser/src/geom/point/Project.js\");\r\nPoint.ProjectUnit = __webpack_require__(/*! ./ProjectUnit */ \"./node_modules/phaser/src/geom/point/ProjectUnit.js\");\r\nPoint.SetMagnitude = __webpack_require__(/*! ./SetMagnitude */ \"./node_modules/phaser/src/geom/point/SetMagnitude.js\");\r\n\r\nmodule.exports = Point;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvaW50L2luZGV4LmpzPzIxMWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyw4REFBUzs7QUFFN0IsYUFBYSxtQkFBTyxDQUFDLDREQUFRO0FBQzdCLGNBQWMsbUJBQU8sQ0FBQyw4REFBUztBQUMvQixpQkFBaUIsbUJBQU8sQ0FBQyxvRUFBWTtBQUNyQyxlQUFlLG1CQUFPLENBQUMsZ0VBQVU7QUFDakMsY0FBYyxtQkFBTyxDQUFDLDhEQUFTO0FBQy9CLG9CQUFvQixtQkFBTyxDQUFDLDBFQUFlO0FBQzNDLHFCQUFxQixtQkFBTyxDQUFDLDRFQUFnQjtBQUM3Qyx1QkFBdUIsbUJBQU8sQ0FBQyxnRkFBa0I7QUFDakQsK0JBQStCLG1CQUFPLENBQUMsZ0dBQTBCO0FBQ2pFLG9CQUFvQixtQkFBTyxDQUFDLDBFQUFlO0FBQzNDLGVBQWUsbUJBQU8sQ0FBQyxnRUFBVTtBQUNqQyxpQkFBaUIsbUJBQU8sQ0FBQyxvRUFBWTtBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQyxrRUFBVztBQUNuQyxvQkFBb0IsbUJBQU8sQ0FBQywwRUFBZTtBQUMzQyxxQkFBcUIsbUJBQU8sQ0FBQyw0RUFBZ0I7O0FBRTdDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9wb2ludC9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xyXG5cclxuUG9pbnQuQ2VpbCA9IHJlcXVpcmUoJy4vQ2VpbCcpO1xyXG5Qb2ludC5DbG9uZSA9IHJlcXVpcmUoJy4vQ2xvbmUnKTtcclxuUG9pbnQuQ29weUZyb20gPSByZXF1aXJlKCcuL0NvcHlGcm9tJyk7XHJcblBvaW50LkVxdWFscyA9IHJlcXVpcmUoJy4vRXF1YWxzJyk7XHJcblBvaW50LkZsb29yID0gcmVxdWlyZSgnLi9GbG9vcicpO1xyXG5Qb2ludC5HZXRDZW50cm9pZCA9IHJlcXVpcmUoJy4vR2V0Q2VudHJvaWQnKTtcclxuUG9pbnQuR2V0TWFnbml0dWRlID0gcmVxdWlyZSgnLi9HZXRNYWduaXR1ZGUnKTtcclxuUG9pbnQuR2V0TWFnbml0dWRlU3EgPSByZXF1aXJlKCcuL0dldE1hZ25pdHVkZVNxJyk7XHJcblBvaW50LkdldFJlY3RhbmdsZUZyb21Qb2ludHMgPSByZXF1aXJlKCcuL0dldFJlY3RhbmdsZUZyb21Qb2ludHMnKTtcclxuUG9pbnQuSW50ZXJwb2xhdGUgPSByZXF1aXJlKCcuL0ludGVycG9sYXRlJyk7XHJcblBvaW50LkludmVydCA9IHJlcXVpcmUoJy4vSW52ZXJ0Jyk7XHJcblBvaW50Lk5lZ2F0aXZlID0gcmVxdWlyZSgnLi9OZWdhdGl2ZScpO1xyXG5Qb2ludC5Qcm9qZWN0ID0gcmVxdWlyZSgnLi9Qcm9qZWN0Jyk7XHJcblBvaW50LlByb2plY3RVbml0ID0gcmVxdWlyZSgnLi9Qcm9qZWN0VW5pdCcpO1xyXG5Qb2ludC5TZXRNYWduaXR1ZGUgPSByZXF1aXJlKCcuL1NldE1hZ25pdHVkZScpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQb2ludDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/point/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/polygon/Clone.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/geom/polygon/Clone.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Polygon = __webpack_require__(/*! ./Polygon */ \"./node_modules/phaser/src/geom/polygon/Polygon.js\");\r\n\r\n/**\r\n * Create a new polygon which is a copy of the specified polygon\r\n *\r\n * @function Phaser.Geom.Polygon.Clone\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Polygon} polygon - The polygon to create a clone of\r\n *\r\n * @return {Phaser.Geom.Polygon} A new separate Polygon cloned from the specified polygon, based on the same points.\r\n */\r\nvar Clone = function (polygon)\r\n{\r\n return new Polygon(polygon.points);\r\n};\r\n\r\nmodule.exports = Clone;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vQ2xvbmUuanM/MDdkYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLG9FQUFXOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9CQUFvQjtBQUMvQjtBQUNBLFlBQVksb0JBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vQ2xvbmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQb2x5Z29uID0gcmVxdWlyZSgnLi9Qb2x5Z29uJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgbmV3IHBvbHlnb24gd2hpY2ggaXMgYSBjb3B5IG9mIHRoZSBzcGVjaWZpZWQgcG9seWdvblxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUG9seWdvbi5DbG9uZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2x5Z29ufSBwb2x5Z29uIC0gVGhlIHBvbHlnb24gdG8gY3JlYXRlIGEgY2xvbmUgb2ZcclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUG9seWdvbn0gQSBuZXcgc2VwYXJhdGUgUG9seWdvbiBjbG9uZWQgZnJvbSB0aGUgc3BlY2lmaWVkIHBvbHlnb24sIGJhc2VkIG9uIHRoZSBzYW1lIHBvaW50cy5cclxuICovXHJcbnZhciBDbG9uZSA9IGZ1bmN0aW9uIChwb2x5Z29uKVxyXG57XHJcbiAgICByZXR1cm4gbmV3IFBvbHlnb24ocG9seWdvbi5wb2ludHMpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDbG9uZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/polygon/Clone.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/polygon/Contains.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/geom/polygon/Contains.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n// Checks whether the x and y coordinates are contained within this polygon.\r\n// Adapted from http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html by Jonas Raoni Soares Silva\r\n\r\n/**\r\n * Checks if a point is within the bounds of a Polygon.\r\n *\r\n * @function Phaser.Geom.Polygon.Contains\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Polygon} polygon - The Polygon to check against.\r\n * @param {number} x - The X coordinate of the point to check.\r\n * @param {number} y - The Y coordinate of the point to check.\r\n *\r\n * @return {boolean} `true` if the point is within the bounds of the Polygon, otherwise `false`.\r\n */\r\nvar Contains = function (polygon, x, y)\r\n{\r\n var inside = false;\r\n\r\n for (var i = -1, j = polygon.points.length - 1; ++i < polygon.points.length; j = i)\r\n {\r\n var ix = polygon.points[i].x;\r\n var iy = polygon.points[i].y;\r\n\r\n var jx = polygon.points[j].x;\r\n var jy = polygon.points[j].y;\r\n\r\n if (((iy <= y && y < jy) || (jy <= y && y < iy)) && (x < (jx - ix) * (y - iy) / (jy - iy) + ix))\r\n {\r\n inside = !inside;\r\n }\r\n }\r\n\r\n return inside;\r\n};\r\n\r\nmodule.exports = Contains;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vQ29udGFpbnMuanM/MzI5ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9CQUFvQjtBQUMvQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1EQUFtRCw2QkFBNkI7QUFDaEY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9wb2x5Z29uL0NvbnRhaW5zLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vLyBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIHBvbHlnb24uXHJcbi8vICBBZGFwdGVkIGZyb20gaHR0cDovL3d3dy5lY3NlLnJwaS5lZHUvSG9tZXBhZ2VzL3dyZi9SZXNlYXJjaC9TaG9ydF9Ob3Rlcy9wbnBvbHkuaHRtbCBieSBKb25hcyBSYW9uaSBTb2FyZXMgU2lsdmFcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgYSBwb2ludCBpcyB3aXRoaW4gdGhlIGJvdW5kcyBvZiBhIFBvbHlnb24uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5Qb2x5Z29uLkNvbnRhaW5zXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvbHlnb259IHBvbHlnb24gLSBUaGUgUG9seWdvbiB0byBjaGVjayBhZ2FpbnN0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIGNoZWNrLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIGNoZWNrLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHBvaW50IGlzIHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBQb2x5Z29uLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICovXHJcbnZhciBDb250YWlucyA9IGZ1bmN0aW9uIChwb2x5Z29uLCB4LCB5KVxyXG57XHJcbiAgICB2YXIgaW5zaWRlID0gZmFsc2U7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IC0xLCBqID0gcG9seWdvbi5wb2ludHMubGVuZ3RoIC0gMTsgKytpIDwgcG9seWdvbi5wb2ludHMubGVuZ3RoOyBqID0gaSlcclxuICAgIHtcclxuICAgICAgICB2YXIgaXggPSBwb2x5Z29uLnBvaW50c1tpXS54O1xyXG4gICAgICAgIHZhciBpeSA9IHBvbHlnb24ucG9pbnRzW2ldLnk7XHJcblxyXG4gICAgICAgIHZhciBqeCA9IHBvbHlnb24ucG9pbnRzW2pdLng7XHJcbiAgICAgICAgdmFyIGp5ID0gcG9seWdvbi5wb2ludHNbal0ueTtcclxuXHJcbiAgICAgICAgaWYgKCgoaXkgPD0geSAmJiB5IDwgankpIHx8IChqeSA8PSB5ICYmIHkgPCBpeSkpICYmICh4IDwgKGp4IC0gaXgpICogKHkgLSBpeSkgLyAoankgLSBpeSkgKyBpeCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaW5zaWRlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb250YWlucztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/polygon/Contains.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/polygon/ContainsPoint.js":
/*!***************************************************************!*\
!*** ./node_modules/phaser/src/geom/polygon/ContainsPoint.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/polygon/Contains.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Geom.Polygon.ContainsPoint\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Polygon} polygon - [description]\r\n * @param {Phaser.Geom.Point} point - [description]\r\n *\r\n * @return {boolean} [description]\r\n */\r\nvar ContainsPoint = function (polygon, point)\r\n{\r\n return Contains(polygon, point.x, point.y);\r\n};\r\n\r\nmodule.exports = ContainsPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vQ29udGFpbnNQb2ludC5qcz9lMTg0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxlQUFlLG1CQUFPLENBQUMsc0VBQVk7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsa0JBQWtCO0FBQzdCO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vQ29udGFpbnNQb2ludC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENvbnRhaW5zID0gcmVxdWlyZSgnLi9Db250YWlucycpO1xyXG5cclxuLyoqXHJcbiAqIFtkZXNjcmlwdGlvbl1cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlBvbHlnb24uQ29udGFpbnNQb2ludFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2x5Z29ufSBwb2x5Z29uIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBwb2ludCAtIFtkZXNjcmlwdGlvbl1cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gW2Rlc2NyaXB0aW9uXVxyXG4gKi9cclxudmFyIENvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiAocG9seWdvbiwgcG9pbnQpXHJcbntcclxuICAgIHJldHVybiBDb250YWlucyhwb2x5Z29uLCBwb2ludC54LCBwb2ludC55KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ29udGFpbnNQb2ludDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/polygon/ContainsPoint.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/polygon/Earcut.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/geom/polygon/Earcut.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n// Earcut 2.1.4 (December 4th 2018)\r\n\r\n/*\r\n * ISC License\r\n * \r\n * Copyright (c) 2016, Mapbox\r\n * \r\n * Permission to use, copy, modify, and/or distribute this software for any purpose\r\n * with or without fee is hereby granted, provided that the above copyright notice\r\n * and this permission notice appear in all copies.\r\n * \r\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\r\n * FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\r\n * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\r\n * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\r\n * THIS SOFTWARE.\r\n */\r\n\r\n\r\n\r\nmodule.exports = earcut;\r\n\r\nfunction earcut(data, holeIndices, dim) {\r\n\r\n dim = dim || 2;\r\n\r\n var hasHoles = holeIndices && holeIndices.length,\r\n outerLen = hasHoles ? holeIndices[0] * dim : data.length,\r\n outerNode = linkedList(data, 0, outerLen, dim, true),\r\n triangles = [];\r\n\r\n if (!outerNode || outerNode.next === outerNode.prev) return triangles;\r\n\r\n var minX, minY, maxX, maxY, x, y, invSize;\r\n\r\n if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\r\n\r\n // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\r\n if (data.length > 80 * dim) {\r\n minX = maxX = data[0];\r\n minY = maxY = data[1];\r\n\r\n for (var i = dim; i < outerLen; i += dim) {\r\n x = data[i];\r\n y = data[i + 1];\r\n if (x < minX) minX = x;\r\n if (y < minY) minY = y;\r\n if (x > maxX) maxX = x;\r\n if (y > maxY) maxY = y;\r\n }\r\n\r\n // minX, minY and invSize are later used to transform coords into integers for z-order calculation\r\n invSize = Math.max(maxX - minX, maxY - minY);\r\n invSize = invSize !== 0 ? 1 / invSize : 0;\r\n }\r\n\r\n earcutLinked(outerNode, triangles, dim, minX, minY, invSize);\r\n\r\n return triangles;\r\n}\r\n\r\n// create a circular doubly linked list from polygon points in the specified winding order\r\nfunction linkedList(data, start, end, dim, clockwise) {\r\n var i, last;\r\n\r\n if (clockwise === (signedArea(data, start, end, dim) > 0)) {\r\n for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\r\n } else {\r\n for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\r\n }\r\n\r\n if (last && equals(last, last.next)) {\r\n removeNode(last);\r\n last = last.next;\r\n }\r\n\r\n return last;\r\n}\r\n\r\n// eliminate collinear or duplicate points\r\nfunction filterPoints(start, end) {\r\n if (!start) return start;\r\n if (!end) end = start;\r\n\r\n var p = start,\r\n again;\r\n do {\r\n again = false;\r\n\r\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\r\n removeNode(p);\r\n p = end = p.prev;\r\n if (p === p.next) break;\r\n again = true;\r\n\r\n } else {\r\n p = p.next;\r\n }\r\n } while (again || p !== end);\r\n\r\n return end;\r\n}\r\n\r\n// main ear slicing loop which triangulates a polygon (given as a linked list)\r\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\r\n if (!ear) return;\r\n\r\n // interlink polygon nodes in z-order\r\n if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\r\n\r\n var stop = ear,\r\n prev, next;\r\n\r\n // iterate through ears, slicing them one by one\r\n while (ear.prev !== ear.next) {\r\n prev = ear.prev;\r\n next = ear.next;\r\n\r\n if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\r\n // cut off the triangle\r\n triangles.push(prev.i / dim);\r\n triangles.push(ear.i / dim);\r\n triangles.push(next.i / dim);\r\n\r\n removeNode(ear);\r\n\r\n // skipping the next vertex leads to less sliver triangles\r\n ear = next.next;\r\n stop = next.next;\r\n\r\n continue;\r\n }\r\n\r\n ear = next;\r\n\r\n // if we looped through the whole remaining polygon and can't find any more ears\r\n if (ear === stop) {\r\n // try filtering points and slicing again\r\n if (!pass) {\r\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\r\n\r\n // if this didn't work, try curing all small self-intersections locally\r\n } else if (pass === 1) {\r\n ear = cureLocalIntersections(ear, triangles, dim);\r\n earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\r\n\r\n // as a last resort, try splitting the remaining polygon into two\r\n } else if (pass === 2) {\r\n splitEarcut(ear, triangles, dim, minX, minY, invSize);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n}\r\n\r\n// check whether a polygon node forms a valid ear with adjacent nodes\r\nfunction isEar(ear) {\r\n var a = ear.prev,\r\n b = ear,\r\n c = ear.next;\r\n\r\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\r\n\r\n // now make sure we don't have other points inside the potential ear\r\n var p = ear.next.next;\r\n\r\n while (p !== ear.prev) {\r\n if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\r\n area(p.prev, p, p.next) >= 0) return false;\r\n p = p.next;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction isEarHashed(ear, minX, minY, invSize) {\r\n var a = ear.prev,\r\n b = ear,\r\n c = ear.next;\r\n\r\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\r\n\r\n // triangle bbox; min & max are calculated like this for speed\r\n var minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x),\r\n minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y),\r\n maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x),\r\n maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y);\r\n\r\n // z-order range for the current triangle bbox;\r\n var minZ = zOrder(minTX, minTY, minX, minY, invSize),\r\n maxZ = zOrder(maxTX, maxTY, minX, minY, invSize);\r\n\r\n var p = ear.prevZ,\r\n n = ear.nextZ;\r\n\r\n // look for points inside the triangle in both directions\r\n while (p && p.z >= minZ && n && n.z <= maxZ) {\r\n if (p !== ear.prev && p !== ear.next &&\r\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\r\n area(p.prev, p, p.next) >= 0) return false;\r\n p = p.prevZ;\r\n\r\n if (n !== ear.prev && n !== ear.next &&\r\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\r\n area(n.prev, n, n.next) >= 0) return false;\r\n n = n.nextZ;\r\n }\r\n\r\n // look for remaining points in decreasing z-order\r\n while (p && p.z >= minZ) {\r\n if (p !== ear.prev && p !== ear.next &&\r\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\r\n area(p.prev, p, p.next) >= 0) return false;\r\n p = p.prevZ;\r\n }\r\n\r\n // look for remaining points in increasing z-order\r\n while (n && n.z <= maxZ) {\r\n if (n !== ear.prev && n !== ear.next &&\r\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\r\n area(n.prev, n, n.next) >= 0) return false;\r\n n = n.nextZ;\r\n }\r\n\r\n return true;\r\n}\r\n\r\n// go through all polygon nodes and cure small local self-intersections\r\nfunction cureLocalIntersections(start, triangles, dim) {\r\n var p = start;\r\n do {\r\n var a = p.prev,\r\n b = p.next.next;\r\n\r\n if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\r\n\r\n triangles.push(a.i / dim);\r\n triangles.push(p.i / dim);\r\n triangles.push(b.i / dim);\r\n\r\n // remove two nodes involved\r\n removeNode(p);\r\n removeNode(p.next);\r\n\r\n p = start = b;\r\n }\r\n p = p.next;\r\n } while (p !== start);\r\n\r\n return p;\r\n}\r\n\r\n// try splitting polygon into two and triangulate them independently\r\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\r\n // look for a valid diagonal that divides the polygon into two\r\n var a = start;\r\n do {\r\n var b = a.next.next;\r\n while (b !== a.prev) {\r\n if (a.i !== b.i && isValidDiagonal(a, b)) {\r\n // split the polygon in two by the diagonal\r\n var c = splitPolygon(a, b);\r\n\r\n // filter collinear points around the cuts\r\n a = filterPoints(a, a.next);\r\n c = filterPoints(c, c.next);\r\n\r\n // run earcut on each half\r\n earcutLinked(a, triangles, dim, minX, minY, invSize);\r\n earcutLinked(c, triangles, dim, minX, minY, invSize);\r\n return;\r\n }\r\n b = b.next;\r\n }\r\n a = a.next;\r\n } while (a !== start);\r\n}\r\n\r\n// link every hole into the outer loop, producing a single-ring polygon without holes\r\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\r\n var queue = [],\r\n i, len, start, end, list;\r\n\r\n for (i = 0, len = holeIndices.length; i < len; i++) {\r\n start = holeIndices[i] * dim;\r\n end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\r\n list = linkedList(data, start, end, dim, false);\r\n if (list === list.next) list.steiner = true;\r\n queue.push(getLeftmost(list));\r\n }\r\n\r\n queue.sort(compareX);\r\n\r\n // process holes from left to right\r\n for (i = 0; i < queue.length; i++) {\r\n eliminateHole(queue[i], outerNode);\r\n outerNode = filterPoints(outerNode, outerNode.next);\r\n }\r\n\r\n return outerNode;\r\n}\r\n\r\nfunction compareX(a, b) {\r\n return a.x - b.x;\r\n}\r\n\r\n// find a bridge between vertices that connects hole with an outer ring and and link it\r\nfunction eliminateHole(hole, outerNode) {\r\n outerNode = findHoleBridge(hole, outerNode);\r\n if (outerNode) {\r\n var b = splitPolygon(outerNode, hole);\r\n filterPoints(b, b.next);\r\n }\r\n}\r\n\r\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\r\nfunction findHoleBridge(hole, outerNode) {\r\n var p = outerNode,\r\n hx = hole.x,\r\n hy = hole.y,\r\n qx = -Infinity,\r\n m;\r\n\r\n // find a segment intersected by a ray from the hole's leftmost point to the left;\r\n // segment's endpoint with lesser x will be potential connection point\r\n do {\r\n if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\r\n var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\r\n if (x <= hx && x > qx) {\r\n qx = x;\r\n if (x === hx) {\r\n if (hy === p.y) return p;\r\n if (hy === p.next.y) return p.next;\r\n }\r\n m = p.x < p.next.x ? p : p.next;\r\n }\r\n }\r\n p = p.next;\r\n } while (p !== outerNode);\r\n\r\n if (!m) return null;\r\n\r\n if (hx === qx) return m.prev; // hole touches outer segment; pick lower endpoint\r\n\r\n // look for points inside the triangle of hole point, segment intersection and endpoint;\r\n // if there are no points found, we have a valid connection;\r\n // otherwise choose the point of the minimum angle with the ray as connection point\r\n\r\n var stop = m,\r\n mx = m.x,\r\n my = m.y,\r\n tanMin = Infinity,\r\n tan;\r\n\r\n p = m.next;\r\n\r\n while (p !== stop) {\r\n if (hx >= p.x && p.x >= mx && hx !== p.x &&\r\n pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\r\n\r\n tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\r\n\r\n if ((tan < tanMin || (tan === tanMin && p.x > m.x)) && locallyInside(p, hole)) {\r\n m = p;\r\n tanMin = tan;\r\n }\r\n }\r\n\r\n p = p.next;\r\n }\r\n\r\n return m;\r\n}\r\n\r\n// interlink polygon nodes in z-order\r\nfunction indexCurve(start, minX, minY, invSize) {\r\n var p = start;\r\n do {\r\n if (p.z === null) p.z = zOrder(p.x, p.y, minX, minY, invSize);\r\n p.prevZ = p.prev;\r\n p.nextZ = p.next;\r\n p = p.next;\r\n } while (p !== start);\r\n\r\n p.prevZ.nextZ = null;\r\n p.prevZ = null;\r\n\r\n sortLinked(p);\r\n}\r\n\r\n// Simon Tatham's linked list merge sort algorithm\r\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\r\nfunction sortLinked(list) {\r\n var i, p, q, e, tail, numMerges, pSize, qSize,\r\n inSize = 1;\r\n\r\n do {\r\n p = list;\r\n list = null;\r\n tail = null;\r\n numMerges = 0;\r\n\r\n while (p) {\r\n numMerges++;\r\n q = p;\r\n pSize = 0;\r\n for (i = 0; i < inSize; i++) {\r\n pSize++;\r\n q = q.nextZ;\r\n if (!q) break;\r\n }\r\n qSize = inSize;\r\n\r\n while (pSize > 0 || (qSize > 0 && q)) {\r\n\r\n if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\r\n e = p;\r\n p = p.nextZ;\r\n pSize--;\r\n } else {\r\n e = q;\r\n q = q.nextZ;\r\n qSize--;\r\n }\r\n\r\n if (tail) tail.nextZ = e;\r\n else list = e;\r\n\r\n e.prevZ = tail;\r\n tail = e;\r\n }\r\n\r\n p = q;\r\n }\r\n\r\n tail.nextZ = null;\r\n inSize *= 2;\r\n\r\n } while (numMerges > 1);\r\n\r\n return list;\r\n}\r\n\r\n// z-order of a point given coords and inverse of the longer side of data bbox\r\nfunction zOrder(x, y, minX, minY, invSize) {\r\n // coords are transformed into non-negative 15-bit integer range\r\n x = 32767 * (x - minX) * invSize;\r\n y = 32767 * (y - minY) * invSize;\r\n\r\n x = (x | (x << 8)) & 0x00FF00FF;\r\n x = (x | (x << 4)) & 0x0F0F0F0F;\r\n x = (x | (x << 2)) & 0x33333333;\r\n x = (x | (x << 1)) & 0x55555555;\r\n\r\n y = (y | (y << 8)) & 0x00FF00FF;\r\n y = (y | (y << 4)) & 0x0F0F0F0F;\r\n y = (y | (y << 2)) & 0x33333333;\r\n y = (y | (y << 1)) & 0x55555555;\r\n\r\n return x | (y << 1);\r\n}\r\n\r\n// find the leftmost node of a polygon ring\r\nfunction getLeftmost(start) {\r\n var p = start,\r\n leftmost = start;\r\n do {\r\n if (p.x < leftmost.x) leftmost = p;\r\n p = p.next;\r\n } while (p !== start);\r\n\r\n return leftmost;\r\n}\r\n\r\n// check if a point lies within a convex triangle\r\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\r\n return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 &&\r\n (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 &&\r\n (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;\r\n}\r\n\r\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\r\nfunction isValidDiagonal(a, b) {\r\n return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) &&\r\n locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b);\r\n}\r\n\r\n// signed area of a triangle\r\nfunction area(p, q, r) {\r\n return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\r\n}\r\n\r\n// check if two points are equal\r\nfunction equals(p1, p2) {\r\n return p1.x === p2.x && p1.y === p2.y;\r\n}\r\n\r\n// check if two segments intersect\r\nfunction intersects(p1, q1, p2, q2) {\r\n if ((equals(p1, q1) && equals(p2, q2)) ||\r\n (equals(p1, q2) && equals(p2, q1))) return true;\r\n return area(p1, q1, p2) > 0 !== area(p1, q1, q2) > 0 &&\r\n area(p2, q2, p1) > 0 !== area(p2, q2, q1) > 0;\r\n}\r\n\r\n// check if a polygon diagonal intersects any polygon segments\r\nfunction intersectsPolygon(a, b) {\r\n var p = a;\r\n do {\r\n if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\r\n intersects(p, p.next, a, b)) return true;\r\n p = p.next;\r\n } while (p !== a);\r\n\r\n return false;\r\n}\r\n\r\n// check if a polygon diagonal is locally inside the polygon\r\nfunction locallyInside(a, b) {\r\n return area(a.prev, a, a.next) < 0 ?\r\n area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\r\n area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\r\n}\r\n\r\n// check if the middle point of a polygon diagonal is inside the polygon\r\nfunction middleInside(a, b) {\r\n var p = a,\r\n inside = false,\r\n px = (a.x + b.x) / 2,\r\n py = (a.y + b.y) / 2;\r\n do {\r\n if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\r\n (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\r\n inside = !inside;\r\n p = p.next;\r\n } while (p !== a);\r\n\r\n return inside;\r\n}\r\n\r\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\r\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\r\nfunction splitPolygon(a, b) {\r\n var a2 = new Node(a.i, a.x, a.y),\r\n b2 = new Node(b.i, b.x, b.y),\r\n an = a.next,\r\n bp = b.prev;\r\n\r\n a.next = b;\r\n b.prev = a;\r\n\r\n a2.next = an;\r\n an.prev = a2;\r\n\r\n b2.next = a2;\r\n a2.prev = b2;\r\n\r\n bp.next = b2;\r\n b2.prev = bp;\r\n\r\n return b2;\r\n}\r\n\r\n// create a node and optionally link it with previous one (in a circular doubly linked list)\r\nfunction insertNode(i, x, y, last) {\r\n var p = new Node(i, x, y);\r\n\r\n if (!last) {\r\n p.prev = p;\r\n p.next = p;\r\n\r\n } else {\r\n p.next = last.next;\r\n p.prev = last;\r\n last.next.prev = p;\r\n last.next = p;\r\n }\r\n return p;\r\n}\r\n\r\nfunction removeNode(p) {\r\n p.next.prev = p.prev;\r\n p.prev.next = p.next;\r\n\r\n if (p.prevZ) p.prevZ.nextZ = p.nextZ;\r\n if (p.nextZ) p.nextZ.prevZ = p.prevZ;\r\n}\r\n\r\nfunction Node(i, x, y) {\r\n // vertex index in coordinates array\r\n this.i = i;\r\n\r\n // vertex coordinates\r\n this.x = x;\r\n this.y = y;\r\n\r\n // previous and next vertex nodes in a polygon ring\r\n this.prev = null;\r\n this.next = null;\r\n\r\n // z-order curve value\r\n this.z = null;\r\n\r\n // previous and next nodes in z-order\r\n this.prevZ = null;\r\n this.nextZ = null;\r\n\r\n // indicates whether this is a steiner point\r\n this.steiner = false;\r\n}\r\n\r\n// return a percentage difference between the polygon area and its triangulation area;\r\n// used to verify correctness of triangulation\r\nearcut.deviation = function (data, holeIndices, dim, triangles) {\r\n var hasHoles = holeIndices && holeIndices.length;\r\n var outerLen = hasHoles ? holeIndices[0] * dim : data.length;\r\n\r\n var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\r\n if (hasHoles) {\r\n for (var i = 0, len = holeIndices.length; i < len; i++) {\r\n var start = holeIndices[i] * dim;\r\n var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\r\n polygonArea -= Math.abs(signedArea(data, start, end, dim));\r\n }\r\n }\r\n\r\n var trianglesArea = 0;\r\n for (i = 0; i < triangles.length; i += 3) {\r\n var a = triangles[i] * dim;\r\n var b = triangles[i + 1] * dim;\r\n var c = triangles[i + 2] * dim;\r\n trianglesArea += Math.abs(\r\n (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\r\n (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\r\n }\r\n\r\n return polygonArea === 0 && trianglesArea === 0 ? 0 :\r\n Math.abs((trianglesArea - polygonArea) / polygonArea);\r\n};\r\n\r\nfunction signedArea(data, start, end, dim) {\r\n var sum = 0;\r\n for (var i = start, j = end - dim; i < end; i += dim) {\r\n sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\r\n j = i;\r\n }\r\n return sum;\r\n}\r\n\r\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\r\nearcut.flatten = function (data) {\r\n var dim = data[0][0].length,\r\n result = {vertices: [], holes: [], dimensions: dim},\r\n holeIndex = 0;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n for (var j = 0; j < data[i].length; j++) {\r\n for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);\r\n }\r\n if (i > 0) {\r\n holeIndex += data[i - 1].length;\r\n result.holes.push(holeIndex);\r\n }\r\n }\r\n return result;\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vRWFyY3V0LmpzPzM2ZGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWI7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsMEVBQTBFO0FBQzFFO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsY0FBYztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVCQUF1QixTQUFTO0FBQ2hDLEtBQUs7QUFDTCwyQkFBMkIsWUFBWTtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUNBQXlDOztBQUV6QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx5Q0FBeUM7O0FBRXpDLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx5Q0FBeUMsU0FBUztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxlQUFlLGtCQUFrQjtBQUNqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLGlDQUFpQywrQkFBK0I7O0FBRWhFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrREFBa0Q7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsWUFBWTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlEQUFpRCxTQUFTO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlLHNCQUFzQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNDQUFzQyxTQUFTO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLHlDQUF5QztBQUMzRDs7QUFFQSxtQkFBbUIsaUJBQWlCO0FBQ3BDLHVCQUF1QixvQkFBb0I7QUFDM0MsMkJBQTJCLFNBQVM7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcG9seWdvbi9FYXJjdXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8vICBFYXJjdXQgMi4xLjQgKERlY2VtYmVyIDR0aCAyMDE4KVxyXG5cclxuLypcclxuICogSVNDIExpY2Vuc2VcclxuICogXHJcbiAqIENvcHlyaWdodCAoYykgMjAxNiwgTWFwYm94XHJcbiAqIFxyXG4gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZVxyXG4gKiB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlXHJcbiAqIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLlxyXG4gKiBcclxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG4gKiBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EXHJcbiAqIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG4gKiBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TU1xyXG4gKiBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVJcclxuICogVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRlxyXG4gKiBUSElTIFNPRlRXQVJFLlxyXG4gKi9cclxuXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZWFyY3V0O1xyXG5cclxuZnVuY3Rpb24gZWFyY3V0KGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0pIHtcclxuXHJcbiAgICBkaW0gPSBkaW0gfHwgMjtcclxuXHJcbiAgICB2YXIgaGFzSG9sZXMgPSBob2xlSW5kaWNlcyAmJiBob2xlSW5kaWNlcy5sZW5ndGgsXHJcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXHJcbiAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKSxcclxuICAgICAgICB0cmlhbmdsZXMgPSBbXTtcclxuXHJcbiAgICBpZiAoIW91dGVyTm9kZSB8fCBvdXRlck5vZGUubmV4dCA9PT0gb3V0ZXJOb2RlLnByZXYpIHJldHVybiB0cmlhbmdsZXM7XHJcblxyXG4gICAgdmFyIG1pblgsIG1pblksIG1heFgsIG1heFksIHgsIHksIGludlNpemU7XHJcblxyXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xyXG5cclxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxyXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcclxuICAgICAgICBtaW5YID0gbWF4WCA9IGRhdGFbMF07XHJcbiAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWzFdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gZGltOyBpIDwgb3V0ZXJMZW47IGkgKz0gZGltKSB7XHJcbiAgICAgICAgICAgIHggPSBkYXRhW2ldO1xyXG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XHJcbiAgICAgICAgICAgIGlmICh4IDwgbWluWCkgbWluWCA9IHg7XHJcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XHJcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XHJcbiAgICAgICAgICAgIGlmICh5ID4gbWF4WSkgbWF4WSA9IHk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBtaW5YLCBtaW5ZIGFuZCBpbnZTaXplIGFyZSBsYXRlciB1c2VkIHRvIHRyYW5zZm9ybSBjb29yZHMgaW50byBpbnRlZ2VycyBmb3Igei1vcmRlciBjYWxjdWxhdGlvblxyXG4gICAgICAgIGludlNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xyXG4gICAgICAgIGludlNpemUgPSBpbnZTaXplICE9PSAwID8gMSAvIGludlNpemUgOiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcclxuXHJcbiAgICByZXR1cm4gdHJpYW5nbGVzO1xyXG59XHJcblxyXG4vLyBjcmVhdGUgYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QgZnJvbSBwb2x5Z29uIHBvaW50cyBpbiB0aGUgc3BlY2lmaWVkIHdpbmRpbmcgb3JkZXJcclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xyXG4gICAgdmFyIGksIGxhc3Q7XHJcblxyXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHNpZ25lZEFyZWEoZGF0YSwgc3RhcnQsIGVuZCwgZGltKSA+IDApKSB7XHJcbiAgICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobGFzdCAmJiBlcXVhbHMobGFzdCwgbGFzdC5uZXh0KSkge1xyXG4gICAgICAgIHJlbW92ZU5vZGUobGFzdCk7XHJcbiAgICAgICAgbGFzdCA9IGxhc3QubmV4dDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGFzdDtcclxufVxyXG5cclxuLy8gZWxpbWluYXRlIGNvbGxpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXHJcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XHJcbiAgICBpZiAoIXN0YXJ0KSByZXR1cm4gc3RhcnQ7XHJcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XHJcblxyXG4gICAgdmFyIHAgPSBzdGFydCxcclxuICAgICAgICBhZ2FpbjtcclxuICAgIGRvIHtcclxuICAgICAgICBhZ2FpbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XHJcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocCk7XHJcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XHJcbiAgICAgICAgICAgIGlmIChwID09PSBwLm5leHQpIGJyZWFrO1xyXG4gICAgICAgICAgICBhZ2FpbiA9IHRydWU7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHAgPSBwLm5leHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcclxuXHJcbiAgICByZXR1cm4gZW5kO1xyXG59XHJcblxyXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcclxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUsIHBhc3MpIHtcclxuICAgIGlmICghZWFyKSByZXR1cm47XHJcblxyXG4gICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxyXG4gICAgaWYgKCFwYXNzICYmIGludlNpemUpIGluZGV4Q3VydmUoZWFyLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcclxuXHJcbiAgICB2YXIgc3RvcCA9IGVhcixcclxuICAgICAgICBwcmV2LCBuZXh0O1xyXG5cclxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxyXG4gICAgd2hpbGUgKGVhci5wcmV2ICE9PSBlYXIubmV4dCkge1xyXG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcclxuICAgICAgICBuZXh0ID0gZWFyLm5leHQ7XHJcblxyXG4gICAgICAgIGlmIChpbnZTaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBpbnZTaXplKSA6IGlzRWFyKGVhcikpIHtcclxuICAgICAgICAgICAgLy8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcclxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gocHJldi5pIC8gZGltKTtcclxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xyXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xyXG5cclxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xyXG5cclxuICAgICAgICAgICAgLy8gc2tpcHBpbmcgdGhlIG5leHQgdmVydGV4IGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xyXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XHJcbiAgICAgICAgICAgIHN0b3AgPSBuZXh0Lm5leHQ7XHJcblxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVhciA9IG5leHQ7XHJcblxyXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXHJcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xyXG4gICAgICAgICAgICAvLyB0cnkgZmlsdGVyaW5nIHBvaW50cyBhbmQgc2xpY2luZyBhZ2FpblxyXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcclxuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUsIDEpO1xyXG5cclxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBlYXIgPSBjdXJlTG9jYWxJbnRlcnNlY3Rpb25zKGVhciwgdHJpYW5nbGVzLCBkaW0pO1xyXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUsIDIpO1xyXG5cclxuICAgICAgICAgICAgLy8gYXMgYSBsYXN0IHJlc29ydCwgdHJ5IHNwbGl0dGluZyB0aGUgcmVtYWluaW5nIHBvbHlnb24gaW50byB0d29cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4vLyBjaGVjayB3aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9kZXNcclxuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XHJcbiAgICB2YXIgYSA9IGVhci5wcmV2LFxyXG4gICAgICAgIGIgPSBlYXIsXHJcbiAgICAgICAgYyA9IGVhci5uZXh0O1xyXG5cclxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcclxuXHJcbiAgICAvLyBub3cgbWFrZSBzdXJlIHdlIGRvbid0IGhhdmUgb3RoZXIgcG9pbnRzIGluc2lkZSB0aGUgcG90ZW50aWFsIGVhclxyXG4gICAgdmFyIHAgPSBlYXIubmV4dC5uZXh0O1xyXG5cclxuICAgIHdoaWxlIChwICE9PSBlYXIucHJldikge1xyXG4gICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXHJcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBwID0gcC5uZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIGludlNpemUpIHtcclxuICAgIHZhciBhID0gZWFyLnByZXYsXHJcbiAgICAgICAgYiA9IGVhcixcclxuICAgICAgICBjID0gZWFyLm5leHQ7XHJcblxyXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxyXG5cclxuICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXHJcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxyXG4gICAgICAgIG1pblRZID0gYS55IDwgYi55ID8gKGEueSA8IGMueSA/IGEueSA6IGMueSkgOiAoYi55IDwgYy55ID8gYi55IDogYy55KSxcclxuICAgICAgICBtYXhUWCA9IGEueCA+IGIueCA/IChhLnggPiBjLnggPyBhLnggOiBjLngpIDogKGIueCA+IGMueCA/IGIueCA6IGMueCksXHJcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xyXG5cclxuICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XHJcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIGludlNpemUpLFxyXG4gICAgICAgIG1heFogPSB6T3JkZXIobWF4VFgsIG1heFRZLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcclxuXHJcbiAgICB2YXIgcCA9IGVhci5wcmV2WixcclxuICAgICAgICBuID0gZWFyLm5leHRaO1xyXG5cclxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIGluIGJvdGggZGlyZWN0aW9uc1xyXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblogJiYgbiAmJiBuLnogPD0gbWF4Wikge1xyXG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxyXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXHJcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBwID0gcC5wcmV2WjtcclxuXHJcbiAgICAgICAgaWYgKG4gIT09IGVhci5wcmV2ICYmIG4gIT09IGVhci5uZXh0ICYmXHJcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBuLngsIG4ueSkgJiZcclxuICAgICAgICAgICAgYXJlYShuLnByZXYsIG4sIG4ubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIG4gPSBuLm5leHRaO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGxvb2sgZm9yIHJlbWFpbmluZyBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXHJcbiAgICB3aGlsZSAocCAmJiBwLnogPj0gbWluWikge1xyXG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxyXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXHJcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBwID0gcC5wcmV2WjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBsb29rIGZvciByZW1haW5pbmcgcG9pbnRzIGluIGluY3JlYXNpbmcgei1vcmRlclxyXG4gICAgd2hpbGUgKG4gJiYgbi56IDw9IG1heFopIHtcclxuICAgICAgICBpZiAobiAhPT0gZWFyLnByZXYgJiYgbiAhPT0gZWFyLm5leHQgJiZcclxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIG4ueCwgbi55KSAmJlxyXG4gICAgICAgICAgICBhcmVhKG4ucHJldiwgbiwgbi5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgbiA9IG4ubmV4dFo7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbi8vIGdvIHRocm91Z2ggYWxsIHBvbHlnb24gbm9kZXMgYW5kIGN1cmUgc21hbGwgbG9jYWwgc2VsZi1pbnRlcnNlY3Rpb25zXHJcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XHJcbiAgICB2YXIgcCA9IHN0YXJ0O1xyXG4gICAgZG8ge1xyXG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxyXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XHJcblxyXG4gICAgICAgIGlmICghZXF1YWxzKGEsIGIpICYmIGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcclxuXHJcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XHJcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XHJcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGIuaSAvIGRpbSk7XHJcblxyXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXHJcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocCk7XHJcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocC5uZXh0KTtcclxuXHJcbiAgICAgICAgICAgIHAgPSBzdGFydCA9IGI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHAgPSBwLm5leHQ7XHJcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XHJcblxyXG4gICAgcmV0dXJuIHA7XHJcbn1cclxuXHJcbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XHJcbmZ1bmN0aW9uIHNwbGl0RWFyY3V0KHN0YXJ0LCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6ZSkge1xyXG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cclxuICAgIHZhciBhID0gc3RhcnQ7XHJcbiAgICBkbyB7XHJcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcclxuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XHJcbiAgICAgICAgICAgIGlmIChhLmkgIT09IGIuaSAmJiBpc1ZhbGlkRGlhZ29uYWwoYSwgYikpIHtcclxuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcclxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xsaW5lYXIgcG9pbnRzIGFyb3VuZCB0aGUgY3V0c1xyXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xyXG4gICAgICAgICAgICAgICAgYyA9IGZpbHRlclBvaW50cyhjLCBjLm5leHQpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXHJcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUpO1xyXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGMsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBiID0gYi5uZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBhID0gYS5uZXh0O1xyXG4gICAgfSB3aGlsZSAoYSAhPT0gc3RhcnQpO1xyXG59XHJcblxyXG4vLyBsaW5rIGV2ZXJ5IGhvbGUgaW50byB0aGUgb3V0ZXIgbG9vcCwgcHJvZHVjaW5nIGEgc2luZ2xlLXJpbmcgcG9seWdvbiB3aXRob3V0IGhvbGVzXHJcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xyXG4gICAgdmFyIHF1ZXVlID0gW10sXHJcbiAgICAgICAgaSwgbGVuLCBzdGFydCwgZW5kLCBsaXN0O1xyXG5cclxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgc3RhcnQgPSBob2xlSW5kaWNlc1tpXSAqIGRpbTtcclxuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xyXG4gICAgICAgIGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xyXG4gICAgICAgIGlmIChsaXN0ID09PSBsaXN0Lm5leHQpIGxpc3Quc3RlaW5lciA9IHRydWU7XHJcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XHJcblxyXG4gICAgLy8gcHJvY2VzcyBob2xlcyBmcm9tIGxlZnQgdG8gcmlnaHRcclxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XHJcbiAgICAgICAgb3V0ZXJOb2RlID0gZmlsdGVyUG9pbnRzKG91dGVyTm9kZSwgb3V0ZXJOb2RlLm5leHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXRlck5vZGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbXBhcmVYKGEsIGIpIHtcclxuICAgIHJldHVybiBhLnggLSBiLng7XHJcbn1cclxuXHJcbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxyXG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xyXG4gICAgb3V0ZXJOb2RlID0gZmluZEhvbGVCcmlkZ2UoaG9sZSwgb3V0ZXJOb2RlKTtcclxuICAgIGlmIChvdXRlck5vZGUpIHtcclxuICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpO1xyXG4gICAgICAgIGZpbHRlclBvaW50cyhiLCBiLm5leHQpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXHJcbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSkge1xyXG4gICAgdmFyIHAgPSBvdXRlck5vZGUsXHJcbiAgICAgICAgaHggPSBob2xlLngsXHJcbiAgICAgICAgaHkgPSBob2xlLnksXHJcbiAgICAgICAgcXggPSAtSW5maW5pdHksXHJcbiAgICAgICAgbTtcclxuXHJcbiAgICAvLyBmaW5kIGEgc2VnbWVudCBpbnRlcnNlY3RlZCBieSBhIHJheSBmcm9tIHRoZSBob2xlJ3MgbGVmdG1vc3QgcG9pbnQgdG8gdGhlIGxlZnQ7XHJcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XHJcbiAgICBkbyB7XHJcbiAgICAgICAgaWYgKGh5IDw9IHAueSAmJiBoeSA+PSBwLm5leHQueSAmJiBwLm5leHQueSAhPT0gcC55KSB7XHJcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xyXG4gICAgICAgICAgICBpZiAoeCA8PSBoeCAmJiB4ID4gcXgpIHtcclxuICAgICAgICAgICAgICAgIHF4ID0geDtcclxuICAgICAgICAgICAgICAgIGlmICh4ID09PSBoeCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChoeSA9PT0gcC55KSByZXR1cm4gcDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaHkgPT09IHAubmV4dC55KSByZXR1cm4gcC5uZXh0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbSA9IHAueCA8IHAubmV4dC54ID8gcCA6IHAubmV4dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBwID0gcC5uZXh0O1xyXG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcclxuXHJcbiAgICBpZiAoIW0pIHJldHVybiBudWxsO1xyXG5cclxuICAgIGlmIChoeCA9PT0gcXgpIHJldHVybiBtLnByZXY7IC8vIGhvbGUgdG91Y2hlcyBvdXRlciBzZWdtZW50OyBwaWNrIGxvd2VyIGVuZHBvaW50XHJcblxyXG4gICAgLy8gbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgb2YgaG9sZSBwb2ludCwgc2VnbWVudCBpbnRlcnNlY3Rpb24gYW5kIGVuZHBvaW50O1xyXG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XHJcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxyXG5cclxuICAgIHZhciBzdG9wID0gbSxcclxuICAgICAgICBteCA9IG0ueCxcclxuICAgICAgICBteSA9IG0ueSxcclxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcclxuICAgICAgICB0YW47XHJcblxyXG4gICAgcCA9IG0ubmV4dDtcclxuXHJcbiAgICB3aGlsZSAocCAhPT0gc3RvcCkge1xyXG4gICAgICAgIGlmIChoeCA+PSBwLnggJiYgcC54ID49IG14ICYmIGh4ICE9PSBwLnggJiZcclxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG15ID8gaHggOiBxeCwgaHksIG14LCBteSwgaHkgPCBteSA/IHF4IDogaHgsIGh5LCBwLngsIHAueSkpIHtcclxuXHJcbiAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcclxuXHJcbiAgICAgICAgICAgIGlmICgodGFuIDwgdGFuTWluIHx8ICh0YW4gPT09IHRhbk1pbiAmJiBwLnggPiBtLngpKSAmJiBsb2NhbGx5SW5zaWRlKHAsIGhvbGUpKSB7XHJcbiAgICAgICAgICAgICAgICBtID0gcDtcclxuICAgICAgICAgICAgICAgIHRhbk1pbiA9IHRhbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcCA9IHAubmV4dDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbTtcclxufVxyXG5cclxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxyXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBpbnZTaXplKSB7XHJcbiAgICB2YXIgcCA9IHN0YXJ0O1xyXG4gICAgZG8ge1xyXG4gICAgICAgIGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgaW52U2l6ZSk7XHJcbiAgICAgICAgcC5wcmV2WiA9IHAucHJldjtcclxuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xyXG4gICAgICAgIHAgPSBwLm5leHQ7XHJcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XHJcblxyXG4gICAgcC5wcmV2Wi5uZXh0WiA9IG51bGw7XHJcbiAgICBwLnByZXZaID0gbnVsbDtcclxuXHJcbiAgICBzb3J0TGlua2VkKHApO1xyXG59XHJcblxyXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxyXG4vLyBodHRwOi8vd3d3LmNoaWFyay5ncmVlbmVuZC5vcmcudWsvfnNndGF0aGFtL2FsZ29yaXRobXMvbGlzdHNvcnQuaHRtbFxyXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcclxuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcclxuICAgICAgICBpblNpemUgPSAxO1xyXG5cclxuICAgIGRvIHtcclxuICAgICAgICBwID0gbGlzdDtcclxuICAgICAgICBsaXN0ID0gbnVsbDtcclxuICAgICAgICB0YWlsID0gbnVsbDtcclxuICAgICAgICBudW1NZXJnZXMgPSAwO1xyXG5cclxuICAgICAgICB3aGlsZSAocCkge1xyXG4gICAgICAgICAgICBudW1NZXJnZXMrKztcclxuICAgICAgICAgICAgcSA9IHA7XHJcbiAgICAgICAgICAgIHBTaXplID0gMDtcclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGluU2l6ZTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xyXG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXEpIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xyXG5cclxuICAgICAgICAgICAgd2hpbGUgKHBTaXplID4gMCB8fCAocVNpemUgPiAwICYmIHEpKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplICE9PSAwICYmIChxU2l6ZSA9PT0gMCB8fCAhcSB8fCBwLnogPD0gcS56KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xyXG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xyXG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xyXG4gICAgICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xyXG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcclxuXHJcbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcclxuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwID0gcTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xyXG4gICAgICAgIGluU2l6ZSAqPSAyO1xyXG5cclxuICAgIH0gd2hpbGUgKG51bU1lcmdlcyA+IDEpO1xyXG5cclxuICAgIHJldHVybiBsaXN0O1xyXG59XHJcblxyXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBpbnZlcnNlIG9mIHRoZSBsb25nZXIgc2lkZSBvZiBkYXRhIGJib3hcclxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIGludlNpemUpIHtcclxuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcclxuICAgIHggPSAzMjc2NyAqICh4IC0gbWluWCkgKiBpbnZTaXplO1xyXG4gICAgeSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAqIGludlNpemU7XHJcblxyXG4gICAgeCA9ICh4IHwgKHggPDwgOCkpICYgMHgwMEZGMDBGRjtcclxuICAgIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XHJcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xyXG4gICAgeCA9ICh4IHwgKHggPDwgMSkpICYgMHg1NTU1NTU1NTtcclxuXHJcbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xyXG4gICAgeSA9ICh5IHwgKHkgPDwgNCkpICYgMHgwRjBGMEYwRjtcclxuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XHJcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xyXG5cclxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XHJcbn1cclxuXHJcbi8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcclxuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcclxuICAgIHZhciBwID0gc3RhcnQsXHJcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcclxuICAgIGRvIHtcclxuICAgICAgICBpZiAocC54IDwgbGVmdG1vc3QueCkgbGVmdG1vc3QgPSBwO1xyXG4gICAgICAgIHAgPSBwLm5leHQ7XHJcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XHJcblxyXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xyXG59XHJcblxyXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXHJcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcclxuICAgIHJldHVybiAoY3ggLSBweCkgKiAoYXkgLSBweSkgLSAoYXggLSBweCkgKiAoY3kgLSBweSkgPj0gMCAmJlxyXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXHJcbiAgICAgICAgICAgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XHJcbn1cclxuXHJcbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxyXG5mdW5jdGlvbiBpc1ZhbGlkRGlhZ29uYWwoYSwgYikge1xyXG4gICAgcmV0dXJuIGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiZcclxuICAgICAgICAgICBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkgJiYgbWlkZGxlSW5zaWRlKGEsIGIpO1xyXG59XHJcblxyXG4vLyBzaWduZWQgYXJlYSBvZiBhIHRyaWFuZ2xlXHJcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xyXG4gICAgcmV0dXJuIChxLnkgLSBwLnkpICogKHIueCAtIHEueCkgLSAocS54IC0gcC54KSAqIChyLnkgLSBxLnkpO1xyXG59XHJcblxyXG4vLyBjaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxyXG5mdW5jdGlvbiBlcXVhbHMocDEsIHAyKSB7XHJcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xyXG59XHJcblxyXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XHJcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcclxuICAgIGlmICgoZXF1YWxzKHAxLCBxMSkgJiYgZXF1YWxzKHAyLCBxMikpIHx8XHJcbiAgICAgICAgKGVxdWFscyhwMSwgcTIpICYmIGVxdWFscyhwMiwgcTEpKSkgcmV0dXJuIHRydWU7XHJcbiAgICByZXR1cm4gYXJlYShwMSwgcTEsIHAyKSA+IDAgIT09IGFyZWEocDEsIHExLCBxMikgPiAwICYmXHJcbiAgICAgICAgICAgYXJlYShwMiwgcTIsIHAxKSA+IDAgIT09IGFyZWEocDIsIHEyLCBxMSkgPiAwO1xyXG59XHJcblxyXG4vLyBjaGVjayBpZiBhIHBvbHlnb24gZGlhZ29uYWwgaW50ZXJzZWN0cyBhbnkgcG9seWdvbiBzZWdtZW50c1xyXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XHJcbiAgICB2YXIgcCA9IGE7XHJcbiAgICBkbyB7XHJcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxyXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBwID0gcC5uZXh0O1xyXG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG4vLyBjaGVjayBpZiBhIHBvbHlnb24gZGlhZ29uYWwgaXMgbG9jYWxseSBpbnNpZGUgdGhlIHBvbHlnb25cclxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XHJcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cclxuICAgICAgICBhcmVhKGEsIGIsIGEubmV4dCkgPj0gMCAmJiBhcmVhKGEsIGEucHJldiwgYikgPj0gMCA6XHJcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xyXG59XHJcblxyXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cclxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcclxuICAgIHZhciBwID0gYSxcclxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcclxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcclxuICAgICAgICBweSA9IChhLnkgKyBiLnkpIC8gMjtcclxuICAgIGRvIHtcclxuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgcC5uZXh0LnkgIT09IHAueSAmJlxyXG4gICAgICAgICAgICAgICAgKHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSlcclxuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcclxuICAgICAgICBwID0gcC5uZXh0O1xyXG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XHJcblxyXG4gICAgcmV0dXJuIGluc2lkZTtcclxufVxyXG5cclxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xyXG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcclxuZnVuY3Rpb24gc3BsaXRQb2x5Z29uKGEsIGIpIHtcclxuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxyXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXHJcbiAgICAgICAgYW4gPSBhLm5leHQsXHJcbiAgICAgICAgYnAgPSBiLnByZXY7XHJcblxyXG4gICAgYS5uZXh0ID0gYjtcclxuICAgIGIucHJldiA9IGE7XHJcblxyXG4gICAgYTIubmV4dCA9IGFuO1xyXG4gICAgYW4ucHJldiA9IGEyO1xyXG5cclxuICAgIGIyLm5leHQgPSBhMjtcclxuICAgIGEyLnByZXYgPSBiMjtcclxuXHJcbiAgICBicC5uZXh0ID0gYjI7XHJcbiAgICBiMi5wcmV2ID0gYnA7XHJcblxyXG4gICAgcmV0dXJuIGIyO1xyXG59XHJcblxyXG4vLyBjcmVhdGUgYSBub2RlIGFuZCBvcHRpb25hbGx5IGxpbmsgaXQgd2l0aCBwcmV2aW91cyBvbmUgKGluIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0KVxyXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcclxuICAgIHZhciBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XHJcblxyXG4gICAgaWYgKCFsYXN0KSB7XHJcbiAgICAgICAgcC5wcmV2ID0gcDtcclxuICAgICAgICBwLm5leHQgPSBwO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcC5uZXh0ID0gbGFzdC5uZXh0O1xyXG4gICAgICAgIHAucHJldiA9IGxhc3Q7XHJcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBwO1xyXG4gICAgICAgIGxhc3QubmV4dCA9IHA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcDtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVtb3ZlTm9kZShwKSB7XHJcbiAgICBwLm5leHQucHJldiA9IHAucHJldjtcclxuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xyXG5cclxuICAgIGlmIChwLnByZXZaKSBwLnByZXZaLm5leHRaID0gcC5uZXh0WjtcclxuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2WjtcclxufVxyXG5cclxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XHJcbiAgICAvLyB2ZXJ0ZXggaW5kZXggaW4gY29vcmRpbmF0ZXMgYXJyYXlcclxuICAgIHRoaXMuaSA9IGk7XHJcblxyXG4gICAgLy8gdmVydGV4IGNvb3JkaW5hdGVzXHJcbiAgICB0aGlzLnggPSB4O1xyXG4gICAgdGhpcy55ID0geTtcclxuXHJcbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0ZXggbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcclxuICAgIHRoaXMucHJldiA9IG51bGw7XHJcbiAgICB0aGlzLm5leHQgPSBudWxsO1xyXG5cclxuICAgIC8vIHotb3JkZXIgY3VydmUgdmFsdWVcclxuICAgIHRoaXMueiA9IG51bGw7XHJcblxyXG4gICAgLy8gcHJldmlvdXMgYW5kIG5leHQgbm9kZXMgaW4gei1vcmRlclxyXG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XHJcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcclxuXHJcbiAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxyXG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XHJcbn1cclxuXHJcbi8vIHJldHVybiBhIHBlcmNlbnRhZ2UgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBwb2x5Z29uIGFyZWEgYW5kIGl0cyB0cmlhbmd1bGF0aW9uIGFyZWE7XHJcbi8vIHVzZWQgdG8gdmVyaWZ5IGNvcnJlY3RuZXNzIG9mIHRyaWFuZ3VsYXRpb25cclxuZWFyY3V0LmRldmlhdGlvbiA9IGZ1bmN0aW9uIChkYXRhLCBob2xlSW5kaWNlcywgZGltLCB0cmlhbmdsZXMpIHtcclxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aDtcclxuICAgIHZhciBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aDtcclxuXHJcbiAgICB2YXIgcG9seWdvbkFyZWEgPSBNYXRoLmFicyhzaWduZWRBcmVhKGRhdGEsIDAsIG91dGVyTGVuLCBkaW0pKTtcclxuICAgIGlmIChoYXNIb2xlcykge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgc3RhcnQgPSBob2xlSW5kaWNlc1tpXSAqIGRpbTtcclxuICAgICAgICAgICAgdmFyIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHBvbHlnb25BcmVhIC09IE1hdGguYWJzKHNpZ25lZEFyZWEoZGF0YSwgc3RhcnQsIGVuZCwgZGltKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciB0cmlhbmdsZXNBcmVhID0gMDtcclxuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpICs9IDMpIHtcclxuICAgICAgICB2YXIgYSA9IHRyaWFuZ2xlc1tpXSAqIGRpbTtcclxuICAgICAgICB2YXIgYiA9IHRyaWFuZ2xlc1tpICsgMV0gKiBkaW07XHJcbiAgICAgICAgdmFyIGMgPSB0cmlhbmdsZXNbaSArIDJdICogZGltO1xyXG4gICAgICAgIHRyaWFuZ2xlc0FyZWEgKz0gTWF0aC5hYnMoXHJcbiAgICAgICAgICAgIChkYXRhW2FdIC0gZGF0YVtjXSkgKiAoZGF0YVtiICsgMV0gLSBkYXRhW2EgKyAxXSkgLVxyXG4gICAgICAgICAgICAoZGF0YVthXSAtIGRhdGFbYl0pICogKGRhdGFbYyArIDFdIC0gZGF0YVthICsgMV0pKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcG9seWdvbkFyZWEgPT09IDAgJiYgdHJpYW5nbGVzQXJlYSA9PT0gMCA/IDAgOlxyXG4gICAgICAgIE1hdGguYWJzKCh0cmlhbmdsZXNBcmVhIC0gcG9seWdvbkFyZWEpIC8gcG9seWdvbkFyZWEpO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gc2lnbmVkQXJlYShkYXRhLCBzdGFydCwgZW5kLCBkaW0pIHtcclxuICAgIHZhciBzdW0gPSAwO1xyXG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xyXG4gICAgICAgIHN1bSArPSAoZGF0YVtqXSAtIGRhdGFbaV0pICogKGRhdGFbaSArIDFdICsgZGF0YVtqICsgMV0pO1xyXG4gICAgICAgIGogPSBpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN1bTtcclxufVxyXG5cclxuLy8gdHVybiBhIHBvbHlnb24gaW4gYSBtdWx0aS1kaW1lbnNpb25hbCBhcnJheSBmb3JtIChlLmcuIGFzIGluIEdlb0pTT04pIGludG8gYSBmb3JtIEVhcmN1dCBhY2NlcHRzXHJcbmVhcmN1dC5mbGF0dGVuID0gZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgIHZhciBkaW0gPSBkYXRhWzBdWzBdLmxlbmd0aCxcclxuICAgICAgICByZXN1bHQgPSB7dmVydGljZXM6IFtdLCBob2xlczogW10sIGRpbWVuc2lvbnM6IGRpbX0sXHJcbiAgICAgICAgaG9sZUluZGV4ID0gMDtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRhdGFbaV0ubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBkaW07IGQrKykgcmVzdWx0LnZlcnRpY2VzLnB1c2goZGF0YVtpXVtqXVtkXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpID4gMCkge1xyXG4gICAgICAgICAgICBob2xlSW5kZXggKz0gZGF0YVtpIC0gMV0ubGVuZ3RoO1xyXG4gICAgICAgICAgICByZXN1bHQuaG9sZXMucHVzaChob2xlSW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/polygon/Earcut.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/polygon/GetAABB.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/geom/polygon/GetAABB.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Rectangle = __webpack_require__(/*! ../rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\n\r\n/**\r\n * Calculates the bounding AABB rectangle of a polygon.\r\n *\r\n * @function Phaser.Geom.Polygon.GetAABB\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Polygon} polygon - The polygon that should be calculated.\r\n * @param {(Phaser.Geom.Rectangle|object)} [out] - The rectangle or object that has x, y, width, and height properties to store the result. Optional.\r\n *\r\n * @return {(Phaser.Geom.Rectangle|object)} The resulting rectangle or object that is passed in with position and dimensions of the polygon's AABB.\r\n */\r\nvar GetAABB = function (polygon, out)\r\n{\r\n if (out === undefined) { out = new Rectangle(); }\r\n\r\n var minX = Infinity;\r\n var minY = Infinity;\r\n var maxX = -minX;\r\n var maxY = -minY;\r\n var p;\r\n\r\n for (var i = 0; i < polygon.points.length; i++)\r\n {\r\n p = polygon.points[i];\r\n\r\n minX = Math.min(minX, p.x);\r\n minY = Math.min(minY, p.y);\r\n maxX = Math.max(maxX, p.x);\r\n maxY = Math.max(maxY, p.y);\r\n }\r\n\r\n out.x = minX;\r\n out.y = minY;\r\n out.width = maxX - minX;\r\n out.height = maxY - minY;\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetAABB;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vR2V0QUFCQi5qcz84NDE1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxxRkFBd0I7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsc0JBQXNCO0FBQ25DO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVywrQkFBK0I7QUFDMUM7QUFDQSxZQUFZLCtCQUErQjtBQUMzQztBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsdUJBQXVCOztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vR2V0QUFCQi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4uL3JlY3RhbmdsZS9SZWN0YW5nbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBib3VuZGluZyBBQUJCIHJlY3RhbmdsZSBvZiBhIHBvbHlnb24uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5Qb2x5Z29uLkdldEFBQkJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9seWdvbn0gcG9seWdvbiAtIFRoZSBwb2x5Z29uIHRoYXQgc2hvdWxkIGJlIGNhbGN1bGF0ZWQuXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlJlY3RhbmdsZXxvYmplY3QpfSBbb3V0XSAtIFRoZSByZWN0YW5nbGUgb3Igb2JqZWN0IHRoYXQgaGFzIHgsIHksIHdpZHRoLCBhbmQgaGVpZ2h0IHByb3BlcnRpZXMgdG8gc3RvcmUgdGhlIHJlc3VsdC4gT3B0aW9uYWwuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5SZWN0YW5nbGV8b2JqZWN0KX0gVGhlIHJlc3VsdGluZyByZWN0YW5nbGUgb3Igb2JqZWN0IHRoYXQgaXMgcGFzc2VkIGluIHdpdGggcG9zaXRpb24gYW5kIGRpbWVuc2lvbnMgb2YgdGhlIHBvbHlnb24ncyBBQUJCLlxyXG4gKi9cclxudmFyIEdldEFBQkIgPSBmdW5jdGlvbiAocG9seWdvbiwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFJlY3RhbmdsZSgpOyB9XHJcblxyXG4gICAgdmFyIG1pblggPSBJbmZpbml0eTtcclxuICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XHJcbiAgICB2YXIgbWF4WCA9IC1taW5YO1xyXG4gICAgdmFyIG1heFkgPSAtbWluWTtcclxuICAgIHZhciBwO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9seWdvbi5wb2ludHMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgcCA9IHBvbHlnb24ucG9pbnRzW2ldO1xyXG5cclxuICAgICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgcC54KTtcclxuICAgICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgcC55KTtcclxuICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgcC54KTtcclxuICAgICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgcC55KTtcclxuICAgIH1cclxuXHJcbiAgICBvdXQueCA9IG1pblg7XHJcbiAgICBvdXQueSA9IG1pblk7XHJcbiAgICBvdXQud2lkdGggPSBtYXhYIC0gbWluWDtcclxuICAgIG91dC5oZWlnaHQgPSBtYXhZIC0gbWluWTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRBQUJCO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/polygon/GetAABB.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/polygon/GetNumberArray.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/geom/polygon/GetNumberArray.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n// Export the points as an array of flat numbers, following the sequence [ x,y, x,y, x,y ]\r\n\r\n/**\r\n * Stores all of the points of a Polygon into a flat array of numbers following the sequence [ x,y, x,y, x,y ],\r\n * i.e. each point of the Polygon, in the order it's defined, corresponds to two elements of the resultant\r\n * array for the point's X and Y coordinate.\r\n *\r\n * @function Phaser.Geom.Polygon.GetNumberArray\r\n * @since 3.0.0\r\n *\r\n * @generic {number[]} O - [output,$return]\r\n *\r\n * @param {Phaser.Geom.Polygon} polygon - The Polygon whose points to export.\r\n * @param {(array|number[])} [output] - An array to which the points' coordinates should be appended.\r\n *\r\n * @return {(array|number[])} The modified `output` array, or a new array if none was given.\r\n */\r\nvar GetNumberArray = function (polygon, output)\r\n{\r\n if (output === undefined) { output = []; }\r\n\r\n for (var i = 0; i < polygon.points.length; i++)\r\n {\r\n output.push(polygon.points[i].x);\r\n output.push(polygon.points[i].y);\r\n }\r\n\r\n return output;\r\n};\r\n\r\nmodule.exports = GetNumberArray;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vR2V0TnVtYmVyQXJyYXkuanM/MzY0NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsU0FBUztBQUN0QjtBQUNBLFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsWUFBWSxpQkFBaUI7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGFBQWE7O0FBRTVDLG1CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcG9seWdvbi9HZXROdW1iZXJBcnJheS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLy8gRXhwb3J0IHRoZSBwb2ludHMgYXMgYW4gYXJyYXkgb2YgZmxhdCBudW1iZXJzLCBmb2xsb3dpbmcgdGhlIHNlcXVlbmNlIFsgeCx5LCB4LHksIHgseSBdXHJcblxyXG4vKipcclxuICogU3RvcmVzIGFsbCBvZiB0aGUgcG9pbnRzIG9mIGEgUG9seWdvbiBpbnRvIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzIGZvbGxvd2luZyB0aGUgc2VxdWVuY2UgWyB4LHksIHgseSwgeCx5IF0sXHJcbiAqIGkuZS4gZWFjaCBwb2ludCBvZiB0aGUgUG9seWdvbiwgaW4gdGhlIG9yZGVyIGl0J3MgZGVmaW5lZCwgY29ycmVzcG9uZHMgdG8gdHdvIGVsZW1lbnRzIG9mIHRoZSByZXN1bHRhbnRcclxuICogYXJyYXkgZm9yIHRoZSBwb2ludCdzIFggYW5kIFkgY29vcmRpbmF0ZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlBvbHlnb24uR2V0TnVtYmVyQXJyYXlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtudW1iZXJbXX0gTyAtIFtvdXRwdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2x5Z29ufSBwb2x5Z29uIC0gVGhlIFBvbHlnb24gd2hvc2UgcG9pbnRzIHRvIGV4cG9ydC5cclxuICogQHBhcmFtIHsoYXJyYXl8bnVtYmVyW10pfSBbb3V0cHV0XSAtIEFuIGFycmF5IHRvIHdoaWNoIHRoZSBwb2ludHMnIGNvb3JkaW5hdGVzIHNob3VsZCBiZSBhcHBlbmRlZC5cclxuICpcclxuICogQHJldHVybiB7KGFycmF5fG51bWJlcltdKX0gVGhlIG1vZGlmaWVkIGBvdXRwdXRgIGFycmF5LCBvciBhIG5ldyBhcnJheSBpZiBub25lIHdhcyBnaXZlbi5cclxuICovXHJcbnZhciBHZXROdW1iZXJBcnJheSA9IGZ1bmN0aW9uIChwb2x5Z29uLCBvdXRwdXQpXHJcbntcclxuICAgIGlmIChvdXRwdXQgPT09IHVuZGVmaW5lZCkgeyBvdXRwdXQgPSBbXTsgfVxyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9seWdvbi5wb2ludHMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgb3V0cHV0LnB1c2gocG9seWdvbi5wb2ludHNbaV0ueCk7XHJcbiAgICAgICAgb3V0cHV0LnB1c2gocG9seWdvbi5wb2ludHNbaV0ueSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dHB1dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0TnVtYmVyQXJyYXk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/polygon/GetNumberArray.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/polygon/GetPoints.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/geom/polygon/GetPoints.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Length = __webpack_require__(/*! ../line/Length */ \"./node_modules/phaser/src/geom/line/Length.js\");\r\nvar Line = __webpack_require__(/*! ../line/Line */ \"./node_modules/phaser/src/geom/line/Line.js\");\r\nvar Perimeter = __webpack_require__(/*! ./Perimeter */ \"./node_modules/phaser/src/geom/polygon/Perimeter.js\");\r\n\r\n/**\r\n * Returns an array of Point objects containing the coordinates of the points around the perimeter of the Polygon,\r\n * based on the given quantity or stepRate values.\r\n *\r\n * @function Phaser.Geom.Polygon.GetPoints\r\n * @since 3.12.0\r\n *\r\n * @param {Phaser.Geom.Polygon} polygon - The Polygon to get the points from.\r\n * @param {integer} quantity - The amount of points to return. If a falsey value the quantity will be derived from the `stepRate` instead.\r\n * @param {number} [stepRate] - Sets the quantity by getting the perimeter of the Polygon and dividing it by the stepRate.\r\n * @param {array} [output] - An array to insert the points in to. If not provided a new array will be created.\r\n *\r\n * @return {Phaser.Geom.Point[]} An array of Point objects pertaining to the points around the perimeter of the Polygon.\r\n */\r\nvar GetPoints = function (polygon, quantity, stepRate, out)\r\n{\r\n if (out === undefined) { out = []; }\r\n\r\n var points = polygon.points;\r\n var perimeter = Perimeter(polygon);\r\n\r\n // If quantity is a falsey value (false, null, 0, undefined, etc) then we calculate it based on the stepRate instead.\r\n if (!quantity)\r\n {\r\n quantity = perimeter / stepRate;\r\n }\r\n\r\n for (var i = 0; i < quantity; i++)\r\n {\r\n var position = perimeter * (i / quantity);\r\n var accumulatedPerimeter = 0;\r\n\r\n for (var j = 0; j < points.length; j++)\r\n {\r\n var pointA = points[j];\r\n var pointB = points[(j + 1) % points.length];\r\n var line = new Line(\r\n pointA.x,\r\n pointA.y,\r\n pointB.x,\r\n pointB.y\r\n );\r\n var length = Length(line);\r\n\r\n if (position < accumulatedPerimeter || position > accumulatedPerimeter + length)\r\n {\r\n accumulatedPerimeter += length;\r\n continue;\r\n }\r\n\r\n var point = line.getPoint((position - accumulatedPerimeter) / length);\r\n out.push(point);\r\n\r\n break;\r\n }\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetPoints;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vR2V0UG9pbnRzLmpzP2FlOWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyxxRUFBZ0I7QUFDckMsV0FBVyxtQkFBTyxDQUFDLGlFQUFjO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLHdFQUFhOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEIsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBWSxvQkFBb0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7O0FBRXRDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsY0FBYztBQUNqQztBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vR2V0UG9pbnRzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTGVuZ3RoID0gcmVxdWlyZSgnLi4vbGluZS9MZW5ndGgnKTtcclxudmFyIExpbmUgPSByZXF1aXJlKCcuLi9saW5lL0xpbmUnKTtcclxudmFyIFBlcmltZXRlciA9IHJlcXVpcmUoJy4vUGVyaW1ldGVyJyk7XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhbiBhcnJheSBvZiBQb2ludCBvYmplY3RzIGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludHMgYXJvdW5kIHRoZSBwZXJpbWV0ZXIgb2YgdGhlIFBvbHlnb24sXHJcbiAqIGJhc2VkIG9uIHRoZSBnaXZlbiBxdWFudGl0eSBvciBzdGVwUmF0ZSB2YWx1ZXMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5Qb2x5Z29uLkdldFBvaW50c1xyXG4gKiBAc2luY2UgMy4xMi4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9seWdvbn0gcG9seWdvbiAtIFRoZSBQb2x5Z29uIHRvIGdldCB0aGUgcG9pbnRzIGZyb20uXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gcXVhbnRpdHkgLSBUaGUgYW1vdW50IG9mIHBvaW50cyB0byByZXR1cm4uIElmIGEgZmFsc2V5IHZhbHVlIHRoZSBxdWFudGl0eSB3aWxsIGJlIGRlcml2ZWQgZnJvbSB0aGUgYHN0ZXBSYXRlYCBpbnN0ZWFkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXBSYXRlXSAtIFNldHMgdGhlIHF1YW50aXR5IGJ5IGdldHRpbmcgdGhlIHBlcmltZXRlciBvZiB0aGUgUG9seWdvbiBhbmQgZGl2aWRpbmcgaXQgYnkgdGhlIHN0ZXBSYXRlLlxyXG4gKiBAcGFyYW0ge2FycmF5fSBbb3V0cHV0XSAtIEFuIGFycmF5IHRvIGluc2VydCB0aGUgcG9pbnRzIGluIHRvLiBJZiBub3QgcHJvdmlkZWQgYSBuZXcgYXJyYXkgd2lsbCBiZSBjcmVhdGVkLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5Qb2ludFtdfSBBbiBhcnJheSBvZiBQb2ludCBvYmplY3RzIHBlcnRhaW5pbmcgdG8gdGhlIHBvaW50cyBhcm91bmQgdGhlIHBlcmltZXRlciBvZiB0aGUgUG9seWdvbi5cclxuICovXHJcbnZhciBHZXRQb2ludHMgPSBmdW5jdGlvbiAocG9seWdvbiwgcXVhbnRpdHksIHN0ZXBSYXRlLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBbXTsgfVxyXG5cclxuICAgIHZhciBwb2ludHMgPSBwb2x5Z29uLnBvaW50cztcclxuICAgIHZhciBwZXJpbWV0ZXIgPSBQZXJpbWV0ZXIocG9seWdvbik7XHJcblxyXG4gICAgLy8gIElmIHF1YW50aXR5IGlzIGEgZmFsc2V5IHZhbHVlIChmYWxzZSwgbnVsbCwgMCwgdW5kZWZpbmVkLCBldGMpIHRoZW4gd2UgY2FsY3VsYXRlIGl0IGJhc2VkIG9uIHRoZSBzdGVwUmF0ZSBpbnN0ZWFkLlxyXG4gICAgaWYgKCFxdWFudGl0eSlcclxuICAgIHtcclxuICAgICAgICBxdWFudGl0eSA9IHBlcmltZXRlciAvIHN0ZXBSYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVhbnRpdHk7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2YXIgcG9zaXRpb24gPSBwZXJpbWV0ZXIgKiAoaSAvIHF1YW50aXR5KTtcclxuICAgICAgICB2YXIgYWNjdW11bGF0ZWRQZXJpbWV0ZXIgPSAwO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBvaW50cy5sZW5ndGg7IGorKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBwb2ludEEgPSBwb2ludHNbal07XHJcbiAgICAgICAgICAgIHZhciBwb2ludEIgPSBwb2ludHNbKGogKyAxKSAlIHBvaW50cy5sZW5ndGhdO1xyXG4gICAgICAgICAgICB2YXIgbGluZSA9IG5ldyBMaW5lKFxyXG4gICAgICAgICAgICAgICAgcG9pbnRBLngsXHJcbiAgICAgICAgICAgICAgICBwb2ludEEueSxcclxuICAgICAgICAgICAgICAgIHBvaW50Qi54LFxyXG4gICAgICAgICAgICAgICAgcG9pbnRCLnlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IExlbmd0aChsaW5lKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IGFjY3VtdWxhdGVkUGVyaW1ldGVyIHx8IHBvc2l0aW9uID4gYWNjdW11bGF0ZWRQZXJpbWV0ZXIgKyBsZW5ndGgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVkUGVyaW1ldGVyICs9IGxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgcG9pbnQgPSBsaW5lLmdldFBvaW50KChwb3NpdGlvbiAtIGFjY3VtdWxhdGVkUGVyaW1ldGVyKSAvIGxlbmd0aCk7XHJcbiAgICAgICAgICAgIG91dC5wdXNoKHBvaW50KTtcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRQb2ludHM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/polygon/GetPoints.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/polygon/Perimeter.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/geom/polygon/Perimeter.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Length = __webpack_require__(/*! ../line/Length */ \"./node_modules/phaser/src/geom/line/Length.js\");\r\nvar Line = __webpack_require__(/*! ../line/Line */ \"./node_modules/phaser/src/geom/line/Line.js\");\r\n\r\n/**\r\n * Returns the perimeter of the given Polygon.\r\n *\r\n * @function Phaser.Geom.Polygon.Perimeter\r\n * @since 3.12.0\r\n *\r\n * @param {Phaser.Geom.Polygon} polygon - The Polygon to get the perimeter of.\r\n *\r\n * @return {number} The perimeter of the Polygon.\r\n */\r\nvar Perimeter = function (polygon)\r\n{\r\n var points = polygon.points;\r\n var perimeter = 0;\r\n\r\n for (var i = 0; i < points.length; i++)\r\n {\r\n var pointA = points[i];\r\n var pointB = points[(i + 1) % points.length];\r\n var line = new Line(\r\n pointA.x,\r\n pointA.y,\r\n pointB.x,\r\n pointB.y\r\n );\r\n\r\n perimeter += Length(line);\r\n }\r\n\r\n return perimeter;\r\n};\r\n\r\nmodule.exports = Perimeter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vUGVyaW1ldGVyLmpzPzQwY2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyxxRUFBZ0I7QUFDckMsV0FBVyxtQkFBTyxDQUFDLGlFQUFjOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9CQUFvQjtBQUMvQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcG9seWdvbi9QZXJpbWV0ZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBMZW5ndGggPSByZXF1aXJlKCcuLi9saW5lL0xlbmd0aCcpO1xyXG52YXIgTGluZSA9IHJlcXVpcmUoJy4uL2xpbmUvTGluZScpO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIHBlcmltZXRlciBvZiB0aGUgZ2l2ZW4gUG9seWdvbi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlBvbHlnb24uUGVyaW1ldGVyXHJcbiAqIEBzaW5jZSAzLjEyLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2x5Z29ufSBwb2x5Z29uIC0gVGhlIFBvbHlnb24gdG8gZ2V0IHRoZSBwZXJpbWV0ZXIgb2YuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHBlcmltZXRlciBvZiB0aGUgUG9seWdvbi5cclxuICovXHJcbnZhciBQZXJpbWV0ZXIgPSBmdW5jdGlvbiAocG9seWdvbilcclxue1xyXG4gICAgdmFyIHBvaW50cyA9IHBvbHlnb24ucG9pbnRzO1xyXG4gICAgdmFyIHBlcmltZXRlciA9IDA7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHBvaW50QSA9IHBvaW50c1tpXTtcclxuICAgICAgICB2YXIgcG9pbnRCID0gcG9pbnRzWyhpICsgMSkgJSBwb2ludHMubGVuZ3RoXTtcclxuICAgICAgICB2YXIgbGluZSA9IG5ldyBMaW5lKFxyXG4gICAgICAgICAgICBwb2ludEEueCxcclxuICAgICAgICAgICAgcG9pbnRBLnksXHJcbiAgICAgICAgICAgIHBvaW50Qi54LFxyXG4gICAgICAgICAgICBwb2ludEIueVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHBlcmltZXRlciArPSBMZW5ndGgobGluZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBlcmltZXRlcjtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGVyaW1ldGVyO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/polygon/Perimeter.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/polygon/Polygon.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/geom/polygon/Polygon.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/polygon/Contains.js\");\r\nvar GetPoints = __webpack_require__(/*! ./GetPoints */ \"./node_modules/phaser/src/geom/polygon/GetPoints.js\");\r\nvar GEOM_CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/geom/const.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Polygon object\r\n *\r\n\r\n * The polygon is a closed shape consists of a series of connected straight lines defined by list of ordered points.\r\n * Several formats are supported to define the list of points, check the setTo method for details. \r\n * This is a geometry object allowing you to define and inspect the shape.\r\n * It is not a Game Object, in that you cannot add it to the display list, and it has no texture.\r\n * To render a Polygon you should look at the capabilities of the Graphics class.\r\n *\r\n * @class Polygon\r\n * @memberof Phaser.Geom\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Point[]} [points] - List of points defining the perimeter of this Polygon. Several formats are supported: \r\n * - A string containing paired x y values separated by a single space: `'40 0 40 20 100 20 100 80 40 80 40 100 0 50'`\r\n * - An array of Point objects: `[new Phaser.Point(x1, y1), ...]`\r\n * - An array of objects with public x y properties: `[obj1, obj2, ...]`\r\n * - An array of paired numbers that represent point coordinates: `[x1,y1, x2,y2, ...]`\r\n * - An array of arrays with two elements representing x/y coordinates: `[[x1, y1], [x2, y2], ...]`\r\n */\r\nvar Polygon = new Class({\r\n\r\n initialize:\r\n\r\n function Polygon (points)\r\n {\r\n /**\r\n * The geometry constant type of this object: `GEOM_CONST.POLYGON`.\r\n * Used for fast type comparisons.\r\n *\r\n * @name Phaser.Geom.Polygon#type\r\n * @type {integer}\r\n * @readonly\r\n * @since 3.19.0\r\n */\r\n this.type = GEOM_CONST.POLYGON;\r\n\r\n /**\r\n * The area of this Polygon.\r\n *\r\n * @name Phaser.Geom.Polygon#area\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.area = 0;\r\n\r\n /**\r\n * An array of number pair objects that make up this polygon. I.e. [ {x,y}, {x,y}, {x,y} ]\r\n *\r\n * @name Phaser.Geom.Polygon#points\r\n * @type {Phaser.Geom.Point[]}\r\n * @since 3.0.0\r\n */\r\n this.points = [];\r\n\r\n if (points)\r\n {\r\n this.setTo(points);\r\n }\r\n },\r\n\r\n /**\r\n * Check to see if the Polygon contains the given x / y coordinates.\r\n *\r\n * @method Phaser.Geom.Polygon#contains\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x coordinate to check within the polygon.\r\n * @param {number} y - The y coordinate to check within the polygon.\r\n *\r\n * @return {boolean} `true` if the coordinates are within the polygon, otherwise `false`.\r\n */\r\n contains: function (x, y)\r\n {\r\n return Contains(this, x, y);\r\n },\r\n\r\n /**\r\n * Sets this Polygon to the given points.\r\n *\r\n * The points can be set from a variety of formats:\r\n *\r\n * - A string containing paired values separated by a single space: `'40 0 40 20 100 20 100 80 40 80 40 100 0 50'`\r\n * - An array of Point objects: `[new Phaser.Point(x1, y1), ...]`\r\n * - An array of objects with public x/y properties: `[obj1, obj2, ...]`\r\n * - An array of paired numbers that represent point coordinates: `[x1,y1, x2,y2, ...]`\r\n * - An array of arrays with two elements representing x/y coordinates: `[[x1, y1], [x2, y2], ...]`\r\n *\r\n * `setTo` may also be called without any arguments to remove all points.\r\n *\r\n * @method Phaser.Geom.Polygon#setTo\r\n * @since 3.0.0\r\n *\r\n * @param {array} points - Points defining the perimeter of this polygon. Please check function description above for the different supported formats.\r\n *\r\n * @return {Phaser.Geom.Polygon} This Polygon object.\r\n */\r\n setTo: function (points)\r\n {\r\n this.area = 0;\r\n this.points = [];\r\n\r\n if (typeof points === 'string')\r\n {\r\n points = points.split(' ');\r\n }\r\n\r\n if (!Array.isArray(points))\r\n {\r\n return this;\r\n }\r\n\r\n var p;\r\n var y0 = Number.MAX_VALUE;\r\n\r\n // The points argument is an array, so iterate through it\r\n for (var i = 0; i < points.length; i++)\r\n {\r\n p = { x: 0, y: 0 };\r\n\r\n if (typeof points[i] === 'number' || typeof points[i] === 'string')\r\n {\r\n p.x = parseFloat(points[i]);\r\n p.y = parseFloat(points[i + 1]);\r\n i++;\r\n }\r\n else if (Array.isArray(points[i]))\r\n {\r\n // An array of arrays?\r\n p.x = points[i][0];\r\n p.y = points[i][1];\r\n }\r\n else\r\n {\r\n p.x = points[i].x;\r\n p.y = points[i].y;\r\n }\r\n\r\n this.points.push(p);\r\n\r\n // Lowest boundary\r\n if (p.y < y0)\r\n {\r\n y0 = p.y;\r\n }\r\n }\r\n\r\n this.calculateArea(y0);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Calculates the area of the Polygon. This is available in the property Polygon.area\r\n *\r\n * @method Phaser.Geom.Polygon#calculateArea\r\n * @since 3.0.0\r\n *\r\n * @return {number} The area of the polygon.\r\n */\r\n calculateArea: function ()\r\n {\r\n if (this.points.length < 3)\r\n {\r\n this.area = 0;\r\n\r\n return this.area;\r\n }\r\n\r\n var sum = 0;\r\n var p1;\r\n var p2;\r\n\r\n for (var i = 0; i < this.points.length - 1; i++)\r\n {\r\n p1 = this.points[i];\r\n p2 = this.points[i + 1];\r\n\r\n sum += (p2.x - p1.x) * (p1.y + p2.y);\r\n }\r\n\r\n p1 = this.points[0];\r\n p2 = this.points[this.points.length - 1];\r\n\r\n sum += (p1.x - p2.x) * (p2.y + p1.y);\r\n\r\n this.area = -sum * 0.5;\r\n\r\n return this.area;\r\n },\r\n\r\n /**\r\n * Returns an array of Point objects containing the coordinates of the points around the perimeter of the Polygon,\r\n * based on the given quantity or stepRate values.\r\n *\r\n * @method Phaser.Geom.Polygon#getPoints\r\n * @since 3.12.0\r\n *\r\n * @param {integer} quantity - The amount of points to return. If a falsey value the quantity will be derived from the `stepRate` instead.\r\n * @param {number} [stepRate] - Sets the quantity by getting the perimeter of the Polygon and dividing it by the stepRate.\r\n * @param {array} [output] - An array to insert the points in to. If not provided a new array will be created.\r\n *\r\n * @return {Phaser.Geom.Point[]} An array of Point objects pertaining to the points around the perimeter of the Polygon.\r\n */\r\n getPoints: function (quantity, step, output)\r\n {\r\n return GetPoints(this, quantity, step, output);\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Polygon;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vUG9seWdvbi5qcz8wMDgyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxzRUFBWTtBQUNuQyxnQkFBZ0IsbUJBQU8sQ0FBQyx3RUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyx5REFBVTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0JBQW9CO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOEVBQThFLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSTtBQUNoRztBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQjtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsNEJBQTRCO0FBQ25EO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QixlQUFlLE1BQU07QUFDckI7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcG9seWdvbi9Qb2x5Z29uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ29udGFpbnMgPSByZXF1aXJlKCcuL0NvbnRhaW5zJyk7XHJcbnZhciBHZXRQb2ludHMgPSByZXF1aXJlKCcuL0dldFBvaW50cycpO1xyXG52YXIgR0VPTV9DT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIFBvbHlnb24gb2JqZWN0XHJcbiAqXHJcblxyXG4gKiBUaGUgcG9seWdvbiBpcyBhIGNsb3NlZCBzaGFwZSBjb25zaXN0cyBvZiBhIHNlcmllcyBvZiBjb25uZWN0ZWQgc3RyYWlnaHQgbGluZXMgZGVmaW5lZCBieSBsaXN0IG9mIG9yZGVyZWQgcG9pbnRzLlxyXG4gKiBTZXZlcmFsIGZvcm1hdHMgYXJlIHN1cHBvcnRlZCB0byBkZWZpbmUgdGhlIGxpc3Qgb2YgcG9pbnRzLCBjaGVjayB0aGUgc2V0VG8gbWV0aG9kIGZvciBkZXRhaWxzLiBcclxuICogVGhpcyBpcyBhIGdlb21ldHJ5IG9iamVjdCBhbGxvd2luZyB5b3UgdG8gZGVmaW5lIGFuZCBpbnNwZWN0IHRoZSBzaGFwZS5cclxuICogSXQgaXMgbm90IGEgR2FtZSBPYmplY3QsIGluIHRoYXQgeW91IGNhbm5vdCBhZGQgaXQgdG8gdGhlIGRpc3BsYXkgbGlzdCwgYW5kIGl0IGhhcyBubyB0ZXh0dXJlLlxyXG4gKiBUbyByZW5kZXIgYSBQb2x5Z29uIHlvdSBzaG91bGQgbG9vayBhdCB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBHcmFwaGljcyBjbGFzcy5cclxuICpcclxuICogQGNsYXNzIFBvbHlnb25cclxuICogQG1lbWJlcm9mIFBoYXNlci5HZW9tXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2ludFtdfSBbcG9pbnRzXSAtIExpc3Qgb2YgcG9pbnRzIGRlZmluaW5nIHRoZSBwZXJpbWV0ZXIgb2YgdGhpcyBQb2x5Z29uLiBTZXZlcmFsIGZvcm1hdHMgYXJlIHN1cHBvcnRlZDogXHJcbiAqIC0gQSBzdHJpbmcgY29udGFpbmluZyBwYWlyZWQgeCB5IHZhbHVlcyBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgc3BhY2U6IGAnNDAgMCA0MCAyMCAxMDAgMjAgMTAwIDgwIDQwIDgwIDQwIDEwMCAwIDUwJ2BcclxuICogLSBBbiBhcnJheSBvZiBQb2ludCBvYmplY3RzOiBgW25ldyBQaGFzZXIuUG9pbnQoeDEsIHkxKSwgLi4uXWBcclxuICogLSBBbiBhcnJheSBvZiBvYmplY3RzIHdpdGggcHVibGljIHggeSBwcm9wZXJ0aWVzOiBgW29iajEsIG9iajIsIC4uLl1gXHJcbiAqIC0gQW4gYXJyYXkgb2YgcGFpcmVkIG51bWJlcnMgdGhhdCByZXByZXNlbnQgcG9pbnQgY29vcmRpbmF0ZXM6IGBbeDEseTEsIHgyLHkyLCAuLi5dYFxyXG4gKiAtIEFuIGFycmF5IG9mIGFycmF5cyB3aXRoIHR3byBlbGVtZW50cyByZXByZXNlbnRpbmcgeC95IGNvb3JkaW5hdGVzOiBgW1t4MSwgeTFdLCBbeDIsIHkyXSwgLi4uXWBcclxuICovXHJcbnZhciBQb2x5Z29uID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFBvbHlnb24gKHBvaW50cylcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZ2VvbWV0cnkgY29uc3RhbnQgdHlwZSBvZiB0aGlzIG9iamVjdDogYEdFT01fQ09OU1QuUE9MWUdPTmAuXHJcbiAgICAgICAgICogVXNlZCBmb3IgZmFzdCB0eXBlIGNvbXBhcmlzb25zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdlb20uUG9seWdvbiN0eXBlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTkuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudHlwZSA9IEdFT01fQ09OU1QuUE9MWUdPTjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGFyZWEgb2YgdGhpcyBQb2x5Z29uLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdlb20uUG9seWdvbiNhcmVhXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hcmVhID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gYXJyYXkgb2YgbnVtYmVyIHBhaXIgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhpcyBwb2x5Z29uLiBJLmUuIFsge3gseX0sIHt4LHl9LCB7eCx5fSBdXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5Qb2x5Z29uI3BvaW50c1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2VvbS5Qb2ludFtdfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucG9pbnRzID0gW107XHJcblxyXG4gICAgICAgIGlmIChwb2ludHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldFRvKHBvaW50cyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgUG9seWdvbiBjb250YWlucyB0aGUgZ2l2ZW4geCAvIHkgY29vcmRpbmF0ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5Qb2x5Z29uI2NvbnRhaW5zXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gY2hlY2sgd2l0aGluIHRoZSBwb2x5Z29uLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIHRvIGNoZWNrIHdpdGhpbiB0aGUgcG9seWdvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhlIHBvbHlnb24sIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBjb250YWluczogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIENvbnRhaW5zKHRoaXMsIHgsIHkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhpcyBQb2x5Z29uIHRvIHRoZSBnaXZlbiBwb2ludHMuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHBvaW50cyBjYW4gYmUgc2V0IGZyb20gYSB2YXJpZXR5IG9mIGZvcm1hdHM6XHJcbiAgICAgKlxyXG4gICAgICogLSBBIHN0cmluZyBjb250YWluaW5nIHBhaXJlZCB2YWx1ZXMgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIHNwYWNlOiBgJzQwIDAgNDAgMjAgMTAwIDIwIDEwMCA4MCA0MCA4MCA0MCAxMDAgMCA1MCdgXHJcbiAgICAgKiAtIEFuIGFycmF5IG9mIFBvaW50IG9iamVjdHM6IGBbbmV3IFBoYXNlci5Qb2ludCh4MSwgeTEpLCAuLi5dYFxyXG4gICAgICogLSBBbiBhcnJheSBvZiBvYmplY3RzIHdpdGggcHVibGljIHgveSBwcm9wZXJ0aWVzOiBgW29iajEsIG9iajIsIC4uLl1gXHJcbiAgICAgKiAtIEFuIGFycmF5IG9mIHBhaXJlZCBudW1iZXJzIHRoYXQgcmVwcmVzZW50IHBvaW50IGNvb3JkaW5hdGVzOiBgW3gxLHkxLCB4Mix5MiwgLi4uXWBcclxuICAgICAqIC0gQW4gYXJyYXkgb2YgYXJyYXlzIHdpdGggdHdvIGVsZW1lbnRzIHJlcHJlc2VudGluZyB4L3kgY29vcmRpbmF0ZXM6IGBbW3gxLCB5MV0sIFt4MiwgeTJdLCAuLi5dYFxyXG4gICAgICpcclxuICAgICAqIGBzZXRUb2AgbWF5IGFsc28gYmUgY2FsbGVkIHdpdGhvdXQgYW55IGFyZ3VtZW50cyB0byByZW1vdmUgYWxsIHBvaW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLlBvbHlnb24jc2V0VG9cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YXJyYXl9IHBvaW50cyAtIFBvaW50cyBkZWZpbmluZyB0aGUgcGVyaW1ldGVyIG9mIHRoaXMgcG9seWdvbi4gUGxlYXNlIGNoZWNrIGZ1bmN0aW9uIGRlc2NyaXB0aW9uIGFib3ZlIGZvciB0aGUgZGlmZmVyZW50IHN1cHBvcnRlZCBmb3JtYXRzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlBvbHlnb259IFRoaXMgUG9seWdvbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFRvOiBmdW5jdGlvbiAocG9pbnRzKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYXJlYSA9IDA7XHJcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBwb2ludHMgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcG9pbnRzID0gcG9pbnRzLnNwbGl0KCcgJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHA7XHJcbiAgICAgICAgdmFyIHkwID0gTnVtYmVyLk1BWF9WQUxVRTtcclxuXHJcbiAgICAgICAgLy8gIFRoZSBwb2ludHMgYXJndW1lbnQgaXMgYW4gYXJyYXksIHNvIGl0ZXJhdGUgdGhyb3VnaCBpdFxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcCA9IHsgeDogMCwgeTogMCB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwb2ludHNbaV0gPT09ICdudW1iZXInIHx8IHR5cGVvZiBwb2ludHNbaV0gPT09ICdzdHJpbmcnKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwLnggPSBwYXJzZUZsb2F0KHBvaW50c1tpXSk7XHJcbiAgICAgICAgICAgICAgICBwLnkgPSBwYXJzZUZsb2F0KHBvaW50c1tpICsgMV0pO1xyXG4gICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocG9pbnRzW2ldKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIEFuIGFycmF5IG9mIGFycmF5cz9cclxuICAgICAgICAgICAgICAgIHAueCA9IHBvaW50c1tpXVswXTtcclxuICAgICAgICAgICAgICAgIHAueSA9IHBvaW50c1tpXVsxXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHAueCA9IHBvaW50c1tpXS54O1xyXG4gICAgICAgICAgICAgICAgcC55ID0gcG9pbnRzW2ldLnk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRzLnB1c2gocCk7XHJcblxyXG4gICAgICAgICAgICAvLyAgTG93ZXN0IGJvdW5kYXJ5XHJcbiAgICAgICAgICAgIGlmIChwLnkgPCB5MClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgeTAgPSBwLnk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlQXJlYSh5MCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgdGhlIGFyZWEgb2YgdGhlIFBvbHlnb24uIFRoaXMgaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9wZXJ0eSBQb2x5Z29uLmFyZWFcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLlBvbHlnb24jY2FsY3VsYXRlQXJlYVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgYXJlYSBvZiB0aGUgcG9seWdvbi5cclxuICAgICAqL1xyXG4gICAgY2FsY3VsYXRlQXJlYTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5wb2ludHMubGVuZ3RoIDwgMylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJlYSA9IDA7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcmVhO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHN1bSA9IDA7XHJcbiAgICAgICAgdmFyIHAxO1xyXG4gICAgICAgIHZhciBwMjtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBvaW50cy5sZW5ndGggLSAxOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwMSA9IHRoaXMucG9pbnRzW2ldO1xyXG4gICAgICAgICAgICBwMiA9IHRoaXMucG9pbnRzW2kgKyAxXTtcclxuXHJcbiAgICAgICAgICAgIHN1bSArPSAocDIueCAtIHAxLngpICogKHAxLnkgKyBwMi55KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHAxID0gdGhpcy5wb2ludHNbMF07XHJcbiAgICAgICAgcDIgPSB0aGlzLnBvaW50c1t0aGlzLnBvaW50cy5sZW5ndGggLSAxXTtcclxuXHJcbiAgICAgICAgc3VtICs9IChwMS54IC0gcDIueCkgKiAocDIueSArIHAxLnkpO1xyXG5cclxuICAgICAgICB0aGlzLmFyZWEgPSAtc3VtICogMC41O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5hcmVhO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgUG9pbnQgb2JqZWN0cyBjb250YWluaW5nIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnRzIGFyb3VuZCB0aGUgcGVyaW1ldGVyIG9mIHRoZSBQb2x5Z29uLFxyXG4gICAgICogYmFzZWQgb24gdGhlIGdpdmVuIHF1YW50aXR5IG9yIHN0ZXBSYXRlIHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLlBvbHlnb24jZ2V0UG9pbnRzXHJcbiAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBxdWFudGl0eSAtIFRoZSBhbW91bnQgb2YgcG9pbnRzIHRvIHJldHVybi4gSWYgYSBmYWxzZXkgdmFsdWUgdGhlIHF1YW50aXR5IHdpbGwgYmUgZGVyaXZlZCBmcm9tIHRoZSBgc3RlcFJhdGVgIGluc3RlYWQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0ZXBSYXRlXSAtIFNldHMgdGhlIHF1YW50aXR5IGJ5IGdldHRpbmcgdGhlIHBlcmltZXRlciBvZiB0aGUgUG9seWdvbiBhbmQgZGl2aWRpbmcgaXQgYnkgdGhlIHN0ZXBSYXRlLlxyXG4gICAgICogQHBhcmFtIHthcnJheX0gW291dHB1dF0gLSBBbiBhcnJheSB0byBpbnNlcnQgdGhlIHBvaW50cyBpbiB0by4gSWYgbm90IHByb3ZpZGVkIGEgbmV3IGFycmF5IHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5Qb2ludFtdfSBBbiBhcnJheSBvZiBQb2ludCBvYmplY3RzIHBlcnRhaW5pbmcgdG8gdGhlIHBvaW50cyBhcm91bmQgdGhlIHBlcmltZXRlciBvZiB0aGUgUG9seWdvbi5cclxuICAgICAqL1xyXG4gICAgZ2V0UG9pbnRzOiBmdW5jdGlvbiAocXVhbnRpdHksIHN0ZXAsIG91dHB1dClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gR2V0UG9pbnRzKHRoaXMsIHF1YW50aXR5LCBzdGVwLCBvdXRwdXQpO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/polygon/Polygon.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/polygon/Reverse.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/geom/polygon/Reverse.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Reverses the order of the points of a Polygon.\r\n *\r\n * @function Phaser.Geom.Polygon.Reverse\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Polygon} O - [polygon,$return]\r\n *\r\n * @param {Phaser.Geom.Polygon} polygon - The Polygon to modify.\r\n *\r\n * @return {Phaser.Geom.Polygon} The modified Polygon.\r\n */\r\nvar Reverse = function (polygon)\r\n{\r\n polygon.points.reverse();\r\n\r\n return polygon;\r\n};\r\n\r\nmodule.exports = Reverse;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vUmV2ZXJzZS5qcz85YzRlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLG9CQUFvQjtBQUNqQztBQUNBLFdBQVcsb0JBQW9CO0FBQy9CO0FBQ0EsWUFBWSxvQkFBb0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcG9seWdvbi9SZXZlcnNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmV2ZXJzZXMgdGhlIG9yZGVyIG9mIHRoZSBwb2ludHMgb2YgYSBQb2x5Z29uLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUG9seWdvbi5SZXZlcnNlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9seWdvbn0gTyAtIFtwb2x5Z29uLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9seWdvbn0gcG9seWdvbiAtIFRoZSBQb2x5Z29uIHRvIG1vZGlmeS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUG9seWdvbn0gVGhlIG1vZGlmaWVkIFBvbHlnb24uXHJcbiAqL1xyXG52YXIgUmV2ZXJzZSA9IGZ1bmN0aW9uIChwb2x5Z29uKVxyXG57XHJcbiAgICBwb2x5Z29uLnBvaW50cy5yZXZlcnNlKCk7XHJcblxyXG4gICAgcmV0dXJuIHBvbHlnb247XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJldmVyc2U7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/polygon/Reverse.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/polygon/Smooth.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/geom/polygon/Smooth.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @author Igor Ognichenko <ognichenko.igor@gmail.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @ignore\r\n */\r\nvar copy = function (out, a)\r\n{\r\n out[0] = a[0];\r\n out[1] = a[1];\r\n \r\n return out;\r\n};\r\n\r\n/**\r\n * Takes a Polygon object and applies Chaikin's smoothing algorithm on its points.\r\n *\r\n * @function Phaser.Geom.Polygon.Smooth\r\n * @since 3.13.0\r\n *\r\n * @generic {Phaser.Geom.Polygon} O - [polygon,$return]\r\n *\r\n * @param {Phaser.Geom.Polygon} polygon - The polygon to be smoothed. The polygon will be modified in-place and returned.\r\n *\r\n * @return {Phaser.Geom.Polygon} The input polygon.\r\n */\r\nvar Smooth = function (polygon)\r\n{\r\n var i;\r\n var points = [];\r\n var data = polygon.points;\r\n\r\n for (i = 0; i < data.length; i++)\r\n {\r\n points.push([ data[i].x, data[i].y ]);\r\n }\r\n\r\n var output = [];\r\n \r\n if (points.length > 0)\r\n {\r\n output.push(copy([ 0, 0 ], points[0]));\r\n }\r\n \r\n for (i = 0; i < points.length - 1; i++)\r\n {\r\n var p0 = points[i];\r\n var p1 = points[i + 1];\r\n var p0x = p0[0];\r\n var p0y = p0[1];\r\n var p1x = p1[0];\r\n var p1y = p1[1];\r\n\r\n output.push([ 0.85 * p0x + 0.15 * p1x, 0.85 * p0y + 0.15 * p1y ]);\r\n output.push([ 0.15 * p0x + 0.85 * p1x, 0.15 * p0y + 0.85 * p1y ]);\r\n }\r\n \r\n if (points.length > 1)\r\n {\r\n output.push(copy([ 0, 0 ], points[points.length - 1]));\r\n }\r\n \r\n return polygon.setTo(output);\r\n};\r\n\r\nmodule.exports = Smooth;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vU21vb3RoLmpzPzkzNTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLG9CQUFvQjtBQUNqQztBQUNBLFdBQVcsb0JBQW9CO0FBQy9CO0FBQ0EsWUFBWSxvQkFBb0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLHVCQUF1QjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcG9seWdvbi9TbW9vdGguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGF1dGhvciAgICAgICBJZ29yIE9nbmljaGVua28gPG9nbmljaGVua28uaWdvckBnbWFpbC5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQGlnbm9yZVxyXG4gKi9cclxudmFyIGNvcHkgPSBmdW5jdGlvbiAob3V0LCBhKVxyXG57XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICBcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVGFrZXMgYSBQb2x5Z29uIG9iamVjdCBhbmQgYXBwbGllcyBDaGFpa2luJ3Mgc21vb3RoaW5nIGFsZ29yaXRobSBvbiBpdHMgcG9pbnRzLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUG9seWdvbi5TbW9vdGhcclxuICogQHNpbmNlIDMuMTMuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9seWdvbn0gTyAtIFtwb2x5Z29uLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9seWdvbn0gcG9seWdvbiAtIFRoZSBwb2x5Z29uIHRvIGJlIHNtb290aGVkLiBUaGUgcG9seWdvbiB3aWxsIGJlIG1vZGlmaWVkIGluLXBsYWNlIGFuZCByZXR1cm5lZC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUG9seWdvbn0gVGhlIGlucHV0IHBvbHlnb24uXHJcbiAqL1xyXG52YXIgU21vb3RoID0gZnVuY3Rpb24gKHBvbHlnb24pXHJcbntcclxuICAgIHZhciBpO1xyXG4gICAgdmFyIHBvaW50cyA9IFtdO1xyXG4gICAgdmFyIGRhdGEgPSBwb2x5Z29uLnBvaW50cztcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICBwb2ludHMucHVzaChbIGRhdGFbaV0ueCwgZGF0YVtpXS55IF0pO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBvdXRwdXQgPSBbXTtcclxuICBcclxuICAgIGlmIChwb2ludHMubGVuZ3RoID4gMClcclxuICAgIHtcclxuICAgICAgICBvdXRwdXQucHVzaChjb3B5KFsgMCwgMCBdLCBwb2ludHNbMF0pKTtcclxuICAgIH1cclxuICBcclxuICAgIGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoIC0gMTsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBwMCA9IHBvaW50c1tpXTtcclxuICAgICAgICB2YXIgcDEgPSBwb2ludHNbaSArIDFdO1xyXG4gICAgICAgIHZhciBwMHggPSBwMFswXTtcclxuICAgICAgICB2YXIgcDB5ID0gcDBbMV07XHJcbiAgICAgICAgdmFyIHAxeCA9IHAxWzBdO1xyXG4gICAgICAgIHZhciBwMXkgPSBwMVsxXTtcclxuXHJcbiAgICAgICAgb3V0cHV0LnB1c2goWyAwLjg1ICogcDB4ICsgMC4xNSAqIHAxeCwgMC44NSAqIHAweSArIDAuMTUgKiBwMXkgXSk7XHJcbiAgICAgICAgb3V0cHV0LnB1c2goWyAwLjE1ICogcDB4ICsgMC44NSAqIHAxeCwgMC4xNSAqIHAweSArIDAuODUgKiBwMXkgXSk7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBpZiAocG9pbnRzLmxlbmd0aCA+IDEpXHJcbiAgICB7XHJcbiAgICAgICAgb3V0cHV0LnB1c2goY29weShbIDAsIDAgXSwgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSkpO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgcmV0dXJuIHBvbHlnb24uc2V0VG8ob3V0cHV0KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU21vb3RoO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/polygon/Smooth.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/polygon/index.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/geom/polygon/index.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Polygon = __webpack_require__(/*! ./Polygon */ \"./node_modules/phaser/src/geom/polygon/Polygon.js\");\r\n\r\nPolygon.Clone = __webpack_require__(/*! ./Clone */ \"./node_modules/phaser/src/geom/polygon/Clone.js\");\r\nPolygon.Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/polygon/Contains.js\");\r\nPolygon.ContainsPoint = __webpack_require__(/*! ./ContainsPoint */ \"./node_modules/phaser/src/geom/polygon/ContainsPoint.js\");\r\nPolygon.GetAABB = __webpack_require__(/*! ./GetAABB */ \"./node_modules/phaser/src/geom/polygon/GetAABB.js\");\r\nPolygon.GetNumberArray = __webpack_require__(/*! ./GetNumberArray */ \"./node_modules/phaser/src/geom/polygon/GetNumberArray.js\");\r\nPolygon.GetPoints = __webpack_require__(/*! ./GetPoints */ \"./node_modules/phaser/src/geom/polygon/GetPoints.js\");\r\nPolygon.Perimeter = __webpack_require__(/*! ./Perimeter */ \"./node_modules/phaser/src/geom/polygon/Perimeter.js\");\r\nPolygon.Reverse = __webpack_require__(/*! ./Reverse */ \"./node_modules/phaser/src/geom/polygon/Reverse.js\");\r\nPolygon.Smooth = __webpack_require__(/*! ./Smooth */ \"./node_modules/phaser/src/geom/polygon/Smooth.js\");\r\n\r\nmodule.exports = Polygon;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3BvbHlnb24vaW5kZXguanM/MzE5OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLG9FQUFXOztBQUVqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxnRUFBUztBQUNqQyxtQkFBbUIsbUJBQU8sQ0FBQyxzRUFBWTtBQUN2Qyx3QkFBd0IsbUJBQU8sQ0FBQyxnRkFBaUI7QUFDakQsa0JBQWtCLG1CQUFPLENBQUMsb0VBQVc7QUFDckMseUJBQXlCLG1CQUFPLENBQUMsa0ZBQWtCO0FBQ25ELG9CQUFvQixtQkFBTyxDQUFDLHdFQUFhO0FBQ3pDLG9CQUFvQixtQkFBTyxDQUFDLHdFQUFhO0FBQ3pDLGtCQUFrQixtQkFBTyxDQUFDLG9FQUFXO0FBQ3JDLGlCQUFpQixtQkFBTyxDQUFDLGtFQUFVOztBQUVuQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcG9seWdvbi9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBvbHlnb24gPSByZXF1aXJlKCcuL1BvbHlnb24nKTtcclxuXHJcblBvbHlnb24uQ2xvbmUgPSByZXF1aXJlKCcuL0Nsb25lJyk7XHJcblBvbHlnb24uQ29udGFpbnMgPSByZXF1aXJlKCcuL0NvbnRhaW5zJyk7XHJcblBvbHlnb24uQ29udGFpbnNQb2ludCA9IHJlcXVpcmUoJy4vQ29udGFpbnNQb2ludCcpO1xyXG5Qb2x5Z29uLkdldEFBQkIgPSByZXF1aXJlKCcuL0dldEFBQkInKTtcclxuUG9seWdvbi5HZXROdW1iZXJBcnJheSA9IHJlcXVpcmUoJy4vR2V0TnVtYmVyQXJyYXknKTtcclxuUG9seWdvbi5HZXRQb2ludHMgPSByZXF1aXJlKCcuL0dldFBvaW50cycpO1xyXG5Qb2x5Z29uLlBlcmltZXRlciA9IHJlcXVpcmUoJy4vUGVyaW1ldGVyJyk7XHJcblBvbHlnb24uUmV2ZXJzZSA9IHJlcXVpcmUoJy4vUmV2ZXJzZScpO1xyXG5Qb2x5Z29uLlNtb290aCA9IHJlcXVpcmUoJy4vU21vb3RoJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/polygon/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/Area.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/Area.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculates the area of the given Rectangle object.\r\n *\r\n * @function Phaser.Geom.Rectangle.Area\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The rectangle to calculate the area of.\r\n *\r\n * @return {number} The area of the Rectangle object.\r\n */\r\nvar Area = function (rect)\r\n{\r\n return rect.width * rect.height;\r\n};\r\n\r\nmodule.exports = Area;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9BcmVhLmpzPzc5ZTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9BcmVhLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgYXJlYSBvZiB0aGUgZ2l2ZW4gUmVjdGFuZ2xlIG9iamVjdC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5BcmVhXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdCAtIFRoZSByZWN0YW5nbGUgdG8gY2FsY3VsYXRlIHRoZSBhcmVhIG9mLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBhcmVhIG9mIHRoZSBSZWN0YW5nbGUgb2JqZWN0LlxyXG4gKi9cclxudmFyIEFyZWEgPSBmdW5jdGlvbiAocmVjdClcclxue1xyXG4gICAgcmV0dXJuIHJlY3Qud2lkdGggKiByZWN0LmhlaWdodDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQXJlYTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Area.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/Ceil.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/Ceil.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Rounds a Rectangle's position up to the smallest integer greater than or equal to each current coordinate.\r\n *\r\n * @function Phaser.Geom.Rectangle.Ceil\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [rect,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to adjust.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The adjusted Rectangle.\r\n */\r\nvar Ceil = function (rect)\r\n{\r\n rect.x = Math.ceil(rect.x);\r\n rect.y = Math.ceil(rect.y);\r\n\r\n return rect;\r\n};\r\n\r\nmodule.exports = Ceil;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9DZWlsLmpzPzc0YzQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsc0JBQXNCO0FBQ25DO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakM7QUFDQSxZQUFZLHNCQUFzQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9DZWlsLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUm91bmRzIGEgUmVjdGFuZ2xlJ3MgcG9zaXRpb24gdXAgdG8gdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGVhY2ggY3VycmVudCBjb29yZGluYXRlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUmVjdGFuZ2xlLkNlaWxcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IE8gLSBbcmVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdCAtIFRoZSBSZWN0YW5nbGUgdG8gYWRqdXN0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IFRoZSBhZGp1c3RlZCBSZWN0YW5nbGUuXHJcbiAqL1xyXG52YXIgQ2VpbCA9IGZ1bmN0aW9uIChyZWN0KVxyXG57XHJcbiAgICByZWN0LnggPSBNYXRoLmNlaWwocmVjdC54KTtcclxuICAgIHJlY3QueSA9IE1hdGguY2VpbChyZWN0LnkpO1xyXG5cclxuICAgIHJldHVybiByZWN0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDZWlsO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Ceil.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/CeilAll.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/CeilAll.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Rounds a Rectangle's position and size up to the smallest integer greater than or equal to each respective value.\r\n *\r\n * @function Phaser.Geom.Rectangle.CeilAll\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [rect,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to modify.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The modified Rectangle.\r\n */\r\nvar CeilAll = function (rect)\r\n{\r\n rect.x = Math.ceil(rect.x);\r\n rect.y = Math.ceil(rect.y);\r\n rect.width = Math.ceil(rect.width);\r\n rect.height = Math.ceil(rect.height);\r\n\r\n return rect;\r\n};\r\n\r\nmodule.exports = CeilAll;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9DZWlsQWxsLmpzPzU1Y2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsc0JBQXNCO0FBQ25DO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakM7QUFDQSxZQUFZLHNCQUFzQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvQ2VpbEFsbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJvdW5kcyBhIFJlY3RhbmdsZSdzIHBvc2l0aW9uIGFuZCBzaXplIHVwIHRvIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBlYWNoIHJlc3BlY3RpdmUgdmFsdWUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuQ2VpbEFsbFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gTyAtIFtyZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0IC0gVGhlIFJlY3RhbmdsZSB0byBtb2RpZnkuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gVGhlIG1vZGlmaWVkIFJlY3RhbmdsZS5cclxuICovXHJcbnZhciBDZWlsQWxsID0gZnVuY3Rpb24gKHJlY3QpXHJcbntcclxuICAgIHJlY3QueCA9IE1hdGguY2VpbChyZWN0LngpO1xyXG4gICAgcmVjdC55ID0gTWF0aC5jZWlsKHJlY3QueSk7XHJcbiAgICByZWN0LndpZHRoID0gTWF0aC5jZWlsKHJlY3Qud2lkdGgpO1xyXG4gICAgcmVjdC5oZWlnaHQgPSBNYXRoLmNlaWwocmVjdC5oZWlnaHQpO1xyXG5cclxuICAgIHJldHVybiByZWN0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDZWlsQWxsO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/CeilAll.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/CenterOn.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/CenterOn.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n// Centers this Rectangle so that the center coordinates match the given x and y values.\r\n\r\n/**\r\n * Moves the top-left corner of a Rectangle so that its center is at the given coordinates.\r\n *\r\n * @function Phaser.Geom.Rectangle.CenterOn\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [rect,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to be centered.\r\n * @param {number} x - The X coordinate of the Rectangle's center.\r\n * @param {number} y - The Y coordinate of the Rectangle's center.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The centered rectangle.\r\n */\r\nvar CenterOn = function (rect, x, y)\r\n{\r\n rect.x = x - (rect.width / 2);\r\n rect.y = y - (rect.height / 2);\r\n\r\n return rect;\r\n};\r\n\r\nmodule.exports = CenterOn;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9DZW50ZXJPbi5qcz82Yjk5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHNCQUFzQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9DZW50ZXJPbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLy8gQ2VudGVycyB0aGlzIFJlY3RhbmdsZSBzbyB0aGF0IHRoZSBjZW50ZXIgY29vcmRpbmF0ZXMgbWF0Y2ggdGhlIGdpdmVuIHggYW5kIHkgdmFsdWVzLlxyXG5cclxuLyoqXHJcbiAqIE1vdmVzIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgYSBSZWN0YW5nbGUgc28gdGhhdCBpdHMgY2VudGVyIGlzIGF0IHRoZSBnaXZlbiBjb29yZGluYXRlcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5DZW50ZXJPblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gTyAtIFtyZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0IC0gVGhlIFJlY3RhbmdsZSB0byBiZSBjZW50ZXJlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBSZWN0YW5nbGUncyBjZW50ZXIuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlJ3MgY2VudGVyLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IFRoZSBjZW50ZXJlZCByZWN0YW5nbGUuXHJcbiAqL1xyXG52YXIgQ2VudGVyT24gPSBmdW5jdGlvbiAocmVjdCwgeCwgeSlcclxue1xyXG4gICAgcmVjdC54ID0geCAtIChyZWN0LndpZHRoIC8gMik7XHJcbiAgICByZWN0LnkgPSB5IC0gKHJlY3QuaGVpZ2h0IC8gMik7XHJcblxyXG4gICAgcmV0dXJuIHJlY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENlbnRlck9uO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/CenterOn.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/Clone.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/Clone.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Rectangle = __webpack_require__(/*! ./Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\n\r\n/**\r\n * Creates a new Rectangle which is identical to the given one.\r\n *\r\n * @function Phaser.Geom.Rectangle.Clone\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} source - The Rectangle to clone.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The newly created Rectangle, which is separate from the given one.\r\n */\r\nvar Clone = function (source)\r\n{\r\n return new Rectangle(source.x, source.y, source.width, source.height);\r\n};\r\n\r\nmodule.exports = Clone;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9DbG9uZS5qcz81MjZlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQywwRUFBYTs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakM7QUFDQSxZQUFZLHNCQUFzQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvQ2xvbmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZScpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgUmVjdGFuZ2xlIHdoaWNoIGlzIGlkZW50aWNhbCB0byB0aGUgZ2l2ZW4gb25lLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUmVjdGFuZ2xlLkNsb25lXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gc291cmNlIC0gVGhlIFJlY3RhbmdsZSB0byBjbG9uZS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBUaGUgbmV3bHkgY3JlYXRlZCBSZWN0YW5nbGUsIHdoaWNoIGlzIHNlcGFyYXRlIGZyb20gdGhlIGdpdmVuIG9uZS5cclxuICovXHJcbnZhciBDbG9uZSA9IGZ1bmN0aW9uIChzb3VyY2UpXHJcbntcclxuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHNvdXJjZS54LCBzb3VyY2UueSwgc291cmNlLndpZHRoLCBzb3VyY2UuaGVpZ2h0KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2xvbmU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Clone.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/Contains.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/Contains.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Checks if a given point is inside a Rectangle's bounds.\r\n *\r\n * @function Phaser.Geom.Rectangle.Contains\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to check.\r\n * @param {number} x - The X coordinate of the point to check.\r\n * @param {number} y - The Y coordinate of the point to check.\r\n *\r\n * @return {boolean} `true` if the point is within the Rectangle's bounds, otherwise `false`.\r\n */\r\nvar Contains = function (rect, x, y)\r\n{\r\n if (rect.width <= 0 || rect.height <= 0)\r\n {\r\n return false;\r\n }\r\n\r\n return (rect.x <= x && rect.x + rect.width >= x && rect.y <= y && rect.y + rect.height >= y);\r\n};\r\n\r\nmodule.exports = Contains;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9Db250YWlucy5qcz9hOTU2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9Db250YWlucy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBpZiBhIGdpdmVuIHBvaW50IGlzIGluc2lkZSBhIFJlY3RhbmdsZSdzIGJvdW5kcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5Db250YWluc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3QgLSBUaGUgUmVjdGFuZ2xlIHRvIGNoZWNrLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIGNoZWNrLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIGNoZWNrLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHBvaW50IGlzIHdpdGhpbiB0aGUgUmVjdGFuZ2xlJ3MgYm91bmRzLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICovXHJcbnZhciBDb250YWlucyA9IGZ1bmN0aW9uIChyZWN0LCB4LCB5KVxyXG57XHJcbiAgICBpZiAocmVjdC53aWR0aCA8PSAwIHx8IHJlY3QuaGVpZ2h0IDw9IDApXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAocmVjdC54IDw9IHggJiYgcmVjdC54ICsgcmVjdC53aWR0aCA+PSB4ICYmIHJlY3QueSA8PSB5ICYmIHJlY3QueSArIHJlY3QuaGVpZ2h0ID49IHkpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb250YWlucztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Contains.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/ContainsPoint.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/ContainsPoint.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/rectangle/Contains.js\");\r\n\r\n/**\r\n * Determines whether the specified point is contained within the rectangular region defined by this Rectangle object.\r\n *\r\n * @function Phaser.Geom.Rectangle.ContainsPoint\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle object.\r\n * @param {Phaser.Geom.Point} point - The point object to be checked. Can be a Phaser Point object or any object with x and y values.\r\n *\r\n * @return {boolean} A value of true if the Rectangle object contains the specified point, otherwise false.\r\n */\r\nvar ContainsPoint = function (rect, point)\r\n{\r\n return Contains(rect, point.x, point.y);\r\n};\r\n\r\nmodule.exports = ContainsPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9Db250YWluc1BvaW50LmpzPzVjZTQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyx3RUFBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxrQkFBa0I7QUFDN0I7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL0NvbnRhaW5zUG9pbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDb250YWlucyA9IHJlcXVpcmUoJy4vQ29udGFpbnMnKTtcclxuXHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBwb2ludCBpcyBjb250YWluZWQgd2l0aGluIHRoZSByZWN0YW5ndWxhciByZWdpb24gZGVmaW5lZCBieSB0aGlzIFJlY3RhbmdsZSBvYmplY3QuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuQ29udGFpbnNQb2ludFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3QgLSBUaGUgUmVjdGFuZ2xlIG9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2ludH0gcG9pbnQgLSBUaGUgcG9pbnQgb2JqZWN0IHRvIGJlIGNoZWNrZWQuIENhbiBiZSBhIFBoYXNlciBQb2ludCBvYmplY3Qgb3IgYW55IG9iamVjdCB3aXRoIHggYW5kIHkgdmFsdWVzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBBIHZhbHVlIG9mIHRydWUgaWYgdGhlIFJlY3RhbmdsZSBvYmplY3QgY29udGFpbnMgdGhlIHNwZWNpZmllZCBwb2ludCwgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gKi9cclxudmFyIENvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiAocmVjdCwgcG9pbnQpXHJcbntcclxuICAgIHJldHVybiBDb250YWlucyhyZWN0LCBwb2ludC54LCBwb2ludC55KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ29udGFpbnNQb2ludDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/ContainsPoint.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/ContainsRect.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/ContainsRect.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Tests if one rectangle fully contains another.\r\n *\r\n * @function Phaser.Geom.Rectangle.ContainsRect\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rectA - The first rectangle.\r\n * @param {Phaser.Geom.Rectangle} rectB - The second rectangle.\r\n *\r\n * @return {boolean} True only if rectA fully contains rectB.\r\n */\r\nvar ContainsRect = function (rectA, rectB)\r\n{\r\n // Volume check (if rectB volume > rectA then rectA cannot contain it)\r\n if ((rectB.width * rectB.height) > (rectA.width * rectA.height))\r\n {\r\n return false;\r\n }\r\n\r\n return (\r\n (rectB.x > rectA.x && rectB.x < rectA.right) &&\r\n (rectB.right > rectA.x && rectB.right < rectA.right) &&\r\n (rectB.y > rectA.y && rectB.y < rectA.bottom) &&\r\n (rectB.bottom > rectA.y && rectB.bottom < rectA.bottom)\r\n );\r\n};\r\n\r\nmodule.exports = ContainsRect;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9Db250YWluc1JlY3QuanM/ODlkMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxzQkFBc0I7QUFDakM7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL0NvbnRhaW5zUmVjdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIG9uZSByZWN0YW5nbGUgZnVsbHkgY29udGFpbnMgYW5vdGhlci5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5Db250YWluc1JlY3RcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0QSAtIFRoZSBmaXJzdCByZWN0YW5nbGUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0QiAtIFRoZSBzZWNvbmQgcmVjdGFuZ2xlLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIG9ubHkgaWYgcmVjdEEgZnVsbHkgY29udGFpbnMgcmVjdEIuXHJcbiAqL1xyXG52YXIgQ29udGFpbnNSZWN0ID0gZnVuY3Rpb24gKHJlY3RBLCByZWN0Qilcclxue1xyXG4gICAgLy8gIFZvbHVtZSBjaGVjayAoaWYgcmVjdEIgdm9sdW1lID4gcmVjdEEgdGhlbiByZWN0QSBjYW5ub3QgY29udGFpbiBpdClcclxuICAgIGlmICgocmVjdEIud2lkdGggKiByZWN0Qi5oZWlnaHQpID4gKHJlY3RBLndpZHRoICogcmVjdEEuaGVpZ2h0KSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgICAocmVjdEIueCA+IHJlY3RBLnggJiYgcmVjdEIueCA8IHJlY3RBLnJpZ2h0KSAmJlxyXG4gICAgICAgIChyZWN0Qi5yaWdodCA+IHJlY3RBLnggJiYgcmVjdEIucmlnaHQgPCByZWN0QS5yaWdodCkgJiZcclxuICAgICAgICAocmVjdEIueSA+IHJlY3RBLnkgJiYgcmVjdEIueSA8IHJlY3RBLmJvdHRvbSkgJiZcclxuICAgICAgICAocmVjdEIuYm90dG9tID4gcmVjdEEueSAmJiByZWN0Qi5ib3R0b20gPCByZWN0QS5ib3R0b20pXHJcbiAgICApO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb250YWluc1JlY3Q7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/ContainsRect.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/CopyFrom.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/CopyFrom.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Copy the values of one Rectangle to a destination Rectangle.\r\n *\r\n * @function Phaser.Geom.Rectangle.CopyFrom\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [dest,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} source - The source Rectangle to copy the values from.\r\n * @param {Phaser.Geom.Rectangle} dest - The destination Rectangle to copy the values to.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The destination Rectangle.\r\n */\r\nvar CopyFrom = function (source, dest)\r\n{\r\n return dest.setTo(source.x, source.y, source.width, source.height);\r\n};\r\n\r\nmodule.exports = CopyFrom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9Db3B5RnJvbS5qcz9hMDhkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcsc0JBQXNCO0FBQ2pDO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL0NvcHlGcm9tLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIG9mIG9uZSBSZWN0YW5nbGUgdG8gYSBkZXN0aW5hdGlvbiBSZWN0YW5nbGUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuQ29weUZyb21cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IE8gLSBbZGVzdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gc291cmNlIC0gVGhlIHNvdXJjZSBSZWN0YW5nbGUgdG8gY29weSB0aGUgdmFsdWVzIGZyb20uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBkZXN0IC0gVGhlIGRlc3RpbmF0aW9uIFJlY3RhbmdsZSB0byBjb3B5IHRoZSB2YWx1ZXMgdG8uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gVGhlIGRlc3RpbmF0aW9uIFJlY3RhbmdsZS5cclxuICovXHJcbnZhciBDb3B5RnJvbSA9IGZ1bmN0aW9uIChzb3VyY2UsIGRlc3QpXHJcbntcclxuICAgIHJldHVybiBkZXN0LnNldFRvKHNvdXJjZS54LCBzb3VyY2UueSwgc291cmNlLndpZHRoLCBzb3VyY2UuaGVpZ2h0KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ29weUZyb207XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/CopyFrom.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/Decompose.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/Decompose.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Create an array of points for each corner of a Rectangle\r\n * If an array is specified, each point object will be added to the end of the array, otherwise a new array will be created.\r\n *\r\n * @function Phaser.Geom.Rectangle.Decompose\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle object to be decomposed.\r\n * @param {array} [out] - If provided, each point will be added to this array.\r\n *\r\n * @return {array} Will return the array you specified or a new array containing the points of the Rectangle.\r\n */\r\nvar Decompose = function (rect, out)\r\n{\r\n if (out === undefined) { out = []; }\r\n\r\n out.push({ x: rect.x, y: rect.y });\r\n out.push({ x: rect.right, y: rect.y });\r\n out.push({ x: rect.right, y: rect.bottom });\r\n out.push({ x: rect.x, y: rect.bottom });\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = Decompose;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9EZWNvbXBvc2UuanM/OWY3ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLE1BQU07QUFDakI7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7O0FBRXRDLGNBQWMsdUJBQXVCO0FBQ3JDLGNBQWMsMkJBQTJCO0FBQ3pDLGNBQWMsZ0NBQWdDO0FBQzlDLGNBQWMsNEJBQTRCOztBQUUxQztBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvRGVjb21wb3NlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ3JlYXRlIGFuIGFycmF5IG9mIHBvaW50cyBmb3IgZWFjaCBjb3JuZXIgb2YgYSBSZWN0YW5nbGVcclxuICogSWYgYW4gYXJyYXkgaXMgc3BlY2lmaWVkLCBlYWNoIHBvaW50IG9iamVjdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIGFycmF5LCBvdGhlcndpc2UgYSBuZXcgYXJyYXkgd2lsbCBiZSBjcmVhdGVkLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUmVjdGFuZ2xlLkRlY29tcG9zZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3QgLSBUaGUgUmVjdGFuZ2xlIG9iamVjdCB0byBiZSBkZWNvbXBvc2VkLlxyXG4gKiBAcGFyYW0ge2FycmF5fSBbb3V0XSAtIElmIHByb3ZpZGVkLCBlYWNoIHBvaW50IHdpbGwgYmUgYWRkZWQgdG8gdGhpcyBhcnJheS5cclxuICpcclxuICogQHJldHVybiB7YXJyYXl9IFdpbGwgcmV0dXJuIHRoZSBhcnJheSB5b3Ugc3BlY2lmaWVkIG9yIGEgbmV3IGFycmF5IGNvbnRhaW5pbmcgdGhlIHBvaW50cyBvZiB0aGUgUmVjdGFuZ2xlLlxyXG4gKi9cclxudmFyIERlY29tcG9zZSA9IGZ1bmN0aW9uIChyZWN0LCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBbXTsgfVxyXG5cclxuICAgIG91dC5wdXNoKHsgeDogcmVjdC54LCB5OiByZWN0LnkgfSk7XHJcbiAgICBvdXQucHVzaCh7IHg6IHJlY3QucmlnaHQsIHk6IHJlY3QueSB9KTtcclxuICAgIG91dC5wdXNoKHsgeDogcmVjdC5yaWdodCwgeTogcmVjdC5ib3R0b20gfSk7XHJcbiAgICBvdXQucHVzaCh7IHg6IHJlY3QueCwgeTogcmVjdC5ib3R0b20gfSk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRGVjb21wb3NlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Decompose.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/Equals.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/Equals.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Compares the `x`, `y`, `width` and `height` properties of two rectangles.\r\n *\r\n * @function Phaser.Geom.Rectangle.Equals\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - Rectangle A\r\n * @param {Phaser.Geom.Rectangle} toCompare - Rectangle B\r\n *\r\n * @return {boolean} `true` if the rectangles' properties are an exact match, otherwise `false`.\r\n */\r\nvar Equals = function (rect, toCompare)\r\n{\r\n return (\r\n rect.x === toCompare.x &&\r\n rect.y === toCompare.y &&\r\n rect.width === toCompare.width &&\r\n rect.height === toCompare.height\r\n );\r\n};\r\n\r\nmodule.exports = Equals;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9FcXVhbHMuanM/YzljNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxzQkFBc0I7QUFDakM7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9FcXVhbHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDb21wYXJlcyB0aGUgYHhgLCBgeWAsIGB3aWR0aGAgYW5kIGBoZWlnaHRgIHByb3BlcnRpZXMgb2YgdHdvIHJlY3RhbmdsZXMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuRXF1YWxzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdCAtIFJlY3RhbmdsZSBBXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSB0b0NvbXBhcmUgLSBSZWN0YW5nbGUgQlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHJlY3RhbmdsZXMnIHByb3BlcnRpZXMgYXJlIGFuIGV4YWN0IG1hdGNoLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICovXHJcbnZhciBFcXVhbHMgPSBmdW5jdGlvbiAocmVjdCwgdG9Db21wYXJlKVxyXG57XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIHJlY3QueCA9PT0gdG9Db21wYXJlLnggJiZcclxuICAgICAgICByZWN0LnkgPT09IHRvQ29tcGFyZS55ICYmXHJcbiAgICAgICAgcmVjdC53aWR0aCA9PT0gdG9Db21wYXJlLndpZHRoICYmXHJcbiAgICAgICAgcmVjdC5oZWlnaHQgPT09IHRvQ29tcGFyZS5oZWlnaHRcclxuICAgICk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEVxdWFscztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Equals.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/FitInside.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/FitInside.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetAspectRatio = __webpack_require__(/*! ./GetAspectRatio */ \"./node_modules/phaser/src/geom/rectangle/GetAspectRatio.js\");\r\n\r\n/**\r\n * Adjusts the target rectangle, changing its width, height and position,\r\n * so that it fits inside the area of the source rectangle, while maintaining its original\r\n * aspect ratio.\r\n * \r\n * Unlike the `FitOutside` function, there may be some space inside the source area not covered.\r\n *\r\n * @function Phaser.Geom.Rectangle.FitInside\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [target,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} target - The target rectangle to adjust.\r\n * @param {Phaser.Geom.Rectangle} source - The source rectangle to envelop the target in.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The modified target rectangle instance.\r\n */\r\nvar FitInside = function (target, source)\r\n{\r\n var ratio = GetAspectRatio(target);\r\n\r\n if (ratio < GetAspectRatio(source))\r\n {\r\n // Taller than Wide\r\n target.setSize(source.height * ratio, source.height);\r\n }\r\n else\r\n {\r\n // Wider than Tall\r\n target.setSize(source.width, source.width / ratio);\r\n }\r\n\r\n return target.setPosition(\r\n source.centerX - (target.width / 2),\r\n source.centerY - (target.height / 2)\r\n );\r\n};\r\n\r\nmodule.exports = FitInside;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9GaXRJbnNpZGUuanM/MjYyOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEscUJBQXFCLG1CQUFPLENBQUMsb0ZBQWtCOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsc0JBQXNCO0FBQ25DO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxzQkFBc0I7QUFDakM7QUFDQSxZQUFZLHNCQUFzQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvRml0SW5zaWRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0QXNwZWN0UmF0aW8gPSByZXF1aXJlKCcuL0dldEFzcGVjdFJhdGlvJyk7XHJcblxyXG4vKipcclxuICogQWRqdXN0cyB0aGUgdGFyZ2V0IHJlY3RhbmdsZSwgY2hhbmdpbmcgaXRzIHdpZHRoLCBoZWlnaHQgYW5kIHBvc2l0aW9uLFxyXG4gKiBzbyB0aGF0IGl0IGZpdHMgaW5zaWRlIHRoZSBhcmVhIG9mIHRoZSBzb3VyY2UgcmVjdGFuZ2xlLCB3aGlsZSBtYWludGFpbmluZyBpdHMgb3JpZ2luYWxcclxuICogYXNwZWN0IHJhdGlvLlxyXG4gKiBcclxuICogVW5saWtlIHRoZSBgRml0T3V0c2lkZWAgZnVuY3Rpb24sIHRoZXJlIG1heSBiZSBzb21lIHNwYWNlIGluc2lkZSB0aGUgc291cmNlIGFyZWEgbm90IGNvdmVyZWQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuRml0SW5zaWRlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBPIC0gW3RhcmdldCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gdGFyZ2V0IC0gVGhlIHRhcmdldCByZWN0YW5nbGUgdG8gYWRqdXN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gc291cmNlIC0gVGhlIHNvdXJjZSByZWN0YW5nbGUgdG8gZW52ZWxvcCB0aGUgdGFyZ2V0IGluLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IFRoZSBtb2RpZmllZCB0YXJnZXQgcmVjdGFuZ2xlIGluc3RhbmNlLlxyXG4gKi9cclxudmFyIEZpdEluc2lkZSA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSlcclxue1xyXG4gICAgdmFyIHJhdGlvID0gR2V0QXNwZWN0UmF0aW8odGFyZ2V0KTtcclxuXHJcbiAgICBpZiAocmF0aW8gPCBHZXRBc3BlY3RSYXRpbyhzb3VyY2UpKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBUYWxsZXIgdGhhbiBXaWRlXHJcbiAgICAgICAgdGFyZ2V0LnNldFNpemUoc291cmNlLmhlaWdodCAqIHJhdGlvLCBzb3VyY2UuaGVpZ2h0KTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICAvLyAgV2lkZXIgdGhhbiBUYWxsXHJcbiAgICAgICAgdGFyZ2V0LnNldFNpemUoc291cmNlLndpZHRoLCBzb3VyY2Uud2lkdGggLyByYXRpbyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRhcmdldC5zZXRQb3NpdGlvbihcclxuICAgICAgICBzb3VyY2UuY2VudGVyWCAtICh0YXJnZXQud2lkdGggLyAyKSxcclxuICAgICAgICBzb3VyY2UuY2VudGVyWSAtICh0YXJnZXQuaGVpZ2h0IC8gMilcclxuICAgICk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEZpdEluc2lkZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/FitInside.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/FitOutside.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/FitOutside.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetAspectRatio = __webpack_require__(/*! ./GetAspectRatio */ \"./node_modules/phaser/src/geom/rectangle/GetAspectRatio.js\");\r\n\r\n/**\r\n * Adjusts the target rectangle, changing its width, height and position,\r\n * so that it fully covers the area of the source rectangle, while maintaining its original\r\n * aspect ratio.\r\n * \r\n * Unlike the `FitInside` function, the target rectangle may extend further out than the source.\r\n *\r\n * @function Phaser.Geom.Rectangle.FitOutside\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [target,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} target - The target rectangle to adjust.\r\n * @param {Phaser.Geom.Rectangle} source - The source rectangle to envelope the target in.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The modified target rectangle instance.\r\n */\r\nvar FitOutside = function (target, source)\r\n{\r\n var ratio = GetAspectRatio(target);\r\n\r\n if (ratio > GetAspectRatio(source))\r\n {\r\n // Wider than Tall\r\n target.setSize(source.height * ratio, source.height);\r\n }\r\n else\r\n {\r\n // Taller than Wide\r\n target.setSize(source.width, source.width / ratio);\r\n }\r\n\r\n return target.setPosition(\r\n source.centerX - target.width / 2,\r\n source.centerY - target.height / 2\r\n );\r\n};\r\n\r\nmodule.exports = FitOutside;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9GaXRPdXRzaWRlLmpzP2IyM2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHFCQUFxQixtQkFBTyxDQUFDLG9GQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcsc0JBQXNCO0FBQ2pDO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL0ZpdE91dHNpZGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRBc3BlY3RSYXRpbyA9IHJlcXVpcmUoJy4vR2V0QXNwZWN0UmF0aW8nKTtcclxuXHJcbi8qKlxyXG4gKiBBZGp1c3RzIHRoZSB0YXJnZXQgcmVjdGFuZ2xlLCBjaGFuZ2luZyBpdHMgd2lkdGgsIGhlaWdodCBhbmQgcG9zaXRpb24sXHJcbiAqIHNvIHRoYXQgaXQgZnVsbHkgY292ZXJzIHRoZSBhcmVhIG9mIHRoZSBzb3VyY2UgcmVjdGFuZ2xlLCB3aGlsZSBtYWludGFpbmluZyBpdHMgb3JpZ2luYWxcclxuICogYXNwZWN0IHJhdGlvLlxyXG4gKiBcclxuICogVW5saWtlIHRoZSBgRml0SW5zaWRlYCBmdW5jdGlvbiwgdGhlIHRhcmdldCByZWN0YW5nbGUgbWF5IGV4dGVuZCBmdXJ0aGVyIG91dCB0aGFuIHRoZSBzb3VyY2UuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuRml0T3V0c2lkZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gTyAtIFt0YXJnZXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHRhcmdldCAtIFRoZSB0YXJnZXQgcmVjdGFuZ2xlIHRvIGFkanVzdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHNvdXJjZSAtIFRoZSBzb3VyY2UgcmVjdGFuZ2xlIHRvIGVudmVsb3BlIHRoZSB0YXJnZXQgaW4uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gVGhlIG1vZGlmaWVkIHRhcmdldCByZWN0YW5nbGUgaW5zdGFuY2UuXHJcbiAqL1xyXG52YXIgRml0T3V0c2lkZSA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSlcclxue1xyXG4gICAgdmFyIHJhdGlvID0gR2V0QXNwZWN0UmF0aW8odGFyZ2V0KTtcclxuXHJcbiAgICBpZiAocmF0aW8gPiBHZXRBc3BlY3RSYXRpbyhzb3VyY2UpKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBXaWRlciB0aGFuIFRhbGxcclxuICAgICAgICB0YXJnZXQuc2V0U2l6ZShzb3VyY2UuaGVpZ2h0ICogcmF0aW8sIHNvdXJjZS5oZWlnaHQpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIC8vICBUYWxsZXIgdGhhbiBXaWRlXHJcbiAgICAgICAgdGFyZ2V0LnNldFNpemUoc291cmNlLndpZHRoLCBzb3VyY2Uud2lkdGggLyByYXRpbyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRhcmdldC5zZXRQb3NpdGlvbihcclxuICAgICAgICBzb3VyY2UuY2VudGVyWCAtIHRhcmdldC53aWR0aCAvIDIsXHJcbiAgICAgICAgc291cmNlLmNlbnRlclkgLSB0YXJnZXQuaGVpZ2h0IC8gMlxyXG4gICAgKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRml0T3V0c2lkZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/FitOutside.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/Floor.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/Floor.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Rounds down (floors) the top left X and Y coordinates of the given Rectangle to the largest integer less than or equal to them\r\n *\r\n * @function Phaser.Geom.Rectangle.Floor\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [rect,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The rectangle to floor the top left X and Y coordinates of\r\n *\r\n * @return {Phaser.Geom.Rectangle} The rectangle that was passed to this function with its coordinates floored.\r\n */\r\nvar Floor = function (rect)\r\n{\r\n rect.x = Math.floor(rect.x);\r\n rect.y = Math.floor(rect.y);\r\n\r\n return rect;\r\n};\r\n\r\nmodule.exports = Floor;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9GbG9vci5qcz82YTIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvRmxvb3IuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSb3VuZHMgZG93biAoZmxvb3JzKSB0aGUgdG9wIGxlZnQgWCBhbmQgWSBjb29yZGluYXRlcyBvZiB0aGUgZ2l2ZW4gUmVjdGFuZ2xlIHRvIHRoZSBsYXJnZXN0IGludGVnZXIgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZW1cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5GbG9vclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gTyAtIFtyZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0IC0gVGhlIHJlY3RhbmdsZSB0byBmbG9vciB0aGUgdG9wIGxlZnQgWCBhbmQgWSBjb29yZGluYXRlcyBvZlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IFRoZSByZWN0YW5nbGUgdGhhdCB3YXMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gd2l0aCBpdHMgY29vcmRpbmF0ZXMgZmxvb3JlZC5cclxuICovXHJcbnZhciBGbG9vciA9IGZ1bmN0aW9uIChyZWN0KVxyXG57XHJcbiAgICByZWN0LnggPSBNYXRoLmZsb29yKHJlY3QueCk7XHJcbiAgICByZWN0LnkgPSBNYXRoLmZsb29yKHJlY3QueSk7XHJcblxyXG4gICAgcmV0dXJuIHJlY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEZsb29yO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Floor.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/FloorAll.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/FloorAll.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Rounds a Rectangle's position and size down to the largest integer less than or equal to each current coordinate or dimension.\r\n *\r\n * @function Phaser.Geom.Rectangle.FloorAll\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [rect,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to adjust.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The adjusted Rectangle.\r\n */\r\nvar FloorAll = function (rect)\r\n{\r\n rect.x = Math.floor(rect.x);\r\n rect.y = Math.floor(rect.y);\r\n rect.width = Math.floor(rect.width);\r\n rect.height = Math.floor(rect.height);\r\n\r\n return rect;\r\n};\r\n\r\nmodule.exports = FloorAll;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9GbG9vckFsbC5qcz82OWEzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL0Zsb29yQWxsLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUm91bmRzIGEgUmVjdGFuZ2xlJ3MgcG9zaXRpb24gYW5kIHNpemUgZG93biB0byB0aGUgbGFyZ2VzdCBpbnRlZ2VyIGxlc3MgdGhhbiBvciBlcXVhbCB0byBlYWNoIGN1cnJlbnQgY29vcmRpbmF0ZSBvciBkaW1lbnNpb24uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuRmxvb3JBbGxcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IE8gLSBbcmVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdCAtIFRoZSBSZWN0YW5nbGUgdG8gYWRqdXN0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IFRoZSBhZGp1c3RlZCBSZWN0YW5nbGUuXHJcbiAqL1xyXG52YXIgRmxvb3JBbGwgPSBmdW5jdGlvbiAocmVjdClcclxue1xyXG4gICAgcmVjdC54ID0gTWF0aC5mbG9vcihyZWN0LngpO1xyXG4gICAgcmVjdC55ID0gTWF0aC5mbG9vcihyZWN0LnkpO1xyXG4gICAgcmVjdC53aWR0aCA9IE1hdGguZmxvb3IocmVjdC53aWR0aCk7XHJcbiAgICByZWN0LmhlaWdodCA9IE1hdGguZmxvb3IocmVjdC5oZWlnaHQpO1xyXG5cclxuICAgIHJldHVybiByZWN0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBGbG9vckFsbDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/FloorAll.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/FromPoints.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/FromPoints.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Rectangle = __webpack_require__(/*! ./Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar MATH_CONST = __webpack_require__(/*! ../../math/const */ \"./node_modules/phaser/src/math/const.js\");\r\n\r\n// points is an array of Point-like objects,\r\n// either 2 dimensional arrays, or objects with public x/y properties:\r\n// var points = [\r\n// [100, 200],\r\n// [200, 400],\r\n// { x: 30, y: 60 }\r\n// ]\r\n\r\n/**\r\n * Constructs new Rectangle or repositions and resizes an existing Rectangle so that all of the given points are on or within its bounds.\r\n *\r\n * @function Phaser.Geom.Rectangle.FromPoints\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [out,$return]\r\n *\r\n * @param {array} points - An array of points (either arrays with two elements corresponding to the X and Y coordinate or an object with public `x` and `y` properties) which should be surrounded by the Rectangle.\r\n * @param {Phaser.Geom.Rectangle} [out] - Optional Rectangle to adjust.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The adjusted `out` Rectangle, or a new Rectangle if none was provided.\r\n */\r\nvar FromPoints = function (points, out)\r\n{\r\n if (out === undefined) { out = new Rectangle(); }\r\n\r\n if (points.length === 0)\r\n {\r\n return out;\r\n }\r\n\r\n var minX = Number.MAX_VALUE;\r\n var minY = Number.MAX_VALUE;\r\n\r\n var maxX = MATH_CONST.MIN_SAFE_INTEGER;\r\n var maxY = MATH_CONST.MIN_SAFE_INTEGER;\r\n\r\n var p;\r\n var px;\r\n var py;\r\n\r\n for (var i = 0; i < points.length; i++)\r\n {\r\n p = points[i];\r\n\r\n if (Array.isArray(p))\r\n {\r\n px = p[0];\r\n py = p[1];\r\n }\r\n else\r\n {\r\n px = p.x;\r\n py = p.y;\r\n }\r\n\r\n minX = Math.min(minX, px);\r\n minY = Math.min(minY, py);\r\n\r\n maxX = Math.max(maxX, px);\r\n maxY = Math.max(maxY, py);\r\n }\r\n\r\n out.x = minX;\r\n out.y = minY;\r\n out.width = maxX - minX;\r\n out.height = maxY - minY;\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = FromPoints;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9Gcm9tUG9pbnRzLmpzPzE5NzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGdCQUFnQixtQkFBTyxDQUFDLDBFQUFhO0FBQ3JDLGlCQUFpQixtQkFBTyxDQUFDLGlFQUFrQjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLHNCQUFzQjtBQUNqQztBQUNBLFlBQVksc0JBQXNCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qix1QkFBdUI7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLG1CQUFtQjtBQUN0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9Gcm9tUG9pbnRzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKTtcclxudmFyIE1BVEhfQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9tYXRoL2NvbnN0Jyk7XHJcblxyXG4vLyAgcG9pbnRzIGlzIGFuIGFycmF5IG9mIFBvaW50LWxpa2Ugb2JqZWN0cyxcclxuLy8gIGVpdGhlciAyIGRpbWVuc2lvbmFsIGFycmF5cywgb3Igb2JqZWN0cyB3aXRoIHB1YmxpYyB4L3kgcHJvcGVydGllczpcclxuLy8gIHZhciBwb2ludHMgPSBbXHJcbi8vICAgICAgWzEwMCwgMjAwXSxcclxuLy8gICAgICBbMjAwLCA0MDBdLFxyXG4vLyAgICAgIHsgeDogMzAsIHk6IDYwIH1cclxuLy8gIF1cclxuXHJcbi8qKlxyXG4gKiBDb25zdHJ1Y3RzIG5ldyBSZWN0YW5nbGUgb3IgcmVwb3NpdGlvbnMgYW5kIHJlc2l6ZXMgYW4gZXhpc3RpbmcgUmVjdGFuZ2xlIHNvIHRoYXQgYWxsIG9mIHRoZSBnaXZlbiBwb2ludHMgYXJlIG9uIG9yIHdpdGhpbiBpdHMgYm91bmRzLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUmVjdGFuZ2xlLkZyb21Qb2ludHNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7YXJyYXl9IHBvaW50cyAtIEFuIGFycmF5IG9mIHBvaW50cyAoZWl0aGVyIGFycmF5cyB3aXRoIHR3byBlbGVtZW50cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBYIGFuZCBZIGNvb3JkaW5hdGUgb3IgYW4gb2JqZWN0IHdpdGggcHVibGljIGB4YCBhbmQgYHlgIHByb3BlcnRpZXMpIHdoaWNoIHNob3VsZCBiZSBzdXJyb3VuZGVkIGJ5IHRoZSBSZWN0YW5nbGUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBbb3V0XSAtIE9wdGlvbmFsIFJlY3RhbmdsZSB0byBhZGp1c3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gVGhlIGFkanVzdGVkIGBvdXRgIFJlY3RhbmdsZSwgb3IgYSBuZXcgUmVjdGFuZ2xlIGlmIG5vbmUgd2FzIHByb3ZpZGVkLlxyXG4gKi9cclxudmFyIEZyb21Qb2ludHMgPSBmdW5jdGlvbiAocG9pbnRzLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgUmVjdGFuZ2xlKCk7IH1cclxuXHJcbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBtaW5YID0gTnVtYmVyLk1BWF9WQUxVRTtcclxuICAgIHZhciBtaW5ZID0gTnVtYmVyLk1BWF9WQUxVRTtcclxuXHJcbiAgICB2YXIgbWF4WCA9IE1BVEhfQ09OU1QuTUlOX1NBRkVfSU5URUdFUjtcclxuICAgIHZhciBtYXhZID0gTUFUSF9DT05TVC5NSU5fU0FGRV9JTlRFR0VSO1xyXG5cclxuICAgIHZhciBwO1xyXG4gICAgdmFyIHB4O1xyXG4gICAgdmFyIHB5O1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgICAgIHAgPSBwb2ludHNbaV07XHJcblxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHApKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHggPSBwWzBdO1xyXG4gICAgICAgICAgICBweSA9IHBbMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHB4ID0gcC54O1xyXG4gICAgICAgICAgICBweSA9IHAueTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBweCk7XHJcbiAgICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIHB5KTtcclxuXHJcbiAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHB4KTtcclxuICAgICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgcHkpO1xyXG4gICAgfVxyXG5cclxuICAgIG91dC54ID0gbWluWDtcclxuICAgIG91dC55ID0gbWluWTtcclxuICAgIG91dC53aWR0aCA9IG1heFggLSBtaW5YO1xyXG4gICAgb3V0LmhlaWdodCA9IG1heFkgLSBtaW5ZO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEZyb21Qb2ludHM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/FromPoints.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/GetAspectRatio.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/GetAspectRatio.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculates the width/height ratio of a rectangle.\r\n *\r\n * @function Phaser.Geom.Rectangle.GetAspectRatio\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The rectangle.\r\n *\r\n * @return {number} The width/height ratio of the rectangle.\r\n */\r\nvar GetAspectRatio = function (rect)\r\n{\r\n return (rect.height === 0) ? NaN : rect.width / rect.height;\r\n};\r\n\r\nmodule.exports = GetAspectRatio;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9HZXRBc3BlY3RSYXRpby5qcz81ZDllIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQztBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvR2V0QXNwZWN0UmF0aW8uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSB3aWR0aC9oZWlnaHQgcmF0aW8gb2YgYSByZWN0YW5nbGUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuR2V0QXNwZWN0UmF0aW9cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0IC0gVGhlIHJlY3RhbmdsZS5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgd2lkdGgvaGVpZ2h0IHJhdGlvIG9mIHRoZSByZWN0YW5nbGUuXHJcbiAqL1xyXG52YXIgR2V0QXNwZWN0UmF0aW8gPSBmdW5jdGlvbiAocmVjdClcclxue1xyXG4gICAgcmV0dXJuIChyZWN0LmhlaWdodCA9PT0gMCkgPyBOYU4gOiByZWN0LndpZHRoIC8gcmVjdC5oZWlnaHQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldEFzcGVjdFJhdGlvO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/GetAspectRatio.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/GetCenter.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/GetCenter.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Returns the center of a Rectangle as a Point.\r\n *\r\n * @function Phaser.Geom.Rectangle.GetCenter\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to get the center of.\r\n * @param {(Phaser.Geom.Point|object)} [out] - Optional point-like object to update with the center coordinates.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} The modified `out` object, or a new Point if none was provided.\r\n */\r\nvar GetCenter = function (rect, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n out.x = rect.centerX;\r\n out.y = rect.centerY;\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetCenter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9HZXRDZW50ZXIuanM/NGM2YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLDJCQUEyQjtBQUN0QztBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7O0FBRS9DO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL0dldENlbnRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vcG9pbnQvUG9pbnQnKTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBjZW50ZXIgb2YgYSBSZWN0YW5nbGUgYXMgYSBQb2ludC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5HZXRDZW50ZXJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3QgLSBUaGUgUmVjdGFuZ2xlIHRvIGdldCB0aGUgY2VudGVyIG9mLlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBbb3V0XSAtIE9wdGlvbmFsIHBvaW50LWxpa2Ugb2JqZWN0IHRvIHVwZGF0ZSB3aXRoIHRoZSBjZW50ZXIgY29vcmRpbmF0ZXMuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBUaGUgbW9kaWZpZWQgYG91dGAgb2JqZWN0LCBvciBhIG5ldyBQb2ludCBpZiBub25lIHdhcyBwcm92aWRlZC5cclxuICovXHJcbnZhciBHZXRDZW50ZXIgPSBmdW5jdGlvbiAocmVjdCwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFBvaW50KCk7IH1cclxuXHJcbiAgICBvdXQueCA9IHJlY3QuY2VudGVyWDtcclxuICAgIG91dC55ID0gcmVjdC5jZW50ZXJZO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldENlbnRlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/GetCenter.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/GetPoint.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/GetPoint.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Perimeter = __webpack_require__(/*! ./Perimeter */ \"./node_modules/phaser/src/geom/rectangle/Perimeter.js\");\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Position is a value between 0 and 1 where 0 = the top-left of the rectangle and 0.5 = the bottom right.\r\n *\r\n * @function Phaser.Geom.Rectangle.GetPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rectangle - [description]\r\n * @param {number} position - [description]\r\n * @param {(Phaser.Geom.Point|object)} [out] - [description]\r\n *\r\n * @return {Phaser.Geom.Point} [description]\r\n */\r\nvar GetPoint = function (rectangle, position, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n if (position <= 0 || position >= 1)\r\n {\r\n out.x = rectangle.x;\r\n out.y = rectangle.y;\r\n\r\n return out;\r\n }\r\n\r\n var p = Perimeter(rectangle) * position;\r\n\r\n if (position > 0.5)\r\n {\r\n p -= (rectangle.width + rectangle.height);\r\n\r\n if (p <= rectangle.width)\r\n {\r\n // Face 3\r\n out.x = rectangle.right - p;\r\n out.y = rectangle.bottom;\r\n }\r\n else\r\n {\r\n // Face 4\r\n out.x = rectangle.x;\r\n out.y = rectangle.bottom - (p - rectangle.width);\r\n }\r\n }\r\n else if (p <= rectangle.width)\r\n {\r\n // Face 1\r\n out.x = rectangle.x + p;\r\n out.y = rectangle.y;\r\n }\r\n else\r\n {\r\n // Face 2\r\n out.x = rectangle.right;\r\n out.y = rectangle.y + (p - rectangle.width);\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9HZXRQb2ludC5qcz80OWYyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQywwRUFBYTtBQUNyQyxZQUFZLG1CQUFPLENBQUMscUVBQWdCOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGtCQUFrQjtBQUMvQjtBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcsT0FBTztBQUNsQixXQUFXLDJCQUEyQjtBQUN0QztBQUNBLFlBQVksa0JBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9HZXRQb2ludC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBlcmltZXRlciA9IHJlcXVpcmUoJy4vUGVyaW1ldGVyJyk7XHJcbnZhciBQb2ludCA9IHJlcXVpcmUoJy4uL3BvaW50L1BvaW50Jyk7XHJcblxyXG4vKipcclxuICogUG9zaXRpb24gaXMgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEgd2hlcmUgMCA9IHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlIGFuZCAwLjUgPSB0aGUgYm90dG9tIHJpZ2h0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUmVjdGFuZ2xlLkdldFBvaW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnR9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0YW5nbGUgLSBbZGVzY3JpcHRpb25dXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvbiAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gW291dF0gLSBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlBvaW50fSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG52YXIgR2V0UG9pbnQgPSBmdW5jdGlvbiAocmVjdGFuZ2xlLCBwb3NpdGlvbiwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFBvaW50KCk7IH1cclxuXHJcbiAgICBpZiAocG9zaXRpb24gPD0gMCB8fCBwb3NpdGlvbiA+PSAxKVxyXG4gICAge1xyXG4gICAgICAgIG91dC54ID0gcmVjdGFuZ2xlLng7XHJcbiAgICAgICAgb3V0LnkgPSByZWN0YW5nbGUueTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgcCA9IFBlcmltZXRlcihyZWN0YW5nbGUpICogcG9zaXRpb247XHJcblxyXG4gICAgaWYgKHBvc2l0aW9uID4gMC41KVxyXG4gICAge1xyXG4gICAgICAgIHAgLT0gKHJlY3RhbmdsZS53aWR0aCArIHJlY3RhbmdsZS5oZWlnaHQpO1xyXG5cclxuICAgICAgICBpZiAocCA8PSByZWN0YW5nbGUud2lkdGgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgRmFjZSAzXHJcbiAgICAgICAgICAgIG91dC54ID0gcmVjdGFuZ2xlLnJpZ2h0IC0gcDtcclxuICAgICAgICAgICAgb3V0LnkgPSByZWN0YW5nbGUuYm90dG9tO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgRmFjZSA0XHJcbiAgICAgICAgICAgIG91dC54ID0gcmVjdGFuZ2xlLng7XHJcbiAgICAgICAgICAgIG91dC55ID0gcmVjdGFuZ2xlLmJvdHRvbSAtIChwIC0gcmVjdGFuZ2xlLndpZHRoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwIDw9IHJlY3RhbmdsZS53aWR0aClcclxuICAgIHtcclxuICAgICAgICAvLyAgRmFjZSAxXHJcbiAgICAgICAgb3V0LnggPSByZWN0YW5nbGUueCArIHA7XHJcbiAgICAgICAgb3V0LnkgPSByZWN0YW5nbGUueTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICAvLyAgRmFjZSAyXHJcbiAgICAgICAgb3V0LnggPSByZWN0YW5nbGUucmlnaHQ7XHJcbiAgICAgICAgb3V0LnkgPSByZWN0YW5nbGUueSArIChwIC0gcmVjdGFuZ2xlLndpZHRoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHZXRQb2ludDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/GetPoint.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/GetPoints.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/GetPoints.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetPoint = __webpack_require__(/*! ./GetPoint */ \"./node_modules/phaser/src/geom/rectangle/GetPoint.js\");\r\nvar Perimeter = __webpack_require__(/*! ./Perimeter */ \"./node_modules/phaser/src/geom/rectangle/Perimeter.js\");\r\n\r\n// Return an array of points from the perimeter of the rectangle\r\n// each spaced out based on the quantity or step required\r\n\r\n/**\r\n * Return an array of points from the perimeter of the rectangle, each spaced out based on the quantity or step required.\r\n *\r\n * @function Phaser.Geom.Rectangle.GetPoints\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point[]} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rectangle - The Rectangle object to get the points from.\r\n * @param {number} step - Step between points. Used to calculate the number of points to return when quantity is falsey. Ignored if quantity is positive.\r\n * @param {integer} quantity - The number of evenly spaced points from the rectangles perimeter to return. If falsey, step param will be used to calculate the number of points.\r\n * @param {(array|Phaser.Geom.Point[])} [out] - An optional array to store the points in.\r\n *\r\n * @return {(array|Phaser.Geom.Point[])} An array of Points from the perimeter of the rectangle.\r\n */\r\nvar GetPoints = function (rectangle, quantity, stepRate, out)\r\n{\r\n if (out === undefined) { out = []; }\r\n\r\n // If quantity is a falsey value (false, null, 0, undefined, etc) then we calculate it based on the stepRate instead.\r\n if (!quantity)\r\n {\r\n quantity = Perimeter(rectangle) / stepRate;\r\n }\r\n\r\n for (var i = 0; i < quantity; i++)\r\n {\r\n var position = i / quantity;\r\n\r\n out.push(GetPoint(rectangle, position));\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetPoints;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9HZXRQb2ludHMuanM/YTU5YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLHdFQUFZO0FBQ25DLGdCQUFnQixtQkFBTyxDQUFDLDBFQUFhOztBQUVyQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsb0JBQW9CO0FBQ2pDO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLDRCQUE0QjtBQUN2QztBQUNBLFlBQVksNEJBQTRCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixjQUFjO0FBQ2pDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvR2V0UG9pbnRzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgR2V0UG9pbnQgPSByZXF1aXJlKCcuL0dldFBvaW50Jyk7XHJcbnZhciBQZXJpbWV0ZXIgPSByZXF1aXJlKCcuL1BlcmltZXRlcicpO1xyXG5cclxuLy8gIFJldHVybiBhbiBhcnJheSBvZiBwb2ludHMgZnJvbSB0aGUgcGVyaW1ldGVyIG9mIHRoZSByZWN0YW5nbGVcclxuLy8gIGVhY2ggc3BhY2VkIG91dCBiYXNlZCBvbiB0aGUgcXVhbnRpdHkgb3Igc3RlcCByZXF1aXJlZFxyXG5cclxuLyoqXHJcbiAqIFJldHVybiBhbiBhcnJheSBvZiBwb2ludHMgZnJvbSB0aGUgcGVyaW1ldGVyIG9mIHRoZSByZWN0YW5nbGUsIGVhY2ggc3BhY2VkIG91dCBiYXNlZCBvbiB0aGUgcXVhbnRpdHkgb3Igc3RlcCByZXF1aXJlZC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5HZXRQb2ludHNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludFtdfSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdGFuZ2xlIC0gVGhlIFJlY3RhbmdsZSBvYmplY3QgdG8gZ2V0IHRoZSBwb2ludHMgZnJvbS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHN0ZXAgLSBTdGVwIGJldHdlZW4gcG9pbnRzLiBVc2VkIHRvIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIHBvaW50cyB0byByZXR1cm4gd2hlbiBxdWFudGl0eSBpcyBmYWxzZXkuIElnbm9yZWQgaWYgcXVhbnRpdHkgaXMgcG9zaXRpdmUuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gcXVhbnRpdHkgLSBUaGUgbnVtYmVyIG9mIGV2ZW5seSBzcGFjZWQgcG9pbnRzIGZyb20gdGhlIHJlY3RhbmdsZXMgcGVyaW1ldGVyIHRvIHJldHVybi4gSWYgZmFsc2V5LCBzdGVwIHBhcmFtIHdpbGwgYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBwb2ludHMuXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HZW9tLlBvaW50W10pfSBbb3V0XSAtIEFuIG9wdGlvbmFsIGFycmF5IHRvIHN0b3JlIHRoZSBwb2ludHMgaW4uXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2VvbS5Qb2ludFtdKX0gQW4gYXJyYXkgb2YgUG9pbnRzIGZyb20gdGhlIHBlcmltZXRlciBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gKi9cclxudmFyIEdldFBvaW50cyA9IGZ1bmN0aW9uIChyZWN0YW5nbGUsIHF1YW50aXR5LCBzdGVwUmF0ZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gW107IH1cclxuXHJcbiAgICAvLyAgSWYgcXVhbnRpdHkgaXMgYSBmYWxzZXkgdmFsdWUgKGZhbHNlLCBudWxsLCAwLCB1bmRlZmluZWQsIGV0YykgdGhlbiB3ZSBjYWxjdWxhdGUgaXQgYmFzZWQgb24gdGhlIHN0ZXBSYXRlIGluc3RlYWQuXHJcbiAgICBpZiAoIXF1YW50aXR5KVxyXG4gICAge1xyXG4gICAgICAgIHF1YW50aXR5ID0gUGVyaW1ldGVyKHJlY3RhbmdsZSkgLyBzdGVwUmF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1YW50aXR5OyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gaSAvIHF1YW50aXR5O1xyXG5cclxuICAgICAgICBvdXQucHVzaChHZXRQb2ludChyZWN0YW5nbGUsIHBvc2l0aW9uKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0UG9pbnRzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/GetPoints.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/GetSize.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/GetSize.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n\r\n/**\r\n * The size of the Rectangle object, expressed as a Point object\r\n * with the values of the width and height properties.\r\n *\r\n * @function Phaser.Geom.Rectangle.GetSize\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - [description]\r\n * @param {(Phaser.Geom.Point|object)} [out] - [description]\r\n *\r\n * @return {(Phaser.Geom.Point|object)} [description]\r\n */\r\nvar GetSize = function (rect, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n out.x = rect.width;\r\n out.y = rect.height;\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetSize;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9HZXRTaXplLmpzP2Y2MTQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRUFBZ0I7OztBQUdwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVywyQkFBMkI7QUFDdEM7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsbUJBQW1COztBQUUvQztBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9HZXRTaXplLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG5cclxuXHJcbi8qKlxyXG4gKiAgVGhlIHNpemUgb2YgdGhlIFJlY3RhbmdsZSBvYmplY3QsIGV4cHJlc3NlZCBhcyBhIFBvaW50IG9iamVjdFxyXG4gKiAgd2l0aCB0aGUgdmFsdWVzIG9mIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHByb3BlcnRpZXMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuR2V0U2l6ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdCAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gW291dF0gLSBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG52YXIgR2V0U2l6ZSA9IGZ1bmN0aW9uIChyZWN0LCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgUG9pbnQoKTsgfVxyXG5cclxuICAgIG91dC54ID0gcmVjdC53aWR0aDtcclxuICAgIG91dC55ID0gcmVjdC5oZWlnaHQ7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0U2l6ZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/GetSize.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/Inflate.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/Inflate.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CenterOn = __webpack_require__(/*! ./CenterOn */ \"./node_modules/phaser/src/geom/rectangle/CenterOn.js\");\r\n\r\n\r\n/**\r\n * Increases the size of a Rectangle by a specified amount.\r\n *\r\n * The center of the Rectangle stays the same. The amounts are added to each side, so the actual increase in width or height is two times bigger than the respective argument.\r\n *\r\n * @function Phaser.Geom.Rectangle.Inflate\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [rect,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to inflate.\r\n * @param {number} x - How many pixels the left and the right side should be moved by horizontally.\r\n * @param {number} y - How many pixels the top and the bottom side should be moved by vertically.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The inflated Rectangle.\r\n */\r\nvar Inflate = function (rect, x, y)\r\n{\r\n var cx = rect.centerX;\r\n var cy = rect.centerY;\r\n\r\n rect.setSize(rect.width + (x * 2), rect.height + (y * 2));\r\n\r\n return CenterOn(rect, cx, cy);\r\n};\r\n\r\nmodule.exports = Inflate;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9JbmZsYXRlLmpzPzVlNzMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyx3RUFBWTs7O0FBR25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHNCQUFzQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9JbmZsYXRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2VudGVyT24gPSByZXF1aXJlKCcuL0NlbnRlck9uJyk7XHJcblxyXG5cclxuLyoqXHJcbiAqIEluY3JlYXNlcyB0aGUgc2l6ZSBvZiBhIFJlY3RhbmdsZSBieSBhIHNwZWNpZmllZCBhbW91bnQuXHJcbiAqXHJcbiAqIFRoZSBjZW50ZXIgb2YgdGhlIFJlY3RhbmdsZSBzdGF5cyB0aGUgc2FtZS4gVGhlIGFtb3VudHMgYXJlIGFkZGVkIHRvIGVhY2ggc2lkZSwgc28gdGhlIGFjdHVhbCBpbmNyZWFzZSBpbiB3aWR0aCBvciBoZWlnaHQgaXMgdHdvIHRpbWVzIGJpZ2dlciB0aGFuIHRoZSByZXNwZWN0aXZlIGFyZ3VtZW50LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUmVjdGFuZ2xlLkluZmxhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IE8gLSBbcmVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdCAtIFRoZSBSZWN0YW5nbGUgdG8gaW5mbGF0ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBIb3cgbWFueSBwaXhlbHMgdGhlIGxlZnQgYW5kIHRoZSByaWdodCBzaWRlIHNob3VsZCBiZSBtb3ZlZCBieSBob3Jpem9udGFsbHkuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gSG93IG1hbnkgcGl4ZWxzIHRoZSB0b3AgYW5kIHRoZSBib3R0b20gc2lkZSBzaG91bGQgYmUgbW92ZWQgYnkgdmVydGljYWxseS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBUaGUgaW5mbGF0ZWQgUmVjdGFuZ2xlLlxyXG4gKi9cclxudmFyIEluZmxhdGUgPSBmdW5jdGlvbiAocmVjdCwgeCwgeSlcclxue1xyXG4gICAgdmFyIGN4ID0gcmVjdC5jZW50ZXJYO1xyXG4gICAgdmFyIGN5ID0gcmVjdC5jZW50ZXJZO1xyXG5cclxuICAgIHJlY3Quc2V0U2l6ZShyZWN0LndpZHRoICsgKHggKiAyKSwgcmVjdC5oZWlnaHQgKyAoeSAqIDIpKTtcclxuXHJcbiAgICByZXR1cm4gQ2VudGVyT24ocmVjdCwgY3gsIGN5KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW5mbGF0ZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Inflate.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/Intersection.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/Intersection.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Rectangle = __webpack_require__(/*! ./Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar Intersects = __webpack_require__(/*! ../intersects/RectangleToRectangle */ \"./node_modules/phaser/src/geom/intersects/RectangleToRectangle.js\");\r\n\r\n/**\r\n * Takes two Rectangles and first checks to see if they intersect.\r\n * If they intersect it will return the area of intersection in the `out` Rectangle.\r\n * If they do not intersect, the `out` Rectangle will have a width and height of zero.\r\n *\r\n * @function Phaser.Geom.Rectangle.Intersection\r\n * @since 3.11.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [rect,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rectA - The first Rectangle to get the intersection from.\r\n * @param {Phaser.Geom.Rectangle} rectB - The second Rectangle to get the intersection from.\r\n * @param {Phaser.Geom.Rectangle} [out] - A Rectangle to store the intersection results in.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The intersection result. If the width and height are zero, no intersection occurred.\r\n */\r\nvar Intersection = function (rectA, rectB, out)\r\n{\r\n if (out === undefined) { out = new Rectangle(); }\r\n\r\n if (Intersects(rectA, rectB))\r\n {\r\n out.x = Math.max(rectA.x, rectB.x);\r\n out.y = Math.max(rectA.y, rectB.y);\r\n out.width = Math.min(rectA.right, rectB.right) - out.x;\r\n out.height = Math.min(rectA.bottom, rectB.bottom) - out.y;\r\n }\r\n else\r\n {\r\n out.setEmpty();\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = Intersection;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9JbnRlcnNlY3Rpb24uanM/MGQ0MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMsMEVBQWE7QUFDckMsaUJBQWlCLG1CQUFPLENBQUMsNkdBQW9DOztBQUU3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxzQkFBc0I7QUFDbkM7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLHNCQUFzQjtBQUNqQztBQUNBLFlBQVksc0JBQXNCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qix1QkFBdUI7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL0ludGVyc2VjdGlvbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyk7XHJcbnZhciBJbnRlcnNlY3RzID0gcmVxdWlyZSgnLi4vaW50ZXJzZWN0cy9SZWN0YW5nbGVUb1JlY3RhbmdsZScpO1xyXG5cclxuLyoqXHJcbiAqIFRha2VzIHR3byBSZWN0YW5nbGVzIGFuZCBmaXJzdCBjaGVja3MgdG8gc2VlIGlmIHRoZXkgaW50ZXJzZWN0LlxyXG4gKiBJZiB0aGV5IGludGVyc2VjdCBpdCB3aWxsIHJldHVybiB0aGUgYXJlYSBvZiBpbnRlcnNlY3Rpb24gaW4gdGhlIGBvdXRgIFJlY3RhbmdsZS5cclxuICogSWYgdGhleSBkbyBub3QgaW50ZXJzZWN0LCB0aGUgYG91dGAgUmVjdGFuZ2xlIHdpbGwgaGF2ZSBhIHdpZHRoIGFuZCBoZWlnaHQgb2YgemVyby5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5JbnRlcnNlY3Rpb25cclxuICogQHNpbmNlIDMuMTEuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBPIC0gW3JlY3QsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3RBIC0gVGhlIGZpcnN0IFJlY3RhbmdsZSB0byBnZXQgdGhlIGludGVyc2VjdGlvbiBmcm9tLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdEIgLSBUaGUgc2Vjb25kIFJlY3RhbmdsZSB0byBnZXQgdGhlIGludGVyc2VjdGlvbiBmcm9tLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gW291dF0gLSBBIFJlY3RhbmdsZSB0byBzdG9yZSB0aGUgaW50ZXJzZWN0aW9uIHJlc3VsdHMgaW4uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gVGhlIGludGVyc2VjdGlvbiByZXN1bHQuIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSB6ZXJvLCBubyBpbnRlcnNlY3Rpb24gb2NjdXJyZWQuXHJcbiAqL1xyXG52YXIgSW50ZXJzZWN0aW9uID0gZnVuY3Rpb24gKHJlY3RBLCByZWN0Qiwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFJlY3RhbmdsZSgpOyB9XHJcblxyXG4gICAgaWYgKEludGVyc2VjdHMocmVjdEEsIHJlY3RCKSlcclxuICAgIHtcclxuICAgICAgICBvdXQueCA9IE1hdGgubWF4KHJlY3RBLngsIHJlY3RCLngpO1xyXG4gICAgICAgIG91dC55ID0gTWF0aC5tYXgocmVjdEEueSwgcmVjdEIueSk7XHJcbiAgICAgICAgb3V0LndpZHRoID0gTWF0aC5taW4ocmVjdEEucmlnaHQsIHJlY3RCLnJpZ2h0KSAtIG91dC54O1xyXG4gICAgICAgIG91dC5oZWlnaHQgPSBNYXRoLm1pbihyZWN0QS5ib3R0b20sIHJlY3RCLmJvdHRvbSkgLSBvdXQueTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBvdXQuc2V0RW1wdHkoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbnRlcnNlY3Rpb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Intersection.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/MarchingAnts.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/MarchingAnts.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Perimeter = __webpack_require__(/*! ./Perimeter */ \"./node_modules/phaser/src/geom/rectangle/Perimeter.js\");\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n\r\n/**\r\n * Return an array of points from the perimeter of the rectangle\r\n * each spaced out based on the quantity or step required\r\n *\r\n * @function Phaser.Geom.Rectangle.MarchingAnts\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point[]} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - [description]\r\n * @param {number} step - [description]\r\n * @param {integer} quantity - [description]\r\n * @param {(array|Phaser.Geom.Point[])} [out] - [description]\r\n *\r\n * @return {(array|Phaser.Geom.Point[])} [description]\r\n */\r\nvar MarchingAnts = function (rect, step, quantity, out)\r\n{\r\n if (out === undefined) { out = []; }\r\n\r\n if (!step && !quantity)\r\n {\r\n // Bail out\r\n return out;\r\n }\r\n\r\n // If step is a falsey value (false, null, 0, undefined, etc) then we calculate\r\n // it based on the quantity instead, otherwise we always use the step value\r\n if (!step)\r\n {\r\n step = Perimeter(rect) / quantity;\r\n }\r\n else\r\n {\r\n quantity = Math.round(Perimeter(rect) / step);\r\n }\r\n\r\n var x = rect.x;\r\n var y = rect.y;\r\n var face = 0;\r\n\r\n // Loop across each face of the rectangle\r\n\r\n for (var i = 0; i < quantity; i++)\r\n {\r\n out.push(new Point(x, y));\r\n\r\n switch (face)\r\n {\r\n\r\n // Top face\r\n case 0:\r\n x += step;\r\n\r\n if (x >= rect.right)\r\n {\r\n face = 1;\r\n y += (x - rect.right);\r\n x = rect.right;\r\n }\r\n break;\r\n\r\n // Right face\r\n case 1:\r\n y += step;\r\n\r\n if (y >= rect.bottom)\r\n {\r\n face = 2;\r\n x -= (y - rect.bottom);\r\n y = rect.bottom;\r\n }\r\n break;\r\n\r\n // Bottom face\r\n case 2:\r\n x -= step;\r\n\r\n if (x <= rect.left)\r\n {\r\n face = 3;\r\n y -= (rect.left - x);\r\n x = rect.left;\r\n }\r\n break;\r\n\r\n // Left face\r\n case 3:\r\n y -= step;\r\n\r\n if (y <= rect.top)\r\n {\r\n face = 0;\r\n y = rect.top;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = MarchingAnts;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9NYXJjaGluZ0FudHMuanM/NGY0NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMsMEVBQWE7QUFDckMsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjs7O0FBR3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxvQkFBb0I7QUFDakM7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsNEJBQTRCO0FBQ3ZDO0FBQ0EsWUFBWSw0QkFBNEI7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLG1CQUFtQixjQUFjO0FBQ2pDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvTWFyY2hpbmdBbnRzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUGVyaW1ldGVyID0gcmVxdWlyZSgnLi9QZXJpbWV0ZXInKTtcclxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vcG9pbnQvUG9pbnQnKTtcclxuXHJcblxyXG4vKipcclxuICogIFJldHVybiBhbiBhcnJheSBvZiBwb2ludHMgZnJvbSB0aGUgcGVyaW1ldGVyIG9mIHRoZSByZWN0YW5nbGVcclxuICogIGVhY2ggc3BhY2VkIG91dCBiYXNlZCBvbiB0aGUgcXVhbnRpdHkgb3Igc3RlcCByZXF1aXJlZFxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUmVjdGFuZ2xlLk1hcmNoaW5nQW50c1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50W119IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0IC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gc3RlcCAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBxdWFudGl0eSAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHsoYXJyYXl8UGhhc2VyLkdlb20uUG9pbnRbXSl9IFtvdXRdIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdlb20uUG9pbnRbXSl9IFtkZXNjcmlwdGlvbl1cclxuICovXHJcbnZhciBNYXJjaGluZ0FudHMgPSBmdW5jdGlvbiAocmVjdCwgc3RlcCwgcXVhbnRpdHksIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IFtdOyB9XHJcblxyXG4gICAgaWYgKCFzdGVwICYmICFxdWFudGl0eSlcclxuICAgIHtcclxuICAgICAgICAvLyAgQmFpbCBvdXRcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBJZiBzdGVwIGlzIGEgZmFsc2V5IHZhbHVlIChmYWxzZSwgbnVsbCwgMCwgdW5kZWZpbmVkLCBldGMpIHRoZW4gd2UgY2FsY3VsYXRlXHJcbiAgICAvLyAgaXQgYmFzZWQgb24gdGhlIHF1YW50aXR5IGluc3RlYWQsIG90aGVyd2lzZSB3ZSBhbHdheXMgdXNlIHRoZSBzdGVwIHZhbHVlXHJcbiAgICBpZiAoIXN0ZXApXHJcbiAgICB7XHJcbiAgICAgICAgc3RlcCA9IFBlcmltZXRlcihyZWN0KSAvIHF1YW50aXR5O1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHF1YW50aXR5ID0gTWF0aC5yb3VuZChQZXJpbWV0ZXIocmVjdCkgLyBzdGVwKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgeCA9IHJlY3QueDtcclxuICAgIHZhciB5ID0gcmVjdC55O1xyXG4gICAgdmFyIGZhY2UgPSAwO1xyXG5cclxuICAgIC8vICBMb29wIGFjcm9zcyBlYWNoIGZhY2Ugb2YgdGhlIHJlY3RhbmdsZVxyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVhbnRpdHk7IGkrKylcclxuICAgIHtcclxuICAgICAgICBvdXQucHVzaChuZXcgUG9pbnQoeCwgeSkpO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKGZhY2UpXHJcbiAgICAgICAge1xyXG5cclxuICAgICAgICAgICAgLy8gIFRvcCBmYWNlXHJcbiAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgIHggKz0gc3RlcDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoeCA+PSByZWN0LnJpZ2h0KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGZhY2UgPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIHkgKz0gKHggLSByZWN0LnJpZ2h0KTtcclxuICAgICAgICAgICAgICAgICAgICB4ID0gcmVjdC5yaWdodDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgLy8gIFJpZ2h0IGZhY2VcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgeSArPSBzdGVwO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh5ID49IHJlY3QuYm90dG9tKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGZhY2UgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgIHggLT0gKHkgLSByZWN0LmJvdHRvbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgeSA9IHJlY3QuYm90dG9tO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAvLyAgQm90dG9tIGZhY2VcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgeCAtPSBzdGVwO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh4IDw9IHJlY3QubGVmdClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBmYWNlID0gMztcclxuICAgICAgICAgICAgICAgICAgICB5IC09IChyZWN0LmxlZnQgLSB4KTtcclxuICAgICAgICAgICAgICAgICAgICB4ID0gcmVjdC5sZWZ0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAvLyAgTGVmdCBmYWNlXHJcbiAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgIHkgLT0gc3RlcDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoeSA8PSByZWN0LnRvcClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBmYWNlID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB5ID0gcmVjdC50b3A7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTWFyY2hpbmdBbnRzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/MarchingAnts.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/MergePoints.js":
/*!***************************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/MergePoints.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Merges a Rectangle with a list of points by repositioning and/or resizing it such that all points are located on or within its bounds.\r\n *\r\n * @function Phaser.Geom.Rectangle.MergePoints\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [target,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} target - The Rectangle which should be merged.\r\n * @param {Phaser.Geom.Point[]} points - An array of Points (or any object with public `x` and `y` properties) which should be merged with the Rectangle.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The modified Rectangle.\r\n */\r\nvar MergePoints = function (target, points)\r\n{\r\n var minX = target.x;\r\n var maxX = target.right;\r\n var minY = target.y;\r\n var maxY = target.bottom;\r\n\r\n for (var i = 0; i < points.length; i++)\r\n {\r\n minX = Math.min(minX, points[i].x);\r\n maxX = Math.max(maxX, points[i].x);\r\n minY = Math.min(minY, points[i].y);\r\n maxY = Math.max(maxY, points[i].y);\r\n }\r\n\r\n target.x = minX;\r\n target.y = minY;\r\n target.width = maxX - minX;\r\n target.height = maxY - minY;\r\n\r\n return target;\r\n};\r\n\r\nmodule.exports = MergePoints;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9NZXJnZVBvaW50cy5qcz8xNjhkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcsb0JBQW9CO0FBQy9CO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLG1CQUFtQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL01lcmdlUG9pbnRzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogTWVyZ2VzIGEgUmVjdGFuZ2xlIHdpdGggYSBsaXN0IG9mIHBvaW50cyBieSByZXBvc2l0aW9uaW5nIGFuZC9vciByZXNpemluZyBpdCBzdWNoIHRoYXQgYWxsIHBvaW50cyBhcmUgbG9jYXRlZCBvbiBvciB3aXRoaW4gaXRzIGJvdW5kcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5NZXJnZVBvaW50c1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gTyAtIFt0YXJnZXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHRhcmdldCAtIFRoZSBSZWN0YW5nbGUgd2hpY2ggc2hvdWxkIGJlIG1lcmdlZC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2ludFtdfSBwb2ludHMgLSBBbiBhcnJheSBvZiBQb2ludHMgKG9yIGFueSBvYmplY3Qgd2l0aCBwdWJsaWMgYHhgIGFuZCBgeWAgcHJvcGVydGllcykgd2hpY2ggc2hvdWxkIGJlIG1lcmdlZCB3aXRoIHRoZSBSZWN0YW5nbGUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gVGhlIG1vZGlmaWVkIFJlY3RhbmdsZS5cclxuICovXHJcbnZhciBNZXJnZVBvaW50cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHBvaW50cylcclxue1xyXG4gICAgdmFyIG1pblggPSB0YXJnZXQueDtcclxuICAgIHZhciBtYXhYID0gdGFyZ2V0LnJpZ2h0O1xyXG4gICAgdmFyIG1pblkgPSB0YXJnZXQueTtcclxuICAgIHZhciBtYXhZID0gdGFyZ2V0LmJvdHRvbTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgcG9pbnRzW2ldLngpO1xyXG4gICAgICAgIG1heFggPSBNYXRoLm1heChtYXhYLCBwb2ludHNbaV0ueCk7XHJcbiAgICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIHBvaW50c1tpXS55KTtcclxuICAgICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgcG9pbnRzW2ldLnkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRhcmdldC54ID0gbWluWDtcclxuICAgIHRhcmdldC55ID0gbWluWTtcclxuICAgIHRhcmdldC53aWR0aCA9IG1heFggLSBtaW5YO1xyXG4gICAgdGFyZ2V0LmhlaWdodCA9IG1heFkgLSBtaW5ZO1xyXG5cclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE1lcmdlUG9pbnRzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/MergePoints.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/MergeRect.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/MergeRect.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n// Merges source rectangle into target rectangle and returns target\r\n// Neither rect should have negative widths or heights\r\n\r\n/**\r\n * Merges the source rectangle into the target rectangle and returns the target.\r\n * Neither rectangle should have a negative width or height.\r\n *\r\n * @function Phaser.Geom.Rectangle.MergeRect\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [target,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} target - Target rectangle. Will be modified to include source rectangle.\r\n * @param {Phaser.Geom.Rectangle} source - Rectangle that will be merged into target rectangle.\r\n *\r\n * @return {Phaser.Geom.Rectangle} Modified target rectangle that contains source rectangle.\r\n */\r\nvar MergeRect = function (target, source)\r\n{\r\n var minX = Math.min(target.x, source.x);\r\n var maxX = Math.max(target.right, source.right);\r\n\r\n target.x = minX;\r\n target.width = maxX - minX;\r\n\r\n var minY = Math.min(target.y, source.y);\r\n var maxY = Math.max(target.bottom, source.bottom);\r\n\r\n target.y = minY;\r\n target.height = maxY - minY;\r\n\r\n return target;\r\n};\r\n\r\nmodule.exports = MergeRect;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9NZXJnZVJlY3QuanM/ODUwMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsc0JBQXNCO0FBQ25DO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxzQkFBc0I7QUFDakM7QUFDQSxZQUFZLHNCQUFzQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9NZXJnZVJlY3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8vICBNZXJnZXMgc291cmNlIHJlY3RhbmdsZSBpbnRvIHRhcmdldCByZWN0YW5nbGUgYW5kIHJldHVybnMgdGFyZ2V0XHJcbi8vICBOZWl0aGVyIHJlY3Qgc2hvdWxkIGhhdmUgbmVnYXRpdmUgd2lkdGhzIG9yIGhlaWdodHNcclxuXHJcbi8qKlxyXG4gKiBNZXJnZXMgdGhlIHNvdXJjZSByZWN0YW5nbGUgaW50byB0aGUgdGFyZ2V0IHJlY3RhbmdsZSBhbmQgcmV0dXJucyB0aGUgdGFyZ2V0LlxyXG4gKiBOZWl0aGVyIHJlY3RhbmdsZSBzaG91bGQgaGF2ZSBhIG5lZ2F0aXZlIHdpZHRoIG9yIGhlaWdodC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5NZXJnZVJlY3RcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IE8gLSBbdGFyZ2V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSB0YXJnZXQgLSBUYXJnZXQgcmVjdGFuZ2xlLiBXaWxsIGJlIG1vZGlmaWVkIHRvIGluY2x1ZGUgc291cmNlIHJlY3RhbmdsZS5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHNvdXJjZSAtIFJlY3RhbmdsZSB0aGF0IHdpbGwgYmUgbWVyZ2VkIGludG8gdGFyZ2V0IHJlY3RhbmdsZS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBNb2RpZmllZCB0YXJnZXQgcmVjdGFuZ2xlIHRoYXQgY29udGFpbnMgc291cmNlIHJlY3RhbmdsZS5cclxuICovXHJcbnZhciBNZXJnZVJlY3QgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpXHJcbntcclxuICAgIHZhciBtaW5YID0gTWF0aC5taW4odGFyZ2V0LngsIHNvdXJjZS54KTtcclxuICAgIHZhciBtYXhYID0gTWF0aC5tYXgodGFyZ2V0LnJpZ2h0LCBzb3VyY2UucmlnaHQpO1xyXG5cclxuICAgIHRhcmdldC54ID0gbWluWDtcclxuICAgIHRhcmdldC53aWR0aCA9IG1heFggLSBtaW5YO1xyXG5cclxuICAgIHZhciBtaW5ZID0gTWF0aC5taW4odGFyZ2V0LnksIHNvdXJjZS55KTtcclxuICAgIHZhciBtYXhZID0gTWF0aC5tYXgodGFyZ2V0LmJvdHRvbSwgc291cmNlLmJvdHRvbSk7XHJcblxyXG4gICAgdGFyZ2V0LnkgPSBtaW5ZO1xyXG4gICAgdGFyZ2V0LmhlaWdodCA9IG1heFkgLSBtaW5ZO1xyXG5cclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE1lcmdlUmVjdDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/MergeRect.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/MergeXY.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/MergeXY.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Merges a Rectangle with a point by repositioning and/or resizing it so that the point is on or within its bounds.\r\n *\r\n * @function Phaser.Geom.Rectangle.MergeXY\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [target,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} target - The Rectangle which should be merged and modified.\r\n * @param {number} x - The X coordinate of the point which should be merged.\r\n * @param {number} y - The Y coordinate of the point which should be merged.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The modified `target` Rectangle.\r\n */\r\nvar MergeXY = function (target, x, y)\r\n{\r\n var minX = Math.min(target.x, x);\r\n var maxX = Math.max(target.right, x);\r\n\r\n target.x = minX;\r\n target.width = maxX - minX;\r\n\r\n var minY = Math.min(target.y, y);\r\n var maxY = Math.max(target.bottom, y);\r\n\r\n target.y = minY;\r\n target.height = maxY - minY;\r\n\r\n return target;\r\n};\r\n\r\nmodule.exports = MergeXY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9NZXJnZVhZLmpzPzc1NjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsc0JBQXNCO0FBQ25DO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksc0JBQXNCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL01lcmdlWFkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBNZXJnZXMgYSBSZWN0YW5nbGUgd2l0aCBhIHBvaW50IGJ5IHJlcG9zaXRpb25pbmcgYW5kL29yIHJlc2l6aW5nIGl0IHNvIHRoYXQgdGhlIHBvaW50IGlzIG9uIG9yIHdpdGhpbiBpdHMgYm91bmRzLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUmVjdGFuZ2xlLk1lcmdlWFlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IE8gLSBbdGFyZ2V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSB0YXJnZXQgLSBUaGUgUmVjdGFuZ2xlIHdoaWNoIHNob3VsZCBiZSBtZXJnZWQgYW5kIG1vZGlmaWVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHdoaWNoIHNob3VsZCBiZSBtZXJnZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgd2hpY2ggc2hvdWxkIGJlIG1lcmdlZC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSBUaGUgbW9kaWZpZWQgYHRhcmdldGAgUmVjdGFuZ2xlLlxyXG4gKi9cclxudmFyIE1lcmdlWFkgPSBmdW5jdGlvbiAodGFyZ2V0LCB4LCB5KVxyXG57XHJcbiAgICB2YXIgbWluWCA9IE1hdGgubWluKHRhcmdldC54LCB4KTtcclxuICAgIHZhciBtYXhYID0gTWF0aC5tYXgodGFyZ2V0LnJpZ2h0LCB4KTtcclxuXHJcbiAgICB0YXJnZXQueCA9IG1pblg7XHJcbiAgICB0YXJnZXQud2lkdGggPSBtYXhYIC0gbWluWDtcclxuXHJcbiAgICB2YXIgbWluWSA9IE1hdGgubWluKHRhcmdldC55LCB5KTtcclxuICAgIHZhciBtYXhZID0gTWF0aC5tYXgodGFyZ2V0LmJvdHRvbSwgeSk7XHJcblxyXG4gICAgdGFyZ2V0LnkgPSBtaW5ZO1xyXG4gICAgdGFyZ2V0LmhlaWdodCA9IG1heFkgLSBtaW5ZO1xyXG5cclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE1lcmdlWFk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/MergeXY.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/Offset.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/Offset.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Nudges (translates) the top left corner of a Rectangle by a given offset.\r\n *\r\n * @function Phaser.Geom.Rectangle.Offset\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [rect,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to adjust.\r\n * @param {number} x - The distance to move the Rectangle horizontally.\r\n * @param {number} y - The distance to move the Rectangle vertically.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The adjusted Rectangle.\r\n */\r\nvar Offset = function (rect, x, y)\r\n{\r\n rect.x += x;\r\n rect.y += y;\r\n\r\n return rect;\r\n};\r\n\r\nmodule.exports = Offset;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9PZmZzZXQuanM/YjJmYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxzQkFBc0I7QUFDbkM7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvT2Zmc2V0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogTnVkZ2VzICh0cmFuc2xhdGVzKSB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIGEgUmVjdGFuZ2xlIGJ5IGEgZ2l2ZW4gb2Zmc2V0LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUmVjdGFuZ2xlLk9mZnNldFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gTyAtIFtyZWN0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0IC0gVGhlIFJlY3RhbmdsZSB0byBhZGp1c3QuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIGRpc3RhbmNlIHRvIG1vdmUgdGhlIFJlY3RhbmdsZSBob3Jpem9udGFsbHkuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIGRpc3RhbmNlIHRvIG1vdmUgdGhlIFJlY3RhbmdsZSB2ZXJ0aWNhbGx5LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IFRoZSBhZGp1c3RlZCBSZWN0YW5nbGUuXHJcbiAqL1xyXG52YXIgT2Zmc2V0ID0gZnVuY3Rpb24gKHJlY3QsIHgsIHkpXHJcbntcclxuICAgIHJlY3QueCArPSB4O1xyXG4gICAgcmVjdC55ICs9IHk7XHJcblxyXG4gICAgcmV0dXJuIHJlY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE9mZnNldDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Offset.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/OffsetPoint.js":
/*!***************************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/OffsetPoint.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Nudges (translates) the top-left corner of a Rectangle by the coordinates of a point (translation vector).\r\n *\r\n * @function Phaser.Geom.Rectangle.OffsetPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [rect,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to adjust.\r\n * @param {(Phaser.Geom.Point|Phaser.Math.Vector2)} point - The point whose coordinates should be used as an offset.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The adjusted Rectangle.\r\n */\r\nvar OffsetPoint = function (rect, point)\r\n{\r\n rect.x += point.x;\r\n rect.y += point.y;\r\n\r\n return rect;\r\n};\r\n\r\nmodule.exports = OffsetPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9PZmZzZXRQb2ludC5qcz80ZmFkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcsd0NBQXdDO0FBQ25EO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvT2Zmc2V0UG9pbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBOdWRnZXMgKHRyYW5zbGF0ZXMpIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgYSBSZWN0YW5nbGUgYnkgdGhlIGNvb3JkaW5hdGVzIG9mIGEgcG9pbnQgKHRyYW5zbGF0aW9uIHZlY3RvcikuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuT2Zmc2V0UG9pbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IE8gLSBbcmVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdCAtIFRoZSBSZWN0YW5nbGUgdG8gYWRqdXN0LlxyXG4gKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxQaGFzZXIuTWF0aC5WZWN0b3IyKX0gcG9pbnQgLSBUaGUgcG9pbnQgd2hvc2UgY29vcmRpbmF0ZXMgc2hvdWxkIGJlIHVzZWQgYXMgYW4gb2Zmc2V0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IFRoZSBhZGp1c3RlZCBSZWN0YW5nbGUuXHJcbiAqL1xyXG52YXIgT2Zmc2V0UG9pbnQgPSBmdW5jdGlvbiAocmVjdCwgcG9pbnQpXHJcbntcclxuICAgIHJlY3QueCArPSBwb2ludC54O1xyXG4gICAgcmVjdC55ICs9IHBvaW50Lnk7XHJcblxyXG4gICAgcmV0dXJuIHJlY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE9mZnNldFBvaW50O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/OffsetPoint.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/Overlaps.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/Overlaps.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Checks if two Rectangles overlap. If a Rectangle is within another Rectangle, the two will be considered overlapping. Thus, the Rectangles are treated as \"solid\".\r\n *\r\n * @function Phaser.Geom.Rectangle.Overlaps\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rectA - The first Rectangle to check.\r\n * @param {Phaser.Geom.Rectangle} rectB - The second Rectangle to check.\r\n *\r\n * @return {boolean} `true` if the two Rectangles overlap, `false` otherwise.\r\n */\r\nvar Overlaps = function (rectA, rectB)\r\n{\r\n return (\r\n rectA.x < rectB.right &&\r\n rectA.right > rectB.x &&\r\n rectA.y < rectB.bottom &&\r\n rectA.bottom > rectB.y\r\n );\r\n};\r\n\r\nmodule.exports = Overlaps;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9PdmVybGFwcy5qcz9iMWRkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLHNCQUFzQjtBQUNqQztBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL092ZXJsYXBzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ2hlY2tzIGlmIHR3byBSZWN0YW5nbGVzIG92ZXJsYXAuIElmIGEgUmVjdGFuZ2xlIGlzIHdpdGhpbiBhbm90aGVyIFJlY3RhbmdsZSwgdGhlIHR3byB3aWxsIGJlIGNvbnNpZGVyZWQgb3ZlcmxhcHBpbmcuIFRodXMsIHRoZSBSZWN0YW5nbGVzIGFyZSB0cmVhdGVkIGFzIFwic29saWRcIi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5PdmVybGFwc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3RBIC0gVGhlIGZpcnN0IFJlY3RhbmdsZSB0byBjaGVjay5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3RCIC0gVGhlIHNlY29uZCBSZWN0YW5nbGUgdG8gY2hlY2suXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdHdvIFJlY3RhbmdsZXMgb3ZlcmxhcCwgYGZhbHNlYCBvdGhlcndpc2UuXHJcbiAqL1xyXG52YXIgT3ZlcmxhcHMgPSBmdW5jdGlvbiAocmVjdEEsIHJlY3RCKVxyXG57XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIHJlY3RBLnggPCByZWN0Qi5yaWdodCAmJlxyXG4gICAgICAgIHJlY3RBLnJpZ2h0ID4gcmVjdEIueCAmJlxyXG4gICAgICAgIHJlY3RBLnkgPCByZWN0Qi5ib3R0b20gJiZcclxuICAgICAgICByZWN0QS5ib3R0b20gPiByZWN0Qi55XHJcbiAgICApO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBPdmVybGFwcztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Overlaps.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/Perimeter.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/Perimeter.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Calculates the perimeter of a Rectangle.\r\n *\r\n * @function Phaser.Geom.Rectangle.Perimeter\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to use.\r\n *\r\n * @return {number} The perimeter of the Rectangle, equal to `(width * 2) + (height * 2)`.\r\n */\r\nvar Perimeter = function (rect)\r\n{\r\n return 2 * (rect.width + rect.height);\r\n};\r\n\r\nmodule.exports = Perimeter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9QZXJpbWV0ZXIuanM/NmYyNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakM7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL1BlcmltZXRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHBlcmltZXRlciBvZiBhIFJlY3RhbmdsZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5QZXJpbWV0ZXJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0IC0gVGhlIFJlY3RhbmdsZSB0byB1c2UuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHBlcmltZXRlciBvZiB0aGUgUmVjdGFuZ2xlLCBlcXVhbCB0byBgKHdpZHRoICogMikgKyAoaGVpZ2h0ICogMilgLlxyXG4gKi9cclxudmFyIFBlcmltZXRlciA9IGZ1bmN0aW9uIChyZWN0KVxyXG57XHJcbiAgICByZXR1cm4gMiAqIChyZWN0LndpZHRoICsgcmVjdC5oZWlnaHQpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQZXJpbWV0ZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Perimeter.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/PerimeterPoint.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/PerimeterPoint.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\nvar DegToRad = __webpack_require__(/*! ../../math/DegToRad */ \"./node_modules/phaser/src/math/DegToRad.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Geom.Rectangle.PerimeterPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rectangle - [description]\r\n * @param {integer} angle - [description]\r\n * @param {Phaser.Geom.Point} [out] - [description]\r\n *\r\n * @return {Phaser.Geom.Point} [description]\r\n */\r\nvar PerimeterPoint = function (rectangle, angle, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n angle = DegToRad(angle);\r\n\r\n var s = Math.sin(angle);\r\n var c = Math.cos(angle);\r\n\r\n var dx = (c > 0) ? rectangle.width / 2 : rectangle.width / -2;\r\n var dy = (s > 0) ? rectangle.height / 2 : rectangle.height / -2;\r\n\r\n if (Math.abs(dx * s) < Math.abs(dy * c))\r\n {\r\n dy = (dx * s) / c;\r\n }\r\n else\r\n {\r\n dx = (dy * c) / s;\r\n }\r\n\r\n out.x = dx + rectangle.centerX;\r\n out.y = dy + rectangle.centerY;\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = PerimeterPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9QZXJpbWV0ZXJQb2ludC5qcz9jNTNmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMscUVBQWdCO0FBQ3BDLGVBQWUsbUJBQU8sQ0FBQyx1RUFBcUI7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakMsV0FBVyxRQUFRO0FBQ25CLFdBQVcsa0JBQWtCO0FBQzdCO0FBQ0EsWUFBWSxrQkFBa0I7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLG1CQUFtQjs7QUFFL0M7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvUGVyaW1ldGVyUG9pbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQb2ludCA9IHJlcXVpcmUoJy4uL3BvaW50L1BvaW50Jyk7XHJcbnZhciBEZWdUb1JhZCA9IHJlcXVpcmUoJy4uLy4uL21hdGgvRGVnVG9SYWQnKTtcclxuXHJcbi8qKlxyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuUGVyaW1ldGVyUG9pbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3RhbmdsZSAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBhbmdsZSAtIFtkZXNjcmlwdGlvbl1cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2ludH0gW291dF0gLSBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlBvaW50fSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG52YXIgUGVyaW1ldGVyUG9pbnQgPSBmdW5jdGlvbiAocmVjdGFuZ2xlLCBhbmdsZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFBvaW50KCk7IH1cclxuXHJcbiAgICBhbmdsZSA9IERlZ1RvUmFkKGFuZ2xlKTtcclxuXHJcbiAgICB2YXIgcyA9IE1hdGguc2luKGFuZ2xlKTtcclxuICAgIHZhciBjID0gTWF0aC5jb3MoYW5nbGUpO1xyXG5cclxuICAgIHZhciBkeCA9IChjID4gMCkgPyByZWN0YW5nbGUud2lkdGggLyAyIDogcmVjdGFuZ2xlLndpZHRoIC8gLTI7XHJcbiAgICB2YXIgZHkgPSAocyA+IDApID8gcmVjdGFuZ2xlLmhlaWdodCAvIDIgOiByZWN0YW5nbGUuaGVpZ2h0IC8gLTI7XHJcblxyXG4gICAgaWYgKE1hdGguYWJzKGR4ICogcykgPCBNYXRoLmFicyhkeSAqIGMpKVxyXG4gICAge1xyXG4gICAgICAgIGR5ID0gKGR4ICogcykgLyBjO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIGR4ID0gKGR5ICogYykgLyBzO1xyXG4gICAgfVxyXG5cclxuICAgIG91dC54ID0gZHggKyByZWN0YW5nbGUuY2VudGVyWDtcclxuICAgIG91dC55ID0gZHkgKyByZWN0YW5nbGUuY2VudGVyWTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQZXJpbWV0ZXJQb2ludDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/PerimeterPoint.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/Random.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/Random.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Returns a random point within a Rectangle.\r\n *\r\n * @function Phaser.Geom.Rectangle.Random\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The Rectangle to return a point from.\r\n * @param {Phaser.Geom.Point} out - The object to update with the point's coordinates.\r\n *\r\n * @return {Phaser.Geom.Point} The modified `out` object, or a new Point if none was provided.\r\n */\r\nvar Random = function (rect, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n out.x = rect.x + (Math.random() * rect.width);\r\n out.y = rect.y + (Math.random() * rect.height);\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = Random;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9SYW5kb20uanM/M2FhYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHFFQUFnQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLGtCQUFrQjtBQUM3QjtBQUNBLFlBQVksa0JBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7O0FBRS9DO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL1JhbmRvbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vcG9pbnQvUG9pbnQnKTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgcmFuZG9tIHBvaW50IHdpdGhpbiBhIFJlY3RhbmdsZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5SYW5kb21cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3QgLSBUaGUgUmVjdGFuZ2xlIHRvIHJldHVybiBhIHBvaW50IGZyb20uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9pbnR9IG91dCAtIFRoZSBvYmplY3QgdG8gdXBkYXRlIHdpdGggdGhlIHBvaW50J3MgY29vcmRpbmF0ZXMuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlBvaW50fSBUaGUgbW9kaWZpZWQgYG91dGAgb2JqZWN0LCBvciBhIG5ldyBQb2ludCBpZiBub25lIHdhcyBwcm92aWRlZC5cclxuICovXHJcbnZhciBSYW5kb20gPSBmdW5jdGlvbiAocmVjdCwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFBvaW50KCk7IH1cclxuXHJcbiAgICBvdXQueCA9IHJlY3QueCArIChNYXRoLnJhbmRvbSgpICogcmVjdC53aWR0aCk7XHJcbiAgICBvdXQueSA9IHJlY3QueSArIChNYXRoLnJhbmRvbSgpICogcmVjdC5oZWlnaHQpO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJhbmRvbTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Random.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/RandomOutside.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/RandomOutside.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Between = __webpack_require__(/*! ../../math/Between */ \"./node_modules/phaser/src/math/Between.js\");\r\nvar ContainsRect = __webpack_require__(/*! ./ContainsRect */ \"./node_modules/phaser/src/geom/rectangle/ContainsRect.js\");\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Calculates a random point that lies within the `outer` Rectangle, but outside of the `inner` Rectangle.\r\n * The inner Rectangle must be fully contained within the outer rectangle.\r\n *\r\n * @function Phaser.Geom.Rectangle.RandomOutside\r\n * @since 3.10.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} outer - The outer Rectangle to get the random point within.\r\n * @param {Phaser.Geom.Rectangle} inner - The inner Rectangle to exclude from the returned point.\r\n * @param {Phaser.Geom.Point} [out] - A Point, or Point-like object to store the result in. If not specified, a new Point will be created.\r\n *\r\n * @return {Phaser.Geom.Point} A Point object containing the random values in its `x` and `y` properties.\r\n */\r\nvar RandomOutside = function (outer, inner, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n if (ContainsRect(outer, inner))\r\n {\r\n // Pick a random quadrant\r\n //\r\n // The quadrants don't extend the full widths / heights of the outer rect to give\r\n // us a better uniformed distribution, otherwise you get clumping in the corners where\r\n // the 4 quads would overlap\r\n\r\n switch (Between(0, 3))\r\n {\r\n case 0: // Top\r\n out.x = outer.x + (Math.random() * (inner.right - outer.x));\r\n out.y = outer.y + (Math.random() * (inner.top - outer.y));\r\n break;\r\n\r\n case 1: // Bottom\r\n out.x = inner.x + (Math.random() * (outer.right - inner.x));\r\n out.y = inner.bottom + (Math.random() * (outer.bottom - inner.bottom));\r\n break;\r\n\r\n case 2: // Left\r\n out.x = outer.x + (Math.random() * (inner.x - outer.x));\r\n out.y = inner.y + (Math.random() * (outer.bottom - inner.y));\r\n break;\r\n\r\n case 3: // Right\r\n out.x = inner.right + (Math.random() * (outer.right - inner.right));\r\n out.y = outer.y + (Math.random() * (inner.bottom - outer.y));\r\n break;\r\n }\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = RandomOutside;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9SYW5kb21PdXRzaWRlLmpzPzQ4NTAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxxRUFBb0I7QUFDMUMsbUJBQW1CLG1CQUFPLENBQUMsZ0ZBQWdCO0FBQzNDLFlBQVksbUJBQU8sQ0FBQyxxRUFBZ0I7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLGtCQUFrQjtBQUM3QjtBQUNBLFlBQVksa0JBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL1JhbmRvbU91dHNpZGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBCZXR3ZWVuID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9CZXR3ZWVuJyk7XHJcbnZhciBDb250YWluc1JlY3QgPSByZXF1aXJlKCcuL0NvbnRhaW5zUmVjdCcpO1xyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgYSByYW5kb20gcG9pbnQgdGhhdCBsaWVzIHdpdGhpbiB0aGUgYG91dGVyYCBSZWN0YW5nbGUsIGJ1dCBvdXRzaWRlIG9mIHRoZSBgaW5uZXJgIFJlY3RhbmdsZS5cclxuICogVGhlIGlubmVyIFJlY3RhbmdsZSBtdXN0IGJlIGZ1bGx5IGNvbnRhaW5lZCB3aXRoaW4gdGhlIG91dGVyIHJlY3RhbmdsZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5SYW5kb21PdXRzaWRlXHJcbiAqIEBzaW5jZSAzLjEwLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gb3V0ZXIgLSBUaGUgb3V0ZXIgUmVjdGFuZ2xlIHRvIGdldCB0aGUgcmFuZG9tIHBvaW50IHdpdGhpbi5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IGlubmVyIC0gVGhlIGlubmVyIFJlY3RhbmdsZSB0byBleGNsdWRlIGZyb20gdGhlIHJldHVybmVkIHBvaW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBbb3V0XSAtIEEgUG9pbnQsIG9yIFBvaW50LWxpa2Ugb2JqZWN0IHRvIHN0b3JlIHRoZSByZXN1bHQgaW4uIElmIG5vdCBzcGVjaWZpZWQsIGEgbmV3IFBvaW50IHdpbGwgYmUgY3JlYXRlZC5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJhbmRvbSB2YWx1ZXMgaW4gaXRzIGB4YCBhbmQgYHlgIHByb3BlcnRpZXMuXHJcbiAqL1xyXG52YXIgUmFuZG9tT3V0c2lkZSA9IGZ1bmN0aW9uIChvdXRlciwgaW5uZXIsIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBQb2ludCgpOyB9XHJcblxyXG4gICAgaWYgKENvbnRhaW5zUmVjdChvdXRlciwgaW5uZXIpKVxyXG4gICAge1xyXG4gICAgICAgIC8vICBQaWNrIGEgcmFuZG9tIHF1YWRyYW50XHJcbiAgICAgICAgLy9cclxuICAgICAgICAvLyAgVGhlIHF1YWRyYW50cyBkb24ndCBleHRlbmQgdGhlIGZ1bGwgd2lkdGhzIC8gaGVpZ2h0cyBvZiB0aGUgb3V0ZXIgcmVjdCB0byBnaXZlXHJcbiAgICAgICAgLy8gIHVzIGEgYmV0dGVyIHVuaWZvcm1lZCBkaXN0cmlidXRpb24sIG90aGVyd2lzZSB5b3UgZ2V0IGNsdW1waW5nIGluIHRoZSBjb3JuZXJzIHdoZXJlXHJcbiAgICAgICAgLy8gIHRoZSA0IHF1YWRzIHdvdWxkIG92ZXJsYXBcclxuXHJcbiAgICAgICAgc3dpdGNoIChCZXR3ZWVuKDAsIDMpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY2FzZSAwOiAvLyBUb3BcclxuICAgICAgICAgICAgICAgIG91dC54ID0gb3V0ZXIueCArIChNYXRoLnJhbmRvbSgpICogKGlubmVyLnJpZ2h0IC0gb3V0ZXIueCkpO1xyXG4gICAgICAgICAgICAgICAgb3V0LnkgPSBvdXRlci55ICsgKE1hdGgucmFuZG9tKCkgKiAoaW5uZXIudG9wIC0gb3V0ZXIueSkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDE6IC8vIEJvdHRvbVxyXG4gICAgICAgICAgICAgICAgb3V0LnggPSBpbm5lci54ICsgKE1hdGgucmFuZG9tKCkgKiAob3V0ZXIucmlnaHQgLSBpbm5lci54KSk7XHJcbiAgICAgICAgICAgICAgICBvdXQueSA9IGlubmVyLmJvdHRvbSArIChNYXRoLnJhbmRvbSgpICogKG91dGVyLmJvdHRvbSAtIGlubmVyLmJvdHRvbSkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDI6IC8vIExlZnRcclxuICAgICAgICAgICAgICAgIG91dC54ID0gb3V0ZXIueCArIChNYXRoLnJhbmRvbSgpICogKGlubmVyLnggLSBvdXRlci54KSk7XHJcbiAgICAgICAgICAgICAgICBvdXQueSA9IGlubmVyLnkgKyAoTWF0aC5yYW5kb20oKSAqIChvdXRlci5ib3R0b20gLSBpbm5lci55KSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMzogLy8gUmlnaHRcclxuICAgICAgICAgICAgICAgIG91dC54ID0gaW5uZXIucmlnaHQgKyAoTWF0aC5yYW5kb20oKSAqIChvdXRlci5yaWdodCAtIGlubmVyLnJpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICBvdXQueSA9IG91dGVyLnkgKyAoTWF0aC5yYW5kb20oKSAqIChpbm5lci5ib3R0b20gLSBvdXRlci55KSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmFuZG9tT3V0c2lkZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/RandomOutside.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/Rectangle.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/Rectangle.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/rectangle/Contains.js\");\r\nvar GetPoint = __webpack_require__(/*! ./GetPoint */ \"./node_modules/phaser/src/geom/rectangle/GetPoint.js\");\r\nvar GetPoints = __webpack_require__(/*! ./GetPoints */ \"./node_modules/phaser/src/geom/rectangle/GetPoints.js\");\r\nvar GEOM_CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/geom/const.js\");\r\nvar Line = __webpack_require__(/*! ../line/Line */ \"./node_modules/phaser/src/geom/line/Line.js\");\r\nvar Random = __webpack_require__(/*! ./Random */ \"./node_modules/phaser/src/geom/rectangle/Random.js\");\r\n\r\n/**\r\n * @classdesc\r\n * Encapsulates a 2D rectangle defined by its corner point in the top-left and its extends in x (width) and y (height)\r\n *\r\n * @class Rectangle\r\n * @memberof Phaser.Geom\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x=0] - The X coordinate of the top left corner of the Rectangle.\r\n * @param {number} [y=0] - The Y coordinate of the top left corner of the Rectangle.\r\n * @param {number} [width=0] - The width of the Rectangle.\r\n * @param {number} [height=0] - The height of the Rectangle.\r\n */\r\nvar Rectangle = new Class({\r\n\r\n initialize:\r\n\r\n function Rectangle (x, y, width, height)\r\n {\r\n if (x === undefined) { x = 0; }\r\n if (y === undefined) { y = 0; }\r\n if (width === undefined) { width = 0; }\r\n if (height === undefined) { height = 0; }\r\n\r\n /**\r\n * The geometry constant type of this object: `GEOM_CONST.RECTANGLE`.\r\n * Used for fast type comparisons.\r\n *\r\n * @name Phaser.Geom.Rectangle#type\r\n * @type {integer}\r\n * @readonly\r\n * @since 3.19.0\r\n */\r\n this.type = GEOM_CONST.RECTANGLE;\r\n\r\n /**\r\n * The X coordinate of the top left corner of the Rectangle.\r\n *\r\n * @name Phaser.Geom.Rectangle#x\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.x = x;\r\n\r\n /**\r\n * The Y coordinate of the top left corner of the Rectangle.\r\n *\r\n * @name Phaser.Geom.Rectangle#y\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.y = y;\r\n\r\n /**\r\n * The width of the Rectangle, i.e. the distance between its left side (defined by `x`) and its right side.\r\n *\r\n * @name Phaser.Geom.Rectangle#width\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.width = width;\r\n\r\n /**\r\n * The height of the Rectangle, i.e. the distance between its top side (defined by `y`) and its bottom side.\r\n *\r\n * @name Phaser.Geom.Rectangle#height\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.height = height;\r\n },\r\n\r\n /**\r\n * Checks if the given point is inside the Rectangle's bounds.\r\n *\r\n * @method Phaser.Geom.Rectangle#contains\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The X coordinate of the point to check.\r\n * @param {number} y - The Y coordinate of the point to check.\r\n *\r\n * @return {boolean} `true` if the point is within the Rectangle's bounds, otherwise `false`.\r\n */\r\n contains: function (x, y)\r\n {\r\n return Contains(this, x, y);\r\n },\r\n\r\n /**\r\n * Calculates the coordinates of a point at a certain `position` on the Rectangle's perimeter.\r\n * \r\n * The `position` is a fraction between 0 and 1 which defines how far into the perimeter the point is.\r\n * \r\n * A value of 0 or 1 returns the point at the top left corner of the rectangle, while a value of 0.5 returns the point at the bottom right corner of the rectangle. Values between 0 and 0.5 are on the top or the right side and values between 0.5 and 1 are on the bottom or the left side.\r\n *\r\n * @method Phaser.Geom.Rectangle#getPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [output,$return]\r\n *\r\n * @param {number} position - The normalized distance into the Rectangle's perimeter to return.\r\n * @param {(Phaser.Geom.Point|object)} [output] - An object to update with the `x` and `y` coordinates of the point.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} The updated `output` object, or a new Point if no `output` object was given.\r\n */\r\n getPoint: function (position, output)\r\n {\r\n return GetPoint(this, position, output);\r\n },\r\n\r\n /**\r\n * Returns an array of points from the perimeter of the Rectangle, each spaced out based on the quantity or step required.\r\n *\r\n * @method Phaser.Geom.Rectangle#getPoints\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point[]} O - [output,$return]\r\n *\r\n * @param {integer} quantity - The number of points to return. Set to `false` or 0 to return an arbitrary number of points (`perimeter / stepRate`) evenly spaced around the Rectangle based on the `stepRate`.\r\n * @param {number} [stepRate] - If `quantity` is 0, determines the normalized distance between each returned point.\r\n * @param {(array|Phaser.Geom.Point[])} [output] - An array to which to append the points.\r\n *\r\n * @return {(array|Phaser.Geom.Point[])} The modified `output` array, or a new array if none was provided.\r\n */\r\n getPoints: function (quantity, stepRate, output)\r\n {\r\n return GetPoints(this, quantity, stepRate, output);\r\n },\r\n\r\n /**\r\n * Returns a random point within the Rectangle's bounds.\r\n *\r\n * @method Phaser.Geom.Rectangle#getRandomPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [point,$return]\r\n *\r\n * @param {Phaser.Geom.Point} [point] - The object in which to store the `x` and `y` coordinates of the point.\r\n *\r\n * @return {Phaser.Geom.Point} The updated `point`, or a new Point if none was provided.\r\n */\r\n getRandomPoint: function (point)\r\n {\r\n return Random(this, point);\r\n },\r\n\r\n /**\r\n * Sets the position, width, and height of the Rectangle.\r\n *\r\n * @method Phaser.Geom.Rectangle#setTo\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The X coordinate of the top left corner of the Rectangle.\r\n * @param {number} y - The Y coordinate of the top left corner of the Rectangle.\r\n * @param {number} width - The width of the Rectangle.\r\n * @param {number} height - The height of the Rectangle.\r\n *\r\n * @return {Phaser.Geom.Rectangle} This Rectangle object.\r\n */\r\n setTo: function (x, y, width, height)\r\n {\r\n this.x = x;\r\n this.y = y;\r\n this.width = width;\r\n this.height = height;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Resets the position, width, and height of the Rectangle to 0.\r\n *\r\n * @method Phaser.Geom.Rectangle#setEmpty\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Geom.Rectangle} This Rectangle object.\r\n */\r\n setEmpty: function ()\r\n {\r\n return this.setTo(0, 0, 0, 0);\r\n },\r\n\r\n /**\r\n * Sets the position of the Rectangle.\r\n *\r\n * @method Phaser.Geom.Rectangle#setPosition\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The X coordinate of the top left corner of the Rectangle.\r\n * @param {number} [y=x] - The Y coordinate of the top left corner of the Rectangle.\r\n *\r\n * @return {Phaser.Geom.Rectangle} This Rectangle object.\r\n */\r\n setPosition: function (x, y)\r\n {\r\n if (y === undefined) { y = x; }\r\n\r\n this.x = x;\r\n this.y = y;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the width and height of the Rectangle.\r\n *\r\n * @method Phaser.Geom.Rectangle#setSize\r\n * @since 3.0.0\r\n *\r\n * @param {number} width - The width to set the Rectangle to.\r\n * @param {number} [height=width] - The height to set the Rectangle to.\r\n *\r\n * @return {Phaser.Geom.Rectangle} This Rectangle object.\r\n */\r\n setSize: function (width, height)\r\n {\r\n if (height === undefined) { height = width; }\r\n\r\n this.width = width;\r\n this.height = height;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Determines if the Rectangle is empty. A Rectangle is empty if its width or height is less than or equal to 0.\r\n *\r\n * @method Phaser.Geom.Rectangle#isEmpty\r\n * @since 3.0.0\r\n *\r\n * @return {boolean} `true` if the Rectangle is empty. A Rectangle object is empty if its width or height is less than or equal to 0.\r\n */\r\n isEmpty: function ()\r\n {\r\n return (this.width <= 0 || this.height <= 0);\r\n },\r\n\r\n /**\r\n * Returns a Line object that corresponds to the top of this Rectangle.\r\n *\r\n * @method Phaser.Geom.Rectangle#getLineA\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Line} O - [line,$return]\r\n *\r\n * @param {Phaser.Geom.Line} [line] - A Line object to set the results in. If `undefined` a new Line will be created.\r\n *\r\n * @return {Phaser.Geom.Line} A Line object that corresponds to the top of this Rectangle.\r\n */\r\n getLineA: function (line)\r\n {\r\n if (line === undefined) { line = new Line(); }\r\n\r\n line.setTo(this.x, this.y, this.right, this.y);\r\n\r\n return line;\r\n },\r\n\r\n /**\r\n * Returns a Line object that corresponds to the right of this Rectangle.\r\n *\r\n * @method Phaser.Geom.Rectangle#getLineB\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Line} O - [line,$return]\r\n *\r\n * @param {Phaser.Geom.Line} [line] - A Line object to set the results in. If `undefined` a new Line will be created.\r\n *\r\n * @return {Phaser.Geom.Line} A Line object that corresponds to the right of this Rectangle.\r\n */\r\n getLineB: function (line)\r\n {\r\n if (line === undefined) { line = new Line(); }\r\n\r\n line.setTo(this.right, this.y, this.right, this.bottom);\r\n\r\n return line;\r\n },\r\n\r\n /**\r\n * Returns a Line object that corresponds to the bottom of this Rectangle.\r\n *\r\n * @method Phaser.Geom.Rectangle#getLineC\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Line} O - [line,$return]\r\n *\r\n * @param {Phaser.Geom.Line} [line] - A Line object to set the results in. If `undefined` a new Line will be created.\r\n *\r\n * @return {Phaser.Geom.Line} A Line object that corresponds to the bottom of this Rectangle.\r\n */\r\n getLineC: function (line)\r\n {\r\n if (line === undefined) { line = new Line(); }\r\n\r\n line.setTo(this.right, this.bottom, this.x, this.bottom);\r\n\r\n return line;\r\n },\r\n\r\n /**\r\n * Returns a Line object that corresponds to the left of this Rectangle.\r\n *\r\n * @method Phaser.Geom.Rectangle#getLineD\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Line} O - [line,$return]\r\n *\r\n * @param {Phaser.Geom.Line} [line] - A Line object to set the results in. If `undefined` a new Line will be created.\r\n *\r\n * @return {Phaser.Geom.Line} A Line object that corresponds to the left of this Rectangle.\r\n */\r\n getLineD: function (line)\r\n {\r\n if (line === undefined) { line = new Line(); }\r\n\r\n line.setTo(this.x, this.bottom, this.x, this.y);\r\n\r\n return line;\r\n },\r\n\r\n /**\r\n * The x coordinate of the left of the Rectangle.\r\n * Changing the left property of a Rectangle object has no effect on the y and height properties. However it does affect the width property, whereas changing the x value does not affect the width property.\r\n *\r\n * @name Phaser.Geom.Rectangle#left\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n left: {\r\n\r\n get: function ()\r\n {\r\n return this.x;\r\n },\r\n\r\n set: function (value)\r\n {\r\n if (value >= this.right)\r\n {\r\n this.width = 0;\r\n }\r\n else\r\n {\r\n this.width = this.right - value;\r\n }\r\n\r\n this.x = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The sum of the x and width properties.\r\n * Changing the right property of a Rectangle object has no effect on the x, y and height properties, however it does affect the width property.\r\n *\r\n * @name Phaser.Geom.Rectangle#right\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n right: {\r\n\r\n get: function ()\r\n {\r\n return this.x + this.width;\r\n },\r\n\r\n set: function (value)\r\n {\r\n if (value <= this.x)\r\n {\r\n this.width = 0;\r\n }\r\n else\r\n {\r\n this.width = value - this.x;\r\n }\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The y coordinate of the top of the Rectangle. Changing the top property of a Rectangle object has no effect on the x and width properties.\r\n * However it does affect the height property, whereas changing the y value does not affect the height property.\r\n *\r\n * @name Phaser.Geom.Rectangle#top\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n top: {\r\n\r\n get: function ()\r\n {\r\n return this.y;\r\n },\r\n\r\n set: function (value)\r\n {\r\n if (value >= this.bottom)\r\n {\r\n this.height = 0;\r\n }\r\n else\r\n {\r\n this.height = (this.bottom - value);\r\n }\r\n\r\n this.y = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The sum of the y and height properties.\r\n * Changing the bottom property of a Rectangle object has no effect on the x, y and width properties, but does change the height property.\r\n *\r\n * @name Phaser.Geom.Rectangle#bottom\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n bottom: {\r\n\r\n get: function ()\r\n {\r\n return this.y + this.height;\r\n },\r\n\r\n set: function (value)\r\n {\r\n if (value <= this.y)\r\n {\r\n this.height = 0;\r\n }\r\n else\r\n {\r\n this.height = value - this.y;\r\n }\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The x coordinate of the center of the Rectangle.\r\n *\r\n * @name Phaser.Geom.Rectangle#centerX\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n centerX: {\r\n\r\n get: function ()\r\n {\r\n return this.x + (this.width / 2);\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.x = value - (this.width / 2);\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The y coordinate of the center of the Rectangle.\r\n *\r\n * @name Phaser.Geom.Rectangle#centerY\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n centerY: {\r\n\r\n get: function ()\r\n {\r\n return this.y + (this.height / 2);\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.y = value - (this.height / 2);\r\n }\r\n\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Rectangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9SZWN0YW5nbGUuanM/YjU0NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxlQUFlLG1CQUFPLENBQUMsd0VBQVk7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLHdFQUFZO0FBQ25DLGdCQUFnQixtQkFBTyxDQUFDLDBFQUFhO0FBQ3JDLGlCQUFpQixtQkFBTyxDQUFDLHlEQUFVO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxpRUFBYztBQUNqQyxhQUFhLG1CQUFPLENBQUMsb0VBQVU7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTztBQUNyQyw4QkFBOEIsT0FBTztBQUNyQyxrQ0FBa0MsV0FBVztBQUM3QyxtQ0FBbUMsWUFBWTs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSwyQkFBMkI7QUFDMUM7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QixlQUFlLDRCQUE0QjtBQUMzQztBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQSxlQUFlLGtCQUFrQjtBQUNqQztBQUNBLGdCQUFnQixrQkFBa0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixzQkFBc0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixzQkFBc0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixPQUFPOztBQUVyQztBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLHNCQUFzQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsZ0JBQWdCOztBQUVuRDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLGlCQUFpQjtBQUNqQztBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsbUJBQW1COztBQUVwRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLGlCQUFpQjtBQUNqQztBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsbUJBQW1COztBQUVwRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLGlCQUFpQjtBQUNqQztBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsbUJBQW1COztBQUVwRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLGlCQUFpQjtBQUNqQztBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsbUJBQW1COztBQUVwRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvUmVjdGFuZ2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ29udGFpbnMgPSByZXF1aXJlKCcuL0NvbnRhaW5zJyk7XHJcbnZhciBHZXRQb2ludCA9IHJlcXVpcmUoJy4vR2V0UG9pbnQnKTtcclxudmFyIEdldFBvaW50cyA9IHJlcXVpcmUoJy4vR2V0UG9pbnRzJyk7XHJcbnZhciBHRU9NX0NPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcclxudmFyIExpbmUgPSByZXF1aXJlKCcuLi9saW5lL0xpbmUnKTtcclxudmFyIFJhbmRvbSA9IHJlcXVpcmUoJy4vUmFuZG9tJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBFbmNhcHN1bGF0ZXMgYSAyRCByZWN0YW5nbGUgZGVmaW5lZCBieSBpdHMgY29ybmVyIHBvaW50IGluIHRoZSB0b3AtbGVmdCBhbmQgaXRzIGV4dGVuZHMgaW4geCAod2lkdGgpIGFuZCB5IChoZWlnaHQpXHJcbiAqXHJcbiAqIEBjbGFzcyBSZWN0YW5nbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5HZW9tXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdIC0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBSZWN0YW5nbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXSAtIFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgUmVjdGFuZ2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3dpZHRoPTBdIC0gVGhlIHdpZHRoIG9mIHRoZSBSZWN0YW5nbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0PTBdIC0gVGhlIGhlaWdodCBvZiB0aGUgUmVjdGFuZ2xlLlxyXG4gKi9cclxudmFyIFJlY3RhbmdsZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBSZWN0YW5nbGUgKHgsIHksIHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgeyB4ID0gMDsgfVxyXG4gICAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsgeSA9IDA7IH1cclxuICAgICAgICBpZiAod2lkdGggPT09IHVuZGVmaW5lZCkgeyB3aWR0aCA9IDA7IH1cclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gMDsgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZ2VvbWV0cnkgY29uc3RhbnQgdHlwZSBvZiB0aGlzIG9iamVjdDogYEdFT01fQ09OU1QuUkVDVEFOR0xFYC5cclxuICAgICAgICAgKiBVc2VkIGZvciBmYXN0IHR5cGUgY29tcGFyaXNvbnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5SZWN0YW5nbGUjdHlwZVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE5LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnR5cGUgPSBHRU9NX0NPTlNULlJFQ1RBTkdMRTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBSZWN0YW5nbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5SZWN0YW5nbGUjeFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueCA9IHg7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgUmVjdGFuZ2xlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdlb20uUmVjdGFuZ2xlI3lcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnkgPSB5O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFJlY3RhbmdsZSwgaS5lLiB0aGUgZGlzdGFuY2UgYmV0d2VlbiBpdHMgbGVmdCBzaWRlIChkZWZpbmVkIGJ5IGB4YCkgYW5kIGl0cyByaWdodCBzaWRlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdlb20uUmVjdGFuZ2xlI3dpZHRoXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBSZWN0YW5nbGUsIGkuZS4gdGhlIGRpc3RhbmNlIGJldHdlZW4gaXRzIHRvcCBzaWRlIChkZWZpbmVkIGJ5IGB5YCkgYW5kIGl0cyBib3R0b20gc2lkZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLlJlY3RhbmdsZSNoZWlnaHRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIHBvaW50IGlzIGluc2lkZSB0aGUgUmVjdGFuZ2xlJ3MgYm91bmRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uUmVjdGFuZ2xlI2NvbnRhaW5zXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIGNoZWNrLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byBjaGVjay5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHBvaW50IGlzIHdpdGhpbiB0aGUgUmVjdGFuZ2xlJ3MgYm91bmRzLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgY29udGFpbnM6IGZ1bmN0aW9uICh4LCB5KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBDb250YWlucyh0aGlzLCB4LCB5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBjb29yZGluYXRlcyBvZiBhIHBvaW50IGF0IGEgY2VydGFpbiBgcG9zaXRpb25gIG9uIHRoZSBSZWN0YW5nbGUncyBwZXJpbWV0ZXIuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBgcG9zaXRpb25gIGlzIGEgZnJhY3Rpb24gYmV0d2VlbiAwIGFuZCAxIHdoaWNoIGRlZmluZXMgaG93IGZhciBpbnRvIHRoZSBwZXJpbWV0ZXIgdGhlIHBvaW50IGlzLlxyXG4gICAgICogXHJcbiAgICAgKiBBIHZhbHVlIG9mIDAgb3IgMSByZXR1cm5zIHRoZSBwb2ludCBhdCB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGUsIHdoaWxlIGEgdmFsdWUgb2YgMC41IHJldHVybnMgdGhlIHBvaW50IGF0IHRoZSBib3R0b20gcmlnaHQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGUuIFZhbHVlcyBiZXR3ZWVuIDAgYW5kIDAuNSBhcmUgb24gdGhlIHRvcCBvciB0aGUgcmlnaHQgc2lkZSBhbmQgdmFsdWVzIGJldHdlZW4gMC41IGFuZCAxIGFyZSBvbiB0aGUgYm90dG9tIG9yIHRoZSBsZWZ0IHNpZGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5SZWN0YW5nbGUjZ2V0UG9pbnRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXRwdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcG9zaXRpb24gLSBUaGUgbm9ybWFsaXplZCBkaXN0YW5jZSBpbnRvIHRoZSBSZWN0YW5nbGUncyBwZXJpbWV0ZXIgdG8gcmV0dXJuLlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gW291dHB1dF0gLSBBbiBvYmplY3QgdG8gdXBkYXRlIHdpdGggdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsoUGhhc2VyLkdlb20uUG9pbnR8b2JqZWN0KX0gVGhlIHVwZGF0ZWQgYG91dHB1dGAgb2JqZWN0LCBvciBhIG5ldyBQb2ludCBpZiBubyBgb3V0cHV0YCBvYmplY3Qgd2FzIGdpdmVuLlxyXG4gICAgICovXHJcbiAgICBnZXRQb2ludDogZnVuY3Rpb24gKHBvc2l0aW9uLCBvdXRwdXQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIEdldFBvaW50KHRoaXMsIHBvc2l0aW9uLCBvdXRwdXQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgcG9pbnRzIGZyb20gdGhlIHBlcmltZXRlciBvZiB0aGUgUmVjdGFuZ2xlLCBlYWNoIHNwYWNlZCBvdXQgYmFzZWQgb24gdGhlIHF1YW50aXR5IG9yIHN0ZXAgcmVxdWlyZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5SZWN0YW5nbGUjZ2V0UG9pbnRzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnRbXX0gTyAtIFtvdXRwdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHF1YW50aXR5IC0gVGhlIG51bWJlciBvZiBwb2ludHMgdG8gcmV0dXJuLiBTZXQgdG8gYGZhbHNlYCBvciAwIHRvIHJldHVybiBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIHBvaW50cyAoYHBlcmltZXRlciAvIHN0ZXBSYXRlYCkgZXZlbmx5IHNwYWNlZCBhcm91bmQgdGhlIFJlY3RhbmdsZSBiYXNlZCBvbiB0aGUgYHN0ZXBSYXRlYC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcFJhdGVdIC0gSWYgYHF1YW50aXR5YCBpcyAwLCBkZXRlcm1pbmVzIHRoZSBub3JtYWxpemVkIGRpc3RhbmNlIGJldHdlZW4gZWFjaCByZXR1cm5lZCBwb2ludC5cclxuICAgICAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HZW9tLlBvaW50W10pfSBbb3V0cHV0XSAtIEFuIGFycmF5IHRvIHdoaWNoIHRvIGFwcGVuZCB0aGUgcG9pbnRzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2VvbS5Qb2ludFtdKX0gVGhlIG1vZGlmaWVkIGBvdXRwdXRgIGFycmF5LCBvciBhIG5ldyBhcnJheSBpZiBub25lIHdhcyBwcm92aWRlZC5cclxuICAgICAqL1xyXG4gICAgZ2V0UG9pbnRzOiBmdW5jdGlvbiAocXVhbnRpdHksIHN0ZXBSYXRlLCBvdXRwdXQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIEdldFBvaW50cyh0aGlzLCBxdWFudGl0eSwgc3RlcFJhdGUsIG91dHB1dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIHJhbmRvbSBwb2ludCB3aXRoaW4gdGhlIFJlY3RhbmdsZSdzIGJvdW5kcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLlJlY3RhbmdsZSNnZXRSYW5kb21Qb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW3BvaW50LCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2VvbS5Qb2ludH0gW3BvaW50XSAtIFRoZSBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5Qb2ludH0gVGhlIHVwZGF0ZWQgYHBvaW50YCwgb3IgYSBuZXcgUG9pbnQgaWYgbm9uZSB3YXMgcHJvdmlkZWQuXHJcbiAgICAgKi9cclxuICAgIGdldFJhbmRvbVBvaW50OiBmdW5jdGlvbiAocG9pbnQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIFJhbmRvbSh0aGlzLCBwb2ludCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcG9zaXRpb24sIHdpZHRoLCBhbmQgaGVpZ2h0IG9mIHRoZSBSZWN0YW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5SZWN0YW5nbGUjc2V0VG9cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBSZWN0YW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgUmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBSZWN0YW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgUmVjdGFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gVGhpcyBSZWN0YW5nbGUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRUbzogZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy54ID0geDtcclxuICAgICAgICB0aGlzLnkgPSB5O1xyXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXRzIHRoZSBwb3NpdGlvbiwgd2lkdGgsIGFuZCBoZWlnaHQgb2YgdGhlIFJlY3RhbmdsZSB0byAwLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uUmVjdGFuZ2xlI3NldEVtcHR5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IFRoaXMgUmVjdGFuZ2xlIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0RW1wdHk6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0VG8oMCwgMCwgMCwgMCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIFJlY3RhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLlJlY3RhbmdsZSNzZXRQb3NpdGlvblxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIFJlY3RhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeT14XSAtIFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgUmVjdGFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gVGhpcyBSZWN0YW5nbGUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRQb3NpdGlvbjogZnVuY3Rpb24gKHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0geDsgfVxyXG5cclxuICAgICAgICB0aGlzLnggPSB4O1xyXG4gICAgICAgIHRoaXMueSA9IHk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIFJlY3RhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLlJlY3RhbmdsZSNzZXRTaXplXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggdG8gc2V0IHRoZSBSZWN0YW5nbGUgdG8uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodD13aWR0aF0gLSBUaGUgaGVpZ2h0IHRvIHNldCB0aGUgUmVjdGFuZ2xlIHRvLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gVGhpcyBSZWN0YW5nbGUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRTaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcclxuICAgIHtcclxuICAgICAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gd2lkdGg7IH1cclxuXHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBSZWN0YW5nbGUgaXMgZW1wdHkuIEEgUmVjdGFuZ2xlIGlzIGVtcHR5IGlmIGl0cyB3aWR0aCBvciBoZWlnaHQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5SZWN0YW5nbGUjaXNFbXB0eVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBSZWN0YW5nbGUgaXMgZW1wdHkuIEEgUmVjdGFuZ2xlIG9iamVjdCBpcyBlbXB0eSBpZiBpdHMgd2lkdGggb3IgaGVpZ2h0IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAwLlxyXG4gICAgICovXHJcbiAgICBpc0VtcHR5OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBMaW5lIG9iamVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSB0b3Agb2YgdGhpcyBSZWN0YW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5SZWN0YW5nbGUjZ2V0TGluZUFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5MaW5lfSBPIC0gW2xpbmUsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IFtsaW5lXSAtIEEgTGluZSBvYmplY3QgdG8gc2V0IHRoZSByZXN1bHRzIGluLiBJZiBgdW5kZWZpbmVkYCBhIG5ldyBMaW5lIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5MaW5lfSBBIExpbmUgb2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHRvcCBvZiB0aGlzIFJlY3RhbmdsZS5cclxuICAgICAqL1xyXG4gICAgZ2V0TGluZUE6IGZ1bmN0aW9uIChsaW5lKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChsaW5lID09PSB1bmRlZmluZWQpIHsgbGluZSA9IG5ldyBMaW5lKCk7IH1cclxuXHJcbiAgICAgICAgbGluZS5zZXRUbyh0aGlzLngsIHRoaXMueSwgdGhpcy5yaWdodCwgdGhpcy55KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGxpbmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIExpbmUgb2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHJpZ2h0IG9mIHRoaXMgUmVjdGFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uUmVjdGFuZ2xlI2dldExpbmVCXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uTGluZX0gTyAtIFtsaW5lLCRyZXR1cm5dXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2VvbS5MaW5lfSBbbGluZV0gLSBBIExpbmUgb2JqZWN0IHRvIHNldCB0aGUgcmVzdWx0cyBpbi4gSWYgYHVuZGVmaW5lZGAgYSBuZXcgTGluZSB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdlb20uTGluZX0gQSBMaW5lIG9iamVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSByaWdodCBvZiB0aGlzIFJlY3RhbmdsZS5cclxuICAgICAqL1xyXG4gICAgZ2V0TGluZUI6IGZ1bmN0aW9uIChsaW5lKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChsaW5lID09PSB1bmRlZmluZWQpIHsgbGluZSA9IG5ldyBMaW5lKCk7IH1cclxuXHJcbiAgICAgICAgbGluZS5zZXRUbyh0aGlzLnJpZ2h0LCB0aGlzLnksIHRoaXMucmlnaHQsIHRoaXMuYm90dG9tKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGxpbmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIExpbmUgb2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGJvdHRvbSBvZiB0aGlzIFJlY3RhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLlJlY3RhbmdsZSNnZXRMaW5lQ1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5HZW9tLkxpbmV9IE8gLSBbbGluZSwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdlb20uTGluZX0gW2xpbmVdIC0gQSBMaW5lIG9iamVjdCB0byBzZXQgdGhlIHJlc3VsdHMgaW4uIElmIGB1bmRlZmluZWRgIGEgbmV3IExpbmUgd2lsbCBiZSBjcmVhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HZW9tLkxpbmV9IEEgTGluZSBvYmplY3QgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgYm90dG9tIG9mIHRoaXMgUmVjdGFuZ2xlLlxyXG4gICAgICovXHJcbiAgICBnZXRMaW5lQzogZnVuY3Rpb24gKGxpbmUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGxpbmUgPT09IHVuZGVmaW5lZCkgeyBsaW5lID0gbmV3IExpbmUoKTsgfVxyXG5cclxuICAgICAgICBsaW5lLnNldFRvKHRoaXMucmlnaHQsIHRoaXMuYm90dG9tLCB0aGlzLngsIHRoaXMuYm90dG9tKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGxpbmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIExpbmUgb2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGxlZnQgb2YgdGhpcyBSZWN0YW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5SZWN0YW5nbGUjZ2V0TGluZURcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5MaW5lfSBPIC0gW2xpbmUsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IFtsaW5lXSAtIEEgTGluZSBvYmplY3QgdG8gc2V0IHRoZSByZXN1bHRzIGluLiBJZiBgdW5kZWZpbmVkYCBhIG5ldyBMaW5lIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5MaW5lfSBBIExpbmUgb2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGxlZnQgb2YgdGhpcyBSZWN0YW5nbGUuXHJcbiAgICAgKi9cclxuICAgIGdldExpbmVEOiBmdW5jdGlvbiAobGluZSlcclxuICAgIHtcclxuICAgICAgICBpZiAobGluZSA9PT0gdW5kZWZpbmVkKSB7IGxpbmUgPSBuZXcgTGluZSgpOyB9XHJcblxyXG4gICAgICAgIGxpbmUuc2V0VG8odGhpcy54LCB0aGlzLmJvdHRvbSwgdGhpcy54LCB0aGlzLnkpO1xyXG5cclxuICAgICAgICByZXR1cm4gbGluZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBsZWZ0IG9mIHRoZSBSZWN0YW5nbGUuXHJcbiAgICAgKiBDaGFuZ2luZyB0aGUgbGVmdCBwcm9wZXJ0eSBvZiBhIFJlY3RhbmdsZSBvYmplY3QgaGFzIG5vIGVmZmVjdCBvbiB0aGUgeSBhbmQgaGVpZ2h0IHByb3BlcnRpZXMuIEhvd2V2ZXIgaXQgZG9lcyBhZmZlY3QgdGhlIHdpZHRoIHByb3BlcnR5LCB3aGVyZWFzIGNoYW5naW5nIHRoZSB4IHZhbHVlIGRvZXMgbm90IGFmZmVjdCB0aGUgd2lkdGggcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdlb20uUmVjdGFuZ2xlI2xlZnRcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgbGVmdDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy54O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlID49IHRoaXMucmlnaHQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMucmlnaHQgLSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy54ID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc3VtIG9mIHRoZSB4IGFuZCB3aWR0aCBwcm9wZXJ0aWVzLlxyXG4gICAgICogQ2hhbmdpbmcgdGhlIHJpZ2h0IHByb3BlcnR5IG9mIGEgUmVjdGFuZ2xlIG9iamVjdCBoYXMgbm8gZWZmZWN0IG9uIHRoZSB4LCB5IGFuZCBoZWlnaHQgcHJvcGVydGllcywgaG93ZXZlciBpdCBkb2VzIGFmZmVjdCB0aGUgd2lkdGggcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdlb20uUmVjdGFuZ2xlI3JpZ2h0XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHJpZ2h0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnggKyB0aGlzLndpZHRoO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlIDw9IHRoaXMueClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gdmFsdWUgLSB0aGlzLng7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHRvcCBvZiB0aGUgUmVjdGFuZ2xlLiBDaGFuZ2luZyB0aGUgdG9wIHByb3BlcnR5IG9mIGEgUmVjdGFuZ2xlIG9iamVjdCBoYXMgbm8gZWZmZWN0IG9uIHRoZSB4IGFuZCB3aWR0aCBwcm9wZXJ0aWVzLlxyXG4gICAgICogSG93ZXZlciBpdCBkb2VzIGFmZmVjdCB0aGUgaGVpZ2h0IHByb3BlcnR5LCB3aGVyZWFzIGNoYW5naW5nIHRoZSB5IHZhbHVlIGRvZXMgbm90IGFmZmVjdCB0aGUgaGVpZ2h0IHByb3BlcnR5LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLlJlY3RhbmdsZSN0b3BcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgdG9wOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPj0gdGhpcy5ib3R0b20pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gKHRoaXMuYm90dG9tIC0gdmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnkgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzdW0gb2YgdGhlIHkgYW5kIGhlaWdodCBwcm9wZXJ0aWVzLlxyXG4gICAgICogQ2hhbmdpbmcgdGhlIGJvdHRvbSBwcm9wZXJ0eSBvZiBhIFJlY3RhbmdsZSBvYmplY3QgaGFzIG5vIGVmZmVjdCBvbiB0aGUgeCwgeSBhbmQgd2lkdGggcHJvcGVydGllcywgYnV0IGRvZXMgY2hhbmdlIHRoZSBoZWlnaHQgcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdlb20uUmVjdGFuZ2xlI2JvdHRvbVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBib3R0b206IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMueSArIHRoaXMuaGVpZ2h0O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlIDw9IHRoaXMueSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB2YWx1ZSAtIHRoaXMueTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBSZWN0YW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdlb20uUmVjdGFuZ2xlI2NlbnRlclhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgY2VudGVyWDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy54ICsgKHRoaXMud2lkdGggLyAyKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueCA9IHZhbHVlIC0gKHRoaXMud2lkdGggLyAyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgUmVjdGFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLlJlY3RhbmdsZSNjZW50ZXJZXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGNlbnRlclk6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMueSArICh0aGlzLmhlaWdodCAvIDIpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy55ID0gdmFsdWUgLSAodGhpcy5oZWlnaHQgLyAyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJlY3RhbmdsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Rectangle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/SameDimensions.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/SameDimensions.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Determines if the two objects (either Rectangles or Rectangle-like) have the same width and height values under strict equality.\r\n *\r\n * @function Phaser.Geom.Rectangle.SameDimensions\r\n * @since 3.15.0\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The first Rectangle object.\r\n * @param {Phaser.Geom.Rectangle} toCompare - The second Rectangle object.\r\n *\r\n * @return {boolean} `true` if the objects have equivalent values for the `width` and `height` properties, otherwise `false`.\r\n */\r\nvar SameDimensions = function (rect, toCompare)\r\n{\r\n return (rect.width === toCompare.width && rect.height === toCompare.height);\r\n};\r\n\r\nmodule.exports = SameDimensions;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9TYW1lRGltZW5zaW9ucy5qcz80Y2U0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLHNCQUFzQjtBQUNqQztBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvU2FtZURpbWVuc2lvbnMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSB0d28gb2JqZWN0cyAoZWl0aGVyIFJlY3RhbmdsZXMgb3IgUmVjdGFuZ2xlLWxpa2UpIGhhdmUgdGhlIHNhbWUgd2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgdW5kZXIgc3RyaWN0IGVxdWFsaXR5LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uUmVjdGFuZ2xlLlNhbWVEaW1lbnNpb25zXHJcbiAqIEBzaW5jZSAzLjE1LjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3QgLSBUaGUgZmlyc3QgUmVjdGFuZ2xlIG9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHRvQ29tcGFyZSAtIFRoZSBzZWNvbmQgUmVjdGFuZ2xlIG9iamVjdC5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBvYmplY3RzIGhhdmUgZXF1aXZhbGVudCB2YWx1ZXMgZm9yIHRoZSBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICovXHJcbnZhciBTYW1lRGltZW5zaW9ucyA9IGZ1bmN0aW9uIChyZWN0LCB0b0NvbXBhcmUpXHJcbntcclxuICAgIHJldHVybiAocmVjdC53aWR0aCA9PT0gdG9Db21wYXJlLndpZHRoICYmIHJlY3QuaGVpZ2h0ID09PSB0b0NvbXBhcmUuaGVpZ2h0KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2FtZURpbWVuc2lvbnM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/SameDimensions.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/Scale.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/Scale.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n// Scales the width and height of this Rectangle by the given amounts.\r\n\r\n/**\r\n * Scales the width and height of this Rectangle by the given amounts.\r\n *\r\n * @function Phaser.Geom.Rectangle.Scale\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [rect,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rect - The `Rectangle` object that will be scaled by the specified amount(s).\r\n * @param {number} x - The factor by which to scale the rectangle horizontally.\r\n * @param {number} y - The amount by which to scale the rectangle vertically. If this is not specified, the rectangle will be scaled by the factor `x` in both directions.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The rectangle object with updated `width` and `height` properties as calculated from the scaling factor(s).\r\n */\r\nvar Scale = function (rect, x, y)\r\n{\r\n if (y === undefined) { y = x; }\r\n\r\n rect.width *= x;\r\n rect.height *= y;\r\n\r\n return rect;\r\n};\r\n\r\nmodule.exports = Scale;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9TY2FsZS5qcz8wZDdhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHNCQUFzQjtBQUNsQztBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsT0FBTzs7QUFFakM7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS9yZWN0YW5nbGUvU2NhbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8vIFNjYWxlcyB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGlzIFJlY3RhbmdsZSBieSB0aGUgZ2l2ZW4gYW1vdW50cy5cclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhpcyBSZWN0YW5nbGUgYnkgdGhlIGdpdmVuIGFtb3VudHMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuU2NhbGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IE8gLSBbcmVjdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gcmVjdCAtIFRoZSBgUmVjdGFuZ2xlYCBvYmplY3QgdGhhdCB3aWxsIGJlIHNjYWxlZCBieSB0aGUgc3BlY2lmaWVkIGFtb3VudChzKS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgZmFjdG9yIGJ5IHdoaWNoIHRvIHNjYWxlIHRoZSByZWN0YW5nbGUgaG9yaXpvbnRhbGx5LlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSBhbW91bnQgYnkgd2hpY2ggdG8gc2NhbGUgdGhlIHJlY3RhbmdsZSB2ZXJ0aWNhbGx5LiBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSByZWN0YW5nbGUgd2lsbCBiZSBzY2FsZWQgYnkgdGhlIGZhY3RvciBgeGAgaW4gYm90aCBkaXJlY3Rpb25zLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IFRoZSByZWN0YW5nbGUgb2JqZWN0IHdpdGggdXBkYXRlZCBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzIGFzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgc2NhbGluZyBmYWN0b3IocykuXHJcbiAqL1xyXG52YXIgU2NhbGUgPSBmdW5jdGlvbiAocmVjdCwgeCwgeSlcclxue1xyXG4gICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgeyB5ID0geDsgfVxyXG5cclxuICAgIHJlY3Qud2lkdGggKj0geDtcclxuICAgIHJlY3QuaGVpZ2h0ICo9IHk7XHJcblxyXG4gICAgcmV0dXJuIHJlY3Q7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNjYWxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Scale.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/Union.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/Union.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Rectangle = __webpack_require__(/*! ./Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\n\r\n/**\r\n * Creates a new Rectangle or repositions and/or resizes an existing Rectangle so that it encompasses the two given Rectangles, i.e. calculates their union.\r\n *\r\n * @function Phaser.Geom.Rectangle.Union\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Rectangle} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Rectangle} rectA - The first Rectangle to use.\r\n * @param {Phaser.Geom.Rectangle} rectB - The second Rectangle to use.\r\n * @param {Phaser.Geom.Rectangle} [out] - The Rectangle to store the union in.\r\n *\r\n * @return {Phaser.Geom.Rectangle} The modified `out` Rectangle, or a new Rectangle if none was provided.\r\n */\r\nvar Union = function (rectA, rectB, out)\r\n{\r\n if (out === undefined) { out = new Rectangle(); }\r\n\r\n // Cache vars so we can use one of the input rects as the output rect\r\n var x = Math.min(rectA.x, rectB.x);\r\n var y = Math.min(rectA.y, rectB.y);\r\n var w = Math.max(rectA.right, rectB.right) - x;\r\n var h = Math.max(rectA.bottom, rectB.bottom) - y;\r\n\r\n return out.setTo(x, y, w, h);\r\n};\r\n\r\nmodule.exports = Union;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9Vbmlvbi5qcz82NzY3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQywwRUFBYTs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxzQkFBc0I7QUFDbkM7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLHNCQUFzQjtBQUNqQztBQUNBLFlBQVksc0JBQXNCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qix1QkFBdUI7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vcmVjdGFuZ2xlL1VuaW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFJlY3RhbmdsZSBvciByZXBvc2l0aW9ucyBhbmQvb3IgcmVzaXplcyBhbiBleGlzdGluZyBSZWN0YW5nbGUgc28gdGhhdCBpdCBlbmNvbXBhc3NlcyB0aGUgdHdvIGdpdmVuIFJlY3RhbmdsZXMsIGkuZS4gY2FsY3VsYXRlcyB0aGVpciB1bmlvbi5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlJlY3RhbmdsZS5VbmlvblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IHJlY3RBIC0gVGhlIGZpcnN0IFJlY3RhbmdsZSB0byB1c2UuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUmVjdGFuZ2xlfSByZWN0QiAtIFRoZSBzZWNvbmQgUmVjdGFuZ2xlIHRvIHVzZS5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5SZWN0YW5nbGV9IFtvdXRdIC0gVGhlIFJlY3RhbmdsZSB0byBzdG9yZSB0aGUgdW5pb24gaW4uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlJlY3RhbmdsZX0gVGhlIG1vZGlmaWVkIGBvdXRgIFJlY3RhbmdsZSwgb3IgYSBuZXcgUmVjdGFuZ2xlIGlmIG5vbmUgd2FzIHByb3ZpZGVkLlxyXG4gKi9cclxudmFyIFVuaW9uID0gZnVuY3Rpb24gKHJlY3RBLCByZWN0Qiwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFJlY3RhbmdsZSgpOyB9XHJcblxyXG4gICAgLy8gIENhY2hlIHZhcnMgc28gd2UgY2FuIHVzZSBvbmUgb2YgdGhlIGlucHV0IHJlY3RzIGFzIHRoZSBvdXRwdXQgcmVjdFxyXG4gICAgdmFyIHggPSBNYXRoLm1pbihyZWN0QS54LCByZWN0Qi54KTtcclxuICAgIHZhciB5ID0gTWF0aC5taW4ocmVjdEEueSwgcmVjdEIueSk7XHJcbiAgICB2YXIgdyA9IE1hdGgubWF4KHJlY3RBLnJpZ2h0LCByZWN0Qi5yaWdodCkgLSB4O1xyXG4gICAgdmFyIGggPSBNYXRoLm1heChyZWN0QS5ib3R0b20sIHJlY3RCLmJvdHRvbSkgLSB5O1xyXG5cclxuICAgIHJldHVybiBvdXQuc2V0VG8oeCwgeSwgdywgaCk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFVuaW9uO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/Union.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/rectangle/index.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/geom/rectangle/index.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Rectangle = __webpack_require__(/*! ./Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\n\r\nRectangle.Area = __webpack_require__(/*! ./Area */ \"./node_modules/phaser/src/geom/rectangle/Area.js\");\r\nRectangle.Ceil = __webpack_require__(/*! ./Ceil */ \"./node_modules/phaser/src/geom/rectangle/Ceil.js\");\r\nRectangle.CeilAll = __webpack_require__(/*! ./CeilAll */ \"./node_modules/phaser/src/geom/rectangle/CeilAll.js\");\r\nRectangle.CenterOn = __webpack_require__(/*! ./CenterOn */ \"./node_modules/phaser/src/geom/rectangle/CenterOn.js\");\r\nRectangle.Clone = __webpack_require__(/*! ./Clone */ \"./node_modules/phaser/src/geom/rectangle/Clone.js\");\r\nRectangle.Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/rectangle/Contains.js\");\r\nRectangle.ContainsPoint = __webpack_require__(/*! ./ContainsPoint */ \"./node_modules/phaser/src/geom/rectangle/ContainsPoint.js\");\r\nRectangle.ContainsRect = __webpack_require__(/*! ./ContainsRect */ \"./node_modules/phaser/src/geom/rectangle/ContainsRect.js\");\r\nRectangle.CopyFrom = __webpack_require__(/*! ./CopyFrom */ \"./node_modules/phaser/src/geom/rectangle/CopyFrom.js\");\r\nRectangle.Decompose = __webpack_require__(/*! ./Decompose */ \"./node_modules/phaser/src/geom/rectangle/Decompose.js\");\r\nRectangle.Equals = __webpack_require__(/*! ./Equals */ \"./node_modules/phaser/src/geom/rectangle/Equals.js\");\r\nRectangle.FitInside = __webpack_require__(/*! ./FitInside */ \"./node_modules/phaser/src/geom/rectangle/FitInside.js\");\r\nRectangle.FitOutside = __webpack_require__(/*! ./FitOutside */ \"./node_modules/phaser/src/geom/rectangle/FitOutside.js\");\r\nRectangle.Floor = __webpack_require__(/*! ./Floor */ \"./node_modules/phaser/src/geom/rectangle/Floor.js\");\r\nRectangle.FloorAll = __webpack_require__(/*! ./FloorAll */ \"./node_modules/phaser/src/geom/rectangle/FloorAll.js\");\r\nRectangle.FromPoints = __webpack_require__(/*! ./FromPoints */ \"./node_modules/phaser/src/geom/rectangle/FromPoints.js\");\r\nRectangle.GetAspectRatio = __webpack_require__(/*! ./GetAspectRatio */ \"./node_modules/phaser/src/geom/rectangle/GetAspectRatio.js\");\r\nRectangle.GetCenter = __webpack_require__(/*! ./GetCenter */ \"./node_modules/phaser/src/geom/rectangle/GetCenter.js\");\r\nRectangle.GetPoint = __webpack_require__(/*! ./GetPoint */ \"./node_modules/phaser/src/geom/rectangle/GetPoint.js\");\r\nRectangle.GetPoints = __webpack_require__(/*! ./GetPoints */ \"./node_modules/phaser/src/geom/rectangle/GetPoints.js\");\r\nRectangle.GetSize = __webpack_require__(/*! ./GetSize */ \"./node_modules/phaser/src/geom/rectangle/GetSize.js\");\r\nRectangle.Inflate = __webpack_require__(/*! ./Inflate */ \"./node_modules/phaser/src/geom/rectangle/Inflate.js\");\r\nRectangle.Intersection = __webpack_require__(/*! ./Intersection */ \"./node_modules/phaser/src/geom/rectangle/Intersection.js\");\r\nRectangle.MarchingAnts = __webpack_require__(/*! ./MarchingAnts */ \"./node_modules/phaser/src/geom/rectangle/MarchingAnts.js\");\r\nRectangle.MergePoints = __webpack_require__(/*! ./MergePoints */ \"./node_modules/phaser/src/geom/rectangle/MergePoints.js\");\r\nRectangle.MergeRect = __webpack_require__(/*! ./MergeRect */ \"./node_modules/phaser/src/geom/rectangle/MergeRect.js\");\r\nRectangle.MergeXY = __webpack_require__(/*! ./MergeXY */ \"./node_modules/phaser/src/geom/rectangle/MergeXY.js\");\r\nRectangle.Offset = __webpack_require__(/*! ./Offset */ \"./node_modules/phaser/src/geom/rectangle/Offset.js\");\r\nRectangle.OffsetPoint = __webpack_require__(/*! ./OffsetPoint */ \"./node_modules/phaser/src/geom/rectangle/OffsetPoint.js\");\r\nRectangle.Overlaps = __webpack_require__(/*! ./Overlaps */ \"./node_modules/phaser/src/geom/rectangle/Overlaps.js\");\r\nRectangle.Perimeter = __webpack_require__(/*! ./Perimeter */ \"./node_modules/phaser/src/geom/rectangle/Perimeter.js\");\r\nRectangle.PerimeterPoint = __webpack_require__(/*! ./PerimeterPoint */ \"./node_modules/phaser/src/geom/rectangle/PerimeterPoint.js\");\r\nRectangle.Random = __webpack_require__(/*! ./Random */ \"./node_modules/phaser/src/geom/rectangle/Random.js\");\r\nRectangle.RandomOutside = __webpack_require__(/*! ./RandomOutside */ \"./node_modules/phaser/src/geom/rectangle/RandomOutside.js\");\r\nRectangle.SameDimensions = __webpack_require__(/*! ./SameDimensions */ \"./node_modules/phaser/src/geom/rectangle/SameDimensions.js\");\r\nRectangle.Scale = __webpack_require__(/*! ./Scale */ \"./node_modules/phaser/src/geom/rectangle/Scale.js\");\r\nRectangle.Union = __webpack_require__(/*! ./Union */ \"./node_modules/phaser/src/geom/rectangle/Union.js\");\r\n\r\nmodule.exports = Rectangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9pbmRleC5qcz82NzlkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQywwRUFBYTs7QUFFckMsaUJBQWlCLG1CQUFPLENBQUMsZ0VBQVE7QUFDakMsaUJBQWlCLG1CQUFPLENBQUMsZ0VBQVE7QUFDakMsb0JBQW9CLG1CQUFPLENBQUMsc0VBQVc7QUFDdkMscUJBQXFCLG1CQUFPLENBQUMsd0VBQVk7QUFDekMsa0JBQWtCLG1CQUFPLENBQUMsa0VBQVM7QUFDbkMscUJBQXFCLG1CQUFPLENBQUMsd0VBQVk7QUFDekMsMEJBQTBCLG1CQUFPLENBQUMsa0ZBQWlCO0FBQ25ELHlCQUF5QixtQkFBTyxDQUFDLGdGQUFnQjtBQUNqRCxxQkFBcUIsbUJBQU8sQ0FBQyx3RUFBWTtBQUN6QyxzQkFBc0IsbUJBQU8sQ0FBQywwRUFBYTtBQUMzQyxtQkFBbUIsbUJBQU8sQ0FBQyxvRUFBVTtBQUNyQyxzQkFBc0IsbUJBQU8sQ0FBQywwRUFBYTtBQUMzQyx1QkFBdUIsbUJBQU8sQ0FBQyw0RUFBYztBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxrRUFBUztBQUNuQyxxQkFBcUIsbUJBQU8sQ0FBQyx3RUFBWTtBQUN6Qyx1QkFBdUIsbUJBQU8sQ0FBQyw0RUFBYztBQUM3QywyQkFBMkIsbUJBQU8sQ0FBQyxvRkFBa0I7QUFDckQsc0JBQXNCLG1CQUFPLENBQUMsMEVBQWE7QUFDM0MscUJBQXFCLG1CQUFPLENBQUMsd0VBQVk7QUFDekMsc0JBQXNCLG1CQUFPLENBQUMsMEVBQWE7QUFDM0Msb0JBQW9CLG1CQUFPLENBQUMsc0VBQVc7QUFDdkMsb0JBQW9CLG1CQUFPLENBQUMsc0VBQVc7QUFDdkMseUJBQXlCLG1CQUFPLENBQUMsZ0ZBQWdCO0FBQ2pELHlCQUF5QixtQkFBTyxDQUFDLGdGQUFnQjtBQUNqRCx3QkFBd0IsbUJBQU8sQ0FBQyw4RUFBZTtBQUMvQyxzQkFBc0IsbUJBQU8sQ0FBQywwRUFBYTtBQUMzQyxvQkFBb0IsbUJBQU8sQ0FBQyxzRUFBVztBQUN2QyxtQkFBbUIsbUJBQU8sQ0FBQyxvRUFBVTtBQUNyQyx3QkFBd0IsbUJBQU8sQ0FBQyw4RUFBZTtBQUMvQyxxQkFBcUIsbUJBQU8sQ0FBQyx3RUFBWTtBQUN6QyxzQkFBc0IsbUJBQU8sQ0FBQywwRUFBYTtBQUMzQywyQkFBMkIsbUJBQU8sQ0FBQyxvRkFBa0I7QUFDckQsbUJBQW1CLG1CQUFPLENBQUMsb0VBQVU7QUFDckMsMEJBQTBCLG1CQUFPLENBQUMsa0ZBQWlCO0FBQ25ELDJCQUEyQixtQkFBTyxDQUFDLG9GQUFrQjtBQUNyRCxrQkFBa0IsbUJBQU8sQ0FBQyxrRUFBUztBQUNuQyxrQkFBa0IsbUJBQU8sQ0FBQyxrRUFBUzs7QUFFbkMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3JlY3RhbmdsZS9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyk7XHJcblxyXG5SZWN0YW5nbGUuQXJlYSA9IHJlcXVpcmUoJy4vQXJlYScpO1xyXG5SZWN0YW5nbGUuQ2VpbCA9IHJlcXVpcmUoJy4vQ2VpbCcpO1xyXG5SZWN0YW5nbGUuQ2VpbEFsbCA9IHJlcXVpcmUoJy4vQ2VpbEFsbCcpO1xyXG5SZWN0YW5nbGUuQ2VudGVyT24gPSByZXF1aXJlKCcuL0NlbnRlck9uJyk7XHJcblJlY3RhbmdsZS5DbG9uZSA9IHJlcXVpcmUoJy4vQ2xvbmUnKTtcclxuUmVjdGFuZ2xlLkNvbnRhaW5zID0gcmVxdWlyZSgnLi9Db250YWlucycpO1xyXG5SZWN0YW5nbGUuQ29udGFpbnNQb2ludCA9IHJlcXVpcmUoJy4vQ29udGFpbnNQb2ludCcpO1xyXG5SZWN0YW5nbGUuQ29udGFpbnNSZWN0ID0gcmVxdWlyZSgnLi9Db250YWluc1JlY3QnKTtcclxuUmVjdGFuZ2xlLkNvcHlGcm9tID0gcmVxdWlyZSgnLi9Db3B5RnJvbScpO1xyXG5SZWN0YW5nbGUuRGVjb21wb3NlID0gcmVxdWlyZSgnLi9EZWNvbXBvc2UnKTtcclxuUmVjdGFuZ2xlLkVxdWFscyA9IHJlcXVpcmUoJy4vRXF1YWxzJyk7XHJcblJlY3RhbmdsZS5GaXRJbnNpZGUgPSByZXF1aXJlKCcuL0ZpdEluc2lkZScpO1xyXG5SZWN0YW5nbGUuRml0T3V0c2lkZSA9IHJlcXVpcmUoJy4vRml0T3V0c2lkZScpO1xyXG5SZWN0YW5nbGUuRmxvb3IgPSByZXF1aXJlKCcuL0Zsb29yJyk7XHJcblJlY3RhbmdsZS5GbG9vckFsbCA9IHJlcXVpcmUoJy4vRmxvb3JBbGwnKTtcclxuUmVjdGFuZ2xlLkZyb21Qb2ludHMgPSByZXF1aXJlKCcuL0Zyb21Qb2ludHMnKTtcclxuUmVjdGFuZ2xlLkdldEFzcGVjdFJhdGlvID0gcmVxdWlyZSgnLi9HZXRBc3BlY3RSYXRpbycpO1xyXG5SZWN0YW5nbGUuR2V0Q2VudGVyID0gcmVxdWlyZSgnLi9HZXRDZW50ZXInKTtcclxuUmVjdGFuZ2xlLkdldFBvaW50ID0gcmVxdWlyZSgnLi9HZXRQb2ludCcpO1xyXG5SZWN0YW5nbGUuR2V0UG9pbnRzID0gcmVxdWlyZSgnLi9HZXRQb2ludHMnKTtcclxuUmVjdGFuZ2xlLkdldFNpemUgPSByZXF1aXJlKCcuL0dldFNpemUnKTtcclxuUmVjdGFuZ2xlLkluZmxhdGUgPSByZXF1aXJlKCcuL0luZmxhdGUnKTtcclxuUmVjdGFuZ2xlLkludGVyc2VjdGlvbiA9IHJlcXVpcmUoJy4vSW50ZXJzZWN0aW9uJyk7XHJcblJlY3RhbmdsZS5NYXJjaGluZ0FudHMgPSByZXF1aXJlKCcuL01hcmNoaW5nQW50cycpO1xyXG5SZWN0YW5nbGUuTWVyZ2VQb2ludHMgPSByZXF1aXJlKCcuL01lcmdlUG9pbnRzJyk7XHJcblJlY3RhbmdsZS5NZXJnZVJlY3QgPSByZXF1aXJlKCcuL01lcmdlUmVjdCcpO1xyXG5SZWN0YW5nbGUuTWVyZ2VYWSA9IHJlcXVpcmUoJy4vTWVyZ2VYWScpO1xyXG5SZWN0YW5nbGUuT2Zmc2V0ID0gcmVxdWlyZSgnLi9PZmZzZXQnKTtcclxuUmVjdGFuZ2xlLk9mZnNldFBvaW50ID0gcmVxdWlyZSgnLi9PZmZzZXRQb2ludCcpO1xyXG5SZWN0YW5nbGUuT3ZlcmxhcHMgPSByZXF1aXJlKCcuL092ZXJsYXBzJyk7XHJcblJlY3RhbmdsZS5QZXJpbWV0ZXIgPSByZXF1aXJlKCcuL1BlcmltZXRlcicpO1xyXG5SZWN0YW5nbGUuUGVyaW1ldGVyUG9pbnQgPSByZXF1aXJlKCcuL1BlcmltZXRlclBvaW50Jyk7XHJcblJlY3RhbmdsZS5SYW5kb20gPSByZXF1aXJlKCcuL1JhbmRvbScpO1xyXG5SZWN0YW5nbGUuUmFuZG9tT3V0c2lkZSA9IHJlcXVpcmUoJy4vUmFuZG9tT3V0c2lkZScpO1xyXG5SZWN0YW5nbGUuU2FtZURpbWVuc2lvbnMgPSByZXF1aXJlKCcuL1NhbWVEaW1lbnNpb25zJyk7XHJcblJlY3RhbmdsZS5TY2FsZSA9IHJlcXVpcmUoJy4vU2NhbGUnKTtcclxuUmVjdGFuZ2xlLlVuaW9uID0gcmVxdWlyZSgnLi9VbmlvbicpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/rectangle/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/Area.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/Area.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n// The 2D area of a triangle. The area value is always non-negative.\r\n\r\n/**\r\n * Returns the area of a Triangle.\r\n *\r\n * @function Phaser.Geom.Triangle.Area\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to use.\r\n *\r\n * @return {number} The area of the Triangle, always non-negative.\r\n */\r\nvar Area = function (triangle)\r\n{\r\n var x1 = triangle.x1;\r\n var y1 = triangle.y1;\r\n\r\n var x2 = triangle.x2;\r\n var y2 = triangle.y2;\r\n\r\n var x3 = triangle.x3;\r\n var y3 = triangle.y3;\r\n\r\n return Math.abs(((x3 - x1) * (y2 - y1) - (x2 - x1) * (y3 - y1)) / 2);\r\n};\r\n\r\nmodule.exports = Area;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0FyZWEuanM/MGRlYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEM7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vdHJpYW5nbGUvQXJlYS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLy8gVGhlIDJEIGFyZWEgb2YgYSB0cmlhbmdsZS4gVGhlIGFyZWEgdmFsdWUgaXMgYWx3YXlzIG5vbi1uZWdhdGl2ZS5cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBhcmVhIG9mIGEgVHJpYW5nbGUuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5UcmlhbmdsZS5BcmVhXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSB0cmlhbmdsZSAtIFRoZSBUcmlhbmdsZSB0byB1c2UuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGFyZWEgb2YgdGhlIFRyaWFuZ2xlLCBhbHdheXMgbm9uLW5lZ2F0aXZlLlxyXG4gKi9cclxudmFyIEFyZWEgPSBmdW5jdGlvbiAodHJpYW5nbGUpXHJcbntcclxuICAgIHZhciB4MSA9IHRyaWFuZ2xlLngxO1xyXG4gICAgdmFyIHkxID0gdHJpYW5nbGUueTE7XHJcblxyXG4gICAgdmFyIHgyID0gdHJpYW5nbGUueDI7XHJcbiAgICB2YXIgeTIgPSB0cmlhbmdsZS55MjtcclxuXHJcbiAgICB2YXIgeDMgPSB0cmlhbmdsZS54MztcclxuICAgIHZhciB5MyA9IHRyaWFuZ2xlLnkzO1xyXG5cclxuICAgIHJldHVybiBNYXRoLmFicygoKHgzIC0geDEpICogKHkyIC0geTEpIC0gKHgyIC0geDEpICogKHkzIC0geTEpKSAvIDIpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBcmVhO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/Area.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/BuildEquilateral.js":
/*!*******************************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/BuildEquilateral.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Triangle = __webpack_require__(/*! ./Triangle */ \"./node_modules/phaser/src/geom/triangle/Triangle.js\");\r\n\r\n/**\r\n * Builds an equilateral triangle. In the equilateral triangle, all the sides are the same length (congruent) and all the angles are the same size (congruent).\r\n * The x/y specifies the top-middle of the triangle (x1/y1) and length is the length of each side.\r\n *\r\n * @function Phaser.Geom.Triangle.BuildEquilateral\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - x coordinate of the top point of the triangle.\r\n * @param {number} y - y coordinate of the top point of the triangle.\r\n * @param {number} length - Length of each side of the triangle.\r\n *\r\n * @return {Phaser.Geom.Triangle} The Triangle object of the given size.\r\n */\r\nvar BuildEquilateral = function (x, y, length)\r\n{\r\n var height = length * (Math.sqrt(3) / 2);\r\n\r\n var x1 = x;\r\n var y1 = y;\r\n\r\n var x2 = x + (length / 2);\r\n var y2 = y + height;\r\n\r\n var x3 = x - (length / 2);\r\n var y3 = y + height;\r\n\r\n return new Triangle(x1, y1, x2, y2, x3, y3);\r\n};\r\n\r\nmodule.exports = BuildEquilateral;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0J1aWxkRXF1aWxhdGVyYWwuanM/OTQwMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLHVFQUFZOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxxQkFBcUI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vdHJpYW5nbGUvQnVpbGRFcXVpbGF0ZXJhbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFRyaWFuZ2xlID0gcmVxdWlyZSgnLi9UcmlhbmdsZScpO1xyXG5cclxuLyoqXHJcbiAqIEJ1aWxkcyBhbiBlcXVpbGF0ZXJhbCB0cmlhbmdsZS4gSW4gdGhlIGVxdWlsYXRlcmFsIHRyaWFuZ2xlLCBhbGwgdGhlIHNpZGVzIGFyZSB0aGUgc2FtZSBsZW5ndGggKGNvbmdydWVudCkgYW5kIGFsbCB0aGUgYW5nbGVzIGFyZSB0aGUgc2FtZSBzaXplIChjb25ncnVlbnQpLlxyXG4gKiBUaGUgeC95IHNwZWNpZmllcyB0aGUgdG9wLW1pZGRsZSBvZiB0aGUgdHJpYW5nbGUgKHgxL3kxKSBhbmQgbGVuZ3RoIGlzIHRoZSBsZW5ndGggb2YgZWFjaCBzaWRlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uVHJpYW5nbGUuQnVpbGRFcXVpbGF0ZXJhbFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSB4IGNvb3JkaW5hdGUgb2YgdGhlIHRvcCBwb2ludCBvZiB0aGUgdHJpYW5nbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0geSBjb29yZGluYXRlIG9mIHRoZSB0b3AgcG9pbnQgb2YgdGhlIHRyaWFuZ2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoIC0gTGVuZ3RoIG9mIGVhY2ggc2lkZSBvZiB0aGUgdHJpYW5nbGUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSBUaGUgVHJpYW5nbGUgb2JqZWN0IG9mIHRoZSBnaXZlbiBzaXplLlxyXG4gKi9cclxudmFyIEJ1aWxkRXF1aWxhdGVyYWwgPSBmdW5jdGlvbiAoeCwgeSwgbGVuZ3RoKVxyXG57XHJcbiAgICB2YXIgaGVpZ2h0ID0gbGVuZ3RoICogKE1hdGguc3FydCgzKSAvIDIpO1xyXG5cclxuICAgIHZhciB4MSA9IHg7XHJcbiAgICB2YXIgeTEgPSB5O1xyXG5cclxuICAgIHZhciB4MiA9IHggKyAobGVuZ3RoIC8gMik7XHJcbiAgICB2YXIgeTIgPSB5ICsgaGVpZ2h0O1xyXG5cclxuICAgIHZhciB4MyA9IHggLSAobGVuZ3RoIC8gMik7XHJcbiAgICB2YXIgeTMgPSB5ICsgaGVpZ2h0O1xyXG5cclxuICAgIHJldHVybiBuZXcgVHJpYW5nbGUoeDEsIHkxLCB4MiwgeTIsIHgzLCB5Myk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJ1aWxkRXF1aWxhdGVyYWw7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/BuildEquilateral.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/BuildFromPolygon.js":
/*!*******************************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/BuildFromPolygon.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar EarCut = __webpack_require__(/*! ../polygon/Earcut */ \"./node_modules/phaser/src/geom/polygon/Earcut.js\");\r\nvar Triangle = __webpack_require__(/*! ./Triangle */ \"./node_modules/phaser/src/geom/triangle/Triangle.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Geom.Triangle.BuildFromPolygon\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Triangle[]} O - [out,$return]\r\n *\r\n * @param {array} data - A flat array of vertex coordinates like [x0,y0, x1,y1, x2,y2, ...]\r\n * @param {array} [holes=null] - An array of hole indices if any (e.g. [5, 8] for a 12-vertex input would mean one hole with vertices 5–7 and another with 8–11).\r\n * @param {number} [scaleX=1] - [description]\r\n * @param {number} [scaleY=1] - [description]\r\n * @param {(array|Phaser.Geom.Triangle[])} [out] - [description]\r\n *\r\n * @return {(array|Phaser.Geom.Triangle[])} [description]\r\n */\r\nvar BuildFromPolygon = function (data, holes, scaleX, scaleY, out)\r\n{\r\n if (holes === undefined) { holes = null; }\r\n if (scaleX === undefined) { scaleX = 1; }\r\n if (scaleY === undefined) { scaleY = 1; }\r\n if (out === undefined) { out = []; }\r\n\r\n var tris = EarCut(data, holes);\r\n\r\n var a;\r\n var b;\r\n var c;\r\n\r\n var x1;\r\n var y1;\r\n\r\n var x2;\r\n var y2;\r\n\r\n var x3;\r\n var y3;\r\n\r\n for (var i = 0; i < tris.length; i += 3)\r\n {\r\n a = tris[i];\r\n b = tris[i + 1];\r\n c = tris[i + 2];\r\n\r\n x1 = data[a * 2] * scaleX;\r\n y1 = data[(a * 2) + 1] * scaleY;\r\n\r\n x2 = data[b * 2] * scaleX;\r\n y2 = data[(b * 2) + 1] * scaleY;\r\n\r\n x3 = data[c * 2] * scaleX;\r\n y3 = data[(c * 2) + 1] * scaleY;\r\n\r\n out.push(new Triangle(x1, y1, x2, y2, x3, y3));\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = BuildFromPolygon;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0J1aWxkRnJvbVBvbHlnb24uanM/ZGFhNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsYUFBYSxtQkFBTyxDQUFDLDJFQUFtQjtBQUN4QyxlQUFlLG1CQUFPLENBQUMsdUVBQVk7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsdUJBQXVCO0FBQ3BDO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsK0JBQStCO0FBQzFDO0FBQ0EsWUFBWSwrQkFBK0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLGNBQWM7QUFDNUMsK0JBQStCLFlBQVk7QUFDM0MsK0JBQStCLFlBQVk7QUFDM0MsNEJBQTRCLFVBQVU7O0FBRXRDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vdHJpYW5nbGUvQnVpbGRGcm9tUG9seWdvbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEVhckN1dCA9IHJlcXVpcmUoJy4uL3BvbHlnb24vRWFyY3V0Jyk7XHJcbnZhciBUcmlhbmdsZSA9IHJlcXVpcmUoJy4vVHJpYW5nbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5UcmlhbmdsZS5CdWlsZEZyb21Qb2x5Z29uXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uVHJpYW5nbGVbXX0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHthcnJheX0gZGF0YSAtIEEgZmxhdCBhcnJheSBvZiB2ZXJ0ZXggY29vcmRpbmF0ZXMgbGlrZSBbeDAseTAsIHgxLHkxLCB4Mix5MiwgLi4uXVxyXG4gKiBAcGFyYW0ge2FycmF5fSBbaG9sZXM9bnVsbF0gLSBBbiBhcnJheSBvZiBob2xlIGluZGljZXMgaWYgYW55IChlLmcuIFs1LCA4XSBmb3IgYSAxMi12ZXJ0ZXggaW5wdXQgd291bGQgbWVhbiBvbmUgaG9sZSB3aXRoIHZlcnRpY2VzIDXigJM3IGFuZCBhbm90aGVyIHdpdGggOOKAkzExKS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzY2FsZVg9MV0gLSBbZGVzY3JpcHRpb25dXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc2NhbGVZPTFdIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2VvbS5UcmlhbmdsZVtdKX0gW291dF0gLSBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEByZXR1cm4geyhhcnJheXxQaGFzZXIuR2VvbS5UcmlhbmdsZVtdKX0gW2Rlc2NyaXB0aW9uXVxyXG4gKi9cclxudmFyIEJ1aWxkRnJvbVBvbHlnb24gPSBmdW5jdGlvbiAoZGF0YSwgaG9sZXMsIHNjYWxlWCwgc2NhbGVZLCBvdXQpXHJcbntcclxuICAgIGlmIChob2xlcyA9PT0gdW5kZWZpbmVkKSB7IGhvbGVzID0gbnVsbDsgfVxyXG4gICAgaWYgKHNjYWxlWCA9PT0gdW5kZWZpbmVkKSB7IHNjYWxlWCA9IDE7IH1cclxuICAgIGlmIChzY2FsZVkgPT09IHVuZGVmaW5lZCkgeyBzY2FsZVkgPSAxOyB9XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gW107IH1cclxuXHJcbiAgICB2YXIgdHJpcyA9IEVhckN1dChkYXRhLCBob2xlcyk7XHJcblxyXG4gICAgdmFyIGE7XHJcbiAgICB2YXIgYjtcclxuICAgIHZhciBjO1xyXG5cclxuICAgIHZhciB4MTtcclxuICAgIHZhciB5MTtcclxuXHJcbiAgICB2YXIgeDI7XHJcbiAgICB2YXIgeTI7XHJcblxyXG4gICAgdmFyIHgzO1xyXG4gICAgdmFyIHkzO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJpcy5sZW5ndGg7IGkgKz0gMylcclxuICAgIHtcclxuICAgICAgICBhID0gdHJpc1tpXTtcclxuICAgICAgICBiID0gdHJpc1tpICsgMV07XHJcbiAgICAgICAgYyA9IHRyaXNbaSArIDJdO1xyXG5cclxuICAgICAgICB4MSA9IGRhdGFbYSAqIDJdICogc2NhbGVYO1xyXG4gICAgICAgIHkxID0gZGF0YVsoYSAqIDIpICsgMV0gKiBzY2FsZVk7XHJcblxyXG4gICAgICAgIHgyID0gZGF0YVtiICogMl0gKiBzY2FsZVg7XHJcbiAgICAgICAgeTIgPSBkYXRhWyhiICogMikgKyAxXSAqIHNjYWxlWTtcclxuXHJcbiAgICAgICAgeDMgPSBkYXRhW2MgKiAyXSAqIHNjYWxlWDtcclxuICAgICAgICB5MyA9IGRhdGFbKGMgKiAyKSArIDFdICogc2NhbGVZO1xyXG5cclxuICAgICAgICBvdXQucHVzaChuZXcgVHJpYW5nbGUoeDEsIHkxLCB4MiwgeTIsIHgzLCB5MykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJ1aWxkRnJvbVBvbHlnb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/BuildFromPolygon.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/BuildRight.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/BuildRight.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Triangle = __webpack_require__(/*! ./Triangle */ \"./node_modules/phaser/src/geom/triangle/Triangle.js\");\r\n\r\n// Builds a right triangle, with one 90 degree angle and two acute angles\r\n// The x/y is the coordinate of the 90 degree angle (and will map to x1/y1 in the resulting Triangle)\r\n// w/h can be positive or negative and represent the length of each side\r\n\r\n/**\r\n * Builds a right triangle, i.e. one which has a 90-degree angle and two acute angles.\r\n *\r\n * @function Phaser.Geom.Triangle.BuildRight\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The X coordinate of the right angle, which will also be the first X coordinate of the constructed Triangle.\r\n * @param {number} y - The Y coordinate of the right angle, which will also be the first Y coordinate of the constructed Triangle.\r\n * @param {number} width - The length of the side which is to the left or to the right of the right angle.\r\n * @param {number} height - The length of the side which is above or below the right angle.\r\n *\r\n * @return {Phaser.Geom.Triangle} The constructed right Triangle.\r\n */\r\nvar BuildRight = function (x, y, width, height)\r\n{\r\n if (height === undefined) { height = width; }\r\n\r\n // 90 degree angle\r\n var x1 = x;\r\n var y1 = y;\r\n\r\n var x2 = x;\r\n var y2 = y - height;\r\n\r\n var x3 = x + width;\r\n var y3 = y;\r\n\r\n return new Triangle(x1, y1, x2, y2, x3, y3);\r\n};\r\n\r\nmodule.exports = BuildRight;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0J1aWxkUmlnaHQuanM/ZDBkZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLHVFQUFZOztBQUVuQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSxxQkFBcUI7QUFDakM7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGdCQUFnQjs7QUFFL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS90cmlhbmdsZS9CdWlsZFJpZ2h0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgVHJpYW5nbGUgPSByZXF1aXJlKCcuL1RyaWFuZ2xlJyk7XHJcblxyXG4vLyAgQnVpbGRzIGEgcmlnaHQgdHJpYW5nbGUsIHdpdGggb25lIDkwIGRlZ3JlZSBhbmdsZSBhbmQgdHdvIGFjdXRlIGFuZ2xlc1xyXG4vLyAgVGhlIHgveSBpcyB0aGUgY29vcmRpbmF0ZSBvZiB0aGUgOTAgZGVncmVlIGFuZ2xlIChhbmQgd2lsbCBtYXAgdG8geDEveTEgaW4gdGhlIHJlc3VsdGluZyBUcmlhbmdsZSlcclxuLy8gIHcvaCBjYW4gYmUgcG9zaXRpdmUgb3IgbmVnYXRpdmUgYW5kIHJlcHJlc2VudCB0aGUgbGVuZ3RoIG9mIGVhY2ggc2lkZVxyXG5cclxuLyoqXHJcbiAqIEJ1aWxkcyBhIHJpZ2h0IHRyaWFuZ2xlLCBpLmUuIG9uZSB3aGljaCBoYXMgYSA5MC1kZWdyZWUgYW5nbGUgYW5kIHR3byBhY3V0ZSBhbmdsZXMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5UcmlhbmdsZS5CdWlsZFJpZ2h0XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHJpZ2h0IGFuZ2xlLCB3aGljaCB3aWxsIGFsc28gYmUgdGhlIGZpcnN0IFggY29vcmRpbmF0ZSBvZiB0aGUgY29uc3RydWN0ZWQgVHJpYW5nbGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcmlnaHQgYW5nbGUsIHdoaWNoIHdpbGwgYWxzbyBiZSB0aGUgZmlyc3QgWSBjb29yZGluYXRlIG9mIHRoZSBjb25zdHJ1Y3RlZCBUcmlhbmdsZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIGxlbmd0aCBvZiB0aGUgc2lkZSB3aGljaCBpcyB0byB0aGUgbGVmdCBvciB0byB0aGUgcmlnaHQgb2YgdGhlIHJpZ2h0IGFuZ2xlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGxlbmd0aCBvZiB0aGUgc2lkZSB3aGljaCBpcyBhYm92ZSBvciBiZWxvdyB0aGUgcmlnaHQgYW5nbGUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSBUaGUgY29uc3RydWN0ZWQgcmlnaHQgVHJpYW5nbGUuXHJcbiAqL1xyXG52YXIgQnVpbGRSaWdodCA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxyXG57XHJcbiAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHsgaGVpZ2h0ID0gd2lkdGg7IH1cclxuXHJcbiAgICAvLyAgOTAgZGVncmVlIGFuZ2xlXHJcbiAgICB2YXIgeDEgPSB4O1xyXG4gICAgdmFyIHkxID0geTtcclxuXHJcbiAgICB2YXIgeDIgPSB4O1xyXG4gICAgdmFyIHkyID0geSAtIGhlaWdodDtcclxuXHJcbiAgICB2YXIgeDMgPSB4ICsgd2lkdGg7XHJcbiAgICB2YXIgeTMgPSB5O1xyXG5cclxuICAgIHJldHVybiBuZXcgVHJpYW5nbGUoeDEsIHkxLCB4MiwgeTIsIHgzLCB5Myk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJ1aWxkUmlnaHQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/BuildRight.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/CenterOn.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/CenterOn.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Centroid = __webpack_require__(/*! ./Centroid */ \"./node_modules/phaser/src/geom/triangle/Centroid.js\");\r\nvar Offset = __webpack_require__(/*! ./Offset */ \"./node_modules/phaser/src/geom/triangle/Offset.js\");\r\n\r\n/**\r\n * @callback CenterFunction\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to return the center coordinates of.\r\n *\r\n * @return {Phaser.Math.Vector2} The center point of the Triangle according to the function.\r\n */\r\n\r\n/**\r\n * Positions the Triangle so that it is centered on the given coordinates.\r\n *\r\n * @function Phaser.Geom.Triangle.CenterOn\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Triangle} O - [triangle,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The triangle to be positioned.\r\n * @param {number} x - The horizontal coordinate to center on.\r\n * @param {number} y - The vertical coordinate to center on.\r\n * @param {CenterFunction} [centerFunc] - The function used to center the triangle. Defaults to Centroid centering.\r\n *\r\n * @return {Phaser.Geom.Triangle} The Triangle that was centered.\r\n */\r\nvar CenterOn = function (triangle, x, y, centerFunc)\r\n{\r\n if (centerFunc === undefined) { centerFunc = Centroid; }\r\n\r\n // Get the center of the triangle\r\n var center = centerFunc(triangle);\r\n\r\n // Difference\r\n var diffX = x - center.x;\r\n var diffY = y - center.y;\r\n\r\n return Offset(triangle, diffX, diffY);\r\n};\r\n\r\nmodule.exports = CenterOn;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0NlbnRlck9uLmpzPzIwYzgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyx1RUFBWTtBQUNuQyxhQUFhLG1CQUFPLENBQUMsbUVBQVU7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDO0FBQ0EsWUFBWSxvQkFBb0I7QUFDaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxxQkFBcUI7QUFDbEM7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsZUFBZTtBQUMxQjtBQUNBLFlBQVkscUJBQXFCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyx1QkFBdUI7O0FBRTFEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0NlbnRlck9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2VudHJvaWQgPSByZXF1aXJlKCcuL0NlbnRyb2lkJyk7XHJcbnZhciBPZmZzZXQgPSByZXF1aXJlKCcuL09mZnNldCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjYWxsYmFjayBDZW50ZXJGdW5jdGlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSB0cmlhbmdsZSAtIFRoZSBUcmlhbmdsZSB0byByZXR1cm4gdGhlIGNlbnRlciBjb29yZGluYXRlcyBvZi5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLk1hdGguVmVjdG9yMn0gVGhlIGNlbnRlciBwb2ludCBvZiB0aGUgVHJpYW5nbGUgYWNjb3JkaW5nIHRvIHRoZSBmdW5jdGlvbi5cclxuICovXHJcblxyXG4vKipcclxuICogUG9zaXRpb25zIHRoZSBUcmlhbmdsZSBzbyB0aGF0IGl0IGlzIGNlbnRlcmVkIG9uIHRoZSBnaXZlbiBjb29yZGluYXRlcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlRyaWFuZ2xlLkNlbnRlck9uXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IE8gLSBbdHJpYW5nbGUsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gdHJpYW5nbGUgLSBUaGUgdHJpYW5nbGUgdG8gYmUgcG9zaXRpb25lZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgaG9yaXpvbnRhbCBjb29yZGluYXRlIHRvIGNlbnRlciBvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgY29vcmRpbmF0ZSB0byBjZW50ZXIgb24uXHJcbiAqIEBwYXJhbSB7Q2VudGVyRnVuY3Rpb259IFtjZW50ZXJGdW5jXSAtIFRoZSBmdW5jdGlvbiB1c2VkIHRvIGNlbnRlciB0aGUgdHJpYW5nbGUuIERlZmF1bHRzIHRvIENlbnRyb2lkIGNlbnRlcmluZy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IFRoZSBUcmlhbmdsZSB0aGF0IHdhcyBjZW50ZXJlZC5cclxuICovXHJcbnZhciBDZW50ZXJPbiA9IGZ1bmN0aW9uICh0cmlhbmdsZSwgeCwgeSwgY2VudGVyRnVuYylcclxue1xyXG4gICAgaWYgKGNlbnRlckZ1bmMgPT09IHVuZGVmaW5lZCkgeyBjZW50ZXJGdW5jID0gQ2VudHJvaWQ7IH1cclxuXHJcbiAgICAvLyAgR2V0IHRoZSBjZW50ZXIgb2YgdGhlIHRyaWFuZ2xlXHJcbiAgICB2YXIgY2VudGVyID0gY2VudGVyRnVuYyh0cmlhbmdsZSk7XHJcblxyXG4gICAgLy8gIERpZmZlcmVuY2VcclxuICAgIHZhciBkaWZmWCA9IHggLSBjZW50ZXIueDtcclxuICAgIHZhciBkaWZmWSA9IHkgLSBjZW50ZXIueTtcclxuXHJcbiAgICByZXR1cm4gT2Zmc2V0KHRyaWFuZ2xlLCBkaWZmWCwgZGlmZlkpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDZW50ZXJPbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/CenterOn.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/Centroid.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/Centroid.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n// The three medians (the lines drawn from the vertices to the bisectors of the opposite sides)\r\n// meet in the centroid or center of mass (center of gravity).\r\n// The centroid divides each median in a ratio of 2:1\r\n\r\n/**\r\n * Calculates the position of a Triangle's centroid, which is also its center of mass (center of gravity).\r\n *\r\n * The centroid is the point in a Triangle at which its three medians (the lines drawn from the vertices to the bisectors of the opposite sides) meet. It divides each one in a 2:1 ratio.\r\n *\r\n * @function Phaser.Geom.Triangle.Centroid\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to use.\r\n * @param {(Phaser.Geom.Point|object)} [out] - An object to store the coordinates in.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} The `out` object with modified `x` and `y` properties, or a new Point if none was provided.\r\n */\r\nvar Centroid = function (triangle, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n out.x = (triangle.x1 + triangle.x2 + triangle.x3) / 3;\r\n out.y = (triangle.y1 + triangle.y2 + triangle.y3) / 3;\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = Centroid;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0NlbnRyb2lkLmpzP2YzZTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRUFBZ0I7O0FBRXBDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLDJCQUEyQjtBQUN0QztBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7O0FBRS9DO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vdHJpYW5nbGUvQ2VudHJvaWQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBQb2ludCA9IHJlcXVpcmUoJy4uL3BvaW50L1BvaW50Jyk7XHJcblxyXG4vLyAgVGhlIHRocmVlIG1lZGlhbnMgKHRoZSBsaW5lcyBkcmF3biBmcm9tIHRoZSB2ZXJ0aWNlcyB0byB0aGUgYmlzZWN0b3JzIG9mIHRoZSBvcHBvc2l0ZSBzaWRlcylcclxuLy8gIG1lZXQgaW4gdGhlIGNlbnRyb2lkIG9yIGNlbnRlciBvZiBtYXNzIChjZW50ZXIgb2YgZ3Jhdml0eSkuXHJcbi8vICBUaGUgY2VudHJvaWQgZGl2aWRlcyBlYWNoIG1lZGlhbiBpbiBhIHJhdGlvIG9mIDI6MVxyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHBvc2l0aW9uIG9mIGEgVHJpYW5nbGUncyBjZW50cm9pZCwgd2hpY2ggaXMgYWxzbyBpdHMgY2VudGVyIG9mIG1hc3MgKGNlbnRlciBvZiBncmF2aXR5KS5cclxuICpcclxuICogVGhlIGNlbnRyb2lkIGlzIHRoZSBwb2ludCBpbiBhIFRyaWFuZ2xlIGF0IHdoaWNoIGl0cyB0aHJlZSBtZWRpYW5zICh0aGUgbGluZXMgZHJhd24gZnJvbSB0aGUgdmVydGljZXMgdG8gdGhlIGJpc2VjdG9ycyBvZiB0aGUgb3Bwb3NpdGUgc2lkZXMpIG1lZXQuIEl0IGRpdmlkZXMgZWFjaCBvbmUgaW4gYSAyOjEgcmF0aW8uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5UcmlhbmdsZS5DZW50cm9pZFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSB0cmlhbmdsZSAtIFRoZSBUcmlhbmdsZSB0byB1c2UuXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IFtvdXRdIC0gQW4gb2JqZWN0IHRvIHN0b3JlIHRoZSBjb29yZGluYXRlcyBpbi5cclxuICpcclxuICogQHJldHVybiB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IFRoZSBgb3V0YCBvYmplY3Qgd2l0aCBtb2RpZmllZCBgeGAgYW5kIGB5YCBwcm9wZXJ0aWVzLCBvciBhIG5ldyBQb2ludCBpZiBub25lIHdhcyBwcm92aWRlZC5cclxuICovXHJcbnZhciBDZW50cm9pZCA9IGZ1bmN0aW9uICh0cmlhbmdsZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFBvaW50KCk7IH1cclxuXHJcbiAgICBvdXQueCA9ICh0cmlhbmdsZS54MSArIHRyaWFuZ2xlLngyICsgdHJpYW5nbGUueDMpIC8gMztcclxuICAgIG91dC55ID0gKHRyaWFuZ2xlLnkxICsgdHJpYW5nbGUueTIgKyB0cmlhbmdsZS55MykgLyAzO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENlbnRyb2lkO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/Centroid.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/CircumCenter.js":
/*!***************************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/CircumCenter.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n// Adapted from http://bjornharrtell.github.io/jsts/doc/api/jsts_geom_Triangle.js.html\r\n\r\n/**\r\n * Computes the determinant of a 2x2 matrix. Uses standard double-precision arithmetic, so is susceptible to round-off error.\r\n *\r\n * @function det\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {number} m00 - The [0,0] entry of the matrix.\r\n * @param {number} m01 - The [0,1] entry of the matrix.\r\n * @param {number} m10 - The [1,0] entry of the matrix.\r\n * @param {number} m11 - The [1,1] entry of the matrix.\r\n *\r\n * @return {number} the determinant.\r\n */\r\nfunction det (m00, m01, m10, m11)\r\n{\r\n return (m00 * m11) - (m01 * m10);\r\n}\r\n\r\n/**\r\n * Computes the circumcentre of a triangle. The circumcentre is the centre of\r\n * the circumcircle, the smallest circle which encloses the triangle. It is also\r\n * the common intersection point of the perpendicular bisectors of the sides of\r\n * the triangle, and is the only point which has equal distance to all three\r\n * vertices of the triangle.\r\n *\r\n * @function Phaser.Geom.Triangle.CircumCenter\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Math.Vector2} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - [description]\r\n * @param {Phaser.Math.Vector2} [out] - [description]\r\n *\r\n * @return {Phaser.Math.Vector2} [description]\r\n */\r\nvar CircumCenter = function (triangle, out)\r\n{\r\n if (out === undefined) { out = new Vector2(); }\r\n\r\n var cx = triangle.x3;\r\n var cy = triangle.y3;\r\n\r\n var ax = triangle.x1 - cx;\r\n var ay = triangle.y1 - cy;\r\n\r\n var bx = triangle.x2 - cx;\r\n var by = triangle.y2 - cy;\r\n\r\n var denom = 2 * det(ax, ay, bx, by);\r\n var numx = det(ay, ax * ax + ay * ay, by, bx * bx + by * by);\r\n var numy = det(ax, ax * ax + ay * ay, bx, bx * bx + by * by);\r\n\r\n out.x = cx - numx / denom;\r\n out.y = cy + numy / denom;\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = CircumCenter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0NpcmN1bUNlbnRlci5qcz9iNDExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxjQUFjLG1CQUFPLENBQUMscUVBQW9COztBQUUxQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxvQkFBb0I7QUFDakM7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLG9CQUFvQjtBQUMvQjtBQUNBLFlBQVksb0JBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixxQkFBcUI7O0FBRWpEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0NpcmN1bUNlbnRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFZlY3RvcjIgPSByZXF1aXJlKCcuLi8uLi9tYXRoL1ZlY3RvcjInKTtcclxuXHJcbi8vICBBZGFwdGVkIGZyb20gaHR0cDovL2Jqb3JuaGFycnRlbGwuZ2l0aHViLmlvL2pzdHMvZG9jL2FwaS9qc3RzX2dlb21fVHJpYW5nbGUuanMuaHRtbFxyXG5cclxuLyoqXHJcbiAqIENvbXB1dGVzIHRoZSBkZXRlcm1pbmFudCBvZiBhIDJ4MiBtYXRyaXguIFVzZXMgc3RhbmRhcmQgZG91YmxlLXByZWNpc2lvbiBhcml0aG1ldGljLCBzbyBpcyBzdXNjZXB0aWJsZSB0byByb3VuZC1vZmYgZXJyb3IuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBkZXRcclxuICogQHByaXZhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtMDAgLSBUaGUgWzAsMF0gZW50cnkgb2YgdGhlIG1hdHJpeC5cclxuICogQHBhcmFtIHtudW1iZXJ9IG0wMSAtIFRoZSBbMCwxXSBlbnRyeSBvZiB0aGUgbWF0cml4LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gbTEwIC0gVGhlIFsxLDBdIGVudHJ5IG9mIHRoZSBtYXRyaXguXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtMTEgLSBUaGUgWzEsMV0gZW50cnkgb2YgdGhlIG1hdHJpeC5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSB0aGUgZGV0ZXJtaW5hbnQuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZXQgKG0wMCwgbTAxLCBtMTAsIG0xMSlcclxue1xyXG4gICAgcmV0dXJuIChtMDAgKiBtMTEpIC0gKG0wMSAqIG0xMCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb21wdXRlcyB0aGUgY2lyY3VtY2VudHJlIG9mIGEgdHJpYW5nbGUuIFRoZSBjaXJjdW1jZW50cmUgaXMgdGhlIGNlbnRyZSBvZlxyXG4gKiB0aGUgY2lyY3VtY2lyY2xlLCB0aGUgc21hbGxlc3QgY2lyY2xlIHdoaWNoIGVuY2xvc2VzIHRoZSB0cmlhbmdsZS4gSXQgaXMgYWxzb1xyXG4gKiB0aGUgY29tbW9uIGludGVyc2VjdGlvbiBwb2ludCBvZiB0aGUgcGVycGVuZGljdWxhciBiaXNlY3RvcnMgb2YgdGhlIHNpZGVzIG9mXHJcbiAqIHRoZSB0cmlhbmdsZSwgYW5kIGlzIHRoZSBvbmx5IHBvaW50IHdoaWNoIGhhcyBlcXVhbCBkaXN0YW5jZSB0byBhbGwgdGhyZWVcclxuICogdmVydGljZXMgb2YgdGhlIHRyaWFuZ2xlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uVHJpYW5nbGUuQ2lyY3VtQ2VudGVyXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLk1hdGguVmVjdG9yMn0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gdHJpYW5nbGUgLSBbZGVzY3JpcHRpb25dXHJcbiAqIEBwYXJhbSB7UGhhc2VyLk1hdGguVmVjdG9yMn0gW291dF0gLSBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5NYXRoLlZlY3RvcjJ9IFtkZXNjcmlwdGlvbl1cclxuICovXHJcbnZhciBDaXJjdW1DZW50ZXIgPSBmdW5jdGlvbiAodHJpYW5nbGUsIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IG5ldyBWZWN0b3IyKCk7IH1cclxuXHJcbiAgICB2YXIgY3ggPSB0cmlhbmdsZS54MztcclxuICAgIHZhciBjeSA9IHRyaWFuZ2xlLnkzO1xyXG5cclxuICAgIHZhciBheCA9IHRyaWFuZ2xlLngxIC0gY3g7XHJcbiAgICB2YXIgYXkgPSB0cmlhbmdsZS55MSAtIGN5O1xyXG5cclxuICAgIHZhciBieCA9IHRyaWFuZ2xlLngyIC0gY3g7XHJcbiAgICB2YXIgYnkgPSB0cmlhbmdsZS55MiAtIGN5O1xyXG5cclxuICAgIHZhciBkZW5vbSA9IDIgKiBkZXQoYXgsIGF5LCBieCwgYnkpO1xyXG4gICAgdmFyIG51bXggPSBkZXQoYXksIGF4ICogYXggKyBheSAqIGF5LCBieSwgYnggKiBieCArIGJ5ICogYnkpO1xyXG4gICAgdmFyIG51bXkgPSBkZXQoYXgsIGF4ICogYXggKyBheSAqIGF5LCBieCwgYnggKiBieCArIGJ5ICogYnkpO1xyXG5cclxuICAgIG91dC54ID0gY3ggLSBudW14IC8gZGVub207XHJcbiAgICBvdXQueSA9IGN5ICsgbnVteSAvIGRlbm9tO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENpcmN1bUNlbnRlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/CircumCenter.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/CircumCircle.js":
/*!***************************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/CircumCircle.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Circle = __webpack_require__(/*! ../circle/Circle */ \"./node_modules/phaser/src/geom/circle/Circle.js\");\r\n\r\n// Adapted from https://gist.github.com/mutoo/5617691\r\n\r\n/**\r\n * Finds the circumscribed circle (circumcircle) of a Triangle object. The circumcircle is the circle which touches all of the triangle's vertices.\r\n *\r\n * @function Phaser.Geom.Triangle.CircumCircle\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Circle} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to use as input.\r\n * @param {Phaser.Geom.Circle} [out] - An optional Circle to store the result in.\r\n *\r\n * @return {Phaser.Geom.Circle} The updated `out` Circle, or a new Circle if none was provided.\r\n */\r\nvar CircumCircle = function (triangle, out)\r\n{\r\n if (out === undefined) { out = new Circle(); }\r\n\r\n // A\r\n var x1 = triangle.x1;\r\n var y1 = triangle.y1;\r\n\r\n // B\r\n var x2 = triangle.x2;\r\n var y2 = triangle.y2;\r\n\r\n // C\r\n var x3 = triangle.x3;\r\n var y3 = triangle.y3;\r\n\r\n var A = x2 - x1;\r\n var B = y2 - y1;\r\n var C = x3 - x1;\r\n var D = y3 - y1;\r\n var E = A * (x1 + x2) + B * (y1 + y2);\r\n var F = C * (x1 + x3) + D * (y1 + y3);\r\n var G = 2 * (A * (y3 - y2) - B * (x3 - x2));\r\n\r\n var dx;\r\n var dy;\r\n\r\n // If the points of the triangle are collinear, then just find the\r\n // extremes and use the midpoint as the center of the circumcircle.\r\n\r\n if (Math.abs(G) < 0.000001)\r\n {\r\n var minX = Math.min(x1, x2, x3);\r\n var minY = Math.min(y1, y2, y3);\r\n dx = (Math.max(x1, x2, x3) - minX) * 0.5;\r\n dy = (Math.max(y1, y2, y3) - minY) * 0.5;\r\n\r\n out.x = minX + dx;\r\n out.y = minY + dy;\r\n out.radius = Math.sqrt(dx * dx + dy * dy);\r\n }\r\n else\r\n {\r\n out.x = (D * E - B * F) / G;\r\n out.y = (A * F - C * E) / G;\r\n dx = out.x - x1;\r\n dy = out.y - y1;\r\n out.radius = Math.sqrt(dx * dx + dy * dy);\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = CircumCircle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0NpcmN1bUNpcmNsZS5qcz9kMjRhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMseUVBQWtCOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLG1CQUFtQjtBQUNoQztBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsbUJBQW1CO0FBQzlCO0FBQ0EsWUFBWSxtQkFBbUI7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLG9CQUFvQjs7QUFFaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vdHJpYW5nbGUvQ2lyY3VtQ2lyY2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2lyY2xlID0gcmVxdWlyZSgnLi4vY2lyY2xlL0NpcmNsZScpO1xyXG5cclxuLy8gIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9tdXRvby81NjE3NjkxXHJcblxyXG4vKipcclxuICogRmluZHMgdGhlIGNpcmN1bXNjcmliZWQgY2lyY2xlIChjaXJjdW1jaXJjbGUpIG9mIGEgVHJpYW5nbGUgb2JqZWN0LiBUaGUgY2lyY3VtY2lyY2xlIGlzIHRoZSBjaXJjbGUgd2hpY2ggdG91Y2hlcyBhbGwgb2YgdGhlIHRyaWFuZ2xlJ3MgdmVydGljZXMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5UcmlhbmdsZS5DaXJjdW1DaXJjbGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5DaXJjbGV9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlIC0gVGhlIFRyaWFuZ2xlIHRvIHVzZSBhcyBpbnB1dC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5DaXJjbGV9IFtvdXRdIC0gQW4gb3B0aW9uYWwgQ2lyY2xlIHRvIHN0b3JlIHRoZSByZXN1bHQgaW4uXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLkNpcmNsZX0gVGhlIHVwZGF0ZWQgYG91dGAgQ2lyY2xlLCBvciBhIG5ldyBDaXJjbGUgaWYgbm9uZSB3YXMgcHJvdmlkZWQuXHJcbiAqL1xyXG52YXIgQ2lyY3VtQ2lyY2xlID0gZnVuY3Rpb24gKHRyaWFuZ2xlLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBuZXcgQ2lyY2xlKCk7IH1cclxuXHJcbiAgICAvLyAgQVxyXG4gICAgdmFyIHgxID0gdHJpYW5nbGUueDE7XHJcbiAgICB2YXIgeTEgPSB0cmlhbmdsZS55MTtcclxuXHJcbiAgICAvLyAgQlxyXG4gICAgdmFyIHgyID0gdHJpYW5nbGUueDI7XHJcbiAgICB2YXIgeTIgPSB0cmlhbmdsZS55MjtcclxuXHJcbiAgICAvLyAgQ1xyXG4gICAgdmFyIHgzID0gdHJpYW5nbGUueDM7XHJcbiAgICB2YXIgeTMgPSB0cmlhbmdsZS55MztcclxuXHJcbiAgICB2YXIgQSA9IHgyIC0geDE7XHJcbiAgICB2YXIgQiA9IHkyIC0geTE7XHJcbiAgICB2YXIgQyA9IHgzIC0geDE7XHJcbiAgICB2YXIgRCA9IHkzIC0geTE7XHJcbiAgICB2YXIgRSA9IEEgKiAoeDEgKyB4MikgKyBCICogKHkxICsgeTIpO1xyXG4gICAgdmFyIEYgPSBDICogKHgxICsgeDMpICsgRCAqICh5MSArIHkzKTtcclxuICAgIHZhciBHID0gMiAqIChBICogKHkzIC0geTIpIC0gQiAqICh4MyAtIHgyKSk7XHJcblxyXG4gICAgdmFyIGR4O1xyXG4gICAgdmFyIGR5O1xyXG5cclxuICAgIC8vICBJZiB0aGUgcG9pbnRzIG9mIHRoZSB0cmlhbmdsZSBhcmUgY29sbGluZWFyLCB0aGVuIGp1c3QgZmluZCB0aGVcclxuICAgIC8vICBleHRyZW1lcyBhbmQgdXNlIHRoZSBtaWRwb2ludCBhcyB0aGUgY2VudGVyIG9mIHRoZSBjaXJjdW1jaXJjbGUuXHJcblxyXG4gICAgaWYgKE1hdGguYWJzKEcpIDwgMC4wMDAwMDEpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG1pblggPSBNYXRoLm1pbih4MSwgeDIsIHgzKTtcclxuICAgICAgICB2YXIgbWluWSA9IE1hdGgubWluKHkxLCB5MiwgeTMpO1xyXG4gICAgICAgIGR4ID0gKE1hdGgubWF4KHgxLCB4MiwgeDMpIC0gbWluWCkgKiAwLjU7XHJcbiAgICAgICAgZHkgPSAoTWF0aC5tYXgoeTEsIHkyLCB5MykgLSBtaW5ZKSAqIDAuNTtcclxuXHJcbiAgICAgICAgb3V0LnggPSBtaW5YICsgZHg7XHJcbiAgICAgICAgb3V0LnkgPSBtaW5ZICsgZHk7XHJcbiAgICAgICAgb3V0LnJhZGl1cyA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgb3V0LnggPSAoRCAqIEUgLSBCICogRikgLyBHO1xyXG4gICAgICAgIG91dC55ID0gKEEgKiBGIC0gQyAqIEUpIC8gRztcclxuICAgICAgICBkeCA9IG91dC54IC0geDE7XHJcbiAgICAgICAgZHkgPSBvdXQueSAtIHkxO1xyXG4gICAgICAgIG91dC5yYWRpdXMgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENpcmN1bUNpcmNsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/CircumCircle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/Clone.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/Clone.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Triangle = __webpack_require__(/*! ./Triangle */ \"./node_modules/phaser/src/geom/triangle/Triangle.js\");\r\n\r\n/**\r\n * Clones a Triangle object.\r\n *\r\n * @function Phaser.Geom.Triangle.Clone\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} source - The Triangle to clone.\r\n *\r\n * @return {Phaser.Geom.Triangle} A new Triangle identical to the given one but separate from it.\r\n */\r\nvar Clone = function (source)\r\n{\r\n return new Triangle(source.x1, source.y1, source.x2, source.y2, source.x3, source.y3);\r\n};\r\n\r\nmodule.exports = Clone;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0Nsb25lLmpzP2I3MGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyx1RUFBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEM7QUFDQSxZQUFZLHFCQUFxQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS90cmlhbmdsZS9DbG9uZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFRyaWFuZ2xlID0gcmVxdWlyZSgnLi9UcmlhbmdsZScpO1xyXG5cclxuLyoqXHJcbiAqIENsb25lcyBhIFRyaWFuZ2xlIG9iamVjdC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlRyaWFuZ2xlLkNsb25lXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSBzb3VyY2UgLSBUaGUgVHJpYW5nbGUgdG8gY2xvbmUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSBBIG5ldyBUcmlhbmdsZSBpZGVudGljYWwgdG8gdGhlIGdpdmVuIG9uZSBidXQgc2VwYXJhdGUgZnJvbSBpdC5cclxuICovXHJcbnZhciBDbG9uZSA9IGZ1bmN0aW9uIChzb3VyY2UpXHJcbntcclxuICAgIHJldHVybiBuZXcgVHJpYW5nbGUoc291cmNlLngxLCBzb3VyY2UueTEsIHNvdXJjZS54Miwgc291cmNlLnkyLCBzb3VyY2UueDMsIHNvdXJjZS55Myk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENsb25lO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/Clone.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/Contains.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/Contains.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n// http://www.blackpawn.com/texts/pointinpoly/\r\n\r\n/**\r\n * Checks if a point (as a pair of coordinates) is inside a Triangle's bounds.\r\n *\r\n * @function Phaser.Geom.Triangle.Contains\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to check.\r\n * @param {number} x - The X coordinate of the point to check.\r\n * @param {number} y - The Y coordinate of the point to check.\r\n *\r\n * @return {boolean} `true` if the point is inside the Triangle, otherwise `false`.\r\n */\r\nvar Contains = function (triangle, x, y)\r\n{\r\n var v0x = triangle.x3 - triangle.x1;\r\n var v0y = triangle.y3 - triangle.y1;\r\n\r\n var v1x = triangle.x2 - triangle.x1;\r\n var v1y = triangle.y2 - triangle.y1;\r\n\r\n var v2x = x - triangle.x1;\r\n var v2y = y - triangle.y1;\r\n\r\n var dot00 = (v0x * v0x) + (v0y * v0y);\r\n var dot01 = (v0x * v1x) + (v0y * v1y);\r\n var dot02 = (v0x * v2x) + (v0y * v2y);\r\n var dot11 = (v1x * v1x) + (v1y * v1y);\r\n var dot12 = (v1x * v2x) + (v1y * v2y);\r\n\r\n // Compute barycentric coordinates\r\n var b = ((dot00 * dot11) - (dot01 * dot01));\r\n var inv = (b === 0) ? 0 : (1 / b);\r\n var u = ((dot11 * dot02) - (dot01 * dot12)) * inv;\r\n var v = ((dot00 * dot12) - (dot01 * dot02)) * inv;\r\n\r\n return (u >= 0 && v >= 0 && (u + v < 1));\r\n};\r\n\r\nmodule.exports = Contains;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0NvbnRhaW5zLmpzP2NmYzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0NvbnRhaW5zLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vLyAgaHR0cDovL3d3dy5ibGFja3Bhd24uY29tL3RleHRzL3BvaW50aW5wb2x5L1xyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBpZiBhIHBvaW50IChhcyBhIHBhaXIgb2YgY29vcmRpbmF0ZXMpIGlzIGluc2lkZSBhIFRyaWFuZ2xlJ3MgYm91bmRzLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uVHJpYW5nbGUuQ29udGFpbnNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlIC0gVGhlIFRyaWFuZ2xlIHRvIGNoZWNrLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIGNoZWNrLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIGNoZWNrLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHBvaW50IGlzIGluc2lkZSB0aGUgVHJpYW5nbGUsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxudmFyIENvbnRhaW5zID0gZnVuY3Rpb24gKHRyaWFuZ2xlLCB4LCB5KVxyXG57XHJcbiAgICB2YXIgdjB4ID0gdHJpYW5nbGUueDMgLSB0cmlhbmdsZS54MTtcclxuICAgIHZhciB2MHkgPSB0cmlhbmdsZS55MyAtIHRyaWFuZ2xlLnkxO1xyXG5cclxuICAgIHZhciB2MXggPSB0cmlhbmdsZS54MiAtIHRyaWFuZ2xlLngxO1xyXG4gICAgdmFyIHYxeSA9IHRyaWFuZ2xlLnkyIC0gdHJpYW5nbGUueTE7XHJcblxyXG4gICAgdmFyIHYyeCA9IHggLSB0cmlhbmdsZS54MTtcclxuICAgIHZhciB2MnkgPSB5IC0gdHJpYW5nbGUueTE7XHJcblxyXG4gICAgdmFyIGRvdDAwID0gKHYweCAqIHYweCkgKyAodjB5ICogdjB5KTtcclxuICAgIHZhciBkb3QwMSA9ICh2MHggKiB2MXgpICsgKHYweSAqIHYxeSk7XHJcbiAgICB2YXIgZG90MDIgPSAodjB4ICogdjJ4KSArICh2MHkgKiB2MnkpO1xyXG4gICAgdmFyIGRvdDExID0gKHYxeCAqIHYxeCkgKyAodjF5ICogdjF5KTtcclxuICAgIHZhciBkb3QxMiA9ICh2MXggKiB2MngpICsgKHYxeSAqIHYyeSk7XHJcblxyXG4gICAgLy8gQ29tcHV0ZSBiYXJ5Y2VudHJpYyBjb29yZGluYXRlc1xyXG4gICAgdmFyIGIgPSAoKGRvdDAwICogZG90MTEpIC0gKGRvdDAxICogZG90MDEpKTtcclxuICAgIHZhciBpbnYgPSAoYiA9PT0gMCkgPyAwIDogKDEgLyBiKTtcclxuICAgIHZhciB1ID0gKChkb3QxMSAqIGRvdDAyKSAtIChkb3QwMSAqIGRvdDEyKSkgKiBpbnY7XHJcbiAgICB2YXIgdiA9ICgoZG90MDAgKiBkb3QxMikgLSAoZG90MDEgKiBkb3QwMikpICogaW52O1xyXG5cclxuICAgIHJldHVybiAodSA+PSAwICYmIHYgPj0gMCAmJiAodSArIHYgPCAxKSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5zO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/Contains.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/ContainsArray.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/ContainsArray.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n// http://www.blackpawn.com/texts/pointinpoly/\r\n\r\n// points is an array of Point-like objects with public x/y properties\r\n// returns an array containing all points that are within the triangle, or an empty array if none\r\n// if 'returnFirst' is true it will return after the first point within the triangle is found\r\n\r\n/**\r\n * Filters an array of point-like objects to only those contained within a triangle.\r\n * If `returnFirst` is true, will return an array containing only the first point in the provided array that is within the triangle (or an empty array if there are no such points).\r\n *\r\n * @function Phaser.Geom.Triangle.ContainsArray\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The triangle that the points are being checked in.\r\n * @param {Phaser.Geom.Point[]} points - An array of point-like objects (objects that have an `x` and `y` property)\r\n * @param {boolean} [returnFirst=false] - If `true`, return an array containing only the first point found that is within the triangle.\r\n * @param {array} [out] - If provided, the points that are within the triangle will be appended to this array instead of being added to a new array. If `returnFirst` is true, only the first point found within the triangle will be appended. This array will also be returned by this function.\r\n *\r\n * @return {Phaser.Geom.Point[]} An array containing all the points from `points` that are within the triangle, if an array was provided as `out`, points will be appended to that array and it will also be returned here.\r\n */\r\nvar ContainsArray = function (triangle, points, returnFirst, out)\r\n{\r\n if (returnFirst === undefined) { returnFirst = false; }\r\n if (out === undefined) { out = []; }\r\n\r\n var v0x = triangle.x3 - triangle.x1;\r\n var v0y = triangle.y3 - triangle.y1;\r\n\r\n var v1x = triangle.x2 - triangle.x1;\r\n var v1y = triangle.y2 - triangle.y1;\r\n\r\n var dot00 = (v0x * v0x) + (v0y * v0y);\r\n var dot01 = (v0x * v1x) + (v0y * v1y);\r\n var dot11 = (v1x * v1x) + (v1y * v1y);\r\n\r\n // Compute barycentric coordinates\r\n var b = ((dot00 * dot11) - (dot01 * dot01));\r\n var inv = (b === 0) ? 0 : (1 / b);\r\n\r\n var u;\r\n var v;\r\n var v2x;\r\n var v2y;\r\n var dot02;\r\n var dot12;\r\n\r\n var x1 = triangle.x1;\r\n var y1 = triangle.y1;\r\n\r\n for (var i = 0; i < points.length; i++)\r\n {\r\n v2x = points[i].x - x1;\r\n v2y = points[i].y - y1;\r\n\r\n dot02 = (v0x * v2x) + (v0y * v2y);\r\n dot12 = (v1x * v2x) + (v1y * v2y);\r\n\r\n u = ((dot11 * dot02) - (dot01 * dot12)) * inv;\r\n v = ((dot00 * dot12) - (dot01 * dot02)) * inv;\r\n \r\n if (u >= 0 && v >= 0 && (u + v < 1))\r\n {\r\n out.push({ x: points[i].x, y: points[i].y });\r\n\r\n if (returnFirst)\r\n {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = ContainsArray;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0NvbnRhaW5zQXJyYXkuanM/MjY1MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVyxRQUFRO0FBQ25CLFdBQVcsTUFBTTtBQUNqQjtBQUNBLFlBQVksb0JBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxxQkFBcUI7QUFDekQsNEJBQTRCLFVBQVU7O0FBRXRDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0JBQXNCLGlDQUFpQzs7QUFFdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0NvbnRhaW5zQXJyYXkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8vICBodHRwOi8vd3d3LmJsYWNrcGF3bi5jb20vdGV4dHMvcG9pbnRpbnBvbHkvXHJcblxyXG4vLyAgcG9pbnRzIGlzIGFuIGFycmF5IG9mIFBvaW50LWxpa2Ugb2JqZWN0cyB3aXRoIHB1YmxpYyB4L3kgcHJvcGVydGllc1xyXG4vLyAgcmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIGFsbCBwb2ludHMgdGhhdCBhcmUgd2l0aGluIHRoZSB0cmlhbmdsZSwgb3IgYW4gZW1wdHkgYXJyYXkgaWYgbm9uZVxyXG4vLyAgaWYgJ3JldHVybkZpcnN0JyBpcyB0cnVlIGl0IHdpbGwgcmV0dXJuIGFmdGVyIHRoZSBmaXJzdCBwb2ludCB3aXRoaW4gdGhlIHRyaWFuZ2xlIGlzIGZvdW5kXHJcblxyXG4vKipcclxuICogRmlsdGVycyBhbiBhcnJheSBvZiBwb2ludC1saWtlIG9iamVjdHMgdG8gb25seSB0aG9zZSBjb250YWluZWQgd2l0aGluIGEgdHJpYW5nbGUuXHJcbiAqIElmIGByZXR1cm5GaXJzdGAgaXMgdHJ1ZSwgd2lsbCByZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyBvbmx5IHRoZSBmaXJzdCBwb2ludCBpbiB0aGUgcHJvdmlkZWQgYXJyYXkgdGhhdCBpcyB3aXRoaW4gdGhlIHRyaWFuZ2xlIChvciBhbiBlbXB0eSBhcnJheSBpZiB0aGVyZSBhcmUgbm8gc3VjaCBwb2ludHMpLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uVHJpYW5nbGUuQ29udGFpbnNBcnJheVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gdHJpYW5nbGUgLSBUaGUgdHJpYW5nbGUgdGhhdCB0aGUgcG9pbnRzIGFyZSBiZWluZyBjaGVja2VkIGluLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50W119IHBvaW50cyAtIEFuIGFycmF5IG9mIHBvaW50LWxpa2Ugb2JqZWN0cyAob2JqZWN0cyB0aGF0IGhhdmUgYW4gYHhgIGFuZCBgeWAgcHJvcGVydHkpXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldHVybkZpcnN0PWZhbHNlXSAtIElmIGB0cnVlYCwgcmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgb25seSB0aGUgZmlyc3QgcG9pbnQgZm91bmQgdGhhdCBpcyB3aXRoaW4gdGhlIHRyaWFuZ2xlLlxyXG4gKiBAcGFyYW0ge2FycmF5fSBbb3V0XSAtIElmIHByb3ZpZGVkLCB0aGUgcG9pbnRzIHRoYXQgYXJlIHdpdGhpbiB0aGUgdHJpYW5nbGUgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGlzIGFycmF5IGluc3RlYWQgb2YgYmVpbmcgYWRkZWQgdG8gYSBuZXcgYXJyYXkuIElmIGByZXR1cm5GaXJzdGAgaXMgdHJ1ZSwgb25seSB0aGUgZmlyc3QgcG9pbnQgZm91bmQgd2l0aGluIHRoZSB0cmlhbmdsZSB3aWxsIGJlIGFwcGVuZGVkLiBUaGlzIGFycmF5IHdpbGwgYWxzbyBiZSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5Qb2ludFtdfSBBbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgcG9pbnRzIGZyb20gYHBvaW50c2AgdGhhdCBhcmUgd2l0aGluIHRoZSB0cmlhbmdsZSwgaWYgYW4gYXJyYXkgd2FzIHByb3ZpZGVkIGFzIGBvdXRgLCBwb2ludHMgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGF0IGFycmF5IGFuZCBpdCB3aWxsIGFsc28gYmUgcmV0dXJuZWQgaGVyZS5cclxuICovXHJcbnZhciBDb250YWluc0FycmF5ID0gZnVuY3Rpb24gKHRyaWFuZ2xlLCBwb2ludHMsIHJldHVybkZpcnN0LCBvdXQpXHJcbntcclxuICAgIGlmIChyZXR1cm5GaXJzdCA9PT0gdW5kZWZpbmVkKSB7IHJldHVybkZpcnN0ID0gZmFsc2U7IH1cclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBbXTsgfVxyXG5cclxuICAgIHZhciB2MHggPSB0cmlhbmdsZS54MyAtIHRyaWFuZ2xlLngxO1xyXG4gICAgdmFyIHYweSA9IHRyaWFuZ2xlLnkzIC0gdHJpYW5nbGUueTE7XHJcblxyXG4gICAgdmFyIHYxeCA9IHRyaWFuZ2xlLngyIC0gdHJpYW5nbGUueDE7XHJcbiAgICB2YXIgdjF5ID0gdHJpYW5nbGUueTIgLSB0cmlhbmdsZS55MTtcclxuXHJcbiAgICB2YXIgZG90MDAgPSAodjB4ICogdjB4KSArICh2MHkgKiB2MHkpO1xyXG4gICAgdmFyIGRvdDAxID0gKHYweCAqIHYxeCkgKyAodjB5ICogdjF5KTtcclxuICAgIHZhciBkb3QxMSA9ICh2MXggKiB2MXgpICsgKHYxeSAqIHYxeSk7XHJcblxyXG4gICAgLy8gQ29tcHV0ZSBiYXJ5Y2VudHJpYyBjb29yZGluYXRlc1xyXG4gICAgdmFyIGIgPSAoKGRvdDAwICogZG90MTEpIC0gKGRvdDAxICogZG90MDEpKTtcclxuICAgIHZhciBpbnYgPSAoYiA9PT0gMCkgPyAwIDogKDEgLyBiKTtcclxuXHJcbiAgICB2YXIgdTtcclxuICAgIHZhciB2O1xyXG4gICAgdmFyIHYyeDtcclxuICAgIHZhciB2Mnk7XHJcbiAgICB2YXIgZG90MDI7XHJcbiAgICB2YXIgZG90MTI7XHJcblxyXG4gICAgdmFyIHgxID0gdHJpYW5nbGUueDE7XHJcbiAgICB2YXIgeTEgPSB0cmlhbmdsZS55MTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgICB2MnggPSBwb2ludHNbaV0ueCAtIHgxO1xyXG4gICAgICAgIHYyeSA9IHBvaW50c1tpXS55IC0geTE7XHJcblxyXG4gICAgICAgIGRvdDAyID0gKHYweCAqIHYyeCkgKyAodjB5ICogdjJ5KTtcclxuICAgICAgICBkb3QxMiA9ICh2MXggKiB2MngpICsgKHYxeSAqIHYyeSk7XHJcblxyXG4gICAgICAgIHUgPSAoKGRvdDExICogZG90MDIpIC0gKGRvdDAxICogZG90MTIpKSAqIGludjtcclxuICAgICAgICB2ID0gKChkb3QwMCAqIGRvdDEyKSAtIChkb3QwMSAqIGRvdDAyKSkgKiBpbnY7XHJcbiAgICBcclxuICAgICAgICBpZiAodSA+PSAwICYmIHYgPj0gMCAmJiAodSArIHYgPCAxKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG91dC5wdXNoKHsgeDogcG9pbnRzW2ldLngsIHk6IHBvaW50c1tpXS55IH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJldHVybkZpcnN0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb250YWluc0FycmF5O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/ContainsArray.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/ContainsPoint.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/ContainsPoint.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/triangle/Contains.js\");\r\n\r\n/**\r\n * Tests if a triangle contains a point.\r\n *\r\n * @function Phaser.Geom.Triangle.ContainsPoint\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The triangle.\r\n * @param {(Phaser.Geom.Point|Phaser.Math.Vector2|any)} point - The point to test, or any point-like object with public `x` and `y` properties.\r\n *\r\n * @return {boolean} `true` if the point is within the triangle, otherwise `false`.\r\n */\r\nvar ContainsPoint = function (triangle, point)\r\n{\r\n return Contains(triangle, point.x, point.y);\r\n};\r\n\r\nmodule.exports = ContainsPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0NvbnRhaW5zUG9pbnQuanM/NzYzNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLHVFQUFZOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLDRDQUE0QztBQUN2RDtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS90cmlhbmdsZS9Db250YWluc1BvaW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ29udGFpbnMgPSByZXF1aXJlKCcuL0NvbnRhaW5zJyk7XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgYSB0cmlhbmdsZSBjb250YWlucyBhIHBvaW50LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uVHJpYW5nbGUuQ29udGFpbnNQb2ludFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gdHJpYW5nbGUgLSBUaGUgdHJpYW5nbGUuXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlBvaW50fFBoYXNlci5NYXRoLlZlY3RvcjJ8YW55KX0gcG9pbnQgLSBUaGUgcG9pbnQgdG8gdGVzdCwgb3IgYW55IHBvaW50LWxpa2Ugb2JqZWN0IHdpdGggcHVibGljIGB4YCBhbmQgYHlgIHByb3BlcnRpZXMuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgcG9pbnQgaXMgd2l0aGluIHRoZSB0cmlhbmdsZSwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAqL1xyXG52YXIgQ29udGFpbnNQb2ludCA9IGZ1bmN0aW9uICh0cmlhbmdsZSwgcG9pbnQpXHJcbntcclxuICAgIHJldHVybiBDb250YWlucyh0cmlhbmdsZSwgcG9pbnQueCwgcG9pbnQueSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5zUG9pbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/ContainsPoint.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/CopyFrom.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/CopyFrom.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Copy the values of one Triangle to a destination Triangle.\r\n *\r\n * @function Phaser.Geom.Triangle.CopyFrom\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Triangle} O - [dest,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} source - The source Triangle to copy the values from.\r\n * @param {Phaser.Geom.Triangle} dest - The destination Triangle to copy the values to.\r\n *\r\n * @return {Phaser.Geom.Triangle} The destination Triangle.\r\n */\r\nvar CopyFrom = function (source, dest)\r\n{\r\n return dest.setTo(source.x1, source.y1, source.x2, source.y2, source.x3, source.y3);\r\n};\r\n\r\nmodule.exports = CopyFrom;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0NvcHlGcm9tLmpzPzgxMGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEscUJBQXFCO0FBQ2xDO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxxQkFBcUI7QUFDaEM7QUFDQSxZQUFZLHFCQUFxQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS90cmlhbmdsZS9Db3B5RnJvbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBvZiBvbmUgVHJpYW5nbGUgdG8gYSBkZXN0aW5hdGlvbiBUcmlhbmdsZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlRyaWFuZ2xlLkNvcHlGcm9tXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IE8gLSBbZGVzdCwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSBzb3VyY2UgLSBUaGUgc291cmNlIFRyaWFuZ2xlIHRvIGNvcHkgdGhlIHZhbHVlcyBmcm9tLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSBkZXN0IC0gVGhlIGRlc3RpbmF0aW9uIFRyaWFuZ2xlIHRvIGNvcHkgdGhlIHZhbHVlcyB0by5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IFRoZSBkZXN0aW5hdGlvbiBUcmlhbmdsZS5cclxuICovXHJcbnZhciBDb3B5RnJvbSA9IGZ1bmN0aW9uIChzb3VyY2UsIGRlc3QpXHJcbntcclxuICAgIHJldHVybiBkZXN0LnNldFRvKHNvdXJjZS54MSwgc291cmNlLnkxLCBzb3VyY2UueDIsIHNvdXJjZS55Miwgc291cmNlLngzLCBzb3VyY2UueTMpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb3B5RnJvbTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/CopyFrom.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/Decompose.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/Decompose.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Decomposes a Triangle into an array of its points.\r\n *\r\n * @function Phaser.Geom.Triangle.Decompose\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to decompose.\r\n * @param {array} [out] - An array to store the points into.\r\n *\r\n * @return {array} The provided `out` array, or a new array if none was provided, with three objects with `x` and `y` properties representing each point of the Triangle appended to it.\r\n */\r\nvar Decompose = function (triangle, out)\r\n{\r\n if (out === undefined) { out = []; }\r\n\r\n out.push({ x: triangle.x1, y: triangle.y1 });\r\n out.push({ x: triangle.x2, y: triangle.y2 });\r\n out.push({ x: triangle.x3, y: triangle.y3 });\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = Decompose;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0RlY29tcG9zZS5qcz8wM2Q5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLE1BQU07QUFDakI7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7O0FBRXRDLGNBQWMsaUNBQWlDO0FBQy9DLGNBQWMsaUNBQWlDO0FBQy9DLGNBQWMsaUNBQWlDOztBQUUvQztBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS90cmlhbmdsZS9EZWNvbXBvc2UuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBEZWNvbXBvc2VzIGEgVHJpYW5nbGUgaW50byBhbiBhcnJheSBvZiBpdHMgcG9pbnRzLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uVHJpYW5nbGUuRGVjb21wb3NlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSB0cmlhbmdsZSAtIFRoZSBUcmlhbmdsZSB0byBkZWNvbXBvc2UuXHJcbiAqIEBwYXJhbSB7YXJyYXl9IFtvdXRdIC0gQW4gYXJyYXkgdG8gc3RvcmUgdGhlIHBvaW50cyBpbnRvLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHthcnJheX0gVGhlIHByb3ZpZGVkIGBvdXRgIGFycmF5LCBvciBhIG5ldyBhcnJheSBpZiBub25lIHdhcyBwcm92aWRlZCwgd2l0aCB0aHJlZSBvYmplY3RzIHdpdGggYHhgIGFuZCBgeWAgcHJvcGVydGllcyByZXByZXNlbnRpbmcgZWFjaCBwb2ludCBvZiB0aGUgVHJpYW5nbGUgYXBwZW5kZWQgdG8gaXQuXHJcbiAqL1xyXG52YXIgRGVjb21wb3NlID0gZnVuY3Rpb24gKHRyaWFuZ2xlLCBvdXQpXHJcbntcclxuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkgeyBvdXQgPSBbXTsgfVxyXG5cclxuICAgIG91dC5wdXNoKHsgeDogdHJpYW5nbGUueDEsIHk6IHRyaWFuZ2xlLnkxIH0pO1xyXG4gICAgb3V0LnB1c2goeyB4OiB0cmlhbmdsZS54MiwgeTogdHJpYW5nbGUueTIgfSk7XHJcbiAgICBvdXQucHVzaCh7IHg6IHRyaWFuZ2xlLngzLCB5OiB0cmlhbmdsZS55MyB9KTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBEZWNvbXBvc2U7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/Decompose.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/Equals.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/Equals.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns true if two triangles have the same coordinates.\r\n *\r\n * @function Phaser.Geom.Triangle.Equals\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The first triangle to check.\r\n * @param {Phaser.Geom.Triangle} toCompare - The second triangle to check.\r\n *\r\n * @return {boolean} `true` if the two given triangles have the exact same coordinates, otherwise `false`.\r\n */\r\nvar Equals = function (triangle, toCompare)\r\n{\r\n return (\r\n triangle.x1 === toCompare.x1 &&\r\n triangle.y1 === toCompare.y1 &&\r\n triangle.x2 === toCompare.x2 &&\r\n triangle.y2 === toCompare.y2 &&\r\n triangle.x3 === toCompare.x3 &&\r\n triangle.y3 === toCompare.y3\r\n );\r\n};\r\n\r\nmodule.exports = Equals;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0VxdWFscy5qcz9lN2U1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLHFCQUFxQjtBQUNoQztBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0VxdWFscy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdHJ1ZSBpZiB0d28gdHJpYW5nbGVzIGhhdmUgdGhlIHNhbWUgY29vcmRpbmF0ZXMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5UcmlhbmdsZS5FcXVhbHNcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlIC0gVGhlIGZpcnN0IHRyaWFuZ2xlIHRvIGNoZWNrLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSB0b0NvbXBhcmUgLSBUaGUgc2Vjb25kIHRyaWFuZ2xlIHRvIGNoZWNrLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHR3byBnaXZlbiB0cmlhbmdsZXMgaGF2ZSB0aGUgZXhhY3Qgc2FtZSBjb29yZGluYXRlcywgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAqL1xyXG52YXIgRXF1YWxzID0gZnVuY3Rpb24gKHRyaWFuZ2xlLCB0b0NvbXBhcmUpXHJcbntcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgdHJpYW5nbGUueDEgPT09IHRvQ29tcGFyZS54MSAmJlxyXG4gICAgICAgIHRyaWFuZ2xlLnkxID09PSB0b0NvbXBhcmUueTEgJiZcclxuICAgICAgICB0cmlhbmdsZS54MiA9PT0gdG9Db21wYXJlLngyICYmXHJcbiAgICAgICAgdHJpYW5nbGUueTIgPT09IHRvQ29tcGFyZS55MiAmJlxyXG4gICAgICAgIHRyaWFuZ2xlLngzID09PSB0b0NvbXBhcmUueDMgJiZcclxuICAgICAgICB0cmlhbmdsZS55MyA9PT0gdG9Db21wYXJlLnkzXHJcbiAgICApO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFcXVhbHM7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/Equals.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/GetPoint.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/GetPoint.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\nvar Length = __webpack_require__(/*! ../line/Length */ \"./node_modules/phaser/src/geom/line/Length.js\");\r\n\r\n/**\r\n * Returns a Point from around the perimeter of a Triangle.\r\n *\r\n * @function Phaser.Geom.Triangle.GetPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to get the point on its perimeter from.\r\n * @param {number} position - The position along the perimeter of the triangle. A value between 0 and 1.\r\n * @param {(Phaser.Geom.Point|object)} [out] - An option Point, or Point-like object to store the value in. If not given a new Point will be created.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} A Point object containing the given position from the perimeter of the triangle.\r\n */\r\nvar GetPoint = function (triangle, position, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n var line1 = triangle.getLineA();\r\n var line2 = triangle.getLineB();\r\n var line3 = triangle.getLineC();\r\n\r\n if (position <= 0 || position >= 1)\r\n {\r\n out.x = line1.x1;\r\n out.y = line1.y1;\r\n\r\n return out;\r\n }\r\n\r\n var length1 = Length(line1);\r\n var length2 = Length(line2);\r\n var length3 = Length(line3);\r\n\r\n var perimeter = length1 + length2 + length3;\r\n\r\n var p = perimeter * position;\r\n var localPosition = 0;\r\n\r\n // Which line is it on?\r\n\r\n if (p < length1)\r\n {\r\n // Line 1\r\n localPosition = p / length1;\r\n\r\n out.x = line1.x1 + (line1.x2 - line1.x1) * localPosition;\r\n out.y = line1.y1 + (line1.y2 - line1.y1) * localPosition;\r\n }\r\n else if (p > length1 + length2)\r\n {\r\n // Line 3\r\n p -= length1 + length2;\r\n localPosition = p / length3;\r\n\r\n out.x = line3.x1 + (line3.x2 - line3.x1) * localPosition;\r\n out.y = line3.y1 + (line3.y2 - line3.y1) * localPosition;\r\n }\r\n else\r\n {\r\n // Line 2\r\n p -= length1;\r\n localPosition = p / length2;\r\n\r\n out.x = line2.x1 + (line2.x2 - line2.x1) * localPosition;\r\n out.y = line2.y1 + (line2.y2 - line2.y1) * localPosition;\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0dldFBvaW50LmpzP2YxMWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRUFBZ0I7QUFDcEMsYUFBYSxtQkFBTyxDQUFDLHFFQUFnQjs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLE9BQU87QUFDbEIsV0FBVywyQkFBMkI7QUFDdEM7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsbUJBQW1COztBQUUvQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0dldFBvaW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG52YXIgTGVuZ3RoID0gcmVxdWlyZSgnLi4vbGluZS9MZW5ndGgnKTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgUG9pbnQgZnJvbSBhcm91bmQgdGhlIHBlcmltZXRlciBvZiBhIFRyaWFuZ2xlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uVHJpYW5nbGUuR2V0UG9pbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gdHJpYW5nbGUgLSBUaGUgVHJpYW5nbGUgdG8gZ2V0IHRoZSBwb2ludCBvbiBpdHMgcGVyaW1ldGVyIGZyb20uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvbiAtIFRoZSBwb3NpdGlvbiBhbG9uZyB0aGUgcGVyaW1ldGVyIG9mIHRoZSB0cmlhbmdsZS4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAqIEBwYXJhbSB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IFtvdXRdIC0gQW4gb3B0aW9uIFBvaW50LCBvciBQb2ludC1saWtlIG9iamVjdCB0byBzdG9yZSB0aGUgdmFsdWUgaW4uIElmIG5vdCBnaXZlbiBhIG5ldyBQb2ludCB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBBIFBvaW50IG9iamVjdCBjb250YWluaW5nIHRoZSBnaXZlbiBwb3NpdGlvbiBmcm9tIHRoZSBwZXJpbWV0ZXIgb2YgdGhlIHRyaWFuZ2xlLlxyXG4gKi9cclxudmFyIEdldFBvaW50ID0gZnVuY3Rpb24gKHRyaWFuZ2xlLCBwb3NpdGlvbiwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFBvaW50KCk7IH1cclxuXHJcbiAgICB2YXIgbGluZTEgPSB0cmlhbmdsZS5nZXRMaW5lQSgpO1xyXG4gICAgdmFyIGxpbmUyID0gdHJpYW5nbGUuZ2V0TGluZUIoKTtcclxuICAgIHZhciBsaW5lMyA9IHRyaWFuZ2xlLmdldExpbmVDKCk7XHJcblxyXG4gICAgaWYgKHBvc2l0aW9uIDw9IDAgfHwgcG9zaXRpb24gPj0gMSlcclxuICAgIHtcclxuICAgICAgICBvdXQueCA9IGxpbmUxLngxO1xyXG4gICAgICAgIG91dC55ID0gbGluZTEueTE7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGxlbmd0aDEgPSBMZW5ndGgobGluZTEpO1xyXG4gICAgdmFyIGxlbmd0aDIgPSBMZW5ndGgobGluZTIpO1xyXG4gICAgdmFyIGxlbmd0aDMgPSBMZW5ndGgobGluZTMpO1xyXG5cclxuICAgIHZhciBwZXJpbWV0ZXIgPSBsZW5ndGgxICsgbGVuZ3RoMiArIGxlbmd0aDM7XHJcblxyXG4gICAgdmFyIHAgPSBwZXJpbWV0ZXIgKiBwb3NpdGlvbjtcclxuICAgIHZhciBsb2NhbFBvc2l0aW9uID0gMDtcclxuXHJcbiAgICAvLyAgV2hpY2ggbGluZSBpcyBpdCBvbj9cclxuXHJcbiAgICBpZiAocCA8IGxlbmd0aDEpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIExpbmUgMVxyXG4gICAgICAgIGxvY2FsUG9zaXRpb24gPSBwIC8gbGVuZ3RoMTtcclxuXHJcbiAgICAgICAgb3V0LnggPSBsaW5lMS54MSArIChsaW5lMS54MiAtIGxpbmUxLngxKSAqIGxvY2FsUG9zaXRpb247XHJcbiAgICAgICAgb3V0LnkgPSBsaW5lMS55MSArIChsaW5lMS55MiAtIGxpbmUxLnkxKSAqIGxvY2FsUG9zaXRpb247XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwID4gbGVuZ3RoMSArIGxlbmd0aDIpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIExpbmUgM1xyXG4gICAgICAgIHAgLT0gbGVuZ3RoMSArIGxlbmd0aDI7XHJcbiAgICAgICAgbG9jYWxQb3NpdGlvbiA9IHAgLyBsZW5ndGgzO1xyXG5cclxuICAgICAgICBvdXQueCA9IGxpbmUzLngxICsgKGxpbmUzLngyIC0gbGluZTMueDEpICogbG9jYWxQb3NpdGlvbjtcclxuICAgICAgICBvdXQueSA9IGxpbmUzLnkxICsgKGxpbmUzLnkyIC0gbGluZTMueTEpICogbG9jYWxQb3NpdGlvbjtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICAvLyAgTGluZSAyXHJcbiAgICAgICAgcCAtPSBsZW5ndGgxO1xyXG4gICAgICAgIGxvY2FsUG9zaXRpb24gPSBwIC8gbGVuZ3RoMjtcclxuXHJcbiAgICAgICAgb3V0LnggPSBsaW5lMi54MSArIChsaW5lMi54MiAtIGxpbmUyLngxKSAqIGxvY2FsUG9zaXRpb247XHJcbiAgICAgICAgb3V0LnkgPSBsaW5lMi55MSArIChsaW5lMi55MiAtIGxpbmUyLnkxKSAqIGxvY2FsUG9zaXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0UG9pbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/GetPoint.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/GetPoints.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/GetPoints.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Length = __webpack_require__(/*! ../line/Length */ \"./node_modules/phaser/src/geom/line/Length.js\");\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * Returns an array of evenly spaced points on the perimeter of a Triangle.\r\n *\r\n * @function Phaser.Geom.Triangle.GetPoints\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to get the points from.\r\n * @param {integer} quantity - The number of evenly spaced points to return. Set to 0 to return an arbitrary number of points based on the `stepRate`.\r\n * @param {number} stepRate - If `quantity` is 0, the distance between each returned point.\r\n * @param {(array|Phaser.Geom.Point[])} [out] - An array to which the points should be appended.\r\n *\r\n * @return {(array|Phaser.Geom.Point[])} The modified `out` array, or a new array if none was provided.\r\n */\r\nvar GetPoints = function (triangle, quantity, stepRate, out)\r\n{\r\n if (out === undefined) { out = []; }\r\n\r\n var line1 = triangle.getLineA();\r\n var line2 = triangle.getLineB();\r\n var line3 = triangle.getLineC();\r\n\r\n var length1 = Length(line1);\r\n var length2 = Length(line2);\r\n var length3 = Length(line3);\r\n\r\n var perimeter = length1 + length2 + length3;\r\n\r\n // If quantity is a falsey value (false, null, 0, undefined, etc) then we calculate it based on the stepRate instead.\r\n if (!quantity)\r\n {\r\n quantity = perimeter / stepRate;\r\n }\r\n\r\n for (var i = 0; i < quantity; i++)\r\n {\r\n var p = perimeter * (i / quantity);\r\n var localPosition = 0;\r\n\r\n var point = new Point();\r\n\r\n // Which line is it on?\r\n\r\n if (p < length1)\r\n {\r\n // Line 1\r\n localPosition = p / length1;\r\n\r\n point.x = line1.x1 + (line1.x2 - line1.x1) * localPosition;\r\n point.y = line1.y1 + (line1.y2 - line1.y1) * localPosition;\r\n }\r\n else if (p > length1 + length2)\r\n {\r\n // Line 3\r\n p -= length1 + length2;\r\n localPosition = p / length3;\r\n\r\n point.x = line3.x1 + (line3.x2 - line3.x1) * localPosition;\r\n point.y = line3.y1 + (line3.y2 - line3.y1) * localPosition;\r\n }\r\n else\r\n {\r\n // Line 2\r\n p -= length1;\r\n localPosition = p / length2;\r\n\r\n point.x = line2.x1 + (line2.x2 - line2.x1) * localPosition;\r\n point.y = line2.y1 + (line2.y2 - line2.y1) * localPosition;\r\n }\r\n\r\n out.push(point);\r\n }\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = GetPoints;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0dldFBvaW50cy5qcz9jZTI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMscUVBQWdCO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxxRUFBZ0I7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQixXQUFXLDRCQUE0QjtBQUN2QztBQUNBLFlBQVksNEJBQTRCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVOztBQUV0QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGNBQWM7QUFDakM7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS90cmlhbmdsZS9HZXRQb2ludHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBMZW5ndGggPSByZXF1aXJlKCcuLi9saW5lL0xlbmd0aCcpO1xyXG52YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9wb2ludC9Qb2ludCcpO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgZXZlbmx5IHNwYWNlZCBwb2ludHMgb24gdGhlIHBlcmltZXRlciBvZiBhIFRyaWFuZ2xlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uVHJpYW5nbGUuR2V0UG9pbnRzXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnR9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlIC0gVGhlIFRyaWFuZ2xlIHRvIGdldCB0aGUgcG9pbnRzIGZyb20uXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gcXVhbnRpdHkgLSBUaGUgbnVtYmVyIG9mIGV2ZW5seSBzcGFjZWQgcG9pbnRzIHRvIHJldHVybi4gU2V0IHRvIDAgdG8gcmV0dXJuIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgcG9pbnRzIGJhc2VkIG9uIHRoZSBgc3RlcFJhdGVgLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gc3RlcFJhdGUgLSBJZiBgcXVhbnRpdHlgIGlzIDAsIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIGVhY2ggcmV0dXJuZWQgcG9pbnQuXHJcbiAqIEBwYXJhbSB7KGFycmF5fFBoYXNlci5HZW9tLlBvaW50W10pfSBbb3V0XSAtIEFuIGFycmF5IHRvIHdoaWNoIHRoZSBwb2ludHMgc2hvdWxkIGJlIGFwcGVuZGVkLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdlb20uUG9pbnRbXSl9IFRoZSBtb2RpZmllZCBgb3V0YCBhcnJheSwgb3IgYSBuZXcgYXJyYXkgaWYgbm9uZSB3YXMgcHJvdmlkZWQuXHJcbiAqL1xyXG52YXIgR2V0UG9pbnRzID0gZnVuY3Rpb24gKHRyaWFuZ2xlLCBxdWFudGl0eSwgc3RlcFJhdGUsIG91dClcclxue1xyXG4gICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IFtdOyB9XHJcblxyXG4gICAgdmFyIGxpbmUxID0gdHJpYW5nbGUuZ2V0TGluZUEoKTtcclxuICAgIHZhciBsaW5lMiA9IHRyaWFuZ2xlLmdldExpbmVCKCk7XHJcbiAgICB2YXIgbGluZTMgPSB0cmlhbmdsZS5nZXRMaW5lQygpO1xyXG5cclxuICAgIHZhciBsZW5ndGgxID0gTGVuZ3RoKGxpbmUxKTtcclxuICAgIHZhciBsZW5ndGgyID0gTGVuZ3RoKGxpbmUyKTtcclxuICAgIHZhciBsZW5ndGgzID0gTGVuZ3RoKGxpbmUzKTtcclxuXHJcbiAgICB2YXIgcGVyaW1ldGVyID0gbGVuZ3RoMSArIGxlbmd0aDIgKyBsZW5ndGgzO1xyXG5cclxuICAgIC8vICBJZiBxdWFudGl0eSBpcyBhIGZhbHNleSB2YWx1ZSAoZmFsc2UsIG51bGwsIDAsIHVuZGVmaW5lZCwgZXRjKSB0aGVuIHdlIGNhbGN1bGF0ZSBpdCBiYXNlZCBvbiB0aGUgc3RlcFJhdGUgaW5zdGVhZC5cclxuICAgIGlmICghcXVhbnRpdHkpXHJcbiAgICB7XHJcbiAgICAgICAgcXVhbnRpdHkgPSBwZXJpbWV0ZXIgLyBzdGVwUmF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1YW50aXR5OyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHAgPSBwZXJpbWV0ZXIgKiAoaSAvIHF1YW50aXR5KTtcclxuICAgICAgICB2YXIgbG9jYWxQb3NpdGlvbiA9IDA7XHJcblxyXG4gICAgICAgIHZhciBwb2ludCA9IG5ldyBQb2ludCgpO1xyXG5cclxuICAgICAgICAvLyAgV2hpY2ggbGluZSBpcyBpdCBvbj9cclxuXHJcbiAgICAgICAgaWYgKHAgPCBsZW5ndGgxKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIExpbmUgMVxyXG4gICAgICAgICAgICBsb2NhbFBvc2l0aW9uID0gcCAvIGxlbmd0aDE7XHJcblxyXG4gICAgICAgICAgICBwb2ludC54ID0gbGluZTEueDEgKyAobGluZTEueDIgLSBsaW5lMS54MSkgKiBsb2NhbFBvc2l0aW9uO1xyXG4gICAgICAgICAgICBwb2ludC55ID0gbGluZTEueTEgKyAobGluZTEueTIgLSBsaW5lMS55MSkgKiBsb2NhbFBvc2l0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChwID4gbGVuZ3RoMSArIGxlbmd0aDIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgTGluZSAzXHJcbiAgICAgICAgICAgIHAgLT0gbGVuZ3RoMSArIGxlbmd0aDI7XHJcbiAgICAgICAgICAgIGxvY2FsUG9zaXRpb24gPSBwIC8gbGVuZ3RoMztcclxuXHJcbiAgICAgICAgICAgIHBvaW50LnggPSBsaW5lMy54MSArIChsaW5lMy54MiAtIGxpbmUzLngxKSAqIGxvY2FsUG9zaXRpb247XHJcbiAgICAgICAgICAgIHBvaW50LnkgPSBsaW5lMy55MSArIChsaW5lMy55MiAtIGxpbmUzLnkxKSAqIGxvY2FsUG9zaXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBMaW5lIDJcclxuICAgICAgICAgICAgcCAtPSBsZW5ndGgxO1xyXG4gICAgICAgICAgICBsb2NhbFBvc2l0aW9uID0gcCAvIGxlbmd0aDI7XHJcblxyXG4gICAgICAgICAgICBwb2ludC54ID0gbGluZTIueDEgKyAobGluZTIueDIgLSBsaW5lMi54MSkgKiBsb2NhbFBvc2l0aW9uO1xyXG4gICAgICAgICAgICBwb2ludC55ID0gbGluZTIueTEgKyAobGluZTIueTIgLSBsaW5lMi55MSkgKiBsb2NhbFBvc2l0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgb3V0LnB1c2gocG9pbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEdldFBvaW50cztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/GetPoints.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/InCenter.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/InCenter.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n// The three angle bisectors of a triangle meet in one point called the incenter.\r\n// It is the center of the incircle, the circle inscribed in the triangle.\r\n\r\nfunction getLength (x1, y1, x2, y2)\r\n{\r\n var x = x1 - x2;\r\n var y = y1 - y2;\r\n var magnitude = (x * x) + (y * y);\r\n\r\n return Math.sqrt(magnitude);\r\n}\r\n\r\n/**\r\n * Calculates the position of the incenter of a Triangle object. This is the point where its three angle bisectors meet and it's also the center of the incircle, which is the circle inscribed in the triangle.\r\n *\r\n * @function Phaser.Geom.Triangle.InCenter\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to find the incenter of.\r\n * @param {Phaser.Geom.Point} [out] - An optional Point in which to store the coordinates.\r\n *\r\n * @return {Phaser.Geom.Point} Point (x, y) of the center pixel of the triangle.\r\n */\r\nvar InCenter = function (triangle, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n var x1 = triangle.x1;\r\n var y1 = triangle.y1;\r\n\r\n var x2 = triangle.x2;\r\n var y2 = triangle.y2;\r\n\r\n var x3 = triangle.x3;\r\n var y3 = triangle.y3;\r\n\r\n var d1 = getLength(x3, y3, x2, y2);\r\n var d2 = getLength(x1, y1, x3, y3);\r\n var d3 = getLength(x2, y2, x1, y1);\r\n\r\n var p = d1 + d2 + d3;\r\n\r\n out.x = (x1 * d1 + x2 * d2 + x3 * d3) / p;\r\n out.y = (y1 * d1 + y2 * d2 + y3 * d3) / p;\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = InCenter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL0luQ2VudGVyLmpzPzI0NjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxxRUFBZ0I7O0FBRXBDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxrQkFBa0I7QUFDN0I7QUFDQSxZQUFZLGtCQUFrQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsbUJBQW1COztBQUUvQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS90cmlhbmdsZS9JbkNlbnRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vcG9pbnQvUG9pbnQnKTtcclxuXHJcbi8vIFRoZSB0aHJlZSBhbmdsZSBiaXNlY3RvcnMgb2YgYSB0cmlhbmdsZSBtZWV0IGluIG9uZSBwb2ludCBjYWxsZWQgdGhlIGluY2VudGVyLlxyXG4vLyBJdCBpcyB0aGUgY2VudGVyIG9mIHRoZSBpbmNpcmNsZSwgdGhlIGNpcmNsZSBpbnNjcmliZWQgaW4gdGhlIHRyaWFuZ2xlLlxyXG5cclxuZnVuY3Rpb24gZ2V0TGVuZ3RoICh4MSwgeTEsIHgyLCB5Milcclxue1xyXG4gICAgdmFyIHggPSB4MSAtIHgyO1xyXG4gICAgdmFyIHkgPSB5MSAtIHkyO1xyXG4gICAgdmFyIG1hZ25pdHVkZSA9ICh4ICogeCkgKyAoeSAqIHkpO1xyXG5cclxuICAgIHJldHVybiBNYXRoLnNxcnQobWFnbml0dWRlKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBpbmNlbnRlciBvZiBhIFRyaWFuZ2xlIG9iamVjdC4gVGhpcyBpcyB0aGUgcG9pbnQgd2hlcmUgaXRzIHRocmVlIGFuZ2xlIGJpc2VjdG9ycyBtZWV0IGFuZCBpdCdzIGFsc28gdGhlIGNlbnRlciBvZiB0aGUgaW5jaXJjbGUsIHdoaWNoIGlzIHRoZSBjaXJjbGUgaW5zY3JpYmVkIGluIHRoZSB0cmlhbmdsZS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlRyaWFuZ2xlLkluQ2VudGVyXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnR9IE8gLSBbb3V0LCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlIC0gVGhlIFRyaWFuZ2xlIHRvIGZpbmQgdGhlIGluY2VudGVyIG9mLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBbb3V0XSAtIEFuIG9wdGlvbmFsIFBvaW50IGluIHdoaWNoIHRvIHN0b3JlIHRoZSBjb29yZGluYXRlcy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uUG9pbnR9IFBvaW50ICh4LCB5KSBvZiB0aGUgY2VudGVyIHBpeGVsIG9mIHRoZSB0cmlhbmdsZS5cclxuICovXHJcbnZhciBJbkNlbnRlciA9IGZ1bmN0aW9uICh0cmlhbmdsZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFBvaW50KCk7IH1cclxuXHJcbiAgICB2YXIgeDEgPSB0cmlhbmdsZS54MTtcclxuICAgIHZhciB5MSA9IHRyaWFuZ2xlLnkxO1xyXG5cclxuICAgIHZhciB4MiA9IHRyaWFuZ2xlLngyO1xyXG4gICAgdmFyIHkyID0gdHJpYW5nbGUueTI7XHJcblxyXG4gICAgdmFyIHgzID0gdHJpYW5nbGUueDM7XHJcbiAgICB2YXIgeTMgPSB0cmlhbmdsZS55MztcclxuXHJcbiAgICB2YXIgZDEgPSBnZXRMZW5ndGgoeDMsIHkzLCB4MiwgeTIpO1xyXG4gICAgdmFyIGQyID0gZ2V0TGVuZ3RoKHgxLCB5MSwgeDMsIHkzKTtcclxuICAgIHZhciBkMyA9IGdldExlbmd0aCh4MiwgeTIsIHgxLCB5MSk7XHJcblxyXG4gICAgdmFyIHAgPSBkMSArIGQyICsgZDM7XHJcblxyXG4gICAgb3V0LnggPSAoeDEgKiBkMSArIHgyICogZDIgKyB4MyAqIGQzKSAvIHA7XHJcbiAgICBvdXQueSA9ICh5MSAqIGQxICsgeTIgKiBkMiArIHkzICogZDMpIC8gcDtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbkNlbnRlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/InCenter.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/Offset.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/Offset.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Moves each point (vertex) of a Triangle by a given offset, thus moving the entire Triangle by that offset.\r\n *\r\n * @function Phaser.Geom.Triangle.Offset\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Triangle} O - [triangle,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to move.\r\n * @param {number} x - The horizontal offset (distance) by which to move each point. Can be positive or negative.\r\n * @param {number} y - The vertical offset (distance) by which to move each point. Can be positive or negative.\r\n *\r\n * @return {Phaser.Geom.Triangle} The modified Triangle.\r\n */\r\nvar Offset = function (triangle, x, y)\r\n{\r\n triangle.x1 += x;\r\n triangle.y1 += y;\r\n\r\n triangle.x2 += x;\r\n triangle.y2 += y;\r\n\r\n triangle.x3 += x;\r\n triangle.y3 += y;\r\n\r\n return triangle;\r\n};\r\n\r\nmodule.exports = Offset;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL09mZnNldC5qcz8yYzk3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHFCQUFxQjtBQUNsQztBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHFCQUFxQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS90cmlhbmdsZS9PZmZzZXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBNb3ZlcyBlYWNoIHBvaW50ICh2ZXJ0ZXgpIG9mIGEgVHJpYW5nbGUgYnkgYSBnaXZlbiBvZmZzZXQsIHRodXMgbW92aW5nIHRoZSBlbnRpcmUgVHJpYW5nbGUgYnkgdGhhdCBvZmZzZXQuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5UcmlhbmdsZS5PZmZzZXRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gTyAtIFt0cmlhbmdsZSwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSB0cmlhbmdsZSAtIFRoZSBUcmlhbmdsZSB0byBtb3ZlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBob3Jpem9udGFsIG9mZnNldCAoZGlzdGFuY2UpIGJ5IHdoaWNoIHRvIG1vdmUgZWFjaCBwb2ludC4gQ2FuIGJlIHBvc2l0aXZlIG9yIG5lZ2F0aXZlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB2ZXJ0aWNhbCBvZmZzZXQgKGRpc3RhbmNlKSBieSB3aGljaCB0byBtb3ZlIGVhY2ggcG9pbnQuIENhbiBiZSBwb3NpdGl2ZSBvciBuZWdhdGl2ZS5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IFRoZSBtb2RpZmllZCBUcmlhbmdsZS5cclxuICovXHJcbnZhciBPZmZzZXQgPSBmdW5jdGlvbiAodHJpYW5nbGUsIHgsIHkpXHJcbntcclxuICAgIHRyaWFuZ2xlLngxICs9IHg7XHJcbiAgICB0cmlhbmdsZS55MSArPSB5O1xyXG5cclxuICAgIHRyaWFuZ2xlLngyICs9IHg7XHJcbiAgICB0cmlhbmdsZS55MiArPSB5O1xyXG5cclxuICAgIHRyaWFuZ2xlLngzICs9IHg7XHJcbiAgICB0cmlhbmdsZS55MyArPSB5O1xyXG5cclxuICAgIHJldHVybiB0cmlhbmdsZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gT2Zmc2V0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/Offset.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/Perimeter.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/Perimeter.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Length = __webpack_require__(/*! ../line/Length */ \"./node_modules/phaser/src/geom/line/Length.js\");\r\n\r\n// The 2D area of a triangle. The area value is always non-negative.\r\n\r\n/**\r\n * Gets the length of the perimeter of the given triangle.\r\n *\r\n * @function Phaser.Geom.Triangle.Perimeter\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - [description]\r\n *\r\n * @return {number} [description]\r\n */\r\nvar Perimeter = function (triangle)\r\n{\r\n var line1 = triangle.getLineA();\r\n var line2 = triangle.getLineB();\r\n var line3 = triangle.getLineC();\r\n\r\n return (Length(line1) + Length(line2) + Length(line3));\r\n};\r\n\r\nmodule.exports = Perimeter;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL1BlcmltZXRlci5qcz80MWEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMscUVBQWdCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQztBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2dlb20vdHJpYW5nbGUvUGVyaW1ldGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgTGVuZ3RoID0gcmVxdWlyZSgnLi4vbGluZS9MZW5ndGgnKTtcclxuXHJcbi8vIFRoZSAyRCBhcmVhIG9mIGEgdHJpYW5nbGUuIFRoZSBhcmVhIHZhbHVlIGlzIGFsd2F5cyBub24tbmVnYXRpdmUuXHJcblxyXG4vKipcclxuICogR2V0cyB0aGUgbGVuZ3RoIG9mIHRoZSBwZXJpbWV0ZXIgb2YgdGhlIGdpdmVuIHRyaWFuZ2xlLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uVHJpYW5nbGUuUGVyaW1ldGVyXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSB0cmlhbmdsZSAtIFtkZXNjcmlwdGlvbl1cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBbZGVzY3JpcHRpb25dXHJcbiAqL1xyXG52YXIgUGVyaW1ldGVyID0gZnVuY3Rpb24gKHRyaWFuZ2xlKVxyXG57XHJcbiAgICB2YXIgbGluZTEgPSB0cmlhbmdsZS5nZXRMaW5lQSgpO1xyXG4gICAgdmFyIGxpbmUyID0gdHJpYW5nbGUuZ2V0TGluZUIoKTtcclxuICAgIHZhciBsaW5lMyA9IHRyaWFuZ2xlLmdldExpbmVDKCk7XHJcblxyXG4gICAgcmV0dXJuIChMZW5ndGgobGluZTEpICsgTGVuZ3RoKGxpbmUyKSArIExlbmd0aChsaW5lMykpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQZXJpbWV0ZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/Perimeter.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/Random.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/Random.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Point = __webpack_require__(/*! ../point/Point */ \"./node_modules/phaser/src/geom/point/Point.js\");\r\n\r\n/**\r\n * [description]\r\n *\r\n * @function Phaser.Geom.Triangle.Random\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [out,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - [description]\r\n * @param {Phaser.Geom.Point} [out] - [description]\r\n *\r\n * @return {Phaser.Geom.Point} [description]\r\n */\r\nvar Random = function (triangle, out)\r\n{\r\n if (out === undefined) { out = new Point(); }\r\n\r\n // Basis vectors\r\n var ux = triangle.x2 - triangle.x1;\r\n var uy = triangle.y2 - triangle.y1;\r\n\r\n var vx = triangle.x3 - triangle.x1;\r\n var vy = triangle.y3 - triangle.y1;\r\n\r\n // Random point within the unit square\r\n var r = Math.random();\r\n var s = Math.random();\r\n\r\n // Point outside the triangle? Remap it.\r\n if (r + s >= 1)\r\n {\r\n r = 1 - r;\r\n s = 1 - s;\r\n }\r\n\r\n out.x = triangle.x1 + ((ux * r) + (vx * s));\r\n out.y = triangle.y1 + ((uy * r) + (vy * s));\r\n\r\n return out;\r\n};\r\n\r\nmodule.exports = Random;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL1JhbmRvbS5qcz9lZWQ1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMscUVBQWdCOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGtCQUFrQjtBQUMvQjtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsa0JBQWtCO0FBQzdCO0FBQ0EsWUFBWSxrQkFBa0I7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLG1CQUFtQjs7QUFFL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL1JhbmRvbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vcG9pbnQvUG9pbnQnKTtcclxuXHJcbi8qKlxyXG4gKiBbZGVzY3JpcHRpb25dXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuR2VvbS5UcmlhbmdsZS5SYW5kb21cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5Qb2ludH0gTyAtIFtvdXQsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gdHJpYW5nbGUgLSBbZGVzY3JpcHRpb25dXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uUG9pbnR9IFtvdXRdIC0gW2Rlc2NyaXB0aW9uXVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5Qb2ludH0gW2Rlc2NyaXB0aW9uXVxyXG4gKi9cclxudmFyIFJhbmRvbSA9IGZ1bmN0aW9uICh0cmlhbmdsZSwgb3V0KVxyXG57XHJcbiAgICBpZiAob3V0ID09PSB1bmRlZmluZWQpIHsgb3V0ID0gbmV3IFBvaW50KCk7IH1cclxuXHJcbiAgICAvLyAgQmFzaXMgdmVjdG9yc1xyXG4gICAgdmFyIHV4ID0gdHJpYW5nbGUueDIgLSB0cmlhbmdsZS54MTtcclxuICAgIHZhciB1eSA9IHRyaWFuZ2xlLnkyIC0gdHJpYW5nbGUueTE7XHJcblxyXG4gICAgdmFyIHZ4ID0gdHJpYW5nbGUueDMgLSB0cmlhbmdsZS54MTtcclxuICAgIHZhciB2eSA9IHRyaWFuZ2xlLnkzIC0gdHJpYW5nbGUueTE7XHJcblxyXG4gICAgLy8gIFJhbmRvbSBwb2ludCB3aXRoaW4gdGhlIHVuaXQgc3F1YXJlXHJcbiAgICB2YXIgciA9IE1hdGgucmFuZG9tKCk7XHJcbiAgICB2YXIgcyA9IE1hdGgucmFuZG9tKCk7XHJcblxyXG4gICAgLy8gIFBvaW50IG91dHNpZGUgdGhlIHRyaWFuZ2xlPyBSZW1hcCBpdC5cclxuICAgIGlmIChyICsgcyA+PSAxKVxyXG4gICAge1xyXG4gICAgICAgIHIgPSAxIC0gcjtcclxuICAgICAgICBzID0gMSAtIHM7XHJcbiAgICB9XHJcblxyXG4gICAgb3V0LnggPSB0cmlhbmdsZS54MSArICgodXggKiByKSArICh2eCAqIHMpKTtcclxuICAgIG91dC55ID0gdHJpYW5nbGUueTEgKyAoKHV5ICogcikgKyAodnkgKiBzKSk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmFuZG9tO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/Random.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/Rotate.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/Rotate.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar RotateAroundXY = __webpack_require__(/*! ./RotateAroundXY */ \"./node_modules/phaser/src/geom/triangle/RotateAroundXY.js\");\r\nvar InCenter = __webpack_require__(/*! ./InCenter */ \"./node_modules/phaser/src/geom/triangle/InCenter.js\");\r\n\r\n/**\r\n * Rotates a Triangle about its incenter, which is the point at which its three angle bisectors meet.\r\n *\r\n * @function Phaser.Geom.Triangle.Rotate\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Triangle} O - [triangle,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to rotate.\r\n * @param {number} angle - The angle by which to rotate the Triangle, in radians.\r\n *\r\n * @return {Phaser.Geom.Triangle} The rotated Triangle.\r\n */\r\nvar Rotate = function (triangle, angle)\r\n{\r\n var point = InCenter(triangle);\r\n\r\n return RotateAroundXY(triangle, point.x, point.y, angle);\r\n};\r\n\r\nmodule.exports = Rotate;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL1JvdGF0ZS5qcz84OTdlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxxQkFBcUIsbUJBQU8sQ0FBQyxtRkFBa0I7QUFDL0MsZUFBZSxtQkFBTyxDQUFDLHVFQUFZOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHFCQUFxQjtBQUNsQztBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVkscUJBQXFCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL1JvdGF0ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFJvdGF0ZUFyb3VuZFhZID0gcmVxdWlyZSgnLi9Sb3RhdGVBcm91bmRYWScpO1xyXG52YXIgSW5DZW50ZXIgPSByZXF1aXJlKCcuL0luQ2VudGVyJyk7XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIFRyaWFuZ2xlIGFib3V0IGl0cyBpbmNlbnRlciwgd2hpY2ggaXMgdGhlIHBvaW50IGF0IHdoaWNoIGl0cyB0aHJlZSBhbmdsZSBiaXNlY3RvcnMgbWVldC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlRyaWFuZ2xlLlJvdGF0ZVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSBPIC0gW3RyaWFuZ2xlLCRyZXR1cm5dXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IHRyaWFuZ2xlIC0gVGhlIFRyaWFuZ2xlIHRvIHJvdGF0ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIGJ5IHdoaWNoIHRvIHJvdGF0ZSB0aGUgVHJpYW5nbGUsIGluIHJhZGlhbnMuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSBUaGUgcm90YXRlZCBUcmlhbmdsZS5cclxuICovXHJcbnZhciBSb3RhdGUgPSBmdW5jdGlvbiAodHJpYW5nbGUsIGFuZ2xlKVxyXG57XHJcbiAgICB2YXIgcG9pbnQgPSBJbkNlbnRlcih0cmlhbmdsZSk7XHJcblxyXG4gICAgcmV0dXJuIFJvdGF0ZUFyb3VuZFhZKHRyaWFuZ2xlLCBwb2ludC54LCBwb2ludC55LCBhbmdsZSk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJvdGF0ZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/Rotate.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/RotateAroundPoint.js":
/*!********************************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/RotateAroundPoint.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar RotateAroundXY = __webpack_require__(/*! ./RotateAroundXY */ \"./node_modules/phaser/src/geom/triangle/RotateAroundXY.js\");\r\n\r\n/**\r\n * Rotates a Triangle at a certain angle about a given Point or object with public `x` and `y` properties.\r\n *\r\n * @function Phaser.Geom.Triangle.RotateAroundPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Triangle} O - [triangle,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to rotate.\r\n * @param {Phaser.Geom.Point} point - The Point to rotate the Triangle about.\r\n * @param {number} angle - The angle by which to rotate the Triangle, in radians.\r\n *\r\n * @return {Phaser.Geom.Triangle} The rotated Triangle.\r\n */\r\nvar RotateAroundPoint = function (triangle, point, angle)\r\n{\r\n return RotateAroundXY(triangle, point.x, point.y, angle);\r\n};\r\n\r\nmodule.exports = RotateAroundPoint;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL1JvdGF0ZUFyb3VuZFBvaW50LmpzPzc2YzgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHFCQUFxQixtQkFBTyxDQUFDLG1GQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxxQkFBcUI7QUFDbEM7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLGtCQUFrQjtBQUM3QixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHFCQUFxQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS90cmlhbmdsZS9Sb3RhdGVBcm91bmRQb2ludC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIFJvdGF0ZUFyb3VuZFhZID0gcmVxdWlyZSgnLi9Sb3RhdGVBcm91bmRYWScpO1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBUcmlhbmdsZSBhdCBhIGNlcnRhaW4gYW5nbGUgYWJvdXQgYSBnaXZlbiBQb2ludCBvciBvYmplY3Qgd2l0aCBwdWJsaWMgYHhgIGFuZCBgeWAgcHJvcGVydGllcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5HZW9tLlRyaWFuZ2xlLlJvdGF0ZUFyb3VuZFBvaW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IE8gLSBbdHJpYW5nbGUsJHJldHVybl1cclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gdHJpYW5nbGUgLSBUaGUgVHJpYW5nbGUgdG8gcm90YXRlLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBwb2ludCAtIFRoZSBQb2ludCB0byByb3RhdGUgdGhlIFRyaWFuZ2xlIGFib3V0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgYW5nbGUgYnkgd2hpY2ggdG8gcm90YXRlIHRoZSBUcmlhbmdsZSwgaW4gcmFkaWFucy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IFRoZSByb3RhdGVkIFRyaWFuZ2xlLlxyXG4gKi9cclxudmFyIFJvdGF0ZUFyb3VuZFBvaW50ID0gZnVuY3Rpb24gKHRyaWFuZ2xlLCBwb2ludCwgYW5nbGUpXHJcbntcclxuICAgIHJldHVybiBSb3RhdGVBcm91bmRYWSh0cmlhbmdsZSwgcG9pbnQueCwgcG9pbnQueSwgYW5nbGUpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSb3RhdGVBcm91bmRQb2ludDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/RotateAroundPoint.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/RotateAroundXY.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/RotateAroundXY.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Rotates an entire Triangle at a given angle about a specific point.\r\n *\r\n * @function Phaser.Geom.Triangle.RotateAroundXY\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Triangle} O - [triangle,$return]\r\n *\r\n * @param {Phaser.Geom.Triangle} triangle - The Triangle to rotate.\r\n * @param {number} x - The X coordinate of the point to rotate the Triangle about.\r\n * @param {number} y - The Y coordinate of the point to rotate the Triangle about.\r\n * @param {number} angle - The angle by which to rotate the Triangle, in radians.\r\n *\r\n * @return {Phaser.Geom.Triangle} The rotated Triangle.\r\n */\r\nvar RotateAroundXY = function (triangle, x, y, angle)\r\n{\r\n var c = Math.cos(angle);\r\n var s = Math.sin(angle);\r\n\r\n var tx = triangle.x1 - x;\r\n var ty = triangle.y1 - y;\r\n\r\n triangle.x1 = tx * c - ty * s + x;\r\n triangle.y1 = tx * s + ty * c + y;\r\n\r\n tx = triangle.x2 - x;\r\n ty = triangle.y2 - y;\r\n\r\n triangle.x2 = tx * c - ty * s + x;\r\n triangle.y2 = tx * s + ty * c + y;\r\n\r\n tx = triangle.x3 - x;\r\n ty = triangle.y3 - y;\r\n\r\n triangle.x3 = tx * c - ty * s + x;\r\n triangle.y3 = tx * s + ty * c + y;\r\n\r\n return triangle;\r\n};\r\n\r\nmodule.exports = RotateAroundXY;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL1JvdGF0ZUFyb3VuZFhZLmpzP2RiNTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEscUJBQXFCO0FBQ2xDO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZLHFCQUFxQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL1JvdGF0ZUFyb3VuZFhZLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUm90YXRlcyBhbiBlbnRpcmUgVHJpYW5nbGUgYXQgYSBnaXZlbiBhbmdsZSBhYm91dCBhIHNwZWNpZmljIHBvaW50LlxyXG4gKlxyXG4gKiBAZnVuY3Rpb24gUGhhc2VyLkdlb20uVHJpYW5nbGUuUm90YXRlQXJvdW5kWFlcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5UcmlhbmdsZX0gTyAtIFt0cmlhbmdsZSwkcmV0dXJuXVxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HZW9tLlRyaWFuZ2xlfSB0cmlhbmdsZSAtIFRoZSBUcmlhbmdsZSB0byByb3RhdGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gcm90YXRlIHRoZSBUcmlhbmdsZSBhYm91dC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byByb3RhdGUgdGhlIFRyaWFuZ2xlIGFib3V0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGUgLSBUaGUgYW5nbGUgYnkgd2hpY2ggdG8gcm90YXRlIHRoZSBUcmlhbmdsZSwgaW4gcmFkaWFucy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IFRoZSByb3RhdGVkIFRyaWFuZ2xlLlxyXG4gKi9cclxudmFyIFJvdGF0ZUFyb3VuZFhZID0gZnVuY3Rpb24gKHRyaWFuZ2xlLCB4LCB5LCBhbmdsZSlcclxue1xyXG4gICAgdmFyIGMgPSBNYXRoLmNvcyhhbmdsZSk7XHJcbiAgICB2YXIgcyA9IE1hdGguc2luKGFuZ2xlKTtcclxuXHJcbiAgICB2YXIgdHggPSB0cmlhbmdsZS54MSAtIHg7XHJcbiAgICB2YXIgdHkgPSB0cmlhbmdsZS55MSAtIHk7XHJcblxyXG4gICAgdHJpYW5nbGUueDEgPSB0eCAqIGMgLSB0eSAqIHMgKyB4O1xyXG4gICAgdHJpYW5nbGUueTEgPSB0eCAqIHMgKyB0eSAqIGMgKyB5O1xyXG5cclxuICAgIHR4ID0gdHJpYW5nbGUueDIgLSB4O1xyXG4gICAgdHkgPSB0cmlhbmdsZS55MiAtIHk7XHJcblxyXG4gICAgdHJpYW5nbGUueDIgPSB0eCAqIGMgLSB0eSAqIHMgKyB4O1xyXG4gICAgdHJpYW5nbGUueTIgPSB0eCAqIHMgKyB0eSAqIGMgKyB5O1xyXG5cclxuICAgIHR4ID0gdHJpYW5nbGUueDMgLSB4O1xyXG4gICAgdHkgPSB0cmlhbmdsZS55MyAtIHk7XHJcblxyXG4gICAgdHJpYW5nbGUueDMgPSB0eCAqIGMgLSB0eSAqIHMgKyB4O1xyXG4gICAgdHJpYW5nbGUueTMgPSB0eCAqIHMgKyB0eSAqIGMgKyB5O1xyXG5cclxuICAgIHJldHVybiB0cmlhbmdsZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUm90YXRlQXJvdW5kWFk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/RotateAroundXY.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/Triangle.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/Triangle.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/triangle/Contains.js\");\r\nvar GetPoint = __webpack_require__(/*! ./GetPoint */ \"./node_modules/phaser/src/geom/triangle/GetPoint.js\");\r\nvar GetPoints = __webpack_require__(/*! ./GetPoints */ \"./node_modules/phaser/src/geom/triangle/GetPoints.js\");\r\nvar GEOM_CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/geom/const.js\");\r\nvar Line = __webpack_require__(/*! ../line/Line */ \"./node_modules/phaser/src/geom/line/Line.js\");\r\nvar Random = __webpack_require__(/*! ./Random */ \"./node_modules/phaser/src/geom/triangle/Random.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A triangle is a plane created by connecting three points.\r\n * The first two arguments specify the first point, the middle two arguments\r\n * specify the second point, and the last two arguments specify the third point.\r\n *\r\n * @class Triangle\r\n * @memberof Phaser.Geom\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x1=0] - `x` coordinate of the first point.\r\n * @param {number} [y1=0] - `y` coordinate of the first point.\r\n * @param {number} [x2=0] - `x` coordinate of the second point.\r\n * @param {number} [y2=0] - `y` coordinate of the second point.\r\n * @param {number} [x3=0] - `x` coordinate of the third point.\r\n * @param {number} [y3=0] - `y` coordinate of the third point.\r\n */\r\nvar Triangle = new Class({\r\n\r\n initialize:\r\n\r\n function Triangle (x1, y1, x2, y2, x3, y3)\r\n {\r\n if (x1 === undefined) { x1 = 0; }\r\n if (y1 === undefined) { y1 = 0; }\r\n if (x2 === undefined) { x2 = 0; }\r\n if (y2 === undefined) { y2 = 0; }\r\n if (x3 === undefined) { x3 = 0; }\r\n if (y3 === undefined) { y3 = 0; }\r\n\r\n /**\r\n * The geometry constant type of this object: `GEOM_CONST.TRIANGLE`.\r\n * Used for fast type comparisons.\r\n *\r\n * @name Phaser.Geom.Triangle#type\r\n * @type {integer}\r\n * @readonly\r\n * @since 3.19.0\r\n */\r\n this.type = GEOM_CONST.TRIANGLE;\r\n\r\n /**\r\n * `x` coordinate of the first point.\r\n *\r\n * @name Phaser.Geom.Triangle#x1\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.x1 = x1;\r\n\r\n /**\r\n * `y` coordinate of the first point.\r\n *\r\n * @name Phaser.Geom.Triangle#y1\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.y1 = y1;\r\n\r\n /**\r\n * `x` coordinate of the second point.\r\n *\r\n * @name Phaser.Geom.Triangle#x2\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.x2 = x2;\r\n\r\n /**\r\n * `y` coordinate of the second point.\r\n *\r\n * @name Phaser.Geom.Triangle#y2\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.y2 = y2;\r\n\r\n /**\r\n * `x` coordinate of the third point.\r\n *\r\n * @name Phaser.Geom.Triangle#x3\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.x3 = x3;\r\n\r\n /**\r\n * `y` coordinate of the third point.\r\n *\r\n * @name Phaser.Geom.Triangle#y3\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.y3 = y3;\r\n },\r\n\r\n /**\r\n * Checks whether a given points lies within the triangle.\r\n *\r\n * @method Phaser.Geom.Triangle#contains\r\n * @since 3.0.0\r\n *\r\n * @param {number} x - The x coordinate of the point to check.\r\n * @param {number} y - The y coordinate of the point to check.\r\n *\r\n * @return {boolean} `true` if the coordinate pair is within the triangle, otherwise `false`.\r\n */\r\n contains: function (x, y)\r\n {\r\n return Contains(this, x, y);\r\n },\r\n\r\n /**\r\n * Returns a specific point on the triangle.\r\n *\r\n * @method Phaser.Geom.Triangle#getPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [output,$return]\r\n *\r\n * @param {number} position - Position as float within `0` and `1`. `0` equals the first point.\r\n * @param {(Phaser.Geom.Point|object)} [output] - Optional Point, or point-like object, that the calculated point will be written to.\r\n *\r\n * @return {(Phaser.Geom.Point|object)} Calculated `Point` that represents the requested position. It is the same as `output` when this parameter has been given.\r\n */\r\n getPoint: function (position, output)\r\n {\r\n return GetPoint(this, position, output);\r\n },\r\n\r\n /**\r\n * Calculates a list of evenly distributed points on the triangle. It is either possible to pass an amount of points to be generated (`quantity`) or the distance between two points (`stepRate`).\r\n *\r\n * @method Phaser.Geom.Triangle#getPoints\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point[]} O - [output,$return]\r\n *\r\n * @param {integer} quantity - Number of points to be generated. Can be falsey when `stepRate` should be used. All points have the same distance along the triangle.\r\n * @param {number} [stepRate] - Distance between two points. Will only be used when `quantity` is falsey.\r\n * @param {(array|Phaser.Geom.Point[])} [output] - Optional Array for writing the calculated points into. Otherwise a new array will be created.\r\n *\r\n * @return {(array|Phaser.Geom.Point[])} Returns a list of calculated `Point` instances or the filled array passed as parameter `output`.\r\n */\r\n getPoints: function (quantity, stepRate, output)\r\n {\r\n return GetPoints(this, quantity, stepRate, output);\r\n },\r\n\r\n /**\r\n * Returns a random point along the triangle.\r\n *\r\n * @method Phaser.Geom.Triangle#getRandomPoint\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Point} O - [point,$return]\r\n *\r\n * @param {Phaser.Geom.Point} [point] - Optional `Point` that should be modified. Otherwise a new one will be created.\r\n *\r\n * @return {Phaser.Geom.Point} Random `Point`. When parameter `point` has been provided it will be returned.\r\n */\r\n getRandomPoint: function (point)\r\n {\r\n return Random(this, point);\r\n },\r\n\r\n /**\r\n * Sets all three points of the triangle. Leaving out any coordinate sets it to be `0`.\r\n *\r\n * @method Phaser.Geom.Triangle#setTo\r\n * @since 3.0.0\r\n *\r\n * @param {number} [x1=0] - `x` coordinate of the first point.\r\n * @param {number} [y1=0] - `y` coordinate of the first point.\r\n * @param {number} [x2=0] - `x` coordinate of the second point.\r\n * @param {number} [y2=0] - `y` coordinate of the second point.\r\n * @param {number} [x3=0] - `x` coordinate of the third point.\r\n * @param {number} [y3=0] - `y` coordinate of the third point.\r\n *\r\n * @return {Phaser.Geom.Triangle} This Triangle object.\r\n */\r\n setTo: function (x1, y1, x2, y2, x3, y3)\r\n {\r\n if (x1 === undefined) { x1 = 0; }\r\n if (y1 === undefined) { y1 = 0; }\r\n if (x2 === undefined) { x2 = 0; }\r\n if (y2 === undefined) { y2 = 0; }\r\n if (x3 === undefined) { x3 = 0; }\r\n if (y3 === undefined) { y3 = 0; }\r\n\r\n this.x1 = x1;\r\n this.y1 = y1;\r\n\r\n this.x2 = x2;\r\n this.y2 = y2;\r\n\r\n this.x3 = x3;\r\n this.y3 = y3;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Returns a Line object that corresponds to Line A of this Triangle.\r\n *\r\n * @method Phaser.Geom.Triangle#getLineA\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Line} O - [line,$return]\r\n *\r\n * @param {Phaser.Geom.Line} [line] - A Line object to set the results in. If `undefined` a new Line will be created.\r\n *\r\n * @return {Phaser.Geom.Line} A Line object that corresponds to line A of this Triangle.\r\n */\r\n getLineA: function (line)\r\n {\r\n if (line === undefined) { line = new Line(); }\r\n\r\n line.setTo(this.x1, this.y1, this.x2, this.y2);\r\n\r\n return line;\r\n },\r\n\r\n /**\r\n * Returns a Line object that corresponds to Line B of this Triangle.\r\n *\r\n * @method Phaser.Geom.Triangle#getLineB\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Line} O - [line,$return]\r\n *\r\n * @param {Phaser.Geom.Line} [line] - A Line object to set the results in. If `undefined` a new Line will be created.\r\n *\r\n * @return {Phaser.Geom.Line} A Line object that corresponds to line B of this Triangle.\r\n */\r\n getLineB: function (line)\r\n {\r\n if (line === undefined) { line = new Line(); }\r\n\r\n line.setTo(this.x2, this.y2, this.x3, this.y3);\r\n\r\n return line;\r\n },\r\n\r\n /**\r\n * Returns a Line object that corresponds to Line C of this Triangle.\r\n *\r\n * @method Phaser.Geom.Triangle#getLineC\r\n * @since 3.0.0\r\n *\r\n * @generic {Phaser.Geom.Line} O - [line,$return]\r\n *\r\n * @param {Phaser.Geom.Line} [line] - A Line object to set the results in. If `undefined` a new Line will be created.\r\n *\r\n * @return {Phaser.Geom.Line} A Line object that corresponds to line C of this Triangle.\r\n */\r\n getLineC: function (line)\r\n {\r\n if (line === undefined) { line = new Line(); }\r\n\r\n line.setTo(this.x3, this.y3, this.x1, this.y1);\r\n\r\n return line;\r\n },\r\n\r\n /**\r\n * Left most X coordinate of the triangle. Setting it moves the triangle on the X axis accordingly.\r\n *\r\n * @name Phaser.Geom.Triangle#left\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n left: {\r\n\r\n get: function ()\r\n {\r\n return Math.min(this.x1, this.x2, this.x3);\r\n },\r\n\r\n set: function (value)\r\n {\r\n var diff = 0;\r\n\r\n if (this.x1 <= this.x2 && this.x1 <= this.x3)\r\n {\r\n diff = this.x1 - value;\r\n }\r\n else if (this.x2 <= this.x1 && this.x2 <= this.x3)\r\n {\r\n diff = this.x2 - value;\r\n }\r\n else\r\n {\r\n diff = this.x3 - value;\r\n }\r\n\r\n this.x1 -= diff;\r\n this.x2 -= diff;\r\n this.x3 -= diff;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Right most X coordinate of the triangle. Setting it moves the triangle on the X axis accordingly.\r\n *\r\n * @name Phaser.Geom.Triangle#right\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n right: {\r\n\r\n get: function ()\r\n {\r\n return Math.max(this.x1, this.x2, this.x3);\r\n },\r\n\r\n set: function (value)\r\n {\r\n var diff = 0;\r\n\r\n if (this.x1 >= this.x2 && this.x1 >= this.x3)\r\n {\r\n diff = this.x1 - value;\r\n }\r\n else if (this.x2 >= this.x1 && this.x2 >= this.x3)\r\n {\r\n diff = this.x2 - value;\r\n }\r\n else\r\n {\r\n diff = this.x3 - value;\r\n }\r\n\r\n this.x1 -= diff;\r\n this.x2 -= diff;\r\n this.x3 -= diff;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Top most Y coordinate of the triangle. Setting it moves the triangle on the Y axis accordingly.\r\n *\r\n * @name Phaser.Geom.Triangle#top\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n top: {\r\n\r\n get: function ()\r\n {\r\n return Math.min(this.y1, this.y2, this.y3);\r\n },\r\n\r\n set: function (value)\r\n {\r\n var diff = 0;\r\n\r\n if (this.y1 <= this.y2 && this.y1 <= this.y3)\r\n {\r\n diff = this.y1 - value;\r\n }\r\n else if (this.y2 <= this.y1 && this.y2 <= this.y3)\r\n {\r\n diff = this.y2 - value;\r\n }\r\n else\r\n {\r\n diff = this.y3 - value;\r\n }\r\n\r\n this.y1 -= diff;\r\n this.y2 -= diff;\r\n this.y3 -= diff;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Bottom most Y coordinate of the triangle. Setting it moves the triangle on the Y axis accordingly.\r\n *\r\n * @name Phaser.Geom.Triangle#bottom\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n bottom: {\r\n\r\n get: function ()\r\n {\r\n return Math.max(this.y1, this.y2, this.y3);\r\n },\r\n\r\n set: function (value)\r\n {\r\n var diff = 0;\r\n\r\n if (this.y1 >= this.y2 && this.y1 >= this.y3)\r\n {\r\n diff = this.y1 - value;\r\n }\r\n else if (this.y2 >= this.y1 && this.y2 >= this.y3)\r\n {\r\n diff = this.y2 - value;\r\n }\r\n else\r\n {\r\n diff = this.y3 - value;\r\n }\r\n\r\n this.y1 -= diff;\r\n this.y2 -= diff;\r\n this.y3 -= diff;\r\n }\r\n\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Triangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL1RyaWFuZ2xlLmpzP2Y2YmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLHVFQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyx1RUFBWTtBQUNuQyxnQkFBZ0IsbUJBQU8sQ0FBQyx5RUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyx5REFBVTtBQUNuQyxXQUFXLG1CQUFPLENBQUMsaUVBQWM7QUFDakMsYUFBYSxtQkFBTyxDQUFDLG1FQUFVOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsK0JBQStCLFFBQVE7QUFDdkMsK0JBQStCLFFBQVE7QUFDdkMsK0JBQStCLFFBQVE7QUFDdkMsK0JBQStCLFFBQVE7QUFDdkMsK0JBQStCLFFBQVE7QUFDdkMsK0JBQStCLFFBQVE7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLDJCQUEyQjtBQUMxQztBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixvQkFBb0I7QUFDckM7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsNEJBQTRCO0FBQzNDO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBLGVBQWUsa0JBQWtCO0FBQ2pDO0FBQ0EsZ0JBQWdCLGtCQUFrQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IscUJBQXFCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixRQUFRO0FBQ3ZDLCtCQUErQixRQUFRO0FBQ3ZDLCtCQUErQixRQUFRO0FBQ3ZDLCtCQUErQixRQUFRO0FBQ3ZDLCtCQUErQixRQUFRO0FBQ3ZDLCtCQUErQixRQUFROztBQUV2QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLGlCQUFpQjtBQUNqQztBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsbUJBQW1COztBQUVwRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLGlCQUFpQjtBQUNqQztBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsbUJBQW1COztBQUVwRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0EsZ0JBQWdCLGlCQUFpQjtBQUNqQztBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsbUJBQW1COztBQUVwRDs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvZ2VvbS90cmlhbmdsZS9UcmlhbmdsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENvbnRhaW5zID0gcmVxdWlyZSgnLi9Db250YWlucycpO1xyXG52YXIgR2V0UG9pbnQgPSByZXF1aXJlKCcuL0dldFBvaW50Jyk7XHJcbnZhciBHZXRQb2ludHMgPSByZXF1aXJlKCcuL0dldFBvaW50cycpO1xyXG52YXIgR0VPTV9DT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XHJcbnZhciBMaW5lID0gcmVxdWlyZSgnLi4vbGluZS9MaW5lJyk7XHJcbnZhciBSYW5kb20gPSByZXF1aXJlKCcuL1JhbmRvbScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSB0cmlhbmdsZSBpcyBhIHBsYW5lIGNyZWF0ZWQgYnkgY29ubmVjdGluZyB0aHJlZSBwb2ludHMuXHJcbiAqIFRoZSBmaXJzdCB0d28gYXJndW1lbnRzIHNwZWNpZnkgdGhlIGZpcnN0IHBvaW50LCB0aGUgbWlkZGxlIHR3byBhcmd1bWVudHNcclxuICogc3BlY2lmeSB0aGUgc2Vjb25kIHBvaW50LCBhbmQgdGhlIGxhc3QgdHdvIGFyZ3VtZW50cyBzcGVjaWZ5IHRoZSB0aGlyZCBwb2ludC5cclxuICpcclxuICogQGNsYXNzIFRyaWFuZ2xlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuR2VvbVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeDE9MF0gLSBgeGAgY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgcG9pbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeTE9MF0gLSBgeWAgY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgcG9pbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbeDI9MF0gLSBgeGAgY29vcmRpbmF0ZSBvZiB0aGUgc2Vjb25kIHBvaW50LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3kyPTBdIC0gYHlgIGNvb3JkaW5hdGUgb2YgdGhlIHNlY29uZCBwb2ludC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt4Mz0wXSAtIGB4YCBjb29yZGluYXRlIG9mIHRoZSB0aGlyZCBwb2ludC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt5Mz0wXSAtIGB5YCBjb29yZGluYXRlIG9mIHRoZSB0aGlyZCBwb2ludC5cclxuICovXHJcbnZhciBUcmlhbmdsZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBUcmlhbmdsZSAoeDEsIHkxLCB4MiwgeTIsIHgzLCB5MylcclxuICAgIHtcclxuICAgICAgICBpZiAoeDEgPT09IHVuZGVmaW5lZCkgeyB4MSA9IDA7IH1cclxuICAgICAgICBpZiAoeTEgPT09IHVuZGVmaW5lZCkgeyB5MSA9IDA7IH1cclxuICAgICAgICBpZiAoeDIgPT09IHVuZGVmaW5lZCkgeyB4MiA9IDA7IH1cclxuICAgICAgICBpZiAoeTIgPT09IHVuZGVmaW5lZCkgeyB5MiA9IDA7IH1cclxuICAgICAgICBpZiAoeDMgPT09IHVuZGVmaW5lZCkgeyB4MyA9IDA7IH1cclxuICAgICAgICBpZiAoeTMgPT09IHVuZGVmaW5lZCkgeyB5MyA9IDA7IH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGdlb21ldHJ5IGNvbnN0YW50IHR5cGUgb2YgdGhpcyBvYmplY3Q6IGBHRU9NX0NPTlNULlRSSUFOR0xFYC5cclxuICAgICAgICAgKiBVc2VkIGZvciBmYXN0IHR5cGUgY29tcGFyaXNvbnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5UcmlhbmdsZSN0eXBlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTkuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudHlwZSA9IEdFT01fQ09OU1QuVFJJQU5HTEU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIGB4YCBjb29yZGluYXRlIG9mIHRoZSBmaXJzdCBwb2ludC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLlRyaWFuZ2xlI3gxXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy54MSA9IHgxO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBgeWAgY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgcG9pbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5UcmlhbmdsZSN5MVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueTEgPSB5MTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogYHhgIGNvb3JkaW5hdGUgb2YgdGhlIHNlY29uZCBwb2ludC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLlRyaWFuZ2xlI3gyXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy54MiA9IHgyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBgeWAgY29vcmRpbmF0ZSBvZiB0aGUgc2Vjb25kIHBvaW50LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkdlb20uVHJpYW5nbGUjeTJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnkyID0geTI7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIGB4YCBjb29yZGluYXRlIG9mIHRoZSB0aGlyZCBwb2ludC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLlRyaWFuZ2xlI3gzXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy54MyA9IHgzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBgeWAgY29vcmRpbmF0ZSBvZiB0aGUgdGhpcmQgcG9pbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5UcmlhbmdsZSN5M1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueTMgPSB5MztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3Mgd2hldGhlciBhIGdpdmVuIHBvaW50cyBsaWVzIHdpdGhpbiB0aGUgdHJpYW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5UcmlhbmdsZSNjb250YWluc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byBjaGVjay5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gY2hlY2suXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBjb29yZGluYXRlIHBhaXIgaXMgd2l0aGluIHRoZSB0cmlhbmdsZSwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGNvbnRhaW5zOiBmdW5jdGlvbiAoeCwgeSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gQ29udGFpbnModGhpcywgeCwgeSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIHNwZWNpZmljIHBvaW50ICBvbiB0aGUgdHJpYW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5UcmlhbmdsZSNnZXRQb2ludFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQGdlbmVyaWMge1BoYXNlci5HZW9tLlBvaW50fSBPIC0gW291dHB1dCwkcmV0dXJuXVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvbiAtIFBvc2l0aW9uIGFzIGZsb2F0IHdpdGhpbiBgMGAgYW5kIGAxYC4gYDBgIGVxdWFscyB0aGUgZmlyc3QgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuR2VvbS5Qb2ludHxvYmplY3QpfSBbb3V0cHV0XSAtIE9wdGlvbmFsIFBvaW50LCBvciBwb2ludC1saWtlIG9iamVjdCwgdGhhdCB0aGUgY2FsY3VsYXRlZCBwb2ludCB3aWxsIGJlIHdyaXR0ZW4gdG8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7KFBoYXNlci5HZW9tLlBvaW50fG9iamVjdCl9IENhbGN1bGF0ZWQgYFBvaW50YCB0aGF0IHJlcHJlc2VudHMgdGhlIHJlcXVlc3RlZCBwb3NpdGlvbi4gSXQgaXMgdGhlIHNhbWUgYXMgYG91dHB1dGAgd2hlbiB0aGlzIHBhcmFtZXRlciBoYXMgYmVlbiBnaXZlbi5cclxuICAgICAqL1xyXG4gICAgZ2V0UG9pbnQ6IGZ1bmN0aW9uIChwb3NpdGlvbiwgb3V0cHV0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBHZXRQb2ludCh0aGlzLCBwb3NpdGlvbiwgb3V0cHV0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIGEgbGlzdCBvZiBldmVubHkgZGlzdHJpYnV0ZWQgcG9pbnRzIG9uIHRoZSB0cmlhbmdsZS4gSXQgaXMgZWl0aGVyIHBvc3NpYmxlIHRvIHBhc3MgYW4gYW1vdW50IG9mIHBvaW50cyB0byBiZSBnZW5lcmF0ZWQgKGBxdWFudGl0eWApIG9yIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHMgKGBzdGVwUmF0ZWApLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uVHJpYW5nbGUjZ2V0UG9pbnRzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnRbXX0gTyAtIFtvdXRwdXQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IHF1YW50aXR5IC0gTnVtYmVyIG9mIHBvaW50cyB0byBiZSBnZW5lcmF0ZWQuIENhbiBiZSBmYWxzZXkgd2hlbiBgc3RlcFJhdGVgIHNob3VsZCBiZSB1c2VkLiBBbGwgcG9pbnRzIGhhdmUgdGhlIHNhbWUgZGlzdGFuY2UgYWxvbmcgdGhlIHRyaWFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwUmF0ZV0gLSBEaXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHMuIFdpbGwgb25seSBiZSB1c2VkIHdoZW4gYHF1YW50aXR5YCBpcyBmYWxzZXkuXHJcbiAgICAgKiBAcGFyYW0geyhhcnJheXxQaGFzZXIuR2VvbS5Qb2ludFtdKX0gW291dHB1dF0gLSBPcHRpb25hbCBBcnJheSBmb3Igd3JpdGluZyB0aGUgY2FsY3VsYXRlZCBwb2ludHMgaW50by4gT3RoZXJ3aXNlIGEgbmV3IGFycmF5IHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHsoYXJyYXl8UGhhc2VyLkdlb20uUG9pbnRbXSl9IFJldHVybnMgYSBsaXN0IG9mIGNhbGN1bGF0ZWQgYFBvaW50YCBpbnN0YW5jZXMgb3IgdGhlIGZpbGxlZCBhcnJheSBwYXNzZWQgYXMgcGFyYW1ldGVyIGBvdXRwdXRgLlxyXG4gICAgICovXHJcbiAgICBnZXRQb2ludHM6IGZ1bmN0aW9uIChxdWFudGl0eSwgc3RlcFJhdGUsIG91dHB1dClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gR2V0UG9pbnRzKHRoaXMsIHF1YW50aXR5LCBzdGVwUmF0ZSwgb3V0cHV0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgcmFuZG9tIHBvaW50IGFsb25nIHRoZSB0cmlhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5HZW9tLlRyaWFuZ2xlI2dldFJhbmRvbVBvaW50XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAZ2VuZXJpYyB7UGhhc2VyLkdlb20uUG9pbnR9IE8gLSBbcG9pbnQsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HZW9tLlBvaW50fSBbcG9pbnRdIC0gT3B0aW9uYWwgYFBvaW50YCB0aGF0IHNob3VsZCBiZSBtb2RpZmllZC4gT3RoZXJ3aXNlIGEgbmV3IG9uZSB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdlb20uUG9pbnR9IFJhbmRvbSBgUG9pbnRgLiBXaGVuIHBhcmFtZXRlciBgcG9pbnRgIGhhcyBiZWVuIHByb3ZpZGVkIGl0IHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIGdldFJhbmRvbVBvaW50OiBmdW5jdGlvbiAocG9pbnQpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIFJhbmRvbSh0aGlzLCBwb2ludCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBhbGwgdGhyZWUgcG9pbnRzIG9mIHRoZSB0cmlhbmdsZS4gTGVhdmluZyBvdXQgYW55IGNvb3JkaW5hdGUgc2V0cyBpdCB0byBiZSBgMGAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuR2VvbS5UcmlhbmdsZSNzZXRUb1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4MT0wXSAtIGB4YCBjb29yZGluYXRlIG9mIHRoZSBmaXJzdCBwb2ludC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeTE9MF0gLSBgeWAgY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3gyPTBdIC0gYHhgIGNvb3JkaW5hdGUgb2YgdGhlIHNlY29uZCBwb2ludC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeTI9MF0gLSBgeWAgY29vcmRpbmF0ZSBvZiB0aGUgc2Vjb25kIHBvaW50LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt4Mz0wXSAtIGB4YCBjb29yZGluYXRlIG9mIHRoZSB0aGlyZCBwb2ludC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeTM9MF0gLSBgeWAgY29vcmRpbmF0ZSBvZiB0aGUgdGhpcmQgcG9pbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkdlb20uVHJpYW5nbGV9IFRoaXMgVHJpYW5nbGUgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRUbzogZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHgxID09PSB1bmRlZmluZWQpIHsgeDEgPSAwOyB9XHJcbiAgICAgICAgaWYgKHkxID09PSB1bmRlZmluZWQpIHsgeTEgPSAwOyB9XHJcbiAgICAgICAgaWYgKHgyID09PSB1bmRlZmluZWQpIHsgeDIgPSAwOyB9XHJcbiAgICAgICAgaWYgKHkyID09PSB1bmRlZmluZWQpIHsgeTIgPSAwOyB9XHJcbiAgICAgICAgaWYgKHgzID09PSB1bmRlZmluZWQpIHsgeDMgPSAwOyB9XHJcbiAgICAgICAgaWYgKHkzID09PSB1bmRlZmluZWQpIHsgeTMgPSAwOyB9XHJcblxyXG4gICAgICAgIHRoaXMueDEgPSB4MTtcclxuICAgICAgICB0aGlzLnkxID0geTE7XHJcblxyXG4gICAgICAgIHRoaXMueDIgPSB4MjtcclxuICAgICAgICB0aGlzLnkyID0geTI7XHJcblxyXG4gICAgICAgIHRoaXMueDMgPSB4MztcclxuICAgICAgICB0aGlzLnkzID0geTM7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBMaW5lIG9iamVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIExpbmUgQSBvZiB0aGlzIFRyaWFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uVHJpYW5nbGUjZ2V0TGluZUFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5MaW5lfSBPIC0gW2xpbmUsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IFtsaW5lXSAtIEEgTGluZSBvYmplY3QgdG8gc2V0IHRoZSByZXN1bHRzIGluLiBJZiBgdW5kZWZpbmVkYCBhIG5ldyBMaW5lIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5MaW5lfSBBIExpbmUgb2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gbGluZSBBIG9mIHRoaXMgVHJpYW5nbGUuXHJcbiAgICAgKi9cclxuICAgIGdldExpbmVBOiBmdW5jdGlvbiAobGluZSlcclxuICAgIHtcclxuICAgICAgICBpZiAobGluZSA9PT0gdW5kZWZpbmVkKSB7IGxpbmUgPSBuZXcgTGluZSgpOyB9XHJcblxyXG4gICAgICAgIGxpbmUuc2V0VG8odGhpcy54MSwgdGhpcy55MSwgdGhpcy54MiwgdGhpcy55Mik7XHJcblxyXG4gICAgICAgIHJldHVybiBsaW5lO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBMaW5lIG9iamVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIExpbmUgQiBvZiB0aGlzIFRyaWFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uVHJpYW5nbGUjZ2V0TGluZUJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5MaW5lfSBPIC0gW2xpbmUsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IFtsaW5lXSAtIEEgTGluZSBvYmplY3QgdG8gc2V0IHRoZSByZXN1bHRzIGluLiBJZiBgdW5kZWZpbmVkYCBhIG5ldyBMaW5lIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5MaW5lfSBBIExpbmUgb2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gbGluZSBCIG9mIHRoaXMgVHJpYW5nbGUuXHJcbiAgICAgKi9cclxuICAgIGdldExpbmVCOiBmdW5jdGlvbiAobGluZSlcclxuICAgIHtcclxuICAgICAgICBpZiAobGluZSA9PT0gdW5kZWZpbmVkKSB7IGxpbmUgPSBuZXcgTGluZSgpOyB9XHJcblxyXG4gICAgICAgIGxpbmUuc2V0VG8odGhpcy54MiwgdGhpcy55MiwgdGhpcy54MywgdGhpcy55Myk7XHJcblxyXG4gICAgICAgIHJldHVybiBsaW5lO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBMaW5lIG9iamVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIExpbmUgQyBvZiB0aGlzIFRyaWFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkdlb20uVHJpYW5nbGUjZ2V0TGluZUNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBnZW5lcmljIHtQaGFzZXIuR2VvbS5MaW5lfSBPIC0gW2xpbmUsJHJldHVybl1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HZW9tLkxpbmV9IFtsaW5lXSAtIEEgTGluZSBvYmplY3QgdG8gc2V0IHRoZSByZXN1bHRzIGluLiBJZiBgdW5kZWZpbmVkYCBhIG5ldyBMaW5lIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2VvbS5MaW5lfSBBIExpbmUgb2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gbGluZSBDIG9mIHRoaXMgVHJpYW5nbGUuXHJcbiAgICAgKi9cclxuICAgIGdldExpbmVDOiBmdW5jdGlvbiAobGluZSlcclxuICAgIHtcclxuICAgICAgICBpZiAobGluZSA9PT0gdW5kZWZpbmVkKSB7IGxpbmUgPSBuZXcgTGluZSgpOyB9XHJcblxyXG4gICAgICAgIGxpbmUuc2V0VG8odGhpcy54MywgdGhpcy55MywgdGhpcy54MSwgdGhpcy55MSk7XHJcblxyXG4gICAgICAgIHJldHVybiBsaW5lO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIExlZnQgbW9zdCBYIGNvb3JkaW5hdGUgb2YgdGhlIHRyaWFuZ2xlLiBTZXR0aW5nIGl0IG1vdmVzIHRoZSB0cmlhbmdsZSBvbiB0aGUgWCBheGlzIGFjY29yZGluZ2x5LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5HZW9tLlRyaWFuZ2xlI2xlZnRcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgbGVmdDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5taW4odGhpcy54MSwgdGhpcy54MiwgdGhpcy54Myk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZGlmZiA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy54MSA8PSB0aGlzLngyICYmIHRoaXMueDEgPD0gdGhpcy54MylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGlmZiA9IHRoaXMueDEgLSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLngyIDw9IHRoaXMueDEgJiYgdGhpcy54MiA8PSB0aGlzLngzKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkaWZmID0gdGhpcy54MiAtIHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGlmZiA9IHRoaXMueDMgLSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy54MSAtPSBkaWZmO1xyXG4gICAgICAgICAgICB0aGlzLngyIC09IGRpZmY7XHJcbiAgICAgICAgICAgIHRoaXMueDMgLT0gZGlmZjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJpZ2h0IG1vc3QgWCBjb29yZGluYXRlIG9mIHRoZSB0cmlhbmdsZS4gU2V0dGluZyBpdCBtb3ZlcyB0aGUgdHJpYW5nbGUgb24gdGhlIFggYXhpcyBhY2NvcmRpbmdseS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuR2VvbS5UcmlhbmdsZSNyaWdodFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICByaWdodDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy54MSwgdGhpcy54MiwgdGhpcy54Myk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZGlmZiA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy54MSA+PSB0aGlzLngyICYmIHRoaXMueDEgPj0gdGhpcy54MylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGlmZiA9IHRoaXMueDEgLSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLngyID49IHRoaXMueDEgJiYgdGhpcy54MiA+PSB0aGlzLngzKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkaWZmID0gdGhpcy54MiAtIHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGlmZiA9IHRoaXMueDMgLSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy54MSAtPSBkaWZmO1xyXG4gICAgICAgICAgICB0aGlzLngyIC09IGRpZmY7XHJcbiAgICAgICAgICAgIHRoaXMueDMgLT0gZGlmZjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRvcCBtb3N0IFkgY29vcmRpbmF0ZSBvZiB0aGUgdHJpYW5nbGUuIFNldHRpbmcgaXQgbW92ZXMgdGhlIHRyaWFuZ2xlIG9uIHRoZSBZIGF4aXMgYWNjb3JkaW5nbHkuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdlb20uVHJpYW5nbGUjdG9wXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHRvcDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5taW4odGhpcy55MSwgdGhpcy55MiwgdGhpcy55Myk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZGlmZiA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy55MSA8PSB0aGlzLnkyICYmIHRoaXMueTEgPD0gdGhpcy55MylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGlmZiA9IHRoaXMueTEgLSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnkyIDw9IHRoaXMueTEgJiYgdGhpcy55MiA8PSB0aGlzLnkzKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkaWZmID0gdGhpcy55MiAtIHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGlmZiA9IHRoaXMueTMgLSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy55MSAtPSBkaWZmO1xyXG4gICAgICAgICAgICB0aGlzLnkyIC09IGRpZmY7XHJcbiAgICAgICAgICAgIHRoaXMueTMgLT0gZGlmZjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJvdHRvbSBtb3N0IFkgY29vcmRpbmF0ZSBvZiB0aGUgdHJpYW5nbGUuIFNldHRpbmcgaXQgbW92ZXMgdGhlIHRyaWFuZ2xlIG9uIHRoZSBZIGF4aXMgYWNjb3JkaW5nbHkuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLkdlb20uVHJpYW5nbGUjYm90dG9tXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGJvdHRvbToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy55MSwgdGhpcy55MiwgdGhpcy55Myk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZGlmZiA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy55MSA+PSB0aGlzLnkyICYmIHRoaXMueTEgPj0gdGhpcy55MylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGlmZiA9IHRoaXMueTEgLSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnkyID49IHRoaXMueTEgJiYgdGhpcy55MiA+PSB0aGlzLnkzKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkaWZmID0gdGhpcy55MiAtIHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGlmZiA9IHRoaXMueTMgLSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy55MSAtPSBkaWZmO1xyXG4gICAgICAgICAgICB0aGlzLnkyIC09IGRpZmY7XHJcbiAgICAgICAgICAgIHRoaXMueTMgLT0gZGlmZjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRyaWFuZ2xlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/Triangle.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/geom/triangle/index.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/geom/triangle/index.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Triangle = __webpack_require__(/*! ./Triangle */ \"./node_modules/phaser/src/geom/triangle/Triangle.js\");\r\n\r\nTriangle.Area = __webpack_require__(/*! ./Area */ \"./node_modules/phaser/src/geom/triangle/Area.js\");\r\nTriangle.BuildEquilateral = __webpack_require__(/*! ./BuildEquilateral */ \"./node_modules/phaser/src/geom/triangle/BuildEquilateral.js\");\r\nTriangle.BuildFromPolygon = __webpack_require__(/*! ./BuildFromPolygon */ \"./node_modules/phaser/src/geom/triangle/BuildFromPolygon.js\");\r\nTriangle.BuildRight = __webpack_require__(/*! ./BuildRight */ \"./node_modules/phaser/src/geom/triangle/BuildRight.js\");\r\nTriangle.CenterOn = __webpack_require__(/*! ./CenterOn */ \"./node_modules/phaser/src/geom/triangle/CenterOn.js\");\r\nTriangle.Centroid = __webpack_require__(/*! ./Centroid */ \"./node_modules/phaser/src/geom/triangle/Centroid.js\");\r\nTriangle.CircumCenter = __webpack_require__(/*! ./CircumCenter */ \"./node_modules/phaser/src/geom/triangle/CircumCenter.js\");\r\nTriangle.CircumCircle = __webpack_require__(/*! ./CircumCircle */ \"./node_modules/phaser/src/geom/triangle/CircumCircle.js\");\r\nTriangle.Clone = __webpack_require__(/*! ./Clone */ \"./node_modules/phaser/src/geom/triangle/Clone.js\");\r\nTriangle.Contains = __webpack_require__(/*! ./Contains */ \"./node_modules/phaser/src/geom/triangle/Contains.js\");\r\nTriangle.ContainsArray = __webpack_require__(/*! ./ContainsArray */ \"./node_modules/phaser/src/geom/triangle/ContainsArray.js\");\r\nTriangle.ContainsPoint = __webpack_require__(/*! ./ContainsPoint */ \"./node_modules/phaser/src/geom/triangle/ContainsPoint.js\");\r\nTriangle.CopyFrom = __webpack_require__(/*! ./CopyFrom */ \"./node_modules/phaser/src/geom/triangle/CopyFrom.js\");\r\nTriangle.Decompose = __webpack_require__(/*! ./Decompose */ \"./node_modules/phaser/src/geom/triangle/Decompose.js\");\r\nTriangle.Equals = __webpack_require__(/*! ./Equals */ \"./node_modules/phaser/src/geom/triangle/Equals.js\");\r\nTriangle.GetPoint = __webpack_require__(/*! ./GetPoint */ \"./node_modules/phaser/src/geom/triangle/GetPoint.js\");\r\nTriangle.GetPoints = __webpack_require__(/*! ./GetPoints */ \"./node_modules/phaser/src/geom/triangle/GetPoints.js\");\r\nTriangle.InCenter = __webpack_require__(/*! ./InCenter */ \"./node_modules/phaser/src/geom/triangle/InCenter.js\");\r\nTriangle.Perimeter = __webpack_require__(/*! ./Perimeter */ \"./node_modules/phaser/src/geom/triangle/Perimeter.js\");\r\nTriangle.Offset = __webpack_require__(/*! ./Offset */ \"./node_modules/phaser/src/geom/triangle/Offset.js\");\r\nTriangle.Random = __webpack_require__(/*! ./Random */ \"./node_modules/phaser/src/geom/triangle/Random.js\");\r\nTriangle.Rotate = __webpack_require__(/*! ./Rotate */ \"./node_modules/phaser/src/geom/triangle/Rotate.js\");\r\nTriangle.RotateAroundPoint = __webpack_require__(/*! ./RotateAroundPoint */ \"./node_modules/phaser/src/geom/triangle/RotateAroundPoint.js\");\r\nTriangle.RotateAroundXY = __webpack_require__(/*! ./RotateAroundXY */ \"./node_modules/phaser/src/geom/triangle/RotateAroundXY.js\");\r\n\r\nmodule.exports = Triangle;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL2luZGV4LmpzPzVhMzEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyx1RUFBWTs7QUFFbkMsZ0JBQWdCLG1CQUFPLENBQUMsK0RBQVE7QUFDaEMsNEJBQTRCLG1CQUFPLENBQUMsdUZBQW9CO0FBQ3hELDRCQUE0QixtQkFBTyxDQUFDLHVGQUFvQjtBQUN4RCxzQkFBc0IsbUJBQU8sQ0FBQywyRUFBYztBQUM1QyxvQkFBb0IsbUJBQU8sQ0FBQyx1RUFBWTtBQUN4QyxvQkFBb0IsbUJBQU8sQ0FBQyx1RUFBWTtBQUN4Qyx3QkFBd0IsbUJBQU8sQ0FBQywrRUFBZ0I7QUFDaEQsd0JBQXdCLG1CQUFPLENBQUMsK0VBQWdCO0FBQ2hELGlCQUFpQixtQkFBTyxDQUFDLGlFQUFTO0FBQ2xDLG9CQUFvQixtQkFBTyxDQUFDLHVFQUFZO0FBQ3hDLHlCQUF5QixtQkFBTyxDQUFDLGlGQUFpQjtBQUNsRCx5QkFBeUIsbUJBQU8sQ0FBQyxpRkFBaUI7QUFDbEQsb0JBQW9CLG1CQUFPLENBQUMsdUVBQVk7QUFDeEMscUJBQXFCLG1CQUFPLENBQUMseUVBQWE7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsbUVBQVU7QUFDcEMsb0JBQW9CLG1CQUFPLENBQUMsdUVBQVk7QUFDeEMscUJBQXFCLG1CQUFPLENBQUMseUVBQWE7QUFDMUMsb0JBQW9CLG1CQUFPLENBQUMsdUVBQVk7QUFDeEMscUJBQXFCLG1CQUFPLENBQUMseUVBQWE7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsbUVBQVU7QUFDcEMsa0JBQWtCLG1CQUFPLENBQUMsbUVBQVU7QUFDcEMsa0JBQWtCLG1CQUFPLENBQUMsbUVBQVU7QUFDcEMsNkJBQTZCLG1CQUFPLENBQUMseUZBQXFCO0FBQzFELDBCQUEwQixtQkFBTyxDQUFDLG1GQUFrQjs7QUFFcEQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9nZW9tL3RyaWFuZ2xlL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgVHJpYW5nbGUgPSByZXF1aXJlKCcuL1RyaWFuZ2xlJyk7XHJcblxyXG5UcmlhbmdsZS5BcmVhID0gcmVxdWlyZSgnLi9BcmVhJyk7XHJcblRyaWFuZ2xlLkJ1aWxkRXF1aWxhdGVyYWwgPSByZXF1aXJlKCcuL0J1aWxkRXF1aWxhdGVyYWwnKTtcclxuVHJpYW5nbGUuQnVpbGRGcm9tUG9seWdvbiA9IHJlcXVpcmUoJy4vQnVpbGRGcm9tUG9seWdvbicpO1xyXG5UcmlhbmdsZS5CdWlsZFJpZ2h0ID0gcmVxdWlyZSgnLi9CdWlsZFJpZ2h0Jyk7XHJcblRyaWFuZ2xlLkNlbnRlck9uID0gcmVxdWlyZSgnLi9DZW50ZXJPbicpO1xyXG5UcmlhbmdsZS5DZW50cm9pZCA9IHJlcXVpcmUoJy4vQ2VudHJvaWQnKTtcclxuVHJpYW5nbGUuQ2lyY3VtQ2VudGVyID0gcmVxdWlyZSgnLi9DaXJjdW1DZW50ZXInKTtcclxuVHJpYW5nbGUuQ2lyY3VtQ2lyY2xlID0gcmVxdWlyZSgnLi9DaXJjdW1DaXJjbGUnKTtcclxuVHJpYW5nbGUuQ2xvbmUgPSByZXF1aXJlKCcuL0Nsb25lJyk7XHJcblRyaWFuZ2xlLkNvbnRhaW5zID0gcmVxdWlyZSgnLi9Db250YWlucycpO1xyXG5UcmlhbmdsZS5Db250YWluc0FycmF5ID0gcmVxdWlyZSgnLi9Db250YWluc0FycmF5Jyk7XHJcblRyaWFuZ2xlLkNvbnRhaW5zUG9pbnQgPSByZXF1aXJlKCcuL0NvbnRhaW5zUG9pbnQnKTtcclxuVHJpYW5nbGUuQ29weUZyb20gPSByZXF1aXJlKCcuL0NvcHlGcm9tJyk7XHJcblRyaWFuZ2xlLkRlY29tcG9zZSA9IHJlcXVpcmUoJy4vRGVjb21wb3NlJyk7XHJcblRyaWFuZ2xlLkVxdWFscyA9IHJlcXVpcmUoJy4vRXF1YWxzJyk7XHJcblRyaWFuZ2xlLkdldFBvaW50ID0gcmVxdWlyZSgnLi9HZXRQb2ludCcpO1xyXG5UcmlhbmdsZS5HZXRQb2ludHMgPSByZXF1aXJlKCcuL0dldFBvaW50cycpO1xyXG5UcmlhbmdsZS5JbkNlbnRlciA9IHJlcXVpcmUoJy4vSW5DZW50ZXInKTtcclxuVHJpYW5nbGUuUGVyaW1ldGVyID0gcmVxdWlyZSgnLi9QZXJpbWV0ZXInKTtcclxuVHJpYW5nbGUuT2Zmc2V0ID0gcmVxdWlyZSgnLi9PZmZzZXQnKTtcclxuVHJpYW5nbGUuUmFuZG9tID0gcmVxdWlyZSgnLi9SYW5kb20nKTtcclxuVHJpYW5nbGUuUm90YXRlID0gcmVxdWlyZSgnLi9Sb3RhdGUnKTtcclxuVHJpYW5nbGUuUm90YXRlQXJvdW5kUG9pbnQgPSByZXF1aXJlKCcuL1JvdGF0ZUFyb3VuZFBvaW50Jyk7XHJcblRyaWFuZ2xlLlJvdGF0ZUFyb3VuZFhZID0gcmVxdWlyZSgnLi9Sb3RhdGVBcm91bmRYWScpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUcmlhbmdsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/geom/triangle/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/CreateInteractiveObject.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/input/CreateInteractiveObject.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Creates a new Interactive Object.\r\n * \r\n * This is called automatically by the Input Manager when you enable a Game Object for input.\r\n *\r\n * The resulting Interactive Object is mapped to the Game Object's `input` property.\r\n *\r\n * @function Phaser.Input.CreateInteractiveObject\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to which this Interactive Object is bound.\r\n * @param {any} hitArea - The hit area for this Interactive Object. Typically a geometry shape, like a Rectangle or Circle.\r\n * @param {Phaser.Types.Input.HitAreaCallback} hitAreaCallback - The 'contains' check callback that the hit area shape will use for all hit tests.\r\n *\r\n * @return {Phaser.Types.Input.InteractiveObject} The new Interactive Object.\r\n */\r\nvar CreateInteractiveObject = function (gameObject, hitArea, hitAreaCallback)\r\n{\r\n return {\r\n\r\n gameObject: gameObject,\r\n\r\n enabled: true,\r\n alwaysEnabled: false,\r\n draggable: false,\r\n dropZone: false,\r\n cursor: false,\r\n\r\n target: null,\r\n\r\n camera: null,\r\n\r\n hitArea: hitArea,\r\n hitAreaCallback: hitAreaCallback,\r\n hitAreaDebug: null,\r\n\r\n // Has the dev specified their own shape, or is this bound to the texture size?\r\n customHitArea: false,\r\n\r\n localX: 0,\r\n localY: 0,\r\n\r\n // 0 = Not being dragged\r\n // 1 = Being checked for dragging\r\n // 2 = Being dragged\r\n dragState: 0,\r\n\r\n dragStartX: 0,\r\n dragStartY: 0,\r\n dragStartXGlobal: 0,\r\n dragStartYGlobal: 0,\r\n\r\n dragX: 0,\r\n dragY: 0\r\n\r\n };\r\n};\r\n\r\nmodule.exports = CreateInteractiveObject;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9DcmVhdGVJbnRlcmFjdGl2ZU9iamVjdC5qcz85MjE5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsSUFBSTtBQUNmLFdBQVcsbUNBQW1DO0FBQzlDO0FBQ0EsWUFBWSxxQ0FBcUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L0NyZWF0ZUludGVyYWN0aXZlT2JqZWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBJbnRlcmFjdGl2ZSBPYmplY3QuXHJcbiAqIFxyXG4gKiBUaGlzIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBJbnB1dCBNYW5hZ2VyIHdoZW4geW91IGVuYWJsZSBhIEdhbWUgT2JqZWN0IGZvciBpbnB1dC5cclxuICpcclxuICogVGhlIHJlc3VsdGluZyBJbnRlcmFjdGl2ZSBPYmplY3QgaXMgbWFwcGVkIHRvIHRoZSBHYW1lIE9iamVjdCdzIGBpbnB1dGAgcHJvcGVydHkuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuSW5wdXQuQ3JlYXRlSW50ZXJhY3RpdmVPYmplY3RcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdG8gd2hpY2ggdGhpcyBJbnRlcmFjdGl2ZSBPYmplY3QgaXMgYm91bmQuXHJcbiAqIEBwYXJhbSB7YW55fSBoaXRBcmVhIC0gVGhlIGhpdCBhcmVhIGZvciB0aGlzIEludGVyYWN0aXZlIE9iamVjdC4gVHlwaWNhbGx5IGEgZ2VvbWV0cnkgc2hhcGUsIGxpa2UgYSBSZWN0YW5nbGUgb3IgQ2lyY2xlLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5IaXRBcmVhQ2FsbGJhY2t9IGhpdEFyZWFDYWxsYmFjayAtIFRoZSAnY29udGFpbnMnIGNoZWNrIGNhbGxiYWNrIHRoYXQgdGhlIGhpdCBhcmVhIHNoYXBlIHdpbGwgdXNlIGZvciBhbGwgaGl0IHRlc3RzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuSW5wdXQuSW50ZXJhY3RpdmVPYmplY3R9IFRoZSBuZXcgSW50ZXJhY3RpdmUgT2JqZWN0LlxyXG4gKi9cclxudmFyIENyZWF0ZUludGVyYWN0aXZlT2JqZWN0ID0gZnVuY3Rpb24gKGdhbWVPYmplY3QsIGhpdEFyZWEsIGhpdEFyZWFDYWxsYmFjaylcclxue1xyXG4gICAgcmV0dXJuIHtcclxuXHJcbiAgICAgICAgZ2FtZU9iamVjdDogZ2FtZU9iamVjdCxcclxuXHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICBhbHdheXNFbmFibGVkOiBmYWxzZSxcclxuICAgICAgICBkcmFnZ2FibGU6IGZhbHNlLFxyXG4gICAgICAgIGRyb3Bab25lOiBmYWxzZSxcclxuICAgICAgICBjdXJzb3I6IGZhbHNlLFxyXG5cclxuICAgICAgICB0YXJnZXQ6IG51bGwsXHJcblxyXG4gICAgICAgIGNhbWVyYTogbnVsbCxcclxuXHJcbiAgICAgICAgaGl0QXJlYTogaGl0QXJlYSxcclxuICAgICAgICBoaXRBcmVhQ2FsbGJhY2s6IGhpdEFyZWFDYWxsYmFjayxcclxuICAgICAgICBoaXRBcmVhRGVidWc6IG51bGwsXHJcblxyXG4gICAgICAgIC8vICBIYXMgdGhlIGRldiBzcGVjaWZpZWQgdGhlaXIgb3duIHNoYXBlLCBvciBpcyB0aGlzIGJvdW5kIHRvIHRoZSB0ZXh0dXJlIHNpemU/XHJcbiAgICAgICAgY3VzdG9tSGl0QXJlYTogZmFsc2UsXHJcblxyXG4gICAgICAgIGxvY2FsWDogMCxcclxuICAgICAgICBsb2NhbFk6IDAsXHJcblxyXG4gICAgICAgIC8vICAwID0gTm90IGJlaW5nIGRyYWdnZWRcclxuICAgICAgICAvLyAgMSA9IEJlaW5nIGNoZWNrZWQgZm9yIGRyYWdnaW5nXHJcbiAgICAgICAgLy8gIDIgPSBCZWluZyBkcmFnZ2VkXHJcbiAgICAgICAgZHJhZ1N0YXRlOiAwLFxyXG5cclxuICAgICAgICBkcmFnU3RhcnRYOiAwLFxyXG4gICAgICAgIGRyYWdTdGFydFk6IDAsXHJcbiAgICAgICAgZHJhZ1N0YXJ0WEdsb2JhbDogMCxcclxuICAgICAgICBkcmFnU3RhcnRZR2xvYmFsOiAwLFxyXG5cclxuICAgICAgICBkcmFnWDogMCxcclxuICAgICAgICBkcmFnWTogMFxyXG5cclxuICAgIH07XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENyZWF0ZUludGVyYWN0aXZlT2JqZWN0O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/CreateInteractiveObject.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/CreatePixelPerfectHandler.js":
/*!********************************************************************!*\
!*** ./node_modules/phaser/src/input/CreatePixelPerfectHandler.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Creates a new Pixel Perfect Handler function.\r\n *\r\n * Access via `InputPlugin.makePixelPerfect` rather than calling it directly.\r\n *\r\n * @function Phaser.Input.CreatePixelPerfectHandler\r\n * @since 3.10.0\r\n *\r\n * @param {Phaser.Textures.TextureManager} textureManager - A reference to the Texture Manager.\r\n * @param {integer} alphaTolerance - The alpha level that the pixel should be above to be included as a successful interaction.\r\n *\r\n * @return {function} The new Pixel Perfect Handler function.\r\n */\r\nvar CreatePixelPerfectHandler = function (textureManager, alphaTolerance)\r\n{\r\n return function (hitArea, x, y, gameObject)\r\n {\r\n var alpha = textureManager.getPixelAlpha(x, y, gameObject.texture.key, gameObject.frame.name);\r\n\r\n return (alpha && alpha >= alphaTolerance);\r\n };\r\n};\r\n\r\nmodule.exports = CreatePixelPerfectHandler;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9DcmVhdGVQaXhlbFBlcmZlY3RIYW5kbGVyLmpzPzFhMTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLCtCQUErQjtBQUMxQyxXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLFNBQVM7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L0NyZWF0ZVBpeGVsUGVyZmVjdEhhbmRsZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IFBpeGVsIFBlcmZlY3QgSGFuZGxlciBmdW5jdGlvbi5cclxuICpcclxuICogQWNjZXNzIHZpYSBgSW5wdXRQbHVnaW4ubWFrZVBpeGVsUGVyZmVjdGAgcmF0aGVyIHRoYW4gY2FsbGluZyBpdCBkaXJlY3RseS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5JbnB1dC5DcmVhdGVQaXhlbFBlcmZlY3RIYW5kbGVyXHJcbiAqIEBzaW5jZSAzLjEwLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZU1hbmFnZXJ9IHRleHR1cmVNYW5hZ2VyIC0gQSByZWZlcmVuY2UgdG8gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBhbHBoYVRvbGVyYW5jZSAtIFRoZSBhbHBoYSBsZXZlbCB0aGF0IHRoZSBwaXhlbCBzaG91bGQgYmUgYWJvdmUgdG8gYmUgaW5jbHVkZWQgYXMgYSBzdWNjZXNzZnVsIGludGVyYWN0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn0gVGhlIG5ldyBQaXhlbCBQZXJmZWN0IEhhbmRsZXIgZnVuY3Rpb24uXHJcbiAqL1xyXG52YXIgQ3JlYXRlUGl4ZWxQZXJmZWN0SGFuZGxlciA9IGZ1bmN0aW9uICh0ZXh0dXJlTWFuYWdlciwgYWxwaGFUb2xlcmFuY2UpXHJcbntcclxuICAgIHJldHVybiBmdW5jdGlvbiAoaGl0QXJlYSwgeCwgeSwgZ2FtZU9iamVjdClcclxuICAgIHtcclxuICAgICAgICB2YXIgYWxwaGEgPSB0ZXh0dXJlTWFuYWdlci5nZXRQaXhlbEFscGhhKHgsIHksIGdhbWVPYmplY3QudGV4dHVyZS5rZXksIGdhbWVPYmplY3QuZnJhbWUubmFtZSk7XHJcblxyXG4gICAgICAgIHJldHVybiAoYWxwaGEgJiYgYWxwaGEgPj0gYWxwaGFUb2xlcmFuY2UpO1xyXG4gICAgfTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ3JlYXRlUGl4ZWxQZXJmZWN0SGFuZGxlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/CreatePixelPerfectHandler.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/InputManager.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/input/InputManager.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/input/const.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/input/events/index.js\");\r\nvar GameEvents = __webpack_require__(/*! ../core/events */ \"./node_modules/phaser/src/core/events/index.js\");\r\nvar Keyboard = __webpack_require__(/*! ./keyboard/KeyboardManager */ \"./node_modules/phaser/src/input/keyboard/KeyboardManager.js\");\r\nvar Mouse = __webpack_require__(/*! ./mouse/MouseManager */ \"./node_modules/phaser/src/input/mouse/MouseManager.js\");\r\nvar Pointer = __webpack_require__(/*! ./Pointer */ \"./node_modules/phaser/src/input/Pointer.js\");\r\nvar Touch = __webpack_require__(/*! ./touch/TouchManager */ \"./node_modules/phaser/src/input/touch/TouchManager.js\");\r\nvar TransformMatrix = __webpack_require__(/*! ../gameobjects/components/TransformMatrix */ \"./node_modules/phaser/src/gameobjects/components/TransformMatrix.js\");\r\nvar TransformXY = __webpack_require__(/*! ../math/TransformXY */ \"./node_modules/phaser/src/math/TransformXY.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Input Manager is responsible for handling the pointer related systems in a single Phaser Game instance.\r\n *\r\n * Based on the Game Config it will create handlers for mouse and touch support.\r\n *\r\n * Keyboard and Gamepad are plugins, handled directly by the InputPlugin class.\r\n *\r\n * It then manages the events, pointer creation and general hit test related operations.\r\n *\r\n * You rarely need to interact with the Input Manager directly, and as such, all of its properties and methods\r\n * should be considered private. Instead, you should use the Input Plugin, which is a Scene level system, responsible\r\n * for dealing with all input events for a Scene.\r\n *\r\n * @class InputManager\r\n * @memberof Phaser.Input\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Game} game - The Game instance that owns the Input Manager.\r\n * @param {object} config - The Input Configuration object, as set in the Game Config.\r\n */\r\nvar InputManager = new Class({\r\n\r\n initialize:\r\n\r\n function InputManager (game, config)\r\n {\r\n /**\r\n * The Game instance that owns the Input Manager.\r\n * A Game only maintains on instance of the Input Manager at any time.\r\n *\r\n * @name Phaser.Input.InputManager#game\r\n * @type {Phaser.Game}\r\n * @readonly\r\n * @since 3.0.0\r\n */\r\n this.game = game;\r\n\r\n /**\r\n * A reference to the global Game Scale Manager.\r\n * Used for all bounds checks and pointer scaling.\r\n *\r\n * @name Phaser.Input.InputManager#scaleManager\r\n * @type {Phaser.Scale.ScaleManager}\r\n * @since 3.16.0\r\n */\r\n this.scaleManager;\r\n\r\n /**\r\n * The Canvas that is used for all DOM event input listeners.\r\n *\r\n * @name Phaser.Input.InputManager#canvas\r\n * @type {HTMLCanvasElement}\r\n * @since 3.0.0\r\n */\r\n this.canvas;\r\n\r\n /**\r\n * The Game Configuration object, as set during the game boot.\r\n *\r\n * @name Phaser.Input.InputManager#config\r\n * @type {Phaser.Core.Config}\r\n * @since 3.0.0\r\n */\r\n this.config = config;\r\n\r\n /**\r\n * If set, the Input Manager will run its update loop every frame.\r\n *\r\n * @name Phaser.Input.InputManager#enabled\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.enabled = true;\r\n\r\n /**\r\n * The Event Emitter instance that the Input Manager uses to emit events from.\r\n *\r\n * @name Phaser.Input.InputManager#events\r\n * @type {Phaser.Events.EventEmitter}\r\n * @since 3.0.0\r\n */\r\n this.events = new EventEmitter();\r\n\r\n /**\r\n * Are any mouse or touch pointers currently over the game canvas?\r\n * This is updated automatically by the canvas over and out handlers.\r\n *\r\n * @name Phaser.Input.InputManager#isOver\r\n * @type {boolean}\r\n * @readonly\r\n * @since 3.16.0\r\n */\r\n this.isOver = true;\r\n\r\n /**\r\n * The default CSS cursor to be used when interacting with your game.\r\n *\r\n * See the `setDefaultCursor` method for more details.\r\n *\r\n * @name Phaser.Input.InputManager#defaultCursor\r\n * @type {string}\r\n * @since 3.10.0\r\n */\r\n this.defaultCursor = '';\r\n\r\n /**\r\n * A reference to the Keyboard Manager class, if enabled via the `input.keyboard` Game Config property.\r\n *\r\n * @name Phaser.Input.InputManager#keyboard\r\n * @type {?Phaser.Input.Keyboard.KeyboardManager}\r\n * @since 3.16.0\r\n */\r\n this.keyboard = (config.inputKeyboard) ? new Keyboard(this) : null;\r\n\r\n /**\r\n * A reference to the Mouse Manager class, if enabled via the `input.mouse` Game Config property.\r\n *\r\n * @name Phaser.Input.InputManager#mouse\r\n * @type {?Phaser.Input.Mouse.MouseManager}\r\n * @since 3.0.0\r\n */\r\n this.mouse = (config.inputMouse) ? new Mouse(this) : null;\r\n\r\n /**\r\n * A reference to the Touch Manager class, if enabled via the `input.touch` Game Config property.\r\n *\r\n * @name Phaser.Input.InputManager#touch\r\n * @type {Phaser.Input.Touch.TouchManager}\r\n * @since 3.0.0\r\n */\r\n this.touch = (config.inputTouch) ? new Touch(this) : null;\r\n\r\n /**\r\n * An array of Pointers that have been added to the game.\r\n * The first entry is reserved for the Mouse Pointer, the rest are Touch Pointers.\r\n *\r\n * By default there is 1 touch pointer enabled. If you need more use the `addPointer` method to start them,\r\n * or set the `input.activePointers` property in the Game Config.\r\n *\r\n * @name Phaser.Input.InputManager#pointers\r\n * @type {Phaser.Input.Pointer[]}\r\n * @since 3.10.0\r\n */\r\n this.pointers = [];\r\n\r\n /**\r\n * The number of touch objects activated and being processed each update.\r\n *\r\n * You can change this by either calling `addPointer` at run-time, or by\r\n * setting the `input.activePointers` property in the Game Config.\r\n *\r\n * @name Phaser.Input.InputManager#pointersTotal\r\n * @type {integer}\r\n * @readonly\r\n * @since 3.10.0\r\n */\r\n this.pointersTotal = config.inputActivePointers;\r\n\r\n if (config.inputTouch && this.pointersTotal === 1)\r\n {\r\n this.pointersTotal = 2;\r\n }\r\n\r\n for (var i = 0; i <= this.pointersTotal; i++)\r\n {\r\n var pointer = new Pointer(this, i);\r\n\r\n pointer.smoothFactor = config.inputSmoothFactor;\r\n\r\n this.pointers.push(pointer);\r\n }\r\n\r\n /**\r\n * The mouse has its own unique Pointer object, which you can reference directly if making a _desktop specific game_.\r\n * If you are supporting both desktop and touch devices then do not use this property, instead use `activePointer`\r\n * which will always map to the most recently interacted pointer.\r\n *\r\n * @name Phaser.Input.InputManager#mousePointer\r\n * @type {?Phaser.Input.Pointer}\r\n * @since 3.10.0\r\n */\r\n this.mousePointer = (config.inputMouse) ? this.pointers[0] : null;\r\n\r\n /**\r\n * The most recently active Pointer object.\r\n *\r\n * If you've only 1 Pointer in your game then this will accurately be either the first finger touched, or the mouse.\r\n *\r\n * If your game doesn't need to support multi-touch then you can safely use this property in all of your game\r\n * code and it will adapt to be either the mouse or the touch, based on device.\r\n *\r\n * @name Phaser.Input.InputManager#activePointer\r\n * @type {Phaser.Input.Pointer}\r\n * @since 3.0.0\r\n */\r\n this.activePointer = this.pointers[0];\r\n\r\n /**\r\n * If the top-most Scene in the Scene List receives an input it will stop input from\r\n * propagating any lower down the scene list, i.e. if you have a UI Scene at the top\r\n * and click something on it, that click will not then be passed down to any other\r\n * Scene below. Disable this to have input events passed through all Scenes, all the time.\r\n *\r\n * @name Phaser.Input.InputManager#globalTopOnly\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.globalTopOnly = true;\r\n\r\n /**\r\n * The time this Input Manager was last updated.\r\n * This value is populated by the Game Step each frame.\r\n *\r\n * @name Phaser.Input.InputManager#time\r\n * @type {number}\r\n * @readonly\r\n * @since 3.16.2\r\n */\r\n this.time = 0;\r\n\r\n /**\r\n * A re-cycled point-like object to store hit test values in.\r\n *\r\n * @name Phaser.Input.InputManager#_tempPoint\r\n * @type {{x:number, y:number}}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._tempPoint = { x: 0, y: 0 };\r\n\r\n /**\r\n * A re-cycled array to store hit results in.\r\n *\r\n * @name Phaser.Input.InputManager#_tempHitTest\r\n * @type {array}\r\n * @private\r\n * @default []\r\n * @since 3.0.0\r\n */\r\n this._tempHitTest = [];\r\n\r\n /**\r\n * A re-cycled matrix used in hit test calculations.\r\n *\r\n * @name Phaser.Input.InputManager#_tempMatrix\r\n * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n * @private\r\n * @since 3.4.0\r\n */\r\n this._tempMatrix = new TransformMatrix();\r\n\r\n /**\r\n * A re-cycled matrix used in hit test calculations.\r\n *\r\n * @name Phaser.Input.InputManager#_tempMatrix2\r\n * @type {Phaser.GameObjects.Components.TransformMatrix}\r\n * @private\r\n * @since 3.12.0\r\n */\r\n this._tempMatrix2 = new TransformMatrix();\r\n\r\n /**\r\n * An internal private var that records Scenes aborting event processing.\r\n *\r\n * @name Phaser.Input.InputManager#_tempSkip\r\n * @type {boolean}\r\n * @private\r\n * @since 3.18.0\r\n */\r\n this._tempSkip = false;\r\n\r\n /**\r\n * An internal private array that avoids needing to create a new array on every DOM mouse event.\r\n *\r\n * @name Phaser.Input.InputManager#mousePointerContainer\r\n * @type {Phaser.Input.Pointer[]}\r\n * @private\r\n * @since 3.18.0\r\n */\r\n this.mousePointerContainer = [ this.mousePointer ];\r\n\r\n game.events.once(GameEvents.BOOT, this.boot, this);\r\n },\r\n\r\n /**\r\n * The Boot handler is called by Phaser.Game when it first starts up.\r\n * The renderer is available by now.\r\n *\r\n * @method Phaser.Input.InputManager#boot\r\n * @protected\r\n * @fires Phaser.Input.Events#MANAGER_BOOT\r\n * @since 3.0.0\r\n */\r\n boot: function ()\r\n {\r\n this.canvas = this.game.canvas;\r\n\r\n this.scaleManager = this.game.scale;\r\n\r\n this.events.emit(Events.MANAGER_BOOT);\r\n\r\n this.game.events.on(GameEvents.PRE_RENDER, this.preRender, this);\r\n\r\n this.game.events.once(GameEvents.DESTROY, this.destroy, this);\r\n },\r\n\r\n /**\r\n * Internal canvas state change, called automatically by the Mouse Manager.\r\n *\r\n * @method Phaser.Input.InputManager#setCanvasOver\r\n * @fires Phaser.Input.Events#GAME_OVER\r\n * @private\r\n * @since 3.16.0\r\n *\r\n * @param {(MouseEvent|TouchEvent)} event - The DOM Event.\r\n */\r\n setCanvasOver: function (event)\r\n {\r\n this.isOver = true;\r\n\r\n this.events.emit(Events.GAME_OVER, event);\r\n },\r\n\r\n /**\r\n * Internal canvas state change, called automatically by the Mouse Manager.\r\n *\r\n * @method Phaser.Input.InputManager#setCanvasOut\r\n * @fires Phaser.Input.Events#GAME_OUT\r\n * @private\r\n * @since 3.16.0\r\n *\r\n * @param {(MouseEvent|TouchEvent)} event - The DOM Event.\r\n */\r\n setCanvasOut: function (event)\r\n {\r\n this.isOver = false;\r\n\r\n this.events.emit(Events.GAME_OUT, event);\r\n },\r\n\r\n /**\r\n * Internal update, called automatically by the Game Step right at the start.\r\n *\r\n * @method Phaser.Input.InputManager#preRender\r\n * @private\r\n * @since 3.18.0\r\n */\r\n preRender: function ()\r\n {\r\n var time = this.game.loop.now;\r\n var delta = this.game.loop.delta;\r\n var scenes = this.game.scene.getScenes(true, true);\r\n\r\n this.time = time;\r\n\r\n this.events.emit(Events.MANAGER_UPDATE);\r\n\r\n for (var i = 0; i < scenes.length; i++)\r\n {\r\n var scene = scenes[i];\r\n\r\n if (scene.sys.input && scene.sys.input.updatePoll(time, delta) && this.globalTopOnly)\r\n {\r\n // If the Scene returns true, it means it captured some input that no other Scene should get, so we bail out\r\n return;\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Tells the Input system to set a custom cursor.\r\n * \r\n * This cursor will be the default cursor used when interacting with the game canvas.\r\n *\r\n * If an Interactive Object also sets a custom cursor, this is the cursor that is reset after its use.\r\n *\r\n * Any valid CSS cursor value is allowed, including paths to image files, i.e.:\r\n *\r\n * ```javascript\r\n * this.input.setDefaultCursor('url(assets/cursors/sword.cur), pointer');\r\n * ```\r\n * \r\n * Please read about the differences between browsers when it comes to the file formats and sizes they support:\r\n *\r\n * https://developer.mozilla.org/en-US/docs/Web/CSS/cursor\r\n * https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_User_Interface/Using_URL_values_for_the_cursor_property\r\n *\r\n * It's up to you to pick a suitable cursor format that works across the range of browsers you need to support.\r\n *\r\n * @method Phaser.Input.InputManager#setDefaultCursor\r\n * @since 3.10.0\r\n * \r\n * @param {string} cursor - The CSS to be used when setting the default cursor.\r\n */\r\n setDefaultCursor: function (cursor)\r\n {\r\n this.defaultCursor = cursor;\r\n\r\n if (this.canvas.style.cursor !== cursor)\r\n {\r\n this.canvas.style.cursor = cursor;\r\n }\r\n },\r\n\r\n /**\r\n * Called by the InputPlugin when processing over and out events.\r\n * \r\n * Tells the Input Manager to set a custom cursor during its postUpdate step.\r\n *\r\n * https://developer.mozilla.org/en-US/docs/Web/CSS/cursor\r\n *\r\n * @method Phaser.Input.InputManager#setCursor\r\n * @private\r\n * @since 3.10.0\r\n * \r\n * @param {Phaser.Types.Input.InteractiveObject} interactiveObject - The Interactive Object that called this method.\r\n */\r\n setCursor: function (interactiveObject)\r\n {\r\n if (interactiveObject.cursor)\r\n {\r\n this.canvas.style.cursor = interactiveObject.cursor;\r\n }\r\n },\r\n\r\n /**\r\n * Called by the InputPlugin when processing over and out events.\r\n * \r\n * Tells the Input Manager to clear the hand cursor, if set, during its postUpdate step.\r\n *\r\n * @method Phaser.Input.InputManager#resetCursor\r\n * @private\r\n * @since 3.10.0\r\n * \r\n * @param {Phaser.Types.Input.InteractiveObject} interactiveObject - The Interactive Object that called this method.\r\n */\r\n resetCursor: function (interactiveObject)\r\n {\r\n if (interactiveObject.cursor && this.canvas)\r\n {\r\n this.canvas.style.cursor = this.defaultCursor;\r\n }\r\n },\r\n\r\n /**\r\n * Adds new Pointer objects to the Input Manager.\r\n *\r\n * By default Phaser creates 2 pointer objects: `mousePointer` and `pointer1`.\r\n *\r\n * You can create more either by calling this method, or by setting the `input.activePointers` property\r\n * in the Game Config, up to a maximum of 10 pointers.\r\n *\r\n * The first 10 pointers are available via the `InputPlugin.pointerX` properties, once they have been added\r\n * via this method.\r\n *\r\n * @method Phaser.Input.InputManager#addPointer\r\n * @since 3.10.0\r\n *\r\n * @param {integer} [quantity=1] The number of new Pointers to create. A maximum of 10 is allowed in total.\r\n *\r\n * @return {Phaser.Input.Pointer[]} An array containing all of the new Pointer objects that were created.\r\n */\r\n addPointer: function (quantity)\r\n {\r\n if (quantity === undefined) { quantity = 1; }\r\n\r\n var output = [];\r\n\r\n if (this.pointersTotal + quantity > 10)\r\n {\r\n quantity = 10 - this.pointersTotal;\r\n }\r\n\r\n for (var i = 0; i < quantity; i++)\r\n {\r\n var id = this.pointers.length;\r\n\r\n var pointer = new Pointer(this, id);\r\n\r\n pointer.smoothFactor = this.config.inputSmoothFactor;\r\n\r\n this.pointers.push(pointer);\r\n\r\n this.pointersTotal++;\r\n\r\n output.push(pointer);\r\n }\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Internal method that gets a list of all the active Input Plugins in the game\r\n * and updates each of them in turn, in reverse order (top to bottom), to allow\r\n * for DOM top-level event handling simulation.\r\n *\r\n * @method Phaser.Input.InputManager#updateInputPlugins\r\n * @since 3.16.0\r\n *\r\n * @param {integer} type - The type of event to process.\r\n * @param {Phaser.Input.Pointer[]} pointers - An array of Pointers on which the event occurred.\r\n */\r\n updateInputPlugins: function (type, pointers)\r\n {\r\n var scenes = this.game.scene.getScenes(true, true);\r\n\r\n this._tempSkip = false;\r\n\r\n for (var i = 0; i < scenes.length; i++)\r\n {\r\n var scene = scenes[i];\r\n\r\n if (scene.sys.input)\r\n {\r\n var capture = scene.sys.input.update(type, pointers);\r\n\r\n if ((capture && this.globalTopOnly) || this._tempSkip)\r\n {\r\n // If the Scene returns true, or called stopPropagation, it means it captured some input that no other Scene should get, so we bail out\r\n return;\r\n }\r\n }\r\n }\r\n },\r\n\r\n // event.targetTouches = list of all touches on the TARGET ELEMENT (i.e. game dom element)\r\n // event.touches = list of all touches on the ENTIRE DOCUMENT, not just the target element\r\n // event.changedTouches = the touches that CHANGED in this event, not the total number of them\r\n\r\n /**\r\n * Processes a touch start event, as passed in by the TouchManager.\r\n *\r\n * @method Phaser.Input.InputManager#onTouchStart\r\n * @private\r\n * @since 3.18.0\r\n *\r\n * @param {TouchEvent} event - The native DOM Touch event.\r\n */\r\n onTouchStart: function (event)\r\n {\r\n var pointers = this.pointers;\r\n var changed = [];\r\n\r\n for (var c = 0; c < event.changedTouches.length; c++)\r\n {\r\n var changedTouch = event.changedTouches[c];\r\n\r\n for (var i = 1; i < this.pointersTotal; i++)\r\n {\r\n var pointer = pointers[i];\r\n\r\n if (!pointer.active)\r\n {\r\n pointer.touchstart(changedTouch, event);\r\n\r\n this.activePointer = pointer;\r\n\r\n changed.push(pointer);\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.updateInputPlugins(CONST.TOUCH_START, changed);\r\n },\r\n\r\n /**\r\n * Processes a touch move event, as passed in by the TouchManager.\r\n *\r\n * @method Phaser.Input.InputManager#onTouchMove\r\n * @private\r\n * @since 3.18.0\r\n *\r\n * @param {TouchEvent} event - The native DOM Touch event.\r\n */\r\n onTouchMove: function (event)\r\n {\r\n var pointers = this.pointers;\r\n var changed = [];\r\n\r\n for (var c = 0; c < event.changedTouches.length; c++)\r\n {\r\n var changedTouch = event.changedTouches[c];\r\n\r\n for (var i = 1; i < this.pointersTotal; i++)\r\n {\r\n var pointer = pointers[i];\r\n\r\n if (pointer.active && pointer.identifier === changedTouch.identifier)\r\n {\r\n pointer.touchmove(changedTouch, event);\r\n\r\n this.activePointer = pointer;\r\n\r\n changed.push(pointer);\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.updateInputPlugins(CONST.TOUCH_MOVE, changed);\r\n },\r\n\r\n // For touch end its a list of the touch points that have been removed from the surface\r\n // https://developer.mozilla.org/en-US/docs/DOM/TouchList\r\n // event.changedTouches = the touches that CHANGED in this event, not the total number of them\r\n\r\n /**\r\n * Processes a touch end event, as passed in by the TouchManager.\r\n *\r\n * @method Phaser.Input.InputManager#onTouchEnd\r\n * @private\r\n * @since 3.18.0\r\n *\r\n * @param {TouchEvent} event - The native DOM Touch event.\r\n */\r\n onTouchEnd: function (event)\r\n {\r\n var pointers = this.pointers;\r\n var changed = [];\r\n\r\n for (var c = 0; c < event.changedTouches.length; c++)\r\n {\r\n var changedTouch = event.changedTouches[c];\r\n\r\n for (var i = 1; i < this.pointersTotal; i++)\r\n {\r\n var pointer = pointers[i];\r\n\r\n if (pointer.active && pointer.identifier === changedTouch.identifier)\r\n {\r\n pointer.touchend(changedTouch, event);\r\n\r\n changed.push(pointer);\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.updateInputPlugins(CONST.TOUCH_END, changed);\r\n },\r\n\r\n /**\r\n * Processes a touch cancel event, as passed in by the TouchManager.\r\n *\r\n * @method Phaser.Input.InputManager#onTouchCancel\r\n * @private\r\n * @since 3.18.0\r\n *\r\n * @param {TouchEvent} event - The native DOM Touch event.\r\n */\r\n onTouchCancel: function (event)\r\n {\r\n var pointers = this.pointers;\r\n var changed = [];\r\n\r\n for (var c = 0; c < event.changedTouches.length; c++)\r\n {\r\n var changedTouch = event.changedTouches[c];\r\n\r\n for (var i = 1; i < this.pointersTotal; i++)\r\n {\r\n var pointer = pointers[i];\r\n\r\n if (pointer.active && pointer.identifier === changedTouch.identifier)\r\n {\r\n pointer.touchcancel(changedTouch, event);\r\n\r\n changed.push(pointer);\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.updateInputPlugins(CONST.TOUCH_CANCEL, changed);\r\n },\r\n\r\n /**\r\n * Processes a mouse down event, as passed in by the MouseManager.\r\n *\r\n * @method Phaser.Input.InputManager#onMouseDown\r\n * @private\r\n * @since 3.18.0\r\n *\r\n * @param {MouseEvent} event - The native DOM Mouse event.\r\n */\r\n onMouseDown: function (event)\r\n {\r\n this.mousePointer.down(event);\r\n\r\n this.mousePointer.updateMotion();\r\n\r\n this.updateInputPlugins(CONST.MOUSE_DOWN, this.mousePointerContainer);\r\n },\r\n\r\n /**\r\n * Processes a mouse move event, as passed in by the MouseManager.\r\n *\r\n * @method Phaser.Input.InputManager#onMouseMove\r\n * @private\r\n * @since 3.18.0\r\n *\r\n * @param {MouseEvent} event - The native DOM Mouse event.\r\n */\r\n onMouseMove: function (event)\r\n {\r\n this.mousePointer.move(event);\r\n\r\n this.mousePointer.updateMotion();\r\n\r\n this.updateInputPlugins(CONST.MOUSE_MOVE, this.mousePointerContainer);\r\n },\r\n\r\n /**\r\n * Processes a mouse up event, as passed in by the MouseManager.\r\n *\r\n * @method Phaser.Input.InputManager#onMouseUp\r\n * @private\r\n * @since 3.18.0\r\n *\r\n * @param {MouseEvent} event - The native DOM Mouse event.\r\n */\r\n onMouseUp: function (event)\r\n {\r\n this.mousePointer.up(event);\r\n\r\n this.mousePointer.updateMotion();\r\n\r\n this.updateInputPlugins(CONST.MOUSE_UP, this.mousePointerContainer);\r\n },\r\n\r\n /**\r\n * Processes a mouse wheel event, as passed in by the MouseManager.\r\n *\r\n * @method Phaser.Input.InputManager#onMouseWheel\r\n * @private\r\n * @since 3.18.0\r\n *\r\n * @param {WheelEvent} event - The native DOM Wheel event.\r\n */\r\n onMouseWheel: function (event)\r\n {\r\n this.mousePointer.wheel(event);\r\n\r\n this.updateInputPlugins(CONST.MOUSE_WHEEL, this.mousePointerContainer);\r\n },\r\n\r\n /**\r\n * Processes a pointer lock change event, as passed in by the MouseManager.\r\n *\r\n * @method Phaser.Input.InputManager#onPointerLockChange\r\n * @fires Phaser.Input.Events#POINTERLOCK_CHANGE\r\n * @private\r\n * @since 3.19.0\r\n *\r\n * @param {MouseEvent} event - The native DOM Mouse event.\r\n */\r\n onPointerLockChange: function (event)\r\n {\r\n var isLocked = this.mouse.locked;\r\n\r\n this.mousePointer.locked = isLocked;\r\n\r\n this.events.emit(Events.POINTERLOCK_CHANGE, event, isLocked);\r\n },\r\n\r\n /**\r\n * Checks if the given Game Object should be considered as a candidate for input or not.\r\n *\r\n * Checks if the Game Object has an input component that is enabled, that it will render,\r\n * and finally, if it has a parent, that the parent parent, or any ancestor, is visible or not.\r\n *\r\n * @method Phaser.Input.InputManager#inputCandidate\r\n * @private\r\n * @since 3.10.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to test.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera which is being tested against.\r\n *\r\n * @return {boolean} `true` if the Game Object should be considered for input, otherwise `false`.\r\n */\r\n inputCandidate: function (gameObject, camera)\r\n {\r\n var input = gameObject.input;\r\n\r\n if (!input || !input.enabled || (!input.alwaysEnabled && !gameObject.willRender(camera)))\r\n {\r\n return false;\r\n }\r\n\r\n var visible = true;\r\n var parent = gameObject.parentContainer;\r\n\r\n if (parent)\r\n {\r\n do\r\n {\r\n if (!parent.willRender(camera))\r\n {\r\n visible = false;\r\n break;\r\n }\r\n\r\n parent = parent.parentContainer;\r\n\r\n } while (parent);\r\n }\r\n\r\n return visible;\r\n },\r\n\r\n /**\r\n * Performs a hit test using the given Pointer and camera, against an array of interactive Game Objects.\r\n *\r\n * The Game Objects are culled against the camera, and then the coordinates are translated into the local camera space\r\n * and used to determine if they fall within the remaining Game Objects hit areas or not.\r\n *\r\n * If nothing is matched an empty array is returned.\r\n *\r\n * This method is called automatically by InputPlugin.hitTestPointer and doesn't usually need to be invoked directly.\r\n *\r\n * @method Phaser.Input.InputManager#hitTest\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Pointer} pointer - The Pointer to test against.\r\n * @param {array} gameObjects - An array of interactive Game Objects to check.\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera which is being tested against.\r\n * @param {array} [output] - An array to store the results in. If not given, a new empty array is created.\r\n *\r\n * @return {array} An array of the Game Objects that were hit during this hit test.\r\n */\r\n hitTest: function (pointer, gameObjects, camera, output)\r\n {\r\n if (output === undefined) { output = this._tempHitTest; }\r\n\r\n var tempPoint = this._tempPoint;\r\n\r\n var csx = camera.scrollX;\r\n var csy = camera.scrollY;\r\n\r\n output.length = 0;\r\n\r\n var x = pointer.x;\r\n var y = pointer.y;\r\n\r\n if (camera.resolution !== 1)\r\n {\r\n x += camera._x;\r\n y += camera._y;\r\n }\r\n\r\n // Stores the world point inside of tempPoint\r\n camera.getWorldPoint(x, y, tempPoint);\r\n\r\n pointer.worldX = tempPoint.x;\r\n pointer.worldY = tempPoint.y;\r\n\r\n var point = { x: 0, y: 0 };\r\n\r\n var matrix = this._tempMatrix;\r\n var parentMatrix = this._tempMatrix2;\r\n\r\n for (var i = 0; i < gameObjects.length; i++)\r\n {\r\n var gameObject = gameObjects[i];\r\n\r\n // Checks if the Game Object can receive input (isn't being ignored by the camera, invisible, etc)\r\n // and also checks all of its parents, if any\r\n if (!this.inputCandidate(gameObject, camera))\r\n {\r\n continue;\r\n }\r\n\r\n var px = tempPoint.x + (csx * gameObject.scrollFactorX) - csx;\r\n var py = tempPoint.y + (csy * gameObject.scrollFactorY) - csy;\r\n\r\n if (gameObject.parentContainer)\r\n {\r\n gameObject.getWorldTransformMatrix(matrix, parentMatrix);\r\n\r\n matrix.applyInverse(px, py, point);\r\n }\r\n else\r\n {\r\n TransformXY(px, py, gameObject.x, gameObject.y, gameObject.rotation, gameObject.scaleX, gameObject.scaleY, point);\r\n }\r\n \r\n if (this.pointWithinHitArea(gameObject, point.x, point.y))\r\n {\r\n output.push(gameObject);\r\n }\r\n }\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Checks if the given x and y coordinate are within the hit area of the Game Object.\r\n *\r\n * This method assumes that the coordinate values have already been translated into the space of the Game Object.\r\n *\r\n * If the coordinates are within the hit area they are set into the Game Objects Input `localX` and `localY` properties.\r\n *\r\n * @method Phaser.Input.InputManager#pointWithinHitArea\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The interactive Game Object to check against.\r\n * @param {number} x - The translated x coordinate for the hit test.\r\n * @param {number} y - The translated y coordinate for the hit test.\r\n *\r\n * @return {boolean} `true` if the coordinates were inside the Game Objects hit area, otherwise `false`.\r\n */\r\n pointWithinHitArea: function (gameObject, x, y)\r\n {\r\n // Normalize the origin\r\n x += gameObject.displayOriginX;\r\n y += gameObject.displayOriginY;\r\n\r\n var input = gameObject.input;\r\n\r\n if (input && input.hitAreaCallback(input.hitArea, x, y, gameObject))\r\n {\r\n input.localX = x;\r\n input.localY = y;\r\n\r\n return true;\r\n }\r\n else\r\n {\r\n return false;\r\n }\r\n },\r\n\r\n /**\r\n * Checks if the given x and y coordinate are within the hit area of the Interactive Object.\r\n *\r\n * This method assumes that the coordinate values have already been translated into the space of the Interactive Object.\r\n *\r\n * If the coordinates are within the hit area they are set into the Interactive Objects Input `localX` and `localY` properties.\r\n *\r\n * @method Phaser.Input.InputManager#pointWithinInteractiveObject\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Input.InteractiveObject} object - The Interactive Object to check against.\r\n * @param {number} x - The translated x coordinate for the hit test.\r\n * @param {number} y - The translated y coordinate for the hit test.\r\n *\r\n * @return {boolean} `true` if the coordinates were inside the Game Objects hit area, otherwise `false`.\r\n */\r\n pointWithinInteractiveObject: function (object, x, y)\r\n {\r\n if (!object.hitArea)\r\n {\r\n return false;\r\n }\r\n\r\n // Normalize the origin\r\n x += object.gameObject.displayOriginX;\r\n y += object.gameObject.displayOriginY;\r\n\r\n object.localX = x;\r\n object.localY = y;\r\n\r\n return object.hitAreaCallback(object.hitArea, x, y, object);\r\n },\r\n\r\n /**\r\n * Transforms the pageX and pageY values of a Pointer into the scaled coordinate space of the Input Manager.\r\n *\r\n * @method Phaser.Input.InputManager#transformPointer\r\n * @since 3.10.0\r\n *\r\n * @param {Phaser.Input.Pointer} pointer - The Pointer to transform the values for.\r\n * @param {number} pageX - The Page X value.\r\n * @param {number} pageY - The Page Y value.\r\n * @param {boolean} wasMove - Are we transforming the Pointer from a move event, or an up / down event?\r\n */\r\n transformPointer: function (pointer, pageX, pageY, wasMove)\r\n {\r\n var p0 = pointer.position;\r\n var p1 = pointer.prevPosition;\r\n\r\n // Store previous position\r\n p1.x = p0.x;\r\n p1.y = p0.y;\r\n\r\n // Translate coordinates\r\n var x = this.scaleManager.transformX(pageX);\r\n var y = this.scaleManager.transformY(pageY);\r\n\r\n var a = pointer.smoothFactor;\r\n\r\n if (!wasMove || a === 0)\r\n {\r\n // Set immediately\r\n p0.x = x;\r\n p0.y = y;\r\n }\r\n else\r\n {\r\n // Apply smoothing\r\n p0.x = x * a + p1.x * (1 - a);\r\n p0.y = y * a + p1.y * (1 - a);\r\n }\r\n },\r\n\r\n /**\r\n * Destroys the Input Manager and all of its systems.\r\n *\r\n * There is no way to recover from doing this.\r\n *\r\n * @method Phaser.Input.InputManager#destroy\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.events.removeAllListeners();\r\n\r\n this.game.events.off(GameEvents.PRE_RENDER);\r\n\r\n if (this.keyboard)\r\n {\r\n this.keyboard.destroy();\r\n }\r\n\r\n if (this.mouse)\r\n {\r\n this.mouse.destroy();\r\n }\r\n\r\n if (this.touch)\r\n {\r\n this.touch.destroy();\r\n }\r\n\r\n for (var i = 0; i < this.pointers.length; i++)\r\n {\r\n this.pointers[i].destroy();\r\n }\r\n\r\n this.pointers = [];\r\n this._tempHitTest = [];\r\n this._tempMatrix.destroy();\r\n this.canvas = null;\r\n this.game = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = InputManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9JbnB1dE1hbmFnZXIuanM/ZmYyMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGdFQUFnQjtBQUNwQyxZQUFZLG1CQUFPLENBQUMseURBQVM7QUFDN0IsbUJBQW1CLG1CQUFPLENBQUMsNERBQWU7QUFDMUMsYUFBYSxtQkFBTyxDQUFDLGlFQUFVO0FBQy9CLGlCQUFpQixtQkFBTyxDQUFDLHNFQUFnQjtBQUN6QyxlQUFlLG1CQUFPLENBQUMsK0ZBQTRCO0FBQ25ELFlBQVksbUJBQU8sQ0FBQyxtRkFBc0I7QUFDMUMsY0FBYyxtQkFBTyxDQUFDLDZEQUFXO0FBQ2pDLFlBQVksbUJBQU8sQ0FBQyxtRkFBc0I7QUFDMUMsc0JBQXNCLG1CQUFPLENBQUMsc0hBQTJDO0FBQ3pFLGtCQUFrQixtQkFBTyxDQUFDLDBFQUFxQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1Qix5QkFBeUI7QUFDaEQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjs7QUFFM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3QkFBd0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHdCQUF3QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFDQUFxQztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQ0FBcUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxjQUFjOztBQUVuRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsY0FBYztBQUNyQztBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSx1QkFBdUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxXQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGlDQUFpQztBQUN4RDtBQUNBOztBQUVBLDJCQUEyQix3QkFBd0I7QUFDbkQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxXQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGlDQUFpQztBQUN4RDtBQUNBOztBQUVBLDJCQUEyQix3QkFBd0I7QUFDbkQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsV0FBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixpQ0FBaUM7QUFDeEQ7QUFDQTs7QUFFQSwyQkFBMkIsd0JBQXdCO0FBQ25EO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsV0FBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixpQ0FBaUM7QUFDeEQ7QUFDQTs7QUFFQSwyQkFBMkIsd0JBQXdCO0FBQ25EO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsV0FBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFdBQVc7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxXQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsV0FBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsV0FBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhCQUE4QjtBQUM3QyxlQUFlLDhCQUE4QjtBQUM3QztBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGFBQWE7QUFDYjs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFCQUFxQjtBQUNwQyxlQUFlLE1BQU07QUFDckIsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSxNQUFNO0FBQ3JCO0FBQ0EsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLDRCQUE0Qjs7QUFFL0Q7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHFCQUFxQjs7QUFFckI7QUFDQTs7QUFFQSx1QkFBdUIsd0JBQXdCO0FBQy9DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUNBQXFDO0FBQ3BELGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQkFBcUI7QUFDcEMsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsMEJBQTBCO0FBQ2pEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L0lucHV0TWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi9jb25zdCcpO1xyXG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xyXG52YXIgRXZlbnRzID0gcmVxdWlyZSgnLi9ldmVudHMnKTtcclxudmFyIEdhbWVFdmVudHMgPSByZXF1aXJlKCcuLi9jb3JlL2V2ZW50cycpO1xyXG52YXIgS2V5Ym9hcmQgPSByZXF1aXJlKCcuL2tleWJvYXJkL0tleWJvYXJkTWFuYWdlcicpO1xyXG52YXIgTW91c2UgPSByZXF1aXJlKCcuL21vdXNlL01vdXNlTWFuYWdlcicpO1xyXG52YXIgUG9pbnRlciA9IHJlcXVpcmUoJy4vUG9pbnRlcicpO1xyXG52YXIgVG91Y2ggPSByZXF1aXJlKCcuL3RvdWNoL1RvdWNoTWFuYWdlcicpO1xyXG52YXIgVHJhbnNmb3JtTWF0cml4ID0gcmVxdWlyZSgnLi4vZ2FtZW9iamVjdHMvY29tcG9uZW50cy9UcmFuc2Zvcm1NYXRyaXgnKTtcclxudmFyIFRyYW5zZm9ybVhZID0gcmVxdWlyZSgnLi4vbWF0aC9UcmFuc2Zvcm1YWScpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIElucHV0IE1hbmFnZXIgaXMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSBwb2ludGVyIHJlbGF0ZWQgc3lzdGVtcyBpbiBhIHNpbmdsZSBQaGFzZXIgR2FtZSBpbnN0YW5jZS5cclxuICpcclxuICogQmFzZWQgb24gdGhlIEdhbWUgQ29uZmlnIGl0IHdpbGwgY3JlYXRlIGhhbmRsZXJzIGZvciBtb3VzZSBhbmQgdG91Y2ggc3VwcG9ydC5cclxuICpcclxuICogS2V5Ym9hcmQgYW5kIEdhbWVwYWQgYXJlIHBsdWdpbnMsIGhhbmRsZWQgZGlyZWN0bHkgYnkgdGhlIElucHV0UGx1Z2luIGNsYXNzLlxyXG4gKlxyXG4gKiBJdCB0aGVuIG1hbmFnZXMgdGhlIGV2ZW50cywgcG9pbnRlciBjcmVhdGlvbiBhbmQgZ2VuZXJhbCBoaXQgdGVzdCByZWxhdGVkIG9wZXJhdGlvbnMuXHJcbiAqXHJcbiAqIFlvdSByYXJlbHkgbmVlZCB0byBpbnRlcmFjdCB3aXRoIHRoZSBJbnB1dCBNYW5hZ2VyIGRpcmVjdGx5LCBhbmQgYXMgc3VjaCwgYWxsIG9mIGl0cyBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzXHJcbiAqIHNob3VsZCBiZSBjb25zaWRlcmVkIHByaXZhdGUuIEluc3RlYWQsIHlvdSBzaG91bGQgdXNlIHRoZSBJbnB1dCBQbHVnaW4sIHdoaWNoIGlzIGEgU2NlbmUgbGV2ZWwgc3lzdGVtLCByZXNwb25zaWJsZVxyXG4gKiBmb3IgZGVhbGluZyB3aXRoIGFsbCBpbnB1dCBldmVudHMgZm9yIGEgU2NlbmUuXHJcbiAqXHJcbiAqIEBjbGFzcyBJbnB1dE1hbmFnZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5JbnB1dFxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWV9IGdhbWUgLSBUaGUgR2FtZSBpbnN0YW5jZSB0aGF0IG93bnMgdGhlIElucHV0IE1hbmFnZXIuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgLSBUaGUgSW5wdXQgQ29uZmlndXJhdGlvbiBvYmplY3QsIGFzIHNldCBpbiB0aGUgR2FtZSBDb25maWcuXHJcbiAqL1xyXG52YXIgSW5wdXRNYW5hZ2VyID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIElucHV0TWFuYWdlciAoZ2FtZSwgY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBHYW1lIGluc3RhbmNlIHRoYXQgb3ducyB0aGUgSW5wdXQgTWFuYWdlci5cclxuICAgICAgICAgKiBBIEdhbWUgb25seSBtYWludGFpbnMgb24gaW5zdGFuY2Ugb2YgdGhlIElucHV0IE1hbmFnZXIgYXQgYW55IHRpbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI2dhbWVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWV9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nYW1lID0gZ2FtZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBHYW1lIFNjYWxlIE1hbmFnZXIuXHJcbiAgICAgICAgICogVXNlZCBmb3IgYWxsIGJvdW5kcyBjaGVja3MgYW5kIHBvaW50ZXIgc2NhbGluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXIjc2NhbGVNYW5hZ2VyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2FsZS5TY2FsZU1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NhbGVNYW5hZ2VyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgQ2FudmFzIHRoYXQgaXMgdXNlZCBmb3IgYWxsIERPTSBldmVudCBpbnB1dCBsaXN0ZW5lcnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI2NhbnZhc1xyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MQ2FudmFzRWxlbWVudH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNhbnZhcztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEdhbWUgQ29uZmlndXJhdGlvbiBvYmplY3QsIGFzIHNldCBkdXJpbmcgdGhlIGdhbWUgYm9vdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXIjY29uZmlnXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5Db3JlLkNvbmZpZ31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgc2V0LCB0aGUgSW5wdXQgTWFuYWdlciB3aWxsIHJ1biBpdHMgdXBkYXRlIGxvb3AgZXZlcnkgZnJhbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI2VuYWJsZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEV2ZW50IEVtaXR0ZXIgaW5zdGFuY2UgdGhhdCB0aGUgSW5wdXQgTWFuYWdlciB1c2VzIHRvIGVtaXQgZXZlbnRzIGZyb20uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI2V2ZW50c1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQXJlIGFueSBtb3VzZSBvciB0b3VjaCBwb2ludGVycyBjdXJyZW50bHkgb3ZlciB0aGUgZ2FtZSBjYW52YXM/XHJcbiAgICAgICAgICogVGhpcyBpcyB1cGRhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNhbnZhcyBvdmVyIGFuZCBvdXQgaGFuZGxlcnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI2lzT3ZlclxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlzT3ZlciA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBkZWZhdWx0IENTUyBjdXJzb3IgdG8gYmUgdXNlZCB3aGVuIGludGVyYWN0aW5nIHdpdGggeW91ciBnYW1lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogU2VlIHRoZSBgc2V0RGVmYXVsdEN1cnNvcmAgbWV0aG9kIGZvciBtb3JlIGRldGFpbHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI2RlZmF1bHRDdXJzb3JcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlZmF1bHRDdXJzb3IgPSAnJztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIEtleWJvYXJkIE1hbmFnZXIgY2xhc3MsIGlmIGVuYWJsZWQgdmlhIHRoZSBgaW5wdXQua2V5Ym9hcmRgIEdhbWUgQ29uZmlnIHByb3BlcnR5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNrZXlib2FyZFxyXG4gICAgICAgICAqIEB0eXBlIHs/UGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5rZXlib2FyZCA9IChjb25maWcuaW5wdXRLZXlib2FyZCkgPyBuZXcgS2V5Ym9hcmQodGhpcykgOiBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgTW91c2UgTWFuYWdlciBjbGFzcywgaWYgZW5hYmxlZCB2aWEgdGhlIGBpbnB1dC5tb3VzZWAgR2FtZSBDb25maWcgcHJvcGVydHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI21vdXNlXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuSW5wdXQuTW91c2UuTW91c2VNYW5hZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubW91c2UgPSAoY29uZmlnLmlucHV0TW91c2UpID8gbmV3IE1vdXNlKHRoaXMpIDogbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFRvdWNoIE1hbmFnZXIgY2xhc3MsIGlmIGVuYWJsZWQgdmlhIHRoZSBgaW5wdXQudG91Y2hgIEdhbWUgQ29uZmlnIHByb3BlcnR5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciN0b3VjaFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuVG91Y2guVG91Y2hNYW5hZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudG91Y2ggPSAoY29uZmlnLmlucHV0VG91Y2gpID8gbmV3IFRvdWNoKHRoaXMpIDogbnVsbDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gYXJyYXkgb2YgUG9pbnRlcnMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIGdhbWUuXHJcbiAgICAgICAgICogVGhlIGZpcnN0IGVudHJ5IGlzIHJlc2VydmVkIGZvciB0aGUgTW91c2UgUG9pbnRlciwgdGhlIHJlc3QgYXJlIFRvdWNoIFBvaW50ZXJzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQnkgZGVmYXVsdCB0aGVyZSBpcyAxIHRvdWNoIHBvaW50ZXIgZW5hYmxlZC4gSWYgeW91IG5lZWQgbW9yZSB1c2UgdGhlIGBhZGRQb2ludGVyYCBtZXRob2QgdG8gc3RhcnQgdGhlbSxcclxuICAgICAgICAgKiBvciBzZXQgdGhlIGBpbnB1dC5hY3RpdmVQb2ludGVyc2AgcHJvcGVydHkgaW4gdGhlIEdhbWUgQ29uZmlnLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNwb2ludGVyc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuUG9pbnRlcltdfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBvaW50ZXJzID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBudW1iZXIgb2YgdG91Y2ggb2JqZWN0cyBhY3RpdmF0ZWQgYW5kIGJlaW5nIHByb2Nlc3NlZCBlYWNoIHVwZGF0ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFlvdSBjYW4gY2hhbmdlIHRoaXMgYnkgZWl0aGVyIGNhbGxpbmcgYGFkZFBvaW50ZXJgIGF0IHJ1bi10aW1lLCBvciBieVxyXG4gICAgICAgICAqIHNldHRpbmcgdGhlIGBpbnB1dC5hY3RpdmVQb2ludGVyc2AgcHJvcGVydHkgaW4gdGhlIEdhbWUgQ29uZmlnLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNwb2ludGVyc1RvdGFsXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucG9pbnRlcnNUb3RhbCA9IGNvbmZpZy5pbnB1dEFjdGl2ZVBvaW50ZXJzO1xyXG5cclxuICAgICAgICBpZiAoY29uZmlnLmlucHV0VG91Y2ggJiYgdGhpcy5wb2ludGVyc1RvdGFsID09PSAxKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wb2ludGVyc1RvdGFsID0gMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IHRoaXMucG9pbnRlcnNUb3RhbDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHBvaW50ZXIgPSBuZXcgUG9pbnRlcih0aGlzLCBpKTtcclxuXHJcbiAgICAgICAgICAgIHBvaW50ZXIuc21vb3RoRmFjdG9yID0gY29uZmlnLmlucHV0U21vb3RoRmFjdG9yO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wb2ludGVycy5wdXNoKHBvaW50ZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG1vdXNlIGhhcyBpdHMgb3duIHVuaXF1ZSBQb2ludGVyIG9iamVjdCwgd2hpY2ggeW91IGNhbiByZWZlcmVuY2UgZGlyZWN0bHkgaWYgbWFraW5nIGEgX2Rlc2t0b3Agc3BlY2lmaWMgZ2FtZV8uXHJcbiAgICAgICAgICogSWYgeW91IGFyZSBzdXBwb3J0aW5nIGJvdGggZGVza3RvcCBhbmQgdG91Y2ggZGV2aWNlcyB0aGVuIGRvIG5vdCB1c2UgdGhpcyBwcm9wZXJ0eSwgaW5zdGVhZCB1c2UgYGFjdGl2ZVBvaW50ZXJgXHJcbiAgICAgICAgICogd2hpY2ggd2lsbCBhbHdheXMgbWFwIHRvIHRoZSBtb3N0IHJlY2VudGx5IGludGVyYWN0ZWQgcG9pbnRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXIjbW91c2VQb2ludGVyXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuSW5wdXQuUG9pbnRlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tb3VzZVBvaW50ZXIgPSAoY29uZmlnLmlucHV0TW91c2UpID8gdGhpcy5wb2ludGVyc1swXSA6IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBtb3N0IHJlY2VudGx5IGFjdGl2ZSBQb2ludGVyIG9iamVjdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIElmIHlvdSd2ZSBvbmx5IDEgUG9pbnRlciBpbiB5b3VyIGdhbWUgdGhlbiB0aGlzIHdpbGwgYWNjdXJhdGVseSBiZSBlaXRoZXIgdGhlIGZpcnN0IGZpbmdlciB0b3VjaGVkLCBvciB0aGUgbW91c2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBJZiB5b3VyIGdhbWUgZG9lc24ndCBuZWVkIHRvIHN1cHBvcnQgbXVsdGktdG91Y2ggdGhlbiB5b3UgY2FuIHNhZmVseSB1c2UgdGhpcyBwcm9wZXJ0eSBpbiBhbGwgb2YgeW91ciBnYW1lXHJcbiAgICAgICAgICogY29kZSBhbmQgaXQgd2lsbCBhZGFwdCB0byBiZSBlaXRoZXIgdGhlIG1vdXNlIG9yIHRoZSB0b3VjaCwgYmFzZWQgb24gZGV2aWNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNhY3RpdmVQb2ludGVyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5Qb2ludGVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWN0aXZlUG9pbnRlciA9IHRoaXMucG9pbnRlcnNbMF07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHRoZSB0b3AtbW9zdCBTY2VuZSBpbiB0aGUgU2NlbmUgTGlzdCByZWNlaXZlcyBhbiBpbnB1dCBpdCB3aWxsIHN0b3AgaW5wdXQgZnJvbVxyXG4gICAgICAgICAqIHByb3BhZ2F0aW5nIGFueSBsb3dlciBkb3duIHRoZSBzY2VuZSBsaXN0LCBpLmUuIGlmIHlvdSBoYXZlIGEgVUkgU2NlbmUgYXQgdGhlIHRvcFxyXG4gICAgICAgICAqIGFuZCBjbGljayBzb21ldGhpbmcgb24gaXQsIHRoYXQgY2xpY2sgd2lsbCBub3QgdGhlbiBiZSBwYXNzZWQgZG93biB0byBhbnkgb3RoZXJcclxuICAgICAgICAgKiBTY2VuZSBiZWxvdy4gRGlzYWJsZSB0aGlzIHRvIGhhdmUgaW5wdXQgZXZlbnRzIHBhc3NlZCB0aHJvdWdoIGFsbCBTY2VuZXMsIGFsbCB0aGUgdGltZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXIjZ2xvYmFsVG9wT25seVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdsb2JhbFRvcE9ubHkgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGltZSB0aGlzIElucHV0IE1hbmFnZXIgd2FzIGxhc3QgdXBkYXRlZC5cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIHBvcHVsYXRlZCBieSB0aGUgR2FtZSBTdGVwIGVhY2ggZnJhbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI3RpbWVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjJcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRpbWUgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlLWN5Y2xlZCBwb2ludC1saWtlIG9iamVjdCB0byBzdG9yZSBoaXQgdGVzdCB2YWx1ZXMgaW4uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI190ZW1wUG9pbnRcclxuICAgICAgICAgKiBAdHlwZSB7e3g6bnVtYmVyLCB5Om51bWJlcn19XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl90ZW1wUG9pbnQgPSB7IHg6IDAsIHk6IDAgfTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZS1jeWNsZWQgYXJyYXkgdG8gc3RvcmUgaGl0IHJlc3VsdHMgaW4uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI190ZW1wSGl0VGVzdFxyXG4gICAgICAgICAqIEB0eXBlIHthcnJheX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGVtcEhpdFRlc3QgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZS1jeWNsZWQgbWF0cml4IHVzZWQgaW4gaGl0IHRlc3QgY2FsY3VsYXRpb25zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNfdGVtcE1hdHJpeFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy40LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl90ZW1wTWF0cml4ID0gbmV3IFRyYW5zZm9ybU1hdHJpeCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlLWN5Y2xlZCBtYXRyaXggdXNlZCBpbiBoaXQgdGVzdCBjYWxjdWxhdGlvbnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI190ZW1wTWF0cml4MlxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuR2FtZU9iamVjdHMuQ29tcG9uZW50cy5UcmFuc2Zvcm1NYXRyaXh9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGVtcE1hdHJpeDIgPSBuZXcgVHJhbnNmb3JtTWF0cml4KCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGludGVybmFsIHByaXZhdGUgdmFyIHRoYXQgcmVjb3JkcyBTY2VuZXMgYWJvcnRpbmcgZXZlbnQgcHJvY2Vzc2luZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXIjX3RlbXBTa2lwXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGVtcFNraXAgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gaW50ZXJuYWwgcHJpdmF0ZSBhcnJheSB0aGF0IGF2b2lkcyBuZWVkaW5nIHRvIGNyZWF0ZSBhIG5ldyBhcnJheSBvbiBldmVyeSBET00gbW91c2UgZXZlbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI21vdXNlUG9pbnRlckNvbnRhaW5lclxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuUG9pbnRlcltdfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubW91c2VQb2ludGVyQ29udGFpbmVyID0gWyB0aGlzLm1vdXNlUG9pbnRlciBdO1xyXG5cclxuICAgICAgICBnYW1lLmV2ZW50cy5vbmNlKEdhbWVFdmVudHMuQk9PVCwgdGhpcy5ib290LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQm9vdCBoYW5kbGVyIGlzIGNhbGxlZCBieSBQaGFzZXIuR2FtZSB3aGVuIGl0IGZpcnN0IHN0YXJ0cyB1cC5cclxuICAgICAqIFRoZSByZW5kZXJlciBpcyBhdmFpbGFibGUgYnkgbm93LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNib290XHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNNQU5BR0VSX0JPT1RcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBib290OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuY2FudmFzID0gdGhpcy5nYW1lLmNhbnZhcztcclxuXHJcbiAgICAgICAgdGhpcy5zY2FsZU1hbmFnZXIgPSB0aGlzLmdhbWUuc2NhbGU7XHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnRzLmVtaXQoRXZlbnRzLk1BTkFHRVJfQk9PVCk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2FtZS5ldmVudHMub24oR2FtZUV2ZW50cy5QUkVfUkVOREVSLCB0aGlzLnByZVJlbmRlciwgdGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2FtZS5ldmVudHMub25jZShHYW1lRXZlbnRzLkRFU1RST1ksIHRoaXMuZGVzdHJveSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgY2FudmFzIHN0YXRlIGNoYW5nZSwgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIE1vdXNlIE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI3NldENhbnZhc092ZXJcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVfT1ZFUlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhNb3VzZUV2ZW50fFRvdWNoRXZlbnQpfSBldmVudCAtIFRoZSBET00gRXZlbnQuXHJcbiAgICAgKi9cclxuICAgIHNldENhbnZhc092ZXI6IGZ1bmN0aW9uIChldmVudClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmlzT3ZlciA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnRzLmVtaXQoRXZlbnRzLkdBTUVfT1ZFUiwgZXZlbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIGNhbnZhcyBzdGF0ZSBjaGFuZ2UsIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBNb3VzZSBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNzZXRDYW52YXNPdXRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVfT1VUXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KE1vdXNlRXZlbnR8VG91Y2hFdmVudCl9IGV2ZW50IC0gVGhlIERPTSBFdmVudC5cclxuICAgICAqL1xyXG4gICAgc2V0Q2FudmFzT3V0OiBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5pc092ZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5ldmVudHMuZW1pdChFdmVudHMuR0FNRV9PVVQsIGV2ZW50KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCB1cGRhdGUsIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBHYW1lIFN0ZXAgcmlnaHQgYXQgdGhlIHN0YXJ0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNwcmVSZW5kZXJcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKi9cclxuICAgIHByZVJlbmRlcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgdGltZSA9IHRoaXMuZ2FtZS5sb29wLm5vdztcclxuICAgICAgICB2YXIgZGVsdGEgPSB0aGlzLmdhbWUubG9vcC5kZWx0YTtcclxuICAgICAgICB2YXIgc2NlbmVzID0gdGhpcy5nYW1lLnNjZW5lLmdldFNjZW5lcyh0cnVlLCB0cnVlKTtcclxuXHJcbiAgICAgICAgdGhpcy50aW1lID0gdGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5ldmVudHMuZW1pdChFdmVudHMuTUFOQUdFUl9VUERBVEUpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBzY2VuZSA9IHNjZW5lc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzY2VuZS5zeXMuaW5wdXQgJiYgc2NlbmUuc3lzLmlucHV0LnVwZGF0ZVBvbGwodGltZSwgZGVsdGEpICYmIHRoaXMuZ2xvYmFsVG9wT25seSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIElmIHRoZSBTY2VuZSByZXR1cm5zIHRydWUsIGl0IG1lYW5zIGl0IGNhcHR1cmVkIHNvbWUgaW5wdXQgdGhhdCBubyBvdGhlciBTY2VuZSBzaG91bGQgZ2V0LCBzbyB3ZSBiYWlsIG91dFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlbGxzIHRoZSBJbnB1dCBzeXN0ZW0gdG8gc2V0IGEgY3VzdG9tIGN1cnNvci5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBjdXJzb3Igd2lsbCBiZSB0aGUgZGVmYXVsdCBjdXJzb3IgdXNlZCB3aGVuIGludGVyYWN0aW5nIHdpdGggdGhlIGdhbWUgY2FudmFzLlxyXG4gICAgICpcclxuICAgICAqIElmIGFuIEludGVyYWN0aXZlIE9iamVjdCBhbHNvIHNldHMgYSBjdXN0b20gY3Vyc29yLCB0aGlzIGlzIHRoZSBjdXJzb3IgdGhhdCBpcyByZXNldCBhZnRlciBpdHMgdXNlLlxyXG4gICAgICpcclxuICAgICAqIEFueSB2YWxpZCBDU1MgY3Vyc29yIHZhbHVlIGlzIGFsbG93ZWQsIGluY2x1ZGluZyBwYXRocyB0byBpbWFnZSBmaWxlcywgaS5lLjpcclxuICAgICAqXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB0aGlzLmlucHV0LnNldERlZmF1bHRDdXJzb3IoJ3VybChhc3NldHMvY3Vyc29ycy9zd29yZC5jdXIpLCBwb2ludGVyJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogUGxlYXNlIHJlYWQgYWJvdXQgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gYnJvd3NlcnMgd2hlbiBpdCBjb21lcyB0byB0aGUgZmlsZSBmb3JtYXRzIGFuZCBzaXplcyB0aGV5IHN1cHBvcnQ6XHJcbiAgICAgKlxyXG4gICAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2N1cnNvclxyXG4gICAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NTU19Vc2VyX0ludGVyZmFjZS9Vc2luZ19VUkxfdmFsdWVzX2Zvcl90aGVfY3Vyc29yX3Byb3BlcnR5XHJcbiAgICAgKlxyXG4gICAgICogSXQncyB1cCB0byB5b3UgdG8gcGljayBhIHN1aXRhYmxlIGN1cnNvciBmb3JtYXQgdGhhdCB3b3JrcyBhY3Jvc3MgdGhlIHJhbmdlIG9mIGJyb3dzZXJzIHlvdSBuZWVkIHRvIHN1cHBvcnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI3NldERlZmF1bHRDdXJzb3JcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGN1cnNvciAtIFRoZSBDU1MgdG8gYmUgdXNlZCB3aGVuIHNldHRpbmcgdGhlIGRlZmF1bHQgY3Vyc29yLlxyXG4gICAgICovXHJcbiAgICBzZXREZWZhdWx0Q3Vyc29yOiBmdW5jdGlvbiAoY3Vyc29yKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEN1cnNvciA9IGN1cnNvcjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY2FudmFzLnN0eWxlLmN1cnNvciAhPT0gY3Vyc29yKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3Vyc29yID0gY3Vyc29yO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYnkgdGhlIElucHV0UGx1Z2luIHdoZW4gcHJvY2Vzc2luZyBvdmVyIGFuZCBvdXQgZXZlbnRzLlxyXG4gICAgICogXHJcbiAgICAgKiBUZWxscyB0aGUgSW5wdXQgTWFuYWdlciB0byBzZXQgYSBjdXN0b20gY3Vyc29yIGR1cmluZyBpdHMgcG9zdFVwZGF0ZSBzdGVwLlxyXG4gICAgICpcclxuICAgICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9jdXJzb3JcclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXIjc2V0Q3Vyc29yXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5JbnRlcmFjdGl2ZU9iamVjdH0gaW50ZXJhY3RpdmVPYmplY3QgLSBUaGUgSW50ZXJhY3RpdmUgT2JqZWN0IHRoYXQgY2FsbGVkIHRoaXMgbWV0aG9kLlxyXG4gICAgICovXHJcbiAgICBzZXRDdXJzb3I6IGZ1bmN0aW9uIChpbnRlcmFjdGl2ZU9iamVjdClcclxuICAgIHtcclxuICAgICAgICBpZiAoaW50ZXJhY3RpdmVPYmplY3QuY3Vyc29yKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuY3Vyc29yID0gaW50ZXJhY3RpdmVPYmplY3QuY3Vyc29yO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYnkgdGhlIElucHV0UGx1Z2luIHdoZW4gcHJvY2Vzc2luZyBvdmVyIGFuZCBvdXQgZXZlbnRzLlxyXG4gICAgICogXHJcbiAgICAgKiBUZWxscyB0aGUgSW5wdXQgTWFuYWdlciB0byBjbGVhciB0aGUgaGFuZCBjdXJzb3IsIGlmIHNldCwgZHVyaW5nIGl0cyBwb3N0VXBkYXRlIHN0ZXAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI3Jlc2V0Q3Vyc29yXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5JbnRlcmFjdGl2ZU9iamVjdH0gaW50ZXJhY3RpdmVPYmplY3QgLSBUaGUgSW50ZXJhY3RpdmUgT2JqZWN0IHRoYXQgY2FsbGVkIHRoaXMgbWV0aG9kLlxyXG4gICAgICovXHJcbiAgICByZXNldEN1cnNvcjogZnVuY3Rpb24gKGludGVyYWN0aXZlT2JqZWN0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChpbnRlcmFjdGl2ZU9iamVjdC5jdXJzb3IgJiYgdGhpcy5jYW52YXMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5jdXJzb3IgPSB0aGlzLmRlZmF1bHRDdXJzb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgbmV3IFBvaW50ZXIgb2JqZWN0cyB0byB0aGUgSW5wdXQgTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBCeSBkZWZhdWx0IFBoYXNlciBjcmVhdGVzIDIgcG9pbnRlciBvYmplY3RzOiBgbW91c2VQb2ludGVyYCBhbmQgYHBvaW50ZXIxYC5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIGNyZWF0ZSBtb3JlIGVpdGhlciBieSBjYWxsaW5nIHRoaXMgbWV0aG9kLCBvciBieSBzZXR0aW5nIHRoZSBgaW5wdXQuYWN0aXZlUG9pbnRlcnNgIHByb3BlcnR5XHJcbiAgICAgKiBpbiB0aGUgR2FtZSBDb25maWcsIHVwIHRvIGEgbWF4aW11bSBvZiAxMCBwb2ludGVycy5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgZmlyc3QgMTAgcG9pbnRlcnMgYXJlIGF2YWlsYWJsZSB2aWEgdGhlIGBJbnB1dFBsdWdpbi5wb2ludGVyWGAgcHJvcGVydGllcywgb25jZSB0aGV5IGhhdmUgYmVlbiBhZGRlZFxyXG4gICAgICogdmlhIHRoaXMgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNhZGRQb2ludGVyXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbcXVhbnRpdHk9MV0gVGhlIG51bWJlciBvZiBuZXcgUG9pbnRlcnMgdG8gY3JlYXRlLiBBIG1heGltdW0gb2YgMTAgaXMgYWxsb3dlZCBpbiB0b3RhbC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuSW5wdXQuUG9pbnRlcltdfSBBbiBhcnJheSBjb250YWluaW5nIGFsbCBvZiB0aGUgbmV3IFBvaW50ZXIgb2JqZWN0cyB0aGF0IHdlcmUgY3JlYXRlZC5cclxuICAgICAqL1xyXG4gICAgYWRkUG9pbnRlcjogZnVuY3Rpb24gKHF1YW50aXR5KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChxdWFudGl0eSA9PT0gdW5kZWZpbmVkKSB7IHF1YW50aXR5ID0gMTsgfVxyXG5cclxuICAgICAgICB2YXIgb3V0cHV0ID0gW107XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBvaW50ZXJzVG90YWwgKyBxdWFudGl0eSA+IDEwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcXVhbnRpdHkgPSAxMCAtIHRoaXMucG9pbnRlcnNUb3RhbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVhbnRpdHk7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBpZCA9IHRoaXMucG9pbnRlcnMubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgdmFyIHBvaW50ZXIgPSBuZXcgUG9pbnRlcih0aGlzLCBpZCk7XHJcblxyXG4gICAgICAgICAgICBwb2ludGVyLnNtb290aEZhY3RvciA9IHRoaXMuY29uZmlnLmlucHV0U21vb3RoRmFjdG9yO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wb2ludGVycy5wdXNoKHBvaW50ZXIpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wb2ludGVyc1RvdGFsKys7XHJcblxyXG4gICAgICAgICAgICBvdXRwdXQucHVzaChwb2ludGVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRoYXQgZ2V0cyBhIGxpc3Qgb2YgYWxsIHRoZSBhY3RpdmUgSW5wdXQgUGx1Z2lucyBpbiB0aGUgZ2FtZVxyXG4gICAgICogYW5kIHVwZGF0ZXMgZWFjaCBvZiB0aGVtIGluIHR1cm4sIGluIHJldmVyc2Ugb3JkZXIgKHRvcCB0byBib3R0b20pLCB0byBhbGxvd1xyXG4gICAgICogZm9yIERPTSB0b3AtbGV2ZWwgZXZlbnQgaGFuZGxpbmcgc2ltdWxhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXIjdXBkYXRlSW5wdXRQbHVnaW5zXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSB0eXBlIC0gVGhlIHR5cGUgb2YgZXZlbnQgdG8gcHJvY2Vzcy5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJbXX0gcG9pbnRlcnMgLSBBbiBhcnJheSBvZiBQb2ludGVycyBvbiB3aGljaCB0aGUgZXZlbnQgb2NjdXJyZWQuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUlucHV0UGx1Z2luczogZnVuY3Rpb24gKHR5cGUsIHBvaW50ZXJzKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzY2VuZXMgPSB0aGlzLmdhbWUuc2NlbmUuZ2V0U2NlbmVzKHRydWUsIHRydWUpO1xyXG5cclxuICAgICAgICB0aGlzLl90ZW1wU2tpcCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBzY2VuZSA9IHNjZW5lc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzY2VuZS5zeXMuaW5wdXQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBjYXB0dXJlID0gc2NlbmUuc3lzLmlucHV0LnVwZGF0ZSh0eXBlLCBwb2ludGVycyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKChjYXB0dXJlICYmIHRoaXMuZ2xvYmFsVG9wT25seSkgfHwgdGhpcy5fdGVtcFNraXApXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gIElmIHRoZSBTY2VuZSByZXR1cm5zIHRydWUsIG9yIGNhbGxlZCBzdG9wUHJvcGFnYXRpb24sIGl0IG1lYW5zIGl0IGNhcHR1cmVkIHNvbWUgaW5wdXQgdGhhdCBubyBvdGhlciBTY2VuZSBzaG91bGQgZ2V0LCBzbyB3ZSBiYWlsIG91dFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy8gIGV2ZW50LnRhcmdldFRvdWNoZXMgPSBsaXN0IG9mIGFsbCB0b3VjaGVzIG9uIHRoZSBUQVJHRVQgRUxFTUVOVCAoaS5lLiBnYW1lIGRvbSBlbGVtZW50KVxyXG4gICAgLy8gIGV2ZW50LnRvdWNoZXMgPSBsaXN0IG9mIGFsbCB0b3VjaGVzIG9uIHRoZSBFTlRJUkUgRE9DVU1FTlQsIG5vdCBqdXN0IHRoZSB0YXJnZXQgZWxlbWVudFxyXG4gICAgLy8gIGV2ZW50LmNoYW5nZWRUb3VjaGVzID0gdGhlIHRvdWNoZXMgdGhhdCBDSEFOR0VEIGluIHRoaXMgZXZlbnQsIG5vdCB0aGUgdG90YWwgbnVtYmVyIG9mIHRoZW1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb2Nlc3NlcyBhIHRvdWNoIHN0YXJ0IGV2ZW50LCBhcyBwYXNzZWQgaW4gYnkgdGhlIFRvdWNoTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXIjb25Ub3VjaFN0YXJ0XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZXZlbnQgLSBUaGUgbmF0aXZlIERPTSBUb3VjaCBldmVudC5cclxuICAgICAqL1xyXG4gICAgb25Ub3VjaFN0YXJ0OiBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHBvaW50ZXJzID0gdGhpcy5wb2ludGVycztcclxuICAgICAgICB2YXIgY2hhbmdlZCA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGV2ZW50LmNoYW5nZWRUb3VjaGVzLmxlbmd0aDsgYysrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNoYW5nZWRUb3VjaCA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzW2NdO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0aGlzLnBvaW50ZXJzVG90YWw7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIHBvaW50ZXIgPSBwb2ludGVyc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXBvaW50ZXIuYWN0aXZlKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50ZXIudG91Y2hzdGFydChjaGFuZ2VkVG91Y2gsIGV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVQb2ludGVyID0gcG9pbnRlcjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZC5wdXNoKHBvaW50ZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVJbnB1dFBsdWdpbnMoQ09OU1QuVE9VQ0hfU1RBUlQsIGNoYW5nZWQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb2Nlc3NlcyBhIHRvdWNoIG1vdmUgZXZlbnQsIGFzIHBhc3NlZCBpbiBieSB0aGUgVG91Y2hNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNvblRvdWNoTW92ZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGV2ZW50IC0gVGhlIG5hdGl2ZSBET00gVG91Y2ggZXZlbnQuXHJcbiAgICAgKi9cclxuICAgIG9uVG91Y2hNb3ZlOiBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHBvaW50ZXJzID0gdGhpcy5wb2ludGVycztcclxuICAgICAgICB2YXIgY2hhbmdlZCA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGV2ZW50LmNoYW5nZWRUb3VjaGVzLmxlbmd0aDsgYysrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNoYW5nZWRUb3VjaCA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzW2NdO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0aGlzLnBvaW50ZXJzVG90YWw7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIHBvaW50ZXIgPSBwb2ludGVyc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocG9pbnRlci5hY3RpdmUgJiYgcG9pbnRlci5pZGVudGlmaWVyID09PSBjaGFuZ2VkVG91Y2guaWRlbnRpZmllcilcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwb2ludGVyLnRvdWNobW92ZShjaGFuZ2VkVG91Y2gsIGV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVQb2ludGVyID0gcG9pbnRlcjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZC5wdXNoKHBvaW50ZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVJbnB1dFBsdWdpbnMoQ09OU1QuVE9VQ0hfTU9WRSwgY2hhbmdlZCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vICBGb3IgdG91Y2ggZW5kIGl0cyBhIGxpc3Qgb2YgdGhlIHRvdWNoIHBvaW50cyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIHN1cmZhY2VcclxuICAgIC8vICBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0RPTS9Ub3VjaExpc3RcclxuICAgIC8vICBldmVudC5jaGFuZ2VkVG91Y2hlcyA9IHRoZSB0b3VjaGVzIHRoYXQgQ0hBTkdFRCBpbiB0aGlzIGV2ZW50LCBub3QgdGhlIHRvdGFsIG51bWJlciBvZiB0aGVtXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9jZXNzZXMgYSB0b3VjaCBlbmQgZXZlbnQsIGFzIHBhc3NlZCBpbiBieSB0aGUgVG91Y2hNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNvblRvdWNoRW5kXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZXZlbnQgLSBUaGUgbmF0aXZlIERPTSBUb3VjaCBldmVudC5cclxuICAgICAqL1xyXG4gICAgb25Ub3VjaEVuZDogZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBwb2ludGVycyA9IHRoaXMucG9pbnRlcnM7XHJcbiAgICAgICAgdmFyIGNoYW5nZWQgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBldmVudC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg7IGMrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjaGFuZ2VkVG91Y2ggPSBldmVudC5jaGFuZ2VkVG91Y2hlc1tjXTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdGhpcy5wb2ludGVyc1RvdGFsOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBwb2ludGVyID0gcG9pbnRlcnNbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHBvaW50ZXIuYWN0aXZlICYmIHBvaW50ZXIuaWRlbnRpZmllciA9PT0gY2hhbmdlZFRvdWNoLmlkZW50aWZpZXIpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRlci50b3VjaGVuZChjaGFuZ2VkVG91Y2gsIGV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZC5wdXNoKHBvaW50ZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVJbnB1dFBsdWdpbnMoQ09OU1QuVE9VQ0hfRU5ELCBjaGFuZ2VkKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9jZXNzZXMgYSB0b3VjaCBjYW5jZWwgZXZlbnQsIGFzIHBhc3NlZCBpbiBieSB0aGUgVG91Y2hNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNvblRvdWNoQ2FuY2VsXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZXZlbnQgLSBUaGUgbmF0aXZlIERPTSBUb3VjaCBldmVudC5cclxuICAgICAqL1xyXG4gICAgb25Ub3VjaENhbmNlbDogZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBwb2ludGVycyA9IHRoaXMucG9pbnRlcnM7XHJcbiAgICAgICAgdmFyIGNoYW5nZWQgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBldmVudC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg7IGMrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjaGFuZ2VkVG91Y2ggPSBldmVudC5jaGFuZ2VkVG91Y2hlc1tjXTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdGhpcy5wb2ludGVyc1RvdGFsOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBwb2ludGVyID0gcG9pbnRlcnNbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHBvaW50ZXIuYWN0aXZlICYmIHBvaW50ZXIuaWRlbnRpZmllciA9PT0gY2hhbmdlZFRvdWNoLmlkZW50aWZpZXIpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRlci50b3VjaGNhbmNlbChjaGFuZ2VkVG91Y2gsIGV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZC5wdXNoKHBvaW50ZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVJbnB1dFBsdWdpbnMoQ09OU1QuVE9VQ0hfQ0FOQ0VMLCBjaGFuZ2VkKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9jZXNzZXMgYSBtb3VzZSBkb3duIGV2ZW50LCBhcyBwYXNzZWQgaW4gYnkgdGhlIE1vdXNlTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXIjb25Nb3VzZURvd25cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudCAtIFRoZSBuYXRpdmUgRE9NIE1vdXNlIGV2ZW50LlxyXG4gICAgICovXHJcbiAgICBvbk1vdXNlRG93bjogZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMubW91c2VQb2ludGVyLmRvd24oZXZlbnQpO1xyXG5cclxuICAgICAgICB0aGlzLm1vdXNlUG9pbnRlci51cGRhdGVNb3Rpb24oKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVJbnB1dFBsdWdpbnMoQ09OU1QuTU9VU0VfRE9XTiwgdGhpcy5tb3VzZVBvaW50ZXJDb250YWluZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb2Nlc3NlcyBhIG1vdXNlIG1vdmUgZXZlbnQsIGFzIHBhc3NlZCBpbiBieSB0aGUgTW91c2VNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNvbk1vdXNlTW92ZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50IC0gVGhlIG5hdGl2ZSBET00gTW91c2UgZXZlbnQuXHJcbiAgICAgKi9cclxuICAgIG9uTW91c2VNb3ZlOiBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5tb3VzZVBvaW50ZXIubW92ZShldmVudCk7XHJcblxyXG4gICAgICAgIHRoaXMubW91c2VQb2ludGVyLnVwZGF0ZU1vdGlvbigpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUlucHV0UGx1Z2lucyhDT05TVC5NT1VTRV9NT1ZFLCB0aGlzLm1vdXNlUG9pbnRlckNvbnRhaW5lcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvY2Vzc2VzIGEgbW91c2UgdXAgZXZlbnQsIGFzIHBhc3NlZCBpbiBieSB0aGUgTW91c2VNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNvbk1vdXNlVXBcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudCAtIFRoZSBuYXRpdmUgRE9NIE1vdXNlIGV2ZW50LlxyXG4gICAgICovXHJcbiAgICBvbk1vdXNlVXA6IGZ1bmN0aW9uIChldmVudClcclxuICAgIHtcclxuICAgICAgICB0aGlzLm1vdXNlUG9pbnRlci51cChldmVudCk7XHJcblxyXG4gICAgICAgIHRoaXMubW91c2VQb2ludGVyLnVwZGF0ZU1vdGlvbigpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUlucHV0UGx1Z2lucyhDT05TVC5NT1VTRV9VUCwgdGhpcy5tb3VzZVBvaW50ZXJDb250YWluZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb2Nlc3NlcyBhIG1vdXNlIHdoZWVsIGV2ZW50LCBhcyBwYXNzZWQgaW4gYnkgdGhlIE1vdXNlTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXIjb25Nb3VzZVdoZWVsXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7V2hlZWxFdmVudH0gZXZlbnQgLSBUaGUgbmF0aXZlIERPTSBXaGVlbCBldmVudC5cclxuICAgICAqL1xyXG4gICAgb25Nb3VzZVdoZWVsOiBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5tb3VzZVBvaW50ZXIud2hlZWwoZXZlbnQpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUlucHV0UGx1Z2lucyhDT05TVC5NT1VTRV9XSEVFTCwgdGhpcy5tb3VzZVBvaW50ZXJDb250YWluZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb2Nlc3NlcyBhIHBvaW50ZXIgbG9jayBjaGFuZ2UgZXZlbnQsIGFzIHBhc3NlZCBpbiBieSB0aGUgTW91c2VNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNvblBvaW50ZXJMb2NrQ2hhbmdlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNQT0lOVEVSTE9DS19DSEFOR0VcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudCAtIFRoZSBuYXRpdmUgRE9NIE1vdXNlIGV2ZW50LlxyXG4gICAgICovXHJcbiAgICBvblBvaW50ZXJMb2NrQ2hhbmdlOiBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGlzTG9ja2VkID0gdGhpcy5tb3VzZS5sb2NrZWQ7XHJcblxyXG4gICAgICAgIHRoaXMubW91c2VQb2ludGVyLmxvY2tlZCA9IGlzTG9ja2VkO1xyXG5cclxuICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KEV2ZW50cy5QT0lOVEVSTE9DS19DSEFOR0UsIGV2ZW50LCBpc0xvY2tlZCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBHYW1lIE9iamVjdCBzaG91bGQgYmUgY29uc2lkZXJlZCBhcyBhIGNhbmRpZGF0ZSBmb3IgaW5wdXQgb3Igbm90LlxyXG4gICAgICpcclxuICAgICAqIENoZWNrcyBpZiB0aGUgR2FtZSBPYmplY3QgaGFzIGFuIGlucHV0IGNvbXBvbmVudCB0aGF0IGlzIGVuYWJsZWQsIHRoYXQgaXQgd2lsbCByZW5kZXIsXHJcbiAgICAgKiBhbmQgZmluYWxseSwgaWYgaXQgaGFzIGEgcGFyZW50LCB0aGF0IHRoZSBwYXJlbnQgcGFyZW50LCBvciBhbnkgYW5jZXN0b3IsIGlzIHZpc2libGUgb3Igbm90LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNpbnB1dENhbmRpZGF0ZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRvIHRlc3QuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhfSBjYW1lcmEgLSBUaGUgQ2FtZXJhIHdoaWNoIGlzIGJlaW5nIHRlc3RlZCBhZ2FpbnN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgR2FtZSBPYmplY3Qgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZm9yIGlucHV0LCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgaW5wdXRDYW5kaWRhdGU6IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCBjYW1lcmEpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGlucHV0ID0gZ2FtZU9iamVjdC5pbnB1dDtcclxuXHJcbiAgICAgICAgaWYgKCFpbnB1dCB8fCAhaW5wdXQuZW5hYmxlZCB8fCAoIWlucHV0LmFsd2F5c0VuYWJsZWQgJiYgIWdhbWVPYmplY3Qud2lsbFJlbmRlcihjYW1lcmEpKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICB2YXIgcGFyZW50ID0gZ2FtZU9iamVjdC5wYXJlbnRDb250YWluZXI7XHJcblxyXG4gICAgICAgIGlmIChwYXJlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBkb1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXBhcmVudC53aWxsUmVuZGVyKGNhbWVyYSkpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRDb250YWluZXI7XHJcblxyXG4gICAgICAgICAgICB9IHdoaWxlIChwYXJlbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZpc2libGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybXMgYSBoaXQgdGVzdCB1c2luZyB0aGUgZ2l2ZW4gUG9pbnRlciBhbmQgY2FtZXJhLCBhZ2FpbnN0IGFuIGFycmF5IG9mIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0cy5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgR2FtZSBPYmplY3RzIGFyZSBjdWxsZWQgYWdhaW5zdCB0aGUgY2FtZXJhLCBhbmQgdGhlbiB0aGUgY29vcmRpbmF0ZXMgYXJlIHRyYW5zbGF0ZWQgaW50byB0aGUgbG9jYWwgY2FtZXJhIHNwYWNlXHJcbiAgICAgKiBhbmQgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhleSBmYWxsIHdpdGhpbiB0aGUgcmVtYWluaW5nIEdhbWUgT2JqZWN0cyBoaXQgYXJlYXMgb3Igbm90LlxyXG4gICAgICpcclxuICAgICAqIElmIG5vdGhpbmcgaXMgbWF0Y2hlZCBhbiBlbXB0eSBhcnJheSBpcyByZXR1cm5lZC5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBieSBJbnB1dFBsdWdpbi5oaXRUZXN0UG9pbnRlciBhbmQgZG9lc24ndCB1c3VhbGx5IG5lZWQgdG8gYmUgaW52b2tlZCBkaXJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXIjaGl0VGVzdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHRvIHRlc3QgYWdhaW5zdC5cclxuICAgICAqIEBwYXJhbSB7YXJyYXl9IGdhbWVPYmplY3RzIC0gQW4gYXJyYXkgb2YgaW50ZXJhY3RpdmUgR2FtZSBPYmplY3RzIHRvIGNoZWNrLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB3aGljaCBpcyBiZWluZyB0ZXN0ZWQgYWdhaW5zdC5cclxuICAgICAqIEBwYXJhbSB7YXJyYXl9IFtvdXRwdXRdIC0gQW4gYXJyYXkgdG8gc3RvcmUgdGhlIHJlc3VsdHMgaW4uIElmIG5vdCBnaXZlbiwgYSBuZXcgZW1wdHkgYXJyYXkgaXMgY3JlYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHthcnJheX0gQW4gYXJyYXkgb2YgdGhlIEdhbWUgT2JqZWN0cyB0aGF0IHdlcmUgaGl0IGR1cmluZyB0aGlzIGhpdCB0ZXN0LlxyXG4gICAgICovXHJcbiAgICBoaXRUZXN0OiBmdW5jdGlvbiAocG9pbnRlciwgZ2FtZU9iamVjdHMsIGNhbWVyYSwgb3V0cHV0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChvdXRwdXQgPT09IHVuZGVmaW5lZCkgeyBvdXRwdXQgPSB0aGlzLl90ZW1wSGl0VGVzdDsgfVxyXG5cclxuICAgICAgICB2YXIgdGVtcFBvaW50ID0gdGhpcy5fdGVtcFBvaW50O1xyXG5cclxuICAgICAgICB2YXIgY3N4ID0gY2FtZXJhLnNjcm9sbFg7XHJcbiAgICAgICAgdmFyIGNzeSA9IGNhbWVyYS5zY3JvbGxZO1xyXG5cclxuICAgICAgICBvdXRwdXQubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgdmFyIHggPSBwb2ludGVyLng7XHJcbiAgICAgICAgdmFyIHkgPSBwb2ludGVyLnk7XHJcblxyXG4gICAgICAgIGlmIChjYW1lcmEucmVzb2x1dGlvbiAhPT0gMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHggKz0gY2FtZXJhLl94O1xyXG4gICAgICAgICAgICB5ICs9IGNhbWVyYS5feTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBTdG9yZXMgdGhlIHdvcmxkIHBvaW50IGluc2lkZSBvZiB0ZW1wUG9pbnRcclxuICAgICAgICBjYW1lcmEuZ2V0V29ybGRQb2ludCh4LCB5LCB0ZW1wUG9pbnQpO1xyXG5cclxuICAgICAgICBwb2ludGVyLndvcmxkWCA9IHRlbXBQb2ludC54O1xyXG4gICAgICAgIHBvaW50ZXIud29ybGRZID0gdGVtcFBvaW50Lnk7XHJcblxyXG4gICAgICAgIHZhciBwb2ludCA9IHsgeDogMCwgeTogMCB9O1xyXG5cclxuICAgICAgICB2YXIgbWF0cml4ID0gdGhpcy5fdGVtcE1hdHJpeDtcclxuICAgICAgICB2YXIgcGFyZW50TWF0cml4ID0gdGhpcy5fdGVtcE1hdHJpeDI7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2FtZU9iamVjdHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZ2FtZU9iamVjdCA9IGdhbWVPYmplY3RzW2ldO1xyXG5cclxuICAgICAgICAgICAgLy8gIENoZWNrcyBpZiB0aGUgR2FtZSBPYmplY3QgY2FuIHJlY2VpdmUgaW5wdXQgKGlzbid0IGJlaW5nIGlnbm9yZWQgYnkgdGhlIGNhbWVyYSwgaW52aXNpYmxlLCBldGMpXHJcbiAgICAgICAgICAgIC8vICBhbmQgYWxzbyBjaGVja3MgYWxsIG9mIGl0cyBwYXJlbnRzLCBpZiBhbnlcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlucHV0Q2FuZGlkYXRlKGdhbWVPYmplY3QsIGNhbWVyYSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgcHggPSB0ZW1wUG9pbnQueCArIChjc3ggKiBnYW1lT2JqZWN0LnNjcm9sbEZhY3RvclgpIC0gY3N4O1xyXG4gICAgICAgICAgICB2YXIgcHkgPSB0ZW1wUG9pbnQueSArIChjc3kgKiBnYW1lT2JqZWN0LnNjcm9sbEZhY3RvclkpIC0gY3N5O1xyXG5cclxuICAgICAgICAgICAgaWYgKGdhbWVPYmplY3QucGFyZW50Q29udGFpbmVyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBnYW1lT2JqZWN0LmdldFdvcmxkVHJhbnNmb3JtTWF0cml4KG1hdHJpeCwgcGFyZW50TWF0cml4KTtcclxuXHJcbiAgICAgICAgICAgICAgICBtYXRyaXguYXBwbHlJbnZlcnNlKHB4LCBweSwgcG9pbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgVHJhbnNmb3JtWFkocHgsIHB5LCBnYW1lT2JqZWN0LngsIGdhbWVPYmplY3QueSwgZ2FtZU9iamVjdC5yb3RhdGlvbiwgZ2FtZU9iamVjdC5zY2FsZVgsIGdhbWVPYmplY3Quc2NhbGVZLCBwb2ludCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICBpZiAodGhpcy5wb2ludFdpdGhpbkhpdEFyZWEoZ2FtZU9iamVjdCwgcG9pbnQueCwgcG9pbnQueSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKGdhbWVPYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4geCBhbmQgeSBjb29yZGluYXRlIGFyZSB3aXRoaW4gdGhlIGhpdCBhcmVhIG9mIHRoZSBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgdGhlIGNvb3JkaW5hdGUgdmFsdWVzIGhhdmUgYWxyZWFkeSBiZWVuIHRyYW5zbGF0ZWQgaW50byB0aGUgc3BhY2Ugb2YgdGhlIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoZSBoaXQgYXJlYSB0aGV5IGFyZSBzZXQgaW50byB0aGUgR2FtZSBPYmplY3RzIElucHV0IGBsb2NhbFhgIGFuZCBgbG9jYWxZYCBwcm9wZXJ0aWVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciNwb2ludFdpdGhpbkhpdEFyZWFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgaW50ZXJhY3RpdmUgR2FtZSBPYmplY3QgdG8gY2hlY2sgYWdhaW5zdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHRyYW5zbGF0ZWQgeCBjb29yZGluYXRlIGZvciB0aGUgaGl0IHRlc3QuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB0cmFuc2xhdGVkIHkgY29vcmRpbmF0ZSBmb3IgdGhlIGhpdCB0ZXN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgY29vcmRpbmF0ZXMgd2VyZSBpbnNpZGUgdGhlIEdhbWUgT2JqZWN0cyBoaXQgYXJlYSwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIHBvaW50V2l0aGluSGl0QXJlYTogZnVuY3Rpb24gKGdhbWVPYmplY3QsIHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIE5vcm1hbGl6ZSB0aGUgb3JpZ2luXHJcbiAgICAgICAgeCArPSBnYW1lT2JqZWN0LmRpc3BsYXlPcmlnaW5YO1xyXG4gICAgICAgIHkgKz0gZ2FtZU9iamVjdC5kaXNwbGF5T3JpZ2luWTtcclxuXHJcbiAgICAgICAgdmFyIGlucHV0ID0gZ2FtZU9iamVjdC5pbnB1dDtcclxuXHJcbiAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LmhpdEFyZWFDYWxsYmFjayhpbnB1dC5oaXRBcmVhLCB4LCB5LCBnYW1lT2JqZWN0KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlucHV0LmxvY2FsWCA9IHg7XHJcbiAgICAgICAgICAgIGlucHV0LmxvY2FsWSA9IHk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIHggYW5kIHkgY29vcmRpbmF0ZSBhcmUgd2l0aGluIHRoZSBoaXQgYXJlYSBvZiB0aGUgSW50ZXJhY3RpdmUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgbWV0aG9kIGFzc3VtZXMgdGhhdCB0aGUgY29vcmRpbmF0ZSB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW4gdHJhbnNsYXRlZCBpbnRvIHRoZSBzcGFjZSBvZiB0aGUgSW50ZXJhY3RpdmUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoZSBoaXQgYXJlYSB0aGV5IGFyZSBzZXQgaW50byB0aGUgSW50ZXJhY3RpdmUgT2JqZWN0cyBJbnB1dCBgbG9jYWxYYCBhbmQgYGxvY2FsWWAgcHJvcGVydGllcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXIjcG9pbnRXaXRoaW5JbnRlcmFjdGl2ZU9iamVjdFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuSW5wdXQuSW50ZXJhY3RpdmVPYmplY3R9IG9iamVjdCAtIFRoZSBJbnRlcmFjdGl2ZSBPYmplY3QgdG8gY2hlY2sgYWdhaW5zdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIHRyYW5zbGF0ZWQgeCBjb29yZGluYXRlIGZvciB0aGUgaGl0IHRlc3QuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSB0cmFuc2xhdGVkIHkgY29vcmRpbmF0ZSBmb3IgdGhlIGhpdCB0ZXN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgY29vcmRpbmF0ZXMgd2VyZSBpbnNpZGUgdGhlIEdhbWUgT2JqZWN0cyBoaXQgYXJlYSwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIHBvaW50V2l0aGluSW50ZXJhY3RpdmVPYmplY3Q6IGZ1bmN0aW9uIChvYmplY3QsIHgsIHkpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCFvYmplY3QuaGl0QXJlYSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBOb3JtYWxpemUgdGhlIG9yaWdpblxyXG4gICAgICAgIHggKz0gb2JqZWN0LmdhbWVPYmplY3QuZGlzcGxheU9yaWdpblg7XHJcbiAgICAgICAgeSArPSBvYmplY3QuZ2FtZU9iamVjdC5kaXNwbGF5T3JpZ2luWTtcclxuXHJcbiAgICAgICAgb2JqZWN0LmxvY2FsWCA9IHg7XHJcbiAgICAgICAgb2JqZWN0LmxvY2FsWSA9IHk7XHJcblxyXG4gICAgICAgIHJldHVybiBvYmplY3QuaGl0QXJlYUNhbGxiYWNrKG9iamVjdC5oaXRBcmVhLCB4LCB5LCBvYmplY3QpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybXMgdGhlIHBhZ2VYIGFuZCBwYWdlWSB2YWx1ZXMgb2YgYSBQb2ludGVyIGludG8gdGhlIHNjYWxlZCBjb29yZGluYXRlIHNwYWNlIG9mIHRoZSBJbnB1dCBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0TWFuYWdlciN0cmFuc2Zvcm1Qb2ludGVyXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHRvIHRyYW5zZm9ybSB0aGUgdmFsdWVzIGZvci5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlWCAtIFRoZSBQYWdlIFggdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcGFnZVkgLSBUaGUgUGFnZSBZIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB3YXNNb3ZlIC0gQXJlIHdlIHRyYW5zZm9ybWluZyB0aGUgUG9pbnRlciBmcm9tIGEgbW92ZSBldmVudCwgb3IgYW4gdXAgLyBkb3duIGV2ZW50P1xyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1Qb2ludGVyOiBmdW5jdGlvbiAocG9pbnRlciwgcGFnZVgsIHBhZ2VZLCB3YXNNb3ZlKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBwMCA9IHBvaW50ZXIucG9zaXRpb247XHJcbiAgICAgICAgdmFyIHAxID0gcG9pbnRlci5wcmV2UG9zaXRpb247XHJcblxyXG4gICAgICAgIC8vICBTdG9yZSBwcmV2aW91cyBwb3NpdGlvblxyXG4gICAgICAgIHAxLnggPSBwMC54O1xyXG4gICAgICAgIHAxLnkgPSBwMC55O1xyXG5cclxuICAgICAgICAvLyAgVHJhbnNsYXRlIGNvb3JkaW5hdGVzXHJcbiAgICAgICAgdmFyIHggPSB0aGlzLnNjYWxlTWFuYWdlci50cmFuc2Zvcm1YKHBhZ2VYKTtcclxuICAgICAgICB2YXIgeSA9IHRoaXMuc2NhbGVNYW5hZ2VyLnRyYW5zZm9ybVkocGFnZVkpO1xyXG5cclxuICAgICAgICB2YXIgYSA9IHBvaW50ZXIuc21vb3RoRmFjdG9yO1xyXG5cclxuICAgICAgICBpZiAoIXdhc01vdmUgfHwgYSA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBTZXQgaW1tZWRpYXRlbHlcclxuICAgICAgICAgICAgcDAueCA9IHg7XHJcbiAgICAgICAgICAgIHAwLnkgPSB5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgQXBwbHkgc21vb3RoaW5nXHJcbiAgICAgICAgICAgIHAwLnggPSB4ICogYSArIHAxLnggKiAoMSAtIGEpO1xyXG4gICAgICAgICAgICBwMC55ID0geSAqIGEgKyBwMS55ICogKDEgLSBhKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhlIElucHV0IE1hbmFnZXIgYW5kIGFsbCBvZiBpdHMgc3lzdGVtcy5cclxuICAgICAqXHJcbiAgICAgKiBUaGVyZSBpcyBubyB3YXkgdG8gcmVjb3ZlciBmcm9tIGRvaW5nIHRoaXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZXZlbnRzLnJlbW92ZUFsbExpc3RlbmVycygpO1xyXG5cclxuICAgICAgICB0aGlzLmdhbWUuZXZlbnRzLm9mZihHYW1lRXZlbnRzLlBSRV9SRU5ERVIpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5rZXlib2FyZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMua2V5Ym9hcmQuZGVzdHJveSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMubW91c2UpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1vdXNlLmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRvdWNoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy50b3VjaC5kZXN0cm95KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucG9pbnRlcnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBvaW50ZXJzW2ldLmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucG9pbnRlcnMgPSBbXTtcclxuICAgICAgICB0aGlzLl90ZW1wSGl0VGVzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuX3RlbXBNYXRyaXguZGVzdHJveSgpO1xyXG4gICAgICAgIHRoaXMuY2FudmFzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmdhbWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IElucHV0TWFuYWdlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/InputManager.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/InputPlugin.js":
/*!******************************************************!*\
!*** ./node_modules/phaser/src/input/InputPlugin.js ***!
\******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Circle = __webpack_require__(/*! ../geom/circle/Circle */ \"./node_modules/phaser/src/geom/circle/Circle.js\");\r\nvar CircleContains = __webpack_require__(/*! ../geom/circle/Contains */ \"./node_modules/phaser/src/geom/circle/Contains.js\");\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/input/const.js\");\r\nvar CreateInteractiveObject = __webpack_require__(/*! ./CreateInteractiveObject */ \"./node_modules/phaser/src/input/CreateInteractiveObject.js\");\r\nvar CreatePixelPerfectHandler = __webpack_require__(/*! ./CreatePixelPerfectHandler */ \"./node_modules/phaser/src/input/CreatePixelPerfectHandler.js\");\r\nvar DistanceBetween = __webpack_require__(/*! ../math/distance/DistanceBetween */ \"./node_modules/phaser/src/math/distance/DistanceBetween.js\");\r\nvar Ellipse = __webpack_require__(/*! ../geom/ellipse/Ellipse */ \"./node_modules/phaser/src/geom/ellipse/Ellipse.js\");\r\nvar EllipseContains = __webpack_require__(/*! ../geom/ellipse/Contains */ \"./node_modules/phaser/src/geom/ellipse/Contains.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/input/events/index.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar GEOM_CONST = __webpack_require__(/*! ../geom/const */ \"./node_modules/phaser/src/geom/const.js\");\r\nvar InputPluginCache = __webpack_require__(/*! ./InputPluginCache */ \"./node_modules/phaser/src/input/InputPluginCache.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\nvar PluginCache = __webpack_require__(/*! ../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar Rectangle = __webpack_require__(/*! ../geom/rectangle/Rectangle */ \"./node_modules/phaser/src/geom/rectangle/Rectangle.js\");\r\nvar RectangleContains = __webpack_require__(/*! ../geom/rectangle/Contains */ \"./node_modules/phaser/src/geom/rectangle/Contains.js\");\r\nvar SceneEvents = __webpack_require__(/*! ../scene/events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\nvar Triangle = __webpack_require__(/*! ../geom/triangle/Triangle */ \"./node_modules/phaser/src/geom/triangle/Triangle.js\");\r\nvar TriangleContains = __webpack_require__(/*! ../geom/triangle/Contains */ \"./node_modules/phaser/src/geom/triangle/Contains.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Input Plugin belongs to a Scene and handles all input related events and operations for it.\r\n *\r\n * You can access it from within a Scene using `this.input`.\r\n *\r\n * It emits events directly. For example, you can do:\r\n *\r\n * ```javascript\r\n * this.input.on('pointerdown', callback, context);\r\n * ```\r\n *\r\n * To listen for a pointer down event anywhere on the game canvas.\r\n *\r\n * Game Objects can be enabled for input by calling their `setInteractive` method. After which they\r\n * will directly emit input events:\r\n *\r\n * ```javascript\r\n * var sprite = this.add.sprite(x, y, texture);\r\n * sprite.setInteractive();\r\n * sprite.on('pointerdown', callback, context);\r\n * ```\r\n *\r\n * There are lots of game configuration options available relating to input.\r\n * See the [Input Config object]{@linkcode Phaser.Types.Core.InputConfig} for more details, including how to deal with Phaser\r\n * listening for input events outside of the canvas, how to set a default number of pointers, input\r\n * capture settings and more.\r\n *\r\n * Please also see the Input examples and tutorials for further information.\r\n *\r\n * @class InputPlugin\r\n * @extends Phaser.Events.EventEmitter\r\n * @memberof Phaser.Input\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - A reference to the Scene that this Input Plugin is responsible for.\r\n */\r\nvar InputPlugin = new Class({\r\n\r\n Extends: EventEmitter,\r\n\r\n initialize:\r\n\r\n function InputPlugin (scene)\r\n {\r\n EventEmitter.call(this);\r\n\r\n /**\r\n * A reference to the Scene that this Input Plugin is responsible for.\r\n *\r\n * @name Phaser.Input.InputPlugin#scene\r\n * @type {Phaser.Scene}\r\n * @since 3.0.0\r\n */\r\n this.scene = scene;\r\n\r\n /**\r\n * A reference to the Scene Systems class.\r\n *\r\n * @name Phaser.Input.InputPlugin#systems\r\n * @type {Phaser.Scenes.Systems}\r\n * @since 3.0.0\r\n */\r\n this.systems = scene.sys;\r\n\r\n /**\r\n * A reference to the Scene Systems Settings.\r\n *\r\n * @name Phaser.Input.InputPlugin#settings\r\n * @type {Phaser.Types.Scenes.SettingsObject}\r\n * @since 3.5.0\r\n */\r\n this.settings = scene.sys.settings;\r\n\r\n /**\r\n * A reference to the Game Input Manager.\r\n *\r\n * @name Phaser.Input.InputPlugin#manager\r\n * @type {Phaser.Input.InputManager}\r\n * @since 3.0.0\r\n */\r\n this.manager = scene.sys.game.input;\r\n\r\n /**\r\n * Internal event queue used for plugins only.\r\n *\r\n * @name Phaser.Input.InputPlugin#pluginEvents\r\n * @type {Phaser.Events.EventEmitter}\r\n * @private\r\n * @since 3.10.0\r\n */\r\n this.pluginEvents = new EventEmitter();\r\n\r\n /**\r\n * If `true` this Input Plugin will process DOM input events.\r\n *\r\n * @name Phaser.Input.InputPlugin#enabled\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.5.0\r\n */\r\n this.enabled = true;\r\n\r\n /**\r\n * A reference to the Scene Display List. This property is set during the `boot` method.\r\n *\r\n * @name Phaser.Input.InputPlugin#displayList\r\n * @type {Phaser.GameObjects.DisplayList}\r\n * @since 3.0.0\r\n */\r\n this.displayList;\r\n\r\n /**\r\n * A reference to the Scene Cameras Manager. This property is set during the `boot` method.\r\n *\r\n * @name Phaser.Input.InputPlugin#cameras\r\n * @type {Phaser.Cameras.Scene2D.CameraManager}\r\n * @since 3.0.0\r\n */\r\n this.cameras;\r\n\r\n // Inject the available input plugins into this class\r\n InputPluginCache.install(this);\r\n\r\n /**\r\n * A reference to the Mouse Manager.\r\n *\r\n * This property is only set if Mouse support has been enabled in your Game Configuration file.\r\n *\r\n * If you just wish to get access to the mouse pointer, use the `mousePointer` property instead.\r\n *\r\n * @name Phaser.Input.InputPlugin#mouse\r\n * @type {?Phaser.Input.Mouse.MouseManager}\r\n * @since 3.0.0\r\n */\r\n this.mouse = this.manager.mouse;\r\n\r\n /**\r\n * When set to `true` (the default) the Input Plugin will emulate DOM behavior by only emitting events from\r\n * the top-most Game Objects in the Display List.\r\n *\r\n * If set to `false` it will emit events from all Game Objects below a Pointer, not just the top one.\r\n *\r\n * @name Phaser.Input.InputPlugin#topOnly\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.topOnly = true;\r\n\r\n /**\r\n * How often should the Pointers be checked?\r\n *\r\n * The value is a time, given in ms, and is the time that must have elapsed between game steps before\r\n * the Pointers will be polled again. When a pointer is polled it runs a hit test to see which Game\r\n * Objects are currently below it, or being interacted with it.\r\n *\r\n * Pointers will *always* be checked if they have been moved by the user, or press or released.\r\n *\r\n * This property only controls how often they will be polled if they have not been updated.\r\n * You should set this if you want to have Game Objects constantly check against the pointers, even\r\n * if the pointer didn't itself move.\r\n *\r\n * Set to 0 to poll constantly. Set to -1 to only poll on user movement.\r\n *\r\n * @name Phaser.Input.InputPlugin#pollRate\r\n * @type {integer}\r\n * @default -1\r\n * @since 3.0.0\r\n */\r\n this.pollRate = -1;\r\n\r\n /**\r\n * Internal poll timer value.\r\n *\r\n * @name Phaser.Input.InputPlugin#_pollTimer\r\n * @type {number}\r\n * @private\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this._pollTimer = 0;\r\n\r\n var _eventData = { cancelled: false };\r\n\r\n /**\r\n * Internal event propagation callback container.\r\n *\r\n * @name Phaser.Input.InputPlugin#_eventContainer\r\n * @type {Phaser.Types.Input.EventData}\r\n * @private\r\n * @since 3.13.0\r\n */\r\n this._eventContainer = {\r\n stopPropagation: function ()\r\n {\r\n _eventData.cancelled = true;\r\n }\r\n };\r\n\r\n /**\r\n * Internal event propagation data object.\r\n *\r\n * @name Phaser.Input.InputPlugin#_eventData\r\n * @type {object}\r\n * @private\r\n * @since 3.13.0\r\n */\r\n this._eventData = _eventData;\r\n\r\n /**\r\n * The distance, in pixels, a pointer has to move while being held down, before it thinks it is being dragged.\r\n *\r\n * @name Phaser.Input.InputPlugin#dragDistanceThreshold\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.dragDistanceThreshold = 0;\r\n\r\n /**\r\n * The amount of time, in ms, a pointer has to be held down before it thinks it is dragging.\r\n *\r\n * The default polling rate is to poll only on move so once the time threshold is reached the\r\n * drag event will not start until you move the mouse. If you want it to start immediately\r\n * when the time threshold is reached, you must increase the polling rate by calling\r\n * [setPollAlways]{@linkcode Phaser.Input.InputPlugin#setPollAlways} or\r\n * [setPollRate]{@linkcode Phaser.Input.InputPlugin#setPollRate}.\r\n *\r\n * @name Phaser.Input.InputPlugin#dragTimeThreshold\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.dragTimeThreshold = 0;\r\n\r\n /**\r\n * Used to temporarily store the results of the Hit Test\r\n *\r\n * @name Phaser.Input.InputPlugin#_temp\r\n * @type {array}\r\n * @private\r\n * @default []\r\n * @since 3.0.0\r\n */\r\n this._temp = [];\r\n\r\n /**\r\n * Used to temporarily store the results of the Hit Test dropZones\r\n *\r\n * @name Phaser.Input.InputPlugin#_tempZones\r\n * @type {array}\r\n * @private\r\n * @default []\r\n * @since 3.0.0\r\n */\r\n this._tempZones = [];\r\n\r\n /**\r\n * A list of all Game Objects that have been set to be interactive in the Scene this Input Plugin is managing.\r\n *\r\n * @name Phaser.Input.InputPlugin#_list\r\n * @type {Phaser.GameObjects.GameObject[]}\r\n * @private\r\n * @default []\r\n * @since 3.0.0\r\n */\r\n this._list = [];\r\n\r\n /**\r\n * Objects waiting to be inserted to the list on the next call to 'begin'.\r\n *\r\n * @name Phaser.Input.InputPlugin#_pendingInsertion\r\n * @type {Phaser.GameObjects.GameObject[]}\r\n * @private\r\n * @default []\r\n * @since 3.0.0\r\n */\r\n this._pendingInsertion = [];\r\n\r\n /**\r\n * Objects waiting to be removed from the list on the next call to 'begin'.\r\n *\r\n * @name Phaser.Input.InputPlugin#_pendingRemoval\r\n * @type {Phaser.GameObjects.GameObject[]}\r\n * @private\r\n * @default []\r\n * @since 3.0.0\r\n */\r\n this._pendingRemoval = [];\r\n\r\n /**\r\n * A list of all Game Objects that have been enabled for dragging.\r\n *\r\n * @name Phaser.Input.InputPlugin#_draggable\r\n * @type {Phaser.GameObjects.GameObject[]}\r\n * @private\r\n * @default []\r\n * @since 3.0.0\r\n */\r\n this._draggable = [];\r\n\r\n /**\r\n * A list of all Interactive Objects currently considered as being 'draggable' by any pointer, indexed by pointer ID.\r\n *\r\n * @name Phaser.Input.InputPlugin#_drag\r\n * @type {{0:Array,1:Array,2:Array,3:Array,4:Array,5:Array,6:Array,7:Array,8:Array,9:Array,10:Array}}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._drag = { 0: [], 1: [], 2: [], 3: [], 4: [], 5: [], 6: [], 7: [], 8: [], 9: [], 10: [] };\r\n\r\n /**\r\n * A array containing the dragStates, for this Scene, index by the Pointer ID.\r\n *\r\n * @name Phaser.Input.InputPlugin#_dragState\r\n * @type {integer[]}\r\n * @private\r\n * @since 3.16.0\r\n */\r\n this._dragState = [];\r\n\r\n /**\r\n * A list of all Interactive Objects currently considered as being 'over' by any pointer, indexed by pointer ID.\r\n *\r\n * @name Phaser.Input.InputPlugin#_over\r\n * @type {{0:Array,1:Array,2:Array,3:Array,4:Array,5:Array,6:Array,7:Array,8:Array,9:Array,10:Array}}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._over = { 0: [], 1: [], 2: [], 3: [], 4: [], 5: [], 6: [], 7: [], 8: [], 9: [], 10: [] };\r\n\r\n /**\r\n * A list of valid DOM event types.\r\n *\r\n * @name Phaser.Input.InputPlugin#_validTypes\r\n * @type {string[]}\r\n * @private\r\n * @since 3.0.0\r\n */\r\n this._validTypes = [ 'onDown', 'onUp', 'onOver', 'onOut', 'onMove', 'onDragStart', 'onDrag', 'onDragEnd', 'onDragEnter', 'onDragLeave', 'onDragOver', 'onDrop' ];\r\n\r\n /**\r\n * Internal property that tracks frame event state.\r\n *\r\n * @name Phaser.Input.InputPlugin#_updatedThisFrame\r\n * @type {boolean}\r\n * @private\r\n * @since 3.18.0\r\n */\r\n this._updatedThisFrame = false;\r\n\r\n scene.sys.events.once(SceneEvents.BOOT, this.boot, this);\r\n scene.sys.events.on(SceneEvents.START, this.start, this);\r\n },\r\n\r\n /**\r\n * This method is called automatically, only once, when the Scene is first created.\r\n * Do not invoke it directly.\r\n *\r\n * @method Phaser.Input.InputPlugin#boot\r\n * @fires Phaser.Input.Events#BOOT\r\n * @private\r\n * @since 3.5.1\r\n */\r\n boot: function ()\r\n {\r\n this.cameras = this.systems.cameras;\r\n\r\n this.displayList = this.systems.displayList;\r\n\r\n this.systems.events.once(SceneEvents.DESTROY, this.destroy, this);\r\n\r\n // Registered input plugins listen for this\r\n this.pluginEvents.emit(Events.BOOT);\r\n },\r\n\r\n /**\r\n * This method is called automatically by the Scene when it is starting up.\r\n * It is responsible for creating local systems, properties and listening for Scene events.\r\n * Do not invoke it directly.\r\n *\r\n * @method Phaser.Input.InputPlugin#start\r\n * @fires Phaser.Input.Events#START\r\n * @private\r\n * @since 3.5.0\r\n */\r\n start: function ()\r\n {\r\n var eventEmitter = this.systems.events;\r\n\r\n eventEmitter.on(SceneEvents.TRANSITION_START, this.transitionIn, this);\r\n eventEmitter.on(SceneEvents.TRANSITION_OUT, this.transitionOut, this);\r\n eventEmitter.on(SceneEvents.TRANSITION_COMPLETE, this.transitionComplete, this);\r\n eventEmitter.on(SceneEvents.PRE_UPDATE, this.preUpdate, this);\r\n eventEmitter.once(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n\r\n this.manager.events.on(Events.GAME_OUT, this.onGameOut, this);\r\n this.manager.events.on(Events.GAME_OVER, this.onGameOver, this);\r\n\r\n this.enabled = true;\r\n\r\n // Populate the pointer drag states\r\n this._dragState = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\r\n\r\n // Registered input plugins listen for this\r\n this.pluginEvents.emit(Events.START);\r\n },\r\n\r\n /**\r\n * Game Over handler.\r\n *\r\n * @method Phaser.Input.InputPlugin#onGameOver\r\n * @fires Phaser.Input.Events#GAME_OVER\r\n * @private\r\n * @since 3.16.2\r\n */\r\n onGameOver: function (event)\r\n {\r\n if (this.isActive())\r\n {\r\n this.emit(Events.GAME_OVER, event.timeStamp, event);\r\n }\r\n },\r\n\r\n /**\r\n * Game Out handler.\r\n *\r\n * @method Phaser.Input.InputPlugin#onGameOut\r\n * @fires Phaser.Input.Events#GAME_OUT\r\n * @private\r\n * @since 3.16.2\r\n */\r\n onGameOut: function (event)\r\n {\r\n if (this.isActive())\r\n {\r\n this.emit(Events.GAME_OUT, event.timeStamp, event);\r\n }\r\n },\r\n\r\n /**\r\n * The pre-update handler is responsible for checking the pending removal and insertion lists and\r\n * deleting old Game Objects.\r\n *\r\n * @method Phaser.Input.InputPlugin#preUpdate\r\n * @private\r\n * @fires Phaser.Input.Events#PRE_UPDATE\r\n * @since 3.0.0\r\n */\r\n preUpdate: function ()\r\n {\r\n // Registered input plugins listen for this\r\n this.pluginEvents.emit(Events.PRE_UPDATE);\r\n\r\n var removeList = this._pendingRemoval;\r\n var insertList = this._pendingInsertion;\r\n\r\n var toRemove = removeList.length;\r\n var toInsert = insertList.length;\r\n\r\n if (toRemove === 0 && toInsert === 0)\r\n {\r\n // Quick bail\r\n return;\r\n }\r\n\r\n var current = this._list;\r\n\r\n // Delete old gameObjects\r\n for (var i = 0; i < toRemove; i++)\r\n {\r\n var gameObject = removeList[i];\r\n\r\n var index = current.indexOf(gameObject);\r\n\r\n if (index > -1)\r\n {\r\n current.splice(index, 1);\r\n\r\n this.clear(gameObject, true);\r\n }\r\n }\r\n\r\n // Clear the removal list\r\n removeList.length = 0;\r\n this._pendingRemoval.length = 0;\r\n\r\n // Move pendingInsertion to list (also clears pendingInsertion at the same time)\r\n this._list = current.concat(insertList.splice(0));\r\n },\r\n\r\n /**\r\n * Checks to see if both this plugin and the Scene to which it belongs is active.\r\n *\r\n * @method Phaser.Input.InputPlugin#isActive\r\n * @since 3.10.0\r\n *\r\n * @return {boolean} `true` if the plugin and the Scene it belongs to is active.\r\n */\r\n isActive: function ()\r\n {\r\n return (this.enabled && this.scene.sys.isActive());\r\n },\r\n\r\n /**\r\n * This is called automatically by the Input Manager.\r\n * It emits events for plugins to listen to and also handles polling updates, if enabled.\r\n *\r\n * @method Phaser.Input.InputPlugin#updatePoll\r\n * @since 3.18.0\r\n *\r\n * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n *\r\n * @return {boolean} `true` if the plugin and the Scene it belongs to is active.\r\n */\r\n updatePoll: function (time, delta)\r\n {\r\n if (!this.isActive())\r\n {\r\n return false;\r\n }\r\n\r\n // The plugins should update every frame, regardless if there has been\r\n // any DOM input events or not (such as the Gamepad and Keyboard)\r\n this.pluginEvents.emit(Events.UPDATE, time, delta);\r\n\r\n // We can leave now if we've already updated once this frame via the immediate DOM event handlers\r\n if (this._updatedThisFrame)\r\n {\r\n this._updatedThisFrame = false;\r\n\r\n return false;\r\n }\r\n\r\n var i;\r\n var manager = this.manager;\r\n\r\n var pointers = manager.pointers;\r\n var pointersTotal = manager.pointersTotal;\r\n\r\n for (i = 0; i < pointersTotal; i++)\r\n {\r\n pointers[i].updateMotion();\r\n }\r\n\r\n // No point going any further if there aren't any interactive objects\r\n if (this._list.length === 0)\r\n {\r\n return false;\r\n }\r\n\r\n var rate = this.pollRate;\r\n\r\n if (rate === -1)\r\n {\r\n return false;\r\n }\r\n else if (rate > 0)\r\n {\r\n this._pollTimer -= delta;\r\n\r\n if (this._pollTimer < 0)\r\n {\r\n // Discard timer diff, we're ready to poll again\r\n this._pollTimer = this.pollRate;\r\n }\r\n else\r\n {\r\n // Not enough time has elapsed since the last poll, so abort now\r\n return false;\r\n }\r\n }\r\n\r\n // We got this far? Then we should poll for movement\r\n var captured = false;\r\n\r\n for (i = 0; i < pointersTotal; i++)\r\n {\r\n var total = 0;\r\n\r\n var pointer = pointers[i];\r\n\r\n // Always reset this array\r\n this._tempZones = [];\r\n\r\n // _temp contains a hit tested and camera culled list of IO objects\r\n this._temp = this.hitTestPointer(pointer);\r\n\r\n this.sortGameObjects(this._temp);\r\n this.sortGameObjects(this._tempZones);\r\n\r\n if (this.topOnly)\r\n {\r\n // Only the top-most one counts now, so safely ignore the rest\r\n if (this._temp.length)\r\n {\r\n this._temp.splice(1);\r\n }\r\n\r\n if (this._tempZones.length)\r\n {\r\n this._tempZones.splice(1);\r\n }\r\n }\r\n\r\n total += this.processOverOutEvents(pointer);\r\n\r\n if (this.getDragState(pointer) === 2)\r\n {\r\n this.processDragThresholdEvent(pointer, time);\r\n }\r\n\r\n if (total > 0)\r\n {\r\n // We interacted with an event in this Scene, so block any Scenes below us from doing the same this frame\r\n captured = true;\r\n }\r\n }\r\n\r\n return captured;\r\n },\r\n\r\n /**\r\n * This method is called when a DOM Event is received by the Input Manager. It handles dispatching the events\r\n * to relevant input enabled Game Objects in this scene.\r\n *\r\n * @method Phaser.Input.InputPlugin#update\r\n * @private\r\n * @fires Phaser.Input.Events#UPDATE\r\n * @since 3.0.0\r\n *\r\n * @param {integer} type - The type of event to process.\r\n * @param {Phaser.Input.Pointer[]} pointers - An array of Pointers on which the event occurred.\r\n *\r\n * @return {boolean} `true` if this Scene has captured the input events from all other Scenes, otherwise `false`.\r\n */\r\n update: function (type, pointers)\r\n {\r\n if (!this.isActive())\r\n {\r\n return false;\r\n }\r\n\r\n var pointersTotal = pointers.length;\r\n var captured = false;\r\n\r\n for (var i = 0; i < pointersTotal; i++)\r\n {\r\n var total = 0;\r\n var pointer = pointers[i];\r\n\r\n // Always reset this array\r\n this._tempZones = [];\r\n\r\n // _temp contains a hit tested and camera culled list of IO objects\r\n this._temp = this.hitTestPointer(pointer);\r\n\r\n this.sortGameObjects(this._temp);\r\n this.sortGameObjects(this._tempZones);\r\n\r\n if (this.topOnly)\r\n {\r\n // Only the top-most one counts now, so safely ignore the rest\r\n if (this._temp.length)\r\n {\r\n this._temp.splice(1);\r\n }\r\n\r\n if (this._tempZones.length)\r\n {\r\n this._tempZones.splice(1);\r\n }\r\n }\r\n\r\n switch (type)\r\n {\r\n case CONST.MOUSE_DOWN:\r\n total += this.processDragDownEvent(pointer);\r\n total += this.processDownEvents(pointer);\r\n total += this.processOverOutEvents(pointer);\r\n break;\r\n\r\n case CONST.MOUSE_UP:\r\n total += this.processDragUpEvent(pointer);\r\n total += this.processUpEvents(pointer);\r\n total += this.processOverOutEvents(pointer);\r\n break;\r\n\r\n case CONST.TOUCH_START:\r\n total += this.processDragDownEvent(pointer);\r\n total += this.processDownEvents(pointer);\r\n total += this.processOverEvents(pointer);\r\n break;\r\n\r\n case CONST.TOUCH_END:\r\n case CONST.TOUCH_CANCEL:\r\n total += this.processDragUpEvent(pointer);\r\n total += this.processUpEvents(pointer);\r\n total += this.processOutEvents(pointer);\r\n break;\r\n\r\n case CONST.MOUSE_MOVE:\r\n case CONST.TOUCH_MOVE:\r\n total += this.processDragMoveEvent(pointer);\r\n total += this.processMoveEvents(pointer);\r\n total += this.processOverOutEvents(pointer);\r\n break;\r\n\r\n case CONST.MOUSE_WHEEL:\r\n total += this.processWheelEvent(pointer);\r\n break;\r\n }\r\n\r\n if (total > 0)\r\n {\r\n // We interacted with an event in this Scene, so block any Scenes below us from doing the same this frame\r\n captured = true;\r\n }\r\n }\r\n\r\n this._updatedThisFrame = true;\r\n\r\n return captured;\r\n },\r\n\r\n /**\r\n * Clears a Game Object so it no longer has an Interactive Object associated with it.\r\n * The Game Object is then queued for removal from the Input Plugin on the next update.\r\n *\r\n * @method Phaser.Input.InputPlugin#clear\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object that will have its Interactive Object removed.\r\n * @param {boolean} [skipQueue=false] - Skip adding this Game Object into the removal queue?\r\n *\r\n * @return {Phaser.GameObjects.GameObject} The Game Object that had its Interactive Object removed.\r\n */\r\n clear: function (gameObject, skipQueue)\r\n {\r\n if (skipQueue === undefined) { skipQueue = false; }\r\n\r\n var input = gameObject.input;\r\n\r\n // If GameObject.input already cleared from higher class\r\n if (!input)\r\n {\r\n return;\r\n }\r\n\r\n if (!skipQueue)\r\n {\r\n this.queueForRemoval(gameObject);\r\n }\r\n\r\n input.gameObject = undefined;\r\n input.target = undefined;\r\n input.hitArea = undefined;\r\n input.hitAreaCallback = undefined;\r\n input.callbackContext = undefined;\r\n\r\n this.manager.resetCursor(input);\r\n\r\n gameObject.input = null;\r\n\r\n // Clear from _draggable, _drag and _over\r\n var index = this._draggable.indexOf(gameObject);\r\n\r\n if (index > -1)\r\n {\r\n this._draggable.splice(index, 1);\r\n }\r\n\r\n index = this._drag[0].indexOf(gameObject);\r\n\r\n if (index > -1)\r\n {\r\n this._drag[0].splice(index, 1);\r\n }\r\n\r\n index = this._over[0].indexOf(gameObject);\r\n\r\n if (index > -1)\r\n {\r\n this._over[0].splice(index, 1);\r\n }\r\n\r\n return gameObject;\r\n },\r\n\r\n /**\r\n * Disables Input on a single Game Object.\r\n *\r\n * An input disabled Game Object still retains its Interactive Object component and can be re-enabled\r\n * at any time, by passing it to `InputPlugin.enable`.\r\n *\r\n * @method Phaser.Input.InputPlugin#disable\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to have its input system disabled.\r\n */\r\n disable: function (gameObject)\r\n {\r\n gameObject.input.enabled = false;\r\n },\r\n\r\n /**\r\n * Enable a Game Object for interaction.\r\n *\r\n * If the Game Object already has an Interactive Object component, it is enabled and returned.\r\n *\r\n * Otherwise, a new Interactive Object component is created and assigned to the Game Object's `input` property.\r\n *\r\n * Input works by using hit areas, these are nearly always geometric shapes, such as rectangles or circles, that act as the hit area\r\n * for the Game Object. However, you can provide your own hit area shape and callback, should you wish to handle some more advanced\r\n * input detection.\r\n *\r\n * If no arguments are provided it will try and create a rectangle hit area based on the texture frame the Game Object is using. If\r\n * this isn't a texture-bound object, such as a Graphics or BitmapText object, this will fail, and you'll need to provide a specific\r\n * shape for it to use.\r\n *\r\n * You can also provide an Input Configuration Object as the only argument to this method.\r\n *\r\n * @method Phaser.Input.InputPlugin#enable\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to be enabled for input.\r\n * @param {(Phaser.Types.Input.InputConfiguration|any)} [shape] - Either an input configuration object, or a geometric shape that defines the hit area for the Game Object. If not specified a Rectangle will be used.\r\n * @param {Phaser.Types.Input.HitAreaCallback} [callback] - The 'contains' function to invoke to check if the pointer is within the hit area.\r\n * @param {boolean} [dropZone=false] - Is this Game Object a drop zone or not?\r\n *\r\n * @return {Phaser.Input.InputPlugin} This Input Plugin.\r\n */\r\n enable: function (gameObject, shape, callback, dropZone)\r\n {\r\n if (dropZone === undefined) { dropZone = false; }\r\n\r\n if (gameObject.input)\r\n {\r\n // If it is already has an InteractiveObject then just enable it and return\r\n gameObject.input.enabled = true;\r\n }\r\n else\r\n {\r\n // Create an InteractiveObject and enable it\r\n this.setHitArea(gameObject, shape, callback);\r\n }\r\n\r\n if (gameObject.input && dropZone && !gameObject.input.dropZone)\r\n {\r\n gameObject.input.dropZone = dropZone;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Takes the given Pointer and performs a hit test against it, to see which interactive Game Objects\r\n * it is currently above.\r\n *\r\n * The hit test is performed against which-ever Camera the Pointer is over. If it is over multiple\r\n * cameras, it starts checking the camera at the top of the camera list, and if nothing is found, iterates down the list.\r\n *\r\n * @method Phaser.Input.InputPlugin#hitTestPointer\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Pointer} pointer - The Pointer to check against the Game Objects.\r\n *\r\n * @return {Phaser.GameObjects.GameObject[]} An array of all the interactive Game Objects the Pointer was above.\r\n */\r\n hitTestPointer: function (pointer)\r\n {\r\n var cameras = this.cameras.getCamerasBelowPointer(pointer);\r\n\r\n for (var c = 0; c < cameras.length; c++)\r\n {\r\n var camera = cameras[c];\r\n\r\n // Get a list of all objects that can be seen by the camera below the pointer in the scene and store in 'over' array.\r\n // All objects in this array are input enabled, as checked by the hitTest method, so we don't need to check later on as well.\r\n var over = this.manager.hitTest(pointer, this._list, camera);\r\n\r\n // Filter out the drop zones\r\n for (var i = 0; i < over.length; i++)\r\n {\r\n var obj = over[i];\r\n\r\n if (obj.input.dropZone)\r\n {\r\n this._tempZones.push(obj);\r\n }\r\n }\r\n\r\n if (over.length > 0)\r\n {\r\n pointer.camera = camera;\r\n\r\n return over;\r\n }\r\n }\r\n\r\n // If we got this far then there were no Game Objects below the pointer, but it was still over\r\n // a camera, so set that the top-most one into the pointer\r\n\r\n pointer.camera = cameras[0];\r\n\r\n return [];\r\n },\r\n\r\n /**\r\n * An internal method that handles the Pointer down event.\r\n *\r\n * @method Phaser.Input.InputPlugin#processDownEvents\r\n * @private\r\n * @fires Phaser.Input.Events#GAMEOBJECT_POINTER_DOWN\r\n * @fires Phaser.Input.Events#GAMEOBJECT_DOWN\r\n * @fires Phaser.Input.Events#POINTER_DOWN\r\n * @fires Phaser.Input.Events#POINTER_DOWN_OUTSIDE\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Pointer} pointer - The Pointer being tested.\r\n *\r\n * @return {integer} The total number of objects interacted with.\r\n */\r\n processDownEvents: function (pointer)\r\n {\r\n var total = 0;\r\n var currentlyOver = this._temp;\r\n\r\n var _eventData = this._eventData;\r\n var _eventContainer = this._eventContainer;\r\n\r\n _eventData.cancelled = false;\r\n\r\n var aborted = false;\r\n\r\n // Go through all objects the pointer was over and fire their events / callbacks\r\n for (var i = 0; i < currentlyOver.length; i++)\r\n {\r\n var gameObject = currentlyOver[i];\r\n\r\n if (!gameObject.input)\r\n {\r\n continue;\r\n }\r\n\r\n total++;\r\n\r\n gameObject.emit(Events.GAMEOBJECT_POINTER_DOWN, pointer, gameObject.input.localX, gameObject.input.localY, _eventContainer);\r\n\r\n if (_eventData.cancelled || !gameObject.input)\r\n {\r\n aborted = true;\r\n break;\r\n }\r\n\r\n this.emit(Events.GAMEOBJECT_DOWN, pointer, gameObject, _eventContainer);\r\n\r\n if (_eventData.cancelled || !gameObject.input)\r\n {\r\n aborted = true;\r\n break;\r\n }\r\n }\r\n\r\n // If they released outside the canvas, but pressed down inside it, we'll still dispatch the event.\r\n if (!aborted && this.manager)\r\n {\r\n if (pointer.downElement === this.manager.game.canvas)\r\n {\r\n this.emit(Events.POINTER_DOWN, pointer, currentlyOver);\r\n }\r\n else\r\n {\r\n this.emit(Events.POINTER_DOWN_OUTSIDE, pointer);\r\n }\r\n }\r\n\r\n return total;\r\n },\r\n\r\n /**\r\n * Returns the drag state of the given Pointer for this Input Plugin.\r\n *\r\n * The state will be one of the following:\r\n *\r\n * 0 = Not dragging anything\r\n * 1 = Primary button down and objects below, so collect a draglist\r\n * 2 = Pointer being checked if meets drag criteria\r\n * 3 = Pointer meets criteria, notify the draglist\r\n * 4 = Pointer actively dragging the draglist and has moved\r\n * 5 = Pointer actively dragging but has been released, notify draglist\r\n *\r\n * @method Phaser.Input.InputPlugin#getDragState\r\n * @since 3.16.0\r\n *\r\n * @param {Phaser.Input.Pointer} pointer - The Pointer to get the drag state for.\r\n *\r\n * @return {integer} The drag state of the given Pointer.\r\n */\r\n getDragState: function (pointer)\r\n {\r\n return this._dragState[pointer.id];\r\n },\r\n\r\n /**\r\n * Sets the drag state of the given Pointer for this Input Plugin.\r\n *\r\n * The state must be one of the following values:\r\n *\r\n * 0 = Not dragging anything\r\n * 1 = Primary button down and objects below, so collect a draglist\r\n * 2 = Pointer being checked if meets drag criteria\r\n * 3 = Pointer meets criteria, notify the draglist\r\n * 4 = Pointer actively dragging the draglist and has moved\r\n * 5 = Pointer actively dragging but has been released, notify draglist\r\n *\r\n * @method Phaser.Input.InputPlugin#setDragState\r\n * @since 3.16.0\r\n *\r\n * @param {Phaser.Input.Pointer} pointer - The Pointer to set the drag state for.\r\n * @param {integer} state - The drag state value. An integer between 0 and 5.\r\n */\r\n setDragState: function (pointer, state)\r\n {\r\n this._dragState[pointer.id] = state;\r\n },\r\n\r\n /**\r\n * Checks to see if a Pointer is ready to drag the objects below it, based on either a distance\r\n * or time threshold.\r\n *\r\n * @method Phaser.Input.InputPlugin#processDragThresholdEvent\r\n * @private\r\n * @since 3.18.0\r\n *\r\n * @param {Phaser.Input.Pointer} pointer - The Pointer to check the drag thresholds on.\r\n * @param {number} time - The current time.\r\n */\r\n processDragThresholdEvent: function (pointer, time)\r\n {\r\n var passed = false;\r\n var timeThreshold = this.dragTimeThreshold;\r\n var distanceThreshold = this.dragDistanceThreshold;\r\n\r\n if (distanceThreshold > 0 && DistanceBetween(pointer.x, pointer.y, pointer.downX, pointer.downY) >= distanceThreshold)\r\n {\r\n // It has moved far enough to be considered a drag\r\n passed = true;\r\n }\r\n else if (timeThreshold > 0 && (time >= pointer.downTime + timeThreshold))\r\n {\r\n // It has been held down long enough to be considered a drag\r\n passed = true;\r\n }\r\n\r\n if (passed)\r\n {\r\n this.setDragState(pointer, 3);\r\n\r\n return this.processDragStartList(pointer);\r\n }\r\n },\r\n\r\n /**\r\n * Processes the drag list for the given pointer and dispatches the start events for each object on it.\r\n *\r\n * @method Phaser.Input.InputPlugin#processDragStartList\r\n * @private\r\n * @fires Phaser.Input.Events#DRAG_START\r\n * @fires Phaser.Input.Events#GAMEOBJECT_DRAG_START\r\n * @since 3.18.0\r\n *\r\n * @param {Phaser.Input.Pointer} pointer - The Pointer to process the drag event on.\r\n *\r\n * @return {integer} The number of items that DRAG_START was called on.\r\n */\r\n processDragStartList: function (pointer)\r\n {\r\n // 3 = Pointer meets criteria and is freshly down, notify the draglist\r\n if (this.getDragState(pointer) !== 3)\r\n {\r\n return 0;\r\n }\r\n\r\n var list = this._drag[pointer.id];\r\n\r\n for (var i = 0; i < list.length; i++)\r\n {\r\n var gameObject = list[i];\r\n\r\n var input = gameObject.input;\r\n\r\n input.dragState = 2;\r\n\r\n input.dragStartX = gameObject.x;\r\n input.dragStartY = gameObject.y;\r\n\r\n input.dragStartXGlobal = pointer.x;\r\n input.dragStartYGlobal = pointer.y;\r\n\r\n input.dragX = input.dragStartXGlobal - input.dragStartX;\r\n input.dragY = input.dragStartYGlobal - input.dragStartY;\r\n\r\n gameObject.emit(Events.GAMEOBJECT_DRAG_START, pointer, input.dragX, input.dragY);\r\n\r\n this.emit(Events.DRAG_START, pointer, gameObject);\r\n }\r\n\r\n this.setDragState(pointer, 4);\r\n\r\n return list.length;\r\n },\r\n\r\n /**\r\n * Processes a 'drag down' event for the given pointer. Checks the pointer state, builds-up the drag list\r\n * and prepares them all for interaction.\r\n *\r\n * @method Phaser.Input.InputPlugin#processDragDownEvent\r\n * @private\r\n * @since 3.18.0\r\n *\r\n * @param {Phaser.Input.Pointer} pointer - The Pointer to process the drag event on.\r\n *\r\n * @return {integer} The number of items that were collected on the drag list.\r\n */\r\n processDragDownEvent: function (pointer)\r\n {\r\n var currentlyOver = this._temp;\r\n\r\n if (this._draggable.length === 0 || currentlyOver.length === 0 || !pointer.primaryDown || this.getDragState(pointer) !== 0)\r\n {\r\n // There are no draggable items, no over items or the pointer isn't down, so let's not even bother going further\r\n return 0;\r\n }\r\n\r\n // 1 = Primary button down and objects below, so collect a draglist\r\n this.setDragState(pointer, 1);\r\n\r\n // Get draggable objects, sort them, pick the top (or all) and store them somewhere\r\n var draglist = [];\r\n\r\n for (var i = 0; i < currentlyOver.length; i++)\r\n {\r\n var gameObject = currentlyOver[i];\r\n\r\n if (gameObject.input.draggable && (gameObject.input.dragState === 0))\r\n {\r\n draglist.push(gameObject);\r\n }\r\n }\r\n\r\n if (draglist.length === 0)\r\n {\r\n this.setDragState(pointer, 0);\r\n\r\n return 0;\r\n }\r\n else if (draglist.length > 1)\r\n {\r\n this.sortGameObjects(draglist);\r\n\r\n if (this.topOnly)\r\n {\r\n draglist.splice(1);\r\n }\r\n }\r\n\r\n // draglist now contains all potential candidates for dragging\r\n this._drag[pointer.id] = draglist;\r\n\r\n if (this.dragDistanceThreshold === 0 && this.dragTimeThreshold === 0)\r\n {\r\n // No drag criteria, so snap immediately to mode 3\r\n this.setDragState(pointer, 3);\r\n\r\n return this.processDragStartList(pointer);\r\n }\r\n else\r\n {\r\n // Check the distance / time on the next event\r\n this.setDragState(pointer, 2);\r\n\r\n return 0;\r\n }\r\n },\r\n\r\n /**\r\n * Processes a 'drag move' event for the given pointer.\r\n *\r\n * @method Phaser.Input.InputPlugin#processDragMoveEvent\r\n * @private\r\n * @fires Phaser.Input.Events#DRAG_ENTER\r\n * @fires Phaser.Input.Events#DRAG\r\n * @fires Phaser.Input.Events#DRAG_LEAVE\r\n * @fires Phaser.Input.Events#DRAG_OVER\r\n * @fires Phaser.Input.Events#GAMEOBJECT_DRAG_ENTER\r\n * @fires Phaser.Input.Events#GAMEOBJECT_DRAG\r\n * @fires Phaser.Input.Events#GAMEOBJECT_DRAG_LEAVE\r\n * @fires Phaser.Input.Events#GAMEOBJECT_DRAG_OVER\r\n * @since 3.18.0\r\n *\r\n * @param {Phaser.Input.Pointer} pointer - The Pointer to process the drag event on.\r\n *\r\n * @return {integer} The number of items that were updated by this drag event.\r\n */\r\n processDragMoveEvent: function (pointer)\r\n {\r\n // 2 = Pointer being checked if meets drag criteria\r\n if (this.getDragState(pointer) === 2)\r\n {\r\n this.processDragThresholdEvent(pointer, this.manager.game.loop.now);\r\n }\r\n\r\n if (this.getDragState(pointer) !== 4)\r\n {\r\n return 0;\r\n }\r\n\r\n // 4 = Pointer actively dragging the draglist and has moved\r\n var dropZones = this._tempZones;\r\n\r\n var list = this._drag[pointer.id];\r\n\r\n for (var i = 0; i < list.length; i++)\r\n {\r\n var gameObject = list[i];\r\n\r\n var input = gameObject.input;\r\n\r\n var target = input.target;\r\n\r\n // If this GO has a target then let's check it\r\n if (target)\r\n {\r\n var index = dropZones.indexOf(target);\r\n\r\n // Got a target, are we still over it?\r\n if (index === 0)\r\n {\r\n // We're still over it, and it's still the top of the display list, phew ...\r\n gameObject.emit(Events.GAMEOBJECT_DRAG_OVER, pointer, target);\r\n\r\n this.emit(Events.DRAG_OVER, pointer, gameObject, target);\r\n }\r\n else if (index > 0)\r\n {\r\n // Still over it but it's no longer top of the display list (targets must always be at the top)\r\n gameObject.emit(Events.GAMEOBJECT_DRAG_LEAVE, pointer, target);\r\n\r\n this.emit(Events.DRAG_LEAVE, pointer, gameObject, target);\r\n\r\n input.target = dropZones[0];\r\n\r\n target = input.target;\r\n\r\n gameObject.emit(Events.GAMEOBJECT_DRAG_ENTER, pointer, target);\r\n\r\n this.emit(Events.DRAG_ENTER, pointer, gameObject, target);\r\n }\r\n else\r\n {\r\n // Nope, we've moved on (or the target has!), leave the old target\r\n gameObject.emit(Events.GAMEOBJECT_DRAG_LEAVE, pointer, target);\r\n\r\n this.emit(Events.DRAG_LEAVE, pointer, gameObject, target);\r\n\r\n // Anything new to replace it?\r\n // Yup!\r\n if (dropZones[0])\r\n {\r\n input.target = dropZones[0];\r\n\r\n target = input.target;\r\n\r\n gameObject.emit(Events.GAMEOBJECT_DRAG_ENTER, pointer, target);\r\n\r\n this.emit(Events.DRAG_ENTER, pointer, gameObject, target);\r\n }\r\n else\r\n {\r\n // Nope\r\n input.target = null;\r\n }\r\n }\r\n }\r\n else if (!target && dropZones[0])\r\n {\r\n input.target = dropZones[0];\r\n\r\n target = input.target;\r\n\r\n gameObject.emit(Events.GAMEOBJECT_DRAG_ENTER, pointer, target);\r\n\r\n this.emit(Events.DRAG_ENTER, pointer, gameObject, target);\r\n }\r\n\r\n var dragX;\r\n var dragY;\r\n\r\n if (!gameObject.parentContainer)\r\n {\r\n dragX = pointer.x - input.dragX;\r\n dragY = pointer.y - input.dragY;\r\n }\r\n else\r\n {\r\n var dx = pointer.x - input.dragStartXGlobal;\r\n var dy = pointer.y - input.dragStartYGlobal;\r\n\r\n var rotation = gameObject.getParentRotation();\r\n\r\n var dxRotated = dx * Math.cos(rotation) + dy * Math.sin(rotation);\r\n var dyRotated = dy * Math.cos(rotation) - dx * Math.sin(rotation);\r\n\r\n dxRotated *= (1 / gameObject.parentContainer.scaleX);\r\n dyRotated *= (1 / gameObject.parentContainer.scaleY);\r\n\r\n dragX = dxRotated + input.dragStartX;\r\n dragY = dyRotated + input.dragStartY;\r\n }\r\n\r\n gameObject.emit(Events.GAMEOBJECT_DRAG, pointer, dragX, dragY);\r\n\r\n this.emit(Events.DRAG, pointer, gameObject, dragX, dragY);\r\n }\r\n\r\n return list.length;\r\n },\r\n\r\n /**\r\n * Processes a 'drag down' event for the given pointer. Checks the pointer state, builds-up the drag list\r\n * and prepares them all for interaction.\r\n *\r\n * @method Phaser.Input.InputPlugin#processDragUpEvent\r\n * @fires Phaser.Input.Events#DRAG_END\r\n * @fires Phaser.Input.Events#DROP\r\n * @fires Phaser.Input.Events#GAMEOBJECT_DRAG_END\r\n * @fires Phaser.Input.Events#GAMEOBJECT_DROP\r\n * @private\r\n * @since 3.18.0\r\n *\r\n * @param {Phaser.Input.Pointer} pointer - The Pointer to process the drag event on.\r\n *\r\n * @return {integer} The number of items that were updated by this drag event.\r\n */\r\n processDragUpEvent: function (pointer)\r\n {\r\n // 5 = Pointer was actively dragging but has been released, notify draglist\r\n var list = this._drag[pointer.id];\r\n\r\n for (var i = 0; i < list.length; i++)\r\n {\r\n var gameObject = list[i];\r\n\r\n var input = gameObject.input;\r\n\r\n if (input && input.dragState === 2)\r\n {\r\n input.dragState = 0;\r\n\r\n input.dragX = input.localX - gameObject.displayOriginX;\r\n input.dragY = input.localY - gameObject.displayOriginY;\r\n\r\n var dropped = false;\r\n\r\n var target = input.target;\r\n\r\n if (target)\r\n {\r\n gameObject.emit(Events.GAMEOBJECT_DROP, pointer, target);\r\n\r\n this.emit(Events.DROP, pointer, gameObject, target);\r\n\r\n input.target = null;\r\n\r\n dropped = true;\r\n }\r\n\r\n // And finally the dragend event\r\n\r\n if (gameObject.input)\r\n {\r\n gameObject.emit(Events.GAMEOBJECT_DRAG_END, pointer, input.dragX, input.dragY, dropped);\r\n\r\n this.emit(Events.DRAG_END, pointer, gameObject, dropped);\r\n }\r\n }\r\n }\r\n\r\n this.setDragState(pointer, 0);\r\n\r\n list.splice(0);\r\n\r\n return 0;\r\n },\r\n\r\n /**\r\n * An internal method that handles the Pointer movement event.\r\n *\r\n * @method Phaser.Input.InputPlugin#processMoveEvents\r\n * @private\r\n * @fires Phaser.Input.Events#GAMEOBJECT_POINTER_MOVE\r\n * @fires Phaser.Input.Events#GAMEOBJECT_MOVE\r\n * @fires Phaser.Input.Events#POINTER_MOVE\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Pointer} pointer - The pointer to check for events against.\r\n *\r\n * @return {integer} The total number of objects interacted with.\r\n */\r\n processMoveEvents: function (pointer)\r\n {\r\n var total = 0;\r\n var currentlyOver = this._temp;\r\n\r\n var _eventData = this._eventData;\r\n var _eventContainer = this._eventContainer;\r\n\r\n _eventData.cancelled = false;\r\n\r\n var aborted = false;\r\n\r\n // Go through all objects the pointer was over and fire their events / callbacks\r\n for (var i = 0; i < currentlyOver.length; i++)\r\n {\r\n var gameObject = currentlyOver[i];\r\n\r\n if (!gameObject.input)\r\n {\r\n continue;\r\n }\r\n\r\n total++;\r\n\r\n gameObject.emit(Events.GAMEOBJECT_POINTER_MOVE, pointer, gameObject.input.localX, gameObject.input.localY, _eventContainer);\r\n\r\n if (_eventData.cancelled || !gameObject.input)\r\n {\r\n aborted = true;\r\n break;\r\n }\r\n\r\n this.emit(Events.GAMEOBJECT_MOVE, pointer, gameObject, _eventContainer);\r\n\r\n if (_eventData.cancelled || !gameObject.input)\r\n {\r\n aborted = true;\r\n break;\r\n }\r\n\r\n if (this.topOnly)\r\n {\r\n break;\r\n }\r\n }\r\n\r\n if (!aborted)\r\n {\r\n this.emit(Events.POINTER_MOVE, pointer, currentlyOver);\r\n }\r\n\r\n return total;\r\n },\r\n\r\n /**\r\n * An internal method that handles a mouse wheel event.\r\n *\r\n * @method Phaser.Input.InputPlugin#processWheelEvent\r\n * @private\r\n * @fires Phaser.Input.Events#GAMEOBJECT_POINTER_WHEEL\r\n * @fires Phaser.Input.Events#GAMEOBJECT_WHEEL\r\n * @fires Phaser.Input.Events#POINTER_WHEEL\r\n * @since 3.18.0\r\n *\r\n * @param {Phaser.Input.Pointer} pointer - The pointer to check for events against.\r\n *\r\n * @return {integer} The total number of objects interacted with.\r\n */\r\n processWheelEvent: function (pointer)\r\n {\r\n var total = 0;\r\n var currentlyOver = this._temp;\r\n\r\n var _eventData = this._eventData;\r\n var _eventContainer = this._eventContainer;\r\n\r\n _eventData.cancelled = false;\r\n\r\n var aborted = false;\r\n\r\n var dx = pointer.deltaX;\r\n var dy = pointer.deltaY;\r\n var dz = pointer.deltaZ;\r\n\r\n // Go through all objects the pointer was over and fire their events / callbacks\r\n for (var i = 0; i < currentlyOver.length; i++)\r\n {\r\n var gameObject = currentlyOver[i];\r\n\r\n if (!gameObject.input)\r\n {\r\n continue;\r\n }\r\n\r\n total++;\r\n\r\n gameObject.emit(Events.GAMEOBJECT_POINTER_WHEEL, pointer, dx, dy, dz, _eventContainer);\r\n\r\n if (_eventData.cancelled || !gameObject.input)\r\n {\r\n aborted = true;\r\n break;\r\n }\r\n\r\n this.emit(Events.GAMEOBJECT_WHEEL, pointer, gameObject, dx, dy, dz, _eventContainer);\r\n\r\n if (_eventData.cancelled || !gameObject.input)\r\n {\r\n aborted = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!aborted)\r\n {\r\n this.emit(Events.POINTER_WHEEL, pointer, currentlyOver, dx, dy, dz);\r\n }\r\n\r\n return total;\r\n },\r\n\r\n /**\r\n * An internal method that handles the Pointer over events.\r\n * This is called when a touch input hits the canvas, having previously been off of it.\r\n *\r\n * @method Phaser.Input.InputPlugin#processOverEvents\r\n * @private\r\n * @fires Phaser.Input.Events#GAMEOBJECT_POINTER_OVER\r\n * @fires Phaser.Input.Events#GAMEOBJECT_OVER\r\n * @fires Phaser.Input.Events#POINTER_OVER\r\n * @since 3.18.0\r\n *\r\n * @param {Phaser.Input.Pointer} pointer - The pointer to check for events against.\r\n *\r\n * @return {integer} The total number of objects interacted with.\r\n */\r\n processOverEvents: function (pointer)\r\n {\r\n var currentlyOver = this._temp;\r\n\r\n var totalInteracted = 0;\r\n\r\n var total = currentlyOver.length;\r\n\r\n var justOver = [];\r\n\r\n if (total > 0)\r\n {\r\n var manager = this.manager;\r\n\r\n var _eventData = this._eventData;\r\n var _eventContainer = this._eventContainer;\r\n\r\n _eventData.cancelled = false;\r\n\r\n var aborted = false;\r\n\r\n for (var i = 0; i < total; i++)\r\n {\r\n var gameObject = currentlyOver[i];\r\n\r\n if (!gameObject.input)\r\n {\r\n continue;\r\n }\r\n\r\n justOver.push(gameObject);\r\n\r\n manager.setCursor(gameObject.input);\r\n\r\n gameObject.emit(Events.GAMEOBJECT_POINTER_OVER, pointer, gameObject.input.localX, gameObject.input.localY, _eventContainer);\r\n\r\n totalInteracted++;\r\n\r\n if (_eventData.cancelled || !gameObject.input)\r\n {\r\n aborted = true;\r\n break;\r\n }\r\n\r\n this.emit(Events.GAMEOBJECT_OVER, pointer, gameObject, _eventContainer);\r\n\r\n if (_eventData.cancelled || !gameObject.input)\r\n {\r\n aborted = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!aborted)\r\n {\r\n this.emit(Events.POINTER_OVER, pointer, justOver);\r\n }\r\n }\r\n\r\n // Then sort it into display list order\r\n this._over[pointer.id] = justOver;\r\n\r\n return totalInteracted;\r\n },\r\n\r\n /**\r\n * An internal method that handles the Pointer out events.\r\n * This is called when a touch input leaves the canvas, as it can never be 'over' in this case.\r\n *\r\n * @method Phaser.Input.InputPlugin#processOutEvents\r\n * @private\r\n * @fires Phaser.Input.Events#GAMEOBJECT_POINTER_OUT\r\n * @fires Phaser.Input.Events#GAMEOBJECT_OUT\r\n * @fires Phaser.Input.Events#POINTER_OUT\r\n * @since 3.18.0\r\n *\r\n * @param {Phaser.Input.Pointer} pointer - The pointer to check for events against.\r\n *\r\n * @return {integer} The total number of objects interacted with.\r\n */\r\n processOutEvents: function (pointer)\r\n {\r\n var previouslyOver = this._over[pointer.id];\r\n\r\n var totalInteracted = 0;\r\n\r\n var total = previouslyOver.length;\r\n\r\n if (total > 0)\r\n {\r\n var manager = this.manager;\r\n\r\n var _eventData = this._eventData;\r\n var _eventContainer = this._eventContainer;\r\n\r\n _eventData.cancelled = false;\r\n\r\n var aborted = false;\r\n\r\n this.sortGameObjects(previouslyOver);\r\n\r\n for (var i = 0; i < total; i++)\r\n {\r\n var gameObject = previouslyOver[i];\r\n\r\n // Call onOut for everything in the previouslyOver array\r\n for (i = 0; i < total; i++)\r\n {\r\n gameObject = previouslyOver[i];\r\n\r\n if (!gameObject.input)\r\n {\r\n continue;\r\n }\r\n\r\n manager.resetCursor(gameObject.input);\r\n\r\n gameObject.emit(Events.GAMEOBJECT_POINTER_OUT, pointer, _eventContainer);\r\n\r\n totalInteracted++;\r\n\r\n if (_eventData.cancelled || !gameObject.input)\r\n {\r\n aborted = true;\r\n break;\r\n }\r\n\r\n this.emit(Events.GAMEOBJECT_OUT, pointer, gameObject, _eventContainer);\r\n\r\n if (_eventData.cancelled || !gameObject.input)\r\n {\r\n aborted = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!aborted)\r\n {\r\n this.emit(Events.POINTER_OUT, pointer, previouslyOver);\r\n }\r\n }\r\n\r\n this._over[pointer.id] = [];\r\n }\r\n\r\n return totalInteracted;\r\n },\r\n\r\n /**\r\n * An internal method that handles the Pointer over and out events.\r\n *\r\n * @method Phaser.Input.InputPlugin#processOverOutEvents\r\n * @private\r\n * @fires Phaser.Input.Events#GAMEOBJECT_POINTER_OVER\r\n * @fires Phaser.Input.Events#GAMEOBJECT_OVER\r\n * @fires Phaser.Input.Events#POINTER_OVER\r\n * @fires Phaser.Input.Events#GAMEOBJECT_POINTER_OUT\r\n * @fires Phaser.Input.Events#GAMEOBJECT_OUT\r\n * @fires Phaser.Input.Events#POINTER_OUT\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Pointer} pointer - The pointer to check for events against.\r\n *\r\n * @return {integer} The total number of objects interacted with.\r\n */\r\n processOverOutEvents: function (pointer)\r\n {\r\n var currentlyOver = this._temp;\r\n\r\n var i;\r\n var gameObject;\r\n var justOut = [];\r\n var justOver = [];\r\n var stillOver = [];\r\n var previouslyOver = this._over[pointer.id];\r\n var currentlyDragging = this._drag[pointer.id];\r\n\r\n var manager = this.manager;\r\n\r\n // Go through all objects the pointer was previously over, and see if it still is.\r\n // Splits the previouslyOver array into two parts: justOut and stillOver\r\n\r\n for (i = 0; i < previouslyOver.length; i++)\r\n {\r\n gameObject = previouslyOver[i];\r\n\r\n if (currentlyOver.indexOf(gameObject) === -1 && currentlyDragging.indexOf(gameObject) === -1)\r\n {\r\n // Not in the currentlyOver array, so must be outside of this object now\r\n justOut.push(gameObject);\r\n }\r\n else\r\n {\r\n // In the currentlyOver array\r\n stillOver.push(gameObject);\r\n }\r\n }\r\n\r\n // Go through all objects the pointer is currently over (the hit test results)\r\n // and if not in the previouslyOver array we know it's a new entry, so add to justOver\r\n for (i = 0; i < currentlyOver.length; i++)\r\n {\r\n gameObject = currentlyOver[i];\r\n\r\n // Is this newly over?\r\n\r\n if (previouslyOver.indexOf(gameObject) === -1)\r\n {\r\n justOver.push(gameObject);\r\n }\r\n }\r\n\r\n // By this point the arrays are filled, so now we can process what happened...\r\n\r\n // Process the Just Out objects\r\n var total = justOut.length;\r\n\r\n var totalInteracted = 0;\r\n\r\n var _eventData = this._eventData;\r\n var _eventContainer = this._eventContainer;\r\n\r\n _eventData.cancelled = false;\r\n\r\n var aborted = false;\r\n\r\n if (total > 0)\r\n {\r\n this.sortGameObjects(justOut);\r\n\r\n // Call onOut for everything in the justOut array\r\n for (i = 0; i < total; i++)\r\n {\r\n gameObject = justOut[i];\r\n\r\n if (!gameObject.input)\r\n {\r\n continue;\r\n }\r\n\r\n // Reset cursor before we emit the event, in case they want to change it during the event\r\n manager.resetCursor(gameObject.input);\r\n\r\n gameObject.emit(Events.GAMEOBJECT_POINTER_OUT, pointer, _eventContainer);\r\n\r\n totalInteracted++;\r\n\r\n if (_eventData.cancelled || !gameObject.input)\r\n {\r\n aborted = true;\r\n break;\r\n }\r\n\r\n this.emit(Events.GAMEOBJECT_OUT, pointer, gameObject, _eventContainer);\r\n\r\n if (_eventData.cancelled || !gameObject.input)\r\n {\r\n aborted = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!aborted)\r\n {\r\n this.emit(Events.POINTER_OUT, pointer, justOut);\r\n }\r\n }\r\n\r\n // Process the Just Over objects\r\n total = justOver.length;\r\n\r\n _eventData.cancelled = false;\r\n\r\n aborted = false;\r\n\r\n if (total > 0)\r\n {\r\n this.sortGameObjects(justOver);\r\n\r\n // Call onOver for everything in the justOver array\r\n for (i = 0; i < total; i++)\r\n {\r\n gameObject = justOver[i];\r\n\r\n if (!gameObject.input)\r\n {\r\n continue;\r\n }\r\n\r\n // Set cursor before we emit the event, in case they want to change it during the event\r\n manager.setCursor(gameObject.input);\r\n\r\n gameObject.emit(Events.GAMEOBJECT_POINTER_OVER, pointer, gameObject.input.localX, gameObject.input.localY, _eventContainer);\r\n\r\n totalInteracted++;\r\n\r\n if (_eventData.cancelled || !gameObject.input)\r\n {\r\n aborted = true;\r\n break;\r\n }\r\n\r\n this.emit(Events.GAMEOBJECT_OVER, pointer, gameObject, _eventContainer);\r\n\r\n if (_eventData.cancelled || !gameObject.input)\r\n {\r\n aborted = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!aborted)\r\n {\r\n this.emit(Events.POINTER_OVER, pointer, justOver);\r\n }\r\n }\r\n\r\n // Add the contents of justOver to the previously over array\r\n previouslyOver = stillOver.concat(justOver);\r\n\r\n // Then sort it into display list order\r\n this._over[pointer.id] = this.sortGameObjects(previouslyOver);\r\n\r\n return totalInteracted;\r\n },\r\n\r\n /**\r\n * An internal method that handles the Pointer up events.\r\n *\r\n * @method Phaser.Input.InputPlugin#processUpEvents\r\n * @private\r\n * @fires Phaser.Input.Events#GAMEOBJECT_POINTER_UP\r\n * @fires Phaser.Input.Events#GAMEOBJECT_UP\r\n * @fires Phaser.Input.Events#POINTER_UP\r\n * @fires Phaser.Input.Events#POINTER_UP_OUTSIDE\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Pointer} pointer - The pointer to check for events against.\r\n *\r\n * @return {integer} The total number of objects interacted with.\r\n */\r\n processUpEvents: function (pointer)\r\n {\r\n var currentlyOver = this._temp;\r\n\r\n var _eventData = this._eventData;\r\n var _eventContainer = this._eventContainer;\r\n\r\n _eventData.cancelled = false;\r\n\r\n var aborted = false;\r\n\r\n // Go through all objects the pointer was over and fire their events / callbacks\r\n for (var i = 0; i < currentlyOver.length; i++)\r\n {\r\n var gameObject = currentlyOver[i];\r\n\r\n if (!gameObject.input)\r\n {\r\n continue;\r\n }\r\n\r\n gameObject.emit(Events.GAMEOBJECT_POINTER_UP, pointer, gameObject.input.localX, gameObject.input.localY, _eventContainer);\r\n\r\n if (_eventData.cancelled || !gameObject.input)\r\n {\r\n aborted = true;\r\n break;\r\n }\r\n\r\n this.emit(Events.GAMEOBJECT_UP, pointer, gameObject, _eventContainer);\r\n\r\n if (_eventData.cancelled || !gameObject.input)\r\n {\r\n aborted = true;\r\n break;\r\n }\r\n }\r\n\r\n // If they released outside the canvas, but pressed down inside it, we'll still dispatch the event.\r\n if (!aborted && this.manager)\r\n {\r\n if (pointer.upElement === this.manager.game.canvas)\r\n {\r\n this.emit(Events.POINTER_UP, pointer, currentlyOver);\r\n }\r\n else\r\n {\r\n this.emit(Events.POINTER_UP_OUTSIDE, pointer);\r\n }\r\n }\r\n\r\n return currentlyOver.length;\r\n },\r\n\r\n /**\r\n * Queues a Game Object for insertion into this Input Plugin on the next update.\r\n *\r\n * @method Phaser.Input.InputPlugin#queueForInsertion\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} child - The Game Object to add.\r\n *\r\n * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n */\r\n queueForInsertion: function (child)\r\n {\r\n if (this._pendingInsertion.indexOf(child) === -1 && this._list.indexOf(child) === -1)\r\n {\r\n this._pendingInsertion.push(child);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Queues a Game Object for removal from this Input Plugin on the next update.\r\n *\r\n * @method Phaser.Input.InputPlugin#queueForRemoval\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} child - The Game Object to remove.\r\n *\r\n * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n */\r\n queueForRemoval: function (child)\r\n {\r\n this._pendingRemoval.push(child);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the draggable state of the given array of Game Objects.\r\n *\r\n * They can either be set to be draggable, or can have their draggable state removed by passing `false`.\r\n *\r\n * A Game Object will not fire drag events unless it has been specifically enabled for drag.\r\n *\r\n * @method Phaser.Input.InputPlugin#setDraggable\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[])} gameObjects - An array of Game Objects to change the draggable state on.\r\n * @param {boolean} [value=true] - Set to `true` if the Game Objects should be made draggable, `false` if they should be unset.\r\n *\r\n * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n */\r\n setDraggable: function (gameObjects, value)\r\n {\r\n if (value === undefined) { value = true; }\r\n\r\n if (!Array.isArray(gameObjects))\r\n {\r\n gameObjects = [ gameObjects ];\r\n }\r\n\r\n for (var i = 0; i < gameObjects.length; i++)\r\n {\r\n var gameObject = gameObjects[i];\r\n\r\n gameObject.input.draggable = value;\r\n\r\n var index = this._draggable.indexOf(gameObject);\r\n\r\n if (value && index === -1)\r\n {\r\n this._draggable.push(gameObject);\r\n }\r\n else if (!value && index > -1)\r\n {\r\n this._draggable.splice(index, 1);\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Creates a function that can be passed to `setInteractive`, `enable` or `setHitArea` that will handle\r\n * pixel-perfect input detection on an Image or Sprite based Game Object, or any custom class that extends them.\r\n *\r\n * The following will create a sprite that is clickable on any pixel that has an alpha value >= 1.\r\n *\r\n * ```javascript\r\n * this.add.sprite(x, y, key).setInteractive(this.input.makePixelPerfect());\r\n * ```\r\n *\r\n * The following will create a sprite that is clickable on any pixel that has an alpha value >= 150.\r\n *\r\n * ```javascript\r\n * this.add.sprite(x, y, key).setInteractive(this.input.makePixelPerfect(150));\r\n * ```\r\n *\r\n * Once you have made an Interactive Object pixel perfect it impacts all input related events for it: down, up,\r\n * dragstart, drag, etc.\r\n *\r\n * As a pointer interacts with the Game Object it will constantly poll the texture, extracting a single pixel from\r\n * the given coordinates and checking its color values. This is an expensive process, so should only be enabled on\r\n * Game Objects that really need it.\r\n *\r\n * You cannot make non-texture based Game Objects pixel perfect. So this will not work on Graphics, BitmapText,\r\n * Render Textures, Text, Tilemaps, Containers or Particles.\r\n *\r\n * @method Phaser.Input.InputPlugin#makePixelPerfect\r\n * @since 3.10.0\r\n *\r\n * @param {integer} [alphaTolerance=1] - The alpha level that the pixel should be above to be included as a successful interaction.\r\n *\r\n * @return {function} A Pixel Perfect Handler for use as a hitArea shape callback.\r\n */\r\n makePixelPerfect: function (alphaTolerance)\r\n {\r\n if (alphaTolerance === undefined) { alphaTolerance = 1; }\r\n\r\n var textureManager = this.systems.textures;\r\n\r\n return CreatePixelPerfectHandler(textureManager, alphaTolerance);\r\n },\r\n\r\n /**\r\n * Sets the hit area for the given array of Game Objects.\r\n *\r\n * A hit area is typically one of the geometric shapes Phaser provides, such as a `Phaser.Geom.Rectangle`\r\n * or `Phaser.Geom.Circle`. However, it can be any object as long as it works with the provided callback.\r\n *\r\n * If no hit area is provided a Rectangle is created based on the size of the Game Object, if possible\r\n * to calculate.\r\n *\r\n * The hit area callback is the function that takes an `x` and `y` coordinate and returns a boolean if\r\n * those values fall within the area of the shape or not. All of the Phaser geometry objects provide this,\r\n * such as `Phaser.Geom.Rectangle.Contains`.\r\n *\r\n * @method Phaser.Input.InputPlugin#setHitArea\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[])} gameObjects - An array of Game Objects to set the hit area on.\r\n * @param {(Phaser.Types.Input.InputConfiguration|any)} [shape] - Either an input configuration object, or a geometric shape that defines the hit area for the Game Object. If not specified a Rectangle will be used.\r\n * @param {Phaser.Types.Input.HitAreaCallback} [callback] - The 'contains' function to invoke to check if the pointer is within the hit area.\r\n *\r\n * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n */\r\n setHitArea: function (gameObjects, shape, callback)\r\n {\r\n if (shape === undefined)\r\n {\r\n return this.setHitAreaFromTexture(gameObjects);\r\n }\r\n\r\n if (!Array.isArray(gameObjects))\r\n {\r\n gameObjects = [ gameObjects ];\r\n }\r\n\r\n var draggable = false;\r\n var dropZone = false;\r\n var cursor = false;\r\n var useHandCursor = false;\r\n var pixelPerfect = false;\r\n var customHitArea = true;\r\n\r\n // Config object?\r\n if (IsPlainObject(shape))\r\n {\r\n var config = shape;\r\n\r\n shape = GetFastValue(config, 'hitArea', null);\r\n callback = GetFastValue(config, 'hitAreaCallback', null);\r\n draggable = GetFastValue(config, 'draggable', false);\r\n dropZone = GetFastValue(config, 'dropZone', false);\r\n cursor = GetFastValue(config, 'cursor', false);\r\n useHandCursor = GetFastValue(config, 'useHandCursor', false);\r\n\r\n pixelPerfect = GetFastValue(config, 'pixelPerfect', false);\r\n var alphaTolerance = GetFastValue(config, 'alphaTolerance', 1);\r\n\r\n if (pixelPerfect)\r\n {\r\n shape = {};\r\n callback = this.makePixelPerfect(alphaTolerance);\r\n }\r\n\r\n // Still no hitArea or callback?\r\n if (!shape || !callback)\r\n {\r\n this.setHitAreaFromTexture(gameObjects);\r\n customHitArea = false;\r\n }\r\n }\r\n else if (typeof shape === 'function' && !callback)\r\n {\r\n callback = shape;\r\n shape = {};\r\n }\r\n\r\n for (var i = 0; i < gameObjects.length; i++)\r\n {\r\n var gameObject = gameObjects[i];\r\n\r\n if (pixelPerfect && gameObject.type === 'Container')\r\n {\r\n console.warn('Cannot pixelPerfect test a Container. Use a custom callback.');\r\n continue;\r\n }\r\n\r\n var io = (!gameObject.input) ? CreateInteractiveObject(gameObject, shape, callback) : gameObject.input;\r\n\r\n io.customHitArea = customHitArea;\r\n io.dropZone = dropZone;\r\n io.cursor = (useHandCursor) ? 'pointer' : cursor;\r\n\r\n gameObject.input = io;\r\n\r\n if (draggable)\r\n {\r\n this.setDraggable(gameObject);\r\n }\r\n\r\n this.queueForInsertion(gameObject);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the hit area for an array of Game Objects to be a `Phaser.Geom.Circle` shape, using\r\n * the given coordinates and radius to control its position and size.\r\n *\r\n * @method Phaser.Input.InputPlugin#setHitAreaCircle\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[])} gameObjects - An array of Game Objects to set as having a circle hit area.\r\n * @param {number} x - The center of the circle.\r\n * @param {number} y - The center of the circle.\r\n * @param {number} radius - The radius of the circle.\r\n * @param {Phaser.Types.Input.HitAreaCallback} [callback] - The hit area callback. If undefined it uses Circle.Contains.\r\n *\r\n * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n */\r\n setHitAreaCircle: function (gameObjects, x, y, radius, callback)\r\n {\r\n if (callback === undefined) { callback = CircleContains; }\r\n\r\n var shape = new Circle(x, y, radius);\r\n\r\n return this.setHitArea(gameObjects, shape, callback);\r\n },\r\n\r\n /**\r\n * Sets the hit area for an array of Game Objects to be a `Phaser.Geom.Ellipse` shape, using\r\n * the given coordinates and dimensions to control its position and size.\r\n *\r\n * @method Phaser.Input.InputPlugin#setHitAreaEllipse\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[])} gameObjects - An array of Game Objects to set as having an ellipse hit area.\r\n * @param {number} x - The center of the ellipse.\r\n * @param {number} y - The center of the ellipse.\r\n * @param {number} width - The width of the ellipse.\r\n * @param {number} height - The height of the ellipse.\r\n * @param {Phaser.Types.Input.HitAreaCallback} [callback] - The hit area callback. If undefined it uses Ellipse.Contains.\r\n *\r\n * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n */\r\n setHitAreaEllipse: function (gameObjects, x, y, width, height, callback)\r\n {\r\n if (callback === undefined) { callback = EllipseContains; }\r\n\r\n var shape = new Ellipse(x, y, width, height);\r\n\r\n return this.setHitArea(gameObjects, shape, callback);\r\n },\r\n\r\n /**\r\n * Sets the hit area for an array of Game Objects to be a `Phaser.Geom.Rectangle` shape, using\r\n * the Game Objects texture frame to define the position and size of the hit area.\r\n *\r\n * @method Phaser.Input.InputPlugin#setHitAreaFromTexture\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[])} gameObjects - An array of Game Objects to set as having an ellipse hit area.\r\n * @param {Phaser.Types.Input.HitAreaCallback} [callback] - The hit area callback. If undefined it uses Rectangle.Contains.\r\n *\r\n * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n */\r\n setHitAreaFromTexture: function (gameObjects, callback)\r\n {\r\n if (callback === undefined) { callback = RectangleContains; }\r\n\r\n if (!Array.isArray(gameObjects))\r\n {\r\n gameObjects = [ gameObjects ];\r\n }\r\n\r\n for (var i = 0; i < gameObjects.length; i++)\r\n {\r\n var gameObject = gameObjects[i];\r\n\r\n var frame = gameObject.frame;\r\n\r\n var width = 0;\r\n var height = 0;\r\n\r\n if (gameObject.width)\r\n {\r\n width = gameObject.width;\r\n height = gameObject.height;\r\n }\r\n else if (frame)\r\n {\r\n width = frame.realWidth;\r\n height = frame.realHeight;\r\n }\r\n\r\n if (gameObject.type === 'Container' && (width === 0 || height === 0))\r\n {\r\n console.warn('Container.setInteractive must specify a Shape or call setSize() first');\r\n continue;\r\n }\r\n\r\n if (width !== 0 && height !== 0)\r\n {\r\n gameObject.input = CreateInteractiveObject(gameObject, new Rectangle(0, 0, width, height), callback);\r\n\r\n this.queueForInsertion(gameObject);\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the hit area for an array of Game Objects to be a `Phaser.Geom.Rectangle` shape, using\r\n * the given coordinates and dimensions to control its position and size.\r\n *\r\n * @method Phaser.Input.InputPlugin#setHitAreaRectangle\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[])} gameObjects - An array of Game Objects to set as having a rectangular hit area.\r\n * @param {number} x - The top-left of the rectangle.\r\n * @param {number} y - The top-left of the rectangle.\r\n * @param {number} width - The width of the rectangle.\r\n * @param {number} height - The height of the rectangle.\r\n * @param {Phaser.Types.Input.HitAreaCallback} [callback] - The hit area callback. If undefined it uses Rectangle.Contains.\r\n *\r\n * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n */\r\n setHitAreaRectangle: function (gameObjects, x, y, width, height, callback)\r\n {\r\n if (callback === undefined) { callback = RectangleContains; }\r\n\r\n var shape = new Rectangle(x, y, width, height);\r\n\r\n return this.setHitArea(gameObjects, shape, callback);\r\n },\r\n\r\n /**\r\n * Sets the hit area for an array of Game Objects to be a `Phaser.Geom.Triangle` shape, using\r\n * the given coordinates to control the position of its points.\r\n *\r\n * @method Phaser.Input.InputPlugin#setHitAreaTriangle\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.GameObjects.GameObject|Phaser.GameObjects.GameObject[])} gameObjects - An array of Game Objects to set as having a triangular hit area.\r\n * @param {number} x1 - The x coordinate of the first point of the triangle.\r\n * @param {number} y1 - The y coordinate of the first point of the triangle.\r\n * @param {number} x2 - The x coordinate of the second point of the triangle.\r\n * @param {number} y2 - The y coordinate of the second point of the triangle.\r\n * @param {number} x3 - The x coordinate of the third point of the triangle.\r\n * @param {number} y3 - The y coordinate of the third point of the triangle.\r\n * @param {Phaser.Types.Input.HitAreaCallback} [callback] - The hit area callback. If undefined it uses Triangle.Contains.\r\n *\r\n * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n */\r\n setHitAreaTriangle: function (gameObjects, x1, y1, x2, y2, x3, y3, callback)\r\n {\r\n if (callback === undefined) { callback = TriangleContains; }\r\n\r\n var shape = new Triangle(x1, y1, x2, y2, x3, y3);\r\n\r\n return this.setHitArea(gameObjects, shape, callback);\r\n },\r\n\r\n /**\r\n * Creates an Input Debug Shape for the given Game Object.\r\n *\r\n * The Game Object must have _already_ been enabled for input prior to calling this method.\r\n *\r\n * This is intended to assist you during development and debugging.\r\n *\r\n * Debug Shapes can only be created for Game Objects that are using standard Phaser Geometry for input,\r\n * including: Circle, Ellipse, Line, Polygon, Rectangle and Triangle.\r\n *\r\n * Game Objects that are using their automatic hit areas are using Rectangles by default, so will also work.\r\n *\r\n * The Debug Shape is created and added to the display list and is then kept in sync with the Game Object\r\n * it is connected with. Should you need to modify it yourself, such as to hide it, you can access it via\r\n * the Game Object property: `GameObject.input.hitAreaDebug`.\r\n *\r\n * Calling this method on a Game Object that already has a Debug Shape will first destroy the old shape,\r\n * before creating a new one. If you wish to remove the Debug Shape entirely, you should call the\r\n * method `InputPlugin.removeDebug`.\r\n *\r\n * Note that the debug shape will only show the outline of the input area. If the input test is using a\r\n * pixel perfect check, for example, then this is not displayed. If you are using a custom shape, that\r\n * doesn't extend one of the base Phaser Geometry objects, as your hit area, then this method will not\r\n * work.\r\n *\r\n * @method Phaser.Input.InputPlugin#enableDebug\r\n * @since 3.19.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to create the input debug shape for.\r\n * @param {number} [color=0x00ff00] - The outline color of the debug shape.\r\n *\r\n * @return {Phaser.Input.InputPlugin} This Input Plugin.\r\n */\r\n enableDebug: function (gameObject, color)\r\n {\r\n if (color === undefined) { color = 0x00ff00; }\r\n\r\n var input = gameObject.input;\r\n\r\n if (!input || !input.hitArea)\r\n {\r\n return this;\r\n }\r\n\r\n var shape = input.hitArea;\r\n var shapeType = shape.type;\r\n var debug = input.hitAreaDebug;\r\n var factory = this.systems.add;\r\n var updateList = this.systems.updateList;\r\n\r\n if (debug)\r\n {\r\n updateList.remove(debug);\r\n\r\n debug.destroy();\r\n\r\n debug = null;\r\n }\r\n\r\n var offsetx = 0;\r\n var offsety = 0;\r\n switch (shapeType)\r\n {\r\n case GEOM_CONST.CIRCLE:\r\n debug = factory.arc(0, 0, shape.radius);\r\n offsetx = shape.x - shape.radius;\r\n offsety = shape.y - shape.radius;\r\n break;\r\n\r\n case GEOM_CONST.ELLIPSE:\r\n debug = factory.ellipse(0, 0, shape.width, shape.height);\r\n offsetx = shape.x - shape.width / 2;\r\n offsety = shape.y - shape.height / 2;\r\n break;\r\n\r\n case GEOM_CONST.LINE:\r\n debug = factory.line(0, 0, shape.x1, shape.y1, shape.x2, shape.y2);\r\n break;\r\n\r\n case GEOM_CONST.POLYGON:\r\n debug = factory.polygon(0, 0, shape.points);\r\n break;\r\n\r\n case GEOM_CONST.RECTANGLE:\r\n debug = factory.rectangle(0, 0, shape.width, shape.height);\r\n offsetx = shape.x;\r\n offsety = shape.y;\r\n break;\r\n\r\n case GEOM_CONST.TRIANGLE:\r\n debug = factory.triangle(0, 0, shape.x1, shape.y1, shape.x2, shape.y2, shape.x3, shape.y3);\r\n break;\r\n }\r\n\r\n if (debug)\r\n {\r\n debug.isFilled = false;\r\n\r\n debug.preUpdate = function ()\r\n {\r\n debug.setStrokeStyle(1 / gameObject.scale, color);\r\n\r\n debug.setDisplayOrigin(gameObject.displayOriginX, gameObject.displayOriginY);\r\n debug.setRotation(gameObject.rotation);\r\n debug.setScale(gameObject.scaleX, gameObject.scaleY);\r\n debug.setPosition(gameObject.x + offsetx, gameObject.y + offsety);\r\n debug.setScrollFactor(gameObject.scrollFactorX, gameObject.scrollFactorY);\r\n };\r\n\r\n updateList.add(debug);\r\n\r\n input.hitAreaDebug = debug;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Removes an Input Debug Shape from the given Game Object.\r\n *\r\n * The shape is destroyed immediately and the `hitAreaDebug` property is set to `null`.\r\n *\r\n * @method Phaser.Input.InputPlugin#removeDebug\r\n * @since 3.19.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object to remove the input debug shape from.\r\n *\r\n * @return {Phaser.Input.InputPlugin} This Input Plugin.\r\n */\r\n removeDebug: function (gameObject)\r\n {\r\n var input = gameObject.input;\r\n\r\n if (input && input.hitAreaDebug)\r\n {\r\n var debug = input.hitAreaDebug;\r\n\r\n this.systems.updateList.remove(debug);\r\n\r\n debug.destroy();\r\n\r\n input.hitAreaDebug = null;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the Pointers to always poll.\r\n *\r\n * When a pointer is polled it runs a hit test to see which Game Objects are currently below it,\r\n * or being interacted with it, regardless if the Pointer has actually moved or not.\r\n *\r\n * You should enable this if you want objects in your game to fire over / out events, and the objects\r\n * are constantly moving, but the pointer may not have. Polling every frame has additional computation\r\n * costs, especially if there are a large number of interactive objects in your game.\r\n *\r\n * @method Phaser.Input.InputPlugin#setPollAlways\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n */\r\n setPollAlways: function ()\r\n {\r\n return this.setPollRate(0);\r\n },\r\n\r\n /**\r\n * Sets the Pointers to only poll when they are moved or updated.\r\n *\r\n * When a pointer is polled it runs a hit test to see which Game Objects are currently below it,\r\n * or being interacted with it.\r\n *\r\n * @method Phaser.Input.InputPlugin#setPollOnMove\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n */\r\n setPollOnMove: function ()\r\n {\r\n return this.setPollRate(-1);\r\n },\r\n\r\n /**\r\n * Sets the poll rate value. This is the amount of time that should have elapsed before a pointer\r\n * will be polled again. See the `setPollAlways` and `setPollOnMove` methods.\r\n *\r\n * @method Phaser.Input.InputPlugin#setPollRate\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The amount of time, in ms, that should elapsed before re-polling the pointers.\r\n *\r\n * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n */\r\n setPollRate: function (value)\r\n {\r\n this.pollRate = value;\r\n this._pollTimer = 0;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * When set to `true` the global Input Manager will emulate DOM behavior by only emitting events from\r\n * the top-most Scene in the Scene List. By default, if a Scene receives an input event it will then stop the event\r\n * from flowing down to any Scenes below it in the Scene list. To disable this behavior call this method with `false`.\r\n *\r\n * @method Phaser.Input.InputPlugin#setGlobalTopOnly\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} value - Set to `true` to stop processing input events on the Scene that receives it, or `false` to let the event continue down the Scene list.\r\n *\r\n * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n */\r\n setGlobalTopOnly: function (value)\r\n {\r\n this.manager.globalTopOnly = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * When set to `true` this Input Plugin will emulate DOM behavior by only emitting events from\r\n * the top-most Game Objects in the Display List.\r\n *\r\n * If set to `false` it will emit events from all Game Objects below a Pointer, not just the top one.\r\n *\r\n * @method Phaser.Input.InputPlugin#setTopOnly\r\n * @since 3.0.0\r\n *\r\n * @param {boolean} value - `true` to only include the top-most Game Object, or `false` to include all Game Objects in a hit test.\r\n *\r\n * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n */\r\n setTopOnly: function (value)\r\n {\r\n this.topOnly = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Given an array of Game Objects, sort the array and return it, so that the objects are in depth index order\r\n * with the lowest at the bottom.\r\n *\r\n * @method Phaser.Input.InputPlugin#sortGameObjects\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject[]} gameObjects - An array of Game Objects to be sorted.\r\n *\r\n * @return {Phaser.GameObjects.GameObject[]} The sorted array of Game Objects.\r\n */\r\n sortGameObjects: function (gameObjects)\r\n {\r\n if (gameObjects.length < 2)\r\n {\r\n return gameObjects;\r\n }\r\n\r\n this.scene.sys.depthSort();\r\n\r\n return gameObjects.sort(this.sortHandlerGO.bind(this));\r\n },\r\n\r\n /**\r\n * Return the child lowest down the display list (with the smallest index)\r\n * Will iterate through all parent containers, if present.\r\n *\r\n * @method Phaser.Input.InputPlugin#sortHandlerGO\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.GameObjects.GameObject} childA - The first Game Object to compare.\r\n * @param {Phaser.GameObjects.GameObject} childB - The second Game Object to compare.\r\n *\r\n * @return {integer} Returns either a negative or positive integer, or zero if they match.\r\n */\r\n sortHandlerGO: function (childA, childB)\r\n {\r\n if (!childA.parentContainer && !childB.parentContainer)\r\n {\r\n // Quick bail out when neither child has a container\r\n return this.displayList.getIndex(childB) - this.displayList.getIndex(childA);\r\n }\r\n else if (childA.parentContainer === childB.parentContainer)\r\n {\r\n // Quick bail out when both children have the same container\r\n return childB.parentContainer.getIndex(childB) - childA.parentContainer.getIndex(childA);\r\n }\r\n else if (childA.parentContainer === childB)\r\n {\r\n // Quick bail out when childA is a child of childB\r\n return -1;\r\n }\r\n else if (childB.parentContainer === childA)\r\n {\r\n // Quick bail out when childA is a child of childB\r\n return 1;\r\n }\r\n else\r\n {\r\n // Container index check\r\n var listA = childA.getIndexList();\r\n var listB = childB.getIndexList();\r\n var len = Math.min(listA.length, listB.length);\r\n\r\n for (var i = 0; i < len; i++)\r\n {\r\n var indexA = listA[i];\r\n var indexB = listB[i];\r\n\r\n if (indexA === indexB)\r\n {\r\n // Go to the next level down\r\n continue;\r\n }\r\n else\r\n {\r\n // Non-matching parents, so return\r\n return indexB - indexA;\r\n }\r\n }\r\n }\r\n\r\n // Technically this shouldn't happen, but ...\r\n return 0;\r\n },\r\n\r\n /**\r\n * This method should be called from within an input event handler, such as `pointerdown`.\r\n *\r\n * When called, it stops the Input Manager from allowing _this specific event_ to be processed by any other Scene\r\n * not yet handled in the scene list.\r\n *\r\n * @method Phaser.Input.InputPlugin#stopPropagation\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Input.InputPlugin} This InputPlugin object.\r\n */\r\n stopPropagation: function ()\r\n {\r\n this.manager._tempSkip = true;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Adds new Pointer objects to the Input Manager.\r\n *\r\n * By default Phaser creates 2 pointer objects: `mousePointer` and `pointer1`.\r\n *\r\n * You can create more either by calling this method, or by setting the `input.activePointers` property\r\n * in the Game Config, up to a maximum of 10 pointers.\r\n *\r\n * The first 10 pointers are available via the `InputPlugin.pointerX` properties, once they have been added\r\n * via this method.\r\n *\r\n * @method Phaser.Input.InputPlugin#addPointer\r\n * @since 3.10.0\r\n *\r\n * @param {integer} [quantity=1] The number of new Pointers to create. A maximum of 10 is allowed in total.\r\n *\r\n * @return {Phaser.Input.Pointer[]} An array containing all of the new Pointer objects that were created.\r\n */\r\n addPointer: function (quantity)\r\n {\r\n return this.manager.addPointer(quantity);\r\n },\r\n\r\n /**\r\n * Tells the Input system to set a custom cursor.\r\n *\r\n * This cursor will be the default cursor used when interacting with the game canvas.\r\n *\r\n * If an Interactive Object also sets a custom cursor, this is the cursor that is reset after its use.\r\n *\r\n * Any valid CSS cursor value is allowed, including paths to image files, i.e.:\r\n *\r\n * ```javascript\r\n * this.input.setDefaultCursor('url(assets/cursors/sword.cur), pointer');\r\n * ```\r\n *\r\n * Please read about the differences between browsers when it comes to the file formats and sizes they support:\r\n *\r\n * https://developer.mozilla.org/en-US/docs/Web/CSS/cursor\r\n * https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_User_Interface/Using_URL_values_for_the_cursor_property\r\n *\r\n * It's up to you to pick a suitable cursor format that works across the range of browsers you need to support.\r\n *\r\n * @method Phaser.Input.InputPlugin#setDefaultCursor\r\n * @since 3.10.0\r\n *\r\n * @param {string} cursor - The CSS to be used when setting the default cursor.\r\n *\r\n * @return {Phaser.Input.InputPlugin} This Input instance.\r\n */\r\n setDefaultCursor: function (cursor)\r\n {\r\n this.manager.setDefaultCursor(cursor);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * The Scene that owns this plugin is transitioning in.\r\n *\r\n * @method Phaser.Input.InputPlugin#transitionIn\r\n * @private\r\n * @since 3.5.0\r\n */\r\n transitionIn: function ()\r\n {\r\n this.enabled = this.settings.transitionAllowInput;\r\n },\r\n\r\n /**\r\n * The Scene that owns this plugin has finished transitioning in.\r\n *\r\n * @method Phaser.Input.InputPlugin#transitionComplete\r\n * @private\r\n * @since 3.5.0\r\n */\r\n transitionComplete: function ()\r\n {\r\n if (!this.settings.transitionAllowInput)\r\n {\r\n this.enabled = true;\r\n }\r\n },\r\n\r\n /**\r\n * The Scene that owns this plugin is transitioning out.\r\n *\r\n * @method Phaser.Input.InputPlugin#transitionOut\r\n * @private\r\n * @since 3.5.0\r\n */\r\n transitionOut: function ()\r\n {\r\n this.enabled = this.settings.transitionAllowInput;\r\n },\r\n\r\n /**\r\n * The Scene that owns this plugin is shutting down.\r\n * We need to kill and reset all internal properties as well as stop listening to Scene events.\r\n *\r\n * @method Phaser.Input.InputPlugin#shutdown\r\n * @fires Phaser.Input.Events#SHUTDOWN\r\n * @private\r\n * @since 3.0.0\r\n */\r\n shutdown: function ()\r\n {\r\n // Registered input plugins listen for this\r\n this.pluginEvents.emit(Events.SHUTDOWN);\r\n\r\n this._temp.length = 0;\r\n this._list.length = 0;\r\n this._draggable.length = 0;\r\n this._pendingRemoval.length = 0;\r\n this._pendingInsertion.length = 0;\r\n this._dragState.length = 0;\r\n\r\n for (var i = 0; i < 10; i++)\r\n {\r\n this._drag[i] = [];\r\n this._over[i] = [];\r\n }\r\n\r\n this.removeAllListeners();\r\n\r\n var eventEmitter = this.systems.events;\r\n\r\n eventEmitter.off(SceneEvents.TRANSITION_START, this.transitionIn, this);\r\n eventEmitter.off(SceneEvents.TRANSITION_OUT, this.transitionOut, this);\r\n eventEmitter.off(SceneEvents.TRANSITION_COMPLETE, this.transitionComplete, this);\r\n eventEmitter.off(SceneEvents.PRE_UPDATE, this.preUpdate, this);\r\n\r\n this.manager.events.off(Events.GAME_OUT, this.onGameOut, this);\r\n this.manager.events.off(Events.GAME_OVER, this.onGameOver, this);\r\n\r\n eventEmitter.off(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n },\r\n\r\n /**\r\n * The Scene that owns this plugin is being destroyed.\r\n * We need to shutdown and then kill off all external references.\r\n *\r\n * @method Phaser.Input.InputPlugin#destroy\r\n * @fires Phaser.Input.Events#DESTROY\r\n * @private\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.shutdown();\r\n\r\n // Registered input plugins listen for this\r\n this.pluginEvents.emit(Events.DESTROY);\r\n\r\n this.pluginEvents.removeAllListeners();\r\n\r\n this.scene.sys.events.off(SceneEvents.START, this.start, this);\r\n\r\n this.scene = null;\r\n this.cameras = null;\r\n this.manager = null;\r\n this.events = null;\r\n this.mouse = null;\r\n },\r\n\r\n /**\r\n * The x coordinates of the ActivePointer based on the first camera in the camera list.\r\n * This is only safe to use if your game has just 1 non-transformed camera and doesn't use multi-touch.\r\n *\r\n * @name Phaser.Input.InputPlugin#x\r\n * @type {number}\r\n * @readonly\r\n * @since 3.0.0\r\n */\r\n x: {\r\n\r\n get: function ()\r\n {\r\n return this.manager.activePointer.x;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The y coordinates of the ActivePointer based on the first camera in the camera list.\r\n * This is only safe to use if your game has just 1 non-transformed camera and doesn't use multi-touch.\r\n *\r\n * @name Phaser.Input.InputPlugin#y\r\n * @type {number}\r\n * @readonly\r\n * @since 3.0.0\r\n */\r\n y: {\r\n\r\n get: function ()\r\n {\r\n return this.manager.activePointer.y;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Are any mouse or touch pointers currently over the game canvas?\r\n *\r\n * @name Phaser.Input.InputPlugin#isOver\r\n * @type {boolean}\r\n * @readonly\r\n * @since 3.16.0\r\n */\r\n isOver: {\r\n\r\n get: function ()\r\n {\r\n return this.manager.isOver;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The mouse has its own unique Pointer object, which you can reference directly if making a _desktop specific game_.\r\n * If you are supporting both desktop and touch devices then do not use this property, instead use `activePointer`\r\n * which will always map to the most recently interacted pointer.\r\n *\r\n * @name Phaser.Input.InputPlugin#mousePointer\r\n * @type {Phaser.Input.Pointer}\r\n * @readonly\r\n * @since 3.10.0\r\n */\r\n mousePointer: {\r\n\r\n get: function ()\r\n {\r\n return this.manager.mousePointer;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The current active input Pointer.\r\n *\r\n * @name Phaser.Input.InputPlugin#activePointer\r\n * @type {Phaser.Input.Pointer}\r\n * @readonly\r\n * @since 3.0.0\r\n */\r\n activePointer: {\r\n\r\n get: function ()\r\n {\r\n return this.manager.activePointer;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * A touch-based Pointer object.\r\n * This will be `undefined` by default unless you add a new Pointer using `addPointer`.\r\n *\r\n * @name Phaser.Input.InputPlugin#pointer1\r\n * @type {Phaser.Input.Pointer}\r\n * @readonly\r\n * @since 3.10.0\r\n */\r\n pointer1: {\r\n\r\n get: function ()\r\n {\r\n return this.manager.pointers[1];\r\n }\r\n\r\n },\r\n\r\n /**\r\n * A touch-based Pointer object.\r\n * This will be `undefined` by default unless you add a new Pointer using `addPointer`.\r\n *\r\n * @name Phaser.Input.InputPlugin#pointer2\r\n * @type {Phaser.Input.Pointer}\r\n * @readonly\r\n * @since 3.10.0\r\n */\r\n pointer2: {\r\n\r\n get: function ()\r\n {\r\n return this.manager.pointers[2];\r\n }\r\n\r\n },\r\n\r\n /**\r\n * A touch-based Pointer object.\r\n * This will be `undefined` by default unless you add a new Pointer using `addPointer`.\r\n *\r\n * @name Phaser.Input.InputPlugin#pointer3\r\n * @type {Phaser.Input.Pointer}\r\n * @readonly\r\n * @since 3.10.0\r\n */\r\n pointer3: {\r\n\r\n get: function ()\r\n {\r\n return this.manager.pointers[3];\r\n }\r\n\r\n },\r\n\r\n /**\r\n * A touch-based Pointer object.\r\n * This will be `undefined` by default unless you add a new Pointer using `addPointer`.\r\n *\r\n * @name Phaser.Input.InputPlugin#pointer4\r\n * @type {Phaser.Input.Pointer}\r\n * @readonly\r\n * @since 3.10.0\r\n */\r\n pointer4: {\r\n\r\n get: function ()\r\n {\r\n return this.manager.pointers[4];\r\n }\r\n\r\n },\r\n\r\n /**\r\n * A touch-based Pointer object.\r\n * This will be `undefined` by default unless you add a new Pointer using `addPointer`.\r\n *\r\n * @name Phaser.Input.InputPlugin#pointer5\r\n * @type {Phaser.Input.Pointer}\r\n * @readonly\r\n * @since 3.10.0\r\n */\r\n pointer5: {\r\n\r\n get: function ()\r\n {\r\n return this.manager.pointers[5];\r\n }\r\n\r\n },\r\n\r\n /**\r\n * A touch-based Pointer object.\r\n * This will be `undefined` by default unless you add a new Pointer using `addPointer`.\r\n *\r\n * @name Phaser.Input.InputPlugin#pointer6\r\n * @type {Phaser.Input.Pointer}\r\n * @readonly\r\n * @since 3.10.0\r\n */\r\n pointer6: {\r\n\r\n get: function ()\r\n {\r\n return this.manager.pointers[6];\r\n }\r\n\r\n },\r\n\r\n /**\r\n * A touch-based Pointer object.\r\n * This will be `undefined` by default unless you add a new Pointer using `addPointer`.\r\n *\r\n * @name Phaser.Input.InputPlugin#pointer7\r\n * @type {Phaser.Input.Pointer}\r\n * @readonly\r\n * @since 3.10.0\r\n */\r\n pointer7: {\r\n\r\n get: function ()\r\n {\r\n return this.manager.pointers[7];\r\n }\r\n\r\n },\r\n\r\n /**\r\n * A touch-based Pointer object.\r\n * This will be `undefined` by default unless you add a new Pointer using `addPointer`.\r\n *\r\n * @name Phaser.Input.InputPlugin#pointer8\r\n * @type {Phaser.Input.Pointer}\r\n * @readonly\r\n * @since 3.10.0\r\n */\r\n pointer8: {\r\n\r\n get: function ()\r\n {\r\n return this.manager.pointers[8];\r\n }\r\n\r\n },\r\n\r\n /**\r\n * A touch-based Pointer object.\r\n * This will be `undefined` by default unless you add a new Pointer using `addPointer`.\r\n *\r\n * @name Phaser.Input.InputPlugin#pointer9\r\n * @type {Phaser.Input.Pointer}\r\n * @readonly\r\n * @since 3.10.0\r\n */\r\n pointer9: {\r\n\r\n get: function ()\r\n {\r\n return this.manager.pointers[9];\r\n }\r\n\r\n },\r\n\r\n /**\r\n * A touch-based Pointer object.\r\n * This will be `undefined` by default unless you add a new Pointer using `addPointer`.\r\n *\r\n * @name Phaser.Input.InputPlugin#pointer10\r\n * @type {Phaser.Input.Pointer}\r\n * @readonly\r\n * @since 3.10.0\r\n */\r\n pointer10: {\r\n\r\n get: function ()\r\n {\r\n return this.manager.pointers[10];\r\n }\r\n\r\n }\r\n\r\n});\r\n\r\nPluginCache.register('InputPlugin', InputPlugin, 'input');\r\n\r\nmodule.exports = InputPlugin;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9JbnB1dFBsdWdpbi5qcz9jYWFhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsOEVBQXVCO0FBQzVDLHFCQUFxQixtQkFBTyxDQUFDLGtGQUF5QjtBQUN0RCxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ3BDLFlBQVksbUJBQU8sQ0FBQyx5REFBUztBQUM3Qiw4QkFBOEIsbUJBQU8sQ0FBQyw2RkFBMkI7QUFDakUsZ0NBQWdDLG1CQUFPLENBQUMsaUdBQTZCO0FBQ3JFLHNCQUFzQixtQkFBTyxDQUFDLG9HQUFrQztBQUNoRSxjQUFjLG1CQUFPLENBQUMsa0ZBQXlCO0FBQy9DLHNCQUFzQixtQkFBTyxDQUFDLG9GQUEwQjtBQUN4RCxhQUFhLG1CQUFPLENBQUMsaUVBQVU7QUFDL0IsbUJBQW1CLG1CQUFPLENBQUMsNERBQWU7QUFDMUMsbUJBQW1CLG1CQUFPLENBQUMsNEZBQThCO0FBQ3pELGlCQUFpQixtQkFBTyxDQUFDLDhEQUFlO0FBQ3hDLHVCQUF1QixtQkFBTyxDQUFDLCtFQUFvQjtBQUNuRCxvQkFBb0IsbUJBQU8sQ0FBQyw4RkFBK0I7QUFDM0Qsa0JBQWtCLG1CQUFPLENBQUMsZ0ZBQXdCO0FBQ2xELGdCQUFnQixtQkFBTyxDQUFDLDBGQUE2QjtBQUNyRCx3QkFBd0IsbUJBQU8sQ0FBQyx3RkFBNEI7QUFDNUQsa0JBQWtCLG1CQUFPLENBQUMsd0VBQWlCO0FBQzNDLGVBQWUsbUJBQU8sQ0FBQyxzRkFBMkI7QUFDbEQsdUJBQXVCLG1CQUFPLENBQUMsc0ZBQTJCOztBQUUxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsd0NBQXdDO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEI7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixpREFBaUQ7QUFDNUUseUJBQXlCLCtDQUErQztBQUN4RTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjs7QUFFdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCOztBQUV0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSx1QkFBdUIsY0FBYztBQUNyQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLG1CQUFtQjtBQUN0QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLG1CQUFtQjtBQUN0QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSx1QkFBdUI7QUFDdEM7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLG1CQUFtQjs7QUFFekQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSw0Q0FBNEM7QUFDM0QsZUFBZSxtQ0FBbUM7QUFDbEQsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsa0JBQWtCOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFCQUFxQjtBQUNwQztBQUNBLGdCQUFnQixnQ0FBZ0M7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLG9CQUFvQjtBQUMzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQixpQkFBaUI7QUFDNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUJBQXFCO0FBQ3BDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsdUJBQXVCLDBCQUEwQjtBQUNqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQkFBcUI7QUFDcEM7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQkFBcUI7QUFDcEMsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQkFBcUI7QUFDcEMsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQkFBcUI7QUFDcEM7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQkFBcUI7QUFDcEM7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx1QkFBdUIsMEJBQTBCO0FBQ2pEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUJBQXFCO0FBQ3BDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUJBQXFCO0FBQ3BDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsaUJBQWlCO0FBQ3hDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUJBQXFCO0FBQ3BDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsdUJBQXVCLDBCQUEwQjtBQUNqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUJBQXFCO0FBQ3BDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVCQUF1QiwwQkFBMEI7QUFDakQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUJBQXFCO0FBQ3BDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsMkJBQTJCLFdBQVc7QUFDdEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFCQUFxQjtBQUNwQztBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLDJCQUEyQixXQUFXO0FBQ3RDO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsV0FBVztBQUN0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFCQUFxQjtBQUNwQztBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLDJCQUEyQjtBQUM5QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQiwwQkFBMEI7QUFDN0M7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUIsV0FBVztBQUNsQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVCQUF1QixXQUFXO0FBQ2xDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUJBQXFCO0FBQ3BDO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLHVCQUF1QiwwQkFBMEI7QUFDakQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdFQUFnRTtBQUMvRSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxjQUFjOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsd0JBQXdCO0FBQy9DO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLFNBQVM7QUFDekI7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLG9CQUFvQjs7QUFFL0Q7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnRUFBZ0U7QUFDL0UsZUFBZSw0Q0FBNEM7QUFDM0QsZUFBZSxtQ0FBbUM7QUFDbEQ7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsd0JBQXdCO0FBQy9DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdFQUFnRTtBQUMvRSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLG1DQUFtQztBQUNsRDtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLDJCQUEyQjs7QUFFaEU7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnRUFBZ0U7QUFDL0UsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsbUNBQW1DO0FBQ2xEO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsNEJBQTRCOztBQUVqRTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdFQUFnRTtBQUMvRSxlQUFlLG1DQUFtQztBQUNsRDtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLDhCQUE4Qjs7QUFFbkU7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLHdCQUF3QjtBQUMvQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0VBQWdFO0FBQy9FLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLG1DQUFtQztBQUNsRDtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLDhCQUE4Qjs7QUFFbkU7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnRUFBZ0U7QUFDL0UsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxtQ0FBbUM7QUFDbEQ7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyw2QkFBNkI7O0FBRWxFOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLGtCQUFrQjs7QUFFcEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnQ0FBZ0M7QUFDL0M7QUFDQSxnQkFBZ0IsZ0NBQWdDO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0MsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJCQUEyQixTQUFTO0FBQ3BDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQix1QkFBdUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IseUJBQXlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLFFBQVE7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvSW5wdXRQbHVnaW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDaXJjbGUgPSByZXF1aXJlKCcuLi9nZW9tL2NpcmNsZS9DaXJjbGUnKTtcclxudmFyIENpcmNsZUNvbnRhaW5zID0gcmVxdWlyZSgnLi4vZ2VvbS9jaXJjbGUvQ29udGFpbnMnKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi9jb25zdCcpO1xyXG52YXIgQ3JlYXRlSW50ZXJhY3RpdmVPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUludGVyYWN0aXZlT2JqZWN0Jyk7XHJcbnZhciBDcmVhdGVQaXhlbFBlcmZlY3RIYW5kbGVyID0gcmVxdWlyZSgnLi9DcmVhdGVQaXhlbFBlcmZlY3RIYW5kbGVyJyk7XHJcbnZhciBEaXN0YW5jZUJldHdlZW4gPSByZXF1aXJlKCcuLi9tYXRoL2Rpc3RhbmNlL0Rpc3RhbmNlQmV0d2VlbicpO1xyXG52YXIgRWxsaXBzZSA9IHJlcXVpcmUoJy4uL2dlb20vZWxsaXBzZS9FbGxpcHNlJyk7XHJcbnZhciBFbGxpcHNlQ29udGFpbnMgPSByZXF1aXJlKCcuLi9nZW9tL2VsbGlwc2UvQ29udGFpbnMnKTtcclxudmFyIEV2ZW50cyA9IHJlcXVpcmUoJy4vZXZlbnRzJyk7XHJcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBHRU9NX0NPTlNUID0gcmVxdWlyZSgnLi4vZ2VvbS9jb25zdCcpO1xyXG52YXIgSW5wdXRQbHVnaW5DYWNoZSA9IHJlcXVpcmUoJy4vSW5wdXRQbHVnaW5DYWNoZScpO1xyXG52YXIgSXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4uL3V0aWxzL29iamVjdC9Jc1BsYWluT2JqZWN0Jyk7XHJcbnZhciBQbHVnaW5DYWNoZSA9IHJlcXVpcmUoJy4uL3BsdWdpbnMvUGx1Z2luQ2FjaGUnKTtcclxudmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4uL2dlb20vcmVjdGFuZ2xlL1JlY3RhbmdsZScpO1xyXG52YXIgUmVjdGFuZ2xlQ29udGFpbnMgPSByZXF1aXJlKCcuLi9nZW9tL3JlY3RhbmdsZS9Db250YWlucycpO1xyXG52YXIgU2NlbmVFdmVudHMgPSByZXF1aXJlKCcuLi9zY2VuZS9ldmVudHMnKTtcclxudmFyIFRyaWFuZ2xlID0gcmVxdWlyZSgnLi4vZ2VvbS90cmlhbmdsZS9UcmlhbmdsZScpO1xyXG52YXIgVHJpYW5nbGVDb250YWlucyA9IHJlcXVpcmUoJy4uL2dlb20vdHJpYW5nbGUvQ29udGFpbnMnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBJbnB1dCBQbHVnaW4gYmVsb25ncyB0byBhIFNjZW5lIGFuZCBoYW5kbGVzIGFsbCBpbnB1dCByZWxhdGVkIGV2ZW50cyBhbmQgb3BlcmF0aW9ucyBmb3IgaXQuXHJcbiAqXHJcbiAqIFlvdSBjYW4gYWNjZXNzIGl0IGZyb20gd2l0aGluIGEgU2NlbmUgdXNpbmcgYHRoaXMuaW5wdXRgLlxyXG4gKlxyXG4gKiBJdCBlbWl0cyBldmVudHMgZGlyZWN0bHkuIEZvciBleGFtcGxlLCB5b3UgY2FuIGRvOlxyXG4gKlxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMuaW5wdXQub24oJ3BvaW50ZXJkb3duJywgY2FsbGJhY2ssIGNvbnRleHQpO1xyXG4gKiBgYGBcclxuICpcclxuICogVG8gbGlzdGVuIGZvciBhIHBvaW50ZXIgZG93biBldmVudCBhbnl3aGVyZSBvbiB0aGUgZ2FtZSBjYW52YXMuXHJcbiAqXHJcbiAqIEdhbWUgT2JqZWN0cyBjYW4gYmUgZW5hYmxlZCBmb3IgaW5wdXQgYnkgY2FsbGluZyB0aGVpciBgc2V0SW50ZXJhY3RpdmVgIG1ldGhvZC4gQWZ0ZXIgd2hpY2ggdGhleVxyXG4gKiB3aWxsIGRpcmVjdGx5IGVtaXQgaW5wdXQgZXZlbnRzOlxyXG4gKlxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHZhciBzcHJpdGUgPSB0aGlzLmFkZC5zcHJpdGUoeCwgeSwgdGV4dHVyZSk7XHJcbiAqIHNwcml0ZS5zZXRJbnRlcmFjdGl2ZSgpO1xyXG4gKiBzcHJpdGUub24oJ3BvaW50ZXJkb3duJywgY2FsbGJhY2ssIGNvbnRleHQpO1xyXG4gKiBgYGBcclxuICpcclxuICogVGhlcmUgYXJlIGxvdHMgb2YgZ2FtZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIHJlbGF0aW5nIHRvIGlucHV0LlxyXG4gKiBTZWUgdGhlIFtJbnB1dCBDb25maWcgb2JqZWN0XXtAbGlua2NvZGUgUGhhc2VyLlR5cGVzLkNvcmUuSW5wdXRDb25maWd9IGZvciBtb3JlIGRldGFpbHMsIGluY2x1ZGluZyBob3cgdG8gZGVhbCB3aXRoIFBoYXNlclxyXG4gKiBsaXN0ZW5pbmcgZm9yIGlucHV0IGV2ZW50cyBvdXRzaWRlIG9mIHRoZSBjYW52YXMsIGhvdyB0byBzZXQgYSBkZWZhdWx0IG51bWJlciBvZiBwb2ludGVycywgaW5wdXRcclxuICogY2FwdHVyZSBzZXR0aW5ncyBhbmQgbW9yZS5cclxuICpcclxuICogUGxlYXNlIGFsc28gc2VlIHRoZSBJbnB1dCBleGFtcGxlcyBhbmQgdHV0b3JpYWxzIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLlxyXG4gKlxyXG4gKiBAY2xhc3MgSW5wdXRQbHVnaW5cclxuICogQGV4dGVuZHMgUGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5JbnB1dFxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlNjZW5lfSBzY2VuZSAtIEEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSB0aGF0IHRoaXMgSW5wdXQgUGx1Z2luIGlzIHJlc3BvbnNpYmxlIGZvci5cclxuICovXHJcbnZhciBJbnB1dFBsdWdpbiA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogRXZlbnRFbWl0dGVyLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gSW5wdXRQbHVnaW4gKHNjZW5lKVxyXG4gICAge1xyXG4gICAgICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgdGhhdCB0aGlzIElucHV0IFBsdWdpbiBpcyByZXNwb25zaWJsZSBmb3IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jc2NlbmVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIFN5c3RlbXMgY2xhc3MuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jc3lzdGVtc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmVzLlN5c3RlbXN9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zID0gc2NlbmUuc3lzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgU3lzdGVtcyBTZXR0aW5ncy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNzZXR0aW5nc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVHlwZXMuU2NlbmVzLlNldHRpbmdzT2JqZWN0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBzY2VuZS5zeXMuc2V0dGluZ3M7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBHYW1lIElucHV0IE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jbWFuYWdlclxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWFuYWdlciA9IHNjZW5lLnN5cy5nYW1lLmlucHV0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCBldmVudCBxdWV1ZSB1c2VkIGZvciBwbHVnaW5zIG9ubHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jcGx1Z2luRXZlbnRzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5FdmVudHMuRXZlbnRFbWl0dGVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGx1Z2luRXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBgdHJ1ZWAgdGhpcyBJbnB1dCBQbHVnaW4gd2lsbCBwcm9jZXNzIERPTSBpbnB1dCBldmVudHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jZW5hYmxlZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgRGlzcGxheSBMaXN0LiBUaGlzIHByb3BlcnR5IGlzIHNldCBkdXJpbmcgdGhlIGBib290YCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jZGlzcGxheUxpc3RcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLkRpc3BsYXlMaXN0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUxpc3Q7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSBDYW1lcmFzIE1hbmFnZXIuIFRoaXMgcHJvcGVydHkgaXMgc2V0IGR1cmluZyB0aGUgYGJvb3RgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNjYW1lcmFzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5DYW1lcmFzLlNjZW5lMkQuQ2FtZXJhTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNhbWVyYXM7XHJcblxyXG4gICAgICAgIC8vICBJbmplY3QgdGhlIGF2YWlsYWJsZSBpbnB1dCBwbHVnaW5zIGludG8gdGhpcyBjbGFzc1xyXG4gICAgICAgIElucHV0UGx1Z2luQ2FjaGUuaW5zdGFsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIE1vdXNlIE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBUaGlzIHByb3BlcnR5IGlzIG9ubHkgc2V0IGlmIE1vdXNlIHN1cHBvcnQgaGFzIGJlZW4gZW5hYmxlZCBpbiB5b3VyIEdhbWUgQ29uZmlndXJhdGlvbiBmaWxlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogSWYgeW91IGp1c3Qgd2lzaCB0byBnZXQgYWNjZXNzIHRvIHRoZSBtb3VzZSBwb2ludGVyLCB1c2UgdGhlIGBtb3VzZVBvaW50ZXJgIHByb3BlcnR5IGluc3RlYWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jbW91c2VcclxuICAgICAgICAgKiBAdHlwZSB7P1BoYXNlci5JbnB1dC5Nb3VzZS5Nb3VzZU1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tb3VzZSA9IHRoaXMubWFuYWdlci5tb3VzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hlbiBzZXQgdG8gYHRydWVgICh0aGUgZGVmYXVsdCkgdGhlIElucHV0IFBsdWdpbiB3aWxsIGVtdWxhdGUgRE9NIGJlaGF2aW9yIGJ5IG9ubHkgZW1pdHRpbmcgZXZlbnRzIGZyb21cclxuICAgICAgICAgKiB0aGUgdG9wLW1vc3QgR2FtZSBPYmplY3RzIGluIHRoZSBEaXNwbGF5IExpc3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBJZiBzZXQgdG8gYGZhbHNlYCBpdCB3aWxsIGVtaXQgZXZlbnRzIGZyb20gYWxsIEdhbWUgT2JqZWN0cyBiZWxvdyBhIFBvaW50ZXIsIG5vdCBqdXN0IHRoZSB0b3Agb25lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3RvcE9ubHlcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50b3BPbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSG93IG9mdGVuIHNob3VsZCB0aGUgUG9pbnRlcnMgYmUgY2hlY2tlZD9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFRoZSB2YWx1ZSBpcyBhIHRpbWUsIGdpdmVuIGluIG1zLCBhbmQgaXMgdGhlIHRpbWUgdGhhdCBtdXN0IGhhdmUgZWxhcHNlZCBiZXR3ZWVuIGdhbWUgc3RlcHMgYmVmb3JlXHJcbiAgICAgICAgICogdGhlIFBvaW50ZXJzIHdpbGwgYmUgcG9sbGVkIGFnYWluLiBXaGVuIGEgcG9pbnRlciBpcyBwb2xsZWQgaXQgcnVucyBhIGhpdCB0ZXN0IHRvIHNlZSB3aGljaCBHYW1lXHJcbiAgICAgICAgICogT2JqZWN0cyBhcmUgY3VycmVudGx5IGJlbG93IGl0LCBvciBiZWluZyBpbnRlcmFjdGVkIHdpdGggaXQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBQb2ludGVycyB3aWxsICphbHdheXMqIGJlIGNoZWNrZWQgaWYgdGhleSBoYXZlIGJlZW4gbW92ZWQgYnkgdGhlIHVzZXIsIG9yIHByZXNzIG9yIHJlbGVhc2VkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhpcyBwcm9wZXJ0eSBvbmx5IGNvbnRyb2xzIGhvdyBvZnRlbiB0aGV5IHdpbGwgYmUgcG9sbGVkIGlmIHRoZXkgaGF2ZSBub3QgYmVlbiB1cGRhdGVkLlxyXG4gICAgICAgICAqIFlvdSBzaG91bGQgc2V0IHRoaXMgaWYgeW91IHdhbnQgdG8gaGF2ZSBHYW1lIE9iamVjdHMgY29uc3RhbnRseSBjaGVjayBhZ2FpbnN0IHRoZSBwb2ludGVycywgZXZlblxyXG4gICAgICAgICAqIGlmIHRoZSBwb2ludGVyIGRpZG4ndCBpdHNlbGYgbW92ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFNldCB0byAwIHRvIHBvbGwgY29uc3RhbnRseS4gU2V0IHRvIC0xIHRvIG9ubHkgcG9sbCBvbiB1c2VyIG1vdmVtZW50LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3BvbGxSYXRlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgLTFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBvbGxSYXRlID0gLTE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIHBvbGwgdGltZXIgdmFsdWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jX3BvbGxUaW1lclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fcG9sbFRpbWVyID0gMDtcclxuXHJcbiAgICAgICAgdmFyIF9ldmVudERhdGEgPSB7IGNhbmNlbGxlZDogZmFsc2UgfTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgZXZlbnQgcHJvcGFnYXRpb24gY2FsbGJhY2sgY29udGFpbmVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI19ldmVudENvbnRhaW5lclxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVHlwZXMuSW5wdXQuRXZlbnREYXRhfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2V2ZW50Q29udGFpbmVyID0ge1xyXG4gICAgICAgICAgICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uICgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF9ldmVudERhdGEuY2FuY2VsbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIGV2ZW50IHByb3BhZ2F0aW9uIGRhdGEgb2JqZWN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI19ldmVudERhdGFcclxuICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTMuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2V2ZW50RGF0YSA9IF9ldmVudERhdGE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBkaXN0YW5jZSwgaW4gcGl4ZWxzLCBhIHBvaW50ZXIgaGFzIHRvIG1vdmUgd2hpbGUgYmVpbmcgaGVsZCBkb3duLCBiZWZvcmUgaXQgdGhpbmtzIGl0IGlzIGJlaW5nIGRyYWdnZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jZHJhZ0Rpc3RhbmNlVGhyZXNob2xkXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kcmFnRGlzdGFuY2VUaHJlc2hvbGQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgYW1vdW50IG9mIHRpbWUsIGluIG1zLCBhIHBvaW50ZXIgaGFzIHRvIGJlIGhlbGQgZG93biBiZWZvcmUgaXQgdGhpbmtzIGl0IGlzIGRyYWdnaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHQgcG9sbGluZyByYXRlIGlzIHRvIHBvbGwgb25seSBvbiBtb3ZlIHNvIG9uY2UgdGhlIHRpbWUgdGhyZXNob2xkIGlzIHJlYWNoZWQgdGhlXHJcbiAgICAgICAgICogZHJhZyBldmVudCB3aWxsIG5vdCBzdGFydCB1bnRpbCB5b3UgbW92ZSB0aGUgbW91c2UuIElmIHlvdSB3YW50IGl0IHRvIHN0YXJ0IGltbWVkaWF0ZWx5XHJcbiAgICAgICAgICogd2hlbiB0aGUgdGltZSB0aHJlc2hvbGQgaXMgcmVhY2hlZCwgeW91IG11c3QgaW5jcmVhc2UgdGhlIHBvbGxpbmcgcmF0ZSBieSBjYWxsaW5nXHJcbiAgICAgICAgICogW3NldFBvbGxBbHdheXNde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jc2V0UG9sbEFsd2F5c30gb3JcclxuICAgICAgICAgKiBbc2V0UG9sbFJhdGVde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jc2V0UG9sbFJhdGV9LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI2RyYWdUaW1lVGhyZXNob2xkXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kcmFnVGltZVRocmVzaG9sZCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFVzZWQgdG8gdGVtcG9yYXJpbHkgc3RvcmUgdGhlIHJlc3VsdHMgb2YgdGhlIEhpdCBUZXN0XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jX3RlbXBcclxuICAgICAgICAgKiBAdHlwZSB7YXJyYXl9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCBbXVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RlbXAgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVXNlZCB0byB0ZW1wb3JhcmlseSBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgSGl0IFRlc3QgZHJvcFpvbmVzXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jX3RlbXBab25lc1xyXG4gICAgICAgICAqIEB0eXBlIHthcnJheX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fdGVtcFpvbmVzID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgbGlzdCBvZiBhbGwgR2FtZSBPYmplY3RzIHRoYXQgaGF2ZSBiZWVuIHNldCB0byBiZSBpbnRlcmFjdGl2ZSBpbiB0aGUgU2NlbmUgdGhpcyBJbnB1dCBQbHVnaW4gaXMgbWFuYWdpbmcuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jX2xpc3RcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fbGlzdCA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBPYmplY3RzIHdhaXRpbmcgdG8gYmUgaW5zZXJ0ZWQgdG8gdGhlIGxpc3Qgb24gdGhlIG5leHQgY2FsbCB0byAnYmVnaW4nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI19wZW5kaW5nSW5zZXJ0aW9uXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCBbXVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3BlbmRpbmdJbnNlcnRpb24gPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogT2JqZWN0cyB3YWl0aW5nIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCBvbiB0aGUgbmV4dCBjYWxsIHRvICdiZWdpbicuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jX3BlbmRpbmdSZW1vdmFsXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAZGVmYXVsdCBbXVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3BlbmRpbmdSZW1vdmFsID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgbGlzdCBvZiBhbGwgR2FtZSBPYmplY3RzIHRoYXQgaGF2ZSBiZWVuIGVuYWJsZWQgZm9yIGRyYWdnaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI19kcmFnZ2FibGVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fZHJhZ2dhYmxlID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgbGlzdCBvZiBhbGwgSW50ZXJhY3RpdmUgT2JqZWN0cyBjdXJyZW50bHkgY29uc2lkZXJlZCBhcyBiZWluZyAnZHJhZ2dhYmxlJyBieSBhbnkgcG9pbnRlciwgaW5kZXhlZCBieSBwb2ludGVyIElELlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI19kcmFnXHJcbiAgICAgICAgICogQHR5cGUge3swOkFycmF5LDE6QXJyYXksMjpBcnJheSwzOkFycmF5LDQ6QXJyYXksNTpBcnJheSw2OkFycmF5LDc6QXJyYXksODpBcnJheSw5OkFycmF5LDEwOkFycmF5fX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2RyYWcgPSB7IDA6IFtdLCAxOiBbXSwgMjogW10sIDM6IFtdLCA0OiBbXSwgNTogW10sIDY6IFtdLCA3OiBbXSwgODogW10sIDk6IFtdLCAxMDogW10gfTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBhcnJheSBjb250YWluaW5nIHRoZSBkcmFnU3RhdGVzLCBmb3IgdGhpcyBTY2VuZSwgaW5kZXggYnkgdGhlIFBvaW50ZXIgSUQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jX2RyYWdTdGF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyW119XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fZHJhZ1N0YXRlID0gW107XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgbGlzdCBvZiBhbGwgSW50ZXJhY3RpdmUgT2JqZWN0cyBjdXJyZW50bHkgY29uc2lkZXJlZCBhcyBiZWluZyAnb3ZlcicgYnkgYW55IHBvaW50ZXIsIGluZGV4ZWQgYnkgcG9pbnRlciBJRC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNfb3ZlclxyXG4gICAgICAgICAqIEB0eXBlIHt7MDpBcnJheSwxOkFycmF5LDI6QXJyYXksMzpBcnJheSw0OkFycmF5LDU6QXJyYXksNjpBcnJheSw3OkFycmF5LDg6QXJyYXksOTpBcnJheSwxMDpBcnJheX19XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9vdmVyID0geyAwOiBbXSwgMTogW10sIDI6IFtdLCAzOiBbXSwgNDogW10sIDU6IFtdLCA2OiBbXSwgNzogW10sIDg6IFtdLCA5OiBbXSwgMTA6IFtdIH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgbGlzdCBvZiB2YWxpZCBET00gZXZlbnQgdHlwZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jX3ZhbGlkVHlwZXNcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nW119XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl92YWxpZFR5cGVzID0gWyAnb25Eb3duJywgJ29uVXAnLCAnb25PdmVyJywgJ29uT3V0JywgJ29uTW92ZScsICdvbkRyYWdTdGFydCcsICdvbkRyYWcnLCAnb25EcmFnRW5kJywgJ29uRHJhZ0VudGVyJywgJ29uRHJhZ0xlYXZlJywgJ29uRHJhZ092ZXInLCAnb25Ecm9wJyBdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCBwcm9wZXJ0eSB0aGF0IHRyYWNrcyBmcmFtZSBldmVudCBzdGF0ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNfdXBkYXRlZFRoaXNGcmFtZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3VwZGF0ZWRUaGlzRnJhbWUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgc2NlbmUuc3lzLmV2ZW50cy5vbmNlKFNjZW5lRXZlbnRzLkJPT1QsIHRoaXMuYm9vdCwgdGhpcyk7XHJcbiAgICAgICAgc2NlbmUuc3lzLmV2ZW50cy5vbihTY2VuZUV2ZW50cy5TVEFSVCwgdGhpcy5zdGFydCwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHksIG9ubHkgb25jZSwgd2hlbiB0aGUgU2NlbmUgaXMgZmlyc3QgY3JlYXRlZC5cclxuICAgICAqIERvIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jYm9vdFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjQk9PVFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjUuMVxyXG4gICAgICovXHJcbiAgICBib290OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuY2FtZXJhcyA9IHRoaXMuc3lzdGVtcy5jYW1lcmFzO1xyXG5cclxuICAgICAgICB0aGlzLmRpc3BsYXlMaXN0ID0gdGhpcy5zeXN0ZW1zLmRpc3BsYXlMaXN0O1xyXG5cclxuICAgICAgICB0aGlzLnN5c3RlbXMuZXZlbnRzLm9uY2UoU2NlbmVFdmVudHMuREVTVFJPWSwgdGhpcy5kZXN0cm95LCB0aGlzKTtcclxuXHJcbiAgICAgICAgLy8gIFJlZ2lzdGVyZWQgaW5wdXQgcGx1Z2lucyBsaXN0ZW4gZm9yIHRoaXNcclxuICAgICAgICB0aGlzLnBsdWdpbkV2ZW50cy5lbWl0KEV2ZW50cy5CT09UKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgU2NlbmUgd2hlbiBpdCBpcyBzdGFydGluZyB1cC5cclxuICAgICAqIEl0IGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBsb2NhbCBzeXN0ZW1zLCBwcm9wZXJ0aWVzIGFuZCBsaXN0ZW5pbmcgZm9yIFNjZW5lIGV2ZW50cy5cclxuICAgICAqIERvIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jc3RhcnRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI1NUQVJUXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuNS4wXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBldmVudEVtaXR0ZXIgPSB0aGlzLnN5c3RlbXMuZXZlbnRzO1xyXG5cclxuICAgICAgICBldmVudEVtaXR0ZXIub24oU2NlbmVFdmVudHMuVFJBTlNJVElPTl9TVEFSVCwgdGhpcy50cmFuc2l0aW9uSW4sIHRoaXMpO1xyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vbihTY2VuZUV2ZW50cy5UUkFOU0lUSU9OX09VVCwgdGhpcy50cmFuc2l0aW9uT3V0LCB0aGlzKTtcclxuICAgICAgICBldmVudEVtaXR0ZXIub24oU2NlbmVFdmVudHMuVFJBTlNJVElPTl9DT01QTEVURSwgdGhpcy50cmFuc2l0aW9uQ29tcGxldGUsIHRoaXMpO1xyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vbihTY2VuZUV2ZW50cy5QUkVfVVBEQVRFLCB0aGlzLnByZVVwZGF0ZSwgdGhpcyk7XHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLm9uY2UoU2NlbmVFdmVudHMuU0hVVERPV04sIHRoaXMuc2h1dGRvd24sIHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLm1hbmFnZXIuZXZlbnRzLm9uKEV2ZW50cy5HQU1FX09VVCwgdGhpcy5vbkdhbWVPdXQsIHRoaXMpO1xyXG4gICAgICAgIHRoaXMubWFuYWdlci5ldmVudHMub24oRXZlbnRzLkdBTUVfT1ZFUiwgdGhpcy5vbkdhbWVPdmVyLCB0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gIFBvcHVsYXRlIHRoZSBwb2ludGVyIGRyYWcgc3RhdGVzXHJcbiAgICAgICAgdGhpcy5fZHJhZ1N0YXRlID0gWyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIF07XHJcblxyXG4gICAgICAgIC8vICBSZWdpc3RlcmVkIGlucHV0IHBsdWdpbnMgbGlzdGVuIGZvciB0aGlzXHJcbiAgICAgICAgdGhpcy5wbHVnaW5FdmVudHMuZW1pdChFdmVudHMuU1RBUlQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdhbWUgT3ZlciBoYW5kbGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI29uR2FtZU92ZXJcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVfT1ZFUlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjE2LjJcclxuICAgICAqL1xyXG4gICAgb25HYW1lT3ZlcjogZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmlzQWN0aXZlKCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkdBTUVfT1ZFUiwgZXZlbnQudGltZVN0YW1wLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdhbWUgT3V0IGhhbmRsZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jb25HYW1lT3V0XHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FX09VVFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjE2LjJcclxuICAgICAqL1xyXG4gICAgb25HYW1lT3V0OiBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmUoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuR0FNRV9PVVQsIGV2ZW50LnRpbWVTdGFtcCwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcHJlLXVwZGF0ZSBoYW5kbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjaGVja2luZyB0aGUgcGVuZGluZyByZW1vdmFsIGFuZCBpbnNlcnRpb24gbGlzdHMgYW5kXHJcbiAgICAgKiBkZWxldGluZyBvbGQgR2FtZSBPYmplY3RzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3ByZVVwZGF0ZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI1BSRV9VUERBVEVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBwcmVVcGRhdGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFJlZ2lzdGVyZWQgaW5wdXQgcGx1Z2lucyBsaXN0ZW4gZm9yIHRoaXNcclxuICAgICAgICB0aGlzLnBsdWdpbkV2ZW50cy5lbWl0KEV2ZW50cy5QUkVfVVBEQVRFKTtcclxuXHJcbiAgICAgICAgdmFyIHJlbW92ZUxpc3QgPSB0aGlzLl9wZW5kaW5nUmVtb3ZhbDtcclxuICAgICAgICB2YXIgaW5zZXJ0TGlzdCA9IHRoaXMuX3BlbmRpbmdJbnNlcnRpb247XHJcblxyXG4gICAgICAgIHZhciB0b1JlbW92ZSA9IHJlbW92ZUxpc3QubGVuZ3RoO1xyXG4gICAgICAgIHZhciB0b0luc2VydCA9IGluc2VydExpc3QubGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAodG9SZW1vdmUgPT09IDAgJiYgdG9JbnNlcnQgPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgUXVpY2sgYmFpbFxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuX2xpc3Q7XHJcblxyXG4gICAgICAgIC8vICBEZWxldGUgb2xkIGdhbWVPYmplY3RzXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b1JlbW92ZTsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGdhbWVPYmplY3QgPSByZW1vdmVMaXN0W2ldO1xyXG5cclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gY3VycmVudC5pbmRleE9mKGdhbWVPYmplY3QpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnQuc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyKGdhbWVPYmplY3QsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgQ2xlYXIgdGhlIHJlbW92YWwgbGlzdFxyXG4gICAgICAgIHJlbW92ZUxpc3QubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLl9wZW5kaW5nUmVtb3ZhbC5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICAvLyAgTW92ZSBwZW5kaW5nSW5zZXJ0aW9uIHRvIGxpc3QgKGFsc28gY2xlYXJzIHBlbmRpbmdJbnNlcnRpb24gYXQgdGhlIHNhbWUgdGltZSlcclxuICAgICAgICB0aGlzLl9saXN0ID0gY3VycmVudC5jb25jYXQoaW5zZXJ0TGlzdC5zcGxpY2UoMCkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB0byBzZWUgaWYgYm90aCB0aGlzIHBsdWdpbiBhbmQgdGhlIFNjZW5lIHRvIHdoaWNoIGl0IGJlbG9uZ3MgaXMgYWN0aXZlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI2lzQWN0aXZlXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBwbHVnaW4gYW5kIHRoZSBTY2VuZSBpdCBiZWxvbmdzIHRvIGlzIGFjdGl2ZS5cclxuICAgICAqL1xyXG4gICAgaXNBY3RpdmU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmVuYWJsZWQgJiYgdGhpcy5zY2VuZS5zeXMuaXNBY3RpdmUoKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgSW5wdXQgTWFuYWdlci5cclxuICAgICAqIEl0IGVtaXRzIGV2ZW50cyBmb3IgcGx1Z2lucyB0byBsaXN0ZW4gdG8gYW5kIGFsc28gaGFuZGxlcyBwb2xsaW5nIHVwZGF0ZXMsIGlmIGVuYWJsZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jdXBkYXRlUG9sbFxyXG4gICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lIC0gVGhlIGN1cnJlbnQgdGltZS4gRWl0aGVyIGEgSGlnaCBSZXNvbHV0aW9uIFRpbWVyIHZhbHVlIGlmIGl0IGNvbWVzIGZyb20gUmVxdWVzdCBBbmltYXRpb24gRnJhbWUsIG9yIERhdGUubm93IGlmIHVzaW5nIFNldFRpbWVvdXQuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGEgLSBUaGUgZGVsdGEgdGltZSBpbiBtcyBzaW5jZSB0aGUgbGFzdCBmcmFtZS4gVGhpcyBpcyBhIHNtb290aGVkIGFuZCBjYXBwZWQgdmFsdWUgYmFzZWQgb24gdGhlIEZQUyByYXRlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgcGx1Z2luIGFuZCB0aGUgU2NlbmUgaXQgYmVsb25ncyB0byBpcyBhY3RpdmUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVBvbGw6IGZ1bmN0aW9uICh0aW1lLCBkZWx0YSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNBY3RpdmUoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBUaGUgcGx1Z2lucyBzaG91bGQgdXBkYXRlIGV2ZXJ5IGZyYW1lLCByZWdhcmRsZXNzIGlmIHRoZXJlIGhhcyBiZWVuXHJcbiAgICAgICAgLy8gIGFueSBET00gaW5wdXQgZXZlbnRzIG9yIG5vdCAoc3VjaCBhcyB0aGUgR2FtZXBhZCBhbmQgS2V5Ym9hcmQpXHJcbiAgICAgICAgdGhpcy5wbHVnaW5FdmVudHMuZW1pdChFdmVudHMuVVBEQVRFLCB0aW1lLCBkZWx0YSk7XHJcblxyXG4gICAgICAgIC8vICBXZSBjYW4gbGVhdmUgbm93IGlmIHdlJ3ZlIGFscmVhZHkgdXBkYXRlZCBvbmNlIHRoaXMgZnJhbWUgdmlhIHRoZSBpbW1lZGlhdGUgRE9NIGV2ZW50IGhhbmRsZXJzXHJcbiAgICAgICAgaWYgKHRoaXMuX3VwZGF0ZWRUaGlzRnJhbWUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVkVGhpc0ZyYW1lID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICB2YXIgbWFuYWdlciA9IHRoaXMubWFuYWdlcjtcclxuXHJcbiAgICAgICAgdmFyIHBvaW50ZXJzID0gbWFuYWdlci5wb2ludGVycztcclxuICAgICAgICB2YXIgcG9pbnRlcnNUb3RhbCA9IG1hbmFnZXIucG9pbnRlcnNUb3RhbDtcclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBvaW50ZXJzVG90YWw7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBvaW50ZXJzW2ldLnVwZGF0ZU1vdGlvbigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIE5vIHBvaW50IGdvaW5nIGFueSBmdXJ0aGVyIGlmIHRoZXJlIGFyZW4ndCBhbnkgaW50ZXJhY3RpdmUgb2JqZWN0c1xyXG4gICAgICAgIGlmICh0aGlzLl9saXN0Lmxlbmd0aCA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciByYXRlID0gdGhpcy5wb2xsUmF0ZTtcclxuXHJcbiAgICAgICAgaWYgKHJhdGUgPT09IC0xKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChyYXRlID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BvbGxUaW1lciAtPSBkZWx0YTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9wb2xsVGltZXIgPCAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgRGlzY2FyZCB0aW1lciBkaWZmLCB3ZSdyZSByZWFkeSB0byBwb2xsIGFnYWluXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wb2xsVGltZXIgPSB0aGlzLnBvbGxSYXRlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIE5vdCBlbm91Z2ggdGltZSBoYXMgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCBwb2xsLCBzbyBhYm9ydCBub3dcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFdlIGdvdCB0aGlzIGZhcj8gVGhlbiB3ZSBzaG91bGQgcG9sbCBmb3IgbW92ZW1lbnRcclxuICAgICAgICB2YXIgY2FwdHVyZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBvaW50ZXJzVG90YWw7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0b3RhbCA9IDA7XHJcblxyXG4gICAgICAgICAgICB2YXIgcG9pbnRlciA9IHBvaW50ZXJzW2ldO1xyXG5cclxuICAgICAgICAgICAgLy8gIEFsd2F5cyByZXNldCB0aGlzIGFycmF5XHJcbiAgICAgICAgICAgIHRoaXMuX3RlbXBab25lcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgLy8gIF90ZW1wIGNvbnRhaW5zIGEgaGl0IHRlc3RlZCBhbmQgY2FtZXJhIGN1bGxlZCBsaXN0IG9mIElPIG9iamVjdHNcclxuICAgICAgICAgICAgdGhpcy5fdGVtcCA9IHRoaXMuaGl0VGVzdFBvaW50ZXIocG9pbnRlcik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNvcnRHYW1lT2JqZWN0cyh0aGlzLl90ZW1wKTtcclxuICAgICAgICAgICAgdGhpcy5zb3J0R2FtZU9iamVjdHModGhpcy5fdGVtcFpvbmVzKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRvcE9ubHkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBPbmx5IHRoZSB0b3AtbW9zdCBvbmUgY291bnRzIG5vdywgc28gc2FmZWx5IGlnbm9yZSB0aGUgcmVzdFxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RlbXAubGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RlbXAuc3BsaWNlKDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl90ZW1wWm9uZXMubGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RlbXBab25lcy5zcGxpY2UoMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRvdGFsICs9IHRoaXMucHJvY2Vzc092ZXJPdXRFdmVudHMocG9pbnRlcik7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5nZXREcmFnU3RhdGUocG9pbnRlcikgPT09IDIpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RyYWdUaHJlc2hvbGRFdmVudChwb2ludGVyLCB0aW1lKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRvdGFsID4gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIFdlIGludGVyYWN0ZWQgd2l0aCBhbiBldmVudCBpbiB0aGlzIFNjZW5lLCBzbyBibG9jayBhbnkgU2NlbmVzIGJlbG93IHVzIGZyb20gZG9pbmcgdGhlIHNhbWUgdGhpcyBmcmFtZVxyXG4gICAgICAgICAgICAgICAgY2FwdHVyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2FwdHVyZWQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYSBET00gRXZlbnQgaXMgcmVjZWl2ZWQgYnkgdGhlIElucHV0IE1hbmFnZXIuIEl0IGhhbmRsZXMgZGlzcGF0Y2hpbmcgdGhlIGV2ZW50c1xyXG4gICAgICogdG8gcmVsZXZhbnQgaW5wdXQgZW5hYmxlZCBHYW1lIE9iamVjdHMgaW4gdGhpcyBzY2VuZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiN1cGRhdGVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNVUERBVEVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gdHlwZSAtIFRoZSB0eXBlIG9mIGV2ZW50IHRvIHByb2Nlc3MuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyW119IHBvaW50ZXJzIC0gQW4gYXJyYXkgb2YgUG9pbnRlcnMgb24gd2hpY2ggdGhlIGV2ZW50IG9jY3VycmVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGlzIFNjZW5lIGhhcyBjYXB0dXJlZCB0aGUgaW5wdXQgZXZlbnRzIGZyb20gYWxsIG90aGVyIFNjZW5lcywgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKHR5cGUsIHBvaW50ZXJzKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSgpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHBvaW50ZXJzVG90YWwgPSBwb2ludGVycy5sZW5ndGg7XHJcbiAgICAgICAgdmFyIGNhcHR1cmVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRlcnNUb3RhbDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHRvdGFsID0gMDtcclxuICAgICAgICAgICAgdmFyIHBvaW50ZXIgPSBwb2ludGVyc1tpXTtcclxuXHJcbiAgICAgICAgICAgIC8vICBBbHdheXMgcmVzZXQgdGhpcyBhcnJheVxyXG4gICAgICAgICAgICB0aGlzLl90ZW1wWm9uZXMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIC8vICBfdGVtcCBjb250YWlucyBhIGhpdCB0ZXN0ZWQgYW5kIGNhbWVyYSBjdWxsZWQgbGlzdCBvZiBJTyBvYmplY3RzXHJcbiAgICAgICAgICAgIHRoaXMuX3RlbXAgPSB0aGlzLmhpdFRlc3RQb2ludGVyKHBvaW50ZXIpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zb3J0R2FtZU9iamVjdHModGhpcy5fdGVtcCk7XHJcbiAgICAgICAgICAgIHRoaXMuc29ydEdhbWVPYmplY3RzKHRoaXMuX3RlbXBab25lcyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy50b3BPbmx5KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgT25seSB0aGUgdG9wLW1vc3Qgb25lIGNvdW50cyBub3csIHNvIHNhZmVseSBpZ25vcmUgdGhlIHJlc3RcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl90ZW1wLmxlbmd0aClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZW1wLnNwbGljZSgxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGVtcFpvbmVzLmxlbmd0aClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZW1wWm9uZXMuc3BsaWNlKDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgQ09OU1QuTU9VU0VfRE9XTjpcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSB0aGlzLnByb2Nlc3NEcmFnRG93bkV2ZW50KHBvaW50ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMucHJvY2Vzc0Rvd25FdmVudHMocG9pbnRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gdGhpcy5wcm9jZXNzT3Zlck91dEV2ZW50cyhwb2ludGVyKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIENPTlNULk1PVVNFX1VQOlxyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMucHJvY2Vzc0RyYWdVcEV2ZW50KHBvaW50ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMucHJvY2Vzc1VwRXZlbnRzKHBvaW50ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMucHJvY2Vzc092ZXJPdXRFdmVudHMocG9pbnRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSBDT05TVC5UT1VDSF9TVEFSVDpcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSB0aGlzLnByb2Nlc3NEcmFnRG93bkV2ZW50KHBvaW50ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMucHJvY2Vzc0Rvd25FdmVudHMocG9pbnRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gdGhpcy5wcm9jZXNzT3ZlckV2ZW50cyhwb2ludGVyKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIENPTlNULlRPVUNIX0VORDpcclxuICAgICAgICAgICAgICAgIGNhc2UgQ09OU1QuVE9VQ0hfQ0FOQ0VMOlxyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMucHJvY2Vzc0RyYWdVcEV2ZW50KHBvaW50ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMucHJvY2Vzc1VwRXZlbnRzKHBvaW50ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMucHJvY2Vzc091dEV2ZW50cyhwb2ludGVyKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIENPTlNULk1PVVNFX01PVkU6XHJcbiAgICAgICAgICAgICAgICBjYXNlIENPTlNULlRPVUNIX01PVkU6XHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gdGhpcy5wcm9jZXNzRHJhZ01vdmVFdmVudChwb2ludGVyKTtcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSB0aGlzLnByb2Nlc3NNb3ZlRXZlbnRzKHBvaW50ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMucHJvY2Vzc092ZXJPdXRFdmVudHMocG9pbnRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSBDT05TVC5NT1VTRV9XSEVFTDpcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSB0aGlzLnByb2Nlc3NXaGVlbEV2ZW50KHBvaW50ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodG90YWwgPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgV2UgaW50ZXJhY3RlZCB3aXRoIGFuIGV2ZW50IGluIHRoaXMgU2NlbmUsIHNvIGJsb2NrIGFueSBTY2VuZXMgYmVsb3cgdXMgZnJvbSBkb2luZyB0aGUgc2FtZSB0aGlzIGZyYW1lXHJcbiAgICAgICAgICAgICAgICBjYXB0dXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZWRUaGlzRnJhbWUgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gY2FwdHVyZWQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xlYXJzIGEgR2FtZSBPYmplY3Qgc28gaXQgbm8gbG9uZ2VyIGhhcyBhbiBJbnRlcmFjdGl2ZSBPYmplY3QgYXNzb2NpYXRlZCB3aXRoIGl0LlxyXG4gICAgICogVGhlIEdhbWUgT2JqZWN0IGlzIHRoZW4gcXVldWVkIGZvciByZW1vdmFsIGZyb20gdGhlIElucHV0IFBsdWdpbiBvbiB0aGUgbmV4dCB1cGRhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jY2xlYXJcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhhdCB3aWxsIGhhdmUgaXRzIEludGVyYWN0aXZlIE9iamVjdCByZW1vdmVkLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbc2tpcFF1ZXVlPWZhbHNlXSAtIFNraXAgYWRkaW5nIHRoaXMgR2FtZSBPYmplY3QgaW50byB0aGUgcmVtb3ZhbCBxdWV1ZT9cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gVGhlIEdhbWUgT2JqZWN0IHRoYXQgaGFkIGl0cyBJbnRlcmFjdGl2ZSBPYmplY3QgcmVtb3ZlZC5cclxuICAgICAqL1xyXG4gICAgY2xlYXI6IGZ1bmN0aW9uIChnYW1lT2JqZWN0LCBza2lwUXVldWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHNraXBRdWV1ZSA9PT0gdW5kZWZpbmVkKSB7IHNraXBRdWV1ZSA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIHZhciBpbnB1dCA9IGdhbWVPYmplY3QuaW5wdXQ7XHJcblxyXG4gICAgICAgIC8vIElmIEdhbWVPYmplY3QuaW5wdXQgYWxyZWFkeSBjbGVhcmVkIGZyb20gaGlnaGVyIGNsYXNzXHJcbiAgICAgICAgaWYgKCFpbnB1dClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2tpcFF1ZXVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5xdWV1ZUZvclJlbW92YWwoZ2FtZU9iamVjdCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpbnB1dC5nYW1lT2JqZWN0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIGlucHV0LnRhcmdldCA9IHVuZGVmaW5lZDtcclxuICAgICAgICBpbnB1dC5oaXRBcmVhID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIGlucHV0LmhpdEFyZWFDYWxsYmFjayA9IHVuZGVmaW5lZDtcclxuICAgICAgICBpbnB1dC5jYWxsYmFja0NvbnRleHQgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIHRoaXMubWFuYWdlci5yZXNldEN1cnNvcihpbnB1dCk7XHJcblxyXG4gICAgICAgIGdhbWVPYmplY3QuaW5wdXQgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyAgQ2xlYXIgZnJvbSBfZHJhZ2dhYmxlLCBfZHJhZyBhbmQgX292ZXJcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9kcmFnZ2FibGUuaW5kZXhPZihnYW1lT2JqZWN0KTtcclxuXHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9kcmFnZ2FibGUuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGluZGV4ID0gdGhpcy5fZHJhZ1swXS5pbmRleE9mKGdhbWVPYmplY3QpO1xyXG5cclxuICAgICAgICBpZiAoaW5kZXggPiAtMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RyYWdbMF0uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGluZGV4ID0gdGhpcy5fb3ZlclswXS5pbmRleE9mKGdhbWVPYmplY3QpO1xyXG5cclxuICAgICAgICBpZiAoaW5kZXggPiAtMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX292ZXJbMF0uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBnYW1lT2JqZWN0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc2FibGVzIElucHV0IG9uIGEgc2luZ2xlIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEFuIGlucHV0IGRpc2FibGVkIEdhbWUgT2JqZWN0IHN0aWxsIHJldGFpbnMgaXRzIEludGVyYWN0aXZlIE9iamVjdCBjb21wb25lbnQgYW5kIGNhbiBiZSByZS1lbmFibGVkXHJcbiAgICAgKiBhdCBhbnkgdGltZSwgYnkgcGFzc2luZyBpdCB0byBgSW5wdXRQbHVnaW4uZW5hYmxlYC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNkaXNhYmxlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRvIGhhdmUgaXRzIGlucHV0IHN5c3RlbSBkaXNhYmxlZC5cclxuICAgICAqL1xyXG4gICAgZGlzYWJsZTogZnVuY3Rpb24gKGdhbWVPYmplY3QpXHJcbiAgICB7XHJcbiAgICAgICAgZ2FtZU9iamVjdC5pbnB1dC5lbmFibGVkID0gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW5hYmxlIGEgR2FtZSBPYmplY3QgZm9yIGludGVyYWN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBHYW1lIE9iamVjdCBhbHJlYWR5IGhhcyBhbiBJbnRlcmFjdGl2ZSBPYmplY3QgY29tcG9uZW50LCBpdCBpcyBlbmFibGVkIGFuZCByZXR1cm5lZC5cclxuICAgICAqXHJcbiAgICAgKiBPdGhlcndpc2UsIGEgbmV3IEludGVyYWN0aXZlIE9iamVjdCBjb21wb25lbnQgaXMgY3JlYXRlZCBhbmQgYXNzaWduZWQgdG8gdGhlIEdhbWUgT2JqZWN0J3MgYGlucHV0YCBwcm9wZXJ0eS5cclxuICAgICAqXHJcbiAgICAgKiBJbnB1dCB3b3JrcyBieSB1c2luZyBoaXQgYXJlYXMsIHRoZXNlIGFyZSBuZWFybHkgYWx3YXlzIGdlb21ldHJpYyBzaGFwZXMsIHN1Y2ggYXMgcmVjdGFuZ2xlcyBvciBjaXJjbGVzLCB0aGF0IGFjdCBhcyB0aGUgaGl0IGFyZWFcclxuICAgICAqIGZvciB0aGUgR2FtZSBPYmplY3QuIEhvd2V2ZXIsIHlvdSBjYW4gcHJvdmlkZSB5b3VyIG93biBoaXQgYXJlYSBzaGFwZSBhbmQgY2FsbGJhY2ssIHNob3VsZCB5b3Ugd2lzaCB0byBoYW5kbGUgc29tZSBtb3JlIGFkdmFuY2VkXHJcbiAgICAgKiBpbnB1dCBkZXRlY3Rpb24uXHJcbiAgICAgKlxyXG4gICAgICogSWYgbm8gYXJndW1lbnRzIGFyZSBwcm92aWRlZCBpdCB3aWxsIHRyeSBhbmQgY3JlYXRlIGEgcmVjdGFuZ2xlIGhpdCBhcmVhIGJhc2VkIG9uIHRoZSB0ZXh0dXJlIGZyYW1lIHRoZSBHYW1lIE9iamVjdCBpcyB1c2luZy4gSWZcclxuICAgICAqIHRoaXMgaXNuJ3QgYSB0ZXh0dXJlLWJvdW5kIG9iamVjdCwgc3VjaCBhcyBhIEdyYXBoaWNzIG9yIEJpdG1hcFRleHQgb2JqZWN0LCB0aGlzIHdpbGwgZmFpbCwgYW5kIHlvdSdsbCBuZWVkIHRvIHByb3ZpZGUgYSBzcGVjaWZpY1xyXG4gICAgICogc2hhcGUgZm9yIGl0IHRvIHVzZS5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhbiBJbnB1dCBDb25maWd1cmF0aW9uIE9iamVjdCBhcyB0aGUgb25seSBhcmd1bWVudCB0byB0aGlzIG1ldGhvZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNlbmFibGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdG8gYmUgZW5hYmxlZCBmb3IgaW5wdXQuXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuVHlwZXMuSW5wdXQuSW5wdXRDb25maWd1cmF0aW9ufGFueSl9IFtzaGFwZV0gLSBFaXRoZXIgYW4gaW5wdXQgY29uZmlndXJhdGlvbiBvYmplY3QsIG9yIGEgZ2VvbWV0cmljIHNoYXBlIHRoYXQgZGVmaW5lcyB0aGUgaGl0IGFyZWEgZm9yIHRoZSBHYW1lIE9iamVjdC4gSWYgbm90IHNwZWNpZmllZCBhIFJlY3RhbmdsZSB3aWxsIGJlIHVzZWQuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5IaXRBcmVhQ2FsbGJhY2t9IFtjYWxsYmFja10gLSBUaGUgJ2NvbnRhaW5zJyBmdW5jdGlvbiB0byBpbnZva2UgdG8gY2hlY2sgaWYgdGhlIHBvaW50ZXIgaXMgd2l0aGluIHRoZSBoaXQgYXJlYS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Ryb3Bab25lPWZhbHNlXSAtIElzIHRoaXMgR2FtZSBPYmplY3QgYSBkcm9wIHpvbmUgb3Igbm90P1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5JbnB1dFBsdWdpbn0gVGhpcyBJbnB1dCBQbHVnaW4uXHJcbiAgICAgKi9cclxuICAgIGVuYWJsZTogZnVuY3Rpb24gKGdhbWVPYmplY3QsIHNoYXBlLCBjYWxsYmFjaywgZHJvcFpvbmUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGRyb3Bab25lID09PSB1bmRlZmluZWQpIHsgZHJvcFpvbmUgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICBpZiAoZ2FtZU9iamVjdC5pbnB1dClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBJZiBpdCBpcyBhbHJlYWR5IGhhcyBhbiBJbnRlcmFjdGl2ZU9iamVjdCB0aGVuIGp1c3QgZW5hYmxlIGl0IGFuZCByZXR1cm5cclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5pbnB1dC5lbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIENyZWF0ZSBhbiBJbnRlcmFjdGl2ZU9iamVjdCBhbmQgZW5hYmxlIGl0XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SGl0QXJlYShnYW1lT2JqZWN0LCBzaGFwZSwgY2FsbGJhY2spO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGdhbWVPYmplY3QuaW5wdXQgJiYgZHJvcFpvbmUgJiYgIWdhbWVPYmplY3QuaW5wdXQuZHJvcFpvbmUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBnYW1lT2JqZWN0LmlucHV0LmRyb3Bab25lID0gZHJvcFpvbmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyB0aGUgZ2l2ZW4gUG9pbnRlciBhbmQgcGVyZm9ybXMgYSBoaXQgdGVzdCBhZ2FpbnN0IGl0LCB0byBzZWUgd2hpY2ggaW50ZXJhY3RpdmUgR2FtZSBPYmplY3RzXHJcbiAgICAgKiBpdCBpcyBjdXJyZW50bHkgYWJvdmUuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGhpdCB0ZXN0IGlzIHBlcmZvcm1lZCBhZ2FpbnN0IHdoaWNoLWV2ZXIgQ2FtZXJhIHRoZSBQb2ludGVyIGlzIG92ZXIuIElmIGl0IGlzIG92ZXIgbXVsdGlwbGVcclxuICAgICAqIGNhbWVyYXMsIGl0IHN0YXJ0cyBjaGVja2luZyB0aGUgY2FtZXJhIGF0IHRoZSB0b3Agb2YgdGhlIGNhbWVyYSBsaXN0LCBhbmQgaWYgbm90aGluZyBpcyBmb3VuZCwgaXRlcmF0ZXMgZG93biB0aGUgbGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNoaXRUZXN0UG9pbnRlclxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHRvIGNoZWNrIGFnYWluc3QgdGhlIEdhbWUgT2JqZWN0cy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBBbiBhcnJheSBvZiBhbGwgdGhlIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0cyB0aGUgUG9pbnRlciB3YXMgYWJvdmUuXHJcbiAgICAgKi9cclxuICAgIGhpdFRlc3RQb2ludGVyOiBmdW5jdGlvbiAocG9pbnRlcilcclxuICAgIHtcclxuICAgICAgICB2YXIgY2FtZXJhcyA9IHRoaXMuY2FtZXJhcy5nZXRDYW1lcmFzQmVsb3dQb2ludGVyKHBvaW50ZXIpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNhbWVyYXMubGVuZ3RoOyBjKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY2FtZXJhID0gY2FtZXJhc1tjXTtcclxuXHJcbiAgICAgICAgICAgIC8vICBHZXQgYSBsaXN0IG9mIGFsbCBvYmplY3RzIHRoYXQgY2FuIGJlIHNlZW4gYnkgdGhlIGNhbWVyYSBiZWxvdyB0aGUgcG9pbnRlciBpbiB0aGUgc2NlbmUgYW5kIHN0b3JlIGluICdvdmVyJyBhcnJheS5cclxuICAgICAgICAgICAgLy8gIEFsbCBvYmplY3RzIGluIHRoaXMgYXJyYXkgYXJlIGlucHV0IGVuYWJsZWQsIGFzIGNoZWNrZWQgYnkgdGhlIGhpdFRlc3QgbWV0aG9kLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGxhdGVyIG9uIGFzIHdlbGwuXHJcbiAgICAgICAgICAgIHZhciBvdmVyID0gdGhpcy5tYW5hZ2VyLmhpdFRlc3QocG9pbnRlciwgdGhpcy5fbGlzdCwgY2FtZXJhKTtcclxuXHJcbiAgICAgICAgICAgIC8vICBGaWx0ZXIgb3V0IHRoZSBkcm9wIHpvbmVzXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3Zlci5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIG9iaiA9IG92ZXJbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG9iai5pbnB1dC5kcm9wWm9uZSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZW1wWm9uZXMucHVzaChvYmopO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAob3Zlci5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwb2ludGVyLmNhbWVyYSA9IGNhbWVyYTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb3ZlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIElmIHdlIGdvdCB0aGlzIGZhciB0aGVuIHRoZXJlIHdlcmUgbm8gR2FtZSBPYmplY3RzIGJlbG93IHRoZSBwb2ludGVyLCBidXQgaXQgd2FzIHN0aWxsIG92ZXJcclxuICAgICAgICAvLyAgYSBjYW1lcmEsIHNvIHNldCB0aGF0IHRoZSB0b3AtbW9zdCBvbmUgaW50byB0aGUgcG9pbnRlclxyXG5cclxuICAgICAgICBwb2ludGVyLmNhbWVyYSA9IGNhbWVyYXNbMF07XHJcblxyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBpbnRlcm5hbCBtZXRob2QgdGhhdCBoYW5kbGVzIHRoZSBQb2ludGVyIGRvd24gZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jcHJvY2Vzc0Rvd25FdmVudHNcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FT0JKRUNUX1BPSU5URVJfRE9XTlxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRU9CSkVDVF9ET1dOXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNQT0lOVEVSX0RPV05cclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI1BPSU5URVJfRE9XTl9PVVRTSURFXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgYmVpbmcgdGVzdGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSB0b3RhbCBudW1iZXIgb2Ygb2JqZWN0cyBpbnRlcmFjdGVkIHdpdGguXHJcbiAgICAgKi9cclxuICAgIHByb2Nlc3NEb3duRXZlbnRzOiBmdW5jdGlvbiAocG9pbnRlcilcclxuICAgIHtcclxuICAgICAgICB2YXIgdG90YWwgPSAwO1xyXG4gICAgICAgIHZhciBjdXJyZW50bHlPdmVyID0gdGhpcy5fdGVtcDtcclxuXHJcbiAgICAgICAgdmFyIF9ldmVudERhdGEgPSB0aGlzLl9ldmVudERhdGE7XHJcbiAgICAgICAgdmFyIF9ldmVudENvbnRhaW5lciA9IHRoaXMuX2V2ZW50Q29udGFpbmVyO1xyXG5cclxuICAgICAgICBfZXZlbnREYXRhLmNhbmNlbGxlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB2YXIgYWJvcnRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyAgR28gdGhyb3VnaCBhbGwgb2JqZWN0cyB0aGUgcG9pbnRlciB3YXMgb3ZlciBhbmQgZmlyZSB0aGVpciBldmVudHMgLyBjYWxsYmFja3NcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1cnJlbnRseU92ZXIubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZ2FtZU9iamVjdCA9IGN1cnJlbnRseU92ZXJbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAoIWdhbWVPYmplY3QuaW5wdXQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0b3RhbCsrO1xyXG5cclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5lbWl0KEV2ZW50cy5HQU1FT0JKRUNUX1BPSU5URVJfRE9XTiwgcG9pbnRlciwgZ2FtZU9iamVjdC5pbnB1dC5sb2NhbFgsIGdhbWVPYmplY3QuaW5wdXQubG9jYWxZLCBfZXZlbnRDb250YWluZXIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKF9ldmVudERhdGEuY2FuY2VsbGVkIHx8ICFnYW1lT2JqZWN0LmlucHV0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkdBTUVPQkpFQ1RfRE9XTiwgcG9pbnRlciwgZ2FtZU9iamVjdCwgX2V2ZW50Q29udGFpbmVyKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChfZXZlbnREYXRhLmNhbmNlbGxlZCB8fCAhZ2FtZU9iamVjdC5pbnB1dClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYWJvcnRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIElmIHRoZXkgcmVsZWFzZWQgb3V0c2lkZSB0aGUgY2FudmFzLCBidXQgcHJlc3NlZCBkb3duIGluc2lkZSBpdCwgd2UnbGwgc3RpbGwgZGlzcGF0Y2ggdGhlIGV2ZW50LlxyXG4gICAgICAgIGlmICghYWJvcnRlZCAmJiB0aGlzLm1hbmFnZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAocG9pbnRlci5kb3duRWxlbWVudCA9PT0gdGhpcy5tYW5hZ2VyLmdhbWUuY2FudmFzKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlBPSU5URVJfRE9XTiwgcG9pbnRlciwgY3VycmVudGx5T3Zlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlBPSU5URVJfRE9XTl9PVVRTSURFLCBwb2ludGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRvdGFsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGRyYWcgc3RhdGUgb2YgdGhlIGdpdmVuIFBvaW50ZXIgZm9yIHRoaXMgSW5wdXQgUGx1Z2luLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBzdGF0ZSB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxyXG4gICAgICpcclxuICAgICAqIDAgPSBOb3QgZHJhZ2dpbmcgYW55dGhpbmdcclxuICAgICAqIDEgPSBQcmltYXJ5IGJ1dHRvbiBkb3duIGFuZCBvYmplY3RzIGJlbG93LCBzbyBjb2xsZWN0IGEgZHJhZ2xpc3RcclxuICAgICAqIDIgPSBQb2ludGVyIGJlaW5nIGNoZWNrZWQgaWYgbWVldHMgZHJhZyBjcml0ZXJpYVxyXG4gICAgICogMyA9IFBvaW50ZXIgbWVldHMgY3JpdGVyaWEsIG5vdGlmeSB0aGUgZHJhZ2xpc3RcclxuICAgICAqIDQgPSBQb2ludGVyIGFjdGl2ZWx5IGRyYWdnaW5nIHRoZSBkcmFnbGlzdCBhbmQgaGFzIG1vdmVkXHJcbiAgICAgKiA1ID0gUG9pbnRlciBhY3RpdmVseSBkcmFnZ2luZyBidXQgaGFzIGJlZW4gcmVsZWFzZWQsIG5vdGlmeSBkcmFnbGlzdFxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI2dldERyYWdTdGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciB0byBnZXQgdGhlIGRyYWcgc3RhdGUgZm9yLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSBkcmFnIHN0YXRlIG9mIHRoZSBnaXZlbiBQb2ludGVyLlxyXG4gICAgICovXHJcbiAgICBnZXREcmFnU3RhdGU6IGZ1bmN0aW9uIChwb2ludGVyKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kcmFnU3RhdGVbcG9pbnRlci5pZF07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgZHJhZyBzdGF0ZSBvZiB0aGUgZ2l2ZW4gUG9pbnRlciBmb3IgdGhpcyBJbnB1dCBQbHVnaW4uXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHN0YXRlIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxyXG4gICAgICpcclxuICAgICAqIDAgPSBOb3QgZHJhZ2dpbmcgYW55dGhpbmdcclxuICAgICAqIDEgPSBQcmltYXJ5IGJ1dHRvbiBkb3duIGFuZCBvYmplY3RzIGJlbG93LCBzbyBjb2xsZWN0IGEgZHJhZ2xpc3RcclxuICAgICAqIDIgPSBQb2ludGVyIGJlaW5nIGNoZWNrZWQgaWYgbWVldHMgZHJhZyBjcml0ZXJpYVxyXG4gICAgICogMyA9IFBvaW50ZXIgbWVldHMgY3JpdGVyaWEsIG5vdGlmeSB0aGUgZHJhZ2xpc3RcclxuICAgICAqIDQgPSBQb2ludGVyIGFjdGl2ZWx5IGRyYWdnaW5nIHRoZSBkcmFnbGlzdCBhbmQgaGFzIG1vdmVkXHJcbiAgICAgKiA1ID0gUG9pbnRlciBhY3RpdmVseSBkcmFnZ2luZyBidXQgaGFzIGJlZW4gcmVsZWFzZWQsIG5vdGlmeSBkcmFnbGlzdFxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3NldERyYWdTdGF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciB0byBzZXQgdGhlIGRyYWcgc3RhdGUgZm9yLlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBzdGF0ZSAtIFRoZSBkcmFnIHN0YXRlIHZhbHVlLiBBbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgNS5cclxuICAgICAqL1xyXG4gICAgc2V0RHJhZ1N0YXRlOiBmdW5jdGlvbiAocG9pbnRlciwgc3RhdGUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fZHJhZ1N0YXRlW3BvaW50ZXIuaWRdID0gc3RhdGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIHRvIHNlZSBpZiBhIFBvaW50ZXIgaXMgcmVhZHkgdG8gZHJhZyB0aGUgb2JqZWN0cyBiZWxvdyBpdCwgYmFzZWQgb24gZWl0aGVyIGEgZGlzdGFuY2VcclxuICAgICAqIG9yIHRpbWUgdGhyZXNob2xkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3Byb2Nlc3NEcmFnVGhyZXNob2xkRXZlbnRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHRvIGNoZWNrIHRoZSBkcmFnIHRocmVzaG9sZHMgb24uXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGltZSAtIFRoZSBjdXJyZW50IHRpbWUuXHJcbiAgICAgKi9cclxuICAgIHByb2Nlc3NEcmFnVGhyZXNob2xkRXZlbnQ6IGZ1bmN0aW9uIChwb2ludGVyLCB0aW1lKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBwYXNzZWQgPSBmYWxzZTtcclxuICAgICAgICB2YXIgdGltZVRocmVzaG9sZCA9IHRoaXMuZHJhZ1RpbWVUaHJlc2hvbGQ7XHJcbiAgICAgICAgdmFyIGRpc3RhbmNlVGhyZXNob2xkID0gdGhpcy5kcmFnRGlzdGFuY2VUaHJlc2hvbGQ7XHJcblxyXG4gICAgICAgIGlmIChkaXN0YW5jZVRocmVzaG9sZCA+IDAgJiYgRGlzdGFuY2VCZXR3ZWVuKHBvaW50ZXIueCwgcG9pbnRlci55LCBwb2ludGVyLmRvd25YLCBwb2ludGVyLmRvd25ZKSA+PSBkaXN0YW5jZVRocmVzaG9sZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBJdCBoYXMgbW92ZWQgZmFyIGVub3VnaCB0byBiZSBjb25zaWRlcmVkIGEgZHJhZ1xyXG4gICAgICAgICAgICBwYXNzZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aW1lVGhyZXNob2xkID4gMCAmJiAodGltZSA+PSBwb2ludGVyLmRvd25UaW1lICsgdGltZVRocmVzaG9sZCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgSXQgaGFzIGJlZW4gaGVsZCBkb3duIGxvbmcgZW5vdWdoIHRvIGJlIGNvbnNpZGVyZWQgYSBkcmFnXHJcbiAgICAgICAgICAgIHBhc3NlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGFzc2VkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zZXREcmFnU3RhdGUocG9pbnRlciwgMyk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRHJhZ1N0YXJ0TGlzdChwb2ludGVyKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvY2Vzc2VzIHRoZSBkcmFnIGxpc3QgZm9yIHRoZSBnaXZlbiBwb2ludGVyIGFuZCBkaXNwYXRjaGVzIHRoZSBzdGFydCBldmVudHMgZm9yIGVhY2ggb2JqZWN0IG9uIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3Byb2Nlc3NEcmFnU3RhcnRMaXN0XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjRFJBR19TVEFSVFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRU9CSkVDVF9EUkFHX1NUQVJUXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHRvIHByb2Nlc3MgdGhlIGRyYWcgZXZlbnQgb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gVGhlIG51bWJlciBvZiBpdGVtcyB0aGF0IERSQUdfU1RBUlQgd2FzIGNhbGxlZCBvbi5cclxuICAgICAqL1xyXG4gICAgcHJvY2Vzc0RyYWdTdGFydExpc3Q6IGZ1bmN0aW9uIChwb2ludGVyKVxyXG4gICAge1xyXG4gICAgICAgIC8vICAzID0gUG9pbnRlciBtZWV0cyBjcml0ZXJpYSBhbmQgaXMgZnJlc2hseSBkb3duLCBub3RpZnkgdGhlIGRyYWdsaXN0XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0RHJhZ1N0YXRlKHBvaW50ZXIpICE9PSAzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbGlzdCA9IHRoaXMuX2RyYWdbcG9pbnRlci5pZF07XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBnYW1lT2JqZWN0ID0gbGlzdFtpXTtcclxuXHJcbiAgICAgICAgICAgIHZhciBpbnB1dCA9IGdhbWVPYmplY3QuaW5wdXQ7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5kcmFnU3RhdGUgPSAyO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuZHJhZ1N0YXJ0WCA9IGdhbWVPYmplY3QueDtcclxuICAgICAgICAgICAgaW5wdXQuZHJhZ1N0YXJ0WSA9IGdhbWVPYmplY3QueTtcclxuXHJcbiAgICAgICAgICAgIGlucHV0LmRyYWdTdGFydFhHbG9iYWwgPSBwb2ludGVyLng7XHJcbiAgICAgICAgICAgIGlucHV0LmRyYWdTdGFydFlHbG9iYWwgPSBwb2ludGVyLnk7XHJcblxyXG4gICAgICAgICAgICBpbnB1dC5kcmFnWCA9IGlucHV0LmRyYWdTdGFydFhHbG9iYWwgLSBpbnB1dC5kcmFnU3RhcnRYO1xyXG4gICAgICAgICAgICBpbnB1dC5kcmFnWSA9IGlucHV0LmRyYWdTdGFydFlHbG9iYWwgLSBpbnB1dC5kcmFnU3RhcnRZO1xyXG5cclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5lbWl0KEV2ZW50cy5HQU1FT0JKRUNUX0RSQUdfU1RBUlQsIHBvaW50ZXIsIGlucHV0LmRyYWdYLCBpbnB1dC5kcmFnWSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkRSQUdfU1RBUlQsIHBvaW50ZXIsIGdhbWVPYmplY3QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXREcmFnU3RhdGUocG9pbnRlciwgNCk7XHJcblxyXG4gICAgICAgIHJldHVybiBsaXN0Lmxlbmd0aDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9jZXNzZXMgYSAnZHJhZyBkb3duJyBldmVudCBmb3IgdGhlIGdpdmVuIHBvaW50ZXIuIENoZWNrcyB0aGUgcG9pbnRlciBzdGF0ZSwgYnVpbGRzLXVwIHRoZSBkcmFnIGxpc3RcclxuICAgICAqIGFuZCBwcmVwYXJlcyB0aGVtIGFsbCBmb3IgaW50ZXJhY3Rpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jcHJvY2Vzc0RyYWdEb3duRXZlbnRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHRvIHByb2Nlc3MgdGhlIGRyYWcgZXZlbnQgb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gVGhlIG51bWJlciBvZiBpdGVtcyB0aGF0IHdlcmUgY29sbGVjdGVkIG9uIHRoZSBkcmFnIGxpc3QuXHJcbiAgICAgKi9cclxuICAgIHByb2Nlc3NEcmFnRG93bkV2ZW50OiBmdW5jdGlvbiAocG9pbnRlcilcclxuICAgIHtcclxuICAgICAgICB2YXIgY3VycmVudGx5T3ZlciA9IHRoaXMuX3RlbXA7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9kcmFnZ2FibGUubGVuZ3RoID09PSAwIHx8IGN1cnJlbnRseU92ZXIubGVuZ3RoID09PSAwIHx8ICFwb2ludGVyLnByaW1hcnlEb3duIHx8IHRoaXMuZ2V0RHJhZ1N0YXRlKHBvaW50ZXIpICE9PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFRoZXJlIGFyZSBubyBkcmFnZ2FibGUgaXRlbXMsIG5vIG92ZXIgaXRlbXMgb3IgdGhlIHBvaW50ZXIgaXNuJ3QgZG93biwgc28gbGV0J3Mgbm90IGV2ZW4gYm90aGVyIGdvaW5nIGZ1cnRoZXJcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgMSA9IFByaW1hcnkgYnV0dG9uIGRvd24gYW5kIG9iamVjdHMgYmVsb3csIHNvIGNvbGxlY3QgYSBkcmFnbGlzdFxyXG4gICAgICAgIHRoaXMuc2V0RHJhZ1N0YXRlKHBvaW50ZXIsIDEpO1xyXG5cclxuICAgICAgICAvLyAgR2V0IGRyYWdnYWJsZSBvYmplY3RzLCBzb3J0IHRoZW0sIHBpY2sgdGhlIHRvcCAob3IgYWxsKSBhbmQgc3RvcmUgdGhlbSBzb21ld2hlcmVcclxuICAgICAgICB2YXIgZHJhZ2xpc3QgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyZW50bHlPdmVyLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGdhbWVPYmplY3QgPSBjdXJyZW50bHlPdmVyW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGdhbWVPYmplY3QuaW5wdXQuZHJhZ2dhYmxlICYmIChnYW1lT2JqZWN0LmlucHV0LmRyYWdTdGF0ZSA9PT0gMCkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGRyYWdsaXN0LnB1c2goZ2FtZU9iamVjdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkcmFnbGlzdC5sZW5ndGggPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNldERyYWdTdGF0ZShwb2ludGVyLCAwKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChkcmFnbGlzdC5sZW5ndGggPiAxKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zb3J0R2FtZU9iamVjdHMoZHJhZ2xpc3QpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMudG9wT25seSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZHJhZ2xpc3Quc3BsaWNlKDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgZHJhZ2xpc3Qgbm93IGNvbnRhaW5zIGFsbCBwb3RlbnRpYWwgY2FuZGlkYXRlcyBmb3IgZHJhZ2dpbmdcclxuICAgICAgICB0aGlzLl9kcmFnW3BvaW50ZXIuaWRdID0gZHJhZ2xpc3Q7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRyYWdEaXN0YW5jZVRocmVzaG9sZCA9PT0gMCAmJiB0aGlzLmRyYWdUaW1lVGhyZXNob2xkID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIE5vIGRyYWcgY3JpdGVyaWEsIHNvIHNuYXAgaW1tZWRpYXRlbHkgdG8gbW9kZSAzXHJcbiAgICAgICAgICAgIHRoaXMuc2V0RHJhZ1N0YXRlKHBvaW50ZXIsIDMpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RyYWdTdGFydExpc3QocG9pbnRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBDaGVjayB0aGUgZGlzdGFuY2UgLyB0aW1lIG9uIHRoZSBuZXh0IGV2ZW50XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RHJhZ1N0YXRlKHBvaW50ZXIsIDIpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb2Nlc3NlcyBhICdkcmFnIG1vdmUnIGV2ZW50IGZvciB0aGUgZ2l2ZW4gcG9pbnRlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNwcm9jZXNzRHJhZ01vdmVFdmVudFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0RSQUdfRU5URVJcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0RSQUdcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0RSQUdfTEVBVkVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0RSQUdfT1ZFUlxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRU9CSkVDVF9EUkFHX0VOVEVSXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FT0JKRUNUX0RSQUdcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfRFJBR19MRUFWRVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRU9CSkVDVF9EUkFHX09WRVJcclxuICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgdG8gcHJvY2VzcyB0aGUgZHJhZyBldmVudCBvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgd2VyZSB1cGRhdGVkIGJ5IHRoaXMgZHJhZyBldmVudC5cclxuICAgICAqL1xyXG4gICAgcHJvY2Vzc0RyYWdNb3ZlRXZlbnQ6IGZ1bmN0aW9uIChwb2ludGVyKVxyXG4gICAge1xyXG4gICAgICAgIC8vICAyID0gUG9pbnRlciBiZWluZyBjaGVja2VkIGlmIG1lZXRzIGRyYWcgY3JpdGVyaWFcclxuICAgICAgICBpZiAodGhpcy5nZXREcmFnU3RhdGUocG9pbnRlcikgPT09IDIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NEcmFnVGhyZXNob2xkRXZlbnQocG9pbnRlciwgdGhpcy5tYW5hZ2VyLmdhbWUubG9vcC5ub3cpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0RHJhZ1N0YXRlKHBvaW50ZXIpICE9PSA0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgNCA9IFBvaW50ZXIgYWN0aXZlbHkgZHJhZ2dpbmcgdGhlIGRyYWdsaXN0IGFuZCBoYXMgbW92ZWRcclxuICAgICAgICB2YXIgZHJvcFpvbmVzID0gdGhpcy5fdGVtcFpvbmVzO1xyXG5cclxuICAgICAgICB2YXIgbGlzdCA9IHRoaXMuX2RyYWdbcG9pbnRlci5pZF07XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBnYW1lT2JqZWN0ID0gbGlzdFtpXTtcclxuXHJcbiAgICAgICAgICAgIHZhciBpbnB1dCA9IGdhbWVPYmplY3QuaW5wdXQ7XHJcblxyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gaW5wdXQudGFyZ2V0O1xyXG5cclxuICAgICAgICAgICAgLy8gIElmIHRoaXMgR08gaGFzIGEgdGFyZ2V0IHRoZW4gbGV0J3MgY2hlY2sgaXRcclxuICAgICAgICAgICAgaWYgKHRhcmdldClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gZHJvcFpvbmVzLmluZGV4T2YodGFyZ2V0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyAgR290IGEgdGFyZ2V0LCBhcmUgd2Ugc3RpbGwgb3ZlciBpdD9cclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgV2UncmUgc3RpbGwgb3ZlciBpdCwgYW5kIGl0J3Mgc3RpbGwgdGhlIHRvcCBvZiB0aGUgZGlzcGxheSBsaXN0LCBwaGV3IC4uLlxyXG4gICAgICAgICAgICAgICAgICAgIGdhbWVPYmplY3QuZW1pdChFdmVudHMuR0FNRU9CSkVDVF9EUkFHX09WRVIsIHBvaW50ZXIsIHRhcmdldCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuRFJBR19PVkVSLCBwb2ludGVyLCBnYW1lT2JqZWN0LCB0YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5kZXggPiAwKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICBTdGlsbCBvdmVyIGl0IGJ1dCBpdCdzIG5vIGxvbmdlciB0b3Agb2YgdGhlIGRpc3BsYXkgbGlzdCAodGFyZ2V0cyBtdXN0IGFsd2F5cyBiZSBhdCB0aGUgdG9wKVxyXG4gICAgICAgICAgICAgICAgICAgIGdhbWVPYmplY3QuZW1pdChFdmVudHMuR0FNRU9CSkVDVF9EUkFHX0xFQVZFLCBwb2ludGVyLCB0YXJnZXQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkRSQUdfTEVBVkUsIHBvaW50ZXIsIGdhbWVPYmplY3QsIHRhcmdldCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0LnRhcmdldCA9IGRyb3Bab25lc1swXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gaW5wdXQudGFyZ2V0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBnYW1lT2JqZWN0LmVtaXQoRXZlbnRzLkdBTUVPQkpFQ1RfRFJBR19FTlRFUiwgcG9pbnRlciwgdGFyZ2V0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5EUkFHX0VOVEVSLCBwb2ludGVyLCBnYW1lT2JqZWN0LCB0YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICBOb3BlLCB3ZSd2ZSBtb3ZlZCBvbiAob3IgdGhlIHRhcmdldCBoYXMhKSwgbGVhdmUgdGhlIG9sZCB0YXJnZXRcclxuICAgICAgICAgICAgICAgICAgICBnYW1lT2JqZWN0LmVtaXQoRXZlbnRzLkdBTUVPQkpFQ1RfRFJBR19MRUFWRSwgcG9pbnRlciwgdGFyZ2V0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5EUkFHX0xFQVZFLCBwb2ludGVyLCBnYW1lT2JqZWN0LCB0YXJnZXQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyAgQW55dGhpbmcgbmV3IHRvIHJlcGxhY2UgaXQ/XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gIFl1cCFcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZHJvcFpvbmVzWzBdKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQudGFyZ2V0ID0gZHJvcFpvbmVzWzBdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gaW5wdXQudGFyZ2V0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2FtZU9iamVjdC5lbWl0KEV2ZW50cy5HQU1FT0JKRUNUX0RSQUdfRU5URVIsIHBvaW50ZXIsIHRhcmdldCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkRSQUdfRU5URVIsIHBvaW50ZXIsIGdhbWVPYmplY3QsIHRhcmdldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICBOb3BlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LnRhcmdldCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCF0YXJnZXQgJiYgZHJvcFpvbmVzWzBdKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dC50YXJnZXQgPSBkcm9wWm9uZXNbMF07XHJcblxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gaW5wdXQudGFyZ2V0O1xyXG5cclxuICAgICAgICAgICAgICAgIGdhbWVPYmplY3QuZW1pdChFdmVudHMuR0FNRU9CSkVDVF9EUkFHX0VOVEVSLCBwb2ludGVyLCB0YXJnZXQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuRFJBR19FTlRFUiwgcG9pbnRlciwgZ2FtZU9iamVjdCwgdGFyZ2V0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGRyYWdYO1xyXG4gICAgICAgICAgICB2YXIgZHJhZ1k7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWdhbWVPYmplY3QucGFyZW50Q29udGFpbmVyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkcmFnWCA9IHBvaW50ZXIueCAtIGlucHV0LmRyYWdYO1xyXG4gICAgICAgICAgICAgICAgZHJhZ1kgPSBwb2ludGVyLnkgLSBpbnB1dC5kcmFnWTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBkeCA9IHBvaW50ZXIueCAtIGlucHV0LmRyYWdTdGFydFhHbG9iYWw7XHJcbiAgICAgICAgICAgICAgICB2YXIgZHkgPSBwb2ludGVyLnkgLSBpbnB1dC5kcmFnU3RhcnRZR2xvYmFsO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciByb3RhdGlvbiA9IGdhbWVPYmplY3QuZ2V0UGFyZW50Um90YXRpb24oKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgZHhSb3RhdGVkID0gZHggKiBNYXRoLmNvcyhyb3RhdGlvbikgKyBkeSAqIE1hdGguc2luKHJvdGF0aW9uKTtcclxuICAgICAgICAgICAgICAgIHZhciBkeVJvdGF0ZWQgPSBkeSAqIE1hdGguY29zKHJvdGF0aW9uKSAtIGR4ICogTWF0aC5zaW4ocm90YXRpb24pO1xyXG5cclxuICAgICAgICAgICAgICAgIGR4Um90YXRlZCAqPSAoMSAvIGdhbWVPYmplY3QucGFyZW50Q29udGFpbmVyLnNjYWxlWCk7XHJcbiAgICAgICAgICAgICAgICBkeVJvdGF0ZWQgKj0gKDEgLyBnYW1lT2JqZWN0LnBhcmVudENvbnRhaW5lci5zY2FsZVkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGRyYWdYID0gZHhSb3RhdGVkICsgaW5wdXQuZHJhZ1N0YXJ0WDtcclxuICAgICAgICAgICAgICAgIGRyYWdZID0gZHlSb3RhdGVkICsgaW5wdXQuZHJhZ1N0YXJ0WTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5lbWl0KEV2ZW50cy5HQU1FT0JKRUNUX0RSQUcsIHBvaW50ZXIsIGRyYWdYLCBkcmFnWSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkRSQUcsIHBvaW50ZXIsIGdhbWVPYmplY3QsIGRyYWdYLCBkcmFnWSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbGlzdC5sZW5ndGg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvY2Vzc2VzIGEgJ2RyYWcgZG93bicgZXZlbnQgZm9yIHRoZSBnaXZlbiBwb2ludGVyLiBDaGVja3MgdGhlIHBvaW50ZXIgc3RhdGUsIGJ1aWxkcy11cCB0aGUgZHJhZyBsaXN0XHJcbiAgICAgKiBhbmQgcHJlcGFyZXMgdGhlbSBhbGwgZm9yIGludGVyYWN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3Byb2Nlc3NEcmFnVXBFdmVudFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjRFJBR19FTkRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0RST1BcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfRFJBR19FTkRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfRFJPUFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgdG8gcHJvY2VzcyB0aGUgZHJhZyBldmVudCBvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgd2VyZSB1cGRhdGVkIGJ5IHRoaXMgZHJhZyBldmVudC5cclxuICAgICAqL1xyXG4gICAgcHJvY2Vzc0RyYWdVcEV2ZW50OiBmdW5jdGlvbiAocG9pbnRlcilcclxuICAgIHtcclxuICAgICAgICAvLyAgNSA9IFBvaW50ZXIgd2FzIGFjdGl2ZWx5IGRyYWdnaW5nIGJ1dCBoYXMgYmVlbiByZWxlYXNlZCwgbm90aWZ5IGRyYWdsaXN0XHJcbiAgICAgICAgdmFyIGxpc3QgPSB0aGlzLl9kcmFnW3BvaW50ZXIuaWRdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZ2FtZU9iamVjdCA9IGxpc3RbaV07XHJcblxyXG4gICAgICAgICAgICB2YXIgaW5wdXQgPSBnYW1lT2JqZWN0LmlucHV0O1xyXG5cclxuICAgICAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LmRyYWdTdGF0ZSA9PT0gMilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaW5wdXQuZHJhZ1N0YXRlID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgICBpbnB1dC5kcmFnWCA9IGlucHV0LmxvY2FsWCAtIGdhbWVPYmplY3QuZGlzcGxheU9yaWdpblg7XHJcbiAgICAgICAgICAgICAgICBpbnB1dC5kcmFnWSA9IGlucHV0LmxvY2FsWSAtIGdhbWVPYmplY3QuZGlzcGxheU9yaWdpblk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGRyb3BwZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gaW5wdXQudGFyZ2V0O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2FtZU9iamVjdC5lbWl0KEV2ZW50cy5HQU1FT0JKRUNUX0RST1AsIHBvaW50ZXIsIHRhcmdldCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuRFJPUCwgcG9pbnRlciwgZ2FtZU9iamVjdCwgdGFyZ2V0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQudGFyZ2V0ID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcHBlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIEFuZCBmaW5hbGx5IHRoZSBkcmFnZW5kIGV2ZW50XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGdhbWVPYmplY3QuaW5wdXQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2FtZU9iamVjdC5lbWl0KEV2ZW50cy5HQU1FT0JKRUNUX0RSQUdfRU5ELCBwb2ludGVyLCBpbnB1dC5kcmFnWCwgaW5wdXQuZHJhZ1ksIGRyb3BwZWQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkRSQUdfRU5ELCBwb2ludGVyLCBnYW1lT2JqZWN0LCBkcm9wcGVkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXREcmFnU3RhdGUocG9pbnRlciwgMCk7XHJcblxyXG4gICAgICAgIGxpc3Quc3BsaWNlKDApO1xyXG5cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBpbnRlcm5hbCBtZXRob2QgdGhhdCBoYW5kbGVzIHRoZSBQb2ludGVyIG1vdmVtZW50IGV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3Byb2Nlc3NNb3ZlRXZlbnRzXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRU9CSkVDVF9QT0lOVEVSX01PVkVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfTU9WRVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjUE9JTlRFUl9NT1ZFXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIHBvaW50ZXIgdG8gY2hlY2sgZm9yIGV2ZW50cyBhZ2FpbnN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSB0b3RhbCBudW1iZXIgb2Ygb2JqZWN0cyBpbnRlcmFjdGVkIHdpdGguXHJcbiAgICAgKi9cclxuICAgIHByb2Nlc3NNb3ZlRXZlbnRzOiBmdW5jdGlvbiAocG9pbnRlcilcclxuICAgIHtcclxuICAgICAgICB2YXIgdG90YWwgPSAwO1xyXG4gICAgICAgIHZhciBjdXJyZW50bHlPdmVyID0gdGhpcy5fdGVtcDtcclxuXHJcbiAgICAgICAgdmFyIF9ldmVudERhdGEgPSB0aGlzLl9ldmVudERhdGE7XHJcbiAgICAgICAgdmFyIF9ldmVudENvbnRhaW5lciA9IHRoaXMuX2V2ZW50Q29udGFpbmVyO1xyXG5cclxuICAgICAgICBfZXZlbnREYXRhLmNhbmNlbGxlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB2YXIgYWJvcnRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyAgR28gdGhyb3VnaCBhbGwgb2JqZWN0cyB0aGUgcG9pbnRlciB3YXMgb3ZlciBhbmQgZmlyZSB0aGVpciBldmVudHMgLyBjYWxsYmFja3NcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1cnJlbnRseU92ZXIubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZ2FtZU9iamVjdCA9IGN1cnJlbnRseU92ZXJbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAoIWdhbWVPYmplY3QuaW5wdXQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0b3RhbCsrO1xyXG5cclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5lbWl0KEV2ZW50cy5HQU1FT0JKRUNUX1BPSU5URVJfTU9WRSwgcG9pbnRlciwgZ2FtZU9iamVjdC5pbnB1dC5sb2NhbFgsIGdhbWVPYmplY3QuaW5wdXQubG9jYWxZLCBfZXZlbnRDb250YWluZXIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKF9ldmVudERhdGEuY2FuY2VsbGVkIHx8ICFnYW1lT2JqZWN0LmlucHV0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkdBTUVPQkpFQ1RfTU9WRSwgcG9pbnRlciwgZ2FtZU9iamVjdCwgX2V2ZW50Q29udGFpbmVyKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChfZXZlbnREYXRhLmNhbmNlbGxlZCB8fCAhZ2FtZU9iamVjdC5pbnB1dClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYWJvcnRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMudG9wT25seSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghYWJvcnRlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuUE9JTlRFUl9NT1ZFLCBwb2ludGVyLCBjdXJyZW50bHlPdmVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0b3RhbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBpbnRlcm5hbCBtZXRob2QgdGhhdCBoYW5kbGVzIGEgbW91c2Ugd2hlZWwgZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jcHJvY2Vzc1doZWVsRXZlbnRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FT0JKRUNUX1BPSU5URVJfV0hFRUxcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfV0hFRUxcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI1BPSU5URVJfV0hFRUxcclxuICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIHBvaW50ZXIgdG8gY2hlY2sgZm9yIGV2ZW50cyBhZ2FpbnN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2ludGVnZXJ9IFRoZSB0b3RhbCBudW1iZXIgb2Ygb2JqZWN0cyBpbnRlcmFjdGVkIHdpdGguXHJcbiAgICAgKi9cclxuICAgIHByb2Nlc3NXaGVlbEV2ZW50OiBmdW5jdGlvbiAocG9pbnRlcilcclxuICAgIHtcclxuICAgICAgICB2YXIgdG90YWwgPSAwO1xyXG4gICAgICAgIHZhciBjdXJyZW50bHlPdmVyID0gdGhpcy5fdGVtcDtcclxuXHJcbiAgICAgICAgdmFyIF9ldmVudERhdGEgPSB0aGlzLl9ldmVudERhdGE7XHJcbiAgICAgICAgdmFyIF9ldmVudENvbnRhaW5lciA9IHRoaXMuX2V2ZW50Q29udGFpbmVyO1xyXG5cclxuICAgICAgICBfZXZlbnREYXRhLmNhbmNlbGxlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB2YXIgYWJvcnRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB2YXIgZHggPSBwb2ludGVyLmRlbHRhWDtcclxuICAgICAgICB2YXIgZHkgPSBwb2ludGVyLmRlbHRhWTtcclxuICAgICAgICB2YXIgZHogPSBwb2ludGVyLmRlbHRhWjtcclxuXHJcbiAgICAgICAgLy8gIEdvIHRocm91Z2ggYWxsIG9iamVjdHMgdGhlIHBvaW50ZXIgd2FzIG92ZXIgYW5kIGZpcmUgdGhlaXIgZXZlbnRzIC8gY2FsbGJhY2tzXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyZW50bHlPdmVyLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGdhbWVPYmplY3QgPSBjdXJyZW50bHlPdmVyW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFnYW1lT2JqZWN0LmlucHV0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdG90YWwrKztcclxuXHJcbiAgICAgICAgICAgIGdhbWVPYmplY3QuZW1pdChFdmVudHMuR0FNRU9CSkVDVF9QT0lOVEVSX1dIRUVMLCBwb2ludGVyLCBkeCwgZHksIGR6LCBfZXZlbnRDb250YWluZXIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKF9ldmVudERhdGEuY2FuY2VsbGVkIHx8ICFnYW1lT2JqZWN0LmlucHV0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkdBTUVPQkpFQ1RfV0hFRUwsIHBvaW50ZXIsIGdhbWVPYmplY3QsIGR4LCBkeSwgZHosIF9ldmVudENvbnRhaW5lcik7XHJcblxyXG4gICAgICAgICAgICBpZiAoX2V2ZW50RGF0YS5jYW5jZWxsZWQgfHwgIWdhbWVPYmplY3QuaW5wdXQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghYWJvcnRlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuUE9JTlRFUl9XSEVFTCwgcG9pbnRlciwgY3VycmVudGx5T3ZlciwgZHgsIGR5LCBkeik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdG90YWw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gaW50ZXJuYWwgbWV0aG9kIHRoYXQgaGFuZGxlcyB0aGUgUG9pbnRlciBvdmVyIGV2ZW50cy5cclxuICAgICAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBpbnB1dCBoaXRzIHRoZSBjYW52YXMsIGhhdmluZyBwcmV2aW91c2x5IGJlZW4gb2ZmIG9mIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3Byb2Nlc3NPdmVyRXZlbnRzXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRU9CSkVDVF9QT0lOVEVSX09WRVJcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfT1ZFUlxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjUE9JTlRFUl9PVkVSXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBwb2ludGVyIHRvIGNoZWNrIGZvciBldmVudHMgYWdhaW5zdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgdG90YWwgbnVtYmVyIG9mIG9iamVjdHMgaW50ZXJhY3RlZCB3aXRoLlxyXG4gICAgICovXHJcbiAgICBwcm9jZXNzT3ZlckV2ZW50czogZnVuY3Rpb24gKHBvaW50ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGN1cnJlbnRseU92ZXIgPSB0aGlzLl90ZW1wO1xyXG5cclxuICAgICAgICB2YXIgdG90YWxJbnRlcmFjdGVkID0gMDtcclxuXHJcbiAgICAgICAgdmFyIHRvdGFsID0gY3VycmVudGx5T3Zlci5sZW5ndGg7XHJcblxyXG4gICAgICAgIHZhciBqdXN0T3ZlciA9IFtdO1xyXG5cclxuICAgICAgICBpZiAodG90YWwgPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIG1hbmFnZXIgPSB0aGlzLm1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgICB2YXIgX2V2ZW50RGF0YSA9IHRoaXMuX2V2ZW50RGF0YTtcclxuICAgICAgICAgICAgdmFyIF9ldmVudENvbnRhaW5lciA9IHRoaXMuX2V2ZW50Q29udGFpbmVyO1xyXG5cclxuICAgICAgICAgICAgX2V2ZW50RGF0YS5jYW5jZWxsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIHZhciBhYm9ydGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvdGFsOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBnYW1lT2JqZWN0ID0gY3VycmVudGx5T3ZlcltpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWdhbWVPYmplY3QuaW5wdXQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAganVzdE92ZXIucHVzaChnYW1lT2JqZWN0KTtcclxuXHJcbiAgICAgICAgICAgICAgICBtYW5hZ2VyLnNldEN1cnNvcihnYW1lT2JqZWN0LmlucHV0KTtcclxuXHJcbiAgICAgICAgICAgICAgICBnYW1lT2JqZWN0LmVtaXQoRXZlbnRzLkdBTUVPQkpFQ1RfUE9JTlRFUl9PVkVSLCBwb2ludGVyLCBnYW1lT2JqZWN0LmlucHV0LmxvY2FsWCwgZ2FtZU9iamVjdC5pbnB1dC5sb2NhbFksIF9ldmVudENvbnRhaW5lcik7XHJcblxyXG4gICAgICAgICAgICAgICAgdG90YWxJbnRlcmFjdGVkKys7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF9ldmVudERhdGEuY2FuY2VsbGVkIHx8ICFnYW1lT2JqZWN0LmlucHV0KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuR0FNRU9CSkVDVF9PVkVSLCBwb2ludGVyLCBnYW1lT2JqZWN0LCBfZXZlbnRDb250YWluZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfZXZlbnREYXRhLmNhbmNlbGxlZCB8fCAhZ2FtZU9iamVjdC5pbnB1dClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFhYm9ydGVkKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlBPSU5URVJfT1ZFUiwgcG9pbnRlciwganVzdE92ZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgVGhlbiBzb3J0IGl0IGludG8gZGlzcGxheSBsaXN0IG9yZGVyXHJcbiAgICAgICAgdGhpcy5fb3Zlcltwb2ludGVyLmlkXSA9IGp1c3RPdmVyO1xyXG5cclxuICAgICAgICByZXR1cm4gdG90YWxJbnRlcmFjdGVkO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuIGludGVybmFsIG1ldGhvZCB0aGF0IGhhbmRsZXMgdGhlIFBvaW50ZXIgb3V0IGV2ZW50cy5cclxuICAgICAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBpbnB1dCBsZWF2ZXMgdGhlIGNhbnZhcywgYXMgaXQgY2FuIG5ldmVyIGJlICdvdmVyJyBpbiB0aGlzIGNhc2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jcHJvY2Vzc091dEV2ZW50c1xyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfUE9JTlRFUl9PVVRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfT1VUXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNQT0lOVEVSX09VVFxyXG4gICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgcG9pbnRlciB0byBjaGVjayBmb3IgZXZlbnRzIGFnYWluc3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gVGhlIHRvdGFsIG51bWJlciBvZiBvYmplY3RzIGludGVyYWN0ZWQgd2l0aC5cclxuICAgICAqL1xyXG4gICAgcHJvY2Vzc091dEV2ZW50czogZnVuY3Rpb24gKHBvaW50ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHByZXZpb3VzbHlPdmVyID0gdGhpcy5fb3Zlcltwb2ludGVyLmlkXTtcclxuXHJcbiAgICAgICAgdmFyIHRvdGFsSW50ZXJhY3RlZCA9IDA7XHJcblxyXG4gICAgICAgIHZhciB0b3RhbCA9IHByZXZpb3VzbHlPdmVyLmxlbmd0aDtcclxuXHJcbiAgICAgICAgaWYgKHRvdGFsID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBtYW5hZ2VyID0gdGhpcy5tYW5hZ2VyO1xyXG5cclxuICAgICAgICAgICAgdmFyIF9ldmVudERhdGEgPSB0aGlzLl9ldmVudERhdGE7XHJcbiAgICAgICAgICAgIHZhciBfZXZlbnRDb250YWluZXIgPSB0aGlzLl9ldmVudENvbnRhaW5lcjtcclxuXHJcbiAgICAgICAgICAgIF9ldmVudERhdGEuY2FuY2VsbGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICB2YXIgYWJvcnRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zb3J0R2FtZU9iamVjdHMocHJldmlvdXNseU92ZXIpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZ2FtZU9iamVjdCA9IHByZXZpb3VzbHlPdmVyW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vICBDYWxsIG9uT3V0IGZvciBldmVyeXRoaW5nIGluIHRoZSBwcmV2aW91c2x5T3ZlciBhcnJheVxyXG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2FtZU9iamVjdCA9IHByZXZpb3VzbHlPdmVyW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWdhbWVPYmplY3QuaW5wdXQpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG1hbmFnZXIucmVzZXRDdXJzb3IoZ2FtZU9iamVjdC5pbnB1dCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGdhbWVPYmplY3QuZW1pdChFdmVudHMuR0FNRU9CSkVDVF9QT0lOVEVSX09VVCwgcG9pbnRlciwgX2V2ZW50Q29udGFpbmVyKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWxJbnRlcmFjdGVkKys7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfZXZlbnREYXRhLmNhbmNlbGxlZCB8fCAhZ2FtZU9iamVjdC5pbnB1dClcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuR0FNRU9CSkVDVF9PVVQsIHBvaW50ZXIsIGdhbWVPYmplY3QsIF9ldmVudENvbnRhaW5lcik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfZXZlbnREYXRhLmNhbmNlbGxlZCB8fCAhZ2FtZU9iamVjdC5pbnB1dClcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFhYm9ydGVkKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuUE9JTlRFUl9PVVQsIHBvaW50ZXIsIHByZXZpb3VzbHlPdmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fb3Zlcltwb2ludGVyLmlkXSA9IFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRvdGFsSW50ZXJhY3RlZDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBpbnRlcm5hbCBtZXRob2QgdGhhdCBoYW5kbGVzIHRoZSBQb2ludGVyIG92ZXIgYW5kIG91dCBldmVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jcHJvY2Vzc092ZXJPdXRFdmVudHNcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FT0JKRUNUX1BPSU5URVJfT1ZFUlxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRU9CSkVDVF9PVkVSXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNQT0lOVEVSX09WRVJcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfUE9JTlRFUl9PVVRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfT1VUXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNQT0lOVEVSX09VVFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBwb2ludGVyIHRvIGNoZWNrIGZvciBldmVudHMgYWdhaW5zdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgdG90YWwgbnVtYmVyIG9mIG9iamVjdHMgaW50ZXJhY3RlZCB3aXRoLlxyXG4gICAgICovXHJcbiAgICBwcm9jZXNzT3Zlck91dEV2ZW50czogZnVuY3Rpb24gKHBvaW50ZXIpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGN1cnJlbnRseU92ZXIgPSB0aGlzLl90ZW1wO1xyXG5cclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICB2YXIgZ2FtZU9iamVjdDtcclxuICAgICAgICB2YXIganVzdE91dCA9IFtdO1xyXG4gICAgICAgIHZhciBqdXN0T3ZlciA9IFtdO1xyXG4gICAgICAgIHZhciBzdGlsbE92ZXIgPSBbXTtcclxuICAgICAgICB2YXIgcHJldmlvdXNseU92ZXIgPSB0aGlzLl9vdmVyW3BvaW50ZXIuaWRdO1xyXG4gICAgICAgIHZhciBjdXJyZW50bHlEcmFnZ2luZyA9IHRoaXMuX2RyYWdbcG9pbnRlci5pZF07XHJcblxyXG4gICAgICAgIHZhciBtYW5hZ2VyID0gdGhpcy5tYW5hZ2VyO1xyXG5cclxuICAgICAgICAvLyAgR28gdGhyb3VnaCBhbGwgb2JqZWN0cyB0aGUgcG9pbnRlciB3YXMgcHJldmlvdXNseSBvdmVyLCBhbmQgc2VlIGlmIGl0IHN0aWxsIGlzLlxyXG4gICAgICAgIC8vICBTcGxpdHMgdGhlIHByZXZpb3VzbHlPdmVyIGFycmF5IGludG8gdHdvIHBhcnRzOiBqdXN0T3V0IGFuZCBzdGlsbE92ZXJcclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByZXZpb3VzbHlPdmVyLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZ2FtZU9iamVjdCA9IHByZXZpb3VzbHlPdmVyW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRseU92ZXIuaW5kZXhPZihnYW1lT2JqZWN0KSA9PT0gLTEgJiYgY3VycmVudGx5RHJhZ2dpbmcuaW5kZXhPZihnYW1lT2JqZWN0KSA9PT0gLTEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBOb3QgaW4gdGhlIGN1cnJlbnRseU92ZXIgYXJyYXksIHNvIG11c3QgYmUgb3V0c2lkZSBvZiB0aGlzIG9iamVjdCBub3dcclxuICAgICAgICAgICAgICAgIGp1c3RPdXQucHVzaChnYW1lT2JqZWN0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBJbiB0aGUgY3VycmVudGx5T3ZlciBhcnJheVxyXG4gICAgICAgICAgICAgICAgc3RpbGxPdmVyLnB1c2goZ2FtZU9iamVjdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBHbyB0aHJvdWdoIGFsbCBvYmplY3RzIHRoZSBwb2ludGVyIGlzIGN1cnJlbnRseSBvdmVyICh0aGUgaGl0IHRlc3QgcmVzdWx0cylcclxuICAgICAgICAvLyAgYW5kIGlmIG5vdCBpbiB0aGUgcHJldmlvdXNseU92ZXIgYXJyYXkgd2Uga25vdyBpdCdzIGEgbmV3IGVudHJ5LCBzbyBhZGQgdG8ganVzdE92ZXJcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VycmVudGx5T3Zlci5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdhbWVPYmplY3QgPSBjdXJyZW50bHlPdmVyW2ldO1xyXG5cclxuICAgICAgICAgICAgLy8gIElzIHRoaXMgbmV3bHkgb3Zlcj9cclxuXHJcbiAgICAgICAgICAgIGlmIChwcmV2aW91c2x5T3Zlci5pbmRleE9mKGdhbWVPYmplY3QpID09PSAtMSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAganVzdE92ZXIucHVzaChnYW1lT2JqZWN0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIEJ5IHRoaXMgcG9pbnQgdGhlIGFycmF5cyBhcmUgZmlsbGVkLCBzbyBub3cgd2UgY2FuIHByb2Nlc3Mgd2hhdCBoYXBwZW5lZC4uLlxyXG5cclxuICAgICAgICAvLyAgUHJvY2VzcyB0aGUgSnVzdCBPdXQgb2JqZWN0c1xyXG4gICAgICAgIHZhciB0b3RhbCA9IGp1c3RPdXQubGVuZ3RoO1xyXG5cclxuICAgICAgICB2YXIgdG90YWxJbnRlcmFjdGVkID0gMDtcclxuXHJcbiAgICAgICAgdmFyIF9ldmVudERhdGEgPSB0aGlzLl9ldmVudERhdGE7XHJcbiAgICAgICAgdmFyIF9ldmVudENvbnRhaW5lciA9IHRoaXMuX2V2ZW50Q29udGFpbmVyO1xyXG5cclxuICAgICAgICBfZXZlbnREYXRhLmNhbmNlbGxlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB2YXIgYWJvcnRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodG90YWwgPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zb3J0R2FtZU9iamVjdHMoanVzdE91dCk7XHJcblxyXG4gICAgICAgICAgICAvLyAgQ2FsbCBvbk91dCBmb3IgZXZlcnl0aGluZyBpbiB0aGUganVzdE91dCBhcnJheVxyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWw7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZ2FtZU9iamVjdCA9IGp1c3RPdXRbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFnYW1lT2JqZWN0LmlucHV0KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vICBSZXNldCBjdXJzb3IgYmVmb3JlIHdlIGVtaXQgdGhlIGV2ZW50LCBpbiBjYXNlIHRoZXkgd2FudCB0byBjaGFuZ2UgaXQgZHVyaW5nIHRoZSBldmVudFxyXG4gICAgICAgICAgICAgICAgbWFuYWdlci5yZXNldEN1cnNvcihnYW1lT2JqZWN0LmlucHV0KTtcclxuXHJcbiAgICAgICAgICAgICAgICBnYW1lT2JqZWN0LmVtaXQoRXZlbnRzLkdBTUVPQkpFQ1RfUE9JTlRFUl9PVVQsIHBvaW50ZXIsIF9ldmVudENvbnRhaW5lcik7XHJcblxyXG4gICAgICAgICAgICAgICAgdG90YWxJbnRlcmFjdGVkKys7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF9ldmVudERhdGEuY2FuY2VsbGVkIHx8ICFnYW1lT2JqZWN0LmlucHV0KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuR0FNRU9CSkVDVF9PVVQsIHBvaW50ZXIsIGdhbWVPYmplY3QsIF9ldmVudENvbnRhaW5lcik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF9ldmVudERhdGEuY2FuY2VsbGVkIHx8ICFnYW1lT2JqZWN0LmlucHV0KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWFib3J0ZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuUE9JTlRFUl9PVVQsIHBvaW50ZXIsIGp1c3RPdXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgUHJvY2VzcyB0aGUgSnVzdCBPdmVyIG9iamVjdHNcclxuICAgICAgICB0b3RhbCA9IGp1c3RPdmVyLmxlbmd0aDtcclxuXHJcbiAgICAgICAgX2V2ZW50RGF0YS5jYW5jZWxsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgYWJvcnRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodG90YWwgPiAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zb3J0R2FtZU9iamVjdHMoanVzdE92ZXIpO1xyXG5cclxuICAgICAgICAgICAgLy8gIENhbGwgb25PdmVyIGZvciBldmVyeXRoaW5nIGluIHRoZSBqdXN0T3ZlciBhcnJheVxyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWw7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZ2FtZU9iamVjdCA9IGp1c3RPdmVyW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghZ2FtZU9iamVjdC5pbnB1dClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyAgU2V0IGN1cnNvciBiZWZvcmUgd2UgZW1pdCB0aGUgZXZlbnQsIGluIGNhc2UgdGhleSB3YW50IHRvIGNoYW5nZSBpdCBkdXJpbmcgdGhlIGV2ZW50XHJcbiAgICAgICAgICAgICAgICBtYW5hZ2VyLnNldEN1cnNvcihnYW1lT2JqZWN0LmlucHV0KTtcclxuXHJcbiAgICAgICAgICAgICAgICBnYW1lT2JqZWN0LmVtaXQoRXZlbnRzLkdBTUVPQkpFQ1RfUE9JTlRFUl9PVkVSLCBwb2ludGVyLCBnYW1lT2JqZWN0LmlucHV0LmxvY2FsWCwgZ2FtZU9iamVjdC5pbnB1dC5sb2NhbFksIF9ldmVudENvbnRhaW5lcik7XHJcblxyXG4gICAgICAgICAgICAgICAgdG90YWxJbnRlcmFjdGVkKys7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF9ldmVudERhdGEuY2FuY2VsbGVkIHx8ICFnYW1lT2JqZWN0LmlucHV0KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChFdmVudHMuR0FNRU9CSkVDVF9PVkVSLCBwb2ludGVyLCBnYW1lT2JqZWN0LCBfZXZlbnRDb250YWluZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfZXZlbnREYXRhLmNhbmNlbGxlZCB8fCAhZ2FtZU9iamVjdC5pbnB1dClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFhYm9ydGVkKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlBPSU5URVJfT1ZFUiwgcG9pbnRlciwganVzdE92ZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgQWRkIHRoZSBjb250ZW50cyBvZiBqdXN0T3ZlciB0byB0aGUgcHJldmlvdXNseSBvdmVyIGFycmF5XHJcbiAgICAgICAgcHJldmlvdXNseU92ZXIgPSBzdGlsbE92ZXIuY29uY2F0KGp1c3RPdmVyKTtcclxuXHJcbiAgICAgICAgLy8gIFRoZW4gc29ydCBpdCBpbnRvIGRpc3BsYXkgbGlzdCBvcmRlclxyXG4gICAgICAgIHRoaXMuX292ZXJbcG9pbnRlci5pZF0gPSB0aGlzLnNvcnRHYW1lT2JqZWN0cyhwcmV2aW91c2x5T3Zlcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0b3RhbEludGVyYWN0ZWQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gaW50ZXJuYWwgbWV0aG9kIHRoYXQgaGFuZGxlcyB0aGUgUG9pbnRlciB1cCBldmVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jcHJvY2Vzc1VwRXZlbnRzXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRU9CSkVDVF9QT0lOVEVSX1VQXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FT0JKRUNUX1VQXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNQT0lOVEVSX1VQXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNQT0lOVEVSX1VQX09VVFNJREVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgcG9pbnRlciB0byBjaGVjayBmb3IgZXZlbnRzIGFnYWluc3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gVGhlIHRvdGFsIG51bWJlciBvZiBvYmplY3RzIGludGVyYWN0ZWQgd2l0aC5cclxuICAgICAqL1xyXG4gICAgcHJvY2Vzc1VwRXZlbnRzOiBmdW5jdGlvbiAocG9pbnRlcilcclxuICAgIHtcclxuICAgICAgICB2YXIgY3VycmVudGx5T3ZlciA9IHRoaXMuX3RlbXA7XHJcblxyXG4gICAgICAgIHZhciBfZXZlbnREYXRhID0gdGhpcy5fZXZlbnREYXRhO1xyXG4gICAgICAgIHZhciBfZXZlbnRDb250YWluZXIgPSB0aGlzLl9ldmVudENvbnRhaW5lcjtcclxuXHJcbiAgICAgICAgX2V2ZW50RGF0YS5jYW5jZWxsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdmFyIGFib3J0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gIEdvIHRocm91Z2ggYWxsIG9iamVjdHMgdGhlIHBvaW50ZXIgd2FzIG92ZXIgYW5kIGZpcmUgdGhlaXIgZXZlbnRzIC8gY2FsbGJhY2tzXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyZW50bHlPdmVyLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGdhbWVPYmplY3QgPSBjdXJyZW50bHlPdmVyW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFnYW1lT2JqZWN0LmlucHV0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5lbWl0KEV2ZW50cy5HQU1FT0JKRUNUX1BPSU5URVJfVVAsIHBvaW50ZXIsIGdhbWVPYmplY3QuaW5wdXQubG9jYWxYLCBnYW1lT2JqZWN0LmlucHV0LmxvY2FsWSwgX2V2ZW50Q29udGFpbmVyKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChfZXZlbnREYXRhLmNhbmNlbGxlZCB8fCAhZ2FtZU9iamVjdC5pbnB1dClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYWJvcnRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5HQU1FT0JKRUNUX1VQLCBwb2ludGVyLCBnYW1lT2JqZWN0LCBfZXZlbnRDb250YWluZXIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKF9ldmVudERhdGEuY2FuY2VsbGVkIHx8ICFnYW1lT2JqZWN0LmlucHV0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgSWYgdGhleSByZWxlYXNlZCBvdXRzaWRlIHRoZSBjYW52YXMsIGJ1dCBwcmVzc2VkIGRvd24gaW5zaWRlIGl0LCB3ZSdsbCBzdGlsbCBkaXNwYXRjaCB0aGUgZXZlbnQuXHJcbiAgICAgICAgaWYgKCFhYm9ydGVkICYmIHRoaXMubWFuYWdlcilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChwb2ludGVyLnVwRWxlbWVudCA9PT0gdGhpcy5tYW5hZ2VyLmdhbWUuY2FudmFzKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLlBPSU5URVJfVVAsIHBvaW50ZXIsIGN1cnJlbnRseU92ZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5QT0lOVEVSX1VQX09VVFNJREUsIHBvaW50ZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY3VycmVudGx5T3Zlci5sZW5ndGg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUXVldWVzIGEgR2FtZSBPYmplY3QgZm9yIGluc2VydGlvbiBpbnRvIHRoaXMgSW5wdXQgUGx1Z2luIG9uIHRoZSBuZXh0IHVwZGF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNxdWV1ZUZvckluc2VydGlvblxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGNoaWxkIC0gVGhlIEdhbWUgT2JqZWN0IHRvIGFkZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW59IFRoaXMgSW5wdXRQbHVnaW4gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBxdWV1ZUZvckluc2VydGlvbjogZnVuY3Rpb24gKGNoaWxkKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLl9wZW5kaW5nSW5zZXJ0aW9uLmluZGV4T2YoY2hpbGQpID09PSAtMSAmJiB0aGlzLl9saXN0LmluZGV4T2YoY2hpbGQpID09PSAtMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdJbnNlcnRpb24ucHVzaChjaGlsZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBRdWV1ZXMgYSBHYW1lIE9iamVjdCBmb3IgcmVtb3ZhbCBmcm9tIHRoaXMgSW5wdXQgUGx1Z2luIG9uIHRoZSBuZXh0IHVwZGF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNxdWV1ZUZvclJlbW92YWxcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBjaGlsZCAtIFRoZSBHYW1lIE9iamVjdCB0byByZW1vdmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLklucHV0LklucHV0UGx1Z2lufSBUaGlzIElucHV0UGx1Z2luIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcXVldWVGb3JSZW1vdmFsOiBmdW5jdGlvbiAoY2hpbGQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fcGVuZGluZ1JlbW92YWwucHVzaChjaGlsZCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGRyYWdnYWJsZSBzdGF0ZSBvZiB0aGUgZ2l2ZW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLlxyXG4gICAgICpcclxuICAgICAqIFRoZXkgY2FuIGVpdGhlciBiZSBzZXQgdG8gYmUgZHJhZ2dhYmxlLCBvciBjYW4gaGF2ZSB0aGVpciBkcmFnZ2FibGUgc3RhdGUgcmVtb3ZlZCBieSBwYXNzaW5nIGBmYWxzZWAuXHJcbiAgICAgKlxyXG4gICAgICogQSBHYW1lIE9iamVjdCB3aWxsIG5vdCBmaXJlIGRyYWcgZXZlbnRzIHVubGVzcyBpdCBoYXMgYmVlbiBzcGVjaWZpY2FsbHkgZW5hYmxlZCBmb3IgZHJhZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNzZXREcmFnZ2FibGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBnYW1lT2JqZWN0cyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0byBjaGFuZ2UgdGhlIGRyYWdnYWJsZSBzdGF0ZSBvbi5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ZhbHVlPXRydWVdIC0gU2V0IHRvIGB0cnVlYCBpZiB0aGUgR2FtZSBPYmplY3RzIHNob3VsZCBiZSBtYWRlIGRyYWdnYWJsZSwgYGZhbHNlYCBpZiB0aGV5IHNob3VsZCBiZSB1bnNldC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW59IFRoaXMgSW5wdXRQbHVnaW4gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXREcmFnZ2FibGU6IGZ1bmN0aW9uIChnYW1lT2JqZWN0cywgdmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsgdmFsdWUgPSB0cnVlOyB9XHJcblxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShnYW1lT2JqZWN0cykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBnYW1lT2JqZWN0cyA9IFsgZ2FtZU9iamVjdHMgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2FtZU9iamVjdHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZ2FtZU9iamVjdCA9IGdhbWVPYmplY3RzW2ldO1xyXG5cclxuICAgICAgICAgICAgZ2FtZU9iamVjdC5pbnB1dC5kcmFnZ2FibGUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2RyYWdnYWJsZS5pbmRleE9mKGdhbWVPYmplY3QpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHZhbHVlICYmIGluZGV4ID09PSAtMSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZHJhZ2dhYmxlLnB1c2goZ2FtZU9iamVjdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIXZhbHVlICYmIGluZGV4ID4gLTEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RyYWdnYWJsZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGBzZXRJbnRlcmFjdGl2ZWAsIGBlbmFibGVgIG9yIGBzZXRIaXRBcmVhYCB0aGF0IHdpbGwgaGFuZGxlXHJcbiAgICAgKiBwaXhlbC1wZXJmZWN0IGlucHV0IGRldGVjdGlvbiBvbiBhbiBJbWFnZSBvciBTcHJpdGUgYmFzZWQgR2FtZSBPYmplY3QsIG9yIGFueSBjdXN0b20gY2xhc3MgdGhhdCBleHRlbmRzIHRoZW0uXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGNyZWF0ZSBhIHNwcml0ZSB0aGF0IGlzIGNsaWNrYWJsZSBvbiBhbnkgcGl4ZWwgdGhhdCBoYXMgYW4gYWxwaGEgdmFsdWUgPj0gMS5cclxuICAgICAqXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB0aGlzLmFkZC5zcHJpdGUoeCwgeSwga2V5KS5zZXRJbnRlcmFjdGl2ZSh0aGlzLmlucHV0Lm1ha2VQaXhlbFBlcmZlY3QoKSk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgY3JlYXRlIGEgc3ByaXRlIHRoYXQgaXMgY2xpY2thYmxlIG9uIGFueSBwaXhlbCB0aGF0IGhhcyBhbiBhbHBoYSB2YWx1ZSA+PSAxNTAuXHJcbiAgICAgKlxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy5hZGQuc3ByaXRlKHgsIHksIGtleSkuc2V0SW50ZXJhY3RpdmUodGhpcy5pbnB1dC5tYWtlUGl4ZWxQZXJmZWN0KDE1MCkpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogT25jZSB5b3UgaGF2ZSBtYWRlIGFuIEludGVyYWN0aXZlIE9iamVjdCBwaXhlbCBwZXJmZWN0IGl0IGltcGFjdHMgYWxsIGlucHV0IHJlbGF0ZWQgZXZlbnRzIGZvciBpdDogZG93biwgdXAsXHJcbiAgICAgKiBkcmFnc3RhcnQsIGRyYWcsIGV0Yy5cclxuICAgICAqXHJcbiAgICAgKiBBcyBhIHBvaW50ZXIgaW50ZXJhY3RzIHdpdGggdGhlIEdhbWUgT2JqZWN0IGl0IHdpbGwgY29uc3RhbnRseSBwb2xsIHRoZSB0ZXh0dXJlLCBleHRyYWN0aW5nIGEgc2luZ2xlIHBpeGVsIGZyb21cclxuICAgICAqIHRoZSBnaXZlbiBjb29yZGluYXRlcyBhbmQgY2hlY2tpbmcgaXRzIGNvbG9yIHZhbHVlcy4gVGhpcyBpcyBhbiBleHBlbnNpdmUgcHJvY2Vzcywgc28gc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCBvblxyXG4gICAgICogR2FtZSBPYmplY3RzIHRoYXQgcmVhbGx5IG5lZWQgaXQuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbm5vdCBtYWtlIG5vbi10ZXh0dXJlIGJhc2VkIEdhbWUgT2JqZWN0cyBwaXhlbCBwZXJmZWN0LiBTbyB0aGlzIHdpbGwgbm90IHdvcmsgb24gR3JhcGhpY3MsIEJpdG1hcFRleHQsXHJcbiAgICAgKiBSZW5kZXIgVGV4dHVyZXMsIFRleHQsIFRpbGVtYXBzLCBDb250YWluZXJzIG9yIFBhcnRpY2xlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNtYWtlUGl4ZWxQZXJmZWN0XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBbYWxwaGFUb2xlcmFuY2U9MV0gLSBUaGUgYWxwaGEgbGV2ZWwgdGhhdCB0aGUgcGl4ZWwgc2hvdWxkIGJlIGFib3ZlIHRvIGJlIGluY2x1ZGVkIGFzIGEgc3VjY2Vzc2Z1bCBpbnRlcmFjdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gQSBQaXhlbCBQZXJmZWN0IEhhbmRsZXIgZm9yIHVzZSBhcyBhIGhpdEFyZWEgc2hhcGUgY2FsbGJhY2suXHJcbiAgICAgKi9cclxuICAgIG1ha2VQaXhlbFBlcmZlY3Q6IGZ1bmN0aW9uIChhbHBoYVRvbGVyYW5jZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoYWxwaGFUb2xlcmFuY2UgPT09IHVuZGVmaW5lZCkgeyBhbHBoYVRvbGVyYW5jZSA9IDE7IH1cclxuXHJcbiAgICAgICAgdmFyIHRleHR1cmVNYW5hZ2VyID0gdGhpcy5zeXN0ZW1zLnRleHR1cmVzO1xyXG5cclxuICAgICAgICByZXR1cm4gQ3JlYXRlUGl4ZWxQZXJmZWN0SGFuZGxlcih0ZXh0dXJlTWFuYWdlciwgYWxwaGFUb2xlcmFuY2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGhpdCBhcmVhIGZvciB0aGUgZ2l2ZW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzLlxyXG4gICAgICpcclxuICAgICAqIEEgaGl0IGFyZWEgaXMgdHlwaWNhbGx5IG9uZSBvZiB0aGUgZ2VvbWV0cmljIHNoYXBlcyBQaGFzZXIgcHJvdmlkZXMsIHN1Y2ggYXMgYSBgUGhhc2VyLkdlb20uUmVjdGFuZ2xlYFxyXG4gICAgICogb3IgYFBoYXNlci5HZW9tLkNpcmNsZWAuIEhvd2V2ZXIsIGl0IGNhbiBiZSBhbnkgb2JqZWN0IGFzIGxvbmcgYXMgaXQgd29ya3Mgd2l0aCB0aGUgcHJvdmlkZWQgY2FsbGJhY2suXHJcbiAgICAgKlxyXG4gICAgICogSWYgbm8gaGl0IGFyZWEgaXMgcHJvdmlkZWQgYSBSZWN0YW5nbGUgaXMgY3JlYXRlZCBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgR2FtZSBPYmplY3QsIGlmIHBvc3NpYmxlXHJcbiAgICAgKiB0byBjYWxjdWxhdGUuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGhpdCBhcmVhIGNhbGxiYWNrIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHRha2VzIGFuIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGUgYW5kIHJldHVybnMgYSBib29sZWFuIGlmXHJcbiAgICAgKiB0aG9zZSB2YWx1ZXMgZmFsbCB3aXRoaW4gdGhlIGFyZWEgb2YgdGhlIHNoYXBlIG9yIG5vdC4gQWxsIG9mIHRoZSBQaGFzZXIgZ2VvbWV0cnkgb2JqZWN0cyBwcm92aWRlIHRoaXMsXHJcbiAgICAgKiBzdWNoIGFzIGBQaGFzZXIuR2VvbS5SZWN0YW5nbGUuQ29udGFpbnNgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3NldEhpdEFyZWFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBnYW1lT2JqZWN0cyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0byBzZXQgdGhlIGhpdCBhcmVhIG9uLlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLlR5cGVzLklucHV0LklucHV0Q29uZmlndXJhdGlvbnxhbnkpfSBbc2hhcGVdIC0gRWl0aGVyIGFuIGlucHV0IGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhIGdlb21ldHJpYyBzaGFwZSB0aGF0IGRlZmluZXMgdGhlIGhpdCBhcmVhIGZvciB0aGUgR2FtZSBPYmplY3QuIElmIG5vdCBzcGVjaWZpZWQgYSBSZWN0YW5nbGUgd2lsbCBiZSB1c2VkLlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuSW5wdXQuSGl0QXJlYUNhbGxiYWNrfSBbY2FsbGJhY2tdIC0gVGhlICdjb250YWlucycgZnVuY3Rpb24gdG8gaW52b2tlIHRvIGNoZWNrIGlmIHRoZSBwb2ludGVyIGlzIHdpdGhpbiB0aGUgaGl0IGFyZWEuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLklucHV0LklucHV0UGx1Z2lufSBUaGlzIElucHV0UGx1Z2luIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0SGl0QXJlYTogZnVuY3Rpb24gKGdhbWVPYmplY3RzLCBzaGFwZSwgY2FsbGJhY2spXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHNoYXBlID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRIaXRBcmVhRnJvbVRleHR1cmUoZ2FtZU9iamVjdHMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGdhbWVPYmplY3RzKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdhbWVPYmplY3RzID0gWyBnYW1lT2JqZWN0cyBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGRyYWdnYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBkcm9wWm9uZSA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjdXJzb3IgPSBmYWxzZTtcclxuICAgICAgICB2YXIgdXNlSGFuZEN1cnNvciA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBwaXhlbFBlcmZlY3QgPSBmYWxzZTtcclxuICAgICAgICB2YXIgY3VzdG9tSGl0QXJlYSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vICBDb25maWcgb2JqZWN0P1xyXG4gICAgICAgIGlmIChJc1BsYWluT2JqZWN0KHNoYXBlKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjb25maWcgPSBzaGFwZTtcclxuXHJcbiAgICAgICAgICAgIHNoYXBlID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2hpdEFyZWEnLCBudWxsKTtcclxuICAgICAgICAgICAgY2FsbGJhY2sgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnaGl0QXJlYUNhbGxiYWNrJywgbnVsbCk7XHJcbiAgICAgICAgICAgIGRyYWdnYWJsZSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdkcmFnZ2FibGUnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGRyb3Bab25lID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2Ryb3Bab25lJywgZmFsc2UpO1xyXG4gICAgICAgICAgICBjdXJzb3IgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnY3Vyc29yJywgZmFsc2UpO1xyXG4gICAgICAgICAgICB1c2VIYW5kQ3Vyc29yID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3VzZUhhbmRDdXJzb3InLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICBwaXhlbFBlcmZlY3QgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAncGl4ZWxQZXJmZWN0JywgZmFsc2UpO1xyXG4gICAgICAgICAgICB2YXIgYWxwaGFUb2xlcmFuY2UgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnYWxwaGFUb2xlcmFuY2UnLCAxKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChwaXhlbFBlcmZlY3QpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNoYXBlID0ge307XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHRoaXMubWFrZVBpeGVsUGVyZmVjdChhbHBoYVRvbGVyYW5jZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vICBTdGlsbCBubyBoaXRBcmVhIG9yIGNhbGxiYWNrP1xyXG4gICAgICAgICAgICBpZiAoIXNoYXBlIHx8ICFjYWxsYmFjaylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRIaXRBcmVhRnJvbVRleHR1cmUoZ2FtZU9iamVjdHMpO1xyXG4gICAgICAgICAgICAgICAgY3VzdG9tSGl0QXJlYSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBzaGFwZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhY2FsbGJhY2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjYWxsYmFjayA9IHNoYXBlO1xyXG4gICAgICAgICAgICBzaGFwZSA9IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnYW1lT2JqZWN0cy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBnYW1lT2JqZWN0ID0gZ2FtZU9iamVjdHNbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAocGl4ZWxQZXJmZWN0ICYmIGdhbWVPYmplY3QudHlwZSA9PT0gJ0NvbnRhaW5lcicpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignQ2Fubm90IHBpeGVsUGVyZmVjdCB0ZXN0IGEgQ29udGFpbmVyLiBVc2UgYSBjdXN0b20gY2FsbGJhY2suJyk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGlvID0gKCFnYW1lT2JqZWN0LmlucHV0KSA/IENyZWF0ZUludGVyYWN0aXZlT2JqZWN0KGdhbWVPYmplY3QsIHNoYXBlLCBjYWxsYmFjaykgOiBnYW1lT2JqZWN0LmlucHV0O1xyXG5cclxuICAgICAgICAgICAgaW8uY3VzdG9tSGl0QXJlYSA9IGN1c3RvbUhpdEFyZWE7XHJcbiAgICAgICAgICAgIGlvLmRyb3Bab25lID0gZHJvcFpvbmU7XHJcbiAgICAgICAgICAgIGlvLmN1cnNvciA9ICh1c2VIYW5kQ3Vyc29yKSA/ICdwb2ludGVyJyA6IGN1cnNvcjtcclxuXHJcbiAgICAgICAgICAgIGdhbWVPYmplY3QuaW5wdXQgPSBpbztcclxuXHJcbiAgICAgICAgICAgIGlmIChkcmFnZ2FibGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RHJhZ2dhYmxlKGdhbWVPYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnF1ZXVlRm9ySW5zZXJ0aW9uKGdhbWVPYmplY3QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaGl0IGFyZWEgZm9yIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0byBiZSBhIGBQaGFzZXIuR2VvbS5DaXJjbGVgIHNoYXBlLCB1c2luZ1xyXG4gICAgICogdGhlIGdpdmVuIGNvb3JkaW5hdGVzIGFuZCByYWRpdXMgdG8gY29udHJvbCBpdHMgcG9zaXRpb24gYW5kIHNpemUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jc2V0SGl0QXJlYUNpcmNsZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGdhbWVPYmplY3RzIC0gQW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzIHRvIHNldCBhcyBoYXZpbmcgYSBjaXJjbGUgaGl0IGFyZWEuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZGl1cyAtIFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLklucHV0LkhpdEFyZWFDYWxsYmFja30gW2NhbGxiYWNrXSAtIFRoZSBoaXQgYXJlYSBjYWxsYmFjay4gSWYgdW5kZWZpbmVkIGl0IHVzZXMgQ2lyY2xlLkNvbnRhaW5zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5JbnB1dFBsdWdpbn0gVGhpcyBJbnB1dFBsdWdpbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEhpdEFyZWFDaXJjbGU6IGZ1bmN0aW9uIChnYW1lT2JqZWN0cywgeCwgeSwgcmFkaXVzLCBjYWxsYmFjaylcclxuICAgIHtcclxuICAgICAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkgeyBjYWxsYmFjayA9IENpcmNsZUNvbnRhaW5zOyB9XHJcblxyXG4gICAgICAgIHZhciBzaGFwZSA9IG5ldyBDaXJjbGUoeCwgeSwgcmFkaXVzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0SGl0QXJlYShnYW1lT2JqZWN0cywgc2hhcGUsIGNhbGxiYWNrKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBoaXQgYXJlYSBmb3IgYW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzIHRvIGJlIGEgYFBoYXNlci5HZW9tLkVsbGlwc2VgIHNoYXBlLCB1c2luZ1xyXG4gICAgICogdGhlIGdpdmVuIGNvb3JkaW5hdGVzIGFuZCBkaW1lbnNpb25zIHRvIGNvbnRyb2wgaXRzIHBvc2l0aW9uIGFuZCBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3NldEhpdEFyZWFFbGxpcHNlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdHxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gZ2FtZU9iamVjdHMgLSBBbiBhcnJheSBvZiBHYW1lIE9iamVjdHMgdG8gc2V0IGFzIGhhdmluZyBhbiBlbGxpcHNlIGhpdCBhcmVhLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBlbGxpcHNlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIGVsbGlwc2UuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5IaXRBcmVhQ2FsbGJhY2t9IFtjYWxsYmFja10gLSBUaGUgaGl0IGFyZWEgY2FsbGJhY2suIElmIHVuZGVmaW5lZCBpdCB1c2VzIEVsbGlwc2UuQ29udGFpbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLklucHV0LklucHV0UGx1Z2lufSBUaGlzIElucHV0UGx1Z2luIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0SGl0QXJlYUVsbGlwc2U6IGZ1bmN0aW9uIChnYW1lT2JqZWN0cywgeCwgeSwgd2lkdGgsIGhlaWdodCwgY2FsbGJhY2spXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHsgY2FsbGJhY2sgPSBFbGxpcHNlQ29udGFpbnM7IH1cclxuXHJcbiAgICAgICAgdmFyIHNoYXBlID0gbmV3IEVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnNldEhpdEFyZWEoZ2FtZU9iamVjdHMsIHNoYXBlLCBjYWxsYmFjayk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaGl0IGFyZWEgZm9yIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0byBiZSBhIGBQaGFzZXIuR2VvbS5SZWN0YW5nbGVgIHNoYXBlLCB1c2luZ1xyXG4gICAgICogdGhlIEdhbWUgT2JqZWN0cyB0ZXh0dXJlIGZyYW1lIHRvIGRlZmluZSB0aGUgcG9zaXRpb24gYW5kIHNpemUgb2YgdGhlIGhpdCBhcmVhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3NldEhpdEFyZWFGcm9tVGV4dHVyZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R8UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXSl9IGdhbWVPYmplY3RzIC0gQW4gYXJyYXkgb2YgR2FtZSBPYmplY3RzIHRvIHNldCBhcyBoYXZpbmcgYW4gZWxsaXBzZSBoaXQgYXJlYS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLklucHV0LkhpdEFyZWFDYWxsYmFja30gW2NhbGxiYWNrXSAtIFRoZSBoaXQgYXJlYSBjYWxsYmFjay4gSWYgdW5kZWZpbmVkIGl0IHVzZXMgUmVjdGFuZ2xlLkNvbnRhaW5zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5JbnB1dFBsdWdpbn0gVGhpcyBJbnB1dFBsdWdpbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEhpdEFyZWFGcm9tVGV4dHVyZTogZnVuY3Rpb24gKGdhbWVPYmplY3RzLCBjYWxsYmFjaylcclxuICAgIHtcclxuICAgICAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkgeyBjYWxsYmFjayA9IFJlY3RhbmdsZUNvbnRhaW5zOyB9XHJcblxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShnYW1lT2JqZWN0cykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBnYW1lT2JqZWN0cyA9IFsgZ2FtZU9iamVjdHMgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2FtZU9iamVjdHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZ2FtZU9iamVjdCA9IGdhbWVPYmplY3RzW2ldO1xyXG5cclxuICAgICAgICAgICAgdmFyIGZyYW1lID0gZ2FtZU9iamVjdC5mcmFtZTtcclxuXHJcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IDA7XHJcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKGdhbWVPYmplY3Qud2lkdGgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHdpZHRoID0gZ2FtZU9iamVjdC53aWR0aDtcclxuICAgICAgICAgICAgICAgIGhlaWdodCA9IGdhbWVPYmplY3QuaGVpZ2h0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGZyYW1lKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aCA9IGZyYW1lLnJlYWxXaWR0aDtcclxuICAgICAgICAgICAgICAgIGhlaWdodCA9IGZyYW1lLnJlYWxIZWlnaHQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChnYW1lT2JqZWN0LnR5cGUgPT09ICdDb250YWluZXInICYmICh3aWR0aCA9PT0gMCB8fCBoZWlnaHQgPT09IDApKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvbnRhaW5lci5zZXRJbnRlcmFjdGl2ZSBtdXN0IHNwZWNpZnkgYSBTaGFwZSBvciBjYWxsIHNldFNpemUoKSBmaXJzdCcpO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh3aWR0aCAhPT0gMCAmJiBoZWlnaHQgIT09IDApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGdhbWVPYmplY3QuaW5wdXQgPSBDcmVhdGVJbnRlcmFjdGl2ZU9iamVjdChnYW1lT2JqZWN0LCBuZXcgUmVjdGFuZ2xlKDAsIDAsIHdpZHRoLCBoZWlnaHQpLCBjYWxsYmFjayk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWV1ZUZvckluc2VydGlvbihnYW1lT2JqZWN0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaGl0IGFyZWEgZm9yIGFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0byBiZSBhIGBQaGFzZXIuR2VvbS5SZWN0YW5nbGVgIHNoYXBlLCB1c2luZ1xyXG4gICAgICogdGhlIGdpdmVuIGNvb3JkaW5hdGVzIGFuZCBkaW1lbnNpb25zIHRvIGNvbnRyb2wgaXRzIHBvc2l0aW9uIGFuZCBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3NldEhpdEFyZWFSZWN0YW5nbGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7KFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W10pfSBnYW1lT2JqZWN0cyAtIEFuIGFycmF5IG9mIEdhbWUgT2JqZWN0cyB0byBzZXQgYXMgaGF2aW5nIGEgcmVjdGFuZ3VsYXIgaGl0IGFyZWEuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLklucHV0LkhpdEFyZWFDYWxsYmFja30gW2NhbGxiYWNrXSAtIFRoZSBoaXQgYXJlYSBjYWxsYmFjay4gSWYgdW5kZWZpbmVkIGl0IHVzZXMgUmVjdGFuZ2xlLkNvbnRhaW5zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5JbnB1dFBsdWdpbn0gVGhpcyBJbnB1dFBsdWdpbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEhpdEFyZWFSZWN0YW5nbGU6IGZ1bmN0aW9uIChnYW1lT2JqZWN0cywgeCwgeSwgd2lkdGgsIGhlaWdodCwgY2FsbGJhY2spXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHsgY2FsbGJhY2sgPSBSZWN0YW5nbGVDb250YWluczsgfVxyXG5cclxuICAgICAgICB2YXIgc2hhcGUgPSBuZXcgUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRIaXRBcmVhKGdhbWVPYmplY3RzLCBzaGFwZSwgY2FsbGJhY2spO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGhpdCBhcmVhIGZvciBhbiBhcnJheSBvZiBHYW1lIE9iamVjdHMgdG8gYmUgYSBgUGhhc2VyLkdlb20uVHJpYW5nbGVgIHNoYXBlLCB1c2luZ1xyXG4gICAgICogdGhlIGdpdmVuIGNvb3JkaW5hdGVzIHRvIGNvbnRyb2wgdGhlIHBvc2l0aW9uIG9mIGl0cyBwb2ludHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jc2V0SGl0QXJlYVRyaWFuZ2xlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdHxQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdKX0gZ2FtZU9iamVjdHMgLSBBbiBhcnJheSBvZiBHYW1lIE9iamVjdHMgdG8gc2V0IGFzIGhhdmluZyBhICB0cmlhbmd1bGFyIGhpdCBhcmVhLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHgxIC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgcG9pbnQgb2YgdGhlIHRyaWFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkxIC0gVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgcG9pbnQgb2YgdGhlIHRyaWFuZ2xlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHgyIC0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgc2Vjb25kIHBvaW50IG9mIHRoZSB0cmlhbmdsZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5MiAtIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHNlY29uZCBwb2ludCBvZiB0aGUgdHJpYW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geDMgLSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSB0aGlyZCBwb2ludCBvZiB0aGUgdHJpYW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geTMgLSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSB0aGlyZCBwb2ludCBvZiB0aGUgdHJpYW5nbGUuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5IaXRBcmVhQ2FsbGJhY2t9IFtjYWxsYmFja10gLSBUaGUgaGl0IGFyZWEgY2FsbGJhY2suIElmIHVuZGVmaW5lZCBpdCB1c2VzIFRyaWFuZ2xlLkNvbnRhaW5zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5JbnB1dFBsdWdpbn0gVGhpcyBJbnB1dFBsdWdpbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEhpdEFyZWFUcmlhbmdsZTogZnVuY3Rpb24gKGdhbWVPYmplY3RzLCB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCBjYWxsYmFjaylcclxuICAgIHtcclxuICAgICAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkgeyBjYWxsYmFjayA9IFRyaWFuZ2xlQ29udGFpbnM7IH1cclxuXHJcbiAgICAgICAgdmFyIHNoYXBlID0gbmV3IFRyaWFuZ2xlKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRIaXRBcmVhKGdhbWVPYmplY3RzLCBzaGFwZSwgY2FsbGJhY2spO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYW4gSW5wdXQgRGVidWcgU2hhcGUgZm9yIHRoZSBnaXZlbiBHYW1lIE9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgR2FtZSBPYmplY3QgbXVzdCBoYXZlIF9hbHJlYWR5XyBiZWVuIGVuYWJsZWQgZm9yIGlucHV0IHByaW9yIHRvIGNhbGxpbmcgdGhpcyBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBpcyBpbnRlbmRlZCB0byBhc3Npc3QgeW91IGR1cmluZyBkZXZlbG9wbWVudCBhbmQgZGVidWdnaW5nLlxyXG4gICAgICpcclxuICAgICAqIERlYnVnIFNoYXBlcyBjYW4gb25seSBiZSBjcmVhdGVkIGZvciBHYW1lIE9iamVjdHMgdGhhdCBhcmUgdXNpbmcgc3RhbmRhcmQgUGhhc2VyIEdlb21ldHJ5IGZvciBpbnB1dCxcclxuICAgICAqIGluY2x1ZGluZzogQ2lyY2xlLCBFbGxpcHNlLCBMaW5lLCBQb2x5Z29uLCBSZWN0YW5nbGUgYW5kIFRyaWFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEdhbWUgT2JqZWN0cyB0aGF0IGFyZSB1c2luZyB0aGVpciBhdXRvbWF0aWMgaGl0IGFyZWFzIGFyZSB1c2luZyBSZWN0YW5nbGVzIGJ5IGRlZmF1bHQsIHNvIHdpbGwgYWxzbyB3b3JrLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBEZWJ1ZyBTaGFwZSBpcyBjcmVhdGVkIGFuZCBhZGRlZCB0byB0aGUgZGlzcGxheSBsaXN0IGFuZCBpcyB0aGVuIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBHYW1lIE9iamVjdFxyXG4gICAgICogaXQgaXMgY29ubmVjdGVkIHdpdGguIFNob3VsZCB5b3UgbmVlZCB0byBtb2RpZnkgaXQgeW91cnNlbGYsIHN1Y2ggYXMgdG8gaGlkZSBpdCwgeW91IGNhbiBhY2Nlc3MgaXQgdmlhXHJcbiAgICAgKiB0aGUgR2FtZSBPYmplY3QgcHJvcGVydHk6IGBHYW1lT2JqZWN0LmlucHV0LmhpdEFyZWFEZWJ1Z2AuXHJcbiAgICAgKlxyXG4gICAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCBvbiBhIEdhbWUgT2JqZWN0IHRoYXQgYWxyZWFkeSBoYXMgYSBEZWJ1ZyBTaGFwZSB3aWxsIGZpcnN0IGRlc3Ryb3kgdGhlIG9sZCBzaGFwZSxcclxuICAgICAqIGJlZm9yZSBjcmVhdGluZyBhIG5ldyBvbmUuIElmIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGUgRGVidWcgU2hhcGUgZW50aXJlbHksIHlvdSBzaG91bGQgY2FsbCB0aGVcclxuICAgICAqIG1ldGhvZCBgSW5wdXRQbHVnaW4ucmVtb3ZlRGVidWdgLlxyXG4gICAgICpcclxuICAgICAqIE5vdGUgdGhhdCB0aGUgZGVidWcgc2hhcGUgd2lsbCBvbmx5IHNob3cgdGhlIG91dGxpbmUgb2YgdGhlIGlucHV0IGFyZWEuIElmIHRoZSBpbnB1dCB0ZXN0IGlzIHVzaW5nIGFcclxuICAgICAqIHBpeGVsIHBlcmZlY3QgY2hlY2ssIGZvciBleGFtcGxlLCB0aGVuIHRoaXMgaXMgbm90IGRpc3BsYXllZC4gSWYgeW91IGFyZSB1c2luZyBhIGN1c3RvbSBzaGFwZSwgdGhhdFxyXG4gICAgICogZG9lc24ndCBleHRlbmQgb25lIG9mIHRoZSBiYXNlIFBoYXNlciBHZW9tZXRyeSBvYmplY3RzLCBhcyB5b3VyIGhpdCBhcmVhLCB0aGVuIHRoaXMgbWV0aG9kIHdpbGwgbm90XHJcbiAgICAgKiB3b3JrLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI2VuYWJsZURlYnVnXHJcbiAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0byBjcmVhdGUgdGhlIGlucHV0IGRlYnVnIHNoYXBlIGZvci5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbY29sb3I9MHgwMGZmMDBdIC0gVGhlIG91dGxpbmUgY29sb3Igb2YgdGhlIGRlYnVnIHNoYXBlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5JbnB1dFBsdWdpbn0gVGhpcyBJbnB1dCBQbHVnaW4uXHJcbiAgICAgKi9cclxuICAgIGVuYWJsZURlYnVnOiBmdW5jdGlvbiAoZ2FtZU9iamVjdCwgY29sb3IpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNvbG9yID09PSB1bmRlZmluZWQpIHsgY29sb3IgPSAweDAwZmYwMDsgfVxyXG5cclxuICAgICAgICB2YXIgaW5wdXQgPSBnYW1lT2JqZWN0LmlucHV0O1xyXG5cclxuICAgICAgICBpZiAoIWlucHV0IHx8ICFpbnB1dC5oaXRBcmVhKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc2hhcGUgPSBpbnB1dC5oaXRBcmVhO1xyXG4gICAgICAgIHZhciBzaGFwZVR5cGUgPSBzaGFwZS50eXBlO1xyXG4gICAgICAgIHZhciBkZWJ1ZyA9IGlucHV0LmhpdEFyZWFEZWJ1ZztcclxuICAgICAgICB2YXIgZmFjdG9yeSA9IHRoaXMuc3lzdGVtcy5hZGQ7XHJcbiAgICAgICAgdmFyIHVwZGF0ZUxpc3QgPSB0aGlzLnN5c3RlbXMudXBkYXRlTGlzdDtcclxuXHJcbiAgICAgICAgaWYgKGRlYnVnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdXBkYXRlTGlzdC5yZW1vdmUoZGVidWcpO1xyXG5cclxuICAgICAgICAgICAgZGVidWcuZGVzdHJveSgpO1xyXG5cclxuICAgICAgICAgICAgZGVidWcgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG9mZnNldHggPSAwO1xyXG4gICAgICAgIHZhciBvZmZzZXR5ID0gMDtcclxuICAgICAgICBzd2l0Y2ggKHNoYXBlVHlwZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhc2UgR0VPTV9DT05TVC5DSVJDTEU6XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZyA9IGZhY3RvcnkuYXJjKDAsIDAsIHNoYXBlLnJhZGl1cyk7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXR4ID0gc2hhcGUueCAtIHNoYXBlLnJhZGl1cztcclxuICAgICAgICAgICAgICAgIG9mZnNldHkgPSBzaGFwZS55IC0gc2hhcGUucmFkaXVzO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIEdFT01fQ09OU1QuRUxMSVBTRTpcclxuICAgICAgICAgICAgICAgIGRlYnVnID0gZmFjdG9yeS5lbGxpcHNlKDAsIDAsIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0eCA9IHNoYXBlLnggLSBzaGFwZS53aWR0aCAvIDI7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXR5ID0gc2hhcGUueSAtIHNoYXBlLmhlaWdodCAvIDI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgR0VPTV9DT05TVC5MSU5FOlxyXG4gICAgICAgICAgICAgICAgZGVidWcgPSBmYWN0b3J5LmxpbmUoMCwgMCwgc2hhcGUueDEsIHNoYXBlLnkxLCBzaGFwZS54Miwgc2hhcGUueTIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIEdFT01fQ09OU1QuUE9MWUdPTjpcclxuICAgICAgICAgICAgICAgIGRlYnVnID0gZmFjdG9yeS5wb2x5Z29uKDAsIDAsIHNoYXBlLnBvaW50cyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgR0VPTV9DT05TVC5SRUNUQU5HTEU6XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZyA9IGZhY3RvcnkucmVjdGFuZ2xlKDAsIDAsIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0eCA9IHNoYXBlLng7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXR5ID0gc2hhcGUueTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBHRU9NX0NPTlNULlRSSUFOR0xFOlxyXG4gICAgICAgICAgICAgICAgZGVidWcgPSBmYWN0b3J5LnRyaWFuZ2xlKDAsIDAsIHNoYXBlLngxLCBzaGFwZS55MSwgc2hhcGUueDIsIHNoYXBlLnkyLCBzaGFwZS54Mywgc2hhcGUueTMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGVidWcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBkZWJ1Zy5pc0ZpbGxlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgZGVidWcucHJlVXBkYXRlID0gZnVuY3Rpb24gKClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGVidWcuc2V0U3Ryb2tlU3R5bGUoMSAvIGdhbWVPYmplY3Quc2NhbGUsIGNvbG9yKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkZWJ1Zy5zZXREaXNwbGF5T3JpZ2luKGdhbWVPYmplY3QuZGlzcGxheU9yaWdpblgsIGdhbWVPYmplY3QuZGlzcGxheU9yaWdpblkpO1xyXG4gICAgICAgICAgICAgICAgZGVidWcuc2V0Um90YXRpb24oZ2FtZU9iamVjdC5yb3RhdGlvbik7XHJcbiAgICAgICAgICAgICAgICBkZWJ1Zy5zZXRTY2FsZShnYW1lT2JqZWN0LnNjYWxlWCwgZ2FtZU9iamVjdC5zY2FsZVkpO1xyXG4gICAgICAgICAgICAgICAgZGVidWcuc2V0UG9zaXRpb24oZ2FtZU9iamVjdC54ICsgb2Zmc2V0eCwgZ2FtZU9iamVjdC55ICsgb2Zmc2V0eSk7XHJcbiAgICAgICAgICAgICAgICBkZWJ1Zy5zZXRTY3JvbGxGYWN0b3IoZ2FtZU9iamVjdC5zY3JvbGxGYWN0b3JYLCBnYW1lT2JqZWN0LnNjcm9sbEZhY3RvclkpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdXBkYXRlTGlzdC5hZGQoZGVidWcpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuaGl0QXJlYURlYnVnID0gZGVidWc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGFuIElucHV0IERlYnVnIFNoYXBlIGZyb20gdGhlIGdpdmVuIEdhbWUgT2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIFRoZSBzaGFwZSBpcyBkZXN0cm95ZWQgaW1tZWRpYXRlbHkgYW5kIHRoZSBgaGl0QXJlYURlYnVnYCBwcm9wZXJ0eSBpcyBzZXQgdG8gYG51bGxgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3JlbW92ZURlYnVnXHJcbiAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0byByZW1vdmUgdGhlIGlucHV0IGRlYnVnIHNoYXBlIGZyb20uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLklucHV0LklucHV0UGx1Z2lufSBUaGlzIElucHV0IFBsdWdpbi5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlRGVidWc6IGZ1bmN0aW9uIChnYW1lT2JqZWN0KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpbnB1dCA9IGdhbWVPYmplY3QuaW5wdXQ7XHJcblxyXG4gICAgICAgIGlmIChpbnB1dCAmJiBpbnB1dC5oaXRBcmVhRGVidWcpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZGVidWcgPSBpbnB1dC5oaXRBcmVhRGVidWc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbXMudXBkYXRlTGlzdC5yZW1vdmUoZGVidWcpO1xyXG5cclxuICAgICAgICAgICAgZGVidWcuZGVzdHJveSgpO1xyXG5cclxuICAgICAgICAgICAgaW5wdXQuaGl0QXJlYURlYnVnID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIFBvaW50ZXJzIHRvIGFsd2F5cyBwb2xsLlxyXG4gICAgICpcclxuICAgICAqIFdoZW4gYSBwb2ludGVyIGlzIHBvbGxlZCBpdCBydW5zIGEgaGl0IHRlc3QgdG8gc2VlIHdoaWNoIEdhbWUgT2JqZWN0cyBhcmUgY3VycmVudGx5IGJlbG93IGl0LFxyXG4gICAgICogb3IgYmVpbmcgaW50ZXJhY3RlZCB3aXRoIGl0LCByZWdhcmRsZXNzIGlmIHRoZSBQb2ludGVyIGhhcyBhY3R1YWxseSBtb3ZlZCBvciBub3QuXHJcbiAgICAgKlxyXG4gICAgICogWW91IHNob3VsZCBlbmFibGUgdGhpcyBpZiB5b3Ugd2FudCBvYmplY3RzIGluIHlvdXIgZ2FtZSB0byBmaXJlIG92ZXIgLyBvdXQgZXZlbnRzLCBhbmQgdGhlIG9iamVjdHNcclxuICAgICAqIGFyZSBjb25zdGFudGx5IG1vdmluZywgYnV0IHRoZSBwb2ludGVyIG1heSBub3QgaGF2ZS4gUG9sbGluZyBldmVyeSBmcmFtZSBoYXMgYWRkaXRpb25hbCBjb21wdXRhdGlvblxyXG4gICAgICogY29zdHMsIGVzcGVjaWFsbHkgaWYgdGhlcmUgYXJlIGEgbGFyZ2UgbnVtYmVyIG9mIGludGVyYWN0aXZlIG9iamVjdHMgaW4geW91ciBnYW1lLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3NldFBvbGxBbHdheXNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5JbnB1dFBsdWdpbn0gVGhpcyBJbnB1dFBsdWdpbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFBvbGxBbHdheXM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0UG9sbFJhdGUoMCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgUG9pbnRlcnMgdG8gb25seSBwb2xsIHdoZW4gdGhleSBhcmUgbW92ZWQgb3IgdXBkYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBXaGVuIGEgcG9pbnRlciBpcyBwb2xsZWQgaXQgcnVucyBhIGhpdCB0ZXN0IHRvIHNlZSB3aGljaCBHYW1lIE9iamVjdHMgYXJlIGN1cnJlbnRseSBiZWxvdyBpdCxcclxuICAgICAqIG9yIGJlaW5nIGludGVyYWN0ZWQgd2l0aCBpdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNzZXRQb2xsT25Nb3ZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW59IFRoaXMgSW5wdXRQbHVnaW4gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRQb2xsT25Nb3ZlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldFBvbGxSYXRlKC0xKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBwb2xsIHJhdGUgdmFsdWUuIFRoaXMgaXMgdGhlIGFtb3VudCBvZiB0aW1lIHRoYXQgc2hvdWxkIGhhdmUgZWxhcHNlZCBiZWZvcmUgYSBwb2ludGVyXHJcbiAgICAgKiB3aWxsIGJlIHBvbGxlZCBhZ2Fpbi4gU2VlIHRoZSBgc2V0UG9sbEFsd2F5c2AgYW5kIGBzZXRQb2xsT25Nb3ZlYCBtZXRob2RzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3NldFBvbGxSYXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgYW1vdW50IG9mIHRpbWUsIGluIG1zLCB0aGF0IHNob3VsZCBlbGFwc2VkIGJlZm9yZSByZS1wb2xsaW5nIHRoZSBwb2ludGVycy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW59IFRoaXMgSW5wdXRQbHVnaW4gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRQb2xsUmF0ZTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucG9sbFJhdGUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLl9wb2xsVGltZXIgPSAwO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAgdGhlIGdsb2JhbCBJbnB1dCBNYW5hZ2VyIHdpbGwgZW11bGF0ZSBET00gYmVoYXZpb3IgYnkgb25seSBlbWl0dGluZyBldmVudHMgZnJvbVxyXG4gICAgICogdGhlIHRvcC1tb3N0IFNjZW5lIGluIHRoZSBTY2VuZSBMaXN0LiBCeSBkZWZhdWx0LCBpZiBhIFNjZW5lIHJlY2VpdmVzIGFuIGlucHV0IGV2ZW50IGl0IHdpbGwgdGhlbiBzdG9wIHRoZSBldmVudFxyXG4gICAgICogZnJvbSBmbG93aW5nIGRvd24gdG8gYW55IFNjZW5lcyBiZWxvdyBpdCBpbiB0aGUgU2NlbmUgbGlzdC4gVG8gZGlzYWJsZSB0aGlzIGJlaGF2aW9yIGNhbGwgdGhpcyBtZXRob2Qgd2l0aCBgZmFsc2VgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3NldEdsb2JhbFRvcE9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBTZXQgdG8gYHRydWVgIHRvIHN0b3AgcHJvY2Vzc2luZyBpbnB1dCBldmVudHMgb24gdGhlIFNjZW5lIHRoYXQgcmVjZWl2ZXMgaXQsIG9yIGBmYWxzZWAgdG8gbGV0IHRoZSBldmVudCBjb250aW51ZSBkb3duIHRoZSBTY2VuZSBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5JbnB1dFBsdWdpbn0gVGhpcyBJbnB1dFBsdWdpbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEdsb2JhbFRvcE9ubHk6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLm1hbmFnZXIuZ2xvYmFsVG9wT25seSA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAgdGhpcyBJbnB1dCBQbHVnaW4gd2lsbCBlbXVsYXRlIERPTSBiZWhhdmlvciBieSBvbmx5IGVtaXR0aW5nIGV2ZW50cyBmcm9tXHJcbiAgICAgKiB0aGUgdG9wLW1vc3QgR2FtZSBPYmplY3RzIGluIHRoZSBEaXNwbGF5IExpc3QuXHJcbiAgICAgKlxyXG4gICAgICogSWYgc2V0IHRvIGBmYWxzZWAgaXQgd2lsbCBlbWl0IGV2ZW50cyBmcm9tIGFsbCBHYW1lIE9iamVjdHMgYmVsb3cgYSBQb2ludGVyLCBub3QganVzdCB0aGUgdG9wIG9uZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNzZXRUb3BPbmx5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlIC0gYHRydWVgIHRvIG9ubHkgaW5jbHVkZSB0aGUgdG9wLW1vc3QgR2FtZSBPYmplY3QsIG9yIGBmYWxzZWAgdG8gaW5jbHVkZSBhbGwgR2FtZSBPYmplY3RzIGluIGEgaGl0IHRlc3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLklucHV0LklucHV0UGx1Z2lufSBUaGlzIElucHV0UGx1Z2luIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0VG9wT25seTogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMudG9wT25seSA9IHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhbiBhcnJheSBvZiBHYW1lIE9iamVjdHMsIHNvcnQgdGhlIGFycmF5IGFuZCByZXR1cm4gaXQsIHNvIHRoYXQgdGhlIG9iamVjdHMgYXJlIGluIGRlcHRoIGluZGV4IG9yZGVyXHJcbiAgICAgKiB3aXRoIHRoZSBsb3dlc3QgYXQgdGhlIGJvdHRvbS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNzb3J0R2FtZU9iamVjdHNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3RbXX0gZ2FtZU9iamVjdHMgLSBBbiBhcnJheSBvZiBHYW1lIE9iamVjdHMgdG8gYmUgc29ydGVkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IFRoZSBzb3J0ZWQgYXJyYXkgb2YgR2FtZSBPYmplY3RzLlxyXG4gICAgICovXHJcbiAgICBzb3J0R2FtZU9iamVjdHM6IGZ1bmN0aW9uIChnYW1lT2JqZWN0cylcclxuICAgIHtcclxuICAgICAgICBpZiAoZ2FtZU9iamVjdHMubGVuZ3RoIDwgMilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBnYW1lT2JqZWN0cztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUuc3lzLmRlcHRoU29ydCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZ2FtZU9iamVjdHMuc29ydCh0aGlzLnNvcnRIYW5kbGVyR08uYmluZCh0aGlzKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIHRoZSBjaGlsZCBsb3dlc3QgZG93biB0aGUgZGlzcGxheSBsaXN0ICh3aXRoIHRoZSBzbWFsbGVzdCBpbmRleClcclxuICAgICAqIFdpbGwgaXRlcmF0ZSB0aHJvdWdoIGFsbCBwYXJlbnQgY29udGFpbmVycywgaWYgcHJlc2VudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNzb3J0SGFuZGxlckdPXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gY2hpbGRBIC0gVGhlIGZpcnN0IEdhbWUgT2JqZWN0IHRvIGNvbXBhcmUuXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBjaGlsZEIgLSBUaGUgc2Vjb25kIEdhbWUgT2JqZWN0IHRvIGNvbXBhcmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gUmV0dXJucyBlaXRoZXIgYSBuZWdhdGl2ZSBvciBwb3NpdGl2ZSBpbnRlZ2VyLCBvciB6ZXJvIGlmIHRoZXkgbWF0Y2guXHJcbiAgICAgKi9cclxuICAgIHNvcnRIYW5kbGVyR086IGZ1bmN0aW9uIChjaGlsZEEsIGNoaWxkQilcclxuICAgIHtcclxuICAgICAgICBpZiAoIWNoaWxkQS5wYXJlbnRDb250YWluZXIgJiYgIWNoaWxkQi5wYXJlbnRDb250YWluZXIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgUXVpY2sgYmFpbCBvdXQgd2hlbiBuZWl0aGVyIGNoaWxkIGhhcyBhIGNvbnRhaW5lclxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5TGlzdC5nZXRJbmRleChjaGlsZEIpIC0gdGhpcy5kaXNwbGF5TGlzdC5nZXRJbmRleChjaGlsZEEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjaGlsZEEucGFyZW50Q29udGFpbmVyID09PSBjaGlsZEIucGFyZW50Q29udGFpbmVyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFF1aWNrIGJhaWwgb3V0IHdoZW4gYm90aCBjaGlsZHJlbiBoYXZlIHRoZSBzYW1lIGNvbnRhaW5lclxyXG4gICAgICAgICAgICByZXR1cm4gY2hpbGRCLnBhcmVudENvbnRhaW5lci5nZXRJbmRleChjaGlsZEIpIC0gY2hpbGRBLnBhcmVudENvbnRhaW5lci5nZXRJbmRleChjaGlsZEEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjaGlsZEEucGFyZW50Q29udGFpbmVyID09PSBjaGlsZEIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgUXVpY2sgYmFpbCBvdXQgd2hlbiBjaGlsZEEgaXMgYSBjaGlsZCBvZiBjaGlsZEJcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjaGlsZEIucGFyZW50Q29udGFpbmVyID09PSBjaGlsZEEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgUXVpY2sgYmFpbCBvdXQgd2hlbiBjaGlsZEEgaXMgYSBjaGlsZCBvZiBjaGlsZEJcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBDb250YWluZXIgaW5kZXggY2hlY2tcclxuICAgICAgICAgICAgdmFyIGxpc3RBID0gY2hpbGRBLmdldEluZGV4TGlzdCgpO1xyXG4gICAgICAgICAgICB2YXIgbGlzdEIgPSBjaGlsZEIuZ2V0SW5kZXhMaXN0KCk7XHJcbiAgICAgICAgICAgIHZhciBsZW4gPSBNYXRoLm1pbihsaXN0QS5sZW5ndGgsIGxpc3RCLmxlbmd0aCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXhBID0gbGlzdEFbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXhCID0gbGlzdEJbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4QSA9PT0gaW5kZXhCKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICBHbyB0byB0aGUgbmV4dCBsZXZlbCBkb3duXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gIE5vbi1tYXRjaGluZyBwYXJlbnRzLCBzbyByZXR1cm5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXhCIC0gaW5kZXhBO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgVGVjaG5pY2FsbHkgdGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBidXQgLi4uXHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhbiBpbnB1dCBldmVudCBoYW5kbGVyLCBzdWNoIGFzIGBwb2ludGVyZG93bmAuXHJcbiAgICAgKlxyXG4gICAgICogV2hlbiBjYWxsZWQsIGl0IHN0b3BzIHRoZSBJbnB1dCBNYW5hZ2VyIGZyb20gYWxsb3dpbmcgX3RoaXMgc3BlY2lmaWMgZXZlbnRfIHRvIGJlIHByb2Nlc3NlZCBieSBhbnkgb3RoZXIgU2NlbmVcclxuICAgICAqIG5vdCB5ZXQgaGFuZGxlZCBpbiB0aGUgc2NlbmUgbGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNzdG9wUHJvcGFnYXRpb25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5JbnB1dFBsdWdpbn0gVGhpcyBJbnB1dFBsdWdpbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLm1hbmFnZXIuX3RlbXBTa2lwID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBuZXcgUG9pbnRlciBvYmplY3RzIHRvIHRoZSBJbnB1dCBNYW5hZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEJ5IGRlZmF1bHQgUGhhc2VyIGNyZWF0ZXMgMiBwb2ludGVyIG9iamVjdHM6IGBtb3VzZVBvaW50ZXJgIGFuZCBgcG9pbnRlcjFgLlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gY3JlYXRlIG1vcmUgZWl0aGVyIGJ5IGNhbGxpbmcgdGhpcyBtZXRob2QsIG9yIGJ5IHNldHRpbmcgdGhlIGBpbnB1dC5hY3RpdmVQb2ludGVyc2AgcHJvcGVydHlcclxuICAgICAqIGluIHRoZSBHYW1lIENvbmZpZywgdXAgdG8gYSBtYXhpbXVtIG9mIDEwIHBvaW50ZXJzLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBmaXJzdCAxMCBwb2ludGVycyBhcmUgYXZhaWxhYmxlIHZpYSB0aGUgYElucHV0UGx1Z2luLnBvaW50ZXJYYCBwcm9wZXJ0aWVzLCBvbmNlIHRoZXkgaGF2ZSBiZWVuIGFkZGVkXHJcbiAgICAgKiB2aWEgdGhpcyBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jYWRkUG9pbnRlclxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3F1YW50aXR5PTFdIFRoZSBudW1iZXIgb2YgbmV3IFBvaW50ZXJzIHRvIGNyZWF0ZS4gQSBtYXhpbXVtIG9mIDEwIGlzIGFsbG93ZWQgaW4gdG90YWwuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLklucHV0LlBvaW50ZXJbXX0gQW4gYXJyYXkgY29udGFpbmluZyBhbGwgb2YgdGhlIG5ldyBQb2ludGVyIG9iamVjdHMgdGhhdCB3ZXJlIGNyZWF0ZWQuXHJcbiAgICAgKi9cclxuICAgIGFkZFBvaW50ZXI6IGZ1bmN0aW9uIChxdWFudGl0eSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLmFkZFBvaW50ZXIocXVhbnRpdHkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlbGxzIHRoZSBJbnB1dCBzeXN0ZW0gdG8gc2V0IGEgY3VzdG9tIGN1cnNvci5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGN1cnNvciB3aWxsIGJlIHRoZSBkZWZhdWx0IGN1cnNvciB1c2VkIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZ2FtZSBjYW52YXMuXHJcbiAgICAgKlxyXG4gICAgICogSWYgYW4gSW50ZXJhY3RpdmUgT2JqZWN0IGFsc28gc2V0cyBhIGN1c3RvbSBjdXJzb3IsIHRoaXMgaXMgdGhlIGN1cnNvciB0aGF0IGlzIHJlc2V0IGFmdGVyIGl0cyB1c2UuXHJcbiAgICAgKlxyXG4gICAgICogQW55IHZhbGlkIENTUyBjdXJzb3IgdmFsdWUgaXMgYWxsb3dlZCwgaW5jbHVkaW5nIHBhdGhzIHRvIGltYWdlIGZpbGVzLCBpLmUuOlxyXG4gICAgICpcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMuaW5wdXQuc2V0RGVmYXVsdEN1cnNvcigndXJsKGFzc2V0cy9jdXJzb3JzL3N3b3JkLmN1ciksIHBvaW50ZXInKTtcclxuICAgICAqIGBgYFxyXG4gICAgICpcclxuICAgICAqIFBsZWFzZSByZWFkIGFib3V0IHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGJyb3dzZXJzIHdoZW4gaXQgY29tZXMgdG8gdGhlIGZpbGUgZm9ybWF0cyBhbmQgc2l6ZXMgdGhleSBzdXBwb3J0OlxyXG4gICAgICpcclxuICAgICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9jdXJzb3JcclxuICAgICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9DU1NfVXNlcl9JbnRlcmZhY2UvVXNpbmdfVVJMX3ZhbHVlc19mb3JfdGhlX2N1cnNvcl9wcm9wZXJ0eVxyXG4gICAgICpcclxuICAgICAqIEl0J3MgdXAgdG8geW91IHRvIHBpY2sgYSBzdWl0YWJsZSBjdXJzb3IgZm9ybWF0IHRoYXQgd29ya3MgYWNyb3NzIHRoZSByYW5nZSBvZiBicm93c2VycyB5b3UgbmVlZCB0byBzdXBwb3J0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3NldERlZmF1bHRDdXJzb3JcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY3Vyc29yIC0gVGhlIENTUyB0byBiZSB1c2VkIHdoZW4gc2V0dGluZyB0aGUgZGVmYXVsdCBjdXJzb3IuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLklucHV0LklucHV0UGx1Z2lufSBUaGlzIElucHV0IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBzZXREZWZhdWx0Q3Vyc29yOiBmdW5jdGlvbiAoY3Vyc29yKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMubWFuYWdlci5zZXREZWZhdWx0Q3Vyc29yKGN1cnNvcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBTY2VuZSB0aGF0IG93bnMgdGhpcyBwbHVnaW4gaXMgdHJhbnNpdGlvbmluZyBpbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiN0cmFuc2l0aW9uSW5cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqL1xyXG4gICAgdHJhbnNpdGlvbkluOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRoaXMuc2V0dGluZ3MudHJhbnNpdGlvbkFsbG93SW5wdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNjZW5lIHRoYXQgb3ducyB0aGlzIHBsdWdpbiBoYXMgZmluaXNoZWQgdHJhbnNpdGlvbmluZyBpbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiN0cmFuc2l0aW9uQ29tcGxldGVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy41LjBcclxuICAgICAqL1xyXG4gICAgdHJhbnNpdGlvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5ncy50cmFuc2l0aW9uQWxsb3dJbnB1dClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBTY2VuZSB0aGF0IG93bnMgdGhpcyBwbHVnaW4gaXMgdHJhbnNpdGlvbmluZyBvdXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jdHJhbnNpdGlvbk91dFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjUuMFxyXG4gICAgICovXHJcbiAgICB0cmFuc2l0aW9uT3V0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRoaXMuc2V0dGluZ3MudHJhbnNpdGlvbkFsbG93SW5wdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNjZW5lIHRoYXQgb3ducyB0aGlzIHBsdWdpbiBpcyBzaHV0dGluZyBkb3duLlxyXG4gICAgICogV2UgbmVlZCB0byBraWxsIGFuZCByZXNldCBhbGwgaW50ZXJuYWwgcHJvcGVydGllcyBhcyB3ZWxsIGFzIHN0b3AgbGlzdGVuaW5nIHRvIFNjZW5lIGV2ZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNzaHV0ZG93blxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5FdmVudHMjU0hVVERPV05cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc2h1dGRvd246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFJlZ2lzdGVyZWQgaW5wdXQgcGx1Z2lucyBsaXN0ZW4gZm9yIHRoaXNcclxuICAgICAgICB0aGlzLnBsdWdpbkV2ZW50cy5lbWl0KEV2ZW50cy5TSFVURE9XTik7XHJcblxyXG4gICAgICAgIHRoaXMuX3RlbXAubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLl9saXN0Lmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5fZHJhZ2dhYmxlLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5fcGVuZGluZ1JlbW92YWwubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLl9wZW5kaW5nSW5zZXJ0aW9uLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5fZHJhZ1N0YXRlLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RyYWdbaV0gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5fb3ZlcltpXSA9IFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcclxuXHJcbiAgICAgICAgdmFyIGV2ZW50RW1pdHRlciA9IHRoaXMuc3lzdGVtcy5ldmVudHM7XHJcblxyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vZmYoU2NlbmVFdmVudHMuVFJBTlNJVElPTl9TVEFSVCwgdGhpcy50cmFuc2l0aW9uSW4sIHRoaXMpO1xyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vZmYoU2NlbmVFdmVudHMuVFJBTlNJVElPTl9PVVQsIHRoaXMudHJhbnNpdGlvbk91dCwgdGhpcyk7XHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLm9mZihTY2VuZUV2ZW50cy5UUkFOU0lUSU9OX0NPTVBMRVRFLCB0aGlzLnRyYW5zaXRpb25Db21wbGV0ZSwgdGhpcyk7XHJcbiAgICAgICAgZXZlbnRFbWl0dGVyLm9mZihTY2VuZUV2ZW50cy5QUkVfVVBEQVRFLCB0aGlzLnByZVVwZGF0ZSwgdGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMubWFuYWdlci5ldmVudHMub2ZmKEV2ZW50cy5HQU1FX09VVCwgdGhpcy5vbkdhbWVPdXQsIHRoaXMpO1xyXG4gICAgICAgIHRoaXMubWFuYWdlci5ldmVudHMub2ZmKEV2ZW50cy5HQU1FX09WRVIsIHRoaXMub25HYW1lT3ZlciwgdGhpcyk7XHJcblxyXG4gICAgICAgIGV2ZW50RW1pdHRlci5vZmYoU2NlbmVFdmVudHMuU0hVVERPV04sIHRoaXMuc2h1dGRvd24sIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBTY2VuZSB0aGF0IG93bnMgdGhpcyBwbHVnaW4gaXMgYmVpbmcgZGVzdHJveWVkLlxyXG4gICAgICogV2UgbmVlZCB0byBzaHV0ZG93biBhbmQgdGhlbiBraWxsIG9mZiBhbGwgZXh0ZXJuYWwgcmVmZXJlbmNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNkZXN0cm95XHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkV2ZW50cyNERVNUUk9ZXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zaHV0ZG93bigpO1xyXG5cclxuICAgICAgICAvLyAgUmVnaXN0ZXJlZCBpbnB1dCBwbHVnaW5zIGxpc3RlbiBmb3IgdGhpc1xyXG4gICAgICAgIHRoaXMucGx1Z2luRXZlbnRzLmVtaXQoRXZlbnRzLkRFU1RST1kpO1xyXG5cclxuICAgICAgICB0aGlzLnBsdWdpbkV2ZW50cy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZS5zeXMuZXZlbnRzLm9mZihTY2VuZUV2ZW50cy5TVEFSVCwgdGhpcy5zdGFydCwgdGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2FtZXJhcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gbnVsbDtcclxuICAgICAgICB0aGlzLmV2ZW50cyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3VzZSA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHggY29vcmRpbmF0ZXMgb2YgdGhlIEFjdGl2ZVBvaW50ZXIgYmFzZWQgb24gdGhlIGZpcnN0IGNhbWVyYSBpbiB0aGUgY2FtZXJhIGxpc3QuXHJcbiAgICAgKiBUaGlzIGlzIG9ubHkgc2FmZSB0byB1c2UgaWYgeW91ciBnYW1lIGhhcyBqdXN0IDEgbm9uLXRyYW5zZm9ybWVkIGNhbWVyYSBhbmQgZG9lc24ndCB1c2UgbXVsdGktdG91Y2guXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3hcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB4OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIuYWN0aXZlUG9pbnRlci54O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHkgY29vcmRpbmF0ZXMgb2YgdGhlIEFjdGl2ZVBvaW50ZXIgYmFzZWQgb24gdGhlIGZpcnN0IGNhbWVyYSBpbiB0aGUgY2FtZXJhIGxpc3QuXHJcbiAgICAgKiBUaGlzIGlzIG9ubHkgc2FmZSB0byB1c2UgaWYgeW91ciBnYW1lIGhhcyBqdXN0IDEgbm9uLXRyYW5zZm9ybWVkIGNhbWVyYSBhbmQgZG9lc24ndCB1c2UgbXVsdGktdG91Y2guXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3lcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB5OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIuYWN0aXZlUG9pbnRlci55O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXJlIGFueSBtb3VzZSBvciB0b3VjaCBwb2ludGVycyBjdXJyZW50bHkgb3ZlciB0aGUgZ2FtZSBjYW52YXM/XHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI2lzT3ZlclxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqL1xyXG4gICAgaXNPdmVyOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIuaXNPdmVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1vdXNlIGhhcyBpdHMgb3duIHVuaXF1ZSBQb2ludGVyIG9iamVjdCwgd2hpY2ggeW91IGNhbiByZWZlcmVuY2UgZGlyZWN0bHkgaWYgbWFraW5nIGEgX2Rlc2t0b3Agc3BlY2lmaWMgZ2FtZV8uXHJcbiAgICAgKiBJZiB5b3UgYXJlIHN1cHBvcnRpbmcgYm90aCBkZXNrdG9wIGFuZCB0b3VjaCBkZXZpY2VzIHRoZW4gZG8gbm90IHVzZSB0aGlzIHByb3BlcnR5LCBpbnN0ZWFkIHVzZSBgYWN0aXZlUG9pbnRlcmBcclxuICAgICAqIHdoaWNoIHdpbGwgYWx3YXlzIG1hcCB0byB0aGUgbW9zdCByZWNlbnRseSBpbnRlcmFjdGVkIHBvaW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI21vdXNlUG9pbnRlclxyXG4gICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5Qb2ludGVyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIG1vdXNlUG9pbnRlcjoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLm1vdXNlUG9pbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjdXJyZW50IGFjdGl2ZSBpbnB1dCBQb2ludGVyLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNhY3RpdmVQb2ludGVyXHJcbiAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBhY3RpdmVQb2ludGVyOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIuYWN0aXZlUG9pbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgdG91Y2gtYmFzZWQgUG9pbnRlciBvYmplY3QuXHJcbiAgICAgKiBUaGlzIHdpbGwgYmUgYHVuZGVmaW5lZGAgYnkgZGVmYXVsdCB1bmxlc3MgeW91IGFkZCBhIG5ldyBQb2ludGVyIHVzaW5nIGBhZGRQb2ludGVyYC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jcG9pbnRlcjFcclxuICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICovXHJcbiAgICBwb2ludGVyMToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLnBvaW50ZXJzWzFdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSB0b3VjaC1iYXNlZCBQb2ludGVyIG9iamVjdC5cclxuICAgICAqIFRoaXMgd2lsbCBiZSBgdW5kZWZpbmVkYCBieSBkZWZhdWx0IHVubGVzcyB5b3UgYWRkIGEgbmV3IFBvaW50ZXIgdXNpbmcgYGFkZFBvaW50ZXJgLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNwb2ludGVyMlxyXG4gICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5Qb2ludGVyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHBvaW50ZXIyOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIucG9pbnRlcnNbMl07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHRvdWNoLWJhc2VkIFBvaW50ZXIgb2JqZWN0LlxyXG4gICAgICogVGhpcyB3aWxsIGJlIGB1bmRlZmluZWRgIGJ5IGRlZmF1bHQgdW5sZXNzIHlvdSBhZGQgYSBuZXcgUG9pbnRlciB1c2luZyBgYWRkUG9pbnRlcmAuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3BvaW50ZXIzXHJcbiAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgcG9pbnRlcjM6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5wb2ludGVyc1szXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgdG91Y2gtYmFzZWQgUG9pbnRlciBvYmplY3QuXHJcbiAgICAgKiBUaGlzIHdpbGwgYmUgYHVuZGVmaW5lZGAgYnkgZGVmYXVsdCB1bmxlc3MgeW91IGFkZCBhIG5ldyBQb2ludGVyIHVzaW5nIGBhZGRQb2ludGVyYC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jcG9pbnRlcjRcclxuICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICovXHJcbiAgICBwb2ludGVyNDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLnBvaW50ZXJzWzRdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSB0b3VjaC1iYXNlZCBQb2ludGVyIG9iamVjdC5cclxuICAgICAqIFRoaXMgd2lsbCBiZSBgdW5kZWZpbmVkYCBieSBkZWZhdWx0IHVubGVzcyB5b3UgYWRkIGEgbmV3IFBvaW50ZXIgdXNpbmcgYGFkZFBvaW50ZXJgLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNwb2ludGVyNVxyXG4gICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5Qb2ludGVyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHBvaW50ZXI1OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIucG9pbnRlcnNbNV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHRvdWNoLWJhc2VkIFBvaW50ZXIgb2JqZWN0LlxyXG4gICAgICogVGhpcyB3aWxsIGJlIGB1bmRlZmluZWRgIGJ5IGRlZmF1bHQgdW5sZXNzIHlvdSBhZGQgYSBuZXcgUG9pbnRlciB1c2luZyBgYWRkUG9pbnRlcmAuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3BvaW50ZXI2XHJcbiAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgcG9pbnRlcjY6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5wb2ludGVyc1s2XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgdG91Y2gtYmFzZWQgUG9pbnRlciBvYmplY3QuXHJcbiAgICAgKiBUaGlzIHdpbGwgYmUgYHVuZGVmaW5lZGAgYnkgZGVmYXVsdCB1bmxlc3MgeW91IGFkZCBhIG5ldyBQb2ludGVyIHVzaW5nIGBhZGRQb2ludGVyYC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jcG9pbnRlcjdcclxuICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICovXHJcbiAgICBwb2ludGVyNzoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLnBvaW50ZXJzWzddO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSB0b3VjaC1iYXNlZCBQb2ludGVyIG9iamVjdC5cclxuICAgICAqIFRoaXMgd2lsbCBiZSBgdW5kZWZpbmVkYCBieSBkZWZhdWx0IHVubGVzcyB5b3UgYWRkIGEgbmV3IFBvaW50ZXIgdXNpbmcgYGFkZFBvaW50ZXJgLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNwb2ludGVyOFxyXG4gICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5Qb2ludGVyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHBvaW50ZXI4OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIucG9pbnRlcnNbOF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHRvdWNoLWJhc2VkIFBvaW50ZXIgb2JqZWN0LlxyXG4gICAgICogVGhpcyB3aWxsIGJlIGB1bmRlZmluZWRgIGJ5IGRlZmF1bHQgdW5sZXNzIHlvdSBhZGQgYSBuZXcgUG9pbnRlciB1c2luZyBgYWRkUG9pbnRlcmAuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI3BvaW50ZXI5XHJcbiAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgcG9pbnRlcjk6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5wb2ludGVyc1s5XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgdG91Y2gtYmFzZWQgUG9pbnRlciBvYmplY3QuXHJcbiAgICAgKiBUaGlzIHdpbGwgYmUgYHVuZGVmaW5lZGAgYnkgZGVmYXVsdCB1bmxlc3MgeW91IGFkZCBhIG5ldyBQb2ludGVyIHVzaW5nIGBhZGRQb2ludGVyYC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW4jcG9pbnRlcjEwXHJcbiAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgcG9pbnRlcjEwOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIucG9pbnRlcnNbMTBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcblBsdWdpbkNhY2hlLnJlZ2lzdGVyKCdJbnB1dFBsdWdpbicsIElucHV0UGx1Z2luLCAnaW5wdXQnKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW5wdXRQbHVnaW47XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/InputPlugin.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/InputPluginCache.js":
/*!***********************************************************!*\
!*** ./node_modules/phaser/src/input/InputPluginCache.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar GetValue = __webpack_require__(/*! ../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\n\r\n// Contains the plugins that Phaser uses globally and locally.\r\n// These are the source objects, not instantiated.\r\nvar inputPlugins = {};\r\n\r\n/**\r\n * @namespace Phaser.Input.InputPluginCache\r\n */\r\n\r\nvar InputPluginCache = {};\r\n\r\n/**\r\n * Static method called directly by the Core internal Plugins.\r\n * Key is a reference used to get the plugin from the plugins object (i.e. InputPlugin)\r\n * Plugin is the object to instantiate to create the plugin\r\n * Mapping is what the plugin is injected into the Scene.Systems as (i.e. input)\r\n *\r\n * @name Phaser.Input.InputPluginCache.register\r\n * @type {function}\r\n * @static\r\n * @since 3.10.0\r\n * \r\n * @param {string} key - A reference used to get this plugin from the plugin cache.\r\n * @param {function} plugin - The plugin to be stored. Should be the core object, not instantiated.\r\n * @param {string} mapping - If this plugin is to be injected into the Input Plugin, this is the property key used.\r\n * @param {string} settingsKey - The key in the Scene Settings to check to see if this plugin should install or not.\r\n * @param {string} configKey - The key in the Game Config to check to see if this plugin should install or not.\r\n */\r\nInputPluginCache.register = function (key, plugin, mapping, settingsKey, configKey)\r\n{\r\n inputPlugins[key] = { plugin: plugin, mapping: mapping, settingsKey: settingsKey, configKey: configKey };\r\n};\r\n\r\n/**\r\n * Returns the input plugin object from the cache based on the given key.\r\n *\r\n * @name Phaser.Input.InputPluginCache.getCore\r\n * @type {function}\r\n * @static\r\n * @since 3.10.0\r\n * \r\n * @param {string} key - The key of the input plugin to get.\r\n *\r\n * @return {Phaser.Types.Input.InputPluginContainer} The input plugin object.\r\n */\r\nInputPluginCache.getPlugin = function (key)\r\n{\r\n return inputPlugins[key];\r\n};\r\n\r\n/**\r\n * Installs all of the registered Input Plugins into the given target.\r\n *\r\n * @name Phaser.Input.InputPluginCache.install\r\n * @type {function}\r\n * @static\r\n * @since 3.10.0\r\n * \r\n * @param {Phaser.Input.InputPlugin} target - The target InputPlugin to install the plugins into.\r\n */\r\nInputPluginCache.install = function (target)\r\n{\r\n var sys = target.scene.sys;\r\n var settings = sys.settings.input;\r\n var config = sys.game.config;\r\n\r\n for (var key in inputPlugins)\r\n {\r\n var source = inputPlugins[key].plugin;\r\n var mapping = inputPlugins[key].mapping;\r\n var settingsKey = inputPlugins[key].settingsKey;\r\n var configKey = inputPlugins[key].configKey;\r\n\r\n if (GetValue(settings, settingsKey, config[configKey]))\r\n {\r\n target[mapping] = new source(target);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Removes an input plugin based on the given key.\r\n *\r\n * @name Phaser.Input.InputPluginCache.remove\r\n * @type {function}\r\n * @static\r\n * @since 3.10.0\r\n * \r\n * @param {string} key - The key of the input plugin to remove.\r\n */\r\nInputPluginCache.remove = function (key)\r\n{\r\n if (inputPlugins.hasOwnProperty(key))\r\n {\r\n delete inputPlugins[key];\r\n }\r\n};\r\n\r\nmodule.exports = InputPluginCache;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9JbnB1dFBsdWdpbkNhY2hlLmpzP2E0YTQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxvRkFBMEI7O0FBRWpEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsU0FBUztBQUNwQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWSx3Q0FBd0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlCQUF5QjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L0lucHV0UGx1Z2luQ2FjaGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBHZXRWYWx1ZSA9IHJlcXVpcmUoJy4uL3V0aWxzL29iamVjdC9HZXRWYWx1ZScpO1xyXG5cclxuLy8gIENvbnRhaW5zIHRoZSBwbHVnaW5zIHRoYXQgUGhhc2VyIHVzZXMgZ2xvYmFsbHkgYW5kIGxvY2FsbHkuXHJcbi8vICBUaGVzZSBhcmUgdGhlIHNvdXJjZSBvYmplY3RzLCBub3QgaW5zdGFudGlhdGVkLlxyXG52YXIgaW5wdXRQbHVnaW5zID0ge307XHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW5DYWNoZVxyXG4gKi9cclxuXHJcbnZhciBJbnB1dFBsdWdpbkNhY2hlID0ge307XHJcblxyXG4vKipcclxuICogU3RhdGljIG1ldGhvZCBjYWxsZWQgZGlyZWN0bHkgYnkgdGhlIENvcmUgaW50ZXJuYWwgUGx1Z2lucy5cclxuICogS2V5IGlzIGEgcmVmZXJlbmNlIHVzZWQgdG8gZ2V0IHRoZSBwbHVnaW4gZnJvbSB0aGUgcGx1Z2lucyBvYmplY3QgKGkuZS4gSW5wdXRQbHVnaW4pXHJcbiAqIFBsdWdpbiBpcyB0aGUgb2JqZWN0IHRvIGluc3RhbnRpYXRlIHRvIGNyZWF0ZSB0aGUgcGx1Z2luXHJcbiAqIE1hcHBpbmcgaXMgd2hhdCB0aGUgcGx1Z2luIGlzIGluamVjdGVkIGludG8gdGhlIFNjZW5lLlN5c3RlbXMgYXMgKGkuZS4gaW5wdXQpXHJcbiAqXHJcbiAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbkNhY2hlLnJlZ2lzdGVyXHJcbiAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICogQHN0YXRpY1xyXG4gKiBAc2luY2UgMy4xMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gQSByZWZlcmVuY2UgdXNlZCB0byBnZXQgdGhpcyBwbHVnaW4gZnJvbSB0aGUgcGx1Z2luIGNhY2hlLlxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBwbHVnaW4gLSBUaGUgcGx1Z2luIHRvIGJlIHN0b3JlZC4gU2hvdWxkIGJlIHRoZSBjb3JlIG9iamVjdCwgbm90IGluc3RhbnRpYXRlZC5cclxuICogQHBhcmFtIHtzdHJpbmd9IG1hcHBpbmcgLSBJZiB0aGlzIHBsdWdpbiBpcyB0byBiZSBpbmplY3RlZCBpbnRvIHRoZSBJbnB1dCBQbHVnaW4sIHRoaXMgaXMgdGhlIHByb3BlcnR5IGtleSB1c2VkLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gc2V0dGluZ3NLZXkgLSBUaGUga2V5IGluIHRoZSBTY2VuZSBTZXR0aW5ncyB0byBjaGVjayB0byBzZWUgaWYgdGhpcyBwbHVnaW4gc2hvdWxkIGluc3RhbGwgb3Igbm90LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnS2V5IC0gVGhlIGtleSBpbiB0aGUgR2FtZSBDb25maWcgdG8gY2hlY2sgdG8gc2VlIGlmIHRoaXMgcGx1Z2luIHNob3VsZCBpbnN0YWxsIG9yIG5vdC5cclxuICovXHJcbklucHV0UGx1Z2luQ2FjaGUucmVnaXN0ZXIgPSBmdW5jdGlvbiAoa2V5LCBwbHVnaW4sIG1hcHBpbmcsIHNldHRpbmdzS2V5LCBjb25maWdLZXkpXHJcbntcclxuICAgIGlucHV0UGx1Z2luc1trZXldID0geyBwbHVnaW46IHBsdWdpbiwgbWFwcGluZzogbWFwcGluZywgc2V0dGluZ3NLZXk6IHNldHRpbmdzS2V5LCBjb25maWdLZXk6IGNvbmZpZ0tleSB9O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGlucHV0IHBsdWdpbiBvYmplY3QgZnJvbSB0aGUgY2FjaGUgYmFzZWQgb24gdGhlIGdpdmVuIGtleS5cclxuICpcclxuICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luQ2FjaGUuZ2V0Q29yZVxyXG4gKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAqIEBzdGF0aWNcclxuICogQHNpbmNlIDMuMTAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGlucHV0IHBsdWdpbiB0byBnZXQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5UeXBlcy5JbnB1dC5JbnB1dFBsdWdpbkNvbnRhaW5lcn0gVGhlIGlucHV0IHBsdWdpbiBvYmplY3QuXHJcbiAqL1xyXG5JbnB1dFBsdWdpbkNhY2hlLmdldFBsdWdpbiA9IGZ1bmN0aW9uIChrZXkpXHJcbntcclxuICAgIHJldHVybiBpbnB1dFBsdWdpbnNba2V5XTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbnN0YWxscyBhbGwgb2YgdGhlIHJlZ2lzdGVyZWQgSW5wdXQgUGx1Z2lucyBpbnRvIHRoZSBnaXZlbiB0YXJnZXQuXHJcbiAqXHJcbiAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbkNhY2hlLmluc3RhbGxcclxuICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gKiBAc3RhdGljXHJcbiAqIEBzaW5jZSAzLjEwLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LklucHV0UGx1Z2lufSB0YXJnZXQgLSBUaGUgdGFyZ2V0IElucHV0UGx1Z2luIHRvIGluc3RhbGwgdGhlIHBsdWdpbnMgaW50by5cclxuICovXHJcbklucHV0UGx1Z2luQ2FjaGUuaW5zdGFsbCA9IGZ1bmN0aW9uICh0YXJnZXQpXHJcbntcclxuICAgIHZhciBzeXMgPSB0YXJnZXQuc2NlbmUuc3lzO1xyXG4gICAgdmFyIHNldHRpbmdzID0gc3lzLnNldHRpbmdzLmlucHV0O1xyXG4gICAgdmFyIGNvbmZpZyA9IHN5cy5nYW1lLmNvbmZpZztcclxuXHJcbiAgICBmb3IgKHZhciBrZXkgaW4gaW5wdXRQbHVnaW5zKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzb3VyY2UgPSBpbnB1dFBsdWdpbnNba2V5XS5wbHVnaW47XHJcbiAgICAgICAgdmFyIG1hcHBpbmcgPSBpbnB1dFBsdWdpbnNba2V5XS5tYXBwaW5nO1xyXG4gICAgICAgIHZhciBzZXR0aW5nc0tleSA9IGlucHV0UGx1Z2luc1trZXldLnNldHRpbmdzS2V5O1xyXG4gICAgICAgIHZhciBjb25maWdLZXkgPSBpbnB1dFBsdWdpbnNba2V5XS5jb25maWdLZXk7XHJcblxyXG4gICAgICAgIGlmIChHZXRWYWx1ZShzZXR0aW5ncywgc2V0dGluZ3NLZXksIGNvbmZpZ1tjb25maWdLZXldKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRhcmdldFttYXBwaW5nXSA9IG5ldyBzb3VyY2UodGFyZ2V0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogUmVtb3ZlcyBhbiBpbnB1dCBwbHVnaW4gYmFzZWQgb24gdGhlIGdpdmVuIGtleS5cclxuICpcclxuICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luQ2FjaGUucmVtb3ZlXHJcbiAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICogQHN0YXRpY1xyXG4gKiBAc2luY2UgMy4xMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgaW5wdXQgcGx1Z2luIHRvIHJlbW92ZS5cclxuICovXHJcbklucHV0UGx1Z2luQ2FjaGUucmVtb3ZlID0gZnVuY3Rpb24gKGtleSlcclxue1xyXG4gICAgaWYgKGlucHV0UGx1Z2lucy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIGRlbGV0ZSBpbnB1dFBsdWdpbnNba2V5XTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW5wdXRQbHVnaW5DYWNoZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/InputPluginCache.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/Pointer.js":
/*!**************************************************!*\
!*** ./node_modules/phaser/src/input/Pointer.js ***!
\**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Angle = __webpack_require__(/*! ../math/angle/Between */ \"./node_modules/phaser/src/math/angle/Between.js\");\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Distance = __webpack_require__(/*! ../math/distance/DistanceBetween */ \"./node_modules/phaser/src/math/distance/DistanceBetween.js\");\r\nvar FuzzyEqual = __webpack_require__(/*! ../math/fuzzy/Equal */ \"./node_modules/phaser/src/math/fuzzy/Equal.js\");\r\nvar SmoothStepInterpolation = __webpack_require__(/*! ../math/interpolation/SmoothStepInterpolation */ \"./node_modules/phaser/src/math/interpolation/SmoothStepInterpolation.js\");\r\nvar Vector2 = __webpack_require__(/*! ../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Pointer object encapsulates both mouse and touch input within Phaser.\r\n *\r\n * By default, Phaser will create 2 pointers for your game to use. If you require more, i.e. for a multi-touch\r\n * game, then use the `InputPlugin.addPointer` method to do so, rather than instantiating this class directly,\r\n * otherwise it won't be managed by the input system.\r\n *\r\n * You can reference the current active pointer via `InputPlugin.activePointer`. You can also use the properties\r\n * `InputPlugin.pointer1` through to `pointer10`, for each pointer you have enabled in your game.\r\n *\r\n * The properties of this object are set by the Input Plugin during processing. This object is then sent in all\r\n * input related events that the Input Plugin emits, so you can reference properties from it directly in your\r\n * callbacks.\r\n *\r\n * @class Pointer\r\n * @memberof Phaser.Input\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.InputManager} manager - A reference to the Input Manager.\r\n * @param {integer} id - The internal ID of this Pointer.\r\n */\r\nvar Pointer = new Class({\r\n\r\n initialize:\r\n\r\n function Pointer (manager, id)\r\n {\r\n /**\r\n * A reference to the Input Manager.\r\n *\r\n * @name Phaser.Input.Pointer#manager\r\n * @type {Phaser.Input.InputManager}\r\n * @since 3.0.0\r\n */\r\n this.manager = manager;\r\n\r\n /**\r\n * The internal ID of this Pointer.\r\n *\r\n * @name Phaser.Input.Pointer#id\r\n * @type {integer}\r\n * @readonly\r\n * @since 3.0.0\r\n */\r\n this.id = id;\r\n\r\n /**\r\n * The most recent native DOM Event this Pointer has processed.\r\n *\r\n * @name Phaser.Input.Pointer#event\r\n * @type {(TouchEvent|MouseEvent)}\r\n * @since 3.0.0\r\n */\r\n this.event;\r\n\r\n /**\r\n * The DOM element the Pointer was pressed down on, taken from the DOM event.\r\n * In a default set-up this will be the Canvas that Phaser is rendering to, or the Window element.\r\n *\r\n * @name Phaser.Input.Pointer#downElement\r\n * @type {any}\r\n * @readonly\r\n * @since 3.16.0\r\n */\r\n this.downElement;\r\n\r\n /**\r\n * The DOM element the Pointer was released on, taken from the DOM event.\r\n * In a default set-up this will be the Canvas that Phaser is rendering to, or the Window element.\r\n *\r\n * @name Phaser.Input.Pointer#upElement\r\n * @type {any}\r\n * @readonly\r\n * @since 3.16.0\r\n */\r\n this.upElement;\r\n\r\n /**\r\n * The camera the Pointer interacted with during its last update.\r\n * \r\n * A Pointer can only ever interact with one camera at once, which will be the top-most camera\r\n * in the list should multiple cameras be positioned on-top of each other.\r\n *\r\n * @name Phaser.Input.Pointer#camera\r\n * @type {Phaser.Cameras.Scene2D.Camera}\r\n * @default null\r\n * @since 3.0.0\r\n */\r\n this.camera = null;\r\n\r\n /**\r\n * A read-only property that indicates which button was pressed, or released, on the pointer\r\n * during the most recent event. It is only set during `up` and `down` events.\r\n * \r\n * On Touch devices the value is always 0.\r\n * \r\n * Users may change the configuration of buttons on their pointing device so that if an event's button property\r\n * is zero, it may not have been caused by the button that is physically left–most on the pointing device;\r\n * however, it should behave as if the left button was clicked in the standard button layout.\r\n *\r\n * @name Phaser.Input.Pointer#button\r\n * @type {integer}\r\n * @readonly\r\n * @default 0\r\n * @since 3.18.0\r\n */\r\n this.button = 0;\r\n\r\n /**\r\n * 0: No button or un-initialized\r\n * 1: Left button\r\n * 2: Right button\r\n * 4: Wheel button or middle button\r\n * 8: 4th button (typically the \"Browser Back\" button)\r\n * 16: 5th button (typically the \"Browser Forward\" button)\r\n * \r\n * For a mouse configured for left-handed use, the button actions are reversed.\r\n * In this case, the values are read from right to left.\r\n *\r\n * @name Phaser.Input.Pointer#buttons\r\n * @type {integer}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.buttons = 0;\r\n\r\n /**\r\n * The position of the Pointer in screen space.\r\n *\r\n * @name Phaser.Input.Pointer#position\r\n * @type {Phaser.Math.Vector2}\r\n * @readonly\r\n * @since 3.0.0\r\n */\r\n this.position = new Vector2();\r\n\r\n /**\r\n * The previous position of the Pointer in screen space.\r\n * \r\n * The old x and y values are stored in here during the InputManager.transformPointer call.\r\n * \r\n * Use the properties `velocity`, `angle` and `distance` to create your own gesture recognition.\r\n *\r\n * @name Phaser.Input.Pointer#prevPosition\r\n * @type {Phaser.Math.Vector2}\r\n * @readonly\r\n * @since 3.11.0\r\n */\r\n this.prevPosition = new Vector2();\r\n\r\n /**\r\n * An internal vector used for calculations of the pointer speed and angle.\r\n *\r\n * @name Phaser.Input.Pointer#midPoint\r\n * @type {Phaser.Math.Vector2}\r\n * @private\r\n * @since 3.16.0\r\n */\r\n this.midPoint = new Vector2(-1, -1);\r\n\r\n /**\r\n * The current velocity of the Pointer, based on its current and previous positions.\r\n * \r\n * This value is smoothed out each frame, according to the `motionFactor` property.\r\n * \r\n * This property is updated whenever the Pointer moves, regardless of any button states. In other words,\r\n * it changes based on movement alone - a button doesn't have to be pressed first.\r\n *\r\n * @name Phaser.Input.Pointer#velocity\r\n * @type {Phaser.Math.Vector2}\r\n * @readonly\r\n * @since 3.16.0\r\n */\r\n this.velocity = new Vector2();\r\n\r\n /**\r\n * The current angle the Pointer is moving, in radians, based on its previous and current position.\r\n * \r\n * The angle is based on the old position facing to the current position.\r\n * \r\n * This property is updated whenever the Pointer moves, regardless of any button states. In other words,\r\n * it changes based on movement alone - a button doesn't have to be pressed first.\r\n *\r\n * @name Phaser.Input.Pointer#angle\r\n * @type {number}\r\n * @readonly\r\n * @since 3.16.0\r\n */\r\n this.angle = 0;\r\n\r\n /**\r\n * The distance the Pointer has moved, based on its previous and current position.\r\n * \r\n * This value is smoothed out each frame, according to the `motionFactor` property.\r\n * \r\n * This property is updated whenever the Pointer moves, regardless of any button states. In other words,\r\n * it changes based on movement alone - a button doesn't have to be pressed first.\r\n * \r\n * If you need the total distance travelled since the primary buttons was pressed down,\r\n * then use the `Pointer.getDistance` method.\r\n *\r\n * @name Phaser.Input.Pointer#distance\r\n * @type {number}\r\n * @readonly\r\n * @since 3.16.0\r\n */\r\n this.distance = 0;\r\n\r\n /**\r\n * The smoothing factor to apply to the Pointer position.\r\n * \r\n * Due to their nature, pointer positions are inherently noisy. While this is fine for lots of games, if you need cleaner positions\r\n * then you can set this value to apply an automatic smoothing to the positions as they are recorded.\r\n * \r\n * The default value of zero means 'no smoothing'.\r\n * Set to a small value, such as 0.2, to apply an average level of smoothing between positions. You can do this by changing this\r\n * value directly, or by setting the `input.smoothFactor` property in the Game Config.\r\n * \r\n * Positions are only smoothed when the pointer moves. If the primary button on this Pointer enters an Up or Down state, then the position\r\n * is always precise, and not smoothed.\r\n *\r\n * @name Phaser.Input.Pointer#smoothFactor\r\n * @type {number}\r\n * @default 0\r\n * @since 3.16.0\r\n */\r\n this.smoothFactor = 0;\r\n\r\n /**\r\n * The factor applied to the motion smoothing each frame.\r\n * \r\n * This value is passed to the Smooth Step Interpolation that is used to calculate the velocity,\r\n * angle and distance of the Pointer. It's applied every frame, until the midPoint reaches the current\r\n * position of the Pointer. 0.2 provides a good average but can be increased if you need a\r\n * quicker update and are working in a high performance environment. Never set this value to\r\n * zero.\r\n *\r\n * @name Phaser.Input.Pointer#motionFactor\r\n * @type {number}\r\n * @default 0.2\r\n * @since 3.16.0\r\n */\r\n this.motionFactor = 0.2;\r\n\r\n /**\r\n * The x position of this Pointer, translated into the coordinate space of the most recent Camera it interacted with.\r\n * \r\n * If you wish to use this value _outside_ of an input event handler then you should update it first by calling\r\n * the `Pointer.updateWorldPoint` method.\r\n *\r\n * @name Phaser.Input.Pointer#worldX\r\n * @type {number}\r\n * @default 0\r\n * @since 3.10.0\r\n */\r\n this.worldX = 0;\r\n\r\n /**\r\n * The y position of this Pointer, translated into the coordinate space of the most recent Camera it interacted with.\r\n * \r\n * If you wish to use this value _outside_ of an input event handler then you should update it first by calling\r\n * the `Pointer.updateWorldPoint` method.\r\n *\r\n * @name Phaser.Input.Pointer#worldY\r\n * @type {number}\r\n * @default 0\r\n * @since 3.10.0\r\n */\r\n this.worldY = 0;\r\n\r\n /**\r\n * Time when this Pointer was most recently moved (regardless of the state of its buttons, if any)\r\n *\r\n * @name Phaser.Input.Pointer#moveTime\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.moveTime = 0;\r\n\r\n /**\r\n * X coordinate of the Pointer when Button 1 (left button), or Touch, was pressed, used for dragging objects.\r\n *\r\n * @name Phaser.Input.Pointer#downX\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.downX = 0;\r\n\r\n /**\r\n * Y coordinate of the Pointer when Button 1 (left button), or Touch, was pressed, used for dragging objects.\r\n *\r\n * @name Phaser.Input.Pointer#downY\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.downY = 0;\r\n\r\n /**\r\n * Time when Button 1 (left button), or Touch, was pressed, used for dragging objects.\r\n *\r\n * @name Phaser.Input.Pointer#downTime\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.downTime = 0;\r\n\r\n /**\r\n * X coordinate of the Pointer when Button 1 (left button), or Touch, was released, used for dragging objects.\r\n *\r\n * @name Phaser.Input.Pointer#upX\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.upX = 0;\r\n\r\n /**\r\n * Y coordinate of the Pointer when Button 1 (left button), or Touch, was released, used for dragging objects.\r\n *\r\n * @name Phaser.Input.Pointer#upY\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.upY = 0;\r\n\r\n /**\r\n * Time when Button 1 (left button), or Touch, was released, used for dragging objects.\r\n *\r\n * @name Phaser.Input.Pointer#upTime\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.upTime = 0;\r\n\r\n /**\r\n * Is the primary button down? (usually button 0, the left mouse button)\r\n *\r\n * @name Phaser.Input.Pointer#primaryDown\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.primaryDown = false;\r\n\r\n /**\r\n * Is _any_ button on this pointer considered as being down?\r\n *\r\n * @name Phaser.Input.Pointer#isDown\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.isDown = false;\r\n\r\n /**\r\n * Did the previous input event come from a Touch input (true) or Mouse? (false)\r\n *\r\n * @name Phaser.Input.Pointer#wasTouch\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.wasTouch = false;\r\n\r\n /**\r\n * Did this Pointer get canceled by a touchcancel event?\r\n * \r\n * Note: \"canceled\" is the American-English spelling of \"cancelled\". Please don't submit PRs correcting it!\r\n *\r\n * @name Phaser.Input.Pointer#wasCanceled\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.15.0\r\n */\r\n this.wasCanceled = false;\r\n\r\n /**\r\n * If the mouse is locked, the horizontal relative movement of the Pointer in pixels since last frame.\r\n *\r\n * @name Phaser.Input.Pointer#movementX\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.movementX = 0;\r\n\r\n /**\r\n * If the mouse is locked, the vertical relative movement of the Pointer in pixels since last frame.\r\n *\r\n * @name Phaser.Input.Pointer#movementY\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.movementY = 0;\r\n\r\n /**\r\n * The identifier property of the Pointer as set by the DOM event when this Pointer is started.\r\n *\r\n * @name Phaser.Input.Pointer#identifier\r\n * @type {number}\r\n * @since 3.10.0\r\n */\r\n this.identifier = 0;\r\n\r\n /**\r\n * The pointerId property of the Pointer as set by the DOM event when this Pointer is started.\r\n * The browser can and will recycle this value.\r\n *\r\n * @name Phaser.Input.Pointer#pointerId\r\n * @type {number}\r\n * @since 3.10.0\r\n */\r\n this.pointerId = null;\r\n\r\n /**\r\n * An active Pointer is one that is currently pressed down on the display.\r\n * A Mouse is always considered as active.\r\n *\r\n * @name Phaser.Input.Pointer#active\r\n * @type {boolean}\r\n * @since 3.10.0\r\n */\r\n this.active = (id === 0) ? true : false;\r\n\r\n /**\r\n * Is this pointer Pointer Locked?\r\n * \r\n * Only a mouse pointer can be locked and it only becomes locked when requested via\r\n * the browsers Pointer Lock API.\r\n * \r\n * You can request this by calling the `this.input.mouse.requestPointerLock()` method from\r\n * a `pointerdown` or `pointerup` event handler.\r\n *\r\n * @name Phaser.Input.Pointer#locked\r\n * @readonly\r\n * @type {boolean}\r\n * @since 3.19.0\r\n */\r\n this.locked = false;\r\n\r\n /**\r\n * The horizontal scroll amount that occurred due to the user moving a mouse wheel or similar input device.\r\n *\r\n * @name Phaser.Input.Pointer#deltaX\r\n * @type {number}\r\n * @default 0\r\n * @since 3.18.0\r\n */\r\n this.deltaX = 0;\r\n\r\n /**\r\n * The vertical scroll amount that occurred due to the user moving a mouse wheel or similar input device.\r\n * This value will typically be less than 0 if the user scrolls up and greater than zero if scrolling down.\r\n *\r\n * @name Phaser.Input.Pointer#deltaY\r\n * @type {number}\r\n * @default 0\r\n * @since 3.18.0\r\n */\r\n this.deltaY = 0;\r\n\r\n /**\r\n * The z-axis scroll amount that occurred due to the user moving a mouse wheel or similar input device.\r\n *\r\n * @name Phaser.Input.Pointer#deltaZ\r\n * @type {number}\r\n * @default 0\r\n * @since 3.18.0\r\n */\r\n this.deltaZ = 0;\r\n },\r\n\r\n /**\r\n * Takes a Camera and updates this Pointer's `worldX` and `worldY` values so they are\r\n * the result of a translation through the given Camera.\r\n * \r\n * Note that the values will be automatically replaced the moment the Pointer is\r\n * updated by an input event, such as a mouse move, so should be used immediately.\r\n *\r\n * @method Phaser.Input.Pointer#updateWorldPoint\r\n * @since 3.19.0\r\n *\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera which is being tested against.\r\n *\r\n * @return {this} This Pointer object.\r\n */\r\n updateWorldPoint: function (camera)\r\n {\r\n var x = this.x;\r\n var y = this.y;\r\n\r\n if (camera.resolution !== 1)\r\n {\r\n x += camera._x;\r\n y += camera._y;\r\n }\r\n\r\n // Stores the world point inside of tempPoint\r\n var temp = camera.getWorldPoint(x, y);\r\n\r\n this.worldX = temp.x;\r\n this.worldY = temp.y;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Takes a Camera and returns a Vector2 containing the translated position of this Pointer\r\n * within that Camera. This can be used to convert this Pointers position into camera space.\r\n *\r\n * @method Phaser.Input.Pointer#positionToCamera\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera to use for the translation.\r\n * @param {(Phaser.Math.Vector2|object)} [output] - A Vector2-like object in which to store the translated position.\r\n *\r\n * @return {(Phaser.Math.Vector2|object)} A Vector2 containing the translated coordinates of this Pointer, based on the given camera.\r\n */\r\n positionToCamera: function (camera, output)\r\n {\r\n return camera.getWorldPoint(this.x, this.y, output);\r\n },\r\n\r\n /**\r\n * Calculates the motion of this Pointer, including its velocity and angle of movement.\r\n * This method is called automatically each frame by the Input Manager.\r\n *\r\n * @method Phaser.Input.Pointer#updateMotion\r\n * @private\r\n * @since 3.16.0\r\n */\r\n updateMotion: function ()\r\n {\r\n var cx = this.position.x;\r\n var cy = this.position.y;\r\n\r\n var mx = this.midPoint.x;\r\n var my = this.midPoint.y;\r\n\r\n if (cx === mx && cy === my)\r\n {\r\n // Nothing to do here\r\n return;\r\n }\r\n\r\n // Moving towards our goal ...\r\n var vx = SmoothStepInterpolation(this.motionFactor, mx, cx);\r\n var vy = SmoothStepInterpolation(this.motionFactor, my, cy);\r\n\r\n if (FuzzyEqual(vx, cx, 0.1))\r\n {\r\n vx = cx;\r\n }\r\n\r\n if (FuzzyEqual(vy, cy, 0.1))\r\n {\r\n vy = cy;\r\n }\r\n\r\n this.midPoint.set(vx, vy);\r\n\r\n var dx = cx - vx;\r\n var dy = cy - vy;\r\n\r\n this.velocity.set(dx, dy);\r\n\r\n this.angle = Angle(vx, vy, cx, cy);\r\n\r\n this.distance = Math.sqrt(dx * dx + dy * dy);\r\n },\r\n\r\n /**\r\n * Internal method to handle a Mouse Up Event.\r\n *\r\n * @method Phaser.Input.Pointer#up\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {MouseEvent} event - The Mouse Event to process.\r\n */\r\n up: function (event)\r\n {\r\n if ('buttons' in event)\r\n {\r\n this.buttons = event.buttons;\r\n }\r\n\r\n this.event = event;\r\n\r\n this.button = event.button;\r\n\r\n this.upElement = event.target;\r\n\r\n // Sets the local x/y properties\r\n this.manager.transformPointer(this, event.pageX, event.pageY, false);\r\n\r\n // 0: Main button pressed, usually the left button or the un-initialized state\r\n if (event.button === 0)\r\n {\r\n this.primaryDown = false;\r\n this.upX = this.x;\r\n this.upY = this.y;\r\n this.upTime = event.timeStamp;\r\n }\r\n\r\n this.isDown = false;\r\n\r\n this.wasTouch = false;\r\n },\r\n\r\n /**\r\n * Internal method to handle a Mouse Down Event.\r\n *\r\n * @method Phaser.Input.Pointer#down\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {MouseEvent} event - The Mouse Event to process.\r\n */\r\n down: function (event)\r\n {\r\n if ('buttons' in event)\r\n {\r\n this.buttons = event.buttons;\r\n }\r\n\r\n this.event = event;\r\n\r\n this.button = event.button;\r\n\r\n this.downElement = event.target;\r\n\r\n // Sets the local x/y properties\r\n this.manager.transformPointer(this, event.pageX, event.pageY, false);\r\n\r\n // 0: Main button pressed, usually the left button or the un-initialized state\r\n if (event.button === 0)\r\n {\r\n this.primaryDown = true;\r\n this.downX = this.x;\r\n this.downY = this.y;\r\n this.downTime = event.timeStamp;\r\n }\r\n\r\n this.isDown = true;\r\n\r\n this.wasTouch = false;\r\n },\r\n\r\n /**\r\n * Internal method to handle a Mouse Move Event.\r\n *\r\n * @method Phaser.Input.Pointer#move\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {MouseEvent} event - The Mouse Event to process.\r\n */\r\n move: function (event)\r\n {\r\n if ('buttons' in event)\r\n {\r\n this.buttons = event.buttons;\r\n }\r\n\r\n this.event = event;\r\n\r\n // Sets the local x/y properties\r\n this.manager.transformPointer(this, event.pageX, event.pageY, true);\r\n\r\n if (this.locked)\r\n {\r\n // Multiple DOM events may occur within one frame, but only one Phaser event will fire\r\n this.movementX = event.movementX || event.mozMovementX || event.webkitMovementX || 0;\r\n this.movementY = event.movementY || event.mozMovementY || event.webkitMovementY || 0;\r\n }\r\n\r\n this.moveTime = event.timeStamp;\r\n\r\n this.wasTouch = false;\r\n },\r\n\r\n /**\r\n * Internal method to handle a Mouse Wheel Event.\r\n *\r\n * @method Phaser.Input.Pointer#wheel\r\n * @private\r\n * @since 3.18.0\r\n *\r\n * @param {WheelEvent} event - The Wheel Event to process.\r\n */\r\n wheel: function (event)\r\n {\r\n if ('buttons' in event)\r\n {\r\n this.buttons = event.buttons;\r\n }\r\n\r\n this.event = event;\r\n\r\n // Sets the local x/y properties\r\n this.manager.transformPointer(this, event.pageX, event.pageY, false);\r\n\r\n this.deltaX = event.deltaX;\r\n this.deltaY = event.deltaY;\r\n this.deltaZ = event.deltaZ;\r\n\r\n this.wasTouch = false;\r\n },\r\n\r\n /**\r\n * Internal method to handle a Touch Start Event.\r\n *\r\n * @method Phaser.Input.Pointer#touchstart\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {Touch} touch - The Changed Touch from the Touch Event.\r\n * @param {TouchEvent} event - The full Touch Event.\r\n */\r\n touchstart: function (touch, event)\r\n {\r\n if (touch['pointerId'])\r\n {\r\n this.pointerId = touch.pointerId;\r\n }\r\n\r\n this.identifier = touch.identifier;\r\n this.target = touch.target;\r\n this.active = true;\r\n\r\n this.buttons = 1;\r\n\r\n this.event = event;\r\n\r\n this.downElement = touch.target;\r\n\r\n // Sets the local x/y properties\r\n this.manager.transformPointer(this, touch.pageX, touch.pageY, false);\r\n\r\n this.primaryDown = true;\r\n this.downX = this.x;\r\n this.downY = this.y;\r\n this.downTime = event.timeStamp;\r\n\r\n this.isDown = true;\r\n\r\n this.wasTouch = true;\r\n this.wasCanceled = false;\r\n\r\n this.updateMotion();\r\n },\r\n\r\n /**\r\n * Internal method to handle a Touch Move Event.\r\n *\r\n * @method Phaser.Input.Pointer#touchmove\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {Touch} touch - The Changed Touch from the Touch Event.\r\n * @param {TouchEvent} event - The full Touch Event.\r\n */\r\n touchmove: function (touch, event)\r\n {\r\n this.event = event;\r\n\r\n // Sets the local x/y properties\r\n this.manager.transformPointer(this, touch.pageX, touch.pageY, true);\r\n\r\n this.moveTime = event.timeStamp;\r\n\r\n this.wasTouch = true;\r\n\r\n this.updateMotion();\r\n },\r\n\r\n /**\r\n * Internal method to handle a Touch End Event.\r\n *\r\n * @method Phaser.Input.Pointer#touchend\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {Touch} touch - The Changed Touch from the Touch Event.\r\n * @param {TouchEvent} event - The full Touch Event.\r\n */\r\n touchend: function (touch, event)\r\n {\r\n this.buttons = 0;\r\n\r\n this.event = event;\r\n\r\n this.upElement = touch.target;\r\n\r\n // Sets the local x/y properties\r\n this.manager.transformPointer(this, touch.pageX, touch.pageY, false);\r\n\r\n this.primaryDown = false;\r\n this.upX = this.x;\r\n this.upY = this.y;\r\n this.upTime = event.timeStamp;\r\n\r\n this.isDown = false;\r\n\r\n this.wasTouch = true;\r\n this.wasCanceled = false;\r\n \r\n this.active = false;\r\n\r\n this.updateMotion();\r\n },\r\n\r\n /**\r\n * Internal method to handle a Touch Cancel Event.\r\n *\r\n * @method Phaser.Input.Pointer#touchcancel\r\n * @private\r\n * @since 3.15.0\r\n *\r\n * @param {Touch} touch - The Changed Touch from the Touch Event.\r\n * @param {TouchEvent} event - The full Touch Event.\r\n */\r\n touchcancel: function (touch, event)\r\n {\r\n this.buttons = 0;\r\n\r\n this.event = event;\r\n\r\n this.upElement = touch.target;\r\n\r\n // Sets the local x/y properties\r\n this.manager.transformPointer(this, touch.pageX, touch.pageY, false);\r\n\r\n this.primaryDown = false;\r\n this.upX = this.x;\r\n this.upY = this.y;\r\n this.upTime = event.timeStamp;\r\n\r\n this.isDown = false;\r\n\r\n this.wasTouch = true;\r\n this.wasCanceled = true;\r\n \r\n this.active = false;\r\n },\r\n\r\n /**\r\n * Checks to see if any buttons are being held down on this Pointer.\r\n *\r\n * @method Phaser.Input.Pointer#noButtonDown\r\n * @since 3.0.0\r\n *\r\n * @return {boolean} `true` if no buttons are being held down.\r\n */\r\n noButtonDown: function ()\r\n {\r\n return (this.buttons === 0);\r\n },\r\n\r\n /**\r\n * Checks to see if the left button is being held down on this Pointer.\r\n *\r\n * @method Phaser.Input.Pointer#leftButtonDown\r\n * @since 3.0.0\r\n *\r\n * @return {boolean} `true` if the left button is being held down.\r\n */\r\n leftButtonDown: function ()\r\n {\r\n return (this.buttons & 1) ? true : false;\r\n },\r\n\r\n /**\r\n * Checks to see if the right button is being held down on this Pointer.\r\n *\r\n * @method Phaser.Input.Pointer#rightButtonDown\r\n * @since 3.0.0\r\n *\r\n * @return {boolean} `true` if the right button is being held down.\r\n */\r\n rightButtonDown: function ()\r\n {\r\n return (this.buttons & 2) ? true : false;\r\n },\r\n\r\n /**\r\n * Checks to see if the middle button is being held down on this Pointer.\r\n *\r\n * @method Phaser.Input.Pointer#middleButtonDown\r\n * @since 3.0.0\r\n *\r\n * @return {boolean} `true` if the middle button is being held down.\r\n */\r\n middleButtonDown: function ()\r\n {\r\n return (this.buttons & 4) ? true : false;\r\n },\r\n\r\n /**\r\n * Checks to see if the back button is being held down on this Pointer.\r\n *\r\n * @method Phaser.Input.Pointer#backButtonDown\r\n * @since 3.0.0\r\n *\r\n * @return {boolean} `true` if the back button is being held down.\r\n */\r\n backButtonDown: function ()\r\n {\r\n return (this.buttons & 8) ? true : false;\r\n },\r\n\r\n /**\r\n * Checks to see if the forward button is being held down on this Pointer.\r\n *\r\n * @method Phaser.Input.Pointer#forwardButtonDown\r\n * @since 3.0.0\r\n *\r\n * @return {boolean} `true` if the forward button is being held down.\r\n */\r\n forwardButtonDown: function ()\r\n {\r\n return (this.buttons & 16) ? true : false;\r\n },\r\n\r\n /**\r\n * Checks to see if the left button was just released on this Pointer.\r\n *\r\n * @method Phaser.Input.Pointer#leftButtonReleased\r\n * @since 3.18.0\r\n *\r\n * @return {boolean} `true` if the left button was just released.\r\n */\r\n leftButtonReleased: function ()\r\n {\r\n return (this.button === 0 && !this.isDown);\r\n },\r\n\r\n /**\r\n * Checks to see if the right button was just released on this Pointer.\r\n *\r\n * @method Phaser.Input.Pointer#rightButtonReleased\r\n * @since 3.18.0\r\n *\r\n * @return {boolean} `true` if the right button was just released.\r\n */\r\n rightButtonReleased: function ()\r\n {\r\n return (this.button === 2 && !this.isDown);\r\n },\r\n\r\n /**\r\n * Checks to see if the middle button was just released on this Pointer.\r\n *\r\n * @method Phaser.Input.Pointer#middleButtonReleased\r\n * @since 3.18.0\r\n *\r\n * @return {boolean} `true` if the middle button was just released.\r\n */\r\n middleButtonReleased: function ()\r\n {\r\n return (this.button === 1 && !this.isDown);\r\n },\r\n\r\n /**\r\n * Checks to see if the back button was just released on this Pointer.\r\n *\r\n * @method Phaser.Input.Pointer#backButtonReleased\r\n * @since 3.18.0\r\n *\r\n * @return {boolean} `true` if the back button was just released.\r\n */\r\n backButtonReleased: function ()\r\n {\r\n return (this.button === 3 && !this.isDown);\r\n },\r\n\r\n /**\r\n * Checks to see if the forward button was just released on this Pointer.\r\n *\r\n * @method Phaser.Input.Pointer#forwardButtonReleased\r\n * @since 3.18.0\r\n *\r\n * @return {boolean} `true` if the forward button was just released.\r\n */\r\n forwardButtonReleased: function ()\r\n {\r\n return (this.button === 4 && !this.isDown);\r\n },\r\n\r\n /**\r\n * If the Pointer has a button pressed down at the time this method is called, it will return the\r\n * distance between the Pointer's `downX` and `downY` values and the current position.\r\n * \r\n * If no button is held down, it will return the last recorded distance, based on where\r\n * the Pointer was when the button was released.\r\n * \r\n * If you wish to get the distance being travelled currently, based on the velocity of the Pointer,\r\n * then see the `Pointer.distance` property.\r\n *\r\n * @method Phaser.Input.Pointer#getDistance\r\n * @since 3.13.0\r\n *\r\n * @return {number} The distance the Pointer moved.\r\n */\r\n getDistance: function ()\r\n {\r\n if (this.isDown)\r\n {\r\n return Distance(this.downX, this.downY, this.x, this.y);\r\n }\r\n else\r\n {\r\n return Distance(this.downX, this.downY, this.upX, this.upY);\r\n }\r\n },\r\n\r\n /**\r\n * If the Pointer has a button pressed down at the time this method is called, it will return the\r\n * horizontal distance between the Pointer's `downX` and `downY` values and the current position.\r\n * \r\n * If no button is held down, it will return the last recorded horizontal distance, based on where\r\n * the Pointer was when the button was released.\r\n *\r\n * @method Phaser.Input.Pointer#getDistanceX\r\n * @since 3.16.0\r\n *\r\n * @return {number} The horizontal distance the Pointer moved.\r\n */\r\n getDistanceX: function ()\r\n {\r\n if (this.isDown)\r\n {\r\n return Math.abs(this.downX - this.x);\r\n }\r\n else\r\n {\r\n return Math.abs(this.downX - this.upX);\r\n }\r\n },\r\n\r\n /**\r\n * If the Pointer has a button pressed down at the time this method is called, it will return the\r\n * vertical distance between the Pointer's `downX` and `downY` values and the current position.\r\n * \r\n * If no button is held down, it will return the last recorded vertical distance, based on where\r\n * the Pointer was when the button was released.\r\n *\r\n * @method Phaser.Input.Pointer#getDistanceY\r\n * @since 3.16.0\r\n *\r\n * @return {number} The vertical distance the Pointer moved.\r\n */\r\n getDistanceY: function ()\r\n {\r\n if (this.isDown)\r\n {\r\n return Math.abs(this.downY - this.y);\r\n }\r\n else\r\n {\r\n return Math.abs(this.downY - this.upY);\r\n }\r\n },\r\n\r\n /**\r\n * If the Pointer has a button pressed down at the time this method is called, it will return the\r\n * duration since the button was pressed down.\r\n * \r\n * If no button is held down, it will return the last recorded duration, based on the time\r\n * the Pointer button was released.\r\n *\r\n * @method Phaser.Input.Pointer#getDuration\r\n * @since 3.16.0\r\n *\r\n * @return {number} The duration the Pointer was held down for in milliseconds.\r\n */\r\n getDuration: function ()\r\n {\r\n if (this.isDown)\r\n {\r\n return (this.manager.time - this.downTime);\r\n }\r\n else\r\n {\r\n return (this.upTime - this.downTime);\r\n }\r\n },\r\n\r\n /**\r\n * If the Pointer has a button pressed down at the time this method is called, it will return the\r\n * angle between the Pointer's `downX` and `downY` values and the current position.\r\n * \r\n * If no button is held down, it will return the last recorded angle, based on where\r\n * the Pointer was when the button was released.\r\n * \r\n * The angle is based on the old position facing to the current position.\r\n * \r\n * If you wish to get the current angle, based on the velocity of the Pointer, then\r\n * see the `Pointer.angle` property.\r\n *\r\n * @method Phaser.Input.Pointer#getAngle\r\n * @since 3.16.0\r\n *\r\n * @return {number} The angle between the Pointer's coordinates in radians.\r\n */\r\n getAngle: function ()\r\n {\r\n if (this.isDown)\r\n {\r\n return Angle(this.downX, this.downY, this.x, this.y);\r\n }\r\n else\r\n {\r\n return Angle(this.downX, this.downY, this.upX, this.upY);\r\n }\r\n },\r\n\r\n /**\r\n * Takes the previous and current Pointer positions and then generates an array of interpolated values between\r\n * the two. The array will be populated up to the size of the `steps` argument.\r\n * \r\n * ```javaScript\r\n * var points = pointer.getInterpolatedPosition(4);\r\n * \r\n * // points[0] = { x: 0, y: 0 }\r\n * // points[1] = { x: 2, y: 1 }\r\n * // points[2] = { x: 3, y: 2 }\r\n * // points[3] = { x: 6, y: 3 }\r\n * ```\r\n * \r\n * Use this if you need to get smoothed values between the previous and current pointer positions. DOM pointer\r\n * events can often fire faster than the main browser loop, and this will help you avoid janky movement\r\n * especially if you have an object following a Pointer.\r\n * \r\n * Note that if you provide an output array it will only be populated up to the number of steps provided.\r\n * It will not clear any previous data that may have existed beyond the range of the steps count.\r\n * \r\n * Internally it uses the Smooth Step interpolation calculation.\r\n *\r\n * @method Phaser.Input.Pointer#getInterpolatedPosition\r\n * @since 3.11.0\r\n * \r\n * @param {integer} [steps=10] - The number of interpolation steps to use.\r\n * @param {array} [out] - An array to store the results in. If not provided a new one will be created.\r\n * \r\n * @return {array} An array of interpolated values.\r\n */\r\n getInterpolatedPosition: function (steps, out)\r\n {\r\n if (steps === undefined) { steps = 10; }\r\n if (out === undefined) { out = []; }\r\n\r\n var prevX = this.prevPosition.x;\r\n var prevY = this.prevPosition.y;\r\n\r\n var curX = this.position.x;\r\n var curY = this.position.y;\r\n\r\n for (var i = 0; i < steps; i++)\r\n {\r\n var t = (1 / steps) * i;\r\n\r\n out[i] = { x: SmoothStepInterpolation(t, prevX, curX), y: SmoothStepInterpolation(t, prevY, curY) };\r\n }\r\n\r\n return out;\r\n },\r\n\r\n /**\r\n * Destroys this Pointer instance and resets its external references.\r\n *\r\n * @method Phaser.Input.Pointer#destroy\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.camera = null;\r\n this.manager = null;\r\n this.position = null;\r\n },\r\n\r\n /**\r\n * The x position of this Pointer.\r\n * The value is in screen space.\r\n * See `worldX` to get a camera converted position.\r\n *\r\n * @name Phaser.Input.Pointer#x\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n x: {\r\n\r\n get: function ()\r\n {\r\n return this.position.x;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.position.x = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * The y position of this Pointer.\r\n * The value is in screen space.\r\n * See `worldY` to get a camera converted position.\r\n *\r\n * @name Phaser.Input.Pointer#y\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n y: {\r\n\r\n get: function ()\r\n {\r\n return this.position.y;\r\n },\r\n\r\n set: function (value)\r\n {\r\n this.position.y = value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Time when this Pointer was most recently updated by a DOM Event.\r\n * This comes directly from the `event.timeStamp` property.\r\n * If no event has yet taken place, it will return zero.\r\n *\r\n * @name Phaser.Input.Pointer#time\r\n * @type {number}\r\n * @readonly\r\n * @since 3.16.0\r\n */\r\n time: {\r\n\r\n get: function ()\r\n {\r\n return (this.event) ? this.event.timeStamp : 0;\r\n }\r\n\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Pointer;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9Qb2ludGVyLmpzPzYyZmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyw4RUFBdUI7QUFDM0MsWUFBWSxtQkFBTyxDQUFDLGdFQUFnQjtBQUNwQyxlQUFlLG1CQUFPLENBQUMsb0dBQWtDO0FBQ3pELGlCQUFpQixtQkFBTyxDQUFDLDBFQUFxQjtBQUM5Qyw4QkFBOEIsbUJBQU8sQ0FBQyw4SEFBK0M7QUFDckYsY0FBYyxtQkFBTyxDQUFDLGtFQUFpQjs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMEJBQTBCO0FBQ3JDLFdBQVcsUUFBUTtBQUNuQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4QkFBOEI7QUFDN0M7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEJBQThCO0FBQzdDLGVBQWUsNkJBQTZCO0FBQzVDO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFdBQVc7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsV0FBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxXQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsV0FBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxXQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsV0FBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLFdBQVc7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLFdBQVc7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkIsdUJBQXVCO0FBQ3ZCLHVCQUF1QjtBQUN2Qix1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLE1BQU07QUFDckI7QUFDQSxnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsWUFBWTtBQUM5QyxnQ0FBZ0MsVUFBVTs7QUFFMUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVCQUF1QixXQUFXO0FBQ2xDO0FBQ0E7O0FBRUEsc0JBQXNCO0FBQ3RCOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L1BvaW50ZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBBbmdsZSA9IHJlcXVpcmUoJy4uL21hdGgvYW5nbGUvQmV0d2VlbicpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG52YXIgRGlzdGFuY2UgPSByZXF1aXJlKCcuLi9tYXRoL2Rpc3RhbmNlL0Rpc3RhbmNlQmV0d2VlbicpO1xyXG52YXIgRnV6enlFcXVhbCA9IHJlcXVpcmUoJy4uL21hdGgvZnV6enkvRXF1YWwnKTtcclxudmFyIFNtb290aFN0ZXBJbnRlcnBvbGF0aW9uID0gcmVxdWlyZSgnLi4vbWF0aC9pbnRlcnBvbGF0aW9uL1Ntb290aFN0ZXBJbnRlcnBvbGF0aW9uJyk7XHJcbnZhciBWZWN0b3IyID0gcmVxdWlyZSgnLi4vbWF0aC9WZWN0b3IyJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIFBvaW50ZXIgb2JqZWN0IGVuY2Fwc3VsYXRlcyBib3RoIG1vdXNlIGFuZCB0b3VjaCBpbnB1dCB3aXRoaW4gUGhhc2VyLlxyXG4gKlxyXG4gKiBCeSBkZWZhdWx0LCBQaGFzZXIgd2lsbCBjcmVhdGUgMiBwb2ludGVycyBmb3IgeW91ciBnYW1lIHRvIHVzZS4gSWYgeW91IHJlcXVpcmUgbW9yZSwgaS5lLiBmb3IgYSBtdWx0aS10b3VjaFxyXG4gKiBnYW1lLCB0aGVuIHVzZSB0aGUgYElucHV0UGx1Z2luLmFkZFBvaW50ZXJgIG1ldGhvZCB0byBkbyBzbywgcmF0aGVyIHRoYW4gaW5zdGFudGlhdGluZyB0aGlzIGNsYXNzIGRpcmVjdGx5LFxyXG4gKiBvdGhlcndpc2UgaXQgd29uJ3QgYmUgbWFuYWdlZCBieSB0aGUgaW5wdXQgc3lzdGVtLlxyXG4gKlxyXG4gKiBZb3UgY2FuIHJlZmVyZW5jZSB0aGUgY3VycmVudCBhY3RpdmUgcG9pbnRlciB2aWEgYElucHV0UGx1Z2luLmFjdGl2ZVBvaW50ZXJgLiBZb3UgY2FuIGFsc28gdXNlIHRoZSBwcm9wZXJ0aWVzXHJcbiAqIGBJbnB1dFBsdWdpbi5wb2ludGVyMWAgdGhyb3VnaCB0byBgcG9pbnRlcjEwYCwgZm9yIGVhY2ggcG9pbnRlciB5b3UgaGF2ZSBlbmFibGVkIGluIHlvdXIgZ2FtZS5cclxuICpcclxuICogVGhlIHByb3BlcnRpZXMgb2YgdGhpcyBvYmplY3QgYXJlIHNldCBieSB0aGUgSW5wdXQgUGx1Z2luIGR1cmluZyBwcm9jZXNzaW5nLiBUaGlzIG9iamVjdCBpcyB0aGVuIHNlbnQgaW4gYWxsXHJcbiAqIGlucHV0IHJlbGF0ZWQgZXZlbnRzIHRoYXQgdGhlIElucHV0IFBsdWdpbiBlbWl0cywgc28geW91IGNhbiByZWZlcmVuY2UgcHJvcGVydGllcyBmcm9tIGl0IGRpcmVjdGx5IGluIHlvdXJcclxuICogY2FsbGJhY2tzLlxyXG4gKlxyXG4gKiBAY2xhc3MgUG9pbnRlclxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLklucHV0XHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyfSBtYW5hZ2VyIC0gQSByZWZlcmVuY2UgdG8gdGhlIElucHV0IE1hbmFnZXIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gaWQgLSBUaGUgaW50ZXJuYWwgSUQgb2YgdGhpcyBQb2ludGVyLlxyXG4gKi9cclxudmFyIFBvaW50ZXIgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gUG9pbnRlciAobWFuYWdlciwgaWQpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIElucHV0IE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciNtYW5hZ2VyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gbWFuYWdlcjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGludGVybmFsIElEIG9mIHRoaXMgUG9pbnRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Qb2ludGVyI2lkXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbW9zdCByZWNlbnQgbmF0aXZlIERPTSBFdmVudCB0aGlzIFBvaW50ZXIgaGFzIHByb2Nlc3NlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Qb2ludGVyI2V2ZW50XHJcbiAgICAgICAgICogQHR5cGUgeyhUb3VjaEV2ZW50fE1vdXNlRXZlbnQpfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZXZlbnQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBET00gZWxlbWVudCB0aGUgUG9pbnRlciB3YXMgcHJlc3NlZCBkb3duIG9uLCB0YWtlbiBmcm9tIHRoZSBET00gZXZlbnQuXHJcbiAgICAgICAgICogSW4gYSBkZWZhdWx0IHNldC11cCB0aGlzIHdpbGwgYmUgdGhlIENhbnZhcyB0aGF0IFBoYXNlciBpcyByZW5kZXJpbmcgdG8sIG9yIHRoZSBXaW5kb3cgZWxlbWVudC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Qb2ludGVyI2Rvd25FbGVtZW50XHJcbiAgICAgICAgICogQHR5cGUge2FueX1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kb3duRWxlbWVudDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIERPTSBlbGVtZW50IHRoZSBQb2ludGVyIHdhcyByZWxlYXNlZCBvbiwgdGFrZW4gZnJvbSB0aGUgRE9NIGV2ZW50LlxyXG4gICAgICAgICAqIEluIGEgZGVmYXVsdCBzZXQtdXAgdGhpcyB3aWxsIGJlIHRoZSBDYW52YXMgdGhhdCBQaGFzZXIgaXMgcmVuZGVyaW5nIHRvLCBvciB0aGUgV2luZG93IGVsZW1lbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciN1cEVsZW1lbnRcclxuICAgICAgICAgKiBAdHlwZSB7YW55fVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnVwRWxlbWVudDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGNhbWVyYSB0aGUgUG9pbnRlciBpbnRlcmFjdGVkIHdpdGggZHVyaW5nIGl0cyBsYXN0IHVwZGF0ZS5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBBIFBvaW50ZXIgY2FuIG9ubHkgZXZlciBpbnRlcmFjdCB3aXRoIG9uZSBjYW1lcmEgYXQgb25jZSwgd2hpY2ggd2lsbCBiZSB0aGUgdG9wLW1vc3QgY2FtZXJhXHJcbiAgICAgICAgICogaW4gdGhlIGxpc3Qgc2hvdWxkIG11bHRpcGxlIGNhbWVyYXMgYmUgcG9zaXRpb25lZCBvbi10b3Agb2YgZWFjaCBvdGhlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Qb2ludGVyI2NhbWVyYVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX1cclxuICAgICAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYW1lcmEgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlYWQtb25seSBwcm9wZXJ0eSB0aGF0IGluZGljYXRlcyB3aGljaCBidXR0b24gd2FzIHByZXNzZWQsIG9yIHJlbGVhc2VkLCBvbiB0aGUgcG9pbnRlclxyXG4gICAgICAgICAqIGR1cmluZyB0aGUgbW9zdCByZWNlbnQgZXZlbnQuIEl0IGlzIG9ubHkgc2V0IGR1cmluZyBgdXBgIGFuZCBgZG93bmAgZXZlbnRzLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIE9uIFRvdWNoIGRldmljZXMgdGhlIHZhbHVlIGlzIGFsd2F5cyAwLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFVzZXJzIG1heSBjaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYnV0dG9ucyBvbiB0aGVpciBwb2ludGluZyBkZXZpY2Ugc28gdGhhdCBpZiBhbiBldmVudCdzIGJ1dHRvbiBwcm9wZXJ0eVxyXG4gICAgICAgICAqIGlzIHplcm8sIGl0IG1heSBub3QgaGF2ZSBiZWVuIGNhdXNlZCBieSB0aGUgYnV0dG9uIHRoYXQgaXMgcGh5c2ljYWxseSBsZWZ04oCTbW9zdCBvbiB0aGUgcG9pbnRpbmcgZGV2aWNlO1xyXG4gICAgICAgICAqIGhvd2V2ZXIsIGl0IHNob3VsZCBiZWhhdmUgYXMgaWYgdGhlIGxlZnQgYnV0dG9uIHdhcyBjbGlja2VkIGluIHRoZSBzdGFuZGFyZCBidXR0b24gbGF5b3V0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjYnV0dG9uXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJ1dHRvbiA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIDA6IE5vIGJ1dHRvbiBvciB1bi1pbml0aWFsaXplZFxyXG4gICAgICAgICAqIDE6IExlZnQgYnV0dG9uXHJcbiAgICAgICAgICogMjogUmlnaHQgYnV0dG9uXHJcbiAgICAgICAgICogNDogV2hlZWwgYnV0dG9uIG9yIG1pZGRsZSBidXR0b25cclxuICAgICAgICAgKiA4OiA0dGggYnV0dG9uICh0eXBpY2FsbHkgdGhlIFwiQnJvd3NlciBCYWNrXCIgYnV0dG9uKVxyXG4gICAgICAgICAqIDE2OiA1dGggYnV0dG9uICh0eXBpY2FsbHkgdGhlIFwiQnJvd3NlciBGb3J3YXJkXCIgYnV0dG9uKVxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEZvciBhIG1vdXNlIGNvbmZpZ3VyZWQgZm9yIGxlZnQtaGFuZGVkIHVzZSwgdGhlIGJ1dHRvbiBhY3Rpb25zIGFyZSByZXZlcnNlZC5cclxuICAgICAgICAgKiBJbiB0aGlzIGNhc2UsIHRoZSB2YWx1ZXMgYXJlIHJlYWQgZnJvbSByaWdodCB0byBsZWZ0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjYnV0dG9uc1xyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJ1dHRvbnMgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIFBvaW50ZXIgaW4gc2NyZWVuIHNwYWNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjcG9zaXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBvc2l0aW9uID0gbmV3IFZlY3RvcjIoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHByZXZpb3VzIHBvc2l0aW9uIG9mIHRoZSBQb2ludGVyIGluIHNjcmVlbiBzcGFjZS5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGUgb2xkIHggYW5kIHkgdmFsdWVzIGFyZSBzdG9yZWQgaW4gaGVyZSBkdXJpbmcgdGhlIElucHV0TWFuYWdlci50cmFuc2Zvcm1Qb2ludGVyIGNhbGwuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVXNlIHRoZSBwcm9wZXJ0aWVzIGB2ZWxvY2l0eWAsIGBhbmdsZWAgYW5kIGBkaXN0YW5jZWAgdG8gY3JlYXRlIHlvdXIgb3duIGdlc3R1cmUgcmVjb2duaXRpb24uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciNwcmV2UG9zaXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLk1hdGguVmVjdG9yMn1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wcmV2UG9zaXRpb24gPSBuZXcgVmVjdG9yMigpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBpbnRlcm5hbCB2ZWN0b3IgdXNlZCBmb3IgY2FsY3VsYXRpb25zIG9mIHRoZSBwb2ludGVyIHNwZWVkIGFuZCBhbmdsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Qb2ludGVyI21pZFBvaW50XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5taWRQb2ludCA9IG5ldyBWZWN0b3IyKC0xLCAtMSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjdXJyZW50IHZlbG9jaXR5IG9mIHRoZSBQb2ludGVyLCBiYXNlZCBvbiBpdHMgY3VycmVudCBhbmQgcHJldmlvdXMgcG9zaXRpb25zLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoaXMgdmFsdWUgaXMgc21vb3RoZWQgb3V0IGVhY2ggZnJhbWUsIGFjY29yZGluZyB0byB0aGUgYG1vdGlvbkZhY3RvcmAgcHJvcGVydHkuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVGhpcyBwcm9wZXJ0eSBpcyB1cGRhdGVkIHdoZW5ldmVyIHRoZSBQb2ludGVyIG1vdmVzLCByZWdhcmRsZXNzIG9mIGFueSBidXR0b24gc3RhdGVzLiBJbiBvdGhlciB3b3JkcyxcclxuICAgICAgICAgKiBpdCBjaGFuZ2VzIGJhc2VkIG9uIG1vdmVtZW50IGFsb25lIC0gYSBidXR0b24gZG9lc24ndCBoYXZlIHRvIGJlIHByZXNzZWQgZmlyc3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciN2ZWxvY2l0eVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnZlbG9jaXR5ID0gbmV3IFZlY3RvcjIoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGN1cnJlbnQgYW5nbGUgdGhlIFBvaW50ZXIgaXMgbW92aW5nLCBpbiByYWRpYW5zLCBiYXNlZCBvbiBpdHMgcHJldmlvdXMgYW5kIGN1cnJlbnQgcG9zaXRpb24uXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVGhlIGFuZ2xlIGlzIGJhc2VkIG9uIHRoZSBvbGQgcG9zaXRpb24gZmFjaW5nIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgaXMgdXBkYXRlZCB3aGVuZXZlciB0aGUgUG9pbnRlciBtb3ZlcywgcmVnYXJkbGVzcyBvZiBhbnkgYnV0dG9uIHN0YXRlcy4gSW4gb3RoZXIgd29yZHMsXHJcbiAgICAgICAgICogaXQgY2hhbmdlcyBiYXNlZCBvbiBtb3ZlbWVudCBhbG9uZSAtIGEgYnV0dG9uIGRvZXNuJ3QgaGF2ZSB0byBiZSBwcmVzc2VkIGZpcnN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjYW5nbGVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFuZ2xlID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRpc3RhbmNlIHRoZSBQb2ludGVyIGhhcyBtb3ZlZCwgYmFzZWQgb24gaXRzIHByZXZpb3VzIGFuZCBjdXJyZW50IHBvc2l0aW9uLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoaXMgdmFsdWUgaXMgc21vb3RoZWQgb3V0IGVhY2ggZnJhbWUsIGFjY29yZGluZyB0byB0aGUgYG1vdGlvbkZhY3RvcmAgcHJvcGVydHkuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVGhpcyBwcm9wZXJ0eSBpcyB1cGRhdGVkIHdoZW5ldmVyIHRoZSBQb2ludGVyIG1vdmVzLCByZWdhcmRsZXNzIG9mIGFueSBidXR0b24gc3RhdGVzLiBJbiBvdGhlciB3b3JkcyxcclxuICAgICAgICAgKiBpdCBjaGFuZ2VzIGJhc2VkIG9uIG1vdmVtZW50IGFsb25lIC0gYSBidXR0b24gZG9lc24ndCBoYXZlIHRvIGJlIHByZXNzZWQgZmlyc3QuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogSWYgeW91IG5lZWQgdGhlIHRvdGFsIGRpc3RhbmNlIHRyYXZlbGxlZCBzaW5jZSB0aGUgcHJpbWFyeSBidXR0b25zIHdhcyBwcmVzc2VkIGRvd24sXHJcbiAgICAgICAgICogdGhlbiB1c2UgdGhlIGBQb2ludGVyLmdldERpc3RhbmNlYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciNkaXN0YW5jZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc21vb3RoaW5nIGZhY3RvciB0byBhcHBseSB0byB0aGUgUG9pbnRlciBwb3NpdGlvbi5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBEdWUgdG8gdGhlaXIgbmF0dXJlLCBwb2ludGVyIHBvc2l0aW9ucyBhcmUgaW5oZXJlbnRseSBub2lzeS4gV2hpbGUgdGhpcyBpcyBmaW5lIGZvciBsb3RzIG9mIGdhbWVzLCBpZiB5b3UgbmVlZCBjbGVhbmVyIHBvc2l0aW9uc1xyXG4gICAgICAgICAqIHRoZW4geW91IGNhbiBzZXQgdGhpcyB2YWx1ZSB0byBhcHBseSBhbiBhdXRvbWF0aWMgc21vb3RoaW5nIHRvIHRoZSBwb3NpdGlvbnMgYXMgdGhleSBhcmUgcmVjb3JkZWQuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgemVybyBtZWFucyAnbm8gc21vb3RoaW5nJy5cclxuICAgICAgICAgKiBTZXQgdG8gYSBzbWFsbCB2YWx1ZSwgc3VjaCBhcyAwLjIsIHRvIGFwcGx5IGFuIGF2ZXJhZ2UgbGV2ZWwgb2Ygc21vb3RoaW5nIGJldHdlZW4gcG9zaXRpb25zLiBZb3UgY2FuIGRvIHRoaXMgYnkgY2hhbmdpbmcgdGhpc1xyXG4gICAgICAgICAqIHZhbHVlIGRpcmVjdGx5LCBvciBieSBzZXR0aW5nIHRoZSBgaW5wdXQuc21vb3RoRmFjdG9yYCBwcm9wZXJ0eSBpbiB0aGUgR2FtZSBDb25maWcuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogUG9zaXRpb25zIGFyZSBvbmx5IHNtb290aGVkIHdoZW4gdGhlIHBvaW50ZXIgbW92ZXMuIElmIHRoZSBwcmltYXJ5IGJ1dHRvbiBvbiB0aGlzIFBvaW50ZXIgZW50ZXJzIGFuIFVwIG9yIERvd24gc3RhdGUsIHRoZW4gdGhlIHBvc2l0aW9uXHJcbiAgICAgICAgICogaXMgYWx3YXlzIHByZWNpc2UsIGFuZCBub3Qgc21vb3RoZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciNzbW9vdGhGYWN0b3JcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zbW9vdGhGYWN0b3IgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZmFjdG9yIGFwcGxpZWQgdG8gdGhlIG1vdGlvbiBzbW9vdGhpbmcgZWFjaCBmcmFtZS5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIHBhc3NlZCB0byB0aGUgU21vb3RoIFN0ZXAgSW50ZXJwb2xhdGlvbiB0aGF0IGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSB2ZWxvY2l0eSxcclxuICAgICAgICAgKiBhbmdsZSBhbmQgZGlzdGFuY2Ugb2YgdGhlIFBvaW50ZXIuIEl0J3MgYXBwbGllZCBldmVyeSBmcmFtZSwgdW50aWwgdGhlIG1pZFBvaW50IHJlYWNoZXMgdGhlIGN1cnJlbnRcclxuICAgICAgICAgKiBwb3NpdGlvbiBvZiB0aGUgUG9pbnRlci4gMC4yIHByb3ZpZGVzIGEgZ29vZCBhdmVyYWdlIGJ1dCBjYW4gYmUgaW5jcmVhc2VkIGlmIHlvdSBuZWVkIGFcclxuICAgICAgICAgKiBxdWlja2VyIHVwZGF0ZSBhbmQgYXJlIHdvcmtpbmcgaW4gYSBoaWdoIHBlcmZvcm1hbmNlIGVudmlyb25tZW50LiBOZXZlciBzZXQgdGhpcyB2YWx1ZSB0b1xyXG4gICAgICAgICAqIHplcm8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciNtb3Rpb25GYWN0b3JcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDAuMlxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1vdGlvbkZhY3RvciA9IDAuMjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHggcG9zaXRpb24gb2YgdGhpcyBQb2ludGVyLCB0cmFuc2xhdGVkIGludG8gdGhlIGNvb3JkaW5hdGUgc3BhY2Ugb2YgdGhlIG1vc3QgcmVjZW50IENhbWVyYSBpdCBpbnRlcmFjdGVkIHdpdGguXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogSWYgeW91IHdpc2ggdG8gdXNlIHRoaXMgdmFsdWUgX291dHNpZGVfIG9mIGFuIGlucHV0IGV2ZW50IGhhbmRsZXIgdGhlbiB5b3Ugc2hvdWxkIHVwZGF0ZSBpdCBmaXJzdCBieSBjYWxsaW5nXHJcbiAgICAgICAgICogdGhlIGBQb2ludGVyLnVwZGF0ZVdvcmxkUG9pbnRgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Qb2ludGVyI3dvcmxkWFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLndvcmxkWCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB5IHBvc2l0aW9uIG9mIHRoaXMgUG9pbnRlciwgdHJhbnNsYXRlZCBpbnRvIHRoZSBjb29yZGluYXRlIHNwYWNlIG9mIHRoZSBtb3N0IHJlY2VudCBDYW1lcmEgaXQgaW50ZXJhY3RlZCB3aXRoLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIElmIHlvdSB3aXNoIHRvIHVzZSB0aGlzIHZhbHVlIF9vdXRzaWRlXyBvZiBhbiBpbnB1dCBldmVudCBoYW5kbGVyIHRoZW4geW91IHNob3VsZCB1cGRhdGUgaXQgZmlyc3QgYnkgY2FsbGluZ1xyXG4gICAgICAgICAqIHRoZSBgUG9pbnRlci51cGRhdGVXb3JsZFBvaW50YCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciN3b3JsZFlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy53b3JsZFkgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaW1lIHdoZW4gdGhpcyBQb2ludGVyIHdhcyBtb3N0IHJlY2VudGx5IG1vdmVkIChyZWdhcmRsZXNzIG9mIHRoZSBzdGF0ZSBvZiBpdHMgYnV0dG9ucywgaWYgYW55KVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjbW92ZVRpbWVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1vdmVUaW1lID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogWCBjb29yZGluYXRlIG9mIHRoZSBQb2ludGVyIHdoZW4gQnV0dG9uIDEgKGxlZnQgYnV0dG9uKSwgb3IgVG91Y2gsIHdhcyBwcmVzc2VkLCB1c2VkIGZvciBkcmFnZ2luZyBvYmplY3RzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjZG93blhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRvd25YID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogWSBjb29yZGluYXRlIG9mIHRoZSBQb2ludGVyIHdoZW4gQnV0dG9uIDEgKGxlZnQgYnV0dG9uKSwgb3IgVG91Y2gsIHdhcyBwcmVzc2VkLCB1c2VkIGZvciBkcmFnZ2luZyBvYmplY3RzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjZG93bllcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRvd25ZID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGltZSB3aGVuIEJ1dHRvbiAxIChsZWZ0IGJ1dHRvbiksIG9yIFRvdWNoLCB3YXMgcHJlc3NlZCwgdXNlZCBmb3IgZHJhZ2dpbmcgb2JqZWN0cy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Qb2ludGVyI2Rvd25UaW1lXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kb3duVGltZSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFggY29vcmRpbmF0ZSBvZiB0aGUgUG9pbnRlciB3aGVuIEJ1dHRvbiAxIChsZWZ0IGJ1dHRvbiksIG9yIFRvdWNoLCB3YXMgcmVsZWFzZWQsIHVzZWQgZm9yIGRyYWdnaW5nIG9iamVjdHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciN1cFhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnVwWCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFkgY29vcmRpbmF0ZSBvZiB0aGUgUG9pbnRlciB3aGVuIEJ1dHRvbiAxIChsZWZ0IGJ1dHRvbiksIG9yIFRvdWNoLCB3YXMgcmVsZWFzZWQsIHVzZWQgZm9yIGRyYWdnaW5nIG9iamVjdHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciN1cFlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnVwWSA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRpbWUgd2hlbiBCdXR0b24gMSAobGVmdCBidXR0b24pLCBvciBUb3VjaCwgd2FzIHJlbGVhc2VkLCB1c2VkIGZvciBkcmFnZ2luZyBvYmplY3RzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjdXBUaW1lXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy51cFRpbWUgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJcyB0aGUgcHJpbWFyeSBidXR0b24gZG93bj8gKHVzdWFsbHkgYnV0dG9uIDAsIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbilcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Qb2ludGVyI3ByaW1hcnlEb3duXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnByaW1hcnlEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElzIF9hbnlfIGJ1dHRvbiBvbiB0aGlzIHBvaW50ZXIgY29uc2lkZXJlZCBhcyBiZWluZyBkb3duP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjaXNEb3duXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEaWQgdGhlIHByZXZpb3VzIGlucHV0IGV2ZW50IGNvbWUgZnJvbSBhIFRvdWNoIGlucHV0ICh0cnVlKSBvciBNb3VzZT8gKGZhbHNlKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjd2FzVG91Y2hcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMud2FzVG91Y2ggPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRGlkIHRoaXMgUG9pbnRlciBnZXQgY2FuY2VsZWQgYnkgYSB0b3VjaGNhbmNlbCBldmVudD9cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBOb3RlOiBcImNhbmNlbGVkXCIgaXMgdGhlIEFtZXJpY2FuLUVuZ2xpc2ggc3BlbGxpbmcgb2YgXCJjYW5jZWxsZWRcIi4gUGxlYXNlIGRvbid0IHN1Ym1pdCBQUnMgY29ycmVjdGluZyBpdCFcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Qb2ludGVyI3dhc0NhbmNlbGVkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4xNS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy53YXNDYW5jZWxlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiB0aGUgbW91c2UgaXMgbG9ja2VkLCB0aGUgaG9yaXpvbnRhbCByZWxhdGl2ZSBtb3ZlbWVudCBvZiB0aGUgUG9pbnRlciBpbiBwaXhlbHMgc2luY2UgbGFzdCBmcmFtZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Qb2ludGVyI21vdmVtZW50WFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubW92ZW1lbnRYID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgdGhlIG1vdXNlIGlzIGxvY2tlZCwgdGhlIHZlcnRpY2FsIHJlbGF0aXZlIG1vdmVtZW50IG9mIHRoZSBQb2ludGVyIGluIHBpeGVscyBzaW5jZSBsYXN0IGZyYW1lLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjbW92ZW1lbnRZXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tb3ZlbWVudFkgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaWRlbnRpZmllciBwcm9wZXJ0eSBvZiB0aGUgUG9pbnRlciBhcyBzZXQgYnkgdGhlIERPTSBldmVudCB3aGVuIHRoaXMgUG9pbnRlciBpcyBzdGFydGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjaWRlbnRpZmllclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaWRlbnRpZmllciA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBwb2ludGVySWQgcHJvcGVydHkgb2YgdGhlIFBvaW50ZXIgYXMgc2V0IGJ5IHRoZSBET00gZXZlbnQgd2hlbiB0aGlzIFBvaW50ZXIgaXMgc3RhcnRlZC5cclxuICAgICAgICAgKiBUaGUgYnJvd3NlciBjYW4gYW5kIHdpbGwgcmVjeWNsZSB0aGlzIHZhbHVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjcG9pbnRlcklkXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wb2ludGVySWQgPSBudWxsO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhY3RpdmUgUG9pbnRlciBpcyBvbmUgdGhhdCBpcyBjdXJyZW50bHkgcHJlc3NlZCBkb3duIG9uIHRoZSBkaXNwbGF5LlxyXG4gICAgICAgICAqIEEgTW91c2UgaXMgYWx3YXlzIGNvbnNpZGVyZWQgYXMgYWN0aXZlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlBvaW50ZXIjYWN0aXZlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gKGlkID09PSAwKSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXMgdGhpcyBwb2ludGVyIFBvaW50ZXIgTG9ja2VkP1xyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIE9ubHkgYSBtb3VzZSBwb2ludGVyIGNhbiBiZSBsb2NrZWQgYW5kIGl0IG9ubHkgYmVjb21lcyBsb2NrZWQgd2hlbiByZXF1ZXN0ZWQgdmlhXHJcbiAgICAgICAgICogdGhlIGJyb3dzZXJzIFBvaW50ZXIgTG9jayBBUEkuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogWW91IGNhbiByZXF1ZXN0IHRoaXMgYnkgY2FsbGluZyB0aGUgYHRoaXMuaW5wdXQubW91c2UucmVxdWVzdFBvaW50ZXJMb2NrKClgIG1ldGhvZCBmcm9tXHJcbiAgICAgICAgICogYSBgcG9pbnRlcmRvd25gIG9yIGBwb2ludGVydXBgIGV2ZW50IGhhbmRsZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciNsb2NrZWRcclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sb2NrZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGhvcml6b250YWwgc2Nyb2xsIGFtb3VudCB0aGF0IG9jY3VycmVkIGR1ZSB0byB0aGUgdXNlciBtb3ZpbmcgYSBtb3VzZSB3aGVlbCBvciBzaW1pbGFyIGlucHV0IGRldmljZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Qb2ludGVyI2RlbHRhWFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlbHRhWCA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB2ZXJ0aWNhbCBzY3JvbGwgYW1vdW50IHRoYXQgb2NjdXJyZWQgZHVlIHRvIHRoZSB1c2VyIG1vdmluZyBhIG1vdXNlIHdoZWVsIG9yIHNpbWlsYXIgaW5wdXQgZGV2aWNlLlxyXG4gICAgICAgICAqIFRoaXMgdmFsdWUgd2lsbCB0eXBpY2FsbHkgYmUgbGVzcyB0aGFuIDAgaWYgdGhlIHVzZXIgc2Nyb2xscyB1cCBhbmQgZ3JlYXRlciB0aGFuIHplcm8gaWYgc2Nyb2xsaW5nIGRvd24uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciNkZWx0YVlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWx0YVkgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgei1heGlzIHNjcm9sbCBhbW91bnQgdGhhdCBvY2N1cnJlZCBkdWUgdG8gdGhlIHVzZXIgbW92aW5nIGEgbW91c2Ugd2hlZWwgb3Igc2ltaWxhciBpbnB1dCBkZXZpY2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciNkZWx0YVpcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5kZWx0YVogPSAwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRha2VzIGEgQ2FtZXJhIGFuZCB1cGRhdGVzIHRoaXMgUG9pbnRlcidzIGB3b3JsZFhgIGFuZCBgd29ybGRZYCB2YWx1ZXMgc28gdGhleSBhcmVcclxuICAgICAqIHRoZSByZXN1bHQgb2YgYSB0cmFuc2xhdGlvbiB0aHJvdWdoIHRoZSBnaXZlbiBDYW1lcmEuXHJcbiAgICAgKiBcclxuICAgICAqIE5vdGUgdGhhdCB0aGUgdmFsdWVzIHdpbGwgYmUgYXV0b21hdGljYWxseSByZXBsYWNlZCB0aGUgbW9tZW50IHRoZSBQb2ludGVyIGlzXHJcbiAgICAgKiB1cGRhdGVkIGJ5IGFuIGlucHV0IGV2ZW50LCBzdWNoIGFzIGEgbW91c2UgbW92ZSwgc28gc2hvdWxkIGJlIHVzZWQgaW1tZWRpYXRlbHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuUG9pbnRlciN1cGRhdGVXb3JsZFBvaW50XHJcbiAgICAgKiBAc2luY2UgMy4xOS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuQ2FtZXJhcy5TY2VuZTJELkNhbWVyYX0gY2FtZXJhIC0gVGhlIENhbWVyYSB3aGljaCBpcyBiZWluZyB0ZXN0ZWQgYWdhaW5zdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSBUaGlzIFBvaW50ZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVXb3JsZFBvaW50OiBmdW5jdGlvbiAoY2FtZXJhKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB4ID0gdGhpcy54O1xyXG4gICAgICAgIHZhciB5ID0gdGhpcy55O1xyXG5cclxuICAgICAgICBpZiAoY2FtZXJhLnJlc29sdXRpb24gIT09IDEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB4ICs9IGNhbWVyYS5feDtcclxuICAgICAgICAgICAgeSArPSBjYW1lcmEuX3k7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgU3RvcmVzIHRoZSB3b3JsZCBwb2ludCBpbnNpZGUgb2YgdGVtcFBvaW50XHJcbiAgICAgICAgdmFyIHRlbXAgPSBjYW1lcmEuZ2V0V29ybGRQb2ludCh4LCB5KTtcclxuXHJcbiAgICAgICAgdGhpcy53b3JsZFggPSB0ZW1wLng7XHJcbiAgICAgICAgdGhpcy53b3JsZFkgPSB0ZW1wLnk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRha2VzIGEgQ2FtZXJhIGFuZCByZXR1cm5zIGEgVmVjdG9yMiBjb250YWluaW5nIHRoZSB0cmFuc2xhdGVkIHBvc2l0aW9uIG9mIHRoaXMgUG9pbnRlclxyXG4gICAgICogd2l0aGluIHRoYXQgQ2FtZXJhLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgdGhpcyBQb2ludGVycyBwb3NpdGlvbiBpbnRvIGNhbWVyYSBzcGFjZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Qb2ludGVyI3Bvc2l0aW9uVG9DYW1lcmFcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkNhbWVyYXMuU2NlbmUyRC5DYW1lcmF9IGNhbWVyYSAtIFRoZSBDYW1lcmEgdG8gdXNlIGZvciB0aGUgdHJhbnNsYXRpb24uXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuTWF0aC5WZWN0b3IyfG9iamVjdCl9IFtvdXRwdXRdIC0gQSBWZWN0b3IyLWxpa2Ugb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSB0cmFuc2xhdGVkIHBvc2l0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4geyhQaGFzZXIuTWF0aC5WZWN0b3IyfG9iamVjdCl9IEEgVmVjdG9yMiBjb250YWluaW5nIHRoZSB0cmFuc2xhdGVkIGNvb3JkaW5hdGVzIG9mIHRoaXMgUG9pbnRlciwgYmFzZWQgb24gdGhlIGdpdmVuIGNhbWVyYS5cclxuICAgICAqL1xyXG4gICAgcG9zaXRpb25Ub0NhbWVyYTogZnVuY3Rpb24gKGNhbWVyYSwgb3V0cHV0KVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBjYW1lcmEuZ2V0V29ybGRQb2ludCh0aGlzLngsIHRoaXMueSwgb3V0cHV0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBtb3Rpb24gb2YgdGhpcyBQb2ludGVyLCBpbmNsdWRpbmcgaXRzIHZlbG9jaXR5IGFuZCBhbmdsZSBvZiBtb3ZlbWVudC5cclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGVhY2ggZnJhbWUgYnkgdGhlIElucHV0IE1hbmFnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuUG9pbnRlciN1cGRhdGVNb3Rpb25cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZU1vdGlvbjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgY3ggPSB0aGlzLnBvc2l0aW9uLng7XHJcbiAgICAgICAgdmFyIGN5ID0gdGhpcy5wb3NpdGlvbi55O1xyXG5cclxuICAgICAgICB2YXIgbXggPSB0aGlzLm1pZFBvaW50Lng7XHJcbiAgICAgICAgdmFyIG15ID0gdGhpcy5taWRQb2ludC55O1xyXG5cclxuICAgICAgICBpZiAoY3ggPT09IG14ICYmIGN5ID09PSBteSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBOb3RoaW5nIHRvIGRvIGhlcmVcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIE1vdmluZyB0b3dhcmRzIG91ciBnb2FsIC4uLlxyXG4gICAgICAgIHZhciB2eCA9IFNtb290aFN0ZXBJbnRlcnBvbGF0aW9uKHRoaXMubW90aW9uRmFjdG9yLCBteCwgY3gpO1xyXG4gICAgICAgIHZhciB2eSA9IFNtb290aFN0ZXBJbnRlcnBvbGF0aW9uKHRoaXMubW90aW9uRmFjdG9yLCBteSwgY3kpO1xyXG5cclxuICAgICAgICBpZiAoRnV6enlFcXVhbCh2eCwgY3gsIDAuMSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2eCA9IGN4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEZ1enp5RXF1YWwodnksIGN5LCAwLjEpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdnkgPSBjeTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWlkUG9pbnQuc2V0KHZ4LCB2eSk7XHJcblxyXG4gICAgICAgIHZhciBkeCA9IGN4IC0gdng7XHJcbiAgICAgICAgdmFyIGR5ID0gY3kgLSB2eTtcclxuXHJcbiAgICAgICAgdGhpcy52ZWxvY2l0eS5zZXQoZHgsIGR5KTtcclxuXHJcbiAgICAgICAgdGhpcy5hbmdsZSA9IEFuZ2xlKHZ4LCB2eSwgY3gsIGN5KTtcclxuXHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRvIGhhbmRsZSBhIE1vdXNlIFVwIEV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LlBvaW50ZXIjdXBcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50IC0gVGhlIE1vdXNlIEV2ZW50IHRvIHByb2Nlc3MuXHJcbiAgICAgKi9cclxuICAgIHVwOiBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCdidXR0b25zJyBpbiBldmVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuYnV0dG9ucyA9IGV2ZW50LmJ1dHRvbnM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9uID0gZXZlbnQuYnV0dG9uO1xyXG5cclxuICAgICAgICB0aGlzLnVwRWxlbWVudCA9IGV2ZW50LnRhcmdldDtcclxuXHJcbiAgICAgICAgLy8gIFNldHMgdGhlIGxvY2FsIHgveSBwcm9wZXJ0aWVzXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLnRyYW5zZm9ybVBvaW50ZXIodGhpcywgZXZlbnQucGFnZVgsIGV2ZW50LnBhZ2VZLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIC8vICAwOiBNYWluIGJ1dHRvbiBwcmVzc2VkLCB1c3VhbGx5IHRoZSBsZWZ0IGJ1dHRvbiBvciB0aGUgdW4taW5pdGlhbGl6ZWQgc3RhdGVcclxuICAgICAgICBpZiAoZXZlbnQuYnV0dG9uID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wcmltYXJ5RG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnVwWCA9IHRoaXMueDtcclxuICAgICAgICAgICAgdGhpcy51cFkgPSB0aGlzLnk7XHJcbiAgICAgICAgICAgIHRoaXMudXBUaW1lID0gZXZlbnQudGltZVN0YW1wO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy53YXNUb3VjaCA9IGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIG1ldGhvZCB0byBoYW5kbGUgYSBNb3VzZSBEb3duIEV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LlBvaW50ZXIjZG93blxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQgLSBUaGUgTW91c2UgRXZlbnQgdG8gcHJvY2Vzcy5cclxuICAgICAqL1xyXG4gICAgZG93bjogZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAge1xyXG4gICAgICAgIGlmICgnYnV0dG9ucycgaW4gZXZlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmJ1dHRvbnMgPSBldmVudC5idXR0b25zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ldmVudCA9IGV2ZW50O1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbiA9IGV2ZW50LmJ1dHRvbjtcclxuXHJcbiAgICAgICAgdGhpcy5kb3duRWxlbWVudCA9IGV2ZW50LnRhcmdldDtcclxuXHJcbiAgICAgICAgLy8gIFNldHMgdGhlIGxvY2FsIHgveSBwcm9wZXJ0aWVzXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLnRyYW5zZm9ybVBvaW50ZXIodGhpcywgZXZlbnQucGFnZVgsIGV2ZW50LnBhZ2VZLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIC8vICAwOiBNYWluIGJ1dHRvbiBwcmVzc2VkLCB1c3VhbGx5IHRoZSBsZWZ0IGJ1dHRvbiBvciB0aGUgdW4taW5pdGlhbGl6ZWQgc3RhdGVcclxuICAgICAgICBpZiAoZXZlbnQuYnV0dG9uID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wcmltYXJ5RG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZG93blggPSB0aGlzLng7XHJcbiAgICAgICAgICAgIHRoaXMuZG93blkgPSB0aGlzLnk7XHJcbiAgICAgICAgICAgIHRoaXMuZG93blRpbWUgPSBldmVudC50aW1lU3RhbXA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMud2FzVG91Y2ggPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdG8gaGFuZGxlIGEgTW91c2UgTW92ZSBFdmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Qb2ludGVyI21vdmVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50IC0gVGhlIE1vdXNlIEV2ZW50IHRvIHByb2Nlc3MuXHJcbiAgICAgKi9cclxuICAgIG1vdmU6IGZ1bmN0aW9uIChldmVudClcclxuICAgIHtcclxuICAgICAgICBpZiAoJ2J1dHRvbnMnIGluIGV2ZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5idXR0b25zID0gZXZlbnQuYnV0dG9ucztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnQgPSBldmVudDtcclxuXHJcbiAgICAgICAgLy8gIFNldHMgdGhlIGxvY2FsIHgveSBwcm9wZXJ0aWVzXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLnRyYW5zZm9ybVBvaW50ZXIodGhpcywgZXZlbnQucGFnZVgsIGV2ZW50LnBhZ2VZLCB0cnVlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubG9ja2VkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIE11bHRpcGxlIERPTSBldmVudHMgbWF5IG9jY3VyIHdpdGhpbiBvbmUgZnJhbWUsIGJ1dCBvbmx5IG9uZSBQaGFzZXIgZXZlbnQgd2lsbCBmaXJlXHJcbiAgICAgICAgICAgIHRoaXMubW92ZW1lbnRYID0gZXZlbnQubW92ZW1lbnRYIHx8IGV2ZW50Lm1vek1vdmVtZW50WCB8fCBldmVudC53ZWJraXRNb3ZlbWVudFggfHwgMDtcclxuICAgICAgICAgICAgdGhpcy5tb3ZlbWVudFkgPSBldmVudC5tb3ZlbWVudFkgfHwgZXZlbnQubW96TW92ZW1lbnRZIHx8IGV2ZW50LndlYmtpdE1vdmVtZW50WSB8fCAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5tb3ZlVGltZSA9IGV2ZW50LnRpbWVTdGFtcDtcclxuXHJcbiAgICAgICAgdGhpcy53YXNUb3VjaCA9IGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIG1ldGhvZCB0byBoYW5kbGUgYSBNb3VzZSBXaGVlbCBFdmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Qb2ludGVyI3doZWVsXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7V2hlZWxFdmVudH0gZXZlbnQgLSBUaGUgV2hlZWwgRXZlbnQgdG8gcHJvY2Vzcy5cclxuICAgICAqL1xyXG4gICAgd2hlZWw6IGZ1bmN0aW9uIChldmVudClcclxuICAgIHtcclxuICAgICAgICBpZiAoJ2J1dHRvbnMnIGluIGV2ZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5idXR0b25zID0gZXZlbnQuYnV0dG9ucztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnQgPSBldmVudDtcclxuXHJcbiAgICAgICAgLy8gIFNldHMgdGhlIGxvY2FsIHgveSBwcm9wZXJ0aWVzXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLnRyYW5zZm9ybVBvaW50ZXIodGhpcywgZXZlbnQucGFnZVgsIGV2ZW50LnBhZ2VZLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHRoaXMuZGVsdGFYID0gZXZlbnQuZGVsdGFYO1xyXG4gICAgICAgIHRoaXMuZGVsdGFZID0gZXZlbnQuZGVsdGFZO1xyXG4gICAgICAgIHRoaXMuZGVsdGFaID0gZXZlbnQuZGVsdGFaO1xyXG5cclxuICAgICAgICB0aGlzLndhc1RvdWNoID0gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRvIGhhbmRsZSBhIFRvdWNoIFN0YXJ0IEV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LlBvaW50ZXIjdG91Y2hzdGFydFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7VG91Y2h9IHRvdWNoIC0gVGhlIENoYW5nZWQgVG91Y2ggZnJvbSB0aGUgVG91Y2ggRXZlbnQuXHJcbiAgICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGV2ZW50IC0gVGhlIGZ1bGwgVG91Y2ggRXZlbnQuXHJcbiAgICAgKi9cclxuICAgIHRvdWNoc3RhcnQ6IGZ1bmN0aW9uICh0b3VjaCwgZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRvdWNoWydwb2ludGVySWQnXSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRlcklkID0gdG91Y2gucG9pbnRlcklkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pZGVudGlmaWVyID0gdG91Y2guaWRlbnRpZmllcjtcclxuICAgICAgICB0aGlzLnRhcmdldCA9IHRvdWNoLnRhcmdldDtcclxuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9ucyA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnQgPSBldmVudDtcclxuXHJcbiAgICAgICAgdGhpcy5kb3duRWxlbWVudCA9IHRvdWNoLnRhcmdldDtcclxuXHJcbiAgICAgICAgLy8gIFNldHMgdGhlIGxvY2FsIHgveSBwcm9wZXJ0aWVzXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLnRyYW5zZm9ybVBvaW50ZXIodGhpcywgdG91Y2gucGFnZVgsIHRvdWNoLnBhZ2VZLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHRoaXMucHJpbWFyeURvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZG93blggPSB0aGlzLng7XHJcbiAgICAgICAgdGhpcy5kb3duWSA9IHRoaXMueTtcclxuICAgICAgICB0aGlzLmRvd25UaW1lID0gZXZlbnQudGltZVN0YW1wO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMud2FzVG91Y2ggPSB0cnVlO1xyXG4gICAgICAgIHRoaXMud2FzQ2FuY2VsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVNb3Rpb24oKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdG8gaGFuZGxlIGEgVG91Y2ggTW92ZSBFdmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Qb2ludGVyI3RvdWNobW92ZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7VG91Y2h9IHRvdWNoIC0gVGhlIENoYW5nZWQgVG91Y2ggZnJvbSB0aGUgVG91Y2ggRXZlbnQuXHJcbiAgICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGV2ZW50IC0gVGhlIGZ1bGwgVG91Y2ggRXZlbnQuXHJcbiAgICAgKi9cclxuICAgIHRvdWNobW92ZTogZnVuY3Rpb24gKHRvdWNoLCBldmVudClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7XHJcblxyXG4gICAgICAgIC8vICBTZXRzIHRoZSBsb2NhbCB4L3kgcHJvcGVydGllc1xyXG4gICAgICAgIHRoaXMubWFuYWdlci50cmFuc2Zvcm1Qb2ludGVyKHRoaXMsIHRvdWNoLnBhZ2VYLCB0b3VjaC5wYWdlWSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIHRoaXMubW92ZVRpbWUgPSBldmVudC50aW1lU3RhbXA7XHJcblxyXG4gICAgICAgIHRoaXMud2FzVG91Y2ggPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZU1vdGlvbigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIG1ldGhvZCB0byBoYW5kbGUgYSBUb3VjaCBFbmQgRXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuUG9pbnRlciN0b3VjaGVuZFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7VG91Y2h9IHRvdWNoIC0gVGhlIENoYW5nZWQgVG91Y2ggZnJvbSB0aGUgVG91Y2ggRXZlbnQuXHJcbiAgICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGV2ZW50IC0gVGhlIGZ1bGwgVG91Y2ggRXZlbnQuXHJcbiAgICAgKi9cclxuICAgIHRvdWNoZW5kOiBmdW5jdGlvbiAodG91Y2gsIGV2ZW50KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYnV0dG9ucyA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnQgPSBldmVudDtcclxuXHJcbiAgICAgICAgdGhpcy51cEVsZW1lbnQgPSB0b3VjaC50YXJnZXQ7XHJcblxyXG4gICAgICAgIC8vICBTZXRzIHRoZSBsb2NhbCB4L3kgcHJvcGVydGllc1xyXG4gICAgICAgIHRoaXMubWFuYWdlci50cmFuc2Zvcm1Qb2ludGVyKHRoaXMsIHRvdWNoLnBhZ2VYLCB0b3VjaC5wYWdlWSwgZmFsc2UpO1xyXG5cclxuICAgICAgICB0aGlzLnByaW1hcnlEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy51cFggPSB0aGlzLng7XHJcbiAgICAgICAgdGhpcy51cFkgPSB0aGlzLnk7XHJcbiAgICAgICAgdGhpcy51cFRpbWUgPSBldmVudC50aW1lU3RhbXA7XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMud2FzVG91Y2ggPSB0cnVlO1xyXG4gICAgICAgIHRoaXMud2FzQ2FuY2VsZWQgPSBmYWxzZTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZU1vdGlvbigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIG1ldGhvZCB0byBoYW5kbGUgYSBUb3VjaCBDYW5jZWwgRXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuUG9pbnRlciN0b3VjaGNhbmNlbFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjE1LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1RvdWNofSB0b3VjaCAtIFRoZSBDaGFuZ2VkIFRvdWNoIGZyb20gdGhlIFRvdWNoIEV2ZW50LlxyXG4gICAgICogQHBhcmFtIHtUb3VjaEV2ZW50fSBldmVudCAtIFRoZSBmdWxsIFRvdWNoIEV2ZW50LlxyXG4gICAgICovXHJcbiAgICB0b3VjaGNhbmNlbDogZnVuY3Rpb24gKHRvdWNoLCBldmVudClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmJ1dHRvbnMgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7XHJcblxyXG4gICAgICAgIHRoaXMudXBFbGVtZW50ID0gdG91Y2gudGFyZ2V0O1xyXG5cclxuICAgICAgICAvLyAgU2V0cyB0aGUgbG9jYWwgeC95IHByb3BlcnRpZXNcclxuICAgICAgICB0aGlzLm1hbmFnZXIudHJhbnNmb3JtUG9pbnRlcih0aGlzLCB0b3VjaC5wYWdlWCwgdG91Y2gucGFnZVksIGZhbHNlKTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmltYXJ5RG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudXBYID0gdGhpcy54O1xyXG4gICAgICAgIHRoaXMudXBZID0gdGhpcy55O1xyXG4gICAgICAgIHRoaXMudXBUaW1lID0gZXZlbnQudGltZVN0YW1wO1xyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLndhc1RvdWNoID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLndhc0NhbmNlbGVkID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB0byBzZWUgaWYgYW55IGJ1dHRvbnMgYXJlIGJlaW5nIGhlbGQgZG93biBvbiB0aGlzIFBvaW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuUG9pbnRlciNub0J1dHRvbkRvd25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiBubyBidXR0b25zIGFyZSBiZWluZyBoZWxkIGRvd24uXHJcbiAgICAgKi9cclxuICAgIG5vQnV0dG9uRG93bjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuYnV0dG9ucyA9PT0gMCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgbGVmdCBidXR0b24gaXMgYmVpbmcgaGVsZCBkb3duIG9uIHRoaXMgUG9pbnRlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Qb2ludGVyI2xlZnRCdXR0b25Eb3duXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGxlZnQgYnV0dG9uIGlzIGJlaW5nIGhlbGQgZG93bi5cclxuICAgICAqL1xyXG4gICAgbGVmdEJ1dHRvbkRvd246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmJ1dHRvbnMgJiAxKSA/IHRydWUgOiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgdG8gc2VlIGlmIHRoZSByaWdodCBidXR0b24gaXMgYmVpbmcgaGVsZCBkb3duIG9uIHRoaXMgUG9pbnRlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Qb2ludGVyI3JpZ2h0QnV0dG9uRG93blxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSByaWdodCBidXR0b24gaXMgYmVpbmcgaGVsZCBkb3duLlxyXG4gICAgICovXHJcbiAgICByaWdodEJ1dHRvbkRvd246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmJ1dHRvbnMgJiAyKSA/IHRydWUgOiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBtaWRkbGUgYnV0dG9uIGlzIGJlaW5nIGhlbGQgZG93biBvbiB0aGlzIFBvaW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuUG9pbnRlciNtaWRkbGVCdXR0b25Eb3duXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIG1pZGRsZSBidXR0b24gaXMgYmVpbmcgaGVsZCBkb3duLlxyXG4gICAgICovXHJcbiAgICBtaWRkbGVCdXR0b25Eb3duOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5idXR0b25zICYgNCkgPyB0cnVlIDogZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgYmFjayBidXR0b24gaXMgYmVpbmcgaGVsZCBkb3duIG9uIHRoaXMgUG9pbnRlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Qb2ludGVyI2JhY2tCdXR0b25Eb3duXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGJhY2sgYnV0dG9uIGlzIGJlaW5nIGhlbGQgZG93bi5cclxuICAgICAqL1xyXG4gICAgYmFja0J1dHRvbkRvd246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmJ1dHRvbnMgJiA4KSA/IHRydWUgOiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBmb3J3YXJkIGJ1dHRvbiBpcyBiZWluZyBoZWxkIGRvd24gb24gdGhpcyBQb2ludGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LlBvaW50ZXIjZm9yd2FyZEJ1dHRvbkRvd25cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZm9yd2FyZCBidXR0b24gaXMgYmVpbmcgaGVsZCBkb3duLlxyXG4gICAgICovXHJcbiAgICBmb3J3YXJkQnV0dG9uRG93bjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuYnV0dG9ucyAmIDE2KSA/IHRydWUgOiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBsZWZ0IGJ1dHRvbiB3YXMganVzdCByZWxlYXNlZCBvbiB0aGlzIFBvaW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuUG9pbnRlciNsZWZ0QnV0dG9uUmVsZWFzZWRcclxuICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGxlZnQgYnV0dG9uIHdhcyBqdXN0IHJlbGVhc2VkLlxyXG4gICAgICovXHJcbiAgICBsZWZ0QnV0dG9uUmVsZWFzZWQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmJ1dHRvbiA9PT0gMCAmJiAhdGhpcy5pc0Rvd24pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB0byBzZWUgaWYgdGhlIHJpZ2h0IGJ1dHRvbiB3YXMganVzdCByZWxlYXNlZCBvbiB0aGlzIFBvaW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuUG9pbnRlciNyaWdodEJ1dHRvblJlbGVhc2VkXHJcbiAgICAgKiBAc2luY2UgMy4xOC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSByaWdodCBidXR0b24gd2FzIGp1c3QgcmVsZWFzZWQuXHJcbiAgICAgKi9cclxuICAgIHJpZ2h0QnV0dG9uUmVsZWFzZWQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmJ1dHRvbiA9PT0gMiAmJiAhdGhpcy5pc0Rvd24pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB0byBzZWUgaWYgdGhlIG1pZGRsZSBidXR0b24gd2FzIGp1c3QgcmVsZWFzZWQgb24gdGhpcyBQb2ludGVyLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LlBvaW50ZXIjbWlkZGxlQnV0dG9uUmVsZWFzZWRcclxuICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIG1pZGRsZSBidXR0b24gd2FzIGp1c3QgcmVsZWFzZWQuXHJcbiAgICAgKi9cclxuICAgIG1pZGRsZUJ1dHRvblJlbGVhc2VkOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5idXR0b24gPT09IDEgJiYgIXRoaXMuaXNEb3duKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBiYWNrIGJ1dHRvbiB3YXMganVzdCByZWxlYXNlZCBvbiB0aGlzIFBvaW50ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuUG9pbnRlciNiYWNrQnV0dG9uUmVsZWFzZWRcclxuICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGJhY2sgYnV0dG9uIHdhcyBqdXN0IHJlbGVhc2VkLlxyXG4gICAgICovXHJcbiAgICBiYWNrQnV0dG9uUmVsZWFzZWQ6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmJ1dHRvbiA9PT0gMyAmJiAhdGhpcy5pc0Rvd24pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB0byBzZWUgaWYgdGhlIGZvcndhcmQgYnV0dG9uIHdhcyBqdXN0IHJlbGVhc2VkIG9uIHRoaXMgUG9pbnRlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Qb2ludGVyI2ZvcndhcmRCdXR0b25SZWxlYXNlZFxyXG4gICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZm9yd2FyZCBidXR0b24gd2FzIGp1c3QgcmVsZWFzZWQuXHJcbiAgICAgKi9cclxuICAgIGZvcndhcmRCdXR0b25SZWxlYXNlZDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuYnV0dG9uID09PSA0ICYmICF0aGlzLmlzRG93bik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgdGhlIFBvaW50ZXIgaGFzIGEgYnV0dG9uIHByZXNzZWQgZG93biBhdCB0aGUgdGltZSB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIGl0IHdpbGwgcmV0dXJuIHRoZVxyXG4gICAgICogZGlzdGFuY2UgYmV0d2VlbiB0aGUgUG9pbnRlcidzIGBkb3duWGAgYW5kIGBkb3duWWAgdmFsdWVzIGFuZCB0aGUgY3VycmVudCBwb3NpdGlvbi5cclxuICAgICAqIFxyXG4gICAgICogSWYgbm8gYnV0dG9uIGlzIGhlbGQgZG93biwgaXQgd2lsbCByZXR1cm4gdGhlIGxhc3QgcmVjb3JkZWQgZGlzdGFuY2UsIGJhc2VkIG9uIHdoZXJlXHJcbiAgICAgKiB0aGUgUG9pbnRlciB3YXMgd2hlbiB0aGUgYnV0dG9uIHdhcyByZWxlYXNlZC5cclxuICAgICAqIFxyXG4gICAgICogSWYgeW91IHdpc2ggdG8gZ2V0IHRoZSBkaXN0YW5jZSBiZWluZyB0cmF2ZWxsZWQgY3VycmVudGx5LCBiYXNlZCBvbiB0aGUgdmVsb2NpdHkgb2YgdGhlIFBvaW50ZXIsXHJcbiAgICAgKiB0aGVuIHNlZSB0aGUgYFBvaW50ZXIuZGlzdGFuY2VgIHByb3BlcnR5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LlBvaW50ZXIjZ2V0RGlzdGFuY2VcclxuICAgICAqIEBzaW5jZSAzLjEzLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBkaXN0YW5jZSB0aGUgUG9pbnRlciBtb3ZlZC5cclxuICAgICAqL1xyXG4gICAgZ2V0RGlzdGFuY2U6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIERpc3RhbmNlKHRoaXMuZG93blgsIHRoaXMuZG93blksIHRoaXMueCwgdGhpcy55KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIERpc3RhbmNlKHRoaXMuZG93blgsIHRoaXMuZG93blksIHRoaXMudXBYLCB0aGlzLnVwWSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHRoZSBQb2ludGVyIGhhcyBhIGJ1dHRvbiBwcmVzc2VkIGRvd24gYXQgdGhlIHRpbWUgdGhpcyBtZXRob2QgaXMgY2FsbGVkLCBpdCB3aWxsIHJldHVybiB0aGVcclxuICAgICAqIGhvcml6b250YWwgZGlzdGFuY2UgYmV0d2VlbiB0aGUgUG9pbnRlcidzIGBkb3duWGAgYW5kIGBkb3duWWAgdmFsdWVzIGFuZCB0aGUgY3VycmVudCBwb3NpdGlvbi5cclxuICAgICAqIFxyXG4gICAgICogSWYgbm8gYnV0dG9uIGlzIGhlbGQgZG93biwgaXQgd2lsbCByZXR1cm4gdGhlIGxhc3QgcmVjb3JkZWQgaG9yaXpvbnRhbCBkaXN0YW5jZSwgYmFzZWQgb24gd2hlcmVcclxuICAgICAqIHRoZSBQb2ludGVyIHdhcyB3aGVuIHRoZSBidXR0b24gd2FzIHJlbGVhc2VkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LlBvaW50ZXIjZ2V0RGlzdGFuY2VYXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgaG9yaXpvbnRhbCBkaXN0YW5jZSB0aGUgUG9pbnRlciBtb3ZlZC5cclxuICAgICAqL1xyXG4gICAgZ2V0RGlzdGFuY2VYOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLmRvd25YIC0gdGhpcy54KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuZG93blggLSB0aGlzLnVwWCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHRoZSBQb2ludGVyIGhhcyBhIGJ1dHRvbiBwcmVzc2VkIGRvd24gYXQgdGhlIHRpbWUgdGhpcyBtZXRob2QgaXMgY2FsbGVkLCBpdCB3aWxsIHJldHVybiB0aGVcclxuICAgICAqIHZlcnRpY2FsIGRpc3RhbmNlIGJldHdlZW4gdGhlIFBvaW50ZXIncyBgZG93blhgIGFuZCBgZG93bllgIHZhbHVlcyBhbmQgdGhlIGN1cnJlbnQgcG9zaXRpb24uXHJcbiAgICAgKiBcclxuICAgICAqIElmIG5vIGJ1dHRvbiBpcyBoZWxkIGRvd24sIGl0IHdpbGwgcmV0dXJuIHRoZSBsYXN0IHJlY29yZGVkIHZlcnRpY2FsIGRpc3RhbmNlLCBiYXNlZCBvbiB3aGVyZVxyXG4gICAgICogdGhlIFBvaW50ZXIgd2FzIHdoZW4gdGhlIGJ1dHRvbiB3YXMgcmVsZWFzZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuUG9pbnRlciNnZXREaXN0YW5jZVlcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB2ZXJ0aWNhbCBkaXN0YW5jZSB0aGUgUG9pbnRlciBtb3ZlZC5cclxuICAgICAqL1xyXG4gICAgZ2V0RGlzdGFuY2VZOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLmRvd25ZIC0gdGhpcy55KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuZG93blkgLSB0aGlzLnVwWSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHRoZSBQb2ludGVyIGhhcyBhIGJ1dHRvbiBwcmVzc2VkIGRvd24gYXQgdGhlIHRpbWUgdGhpcyBtZXRob2QgaXMgY2FsbGVkLCBpdCB3aWxsIHJldHVybiB0aGVcclxuICAgICAqIGR1cmF0aW9uIHNpbmNlIHRoZSBidXR0b24gd2FzIHByZXNzZWQgZG93bi5cclxuICAgICAqIFxyXG4gICAgICogSWYgbm8gYnV0dG9uIGlzIGhlbGQgZG93biwgaXQgd2lsbCByZXR1cm4gdGhlIGxhc3QgcmVjb3JkZWQgZHVyYXRpb24sIGJhc2VkIG9uIHRoZSB0aW1lXHJcbiAgICAgKiB0aGUgUG9pbnRlciBidXR0b24gd2FzIHJlbGVhc2VkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LlBvaW50ZXIjZ2V0RHVyYXRpb25cclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBkdXJhdGlvbiB0aGUgUG9pbnRlciB3YXMgaGVsZCBkb3duIGZvciBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICAgKi9cclxuICAgIGdldER1cmF0aW9uOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5tYW5hZ2VyLnRpbWUgLSB0aGlzLmRvd25UaW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnVwVGltZSAtIHRoaXMuZG93blRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB0aGUgUG9pbnRlciBoYXMgYSBidXR0b24gcHJlc3NlZCBkb3duIGF0IHRoZSB0aW1lIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwgaXQgd2lsbCByZXR1cm4gdGhlXHJcbiAgICAgKiBhbmdsZSBiZXR3ZWVuIHRoZSBQb2ludGVyJ3MgYGRvd25YYCBhbmQgYGRvd25ZYCB2YWx1ZXMgYW5kIHRoZSBjdXJyZW50IHBvc2l0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiBubyBidXR0b24gaXMgaGVsZCBkb3duLCBpdCB3aWxsIHJldHVybiB0aGUgbGFzdCByZWNvcmRlZCBhbmdsZSwgYmFzZWQgb24gd2hlcmVcclxuICAgICAqIHRoZSBQb2ludGVyIHdhcyB3aGVuIHRoZSBidXR0b24gd2FzIHJlbGVhc2VkLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgYW5nbGUgaXMgYmFzZWQgb24gdGhlIG9sZCBwb3NpdGlvbiBmYWNpbmcgdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24uXHJcbiAgICAgKiBcclxuICAgICAqIElmIHlvdSB3aXNoIHRvIGdldCB0aGUgY3VycmVudCBhbmdsZSwgYmFzZWQgb24gdGhlIHZlbG9jaXR5IG9mIHRoZSBQb2ludGVyLCB0aGVuXHJcbiAgICAgKiBzZWUgdGhlIGBQb2ludGVyLmFuZ2xlYCBwcm9wZXJ0eS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Qb2ludGVyI2dldEFuZ2xlXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgYW5nbGUgYmV0d2VlbiB0aGUgUG9pbnRlcidzIGNvb3JkaW5hdGVzIGluIHJhZGlhbnMuXHJcbiAgICAgKi9cclxuICAgIGdldEFuZ2xlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBBbmdsZSh0aGlzLmRvd25YLCB0aGlzLmRvd25ZLCB0aGlzLngsIHRoaXMueSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBBbmdsZSh0aGlzLmRvd25YLCB0aGlzLmRvd25ZLCB0aGlzLnVwWCwgdGhpcy51cFkpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyB0aGUgcHJldmlvdXMgYW5kIGN1cnJlbnQgUG9pbnRlciBwb3NpdGlvbnMgYW5kIHRoZW4gZ2VuZXJhdGVzIGFuIGFycmF5IG9mIGludGVycG9sYXRlZCB2YWx1ZXMgYmV0d2VlblxyXG4gICAgICogdGhlIHR3by4gVGhlIGFycmF5IHdpbGwgYmUgcG9wdWxhdGVkIHVwIHRvIHRoZSBzaXplIG9mIHRoZSBgc3RlcHNgIGFyZ3VtZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhU2NyaXB0XHJcbiAgICAgKiB2YXIgcG9pbnRzID0gcG9pbnRlci5nZXRJbnRlcnBvbGF0ZWRQb3NpdGlvbig0KTtcclxuICAgICAqIFxyXG4gICAgICogLy8gcG9pbnRzWzBdID0geyB4OiAwLCB5OiAwIH1cclxuICAgICAqIC8vIHBvaW50c1sxXSA9IHsgeDogMiwgeTogMSB9XHJcbiAgICAgKiAvLyBwb2ludHNbMl0gPSB7IHg6IDMsIHk6IDIgfVxyXG4gICAgICogLy8gcG9pbnRzWzNdID0geyB4OiA2LCB5OiAzIH1cclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiBVc2UgdGhpcyBpZiB5b3UgbmVlZCB0byBnZXQgc21vb3RoZWQgdmFsdWVzIGJldHdlZW4gdGhlIHByZXZpb3VzIGFuZCBjdXJyZW50IHBvaW50ZXIgcG9zaXRpb25zLiBET00gcG9pbnRlclxyXG4gICAgICogZXZlbnRzIGNhbiBvZnRlbiBmaXJlIGZhc3RlciB0aGFuIHRoZSBtYWluIGJyb3dzZXIgbG9vcCwgYW5kIHRoaXMgd2lsbCBoZWxwIHlvdSBhdm9pZCBqYW5reSBtb3ZlbWVudFxyXG4gICAgICogZXNwZWNpYWxseSBpZiB5b3UgaGF2ZSBhbiBvYmplY3QgZm9sbG93aW5nIGEgUG9pbnRlci5cclxuICAgICAqIFxyXG4gICAgICogTm90ZSB0aGF0IGlmIHlvdSBwcm92aWRlIGFuIG91dHB1dCBhcnJheSBpdCB3aWxsIG9ubHkgYmUgcG9wdWxhdGVkIHVwIHRvIHRoZSBudW1iZXIgb2Ygc3RlcHMgcHJvdmlkZWQuXHJcbiAgICAgKiBJdCB3aWxsIG5vdCBjbGVhciBhbnkgcHJldmlvdXMgZGF0YSB0aGF0IG1heSBoYXZlIGV4aXN0ZWQgYmV5b25kIHRoZSByYW5nZSBvZiB0aGUgc3RlcHMgY291bnQuXHJcbiAgICAgKiBcclxuICAgICAqIEludGVybmFsbHkgaXQgdXNlcyB0aGUgU21vb3RoIFN0ZXAgaW50ZXJwb2xhdGlvbiBjYWxjdWxhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Qb2ludGVyI2dldEludGVycG9sYXRlZFBvc2l0aW9uXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gW3N0ZXBzPTEwXSAtIFRoZSBudW1iZXIgb2YgaW50ZXJwb2xhdGlvbiBzdGVwcyB0byB1c2UuXHJcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBbb3V0XSAtIEFuIGFycmF5IHRvIHN0b3JlIHRoZSByZXN1bHRzIGluLiBJZiBub3QgcHJvdmlkZWQgYSBuZXcgb25lIHdpbGwgYmUgY3JlYXRlZC5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7YXJyYXl9IEFuIGFycmF5IG9mIGludGVycG9sYXRlZCB2YWx1ZXMuXHJcbiAgICAgKi9cclxuICAgIGdldEludGVycG9sYXRlZFBvc2l0aW9uOiBmdW5jdGlvbiAoc3RlcHMsIG91dClcclxuICAgIHtcclxuICAgICAgICBpZiAoc3RlcHMgPT09IHVuZGVmaW5lZCkgeyBzdGVwcyA9IDEwOyB9XHJcbiAgICAgICAgaWYgKG91dCA9PT0gdW5kZWZpbmVkKSB7IG91dCA9IFtdOyB9XHJcblxyXG4gICAgICAgIHZhciBwcmV2WCA9IHRoaXMucHJldlBvc2l0aW9uLng7XHJcbiAgICAgICAgdmFyIHByZXZZID0gdGhpcy5wcmV2UG9zaXRpb24ueTtcclxuXHJcbiAgICAgICAgdmFyIGN1clggPSB0aGlzLnBvc2l0aW9uLng7XHJcbiAgICAgICAgdmFyIGN1clkgPSB0aGlzLnBvc2l0aW9uLnk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RlcHM7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0ID0gKDEgLyBzdGVwcykgKiBpO1xyXG5cclxuICAgICAgICAgICAgb3V0W2ldID0geyB4OiBTbW9vdGhTdGVwSW50ZXJwb2xhdGlvbih0LCBwcmV2WCwgY3VyWCksIHk6IFNtb290aFN0ZXBJbnRlcnBvbGF0aW9uKHQsIHByZXZZLCBjdXJZKSB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGlzIFBvaW50ZXIgaW5zdGFuY2UgYW5kIHJlc2V0cyBpdHMgZXh0ZXJuYWwgcmVmZXJlbmNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Qb2ludGVyI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuY2FtZXJhID0gbnVsbDtcclxuICAgICAgICB0aGlzLm1hbmFnZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucG9zaXRpb24gPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB4IHBvc2l0aW9uIG9mIHRoaXMgUG9pbnRlci5cclxuICAgICAqIFRoZSB2YWx1ZSBpcyBpbiBzY3JlZW4gc3BhY2UuXHJcbiAgICAgKiBTZWUgYHdvcmxkWGAgdG8gZ2V0IGEgY2FtZXJhIGNvbnZlcnRlZCBwb3NpdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciN4XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHg6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHkgcG9zaXRpb24gb2YgdGhpcyBQb2ludGVyLlxyXG4gICAgICogVGhlIHZhbHVlIGlzIGluIHNjcmVlbiBzcGFjZS5cclxuICAgICAqIFNlZSBgd29ybGRZYCB0byBnZXQgYSBjYW1lcmEgY29udmVydGVkIHBvc2l0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Qb2ludGVyI3lcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgeToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbi55O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbi55ID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaW1lIHdoZW4gdGhpcyBQb2ludGVyIHdhcyBtb3N0IHJlY2VudGx5IHVwZGF0ZWQgYnkgYSBET00gRXZlbnQuXHJcbiAgICAgKiBUaGlzIGNvbWVzIGRpcmVjdGx5IGZyb20gdGhlIGBldmVudC50aW1lU3RhbXBgIHByb3BlcnR5LlxyXG4gICAgICogSWYgbm8gZXZlbnQgaGFzIHlldCB0YWtlbiBwbGFjZSwgaXQgd2lsbCByZXR1cm4gemVyby5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUG9pbnRlciN0aW1lXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHJlYWRvbmx5XHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKi9cclxuICAgIHRpbWU6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLmV2ZW50KSA/IHRoaXMuZXZlbnQudGltZVN0YW1wIDogMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50ZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/Pointer.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/const.js":
/*!************************************************!*\
!*** ./node_modules/phaser/src/input/const.js ***!
\************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar INPUT_CONST = {\r\n\r\n /**\r\n * The mouse pointer is being held down.\r\n * \r\n * @name Phaser.Input.MOUSE_DOWN\r\n * @type {integer}\r\n * @since 3.10.0\r\n */\r\n MOUSE_DOWN: 0,\r\n\r\n /**\r\n * The mouse pointer is being moved.\r\n * \r\n * @name Phaser.Input.MOUSE_MOVE\r\n * @type {integer}\r\n * @since 3.10.0\r\n */\r\n MOUSE_MOVE: 1,\r\n\r\n /**\r\n * The mouse pointer is released.\r\n * \r\n * @name Phaser.Input.MOUSE_UP\r\n * @type {integer}\r\n * @since 3.10.0\r\n */\r\n MOUSE_UP: 2,\r\n\r\n /**\r\n * A touch pointer has been started.\r\n * \r\n * @name Phaser.Input.TOUCH_START\r\n * @type {integer}\r\n * @since 3.10.0\r\n */\r\n TOUCH_START: 3,\r\n\r\n /**\r\n * A touch pointer has been started.\r\n * \r\n * @name Phaser.Input.TOUCH_MOVE\r\n * @type {integer}\r\n * @since 3.10.0\r\n */\r\n TOUCH_MOVE: 4,\r\n\r\n /**\r\n * A touch pointer has been started.\r\n * \r\n * @name Phaser.Input.TOUCH_END\r\n * @type {integer}\r\n * @since 3.10.0\r\n */\r\n TOUCH_END: 5,\r\n\r\n /**\r\n * The pointer lock has changed.\r\n * \r\n * @name Phaser.Input.POINTER_LOCK_CHANGE\r\n * @type {integer}\r\n * @since 3.10.0\r\n */\r\n POINTER_LOCK_CHANGE: 6,\r\n\r\n /**\r\n * A touch pointer has been been cancelled by the browser.\r\n * \r\n * @name Phaser.Input.TOUCH_CANCEL\r\n * @type {integer}\r\n * @since 3.15.0\r\n */\r\n TOUCH_CANCEL: 7,\r\n\r\n /**\r\n * The mouse wheel changes.\r\n * \r\n * @name Phaser.Input.MOUSE_WHEEL\r\n * @type {integer}\r\n * @since 3.18.0\r\n */\r\n MOUSE_WHEEL: 8\r\n\r\n};\r\n\r\nmodule.exports = INPUT_CONST;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9jb25zdC5qcz85OTNiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2NvbnN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgSU5QVVRfQ09OU1QgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbW91c2UgcG9pbnRlciBpcyBiZWluZyBoZWxkIGRvd24uXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5NT1VTRV9ET1dOXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgTU9VU0VfRE9XTjogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtb3VzZSBwb2ludGVyIGlzIGJlaW5nIG1vdmVkLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuTU9VU0VfTU9WRVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIE1PVVNFX01PVkU6IDEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbW91c2UgcG9pbnRlciBpcyByZWxlYXNlZC5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0Lk1PVVNFX1VQXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgTU9VU0VfVVA6IDIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHRvdWNoIHBvaW50ZXIgaGFzIGJlZW4gc3RhcnRlZC5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LlRPVUNIX1NUQVJUXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgVE9VQ0hfU1RBUlQ6IDMsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHRvdWNoIHBvaW50ZXIgaGFzIGJlZW4gc3RhcnRlZC5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LlRPVUNIX01PVkVcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICovXHJcbiAgICBUT1VDSF9NT1ZFOiA0LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSB0b3VjaCBwb2ludGVyIGhhcyBiZWVuIHN0YXJ0ZWQuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5UT1VDSF9FTkRcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICovXHJcbiAgICBUT1VDSF9FTkQ6IDUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcG9pbnRlciBsb2NrIGhhcyBjaGFuZ2VkLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuUE9JTlRFUl9MT0NLX0NIQU5HRVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIFBPSU5URVJfTE9DS19DSEFOR0U6IDYsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHRvdWNoIHBvaW50ZXIgaGFzIGJlZW4gYmVlbiBjYW5jZWxsZWQgYnkgdGhlIGJyb3dzZXIuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5UT1VDSF9DQU5DRUxcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMTUuMFxyXG4gICAgICovXHJcbiAgICBUT1VDSF9DQU5DRUw6IDcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbW91c2Ugd2hlZWwgY2hhbmdlcy5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0Lk1PVVNFX1dIRUVMXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAqL1xyXG4gICAgTU9VU0VfV0hFRUw6IDhcclxuXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IElOUFVUX0NPTlNUO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/const.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/BOOT_EVENT.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/input/events/BOOT_EVENT.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Input Plugin Boot Event.\r\n * \r\n * This internal event is dispatched by the Input Plugin when it boots, signalling to all of its systems to create themselves.\r\n *\r\n * @event Phaser.Input.Events#BOOT\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'boot';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvQk9PVF9FVkVOVC5qcz9hYmM1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvQk9PVF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBJbnB1dCBQbHVnaW4gQm9vdCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgaW50ZXJuYWwgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgUGx1Z2luIHdoZW4gaXQgYm9vdHMsIHNpZ25hbGxpbmcgdG8gYWxsIG9mIGl0cyBzeXN0ZW1zIHRvIGNyZWF0ZSB0aGVtc2VsdmVzLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNCT09UXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnYm9vdCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/BOOT_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/DESTROY_EVENT.js":
/*!***************************************************************!*\
!*** ./node_modules/phaser/src/input/events/DESTROY_EVENT.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Input Plugin Destroy Event.\r\n * \r\n * This internal event is dispatched by the Input Plugin when it is destroyed, signalling to all of its systems to destroy themselves.\r\n *\r\n * @event Phaser.Input.Events#DESTROY\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'destroy';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvREVTVFJPWV9FVkVOVC5qcz81MDA1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvREVTVFJPWV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBJbnB1dCBQbHVnaW4gRGVzdHJveSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgaW50ZXJuYWwgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgUGx1Z2luIHdoZW4gaXQgaXMgZGVzdHJveWVkLCBzaWduYWxsaW5nIHRvIGFsbCBvZiBpdHMgc3lzdGVtcyB0byBkZXN0cm95IHRoZW1zZWx2ZXMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0RFU1RST1lcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdkZXN0cm95JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/DESTROY_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/DRAG_END_EVENT.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/input/events/DRAG_END_EVENT.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Drag End Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer stops dragging a Game Object.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('dragend', listener)`.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_DRAG_END]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_DRAG_END} event instead.\r\n *\r\n * @event Phaser.Input.Events#DRAG_END\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The interactive Game Object that this pointer stopped dragging.\r\n */\r\nmodule.exports = 'dragend';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvRFJBR19FTkRfRVZFTlQuanM/NGEwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5RkFBeUYsd0RBQXdEO0FBQ2pKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyw4QkFBOEI7QUFDekM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9EUkFHX0VORF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBQb2ludGVyIERyYWcgRW5kIElucHV0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBJbnB1dCBQbHVnaW4gYmVsb25naW5nIHRvIGEgU2NlbmUgaWYgYSBwb2ludGVyIHN0b3BzIGRyYWdnaW5nIGEgR2FtZSBPYmplY3QuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIHdpdGhpbiBhIFNjZW5lIHVzaW5nOiBgdGhpcy5pbnB1dC5vbignZHJhZ2VuZCcsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBUbyBsaXN0ZW4gZm9yIHRoaXMgZXZlbnQgZnJvbSBhIF9zcGVjaWZpY18gR2FtZSBPYmplY3QsIHVzZSB0aGUgW0dBTUVPQkpFQ1RfRFJBR19FTkRde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfRFJBR19FTkR9IGV2ZW50IGluc3RlYWQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0RSQUdfRU5EXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHJlc3BvbnNpYmxlIGZvciB0cmlnZ2VyaW5nIHRoaXMgZXZlbnQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgaW50ZXJhY3RpdmUgR2FtZSBPYmplY3QgdGhhdCB0aGlzIHBvaW50ZXIgc3RvcHBlZCBkcmFnZ2luZy5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2RyYWdlbmQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/DRAG_END_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/DRAG_ENTER_EVENT.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/input/events/DRAG_ENTER_EVENT.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Drag Enter Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer drags a Game Object into a Drag Target.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('dragenter', listener)`.\r\n * \r\n * A Pointer can only drag a single Game Object at once.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_DRAG_ENTER]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_DRAG_ENTER} event instead.\r\n *\r\n * @event Phaser.Input.Events#DRAG_ENTER\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The interactive Game Object that this pointer is dragging.\r\n * @param {Phaser.GameObjects.GameObject} target - The drag target that this pointer has moved into.\r\n */\r\nmodule.exports = 'dragenter';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvRFJBR19FTlRFUl9FVkVOVC5qcz8yNjIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRkFBMkYsMERBQTBEO0FBQ3JKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4QkFBOEI7QUFDekM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9EUkFHX0VOVEVSX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFBvaW50ZXIgRHJhZyBFbnRlciBJbnB1dCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgUGx1Z2luIGJlbG9uZ2luZyB0byBhIFNjZW5lIGlmIGEgcG9pbnRlciBkcmFncyBhIEdhbWUgT2JqZWN0IGludG8gYSBEcmFnIFRhcmdldC5cclxuICogXHJcbiAqIExpc3RlbiB0byB0aGlzIGV2ZW50IGZyb20gd2l0aGluIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmlucHV0Lm9uKCdkcmFnZW50ZXInLCBsaXN0ZW5lcilgLlxyXG4gKiBcclxuICogQSBQb2ludGVyIGNhbiBvbmx5IGRyYWcgYSBzaW5nbGUgR2FtZSBPYmplY3QgYXQgb25jZS5cclxuICogXHJcbiAqIFRvIGxpc3RlbiBmb3IgdGhpcyBldmVudCBmcm9tIGEgX3NwZWNpZmljXyBHYW1lIE9iamVjdCwgdXNlIHRoZSBbR0FNRU9CSkVDVF9EUkFHX0VOVEVSXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX0RSQUdfRU5URVJ9IGV2ZW50IGluc3RlYWQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0RSQUdfRU5URVJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBpbnRlcmFjdGl2ZSBHYW1lIE9iamVjdCB0aGF0IHRoaXMgcG9pbnRlciBpcyBkcmFnZ2luZy5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gdGFyZ2V0IC0gVGhlIGRyYWcgdGFyZ2V0IHRoYXQgdGhpcyBwb2ludGVyIGhhcyBtb3ZlZCBpbnRvLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZHJhZ2VudGVyJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/DRAG_ENTER_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/DRAG_EVENT.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/input/events/DRAG_EVENT.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Drag Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer moves while dragging a Game Object.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('drag', listener)`.\r\n * \r\n * A Pointer can only drag a single Game Object at once.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_DRAG]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_DRAG} event instead.\r\n *\r\n * @event Phaser.Input.Events#DRAG\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The interactive Game Object that this pointer is dragging.\r\n * @param {number} dragX - The x coordinate where the Pointer is currently dragging the Game Object, in world space.\r\n * @param {number} dragY - The y coordinate where the Pointer is currently dragging the Game Object, in world space.\r\n */\r\nmodule.exports = 'drag';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvRFJBR19FVkVOVC5qcz82NTM5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRkFBcUYsb0RBQW9EO0FBQ3pJO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL0RSQUdfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgUG9pbnRlciBEcmFnIElucHV0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBJbnB1dCBQbHVnaW4gYmVsb25naW5nIHRvIGEgU2NlbmUgaWYgYSBwb2ludGVyIG1vdmVzIHdoaWxlIGRyYWdnaW5nIGEgR2FtZSBPYmplY3QuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIHdpdGhpbiBhIFNjZW5lIHVzaW5nOiBgdGhpcy5pbnB1dC5vbignZHJhZycsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBBIFBvaW50ZXIgY2FuIG9ubHkgZHJhZyBhIHNpbmdsZSBHYW1lIE9iamVjdCBhdCBvbmNlLlxyXG4gKiBcclxuICogVG8gbGlzdGVuIGZvciB0aGlzIGV2ZW50IGZyb20gYSBfc3BlY2lmaWNfIEdhbWUgT2JqZWN0LCB1c2UgdGhlIFtHQU1FT0JKRUNUX0RSQUdde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfRFJBR30gZXZlbnQgaW5zdGVhZC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5FdmVudHMjRFJBR1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0IHRoYXQgdGhpcyBwb2ludGVyIGlzIGRyYWdnaW5nLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZHJhZ1ggLSBUaGUgeCBjb29yZGluYXRlIHdoZXJlIHRoZSBQb2ludGVyIGlzIGN1cnJlbnRseSBkcmFnZ2luZyB0aGUgR2FtZSBPYmplY3QsIGluIHdvcmxkIHNwYWNlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZHJhZ1kgLSBUaGUgeSBjb29yZGluYXRlIHdoZXJlIHRoZSBQb2ludGVyIGlzIGN1cnJlbnRseSBkcmFnZ2luZyB0aGUgR2FtZSBPYmplY3QsIGluIHdvcmxkIHNwYWNlLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZHJhZyc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/DRAG_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/DRAG_LEAVE_EVENT.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/input/events/DRAG_LEAVE_EVENT.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Drag Leave Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer drags a Game Object out of a Drag Target.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('dragleave', listener)`.\r\n * \r\n * A Pointer can only drag a single Game Object at once.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_DRAG_LEAVE]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_DRAG_LEAVE} event instead.\r\n *\r\n * @event Phaser.Input.Events#DRAG_LEAVE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The interactive Game Object that this pointer is dragging.\r\n * @param {Phaser.GameObjects.GameObject} target - The drag target that this pointer has left.\r\n */\r\nmodule.exports = 'dragleave';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvRFJBR19MRUFWRV9FVkVOVC5qcz9iZmYxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRkFBMkYsMERBQTBEO0FBQ3JKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw4QkFBOEI7QUFDekM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9EUkFHX0xFQVZFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFBvaW50ZXIgRHJhZyBMZWF2ZSBJbnB1dCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgUGx1Z2luIGJlbG9uZ2luZyB0byBhIFNjZW5lIGlmIGEgcG9pbnRlciBkcmFncyBhIEdhbWUgT2JqZWN0IG91dCBvZiBhIERyYWcgVGFyZ2V0LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMuaW5wdXQub24oJ2RyYWdsZWF2ZScsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBBIFBvaW50ZXIgY2FuIG9ubHkgZHJhZyBhIHNpbmdsZSBHYW1lIE9iamVjdCBhdCBvbmNlLlxyXG4gKiBcclxuICogVG8gbGlzdGVuIGZvciB0aGlzIGV2ZW50IGZyb20gYSBfc3BlY2lmaWNfIEdhbWUgT2JqZWN0LCB1c2UgdGhlIFtHQU1FT0JKRUNUX0RSQUdfTEVBVkVde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfRFJBR19MRUFWRX0gZXZlbnQgaW5zdGVhZC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5FdmVudHMjRFJBR19MRUFWRVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0IHRoYXQgdGhpcyBwb2ludGVyIGlzIGRyYWdnaW5nLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSB0YXJnZXQgLSBUaGUgZHJhZyB0YXJnZXQgdGhhdCB0aGlzIHBvaW50ZXIgaGFzIGxlZnQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdkcmFnbGVhdmUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/DRAG_LEAVE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/DRAG_OVER_EVENT.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/input/events/DRAG_OVER_EVENT.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Drag Over Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer drags a Game Object over a Drag Target.\r\n * \r\n * When the Game Object first enters the drag target it will emit a `dragenter` event. If it then moves while within\r\n * the drag target, it will emit this event instead.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('dragover', listener)`.\r\n * \r\n * A Pointer can only drag a single Game Object at once.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_DRAG_OVER]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_DRAG_OVER} event instead.\r\n *\r\n * @event Phaser.Input.Events#DRAG_OVER\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The interactive Game Object that this pointer is dragging.\r\n * @param {Phaser.GameObjects.GameObject} target - The drag target that this pointer has moved over.\r\n */\r\nmodule.exports = 'dragover';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvRFJBR19PVkVSX0VWRU5ULmpzPzE2NWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBGQUEwRix5REFBeUQ7QUFDbko7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhCQUE4QjtBQUN6QztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL0RSQUdfT1ZFUl9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBQb2ludGVyIERyYWcgT3ZlciBJbnB1dCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgUGx1Z2luIGJlbG9uZ2luZyB0byBhIFNjZW5lIGlmIGEgcG9pbnRlciBkcmFncyBhIEdhbWUgT2JqZWN0IG92ZXIgYSBEcmFnIFRhcmdldC5cclxuICogXHJcbiAqIFdoZW4gdGhlIEdhbWUgT2JqZWN0IGZpcnN0IGVudGVycyB0aGUgZHJhZyB0YXJnZXQgaXQgd2lsbCBlbWl0IGEgYGRyYWdlbnRlcmAgZXZlbnQuIElmIGl0IHRoZW4gbW92ZXMgd2hpbGUgd2l0aGluXHJcbiAqIHRoZSBkcmFnIHRhcmdldCwgaXQgd2lsbCBlbWl0IHRoaXMgZXZlbnQgaW5zdGVhZC5cclxuICogXHJcbiAqIExpc3RlbiB0byB0aGlzIGV2ZW50IGZyb20gd2l0aGluIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmlucHV0Lm9uKCdkcmFnb3ZlcicsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBBIFBvaW50ZXIgY2FuIG9ubHkgZHJhZyBhIHNpbmdsZSBHYW1lIE9iamVjdCBhdCBvbmNlLlxyXG4gKiBcclxuICogVG8gbGlzdGVuIGZvciB0aGlzIGV2ZW50IGZyb20gYSBfc3BlY2lmaWNfIEdhbWUgT2JqZWN0LCB1c2UgdGhlIFtHQU1FT0JKRUNUX0RSQUdfT1ZFUl17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6R0FNRU9CSkVDVF9EUkFHX09WRVJ9IGV2ZW50IGluc3RlYWQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0RSQUdfT1ZFUlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0IHRoYXQgdGhpcyBwb2ludGVyIGlzIGRyYWdnaW5nLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSB0YXJnZXQgLSBUaGUgZHJhZyB0YXJnZXQgdGhhdCB0aGlzIHBvaW50ZXIgaGFzIG1vdmVkIG92ZXIuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdkcmFnb3Zlcic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/DRAG_OVER_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/DRAG_START_EVENT.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/input/events/DRAG_START_EVENT.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Drag Start Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer starts to drag any Game Object.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('dragstart', listener)`.\r\n * \r\n * A Pointer can only drag a single Game Object at once.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_DRAG_START]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_DRAG_START} event instead.\r\n *\r\n * @event Phaser.Input.Events#DRAG_START\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The interactive Game Object that this pointer is dragging.\r\n */\r\nmodule.exports = 'dragstart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvRFJBR19TVEFSVF9FVkVOVC5qcz9kMTQzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRkFBMkYsMERBQTBEO0FBQ3JKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyw4QkFBOEI7QUFDekM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9EUkFHX1NUQVJUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFBvaW50ZXIgRHJhZyBTdGFydCBJbnB1dCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgUGx1Z2luIGJlbG9uZ2luZyB0byBhIFNjZW5lIGlmIGEgcG9pbnRlciBzdGFydHMgdG8gZHJhZyBhbnkgR2FtZSBPYmplY3QuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIHdpdGhpbiBhIFNjZW5lIHVzaW5nOiBgdGhpcy5pbnB1dC5vbignZHJhZ3N0YXJ0JywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIEEgUG9pbnRlciBjYW4gb25seSBkcmFnIGEgc2luZ2xlIEdhbWUgT2JqZWN0IGF0IG9uY2UuXHJcbiAqIFxyXG4gKiBUbyBsaXN0ZW4gZm9yIHRoaXMgZXZlbnQgZnJvbSBhIF9zcGVjaWZpY18gR2FtZSBPYmplY3QsIHVzZSB0aGUgW0dBTUVPQkpFQ1RfRFJBR19TVEFSVF17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6R0FNRU9CSkVDVF9EUkFHX1NUQVJUfSBldmVudCBpbnN0ZWFkLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNEUkFHX1NUQVJUXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHJlc3BvbnNpYmxlIGZvciB0cmlnZ2VyaW5nIHRoaXMgZXZlbnQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgaW50ZXJhY3RpdmUgR2FtZSBPYmplY3QgdGhhdCB0aGlzIHBvaW50ZXIgaXMgZHJhZ2dpbmcuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdkcmFnc3RhcnQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/DRAG_START_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/DROP_EVENT.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/input/events/DROP_EVENT.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Drop Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer drops a Game Object on a Drag Target.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('drop', listener)`.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_DROP]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_DROP} event instead.\r\n *\r\n * @event Phaser.Input.Events#DROP\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The interactive Game Object that this pointer was dragging.\r\n * @param {Phaser.GameObjects.GameObject} target - The Drag Target the `gameObject` has been dropped on.\r\n */\r\nmodule.exports = 'drop';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvRFJPUF9FVkVOVC5qcz9kYWU4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFGQUFxRixvREFBb0Q7QUFDekk7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLDhCQUE4QjtBQUN6QztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL0RST1BfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgUG9pbnRlciBEcm9wIElucHV0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBJbnB1dCBQbHVnaW4gYmVsb25naW5nIHRvIGEgU2NlbmUgaWYgYSBwb2ludGVyIGRyb3BzIGEgR2FtZSBPYmplY3Qgb24gYSBEcmFnIFRhcmdldC5cclxuICogXHJcbiAqIExpc3RlbiB0byB0aGlzIGV2ZW50IGZyb20gd2l0aGluIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmlucHV0Lm9uKCdkcm9wJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIFRvIGxpc3RlbiBmb3IgdGhpcyBldmVudCBmcm9tIGEgX3NwZWNpZmljXyBHYW1lIE9iamVjdCwgdXNlIHRoZSBbR0FNRU9CSkVDVF9EUk9QXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX0RST1B9IGV2ZW50IGluc3RlYWQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0RST1BcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBpbnRlcmFjdGl2ZSBHYW1lIE9iamVjdCB0aGF0IHRoaXMgcG9pbnRlciB3YXMgZHJhZ2dpbmcuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IHRhcmdldCAtIFRoZSBEcmFnIFRhcmdldCB0aGUgYGdhbWVPYmplY3RgIGhhcyBiZWVuIGRyb3BwZWQgb24uXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdkcm9wJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/DROP_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_DOWN_EVENT.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/src/input/events/GAMEOBJECT_DOWN_EVENT.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Down Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer is pressed down on _any_ interactive Game Object.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('gameobjectdown', listener)`.\r\n * \r\n * To receive this event, the Game Objects must have been set as interactive.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_POINTER_DOWN]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_DOWN} event instead.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_DOWN]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_DOWN}\r\n * 2. [GAMEOBJECT_DOWN]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_DOWN}\r\n * 3. [POINTER_DOWN]{@linkcode Phaser.Input.Events#event:POINTER_DOWN} or [POINTER_DOWN_OUTSIDE]{@linkcode Phaser.Input.Events#event:POINTER_DOWN_OUTSIDE}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_DOWN\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object the pointer was pressed down on.\r\n * @param {Phaser.Types.Input.EventData} event - The Phaser input event. You can call `stopPropagation()` to halt it from going any further in the event flow.\r\n */\r\nmodule.exports = 'gameobjectdown';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9ET1dOX0VWRU5ULmpzPzllMWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsbURBQW1EO0FBQ3RGO0FBQ0EsNkZBQTZGLDREQUE0RDtBQUN6SjtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEMsd0JBQXdCO0FBQ3hCLHFCQUFxQixpREFBaUQsMkJBQTJCO0FBQ2pHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw2QkFBNkI7QUFDeEM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9HQU1FT0JKRUNUX0RPV05fRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgR2FtZSBPYmplY3QgRG93biBJbnB1dCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgUGx1Z2luIGJlbG9uZ2luZyB0byBhIFNjZW5lIGlmIGEgcG9pbnRlciBpcyBwcmVzc2VkIGRvd24gb24gX2FueV8gaW50ZXJhY3RpdmUgR2FtZSBPYmplY3QuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIHdpdGhpbiBhIFNjZW5lIHVzaW5nOiBgdGhpcy5pbnB1dC5vbignZ2FtZW9iamVjdGRvd24nLCBsaXN0ZW5lcilgLlxyXG4gKiBcclxuICogVG8gcmVjZWl2ZSB0aGlzIGV2ZW50LCB0aGUgR2FtZSBPYmplY3RzIG11c3QgaGF2ZSBiZWVuIHNldCBhcyBpbnRlcmFjdGl2ZS5cclxuICogU2VlIFtHYW1lT2JqZWN0LnNldEludGVyYWN0aXZlXXtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNzZXRJbnRlcmFjdGl2ZX0gZm9yIG1vcmUgZGV0YWlscy5cclxuICogXHJcbiAqIFRvIGxpc3RlbiBmb3IgdGhpcyBldmVudCBmcm9tIGEgX3NwZWNpZmljXyBHYW1lIE9iamVjdCwgdXNlIHRoZSBbR0FNRU9CSkVDVF9QT0lOVEVSX0RPV05de0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfUE9JTlRFUl9ET1dOfSBldmVudCBpbnN0ZWFkLlxyXG4gKiBcclxuICogVGhlIGV2ZW50IGhpZXJhcmNoeSBpcyBhcyBmb2xsb3dzOlxyXG4gKiBcclxuICogMS4gW0dBTUVPQkpFQ1RfUE9JTlRFUl9ET1dOXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1BPSU5URVJfRE9XTn1cclxuICogMi4gW0dBTUVPQkpFQ1RfRE9XTl17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6R0FNRU9CSkVDVF9ET1dOfVxyXG4gKiAzLiBbUE9JTlRFUl9ET1dOXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpQT0lOVEVSX0RPV059IG9yIFtQT0lOVEVSX0RPV05fT1VUU0lERV17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6UE9JTlRFUl9ET1dOX09VVFNJREV9XHJcbiAqIFxyXG4gKiBXaXRoIHRoZSB0b3AgZXZlbnQgYmVpbmcgZGlzcGF0Y2hlZCBmaXJzdCBhbmQgdGhlbiBmbG93aW5nIGRvd24gdGhlIGxpc3QuIE5vdGUgdGhhdCBoaWdoZXItdXAgZXZlbnQgaGFuZGxlcnMgY2FuIHN0b3BcclxuICogdGhlIHByb3BhZ2F0aW9uIG9mIHRoaXMgZXZlbnQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfRE9XTlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoZSBwb2ludGVyIHdhcyBwcmVzc2VkIGRvd24gb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLklucHV0LkV2ZW50RGF0YX0gZXZlbnQgLSBUaGUgUGhhc2VyIGlucHV0IGV2ZW50LiBZb3UgY2FuIGNhbGwgYHN0b3BQcm9wYWdhdGlvbigpYCB0byBoYWx0IGl0IGZyb20gZ29pbmcgYW55IGZ1cnRoZXIgaW4gdGhlIGV2ZW50IGZsb3cuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdnYW1lb2JqZWN0ZG93bic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_DOWN_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_END_EVENT.js":
/*!***************************************************************************!*\
!*** ./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_END_EVENT.js ***!
\***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Drag End Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer stops dragging it.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('dragend', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive and enabled for drag.\r\n * See [GameObject.setInteractive](Phaser.GameObjects.GameObject#setInteractive) for more details.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_DRAG_END\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {number} dragX - The x coordinate where the Pointer stopped dragging the Game Object, in world space.\r\n * @param {number} dragY - The y coordinate where the Pointer stopped dragging the Game Object, in world space.\r\n */\r\nmodule.exports = 'dragend';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9EUkFHX0VORF9FVkVOVC5qcz9lZmNmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL0dBTUVPQkpFQ1RfRFJBR19FTkRfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgR2FtZSBPYmplY3QgRHJhZyBFbmQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYW4gaW50ZXJhY3RpdmUgR2FtZSBPYmplY3QgaWYgYSBwb2ludGVyIHN0b3BzIGRyYWdnaW5nIGl0LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSBhIEdhbWUgT2JqZWN0IHVzaW5nOiBgZ2FtZU9iamVjdC5vbignZHJhZ2VuZCcsIGxpc3RlbmVyKWAuXHJcbiAqIE5vdGUgdGhhdCB0aGUgc2NvcGUgb2YgdGhlIGxpc3RlbmVyIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIGJlIHRoZSBHYW1lIE9iamVjdCBpbnN0YW5jZSBpdHNlbGYuXHJcbiAqIFxyXG4gKiBUbyByZWNlaXZlIHRoaXMgZXZlbnQsIHRoZSBHYW1lIE9iamVjdCBtdXN0IGhhdmUgYmVlbiBzZXQgYXMgaW50ZXJhY3RpdmUgYW5kIGVuYWJsZWQgZm9yIGRyYWcuXHJcbiAqIFNlZSBbR2FtZU9iamVjdC5zZXRJbnRlcmFjdGl2ZV0oUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Qjc2V0SW50ZXJhY3RpdmUpIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfRFJBR19FTkRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGRyYWdYIC0gVGhlIHggY29vcmRpbmF0ZSB3aGVyZSB0aGUgUG9pbnRlciBzdG9wcGVkIGRyYWdnaW5nIHRoZSBHYW1lIE9iamVjdCwgaW4gd29ybGQgc3BhY2UuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkcmFnWSAtIFRoZSB5IGNvb3JkaW5hdGUgd2hlcmUgdGhlIFBvaW50ZXIgc3RvcHBlZCBkcmFnZ2luZyB0aGUgR2FtZSBPYmplY3QsIGluIHdvcmxkIHNwYWNlLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZHJhZ2VuZCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_END_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_ENTER_EVENT.js":
/*!*****************************************************************************!*\
!*** ./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_ENTER_EVENT.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Drag Enter Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer drags it into a drag target.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('dragenter', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive and enabled for drag.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_DRAG_ENTER\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} target - The drag target that this pointer has moved into.\r\n */\r\nmodule.exports = 'dragenter';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9EUkFHX0VOVEVSX0VWRU5ULmpzPzUzODkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxtREFBbUQ7QUFDdEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLDhCQUE4QjtBQUN6QztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL0dBTUVPQkpFQ1RfRFJBR19FTlRFUl9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIE9iamVjdCBEcmFnIEVudGVyIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGFuIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0IGlmIGEgcG9pbnRlciBkcmFncyBpdCBpbnRvIGEgZHJhZyB0YXJnZXQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIGEgR2FtZSBPYmplY3QgdXNpbmc6IGBnYW1lT2JqZWN0Lm9uKCdkcmFnZW50ZXInLCBsaXN0ZW5lcilgLlxyXG4gKiBOb3RlIHRoYXQgdGhlIHNjb3BlIG9mIHRoZSBsaXN0ZW5lciBpcyBhdXRvbWF0aWNhbGx5IHNldCB0byBiZSB0aGUgR2FtZSBPYmplY3QgaW5zdGFuY2UgaXRzZWxmLlxyXG4gKiBcclxuICogVG8gcmVjZWl2ZSB0aGlzIGV2ZW50LCB0aGUgR2FtZSBPYmplY3QgbXVzdCBoYXZlIGJlZW4gc2V0IGFzIGludGVyYWN0aXZlIGFuZCBlbmFibGVkIGZvciBkcmFnLlxyXG4gKiBTZWUgW0dhbWVPYmplY3Quc2V0SW50ZXJhY3RpdmVde0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I3NldEludGVyYWN0aXZlfSBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FT0JKRUNUX0RSQUdfRU5URVJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gdGFyZ2V0IC0gVGhlIGRyYWcgdGFyZ2V0IHRoYXQgdGhpcyBwb2ludGVyIGhhcyBtb3ZlZCBpbnRvLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZHJhZ2VudGVyJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_ENTER_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_EVENT.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_EVENT.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Drag Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer moves while dragging it.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('drag', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive and enabled for drag.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_DRAG\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {number} dragX - The x coordinate where the Pointer is currently dragging the Game Object, in world space.\r\n * @param {number} dragY - The y coordinate where the Pointer is currently dragging the Game Object, in world space.\r\n */\r\nmodule.exports = 'drag';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9EUkFHX0VWRU5ULmpzPzEwMDkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxtREFBbUQ7QUFDdEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9EUkFHX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgT2JqZWN0IERyYWcgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYW4gaW50ZXJhY3RpdmUgR2FtZSBPYmplY3QgaWYgYSBwb2ludGVyIG1vdmVzIHdoaWxlIGRyYWdnaW5nIGl0LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSBhIEdhbWUgT2JqZWN0IHVzaW5nOiBgZ2FtZU9iamVjdC5vbignZHJhZycsIGxpc3RlbmVyKWAuXHJcbiAqIE5vdGUgdGhhdCB0aGUgc2NvcGUgb2YgdGhlIGxpc3RlbmVyIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIGJlIHRoZSBHYW1lIE9iamVjdCBpbnN0YW5jZSBpdHNlbGYuXHJcbiAqIFxyXG4gKiBUbyByZWNlaXZlIHRoaXMgZXZlbnQsIHRoZSBHYW1lIE9iamVjdCBtdXN0IGhhdmUgYmVlbiBzZXQgYXMgaW50ZXJhY3RpdmUgYW5kIGVuYWJsZWQgZm9yIGRyYWcuXHJcbiAqIFNlZSBbR2FtZU9iamVjdC5zZXRJbnRlcmFjdGl2ZV17QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Qjc2V0SW50ZXJhY3RpdmV9IGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfRFJBR1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZHJhZ1ggLSBUaGUgeCBjb29yZGluYXRlIHdoZXJlIHRoZSBQb2ludGVyIGlzIGN1cnJlbnRseSBkcmFnZ2luZyB0aGUgR2FtZSBPYmplY3QsIGluIHdvcmxkIHNwYWNlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZHJhZ1kgLSBUaGUgeSBjb29yZGluYXRlIHdoZXJlIHRoZSBQb2ludGVyIGlzIGN1cnJlbnRseSBkcmFnZ2luZyB0aGUgR2FtZSBPYmplY3QsIGluIHdvcmxkIHNwYWNlLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZHJhZyc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_LEAVE_EVENT.js":
/*!*****************************************************************************!*\
!*** ./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_LEAVE_EVENT.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Drag Leave Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer drags it out of a drag target.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('dragleave', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive and enabled for drag.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_DRAG_LEAVE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} target - The drag target that this pointer has left.\r\n */\r\nmodule.exports = 'dragleave';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9EUkFHX0xFQVZFX0VWRU5ULmpzPzNlZGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxtREFBbUQ7QUFDdEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLDhCQUE4QjtBQUN6QztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL0dBTUVPQkpFQ1RfRFJBR19MRUFWRV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIE9iamVjdCBEcmFnIExlYXZlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGFuIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0IGlmIGEgcG9pbnRlciBkcmFncyBpdCBvdXQgb2YgYSBkcmFnIHRhcmdldC5cclxuICogXHJcbiAqIExpc3RlbiB0byB0aGlzIGV2ZW50IGZyb20gYSBHYW1lIE9iamVjdCB1c2luZzogYGdhbWVPYmplY3Qub24oJ2RyYWdsZWF2ZScsIGxpc3RlbmVyKWAuXHJcbiAqIE5vdGUgdGhhdCB0aGUgc2NvcGUgb2YgdGhlIGxpc3RlbmVyIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIGJlIHRoZSBHYW1lIE9iamVjdCBpbnN0YW5jZSBpdHNlbGYuXHJcbiAqIFxyXG4gKiBUbyByZWNlaXZlIHRoaXMgZXZlbnQsIHRoZSBHYW1lIE9iamVjdCBtdXN0IGhhdmUgYmVlbiBzZXQgYXMgaW50ZXJhY3RpdmUgYW5kIGVuYWJsZWQgZm9yIGRyYWcuXHJcbiAqIFNlZSBbR2FtZU9iamVjdC5zZXRJbnRlcmFjdGl2ZV17QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Qjc2V0SW50ZXJhY3RpdmV9IGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfRFJBR19MRUFWRVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSB0YXJnZXQgLSBUaGUgZHJhZyB0YXJnZXQgdGhhdCB0aGlzIHBvaW50ZXIgaGFzIGxlZnQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdkcmFnbGVhdmUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_LEAVE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_OVER_EVENT.js":
/*!****************************************************************************!*\
!*** ./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_OVER_EVENT.js ***!
\****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Drag Over Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer drags it over a drag target.\r\n * \r\n * When the Game Object first enters the drag target it will emit a `dragenter` event. If it then moves while within\r\n * the drag target, it will emit this event instead.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('dragover', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive and enabled for drag.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_DRAG_OVER\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} target - The drag target that this pointer has moved over.\r\n */\r\nmodule.exports = 'dragover';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9EUkFHX09WRVJfRVZFTlQuanM/YWE2ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLG1EQUFtRDtBQUN0RjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsOEJBQThCO0FBQ3pDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9EUkFHX09WRVJfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgR2FtZSBPYmplY3QgRHJhZyBPdmVyIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGFuIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0IGlmIGEgcG9pbnRlciBkcmFncyBpdCBvdmVyIGEgZHJhZyB0YXJnZXQuXHJcbiAqIFxyXG4gKiBXaGVuIHRoZSBHYW1lIE9iamVjdCBmaXJzdCBlbnRlcnMgdGhlIGRyYWcgdGFyZ2V0IGl0IHdpbGwgZW1pdCBhIGBkcmFnZW50ZXJgIGV2ZW50LiBJZiBpdCB0aGVuIG1vdmVzIHdoaWxlIHdpdGhpblxyXG4gKiB0aGUgZHJhZyB0YXJnZXQsIGl0IHdpbGwgZW1pdCB0aGlzIGV2ZW50IGluc3RlYWQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIGEgR2FtZSBPYmplY3QgdXNpbmc6IGBnYW1lT2JqZWN0Lm9uKCdkcmFnb3ZlcicsIGxpc3RlbmVyKWAuXHJcbiAqIE5vdGUgdGhhdCB0aGUgc2NvcGUgb2YgdGhlIGxpc3RlbmVyIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIGJlIHRoZSBHYW1lIE9iamVjdCBpbnN0YW5jZSBpdHNlbGYuXHJcbiAqIFxyXG4gKiBUbyByZWNlaXZlIHRoaXMgZXZlbnQsIHRoZSBHYW1lIE9iamVjdCBtdXN0IGhhdmUgYmVlbiBzZXQgYXMgaW50ZXJhY3RpdmUgYW5kIGVuYWJsZWQgZm9yIGRyYWcuXHJcbiAqIFNlZSBbR2FtZU9iamVjdC5zZXRJbnRlcmFjdGl2ZV17QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Qjc2V0SW50ZXJhY3RpdmV9IGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfRFJBR19PVkVSXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHJlc3BvbnNpYmxlIGZvciB0cmlnZ2VyaW5nIHRoaXMgZXZlbnQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IHRhcmdldCAtIFRoZSBkcmFnIHRhcmdldCB0aGF0IHRoaXMgcG9pbnRlciBoYXMgbW92ZWQgb3Zlci5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2RyYWdvdmVyJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_OVER_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_START_EVENT.js":
/*!*****************************************************************************!*\
!*** ./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_START_EVENT.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Drag Start Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer starts to drag it.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('dragstart', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive and enabled for drag.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * There are lots of useful drag related properties that are set within the Game Object when dragging occurs.\r\n * For example, `gameObject.input.dragStartX`, `dragStartY` and so on.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_DRAG_START\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {number} dragX - The x coordinate where the Pointer is currently dragging the Game Object, in world space.\r\n * @param {number} dragY - The y coordinate where the Pointer is currently dragging the Game Object, in world space.\r\n */\r\nmodule.exports = 'dragstart';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9EUkFHX1NUQVJUX0VWRU5ULmpzP2M4YjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxtREFBbUQ7QUFDdEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9EUkFHX1NUQVJUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgT2JqZWN0IERyYWcgU3RhcnQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYW4gaW50ZXJhY3RpdmUgR2FtZSBPYmplY3QgaWYgYSBwb2ludGVyIHN0YXJ0cyB0byBkcmFnIGl0LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSBhIEdhbWUgT2JqZWN0IHVzaW5nOiBgZ2FtZU9iamVjdC5vbignZHJhZ3N0YXJ0JywgbGlzdGVuZXIpYC5cclxuICogTm90ZSB0aGF0IHRoZSBzY29wZSBvZiB0aGUgbGlzdGVuZXIgaXMgYXV0b21hdGljYWxseSBzZXQgdG8gYmUgdGhlIEdhbWUgT2JqZWN0IGluc3RhbmNlIGl0c2VsZi5cclxuICogXHJcbiAqIFRvIHJlY2VpdmUgdGhpcyBldmVudCwgdGhlIEdhbWUgT2JqZWN0IG11c3QgaGF2ZSBiZWVuIHNldCBhcyBpbnRlcmFjdGl2ZSBhbmQgZW5hYmxlZCBmb3IgZHJhZy5cclxuICogU2VlIFtHYW1lT2JqZWN0LnNldEludGVyYWN0aXZlXXtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNzZXRJbnRlcmFjdGl2ZX0gZm9yIG1vcmUgZGV0YWlscy5cclxuICogXHJcbiAqIFRoZXJlIGFyZSBsb3RzIG9mIHVzZWZ1bCBkcmFnIHJlbGF0ZWQgcHJvcGVydGllcyB0aGF0IGFyZSBzZXQgd2l0aGluIHRoZSBHYW1lIE9iamVjdCB3aGVuIGRyYWdnaW5nIG9jY3Vycy5cclxuICogRm9yIGV4YW1wbGUsIGBnYW1lT2JqZWN0LmlucHV0LmRyYWdTdGFydFhgLCBgZHJhZ1N0YXJ0WWAgYW5kIHNvIG9uLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FT0JKRUNUX0RSQUdfU1RBUlRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGRyYWdYIC0gVGhlIHggY29vcmRpbmF0ZSB3aGVyZSB0aGUgUG9pbnRlciBpcyBjdXJyZW50bHkgZHJhZ2dpbmcgdGhlIEdhbWUgT2JqZWN0LCBpbiB3b3JsZCBzcGFjZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IGRyYWdZIC0gVGhlIHkgY29vcmRpbmF0ZSB3aGVyZSB0aGUgUG9pbnRlciBpcyBjdXJyZW50bHkgZHJhZ2dpbmcgdGhlIEdhbWUgT2JqZWN0LCBpbiB3b3JsZCBzcGFjZS5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2RyYWdzdGFydCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_START_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_DROP_EVENT.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/src/input/events/GAMEOBJECT_DROP_EVENT.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Drop Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer drops it on a Drag Target.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('drop', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive and enabled for drag.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_DROP\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} target - The Drag Target the `gameObject` has been dropped on.\r\n */\r\nmodule.exports = 'drop';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9EUk9QX0VWRU5ULmpzPzhkNzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxtREFBbUQ7QUFDdEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLDhCQUE4QjtBQUN6QztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL0dBTUVPQkpFQ1RfRFJPUF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIE9iamVjdCBEcm9wIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGFuIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0IGlmIGEgcG9pbnRlciBkcm9wcyBpdCBvbiBhIERyYWcgVGFyZ2V0LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSBhIEdhbWUgT2JqZWN0IHVzaW5nOiBgZ2FtZU9iamVjdC5vbignZHJvcCcsIGxpc3RlbmVyKWAuXHJcbiAqIE5vdGUgdGhhdCB0aGUgc2NvcGUgb2YgdGhlIGxpc3RlbmVyIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIGJlIHRoZSBHYW1lIE9iamVjdCBpbnN0YW5jZSBpdHNlbGYuXHJcbiAqIFxyXG4gKiBUbyByZWNlaXZlIHRoaXMgZXZlbnQsIHRoZSBHYW1lIE9iamVjdCBtdXN0IGhhdmUgYmVlbiBzZXQgYXMgaW50ZXJhY3RpdmUgYW5kIGVuYWJsZWQgZm9yIGRyYWcuXHJcbiAqIFNlZSBbR2FtZU9iamVjdC5zZXRJbnRlcmFjdGl2ZV17QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Qjc2V0SW50ZXJhY3RpdmV9IGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfRFJPUFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSB0YXJnZXQgLSBUaGUgRHJhZyBUYXJnZXQgdGhlIGBnYW1lT2JqZWN0YCBoYXMgYmVlbiBkcm9wcGVkIG9uLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZHJvcCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_DROP_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_MOVE_EVENT.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/src/input/events/GAMEOBJECT_MOVE_EVENT.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Move Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer is moved across _any_ interactive Game Object.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('gameobjectmove', listener)`.\r\n * \r\n * To receive this event, the Game Objects must have been set as interactive.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_POINTER_MOVE]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_MOVE} event instead.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_MOVE]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_MOVE}\r\n * 2. [GAMEOBJECT_MOVE]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_MOVE}\r\n * 3. [POINTER_MOVE]{@linkcode Phaser.Input.Events#event:POINTER_MOVE}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_MOVE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object the pointer was moved on.\r\n * @param {Phaser.Types.Input.EventData} event - The Phaser input event. You can call `stopPropagation()` to halt it from going any further in the event flow.\r\n */\r\nmodule.exports = 'gameobjectmove';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9NT1ZFX0VWRU5ULmpzP2JlN2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsbURBQW1EO0FBQ3RGO0FBQ0EsNkZBQTZGLDREQUE0RDtBQUN6SjtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEMsd0JBQXdCO0FBQ3hCLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsNkJBQTZCO0FBQ3hDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9NT1ZFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgT2JqZWN0IE1vdmUgSW5wdXQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIElucHV0IFBsdWdpbiBiZWxvbmdpbmcgdG8gYSBTY2VuZSBpZiBhIHBvaW50ZXIgaXMgbW92ZWQgYWNyb3NzIF9hbnlfIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMuaW5wdXQub24oJ2dhbWVvYmplY3Rtb3ZlJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIFRvIHJlY2VpdmUgdGhpcyBldmVudCwgdGhlIEdhbWUgT2JqZWN0cyBtdXN0IGhhdmUgYmVlbiBzZXQgYXMgaW50ZXJhY3RpdmUuXHJcbiAqIFNlZSBbR2FtZU9iamVjdC5zZXRJbnRlcmFjdGl2ZV17QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Qjc2V0SW50ZXJhY3RpdmV9IGZvciBtb3JlIGRldGFpbHMuXHJcbiAqIFxyXG4gKiBUbyBsaXN0ZW4gZm9yIHRoaXMgZXZlbnQgZnJvbSBhIF9zcGVjaWZpY18gR2FtZSBPYmplY3QsIHVzZSB0aGUgW0dBTUVPQkpFQ1RfUE9JTlRFUl9NT1ZFXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1BPSU5URVJfTU9WRX0gZXZlbnQgaW5zdGVhZC5cclxuICogXHJcbiAqIFRoZSBldmVudCBoaWVyYXJjaHkgaXMgYXMgZm9sbG93czpcclxuICogXHJcbiAqIDEuIFtHQU1FT0JKRUNUX1BPSU5URVJfTU9WRV17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6R0FNRU9CSkVDVF9QT0lOVEVSX01PVkV9XHJcbiAqIDIuIFtHQU1FT0JKRUNUX01PVkVde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfTU9WRX1cclxuICogMy4gW1BPSU5URVJfTU9WRV17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6UE9JTlRFUl9NT1ZFfVxyXG4gKiBcclxuICogV2l0aCB0aGUgdG9wIGV2ZW50IGJlaW5nIGRpc3BhdGNoZWQgZmlyc3QgYW5kIHRoZW4gZmxvd2luZyBkb3duIHRoZSBsaXN0LiBOb3RlIHRoYXQgaGlnaGVyLXVwIGV2ZW50IGhhbmRsZXJzIGNhbiBzdG9wXHJcbiAqIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGlzIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FT0JKRUNUX01PVkVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0aGUgcG9pbnRlciB3YXMgbW92ZWQgb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLklucHV0LkV2ZW50RGF0YX0gZXZlbnQgLSBUaGUgUGhhc2VyIGlucHV0IGV2ZW50LiBZb3UgY2FuIGNhbGwgYHN0b3BQcm9wYWdhdGlvbigpYCB0byBoYWx0IGl0IGZyb20gZ29pbmcgYW55IGZ1cnRoZXIgaW4gdGhlIGV2ZW50IGZsb3cuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdnYW1lb2JqZWN0bW92ZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_MOVE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_OUT_EVENT.js":
/*!**********************************************************************!*\
!*** ./node_modules/phaser/src/input/events/GAMEOBJECT_OUT_EVENT.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Out Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer moves out of _any_ interactive Game Object.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('gameobjectout', listener)`.\r\n * \r\n * To receive this event, the Game Objects must have been set as interactive.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_POINTER_OUT]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_OUT} event instead.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_OUT]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_OUT}\r\n * 2. [GAMEOBJECT_OUT]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_OUT}\r\n * 3. [POINTER_OUT]{@linkcode Phaser.Input.Events#event:POINTER_OUT}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_OUT\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object the pointer moved out of.\r\n * @param {Phaser.Types.Input.EventData} event - The Phaser input event. You can call `stopPropagation()` to halt it from going any further in the event flow.\r\n */\r\nmodule.exports = 'gameobjectout';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9PVVRfRVZFTlQuanM/ZTQyOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxtREFBbUQ7QUFDdEY7QUFDQSw0RkFBNEYsMkRBQTJEO0FBQ3ZKO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQix1QkFBdUI7QUFDdkIsb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyw2QkFBNkI7QUFDeEM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9HQU1FT0JKRUNUX09VVF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIE9iamVjdCBPdXQgSW5wdXQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIElucHV0IFBsdWdpbiBiZWxvbmdpbmcgdG8gYSBTY2VuZSBpZiBhIHBvaW50ZXIgbW92ZXMgb3V0IG9mIF9hbnlfIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMuaW5wdXQub24oJ2dhbWVvYmplY3RvdXQnLCBsaXN0ZW5lcilgLlxyXG4gKiBcclxuICogVG8gcmVjZWl2ZSB0aGlzIGV2ZW50LCB0aGUgR2FtZSBPYmplY3RzIG11c3QgaGF2ZSBiZWVuIHNldCBhcyBpbnRlcmFjdGl2ZS5cclxuICogU2VlIFtHYW1lT2JqZWN0LnNldEludGVyYWN0aXZlXXtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNzZXRJbnRlcmFjdGl2ZX0gZm9yIG1vcmUgZGV0YWlscy5cclxuICogXHJcbiAqIFRvIGxpc3RlbiBmb3IgdGhpcyBldmVudCBmcm9tIGEgX3NwZWNpZmljXyBHYW1lIE9iamVjdCwgdXNlIHRoZSBbR0FNRU9CSkVDVF9QT0lOVEVSX09VVF17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6R0FNRU9CSkVDVF9QT0lOVEVSX09VVH0gZXZlbnQgaW5zdGVhZC5cclxuICogXHJcbiAqIFRoZSBldmVudCBoaWVyYXJjaHkgaXMgYXMgZm9sbG93czpcclxuICogXHJcbiAqIDEuIFtHQU1FT0JKRUNUX1BPSU5URVJfT1VUXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1BPSU5URVJfT1VUfVxyXG4gKiAyLiBbR0FNRU9CSkVDVF9PVVRde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfT1VUfVxyXG4gKiAzLiBbUE9JTlRFUl9PVVRde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OlBPSU5URVJfT1VUfVxyXG4gKiBcclxuICogV2l0aCB0aGUgdG9wIGV2ZW50IGJlaW5nIGRpc3BhdGNoZWQgZmlyc3QgYW5kIHRoZW4gZmxvd2luZyBkb3duIHRoZSBsaXN0LiBOb3RlIHRoYXQgaGlnaGVyLXVwIGV2ZW50IGhhbmRsZXJzIGNhbiBzdG9wXHJcbiAqIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGlzIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FT0JKRUNUX09VVFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoZSBwb2ludGVyIG1vdmVkIG91dCBvZi5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuSW5wdXQuRXZlbnREYXRhfSBldmVudCAtIFRoZSBQaGFzZXIgaW5wdXQgZXZlbnQuIFlvdSBjYW4gY2FsbCBgc3RvcFByb3BhZ2F0aW9uKClgIHRvIGhhbHQgaXQgZnJvbSBnb2luZyBhbnkgZnVydGhlciBpbiB0aGUgZXZlbnQgZmxvdy5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2dhbWVvYmplY3RvdXQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_OUT_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_OVER_EVENT.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/src/input/events/GAMEOBJECT_OVER_EVENT.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Over Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer moves over _any_ interactive Game Object.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('gameobjectover', listener)`.\r\n * \r\n * To receive this event, the Game Objects must have been set as interactive.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_POINTER_OVER]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_OVER} event instead.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_OVER]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_OVER}\r\n * 2. [GAMEOBJECT_OVER]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_OVER}\r\n * 3. [POINTER_OVER]{@linkcode Phaser.Input.Events#event:POINTER_OVER}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_OVER\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object the pointer moved over.\r\n * @param {Phaser.Types.Input.EventData} event - The Phaser input event. You can call `stopPropagation()` to halt it from going any further in the event flow.\r\n */\r\nmodule.exports = 'gameobjectover';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9PVkVSX0VWRU5ULmpzP2M0ZTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsbURBQW1EO0FBQ3RGO0FBQ0EsNkZBQTZGLDREQUE0RDtBQUN6SjtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEMsd0JBQXdCO0FBQ3hCLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsNkJBQTZCO0FBQ3hDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9PVkVSX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgT2JqZWN0IE92ZXIgSW5wdXQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIElucHV0IFBsdWdpbiBiZWxvbmdpbmcgdG8gYSBTY2VuZSBpZiBhIHBvaW50ZXIgbW92ZXMgb3ZlciBfYW55XyBpbnRlcmFjdGl2ZSBHYW1lIE9iamVjdC5cclxuICogXHJcbiAqIExpc3RlbiB0byB0aGlzIGV2ZW50IGZyb20gd2l0aGluIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmlucHV0Lm9uKCdnYW1lb2JqZWN0b3ZlcicsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBUbyByZWNlaXZlIHRoaXMgZXZlbnQsIHRoZSBHYW1lIE9iamVjdHMgbXVzdCBoYXZlIGJlZW4gc2V0IGFzIGludGVyYWN0aXZlLlxyXG4gKiBTZWUgW0dhbWVPYmplY3Quc2V0SW50ZXJhY3RpdmVde0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I3NldEludGVyYWN0aXZlfSBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKiBcclxuICogVG8gbGlzdGVuIGZvciB0aGlzIGV2ZW50IGZyb20gYSBfc3BlY2lmaWNfIEdhbWUgT2JqZWN0LCB1c2UgdGhlIFtHQU1FT0JKRUNUX1BPSU5URVJfT1ZFUl17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6R0FNRU9CSkVDVF9QT0lOVEVSX09WRVJ9IGV2ZW50IGluc3RlYWQuXHJcbiAqIFxyXG4gKiBUaGUgZXZlbnQgaGllcmFyY2h5IGlzIGFzIGZvbGxvd3M6XHJcbiAqIFxyXG4gKiAxLiBbR0FNRU9CSkVDVF9QT0lOVEVSX09WRVJde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfUE9JTlRFUl9PVkVSfVxyXG4gKiAyLiBbR0FNRU9CSkVDVF9PVkVSXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX09WRVJ9XHJcbiAqIDMuIFtQT0lOVEVSX09WRVJde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OlBPSU5URVJfT1ZFUn1cclxuICogXHJcbiAqIFdpdGggdGhlIHRvcCBldmVudCBiZWluZyBkaXNwYXRjaGVkIGZpcnN0IGFuZCB0aGVuIGZsb3dpbmcgZG93biB0aGUgbGlzdC4gTm90ZSB0aGF0IGhpZ2hlci11cCBldmVudCBoYW5kbGVycyBjYW4gc3RvcFxyXG4gKiB0aGUgcHJvcGFnYXRpb24gb2YgdGhpcyBldmVudC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRU9CSkVDVF9PVkVSXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHJlc3BvbnNpYmxlIGZvciB0cmlnZ2VyaW5nIHRoaXMgZXZlbnQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3R9IGdhbWVPYmplY3QgLSBUaGUgR2FtZSBPYmplY3QgdGhlIHBvaW50ZXIgbW92ZWQgb3Zlci5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuSW5wdXQuRXZlbnREYXRhfSBldmVudCAtIFRoZSBQaGFzZXIgaW5wdXQgZXZlbnQuIFlvdSBjYW4gY2FsbCBgc3RvcFByb3BhZ2F0aW9uKClgIHRvIGhhbHQgaXQgZnJvbSBnb2luZyBhbnkgZnVydGhlciBpbiB0aGUgZXZlbnQgZmxvdy5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2dhbWVvYmplY3RvdmVyJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_OVER_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_DOWN_EVENT.js":
/*!*******************************************************************************!*\
!*** ./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_DOWN_EVENT.js ***!
\*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Pointer Down Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer is pressed down on it.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('pointerdown', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_DOWN]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_DOWN}\r\n * 2. [GAMEOBJECT_DOWN]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_DOWN}\r\n * 3. [POINTER_DOWN]{@linkcode Phaser.Input.Events#event:POINTER_DOWN} or [POINTER_DOWN_OUTSIDE]{@linkcode Phaser.Input.Events#event:POINTER_DOWN_OUTSIDE}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_POINTER_DOWN\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {number} localX - The x coordinate that the Pointer interacted with this object on, relative to the Game Object's top-left position.\r\n * @param {number} localY - The y coordinate that the Pointer interacted with this object on, relative to the Game Object's top-left position.\r\n * @param {Phaser.Types.Input.EventData} event - The Phaser input event. You can call `stopPropagation()` to halt it from going any further in the event flow.\r\n */\r\nmodule.exports = 'pointerdown';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9QT0lOVEVSX0RPV05fRVZFTlQuanM/ODczZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLG1EQUFtRDtBQUN0RjtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEMsd0JBQXdCO0FBQ3hCLHFCQUFxQixpREFBaUQsMkJBQTJCO0FBQ2pHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLDZCQUE2QjtBQUN4QztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL0dBTUVPQkpFQ1RfUE9JTlRFUl9ET1dOX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgT2JqZWN0IFBvaW50ZXIgRG93biBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhbiBpbnRlcmFjdGl2ZSBHYW1lIE9iamVjdCBpZiBhIHBvaW50ZXIgaXMgcHJlc3NlZCBkb3duIG9uIGl0LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSBhIEdhbWUgT2JqZWN0IHVzaW5nOiBgZ2FtZU9iamVjdC5vbigncG9pbnRlcmRvd24nLCBsaXN0ZW5lcilgLlxyXG4gKiBOb3RlIHRoYXQgdGhlIHNjb3BlIG9mIHRoZSBsaXN0ZW5lciBpcyBhdXRvbWF0aWNhbGx5IHNldCB0byBiZSB0aGUgR2FtZSBPYmplY3QgaW5zdGFuY2UgaXRzZWxmLlxyXG4gKiBcclxuICogVG8gcmVjZWl2ZSB0aGlzIGV2ZW50LCB0aGUgR2FtZSBPYmplY3QgbXVzdCBoYXZlIGJlZW4gc2V0IGFzIGludGVyYWN0aXZlLlxyXG4gKiBTZWUgW0dhbWVPYmplY3Quc2V0SW50ZXJhY3RpdmVde0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I3NldEludGVyYWN0aXZlfSBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKiBcclxuICogVGhlIGV2ZW50IGhpZXJhcmNoeSBpcyBhcyBmb2xsb3dzOlxyXG4gKiBcclxuICogMS4gW0dBTUVPQkpFQ1RfUE9JTlRFUl9ET1dOXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1BPSU5URVJfRE9XTn1cclxuICogMi4gW0dBTUVPQkpFQ1RfRE9XTl17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6R0FNRU9CSkVDVF9ET1dOfVxyXG4gKiAzLiBbUE9JTlRFUl9ET1dOXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpQT0lOVEVSX0RPV059IG9yIFtQT0lOVEVSX0RPV05fT1VUU0lERV17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6UE9JTlRFUl9ET1dOX09VVFNJREV9XHJcbiAqIFxyXG4gKiBXaXRoIHRoZSB0b3AgZXZlbnQgYmVpbmcgZGlzcGF0Y2hlZCBmaXJzdCBhbmQgdGhlbiBmbG93aW5nIGRvd24gdGhlIGxpc3QuIE5vdGUgdGhhdCBoaWdoZXItdXAgZXZlbnQgaGFuZGxlcnMgY2FuIHN0b3BcclxuICogdGhlIHByb3BhZ2F0aW9uIG9mIHRoaXMgZXZlbnQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfUE9JTlRFUl9ET1dOXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHJlc3BvbnNpYmxlIGZvciB0cmlnZ2VyaW5nIHRoaXMgZXZlbnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb2NhbFggLSBUaGUgeCBjb29yZGluYXRlIHRoYXQgdGhlIFBvaW50ZXIgaW50ZXJhY3RlZCB3aXRoIHRoaXMgb2JqZWN0IG9uLCByZWxhdGl2ZSB0byB0aGUgR2FtZSBPYmplY3QncyB0b3AtbGVmdCBwb3NpdGlvbi5cclxuICogQHBhcmFtIHtudW1iZXJ9IGxvY2FsWSAtIFRoZSB5IGNvb3JkaW5hdGUgdGhhdCB0aGUgUG9pbnRlciBpbnRlcmFjdGVkIHdpdGggdGhpcyBvYmplY3Qgb24sIHJlbGF0aXZlIHRvIHRoZSBHYW1lIE9iamVjdCdzIHRvcC1sZWZ0IHBvc2l0aW9uLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5FdmVudERhdGF9IGV2ZW50IC0gVGhlIFBoYXNlciBpbnB1dCBldmVudC4gWW91IGNhbiBjYWxsIGBzdG9wUHJvcGFnYXRpb24oKWAgdG8gaGFsdCBpdCBmcm9tIGdvaW5nIGFueSBmdXJ0aGVyIGluIHRoZSBldmVudCBmbG93LlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAncG9pbnRlcmRvd24nO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_DOWN_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_MOVE_EVENT.js":
/*!*******************************************************************************!*\
!*** ./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_MOVE_EVENT.js ***!
\*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Pointer Move Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer is moved while over it.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('pointermove', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_MOVE]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_MOVE}\r\n * 2. [GAMEOBJECT_MOVE]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_MOVE}\r\n * 3. [POINTER_MOVE]{@linkcode Phaser.Input.Events#event:POINTER_MOVE}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_POINTER_MOVE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {number} localX - The x coordinate that the Pointer interacted with this object on, relative to the Game Object's top-left position.\r\n * @param {number} localY - The y coordinate that the Pointer interacted with this object on, relative to the Game Object's top-left position.\r\n * @param {Phaser.Types.Input.EventData} event - The Phaser input event. You can call `stopPropagation()` to halt it from going any further in the event flow.\r\n */\r\nmodule.exports = 'pointermove';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9QT0lOVEVSX01PVkVfRVZFTlQuanM/M2U4NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLG1EQUFtRDtBQUN0RjtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEMsd0JBQXdCO0FBQ3hCLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyw2QkFBNkI7QUFDeEM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9HQU1FT0JKRUNUX1BPSU5URVJfTU9WRV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIE9iamVjdCBQb2ludGVyIE1vdmUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYW4gaW50ZXJhY3RpdmUgR2FtZSBPYmplY3QgaWYgYSBwb2ludGVyIGlzIG1vdmVkIHdoaWxlIG92ZXIgaXQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIGEgR2FtZSBPYmplY3QgdXNpbmc6IGBnYW1lT2JqZWN0Lm9uKCdwb2ludGVybW92ZScsIGxpc3RlbmVyKWAuXHJcbiAqIE5vdGUgdGhhdCB0aGUgc2NvcGUgb2YgdGhlIGxpc3RlbmVyIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIGJlIHRoZSBHYW1lIE9iamVjdCBpbnN0YW5jZSBpdHNlbGYuXHJcbiAqIFxyXG4gKiBUbyByZWNlaXZlIHRoaXMgZXZlbnQsIHRoZSBHYW1lIE9iamVjdCBtdXN0IGhhdmUgYmVlbiBzZXQgYXMgaW50ZXJhY3RpdmUuXHJcbiAqIFNlZSBbR2FtZU9iamVjdC5zZXRJbnRlcmFjdGl2ZV17QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Qjc2V0SW50ZXJhY3RpdmV9IGZvciBtb3JlIGRldGFpbHMuXHJcbiAqIFxyXG4gKiBUaGUgZXZlbnQgaGllcmFyY2h5IGlzIGFzIGZvbGxvd3M6XHJcbiAqIFxyXG4gKiAxLiBbR0FNRU9CSkVDVF9QT0lOVEVSX01PVkVde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfUE9JTlRFUl9NT1ZFfVxyXG4gKiAyLiBbR0FNRU9CSkVDVF9NT1ZFXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX01PVkV9XHJcbiAqIDMuIFtQT0lOVEVSX01PVkVde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OlBPSU5URVJfTU9WRX1cclxuICogXHJcbiAqIFdpdGggdGhlIHRvcCBldmVudCBiZWluZyBkaXNwYXRjaGVkIGZpcnN0IGFuZCB0aGVuIGZsb3dpbmcgZG93biB0aGUgbGlzdC4gTm90ZSB0aGF0IGhpZ2hlci11cCBldmVudCBoYW5kbGVycyBjYW4gc3RvcFxyXG4gKiB0aGUgcHJvcGFnYXRpb24gb2YgdGhpcyBldmVudC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRU9CSkVDVF9QT0lOVEVSX01PVkVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGxvY2FsWCAtIFRoZSB4IGNvb3JkaW5hdGUgdGhhdCB0aGUgUG9pbnRlciBpbnRlcmFjdGVkIHdpdGggdGhpcyBvYmplY3Qgb24sIHJlbGF0aXZlIHRvIHRoZSBHYW1lIE9iamVjdCdzIHRvcC1sZWZ0IHBvc2l0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gbG9jYWxZIC0gVGhlIHkgY29vcmRpbmF0ZSB0aGF0IHRoZSBQb2ludGVyIGludGVyYWN0ZWQgd2l0aCB0aGlzIG9iamVjdCBvbiwgcmVsYXRpdmUgdG8gdGhlIEdhbWUgT2JqZWN0J3MgdG9wLWxlZnQgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLklucHV0LkV2ZW50RGF0YX0gZXZlbnQgLSBUaGUgUGhhc2VyIGlucHV0IGV2ZW50LiBZb3UgY2FuIGNhbGwgYHN0b3BQcm9wYWdhdGlvbigpYCB0byBoYWx0IGl0IGZyb20gZ29pbmcgYW55IGZ1cnRoZXIgaW4gdGhlIGV2ZW50IGZsb3cuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwb2ludGVybW92ZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_MOVE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_OUT_EVENT.js":
/*!******************************************************************************!*\
!*** ./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_OUT_EVENT.js ***!
\******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Pointer Out Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer moves out of it.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('pointerout', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_OUT]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_OUT}\r\n * 2. [GAMEOBJECT_OUT]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_OUT}\r\n * 3. [POINTER_OUT]{@linkcode Phaser.Input.Events#event:POINTER_OUT}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_POINTER_OUT\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.Types.Input.EventData} event - The Phaser input event. You can call `stopPropagation()` to halt it from going any further in the event flow.\r\n */\r\nmodule.exports = 'pointerout';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9QT0lOVEVSX09VVF9FVkVOVC5qcz9hMTc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsbURBQW1EO0FBQ3RGO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQix1QkFBdUI7QUFDdkIsb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyw2QkFBNkI7QUFDeEM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9HQU1FT0JKRUNUX1BPSU5URVJfT1VUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWUgT2JqZWN0IFBvaW50ZXIgT3V0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGFuIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0IGlmIGEgcG9pbnRlciBtb3ZlcyBvdXQgb2YgaXQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIGEgR2FtZSBPYmplY3QgdXNpbmc6IGBnYW1lT2JqZWN0Lm9uKCdwb2ludGVyb3V0JywgbGlzdGVuZXIpYC5cclxuICogTm90ZSB0aGF0IHRoZSBzY29wZSBvZiB0aGUgbGlzdGVuZXIgaXMgYXV0b21hdGljYWxseSBzZXQgdG8gYmUgdGhlIEdhbWUgT2JqZWN0IGluc3RhbmNlIGl0c2VsZi5cclxuICogXHJcbiAqIFRvIHJlY2VpdmUgdGhpcyBldmVudCwgdGhlIEdhbWUgT2JqZWN0IG11c3QgaGF2ZSBiZWVuIHNldCBhcyBpbnRlcmFjdGl2ZS5cclxuICogU2VlIFtHYW1lT2JqZWN0LnNldEludGVyYWN0aXZlXXtAbGluayBQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdCNzZXRJbnRlcmFjdGl2ZX0gZm9yIG1vcmUgZGV0YWlscy5cclxuICogXHJcbiAqIFRoZSBldmVudCBoaWVyYXJjaHkgaXMgYXMgZm9sbG93czpcclxuICogXHJcbiAqIDEuIFtHQU1FT0JKRUNUX1BPSU5URVJfT1VUXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1BPSU5URVJfT1VUfVxyXG4gKiAyLiBbR0FNRU9CSkVDVF9PVVRde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfT1VUfVxyXG4gKiAzLiBbUE9JTlRFUl9PVVRde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OlBPSU5URVJfT1VUfVxyXG4gKiBcclxuICogV2l0aCB0aGUgdG9wIGV2ZW50IGJlaW5nIGRpc3BhdGNoZWQgZmlyc3QgYW5kIHRoZW4gZmxvd2luZyBkb3duIHRoZSBsaXN0LiBOb3RlIHRoYXQgaGlnaGVyLXVwIGV2ZW50IGhhbmRsZXJzIGNhbiBzdG9wXHJcbiAqIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGlzIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FT0JKRUNUX1BPSU5URVJfT1VUXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHJlc3BvbnNpYmxlIGZvciB0cmlnZ2VyaW5nIHRoaXMgZXZlbnQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLklucHV0LkV2ZW50RGF0YX0gZXZlbnQgLSBUaGUgUGhhc2VyIGlucHV0IGV2ZW50LiBZb3UgY2FuIGNhbGwgYHN0b3BQcm9wYWdhdGlvbigpYCB0byBoYWx0IGl0IGZyb20gZ29pbmcgYW55IGZ1cnRoZXIgaW4gdGhlIGV2ZW50IGZsb3cuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwb2ludGVyb3V0JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_OUT_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_OVER_EVENT.js":
/*!*******************************************************************************!*\
!*** ./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_OVER_EVENT.js ***!
\*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Pointer Over Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer moves over it.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('pointerover', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_OVER]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_OVER}\r\n * 2. [GAMEOBJECT_OVER]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_OVER}\r\n * 3. [POINTER_OVER]{@linkcode Phaser.Input.Events#event:POINTER_OVER}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_POINTER_OVER\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {number} localX - The x coordinate that the Pointer interacted with this object on, relative to the Game Object's top-left position.\r\n * @param {number} localY - The y coordinate that the Pointer interacted with this object on, relative to the Game Object's top-left position.\r\n * @param {Phaser.Types.Input.EventData} event - The Phaser input event. You can call `stopPropagation()` to halt it from going any further in the event flow.\r\n */\r\nmodule.exports = 'pointerover';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9QT0lOVEVSX09WRVJfRVZFTlQuanM/YmNiZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLG1EQUFtRDtBQUN0RjtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEMsd0JBQXdCO0FBQ3hCLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyw2QkFBNkI7QUFDeEM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9HQU1FT0JKRUNUX1BPSU5URVJfT1ZFUl9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIE9iamVjdCBQb2ludGVyIE92ZXIgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgYW4gaW50ZXJhY3RpdmUgR2FtZSBPYmplY3QgaWYgYSBwb2ludGVyIG1vdmVzIG92ZXIgaXQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIGEgR2FtZSBPYmplY3QgdXNpbmc6IGBnYW1lT2JqZWN0Lm9uKCdwb2ludGVyb3ZlcicsIGxpc3RlbmVyKWAuXHJcbiAqIE5vdGUgdGhhdCB0aGUgc2NvcGUgb2YgdGhlIGxpc3RlbmVyIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIGJlIHRoZSBHYW1lIE9iamVjdCBpbnN0YW5jZSBpdHNlbGYuXHJcbiAqIFxyXG4gKiBUbyByZWNlaXZlIHRoaXMgZXZlbnQsIHRoZSBHYW1lIE9iamVjdCBtdXN0IGhhdmUgYmVlbiBzZXQgYXMgaW50ZXJhY3RpdmUuXHJcbiAqIFNlZSBbR2FtZU9iamVjdC5zZXRJbnRlcmFjdGl2ZV17QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Qjc2V0SW50ZXJhY3RpdmV9IGZvciBtb3JlIGRldGFpbHMuXHJcbiAqIFxyXG4gKiBUaGUgZXZlbnQgaGllcmFyY2h5IGlzIGFzIGZvbGxvd3M6XHJcbiAqIFxyXG4gKiAxLiBbR0FNRU9CSkVDVF9QT0lOVEVSX09WRVJde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfUE9JTlRFUl9PVkVSfVxyXG4gKiAyLiBbR0FNRU9CSkVDVF9PVkVSXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX09WRVJ9XHJcbiAqIDMuIFtQT0lOVEVSX09WRVJde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OlBPSU5URVJfT1ZFUn1cclxuICogXHJcbiAqIFdpdGggdGhlIHRvcCBldmVudCBiZWluZyBkaXNwYXRjaGVkIGZpcnN0IGFuZCB0aGVuIGZsb3dpbmcgZG93biB0aGUgbGlzdC4gTm90ZSB0aGF0IGhpZ2hlci11cCBldmVudCBoYW5kbGVycyBjYW4gc3RvcFxyXG4gKiB0aGUgcHJvcGFnYXRpb24gb2YgdGhpcyBldmVudC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRU9CSkVDVF9QT0lOVEVSX09WRVJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGxvY2FsWCAtIFRoZSB4IGNvb3JkaW5hdGUgdGhhdCB0aGUgUG9pbnRlciBpbnRlcmFjdGVkIHdpdGggdGhpcyBvYmplY3Qgb24sIHJlbGF0aXZlIHRvIHRoZSBHYW1lIE9iamVjdCdzIHRvcC1sZWZ0IHBvc2l0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gbG9jYWxZIC0gVGhlIHkgY29vcmRpbmF0ZSB0aGF0IHRoZSBQb2ludGVyIGludGVyYWN0ZWQgd2l0aCB0aGlzIG9iamVjdCBvbiwgcmVsYXRpdmUgdG8gdGhlIEdhbWUgT2JqZWN0J3MgdG9wLWxlZnQgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLklucHV0LkV2ZW50RGF0YX0gZXZlbnQgLSBUaGUgUGhhc2VyIGlucHV0IGV2ZW50LiBZb3UgY2FuIGNhbGwgYHN0b3BQcm9wYWdhdGlvbigpYCB0byBoYWx0IGl0IGZyb20gZ29pbmcgYW55IGZ1cnRoZXIgaW4gdGhlIGV2ZW50IGZsb3cuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwb2ludGVyb3Zlcic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_OVER_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_UP_EVENT.js":
/*!*****************************************************************************!*\
!*** ./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_UP_EVENT.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Pointer Up Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer is released while over it.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('pointerup', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_UP]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_UP}\r\n * 2. [GAMEOBJECT_UP]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_UP}\r\n * 3. [POINTER_UP]{@linkcode Phaser.Input.Events#event:POINTER_UP} or [POINTER_UP_OUTSIDE]{@linkcode Phaser.Input.Events#event:POINTER_UP_OUTSIDE}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_POINTER_UP\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {number} localX - The x coordinate that the Pointer interacted with this object on, relative to the Game Object's top-left position.\r\n * @param {number} localY - The y coordinate that the Pointer interacted with this object on, relative to the Game Object's top-left position.\r\n * @param {Phaser.Types.Input.EventData} event - The Phaser input event. You can call `stopPropagation()` to halt it from going any further in the event flow.\r\n */\r\nmodule.exports = 'pointerup';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9QT0lOVEVSX1VQX0VWRU5ULmpzP2ZiZmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxtREFBbUQ7QUFDdEY7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCLHNCQUFzQjtBQUN0QixtQkFBbUIsK0NBQStDLHlCQUF5QjtBQUMzRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyw2QkFBNkI7QUFDeEM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9HQU1FT0JKRUNUX1BPSU5URVJfVVBfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgR2FtZSBPYmplY3QgUG9pbnRlciBVcCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhbiBpbnRlcmFjdGl2ZSBHYW1lIE9iamVjdCBpZiBhIHBvaW50ZXIgaXMgcmVsZWFzZWQgd2hpbGUgb3ZlciBpdC5cclxuICogXHJcbiAqIExpc3RlbiB0byB0aGlzIGV2ZW50IGZyb20gYSBHYW1lIE9iamVjdCB1c2luZzogYGdhbWVPYmplY3Qub24oJ3BvaW50ZXJ1cCcsIGxpc3RlbmVyKWAuXHJcbiAqIE5vdGUgdGhhdCB0aGUgc2NvcGUgb2YgdGhlIGxpc3RlbmVyIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIGJlIHRoZSBHYW1lIE9iamVjdCBpbnN0YW5jZSBpdHNlbGYuXHJcbiAqIFxyXG4gKiBUbyByZWNlaXZlIHRoaXMgZXZlbnQsIHRoZSBHYW1lIE9iamVjdCBtdXN0IGhhdmUgYmVlbiBzZXQgYXMgaW50ZXJhY3RpdmUuXHJcbiAqIFNlZSBbR2FtZU9iamVjdC5zZXRJbnRlcmFjdGl2ZV17QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Qjc2V0SW50ZXJhY3RpdmV9IGZvciBtb3JlIGRldGFpbHMuXHJcbiAqIFxyXG4gKiBUaGUgZXZlbnQgaGllcmFyY2h5IGlzIGFzIGZvbGxvd3M6XHJcbiAqIFxyXG4gKiAxLiBbR0FNRU9CSkVDVF9QT0lOVEVSX1VQXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1BPSU5URVJfVVB9XHJcbiAqIDIuIFtHQU1FT0JKRUNUX1VQXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1VQfVxyXG4gKiAzLiBbUE9JTlRFUl9VUF17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6UE9JTlRFUl9VUH0gb3IgW1BPSU5URVJfVVBfT1VUU0lERV17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6UE9JTlRFUl9VUF9PVVRTSURFfVxyXG4gKiBcclxuICogV2l0aCB0aGUgdG9wIGV2ZW50IGJlaW5nIGRpc3BhdGNoZWQgZmlyc3QgYW5kIHRoZW4gZmxvd2luZyBkb3duIHRoZSBsaXN0LiBOb3RlIHRoYXQgaGlnaGVyLXVwIGV2ZW50IGhhbmRsZXJzIGNhbiBzdG9wXHJcbiAqIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGlzIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FT0JKRUNUX1BPSU5URVJfVVBcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGxvY2FsWCAtIFRoZSB4IGNvb3JkaW5hdGUgdGhhdCB0aGUgUG9pbnRlciBpbnRlcmFjdGVkIHdpdGggdGhpcyBvYmplY3Qgb24sIHJlbGF0aXZlIHRvIHRoZSBHYW1lIE9iamVjdCdzIHRvcC1sZWZ0IHBvc2l0aW9uLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gbG9jYWxZIC0gVGhlIHkgY29vcmRpbmF0ZSB0aGF0IHRoZSBQb2ludGVyIGludGVyYWN0ZWQgd2l0aCB0aGlzIG9iamVjdCBvbiwgcmVsYXRpdmUgdG8gdGhlIEdhbWUgT2JqZWN0J3MgdG9wLWxlZnQgcG9zaXRpb24uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLklucHV0LkV2ZW50RGF0YX0gZXZlbnQgLSBUaGUgUGhhc2VyIGlucHV0IGV2ZW50LiBZb3UgY2FuIGNhbGwgYHN0b3BQcm9wYWdhdGlvbigpYCB0byBoYWx0IGl0IGZyb20gZ29pbmcgYW55IGZ1cnRoZXIgaW4gdGhlIGV2ZW50IGZsb3cuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwb2ludGVydXAnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_UP_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_WHEEL_EVENT.js":
/*!********************************************************************************!*\
!*** ./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_WHEEL_EVENT.js ***!
\********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Pointer Wheel Event.\r\n * \r\n * This event is dispatched by an interactive Game Object if a pointer has its wheel moved while over it.\r\n * \r\n * Listen to this event from a Game Object using: `gameObject.on('wheel', listener)`.\r\n * Note that the scope of the listener is automatically set to be the Game Object instance itself.\r\n * \r\n * To receive this event, the Game Object must have been set as interactive.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_WHEEL]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_WHEEL}\r\n * 2. [GAMEOBJECT_WHEEL]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_WHEEL}\r\n * 3. [POINTER_WHEEL]{@linkcode Phaser.Input.Events#event:POINTER_WHEEL}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_POINTER_WHEEL\r\n * @since 3.18.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {number} deltaX - The horizontal scroll amount that occurred due to the user moving a mouse wheel or similar input device.\r\n * @param {number} deltaY - The vertical scroll amount that occurred due to the user moving a mouse wheel or similar input device. This value will typically be less than 0 if the user scrolls up and greater than zero if scrolling down.\r\n * @param {number} deltaZ - The z-axis scroll amount that occurred due to the user moving a mouse wheel or similar input device.\r\n * @param {Phaser.Types.Input.EventData} event - The Phaser input event. You can call `stopPropagation()` to halt it from going any further in the event flow.\r\n */\r\nmodule.exports = 'wheel';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9QT0lOVEVSX1dIRUVMX0VWRU5ULmpzPzE1ZTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxtREFBbUQ7QUFDdEY7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDLHlCQUF5QjtBQUN6QixzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLDZCQUE2QjtBQUN4QztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL0dBTUVPQkpFQ1RfUE9JTlRFUl9XSEVFTF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIE9iamVjdCBQb2ludGVyIFdoZWVsIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGFuIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0IGlmIGEgcG9pbnRlciBoYXMgaXRzIHdoZWVsIG1vdmVkIHdoaWxlIG92ZXIgaXQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIGEgR2FtZSBPYmplY3QgdXNpbmc6IGBnYW1lT2JqZWN0Lm9uKCd3aGVlbCcsIGxpc3RlbmVyKWAuXHJcbiAqIE5vdGUgdGhhdCB0aGUgc2NvcGUgb2YgdGhlIGxpc3RlbmVyIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIGJlIHRoZSBHYW1lIE9iamVjdCBpbnN0YW5jZSBpdHNlbGYuXHJcbiAqIFxyXG4gKiBUbyByZWNlaXZlIHRoaXMgZXZlbnQsIHRoZSBHYW1lIE9iamVjdCBtdXN0IGhhdmUgYmVlbiBzZXQgYXMgaW50ZXJhY3RpdmUuXHJcbiAqIFNlZSBbR2FtZU9iamVjdC5zZXRJbnRlcmFjdGl2ZV17QGxpbmsgUGhhc2VyLkdhbWVPYmplY3RzLkdhbWVPYmplY3Qjc2V0SW50ZXJhY3RpdmV9IGZvciBtb3JlIGRldGFpbHMuXHJcbiAqIFxyXG4gKiBUaGUgZXZlbnQgaGllcmFyY2h5IGlzIGFzIGZvbGxvd3M6XHJcbiAqIFxyXG4gKiAxLiBbR0FNRU9CSkVDVF9QT0lOVEVSX1dIRUVMXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1BPSU5URVJfV0hFRUx9XHJcbiAqIDIuIFtHQU1FT0JKRUNUX1dIRUVMXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1dIRUVMfVxyXG4gKiAzLiBbUE9JTlRFUl9XSEVFTF17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6UE9JTlRFUl9XSEVFTH1cclxuICogXHJcbiAqIFdpdGggdGhlIHRvcCBldmVudCBiZWluZyBkaXNwYXRjaGVkIGZpcnN0IGFuZCB0aGVuIGZsb3dpbmcgZG93biB0aGUgbGlzdC4gTm90ZSB0aGF0IGhpZ2hlci11cCBldmVudCBoYW5kbGVycyBjYW4gc3RvcFxyXG4gKiB0aGUgcHJvcGFnYXRpb24gb2YgdGhpcyBldmVudC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRU9CSkVDVF9QT0lOVEVSX1dIRUVMXHJcbiAqIEBzaW5jZSAzLjE4LjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZGVsdGFYIC0gVGhlIGhvcml6b250YWwgc2Nyb2xsIGFtb3VudCB0aGF0IG9jY3VycmVkIGR1ZSB0byB0aGUgdXNlciBtb3ZpbmcgYSBtb3VzZSB3aGVlbCBvciBzaW1pbGFyIGlucHV0IGRldmljZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhWSAtIFRoZSB2ZXJ0aWNhbCBzY3JvbGwgYW1vdW50IHRoYXQgb2NjdXJyZWQgZHVlIHRvIHRoZSB1c2VyIG1vdmluZyBhIG1vdXNlIHdoZWVsIG9yIHNpbWlsYXIgaW5wdXQgZGV2aWNlLiBUaGlzIHZhbHVlIHdpbGwgdHlwaWNhbGx5IGJlIGxlc3MgdGhhbiAwIGlmIHRoZSB1c2VyIHNjcm9sbHMgdXAgYW5kIGdyZWF0ZXIgdGhhbiB6ZXJvIGlmIHNjcm9sbGluZyBkb3duLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZGVsdGFaIC0gVGhlIHotYXhpcyBzY3JvbGwgYW1vdW50IHRoYXQgb2NjdXJyZWQgZHVlIHRvIHRoZSB1c2VyIG1vdmluZyBhIG1vdXNlIHdoZWVsIG9yIHNpbWlsYXIgaW5wdXQgZGV2aWNlLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5FdmVudERhdGF9IGV2ZW50IC0gVGhlIFBoYXNlciBpbnB1dCBldmVudC4gWW91IGNhbiBjYWxsIGBzdG9wUHJvcGFnYXRpb24oKWAgdG8gaGFsdCBpdCBmcm9tIGdvaW5nIGFueSBmdXJ0aGVyIGluIHRoZSBldmVudCBmbG93LlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnd2hlZWwnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_WHEEL_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_UP_EVENT.js":
/*!*********************************************************************!*\
!*** ./node_modules/phaser/src/input/events/GAMEOBJECT_UP_EVENT.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Up Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer is released while over _any_ interactive Game Object.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('gameobjectup', listener)`.\r\n * \r\n * To receive this event, the Game Objects must have been set as interactive.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_POINTER_UP]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_UP} event instead.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_UP]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_UP}\r\n * 2. [GAMEOBJECT_UP]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_UP}\r\n * 3. [POINTER_UP]{@linkcode Phaser.Input.Events#event:POINTER_UP} or [POINTER_UP_OUTSIDE]{@linkcode Phaser.Input.Events#event:POINTER_UP_OUTSIDE}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_UP\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object the pointer was over when released.\r\n * @param {Phaser.Types.Input.EventData} event - The Phaser input event. You can call `stopPropagation()` to halt it from going any further in the event flow.\r\n */\r\nmodule.exports = 'gameobjectup';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9VUF9FVkVOVC5qcz9iMDA0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLG1EQUFtRDtBQUN0RjtBQUNBLDJGQUEyRiwwREFBMEQ7QUFDcko7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCLHNCQUFzQjtBQUN0QixtQkFBbUIsK0NBQStDLHlCQUF5QjtBQUMzRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsNkJBQTZCO0FBQ3hDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9VUF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lIE9iamVjdCBVcCBJbnB1dCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgUGx1Z2luIGJlbG9uZ2luZyB0byBhIFNjZW5lIGlmIGEgcG9pbnRlciBpcyByZWxlYXNlZCB3aGlsZSBvdmVyIF9hbnlfIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMuaW5wdXQub24oJ2dhbWVvYmplY3R1cCcsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBUbyByZWNlaXZlIHRoaXMgZXZlbnQsIHRoZSBHYW1lIE9iamVjdHMgbXVzdCBoYXZlIGJlZW4gc2V0IGFzIGludGVyYWN0aXZlLlxyXG4gKiBTZWUgW0dhbWVPYmplY3Quc2V0SW50ZXJhY3RpdmVde0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I3NldEludGVyYWN0aXZlfSBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKiBcclxuICogVG8gbGlzdGVuIGZvciB0aGlzIGV2ZW50IGZyb20gYSBfc3BlY2lmaWNfIEdhbWUgT2JqZWN0LCB1c2UgdGhlIFtHQU1FT0JKRUNUX1BPSU5URVJfVVBde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfUE9JTlRFUl9VUH0gZXZlbnQgaW5zdGVhZC5cclxuICogXHJcbiAqIFRoZSBldmVudCBoaWVyYXJjaHkgaXMgYXMgZm9sbG93czpcclxuICogXHJcbiAqIDEuIFtHQU1FT0JKRUNUX1BPSU5URVJfVVBde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfUE9JTlRFUl9VUH1cclxuICogMi4gW0dBTUVPQkpFQ1RfVVBde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfVVB9XHJcbiAqIDMuIFtQT0lOVEVSX1VQXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpQT0lOVEVSX1VQfSBvciBbUE9JTlRFUl9VUF9PVVRTSURFXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpQT0lOVEVSX1VQX09VVFNJREV9XHJcbiAqIFxyXG4gKiBXaXRoIHRoZSB0b3AgZXZlbnQgYmVpbmcgZGlzcGF0Y2hlZCBmaXJzdCBhbmQgdGhlbiBmbG93aW5nIGRvd24gdGhlIGxpc3QuIE5vdGUgdGhhdCBoaWdoZXItdXAgZXZlbnQgaGFuZGxlcnMgY2FuIHN0b3BcclxuICogdGhlIHByb3BhZ2F0aW9uIG9mIHRoaXMgZXZlbnQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI0dBTUVPQkpFQ1RfVVBcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdH0gZ2FtZU9iamVjdCAtIFRoZSBHYW1lIE9iamVjdCB0aGUgcG9pbnRlciB3YXMgb3ZlciB3aGVuIHJlbGVhc2VkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5FdmVudERhdGF9IGV2ZW50IC0gVGhlIFBoYXNlciBpbnB1dCBldmVudC4gWW91IGNhbiBjYWxsIGBzdG9wUHJvcGFnYXRpb24oKWAgdG8gaGFsdCBpdCBmcm9tIGdvaW5nIGFueSBmdXJ0aGVyIGluIHRoZSBldmVudCBmbG93LlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZ2FtZW9iamVjdHVwJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_UP_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/GAMEOBJECT_WHEEL_EVENT.js":
/*!************************************************************************!*\
!*** ./node_modules/phaser/src/input/events/GAMEOBJECT_WHEEL_EVENT.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Game Object Wheel Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer has its wheel moved while over _any_ interactive Game Object.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('gameobjectwheel', listener)`.\r\n * \r\n * To receive this event, the Game Objects must have been set as interactive.\r\n * See [GameObject.setInteractive]{@link Phaser.GameObjects.GameObject#setInteractive} for more details.\r\n * \r\n * To listen for this event from a _specific_ Game Object, use the [GAMEOBJECT_POINTER_WHEEL]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_WHEEL} event instead.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_WHEEL]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_WHEEL}\r\n * 2. [GAMEOBJECT_WHEEL]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_WHEEL}\r\n * 3. [POINTER_WHEEL]{@linkcode Phaser.Input.Events#event:POINTER_WHEEL}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#GAMEOBJECT_WHEEL\r\n * @since 3.18.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject} gameObject - The Game Object the pointer was over when the wheel changed.\r\n * @param {number} deltaX - The horizontal scroll amount that occurred due to the user moving a mouse wheel or similar input device.\r\n * @param {number} deltaY - The vertical scroll amount that occurred due to the user moving a mouse wheel or similar input device. This value will typically be less than 0 if the user scrolls up and greater than zero if scrolling down.\r\n * @param {number} deltaZ - The z-axis scroll amount that occurred due to the user moving a mouse wheel or similar input device.\r\n * @param {Phaser.Types.Input.EventData} event - The Phaser input event. You can call `stopPropagation()` to halt it from going any further in the event flow.\r\n */\r\nmodule.exports = 'gameobjectwheel';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRU9CSkVDVF9XSEVFTF9FVkVOVC5qcz9iMzBkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLG1EQUFtRDtBQUN0RjtBQUNBLDhGQUE4Riw2REFBNkQ7QUFDM0o7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDLHlCQUF5QjtBQUN6QixzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLDZCQUE2QjtBQUN4QztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL0dBTUVPQkpFQ1RfV0hFRUxfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgR2FtZSBPYmplY3QgV2hlZWwgSW5wdXQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIElucHV0IFBsdWdpbiBiZWxvbmdpbmcgdG8gYSBTY2VuZSBpZiBhIHBvaW50ZXIgaGFzIGl0cyB3aGVlbCBtb3ZlZCB3aGlsZSBvdmVyIF9hbnlfIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMuaW5wdXQub24oJ2dhbWVvYmplY3R3aGVlbCcsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBUbyByZWNlaXZlIHRoaXMgZXZlbnQsIHRoZSBHYW1lIE9iamVjdHMgbXVzdCBoYXZlIGJlZW4gc2V0IGFzIGludGVyYWN0aXZlLlxyXG4gKiBTZWUgW0dhbWVPYmplY3Quc2V0SW50ZXJhY3RpdmVde0BsaW5rIFBoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0I3NldEludGVyYWN0aXZlfSBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKiBcclxuICogVG8gbGlzdGVuIGZvciB0aGlzIGV2ZW50IGZyb20gYSBfc3BlY2lmaWNfIEdhbWUgT2JqZWN0LCB1c2UgdGhlIFtHQU1FT0JKRUNUX1BPSU5URVJfV0hFRUxde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfUE9JTlRFUl9XSEVFTH0gZXZlbnQgaW5zdGVhZC5cclxuICogXHJcbiAqIFRoZSBldmVudCBoaWVyYXJjaHkgaXMgYXMgZm9sbG93czpcclxuICogXHJcbiAqIDEuIFtHQU1FT0JKRUNUX1BPSU5URVJfV0hFRUxde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfUE9JTlRFUl9XSEVFTH1cclxuICogMi4gW0dBTUVPQkpFQ1RfV0hFRUxde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfV0hFRUx9XHJcbiAqIDMuIFtQT0lOVEVSX1dIRUVMXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpQT0lOVEVSX1dIRUVMfVxyXG4gKiBcclxuICogV2l0aCB0aGUgdG9wIGV2ZW50IGJlaW5nIGRpc3BhdGNoZWQgZmlyc3QgYW5kIHRoZW4gZmxvd2luZyBkb3duIHRoZSBsaXN0LiBOb3RlIHRoYXQgaGlnaGVyLXVwIGV2ZW50IGhhbmRsZXJzIGNhbiBzdG9wXHJcbiAqIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGlzIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNHQU1FT0JKRUNUX1dIRUVMXHJcbiAqIEBzaW5jZSAzLjE4LjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0fSBnYW1lT2JqZWN0IC0gVGhlIEdhbWUgT2JqZWN0IHRoZSBwb2ludGVyIHdhcyBvdmVyIHdoZW4gdGhlIHdoZWVsIGNoYW5nZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVggLSBUaGUgaG9yaXpvbnRhbCBzY3JvbGwgYW1vdW50IHRoYXQgb2NjdXJyZWQgZHVlIHRvIHRoZSB1c2VyIG1vdmluZyBhIG1vdXNlIHdoZWVsIG9yIHNpbWlsYXIgaW5wdXQgZGV2aWNlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZGVsdGFZIC0gVGhlIHZlcnRpY2FsIHNjcm9sbCBhbW91bnQgdGhhdCBvY2N1cnJlZCBkdWUgdG8gdGhlIHVzZXIgbW92aW5nIGEgbW91c2Ugd2hlZWwgb3Igc2ltaWxhciBpbnB1dCBkZXZpY2UuIFRoaXMgdmFsdWUgd2lsbCB0eXBpY2FsbHkgYmUgbGVzcyB0aGFuIDAgaWYgdGhlIHVzZXIgc2Nyb2xscyB1cCBhbmQgZ3JlYXRlciB0aGFuIHplcm8gaWYgc2Nyb2xsaW5nIGRvd24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVogLSBUaGUgei1heGlzIHNjcm9sbCBhbW91bnQgdGhhdCBvY2N1cnJlZCBkdWUgdG8gdGhlIHVzZXIgbW92aW5nIGEgbW91c2Ugd2hlZWwgb3Igc2ltaWxhciBpbnB1dCBkZXZpY2UuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLklucHV0LkV2ZW50RGF0YX0gZXZlbnQgLSBUaGUgUGhhc2VyIGlucHV0IGV2ZW50LiBZb3UgY2FuIGNhbGwgYHN0b3BQcm9wYWdhdGlvbigpYCB0byBoYWx0IGl0IGZyb20gZ29pbmcgYW55IGZ1cnRoZXIgaW4gdGhlIGV2ZW50IGZsb3cuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdnYW1lb2JqZWN0d2hlZWwnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAMEOBJECT_WHEEL_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/GAME_OUT_EVENT.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/input/events/GAME_OUT_EVENT.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Input Plugin Game Out Event.\r\n * \r\n * This event is dispatched by the Input Plugin if the active pointer leaves the game canvas and is now\r\n * outside of it, elsewhere on the web page.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('gameout', listener)`.\r\n *\r\n * @event Phaser.Input.Events#GAME_OUT\r\n * @since 3.16.1\r\n * \r\n * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n * @param {(MouseEvent|TouchEvent)} event - The DOM Event that triggered the canvas out.\r\n */\r\nmodule.exports = 'gameout';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRV9PVVRfRVZFTlQuanM/ZjAwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLHdCQUF3QjtBQUNuQztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL0dBTUVfT1VUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIElucHV0IFBsdWdpbiBHYW1lIE91dCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgUGx1Z2luIGlmIHRoZSBhY3RpdmUgcG9pbnRlciBsZWF2ZXMgdGhlIGdhbWUgY2FudmFzIGFuZCBpcyBub3dcclxuICogb3V0c2lkZSBvZiBpdCwgZWxzZXdoZXJlIG9uIHRoZSB3ZWIgcGFnZS5cclxuICogXHJcbiAqIExpc3RlbiB0byB0aGlzIGV2ZW50IGZyb20gd2l0aGluIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmlucHV0Lm9uKCdnYW1lb3V0JywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRV9PVVRcclxuICogQHNpbmNlIDMuMTYuMVxyXG4gKiBcclxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lLiBFaXRoZXIgYSBIaWdoIFJlc29sdXRpb24gVGltZXIgdmFsdWUgaWYgaXQgY29tZXMgZnJvbSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSwgb3IgRGF0ZS5ub3cgaWYgdXNpbmcgU2V0VGltZW91dC5cclxuICogQHBhcmFtIHsoTW91c2VFdmVudHxUb3VjaEV2ZW50KX0gZXZlbnQgLSBUaGUgRE9NIEV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBjYW52YXMgb3V0LlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZ2FtZW91dCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAME_OUT_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/GAME_OVER_EVENT.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/input/events/GAME_OVER_EVENT.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Input Plugin Game Over Event.\r\n * \r\n * This event is dispatched by the Input Plugin if the active pointer enters the game canvas and is now\r\n * over of it, having previously been elsewhere on the web page.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('gameover', listener)`.\r\n *\r\n * @event Phaser.Input.Events#GAME_OVER\r\n * @since 3.16.1\r\n * \r\n * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n * @param {(MouseEvent|TouchEvent)} event - The DOM Event that triggered the canvas over.\r\n */\r\nmodule.exports = 'gameover';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvR0FNRV9PVkVSX0VWRU5ULmpzPzNlN2YiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyx3QkFBd0I7QUFDbkM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9HQU1FX09WRVJfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgSW5wdXQgUGx1Z2luIEdhbWUgT3ZlciBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgUGx1Z2luIGlmIHRoZSBhY3RpdmUgcG9pbnRlciBlbnRlcnMgdGhlIGdhbWUgY2FudmFzIGFuZCBpcyBub3dcclxuICogb3ZlciBvZiBpdCwgaGF2aW5nIHByZXZpb3VzbHkgYmVlbiBlbHNld2hlcmUgb24gdGhlIHdlYiBwYWdlLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMuaW5wdXQub24oJ2dhbWVvdmVyJywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5FdmVudHMjR0FNRV9PVkVSXHJcbiAqIEBzaW5jZSAzLjE2LjFcclxuICogXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lIC0gVGhlIGN1cnJlbnQgdGltZS4gRWl0aGVyIGEgSGlnaCBSZXNvbHV0aW9uIFRpbWVyIHZhbHVlIGlmIGl0IGNvbWVzIGZyb20gUmVxdWVzdCBBbmltYXRpb24gRnJhbWUsIG9yIERhdGUubm93IGlmIHVzaW5nIFNldFRpbWVvdXQuXHJcbiAqIEBwYXJhbSB7KE1vdXNlRXZlbnR8VG91Y2hFdmVudCl9IGV2ZW50IC0gVGhlIERPTSBFdmVudCB0aGF0IHRyaWdnZXJlZCB0aGUgY2FudmFzIG92ZXIuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdnYW1lb3Zlcic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/GAME_OVER_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/MANAGER_BOOT_EVENT.js":
/*!********************************************************************!*\
!*** ./node_modules/phaser/src/input/events/MANAGER_BOOT_EVENT.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Input Manager Boot Event.\r\n * \r\n * This internal event is dispatched by the Input Manager when it boots.\r\n *\r\n * @event Phaser.Input.Events#MANAGER_BOOT\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'boot';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvTUFOQUdFUl9CT09UX0VWRU5ULmpzP2NhOTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9NQU5BR0VSX0JPT1RfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgSW5wdXQgTWFuYWdlciBCb290IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBpbnRlcm5hbCBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBJbnB1dCBNYW5hZ2VyIHdoZW4gaXQgYm9vdHMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI01BTkFHRVJfQk9PVFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2Jvb3QnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/MANAGER_BOOT_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/MANAGER_PROCESS_EVENT.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/src/input/events/MANAGER_PROCESS_EVENT.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Input Manager Process Event.\r\n * \r\n * This internal event is dispatched by the Input Manager when not using the legacy queue system,\r\n * and it wants the Input Plugins to update themselves.\r\n *\r\n * @event Phaser.Input.Events#MANAGER_PROCESS\r\n * @since 3.0.0\r\n * \r\n * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n */\r\nmodule.exports = 'process';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvTUFOQUdFUl9QUk9DRVNTX0VWRU5ULmpzPzA2NzgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9NQU5BR0VSX1BST0NFU1NfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgSW5wdXQgTWFuYWdlciBQcm9jZXNzIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBpbnRlcm5hbCBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBJbnB1dCBNYW5hZ2VyIHdoZW4gbm90IHVzaW5nIHRoZSBsZWdhY3kgcXVldWUgc3lzdGVtLFxyXG4gKiBhbmQgaXQgd2FudHMgdGhlIElucHV0IFBsdWdpbnMgdG8gdXBkYXRlIHRoZW1zZWx2ZXMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI01BTkFHRVJfUFJPQ0VTU1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lIC0gVGhlIGN1cnJlbnQgdGltZS4gRWl0aGVyIGEgSGlnaCBSZXNvbHV0aW9uIFRpbWVyIHZhbHVlIGlmIGl0IGNvbWVzIGZyb20gUmVxdWVzdCBBbmltYXRpb24gRnJhbWUsIG9yIERhdGUubm93IGlmIHVzaW5nIFNldFRpbWVvdXQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFRoZSBkZWx0YSB0aW1lIGluIG1zIHNpbmNlIHRoZSBsYXN0IGZyYW1lLiBUaGlzIGlzIGEgc21vb3RoZWQgYW5kIGNhcHBlZCB2YWx1ZSBiYXNlZCBvbiB0aGUgRlBTIHJhdGUuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwcm9jZXNzJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/MANAGER_PROCESS_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/MANAGER_UPDATE_EVENT.js":
/*!**********************************************************************!*\
!*** ./node_modules/phaser/src/input/events/MANAGER_UPDATE_EVENT.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Input Manager Update Event.\r\n * \r\n * This internal event is dispatched by the Input Manager as part of its update step.\r\n *\r\n * @event Phaser.Input.Events#MANAGER_UPDATE\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'update';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvTUFOQUdFUl9VUERBVEVfRVZFTlQuanM/YjJhZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL01BTkFHRVJfVVBEQVRFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIElucHV0IE1hbmFnZXIgVXBkYXRlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBpbnRlcm5hbCBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBJbnB1dCBNYW5hZ2VyIGFzIHBhcnQgb2YgaXRzIHVwZGF0ZSBzdGVwLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNNQU5BR0VSX1VQREFURVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3VwZGF0ZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/MANAGER_UPDATE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/POINTERLOCK_CHANGE_EVENT.js":
/*!**************************************************************************!*\
!*** ./node_modules/phaser/src/input/events/POINTERLOCK_CHANGE_EVENT.js ***!
\**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Input Manager Pointer Lock Change Event.\r\n * \r\n * This event is dispatched by the Input Manager when it is processing a native Pointer Lock Change DOM Event.\r\n *\r\n * @event Phaser.Input.Events#POINTERLOCK_CHANGE\r\n * @since 3.0.0\r\n * \r\n * @param {Event} event - The native DOM Event.\r\n * @param {boolean} locked - The locked state of the Mouse Pointer.\r\n */\r\nmodule.exports = 'pointerlockchange';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUE9JTlRFUkxPQ0tfQ0hBTkdFX0VWRU5ULmpzPzk5NDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUE9JTlRFUkxPQ0tfQ0hBTkdFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIElucHV0IE1hbmFnZXIgUG9pbnRlciBMb2NrIENoYW5nZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgTWFuYWdlciB3aGVuIGl0IGlzIHByb2Nlc3NpbmcgYSBuYXRpdmUgUG9pbnRlciBMb2NrIENoYW5nZSBET00gRXZlbnQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI1BPSU5URVJMT0NLX0NIQU5HRVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gVGhlIG5hdGl2ZSBET00gRXZlbnQuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gbG9ja2VkIC0gVGhlIGxvY2tlZCBzdGF0ZSBvZiB0aGUgTW91c2UgUG9pbnRlci5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3BvaW50ZXJsb2NrY2hhbmdlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/POINTERLOCK_CHANGE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/POINTER_DOWN_EVENT.js":
/*!********************************************************************!*\
!*** ./node_modules/phaser/src/input/events/POINTER_DOWN_EVENT.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Down Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer is pressed down anywhere.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('pointerdown', listener)`.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_DOWN]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_DOWN}\r\n * 2. [GAMEOBJECT_DOWN]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_DOWN}\r\n * 3. [POINTER_DOWN]{@linkcode Phaser.Input.Events#event:POINTER_DOWN} or [POINTER_DOWN_OUTSIDE]{@linkcode Phaser.Input.Events#event:POINTER_DOWN_OUTSIDE}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#POINTER_DOWN\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject[]} currentlyOver - An array containing all interactive Game Objects that the pointer was over when the event was created.\r\n */\r\nmodule.exports = 'pointerdown';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUE9JTlRFUl9ET1dOX0VWRU5ULmpzP2UwNTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQyx3QkFBd0I7QUFDeEIscUJBQXFCLGlEQUFpRCwyQkFBMkI7QUFDakc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLGdDQUFnQztBQUMzQztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL1BPSU5URVJfRE9XTl9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBQb2ludGVyIERvd24gSW5wdXQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIElucHV0IFBsdWdpbiBiZWxvbmdpbmcgdG8gYSBTY2VuZSBpZiBhIHBvaW50ZXIgaXMgcHJlc3NlZCBkb3duIGFueXdoZXJlLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMuaW5wdXQub24oJ3BvaW50ZXJkb3duJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIFRoZSBldmVudCBoaWVyYXJjaHkgaXMgYXMgZm9sbG93czpcclxuICogXHJcbiAqIDEuIFtHQU1FT0JKRUNUX1BPSU5URVJfRE9XTl17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6R0FNRU9CSkVDVF9QT0lOVEVSX0RPV059XHJcbiAqIDIuIFtHQU1FT0JKRUNUX0RPV05de0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfRE9XTn1cclxuICogMy4gW1BPSU5URVJfRE9XTl17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6UE9JTlRFUl9ET1dOfSBvciBbUE9JTlRFUl9ET1dOX09VVFNJREVde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OlBPSU5URVJfRE9XTl9PVVRTSURFfVxyXG4gKiBcclxuICogV2l0aCB0aGUgdG9wIGV2ZW50IGJlaW5nIGRpc3BhdGNoZWQgZmlyc3QgYW5kIHRoZW4gZmxvd2luZyBkb3duIHRoZSBsaXN0LiBOb3RlIHRoYXQgaGlnaGVyLXVwIGV2ZW50IGhhbmRsZXJzIGNhbiBzdG9wXHJcbiAqIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGlzIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNQT0lOVEVSX0RPV05cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBjdXJyZW50bHlPdmVyIC0gQW4gYXJyYXkgY29udGFpbmluZyBhbGwgaW50ZXJhY3RpdmUgR2FtZSBPYmplY3RzIHRoYXQgdGhlIHBvaW50ZXIgd2FzIG92ZXIgd2hlbiB0aGUgZXZlbnQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwb2ludGVyZG93bic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/POINTER_DOWN_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/POINTER_DOWN_OUTSIDE_EVENT.js":
/*!****************************************************************************!*\
!*** ./node_modules/phaser/src/input/events/POINTER_DOWN_OUTSIDE_EVENT.js ***!
\****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Down Outside Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer is pressed down anywhere outside of the game canvas.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('pointerdownoutside', listener)`.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_DOWN]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_DOWN}\r\n * 2. [GAMEOBJECT_DOWN]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_DOWN}\r\n * 3. [POINTER_DOWN]{@linkcode Phaser.Input.Events#event:POINTER_DOWN} or [POINTER_DOWN_OUTSIDE]{@linkcode Phaser.Input.Events#event:POINTER_DOWN_OUTSIDE}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#POINTER_DOWN_OUTSIDE\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n */\r\nmodule.exports = 'pointerdownoutside';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUE9JTlRFUl9ET1dOX09VVFNJREVfRVZFTlQuanM/ZWY4MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDLHdCQUF3QjtBQUN4QixxQkFBcUIsaURBQWlELDJCQUEyQjtBQUNqRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUE9JTlRFUl9ET1dOX09VVFNJREVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgUG9pbnRlciBEb3duIE91dHNpZGUgSW5wdXQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIElucHV0IFBsdWdpbiBiZWxvbmdpbmcgdG8gYSBTY2VuZSBpZiBhIHBvaW50ZXIgaXMgcHJlc3NlZCBkb3duIGFueXdoZXJlIG91dHNpZGUgb2YgdGhlIGdhbWUgY2FudmFzLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMuaW5wdXQub24oJ3BvaW50ZXJkb3dub3V0c2lkZScsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBUaGUgZXZlbnQgaGllcmFyY2h5IGlzIGFzIGZvbGxvd3M6XHJcbiAqIFxyXG4gKiAxLiBbR0FNRU9CSkVDVF9QT0lOVEVSX0RPV05de0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfUE9JTlRFUl9ET1dOfVxyXG4gKiAyLiBbR0FNRU9CSkVDVF9ET1dOXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX0RPV059XHJcbiAqIDMuIFtQT0lOVEVSX0RPV05de0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OlBPSU5URVJfRE9XTn0gb3IgW1BPSU5URVJfRE9XTl9PVVRTSURFXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpQT0lOVEVSX0RPV05fT1VUU0lERX1cclxuICogXHJcbiAqIFdpdGggdGhlIHRvcCBldmVudCBiZWluZyBkaXNwYXRjaGVkIGZpcnN0IGFuZCB0aGVuIGZsb3dpbmcgZG93biB0aGUgbGlzdC4gTm90ZSB0aGF0IGhpZ2hlci11cCBldmVudCBoYW5kbGVycyBjYW4gc3RvcFxyXG4gKiB0aGUgcHJvcGFnYXRpb24gb2YgdGhpcyBldmVudC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5FdmVudHMjUE9JTlRFUl9ET1dOX09VVFNJREVcclxuICogQHNpbmNlIDMuMTYuMVxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHJlc3BvbnNpYmxlIGZvciB0cmlnZ2VyaW5nIHRoaXMgZXZlbnQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwb2ludGVyZG93bm91dHNpZGUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/POINTER_DOWN_OUTSIDE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/POINTER_MOVE_EVENT.js":
/*!********************************************************************!*\
!*** ./node_modules/phaser/src/input/events/POINTER_MOVE_EVENT.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Move Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer is moved anywhere.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('pointermove', listener)`.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_MOVE]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_MOVE}\r\n * 2. [GAMEOBJECT_MOVE]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_MOVE}\r\n * 3. [POINTER_MOVE]{@linkcode Phaser.Input.Events#event:POINTER_MOVE}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#POINTER_MOVE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject[]} currentlyOver - An array containing all interactive Game Objects that the pointer was over when the event was created.\r\n */\r\nmodule.exports = 'pointermove';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUE9JTlRFUl9NT1ZFX0VWRU5ULmpzP2MzMTQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQyx3QkFBd0I7QUFDeEIscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxnQ0FBZ0M7QUFDM0M7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9QT0lOVEVSX01PVkVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgUG9pbnRlciBNb3ZlIElucHV0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBJbnB1dCBQbHVnaW4gYmVsb25naW5nIHRvIGEgU2NlbmUgaWYgYSBwb2ludGVyIGlzIG1vdmVkIGFueXdoZXJlLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMuaW5wdXQub24oJ3BvaW50ZXJtb3ZlJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIFRoZSBldmVudCBoaWVyYXJjaHkgaXMgYXMgZm9sbG93czpcclxuICogXHJcbiAqIDEuIFtHQU1FT0JKRUNUX1BPSU5URVJfTU9WRV17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6R0FNRU9CSkVDVF9QT0lOVEVSX01PVkV9XHJcbiAqIDIuIFtHQU1FT0JKRUNUX01PVkVde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfTU9WRX1cclxuICogMy4gW1BPSU5URVJfTU9WRV17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6UE9JTlRFUl9NT1ZFfVxyXG4gKiBcclxuICogV2l0aCB0aGUgdG9wIGV2ZW50IGJlaW5nIGRpc3BhdGNoZWQgZmlyc3QgYW5kIHRoZW4gZmxvd2luZyBkb3duIHRoZSBsaXN0LiBOb3RlIHRoYXQgaGlnaGVyLXVwIGV2ZW50IGhhbmRsZXJzIGNhbiBzdG9wXHJcbiAqIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGlzIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNQT0lOVEVSX01PVkVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBjdXJyZW50bHlPdmVyIC0gQW4gYXJyYXkgY29udGFpbmluZyBhbGwgaW50ZXJhY3RpdmUgR2FtZSBPYmplY3RzIHRoYXQgdGhlIHBvaW50ZXIgd2FzIG92ZXIgd2hlbiB0aGUgZXZlbnQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwb2ludGVybW92ZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/POINTER_MOVE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/POINTER_OUT_EVENT.js":
/*!*******************************************************************!*\
!*** ./node_modules/phaser/src/input/events/POINTER_OUT_EVENT.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Out Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer moves out of any interactive Game Object.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('pointerup', listener)`.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_OUT]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_OUT}\r\n * 2. [GAMEOBJECT_OUT]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_OUT}\r\n * 3. [POINTER_OUT]{@linkcode Phaser.Input.Events#event:POINTER_OUT}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#POINTER_OUT\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject[]} justOut - An array containing all interactive Game Objects that the pointer moved out of when the event was created.\r\n */\r\nmodule.exports = 'pointerout';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUE9JTlRFUl9PVVRfRVZFTlQuanM/NGQ5MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CLHVCQUF1QjtBQUN2QixvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLGdDQUFnQztBQUMzQztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL1BPSU5URVJfT1VUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFBvaW50ZXIgT3V0IElucHV0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBJbnB1dCBQbHVnaW4gYmVsb25naW5nIHRvIGEgU2NlbmUgaWYgYSBwb2ludGVyIG1vdmVzIG91dCBvZiBhbnkgaW50ZXJhY3RpdmUgR2FtZSBPYmplY3QuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIHdpdGhpbiBhIFNjZW5lIHVzaW5nOiBgdGhpcy5pbnB1dC5vbigncG9pbnRlcnVwJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIFRoZSBldmVudCBoaWVyYXJjaHkgaXMgYXMgZm9sbG93czpcclxuICogXHJcbiAqIDEuIFtHQU1FT0JKRUNUX1BPSU5URVJfT1VUXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1BPSU5URVJfT1VUfVxyXG4gKiAyLiBbR0FNRU9CSkVDVF9PVVRde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfT1VUfVxyXG4gKiAzLiBbUE9JTlRFUl9PVVRde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OlBPSU5URVJfT1VUfVxyXG4gKiBcclxuICogV2l0aCB0aGUgdG9wIGV2ZW50IGJlaW5nIGRpc3BhdGNoZWQgZmlyc3QgYW5kIHRoZW4gZmxvd2luZyBkb3duIHRoZSBsaXN0LiBOb3RlIHRoYXQgaGlnaGVyLXVwIGV2ZW50IGhhbmRsZXJzIGNhbiBzdG9wXHJcbiAqIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGlzIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNQT0lOVEVSX09VVFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LlBvaW50ZXJ9IHBvaW50ZXIgLSBUaGUgUG9pbnRlciByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5HYW1lT2JqZWN0cy5HYW1lT2JqZWN0W119IGp1c3RPdXQgLSBBbiBhcnJheSBjb250YWluaW5nIGFsbCBpbnRlcmFjdGl2ZSBHYW1lIE9iamVjdHMgdGhhdCB0aGUgcG9pbnRlciBtb3ZlZCBvdXQgb2Ygd2hlbiB0aGUgZXZlbnQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwb2ludGVyb3V0JztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/POINTER_OUT_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/POINTER_OVER_EVENT.js":
/*!********************************************************************!*\
!*** ./node_modules/phaser/src/input/events/POINTER_OVER_EVENT.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Over Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer moves over any interactive Game Object.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('pointerover', listener)`.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_OVER]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_OVER}\r\n * 2. [GAMEOBJECT_OVER]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_OVER}\r\n * 3. [POINTER_OVER]{@linkcode Phaser.Input.Events#event:POINTER_OVER}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#POINTER_OVER\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject[]} justOver - An array containing all interactive Game Objects that the pointer moved over when the event was created.\r\n */\r\nmodule.exports = 'pointerover';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUE9JTlRFUl9PVkVSX0VWRU5ULmpzPzNmMzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQyx3QkFBd0I7QUFDeEIscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxnQ0FBZ0M7QUFDM0M7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9QT0lOVEVSX09WRVJfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgUG9pbnRlciBPdmVyIElucHV0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBJbnB1dCBQbHVnaW4gYmVsb25naW5nIHRvIGEgU2NlbmUgaWYgYSBwb2ludGVyIG1vdmVzIG92ZXIgYW55IGludGVyYWN0aXZlIEdhbWUgT2JqZWN0LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMuaW5wdXQub24oJ3BvaW50ZXJvdmVyJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIFRoZSBldmVudCBoaWVyYXJjaHkgaXMgYXMgZm9sbG93czpcclxuICogXHJcbiAqIDEuIFtHQU1FT0JKRUNUX1BPSU5URVJfT1ZFUl17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6R0FNRU9CSkVDVF9QT0lOVEVSX09WRVJ9XHJcbiAqIDIuIFtHQU1FT0JKRUNUX09WRVJde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfT1ZFUn1cclxuICogMy4gW1BPSU5URVJfT1ZFUl17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6UE9JTlRFUl9PVkVSfVxyXG4gKiBcclxuICogV2l0aCB0aGUgdG9wIGV2ZW50IGJlaW5nIGRpc3BhdGNoZWQgZmlyc3QgYW5kIHRoZW4gZmxvd2luZyBkb3duIHRoZSBsaXN0LiBOb3RlIHRoYXQgaGlnaGVyLXVwIGV2ZW50IGhhbmRsZXJzIGNhbiBzdG9wXHJcbiAqIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGlzIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNQT0lOVEVSX09WRVJcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBqdXN0T3ZlciAtIEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIGludGVyYWN0aXZlIEdhbWUgT2JqZWN0cyB0aGF0IHRoZSBwb2ludGVyIG1vdmVkIG92ZXIgd2hlbiB0aGUgZXZlbnQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwb2ludGVyb3Zlcic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/POINTER_OVER_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/POINTER_UP_EVENT.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/input/events/POINTER_UP_EVENT.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Up Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer is released anywhere.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('pointerup', listener)`.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_UP]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_UP}\r\n * 2. [GAMEOBJECT_UP]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_UP}\r\n * 3. [POINTER_UP]{@linkcode Phaser.Input.Events#event:POINTER_UP} or [POINTER_UP_OUTSIDE]{@linkcode Phaser.Input.Events#event:POINTER_UP_OUTSIDE}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#POINTER_UP\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject[]} currentlyOver - An array containing all interactive Game Objects that the pointer was over when the event was created.\r\n */\r\nmodule.exports = 'pointerup';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUE9JTlRFUl9VUF9FVkVOVC5qcz8xZjA1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUIsc0JBQXNCO0FBQ3RCLG1CQUFtQiwrQ0FBK0MseUJBQXlCO0FBQzNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxnQ0FBZ0M7QUFDM0M7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9QT0lOVEVSX1VQX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIFBvaW50ZXIgVXAgSW5wdXQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIElucHV0IFBsdWdpbiBiZWxvbmdpbmcgdG8gYSBTY2VuZSBpZiBhIHBvaW50ZXIgaXMgcmVsZWFzZWQgYW55d2hlcmUuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIHdpdGhpbiBhIFNjZW5lIHVzaW5nOiBgdGhpcy5pbnB1dC5vbigncG9pbnRlcnVwJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIFRoZSBldmVudCBoaWVyYXJjaHkgaXMgYXMgZm9sbG93czpcclxuICogXHJcbiAqIDEuIFtHQU1FT0JKRUNUX1BPSU5URVJfVVBde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfUE9JTlRFUl9VUH1cclxuICogMi4gW0dBTUVPQkpFQ1RfVVBde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuRXZlbnRzI2V2ZW50OkdBTUVPQkpFQ1RfVVB9XHJcbiAqIDMuIFtQT0lOVEVSX1VQXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpQT0lOVEVSX1VQfSBvciBbUE9JTlRFUl9VUF9PVVRTSURFXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpQT0lOVEVSX1VQX09VVFNJREV9XHJcbiAqIFxyXG4gKiBXaXRoIHRoZSB0b3AgZXZlbnQgYmVpbmcgZGlzcGF0Y2hlZCBmaXJzdCBhbmQgdGhlbiBmbG93aW5nIGRvd24gdGhlIGxpc3QuIE5vdGUgdGhhdCBoaWdoZXItdXAgZXZlbnQgaGFuZGxlcnMgY2FuIHN0b3BcclxuICogdGhlIHByb3BhZ2F0aW9uIG9mIHRoaXMgZXZlbnQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI1BPSU5URVJfVVBcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBjdXJyZW50bHlPdmVyIC0gQW4gYXJyYXkgY29udGFpbmluZyBhbGwgaW50ZXJhY3RpdmUgR2FtZSBPYmplY3RzIHRoYXQgdGhlIHBvaW50ZXIgd2FzIG92ZXIgd2hlbiB0aGUgZXZlbnQgd2FzIGNyZWF0ZWQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwb2ludGVydXAnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/POINTER_UP_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/POINTER_UP_OUTSIDE_EVENT.js":
/*!**************************************************************************!*\
!*** ./node_modules/phaser/src/input/events/POINTER_UP_OUTSIDE_EVENT.js ***!
\**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Up Outside Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer is released anywhere outside of the game canvas.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('pointerupoutside', listener)`.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_UP]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_UP}\r\n * 2. [GAMEOBJECT_UP]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_UP}\r\n * 3. [POINTER_UP]{@linkcode Phaser.Input.Events#event:POINTER_UP} or [POINTER_UP_OUTSIDE]{@linkcode Phaser.Input.Events#event:POINTER_UP_OUTSIDE}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#POINTER_UP_OUTSIDE\r\n * @since 3.16.1\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n */\r\nmodule.exports = 'pointerupoutside';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUE9JTlRFUl9VUF9PVVRTSURFX0VWRU5ULmpzP2ViZGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QixzQkFBc0I7QUFDdEIsbUJBQW1CLCtDQUErQyx5QkFBeUI7QUFDM0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQztBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL1BPSU5URVJfVVBfT1VUU0lERV9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBQb2ludGVyIFVwIE91dHNpZGUgSW5wdXQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIElucHV0IFBsdWdpbiBiZWxvbmdpbmcgdG8gYSBTY2VuZSBpZiBhIHBvaW50ZXIgaXMgcmVsZWFzZWQgYW55d2hlcmUgb3V0c2lkZSBvZiB0aGUgZ2FtZSBjYW52YXMuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIHdpdGhpbiBhIFNjZW5lIHVzaW5nOiBgdGhpcy5pbnB1dC5vbigncG9pbnRlcnVwb3V0c2lkZScsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBUaGUgZXZlbnQgaGllcmFyY2h5IGlzIGFzIGZvbGxvd3M6XHJcbiAqIFxyXG4gKiAxLiBbR0FNRU9CSkVDVF9QT0lOVEVSX1VQXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1BPSU5URVJfVVB9XHJcbiAqIDIuIFtHQU1FT0JKRUNUX1VQXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1VQfVxyXG4gKiAzLiBbUE9JTlRFUl9VUF17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6UE9JTlRFUl9VUH0gb3IgW1BPSU5URVJfVVBfT1VUU0lERV17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6UE9JTlRFUl9VUF9PVVRTSURFfVxyXG4gKiBcclxuICogV2l0aCB0aGUgdG9wIGV2ZW50IGJlaW5nIGRpc3BhdGNoZWQgZmlyc3QgYW5kIHRoZW4gZmxvd2luZyBkb3duIHRoZSBsaXN0LiBOb3RlIHRoYXQgaGlnaGVyLXVwIGV2ZW50IGhhbmRsZXJzIGNhbiBzdG9wXHJcbiAqIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGlzIGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNQT0lOVEVSX1VQX09VVFNJREVcclxuICogQHNpbmNlIDMuMTYuMVxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuUG9pbnRlcn0gcG9pbnRlciAtIFRoZSBQb2ludGVyIHJlc3BvbnNpYmxlIGZvciB0cmlnZ2VyaW5nIHRoaXMgZXZlbnQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwb2ludGVydXBvdXRzaWRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/POINTER_UP_OUTSIDE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/POINTER_WHEEL_EVENT.js":
/*!*********************************************************************!*\
!*** ./node_modules/phaser/src/input/events/POINTER_WHEEL_EVENT.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Pointer Wheel Input Event.\r\n * \r\n * This event is dispatched by the Input Plugin belonging to a Scene if a pointer has its wheel updated.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.on('wheel', listener)`.\r\n * \r\n * The event hierarchy is as follows:\r\n * \r\n * 1. [GAMEOBJECT_POINTER_WHEEL]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_POINTER_WHEEL}\r\n * 2. [GAMEOBJECT_WHEEL]{@linkcode Phaser.Input.Events#event:GAMEOBJECT_WHEEL}\r\n * 3. [POINTER_WHEEL]{@linkcode Phaser.Input.Events#event:POINTER_WHEEL}\r\n * \r\n * With the top event being dispatched first and then flowing down the list. Note that higher-up event handlers can stop\r\n * the propagation of this event.\r\n *\r\n * @event Phaser.Input.Events#POINTER_WHEEL\r\n * @since 3.18.0\r\n * \r\n * @param {Phaser.Input.Pointer} pointer - The Pointer responsible for triggering this event.\r\n * @param {Phaser.GameObjects.GameObject[]} currentlyOver - An array containing all interactive Game Objects that the pointer was over when the event was created.\r\n * @param {number} deltaX - The horizontal scroll amount that occurred due to the user moving a mouse wheel or similar input device.\r\n * @param {number} deltaY - The vertical scroll amount that occurred due to the user moving a mouse wheel or similar input device. This value will typically be less than 0 if the user scrolls up and greater than zero if scrolling down.\r\n * @param {number} deltaZ - The z-axis scroll amount that occurred due to the user moving a mouse wheel or similar input device.\r\n */\r\nmodule.exports = 'wheel';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUE9JTlRFUl9XSEVFTF9FVkVOVC5qcz9jMjBkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakMseUJBQXlCO0FBQ3pCLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcsZ0NBQWdDO0FBQzNDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUE9JTlRFUl9XSEVFTF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBQb2ludGVyIFdoZWVsIElucHV0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBJbnB1dCBQbHVnaW4gYmVsb25naW5nIHRvIGEgU2NlbmUgaWYgYSBwb2ludGVyIGhhcyBpdHMgd2hlZWwgdXBkYXRlZC5cclxuICogXHJcbiAqIExpc3RlbiB0byB0aGlzIGV2ZW50IGZyb20gd2l0aGluIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmlucHV0Lm9uKCd3aGVlbCcsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBUaGUgZXZlbnQgaGllcmFyY2h5IGlzIGFzIGZvbGxvd3M6XHJcbiAqIFxyXG4gKiAxLiBbR0FNRU9CSkVDVF9QT0lOVEVSX1dIRUVMXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1BPSU5URVJfV0hFRUx9XHJcbiAqIDIuIFtHQU1FT0JKRUNUX1dIRUVMXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkV2ZW50cyNldmVudDpHQU1FT0JKRUNUX1dIRUVMfVxyXG4gKiAzLiBbUE9JTlRFUl9XSEVFTF17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5FdmVudHMjZXZlbnQ6UE9JTlRFUl9XSEVFTH1cclxuICogXHJcbiAqIFdpdGggdGhlIHRvcCBldmVudCBiZWluZyBkaXNwYXRjaGVkIGZpcnN0IGFuZCB0aGVuIGZsb3dpbmcgZG93biB0aGUgbGlzdC4gTm90ZSB0aGF0IGhpZ2hlci11cCBldmVudCBoYW5kbGVycyBjYW4gc3RvcFxyXG4gKiB0aGUgcHJvcGFnYXRpb24gb2YgdGhpcyBldmVudC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5FdmVudHMjUE9JTlRFUl9XSEVFTFxyXG4gKiBAc2luY2UgMy4xOC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5Qb2ludGVyfSBwb2ludGVyIC0gVGhlIFBvaW50ZXIgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgdGhpcyBldmVudC5cclxuICogQHBhcmFtIHtQaGFzZXIuR2FtZU9iamVjdHMuR2FtZU9iamVjdFtdfSBjdXJyZW50bHlPdmVyIC0gQW4gYXJyYXkgY29udGFpbmluZyBhbGwgaW50ZXJhY3RpdmUgR2FtZSBPYmplY3RzIHRoYXQgdGhlIHBvaW50ZXIgd2FzIG92ZXIgd2hlbiB0aGUgZXZlbnQgd2FzIGNyZWF0ZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVggLSBUaGUgaG9yaXpvbnRhbCBzY3JvbGwgYW1vdW50IHRoYXQgb2NjdXJyZWQgZHVlIHRvIHRoZSB1c2VyIG1vdmluZyBhIG1vdXNlIHdoZWVsIG9yIHNpbWlsYXIgaW5wdXQgZGV2aWNlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZGVsdGFZIC0gVGhlIHZlcnRpY2FsIHNjcm9sbCBhbW91bnQgdGhhdCBvY2N1cnJlZCBkdWUgdG8gdGhlIHVzZXIgbW92aW5nIGEgbW91c2Ugd2hlZWwgb3Igc2ltaWxhciBpbnB1dCBkZXZpY2UuIFRoaXMgdmFsdWUgd2lsbCB0eXBpY2FsbHkgYmUgbGVzcyB0aGFuIDAgaWYgdGhlIHVzZXIgc2Nyb2xscyB1cCBhbmQgZ3JlYXRlciB0aGFuIHplcm8gaWYgc2Nyb2xsaW5nIGRvd24uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVogLSBUaGUgei1heGlzIHNjcm9sbCBhbW91bnQgdGhhdCBvY2N1cnJlZCBkdWUgdG8gdGhlIHVzZXIgbW92aW5nIGEgbW91c2Ugd2hlZWwgb3Igc2ltaWxhciBpbnB1dCBkZXZpY2UuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICd3aGVlbCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/POINTER_WHEEL_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/PRE_UPDATE_EVENT.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/input/events/PRE_UPDATE_EVENT.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Input Plugin Pre-Update Event.\r\n * \r\n * This internal event is dispatched by the Input Plugin at the start of its `preUpdate` method.\r\n * This hook is designed specifically for input plugins, but can also be listened to from user-land code.\r\n *\r\n * @event Phaser.Input.Events#PRE_UPDATE\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'preupdate';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvUFJFX1VQREFURV9FVkVOVC5qcz82NjQyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9QUkVfVVBEQVRFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIElucHV0IFBsdWdpbiBQcmUtVXBkYXRlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBpbnRlcm5hbCBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBJbnB1dCBQbHVnaW4gYXQgdGhlIHN0YXJ0IG9mIGl0cyBgcHJlVXBkYXRlYCBtZXRob2QuXHJcbiAqIFRoaXMgaG9vayBpcyBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgZm9yIGlucHV0IHBsdWdpbnMsIGJ1dCBjYW4gYWxzbyBiZSBsaXN0ZW5lZCB0byBmcm9tIHVzZXItbGFuZCBjb2RlLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkV2ZW50cyNQUkVfVVBEQVRFXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAncHJldXBkYXRlJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/PRE_UPDATE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/SHUTDOWN_EVENT.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/input/events/SHUTDOWN_EVENT.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Input Plugin Shutdown Event.\r\n * \r\n * This internal event is dispatched by the Input Plugin when it shuts down, signalling to all of its systems to shut themselves down.\r\n *\r\n * @event Phaser.Input.Events#SHUTDOWN\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'shutdown';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvU0hVVERPV05fRVZFTlQuanM/ZGE3NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL1NIVVRET1dOX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIElucHV0IFBsdWdpbiBTaHV0ZG93biBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgaW50ZXJuYWwgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgUGx1Z2luIHdoZW4gaXQgc2h1dHMgZG93biwgc2lnbmFsbGluZyB0byBhbGwgb2YgaXRzIHN5c3RlbXMgdG8gc2h1dCB0aGVtc2VsdmVzIGRvd24uXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI1NIVVRET1dOXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnc2h1dGRvd24nO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/SHUTDOWN_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/START_EVENT.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/input/events/START_EVENT.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Input Plugin Start Event.\r\n * \r\n * This internal event is dispatched by the Input Plugin when it has finished setting-up,\r\n * signalling to all of its internal systems to start.\r\n *\r\n * @event Phaser.Input.Events#START\r\n * @since 3.0.0\r\n */\r\nmodule.exports = 'start';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvU1RBUlRfRVZFTlQuanM/NWI3YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvU1RBUlRfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgSW5wdXQgUGx1Z2luIFN0YXJ0IEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBpbnRlcm5hbCBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBJbnB1dCBQbHVnaW4gd2hlbiBpdCBoYXMgZmluaXNoZWQgc2V0dGluZy11cCxcclxuICogc2lnbmFsbGluZyB0byBhbGwgb2YgaXRzIGludGVybmFsIHN5c3RlbXMgdG8gc3RhcnQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuRXZlbnRzI1NUQVJUXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnc3RhcnQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/START_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/UPDATE_EVENT.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/input/events/UPDATE_EVENT.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Input Plugin Update Event.\r\n * \r\n * This internal event is dispatched by the Input Plugin at the start of its `update` method.\r\n * This hook is designed specifically for input plugins, but can also be listened to from user-land code.\r\n *\r\n * @event Phaser.Input.Events#UPDATE\r\n * @since 3.0.0\r\n * \r\n * @param {number} time - The current time. Either a High Resolution Timer value if it comes from Request Animation Frame, or Date.now if using SetTimeout.\r\n * @param {number} delta - The delta time in ms since the last frame. This is a smoothed and capped value based on the FPS rate.\r\n */\r\nmodule.exports = 'update';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvVVBEQVRFX0VWRU5ULmpzP2ExYjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2V2ZW50cy9VUERBVEVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgSW5wdXQgUGx1Z2luIFVwZGF0ZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgaW50ZXJuYWwgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgSW5wdXQgUGx1Z2luIGF0IHRoZSBzdGFydCBvZiBpdHMgYHVwZGF0ZWAgbWV0aG9kLlxyXG4gKiBUaGlzIGhvb2sgaXMgZGVzaWduZWQgc3BlY2lmaWNhbGx5IGZvciBpbnB1dCBwbHVnaW5zLCBidXQgY2FuIGFsc28gYmUgbGlzdGVuZWQgdG8gZnJvbSB1c2VyLWxhbmQgY29kZS5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5FdmVudHMjVVBEQVRFXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgLSBUaGUgY3VycmVudCB0aW1lLiBFaXRoZXIgYSBIaWdoIFJlc29sdXRpb24gVGltZXIgdmFsdWUgaWYgaXQgY29tZXMgZnJvbSBSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSwgb3IgRGF0ZS5ub3cgaWYgdXNpbmcgU2V0VGltZW91dC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIC0gVGhlIGRlbHRhIHRpbWUgaW4gbXMgc2luY2UgdGhlIGxhc3QgZnJhbWUuIFRoaXMgaXMgYSBzbW9vdGhlZCBhbmQgY2FwcGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBGUFMgcmF0ZS5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3VwZGF0ZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/UPDATE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/events/index.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/input/events/index.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Input.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n BOOT: __webpack_require__(/*! ./BOOT_EVENT */ \"./node_modules/phaser/src/input/events/BOOT_EVENT.js\"),\r\n DESTROY: __webpack_require__(/*! ./DESTROY_EVENT */ \"./node_modules/phaser/src/input/events/DESTROY_EVENT.js\"),\r\n DRAG_END: __webpack_require__(/*! ./DRAG_END_EVENT */ \"./node_modules/phaser/src/input/events/DRAG_END_EVENT.js\"),\r\n DRAG_ENTER: __webpack_require__(/*! ./DRAG_ENTER_EVENT */ \"./node_modules/phaser/src/input/events/DRAG_ENTER_EVENT.js\"),\r\n DRAG: __webpack_require__(/*! ./DRAG_EVENT */ \"./node_modules/phaser/src/input/events/DRAG_EVENT.js\"),\r\n DRAG_LEAVE: __webpack_require__(/*! ./DRAG_LEAVE_EVENT */ \"./node_modules/phaser/src/input/events/DRAG_LEAVE_EVENT.js\"),\r\n DRAG_OVER: __webpack_require__(/*! ./DRAG_OVER_EVENT */ \"./node_modules/phaser/src/input/events/DRAG_OVER_EVENT.js\"),\r\n DRAG_START: __webpack_require__(/*! ./DRAG_START_EVENT */ \"./node_modules/phaser/src/input/events/DRAG_START_EVENT.js\"),\r\n DROP: __webpack_require__(/*! ./DROP_EVENT */ \"./node_modules/phaser/src/input/events/DROP_EVENT.js\"),\r\n GAME_OUT: __webpack_require__(/*! ./GAME_OUT_EVENT */ \"./node_modules/phaser/src/input/events/GAME_OUT_EVENT.js\"),\r\n GAME_OVER: __webpack_require__(/*! ./GAME_OVER_EVENT */ \"./node_modules/phaser/src/input/events/GAME_OVER_EVENT.js\"),\r\n GAMEOBJECT_DOWN: __webpack_require__(/*! ./GAMEOBJECT_DOWN_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_DOWN_EVENT.js\"),\r\n GAMEOBJECT_DRAG_END: __webpack_require__(/*! ./GAMEOBJECT_DRAG_END_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_END_EVENT.js\"),\r\n GAMEOBJECT_DRAG_ENTER: __webpack_require__(/*! ./GAMEOBJECT_DRAG_ENTER_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_ENTER_EVENT.js\"),\r\n GAMEOBJECT_DRAG: __webpack_require__(/*! ./GAMEOBJECT_DRAG_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_EVENT.js\"),\r\n GAMEOBJECT_DRAG_LEAVE: __webpack_require__(/*! ./GAMEOBJECT_DRAG_LEAVE_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_LEAVE_EVENT.js\"),\r\n GAMEOBJECT_DRAG_OVER: __webpack_require__(/*! ./GAMEOBJECT_DRAG_OVER_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_OVER_EVENT.js\"),\r\n GAMEOBJECT_DRAG_START: __webpack_require__(/*! ./GAMEOBJECT_DRAG_START_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_DRAG_START_EVENT.js\"),\r\n GAMEOBJECT_DROP: __webpack_require__(/*! ./GAMEOBJECT_DROP_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_DROP_EVENT.js\"),\r\n GAMEOBJECT_MOVE: __webpack_require__(/*! ./GAMEOBJECT_MOVE_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_MOVE_EVENT.js\"),\r\n GAMEOBJECT_OUT: __webpack_require__(/*! ./GAMEOBJECT_OUT_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_OUT_EVENT.js\"),\r\n GAMEOBJECT_OVER: __webpack_require__(/*! ./GAMEOBJECT_OVER_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_OVER_EVENT.js\"),\r\n GAMEOBJECT_POINTER_DOWN: __webpack_require__(/*! ./GAMEOBJECT_POINTER_DOWN_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_DOWN_EVENT.js\"),\r\n GAMEOBJECT_POINTER_MOVE: __webpack_require__(/*! ./GAMEOBJECT_POINTER_MOVE_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_MOVE_EVENT.js\"),\r\n GAMEOBJECT_POINTER_OUT: __webpack_require__(/*! ./GAMEOBJECT_POINTER_OUT_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_OUT_EVENT.js\"),\r\n GAMEOBJECT_POINTER_OVER: __webpack_require__(/*! ./GAMEOBJECT_POINTER_OVER_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_OVER_EVENT.js\"),\r\n GAMEOBJECT_POINTER_UP: __webpack_require__(/*! ./GAMEOBJECT_POINTER_UP_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_UP_EVENT.js\"),\r\n GAMEOBJECT_POINTER_WHEEL: __webpack_require__(/*! ./GAMEOBJECT_POINTER_WHEEL_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_POINTER_WHEEL_EVENT.js\"),\r\n GAMEOBJECT_UP: __webpack_require__(/*! ./GAMEOBJECT_UP_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_UP_EVENT.js\"),\r\n GAMEOBJECT_WHEEL: __webpack_require__(/*! ./GAMEOBJECT_WHEEL_EVENT */ \"./node_modules/phaser/src/input/events/GAMEOBJECT_WHEEL_EVENT.js\"),\r\n MANAGER_BOOT: __webpack_require__(/*! ./MANAGER_BOOT_EVENT */ \"./node_modules/phaser/src/input/events/MANAGER_BOOT_EVENT.js\"),\r\n MANAGER_PROCESS: __webpack_require__(/*! ./MANAGER_PROCESS_EVENT */ \"./node_modules/phaser/src/input/events/MANAGER_PROCESS_EVENT.js\"),\r\n MANAGER_UPDATE: __webpack_require__(/*! ./MANAGER_UPDATE_EVENT */ \"./node_modules/phaser/src/input/events/MANAGER_UPDATE_EVENT.js\"),\r\n POINTER_DOWN: __webpack_require__(/*! ./POINTER_DOWN_EVENT */ \"./node_modules/phaser/src/input/events/POINTER_DOWN_EVENT.js\"),\r\n POINTER_DOWN_OUTSIDE: __webpack_require__(/*! ./POINTER_DOWN_OUTSIDE_EVENT */ \"./node_modules/phaser/src/input/events/POINTER_DOWN_OUTSIDE_EVENT.js\"),\r\n POINTER_MOVE: __webpack_require__(/*! ./POINTER_MOVE_EVENT */ \"./node_modules/phaser/src/input/events/POINTER_MOVE_EVENT.js\"),\r\n POINTER_OUT: __webpack_require__(/*! ./POINTER_OUT_EVENT */ \"./node_modules/phaser/src/input/events/POINTER_OUT_EVENT.js\"),\r\n POINTER_OVER: __webpack_require__(/*! ./POINTER_OVER_EVENT */ \"./node_modules/phaser/src/input/events/POINTER_OVER_EVENT.js\"),\r\n POINTER_UP: __webpack_require__(/*! ./POINTER_UP_EVENT */ \"./node_modules/phaser/src/input/events/POINTER_UP_EVENT.js\"),\r\n POINTER_UP_OUTSIDE: __webpack_require__(/*! ./POINTER_UP_OUTSIDE_EVENT */ \"./node_modules/phaser/src/input/events/POINTER_UP_OUTSIDE_EVENT.js\"),\r\n POINTER_WHEEL: __webpack_require__(/*! ./POINTER_WHEEL_EVENT */ \"./node_modules/phaser/src/input/events/POINTER_WHEEL_EVENT.js\"),\r\n POINTERLOCK_CHANGE: __webpack_require__(/*! ./POINTERLOCK_CHANGE_EVENT */ \"./node_modules/phaser/src/input/events/POINTERLOCK_CHANGE_EVENT.js\"),\r\n PRE_UPDATE: __webpack_require__(/*! ./PRE_UPDATE_EVENT */ \"./node_modules/phaser/src/input/events/PRE_UPDATE_EVENT.js\"),\r\n SHUTDOWN: __webpack_require__(/*! ./SHUTDOWN_EVENT */ \"./node_modules/phaser/src/input/events/SHUTDOWN_EVENT.js\"),\r\n START: __webpack_require__(/*! ./START_EVENT */ \"./node_modules/phaser/src/input/events/START_EVENT.js\"),\r\n UPDATE: __webpack_require__(/*! ./UPDATE_EVENT */ \"./node_modules/phaser/src/input/events/UPDATE_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9ldmVudHMvaW5kZXguanM/MjA5YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQywwRUFBYztBQUNoQyxhQUFhLG1CQUFPLENBQUMsZ0ZBQWlCO0FBQ3RDLGNBQWMsbUJBQU8sQ0FBQyxrRkFBa0I7QUFDeEMsZ0JBQWdCLG1CQUFPLENBQUMsc0ZBQW9CO0FBQzVDLFVBQVUsbUJBQU8sQ0FBQywwRUFBYztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxzRkFBb0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLG9GQUFtQjtBQUMxQyxnQkFBZ0IsbUJBQU8sQ0FBQyxzRkFBb0I7QUFDNUMsVUFBVSxtQkFBTyxDQUFDLDBFQUFjO0FBQ2hDLGNBQWMsbUJBQU8sQ0FBQyxrRkFBa0I7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLG9GQUFtQjtBQUMxQyxxQkFBcUIsbUJBQU8sQ0FBQyxnR0FBeUI7QUFDdEQseUJBQXlCLG1CQUFPLENBQUMsd0dBQTZCO0FBQzlELDJCQUEyQixtQkFBTyxDQUFDLDRHQUErQjtBQUNsRSxxQkFBcUIsbUJBQU8sQ0FBQyxnR0FBeUI7QUFDdEQsMkJBQTJCLG1CQUFPLENBQUMsNEdBQStCO0FBQ2xFLDBCQUEwQixtQkFBTyxDQUFDLDBHQUE4QjtBQUNoRSwyQkFBMkIsbUJBQU8sQ0FBQyw0R0FBK0I7QUFDbEUscUJBQXFCLG1CQUFPLENBQUMsZ0dBQXlCO0FBQ3RELHFCQUFxQixtQkFBTyxDQUFDLGdHQUF5QjtBQUN0RCxvQkFBb0IsbUJBQU8sQ0FBQyw4RkFBd0I7QUFDcEQscUJBQXFCLG1CQUFPLENBQUMsZ0dBQXlCO0FBQ3RELDZCQUE2QixtQkFBTyxDQUFDLGdIQUFpQztBQUN0RSw2QkFBNkIsbUJBQU8sQ0FBQyxnSEFBaUM7QUFDdEUsNEJBQTRCLG1CQUFPLENBQUMsOEdBQWdDO0FBQ3BFLDZCQUE2QixtQkFBTyxDQUFDLGdIQUFpQztBQUN0RSwyQkFBMkIsbUJBQU8sQ0FBQyw0R0FBK0I7QUFDbEUsOEJBQThCLG1CQUFPLENBQUMsa0hBQWtDO0FBQ3hFLG1CQUFtQixtQkFBTyxDQUFDLDRGQUF1QjtBQUNsRCxzQkFBc0IsbUJBQU8sQ0FBQyxrR0FBMEI7QUFDeEQsa0JBQWtCLG1CQUFPLENBQUMsMEZBQXNCO0FBQ2hELHFCQUFxQixtQkFBTyxDQUFDLGdHQUF5QjtBQUN0RCxvQkFBb0IsbUJBQU8sQ0FBQyw4RkFBd0I7QUFDcEQsa0JBQWtCLG1CQUFPLENBQUMsMEZBQXNCO0FBQ2hELDBCQUEwQixtQkFBTyxDQUFDLDBHQUE4QjtBQUNoRSxrQkFBa0IsbUJBQU8sQ0FBQywwRkFBc0I7QUFDaEQsaUJBQWlCLG1CQUFPLENBQUMsd0ZBQXFCO0FBQzlDLGtCQUFrQixtQkFBTyxDQUFDLDBGQUFzQjtBQUNoRCxnQkFBZ0IsbUJBQU8sQ0FBQyxzRkFBb0I7QUFDNUMsd0JBQXdCLG1CQUFPLENBQUMsc0dBQTRCO0FBQzVELG1CQUFtQixtQkFBTyxDQUFDLDRGQUF1QjtBQUNsRCx3QkFBd0IsbUJBQU8sQ0FBQyxzR0FBNEI7QUFDNUQsZ0JBQWdCLG1CQUFPLENBQUMsc0ZBQW9CO0FBQzVDLGNBQWMsbUJBQU8sQ0FBQyxrRkFBa0I7QUFDeEMsV0FBVyxtQkFBTyxDQUFDLDRFQUFlO0FBQ2xDLFlBQVksbUJBQU8sQ0FBQyw4RUFBZ0I7O0FBRXBDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZXZlbnRzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuSW5wdXQuRXZlbnRzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQk9PVDogcmVxdWlyZSgnLi9CT09UX0VWRU5UJyksXHJcbiAgICBERVNUUk9ZOiByZXF1aXJlKCcuL0RFU1RST1lfRVZFTlQnKSxcclxuICAgIERSQUdfRU5EOiByZXF1aXJlKCcuL0RSQUdfRU5EX0VWRU5UJyksXHJcbiAgICBEUkFHX0VOVEVSOiByZXF1aXJlKCcuL0RSQUdfRU5URVJfRVZFTlQnKSxcclxuICAgIERSQUc6IHJlcXVpcmUoJy4vRFJBR19FVkVOVCcpLFxyXG4gICAgRFJBR19MRUFWRTogcmVxdWlyZSgnLi9EUkFHX0xFQVZFX0VWRU5UJyksXHJcbiAgICBEUkFHX09WRVI6IHJlcXVpcmUoJy4vRFJBR19PVkVSX0VWRU5UJyksXHJcbiAgICBEUkFHX1NUQVJUOiByZXF1aXJlKCcuL0RSQUdfU1RBUlRfRVZFTlQnKSxcclxuICAgIERST1A6IHJlcXVpcmUoJy4vRFJPUF9FVkVOVCcpLFxyXG4gICAgR0FNRV9PVVQ6IHJlcXVpcmUoJy4vR0FNRV9PVVRfRVZFTlQnKSxcclxuICAgIEdBTUVfT1ZFUjogcmVxdWlyZSgnLi9HQU1FX09WRVJfRVZFTlQnKSxcclxuICAgIEdBTUVPQkpFQ1RfRE9XTjogcmVxdWlyZSgnLi9HQU1FT0JKRUNUX0RPV05fRVZFTlQnKSxcclxuICAgIEdBTUVPQkpFQ1RfRFJBR19FTkQ6IHJlcXVpcmUoJy4vR0FNRU9CSkVDVF9EUkFHX0VORF9FVkVOVCcpLFxyXG4gICAgR0FNRU9CSkVDVF9EUkFHX0VOVEVSOiByZXF1aXJlKCcuL0dBTUVPQkpFQ1RfRFJBR19FTlRFUl9FVkVOVCcpLFxyXG4gICAgR0FNRU9CSkVDVF9EUkFHOiByZXF1aXJlKCcuL0dBTUVPQkpFQ1RfRFJBR19FVkVOVCcpLFxyXG4gICAgR0FNRU9CSkVDVF9EUkFHX0xFQVZFOiByZXF1aXJlKCcuL0dBTUVPQkpFQ1RfRFJBR19MRUFWRV9FVkVOVCcpLFxyXG4gICAgR0FNRU9CSkVDVF9EUkFHX09WRVI6IHJlcXVpcmUoJy4vR0FNRU9CSkVDVF9EUkFHX09WRVJfRVZFTlQnKSxcclxuICAgIEdBTUVPQkpFQ1RfRFJBR19TVEFSVDogcmVxdWlyZSgnLi9HQU1FT0JKRUNUX0RSQUdfU1RBUlRfRVZFTlQnKSxcclxuICAgIEdBTUVPQkpFQ1RfRFJPUDogcmVxdWlyZSgnLi9HQU1FT0JKRUNUX0RST1BfRVZFTlQnKSxcclxuICAgIEdBTUVPQkpFQ1RfTU9WRTogcmVxdWlyZSgnLi9HQU1FT0JKRUNUX01PVkVfRVZFTlQnKSxcclxuICAgIEdBTUVPQkpFQ1RfT1VUOiByZXF1aXJlKCcuL0dBTUVPQkpFQ1RfT1VUX0VWRU5UJyksXHJcbiAgICBHQU1FT0JKRUNUX09WRVI6IHJlcXVpcmUoJy4vR0FNRU9CSkVDVF9PVkVSX0VWRU5UJyksXHJcbiAgICBHQU1FT0JKRUNUX1BPSU5URVJfRE9XTjogcmVxdWlyZSgnLi9HQU1FT0JKRUNUX1BPSU5URVJfRE9XTl9FVkVOVCcpLFxyXG4gICAgR0FNRU9CSkVDVF9QT0lOVEVSX01PVkU6IHJlcXVpcmUoJy4vR0FNRU9CSkVDVF9QT0lOVEVSX01PVkVfRVZFTlQnKSxcclxuICAgIEdBTUVPQkpFQ1RfUE9JTlRFUl9PVVQ6IHJlcXVpcmUoJy4vR0FNRU9CSkVDVF9QT0lOVEVSX09VVF9FVkVOVCcpLFxyXG4gICAgR0FNRU9CSkVDVF9QT0lOVEVSX09WRVI6IHJlcXVpcmUoJy4vR0FNRU9CSkVDVF9QT0lOVEVSX09WRVJfRVZFTlQnKSxcclxuICAgIEdBTUVPQkpFQ1RfUE9JTlRFUl9VUDogcmVxdWlyZSgnLi9HQU1FT0JKRUNUX1BPSU5URVJfVVBfRVZFTlQnKSxcclxuICAgIEdBTUVPQkpFQ1RfUE9JTlRFUl9XSEVFTDogcmVxdWlyZSgnLi9HQU1FT0JKRUNUX1BPSU5URVJfV0hFRUxfRVZFTlQnKSxcclxuICAgIEdBTUVPQkpFQ1RfVVA6IHJlcXVpcmUoJy4vR0FNRU9CSkVDVF9VUF9FVkVOVCcpLFxyXG4gICAgR0FNRU9CSkVDVF9XSEVFTDogcmVxdWlyZSgnLi9HQU1FT0JKRUNUX1dIRUVMX0VWRU5UJyksXHJcbiAgICBNQU5BR0VSX0JPT1Q6IHJlcXVpcmUoJy4vTUFOQUdFUl9CT09UX0VWRU5UJyksXHJcbiAgICBNQU5BR0VSX1BST0NFU1M6IHJlcXVpcmUoJy4vTUFOQUdFUl9QUk9DRVNTX0VWRU5UJyksXHJcbiAgICBNQU5BR0VSX1VQREFURTogcmVxdWlyZSgnLi9NQU5BR0VSX1VQREFURV9FVkVOVCcpLFxyXG4gICAgUE9JTlRFUl9ET1dOOiByZXF1aXJlKCcuL1BPSU5URVJfRE9XTl9FVkVOVCcpLFxyXG4gICAgUE9JTlRFUl9ET1dOX09VVFNJREU6IHJlcXVpcmUoJy4vUE9JTlRFUl9ET1dOX09VVFNJREVfRVZFTlQnKSxcclxuICAgIFBPSU5URVJfTU9WRTogcmVxdWlyZSgnLi9QT0lOVEVSX01PVkVfRVZFTlQnKSxcclxuICAgIFBPSU5URVJfT1VUOiByZXF1aXJlKCcuL1BPSU5URVJfT1VUX0VWRU5UJyksXHJcbiAgICBQT0lOVEVSX09WRVI6IHJlcXVpcmUoJy4vUE9JTlRFUl9PVkVSX0VWRU5UJyksXHJcbiAgICBQT0lOVEVSX1VQOiByZXF1aXJlKCcuL1BPSU5URVJfVVBfRVZFTlQnKSxcclxuICAgIFBPSU5URVJfVVBfT1VUU0lERTogcmVxdWlyZSgnLi9QT0lOVEVSX1VQX09VVFNJREVfRVZFTlQnKSxcclxuICAgIFBPSU5URVJfV0hFRUw6IHJlcXVpcmUoJy4vUE9JTlRFUl9XSEVFTF9FVkVOVCcpLFxyXG4gICAgUE9JTlRFUkxPQ0tfQ0hBTkdFOiByZXF1aXJlKCcuL1BPSU5URVJMT0NLX0NIQU5HRV9FVkVOVCcpLFxyXG4gICAgUFJFX1VQREFURTogcmVxdWlyZSgnLi9QUkVfVVBEQVRFX0VWRU5UJyksXHJcbiAgICBTSFVURE9XTjogcmVxdWlyZSgnLi9TSFVURE9XTl9FVkVOVCcpLFxyXG4gICAgU1RBUlQ6IHJlcXVpcmUoJy4vU1RBUlRfRVZFTlQnKSxcclxuICAgIFVQREFURTogcmVxdWlyZSgnLi9VUERBVEVfRVZFTlQnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/events/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/gamepad/Axis.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/input/gamepad/Axis.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @classdesc\r\n * Contains information about a specific Gamepad Axis.\r\n * Axis objects are created automatically by the Gamepad as they are needed.\r\n *\r\n * @class Axis\r\n * @memberof Phaser.Input.Gamepad\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Gamepad.Gamepad} pad - A reference to the Gamepad that this Axis belongs to.\r\n * @param {integer} index - The index of this Axis.\r\n */\r\nvar Axis = new Class({\r\n\r\n initialize:\r\n\r\n function Axis (pad, index)\r\n {\r\n /**\r\n * A reference to the Gamepad that this Axis belongs to.\r\n *\r\n * @name Phaser.Input.Gamepad.Axis#pad\r\n * @type {Phaser.Input.Gamepad.Gamepad}\r\n * @since 3.0.0\r\n */\r\n this.pad = pad;\r\n\r\n /**\r\n * An event emitter to use to emit the axis events.\r\n *\r\n * @name Phaser.Input.Gamepad.Axis#events\r\n * @type {Phaser.Events.EventEmitter}\r\n * @since 3.0.0\r\n */\r\n this.events = pad.events;\r\n\r\n /**\r\n * The index of this Axis.\r\n *\r\n * @name Phaser.Input.Gamepad.Axis#index\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n this.index = index;\r\n\r\n /**\r\n * The raw axis value, between -1 and 1 with 0 being dead center.\r\n * Use the method `getValue` to get a normalized value with the threshold applied.\r\n *\r\n * @name Phaser.Input.Gamepad.Axis#value\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.value = 0;\r\n\r\n /**\r\n * Movement tolerance threshold below which axis values are ignored in `getValue`.\r\n *\r\n * @name Phaser.Input.Gamepad.Axis#threshold\r\n * @type {number}\r\n * @default 0.1\r\n * @since 3.0.0\r\n */\r\n this.threshold = 0.1;\r\n },\r\n\r\n /**\r\n * Internal update handler for this Axis.\r\n * Called automatically by the Gamepad as part of its update.\r\n *\r\n * @method Phaser.Input.Gamepad.Axis#update\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The value of the axis movement.\r\n */\r\n update: function (value)\r\n {\r\n this.value = value;\r\n },\r\n\r\n /**\r\n * Applies the `threshold` value to the axis and returns it.\r\n *\r\n * @method Phaser.Input.Gamepad.Axis#getValue\r\n * @since 3.0.0\r\n *\r\n * @return {number} The axis value, adjusted for the movement threshold.\r\n */\r\n getValue: function ()\r\n {\r\n return (Math.abs(this.value) < this.threshold) ? 0 : this.value;\r\n },\r\n\r\n /**\r\n * Destroys this Axis instance and releases external references it holds.\r\n *\r\n * @method Phaser.Input.Gamepad.Axis#destroy\r\n * @since 3.10.0\r\n */\r\n destroy: function ()\r\n {\r\n this.pad = null;\r\n this.events = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Axis;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL0F4aXMuanM/YTBhMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDZCQUE2QjtBQUN4QyxXQUFXLFFBQVE7QUFDbkI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2dhbWVwYWQvQXhpcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIENvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGEgc3BlY2lmaWMgR2FtZXBhZCBBeGlzLlxyXG4gKiBBeGlzIG9iamVjdHMgYXJlIGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgR2FtZXBhZCBhcyB0aGV5IGFyZSBuZWVkZWQuXHJcbiAqXHJcbiAqIEBjbGFzcyBBeGlzXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuSW5wdXQuR2FtZXBhZFxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZH0gcGFkIC0gQSByZWZlcmVuY2UgdG8gdGhlIEdhbWVwYWQgdGhhdCB0aGlzIEF4aXMgYmVsb25ncyB0by5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGlzIEF4aXMuXHJcbiAqL1xyXG52YXIgQXhpcyA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBBeGlzIChwYWQsIGluZGV4KVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBHYW1lcGFkIHRoYXQgdGhpcyBBeGlzIGJlbG9uZ3MgdG8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5BeGlzI3BhZFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGFkID0gcGFkO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBldmVudCBlbWl0dGVyIHRvIHVzZSB0byBlbWl0IHRoZSBheGlzIGV2ZW50cy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkF4aXMjZXZlbnRzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5FdmVudHMuRXZlbnRFbWl0dGVyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZXZlbnRzID0gcGFkLmV2ZW50cztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGluZGV4IG9mIHRoaXMgQXhpcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkF4aXMjaW5kZXhcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSByYXcgYXhpcyB2YWx1ZSwgYmV0d2VlbiAtMSBhbmQgMSB3aXRoIDAgYmVpbmcgZGVhZCBjZW50ZXIuXHJcbiAgICAgICAgICogVXNlIHRoZSBtZXRob2QgYGdldFZhbHVlYCB0byBnZXQgYSBub3JtYWxpemVkIHZhbHVlIHdpdGggdGhlIHRocmVzaG9sZCBhcHBsaWVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuQXhpcyN2YWx1ZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNb3ZlbWVudCB0b2xlcmFuY2UgdGhyZXNob2xkIGJlbG93IHdoaWNoIGF4aXMgdmFsdWVzIGFyZSBpZ25vcmVkIGluIGBnZXRWYWx1ZWAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5BeGlzI3RocmVzaG9sZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMC4xXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aHJlc2hvbGQgPSAwLjE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgdXBkYXRlIGhhbmRsZXIgZm9yIHRoaXMgQXhpcy5cclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBHYW1lcGFkIGFzIHBhcnQgb2YgaXRzIHVwZGF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5HYW1lcGFkLkF4aXMjdXBkYXRlXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHZhbHVlIG9mIHRoZSBheGlzIG1vdmVtZW50LlxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICh2YWx1ZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbGllcyB0aGUgYHRocmVzaG9sZGAgdmFsdWUgdG8gdGhlIGF4aXMgYW5kIHJldHVybnMgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuR2FtZXBhZC5BeGlzI2dldFZhbHVlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBheGlzIHZhbHVlLCBhZGp1c3RlZCBmb3IgdGhlIG1vdmVtZW50IHRocmVzaG9sZC5cclxuICAgICAqL1xyXG4gICAgZ2V0VmFsdWU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIChNYXRoLmFicyh0aGlzLnZhbHVlKSA8IHRoaXMudGhyZXNob2xkKSA/IDAgOiB0aGlzLnZhbHVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoaXMgQXhpcyBpbnN0YW5jZSBhbmQgcmVsZWFzZXMgZXh0ZXJuYWwgcmVmZXJlbmNlcyBpdCBob2xkcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5HYW1lcGFkLkF4aXMjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucGFkID0gbnVsbDtcclxuICAgICAgICB0aGlzLmV2ZW50cyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQXhpcztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/Axis.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/gamepad/Button.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/input/gamepad/Button.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/input/gamepad/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * Contains information about a specific button on a Gamepad.\r\n * Button objects are created automatically by the Gamepad as they are needed.\r\n *\r\n * @class Button\r\n * @memberof Phaser.Input.Gamepad\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Gamepad.Gamepad} pad - A reference to the Gamepad that this Button belongs to.\r\n * @param {integer} index - The index of this Button.\r\n */\r\nvar Button = new Class({\r\n\r\n initialize:\r\n\r\n function Button (pad, index)\r\n {\r\n /**\r\n * A reference to the Gamepad that this Button belongs to.\r\n *\r\n * @name Phaser.Input.Gamepad.Button#pad\r\n * @type {Phaser.Input.Gamepad.Gamepad}\r\n * @since 3.0.0\r\n */\r\n this.pad = pad;\r\n\r\n /**\r\n * An event emitter to use to emit the button events.\r\n *\r\n * @name Phaser.Input.Gamepad.Button#events\r\n * @type {Phaser.Events.EventEmitter}\r\n * @since 3.0.0\r\n */\r\n this.events = pad.manager;\r\n\r\n /**\r\n * The index of this Button.\r\n *\r\n * @name Phaser.Input.Gamepad.Button#index\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n this.index = index;\r\n\r\n /**\r\n * Between 0 and 1.\r\n *\r\n * @name Phaser.Input.Gamepad.Button#value\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.value = 0;\r\n\r\n /**\r\n * Can be set for analogue buttons to enable a 'pressure' threshold,\r\n * before a button is considered as being 'pressed'.\r\n *\r\n * @name Phaser.Input.Gamepad.Button#threshold\r\n * @type {number}\r\n * @default 1\r\n * @since 3.0.0\r\n */\r\n this.threshold = 1;\r\n\r\n /**\r\n * Is the Button being pressed down or not?\r\n *\r\n * @name Phaser.Input.Gamepad.Button#pressed\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.pressed = false;\r\n },\r\n\r\n /**\r\n * Internal update handler for this Button.\r\n * Called automatically by the Gamepad as part of its update.\r\n *\r\n * @method Phaser.Input.Gamepad.Button#update\r\n * @fires Phaser.Input.Gamepad.Events#BUTTON_DOWN\r\n * @fires Phaser.Input.Gamepad.Events#BUTTON_UP\r\n * @fires Phaser.Input.Gamepad.Events#GAMEPAD_BUTTON_DOWN\r\n * @fires Phaser.Input.Gamepad.Events#GAMEPAD_BUTTON_UP\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {number} value - The value of the button. Between 0 and 1.\r\n */\r\n update: function (value)\r\n {\r\n this.value = value;\r\n\r\n var pad = this.pad;\r\n var index = this.index;\r\n\r\n if (value >= this.threshold)\r\n {\r\n if (!this.pressed)\r\n {\r\n this.pressed = true;\r\n this.events.emit(Events.BUTTON_DOWN, pad, this, value);\r\n this.pad.emit(Events.GAMEPAD_BUTTON_DOWN, index, value, this);\r\n }\r\n }\r\n else if (this.pressed)\r\n {\r\n this.pressed = false;\r\n this.events.emit(Events.BUTTON_UP, pad, this, value);\r\n this.pad.emit(Events.GAMEPAD_BUTTON_UP, index, value, this);\r\n }\r\n },\r\n\r\n /**\r\n * Destroys this Button instance and releases external references it holds.\r\n *\r\n * @method Phaser.Input.Gamepad.Button#destroy\r\n * @since 3.10.0\r\n */\r\n destroy: function ()\r\n {\r\n this.pad = null;\r\n this.events = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Button;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL0J1dHRvbi5qcz9iYjY2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLGFBQWEsbUJBQU8sQ0FBQyx5RUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDZCQUE2QjtBQUN4QyxXQUFXLFFBQVE7QUFDbkI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL0J1dHRvbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEV2ZW50cyA9IHJlcXVpcmUoJy4vZXZlbnRzJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIHNwZWNpZmljIGJ1dHRvbiBvbiBhIEdhbWVwYWQuXHJcbiAqIEJ1dHRvbiBvYmplY3RzIGFyZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIEdhbWVwYWQgYXMgdGhleSBhcmUgbmVlZGVkLlxyXG4gKlxyXG4gKiBAY2xhc3MgQnV0dG9uXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuSW5wdXQuR2FtZXBhZFxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZH0gcGFkIC0gQSByZWZlcmVuY2UgdG8gdGhlIEdhbWVwYWQgdGhhdCB0aGlzIEJ1dHRvbiBiZWxvbmdzIHRvLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGluZGV4IC0gVGhlIGluZGV4IG9mIHRoaXMgQnV0dG9uLlxyXG4gKi9cclxudmFyIEJ1dHRvbiA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBCdXR0b24gKHBhZCwgaW5kZXgpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIEdhbWVwYWQgdGhhdCB0aGlzIEJ1dHRvbiBiZWxvbmdzIHRvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuQnV0dG9uI3BhZFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGFkID0gcGFkO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBldmVudCBlbWl0dGVyIHRvIHVzZSB0byBlbWl0IHRoZSBidXR0b24gZXZlbnRzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuQnV0dG9uI2V2ZW50c1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmV2ZW50cyA9IHBhZC5tYW5hZ2VyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgaW5kZXggb2YgdGhpcyBCdXR0b24uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5CdXR0b24jaW5kZXhcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEJldHdlZW4gMCBhbmQgMS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkJ1dHRvbiN2YWx1ZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW4gYmUgc2V0IGZvciBhbmFsb2d1ZSBidXR0b25zIHRvIGVuYWJsZSBhICdwcmVzc3VyZScgdGhyZXNob2xkLFxyXG4gICAgICAgICAqIGJlZm9yZSBhIGJ1dHRvbiBpcyBjb25zaWRlcmVkIGFzIGJlaW5nICdwcmVzc2VkJy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkJ1dHRvbiN0aHJlc2hvbGRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRocmVzaG9sZCA9IDE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElzIHRoZSBCdXR0b24gYmVpbmcgcHJlc3NlZCBkb3duIG9yIG5vdD9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkJ1dHRvbiNwcmVzc2VkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnByZXNzZWQgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCB1cGRhdGUgaGFuZGxlciBmb3IgdGhpcyBCdXR0b24uXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgR2FtZXBhZCBhcyBwYXJ0IG9mIGl0cyB1cGRhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuR2FtZXBhZC5CdXR0b24jdXBkYXRlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkdhbWVwYWQuRXZlbnRzI0JVVFRPTl9ET1dOXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkdhbWVwYWQuRXZlbnRzI0JVVFRPTl9VUFxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5HYW1lcGFkLkV2ZW50cyNHQU1FUEFEX0JVVFRPTl9ET1dOXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LkdhbWVwYWQuRXZlbnRzI0dBTUVQQURfQlVUVE9OX1VQXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHZhbHVlIG9mIHRoZSBidXR0b24uIEJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICB2YXIgcGFkID0gdGhpcy5wYWQ7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleDtcclxuXHJcbiAgICAgICAgaWYgKHZhbHVlID49IHRoaXMudGhyZXNob2xkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnByZXNzZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJlc3NlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KEV2ZW50cy5CVVRUT05fRE9XTiwgcGFkLCB0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhZC5lbWl0KEV2ZW50cy5HQU1FUEFEX0JVVFRPTl9ET1dOLCBpbmRleCwgdmFsdWUsIHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMucHJlc3NlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlc3NlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KEV2ZW50cy5CVVRUT05fVVAsIHBhZCwgdGhpcywgdmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLnBhZC5lbWl0KEV2ZW50cy5HQU1FUEFEX0JVVFRPTl9VUCwgaW5kZXgsIHZhbHVlLCB0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhpcyBCdXR0b24gaW5zdGFuY2UgYW5kIHJlbGVhc2VzIGV4dGVybmFsIHJlZmVyZW5jZXMgaXQgaG9sZHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuR2FtZXBhZC5CdXR0b24jZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucGFkID0gbnVsbDtcclxuICAgICAgICB0aGlzLmV2ZW50cyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQnV0dG9uO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/Button.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/gamepad/Gamepad.js":
/*!**********************************************************!*\
!*** ./node_modules/phaser/src/input/gamepad/Gamepad.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Axis = __webpack_require__(/*! ./Axis */ \"./node_modules/phaser/src/input/gamepad/Axis.js\");\r\nvar Button = __webpack_require__(/*! ./Button */ \"./node_modules/phaser/src/input/gamepad/Button.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Vector2 = __webpack_require__(/*! ../../math/Vector2 */ \"./node_modules/phaser/src/math/Vector2.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Gamepad.\r\n *\r\n * These are created, updated and managed by the Gamepad Plugin.\r\n *\r\n * @class Gamepad\r\n * @extends Phaser.Events.EventEmitter\r\n * @memberof Phaser.Input.Gamepad\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Gamepad.GamepadPlugin} manager - A reference to the Gamepad Plugin.\r\n * @param {Phaser.Types.Input.Gamepad.Pad} pad - The Gamepad object, as extracted from GamepadEvent.\r\n */\r\nvar Gamepad = new Class({\r\n\r\n Extends: EventEmitter,\r\n\r\n initialize:\r\n\r\n function Gamepad (manager, pad)\r\n {\r\n EventEmitter.call(this);\r\n\r\n /**\r\n * A reference to the Gamepad Plugin.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#manager\r\n * @type {Phaser.Input.Gamepad.GamepadPlugin}\r\n * @since 3.0.0\r\n */\r\n this.manager = manager;\r\n\r\n /**\r\n * A reference to the native Gamepad object that is connected to the browser.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#pad\r\n * @type {any}\r\n * @since 3.10.0\r\n */\r\n this.pad = pad;\r\n\r\n /**\r\n * A string containing some information about the controller.\r\n *\r\n * This is not strictly specified, but in Firefox it will contain three pieces of information\r\n * separated by dashes (-): two 4-digit hexadecimal strings containing the USB vendor and\r\n * product id of the controller, and the name of the controller as provided by the driver.\r\n * In Chrome it will contain the name of the controller as provided by the driver,\r\n * followed by vendor and product 4-digit hexadecimal strings.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#id\r\n * @type {string}\r\n * @since 3.0.0\r\n */\r\n this.id = pad.id;\r\n\r\n /**\r\n * An integer that is unique for each Gamepad currently connected to the system.\r\n * This can be used to distinguish multiple controllers.\r\n * Note that disconnecting a device and then connecting a new device may reuse the previous index.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#index\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.index = pad.index;\r\n\r\n var buttons = [];\r\n\r\n for (var i = 0; i < pad.buttons.length; i++)\r\n {\r\n buttons.push(new Button(this, i));\r\n }\r\n\r\n /**\r\n * An array of Gamepad Button objects, corresponding to the different buttons available on the Gamepad.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#buttons\r\n * @type {Phaser.Input.Gamepad.Button[]}\r\n * @since 3.0.0\r\n */\r\n this.buttons = buttons;\r\n\r\n var axes = [];\r\n\r\n for (i = 0; i < pad.axes.length; i++)\r\n {\r\n axes.push(new Axis(this, i));\r\n }\r\n\r\n /**\r\n * An array of Gamepad Axis objects, corresponding to the different axes available on the Gamepad, if any.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#axes\r\n * @type {Phaser.Input.Gamepad.Axis[]}\r\n * @since 3.0.0\r\n */\r\n this.axes = axes;\r\n\r\n /**\r\n * The Gamepad's Haptic Actuator (Vibration / Rumble support).\r\n * This is highly experimental and only set if both present on the device,\r\n * and exposed by both the hardware and browser.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#vibration\r\n * @type {GamepadHapticActuator}\r\n * @since 3.10.0\r\n */\r\n this.vibration = pad.vibrationActuator;\r\n\r\n // https://w3c.github.io/gamepad/#remapping\r\n\r\n var _noButton = { value: 0, pressed: false };\r\n\r\n /**\r\n * A reference to the Left Button in the Left Cluster.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#_LCLeft\r\n * @type {Phaser.Input.Gamepad.Button}\r\n * @private\r\n * @since 3.10.0\r\n */\r\n this._LCLeft = (buttons[14]) ? buttons[14] : _noButton;\r\n\r\n /**\r\n * A reference to the Right Button in the Left Cluster.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#_LCRight\r\n * @type {Phaser.Input.Gamepad.Button}\r\n * @private\r\n * @since 3.10.0\r\n */\r\n this._LCRight = (buttons[15]) ? buttons[15] : _noButton;\r\n\r\n /**\r\n * A reference to the Top Button in the Left Cluster.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#_LCTop\r\n * @type {Phaser.Input.Gamepad.Button}\r\n * @private\r\n * @since 3.10.0\r\n */\r\n this._LCTop = (buttons[12]) ? buttons[12] : _noButton;\r\n\r\n /**\r\n * A reference to the Bottom Button in the Left Cluster.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#_LCBottom\r\n * @type {Phaser.Input.Gamepad.Button}\r\n * @private\r\n * @since 3.10.0\r\n */\r\n this._LCBottom = (buttons[13]) ? buttons[13] : _noButton;\r\n\r\n /**\r\n * A reference to the Left Button in the Right Cluster.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#_RCLeft\r\n * @type {Phaser.Input.Gamepad.Button}\r\n * @private\r\n * @since 3.10.0\r\n */\r\n this._RCLeft = (buttons[2]) ? buttons[2] : _noButton;\r\n\r\n /**\r\n * A reference to the Right Button in the Right Cluster.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#_RCRight\r\n * @type {Phaser.Input.Gamepad.Button}\r\n * @private\r\n * @since 3.10.0\r\n */\r\n this._RCRight = (buttons[1]) ? buttons[1] : _noButton;\r\n\r\n /**\r\n * A reference to the Top Button in the Right Cluster.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#_RCTop\r\n * @type {Phaser.Input.Gamepad.Button}\r\n * @private\r\n * @since 3.10.0\r\n */\r\n this._RCTop = (buttons[3]) ? buttons[3] : _noButton;\r\n\r\n /**\r\n * A reference to the Bottom Button in the Right Cluster.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#_RCBottom\r\n * @type {Phaser.Input.Gamepad.Button}\r\n * @private\r\n * @since 3.10.0\r\n */\r\n this._RCBottom = (buttons[0]) ? buttons[0] : _noButton;\r\n\r\n /**\r\n * A reference to the Top Left Front Button (L1 Shoulder Button)\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#_FBLeftTop\r\n * @type {Phaser.Input.Gamepad.Button}\r\n * @private\r\n * @since 3.10.0\r\n */\r\n this._FBLeftTop = (buttons[4]) ? buttons[4] : _noButton;\r\n\r\n /**\r\n * A reference to the Bottom Left Front Button (L2 Shoulder Button)\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#_FBLeftBottom\r\n * @type {Phaser.Input.Gamepad.Button}\r\n * @private\r\n * @since 3.10.0\r\n */\r\n this._FBLeftBottom = (buttons[6]) ? buttons[6] : _noButton;\r\n\r\n /**\r\n * A reference to the Top Right Front Button (R1 Shoulder Button)\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#_FBRightTop\r\n * @type {Phaser.Input.Gamepad.Button}\r\n * @private\r\n * @since 3.10.0\r\n */\r\n this._FBRightTop = (buttons[5]) ? buttons[5] : _noButton;\r\n\r\n /**\r\n * A reference to the Bottom Right Front Button (R2 Shoulder Button)\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#_FBRightBottom\r\n * @type {Phaser.Input.Gamepad.Button}\r\n * @private\r\n * @since 3.10.0\r\n */\r\n this._FBRightBottom = (buttons[7]) ? buttons[7] : _noButton;\r\n\r\n var _noAxis = { value: 0 };\r\n\r\n /**\r\n * A reference to the Horizontal Axis for the Left Stick.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#_HAxisLeft\r\n * @type {Phaser.Input.Gamepad.Button}\r\n * @private\r\n * @since 3.10.0\r\n */\r\n this._HAxisLeft = (axes[0]) ? axes[0] : _noAxis;\r\n\r\n /**\r\n * A reference to the Vertical Axis for the Left Stick.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#_VAxisLeft\r\n * @type {Phaser.Input.Gamepad.Button}\r\n * @private\r\n * @since 3.10.0\r\n */\r\n this._VAxisLeft = (axes[1]) ? axes[1] : _noAxis;\r\n\r\n /**\r\n * A reference to the Horizontal Axis for the Right Stick.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#_HAxisRight\r\n * @type {Phaser.Input.Gamepad.Button}\r\n * @private\r\n * @since 3.10.0\r\n */\r\n this._HAxisRight = (axes[2]) ? axes[2] : _noAxis;\r\n\r\n /**\r\n * A reference to the Vertical Axis for the Right Stick.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#_VAxisRight\r\n * @type {Phaser.Input.Gamepad.Button}\r\n * @private\r\n * @since 3.10.0\r\n */\r\n this._VAxisRight = (axes[3]) ? axes[3] : _noAxis;\r\n\r\n /**\r\n * A Vector2 containing the most recent values from the Gamepad's left axis stick.\r\n * This is updated automatically as part of the Gamepad.update cycle.\r\n * The H Axis is mapped to the `Vector2.x` property, and the V Axis to the `Vector2.y` property.\r\n * The values are based on the Axis thresholds.\r\n * If the Gamepad does not have a left axis stick, the values will always be zero.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#leftStick\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.10.0\r\n */\r\n this.leftStick = new Vector2();\r\n\r\n /**\r\n * A Vector2 containing the most recent values from the Gamepad's right axis stick.\r\n * This is updated automatically as part of the Gamepad.update cycle.\r\n * The H Axis is mapped to the `Vector2.x` property, and the V Axis to the `Vector2.y` property.\r\n * The values are based on the Axis thresholds.\r\n * If the Gamepad does not have a right axis stick, the values will always be zero.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#rightStick\r\n * @type {Phaser.Math.Vector2}\r\n * @since 3.10.0\r\n */\r\n this.rightStick = new Vector2();\r\n },\r\n\r\n /**\r\n * Gets the total number of axis this Gamepad claims to support.\r\n *\r\n * @method Phaser.Input.Gamepad.Gamepad#getAxisTotal\r\n * @since 3.10.0\r\n *\r\n * @return {integer} The total number of axes this Gamepad claims to support.\r\n */\r\n getAxisTotal: function ()\r\n {\r\n return this.axes.length;\r\n },\r\n\r\n /**\r\n * Gets the value of an axis based on the given index.\r\n * The index must be valid within the range of axes supported by this Gamepad.\r\n * The return value will be a float between 0 and 1.\r\n *\r\n * @method Phaser.Input.Gamepad.Gamepad#getAxisValue\r\n * @since 3.10.0\r\n *\r\n * @param {integer} index - The index of the axes to get the value for.\r\n *\r\n * @return {number} The value of the axis, between 0 and 1.\r\n */\r\n getAxisValue: function (index)\r\n {\r\n return this.axes[index].getValue();\r\n },\r\n\r\n /**\r\n * Sets the threshold value of all axis on this Gamepad.\r\n * The value is a float between 0 and 1 and is the amount below which the axis is considered as not having been moved.\r\n *\r\n * @method Phaser.Input.Gamepad.Gamepad#setAxisThreshold\r\n * @since 3.10.0\r\n *\r\n * @param {number} value - A value between 0 and 1.\r\n */\r\n setAxisThreshold: function (value)\r\n {\r\n for (var i = 0; i < this.axes.length; i++)\r\n {\r\n this.axes[i].threshold = value;\r\n }\r\n },\r\n\r\n /**\r\n * Gets the total number of buttons this Gamepad claims to have.\r\n *\r\n * @method Phaser.Input.Gamepad.Gamepad#getButtonTotal\r\n * @since 3.10.0\r\n *\r\n * @return {integer} The total number of buttons this Gamepad claims to have.\r\n */\r\n getButtonTotal: function ()\r\n {\r\n return this.buttons.length;\r\n },\r\n\r\n /**\r\n * Gets the value of a button based on the given index.\r\n * The index must be valid within the range of buttons supported by this Gamepad.\r\n *\r\n * The return value will be either 0 or 1 for an analogue button, or a float between 0 and 1\r\n * for a pressure-sensitive digital button, such as the shoulder buttons on a Dual Shock.\r\n *\r\n * @method Phaser.Input.Gamepad.Gamepad#getButtonValue\r\n * @since 3.10.0\r\n *\r\n * @param {integer} index - The index of the button to get the value for.\r\n *\r\n * @return {number} The value of the button, between 0 and 1.\r\n */\r\n getButtonValue: function (index)\r\n {\r\n return this.buttons[index].value;\r\n },\r\n\r\n /**\r\n * Returns if the button is pressed down or not.\r\n * The index must be valid within the range of buttons supported by this Gamepad.\r\n *\r\n * @method Phaser.Input.Gamepad.Gamepad#isButtonDown\r\n * @since 3.10.0\r\n *\r\n * @param {integer} index - The index of the button to get the value for.\r\n *\r\n * @return {boolean} `true` if the button is considered as being pressed down, otherwise `false`.\r\n */\r\n isButtonDown: function (index)\r\n {\r\n return this.buttons[index].pressed;\r\n },\r\n\r\n /**\r\n * Internal update handler for this Gamepad.\r\n * Called automatically by the Gamepad Manager as part of its update.\r\n *\r\n * @method Phaser.Input.Gamepad.Gamepad#update\r\n * @private\r\n * @since 3.0.0\r\n */\r\n update: function (pad)\r\n {\r\n var i;\r\n\r\n // Sync the button values\r\n\r\n var localButtons = this.buttons;\r\n var gamepadButtons = pad.buttons;\r\n\r\n var len = localButtons.length;\r\n\r\n for (i = 0; i < len; i++)\r\n {\r\n localButtons[i].update(gamepadButtons[i].value);\r\n }\r\n\r\n // Sync the axis values\r\n\r\n var localAxes = this.axes;\r\n var gamepadAxes = pad.axes;\r\n\r\n len = localAxes.length;\r\n\r\n for (i = 0; i < len; i++)\r\n {\r\n localAxes[i].update(gamepadAxes[i]);\r\n }\r\n\r\n if (len >= 2)\r\n {\r\n this.leftStick.set(localAxes[0].getValue(), localAxes[1].getValue());\r\n\r\n if (len >= 4)\r\n {\r\n this.rightStick.set(localAxes[2].getValue(), localAxes[3].getValue());\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Destroys this Gamepad instance, its buttons and axes, and releases external references it holds.\r\n *\r\n * @method Phaser.Input.Gamepad.Gamepad#destroy\r\n * @since 3.10.0\r\n */\r\n destroy: function ()\r\n {\r\n this.removeAllListeners();\r\n\r\n this.manager = null;\r\n this.pad = null;\r\n\r\n var i;\r\n\r\n for (i = 0; i < this.buttons.length; i++)\r\n {\r\n this.buttons[i].destroy();\r\n }\r\n\r\n for (i = 0; i < this.axes.length; i++)\r\n {\r\n this.axes[i].destroy();\r\n }\r\n\r\n this.buttons = [];\r\n this.axes = [];\r\n },\r\n\r\n /**\r\n * Is this Gamepad currently connected or not?\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#connected\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n connected: {\r\n\r\n get: function ()\r\n {\r\n return this.pad.connected;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * A timestamp containing the most recent time this Gamepad was updated.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#timestamp\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n timestamp: {\r\n\r\n get: function ()\r\n {\r\n return this.pad.timestamp;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Is the Gamepad's Left button being pressed?\r\n * If the Gamepad doesn't have this button it will always return false.\r\n * This is the d-pad left button under standard Gamepad mapping.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#left\r\n * @type {boolean}\r\n * @since 3.10.0\r\n */\r\n left: {\r\n\r\n get: function ()\r\n {\r\n return this._LCLeft.pressed;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Is the Gamepad's Right button being pressed?\r\n * If the Gamepad doesn't have this button it will always return false.\r\n * This is the d-pad right button under standard Gamepad mapping.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#right\r\n * @type {boolean}\r\n * @since 3.10.0\r\n */\r\n right: {\r\n\r\n get: function ()\r\n {\r\n return this._LCRight.pressed;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Is the Gamepad's Up button being pressed?\r\n * If the Gamepad doesn't have this button it will always return false.\r\n * This is the d-pad up button under standard Gamepad mapping.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#up\r\n * @type {boolean}\r\n * @since 3.10.0\r\n */\r\n up: {\r\n\r\n get: function ()\r\n {\r\n return this._LCTop.pressed;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Is the Gamepad's Down button being pressed?\r\n * If the Gamepad doesn't have this button it will always return false.\r\n * This is the d-pad down button under standard Gamepad mapping.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#down\r\n * @type {boolean}\r\n * @since 3.10.0\r\n */\r\n down: {\r\n\r\n get: function ()\r\n {\r\n return this._LCBottom.pressed;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Is the Gamepad's bottom button in the right button cluster being pressed?\r\n * If the Gamepad doesn't have this button it will always return false.\r\n * On a Dual Shock controller it's the X button.\r\n * On an XBox controller it's the A button.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#A\r\n * @type {boolean}\r\n * @since 3.10.0\r\n */\r\n A: {\r\n\r\n get: function ()\r\n {\r\n return this._RCBottom.pressed;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Is the Gamepad's top button in the right button cluster being pressed?\r\n * If the Gamepad doesn't have this button it will always return false.\r\n * On a Dual Shock controller it's the Triangle button.\r\n * On an XBox controller it's the Y button.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#Y\r\n * @type {boolean}\r\n * @since 3.10.0\r\n */\r\n Y: {\r\n\r\n get: function ()\r\n {\r\n return this._RCTop.pressed;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Is the Gamepad's left button in the right button cluster being pressed?\r\n * If the Gamepad doesn't have this button it will always return false.\r\n * On a Dual Shock controller it's the Square button.\r\n * On an XBox controller it's the X button.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#X\r\n * @type {boolean}\r\n * @since 3.10.0\r\n */\r\n X: {\r\n\r\n get: function ()\r\n {\r\n return this._RCLeft.pressed;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Is the Gamepad's right button in the right button cluster being pressed?\r\n * If the Gamepad doesn't have this button it will always return false.\r\n * On a Dual Shock controller it's the Circle button.\r\n * On an XBox controller it's the B button.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#B\r\n * @type {boolean}\r\n * @since 3.10.0\r\n */\r\n B: {\r\n\r\n get: function ()\r\n {\r\n return this._RCRight.pressed;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Returns the value of the Gamepad's top left shoulder button.\r\n * If the Gamepad doesn't have this button it will always return zero.\r\n * The value is a float between 0 and 1, corresponding to how depressed the button is.\r\n * On a Dual Shock controller it's the L1 button.\r\n * On an XBox controller it's the LB button.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#L1\r\n * @type {number}\r\n * @since 3.10.0\r\n */\r\n L1: {\r\n\r\n get: function ()\r\n {\r\n return this._FBLeftTop.value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Returns the value of the Gamepad's bottom left shoulder button.\r\n * If the Gamepad doesn't have this button it will always return zero.\r\n * The value is a float between 0 and 1, corresponding to how depressed the button is.\r\n * On a Dual Shock controller it's the L2 button.\r\n * On an XBox controller it's the LT button.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#L2\r\n * @type {number}\r\n * @since 3.10.0\r\n */\r\n L2: {\r\n\r\n get: function ()\r\n {\r\n return this._FBLeftBottom.value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Returns the value of the Gamepad's top right shoulder button.\r\n * If the Gamepad doesn't have this button it will always return zero.\r\n * The value is a float between 0 and 1, corresponding to how depressed the button is.\r\n * On a Dual Shock controller it's the R1 button.\r\n * On an XBox controller it's the RB button.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#R1\r\n * @type {number}\r\n * @since 3.10.0\r\n */\r\n R1: {\r\n\r\n get: function ()\r\n {\r\n return this._FBRightTop.value;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Returns the value of the Gamepad's bottom right shoulder button.\r\n * If the Gamepad doesn't have this button it will always return zero.\r\n * The value is a float between 0 and 1, corresponding to how depressed the button is.\r\n * On a Dual Shock controller it's the R2 button.\r\n * On an XBox controller it's the RT button.\r\n *\r\n * @name Phaser.Input.Gamepad.Gamepad#R2\r\n * @type {number}\r\n * @since 3.10.0\r\n */\r\n R2: {\r\n\r\n get: function ()\r\n {\r\n return this._FBRightBottom.value;\r\n }\r\n\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Gamepad;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL0dhbWVwYWQuanM/NGQyZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLCtEQUFRO0FBQzNCLGFBQWEsbUJBQU8sQ0FBQyxtRUFBVTtBQUMvQixZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLG1CQUFtQixtQkFBTyxDQUFDLDREQUFlO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxxRUFBb0I7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbUNBQW1DO0FBQzlDLFdBQVcsK0JBQStCO0FBQzFDO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsdUJBQXVCLHdCQUF3QjtBQUMvQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBOztBQUVBLG1CQUFtQixxQkFBcUI7QUFDeEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBOztBQUVBLHlCQUF5Qjs7QUFFekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLFNBQVM7QUFDNUI7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLFNBQVM7QUFDNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxtQkFBbUIseUJBQXlCO0FBQzVDO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZ2FtZXBhZC9HYW1lcGFkLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQXhpcyA9IHJlcXVpcmUoJy4vQXhpcycpO1xyXG52YXIgQnV0dG9uID0gcmVxdWlyZSgnLi9CdXR0b24nKTtcclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcclxudmFyIFZlY3RvcjIgPSByZXF1aXJlKCcuLi8uLi9tYXRoL1ZlY3RvcjInKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgc2luZ2xlIEdhbWVwYWQuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSBjcmVhdGVkLCB1cGRhdGVkIGFuZCBtYW5hZ2VkIGJ5IHRoZSBHYW1lcGFkIFBsdWdpbi5cclxuICpcclxuICogQGNsYXNzIEdhbWVwYWRcclxuICogQGV4dGVuZHMgUGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5JbnB1dC5HYW1lcGFkXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2lufSBtYW5hZ2VyIC0gQSByZWZlcmVuY2UgdG8gdGhlIEdhbWVwYWQgUGx1Z2luLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5JbnB1dC5HYW1lcGFkLlBhZH0gcGFkIC0gVGhlIEdhbWVwYWQgb2JqZWN0LCBhcyBleHRyYWN0ZWQgZnJvbSBHYW1lcGFkRXZlbnQuXHJcbiAqL1xyXG52YXIgR2FtZXBhZCA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogRXZlbnRFbWl0dGVyLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gR2FtZXBhZCAobWFuYWdlciwgcGFkKVxyXG4gICAge1xyXG4gICAgICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgR2FtZXBhZCBQbHVnaW4uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI21hbmFnZXJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZFBsdWdpbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgbmF0aXZlIEdhbWVwYWQgb2JqZWN0IHRoYXQgaXMgY29ubmVjdGVkIHRvIHRoZSBicm93c2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNwYWRcclxuICAgICAgICAgKiBAdHlwZSB7YW55fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBhZCA9IHBhZDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBzdHJpbmcgY29udGFpbmluZyBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb250cm9sbGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhpcyBpcyBub3Qgc3RyaWN0bHkgc3BlY2lmaWVkLCBidXQgaW4gRmlyZWZveCBpdCB3aWxsIGNvbnRhaW4gdGhyZWUgcGllY2VzIG9mIGluZm9ybWF0aW9uXHJcbiAgICAgICAgICogc2VwYXJhdGVkIGJ5IGRhc2hlcyAoLSk6IHR3byA0LWRpZ2l0IGhleGFkZWNpbWFsIHN0cmluZ3MgY29udGFpbmluZyB0aGUgVVNCIHZlbmRvciBhbmRcclxuICAgICAgICAgKiBwcm9kdWN0IGlkIG9mIHRoZSBjb250cm9sbGVyLCBhbmQgdGhlIG5hbWUgb2YgdGhlIGNvbnRyb2xsZXIgYXMgcHJvdmlkZWQgYnkgdGhlIGRyaXZlci5cclxuICAgICAgICAgKiBJbiBDaHJvbWUgaXQgd2lsbCBjb250YWluIHRoZSBuYW1lIG9mIHRoZSBjb250cm9sbGVyIGFzIHByb3ZpZGVkIGJ5IHRoZSBkcml2ZXIsXHJcbiAgICAgICAgICogZm9sbG93ZWQgYnkgdmVuZG9yIGFuZCBwcm9kdWN0IDQtZGlnaXQgaGV4YWRlY2ltYWwgc3RyaW5ncy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWQjaWRcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaWQgPSBwYWQuaWQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGludGVnZXIgdGhhdCBpcyB1bmlxdWUgZm9yIGVhY2ggR2FtZXBhZCBjdXJyZW50bHkgY29ubmVjdGVkIHRvIHRoZSBzeXN0ZW0uXHJcbiAgICAgICAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBkaXN0aW5ndWlzaCBtdWx0aXBsZSBjb250cm9sbGVycy5cclxuICAgICAgICAgKiBOb3RlIHRoYXQgZGlzY29ubmVjdGluZyBhIGRldmljZSBhbmQgdGhlbiBjb25uZWN0aW5nIGEgbmV3IGRldmljZSBtYXkgcmV1c2UgdGhlIHByZXZpb3VzIGluZGV4LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNpbmRleFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbmRleCA9IHBhZC5pbmRleDtcclxuXHJcbiAgICAgICAgdmFyIGJ1dHRvbnMgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWQuYnV0dG9ucy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGJ1dHRvbnMucHVzaChuZXcgQnV0dG9uKHRoaXMsIGkpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGFycmF5IG9mIEdhbWVwYWQgQnV0dG9uIG9iamVjdHMsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRpZmZlcmVudCBidXR0b25zIGF2YWlsYWJsZSBvbiB0aGUgR2FtZXBhZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWQjYnV0dG9uc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuR2FtZXBhZC5CdXR0b25bXX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJ1dHRvbnMgPSBidXR0b25zO1xyXG5cclxuICAgICAgICB2YXIgYXhlcyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFkLmF4ZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBheGVzLnB1c2gobmV3IEF4aXModGhpcywgaSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQW4gYXJyYXkgb2YgR2FtZXBhZCBBeGlzIG9iamVjdHMsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRpZmZlcmVudCBheGVzIGF2YWlsYWJsZSBvbiB0aGUgR2FtZXBhZCwgaWYgYW55LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNheGVzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkF4aXNbXX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmF4ZXMgPSBheGVzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgR2FtZXBhZCdzIEhhcHRpYyBBY3R1YXRvciAoVmlicmF0aW9uIC8gUnVtYmxlIHN1cHBvcnQpLlxyXG4gICAgICAgICAqIFRoaXMgaXMgaGlnaGx5IGV4cGVyaW1lbnRhbCBhbmQgb25seSBzZXQgaWYgYm90aCBwcmVzZW50IG9uIHRoZSBkZXZpY2UsXHJcbiAgICAgICAgICogYW5kIGV4cG9zZWQgYnkgYm90aCB0aGUgaGFyZHdhcmUgYW5kIGJyb3dzZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI3ZpYnJhdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtHYW1lcGFkSGFwdGljQWN0dWF0b3J9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudmlicmF0aW9uID0gcGFkLnZpYnJhdGlvbkFjdHVhdG9yO1xyXG5cclxuICAgICAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8vZ2FtZXBhZC8jcmVtYXBwaW5nXHJcblxyXG4gICAgICAgIHZhciBfbm9CdXR0b24gPSB7IHZhbHVlOiAwLCBwcmVzc2VkOiBmYWxzZSB9O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgTGVmdCBCdXR0b24gaW4gdGhlIExlZnQgQ2x1c3Rlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWQjX0xDTGVmdFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuR2FtZXBhZC5CdXR0b259XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fTENMZWZ0ID0gKGJ1dHRvbnNbMTRdKSA/IGJ1dHRvbnNbMTRdIDogX25vQnV0dG9uO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgUmlnaHQgQnV0dG9uIGluIHRoZSBMZWZ0IENsdXN0ZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI19MQ1JpZ2h0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkJ1dHRvbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9MQ1JpZ2h0ID0gKGJ1dHRvbnNbMTVdKSA/IGJ1dHRvbnNbMTVdIDogX25vQnV0dG9uO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgVG9wIEJ1dHRvbiBpbiB0aGUgTGVmdCBDbHVzdGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNfTENUb3BcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LkdhbWVwYWQuQnV0dG9ufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX0xDVG9wID0gKGJ1dHRvbnNbMTJdKSA/IGJ1dHRvbnNbMTJdIDogX25vQnV0dG9uO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgQm90dG9tIEJ1dHRvbiBpbiB0aGUgTGVmdCBDbHVzdGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNfTENCb3R0b21cclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LkdhbWVwYWQuQnV0dG9ufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX0xDQm90dG9tID0gKGJ1dHRvbnNbMTNdKSA/IGJ1dHRvbnNbMTNdIDogX25vQnV0dG9uO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgTGVmdCBCdXR0b24gaW4gdGhlIFJpZ2h0IENsdXN0ZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI19SQ0xlZnRcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LkdhbWVwYWQuQnV0dG9ufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX1JDTGVmdCA9IChidXR0b25zWzJdKSA/IGJ1dHRvbnNbMl0gOiBfbm9CdXR0b247XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBSaWdodCBCdXR0b24gaW4gdGhlIFJpZ2h0IENsdXN0ZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI19SQ1JpZ2h0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkJ1dHRvbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9SQ1JpZ2h0ID0gKGJ1dHRvbnNbMV0pID8gYnV0dG9uc1sxXSA6IF9ub0J1dHRvbjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFRvcCBCdXR0b24gaW4gdGhlIFJpZ2h0IENsdXN0ZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI19SQ1RvcFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuR2FtZXBhZC5CdXR0b259XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fUkNUb3AgPSAoYnV0dG9uc1szXSkgPyBidXR0b25zWzNdIDogX25vQnV0dG9uO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgQm90dG9tIEJ1dHRvbiBpbiB0aGUgUmlnaHQgQ2x1c3Rlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWQjX1JDQm90dG9tXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkJ1dHRvbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9SQ0JvdHRvbSA9IChidXR0b25zWzBdKSA/IGJ1dHRvbnNbMF0gOiBfbm9CdXR0b247XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBUb3AgTGVmdCBGcm9udCBCdXR0b24gKEwxIFNob3VsZGVyIEJ1dHRvbilcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWQjX0ZCTGVmdFRvcFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuR2FtZXBhZC5CdXR0b259XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fRkJMZWZ0VG9wID0gKGJ1dHRvbnNbNF0pID8gYnV0dG9uc1s0XSA6IF9ub0J1dHRvbjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIEJvdHRvbSBMZWZ0IEZyb250IEJ1dHRvbiAoTDIgU2hvdWxkZXIgQnV0dG9uKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNfRkJMZWZ0Qm90dG9tXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkJ1dHRvbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9GQkxlZnRCb3R0b20gPSAoYnV0dG9uc1s2XSkgPyBidXR0b25zWzZdIDogX25vQnV0dG9uO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgVG9wIFJpZ2h0IEZyb250IEJ1dHRvbiAoUjEgU2hvdWxkZXIgQnV0dG9uKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNfRkJSaWdodFRvcFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuR2FtZXBhZC5CdXR0b259XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fRkJSaWdodFRvcCA9IChidXR0b25zWzVdKSA/IGJ1dHRvbnNbNV0gOiBfbm9CdXR0b247XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBCb3R0b20gUmlnaHQgRnJvbnQgQnV0dG9uIChSMiBTaG91bGRlciBCdXR0b24pXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI19GQlJpZ2h0Qm90dG9tXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkJ1dHRvbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9GQlJpZ2h0Qm90dG9tID0gKGJ1dHRvbnNbN10pID8gYnV0dG9uc1s3XSA6IF9ub0J1dHRvbjtcclxuXHJcbiAgICAgICAgdmFyIF9ub0F4aXMgPSB7IHZhbHVlOiAwIH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBIb3Jpem9udGFsIEF4aXMgZm9yIHRoZSBMZWZ0IFN0aWNrLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNfSEF4aXNMZWZ0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkJ1dHRvbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9IQXhpc0xlZnQgPSAoYXhlc1swXSkgPyBheGVzWzBdIDogX25vQXhpcztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFZlcnRpY2FsIEF4aXMgZm9yIHRoZSBMZWZ0IFN0aWNrLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNfVkF4aXNMZWZ0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkJ1dHRvbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9WQXhpc0xlZnQgPSAoYXhlc1sxXSkgPyBheGVzWzFdIDogX25vQXhpcztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIEhvcml6b250YWwgQXhpcyBmb3IgdGhlIFJpZ2h0IFN0aWNrLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNfSEF4aXNSaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuR2FtZXBhZC5CdXR0b259XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fSEF4aXNSaWdodCA9IChheGVzWzJdKSA/IGF4ZXNbMl0gOiBfbm9BeGlzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgVmVydGljYWwgQXhpcyBmb3IgdGhlIFJpZ2h0IFN0aWNrLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNfVkF4aXNSaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuR2FtZXBhZC5CdXR0b259XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fVkF4aXNSaWdodCA9IChheGVzWzNdKSA/IGF4ZXNbM10gOiBfbm9BeGlzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIFZlY3RvcjIgY29udGFpbmluZyB0aGUgbW9zdCByZWNlbnQgdmFsdWVzIGZyb20gdGhlIEdhbWVwYWQncyBsZWZ0IGF4aXMgc3RpY2suXHJcbiAgICAgICAgICogVGhpcyBpcyB1cGRhdGVkIGF1dG9tYXRpY2FsbHkgYXMgcGFydCBvZiB0aGUgR2FtZXBhZC51cGRhdGUgY3ljbGUuXHJcbiAgICAgICAgICogVGhlIEggQXhpcyBpcyBtYXBwZWQgdG8gdGhlIGBWZWN0b3IyLnhgIHByb3BlcnR5LCBhbmQgdGhlIFYgQXhpcyB0byB0aGUgYFZlY3RvcjIueWAgcHJvcGVydHkuXHJcbiAgICAgICAgICogVGhlIHZhbHVlcyBhcmUgYmFzZWQgb24gdGhlIEF4aXMgdGhyZXNob2xkcy5cclxuICAgICAgICAgKiBJZiB0aGUgR2FtZXBhZCBkb2VzIG5vdCBoYXZlIGEgbGVmdCBheGlzIHN0aWNrLCB0aGUgdmFsdWVzIHdpbGwgYWx3YXlzIGJlIHplcm8uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI2xlZnRTdGlja1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTWF0aC5WZWN0b3IyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxlZnRTdGljayA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgVmVjdG9yMiBjb250YWluaW5nIHRoZSBtb3N0IHJlY2VudCB2YWx1ZXMgZnJvbSB0aGUgR2FtZXBhZCdzIHJpZ2h0IGF4aXMgc3RpY2suXHJcbiAgICAgICAgICogVGhpcyBpcyB1cGRhdGVkIGF1dG9tYXRpY2FsbHkgYXMgcGFydCBvZiB0aGUgR2FtZXBhZC51cGRhdGUgY3ljbGUuXHJcbiAgICAgICAgICogVGhlIEggQXhpcyBpcyBtYXBwZWQgdG8gdGhlIGBWZWN0b3IyLnhgIHByb3BlcnR5LCBhbmQgdGhlIFYgQXhpcyB0byB0aGUgYFZlY3RvcjIueWAgcHJvcGVydHkuXHJcbiAgICAgICAgICogVGhlIHZhbHVlcyBhcmUgYmFzZWQgb24gdGhlIEF4aXMgdGhyZXNob2xkcy5cclxuICAgICAgICAgKiBJZiB0aGUgR2FtZXBhZCBkb2VzIG5vdCBoYXZlIGEgcmlnaHQgYXhpcyBzdGljaywgdGhlIHZhbHVlcyB3aWxsIGFsd2F5cyBiZSB6ZXJvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNyaWdodFN0aWNrXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5NYXRoLlZlY3RvcjJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmlnaHRTdGljayA9IG5ldyBWZWN0b3IyKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdG90YWwgbnVtYmVyIG9mIGF4aXMgdGhpcyBHYW1lcGFkIGNsYWltcyB0byBzdXBwb3J0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNnZXRBeGlzVG90YWxcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtpbnRlZ2VyfSBUaGUgdG90YWwgbnVtYmVyIG9mIGF4ZXMgdGhpcyBHYW1lcGFkIGNsYWltcyB0byBzdXBwb3J0LlxyXG4gICAgICovXHJcbiAgICBnZXRBeGlzVG90YWw6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXhlcy5sZW5ndGg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdmFsdWUgb2YgYW4gYXhpcyBiYXNlZCBvbiB0aGUgZ2l2ZW4gaW5kZXguXHJcbiAgICAgKiBUaGUgaW5kZXggbXVzdCBiZSB2YWxpZCB3aXRoaW4gdGhlIHJhbmdlIG9mIGF4ZXMgc3VwcG9ydGVkIGJ5IHRoaXMgR2FtZXBhZC5cclxuICAgICAqIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBhIGZsb2F0IGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWQjZ2V0QXhpc1ZhbHVlXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgYXhlcyB0byBnZXQgdGhlIHZhbHVlIGZvci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB2YWx1ZSBvZiB0aGUgYXhpcywgYmV0d2VlbiAwIGFuZCAxLlxyXG4gICAgICovXHJcbiAgICBnZXRBeGlzVmFsdWU6IGZ1bmN0aW9uIChpbmRleClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5heGVzW2luZGV4XS5nZXRWYWx1ZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHRocmVzaG9sZCB2YWx1ZSBvZiBhbGwgYXhpcyBvbiB0aGlzIEdhbWVwYWQuXHJcbiAgICAgKiBUaGUgdmFsdWUgaXMgYSBmbG9hdCBiZXR3ZWVuIDAgYW5kIDEgYW5kIGlzIHRoZSBhbW91bnQgYmVsb3cgd2hpY2ggdGhlIGF4aXMgaXMgY29uc2lkZXJlZCBhcyBub3QgaGF2aW5nIGJlZW4gbW92ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI3NldEF4aXNUaHJlc2hvbGRcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqL1xyXG4gICAgc2V0QXhpc1RocmVzaG9sZDogZnVuY3Rpb24gKHZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5heGVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5heGVzW2ldLnRocmVzaG9sZCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSB0b3RhbCBudW1iZXIgb2YgYnV0dG9ucyB0aGlzIEdhbWVwYWQgY2xhaW1zIHRvIGhhdmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI2dldEJ1dHRvblRvdGFsXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcn0gVGhlIHRvdGFsIG51bWJlciBvZiBidXR0b25zIHRoaXMgR2FtZXBhZCBjbGFpbXMgdG8gaGF2ZS5cclxuICAgICAqL1xyXG4gICAgZ2V0QnV0dG9uVG90YWw6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnV0dG9ucy5sZW5ndGg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdmFsdWUgb2YgYSBidXR0b24gYmFzZWQgb24gdGhlIGdpdmVuIGluZGV4LlxyXG4gICAgICogVGhlIGluZGV4IG11c3QgYmUgdmFsaWQgd2l0aGluIHRoZSByYW5nZSBvZiBidXR0b25zIHN1cHBvcnRlZCBieSB0aGlzIEdhbWVwYWQuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGVpdGhlciAwIG9yIDEgZm9yIGFuIGFuYWxvZ3VlIGJ1dHRvbiwgb3IgYSBmbG9hdCBiZXR3ZWVuIDAgYW5kIDFcclxuICAgICAqIGZvciBhIHByZXNzdXJlLXNlbnNpdGl2ZSBkaWdpdGFsIGJ1dHRvbiwgc3VjaCBhcyB0aGUgc2hvdWxkZXIgYnV0dG9ucyBvbiBhIER1YWwgU2hvY2suXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI2dldEJ1dHRvblZhbHVlXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgYnV0dG9uIHRvIGdldCB0aGUgdmFsdWUgZm9yLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIHZhbHVlIG9mIHRoZSBidXR0b24sIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqL1xyXG4gICAgZ2V0QnV0dG9uVmFsdWU6IGZ1bmN0aW9uIChpbmRleClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5idXR0b25zW2luZGV4XS52YWx1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSBidXR0b24gaXMgcHJlc3NlZCBkb3duIG9yIG5vdC5cclxuICAgICAqIFRoZSBpbmRleCBtdXN0IGJlIHZhbGlkIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgYnV0dG9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBHYW1lcGFkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNpc0J1dHRvbkRvd25cclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IGluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBidXR0b24gdG8gZ2V0IHRoZSB2YWx1ZSBmb3IuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBidXR0b24gaXMgY29uc2lkZXJlZCBhcyBiZWluZyBwcmVzc2VkIGRvd24sIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBpc0J1dHRvbkRvd246IGZ1bmN0aW9uIChpbmRleClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5idXR0b25zW2luZGV4XS5wcmVzc2VkO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIHVwZGF0ZSBoYW5kbGVyIGZvciB0aGlzIEdhbWVwYWQuXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgR2FtZXBhZCBNYW5hZ2VyIGFzIHBhcnQgb2YgaXRzIHVwZGF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWQjdXBkYXRlXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKHBhZClcclxuICAgIHtcclxuICAgICAgICB2YXIgaTtcclxuXHJcbiAgICAgICAgLy8gIFN5bmMgdGhlIGJ1dHRvbiB2YWx1ZXNcclxuXHJcbiAgICAgICAgdmFyIGxvY2FsQnV0dG9ucyA9IHRoaXMuYnV0dG9ucztcclxuICAgICAgICB2YXIgZ2FtZXBhZEJ1dHRvbnMgPSBwYWQuYnV0dG9ucztcclxuXHJcbiAgICAgICAgdmFyIGxlbiA9IGxvY2FsQnV0dG9ucy5sZW5ndGg7XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGxvY2FsQnV0dG9uc1tpXS51cGRhdGUoZ2FtZXBhZEJ1dHRvbnNbaV0udmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFN5bmMgdGhlIGF4aXMgdmFsdWVzXHJcblxyXG4gICAgICAgIHZhciBsb2NhbEF4ZXMgPSB0aGlzLmF4ZXM7XHJcbiAgICAgICAgdmFyIGdhbWVwYWRBeGVzID0gcGFkLmF4ZXM7XHJcblxyXG4gICAgICAgIGxlbiA9IGxvY2FsQXhlcy5sZW5ndGg7XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGxvY2FsQXhlc1tpXS51cGRhdGUoZ2FtZXBhZEF4ZXNbaV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGxlbiA+PSAyKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5sZWZ0U3RpY2suc2V0KGxvY2FsQXhlc1swXS5nZXRWYWx1ZSgpLCBsb2NhbEF4ZXNbMV0uZ2V0VmFsdWUoKSk7XHJcblxyXG4gICAgICAgICAgICBpZiAobGVuID49IDQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRTdGljay5zZXQobG9jYWxBeGVzWzJdLmdldFZhbHVlKCksIGxvY2FsQXhlc1szXS5nZXRWYWx1ZSgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGlzIEdhbWVwYWQgaW5zdGFuY2UsIGl0cyBidXR0b25zIGFuZCBheGVzLCBhbmQgcmVsZWFzZXMgZXh0ZXJuYWwgcmVmZXJlbmNlcyBpdCBob2xkcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWQjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XHJcblxyXG4gICAgICAgIHRoaXMubWFuYWdlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5wYWQgPSBudWxsO1xyXG5cclxuICAgICAgICB2YXIgaTtcclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYnV0dG9ucy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uc1tpXS5kZXN0cm95KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5heGVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5heGVzW2ldLmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYnV0dG9ucyA9IFtdO1xyXG4gICAgICAgIHRoaXMuYXhlcyA9IFtdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElzIHRoaXMgR2FtZXBhZCBjdXJyZW50bHkgY29ubmVjdGVkIG9yIG5vdD9cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI2Nvbm5lY3RlZFxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgY29ubmVjdGVkOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhZC5jb25uZWN0ZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHRpbWVzdGFtcCBjb250YWluaW5nIHRoZSBtb3N0IHJlY2VudCB0aW1lIHRoaXMgR2FtZXBhZCB3YXMgdXBkYXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI3RpbWVzdGFtcFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB0aW1lc3RhbXA6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFkLnRpbWVzdGFtcDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElzIHRoZSBHYW1lcGFkJ3MgTGVmdCBidXR0b24gYmVpbmcgcHJlc3NlZD9cclxuICAgICAqIElmIHRoZSBHYW1lcGFkIGRvZXNuJ3QgaGF2ZSB0aGlzIGJ1dHRvbiBpdCB3aWxsIGFsd2F5cyByZXR1cm4gZmFsc2UuXHJcbiAgICAgKiBUaGlzIGlzIHRoZSBkLXBhZCBsZWZ0IGJ1dHRvbiB1bmRlciBzdGFuZGFyZCBHYW1lcGFkIG1hcHBpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNsZWZ0XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgbGVmdDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fTENMZWZ0LnByZXNzZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyB0aGUgR2FtZXBhZCdzIFJpZ2h0IGJ1dHRvbiBiZWluZyBwcmVzc2VkP1xyXG4gICAgICogSWYgdGhlIEdhbWVwYWQgZG9lc24ndCBoYXZlIHRoaXMgYnV0dG9uIGl0IHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZS5cclxuICAgICAqIFRoaXMgaXMgdGhlIGQtcGFkIHJpZ2h0IGJ1dHRvbiB1bmRlciBzdGFuZGFyZCBHYW1lcGFkIG1hcHBpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNyaWdodFxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHJpZ2h0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9MQ1JpZ2h0LnByZXNzZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyB0aGUgR2FtZXBhZCdzIFVwIGJ1dHRvbiBiZWluZyBwcmVzc2VkP1xyXG4gICAgICogSWYgdGhlIEdhbWVwYWQgZG9lc24ndCBoYXZlIHRoaXMgYnV0dG9uIGl0IHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZS5cclxuICAgICAqIFRoaXMgaXMgdGhlIGQtcGFkIHVwIGJ1dHRvbiB1bmRlciBzdGFuZGFyZCBHYW1lcGFkIG1hcHBpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCN1cFxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHVwOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9MQ1RvcC5wcmVzc2VkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXMgdGhlIEdhbWVwYWQncyBEb3duIGJ1dHRvbiBiZWluZyBwcmVzc2VkP1xyXG4gICAgICogSWYgdGhlIEdhbWVwYWQgZG9lc24ndCBoYXZlIHRoaXMgYnV0dG9uIGl0IHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZS5cclxuICAgICAqIFRoaXMgaXMgdGhlIGQtcGFkIGRvd24gYnV0dG9uIHVuZGVyIHN0YW5kYXJkIEdhbWVwYWQgbWFwcGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkI2Rvd25cclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICovXHJcbiAgICBkb3duOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9MQ0JvdHRvbS5wcmVzc2VkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXMgdGhlIEdhbWVwYWQncyBib3R0b20gYnV0dG9uIGluIHRoZSByaWdodCBidXR0b24gY2x1c3RlciBiZWluZyBwcmVzc2VkP1xyXG4gICAgICogSWYgdGhlIEdhbWVwYWQgZG9lc24ndCBoYXZlIHRoaXMgYnV0dG9uIGl0IHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZS5cclxuICAgICAqIE9uIGEgRHVhbCBTaG9jayBjb250cm9sbGVyIGl0J3MgdGhlIFggYnV0dG9uLlxyXG4gICAgICogT24gYW4gWEJveCBjb250cm9sbGVyIGl0J3MgdGhlIEEgYnV0dG9uLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWQjQVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIEE6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX1JDQm90dG9tLnByZXNzZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyB0aGUgR2FtZXBhZCdzIHRvcCBidXR0b24gaW4gdGhlIHJpZ2h0IGJ1dHRvbiBjbHVzdGVyIGJlaW5nIHByZXNzZWQ/XHJcbiAgICAgKiBJZiB0aGUgR2FtZXBhZCBkb2Vzbid0IGhhdmUgdGhpcyBidXR0b24gaXQgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlLlxyXG4gICAgICogT24gYSBEdWFsIFNob2NrIGNvbnRyb2xsZXIgaXQncyB0aGUgVHJpYW5nbGUgYnV0dG9uLlxyXG4gICAgICogT24gYW4gWEJveCBjb250cm9sbGVyIGl0J3MgdGhlIFkgYnV0dG9uLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWQjWVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIFk6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX1JDVG9wLnByZXNzZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyB0aGUgR2FtZXBhZCdzIGxlZnQgYnV0dG9uIGluIHRoZSByaWdodCBidXR0b24gY2x1c3RlciBiZWluZyBwcmVzc2VkP1xyXG4gICAgICogSWYgdGhlIEdhbWVwYWQgZG9lc24ndCBoYXZlIHRoaXMgYnV0dG9uIGl0IHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZS5cclxuICAgICAqIE9uIGEgRHVhbCBTaG9jayBjb250cm9sbGVyIGl0J3MgdGhlIFNxdWFyZSBidXR0b24uXHJcbiAgICAgKiBPbiBhbiBYQm94IGNvbnRyb2xsZXIgaXQncyB0aGUgWCBidXR0b24uXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNYXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgWDoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fUkNMZWZ0LnByZXNzZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyB0aGUgR2FtZXBhZCdzIHJpZ2h0IGJ1dHRvbiBpbiB0aGUgcmlnaHQgYnV0dG9uIGNsdXN0ZXIgYmVpbmcgcHJlc3NlZD9cclxuICAgICAqIElmIHRoZSBHYW1lcGFkIGRvZXNuJ3QgaGF2ZSB0aGlzIGJ1dHRvbiBpdCB3aWxsIGFsd2F5cyByZXR1cm4gZmFsc2UuXHJcbiAgICAgKiBPbiBhIER1YWwgU2hvY2sgY29udHJvbGxlciBpdCdzIHRoZSBDaXJjbGUgYnV0dG9uLlxyXG4gICAgICogT24gYW4gWEJveCBjb250cm9sbGVyIGl0J3MgdGhlIEIgYnV0dG9uLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWQjQlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIEI6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX1JDUmlnaHQucHJlc3NlZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBHYW1lcGFkJ3MgdG9wIGxlZnQgc2hvdWxkZXIgYnV0dG9uLlxyXG4gICAgICogSWYgdGhlIEdhbWVwYWQgZG9lc24ndCBoYXZlIHRoaXMgYnV0dG9uIGl0IHdpbGwgYWx3YXlzIHJldHVybiB6ZXJvLlxyXG4gICAgICogVGhlIHZhbHVlIGlzIGEgZmxvYXQgYmV0d2VlbiAwIGFuZCAxLCBjb3JyZXNwb25kaW5nIHRvIGhvdyBkZXByZXNzZWQgdGhlIGJ1dHRvbiBpcy5cclxuICAgICAqIE9uIGEgRHVhbCBTaG9jayBjb250cm9sbGVyIGl0J3MgdGhlIEwxIGJ1dHRvbi5cclxuICAgICAqIE9uIGFuIFhCb3ggY29udHJvbGxlciBpdCdzIHRoZSBMQiBidXR0b24uXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNMMVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgTDE6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX0ZCTGVmdFRvcC52YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBHYW1lcGFkJ3MgYm90dG9tIGxlZnQgc2hvdWxkZXIgYnV0dG9uLlxyXG4gICAgICogSWYgdGhlIEdhbWVwYWQgZG9lc24ndCBoYXZlIHRoaXMgYnV0dG9uIGl0IHdpbGwgYWx3YXlzIHJldHVybiB6ZXJvLlxyXG4gICAgICogVGhlIHZhbHVlIGlzIGEgZmxvYXQgYmV0d2VlbiAwIGFuZCAxLCBjb3JyZXNwb25kaW5nIHRvIGhvdyBkZXByZXNzZWQgdGhlIGJ1dHRvbiBpcy5cclxuICAgICAqIE9uIGEgRHVhbCBTaG9jayBjb250cm9sbGVyIGl0J3MgdGhlIEwyIGJ1dHRvbi5cclxuICAgICAqIE9uIGFuIFhCb3ggY29udHJvbGxlciBpdCdzIHRoZSBMVCBidXR0b24uXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNMMlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgTDI6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX0ZCTGVmdEJvdHRvbS52YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBHYW1lcGFkJ3MgdG9wIHJpZ2h0IHNob3VsZGVyIGJ1dHRvbi5cclxuICAgICAqIElmIHRoZSBHYW1lcGFkIGRvZXNuJ3QgaGF2ZSB0aGlzIGJ1dHRvbiBpdCB3aWxsIGFsd2F5cyByZXR1cm4gemVyby5cclxuICAgICAqIFRoZSB2YWx1ZSBpcyBhIGZsb2F0IGJldHdlZW4gMCBhbmQgMSwgY29ycmVzcG9uZGluZyB0byBob3cgZGVwcmVzc2VkIHRoZSBidXR0b24gaXMuXHJcbiAgICAgKiBPbiBhIER1YWwgU2hvY2sgY29udHJvbGxlciBpdCdzIHRoZSBSMSBidXR0b24uXHJcbiAgICAgKiBPbiBhbiBYQm94IGNvbnRyb2xsZXIgaXQncyB0aGUgUkIgYnV0dG9uLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWQjUjFcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIFIxOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9GQlJpZ2h0VG9wLnZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIEdhbWVwYWQncyBib3R0b20gcmlnaHQgc2hvdWxkZXIgYnV0dG9uLlxyXG4gICAgICogSWYgdGhlIEdhbWVwYWQgZG9lc24ndCBoYXZlIHRoaXMgYnV0dG9uIGl0IHdpbGwgYWx3YXlzIHJldHVybiB6ZXJvLlxyXG4gICAgICogVGhlIHZhbHVlIGlzIGEgZmxvYXQgYmV0d2VlbiAwIGFuZCAxLCBjb3JyZXNwb25kaW5nIHRvIGhvdyBkZXByZXNzZWQgdGhlIGJ1dHRvbiBpcy5cclxuICAgICAqIE9uIGEgRHVhbCBTaG9jayBjb250cm9sbGVyIGl0J3MgdGhlIFIyIGJ1dHRvbi5cclxuICAgICAqIE9uIGFuIFhCb3ggY29udHJvbGxlciBpdCdzIHRoZSBSVCBidXR0b24uXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZCNSMlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgUjI6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX0ZCUmlnaHRCb3R0b20udmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHYW1lcGFkO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/Gamepad.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/gamepad/GamepadPlugin.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/input/gamepad/GamepadPlugin.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/input/gamepad/events/index.js\");\r\nvar Gamepad = __webpack_require__(/*! ./Gamepad */ \"./node_modules/phaser/src/input/gamepad/Gamepad.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar InputPluginCache = __webpack_require__(/*! ../InputPluginCache */ \"./node_modules/phaser/src/input/InputPluginCache.js\");\r\nvar InputEvents = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/input/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Gamepad Plugin is an input plugin that belongs to the Scene-owned Input system.\r\n *\r\n * Its role is to listen for native DOM Gamepad Events and then process them.\r\n *\r\n * You do not need to create this class directly, the Input system will create an instance of it automatically.\r\n *\r\n * You can access it from within a Scene using `this.input.gamepad`.\r\n *\r\n * To listen for a gamepad being connected:\r\n *\r\n * ```javascript\r\n * this.input.gamepad.once('connected', function (pad) {\r\n * // 'pad' is a reference to the gamepad that was just connected\r\n * });\r\n * ```\r\n *\r\n * Note that the browser may require you to press a button on a gamepad before it will allow you to access it,\r\n * this is for security reasons. However, it may also trust the page already, in which case you won't get the\r\n * 'connected' event and instead should check `GamepadPlugin.total` to see if it thinks there are any gamepads\r\n * already connected.\r\n *\r\n * Once you have received the connected event, or polled the gamepads and found them enabled, you can access\r\n * them via the built-in properties `GamepadPlugin.pad1` to `pad4`, for up to 4 game pads. With a reference\r\n * to the gamepads you can poll its buttons and axis sticks. See the properties and methods available on\r\n * the `Gamepad` class for more details.\r\n *\r\n * For more information about Gamepad support in browsers see the following resources:\r\n *\r\n * https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API\r\n * https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API/Using_the_Gamepad_API\r\n * https://www.smashingmagazine.com/2015/11/gamepad-api-in-web-games/\r\n * http://html5gamepad.com/\r\n *\r\n * @class GamepadPlugin\r\n * @extends Phaser.Events.EventEmitter\r\n * @memberof Phaser.Input.Gamepad\r\n * @constructor\r\n * @since 3.10.0\r\n *\r\n * @param {Phaser.Input.InputPlugin} sceneInputPlugin - A reference to the Scene Input Plugin that the KeyboardPlugin belongs to.\r\n */\r\nvar GamepadPlugin = new Class({\r\n\r\n Extends: EventEmitter,\r\n\r\n initialize:\r\n\r\n function GamepadPlugin (sceneInputPlugin)\r\n {\r\n EventEmitter.call(this);\r\n\r\n /**\r\n * A reference to the Scene that this Input Plugin is responsible for.\r\n *\r\n * @name Phaser.Input.Gamepad.GamepadPlugin#scene\r\n * @type {Phaser.Scene}\r\n * @since 3.10.0\r\n */\r\n this.scene = sceneInputPlugin.scene;\r\n\r\n /**\r\n * A reference to the Scene Systems Settings.\r\n *\r\n * @name Phaser.Input.Gamepad.GamepadPlugin#settings\r\n * @type {Phaser.Types.Scenes.SettingsObject}\r\n * @since 3.10.0\r\n */\r\n this.settings = this.scene.sys.settings;\r\n\r\n /**\r\n * A reference to the Scene Input Plugin that created this Keyboard Plugin.\r\n *\r\n * @name Phaser.Input.Gamepad.GamepadPlugin#sceneInputPlugin\r\n * @type {Phaser.Input.InputPlugin}\r\n * @since 3.10.0\r\n */\r\n this.sceneInputPlugin = sceneInputPlugin;\r\n\r\n /**\r\n * A boolean that controls if the Gamepad Manager is enabled or not.\r\n * Can be toggled on the fly.\r\n *\r\n * @name Phaser.Input.Gamepad.GamepadPlugin#enabled\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.10.0\r\n */\r\n this.enabled = true;\r\n\r\n /**\r\n * The Gamepad Event target, as defined in the Game Config.\r\n * Typically the browser window, but can be any interactive DOM element.\r\n *\r\n * @name Phaser.Input.Gamepad.GamepadPlugin#target\r\n * @type {any}\r\n * @since 3.10.0\r\n */\r\n this.target;\r\n\r\n /**\r\n * An array of the connected Gamepads.\r\n *\r\n * @name Phaser.Input.Gamepad.GamepadPlugin#gamepads\r\n * @type {Phaser.Input.Gamepad.Gamepad[]}\r\n * @default []\r\n * @since 3.10.0\r\n */\r\n this.gamepads = [];\r\n\r\n /**\r\n * An internal event queue.\r\n *\r\n * @name Phaser.Input.Gamepad.GamepadPlugin#queue\r\n * @type {GamepadEvent[]}\r\n * @private\r\n * @since 3.10.0\r\n */\r\n this.queue = [];\r\n\r\n /**\r\n * Internal event handler.\r\n *\r\n * @name Phaser.Input.Gamepad.GamepadPlugin#onGamepadHandler\r\n * @type {function}\r\n * @private\r\n * @since 3.10.0\r\n */\r\n this.onGamepadHandler;\r\n\r\n /**\r\n * Internal Gamepad reference.\r\n *\r\n * @name Phaser.Input.Gamepad.GamepadPlugin#_pad1\r\n * @type {Phaser.Input.Gamepad.Gamepad}\r\n * @private\r\n * @since 3.10.0\r\n */\r\n this._pad1;\r\n\r\n /**\r\n * Internal Gamepad reference.\r\n *\r\n * @name Phaser.Input.Gamepad.GamepadPlugin#_pad2\r\n * @type {Phaser.Input.Gamepad.Gamepad}\r\n * @private\r\n * @since 3.10.0\r\n */\r\n this._pad2;\r\n\r\n /**\r\n * Internal Gamepad reference.\r\n *\r\n * @name Phaser.Input.Gamepad.GamepadPlugin#_pad3\r\n * @type {Phaser.Input.Gamepad.Gamepad}\r\n * @private\r\n * @since 3.10.0\r\n */\r\n this._pad3;\r\n\r\n /**\r\n * Internal Gamepad reference.\r\n *\r\n * @name Phaser.Input.Gamepad.GamepadPlugin#_pad4\r\n * @type {Phaser.Input.Gamepad.Gamepad}\r\n * @private\r\n * @since 3.10.0\r\n */\r\n this._pad4;\r\n\r\n sceneInputPlugin.pluginEvents.once(InputEvents.BOOT, this.boot, this);\r\n sceneInputPlugin.pluginEvents.on(InputEvents.START, this.start, this);\r\n },\r\n\r\n /**\r\n * This method is called automatically, only once, when the Scene is first created.\r\n * Do not invoke it directly.\r\n *\r\n * @method Phaser.Input.Gamepad.GamepadPlugin#boot\r\n * @private\r\n * @since 3.10.0\r\n */\r\n boot: function ()\r\n {\r\n var game = this.scene.sys.game;\r\n var settings = this.settings.input;\r\n var config = game.config;\r\n\r\n this.enabled = GetValue(settings, 'gamepad', config.inputGamepad) && game.device.input.gamepads;\r\n this.target = GetValue(settings, 'gamepad.target', config.inputGamepadEventTarget);\r\n\r\n this.sceneInputPlugin.pluginEvents.once(InputEvents.DESTROY, this.destroy, this);\r\n },\r\n\r\n /**\r\n * This method is called automatically by the Scene when it is starting up.\r\n * It is responsible for creating local systems, properties and listening for Scene events.\r\n * Do not invoke it directly.\r\n *\r\n * @method Phaser.Input.Gamepad.GamepadPlugin#start\r\n * @private\r\n * @since 3.10.0\r\n */\r\n start: function ()\r\n {\r\n if (this.enabled)\r\n {\r\n this.startListeners();\r\n }\r\n\r\n this.sceneInputPlugin.pluginEvents.once(InputEvents.SHUTDOWN, this.shutdown, this);\r\n },\r\n\r\n /**\r\n * Checks to see if both this plugin and the Scene to which it belongs is active.\r\n *\r\n * @method Phaser.Input.Gamepad.GamepadPlugin#isActive\r\n * @since 3.10.0\r\n *\r\n * @return {boolean} `true` if the plugin and the Scene it belongs to is active.\r\n */\r\n isActive: function ()\r\n {\r\n return (this.enabled && this.scene.sys.isActive());\r\n },\r\n\r\n /**\r\n * Starts the Gamepad Event listeners running.\r\n * This is called automatically and does not need to be manually invoked.\r\n *\r\n * @method Phaser.Input.Gamepad.GamepadPlugin#startListeners\r\n * @private\r\n * @since 3.10.0\r\n */\r\n startListeners: function ()\r\n {\r\n var _this = this;\r\n var target = this.target;\r\n\r\n var handler = function (event)\r\n {\r\n if (event.defaultPrevented || !_this.isActive())\r\n {\r\n // Do nothing if event already handled\r\n return;\r\n }\r\n\r\n _this.refreshPads();\r\n\r\n _this.queue.push(event);\r\n };\r\n\r\n this.onGamepadHandler = handler;\r\n\r\n target.addEventListener('gamepadconnected', handler, false);\r\n target.addEventListener('gamepaddisconnected', handler, false);\r\n\r\n // FF also supports gamepadbuttondown, gamepadbuttonup and gamepadaxismove but\r\n // nothing else does, and we can get those values via the gamepads anyway, so we will\r\n // until more browsers support this\r\n\r\n // Finally, listen for an update event from the Input Plugin\r\n this.sceneInputPlugin.pluginEvents.on(InputEvents.UPDATE, this.update, this);\r\n },\r\n\r\n /**\r\n * Stops the Gamepad Event listeners.\r\n * This is called automatically and does not need to be manually invoked.\r\n *\r\n * @method Phaser.Input.Gamepad.GamepadPlugin#stopListeners\r\n * @private\r\n * @since 3.10.0\r\n */\r\n stopListeners: function ()\r\n {\r\n this.target.removeEventListener('gamepadconnected', this.onGamepadHandler);\r\n this.target.removeEventListener('gamepaddisconnected', this.onGamepadHandler);\r\n\r\n this.sceneInputPlugin.pluginEvents.off(InputEvents.UPDATE, this.update);\r\n },\r\n\r\n /**\r\n * Disconnects all current Gamepads.\r\n *\r\n * @method Phaser.Input.Gamepad.GamepadPlugin#disconnectAll\r\n * @since 3.10.0\r\n */\r\n disconnectAll: function ()\r\n {\r\n for (var i = 0; i < this.gamepads.length; i++)\r\n {\r\n this.gamepads.connected = false;\r\n }\r\n },\r\n\r\n /**\r\n * Refreshes the list of connected Gamepads.\r\n *\r\n * This is called automatically when a gamepad is connected or disconnected,\r\n * and during the update loop.\r\n *\r\n * @method Phaser.Input.Gamepad.GamepadPlugin#refreshPads\r\n * @private\r\n * @since 3.10.0\r\n */\r\n refreshPads: function ()\r\n {\r\n var connectedPads = navigator.getGamepads();\r\n\r\n if (!connectedPads)\r\n {\r\n this.disconnectAll();\r\n }\r\n else\r\n {\r\n var currentPads = this.gamepads;\r\n\r\n for (var i = 0; i < connectedPads.length; i++)\r\n {\r\n var livePad = connectedPads[i];\r\n\r\n // Because sometimes they're null (yes, really)\r\n if (!livePad)\r\n {\r\n continue;\r\n }\r\n\r\n var id = livePad.id;\r\n var index = livePad.index;\r\n var currentPad = currentPads[index];\r\n\r\n if (!currentPad)\r\n {\r\n // A new Gamepad, not currently stored locally\r\n var newPad = new Gamepad(this, livePad);\r\n\r\n currentPads[index] = newPad;\r\n\r\n if (!this._pad1)\r\n {\r\n this._pad1 = newPad;\r\n }\r\n else if (!this._pad2)\r\n {\r\n this._pad2 = newPad;\r\n }\r\n else if (!this._pad3)\r\n {\r\n this._pad3 = newPad;\r\n }\r\n else if (!this._pad4)\r\n {\r\n this._pad4 = newPad;\r\n }\r\n }\r\n else if (currentPad.id !== id)\r\n {\r\n // A new Gamepad with a different vendor string, but it has got the same index as an old one\r\n currentPad.destroy();\r\n\r\n currentPads[index] = new Gamepad(this, livePad);\r\n }\r\n else\r\n {\r\n // If neither of these, it's a pad we've already got, so update it\r\n currentPad.update(livePad);\r\n }\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Returns an array of all currently connected Gamepads.\r\n *\r\n * @method Phaser.Input.Gamepad.GamepadPlugin#getAll\r\n * @since 3.10.0\r\n *\r\n * @return {Phaser.Input.Gamepad.Gamepad[]} An array of all currently connected Gamepads.\r\n */\r\n getAll: function ()\r\n {\r\n var out = [];\r\n var pads = this.gamepads;\r\n\r\n for (var i = 0; i < pads.length; i++)\r\n {\r\n if (pads[i])\r\n {\r\n out.push(pads[i]);\r\n }\r\n }\r\n\r\n return out;\r\n },\r\n\r\n /**\r\n * Looks-up a single Gamepad based on the given index value.\r\n *\r\n * @method Phaser.Input.Gamepad.GamepadPlugin#getPad\r\n * @since 3.10.0\r\n *\r\n * @param {number} index - The index of the Gamepad to get.\r\n *\r\n * @return {Phaser.Input.Gamepad.Gamepad} The Gamepad matching the given index, or undefined if none were found.\r\n */\r\n getPad: function (index)\r\n {\r\n var pads = this.gamepads;\r\n\r\n for (var i = 0; i < pads.length; i++)\r\n {\r\n if (pads[i] && pads[i].index === index)\r\n {\r\n return pads[i];\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * The internal update loop. Refreshes all connected gamepads and processes their events.\r\n *\r\n * Called automatically by the Input Manager, invoked from the Game step.\r\n *\r\n * @method Phaser.Input.Gamepad.GamepadPlugin#update\r\n * @private\r\n * @fires Phaser.Input.Gamepad.Events#CONNECTED\r\n * @fires Phaser.Input.Gamepad.Events#DISCONNECTED\r\n * @since 3.10.0\r\n */\r\n update: function ()\r\n {\r\n if (!this.enabled)\r\n {\r\n return;\r\n }\r\n\r\n this.refreshPads();\r\n\r\n var len = this.queue.length;\r\n\r\n if (len === 0)\r\n {\r\n return;\r\n }\r\n\r\n var queue = this.queue.splice(0, len);\r\n\r\n // Process the event queue, dispatching all of the events that have stored up\r\n for (var i = 0; i < len; i++)\r\n {\r\n var event = queue[i];\r\n var pad = this.getPad(event.gamepad.index);\r\n\r\n if (event.type === 'gamepadconnected')\r\n {\r\n this.emit(Events.CONNECTED, pad, event);\r\n }\r\n else if (event.type === 'gamepaddisconnected')\r\n {\r\n this.emit(Events.DISCONNECTED, pad, event);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Shuts the Gamepad Plugin down.\r\n * All this does is remove any listeners bound to it.\r\n *\r\n * @method Phaser.Input.Gamepad.GamepadPlugin#shutdown\r\n * @private\r\n * @since 3.10.0\r\n */\r\n shutdown: function ()\r\n {\r\n this.stopListeners();\r\n\r\n this.disconnectAll();\r\n\r\n this.removeAllListeners();\r\n },\r\n\r\n /**\r\n * Destroys this Gamepad Plugin, disconnecting all Gamepads and releasing internal references.\r\n *\r\n * @method Phaser.Input.Gamepad.GamepadPlugin#destroy\r\n * @private\r\n * @since 3.10.0\r\n */\r\n destroy: function ()\r\n {\r\n this.shutdown();\r\n\r\n for (var i = 0; i < this.gamepads.length; i++)\r\n {\r\n if (this.gamepads[i])\r\n {\r\n this.gamepads[i].destroy();\r\n }\r\n }\r\n\r\n this.gamepads = [];\r\n\r\n this.scene = null;\r\n this.settings = null;\r\n this.sceneInputPlugin = null;\r\n this.target = null;\r\n },\r\n\r\n /**\r\n * The total number of connected game pads.\r\n *\r\n * @name Phaser.Input.Gamepad.GamepadPlugin#total\r\n * @type {integer}\r\n * @since 3.10.0\r\n */\r\n total: {\r\n\r\n get: function ()\r\n {\r\n return this.gamepads.length;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * A reference to the first connected Gamepad.\r\n *\r\n * This will be undefined if either no pads are connected, or the browser\r\n * has not yet issued a gamepadconnect, which can happen even if a Gamepad\r\n * is plugged in, but hasn't yet had any buttons pressed on it.\r\n *\r\n * @name Phaser.Input.Gamepad.GamepadPlugin#pad1\r\n * @type {Phaser.Input.Gamepad.Gamepad}\r\n * @since 3.10.0\r\n */\r\n pad1: {\r\n\r\n get: function ()\r\n {\r\n return this._pad1;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * A reference to the second connected Gamepad.\r\n *\r\n * This will be undefined if either no pads are connected, or the browser\r\n * has not yet issued a gamepadconnect, which can happen even if a Gamepad\r\n * is plugged in, but hasn't yet had any buttons pressed on it.\r\n *\r\n * @name Phaser.Input.Gamepad.GamepadPlugin#pad2\r\n * @type {Phaser.Input.Gamepad.Gamepad}\r\n * @since 3.10.0\r\n */\r\n pad2: {\r\n\r\n get: function ()\r\n {\r\n return this._pad2;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * A reference to the third connected Gamepad.\r\n *\r\n * This will be undefined if either no pads are connected, or the browser\r\n * has not yet issued a gamepadconnect, which can happen even if a Gamepad\r\n * is plugged in, but hasn't yet had any buttons pressed on it.\r\n *\r\n * @name Phaser.Input.Gamepad.GamepadPlugin#pad3\r\n * @type {Phaser.Input.Gamepad.Gamepad}\r\n * @since 3.10.0\r\n */\r\n pad3: {\r\n\r\n get: function ()\r\n {\r\n return this._pad3;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * A reference to the fourth connected Gamepad.\r\n *\r\n * This will be undefined if either no pads are connected, or the browser\r\n * has not yet issued a gamepadconnect, which can happen even if a Gamepad\r\n * is plugged in, but hasn't yet had any buttons pressed on it.\r\n *\r\n * @name Phaser.Input.Gamepad.GamepadPlugin#pad4\r\n * @type {Phaser.Input.Gamepad.Gamepad}\r\n * @since 3.10.0\r\n */\r\n pad4: {\r\n\r\n get: function ()\r\n {\r\n return this._pad4;\r\n }\r\n\r\n }\r\n\r\n});\r\n\r\n/**\r\n * An instance of the Gamepad Plugin class, if enabled via the `input.gamepad` Scene or Game Config property.\r\n * Use this to create access Gamepads connected to the browser and respond to gamepad buttons.\r\n *\r\n * @name Phaser.Input.InputPlugin#gamepad\r\n * @type {?Phaser.Input.Gamepad.GamepadPlugin}\r\n * @since 3.10.0\r\n */\r\nInputPluginCache.register('GamepadPlugin', GamepadPlugin, 'gamepad', 'gamepad', 'inputGamepad');\r\n\r\nmodule.exports = GamepadPlugin;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL0dhbWVwYWRQbHVnaW4uanM/MmNmOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxtQkFBbUIsbUJBQU8sQ0FBQyw0REFBZTtBQUMxQyxhQUFhLG1CQUFPLENBQUMseUVBQVU7QUFDL0IsY0FBYyxtQkFBTyxDQUFDLHFFQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyx1RkFBNkI7QUFDcEQsdUJBQXVCLG1CQUFPLENBQUMsZ0ZBQXFCO0FBQ3BELGtCQUFrQixtQkFBTyxDQUFDLGtFQUFXOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlCQUF5QjtBQUNwQztBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QiwwQkFBMEI7QUFDakQ7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkIsMEJBQTBCO0FBQ3JEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsNkJBQTZCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsdUJBQXVCLFNBQVM7QUFDaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLDBCQUEwQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL0dhbWVwYWRQbHVnaW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuL2V2ZW50cycpO1xyXG52YXIgR2FtZXBhZCA9IHJlcXVpcmUoJy4vR2FtZXBhZCcpO1xyXG52YXIgR2V0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0VmFsdWUnKTtcclxudmFyIElucHV0UGx1Z2luQ2FjaGUgPSByZXF1aXJlKCcuLi9JbnB1dFBsdWdpbkNhY2hlJyk7XHJcbnZhciBJbnB1dEV2ZW50cyA9IHJlcXVpcmUoJy4uL2V2ZW50cycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIEdhbWVwYWQgUGx1Z2luIGlzIGFuIGlucHV0IHBsdWdpbiB0aGF0IGJlbG9uZ3MgdG8gdGhlIFNjZW5lLW93bmVkIElucHV0IHN5c3RlbS5cclxuICpcclxuICogSXRzIHJvbGUgaXMgdG8gbGlzdGVuIGZvciBuYXRpdmUgRE9NIEdhbWVwYWQgRXZlbnRzIGFuZCB0aGVuIHByb2Nlc3MgdGhlbS5cclxuICpcclxuICogWW91IGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSB0aGlzIGNsYXNzIGRpcmVjdGx5LCB0aGUgSW5wdXQgc3lzdGVtIHdpbGwgY3JlYXRlIGFuIGluc3RhbmNlIG9mIGl0IGF1dG9tYXRpY2FsbHkuXHJcbiAqXHJcbiAqIFlvdSBjYW4gYWNjZXNzIGl0IGZyb20gd2l0aGluIGEgU2NlbmUgdXNpbmcgYHRoaXMuaW5wdXQuZ2FtZXBhZGAuXHJcbiAqXHJcbiAqIFRvIGxpc3RlbiBmb3IgYSBnYW1lcGFkIGJlaW5nIGNvbm5lY3RlZDpcclxuICpcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmlucHV0LmdhbWVwYWQub25jZSgnY29ubmVjdGVkJywgZnVuY3Rpb24gKHBhZCkge1xyXG4gKiAgICAgLy8gICAncGFkJyBpcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2FtZXBhZCB0aGF0IHdhcyBqdXN0IGNvbm5lY3RlZFxyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIE5vdGUgdGhhdCB0aGUgYnJvd3NlciBtYXkgcmVxdWlyZSB5b3UgdG8gcHJlc3MgYSBidXR0b24gb24gYSBnYW1lcGFkIGJlZm9yZSBpdCB3aWxsIGFsbG93IHlvdSB0byBhY2Nlc3MgaXQsXHJcbiAqIHRoaXMgaXMgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIEhvd2V2ZXIsIGl0IG1heSBhbHNvIHRydXN0IHRoZSBwYWdlIGFscmVhZHksIGluIHdoaWNoIGNhc2UgeW91IHdvbid0IGdldCB0aGVcclxuICogJ2Nvbm5lY3RlZCcgZXZlbnQgYW5kIGluc3RlYWQgc2hvdWxkIGNoZWNrIGBHYW1lcGFkUGx1Z2luLnRvdGFsYCB0byBzZWUgaWYgaXQgdGhpbmtzIHRoZXJlIGFyZSBhbnkgZ2FtZXBhZHNcclxuICogYWxyZWFkeSBjb25uZWN0ZWQuXHJcbiAqXHJcbiAqIE9uY2UgeW91IGhhdmUgcmVjZWl2ZWQgdGhlIGNvbm5lY3RlZCBldmVudCwgb3IgcG9sbGVkIHRoZSBnYW1lcGFkcyBhbmQgZm91bmQgdGhlbSBlbmFibGVkLCB5b3UgY2FuIGFjY2Vzc1xyXG4gKiB0aGVtIHZpYSB0aGUgYnVpbHQtaW4gcHJvcGVydGllcyBgR2FtZXBhZFBsdWdpbi5wYWQxYCB0byBgcGFkNGAsIGZvciB1cCB0byA0IGdhbWUgcGFkcy4gV2l0aCBhIHJlZmVyZW5jZVxyXG4gKiB0byB0aGUgZ2FtZXBhZHMgeW91IGNhbiBwb2xsIGl0cyBidXR0b25zIGFuZCBheGlzIHN0aWNrcy4gU2VlIHRoZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIGF2YWlsYWJsZSBvblxyXG4gKiB0aGUgYEdhbWVwYWRgIGNsYXNzIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEdhbWVwYWQgc3VwcG9ydCBpbiBicm93c2VycyBzZWUgdGhlIGZvbGxvd2luZyByZXNvdXJjZXM6XHJcbiAqXHJcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9HYW1lcGFkX0FQSVxyXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvR2FtZXBhZF9BUEkvVXNpbmdfdGhlX0dhbWVwYWRfQVBJXHJcbiAqIGh0dHBzOi8vd3d3LnNtYXNoaW5nbWFnYXppbmUuY29tLzIwMTUvMTEvZ2FtZXBhZC1hcGktaW4td2ViLWdhbWVzL1xyXG4gKiBodHRwOi8vaHRtbDVnYW1lcGFkLmNvbS9cclxuICpcclxuICogQGNsYXNzIEdhbWVwYWRQbHVnaW5cclxuICogQGV4dGVuZHMgUGhhc2VyLkV2ZW50cy5FdmVudEVtaXR0ZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5JbnB1dC5HYW1lcGFkXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4xMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LklucHV0UGx1Z2lufSBzY2VuZUlucHV0UGx1Z2luIC0gQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIElucHV0IFBsdWdpbiB0aGF0IHRoZSBLZXlib2FyZFBsdWdpbiBiZWxvbmdzIHRvLlxyXG4gKi9cclxudmFyIEdhbWVwYWRQbHVnaW4gPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEV2ZW50RW1pdHRlcixcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEdhbWVwYWRQbHVnaW4gKHNjZW5lSW5wdXRQbHVnaW4pXHJcbiAgICB7XHJcbiAgICAgICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSB0aGF0IHRoaXMgSW5wdXQgUGx1Z2luIGlzIHJlc3BvbnNpYmxlIGZvci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWRQbHVnaW4jc2NlbmVcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLlNjZW5lfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmVJbnB1dFBsdWdpbi5zY2VuZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIFN5c3RlbXMgU2V0dGluZ3MuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2luI3NldHRpbmdzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5TY2VuZXMuU2V0dGluZ3NPYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSB0aGlzLnNjZW5lLnN5cy5zZXR0aW5ncztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIElucHV0IFBsdWdpbiB0aGF0IGNyZWF0ZWQgdGhpcyBLZXlib2FyZCBQbHVnaW4uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2luI3NjZW5lSW5wdXRQbHVnaW5cclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LklucHV0UGx1Z2lufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjZW5lSW5wdXRQbHVnaW4gPSBzY2VuZUlucHV0UGx1Z2luO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGJvb2xlYW4gdGhhdCBjb250cm9scyBpZiB0aGUgR2FtZXBhZCBNYW5hZ2VyIGlzIGVuYWJsZWQgb3Igbm90LlxyXG4gICAgICAgICAqIENhbiBiZSB0b2dnbGVkIG9uIHRoZSBmbHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2luI2VuYWJsZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBHYW1lcGFkIEV2ZW50IHRhcmdldCwgYXMgZGVmaW5lZCBpbiB0aGUgR2FtZSBDb25maWcuXHJcbiAgICAgICAgICogVHlwaWNhbGx5IHRoZSBicm93c2VyIHdpbmRvdywgYnV0IGNhbiBiZSBhbnkgaW50ZXJhY3RpdmUgRE9NIGVsZW1lbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2luI3RhcmdldFxyXG4gICAgICAgICAqIEB0eXBlIHthbnl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBvZiB0aGUgY29ubmVjdGVkIEdhbWVwYWRzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZFBsdWdpbiNnYW1lcGFkc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkW119XHJcbiAgICAgICAgICogQGRlZmF1bHQgW11cclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5nYW1lcGFkcyA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBpbnRlcm5hbCBldmVudCBxdWV1ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWRQbHVnaW4jcXVldWVcclxuICAgICAgICAgKiBAdHlwZSB7R2FtZXBhZEV2ZW50W119XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCBldmVudCBoYW5kbGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZFBsdWdpbiNvbkdhbWVwYWRIYW5kbGVyXHJcbiAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub25HYW1lcGFkSGFuZGxlcjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgR2FtZXBhZCByZWZlcmVuY2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2luI19wYWQxXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWR9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fcGFkMTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgR2FtZXBhZCByZWZlcmVuY2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2luI19wYWQyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWR9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fcGFkMjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgR2FtZXBhZCByZWZlcmVuY2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2luI19wYWQzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWR9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fcGFkMztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgR2FtZXBhZCByZWZlcmVuY2UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2luI19wYWQ0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWR9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fcGFkNDtcclxuXHJcbiAgICAgICAgc2NlbmVJbnB1dFBsdWdpbi5wbHVnaW5FdmVudHMub25jZShJbnB1dEV2ZW50cy5CT09ULCB0aGlzLmJvb3QsIHRoaXMpO1xyXG4gICAgICAgIHNjZW5lSW5wdXRQbHVnaW4ucGx1Z2luRXZlbnRzLm9uKElucHV0RXZlbnRzLlNUQVJULCB0aGlzLnN0YXJ0LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSwgb25seSBvbmNlLCB3aGVuIHRoZSBTY2VuZSBpcyBmaXJzdCBjcmVhdGVkLlxyXG4gICAgICogRG8gbm90IGludm9rZSBpdCBkaXJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWRQbHVnaW4jYm9vdFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgYm9vdDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgZ2FtZSA9IHRoaXMuc2NlbmUuc3lzLmdhbWU7XHJcbiAgICAgICAgdmFyIHNldHRpbmdzID0gdGhpcy5zZXR0aW5ncy5pbnB1dDtcclxuICAgICAgICB2YXIgY29uZmlnID0gZ2FtZS5jb25maWc7XHJcblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IEdldFZhbHVlKHNldHRpbmdzLCAnZ2FtZXBhZCcsIGNvbmZpZy5pbnB1dEdhbWVwYWQpICYmIGdhbWUuZGV2aWNlLmlucHV0LmdhbWVwYWRzO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0ID0gR2V0VmFsdWUoc2V0dGluZ3MsICdnYW1lcGFkLnRhcmdldCcsIGNvbmZpZy5pbnB1dEdhbWVwYWRFdmVudFRhcmdldCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmVJbnB1dFBsdWdpbi5wbHVnaW5FdmVudHMub25jZShJbnB1dEV2ZW50cy5ERVNUUk9ZLCB0aGlzLmRlc3Ryb3ksIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBTY2VuZSB3aGVuIGl0IGlzIHN0YXJ0aW5nIHVwLlxyXG4gICAgICogSXQgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGxvY2FsIHN5c3RlbXMsIHByb3BlcnRpZXMgYW5kIGxpc3RlbmluZyBmb3IgU2NlbmUgZXZlbnRzLlxyXG4gICAgICogRG8gbm90IGludm9rZSBpdCBkaXJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWRQbHVnaW4jc3RhcnRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0TGlzdGVuZXJzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNjZW5lSW5wdXRQbHVnaW4ucGx1Z2luRXZlbnRzLm9uY2UoSW5wdXRFdmVudHMuU0hVVERPV04sIHRoaXMuc2h1dGRvd24sIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB0byBzZWUgaWYgYm90aCB0aGlzIHBsdWdpbiBhbmQgdGhlIFNjZW5lIHRvIHdoaWNoIGl0IGJlbG9uZ3MgaXMgYWN0aXZlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZFBsdWdpbiNpc0FjdGl2ZVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgcGx1Z2luIGFuZCB0aGUgU2NlbmUgaXQgYmVsb25ncyB0byBpcyBhY3RpdmUuXHJcbiAgICAgKi9cclxuICAgIGlzQWN0aXZlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5lbmFibGVkICYmIHRoaXMuc2NlbmUuc3lzLmlzQWN0aXZlKCkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YXJ0cyB0aGUgR2FtZXBhZCBFdmVudCBsaXN0ZW5lcnMgcnVubmluZy5cclxuICAgICAqIFRoaXMgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYW5kIGRvZXMgbm90IG5lZWQgdG8gYmUgbWFudWFsbHkgaW52b2tlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWRQbHVnaW4jc3RhcnRMaXN0ZW5lcnNcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0TGlzdGVuZXJzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICB2YXIgaGFuZGxlciA9IGZ1bmN0aW9uIChldmVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkIHx8ICFfdGhpcy5pc0FjdGl2ZSgpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nIGlmIGV2ZW50IGFscmVhZHkgaGFuZGxlZFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBfdGhpcy5yZWZyZXNoUGFkcygpO1xyXG5cclxuICAgICAgICAgICAgX3RoaXMucXVldWUucHVzaChldmVudCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5vbkdhbWVwYWRIYW5kbGVyID0gaGFuZGxlcjtcclxuXHJcbiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ2dhbWVwYWRjb25uZWN0ZWQnLCBoYW5kbGVyLCBmYWxzZSk7XHJcbiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ2dhbWVwYWRkaXNjb25uZWN0ZWQnLCBoYW5kbGVyLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIC8vICBGRiBhbHNvIHN1cHBvcnRzIGdhbWVwYWRidXR0b25kb3duLCBnYW1lcGFkYnV0dG9udXAgYW5kIGdhbWVwYWRheGlzbW92ZSBidXRcclxuICAgICAgICAvLyAgbm90aGluZyBlbHNlIGRvZXMsIGFuZCB3ZSBjYW4gZ2V0IHRob3NlIHZhbHVlcyB2aWEgdGhlIGdhbWVwYWRzIGFueXdheSwgc28gd2Ugd2lsbFxyXG4gICAgICAgIC8vICB1bnRpbCBtb3JlIGJyb3dzZXJzIHN1cHBvcnQgdGhpc1xyXG5cclxuICAgICAgICAvLyAgRmluYWxseSwgbGlzdGVuIGZvciBhbiB1cGRhdGUgZXZlbnQgZnJvbSB0aGUgSW5wdXQgUGx1Z2luXHJcbiAgICAgICAgdGhpcy5zY2VuZUlucHV0UGx1Z2luLnBsdWdpbkV2ZW50cy5vbihJbnB1dEV2ZW50cy5VUERBVEUsIHRoaXMudXBkYXRlLCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9wcyB0aGUgR2FtZXBhZCBFdmVudCBsaXN0ZW5lcnMuXHJcbiAgICAgKiBUaGlzIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGFuZCBkb2VzIG5vdCBuZWVkIHRvIGJlIG1hbnVhbGx5IGludm9rZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2luI3N0b3BMaXN0ZW5lcnNcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHN0b3BMaXN0ZW5lcnM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy50YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZ2FtZXBhZGNvbm5lY3RlZCcsIHRoaXMub25HYW1lcGFkSGFuZGxlcik7XHJcbiAgICAgICAgdGhpcy50YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZ2FtZXBhZGRpc2Nvbm5lY3RlZCcsIHRoaXMub25HYW1lcGFkSGFuZGxlcik7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmVJbnB1dFBsdWdpbi5wbHVnaW5FdmVudHMub2ZmKElucHV0RXZlbnRzLlVQREFURSwgdGhpcy51cGRhdGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc2Nvbm5lY3RzIGFsbCBjdXJyZW50IEdhbWVwYWRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZFBsdWdpbiNkaXNjb25uZWN0QWxsXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIGRpc2Nvbm5lY3RBbGw6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdhbWVwYWRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5nYW1lcGFkcy5jb25uZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVmcmVzaGVzIHRoZSBsaXN0IG9mIGNvbm5lY3RlZCBHYW1lcGFkcy5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYSBnYW1lcGFkIGlzIGNvbm5lY3RlZCBvciBkaXNjb25uZWN0ZWQsXHJcbiAgICAgKiBhbmQgZHVyaW5nIHRoZSB1cGRhdGUgbG9vcC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWRQbHVnaW4jcmVmcmVzaFBhZHNcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHJlZnJlc2hQYWRzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjb25uZWN0ZWRQYWRzID0gbmF2aWdhdG9yLmdldEdhbWVwYWRzKCk7XHJcblxyXG4gICAgICAgIGlmICghY29ubmVjdGVkUGFkcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdEFsbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudFBhZHMgPSB0aGlzLmdhbWVwYWRzO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb25uZWN0ZWRQYWRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGl2ZVBhZCA9IGNvbm5lY3RlZFBhZHNbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIEJlY2F1c2Ugc29tZXRpbWVzIHRoZXkncmUgbnVsbCAoeWVzLCByZWFsbHkpXHJcbiAgICAgICAgICAgICAgICBpZiAoIWxpdmVQYWQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGlkID0gbGl2ZVBhZC5pZDtcclxuICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGxpdmVQYWQuaW5kZXg7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudFBhZCA9IGN1cnJlbnRQYWRzW2luZGV4XTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRQYWQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gIEEgbmV3IEdhbWVwYWQsIG5vdCBjdXJyZW50bHkgc3RvcmVkIGxvY2FsbHlcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmV3UGFkID0gbmV3IEdhbWVwYWQodGhpcywgbGl2ZVBhZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWRzW2luZGV4XSA9IG5ld1BhZDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9wYWQxKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGFkMSA9IG5ld1BhZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMuX3BhZDIpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYWQyID0gbmV3UGFkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5fcGFkMylcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhZDMgPSBuZXdQYWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLl9wYWQ0KVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGFkNCA9IG5ld1BhZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50UGFkLmlkICE9PSBpZClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgQSBuZXcgR2FtZXBhZCB3aXRoIGEgZGlmZmVyZW50IHZlbmRvciBzdHJpbmcsIGJ1dCBpdCBoYXMgZ290IHRoZSBzYW1lIGluZGV4IGFzIGFuIG9sZCBvbmVcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFkLmRlc3Ryb3koKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZHNbaW5kZXhdID0gbmV3IEdhbWVwYWQodGhpcywgbGl2ZVBhZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gIElmIG5laXRoZXIgb2YgdGhlc2UsIGl0J3MgYSBwYWQgd2UndmUgYWxyZWFkeSBnb3QsIHNvIHVwZGF0ZSBpdFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWQudXBkYXRlKGxpdmVQYWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIGN1cnJlbnRseSBjb25uZWN0ZWQgR2FtZXBhZHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2luI2dldEFsbFxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWRbXX0gQW4gYXJyYXkgb2YgYWxsIGN1cnJlbnRseSBjb25uZWN0ZWQgR2FtZXBhZHMuXHJcbiAgICAgKi9cclxuICAgIGdldEFsbDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgb3V0ID0gW107XHJcbiAgICAgICAgdmFyIHBhZHMgPSB0aGlzLmdhbWVwYWRzO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhZHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAocGFkc1tpXSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3V0LnB1c2gocGFkc1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTG9va3MtdXAgYSBzaW5nbGUgR2FtZXBhZCBiYXNlZCBvbiB0aGUgZ2l2ZW4gaW5kZXggdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2luI2dldFBhZFxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgR2FtZXBhZCB0byBnZXQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZH0gVGhlIEdhbWVwYWQgbWF0Y2hpbmcgdGhlIGdpdmVuIGluZGV4LCBvciB1bmRlZmluZWQgaWYgbm9uZSB3ZXJlIGZvdW5kLlxyXG4gICAgICovXHJcbiAgICBnZXRQYWQ6IGZ1bmN0aW9uIChpbmRleClcclxuICAgIHtcclxuICAgICAgICB2YXIgcGFkcyA9IHRoaXMuZ2FtZXBhZHM7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFkcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChwYWRzW2ldICYmIHBhZHNbaV0uaW5kZXggPT09IGluZGV4KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFkc1tpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3AuIFJlZnJlc2hlcyBhbGwgY29ubmVjdGVkIGdhbWVwYWRzIGFuZCBwcm9jZXNzZXMgdGhlaXIgZXZlbnRzLlxyXG4gICAgICpcclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBJbnB1dCBNYW5hZ2VyLCBpbnZva2VkIGZyb20gdGhlIEdhbWUgc3RlcC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWRQbHVnaW4jdXBkYXRlXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5HYW1lcGFkLkV2ZW50cyNDT05ORUNURURcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuSW5wdXQuR2FtZXBhZC5FdmVudHMjRElTQ09OTkVDVEVEXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVmcmVzaFBhZHMoKTtcclxuXHJcbiAgICAgICAgdmFyIGxlbiA9IHRoaXMucXVldWUubGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAobGVuID09PSAwKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHF1ZXVlID0gdGhpcy5xdWV1ZS5zcGxpY2UoMCwgbGVuKTtcclxuXHJcbiAgICAgICAgLy8gIFByb2Nlc3MgdGhlIGV2ZW50IHF1ZXVlLCBkaXNwYXRjaGluZyBhbGwgb2YgdGhlIGV2ZW50cyB0aGF0IGhhdmUgc3RvcmVkIHVwXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBldmVudCA9IHF1ZXVlW2ldO1xyXG4gICAgICAgICAgICB2YXIgcGFkID0gdGhpcy5nZXRQYWQoZXZlbnQuZ2FtZXBhZC5pbmRleCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2dhbWVwYWRjb25uZWN0ZWQnKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkNPTk5FQ1RFRCwgcGFkLCBldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gJ2dhbWVwYWRkaXNjb25uZWN0ZWQnKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkRJU0NPTk5FQ1RFRCwgcGFkLCBldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2h1dHMgdGhlIEdhbWVwYWQgUGx1Z2luIGRvd24uXHJcbiAgICAgKiBBbGwgdGhpcyBkb2VzIGlzIHJlbW92ZSBhbnkgbGlzdGVuZXJzIGJvdW5kIHRvIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZFBsdWdpbiNzaHV0ZG93blxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgc2h1dGRvd246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zdG9wTGlzdGVuZXJzKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlzY29ubmVjdEFsbCgpO1xyXG5cclxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoaXMgR2FtZXBhZCBQbHVnaW4sIGRpc2Nvbm5lY3RpbmcgYWxsIEdhbWVwYWRzIGFuZCByZWxlYXNpbmcgaW50ZXJuYWwgcmVmZXJlbmNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWRQbHVnaW4jZGVzdHJveVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNodXRkb3duKCk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5nYW1lcGFkcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdhbWVwYWRzW2ldKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbWVwYWRzW2ldLmRlc3Ryb3koKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nYW1lcGFkcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNldHRpbmdzID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNjZW5lSW5wdXRQbHVnaW4gPSBudWxsO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0ID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIGNvbm5lY3RlZCBnYW1lIHBhZHMuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZFBsdWdpbiN0b3RhbFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHRvdGFsOiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdhbWVwYWRzLmxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBmaXJzdCBjb25uZWN0ZWQgR2FtZXBhZC5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIHdpbGwgYmUgdW5kZWZpbmVkIGlmIGVpdGhlciBubyBwYWRzIGFyZSBjb25uZWN0ZWQsIG9yIHRoZSBicm93c2VyXHJcbiAgICAgKiBoYXMgbm90IHlldCBpc3N1ZWQgYSBnYW1lcGFkY29ubmVjdCwgd2hpY2ggY2FuIGhhcHBlbiBldmVuIGlmIGEgR2FtZXBhZFxyXG4gICAgICogaXMgcGx1Z2dlZCBpbiwgYnV0IGhhc24ndCB5ZXQgaGFkIGFueSBidXR0b25zIHByZXNzZWQgb24gaXQuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZFBsdWdpbiNwYWQxXHJcbiAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LkdhbWVwYWQuR2FtZXBhZH1cclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgcGFkMToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFkMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBzZWNvbmQgY29ubmVjdGVkIEdhbWVwYWQuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyB3aWxsIGJlIHVuZGVmaW5lZCBpZiBlaXRoZXIgbm8gcGFkcyBhcmUgY29ubmVjdGVkLCBvciB0aGUgYnJvd3NlclxyXG4gICAgICogaGFzIG5vdCB5ZXQgaXNzdWVkIGEgZ2FtZXBhZGNvbm5lY3QsIHdoaWNoIGNhbiBoYXBwZW4gZXZlbiBpZiBhIEdhbWVwYWRcclxuICAgICAqIGlzIHBsdWdnZWQgaW4sIGJ1dCBoYXNuJ3QgeWV0IGhhZCBhbnkgYnV0dG9ucyBwcmVzc2VkIG9uIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWRQbHVnaW4jcGFkMlxyXG4gICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWR9XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHBhZDI6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhZDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgdGhpcmQgY29ubmVjdGVkIEdhbWVwYWQuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyB3aWxsIGJlIHVuZGVmaW5lZCBpZiBlaXRoZXIgbm8gcGFkcyBhcmUgY29ubmVjdGVkLCBvciB0aGUgYnJvd3NlclxyXG4gICAgICogaGFzIG5vdCB5ZXQgaXNzdWVkIGEgZ2FtZXBhZGNvbm5lY3QsIHdoaWNoIGNhbiBoYXBwZW4gZXZlbiBpZiBhIEdhbWVwYWRcclxuICAgICAqIGlzIHBsdWdnZWQgaW4sIGJ1dCBoYXNuJ3QgeWV0IGhhZCBhbnkgYnV0dG9ucyBwcmVzc2VkIG9uIGl0LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWRQbHVnaW4jcGFkM1xyXG4gICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5HYW1lcGFkLkdhbWVwYWR9XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHBhZDM6IHtcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhZDM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgZm91cnRoIGNvbm5lY3RlZCBHYW1lcGFkLlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgd2lsbCBiZSB1bmRlZmluZWQgaWYgZWl0aGVyIG5vIHBhZHMgYXJlIGNvbm5lY3RlZCwgb3IgdGhlIGJyb3dzZXJcclxuICAgICAqIGhhcyBub3QgeWV0IGlzc3VlZCBhIGdhbWVwYWRjb25uZWN0LCB3aGljaCBjYW4gaGFwcGVuIGV2ZW4gaWYgYSBHYW1lcGFkXHJcbiAgICAgKiBpcyBwbHVnZ2VkIGluLCBidXQgaGFzbid0IHlldCBoYWQgYW55IGJ1dHRvbnMgcHJlc3NlZCBvbiBpdC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2luI3BhZDRcclxuICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkfVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICovXHJcbiAgICBwYWQ0OiB7XHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYWQ0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBBbiBpbnN0YW5jZSBvZiB0aGUgR2FtZXBhZCBQbHVnaW4gY2xhc3MsIGlmIGVuYWJsZWQgdmlhIHRoZSBgaW5wdXQuZ2FtZXBhZGAgU2NlbmUgb3IgR2FtZSBDb25maWcgcHJvcGVydHkuXHJcbiAqIFVzZSB0aGlzIHRvIGNyZWF0ZSBhY2Nlc3MgR2FtZXBhZHMgY29ubmVjdGVkIHRvIHRoZSBicm93c2VyIGFuZCByZXNwb25kIHRvIGdhbWVwYWQgYnV0dG9ucy5cclxuICpcclxuICogQG5hbWUgUGhhc2VyLklucHV0LklucHV0UGx1Z2luI2dhbWVwYWRcclxuICogQHR5cGUgez9QaGFzZXIuSW5wdXQuR2FtZXBhZC5HYW1lcGFkUGx1Z2lufVxyXG4gKiBAc2luY2UgMy4xMC4wXHJcbiAqL1xyXG5JbnB1dFBsdWdpbkNhY2hlLnJlZ2lzdGVyKCdHYW1lcGFkUGx1Z2luJywgR2FtZXBhZFBsdWdpbiwgJ2dhbWVwYWQnLCAnZ2FtZXBhZCcsICdpbnB1dEdhbWVwYWQnKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2FtZXBhZFBsdWdpbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/GamepadPlugin.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/gamepad/configs/SNES_USB_Controller.js":
/*!******************************************************************************!*\
!*** ./node_modules/phaser/src/input/gamepad/configs/SNES_USB_Controller.js ***!
\******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Tatar SNES USB Controller Gamepad Configuration.\r\n * USB Gamepad (STANDARD GAMEPAD Vendor: 0079 Product: 0011)\r\n *\r\n * @name Phaser.Input.Gamepad.Configs.SNES_USB\r\n * @type {object}\r\n * @since 3.0.0\r\n */\r\nmodule.exports = {\r\n\r\n UP: 12,\r\n DOWN: 13,\r\n LEFT: 14,\r\n RIGHT: 15,\r\n\r\n SELECT: 8,\r\n START: 9,\r\n\r\n B: 0,\r\n A: 1,\r\n Y: 2,\r\n X: 3,\r\n\r\n LEFT_SHOULDER: 4,\r\n RIGHT_SHOULDER: 5\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2NvbmZpZ3MvU05FU19VU0JfQ29udHJvbGxlci5qcz9jMjk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2NvbmZpZ3MvU05FU19VU0JfQ29udHJvbGxlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRhdGFyIFNORVMgVVNCIENvbnRyb2xsZXIgR2FtZXBhZCBDb25maWd1cmF0aW9uLlxyXG4gKiBVU0IgR2FtZXBhZCAgKFNUQU5EQVJEIEdBTUVQQUQgVmVuZG9yOiAwMDc5IFByb2R1Y3Q6IDAwMTEpXHJcbiAqXHJcbiAqIEBuYW1lIFBoYXNlci5JbnB1dC5HYW1lcGFkLkNvbmZpZ3MuU05FU19VU0JcclxuICogQHR5cGUge29iamVjdH1cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBVUDogMTIsXHJcbiAgICBET1dOOiAxMyxcclxuICAgIExFRlQ6IDE0LFxyXG4gICAgUklHSFQ6IDE1LFxyXG5cclxuICAgIFNFTEVDVDogOCxcclxuICAgIFNUQVJUOiA5LFxyXG5cclxuICAgIEI6IDAsXHJcbiAgICBBOiAxLFxyXG4gICAgWTogMixcclxuICAgIFg6IDMsXHJcblxyXG4gICAgTEVGVF9TSE9VTERFUjogNCxcclxuICAgIFJJR0hUX1NIT1VMREVSOiA1XHJcblxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/configs/SNES_USB_Controller.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/gamepad/configs/Sony_PlayStation_DualShock_4.js":
/*!***************************************************************************************!*\
!*** ./node_modules/phaser/src/input/gamepad/configs/Sony_PlayStation_DualShock_4.js ***!
\***************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * PlayStation DualShock 4 Gamepad Configuration.\r\n * Sony PlayStation DualShock 4 (v2) wireless controller\r\n *\r\n * @name Phaser.Input.Gamepad.Configs.DUALSHOCK_4\r\n * @type {object}\r\n * @since 3.0.0\r\n */\r\nmodule.exports = {\r\n\r\n UP: 12,\r\n DOWN: 13,\r\n LEFT: 14,\r\n RIGHT: 15,\r\n\r\n SHARE: 8,\r\n OPTIONS: 9,\r\n PS: 16,\r\n TOUCHBAR: 17,\r\n\r\n X: 0,\r\n CIRCLE: 1,\r\n SQUARE: 2,\r\n TRIANGLE: 3,\r\n\r\n L1: 4,\r\n R1: 5,\r\n L2: 6,\r\n R2: 7,\r\n L3: 10,\r\n R3: 11,\r\n\r\n LEFT_STICK_H: 0,\r\n LEFT_STICK_V: 1,\r\n RIGHT_STICK_H: 2,\r\n RIGHT_STICK_V: 3\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2NvbmZpZ3MvU29ueV9QbGF5U3RhdGlvbl9EdWFsU2hvY2tfNC5qcz85MjllIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2NvbmZpZ3MvU29ueV9QbGF5U3RhdGlvbl9EdWFsU2hvY2tfNC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFBsYXlTdGF0aW9uIER1YWxTaG9jayA0IEdhbWVwYWQgQ29uZmlndXJhdGlvbi5cclxuICogU29ueSBQbGF5U3RhdGlvbiBEdWFsU2hvY2sgNCAodjIpIHdpcmVsZXNzIGNvbnRyb2xsZXJcclxuICpcclxuICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuQ29uZmlncy5EVUFMU0hPQ0tfNFxyXG4gKiBAdHlwZSB7b2JqZWN0fVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIFVQOiAxMixcclxuICAgIERPV046IDEzLFxyXG4gICAgTEVGVDogMTQsXHJcbiAgICBSSUdIVDogMTUsXHJcblxyXG4gICAgU0hBUkU6IDgsXHJcbiAgICBPUFRJT05TOiA5LFxyXG4gICAgUFM6IDE2LFxyXG4gICAgVE9VQ0hCQVI6IDE3LFxyXG5cclxuICAgIFg6IDAsXHJcbiAgICBDSVJDTEU6IDEsXHJcbiAgICBTUVVBUkU6IDIsXHJcbiAgICBUUklBTkdMRTogMyxcclxuXHJcbiAgICBMMTogNCxcclxuICAgIFIxOiA1LFxyXG4gICAgTDI6IDYsXHJcbiAgICBSMjogNyxcclxuICAgIEwzOiAxMCxcclxuICAgIFIzOiAxMSxcclxuXHJcbiAgICBMRUZUX1NUSUNLX0g6IDAsXHJcbiAgICBMRUZUX1NUSUNLX1Y6IDEsXHJcbiAgICBSSUdIVF9TVElDS19IOiAyLFxyXG4gICAgUklHSFRfU1RJQ0tfVjogM1xyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/configs/Sony_PlayStation_DualShock_4.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/gamepad/configs/XBox360_Controller.js":
/*!*****************************************************************************!*\
!*** ./node_modules/phaser/src/input/gamepad/configs/XBox360_Controller.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * XBox 360 Gamepad Configuration.\r\n *\r\n * @name Phaser.Input.Gamepad.Configs.XBOX_360\r\n * @type {object}\r\n * @since 3.0.0\r\n */\r\nmodule.exports = {\r\n\r\n UP: 12,\r\n DOWN: 13,\r\n LEFT: 14,\r\n RIGHT: 15,\r\n\r\n MENU: 16,\r\n\r\n A: 0,\r\n B: 1,\r\n X: 2,\r\n Y: 3,\r\n\r\n LB: 4,\r\n RB: 5,\r\n\r\n LT: 6,\r\n RT: 7,\r\n\r\n BACK: 8,\r\n START: 9,\r\n\r\n LS: 10,\r\n RS: 11,\r\n\r\n LEFT_STICK_H: 0,\r\n LEFT_STICK_V: 1,\r\n RIGHT_STICK_H: 2,\r\n RIGHT_STICK_V: 3\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2NvbmZpZ3MvWEJveDM2MF9Db250cm9sbGVyLmpzPzBhNmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZ2FtZXBhZC9jb25maWdzL1hCb3gzNjBfQ29udHJvbGxlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFhCb3ggMzYwIEdhbWVwYWQgQ29uZmlndXJhdGlvbi5cclxuICpcclxuICogQG5hbWUgUGhhc2VyLklucHV0LkdhbWVwYWQuQ29uZmlncy5YQk9YXzM2MFxyXG4gKiBAdHlwZSB7b2JqZWN0fVxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIFVQOiAxMixcclxuICAgIERPV046IDEzLFxyXG4gICAgTEVGVDogMTQsXHJcbiAgICBSSUdIVDogMTUsXHJcblxyXG4gICAgTUVOVTogMTYsXHJcblxyXG4gICAgQTogMCxcclxuICAgIEI6IDEsXHJcbiAgICBYOiAyLFxyXG4gICAgWTogMyxcclxuXHJcbiAgICBMQjogNCxcclxuICAgIFJCOiA1LFxyXG5cclxuICAgIExUOiA2LFxyXG4gICAgUlQ6IDcsXHJcblxyXG4gICAgQkFDSzogOCxcclxuICAgIFNUQVJUOiA5LFxyXG5cclxuICAgIExTOiAxMCxcclxuICAgIFJTOiAxMSxcclxuXHJcbiAgICBMRUZUX1NUSUNLX0g6IDAsXHJcbiAgICBMRUZUX1NUSUNLX1Y6IDEsXHJcbiAgICBSSUdIVF9TVElDS19IOiAyLFxyXG4gICAgUklHSFRfU1RJQ0tfVjogM1xyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/configs/XBox360_Controller.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/gamepad/configs/index.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/input/gamepad/configs/index.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Input.Gamepad.Configs\r\n */\r\n\r\nmodule.exports = {\r\n\r\n DUALSHOCK_4: __webpack_require__(/*! ./Sony_PlayStation_DualShock_4 */ \"./node_modules/phaser/src/input/gamepad/configs/Sony_PlayStation_DualShock_4.js\"),\r\n SNES_USB: __webpack_require__(/*! ./SNES_USB_Controller */ \"./node_modules/phaser/src/input/gamepad/configs/SNES_USB_Controller.js\"),\r\n XBOX_360: __webpack_require__(/*! ./XBox360_Controller */ \"./node_modules/phaser/src/input/gamepad/configs/XBox360_Controller.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2NvbmZpZ3MvaW5kZXguanM/NDlmOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLHVIQUFnQztBQUN6RCxjQUFjLG1CQUFPLENBQUMscUdBQXVCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxtR0FBc0I7O0FBRTVDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvZ2FtZXBhZC9jb25maWdzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5Db25maWdzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgRFVBTFNIT0NLXzQ6IHJlcXVpcmUoJy4vU29ueV9QbGF5U3RhdGlvbl9EdWFsU2hvY2tfNCcpLFxyXG4gICAgU05FU19VU0I6IHJlcXVpcmUoJy4vU05FU19VU0JfQ29udHJvbGxlcicpLFxyXG4gICAgWEJPWF8zNjA6IHJlcXVpcmUoJy4vWEJveDM2MF9Db250cm9sbGVyJylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/configs/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/gamepad/events/BUTTON_DOWN_EVENT.js":
/*!***************************************************************************!*\
!*** ./node_modules/phaser/src/input/gamepad/events/BUTTON_DOWN_EVENT.js ***!
\***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Gamepad Button Down Event.\r\n * \r\n * This event is dispatched by the Gamepad Plugin when a button has been pressed on any active Gamepad.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.gamepad.on('down', listener)`.\r\n * \r\n * You can also listen for a DOWN event from a Gamepad instance. See the [GAMEPAD_BUTTON_DOWN]{@linkcode Phaser.Input.Gamepad.Events#event:GAMEPAD_BUTTON_DOWN} event for details.\r\n *\r\n * @event Phaser.Input.Gamepad.Events#BUTTON_DOWN\r\n * @since 3.10.0\r\n * \r\n * @param {Phaser.Input.Gamepad} pad - A reference to the Gamepad on which the button was pressed.\r\n * @param {Phaser.Input.Gamepad.Button} button - A reference to the Button which was pressed.\r\n * @param {number} value - The value of the button at the time it was pressed. Between 0 and 1. Some Gamepads have pressure-sensitive buttons.\r\n */\r\nmodule.exports = 'down';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2V2ZW50cy9CVVRUT05fRE9XTl9FVkVOVC5qcz80ZGQzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtGQUErRixnRUFBZ0U7QUFDL0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLDRCQUE0QjtBQUN2QyxXQUFXLE9BQU87QUFDbEI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2dhbWVwYWQvZXZlbnRzL0JVVFRPTl9ET1dOX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEdhbWVwYWQgQnV0dG9uIERvd24gRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIEdhbWVwYWQgUGx1Z2luIHdoZW4gYSBidXR0b24gaGFzIGJlZW4gcHJlc3NlZCBvbiBhbnkgYWN0aXZlIEdhbWVwYWQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gdGhpcyBldmVudCBmcm9tIHdpdGhpbiBhIFNjZW5lIHVzaW5nOiBgdGhpcy5pbnB1dC5nYW1lcGFkLm9uKCdkb3duJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIFlvdSBjYW4gYWxzbyBsaXN0ZW4gZm9yIGEgRE9XTiBldmVudCBmcm9tIGEgR2FtZXBhZCBpbnN0YW5jZS4gU2VlIHRoZSBbR0FNRVBBRF9CVVRUT05fRE9XTl17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5HYW1lcGFkLkV2ZW50cyNldmVudDpHQU1FUEFEX0JVVFRPTl9ET1dOfSBldmVudCBmb3IgZGV0YWlscy5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5HYW1lcGFkLkV2ZW50cyNCVVRUT05fRE9XTlxyXG4gKiBAc2luY2UgMy4xMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5HYW1lcGFkfSBwYWQgLSBBIHJlZmVyZW5jZSB0byB0aGUgR2FtZXBhZCBvbiB3aGljaCB0aGUgYnV0dG9uIHdhcyBwcmVzc2VkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5HYW1lcGFkLkJ1dHRvbn0gYnV0dG9uIC0gQSByZWZlcmVuY2UgdG8gdGhlIEJ1dHRvbiB3aGljaCB3YXMgcHJlc3NlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHZhbHVlIG9mIHRoZSBidXR0b24gYXQgdGhlIHRpbWUgaXQgd2FzIHByZXNzZWQuIEJldHdlZW4gMCBhbmQgMS4gU29tZSBHYW1lcGFkcyBoYXZlIHByZXNzdXJlLXNlbnNpdGl2ZSBidXR0b25zLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZG93bic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/events/BUTTON_DOWN_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/gamepad/events/BUTTON_UP_EVENT.js":
/*!*************************************************************************!*\
!*** ./node_modules/phaser/src/input/gamepad/events/BUTTON_UP_EVENT.js ***!
\*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Gamepad Button Up Event.\r\n * \r\n * This event is dispatched by the Gamepad Plugin when a button has been released on any active Gamepad.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.gamepad.on('up', listener)`.\r\n * \r\n * You can also listen for an UP event from a Gamepad instance. See the [GAMEPAD_BUTTON_UP]{@linkcode Phaser.Input.Gamepad.Events#event:GAMEPAD_BUTTON_UP} event for details.\r\n *\r\n * @event Phaser.Input.Gamepad.Events#BUTTON_UP\r\n * @since 3.10.0\r\n * \r\n * @param {Phaser.Input.Gamepad} pad - A reference to the Gamepad on which the button was released.\r\n * @param {Phaser.Input.Gamepad.Button} button - A reference to the Button which was released.\r\n * @param {number} value - The value of the button at the time it was released. Between 0 and 1. Some Gamepads have pressure-sensitive buttons.\r\n */\r\nmodule.exports = 'up';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2V2ZW50cy9CVVRUT05fVVBfRVZFTlQuanM/ZDliNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RkFBNEYsOERBQThEO0FBQzFKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyw0QkFBNEI7QUFDdkMsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2V2ZW50cy9CVVRUT05fVVBfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgR2FtZXBhZCBCdXR0b24gVXAgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIEdhbWVwYWQgUGx1Z2luIHdoZW4gYSBidXR0b24gaGFzIGJlZW4gcmVsZWFzZWQgb24gYW55IGFjdGl2ZSBHYW1lcGFkLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMuaW5wdXQuZ2FtZXBhZC5vbigndXAnLCBsaXN0ZW5lcilgLlxyXG4gKiBcclxuICogWW91IGNhbiBhbHNvIGxpc3RlbiBmb3IgYW4gVVAgZXZlbnQgZnJvbSBhIEdhbWVwYWQgaW5zdGFuY2UuIFNlZSB0aGUgW0dBTUVQQURfQlVUVE9OX1VQXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkdhbWVwYWQuRXZlbnRzI2V2ZW50OkdBTUVQQURfQlVUVE9OX1VQfSBldmVudCBmb3IgZGV0YWlscy5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5HYW1lcGFkLkV2ZW50cyNCVVRUT05fVVBcclxuICogQHNpbmNlIDMuMTAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuR2FtZXBhZH0gcGFkIC0gQSByZWZlcmVuY2UgdG8gdGhlIEdhbWVwYWQgb24gd2hpY2ggdGhlIGJ1dHRvbiB3YXMgcmVsZWFzZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LkdhbWVwYWQuQnV0dG9ufSBidXR0b24gLSBBIHJlZmVyZW5jZSB0byB0aGUgQnV0dG9uIHdoaWNoIHdhcyByZWxlYXNlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHZhbHVlIG9mIHRoZSBidXR0b24gYXQgdGhlIHRpbWUgaXQgd2FzIHJlbGVhc2VkLiBCZXR3ZWVuIDAgYW5kIDEuIFNvbWUgR2FtZXBhZHMgaGF2ZSBwcmVzc3VyZS1zZW5zaXRpdmUgYnV0dG9ucy5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3VwJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/events/BUTTON_UP_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/gamepad/events/CONNECTED_EVENT.js":
/*!*************************************************************************!*\
!*** ./node_modules/phaser/src/input/gamepad/events/CONNECTED_EVENT.js ***!
\*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Gamepad Connected Event.\r\n * \r\n * This event is dispatched by the Gamepad Plugin when a Gamepad has been connected.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.gamepad.once('connected', listener)`.\r\n * \r\n * Note that the browser may require you to press a button on a gamepad before it will allow you to access it,\r\n * this is for security reasons. However, it may also trust the page already, in which case you won't get the\r\n * 'connected' event and instead should check `GamepadPlugin.total` to see if it thinks there are any gamepads\r\n * already connected.\r\n *\r\n * @event Phaser.Input.Gamepad.Events#CONNECTED\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Gamepad} pad - A reference to the Gamepad which was connected.\r\n * @param {Event} event - The native DOM Event that triggered the connection.\r\n */\r\nmodule.exports = 'connected';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2V2ZW50cy9DT05ORUNURURfRVZFTlQuanM/ZWIwNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2V2ZW50cy9DT05ORUNURURfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgR2FtZXBhZCBDb25uZWN0ZWQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIEdhbWVwYWQgUGx1Z2luIHdoZW4gYSBHYW1lcGFkIGhhcyBiZWVuIGNvbm5lY3RlZC5cclxuICogXHJcbiAqIExpc3RlbiB0byB0aGlzIGV2ZW50IGZyb20gd2l0aGluIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmlucHV0LmdhbWVwYWQub25jZSgnY29ubmVjdGVkJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIE5vdGUgdGhhdCB0aGUgYnJvd3NlciBtYXkgcmVxdWlyZSB5b3UgdG8gcHJlc3MgYSBidXR0b24gb24gYSBnYW1lcGFkIGJlZm9yZSBpdCB3aWxsIGFsbG93IHlvdSB0byBhY2Nlc3MgaXQsXHJcbiAqIHRoaXMgaXMgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIEhvd2V2ZXIsIGl0IG1heSBhbHNvIHRydXN0IHRoZSBwYWdlIGFscmVhZHksIGluIHdoaWNoIGNhc2UgeW91IHdvbid0IGdldCB0aGVcclxuICogJ2Nvbm5lY3RlZCcgZXZlbnQgYW5kIGluc3RlYWQgc2hvdWxkIGNoZWNrIGBHYW1lcGFkUGx1Z2luLnRvdGFsYCB0byBzZWUgaWYgaXQgdGhpbmtzIHRoZXJlIGFyZSBhbnkgZ2FtZXBhZHNcclxuICogYWxyZWFkeSBjb25uZWN0ZWQuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuR2FtZXBhZC5FdmVudHMjQ09OTkVDVEVEXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuR2FtZXBhZH0gcGFkIC0gQSByZWZlcmVuY2UgdG8gdGhlIEdhbWVwYWQgd2hpY2ggd2FzIGNvbm5lY3RlZC5cclxuICogQHBhcmFtIHtFdmVudH0gZXZlbnQgLSBUaGUgbmF0aXZlIERPTSBFdmVudCB0aGF0IHRyaWdnZXJlZCB0aGUgY29ubmVjdGlvbi5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2Nvbm5lY3RlZCc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/events/CONNECTED_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/gamepad/events/DISCONNECTED_EVENT.js":
/*!****************************************************************************!*\
!*** ./node_modules/phaser/src/input/gamepad/events/DISCONNECTED_EVENT.js ***!
\****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Gamepad Disconnected Event.\r\n * \r\n * This event is dispatched by the Gamepad Plugin when a Gamepad has been disconnected.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.gamepad.once('disconnected', listener)`.\r\n *\r\n * @event Phaser.Input.Gamepad.Events#DISCONNECTED\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Gamepad} pad - A reference to the Gamepad which was disconnected.\r\n * @param {Event} event - The native DOM Event that triggered the disconnection.\r\n */\r\nmodule.exports = 'disconnected';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2V2ZW50cy9ESVNDT05ORUNURURfRVZFTlQuanM/ZTk2NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLE1BQU07QUFDakI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2dhbWVwYWQvZXZlbnRzL0RJU0NPTk5FQ1RFRF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lcGFkIERpc2Nvbm5lY3RlZCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgR2FtZXBhZCBQbHVnaW4gd2hlbiBhIEdhbWVwYWQgaGFzIGJlZW4gZGlzY29ubmVjdGVkLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZzogYHRoaXMuaW5wdXQuZ2FtZXBhZC5vbmNlKCdkaXNjb25uZWN0ZWQnLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LkdhbWVwYWQuRXZlbnRzI0RJU0NPTk5FQ1RFRFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LkdhbWVwYWR9IHBhZCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBHYW1lcGFkIHdoaWNoIHdhcyBkaXNjb25uZWN0ZWQuXHJcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gVGhlIG5hdGl2ZSBET00gRXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGRpc2Nvbm5lY3Rpb24uXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdkaXNjb25uZWN0ZWQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/events/DISCONNECTED_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/gamepad/events/GAMEPAD_BUTTON_DOWN_EVENT.js":
/*!***********************************************************************************!*\
!*** ./node_modules/phaser/src/input/gamepad/events/GAMEPAD_BUTTON_DOWN_EVENT.js ***!
\***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Gamepad Button Down Event.\r\n * \r\n * This event is dispatched by a Gamepad instance when a button has been pressed on it.\r\n * \r\n * Listen to this event from a Gamepad instance. Once way to get this is from the `pad1`, `pad2`, etc properties on the Gamepad Plugin:\r\n * `this.input.gamepad.pad1.on('down', listener)`.\r\n * \r\n * Note that you will not receive any Gamepad button events until the browser considers the Gamepad as being 'connected'.\r\n * \r\n * You can also listen for a DOWN event from the Gamepad Plugin. See the [BUTTON_DOWN]{@linkcode Phaser.Input.Gamepad.Events#event:BUTTON_DOWN} event for details.\r\n *\r\n * @event Phaser.Input.Gamepad.Events#GAMEPAD_BUTTON_DOWN\r\n * @since 3.10.0\r\n * \r\n * @param {integer} index - The index of the button that was pressed.\r\n * @param {number} value - The value of the button at the time it was pressed. Between 0 and 1. Some Gamepads have pressure-sensitive buttons.\r\n * @param {Phaser.Input.Gamepad.Button} button - A reference to the Button which was pressed.\r\n */\r\nmodule.exports = 'down';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2V2ZW50cy9HQU1FUEFEX0JVVFRPTl9ET1dOX0VWRU5ULmpzPzE1MDEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUZBQXVGLHdEQUF3RDtBQUMvSTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEIsV0FBVyw0QkFBNEI7QUFDdkM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2dhbWVwYWQvZXZlbnRzL0dBTUVQQURfQlVUVE9OX0RPV05fRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgR2FtZXBhZCBCdXR0b24gRG93biBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIEdhbWVwYWQgaW5zdGFuY2Ugd2hlbiBhIGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkIG9uIGl0LlxyXG4gKiBcclxuICogTGlzdGVuIHRvIHRoaXMgZXZlbnQgZnJvbSBhIEdhbWVwYWQgaW5zdGFuY2UuIE9uY2Ugd2F5IHRvIGdldCB0aGlzIGlzIGZyb20gdGhlIGBwYWQxYCwgYHBhZDJgLCBldGMgcHJvcGVydGllcyBvbiB0aGUgR2FtZXBhZCBQbHVnaW46XHJcbiAqIGB0aGlzLmlucHV0LmdhbWVwYWQucGFkMS5vbignZG93bicsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBOb3RlIHRoYXQgeW91IHdpbGwgbm90IHJlY2VpdmUgYW55IEdhbWVwYWQgYnV0dG9uIGV2ZW50cyB1bnRpbCB0aGUgYnJvd3NlciBjb25zaWRlcnMgdGhlIEdhbWVwYWQgYXMgYmVpbmcgJ2Nvbm5lY3RlZCcuXHJcbiAqIFxyXG4gKiBZb3UgY2FuIGFsc28gbGlzdGVuIGZvciBhIERPV04gZXZlbnQgZnJvbSB0aGUgR2FtZXBhZCBQbHVnaW4uIFNlZSB0aGUgW0JVVFRPTl9ET1dOXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LkdhbWVwYWQuRXZlbnRzI2V2ZW50OkJVVFRPTl9ET1dOfSBldmVudCBmb3IgZGV0YWlscy5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5HYW1lcGFkLkV2ZW50cyNHQU1FUEFEX0JVVFRPTl9ET1dOXHJcbiAqIEBzaW5jZSAzLjEwLjBcclxuICogXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gaW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIGJ1dHRvbiB0aGF0IHdhcyBwcmVzc2VkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIGJ1dHRvbiBhdCB0aGUgdGltZSBpdCB3YXMgcHJlc3NlZC4gQmV0d2VlbiAwIGFuZCAxLiBTb21lIEdhbWVwYWRzIGhhdmUgcHJlc3N1cmUtc2Vuc2l0aXZlIGJ1dHRvbnMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LkdhbWVwYWQuQnV0dG9ufSBidXR0b24gLSBBIHJlZmVyZW5jZSB0byB0aGUgQnV0dG9uIHdoaWNoIHdhcyBwcmVzc2VkLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZG93bic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/events/GAMEPAD_BUTTON_DOWN_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/gamepad/events/GAMEPAD_BUTTON_UP_EVENT.js":
/*!*********************************************************************************!*\
!*** ./node_modules/phaser/src/input/gamepad/events/GAMEPAD_BUTTON_UP_EVENT.js ***!
\*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Gamepad Button Up Event.\r\n * \r\n * This event is dispatched by a Gamepad instance when a button has been released on it.\r\n * \r\n * Listen to this event from a Gamepad instance. Once way to get this is from the `pad1`, `pad2`, etc properties on the Gamepad Plugin:\r\n * `this.input.gamepad.pad1.on('up', listener)`.\r\n * \r\n * Note that you will not receive any Gamepad button events until the browser considers the Gamepad as being 'connected'.\r\n * \r\n * You can also listen for an UP event from the Gamepad Plugin. See the [BUTTON_UP]{@linkcode Phaser.Input.Gamepad.Events#event:BUTTON_UP} event for details.\r\n *\r\n * @event Phaser.Input.Gamepad.Events#GAMEPAD_BUTTON_UP\r\n * @since 3.10.0\r\n * \r\n * @param {integer} index - The index of the button that was released.\r\n * @param {number} value - The value of the button at the time it was released. Between 0 and 1. Some Gamepads have pressure-sensitive buttons.\r\n * @param {Phaser.Input.Gamepad.Button} button - A reference to the Button which was released.\r\n */\r\nmodule.exports = 'up';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2V2ZW50cy9HQU1FUEFEX0JVVFRPTl9VUF9FVkVOVC5qcz83NTIzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9GQUFvRixzREFBc0Q7QUFDMUk7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsNEJBQTRCO0FBQ3ZDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2V2ZW50cy9HQU1FUEFEX0JVVFRPTl9VUF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHYW1lcGFkIEJ1dHRvbiBVcCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSBhIEdhbWVwYWQgaW5zdGFuY2Ugd2hlbiBhIGJ1dHRvbiBoYXMgYmVlbiByZWxlYXNlZCBvbiBpdC5cclxuICogXHJcbiAqIExpc3RlbiB0byB0aGlzIGV2ZW50IGZyb20gYSBHYW1lcGFkIGluc3RhbmNlLiBPbmNlIHdheSB0byBnZXQgdGhpcyBpcyBmcm9tIHRoZSBgcGFkMWAsIGBwYWQyYCwgZXRjIHByb3BlcnRpZXMgb24gdGhlIEdhbWVwYWQgUGx1Z2luOlxyXG4gKiBgdGhpcy5pbnB1dC5nYW1lcGFkLnBhZDEub24oJ3VwJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIE5vdGUgdGhhdCB5b3Ugd2lsbCBub3QgcmVjZWl2ZSBhbnkgR2FtZXBhZCBidXR0b24gZXZlbnRzIHVudGlsIHRoZSBicm93c2VyIGNvbnNpZGVycyB0aGUgR2FtZXBhZCBhcyBiZWluZyAnY29ubmVjdGVkJy5cclxuICogXHJcbiAqIFlvdSBjYW4gYWxzbyBsaXN0ZW4gZm9yIGFuIFVQIGV2ZW50IGZyb20gdGhlIEdhbWVwYWQgUGx1Z2luLiBTZWUgdGhlIFtCVVRUT05fVVBde0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuR2FtZXBhZC5FdmVudHMjZXZlbnQ6QlVUVE9OX1VQfSBldmVudCBmb3IgZGV0YWlscy5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5HYW1lcGFkLkV2ZW50cyNHQU1FUEFEX0JVVFRPTl9VUFxyXG4gKiBAc2luY2UgMy4xMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBidXR0b24gdGhhdCB3YXMgcmVsZWFzZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgYnV0dG9uIGF0IHRoZSB0aW1lIGl0IHdhcyByZWxlYXNlZC4gQmV0d2VlbiAwIGFuZCAxLiBTb21lIEdhbWVwYWRzIGhhdmUgcHJlc3N1cmUtc2Vuc2l0aXZlIGJ1dHRvbnMuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LkdhbWVwYWQuQnV0dG9ufSBidXR0b24gLSBBIHJlZmVyZW5jZSB0byB0aGUgQnV0dG9uIHdoaWNoIHdhcyByZWxlYXNlZC5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ3VwJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/events/GAMEPAD_BUTTON_UP_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/gamepad/events/index.js":
/*!***************************************************************!*\
!*** ./node_modules/phaser/src/input/gamepad/events/index.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Input.Gamepad.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n BUTTON_DOWN: __webpack_require__(/*! ./BUTTON_DOWN_EVENT */ \"./node_modules/phaser/src/input/gamepad/events/BUTTON_DOWN_EVENT.js\"),\r\n BUTTON_UP: __webpack_require__(/*! ./BUTTON_UP_EVENT */ \"./node_modules/phaser/src/input/gamepad/events/BUTTON_UP_EVENT.js\"),\r\n CONNECTED: __webpack_require__(/*! ./CONNECTED_EVENT */ \"./node_modules/phaser/src/input/gamepad/events/CONNECTED_EVENT.js\"),\r\n DISCONNECTED: __webpack_require__(/*! ./DISCONNECTED_EVENT */ \"./node_modules/phaser/src/input/gamepad/events/DISCONNECTED_EVENT.js\"),\r\n GAMEPAD_BUTTON_DOWN: __webpack_require__(/*! ./GAMEPAD_BUTTON_DOWN_EVENT */ \"./node_modules/phaser/src/input/gamepad/events/GAMEPAD_BUTTON_DOWN_EVENT.js\"),\r\n GAMEPAD_BUTTON_UP: __webpack_require__(/*! ./GAMEPAD_BUTTON_UP_EVENT */ \"./node_modules/phaser/src/input/gamepad/events/GAMEPAD_BUTTON_UP_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2V2ZW50cy9pbmRleC5qcz9iY2Q1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsZ0dBQXFCO0FBQzlDLGVBQWUsbUJBQU8sQ0FBQyw0RkFBbUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLDRGQUFtQjtBQUMxQyxrQkFBa0IsbUJBQU8sQ0FBQyxrR0FBc0I7QUFDaEQseUJBQXlCLG1CQUFPLENBQUMsZ0hBQTZCO0FBQzlELHVCQUF1QixtQkFBTyxDQUFDLDRHQUEyQjs7QUFFMUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2V2ZW50cy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLklucHV0LkdhbWVwYWQuRXZlbnRzXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgQlVUVE9OX0RPV046IHJlcXVpcmUoJy4vQlVUVE9OX0RPV05fRVZFTlQnKSxcclxuICAgIEJVVFRPTl9VUDogcmVxdWlyZSgnLi9CVVRUT05fVVBfRVZFTlQnKSxcclxuICAgIENPTk5FQ1RFRDogcmVxdWlyZSgnLi9DT05ORUNURURfRVZFTlQnKSxcclxuICAgIERJU0NPTk5FQ1RFRDogcmVxdWlyZSgnLi9ESVNDT05ORUNURURfRVZFTlQnKSxcclxuICAgIEdBTUVQQURfQlVUVE9OX0RPV046IHJlcXVpcmUoJy4vR0FNRVBBRF9CVVRUT05fRE9XTl9FVkVOVCcpLFxyXG4gICAgR0FNRVBBRF9CVVRUT05fVVA6IHJlcXVpcmUoJy4vR0FNRVBBRF9CVVRUT05fVVBfRVZFTlQnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/events/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/gamepad/index.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/input/gamepad/index.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Input.Gamepad\r\n */\r\n\r\nmodule.exports = {\r\n\r\n Axis: __webpack_require__(/*! ./Axis */ \"./node_modules/phaser/src/input/gamepad/Axis.js\"),\r\n Button: __webpack_require__(/*! ./Button */ \"./node_modules/phaser/src/input/gamepad/Button.js\"),\r\n Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/input/gamepad/events/index.js\"),\r\n Gamepad: __webpack_require__(/*! ./Gamepad */ \"./node_modules/phaser/src/input/gamepad/Gamepad.js\"),\r\n GamepadPlugin: __webpack_require__(/*! ./GamepadPlugin */ \"./node_modules/phaser/src/input/gamepad/GamepadPlugin.js\"),\r\n \r\n Configs: __webpack_require__(/*! ./configs/ */ \"./node_modules/phaser/src/input/gamepad/configs/index.js\")\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2luZGV4LmpzP2I5OTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxVQUFVLG1CQUFPLENBQUMsK0RBQVE7QUFDMUIsWUFBWSxtQkFBTyxDQUFDLG1FQUFVO0FBQzlCLFlBQVksbUJBQU8sQ0FBQyx5RUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMscUVBQVc7QUFDaEMsbUJBQW1CLG1CQUFPLENBQUMsaUZBQWlCOztBQUU1QyxhQUFhLG1CQUFPLENBQUMsNEVBQVk7QUFDakMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9nYW1lcGFkL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuSW5wdXQuR2FtZXBhZFxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEF4aXM6IHJlcXVpcmUoJy4vQXhpcycpLFxyXG4gICAgQnV0dG9uOiByZXF1aXJlKCcuL0J1dHRvbicpLFxyXG4gICAgRXZlbnRzOiByZXF1aXJlKCcuL2V2ZW50cycpLFxyXG4gICAgR2FtZXBhZDogcmVxdWlyZSgnLi9HYW1lcGFkJyksXHJcbiAgICBHYW1lcGFkUGx1Z2luOiByZXF1aXJlKCcuL0dhbWVwYWRQbHVnaW4nKSxcclxuICAgIFxyXG4gICAgQ29uZmlnczogcmVxdWlyZSgnLi9jb25maWdzLycpXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/gamepad/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/index.js":
/*!************************************************!*\
!*** ./node_modules/phaser/src/input/index.js ***!
\************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/input/const.js\");\r\nvar Extend = __webpack_require__(/*! ../utils/object/Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\");\r\n\r\n/**\r\n * @namespace Phaser.Input\r\n */\r\n\r\nvar Input = {\r\n\r\n CreateInteractiveObject: __webpack_require__(/*! ./CreateInteractiveObject */ \"./node_modules/phaser/src/input/CreateInteractiveObject.js\"),\r\n Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/input/events/index.js\"),\r\n Gamepad: __webpack_require__(/*! ./gamepad */ \"./node_modules/phaser/src/input/gamepad/index.js\"),\r\n InputManager: __webpack_require__(/*! ./InputManager */ \"./node_modules/phaser/src/input/InputManager.js\"),\r\n InputPlugin: __webpack_require__(/*! ./InputPlugin */ \"./node_modules/phaser/src/input/InputPlugin.js\"),\r\n InputPluginCache: __webpack_require__(/*! ./InputPluginCache */ \"./node_modules/phaser/src/input/InputPluginCache.js\"),\r\n Keyboard: __webpack_require__(/*! ./keyboard */ \"./node_modules/phaser/src/input/keyboard/index.js\"),\r\n Mouse: __webpack_require__(/*! ./mouse */ \"./node_modules/phaser/src/input/mouse/index.js\"),\r\n Pointer: __webpack_require__(/*! ./Pointer */ \"./node_modules/phaser/src/input/Pointer.js\"),\r\n Touch: __webpack_require__(/*! ./touch */ \"./node_modules/phaser/src/input/touch/index.js\")\r\n\r\n};\r\n\r\n// Merge in the consts\r\nInput = Extend(false, Input, CONST);\r\n\r\nmodule.exports = Input;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9pbmRleC5qcz8zODY1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMseURBQVM7QUFDN0IsYUFBYSxtQkFBTyxDQUFDLGdGQUF3Qjs7QUFFN0M7QUFDQTtBQUNBOztBQUVBOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLDZGQUEyQjtBQUNoRSxZQUFZLG1CQUFPLENBQUMsaUVBQVU7QUFDOUIsYUFBYSxtQkFBTyxDQUFDLG1FQUFXO0FBQ2hDLGtCQUFrQixtQkFBTyxDQUFDLHVFQUFnQjtBQUMxQyxpQkFBaUIsbUJBQU8sQ0FBQyxxRUFBZTtBQUN4QyxzQkFBc0IsbUJBQU8sQ0FBQywrRUFBb0I7QUFDbEQsY0FBYyxtQkFBTyxDQUFDLHFFQUFZO0FBQ2xDLFdBQVcsbUJBQU8sQ0FBQywrREFBUztBQUM1QixhQUFhLG1CQUFPLENBQUMsNkRBQVc7QUFDaEMsV0FBVyxtQkFBTyxDQUFDLCtEQUFTOztBQUU1Qjs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4vY29uc3QnKTtcclxudmFyIEV4dGVuZCA9IHJlcXVpcmUoJy4uL3V0aWxzL29iamVjdC9FeHRlbmQnKTtcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5JbnB1dFxyXG4gKi9cclxuXHJcbnZhciBJbnB1dCA9IHtcclxuXHJcbiAgICBDcmVhdGVJbnRlcmFjdGl2ZU9iamVjdDogcmVxdWlyZSgnLi9DcmVhdGVJbnRlcmFjdGl2ZU9iamVjdCcpLFxyXG4gICAgRXZlbnRzOiByZXF1aXJlKCcuL2V2ZW50cycpLFxyXG4gICAgR2FtZXBhZDogcmVxdWlyZSgnLi9nYW1lcGFkJyksXHJcbiAgICBJbnB1dE1hbmFnZXI6IHJlcXVpcmUoJy4vSW5wdXRNYW5hZ2VyJyksXHJcbiAgICBJbnB1dFBsdWdpbjogcmVxdWlyZSgnLi9JbnB1dFBsdWdpbicpLFxyXG4gICAgSW5wdXRQbHVnaW5DYWNoZTogcmVxdWlyZSgnLi9JbnB1dFBsdWdpbkNhY2hlJyksXHJcbiAgICBLZXlib2FyZDogcmVxdWlyZSgnLi9rZXlib2FyZCcpLFxyXG4gICAgTW91c2U6IHJlcXVpcmUoJy4vbW91c2UnKSxcclxuICAgIFBvaW50ZXI6IHJlcXVpcmUoJy4vUG9pbnRlcicpLFxyXG4gICAgVG91Y2g6IHJlcXVpcmUoJy4vdG91Y2gnKVxyXG5cclxufTtcclxuXHJcbi8vICAgTWVyZ2UgaW4gdGhlIGNvbnN0c1xyXG5JbnB1dCA9IEV4dGVuZChmYWxzZSwgSW5wdXQsIENPTlNUKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW5wdXQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/keyboard/KeyboardManager.js":
/*!*******************************************************************!*\
!*** ./node_modules/phaser/src/input/keyboard/KeyboardManager.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar ArrayRemove = __webpack_require__(/*! ../../utils/array/Remove */ \"./node_modules/phaser/src/utils/array/Remove.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar GameEvents = __webpack_require__(/*! ../../core/events */ \"./node_modules/phaser/src/core/events/index.js\");\r\nvar InputEvents = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/input/events/index.js\");\r\nvar KeyCodes = __webpack_require__(/*! ../../input/keyboard/keys/KeyCodes */ \"./node_modules/phaser/src/input/keyboard/keys/KeyCodes.js\");\r\nvar NOOP = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Keyboard Manager is a helper class that belongs to the global Input Manager.\r\n * \r\n * Its role is to listen for native DOM Keyboard Events and then store them for further processing by the Keyboard Plugin.\r\n * \r\n * You do not need to create this class directly, the Input Manager will create an instance of it automatically if keyboard\r\n * input has been enabled in the Game Config.\r\n *\r\n * @class KeyboardManager\r\n * @memberof Phaser.Input.Keyboard\r\n * @constructor\r\n * @since 3.16.0\r\n *\r\n * @param {Phaser.Input.InputManager} inputManager - A reference to the Input Manager.\r\n */\r\nvar KeyboardManager = new Class({\r\n\r\n initialize:\r\n\r\n function KeyboardManager (inputManager)\r\n {\r\n /**\r\n * A reference to the Input Manager.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyboardManager#manager\r\n * @type {Phaser.Input.InputManager}\r\n * @since 3.16.0\r\n */\r\n this.manager = inputManager;\r\n\r\n /**\r\n * An internal event queue.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyboardManager#queue\r\n * @type {KeyboardEvent[]}\r\n * @private\r\n * @since 3.16.0\r\n */\r\n this.queue = [];\r\n\r\n /**\r\n * A flag that controls if the non-modified keys, matching those stored in the `captures` array,\r\n * have `preventDefault` called on them or not.\r\n * \r\n * A non-modified key is one that doesn't have a modifier key held down with it. The modifier keys are\r\n * shift, control, alt and the meta key (Command on a Mac, the Windows Key on Windows).\r\n * Therefore, if the user presses shift + r, it won't prevent this combination, because of the modifier.\r\n * However, if the user presses just the r key on its own, it will have its event prevented.\r\n * \r\n * If you wish to stop capturing the keys, for example switching out to a DOM based element, then\r\n * you can toggle this property at run-time.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyboardManager#preventDefault\r\n * @type {boolean}\r\n * @since 3.16.0\r\n */\r\n this.preventDefault = true;\r\n\r\n /**\r\n * An array of Key Code values that will automatically have `preventDefault` called on them,\r\n * as long as the `KeyboardManager.preventDefault` boolean is set to `true`.\r\n * \r\n * By default the array is empty.\r\n * \r\n * The key must be non-modified when pressed in order to be captured.\r\n * \r\n * A non-modified key is one that doesn't have a modifier key held down with it. The modifier keys are\r\n * shift, control, alt and the meta key (Command on a Mac, the Windows Key on Windows).\r\n * Therefore, if the user presses shift + r, it won't prevent this combination, because of the modifier.\r\n * However, if the user presses just the r key on its own, it will have its event prevented.\r\n * \r\n * If you wish to stop capturing the keys, for example switching out to a DOM based element, then\r\n * you can toggle the `KeyboardManager.preventDefault` boolean at run-time.\r\n * \r\n * If you need more specific control, you can create Key objects and set the flag on each of those instead.\r\n * \r\n * This array can be populated via the Game Config by setting the `input.keyboard.capture` array, or you\r\n * can call the `addCapture` method. See also `removeCapture` and `clearCaptures`.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyboardManager#captures\r\n * @type {integer[]}\r\n * @since 3.16.0\r\n */\r\n this.captures = [];\r\n\r\n /**\r\n * A boolean that controls if the Keyboard Manager is enabled or not.\r\n * Can be toggled on the fly.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyboardManager#enabled\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.16.0\r\n */\r\n this.enabled = false;\r\n\r\n /**\r\n * The Keyboard Event target, as defined in the Game Config.\r\n * Typically the window in which the game is rendering, but can be any interactive DOM element.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyboardManager#target\r\n * @type {any}\r\n * @since 3.16.0\r\n */\r\n this.target;\r\n\r\n /**\r\n * The Key Down Event handler.\r\n * This function is sent the native DOM KeyEvent.\r\n * Initially empty and bound in the `startListeners` method.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyboardManager#onKeyDown\r\n * @type {function}\r\n * @since 3.16.00\r\n */\r\n this.onKeyDown = NOOP;\r\n\r\n /**\r\n * The Key Up Event handler.\r\n * This function is sent the native DOM KeyEvent.\r\n * Initially empty and bound in the `startListeners` method.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyboardManager#onKeyUp\r\n * @type {function}\r\n * @since 3.16.00\r\n */\r\n this.onKeyUp = NOOP;\r\n\r\n inputManager.events.once(InputEvents.MANAGER_BOOT, this.boot, this);\r\n },\r\n\r\n /**\r\n * The Keyboard Manager boot process.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardManager#boot\r\n * @private\r\n * @since 3.16.0\r\n */\r\n boot: function ()\r\n {\r\n var config = this.manager.config;\r\n\r\n this.enabled = config.inputKeyboard;\r\n this.target = config.inputKeyboardEventTarget;\r\n\r\n this.addCapture(config.inputKeyboardCapture);\r\n\r\n if (!this.target && window)\r\n {\r\n this.target = window;\r\n }\r\n\r\n if (this.enabled && this.target)\r\n {\r\n this.startListeners();\r\n }\r\n\r\n this.manager.game.events.on(GameEvents.POST_STEP, this.postUpdate, this);\r\n },\r\n\r\n /**\r\n * Starts the Keyboard Event listeners running.\r\n * This is called automatically and does not need to be manually invoked.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardManager#startListeners\r\n * @since 3.16.0\r\n */\r\n startListeners: function ()\r\n {\r\n var _this = this;\r\n\r\n this.onKeyDown = function (event)\r\n {\r\n if (event.defaultPrevented || !_this.enabled || !_this.manager)\r\n {\r\n // Do nothing if event already handled\r\n return;\r\n }\r\n\r\n _this.queue.push(event);\r\n\r\n if (!_this.manager.useQueue)\r\n {\r\n _this.manager.events.emit(InputEvents.MANAGER_PROCESS);\r\n }\r\n \r\n var modified = (event.altKey || event.ctrlKey || event.shiftKey || event.metaKey);\r\n\r\n if (_this.preventDefault && !modified && _this.captures.indexOf(event.keyCode) > -1)\r\n {\r\n event.preventDefault();\r\n }\r\n };\r\n\r\n this.onKeyUp = function (event)\r\n {\r\n if (event.defaultPrevented || !_this.enabled || !_this.manager)\r\n {\r\n // Do nothing if event already handled\r\n return;\r\n }\r\n\r\n _this.queue.push(event);\r\n\r\n if (!_this.manager.useQueue)\r\n {\r\n _this.manager.events.emit(InputEvents.MANAGER_PROCESS);\r\n }\r\n \r\n var modified = (event.altKey || event.ctrlKey || event.shiftKey || event.metaKey);\r\n\r\n if (_this.preventDefault && !modified && _this.captures.indexOf(event.keyCode) > -1)\r\n {\r\n event.preventDefault();\r\n }\r\n };\r\n\r\n var target = this.target;\r\n\r\n if (target)\r\n {\r\n target.addEventListener('keydown', this.onKeyDown, false);\r\n target.addEventListener('keyup', this.onKeyUp, false);\r\n\r\n this.enabled = true;\r\n }\r\n },\r\n\r\n /**\r\n * Stops the Key Event listeners.\r\n * This is called automatically and does not need to be manually invoked.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardManager#stopListeners\r\n * @since 3.16.0\r\n */\r\n stopListeners: function ()\r\n {\r\n var target = this.target;\r\n\r\n target.removeEventListener('keydown', this.onKeyDown, false);\r\n target.removeEventListener('keyup', this.onKeyUp, false);\r\n\r\n this.enabled = false;\r\n },\r\n\r\n /**\r\n * Clears the event queue.\r\n * Called automatically by the Input Manager.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardManager#postUpdate\r\n * @private\r\n * @since 3.16.0\r\n */\r\n postUpdate: function ()\r\n {\r\n this.queue = [];\r\n },\r\n\r\n /**\r\n * By default when a key is pressed Phaser will not stop the event from propagating up to the browser.\r\n * There are some keys this can be annoying for, like the arrow keys or space bar, which make the browser window scroll.\r\n *\r\n * This `addCapture` method enables consuming keyboard event for specific keys so it doesn't bubble up to the the browser\r\n * and cause the default browser behavior.\r\n * \r\n * Please note that keyboard captures are global. This means that if you call this method from within a Scene, to say prevent\r\n * the SPACE BAR from triggering a page scroll, then it will prevent it for any Scene in your game, not just the calling one.\r\n * \r\n * You can pass in a single key code value, or an array of key codes, or a string:\r\n * \r\n * ```javascript\r\n * this.input.keyboard.addCapture(62);\r\n * ```\r\n * \r\n * An array of key codes:\r\n * \r\n * ```javascript\r\n * this.input.keyboard.addCapture([ 62, 63, 64 ]);\r\n * ```\r\n * \r\n * Or a string:\r\n * \r\n * ```javascript\r\n * this.input.keyboard.addCapture('W,S,A,D');\r\n * ```\r\n * \r\n * To use non-alpha numeric keys, use a string, such as 'UP', 'SPACE' or 'LEFT'.\r\n * \r\n * You can also provide an array mixing both strings and key code integers.\r\n * \r\n * If there are active captures after calling this method, the `preventDefault` property is set to `true`.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardManager#addCapture\r\n * @since 3.16.0\r\n * \r\n * @param {(string|integer|integer[]|any[])} keycode - The Key Codes to enable capture for, preventing them reaching the browser.\r\n */\r\n addCapture: function (keycode)\r\n {\r\n if (typeof keycode === 'string')\r\n {\r\n keycode = keycode.split(',');\r\n }\r\n\r\n if (!Array.isArray(keycode))\r\n {\r\n keycode = [ keycode ];\r\n }\r\n\r\n var captures = this.captures;\r\n\r\n for (var i = 0; i < keycode.length; i++)\r\n {\r\n var code = keycode[i];\r\n\r\n if (typeof code === 'string')\r\n {\r\n code = KeyCodes[code.trim().toUpperCase()];\r\n }\r\n\r\n if (captures.indexOf(code) === -1)\r\n {\r\n captures.push(code);\r\n }\r\n }\r\n\r\n this.preventDefault = captures.length > 0;\r\n },\r\n\r\n /**\r\n * Removes an existing key capture.\r\n * \r\n * Please note that keyboard captures are global. This means that if you call this method from within a Scene, to remove\r\n * the capture of a key, then it will remove it for any Scene in your game, not just the calling one.\r\n * \r\n * You can pass in a single key code value, or an array of key codes, or a string:\r\n * \r\n * ```javascript\r\n * this.input.keyboard.removeCapture(62);\r\n * ```\r\n * \r\n * An array of key codes:\r\n * \r\n * ```javascript\r\n * this.input.keyboard.removeCapture([ 62, 63, 64 ]);\r\n * ```\r\n * \r\n * Or a string:\r\n * \r\n * ```javascript\r\n * this.input.keyboard.removeCapture('W,S,A,D');\r\n * ```\r\n * \r\n * To use non-alpha numeric keys, use a string, such as 'UP', 'SPACE' or 'LEFT'.\r\n * \r\n * You can also provide an array mixing both strings and key code integers.\r\n * \r\n * If there are no captures left after calling this method, the `preventDefault` property is set to `false`.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardManager#removeCapture\r\n * @since 3.16.0\r\n * \r\n * @param {(string|integer|integer[]|any[])} keycode - The Key Codes to disable capture for, allowing them reaching the browser again.\r\n */\r\n removeCapture: function (keycode)\r\n {\r\n if (typeof keycode === 'string')\r\n {\r\n keycode = keycode.split(',');\r\n }\r\n\r\n if (!Array.isArray(keycode))\r\n {\r\n keycode = [ keycode ];\r\n }\r\n\r\n var captures = this.captures;\r\n\r\n for (var i = 0; i < keycode.length; i++)\r\n {\r\n var code = keycode[i];\r\n\r\n if (typeof code === 'string')\r\n {\r\n code = KeyCodes[code.toUpperCase()];\r\n }\r\n\r\n ArrayRemove(captures, code);\r\n }\r\n\r\n this.preventDefault = captures.length > 0;\r\n },\r\n\r\n /**\r\n * Removes all keyboard captures and sets the `preventDefault` property to `false`.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardManager#clearCaptures\r\n * @since 3.16.0\r\n */\r\n clearCaptures: function ()\r\n {\r\n this.captures = [];\r\n\r\n this.preventDefault = false;\r\n },\r\n\r\n /**\r\n * Destroys this Keyboard Manager instance.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardManager#destroy\r\n * @since 3.16.0\r\n */\r\n destroy: function ()\r\n {\r\n this.stopListeners();\r\n\r\n this.clearCaptures();\r\n\r\n this.queue = [];\r\n\r\n this.manager.game.events.off(GameEvents.POST_RENDER, this.postUpdate, this);\r\n\r\n this.target = null;\r\n this.enabled = false;\r\n this.manager = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = KeyboardManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9LZXlib2FyZE1hbmFnZXIuanM/M2JkMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ3BELFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMseUVBQW1CO0FBQzVDLGtCQUFrQixtQkFBTyxDQUFDLGtFQUFXO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxxR0FBb0M7QUFDM0QsV0FBVyxtQkFBTyxDQUFDLG1FQUFtQjs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlDQUFpQztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx1QkFBdUIsb0JBQW9CO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQ0FBaUM7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsdUJBQXVCLG9CQUFvQjtBQUMzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9LZXlib2FyZE1hbmFnZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBBcnJheVJlbW92ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL2FycmF5L1JlbW92ZScpO1xyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgR2FtZUV2ZW50cyA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvZXZlbnRzJyk7XHJcbnZhciBJbnB1dEV2ZW50cyA9IHJlcXVpcmUoJy4uL2V2ZW50cycpO1xyXG52YXIgS2V5Q29kZXMgPSByZXF1aXJlKCcuLi8uLi9pbnB1dC9rZXlib2FyZC9rZXlzL0tleUNvZGVzJyk7XHJcbnZhciBOT09QID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBLZXlib2FyZCBNYW5hZ2VyIGlzIGEgaGVscGVyIGNsYXNzIHRoYXQgYmVsb25ncyB0byB0aGUgZ2xvYmFsIElucHV0IE1hbmFnZXIuXHJcbiAqIFxyXG4gKiBJdHMgcm9sZSBpcyB0byBsaXN0ZW4gZm9yIG5hdGl2ZSBET00gS2V5Ym9hcmQgRXZlbnRzIGFuZCB0aGVuIHN0b3JlIHRoZW0gZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZyBieSB0aGUgS2V5Ym9hcmQgUGx1Z2luLlxyXG4gKiBcclxuICogWW91IGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSB0aGlzIGNsYXNzIGRpcmVjdGx5LCB0aGUgSW5wdXQgTWFuYWdlciB3aWxsIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBpdCBhdXRvbWF0aWNhbGx5IGlmIGtleWJvYXJkXHJcbiAqIGlucHV0IGhhcyBiZWVuIGVuYWJsZWQgaW4gdGhlIEdhbWUgQ29uZmlnLlxyXG4gKlxyXG4gKiBAY2xhc3MgS2V5Ym9hcmRNYW5hZ2VyXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuSW5wdXQuS2V5Ym9hcmRcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjE2LjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyfSBpbnB1dE1hbmFnZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgSW5wdXQgTWFuYWdlci5cclxuICovXHJcbnZhciBLZXlib2FyZE1hbmFnZXIgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gS2V5Ym9hcmRNYW5hZ2VyIChpbnB1dE1hbmFnZXIpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIElucHV0IE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRNYW5hZ2VyI21hbmFnZXJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LklucHV0TWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gaW5wdXRNYW5hZ2VyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBpbnRlcm5hbCBldmVudCBxdWV1ZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZE1hbmFnZXIjcXVldWVcclxuICAgICAgICAgKiBAdHlwZSB7S2V5Ym9hcmRFdmVudFtdfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucXVldWUgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBmbGFnIHRoYXQgY29udHJvbHMgaWYgdGhlIG5vbi1tb2RpZmllZCBrZXlzLCBtYXRjaGluZyB0aG9zZSBzdG9yZWQgaW4gdGhlIGBjYXB0dXJlc2AgYXJyYXksXHJcbiAgICAgICAgICogaGF2ZSBgcHJldmVudERlZmF1bHRgIGNhbGxlZCBvbiB0aGVtIG9yIG5vdC5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBBIG5vbi1tb2RpZmllZCBrZXkgaXMgb25lIHRoYXQgZG9lc24ndCBoYXZlIGEgbW9kaWZpZXIga2V5IGhlbGQgZG93biB3aXRoIGl0LiBUaGUgbW9kaWZpZXIga2V5cyBhcmVcclxuICAgICAgICAgKiBzaGlmdCwgY29udHJvbCwgYWx0IGFuZCB0aGUgbWV0YSBrZXkgKENvbW1hbmQgb24gYSBNYWMsIHRoZSBXaW5kb3dzIEtleSBvbiBXaW5kb3dzKS5cclxuICAgICAgICAgKiBUaGVyZWZvcmUsIGlmIHRoZSB1c2VyIHByZXNzZXMgc2hpZnQgKyByLCBpdCB3b24ndCBwcmV2ZW50IHRoaXMgY29tYmluYXRpb24sIGJlY2F1c2Ugb2YgdGhlIG1vZGlmaWVyLlxyXG4gICAgICAgICAqIEhvd2V2ZXIsIGlmIHRoZSB1c2VyIHByZXNzZXMganVzdCB0aGUgciBrZXkgb24gaXRzIG93biwgaXQgd2lsbCBoYXZlIGl0cyBldmVudCBwcmV2ZW50ZWQuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogSWYgeW91IHdpc2ggdG8gc3RvcCBjYXB0dXJpbmcgdGhlIGtleXMsIGZvciBleGFtcGxlIHN3aXRjaGluZyBvdXQgdG8gYSBET00gYmFzZWQgZWxlbWVudCwgdGhlblxyXG4gICAgICAgICAqIHlvdSBjYW4gdG9nZ2xlIHRoaXMgcHJvcGVydHkgYXQgcnVuLXRpbWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRNYW5hZ2VyI3ByZXZlbnREZWZhdWx0XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucHJldmVudERlZmF1bHQgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBvZiBLZXkgQ29kZSB2YWx1ZXMgdGhhdCB3aWxsIGF1dG9tYXRpY2FsbHkgaGF2ZSBgcHJldmVudERlZmF1bHRgIGNhbGxlZCBvbiB0aGVtLFxyXG4gICAgICAgICAqIGFzIGxvbmcgYXMgdGhlIGBLZXlib2FyZE1hbmFnZXIucHJldmVudERlZmF1bHRgIGJvb2xlYW4gaXMgc2V0IHRvIGB0cnVlYC5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBCeSBkZWZhdWx0IHRoZSBhcnJheSBpcyBlbXB0eS5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBUaGUga2V5IG11c3QgYmUgbm9uLW1vZGlmaWVkIHdoZW4gcHJlc3NlZCBpbiBvcmRlciB0byBiZSBjYXB0dXJlZC5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBBIG5vbi1tb2RpZmllZCBrZXkgaXMgb25lIHRoYXQgZG9lc24ndCBoYXZlIGEgbW9kaWZpZXIga2V5IGhlbGQgZG93biB3aXRoIGl0LiBUaGUgbW9kaWZpZXIga2V5cyBhcmVcclxuICAgICAgICAgKiBzaGlmdCwgY29udHJvbCwgYWx0IGFuZCB0aGUgbWV0YSBrZXkgKENvbW1hbmQgb24gYSBNYWMsIHRoZSBXaW5kb3dzIEtleSBvbiBXaW5kb3dzKS5cclxuICAgICAgICAgKiBUaGVyZWZvcmUsIGlmIHRoZSB1c2VyIHByZXNzZXMgc2hpZnQgKyByLCBpdCB3b24ndCBwcmV2ZW50IHRoaXMgY29tYmluYXRpb24sIGJlY2F1c2Ugb2YgdGhlIG1vZGlmaWVyLlxyXG4gICAgICAgICAqIEhvd2V2ZXIsIGlmIHRoZSB1c2VyIHByZXNzZXMganVzdCB0aGUgciBrZXkgb24gaXRzIG93biwgaXQgd2lsbCBoYXZlIGl0cyBldmVudCBwcmV2ZW50ZWQuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogSWYgeW91IHdpc2ggdG8gc3RvcCBjYXB0dXJpbmcgdGhlIGtleXMsIGZvciBleGFtcGxlIHN3aXRjaGluZyBvdXQgdG8gYSBET00gYmFzZWQgZWxlbWVudCwgdGhlblxyXG4gICAgICAgICAqIHlvdSBjYW4gdG9nZ2xlIHRoZSBgS2V5Ym9hcmRNYW5hZ2VyLnByZXZlbnREZWZhdWx0YCBib29sZWFuIGF0IHJ1bi10aW1lLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIElmIHlvdSBuZWVkIG1vcmUgc3BlY2lmaWMgY29udHJvbCwgeW91IGNhbiBjcmVhdGUgS2V5IG9iamVjdHMgYW5kIHNldCB0aGUgZmxhZyBvbiBlYWNoIG9mIHRob3NlIGluc3RlYWQuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVGhpcyBhcnJheSBjYW4gYmUgcG9wdWxhdGVkIHZpYSB0aGUgR2FtZSBDb25maWcgYnkgc2V0dGluZyB0aGUgYGlucHV0LmtleWJvYXJkLmNhcHR1cmVgIGFycmF5LCBvciB5b3VcclxuICAgICAgICAgKiBjYW4gY2FsbCB0aGUgYGFkZENhcHR1cmVgIG1ldGhvZC4gU2VlIGFsc28gYHJlbW92ZUNhcHR1cmVgIGFuZCBgY2xlYXJDYXB0dXJlc2AuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRNYW5hZ2VyI2NhcHR1cmVzXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJbXX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYXB0dXJlcyA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGJvb2xlYW4gdGhhdCBjb250cm9scyBpZiB0aGUgS2V5Ym9hcmQgTWFuYWdlciBpcyBlbmFibGVkIG9yIG5vdC5cclxuICAgICAgICAgKiBDYW4gYmUgdG9nZ2xlZCBvbiB0aGUgZmx5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkTWFuYWdlciNlbmFibGVkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBLZXlib2FyZCBFdmVudCB0YXJnZXQsIGFzIGRlZmluZWQgaW4gdGhlIEdhbWUgQ29uZmlnLlxyXG4gICAgICAgICAqIFR5cGljYWxseSB0aGUgd2luZG93IGluIHdoaWNoIHRoZSBnYW1lIGlzIHJlbmRlcmluZywgYnV0IGNhbiBiZSBhbnkgaW50ZXJhY3RpdmUgRE9NIGVsZW1lbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRNYW5hZ2VyI3RhcmdldFxyXG4gICAgICAgICAqIEB0eXBlIHthbnl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgS2V5IERvd24gRXZlbnQgaGFuZGxlci5cclxuICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHNlbnQgdGhlIG5hdGl2ZSBET00gS2V5RXZlbnQuXHJcbiAgICAgICAgICogSW5pdGlhbGx5IGVtcHR5IGFuZCBib3VuZCBpbiB0aGUgYHN0YXJ0TGlzdGVuZXJzYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRNYW5hZ2VyI29uS2V5RG93blxyXG4gICAgICAgICAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub25LZXlEb3duID0gTk9PUDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEtleSBVcCBFdmVudCBoYW5kbGVyLlxyXG4gICAgICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgc2VudCB0aGUgbmF0aXZlIERPTSBLZXlFdmVudC5cclxuICAgICAgICAgKiBJbml0aWFsbHkgZW1wdHkgYW5kIGJvdW5kIGluIHRoZSBgc3RhcnRMaXN0ZW5lcnNgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZE1hbmFnZXIjb25LZXlVcFxyXG4gICAgICAgICAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub25LZXlVcCA9IE5PT1A7XHJcblxyXG4gICAgICAgIGlucHV0TWFuYWdlci5ldmVudHMub25jZShJbnB1dEV2ZW50cy5NQU5BR0VSX0JPT1QsIHRoaXMuYm9vdCwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIEtleWJvYXJkIE1hbmFnZXIgYm9vdCBwcm9jZXNzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkTWFuYWdlciNib290XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICovXHJcbiAgICBib290OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjb25maWcgPSB0aGlzLm1hbmFnZXIuY29uZmlnO1xyXG5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBjb25maWcuaW5wdXRLZXlib2FyZDtcclxuICAgICAgICB0aGlzLnRhcmdldCA9IGNvbmZpZy5pbnB1dEtleWJvYXJkRXZlbnRUYXJnZXQ7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkQ2FwdHVyZShjb25maWcuaW5wdXRLZXlib2FyZENhcHR1cmUpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMudGFyZ2V0ICYmIHdpbmRvdylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gd2luZG93O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlZCAmJiB0aGlzLnRhcmdldClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRMaXN0ZW5lcnMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWFuYWdlci5nYW1lLmV2ZW50cy5vbihHYW1lRXZlbnRzLlBPU1RfU1RFUCwgdGhpcy5wb3N0VXBkYXRlLCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGFydHMgdGhlIEtleWJvYXJkIEV2ZW50IGxpc3RlbmVycyBydW5uaW5nLlxyXG4gICAgICogVGhpcyBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBhbmQgZG9lcyBub3QgbmVlZCB0byBiZSBtYW51YWxseSBpbnZva2VkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkTWFuYWdlciNzdGFydExpc3RlbmVyc1xyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICovXHJcbiAgICBzdGFydExpc3RlbmVyczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLm9uS2V5RG93biA9IGZ1bmN0aW9uIChldmVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkIHx8ICFfdGhpcy5lbmFibGVkIHx8ICFfdGhpcy5tYW5hZ2VyKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nIGlmIGV2ZW50IGFscmVhZHkgaGFuZGxlZFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBfdGhpcy5xdWV1ZS5wdXNoKGV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgIGlmICghX3RoaXMubWFuYWdlci51c2VRdWV1ZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMubWFuYWdlci5ldmVudHMuZW1pdChJbnB1dEV2ZW50cy5NQU5BR0VSX1BST0NFU1MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgdmFyIG1vZGlmaWVkID0gKGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50Lm1ldGFLZXkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKF90aGlzLnByZXZlbnREZWZhdWx0ICYmICFtb2RpZmllZCAmJiBfdGhpcy5jYXB0dXJlcy5pbmRleE9mKGV2ZW50LmtleUNvZGUpID4gLTEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLm9uS2V5VXAgPSBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCAhX3RoaXMuZW5hYmxlZCB8fCAhX3RoaXMubWFuYWdlcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZyBpZiBldmVudCBhbHJlYWR5IGhhbmRsZWRcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgX3RoaXMucXVldWUucHVzaChldmVudCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIV90aGlzLm1hbmFnZXIudXNlUXVldWUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLm1hbmFnZXIuZXZlbnRzLmVtaXQoSW5wdXRFdmVudHMuTUFOQUdFUl9QUk9DRVNTKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHZhciBtb2RpZmllZCA9IChldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5tZXRhS2V5KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5wcmV2ZW50RGVmYXVsdCAmJiAhbW9kaWZpZWQgJiYgX3RoaXMuY2FwdHVyZXMuaW5kZXhPZihldmVudC5rZXlDb2RlKSA+IC0xKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICBpZiAodGFyZ2V0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLm9uS2V5RG93biwgZmFsc2UpO1xyXG4gICAgICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLm9uS2V5VXAsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIHRoZSBLZXkgRXZlbnQgbGlzdGVuZXJzLlxyXG4gICAgICogVGhpcyBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBhbmQgZG9lcyBub3QgbmVlZCB0byBiZSBtYW51YWxseSBpbnZva2VkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkTWFuYWdlciNzdG9wTGlzdGVuZXJzXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKi9cclxuICAgIHN0b3BMaXN0ZW5lcnM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25LZXlEb3duLCBmYWxzZSk7XHJcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5vbktleVVwLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyB0aGUgZXZlbnQgcXVldWUuXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgSW5wdXQgTWFuYWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZE1hbmFnZXIjcG9zdFVwZGF0ZVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqL1xyXG4gICAgcG9zdFVwZGF0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnF1ZXVlID0gW107XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQnkgZGVmYXVsdCB3aGVuIGEga2V5IGlzIHByZXNzZWQgUGhhc2VyIHdpbGwgbm90IHN0b3AgdGhlIGV2ZW50IGZyb20gcHJvcGFnYXRpbmcgdXAgdG8gdGhlIGJyb3dzZXIuXHJcbiAgICAgKiBUaGVyZSBhcmUgc29tZSBrZXlzIHRoaXMgY2FuIGJlIGFubm95aW5nIGZvciwgbGlrZSB0aGUgYXJyb3cga2V5cyBvciBzcGFjZSBiYXIsIHdoaWNoIG1ha2UgdGhlIGJyb3dzZXIgd2luZG93IHNjcm9sbC5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGBhZGRDYXB0dXJlYCBtZXRob2QgZW5hYmxlcyBjb25zdW1pbmcga2V5Ym9hcmQgZXZlbnQgZm9yIHNwZWNpZmljIGtleXMgc28gaXQgZG9lc24ndCBidWJibGUgdXAgdG8gdGhlIHRoZSBicm93c2VyXHJcbiAgICAgKiBhbmQgY2F1c2UgdGhlIGRlZmF1bHQgYnJvd3NlciBiZWhhdmlvci5cclxuICAgICAqIFxyXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCBrZXlib2FyZCBjYXB0dXJlcyBhcmUgZ2xvYmFsLiBUaGlzIG1lYW5zIHRoYXQgaWYgeW91IGNhbGwgdGhpcyBtZXRob2QgZnJvbSB3aXRoaW4gYSBTY2VuZSwgdG8gc2F5IHByZXZlbnRcclxuICAgICAqIHRoZSBTUEFDRSBCQVIgZnJvbSB0cmlnZ2VyaW5nIGEgcGFnZSBzY3JvbGwsIHRoZW4gaXQgd2lsbCBwcmV2ZW50IGl0IGZvciBhbnkgU2NlbmUgaW4geW91ciBnYW1lLCBub3QganVzdCB0aGUgY2FsbGluZyBvbmUuXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBjYW4gcGFzcyBpbiBhIHNpbmdsZSBrZXkgY29kZSB2YWx1ZSwgb3IgYW4gYXJyYXkgb2Yga2V5IGNvZGVzLCBvciBhIHN0cmluZzpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy5pbnB1dC5rZXlib2FyZC5hZGRDYXB0dXJlKDYyKTtcclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiBBbiBhcnJheSBvZiBrZXkgY29kZXM6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMuaW5wdXQua2V5Ym9hcmQuYWRkQ2FwdHVyZShbIDYyLCA2MywgNjQgXSk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogT3IgYSBzdHJpbmc6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMuaW5wdXQua2V5Ym9hcmQuYWRkQ2FwdHVyZSgnVyxTLEEsRCcpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIFRvIHVzZSBub24tYWxwaGEgbnVtZXJpYyBrZXlzLCB1c2UgYSBzdHJpbmcsIHN1Y2ggYXMgJ1VQJywgJ1NQQUNFJyBvciAnTEVGVCcuXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGFuIGFycmF5IG1peGluZyBib3RoIHN0cmluZ3MgYW5kIGtleSBjb2RlIGludGVnZXJzLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGVyZSBhcmUgYWN0aXZlIGNhcHR1cmVzIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QsIHRoZSBgcHJldmVudERlZmF1bHRgIHByb3BlcnR5IGlzIHNldCB0byBgdHJ1ZWAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRNYW5hZ2VyI2FkZENhcHR1cmVcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXJ8aW50ZWdlcltdfGFueVtdKX0ga2V5Y29kZSAtIFRoZSBLZXkgQ29kZXMgdG8gZW5hYmxlIGNhcHR1cmUgZm9yLCBwcmV2ZW50aW5nIHRoZW0gcmVhY2hpbmcgdGhlIGJyb3dzZXIuXHJcbiAgICAgKi9cclxuICAgIGFkZENhcHR1cmU6IGZ1bmN0aW9uIChrZXljb2RlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0eXBlb2Yga2V5Y29kZSA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBrZXljb2RlID0ga2V5Y29kZS5zcGxpdCgnLCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGtleWNvZGUpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAga2V5Y29kZSA9IFsga2V5Y29kZSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNhcHR1cmVzID0gdGhpcy5jYXB0dXJlcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXljb2RlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvZGUgPSBrZXljb2RlW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2RlID09PSAnc3RyaW5nJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29kZSA9IEtleUNvZGVzW2NvZGUudHJpbSgpLnRvVXBwZXJDYXNlKCldO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY2FwdHVyZXMuaW5kZXhPZihjb2RlKSA9PT0gLTEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNhcHR1cmVzLnB1c2goY29kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucHJldmVudERlZmF1bHQgPSBjYXB0dXJlcy5sZW5ndGggPiAwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYW4gZXhpc3Rpbmcga2V5IGNhcHR1cmUuXHJcbiAgICAgKiBcclxuICAgICAqIFBsZWFzZSBub3RlIHRoYXQga2V5Ym9hcmQgY2FwdHVyZXMgYXJlIGdsb2JhbC4gVGhpcyBtZWFucyB0aGF0IGlmIHlvdSBjYWxsIHRoaXMgbWV0aG9kIGZyb20gd2l0aGluIGEgU2NlbmUsIHRvIHJlbW92ZVxyXG4gICAgICogdGhlIGNhcHR1cmUgb2YgYSBrZXksIHRoZW4gaXQgd2lsbCByZW1vdmUgaXQgZm9yIGFueSBTY2VuZSBpbiB5b3VyIGdhbWUsIG5vdCBqdXN0IHRoZSBjYWxsaW5nIG9uZS5cclxuICAgICAqIFxyXG4gICAgICogWW91IGNhbiBwYXNzIGluIGEgc2luZ2xlIGtleSBjb2RlIHZhbHVlLCBvciBhbiBhcnJheSBvZiBrZXkgY29kZXMsIG9yIGEgc3RyaW5nOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB0aGlzLmlucHV0LmtleWJvYXJkLnJlbW92ZUNhcHR1cmUoNjIpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIEFuIGFycmF5IG9mIGtleSBjb2RlczpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy5pbnB1dC5rZXlib2FyZC5yZW1vdmVDYXB0dXJlKFsgNjIsIDYzLCA2NCBdKTtcclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiBPciBhIHN0cmluZzpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy5pbnB1dC5rZXlib2FyZC5yZW1vdmVDYXB0dXJlKCdXLFMsQSxEJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogVG8gdXNlIG5vbi1hbHBoYSBudW1lcmljIGtleXMsIHVzZSBhIHN0cmluZywgc3VjaCBhcyAnVVAnLCAnU1BBQ0UnIG9yICdMRUZUJy5cclxuICAgICAqIFxyXG4gICAgICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYW4gYXJyYXkgbWl4aW5nIGJvdGggc3RyaW5ncyBhbmQga2V5IGNvZGUgaW50ZWdlcnMuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZXJlIGFyZSBubyBjYXB0dXJlcyBsZWZ0IGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QsIHRoZSBgcHJldmVudERlZmF1bHRgIHByb3BlcnR5IGlzIHNldCB0byBgZmFsc2VgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkTWFuYWdlciNyZW1vdmVDYXB0dXJlXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyfGludGVnZXJbXXxhbnlbXSl9IGtleWNvZGUgLSBUaGUgS2V5IENvZGVzIHRvIGRpc2FibGUgY2FwdHVyZSBmb3IsIGFsbG93aW5nIHRoZW0gcmVhY2hpbmcgdGhlIGJyb3dzZXIgYWdhaW4uXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUNhcHR1cmU6IGZ1bmN0aW9uIChrZXljb2RlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0eXBlb2Yga2V5Y29kZSA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBrZXljb2RlID0ga2V5Y29kZS5zcGxpdCgnLCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGtleWNvZGUpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAga2V5Y29kZSA9IFsga2V5Y29kZSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNhcHR1cmVzID0gdGhpcy5jYXB0dXJlcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXljb2RlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvZGUgPSBrZXljb2RlW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2RlID09PSAnc3RyaW5nJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29kZSA9IEtleUNvZGVzW2NvZGUudG9VcHBlckNhc2UoKV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIEFycmF5UmVtb3ZlKGNhcHR1cmVzLCBjb2RlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucHJldmVudERlZmF1bHQgPSBjYXB0dXJlcy5sZW5ndGggPiAwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYWxsIGtleWJvYXJkIGNhcHR1cmVzIGFuZCBzZXRzIHRoZSBgcHJldmVudERlZmF1bHRgIHByb3BlcnR5IHRvIGBmYWxzZWAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRNYW5hZ2VyI2NsZWFyQ2FwdHVyZXNcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqL1xyXG4gICAgY2xlYXJDYXB0dXJlczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmNhcHR1cmVzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMucHJldmVudERlZmF1bHQgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGlzIEtleWJvYXJkIE1hbmFnZXIgaW5zdGFuY2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRNYW5hZ2VyI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN0b3BMaXN0ZW5lcnMoKTtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhckNhcHR1cmVzKCk7XHJcblxyXG4gICAgICAgIHRoaXMucXVldWUgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLmdhbWUuZXZlbnRzLm9mZihHYW1lRXZlbnRzLlBPU1RfUkVOREVSLCB0aGlzLnBvc3RVcGRhdGUsIHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBLZXlib2FyZE1hbmFnZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/KeyboardManager.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/keyboard/KeyboardPlugin.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/input/keyboard/KeyboardPlugin.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/input/keyboard/events/index.js\");\r\nvar GameEvents = __webpack_require__(/*! ../../core/events */ \"./node_modules/phaser/src/core/events/index.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar InputEvents = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/input/events/index.js\");\r\nvar InputPluginCache = __webpack_require__(/*! ../InputPluginCache */ \"./node_modules/phaser/src/input/InputPluginCache.js\");\r\nvar Key = __webpack_require__(/*! ./keys/Key */ \"./node_modules/phaser/src/input/keyboard/keys/Key.js\");\r\nvar KeyCodes = __webpack_require__(/*! ./keys/KeyCodes */ \"./node_modules/phaser/src/input/keyboard/keys/KeyCodes.js\");\r\nvar KeyCombo = __webpack_require__(/*! ./combo/KeyCombo */ \"./node_modules/phaser/src/input/keyboard/combo/KeyCombo.js\");\r\nvar KeyMap = __webpack_require__(/*! ./keys/KeyMap */ \"./node_modules/phaser/src/input/keyboard/keys/KeyMap.js\");\r\nvar SnapFloor = __webpack_require__(/*! ../../math/snap/SnapFloor */ \"./node_modules/phaser/src/math/snap/SnapFloor.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Keyboard Plugin is an input plugin that belongs to the Scene-owned Input system.\r\n * \r\n * Its role is to listen for native DOM Keyboard Events and then process them.\r\n * \r\n * You do not need to create this class directly, the Input system will create an instance of it automatically.\r\n * \r\n * You can access it from within a Scene using `this.input.keyboard`. For example, you can do:\r\n *\r\n * ```javascript\r\n * this.input.keyboard.on('keydown', callback, context);\r\n * ```\r\n *\r\n * Or, to listen for a specific key:\r\n * \r\n * ```javascript\r\n * this.input.keyboard.on('keydown-A', callback, context);\r\n * ```\r\n *\r\n * You can also create Key objects, which you can then poll in your game loop:\r\n *\r\n * ```javascript\r\n * var spaceBar = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SPACE);\r\n * ```\r\n * \r\n * If you have multiple parallel Scenes, each trying to get keyboard input, be sure to disable capture on them to stop them from\r\n * stealing input from another Scene in the list. You can do this with `this.input.keyboard.enabled = false` within the\r\n * Scene to stop all input, or `this.input.keyboard.preventDefault = false` to stop a Scene halting input on another Scene.\r\n *\r\n * _Note_: Many keyboards are unable to process certain combinations of keys due to hardware limitations known as ghosting.\r\n * See http://www.html5gamedevs.com/topic/4876-impossible-to-use-more-than-2-keyboard-input-buttons-at-the-same-time/ for more details.\r\n *\r\n * Also please be aware that certain browser extensions can disable or override Phaser keyboard handling.\r\n * For example the Chrome extension vimium is known to disable Phaser from using the D key, while EverNote disables the backtick key.\r\n * And there are others. So, please check your extensions before opening Phaser issues about keys that don't work.\r\n *\r\n * @class KeyboardPlugin\r\n * @extends Phaser.Events.EventEmitter\r\n * @memberof Phaser.Input.Keyboard\r\n * @constructor\r\n * @since 3.10.0\r\n *\r\n * @param {Phaser.Input.InputPlugin} sceneInputPlugin - A reference to the Scene Input Plugin that the KeyboardPlugin belongs to.\r\n */\r\nvar KeyboardPlugin = new Class({\r\n\r\n Extends: EventEmitter,\r\n\r\n initialize:\r\n\r\n function KeyboardPlugin (sceneInputPlugin)\r\n {\r\n EventEmitter.call(this);\r\n\r\n /**\r\n * A reference to the core game, so we can listen for visibility events.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyboardPlugin#game\r\n * @type {Phaser.Game}\r\n * @since 3.16.0\r\n */\r\n this.game = sceneInputPlugin.systems.game;\r\n\r\n /**\r\n * A reference to the Scene that this Input Plugin is responsible for.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyboardPlugin#scene\r\n * @type {Phaser.Scene}\r\n * @since 3.10.0\r\n */\r\n this.scene = sceneInputPlugin.scene;\r\n\r\n /**\r\n * A reference to the Scene Systems Settings.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyboardPlugin#settings\r\n * @type {Phaser.Types.Scenes.SettingsObject}\r\n * @since 3.10.0\r\n */\r\n this.settings = this.scene.sys.settings;\r\n\r\n /**\r\n * A reference to the Scene Input Plugin that created this Keyboard Plugin.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyboardPlugin#sceneInputPlugin\r\n * @type {Phaser.Input.InputPlugin}\r\n * @since 3.10.0\r\n */\r\n this.sceneInputPlugin = sceneInputPlugin;\r\n\r\n /**\r\n * A reference to the global Keyboard Manager.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyboardPlugin#manager\r\n * @type {Phaser.Input.InputPlugin}\r\n * @since 3.16.0\r\n */\r\n this.manager = sceneInputPlugin.manager.keyboard;\r\n\r\n /**\r\n * A boolean that controls if this Keyboard Plugin is enabled or not.\r\n * Can be toggled on the fly.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyboardPlugin#enabled\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.10.0\r\n */\r\n this.enabled = true;\r\n\r\n /**\r\n * An array of Key objects to process.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyboardPlugin#keys\r\n * @type {Phaser.Input.Keyboard.Key[]}\r\n * @since 3.10.0\r\n */\r\n this.keys = [];\r\n\r\n /**\r\n * An array of KeyCombo objects to process.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyboardPlugin#combos\r\n * @type {Phaser.Input.Keyboard.KeyCombo[]}\r\n * @since 3.10.0\r\n */\r\n this.combos = [];\r\n\r\n sceneInputPlugin.pluginEvents.once(InputEvents.BOOT, this.boot, this);\r\n sceneInputPlugin.pluginEvents.on(InputEvents.START, this.start, this);\r\n },\r\n\r\n /**\r\n * This method is called automatically, only once, when the Scene is first created.\r\n * Do not invoke it directly.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardPlugin#boot\r\n * @private\r\n * @since 3.10.0\r\n */\r\n boot: function ()\r\n {\r\n var settings = this.settings.input;\r\n\r\n this.enabled = GetValue(settings, 'keyboard', true);\r\n\r\n var captures = GetValue(settings, 'keyboard.capture', null);\r\n\r\n if (captures)\r\n {\r\n this.addCaptures(captures);\r\n }\r\n\r\n this.sceneInputPlugin.pluginEvents.once(InputEvents.DESTROY, this.destroy, this);\r\n },\r\n\r\n /**\r\n * This method is called automatically by the Scene when it is starting up.\r\n * It is responsible for creating local systems, properties and listening for Scene events.\r\n * Do not invoke it directly.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardPlugin#start\r\n * @private\r\n * @since 3.10.0\r\n */\r\n start: function ()\r\n {\r\n if (this.sceneInputPlugin.manager.useQueue)\r\n {\r\n this.sceneInputPlugin.pluginEvents.on(InputEvents.UPDATE, this.update, this);\r\n }\r\n else\r\n {\r\n this.sceneInputPlugin.manager.events.on(InputEvents.MANAGER_PROCESS, this.update, this);\r\n }\r\n\r\n this.sceneInputPlugin.pluginEvents.once(InputEvents.SHUTDOWN, this.shutdown, this);\r\n\r\n this.game.events.on(GameEvents.BLUR, this.resetKeys, this);\r\n },\r\n\r\n /**\r\n * Checks to see if both this plugin and the Scene to which it belongs is active.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardPlugin#isActive\r\n * @since 3.10.0\r\n *\r\n * @return {boolean} `true` if the plugin and the Scene it belongs to is active.\r\n */\r\n isActive: function ()\r\n {\r\n return (this.enabled && this.scene.sys.isActive());\r\n },\r\n\r\n /**\r\n * By default when a key is pressed Phaser will not stop the event from propagating up to the browser.\r\n * There are some keys this can be annoying for, like the arrow keys or space bar, which make the browser window scroll.\r\n *\r\n * This `addCapture` method enables consuming keyboard events for specific keys, so they don't bubble up the browser\r\n * and cause the default behaviors.\r\n * \r\n * Please note that keyboard captures are global. This means that if you call this method from within a Scene, to say prevent\r\n * the SPACE BAR from triggering a page scroll, then it will prevent it for any Scene in your game, not just the calling one.\r\n * \r\n * You can pass a single key code value:\r\n * \r\n * ```javascript\r\n * this.input.keyboard.addCapture(62);\r\n * ```\r\n * \r\n * An array of key codes:\r\n * \r\n * ```javascript\r\n * this.input.keyboard.addCapture([ 62, 63, 64 ]);\r\n * ```\r\n * \r\n * Or, a comma-delimited string:\r\n * \r\n * ```javascript\r\n * this.input.keyboard.addCapture('W,S,A,D');\r\n * ```\r\n * \r\n * To use non-alpha numeric keys, use a string, such as 'UP', 'SPACE' or 'LEFT'.\r\n * \r\n * You can also provide an array mixing both strings and key code integers.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardPlugin#addCapture\r\n * @since 3.16.0\r\n * \r\n * @param {(string|integer|integer[]|any[])} keycode - The Key Codes to enable event capture for.\r\n *\r\n * @return {Phaser.Input.Keyboard.KeyboardPlugin} This KeyboardPlugin object.\r\n */\r\n addCapture: function (keycode)\r\n {\r\n this.manager.addCapture(keycode);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Removes an existing key capture.\r\n * \r\n * Please note that keyboard captures are global. This means that if you call this method from within a Scene, to remove\r\n * the capture of a key, then it will remove it for any Scene in your game, not just the calling one.\r\n * \r\n * You can pass a single key code value:\r\n * \r\n * ```javascript\r\n * this.input.keyboard.removeCapture(62);\r\n * ```\r\n * \r\n * An array of key codes:\r\n * \r\n * ```javascript\r\n * this.input.keyboard.removeCapture([ 62, 63, 64 ]);\r\n * ```\r\n * \r\n * Or, a comma-delimited string:\r\n * \r\n * ```javascript\r\n * this.input.keyboard.removeCapture('W,S,A,D');\r\n * ```\r\n * \r\n * To use non-alpha numeric keys, use a string, such as 'UP', 'SPACE' or 'LEFT'.\r\n * \r\n * You can also provide an array mixing both strings and key code integers.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardPlugin#removeCapture\r\n * @since 3.16.0\r\n * \r\n * @param {(string|integer|integer[]|any[])} keycode - The Key Codes to disable event capture for.\r\n *\r\n * @return {Phaser.Input.Keyboard.KeyboardPlugin} This KeyboardPlugin object.\r\n */\r\n removeCapture: function (keycode)\r\n {\r\n this.manager.removeCapture(keycode);\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Returns an array that contains all of the keyboard captures currently enabled.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardPlugin#getCaptures\r\n * @since 3.16.0\r\n * \r\n * @return {integer[]} An array of all the currently capturing key codes.\r\n */\r\n getCaptures: function ()\r\n {\r\n return this.manager.captures;\r\n },\r\n\r\n /**\r\n * Allows Phaser to prevent any key captures you may have defined from bubbling up the browser.\r\n * You can use this to re-enable event capturing if you had paused it via `disableGlobalCapture`.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardPlugin#enableGlobalCapture\r\n * @since 3.16.0\r\n *\r\n * @return {Phaser.Input.Keyboard.KeyboardPlugin} This KeyboardPlugin object.\r\n */\r\n enableGlobalCapture: function ()\r\n {\r\n this.manager.preventDefault = true;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Disables Phaser from preventing any key captures you may have defined, without actually removing them.\r\n * You can use this to temporarily disable event capturing if, for example, you swap to a DOM element.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardPlugin#disableGlobalCapture\r\n * @since 3.16.0\r\n *\r\n * @return {Phaser.Input.Keyboard.KeyboardPlugin} This KeyboardPlugin object.\r\n */\r\n disableGlobalCapture: function ()\r\n {\r\n this.manager.preventDefault = false;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Removes all keyboard captures.\r\n * \r\n * Note that this is a global change. It will clear all event captures across your game, not just for this specific Scene.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardPlugin#clearCaptures\r\n * @since 3.16.0\r\n *\r\n * @return {Phaser.Input.Keyboard.KeyboardPlugin} This KeyboardPlugin object.\r\n */\r\n clearCaptures: function ()\r\n {\r\n this.manager.clearCaptures();\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Creates and returns an object containing 4 hotkeys for Up, Down, Left and Right, and also Space Bar and shift.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardPlugin#createCursorKeys\r\n * @since 3.10.0\r\n *\r\n * @return {Phaser.Types.Input.Keyboard.CursorKeys} An object containing the properties: `up`, `down`, `left`, `right`, `space` and `shift`.\r\n */\r\n createCursorKeys: function ()\r\n {\r\n return this.addKeys({\r\n up: KeyCodes.UP,\r\n down: KeyCodes.DOWN,\r\n left: KeyCodes.LEFT,\r\n right: KeyCodes.RIGHT,\r\n space: KeyCodes.SPACE,\r\n shift: KeyCodes.SHIFT\r\n });\r\n },\r\n\r\n /**\r\n * A practical way to create an object containing user selected hotkeys.\r\n *\r\n * For example:\r\n *\r\n * ```javascript\r\n * this.input.keyboard.addKeys({ 'up': Phaser.Input.Keyboard.KeyCodes.W, 'down': Phaser.Input.Keyboard.KeyCodes.S });\r\n * ```\r\n * \r\n * would return an object containing the properties (`up` and `down`) mapped to W and S {@link Phaser.Input.Keyboard.Key} objects.\r\n *\r\n * You can also pass in a comma-separated string:\r\n * \r\n * ```javascript\r\n * this.input.keyboard.addKeys('W,S,A,D');\r\n * ```\r\n *\r\n * Which will return an object with the properties W, S, A and D mapped to the relevant Key objects.\r\n *\r\n * To use non-alpha numeric keys, use a string, such as 'UP', 'SPACE' or 'LEFT'.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardPlugin#addKeys\r\n * @since 3.10.0\r\n *\r\n * @param {(object|string)} keys - An object containing Key Codes, or a comma-separated string.\r\n * @param {boolean} [enableCapture=true] - Automatically call `preventDefault` on the native DOM browser event for the key codes being added.\r\n * @param {boolean} [emitOnRepeat=false] - Controls if the Key will continuously emit a 'down' event while being held down (true), or emit the event just once (false, the default).\r\n *\r\n * @return {object} An object containing Key objects mapped to the input properties.\r\n */\r\n addKeys: function (keys, enableCapture, emitOnRepeat)\r\n {\r\n if (enableCapture === undefined) { enableCapture = true; }\r\n if (emitOnRepeat === undefined) { emitOnRepeat = false; }\r\n\r\n var output = {};\r\n\r\n if (typeof keys === 'string')\r\n {\r\n keys = keys.split(',');\r\n\r\n for (var i = 0; i < keys.length; i++)\r\n {\r\n var currentKey = keys[i].trim();\r\n\r\n if (currentKey)\r\n {\r\n output[currentKey] = this.addKey(currentKey, enableCapture, emitOnRepeat);\r\n }\r\n }\r\n }\r\n else\r\n {\r\n for (var key in keys)\r\n {\r\n output[key] = this.addKey(keys[key], enableCapture, emitOnRepeat);\r\n }\r\n }\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Adds a Key object to this Keyboard Plugin.\r\n *\r\n * The given argument can be either an existing Key object, a string, such as `A` or `SPACE`, or a key code value.\r\n *\r\n * If a Key object is given, and one already exists matching the same key code, the existing one is replaced with the new one.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardPlugin#addKey\r\n * @since 3.10.0\r\n *\r\n * @param {(Phaser.Input.Keyboard.Key|string|integer)} key - Either a Key object, a string, such as `A` or `SPACE`, or a key code value.\r\n * @param {boolean} [enableCapture=true] - Automatically call `preventDefault` on the native DOM browser event for the key codes being added.\r\n * @param {boolean} [emitOnRepeat=false] - Controls if the Key will continuously emit a 'down' event while being held down (true), or emit the event just once (false, the default).\r\n *\r\n * @return {Phaser.Input.Keyboard.Key} The newly created Key object, or a reference to it if it already existed in the keys array.\r\n */\r\n addKey: function (key, enableCapture, emitOnRepeat)\r\n {\r\n if (enableCapture === undefined) { enableCapture = true; }\r\n if (emitOnRepeat === undefined) { emitOnRepeat = false; }\r\n\r\n var keys = this.keys;\r\n\r\n if (key instanceof Key)\r\n {\r\n var idx = keys.indexOf(key);\r\n\r\n if (idx > -1)\r\n {\r\n keys[idx] = key;\r\n }\r\n else\r\n {\r\n keys[key.keyCode] = key;\r\n }\r\n\r\n if (enableCapture)\r\n {\r\n this.addCapture(key.keyCode);\r\n }\r\n\r\n key.setEmitOnRepeat(emitOnRepeat);\r\n\r\n return key;\r\n }\r\n\r\n if (typeof key === 'string')\r\n {\r\n key = KeyCodes[key.toUpperCase()];\r\n }\r\n\r\n if (!keys[key])\r\n {\r\n keys[key] = new Key(this, key);\r\n\r\n if (enableCapture)\r\n {\r\n this.addCapture(key);\r\n }\r\n\r\n keys[key].setEmitOnRepeat(emitOnRepeat);\r\n }\r\n\r\n return keys[key];\r\n },\r\n\r\n /**\r\n * Removes a Key object from this Keyboard Plugin.\r\n *\r\n * The given argument can be either a Key object, a string, such as `A` or `SPACE`, or a key code value.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardPlugin#removeKey\r\n * @since 3.10.0\r\n *\r\n * @param {(Phaser.Input.Keyboard.Key|string|integer)} key - Either a Key object, a string, such as `A` or `SPACE`, or a key code value.\r\n * @param {boolean} [destroy=false] - Call `Key.destroy` on the removed Key object?\r\n *\r\n * @return {Phaser.Input.Keyboard.KeyboardPlugin} This KeyboardPlugin object.\r\n */\r\n removeKey: function (key, destroy)\r\n {\r\n if (destroy === undefined) { destroy = false; }\r\n\r\n var keys = this.keys;\r\n var ref;\r\n\r\n if (key instanceof Key)\r\n {\r\n var idx = keys.indexOf(key);\r\n\r\n if (idx > -1)\r\n {\r\n ref = this.keys[idx];\r\n\r\n this.keys[idx] = undefined;\r\n }\r\n }\r\n else if (typeof key === 'string')\r\n {\r\n key = KeyCodes[key.toUpperCase()];\r\n }\r\n\r\n if (keys[key])\r\n {\r\n ref = keys[key];\r\n\r\n keys[key] = undefined;\r\n }\r\n\r\n if (ref)\r\n {\r\n ref.plugin = null;\r\n\r\n if (destroy)\r\n {\r\n ref.destroy();\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Creates a new KeyCombo.\r\n * \r\n * A KeyCombo will listen for a specific string of keys from the Keyboard, and when it receives them\r\n * it will emit a `keycombomatch` event from this Keyboard Plugin.\r\n *\r\n * The keys to be listened for can be defined as:\r\n *\r\n * A string (i.e. 'ATARI')\r\n * An array of either integers (key codes) or strings, or a mixture of both\r\n * An array of objects (such as Key objects) with a public 'keyCode' property\r\n *\r\n * For example, to listen for the Konami code (up, up, down, down, left, right, left, right, b, a, enter)\r\n * you could pass the following array of key codes:\r\n *\r\n * ```javascript\r\n * this.input.keyboard.createCombo([ 38, 38, 40, 40, 37, 39, 37, 39, 66, 65, 13 ], { resetOnMatch: true });\r\n *\r\n * this.input.keyboard.on('keycombomatch', function (event) {\r\n * console.log('Konami Code entered!');\r\n * });\r\n * ```\r\n *\r\n * Or, to listen for the user entering the word PHASER:\r\n *\r\n * ```javascript\r\n * this.input.keyboard.createCombo('PHASER');\r\n * ```\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardPlugin#createCombo\r\n * @since 3.10.0\r\n *\r\n * @param {(string|integer[]|object[])} keys - The keys that comprise this combo.\r\n * @param {Phaser.Types.Input.Keyboard.KeyComboConfig} [config] - A Key Combo configuration object.\r\n *\r\n * @return {Phaser.Input.Keyboard.KeyCombo} The new KeyCombo object.\r\n */\r\n createCombo: function (keys, config)\r\n {\r\n return new KeyCombo(this, keys, config);\r\n },\r\n\r\n /**\r\n * Checks if the given Key object is currently being held down.\r\n * \r\n * The difference between this method and checking the `Key.isDown` property directly is that you can provide\r\n * a duration to this method. For example, if you wanted a key press to fire a bullet, but you only wanted\r\n * it to be able to fire every 100ms, then you can call this method with a `duration` of 100 and it\r\n * will only return `true` every 100ms.\r\n * \r\n * If the Keyboard Plugin has been disabled, this method will always return `false`.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardPlugin#checkDown\r\n * @since 3.11.0\r\n *\r\n * @param {Phaser.Input.Keyboard.Key} key - A Key object.\r\n * @param {number} [duration=0] - The duration which must have elapsed before this Key is considered as being down.\r\n * \r\n * @return {boolean} `true` if the Key is down within the duration specified, otherwise `false`.\r\n */\r\n checkDown: function (key, duration)\r\n {\r\n if (this.enabled && key.isDown)\r\n {\r\n var t = SnapFloor(this.time - key.timeDown, duration);\r\n\r\n if (t > key._tick)\r\n {\r\n key._tick = t;\r\n\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n },\r\n\r\n /**\r\n * Internal update handler called by the Input Plugin, which is in turn invoked by the Game step.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardPlugin#update\r\n * @private\r\n * @since 3.10.0\r\n */\r\n update: function ()\r\n {\r\n var queue = this.manager.queue;\r\n var len = queue.length;\r\n\r\n if (!this.isActive() || len === 0)\r\n {\r\n return;\r\n }\r\n\r\n var keys = this.keys;\r\n\r\n // Process the event queue, dispatching all of the events that have stored up\r\n for (var i = 0; i < len; i++)\r\n {\r\n var event = queue[i];\r\n var code = event.keyCode;\r\n var key = keys[code];\r\n var repeat = false;\r\n\r\n // Override the default functions (it's too late for the browser to use them anyway, so we may as well)\r\n if (event.cancelled === undefined)\r\n {\r\n // Event allowed to flow across all handlers in this Scene, and any other Scene in the Scene list\r\n event.cancelled = 0;\r\n\r\n // Won't reach any more local (Scene level) handlers\r\n event.stopImmediatePropagation = function ()\r\n {\r\n event.cancelled = 1;\r\n };\r\n \r\n // Won't reach any more handlers in any Scene further down the Scene list\r\n event.stopPropagation = function ()\r\n {\r\n event.cancelled = -1;\r\n };\r\n }\r\n\r\n if (event.cancelled === -1)\r\n {\r\n // This event has been stopped from broadcasting to any other Scene, so abort.\r\n continue;\r\n }\r\n\r\n if (event.type === 'keydown')\r\n {\r\n // Key specific callback first\r\n if (key)\r\n {\r\n repeat = key.isDown;\r\n\r\n key.onDown(event);\r\n }\r\n\r\n if (!event.cancelled && (!key || !repeat))\r\n {\r\n if (KeyMap[code])\r\n {\r\n this.emit(Events.KEY_DOWN + KeyMap[code], event);\r\n\r\n // Deprecated, kept in for compatibility with 3.15\r\n // To be removed by 3.20.\r\n this.emit('keydown_' + KeyMap[code], event);\r\n }\r\n\r\n if (!event.cancelled)\r\n {\r\n this.emit(Events.ANY_KEY_DOWN, event);\r\n }\r\n }\r\n }\r\n else\r\n {\r\n // Key specific callback first\r\n if (key)\r\n {\r\n key.onUp(event);\r\n }\r\n\r\n if (!event.cancelled)\r\n {\r\n if (KeyMap[code])\r\n {\r\n this.emit(Events.KEY_UP + KeyMap[code], event);\r\n\r\n // Deprecated, kept in for compatibility with 3.15\r\n // To be removed by 3.20.\r\n this.emit('keyup_' + KeyMap[code], event);\r\n }\r\n\r\n if (!event.cancelled)\r\n {\r\n this.emit(Events.ANY_KEY_UP, event);\r\n }\r\n }\r\n }\r\n\r\n // Reset the cancel state for other Scenes to use\r\n if (event.cancelled === 1)\r\n {\r\n event.cancelled = 0;\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Resets all Key objects created by _this_ Keyboard Plugin back to their default un-pressed states.\r\n * This can only reset keys created via the `addKey`, `addKeys` or `createCursorKeys` methods.\r\n * If you have created a Key object directly you'll need to reset it yourself.\r\n * \r\n * This method is called automatically when the Keyboard Plugin shuts down, but can be\r\n * invoked directly at any time you require.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardPlugin#resetKeys\r\n * @since 3.15.0\r\n *\r\n * @return {Phaser.Input.Keyboard.KeyboardPlugin} This KeyboardPlugin object.\r\n */\r\n resetKeys: function ()\r\n {\r\n var keys = this.keys;\r\n\r\n for (var i = 0; i < keys.length; i++)\r\n {\r\n // Because it's a sparsely populated array\r\n if (keys[i])\r\n {\r\n keys[i].reset();\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Shuts this Keyboard Plugin down. This performs the following tasks:\r\n * \r\n * 1 - Resets all keys created by this Keyboard plugin.\r\n * 2 - Stops and removes the keyboard event listeners.\r\n * 3 - Clears out any pending requests in the queue, without processing them.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardPlugin#shutdown\r\n * @private\r\n * @since 3.10.0\r\n */\r\n shutdown: function ()\r\n {\r\n this.resetKeys();\r\n\r\n if (this.sceneInputPlugin.manager.useQueue)\r\n {\r\n this.sceneInputPlugin.pluginEvents.off(InputEvents.UPDATE, this.update, this);\r\n }\r\n else\r\n {\r\n this.sceneInputPlugin.manager.events.off(InputEvents.MANAGER_PROCESS, this.update, this);\r\n }\r\n\r\n this.game.events.off(GameEvents.BLUR, this.resetKeys);\r\n\r\n this.removeAllListeners();\r\n\r\n this.queue = [];\r\n },\r\n\r\n /**\r\n * Destroys this Keyboard Plugin instance and all references it holds, plus clears out local arrays.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyboardPlugin#destroy\r\n * @private\r\n * @since 3.10.0\r\n */\r\n destroy: function ()\r\n {\r\n this.shutdown();\r\n\r\n var keys = this.keys;\r\n\r\n for (var i = 0; i < keys.length; i++)\r\n {\r\n // Because it's a sparsely populated array\r\n if (keys[i])\r\n {\r\n keys[i].destroy();\r\n }\r\n }\r\n\r\n this.keys = [];\r\n this.combos = [];\r\n this.queue = [];\r\n\r\n this.scene = null;\r\n this.settings = null;\r\n this.sceneInputPlugin = null;\r\n this.manager = null;\r\n },\r\n\r\n /**\r\n * Internal time value.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyboardPlugin#time\r\n * @type {number}\r\n * @private\r\n * @since 3.11.0\r\n */\r\n time: {\r\n\r\n get: function ()\r\n {\r\n return this.sceneInputPlugin.manager.time;\r\n }\r\n\r\n }\r\n\r\n});\r\n\r\n/**\r\n * An instance of the Keyboard Plugin class, if enabled via the `input.keyboard` Scene or Game Config property.\r\n * Use this to create Key objects and listen for keyboard specific events.\r\n *\r\n * @name Phaser.Input.InputPlugin#keyboard\r\n * @type {?Phaser.Input.Keyboard.KeyboardPlugin}\r\n * @since 3.10.0\r\n */\r\nInputPluginCache.register('KeyboardPlugin', KeyboardPlugin, 'keyboard', 'keyboard', 'inputKeyboard');\r\n\r\nmodule.exports = KeyboardPlugin;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9LZXlib2FyZFBsdWdpbi5qcz85YmU2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLG1CQUFtQixtQkFBTyxDQUFDLDREQUFlO0FBQzFDLGFBQWEsbUJBQU8sQ0FBQywwRUFBVTtBQUMvQixpQkFBaUIsbUJBQU8sQ0FBQyx5RUFBbUI7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLHVGQUE2QjtBQUNwRCxrQkFBa0IsbUJBQU8sQ0FBQyxrRUFBVztBQUNyQyx1QkFBdUIsbUJBQU8sQ0FBQyxnRkFBcUI7QUFDcEQsVUFBVSxtQkFBTyxDQUFDLHdFQUFZO0FBQzlCLGVBQWUsbUJBQU8sQ0FBQyxrRkFBaUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLG9GQUFrQjtBQUN6QyxhQUFhLG1CQUFPLENBQUMsOEVBQWU7QUFDcEMsZ0JBQWdCLG1CQUFPLENBQUMsbUZBQTJCOztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcseUJBQXlCO0FBQ3BDO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUNBQWlDO0FBQ2hEO0FBQ0EsZ0JBQWdCLHFDQUFxQztBQUNyRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlDQUFpQztBQUNoRDtBQUNBLGdCQUFnQixxQ0FBcUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixVQUFVO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixxQ0FBcUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHFDQUFxQztBQUNyRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixxQ0FBcUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix1Q0FBdUM7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsbUZBQW1GO0FBQ3ZIO0FBQ0E7QUFDQSw2RkFBNkYsZ0NBQWdDO0FBQzdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdCQUFnQjtBQUMvQixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLHNCQUFzQjtBQUNoRSx5Q0FBeUMsc0JBQXNCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMkJBQTJCLGlCQUFpQjtBQUM1QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMkNBQTJDO0FBQzFELGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsMEJBQTBCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxzQkFBc0I7QUFDaEUseUNBQXlDLHNCQUFzQjs7QUFFL0Q7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMkNBQTJDO0FBQzFELGVBQWUsUUFBUTtBQUN2QjtBQUNBLGdCQUFnQixxQ0FBcUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLGlCQUFpQjs7QUFFckQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdGQUF3RixxQkFBcUI7QUFDN0c7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDRCQUE0QjtBQUMzQyxlQUFlLDJDQUEyQztBQUMxRDtBQUNBLGdCQUFnQiwrQkFBK0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwwQkFBMEI7QUFDekMsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSx1QkFBdUIsU0FBUztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixxQ0FBcUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGlCQUFpQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx1QkFBdUIsaUJBQWlCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2tleWJvYXJkL0tleWJvYXJkUGx1Z2luLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xyXG52YXIgRXZlbnRzID0gcmVxdWlyZSgnLi9ldmVudHMnKTtcclxudmFyIEdhbWVFdmVudHMgPSByZXF1aXJlKCcuLi8uLi9jb3JlL2V2ZW50cycpO1xyXG52YXIgR2V0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0VmFsdWUnKTtcclxudmFyIElucHV0RXZlbnRzID0gcmVxdWlyZSgnLi4vZXZlbnRzJyk7XHJcbnZhciBJbnB1dFBsdWdpbkNhY2hlID0gcmVxdWlyZSgnLi4vSW5wdXRQbHVnaW5DYWNoZScpO1xyXG52YXIgS2V5ID0gcmVxdWlyZSgnLi9rZXlzL0tleScpO1xyXG52YXIgS2V5Q29kZXMgPSByZXF1aXJlKCcuL2tleXMvS2V5Q29kZXMnKTtcclxudmFyIEtleUNvbWJvID0gcmVxdWlyZSgnLi9jb21iby9LZXlDb21ibycpO1xyXG52YXIgS2V5TWFwID0gcmVxdWlyZSgnLi9rZXlzL0tleU1hcCcpO1xyXG52YXIgU25hcEZsb29yID0gcmVxdWlyZSgnLi4vLi4vbWF0aC9zbmFwL1NuYXBGbG9vcicpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIEtleWJvYXJkIFBsdWdpbiBpcyBhbiBpbnB1dCBwbHVnaW4gdGhhdCBiZWxvbmdzIHRvIHRoZSBTY2VuZS1vd25lZCBJbnB1dCBzeXN0ZW0uXHJcbiAqIFxyXG4gKiBJdHMgcm9sZSBpcyB0byBsaXN0ZW4gZm9yIG5hdGl2ZSBET00gS2V5Ym9hcmQgRXZlbnRzIGFuZCB0aGVuIHByb2Nlc3MgdGhlbS5cclxuICogXHJcbiAqIFlvdSBkbyBub3QgbmVlZCB0byBjcmVhdGUgdGhpcyBjbGFzcyBkaXJlY3RseSwgdGhlIElucHV0IHN5c3RlbSB3aWxsIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBpdCBhdXRvbWF0aWNhbGx5LlxyXG4gKiBcclxuICogWW91IGNhbiBhY2Nlc3MgaXQgZnJvbSB3aXRoaW4gYSBTY2VuZSB1c2luZyBgdGhpcy5pbnB1dC5rZXlib2FyZGAuIEZvciBleGFtcGxlLCB5b3UgY2FuIGRvOlxyXG4gKlxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMuaW5wdXQua2V5Ym9hcmQub24oJ2tleWRvd24nLCBjYWxsYmFjaywgY29udGV4dCk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBPciwgdG8gbGlzdGVuIGZvciBhIHNwZWNpZmljIGtleTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5pbnB1dC5rZXlib2FyZC5vbigna2V5ZG93bi1BJywgY2FsbGJhY2ssIGNvbnRleHQpO1xyXG4gKiBgYGBcclxuICpcclxuICogWW91IGNhbiBhbHNvIGNyZWF0ZSBLZXkgb2JqZWN0cywgd2hpY2ggeW91IGNhbiB0aGVuIHBvbGwgaW4geW91ciBnYW1lIGxvb3A6XHJcbiAqXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdmFyIHNwYWNlQmFyID0gdGhpcy5pbnB1dC5rZXlib2FyZC5hZGRLZXkoUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlNQQUNFKTtcclxuICogYGBgXHJcbiAqIFxyXG4gKiBJZiB5b3UgaGF2ZSBtdWx0aXBsZSBwYXJhbGxlbCBTY2VuZXMsIGVhY2ggdHJ5aW5nIHRvIGdldCBrZXlib2FyZCBpbnB1dCwgYmUgc3VyZSB0byBkaXNhYmxlIGNhcHR1cmUgb24gdGhlbSB0byBzdG9wIHRoZW0gZnJvbVxyXG4gKiBzdGVhbGluZyBpbnB1dCBmcm9tIGFub3RoZXIgU2NlbmUgaW4gdGhlIGxpc3QuIFlvdSBjYW4gZG8gdGhpcyB3aXRoIGB0aGlzLmlucHV0LmtleWJvYXJkLmVuYWJsZWQgPSBmYWxzZWAgd2l0aGluIHRoZVxyXG4gKiBTY2VuZSB0byBzdG9wIGFsbCBpbnB1dCwgb3IgYHRoaXMuaW5wdXQua2V5Ym9hcmQucHJldmVudERlZmF1bHQgPSBmYWxzZWAgdG8gc3RvcCBhIFNjZW5lIGhhbHRpbmcgaW5wdXQgb24gYW5vdGhlciBTY2VuZS5cclxuICpcclxuICogX05vdGVfOiBNYW55IGtleWJvYXJkcyBhcmUgdW5hYmxlIHRvIHByb2Nlc3MgY2VydGFpbiBjb21iaW5hdGlvbnMgb2Yga2V5cyBkdWUgdG8gaGFyZHdhcmUgbGltaXRhdGlvbnMga25vd24gYXMgZ2hvc3RpbmcuXHJcbiAqIFNlZSBodHRwOi8vd3d3Lmh0bWw1Z2FtZWRldnMuY29tL3RvcGljLzQ4NzYtaW1wb3NzaWJsZS10by11c2UtbW9yZS10aGFuLTIta2V5Ym9hcmQtaW5wdXQtYnV0dG9ucy1hdC10aGUtc2FtZS10aW1lLyBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKlxyXG4gKiBBbHNvIHBsZWFzZSBiZSBhd2FyZSB0aGF0IGNlcnRhaW4gYnJvd3NlciBleHRlbnNpb25zIGNhbiBkaXNhYmxlIG9yIG92ZXJyaWRlIFBoYXNlciBrZXlib2FyZCBoYW5kbGluZy5cclxuICogRm9yIGV4YW1wbGUgdGhlIENocm9tZSBleHRlbnNpb24gdmltaXVtIGlzIGtub3duIHRvIGRpc2FibGUgUGhhc2VyIGZyb20gdXNpbmcgdGhlIEQga2V5LCB3aGlsZSBFdmVyTm90ZSBkaXNhYmxlcyB0aGUgYmFja3RpY2sga2V5LlxyXG4gKiBBbmQgdGhlcmUgYXJlIG90aGVycy4gU28sIHBsZWFzZSBjaGVjayB5b3VyIGV4dGVuc2lvbnMgYmVmb3JlIG9wZW5pbmcgUGhhc2VyIGlzc3VlcyBhYm91dCBrZXlzIHRoYXQgZG9uJ3Qgd29yay5cclxuICpcclxuICogQGNsYXNzIEtleWJvYXJkUGx1Z2luXHJcbiAqIEBleHRlbmRzIFBoYXNlci5FdmVudHMuRXZlbnRFbWl0dGVyXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuSW5wdXQuS2V5Ym9hcmRcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjEwLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW59IHNjZW5lSW5wdXRQbHVnaW4gLSBBIHJlZmVyZW5jZSB0byB0aGUgU2NlbmUgSW5wdXQgUGx1Z2luIHRoYXQgdGhlIEtleWJvYXJkUGx1Z2luIGJlbG9uZ3MgdG8uXHJcbiAqL1xyXG52YXIgS2V5Ym9hcmRQbHVnaW4gPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEV2ZW50RW1pdHRlcixcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEtleWJvYXJkUGx1Z2luIChzY2VuZUlucHV0UGx1Z2luKVxyXG4gICAge1xyXG4gICAgICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgY29yZSBnYW1lLCBzbyB3ZSBjYW4gbGlzdGVuIGZvciB2aXNpYmlsaXR5IGV2ZW50cy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbiNnYW1lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5HYW1lfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmdhbWUgPSBzY2VuZUlucHV0UGx1Z2luLnN5c3RlbXMuZ2FtZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIHRoYXQgdGhpcyBJbnB1dCBQbHVnaW4gaXMgcmVzcG9uc2libGUgZm9yLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkUGx1Z2luI3NjZW5lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2VuZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lSW5wdXRQbHVnaW4uc2NlbmU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSBTeXN0ZW1zIFNldHRpbmdzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkUGx1Z2luI3NldHRpbmdzXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5TY2VuZXMuU2V0dGluZ3NPYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSB0aGlzLnNjZW5lLnN5cy5zZXR0aW5ncztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIFNjZW5lIElucHV0IFBsdWdpbiB0aGF0IGNyZWF0ZWQgdGhpcyBLZXlib2FyZCBQbHVnaW4uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4jc2NlbmVJbnB1dFBsdWdpblxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuSW5wdXRQbHVnaW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2NlbmVJbnB1dFBsdWdpbiA9IHNjZW5lSW5wdXRQbHVnaW47XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgS2V5Ym9hcmQgTWFuYWdlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbiNtYW5hZ2VyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5JbnB1dFBsdWdpbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gc2NlbmVJbnB1dFBsdWdpbi5tYW5hZ2VyLmtleWJvYXJkO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGJvb2xlYW4gdGhhdCBjb250cm9scyBpZiB0aGlzIEtleWJvYXJkIFBsdWdpbiBpcyBlbmFibGVkIG9yIG5vdC5cclxuICAgICAgICAgKiBDYW4gYmUgdG9nZ2xlZCBvbiB0aGUgZmx5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkUGx1Z2luI2VuYWJsZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIGFycmF5IG9mIEtleSBvYmplY3RzIHRvIHByb2Nlc3MuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4ja2V5c1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5W119XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMua2V5cyA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBvZiBLZXlDb21ibyBvYmplY3RzIHRvIHByb2Nlc3MuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4jY29tYm9zXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21ib1tdfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbWJvcyA9IFtdO1xyXG5cclxuICAgICAgICBzY2VuZUlucHV0UGx1Z2luLnBsdWdpbkV2ZW50cy5vbmNlKElucHV0RXZlbnRzLkJPT1QsIHRoaXMuYm9vdCwgdGhpcyk7XHJcbiAgICAgICAgc2NlbmVJbnB1dFBsdWdpbi5wbHVnaW5FdmVudHMub24oSW5wdXRFdmVudHMuU1RBUlQsIHRoaXMuc3RhcnQsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5LCBvbmx5IG9uY2UsIHdoZW4gdGhlIFNjZW5lIGlzIGZpcnN0IGNyZWF0ZWQuXHJcbiAgICAgKiBEbyBub3QgaW52b2tlIGl0IGRpcmVjdGx5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkUGx1Z2luI2Jvb3RcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIGJvb3Q6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHNldHRpbmdzID0gdGhpcy5zZXR0aW5ncy5pbnB1dDtcclxuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gR2V0VmFsdWUoc2V0dGluZ3MsICdrZXlib2FyZCcsIHRydWUpO1xyXG5cclxuICAgICAgICB2YXIgY2FwdHVyZXMgPSBHZXRWYWx1ZShzZXR0aW5ncywgJ2tleWJvYXJkLmNhcHR1cmUnLCBudWxsKTtcclxuXHJcbiAgICAgICAgaWYgKGNhcHR1cmVzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRDYXB0dXJlcyhjYXB0dXJlcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNjZW5lSW5wdXRQbHVnaW4ucGx1Z2luRXZlbnRzLm9uY2UoSW5wdXRFdmVudHMuREVTVFJPWSwgdGhpcy5kZXN0cm95LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgU2NlbmUgd2hlbiBpdCBpcyBzdGFydGluZyB1cC5cclxuICAgICAqIEl0IGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBsb2NhbCBzeXN0ZW1zLCBwcm9wZXJ0aWVzIGFuZCBsaXN0ZW5pbmcgZm9yIFNjZW5lIGV2ZW50cy5cclxuICAgICAqIERvIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4jc3RhcnRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lSW5wdXRQbHVnaW4ubWFuYWdlci51c2VRdWV1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmVJbnB1dFBsdWdpbi5wbHVnaW5FdmVudHMub24oSW5wdXRFdmVudHMuVVBEQVRFLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmVJbnB1dFBsdWdpbi5tYW5hZ2VyLmV2ZW50cy5vbihJbnB1dEV2ZW50cy5NQU5BR0VSX1BST0NFU1MsIHRoaXMudXBkYXRlLCB0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmVJbnB1dFBsdWdpbi5wbHVnaW5FdmVudHMub25jZShJbnB1dEV2ZW50cy5TSFVURE9XTiwgdGhpcy5zaHV0ZG93biwgdGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2FtZS5ldmVudHMub24oR2FtZUV2ZW50cy5CTFVSLCB0aGlzLnJlc2V0S2V5cywgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIHRvIHNlZSBpZiBib3RoIHRoaXMgcGx1Z2luIGFuZCB0aGUgU2NlbmUgdG8gd2hpY2ggaXQgYmVsb25ncyBpcyBhY3RpdmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4jaXNBY3RpdmVcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHBsdWdpbiBhbmQgdGhlIFNjZW5lIGl0IGJlbG9uZ3MgdG8gaXMgYWN0aXZlLlxyXG4gICAgICovXHJcbiAgICBpc0FjdGl2ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuZW5hYmxlZCAmJiB0aGlzLnNjZW5lLnN5cy5pc0FjdGl2ZSgpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCeSBkZWZhdWx0IHdoZW4gYSBrZXkgaXMgcHJlc3NlZCBQaGFzZXIgd2lsbCBub3Qgc3RvcCB0aGUgZXZlbnQgZnJvbSBwcm9wYWdhdGluZyB1cCB0byB0aGUgYnJvd3Nlci5cclxuICAgICAqIFRoZXJlIGFyZSBzb21lIGtleXMgdGhpcyBjYW4gYmUgYW5ub3lpbmcgZm9yLCBsaWtlIHRoZSBhcnJvdyBrZXlzIG9yIHNwYWNlIGJhciwgd2hpY2ggbWFrZSB0aGUgYnJvd3NlciB3aW5kb3cgc2Nyb2xsLlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgYGFkZENhcHR1cmVgIG1ldGhvZCBlbmFibGVzIGNvbnN1bWluZyBrZXlib2FyZCBldmVudHMgZm9yIHNwZWNpZmljIGtleXMsIHNvIHRoZXkgZG9uJ3QgYnViYmxlIHVwIHRoZSBicm93c2VyXHJcbiAgICAgKiBhbmQgY2F1c2UgdGhlIGRlZmF1bHQgYmVoYXZpb3JzLlxyXG4gICAgICogXHJcbiAgICAgKiBQbGVhc2Ugbm90ZSB0aGF0IGtleWJvYXJkIGNhcHR1cmVzIGFyZSBnbG9iYWwuIFRoaXMgbWVhbnMgdGhhdCBpZiB5b3UgY2FsbCB0aGlzIG1ldGhvZCBmcm9tIHdpdGhpbiBhIFNjZW5lLCB0byBzYXkgcHJldmVudFxyXG4gICAgICogdGhlIFNQQUNFIEJBUiBmcm9tIHRyaWdnZXJpbmcgYSBwYWdlIHNjcm9sbCwgdGhlbiBpdCB3aWxsIHByZXZlbnQgaXQgZm9yIGFueSBTY2VuZSBpbiB5b3VyIGdhbWUsIG5vdCBqdXN0IHRoZSBjYWxsaW5nIG9uZS5cclxuICAgICAqIFxyXG4gICAgICogWW91IGNhbiBwYXNzIGEgc2luZ2xlIGtleSBjb2RlIHZhbHVlOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB0aGlzLmlucHV0LmtleWJvYXJkLmFkZENhcHR1cmUoNjIpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIEFuIGFycmF5IG9mIGtleSBjb2RlczpcclxuICAgICAqIFxyXG4gICAgICogYGBgamF2YXNjcmlwdFxyXG4gICAgICogdGhpcy5pbnB1dC5rZXlib2FyZC5hZGRDYXB0dXJlKFsgNjIsIDYzLCA2NCBdKTtcclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiBPciwgYSBjb21tYS1kZWxpbWl0ZWQgc3RyaW5nOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB0aGlzLmlucHV0LmtleWJvYXJkLmFkZENhcHR1cmUoJ1csUyxBLEQnKTtcclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiBUbyB1c2Ugbm9uLWFscGhhIG51bWVyaWMga2V5cywgdXNlIGEgc3RyaW5nLCBzdWNoIGFzICdVUCcsICdTUEFDRScgb3IgJ0xFRlQnLlxyXG4gICAgICogXHJcbiAgICAgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhbiBhcnJheSBtaXhpbmcgYm90aCBzdHJpbmdzIGFuZCBrZXkgY29kZSBpbnRlZ2Vycy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbiNhZGRDYXB0dXJlXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xpbnRlZ2VyfGludGVnZXJbXXxhbnlbXSl9IGtleWNvZGUgLSBUaGUgS2V5IENvZGVzIHRvIGVuYWJsZSBldmVudCBjYXB0dXJlIGZvci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW59IFRoaXMgS2V5Ym9hcmRQbHVnaW4gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBhZGRDYXB0dXJlOiBmdW5jdGlvbiAoa2V5Y29kZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLm1hbmFnZXIuYWRkQ2FwdHVyZShrZXljb2RlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhbiBleGlzdGluZyBrZXkgY2FwdHVyZS5cclxuICAgICAqIFxyXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCBrZXlib2FyZCBjYXB0dXJlcyBhcmUgZ2xvYmFsLiBUaGlzIG1lYW5zIHRoYXQgaWYgeW91IGNhbGwgdGhpcyBtZXRob2QgZnJvbSB3aXRoaW4gYSBTY2VuZSwgdG8gcmVtb3ZlXHJcbiAgICAgKiB0aGUgY2FwdHVyZSBvZiBhIGtleSwgdGhlbiBpdCB3aWxsIHJlbW92ZSBpdCBmb3IgYW55IFNjZW5lIGluIHlvdXIgZ2FtZSwgbm90IGp1c3QgdGhlIGNhbGxpbmcgb25lLlxyXG4gICAgICogXHJcbiAgICAgKiBZb3UgY2FuIHBhc3MgYSBzaW5nbGUga2V5IGNvZGUgdmFsdWU6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMuaW5wdXQua2V5Ym9hcmQucmVtb3ZlQ2FwdHVyZSg2Mik7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogQW4gYXJyYXkgb2Yga2V5IGNvZGVzOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB0aGlzLmlucHV0LmtleWJvYXJkLnJlbW92ZUNhcHR1cmUoWyA2MiwgNjMsIDY0IF0pO1xyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIE9yLCBhIGNvbW1hLWRlbGltaXRlZCBzdHJpbmc6XHJcbiAgICAgKiBcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMuaW5wdXQua2V5Ym9hcmQucmVtb3ZlQ2FwdHVyZSgnVyxTLEEsRCcpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKiBcclxuICAgICAqIFRvIHVzZSBub24tYWxwaGEgbnVtZXJpYyBrZXlzLCB1c2UgYSBzdHJpbmcsIHN1Y2ggYXMgJ1VQJywgJ1NQQUNFJyBvciAnTEVGVCcuXHJcbiAgICAgKiBcclxuICAgICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGFuIGFycmF5IG1peGluZyBib3RoIHN0cmluZ3MgYW5kIGtleSBjb2RlIGludGVnZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkUGx1Z2luI3JlbW92ZUNhcHR1cmVcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGludGVnZXJ8aW50ZWdlcltdfGFueVtdKX0ga2V5Y29kZSAtIFRoZSBLZXkgQ29kZXMgdG8gZGlzYWJsZSBldmVudCBjYXB0dXJlIGZvci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW59IFRoaXMgS2V5Ym9hcmRQbHVnaW4gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZW1vdmVDYXB0dXJlOiBmdW5jdGlvbiAoa2V5Y29kZSlcclxuICAgIHtcclxuICAgICAgICB0aGlzLm1hbmFnZXIucmVtb3ZlQ2FwdHVyZShrZXljb2RlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUga2V5Ym9hcmQgY2FwdHVyZXMgY3VycmVudGx5IGVuYWJsZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4jZ2V0Q2FwdHVyZXNcclxuICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7aW50ZWdlcltdfSBBbiBhcnJheSBvZiBhbGwgdGhlIGN1cnJlbnRseSBjYXB0dXJpbmcga2V5IGNvZGVzLlxyXG4gICAgICovXHJcbiAgICBnZXRDYXB0dXJlczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLmNhcHR1cmVzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsbG93cyBQaGFzZXIgdG8gcHJldmVudCBhbnkga2V5IGNhcHR1cmVzIHlvdSBtYXkgaGF2ZSBkZWZpbmVkIGZyb20gYnViYmxpbmcgdXAgdGhlIGJyb3dzZXIuXHJcbiAgICAgKiBZb3UgY2FuIHVzZSB0aGlzIHRvIHJlLWVuYWJsZSBldmVudCBjYXB0dXJpbmcgaWYgeW91IGhhZCBwYXVzZWQgaXQgdmlhIGBkaXNhYmxlR2xvYmFsQ2FwdHVyZWAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4jZW5hYmxlR2xvYmFsQ2FwdHVyZVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbn0gVGhpcyBLZXlib2FyZFBsdWdpbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGVuYWJsZUdsb2JhbENhcHR1cmU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLnByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzYWJsZXMgUGhhc2VyIGZyb20gcHJldmVudGluZyBhbnkga2V5IGNhcHR1cmVzIHlvdSBtYXkgaGF2ZSBkZWZpbmVkLCB3aXRob3V0IGFjdHVhbGx5IHJlbW92aW5nIHRoZW0uXHJcbiAgICAgKiBZb3UgY2FuIHVzZSB0aGlzIHRvIHRlbXBvcmFyaWx5IGRpc2FibGUgZXZlbnQgY2FwdHVyaW5nIGlmLCBmb3IgZXhhbXBsZSwgeW91IHN3YXAgdG8gYSBET00gZWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbiNkaXNhYmxlR2xvYmFsQ2FwdHVyZVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbn0gVGhpcyBLZXlib2FyZFBsdWdpbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGRpc2FibGVHbG9iYWxDYXB0dXJlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMubWFuYWdlci5wcmV2ZW50RGVmYXVsdCA9IGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGFsbCBrZXlib2FyZCBjYXB0dXJlcy5cclxuICAgICAqIFxyXG4gICAgICogTm90ZSB0aGF0IHRoaXMgaXMgYSBnbG9iYWwgY2hhbmdlLiBJdCB3aWxsIGNsZWFyIGFsbCBldmVudCBjYXB0dXJlcyBhY3Jvc3MgeW91ciBnYW1lLCBub3QganVzdCBmb3IgdGhpcyBzcGVjaWZpYyBTY2VuZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbiNjbGVhckNhcHR1cmVzXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkUGx1Z2lufSBUaGlzIEtleWJvYXJkUGx1Z2luIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgY2xlYXJDYXB0dXJlczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLm1hbmFnZXIuY2xlYXJDYXB0dXJlcygpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGFuZCByZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIDQgaG90a2V5cyBmb3IgVXAsIERvd24sIExlZnQgYW5kIFJpZ2h0LCBhbmQgYWxzbyBTcGFjZSBCYXIgYW5kIHNoaWZ0LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkUGx1Z2luI2NyZWF0ZUN1cnNvcktleXNcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuVHlwZXMuSW5wdXQuS2V5Ym9hcmQuQ3Vyc29yS2V5c30gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHByb3BlcnRpZXM6IGB1cGAsIGBkb3duYCwgYGxlZnRgLCBgcmlnaHRgLCBgc3BhY2VgIGFuZCBgc2hpZnRgLlxyXG4gICAgICovXHJcbiAgICBjcmVhdGVDdXJzb3JLZXlzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZEtleXMoe1xyXG4gICAgICAgICAgICB1cDogS2V5Q29kZXMuVVAsXHJcbiAgICAgICAgICAgIGRvd246IEtleUNvZGVzLkRPV04sXHJcbiAgICAgICAgICAgIGxlZnQ6IEtleUNvZGVzLkxFRlQsXHJcbiAgICAgICAgICAgIHJpZ2h0OiBLZXlDb2Rlcy5SSUdIVCxcclxuICAgICAgICAgICAgc3BhY2U6IEtleUNvZGVzLlNQQUNFLFxyXG4gICAgICAgICAgICBzaGlmdDogS2V5Q29kZXMuU0hJRlRcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHByYWN0aWNhbCB3YXkgdG8gY3JlYXRlIGFuIG9iamVjdCBjb250YWluaW5nIHVzZXIgc2VsZWN0ZWQgaG90a2V5cy5cclxuICAgICAqXHJcbiAgICAgKiBGb3IgZXhhbXBsZTpcclxuICAgICAqXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB0aGlzLmlucHV0LmtleWJvYXJkLmFkZEtleXMoeyAndXAnOiBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuVywgJ2Rvd24nOiBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuUyB9KTtcclxuICAgICAqIGBgYFxyXG4gICAgICogXHJcbiAgICAgKiB3b3VsZCByZXR1cm4gYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHByb3BlcnRpZXMgKGB1cGAgYW5kIGBkb3duYCkgbWFwcGVkIHRvIFcgYW5kIFMge0BsaW5rIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXl9IG9iamVjdHMuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBhbHNvIHBhc3MgaW4gYSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nOlxyXG4gICAgICogXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB0aGlzLmlucHV0LmtleWJvYXJkLmFkZEtleXMoJ1csUyxBLEQnKTtcclxuICAgICAqIGBgYFxyXG4gICAgICpcclxuICAgICAqIFdoaWNoIHdpbGwgcmV0dXJuIGFuIG9iamVjdCB3aXRoIHRoZSBwcm9wZXJ0aWVzIFcsIFMsIEEgYW5kIEQgbWFwcGVkIHRvIHRoZSByZWxldmFudCBLZXkgb2JqZWN0cy5cclxuICAgICAqXHJcbiAgICAgKiBUbyB1c2Ugbm9uLWFscGhhIG51bWVyaWMga2V5cywgdXNlIGEgc3RyaW5nLCBzdWNoIGFzICdVUCcsICdTUEFDRScgb3IgJ0xFRlQnLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkUGx1Z2luI2FkZEtleXNcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhvYmplY3R8c3RyaW5nKX0ga2V5cyAtIEFuIG9iamVjdCBjb250YWluaW5nIEtleSBDb2Rlcywgb3IgYSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZW5hYmxlQ2FwdHVyZT10cnVlXSAtIEF1dG9tYXRpY2FsbHkgY2FsbCBgcHJldmVudERlZmF1bHRgIG9uIHRoZSBuYXRpdmUgRE9NIGJyb3dzZXIgZXZlbnQgZm9yIHRoZSBrZXkgY29kZXMgYmVpbmcgYWRkZWQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtlbWl0T25SZXBlYXQ9ZmFsc2VdIC0gQ29udHJvbHMgaWYgdGhlIEtleSB3aWxsIGNvbnRpbnVvdXNseSBlbWl0IGEgJ2Rvd24nIGV2ZW50IHdoaWxlIGJlaW5nIGhlbGQgZG93biAodHJ1ZSksIG9yIGVtaXQgdGhlIGV2ZW50IGp1c3Qgb25jZSAoZmFsc2UsIHRoZSBkZWZhdWx0KS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIEtleSBvYmplY3RzIG1hcHBlZCB0byB0aGUgaW5wdXQgcHJvcGVydGllcy5cclxuICAgICAqL1xyXG4gICAgYWRkS2V5czogZnVuY3Rpb24gKGtleXMsIGVuYWJsZUNhcHR1cmUsIGVtaXRPblJlcGVhdClcclxuICAgIHtcclxuICAgICAgICBpZiAoZW5hYmxlQ2FwdHVyZSA9PT0gdW5kZWZpbmVkKSB7IGVuYWJsZUNhcHR1cmUgPSB0cnVlOyB9XHJcbiAgICAgICAgaWYgKGVtaXRPblJlcGVhdCA9PT0gdW5kZWZpbmVkKSB7IGVtaXRPblJlcGVhdCA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIHZhciBvdXRwdXQgPSB7fTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBrZXlzID09PSAnc3RyaW5nJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGtleXMgPSBrZXlzLnNwbGl0KCcsJyk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5c1tpXS50cmltKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRLZXkpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0W2N1cnJlbnRLZXldID0gdGhpcy5hZGRLZXkoY3VycmVudEtleSwgZW5hYmxlQ2FwdHVyZSwgZW1pdE9uUmVwZWF0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4ga2V5cylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0W2tleV0gPSB0aGlzLmFkZEtleShrZXlzW2tleV0sIGVuYWJsZUNhcHR1cmUsIGVtaXRPblJlcGVhdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIEtleSBvYmplY3QgdG8gdGhpcyBLZXlib2FyZCBQbHVnaW4uXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGdpdmVuIGFyZ3VtZW50IGNhbiBiZSBlaXRoZXIgYW4gZXhpc3RpbmcgS2V5IG9iamVjdCwgYSBzdHJpbmcsIHN1Y2ggYXMgYEFgIG9yIGBTUEFDRWAsIG9yIGEga2V5IGNvZGUgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogSWYgYSBLZXkgb2JqZWN0IGlzIGdpdmVuLCBhbmQgb25lIGFscmVhZHkgZXhpc3RzIG1hdGNoaW5nIHRoZSBzYW1lIGtleSBjb2RlLCB0aGUgZXhpc3Rpbmcgb25lIGlzIHJlcGxhY2VkIHdpdGggdGhlIG5ldyBvbmUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4jYWRkS2V5XHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsoUGhhc2VyLklucHV0LktleWJvYXJkLktleXxzdHJpbmd8aW50ZWdlcil9IGtleSAtIEVpdGhlciBhIEtleSBvYmplY3QsIGEgc3RyaW5nLCBzdWNoIGFzIGBBYCBvciBgU1BBQ0VgLCBvciBhIGtleSBjb2RlIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZW5hYmxlQ2FwdHVyZT10cnVlXSAtIEF1dG9tYXRpY2FsbHkgY2FsbCBgcHJldmVudERlZmF1bHRgIG9uIHRoZSBuYXRpdmUgRE9NIGJyb3dzZXIgZXZlbnQgZm9yIHRoZSBrZXkgY29kZXMgYmVpbmcgYWRkZWQuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtlbWl0T25SZXBlYXQ9ZmFsc2VdIC0gQ29udHJvbHMgaWYgdGhlIEtleSB3aWxsIGNvbnRpbnVvdXNseSBlbWl0IGEgJ2Rvd24nIGV2ZW50IHdoaWxlIGJlaW5nIGhlbGQgZG93biAodHJ1ZSksIG9yIGVtaXQgdGhlIGV2ZW50IGp1c3Qgb25jZSAoZmFsc2UsIHRoZSBkZWZhdWx0KS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5fSBUaGUgbmV3bHkgY3JlYXRlZCBLZXkgb2JqZWN0LCBvciBhIHJlZmVyZW5jZSB0byBpdCBpZiBpdCBhbHJlYWR5IGV4aXN0ZWQgaW4gdGhlIGtleXMgYXJyYXkuXHJcbiAgICAgKi9cclxuICAgIGFkZEtleTogZnVuY3Rpb24gKGtleSwgZW5hYmxlQ2FwdHVyZSwgZW1pdE9uUmVwZWF0KVxyXG4gICAge1xyXG4gICAgICAgIGlmIChlbmFibGVDYXB0dXJlID09PSB1bmRlZmluZWQpIHsgZW5hYmxlQ2FwdHVyZSA9IHRydWU7IH1cclxuICAgICAgICBpZiAoZW1pdE9uUmVwZWF0ID09PSB1bmRlZmluZWQpIHsgZW1pdE9uUmVwZWF0ID0gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgdmFyIGtleXMgPSB0aGlzLmtleXM7XHJcblxyXG4gICAgICAgIGlmIChrZXkgaW5zdGFuY2VvZiBLZXkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgaWR4ID0ga2V5cy5pbmRleE9mKGtleSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaWR4ID4gLTEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGtleXNbaWR4XSA9IGtleTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGtleXNba2V5LmtleUNvZGVdID0ga2V5O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZW5hYmxlQ2FwdHVyZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRDYXB0dXJlKGtleS5rZXlDb2RlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAga2V5LnNldEVtaXRPblJlcGVhdChlbWl0T25SZXBlYXQpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGtleTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGtleSA9IEtleUNvZGVzW2tleS50b1VwcGVyQ2FzZSgpXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgha2V5c1trZXldKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAga2V5c1trZXldID0gbmV3IEtleSh0aGlzLCBrZXkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVuYWJsZUNhcHR1cmUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2FwdHVyZShrZXkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBrZXlzW2tleV0uc2V0RW1pdE9uUmVwZWF0KGVtaXRPblJlcGVhdCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ga2V5c1trZXldO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYSBLZXkgb2JqZWN0IGZyb20gdGhpcyBLZXlib2FyZCBQbHVnaW4uXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGdpdmVuIGFyZ3VtZW50IGNhbiBiZSBlaXRoZXIgYSBLZXkgb2JqZWN0LCBhIHN0cmluZywgc3VjaCBhcyBgQWAgb3IgYFNQQUNFYCwgb3IgYSBrZXkgY29kZSB2YWx1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbiNyZW1vdmVLZXlcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5fHN0cmluZ3xpbnRlZ2VyKX0ga2V5IC0gRWl0aGVyIGEgS2V5IG9iamVjdCwgYSBzdHJpbmcsIHN1Y2ggYXMgYEFgIG9yIGBTUEFDRWAsIG9yIGEga2V5IGNvZGUgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkZXN0cm95PWZhbHNlXSAtIENhbGwgYEtleS5kZXN0cm95YCBvbiB0aGUgcmVtb3ZlZCBLZXkgb2JqZWN0P1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbn0gVGhpcyBLZXlib2FyZFBsdWdpbiBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUtleTogZnVuY3Rpb24gKGtleSwgZGVzdHJveSlcclxuICAgIHtcclxuICAgICAgICBpZiAoZGVzdHJveSA9PT0gdW5kZWZpbmVkKSB7IGRlc3Ryb3kgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICB2YXIga2V5cyA9IHRoaXMua2V5cztcclxuICAgICAgICB2YXIgcmVmO1xyXG5cclxuICAgICAgICBpZiAoa2V5IGluc3RhbmNlb2YgS2V5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGlkeCA9IGtleXMuaW5kZXhPZihrZXkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGlkeCA+IC0xKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZWYgPSB0aGlzLmtleXNbaWR4XTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmtleXNbaWR4XSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGtleSA9IEtleUNvZGVzW2tleS50b1VwcGVyQ2FzZSgpXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChrZXlzW2tleV0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZWYgPSBrZXlzW2tleV07XHJcblxyXG4gICAgICAgICAgICBrZXlzW2tleV0gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVmKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmVmLnBsdWdpbiA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAoZGVzdHJveSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVmLmRlc3Ryb3koKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBLZXlDb21iby5cclxuICAgICAqIFxyXG4gICAgICogQSBLZXlDb21ibyB3aWxsIGxpc3RlbiBmb3IgYSBzcGVjaWZpYyBzdHJpbmcgb2Yga2V5cyBmcm9tIHRoZSBLZXlib2FyZCwgYW5kIHdoZW4gaXQgcmVjZWl2ZXMgdGhlbVxyXG4gICAgICogaXQgd2lsbCBlbWl0IGEgYGtleWNvbWJvbWF0Y2hgIGV2ZW50IGZyb20gdGhpcyBLZXlib2FyZCBQbHVnaW4uXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGtleXMgdG8gYmUgbGlzdGVuZWQgZm9yIGNhbiBiZSBkZWZpbmVkIGFzOlxyXG4gICAgICpcclxuICAgICAqIEEgc3RyaW5nIChpLmUuICdBVEFSSScpXHJcbiAgICAgKiBBbiBhcnJheSBvZiBlaXRoZXIgaW50ZWdlcnMgKGtleSBjb2Rlcykgb3Igc3RyaW5ncywgb3IgYSBtaXh0dXJlIG9mIGJvdGhcclxuICAgICAqIEFuIGFycmF5IG9mIG9iamVjdHMgKHN1Y2ggYXMgS2V5IG9iamVjdHMpIHdpdGggYSBwdWJsaWMgJ2tleUNvZGUnIHByb3BlcnR5XHJcbiAgICAgKlxyXG4gICAgICogRm9yIGV4YW1wbGUsIHRvIGxpc3RlbiBmb3IgdGhlIEtvbmFtaSBjb2RlICh1cCwgdXAsIGRvd24sIGRvd24sIGxlZnQsIHJpZ2h0LCBsZWZ0LCByaWdodCwgYiwgYSwgZW50ZXIpXHJcbiAgICAgKiB5b3UgY291bGQgcGFzcyB0aGUgZm9sbG93aW5nIGFycmF5IG9mIGtleSBjb2RlczpcclxuICAgICAqXHJcbiAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgKiB0aGlzLmlucHV0LmtleWJvYXJkLmNyZWF0ZUNvbWJvKFsgMzgsIDM4LCA0MCwgNDAsIDM3LCAzOSwgMzcsIDM5LCA2NiwgNjUsIDEzIF0sIHsgcmVzZXRPbk1hdGNoOiB0cnVlIH0pO1xyXG4gICAgICpcclxuICAgICAqIHRoaXMuaW5wdXQua2V5Ym9hcmQub24oJ2tleWNvbWJvbWF0Y2gnLCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAqICAgICBjb25zb2xlLmxvZygnS29uYW1pIENvZGUgZW50ZXJlZCEnKTtcclxuICAgICAqIH0pO1xyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogT3IsIHRvIGxpc3RlbiBmb3IgdGhlIHVzZXIgZW50ZXJpbmcgdGhlIHdvcmQgUEhBU0VSOlxyXG4gICAgICpcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMuaW5wdXQua2V5Ym9hcmQuY3JlYXRlQ29tYm8oJ1BIQVNFUicpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4jY3JlYXRlQ29tYm9cclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcltdfG9iamVjdFtdKX0ga2V5cyAtIFRoZSBrZXlzIHRoYXQgY29tcHJpc2UgdGhpcyBjb21iby5cclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLklucHV0LktleWJvYXJkLktleUNvbWJvQ29uZmlnfSBbY29uZmlnXSAtIEEgS2V5IENvbWJvIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21ib30gVGhlIG5ldyBLZXlDb21ibyBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUNvbWJvOiBmdW5jdGlvbiAoa2V5cywgY29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBuZXcgS2V5Q29tYm8odGhpcywga2V5cywgY29uZmlnKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIEtleSBvYmplY3QgaXMgY3VycmVudGx5IGJlaW5nIGhlbGQgZG93bi5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIG1ldGhvZCBhbmQgY2hlY2tpbmcgdGhlIGBLZXkuaXNEb3duYCBwcm9wZXJ0eSBkaXJlY3RseSBpcyB0aGF0IHlvdSBjYW4gcHJvdmlkZVxyXG4gICAgICogYSBkdXJhdGlvbiB0byB0aGlzIG1ldGhvZC4gRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50ZWQgYSBrZXkgcHJlc3MgdG8gZmlyZSBhIGJ1bGxldCwgYnV0IHlvdSBvbmx5IHdhbnRlZFxyXG4gICAgICogaXQgdG8gYmUgYWJsZSB0byBmaXJlIGV2ZXJ5IDEwMG1zLCB0aGVuIHlvdSBjYW4gY2FsbCB0aGlzIG1ldGhvZCB3aXRoIGEgYGR1cmF0aW9uYCBvZiAxMDAgYW5kIGl0XHJcbiAgICAgKiB3aWxsIG9ubHkgcmV0dXJuIGB0cnVlYCBldmVyeSAxMDBtcy5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIEtleWJvYXJkIFBsdWdpbiBoYXMgYmVlbiBkaXNhYmxlZCwgdGhpcyBtZXRob2Qgd2lsbCBhbHdheXMgcmV0dXJuIGBmYWxzZWAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4jY2hlY2tEb3duXHJcbiAgICAgKiBAc2luY2UgMy4xMS4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5fSBrZXkgLSBBIEtleSBvYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2R1cmF0aW9uPTBdIC0gVGhlIGR1cmF0aW9uIHdoaWNoIG11c3QgaGF2ZSBlbGFwc2VkIGJlZm9yZSB0aGlzIEtleSBpcyBjb25zaWRlcmVkIGFzIGJlaW5nIGRvd24uXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgS2V5IGlzIGRvd24gd2l0aGluIHRoZSBkdXJhdGlvbiBzcGVjaWZpZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBjaGVja0Rvd246IGZ1bmN0aW9uIChrZXksIGR1cmF0aW9uKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZWQgJiYga2V5LmlzRG93bilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB0ID0gU25hcEZsb29yKHRoaXMudGltZSAtIGtleS50aW1lRG93biwgZHVyYXRpb24pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHQgPiBrZXkuX3RpY2spXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGtleS5fdGljayA9IHQ7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCB1cGRhdGUgaGFuZGxlciBjYWxsZWQgYnkgdGhlIElucHV0IFBsdWdpbiwgd2hpY2ggaXMgaW4gdHVybiBpbnZva2VkIGJ5IHRoZSBHYW1lIHN0ZXAuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4jdXBkYXRlXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHF1ZXVlID0gdGhpcy5tYW5hZ2VyLnF1ZXVlO1xyXG4gICAgICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSgpIHx8IGxlbiA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBrZXlzID0gdGhpcy5rZXlzO1xyXG5cclxuICAgICAgICAvLyAgUHJvY2VzcyB0aGUgZXZlbnQgcXVldWUsIGRpc3BhdGNoaW5nIGFsbCBvZiB0aGUgZXZlbnRzIHRoYXQgaGF2ZSBzdG9yZWQgdXBcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGV2ZW50ID0gcXVldWVbaV07XHJcbiAgICAgICAgICAgIHZhciBjb2RlID0gZXZlbnQua2V5Q29kZTtcclxuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbY29kZV07XHJcbiAgICAgICAgICAgIHZhciByZXBlYXQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIC8vICBPdmVycmlkZSB0aGUgZGVmYXVsdCBmdW5jdGlvbnMgKGl0J3MgdG9vIGxhdGUgZm9yIHRoZSBicm93c2VyIHRvIHVzZSB0aGVtIGFueXdheSwgc28gd2UgbWF5IGFzIHdlbGwpXHJcbiAgICAgICAgICAgIGlmIChldmVudC5jYW5jZWxsZWQgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIEV2ZW50IGFsbG93ZWQgdG8gZmxvdyBhY3Jvc3MgYWxsIGhhbmRsZXJzIGluIHRoaXMgU2NlbmUsIGFuZCBhbnkgb3RoZXIgU2NlbmUgaW4gdGhlIFNjZW5lIGxpc3RcclxuICAgICAgICAgICAgICAgIGV2ZW50LmNhbmNlbGxlZCA9IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIFdvbid0IHJlYWNoIGFueSBtb3JlIGxvY2FsIChTY2VuZSBsZXZlbCkgaGFuZGxlcnNcclxuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uICgpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuY2FuY2VsbGVkID0gMTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIC8vICBXb24ndCByZWFjaCBhbnkgbW9yZSBoYW5kbGVycyBpbiBhbnkgU2NlbmUgZnVydGhlciBkb3duIHRoZSBTY2VuZSBsaXN0XHJcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbiAoKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmNhbmNlbGxlZCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGV2ZW50LmNhbmNlbGxlZCA9PT0gLTEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBUaGlzIGV2ZW50IGhhcyBiZWVuIHN0b3BwZWQgZnJvbSBicm9hZGNhc3RpbmcgdG8gYW55IG90aGVyIFNjZW5lLCBzbyBhYm9ydC5cclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgS2V5IHNwZWNpZmljIGNhbGxiYWNrIGZpcnN0XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcGVhdCA9IGtleS5pc0Rvd247XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGtleS5vbkRvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICghZXZlbnQuY2FuY2VsbGVkICYmICgha2V5IHx8ICFyZXBlYXQpKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChLZXlNYXBbY29kZV0pXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLktFWV9ET1dOICsgS2V5TWFwW2NvZGVdLCBldmVudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgRGVwcmVjYXRlZCwga2VwdCBpbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIDMuMTVcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gIFRvIGJlIHJlbW92ZWQgYnkgMy4yMC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdrZXlkb3duXycgKyBLZXlNYXBbY29kZV0sIGV2ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZXZlbnQuY2FuY2VsbGVkKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5BTllfS0VZX0RPV04sIGV2ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgS2V5IHNwZWNpZmljIGNhbGxiYWNrIGZpcnN0XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleS5vblVwKGV2ZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWV2ZW50LmNhbmNlbGxlZClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoS2V5TWFwW2NvZGVdKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5LRVlfVVAgKyBLZXlNYXBbY29kZV0sIGV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICBEZXByZWNhdGVkLCBrZXB0IGluIGZvciBjb21wYXRpYmlsaXR5IHdpdGggMy4xNVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgVG8gYmUgcmVtb3ZlZCBieSAzLjIwLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2tleXVwXycgKyBLZXlNYXBbY29kZV0sIGV2ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZXZlbnQuY2FuY2VsbGVkKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5BTllfS0VZX1VQLCBldmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyAgUmVzZXQgdGhlIGNhbmNlbCBzdGF0ZSBmb3Igb3RoZXIgU2NlbmVzIHRvIHVzZVxyXG4gICAgICAgICAgICBpZiAoZXZlbnQuY2FuY2VsbGVkID09PSAxKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5jYW5jZWxsZWQgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyBhbGwgS2V5IG9iamVjdHMgY3JlYXRlZCBieSBfdGhpc18gS2V5Ym9hcmQgUGx1Z2luIGJhY2sgdG8gdGhlaXIgZGVmYXVsdCB1bi1wcmVzc2VkIHN0YXRlcy5cclxuICAgICAqIFRoaXMgY2FuIG9ubHkgcmVzZXQga2V5cyBjcmVhdGVkIHZpYSB0aGUgYGFkZEtleWAsIGBhZGRLZXlzYCBvciBgY3JlYXRlQ3Vyc29yS2V5c2AgbWV0aG9kcy5cclxuICAgICAqIElmIHlvdSBoYXZlIGNyZWF0ZWQgYSBLZXkgb2JqZWN0IGRpcmVjdGx5IHlvdSdsbCBuZWVkIHRvIHJlc2V0IGl0IHlvdXJzZWxmLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSBLZXlib2FyZCBQbHVnaW4gc2h1dHMgZG93biwgYnV0IGNhbiBiZVxyXG4gICAgICogaW52b2tlZCBkaXJlY3RseSBhdCBhbnkgdGltZSB5b3UgcmVxdWlyZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbiNyZXNldEtleXNcclxuICAgICAqIEBzaW5jZSAzLjE1LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW59IFRoaXMgS2V5Ym9hcmRQbHVnaW4gb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICByZXNldEtleXM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGtleXMgPSB0aGlzLmtleXM7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBCZWNhdXNlIGl0J3MgYSBzcGFyc2VseSBwb3B1bGF0ZWQgYXJyYXlcclxuICAgICAgICAgICAgaWYgKGtleXNbaV0pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGtleXNbaV0ucmVzZXQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2h1dHMgdGhpcyBLZXlib2FyZCBQbHVnaW4gZG93bi4gVGhpcyBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIHRhc2tzOlxyXG4gICAgICogXHJcbiAgICAgKiAxIC0gUmVzZXRzIGFsbCBrZXlzIGNyZWF0ZWQgYnkgdGhpcyBLZXlib2FyZCBwbHVnaW4uXHJcbiAgICAgKiAyIC0gU3RvcHMgYW5kIHJlbW92ZXMgdGhlIGtleWJvYXJkIGV2ZW50IGxpc3RlbmVycy5cclxuICAgICAqIDMgLSBDbGVhcnMgb3V0IGFueSBwZW5kaW5nIHJlcXVlc3RzIGluIHRoZSBxdWV1ZSwgd2l0aG91dCBwcm9jZXNzaW5nIHRoZW0uXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4jc2h1dGRvd25cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHNodXRkb3duOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVzZXRLZXlzKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lSW5wdXRQbHVnaW4ubWFuYWdlci51c2VRdWV1ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmVJbnB1dFBsdWdpbi5wbHVnaW5FdmVudHMub2ZmKElucHV0RXZlbnRzLlVQREFURSwgdGhpcy51cGRhdGUsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNjZW5lSW5wdXRQbHVnaW4ubWFuYWdlci5ldmVudHMub2ZmKElucHV0RXZlbnRzLk1BTkFHRVJfUFJPQ0VTUywgdGhpcy51cGRhdGUsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nYW1lLmV2ZW50cy5vZmYoR2FtZUV2ZW50cy5CTFVSLCB0aGlzLnJlc2V0S2V5cyk7XHJcblxyXG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XHJcblxyXG4gICAgICAgIHRoaXMucXVldWUgPSBbXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGlzIEtleWJvYXJkIFBsdWdpbiBpbnN0YW5jZSBhbmQgYWxsIHJlZmVyZW5jZXMgaXQgaG9sZHMsIHBsdXMgY2xlYXJzIG91dCBsb2NhbCBhcnJheXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW4jZGVzdHJveVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnNodXRkb3duKCk7XHJcblxyXG4gICAgICAgIHZhciBrZXlzID0gdGhpcy5rZXlzO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgQmVjYXVzZSBpdCdzIGEgc3BhcnNlbHkgcG9wdWxhdGVkIGFycmF5XHJcbiAgICAgICAgICAgIGlmIChrZXlzW2ldKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBrZXlzW2ldLmRlc3Ryb3koKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5rZXlzID0gW107XHJcbiAgICAgICAgdGhpcy5jb21ib3MgPSBbXTtcclxuICAgICAgICB0aGlzLnF1ZXVlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2NlbmVJbnB1dFBsdWdpbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCB0aW1lIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbiN0aW1lXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjExLjBcclxuICAgICAqL1xyXG4gICAgdGltZToge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2VuZUlucHV0UGx1Z2luLm1hbmFnZXIudGltZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG4vKipcclxuICogQW4gaW5zdGFuY2Ugb2YgdGhlIEtleWJvYXJkIFBsdWdpbiBjbGFzcywgaWYgZW5hYmxlZCB2aWEgdGhlIGBpbnB1dC5rZXlib2FyZGAgU2NlbmUgb3IgR2FtZSBDb25maWcgcHJvcGVydHkuXHJcbiAqIFVzZSB0aGlzIHRvIGNyZWF0ZSBLZXkgb2JqZWN0cyBhbmQgbGlzdGVuIGZvciBrZXlib2FyZCBzcGVjaWZpYyBldmVudHMuXHJcbiAqXHJcbiAqIEBuYW1lIFBoYXNlci5JbnB1dC5JbnB1dFBsdWdpbiNrZXlib2FyZFxyXG4gKiBAdHlwZSB7P1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbn1cclxuICogQHNpbmNlIDMuMTAuMFxyXG4gKi9cclxuSW5wdXRQbHVnaW5DYWNoZS5yZWdpc3RlcignS2V5Ym9hcmRQbHVnaW4nLCBLZXlib2FyZFBsdWdpbiwgJ2tleWJvYXJkJywgJ2tleWJvYXJkJywgJ2lucHV0S2V5Ym9hcmQnKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gS2V5Ym9hcmRQbHVnaW47XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/KeyboardPlugin.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/keyboard/combo/AdvanceKeyCombo.js":
/*!*************************************************************************!*\
!*** ./node_modules/phaser/src/input/keyboard/combo/AdvanceKeyCombo.js ***!
\*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Used internally by the KeyCombo class.\r\n * Return `true` if it reached the end of the combo, `false` if not.\r\n *\r\n * @function Phaser.Input.Keyboard.KeyCombo.AdvanceKeyCombo\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {KeyboardEvent} event - The native Keyboard Event.\r\n * @param {Phaser.Input.Keyboard.KeyCombo} combo - The KeyCombo object to advance.\r\n *\r\n * @return {boolean} `true` if it reached the end of the combo, `false` if not.\r\n */\r\nvar AdvanceKeyCombo = function (event, combo)\r\n{\r\n combo.timeLastMatched = event.timeStamp;\r\n combo.index++;\r\n\r\n if (combo.index === combo.size)\r\n {\r\n return true;\r\n }\r\n else\r\n {\r\n combo.current = combo.keyCodes[combo.index];\r\n return false;\r\n }\r\n};\r\n\r\nmodule.exports = AdvanceKeyCombo;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9jb21iby9BZHZhbmNlS2V5Q29tYm8uanM/ZjZkMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QixXQUFXLCtCQUErQjtBQUMxQztBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQva2V5Ym9hcmQvY29tYm8vQWR2YW5jZUtleUNvbWJvLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBLZXlDb21ibyBjbGFzcy5cclxuICogUmV0dXJuIGB0cnVlYCBpZiBpdCByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGNvbWJvLCBgZmFsc2VgIGlmIG5vdC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21iby5BZHZhbmNlS2V5Q29tYm9cclxuICogQHByaXZhdGVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnQgLSBUaGUgbmF0aXZlIEtleWJvYXJkIEV2ZW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21ib30gY29tYm8gLSBUaGUgS2V5Q29tYm8gb2JqZWN0IHRvIGFkdmFuY2UuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiBpdCByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGNvbWJvLCBgZmFsc2VgIGlmIG5vdC5cclxuICovXHJcbnZhciBBZHZhbmNlS2V5Q29tYm8gPSBmdW5jdGlvbiAoZXZlbnQsIGNvbWJvKVxyXG57XHJcbiAgICBjb21iby50aW1lTGFzdE1hdGNoZWQgPSBldmVudC50aW1lU3RhbXA7XHJcbiAgICBjb21iby5pbmRleCsrO1xyXG5cclxuICAgIGlmIChjb21iby5pbmRleCA9PT0gY29tYm8uc2l6ZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBjb21iby5jdXJyZW50ID0gY29tYm8ua2V5Q29kZXNbY29tYm8uaW5kZXhdO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQWR2YW5jZUtleUNvbWJvO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/combo/AdvanceKeyCombo.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/keyboard/combo/KeyCombo.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/input/keyboard/combo/KeyCombo.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/input/keyboard/events/index.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar ProcessKeyCombo = __webpack_require__(/*! ./ProcessKeyCombo */ \"./node_modules/phaser/src/input/keyboard/combo/ProcessKeyCombo.js\");\r\nvar ResetKeyCombo = __webpack_require__(/*! ./ResetKeyCombo */ \"./node_modules/phaser/src/input/keyboard/combo/ResetKeyCombo.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A KeyCombo will listen for a specific string of keys from the Keyboard, and when it receives them\r\n * it will emit a `keycombomatch` event from the Keyboard Manager.\r\n *\r\n * The keys to be listened for can be defined as:\r\n *\r\n * A string (i.e. 'ATARI')\r\n * An array of either integers (key codes) or strings, or a mixture of both\r\n * An array of objects (such as Key objects) with a public 'keyCode' property\r\n *\r\n * For example, to listen for the Konami code (up, up, down, down, left, right, left, right, b, a, enter)\r\n * you could pass the following array of key codes:\r\n *\r\n * ```javascript\r\n * this.input.keyboard.createCombo([ 38, 38, 40, 40, 37, 39, 37, 39, 66, 65, 13 ], { resetOnMatch: true });\r\n *\r\n * this.input.keyboard.on('keycombomatch', function (event) {\r\n * console.log('Konami Code entered!');\r\n * });\r\n * ```\r\n *\r\n * Or, to listen for the user entering the word PHASER:\r\n *\r\n * ```javascript\r\n * this.input.keyboard.createCombo('PHASER');\r\n * ```\r\n *\r\n * @class KeyCombo\r\n * @memberof Phaser.Input.Keyboard\r\n * @constructor\r\n * @listens Phaser.Input.Keyboard.Events#ANY_KEY_DOWN\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Keyboard.KeyboardPlugin} keyboardPlugin - A reference to the Keyboard Plugin.\r\n * @param {(string|integer[]|object[])} keys - The keys that comprise this combo.\r\n * @param {Phaser.Types.Input.Keyboard.KeyComboConfig} [config] - A Key Combo configuration object.\r\n */\r\nvar KeyCombo = new Class({\r\n\r\n initialize:\r\n\r\n function KeyCombo (keyboardPlugin, keys, config)\r\n {\r\n if (config === undefined) { config = {}; }\r\n\r\n // Can't have a zero or single length combo (string or array based)\r\n if (keys.length < 2)\r\n {\r\n return false;\r\n }\r\n\r\n /**\r\n * A reference to the Keyboard Manager\r\n *\r\n * @name Phaser.Input.Keyboard.KeyCombo#manager\r\n * @type {Phaser.Input.Keyboard.KeyboardPlugin}\r\n * @since 3.0.0\r\n */\r\n this.manager = keyboardPlugin;\r\n\r\n /**\r\n * A flag that controls if this Key Combo is actively processing keys or not.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyCombo#enabled\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.enabled = true;\r\n\r\n /**\r\n * An array of the keycodes that comprise this combo.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyCombo#keyCodes\r\n * @type {array}\r\n * @default []\r\n * @since 3.0.0\r\n */\r\n this.keyCodes = [];\r\n\r\n // if 'keys' is a string we need to get the keycode of each character in it\r\n\r\n for (var i = 0; i < keys.length; i++)\r\n {\r\n var char = keys[i];\r\n\r\n if (typeof char === 'string')\r\n {\r\n this.keyCodes.push(char.toUpperCase().charCodeAt(0));\r\n }\r\n else if (typeof char === 'number')\r\n {\r\n this.keyCodes.push(char);\r\n }\r\n else if (char.hasOwnProperty('keyCode'))\r\n {\r\n this.keyCodes.push(char.keyCode);\r\n }\r\n }\r\n\r\n /**\r\n * The current keyCode the combo is waiting for.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyCombo#current\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n this.current = this.keyCodes[0];\r\n\r\n /**\r\n * The current index of the key being waited for in the 'keys' string.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyCombo#index\r\n * @type {integer}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.index = 0;\r\n\r\n /**\r\n * The length of this combo (in keycodes)\r\n *\r\n * @name Phaser.Input.Keyboard.KeyCombo#size\r\n * @type {number}\r\n * @since 3.0.0\r\n */\r\n this.size = this.keyCodes.length;\r\n\r\n /**\r\n * The time the previous key in the combo was matched.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyCombo#timeLastMatched\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.timeLastMatched = 0;\r\n\r\n /**\r\n * Has this Key Combo been matched yet?\r\n *\r\n * @name Phaser.Input.Keyboard.KeyCombo#matched\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.matched = false;\r\n\r\n /**\r\n * The time the entire combo was matched.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyCombo#timeMatched\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.timeMatched = 0;\r\n\r\n /**\r\n * If they press the wrong key do we reset the combo?\r\n *\r\n * @name Phaser.Input.Keyboard.KeyCombo#resetOnWrongKey\r\n * @type {boolean}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.resetOnWrongKey = GetFastValue(config, 'resetOnWrongKey', true);\r\n\r\n /**\r\n * The max delay in ms between each key press. Above this the combo is reset. 0 means disabled.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyCombo#maxKeyDelay\r\n * @type {integer}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.maxKeyDelay = GetFastValue(config, 'maxKeyDelay', 0);\r\n\r\n /**\r\n * If previously matched and they press the first key of the combo again, will it reset?\r\n *\r\n * @name Phaser.Input.Keyboard.KeyCombo#resetOnMatch\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.resetOnMatch = GetFastValue(config, 'resetOnMatch', false);\r\n\r\n /**\r\n * If the combo matches, will it delete itself?\r\n *\r\n * @name Phaser.Input.Keyboard.KeyCombo#deleteOnMatch\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.deleteOnMatch = GetFastValue(config, 'deleteOnMatch', false);\r\n\r\n var _this = this;\r\n\r\n var onKeyDownHandler = function (event)\r\n {\r\n if (_this.matched || !_this.enabled)\r\n {\r\n return;\r\n }\r\n\r\n var matched = ProcessKeyCombo(event, _this);\r\n\r\n if (matched)\r\n {\r\n _this.manager.emit(Events.COMBO_MATCH, _this, event);\r\n\r\n if (_this.resetOnMatch)\r\n {\r\n ResetKeyCombo(_this);\r\n }\r\n else if (_this.deleteOnMatch)\r\n {\r\n _this.destroy();\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * The internal Key Down handler.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyCombo#onKeyDown\r\n * @private\r\n * @type {KeyboardKeydownCallback}\r\n * @fires Phaser.Input.Keyboard.Events#COMBO_MATCH\r\n * @since 3.0.0\r\n */\r\n this.onKeyDown = onKeyDownHandler;\r\n\r\n this.manager.on(Events.ANY_KEY_DOWN, this.onKeyDown);\r\n },\r\n\r\n /**\r\n * How far complete is this combo? A value between 0 and 1.\r\n *\r\n * @name Phaser.Input.Keyboard.KeyCombo#progress\r\n * @type {number}\r\n * @readonly\r\n * @since 3.0.0\r\n */\r\n progress: {\r\n\r\n get: function ()\r\n {\r\n return this.index / this.size;\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Destroys this Key Combo and all of its references.\r\n *\r\n * @method Phaser.Input.Keyboard.KeyCombo#destroy\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.enabled = false;\r\n this.keyCodes = [];\r\n\r\n this.manager.off(Events.ANY_KEY_DOWN, this.onKeyDown);\r\n\r\n this.manager = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = KeyCombo;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9jb21iby9LZXlDb21iby5qcz8zZmU2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsc0VBQXNCO0FBQzFDLGFBQWEsbUJBQU8sQ0FBQywyRUFBVztBQUNoQyxtQkFBbUIsbUJBQU8sQ0FBQyxrR0FBb0M7QUFDL0Qsc0JBQXNCLG1CQUFPLENBQUMsNEZBQW1CO0FBQ2pELG9CQUFvQixtQkFBTyxDQUFDLHdGQUFpQjs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0ZBQW9GLHFCQUFxQjtBQUN6RztBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUNBQXFDO0FBQ2hELFdBQVcsNEJBQTRCO0FBQ3ZDLFdBQVcsMkNBQTJDO0FBQ3REO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLG1DQUFtQyxhQUFhOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx1QkFBdUIsaUJBQWlCO0FBQ3hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQva2V5Ym9hcmQvY29tYm8vS2V5Q29tYm8uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuLi9ldmVudHMnKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIFByb2Nlc3NLZXlDb21ibyA9IHJlcXVpcmUoJy4vUHJvY2Vzc0tleUNvbWJvJyk7XHJcbnZhciBSZXNldEtleUNvbWJvID0gcmVxdWlyZSgnLi9SZXNldEtleUNvbWJvJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIEtleUNvbWJvIHdpbGwgbGlzdGVuIGZvciBhIHNwZWNpZmljIHN0cmluZyBvZiBrZXlzIGZyb20gdGhlIEtleWJvYXJkLCBhbmQgd2hlbiBpdCByZWNlaXZlcyB0aGVtXHJcbiAqIGl0IHdpbGwgZW1pdCBhIGBrZXljb21ib21hdGNoYCBldmVudCBmcm9tIHRoZSBLZXlib2FyZCBNYW5hZ2VyLlxyXG4gKlxyXG4gKiBUaGUga2V5cyB0byBiZSBsaXN0ZW5lZCBmb3IgY2FuIGJlIGRlZmluZWQgYXM6XHJcbiAqXHJcbiAqIEEgc3RyaW5nIChpLmUuICdBVEFSSScpXHJcbiAqIEFuIGFycmF5IG9mIGVpdGhlciBpbnRlZ2VycyAoa2V5IGNvZGVzKSBvciBzdHJpbmdzLCBvciBhIG1peHR1cmUgb2YgYm90aFxyXG4gKiBBbiBhcnJheSBvZiBvYmplY3RzIChzdWNoIGFzIEtleSBvYmplY3RzKSB3aXRoIGEgcHVibGljICdrZXlDb2RlJyBwcm9wZXJ0eVxyXG4gKlxyXG4gKiBGb3IgZXhhbXBsZSwgdG8gbGlzdGVuIGZvciB0aGUgS29uYW1pIGNvZGUgKHVwLCB1cCwgZG93biwgZG93biwgbGVmdCwgcmlnaHQsIGxlZnQsIHJpZ2h0LCBiLCBhLCBlbnRlcilcclxuICogeW91IGNvdWxkIHBhc3MgdGhlIGZvbGxvd2luZyBhcnJheSBvZiBrZXkgY29kZXM6XHJcbiAqXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5pbnB1dC5rZXlib2FyZC5jcmVhdGVDb21ibyhbIDM4LCAzOCwgNDAsIDQwLCAzNywgMzksIDM3LCAzOSwgNjYsIDY1LCAxMyBdLCB7IHJlc2V0T25NYXRjaDogdHJ1ZSB9KTtcclxuICpcclxuICogdGhpcy5pbnB1dC5rZXlib2FyZC5vbigna2V5Y29tYm9tYXRjaCcsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gKiAgICAgY29uc29sZS5sb2coJ0tvbmFtaSBDb2RlIGVudGVyZWQhJyk7XHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogT3IsIHRvIGxpc3RlbiBmb3IgdGhlIHVzZXIgZW50ZXJpbmcgdGhlIHdvcmQgUEhBU0VSOlxyXG4gKlxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMuaW5wdXQua2V5Ym9hcmQuY3JlYXRlQ29tYm8oJ1BIQVNFUicpO1xyXG4gKiBgYGBcclxuICpcclxuICogQGNsYXNzIEtleUNvbWJvXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuSW5wdXQuS2V5Ym9hcmRcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBsaXN0ZW5zIFBoYXNlci5JbnB1dC5LZXlib2FyZC5FdmVudHMjQU5ZX0tFWV9ET1dOXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlib2FyZFBsdWdpbn0ga2V5Ym9hcmRQbHVnaW4gLSBBIHJlZmVyZW5jZSB0byB0aGUgS2V5Ym9hcmQgUGx1Z2luLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8aW50ZWdlcltdfG9iamVjdFtdKX0ga2V5cyAtIFRoZSBrZXlzIHRoYXQgY29tcHJpc2UgdGhpcyBjb21iby5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuSW5wdXQuS2V5Ym9hcmQuS2V5Q29tYm9Db25maWd9IFtjb25maWddIC0gQSBLZXkgQ29tYm8gY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAqL1xyXG52YXIgS2V5Q29tYm8gPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gS2V5Q29tYm8gKGtleWJvYXJkUGx1Z2luLCBrZXlzLCBjb25maWcpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGNvbmZpZyA9PT0gdW5kZWZpbmVkKSB7IGNvbmZpZyA9IHt9OyB9XHJcblxyXG4gICAgICAgIC8vICBDYW4ndCBoYXZlIGEgemVybyBvciBzaW5nbGUgbGVuZ3RoIGNvbWJvIChzdHJpbmcgb3IgYXJyYXkgYmFzZWQpXHJcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoIDwgMilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBLZXlib2FyZCBNYW5hZ2VyXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29tYm8jbWFuYWdlclxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0ga2V5Ym9hcmRQbHVnaW47XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgZmxhZyB0aGF0IGNvbnRyb2xzIGlmIHRoaXMgS2V5IENvbWJvIGlzIGFjdGl2ZWx5IHByb2Nlc3Npbmcga2V5cyBvciBub3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29tYm8jZW5hYmxlZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBbiBhcnJheSBvZiB0aGUga2V5Y29kZXMgdGhhdCBjb21wcmlzZSB0aGlzIGNvbWJvLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvbWJvI2tleUNvZGVzXHJcbiAgICAgICAgICogQHR5cGUge2FycmF5fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFtdXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5rZXlDb2RlcyA9IFtdO1xyXG5cclxuICAgICAgICAvLyAgaWYgJ2tleXMnIGlzIGEgc3RyaW5nIHdlIG5lZWQgdG8gZ2V0IHRoZSBrZXljb2RlIG9mIGVhY2ggY2hhcmFjdGVyIGluIGl0XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjaGFyID0ga2V5c1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2hhciA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMua2V5Q29kZXMucHVzaChjaGFyLnRvVXBwZXJDYXNlKCkuY2hhckNvZGVBdCgwKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGNoYXIgPT09ICdudW1iZXInKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmtleUNvZGVzLnB1c2goY2hhcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY2hhci5oYXNPd25Qcm9wZXJ0eSgna2V5Q29kZScpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmtleUNvZGVzLnB1c2goY2hhci5rZXlDb2RlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGN1cnJlbnQga2V5Q29kZSB0aGUgY29tYm8gaXMgd2FpdGluZyBmb3IuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29tYm8jY3VycmVudFxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3VycmVudCA9IHRoaXMua2V5Q29kZXNbMF07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBrZXkgYmVpbmcgd2FpdGVkIGZvciBpbiB0aGUgJ2tleXMnIHN0cmluZy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21ibyNpbmRleFxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmluZGV4ID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGxlbmd0aCBvZiB0aGlzIGNvbWJvIChpbiBrZXljb2RlcylcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21ibyNzaXplXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNpemUgPSB0aGlzLmtleUNvZGVzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRpbWUgdGhlIHByZXZpb3VzIGtleSBpbiB0aGUgY29tYm8gd2FzIG1hdGNoZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29tYm8jdGltZUxhc3RNYXRjaGVkXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aW1lTGFzdE1hdGNoZWQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBIYXMgdGhpcyBLZXkgQ29tYm8gYmVlbiBtYXRjaGVkIHlldD9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21ibyNtYXRjaGVkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1hdGNoZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRpbWUgdGhlIGVudGlyZSBjb21ibyB3YXMgbWF0Y2hlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21ibyN0aW1lTWF0Y2hlZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudGltZU1hdGNoZWQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiB0aGV5IHByZXNzIHRoZSB3cm9uZyBrZXkgZG8gd2UgcmVzZXQgdGhlIGNvbWJvP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvbWJvI3Jlc2V0T25Xcm9uZ0tleVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJlc2V0T25Xcm9uZ0tleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdyZXNldE9uV3JvbmdLZXknLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG1heCBkZWxheSBpbiBtcyBiZXR3ZWVuIGVhY2gga2V5IHByZXNzLiBBYm92ZSB0aGlzIHRoZSBjb21ibyBpcyByZXNldC4gMCBtZWFucyBkaXNhYmxlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21ibyNtYXhLZXlEZWxheVxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1heEtleURlbGF5ID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ21heEtleURlbGF5JywgMCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHByZXZpb3VzbHkgbWF0Y2hlZCBhbmQgdGhleSBwcmVzcyB0aGUgZmlyc3Qga2V5IG9mIHRoZSBjb21ibyBhZ2Fpbiwgd2lsbCBpdCByZXNldD9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21ibyNyZXNldE9uTWF0Y2hcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVzZXRPbk1hdGNoID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3Jlc2V0T25NYXRjaCcsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgdGhlIGNvbWJvIG1hdGNoZXMsIHdpbGwgaXQgZGVsZXRlIGl0c2VsZj9cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21ibyNkZWxldGVPbk1hdGNoXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRlbGV0ZU9uTWF0Y2ggPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZGVsZXRlT25NYXRjaCcsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgdmFyIG9uS2V5RG93bkhhbmRsZXIgPSBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoX3RoaXMubWF0Y2hlZCB8fCAhX3RoaXMuZW5hYmxlZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgbWF0Y2hlZCA9IFByb2Nlc3NLZXlDb21ibyhldmVudCwgX3RoaXMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG1hdGNoZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLm1hbmFnZXIuZW1pdChFdmVudHMuQ09NQk9fTUFUQ0gsIF90aGlzLCBldmVudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLnJlc2V0T25NYXRjaClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBSZXNldEtleUNvbWJvKF90aGlzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKF90aGlzLmRlbGV0ZU9uTWF0Y2gpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuZGVzdHJveSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGludGVybmFsIEtleSBEb3duIGhhbmRsZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29tYm8jb25LZXlEb3duXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAdHlwZSB7S2V5Ym9hcmRLZXlkb3duQ2FsbGJhY2t9XHJcbiAgICAgICAgICogQGZpcmVzIFBoYXNlci5JbnB1dC5LZXlib2FyZC5FdmVudHMjQ09NQk9fTUFUQ0hcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9uS2V5RG93biA9IG9uS2V5RG93bkhhbmRsZXI7XHJcblxyXG4gICAgICAgIHRoaXMubWFuYWdlci5vbihFdmVudHMuQU5ZX0tFWV9ET1dOLCB0aGlzLm9uS2V5RG93bik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSG93IGZhciBjb21wbGV0ZSBpcyB0aGlzIGNvbWJvPyBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29tYm8jcHJvZ3Jlc3NcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBwcm9ncmVzczoge1xyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbmRleCAvIHRoaXMuc2l6ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoaXMgS2V5IENvbWJvIGFuZCBhbGwgb2YgaXRzIHJlZmVyZW5jZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29tYm8jZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5rZXlDb2RlcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLm1hbmFnZXIub2ZmKEV2ZW50cy5BTllfS0VZX0RPV04sIHRoaXMub25LZXlEb3duKTtcclxuXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBLZXlDb21ibztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/combo/KeyCombo.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/keyboard/combo/ProcessKeyCombo.js":
/*!*************************************************************************!*\
!*** ./node_modules/phaser/src/input/keyboard/combo/ProcessKeyCombo.js ***!
\*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar AdvanceKeyCombo = __webpack_require__(/*! ./AdvanceKeyCombo */ \"./node_modules/phaser/src/input/keyboard/combo/AdvanceKeyCombo.js\");\r\n\r\n/**\r\n * Used internally by the KeyCombo class.\r\n *\r\n * @function Phaser.Input.Keyboard.KeyCombo.ProcessKeyCombo\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {KeyboardEvent} event - The native Keyboard Event.\r\n * @param {Phaser.Input.Keyboard.KeyCombo} combo - The KeyCombo object to be processed.\r\n *\r\n * @return {boolean} `true` if the combo was matched, otherwise `false`.\r\n */\r\nvar ProcessKeyCombo = function (event, combo)\r\n{\r\n if (combo.matched)\r\n {\r\n return true;\r\n }\r\n\r\n var comboMatched = false;\r\n var keyMatched = false;\r\n\r\n if (event.keyCode === combo.current)\r\n {\r\n // Key was correct\r\n\r\n if (combo.index > 0 && combo.maxKeyDelay > 0)\r\n {\r\n // We have to check to see if the delay between\r\n // the new key and the old one was too long (if enabled)\r\n\r\n var timeLimit = combo.timeLastMatched + combo.maxKeyDelay;\r\n\r\n // Check if they pressed it in time or not\r\n if (event.timeStamp <= timeLimit)\r\n {\r\n keyMatched = true;\r\n comboMatched = AdvanceKeyCombo(event, combo);\r\n }\r\n }\r\n else\r\n {\r\n keyMatched = true;\r\n\r\n // We don't check the time for the first key pressed, so just advance it\r\n comboMatched = AdvanceKeyCombo(event, combo);\r\n }\r\n }\r\n\r\n if (!keyMatched && combo.resetOnWrongKey)\r\n {\r\n // Wrong key was pressed\r\n combo.index = 0;\r\n combo.current = combo.keyCodes[0];\r\n }\r\n\r\n if (comboMatched)\r\n {\r\n combo.timeLastMatched = event.timeStamp;\r\n combo.matched = true;\r\n combo.timeMatched = event.timeStamp;\r\n }\r\n\r\n return comboMatched;\r\n};\r\n\r\nmodule.exports = ProcessKeyCombo;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9jb21iby9Qcm9jZXNzS2V5Q29tYm8uanM/NDE0NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsc0JBQXNCLG1CQUFPLENBQUMsNEZBQW1COztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QixXQUFXLCtCQUErQjtBQUMxQztBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9jb21iby9Qcm9jZXNzS2V5Q29tYm8uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBBZHZhbmNlS2V5Q29tYm8gPSByZXF1aXJlKCcuL0FkdmFuY2VLZXlDb21ibycpO1xyXG5cclxuLyoqXHJcbiAqIFVzZWQgaW50ZXJuYWxseSBieSB0aGUgS2V5Q29tYm8gY2xhc3MuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29tYm8uUHJvY2Vzc0tleUNvbWJvXHJcbiAqIEBwcml2YXRlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50IC0gVGhlIG5hdGl2ZSBLZXlib2FyZCBFdmVudC5cclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29tYm99IGNvbWJvIC0gVGhlIEtleUNvbWJvIG9iamVjdCB0byBiZSBwcm9jZXNzZWQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgY29tYm8gd2FzIG1hdGNoZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxudmFyIFByb2Nlc3NLZXlDb21ibyA9IGZ1bmN0aW9uIChldmVudCwgY29tYm8pXHJcbntcclxuICAgIGlmIChjb21iby5tYXRjaGVkKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjb21ib01hdGNoZWQgPSBmYWxzZTtcclxuICAgIHZhciBrZXlNYXRjaGVkID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IGNvbWJvLmN1cnJlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIEtleSB3YXMgY29ycmVjdFxyXG5cclxuICAgICAgICBpZiAoY29tYm8uaW5kZXggPiAwICYmIGNvbWJvLm1heEtleURlbGF5ID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBXZSBoYXZlIHRvIGNoZWNrIHRvIHNlZSBpZiB0aGUgZGVsYXkgYmV0d2VlblxyXG4gICAgICAgICAgICAvLyAgdGhlIG5ldyBrZXkgYW5kIHRoZSBvbGQgb25lIHdhcyB0b28gbG9uZyAoaWYgZW5hYmxlZClcclxuXHJcbiAgICAgICAgICAgIHZhciB0aW1lTGltaXQgPSBjb21iby50aW1lTGFzdE1hdGNoZWQgKyBjb21iby5tYXhLZXlEZWxheTtcclxuXHJcbiAgICAgICAgICAgIC8vICBDaGVjayBpZiB0aGV5IHByZXNzZWQgaXQgaW4gdGltZSBvciBub3RcclxuICAgICAgICAgICAgaWYgKGV2ZW50LnRpbWVTdGFtcCA8PSB0aW1lTGltaXQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGtleU1hdGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgY29tYm9NYXRjaGVkID0gQWR2YW5jZUtleUNvbWJvKGV2ZW50LCBjb21ibyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAga2V5TWF0Y2hlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAvLyAgV2UgZG9uJ3QgY2hlY2sgdGhlIHRpbWUgZm9yIHRoZSBmaXJzdCBrZXkgcHJlc3NlZCwgc28ganVzdCBhZHZhbmNlIGl0XHJcbiAgICAgICAgICAgIGNvbWJvTWF0Y2hlZCA9IEFkdmFuY2VLZXlDb21ibyhldmVudCwgY29tYm8pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWtleU1hdGNoZWQgJiYgY29tYm8ucmVzZXRPbldyb25nS2V5KVxyXG4gICAge1xyXG4gICAgICAgIC8vICBXcm9uZyBrZXkgd2FzIHByZXNzZWRcclxuICAgICAgICBjb21iby5pbmRleCA9IDA7XHJcbiAgICAgICAgY29tYm8uY3VycmVudCA9IGNvbWJvLmtleUNvZGVzWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb21ib01hdGNoZWQpXHJcbiAgICB7XHJcbiAgICAgICAgY29tYm8udGltZUxhc3RNYXRjaGVkID0gZXZlbnQudGltZVN0YW1wO1xyXG4gICAgICAgIGNvbWJvLm1hdGNoZWQgPSB0cnVlO1xyXG4gICAgICAgIGNvbWJvLnRpbWVNYXRjaGVkID0gZXZlbnQudGltZVN0YW1wO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb21ib01hdGNoZWQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFByb2Nlc3NLZXlDb21ibztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/combo/ProcessKeyCombo.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/keyboard/combo/ResetKeyCombo.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/src/input/keyboard/combo/ResetKeyCombo.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Used internally by the KeyCombo class.\r\n *\r\n * @function Phaser.Input.Keyboard.KeyCombo.ResetKeyCombo\r\n * @private\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Keyboard.KeyCombo} combo - The KeyCombo to reset.\r\n *\r\n * @return {Phaser.Input.Keyboard.KeyCombo} The KeyCombo.\r\n */\r\nvar ResetKeyCombo = function (combo)\r\n{\r\n combo.current = combo.keyCodes[0];\r\n combo.index = 0;\r\n combo.timeLastMatched = 0;\r\n combo.matched = false;\r\n combo.timeMatched = 0;\r\n\r\n return combo;\r\n};\r\n\r\nmodule.exports = ResetKeyCombo;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9jb21iby9SZXNldEtleUNvbWJvLmpzPzI2ZjAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywrQkFBK0I7QUFDMUM7QUFDQSxZQUFZLCtCQUErQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9jb21iby9SZXNldEtleUNvbWJvLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBLZXlDb21ibyBjbGFzcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21iby5SZXNldEtleUNvbWJvXHJcbiAqIEBwcml2YXRlXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21ib30gY29tYm8gLSBUaGUgS2V5Q29tYm8gdG8gcmVzZXQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb21ib30gVGhlIEtleUNvbWJvLlxyXG4gKi9cclxudmFyIFJlc2V0S2V5Q29tYm8gPSBmdW5jdGlvbiAoY29tYm8pXHJcbntcclxuICAgIGNvbWJvLmN1cnJlbnQgPSBjb21iby5rZXlDb2Rlc1swXTtcclxuICAgIGNvbWJvLmluZGV4ID0gMDtcclxuICAgIGNvbWJvLnRpbWVMYXN0TWF0Y2hlZCA9IDA7XHJcbiAgICBjb21iby5tYXRjaGVkID0gZmFsc2U7XHJcbiAgICBjb21iby50aW1lTWF0Y2hlZCA9IDA7XHJcblxyXG4gICAgcmV0dXJuIGNvbWJvO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBSZXNldEtleUNvbWJvO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/combo/ResetKeyCombo.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/keyboard/events/ANY_KEY_DOWN_EVENT.js":
/*!*****************************************************************************!*\
!*** ./node_modules/phaser/src/input/keyboard/events/ANY_KEY_DOWN_EVENT.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Global Key Down Event.\r\n * \r\n * This event is dispatched by the Keyboard Plugin when any key on the keyboard is pressed down.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.keyboard.on('keydown', listener)`.\r\n * \r\n * You can also listen for a specific key being pressed. See [Keyboard.Events.KEY_DOWN]{@linkcode Phaser.Input.Keyboard.Events#event:KEY_DOWN} for details.\r\n * \r\n * Finally, you can create Key objects, which you can also listen for events from. See [Keyboard.Events.DOWN]{@linkcode Phaser.Input.Keyboard.Events#event:DOWN} for details.\r\n * \r\n * _Note_: Many keyboards are unable to process certain combinations of keys due to hardware limitations known as ghosting.\r\n * Read [this article on ghosting]{@link http://www.html5gamedevs.com/topic/4876-impossible-to-use-more-than-2-keyboard-input-buttons-at-the-same-time/} for details.\r\n *\r\n * Also, please be aware that some browser extensions can disable or override Phaser keyboard handling.\r\n * For example, the Chrome extension vimium is known to disable Phaser from using the D key, while EverNote disables the backtick key.\r\n * There are others. So, please check your extensions if you find you have specific keys that don't work.\r\n *\r\n * @event Phaser.Input.Keyboard.Events#ANY_KEY_DOWN\r\n * @since 3.0.0\r\n * \r\n * @param {KeyboardEvent} event - The native DOM Keyboard Event. You can inspect this to learn more about the key that was pressed, any modifiers, etc.\r\n */\r\nmodule.exports = 'keydown';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9ldmVudHMvQU5ZX0tFWV9ET1dOX0VWRU5ULmpzPzNiZmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0ZBQXdGLHNEQUFzRDtBQUM5STtBQUNBLDhHQUE4RyxrREFBa0Q7QUFDaEs7QUFDQTtBQUNBLG1DQUFtQyxxSEFBcUg7QUFDeEo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQva2V5Ym9hcmQvZXZlbnRzL0FOWV9LRVlfRE9XTl9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHbG9iYWwgS2V5IERvd24gRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIEtleWJvYXJkIFBsdWdpbiB3aGVuIGFueSBrZXkgb24gdGhlIGtleWJvYXJkIGlzIHByZXNzZWQgZG93bi5cclxuICogXHJcbiAqIExpc3RlbiB0byB0aGlzIGV2ZW50IGZyb20gd2l0aGluIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmlucHV0LmtleWJvYXJkLm9uKCdrZXlkb3duJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIFlvdSBjYW4gYWxzbyBsaXN0ZW4gZm9yIGEgc3BlY2lmaWMga2V5IGJlaW5nIHByZXNzZWQuIFNlZSBbS2V5Ym9hcmQuRXZlbnRzLktFWV9ET1dOXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50cyNldmVudDpLRVlfRE9XTn0gZm9yIGRldGFpbHMuXHJcbiAqIFxyXG4gKiBGaW5hbGx5LCB5b3UgY2FuIGNyZWF0ZSBLZXkgb2JqZWN0cywgd2hpY2ggeW91IGNhbiBhbHNvIGxpc3RlbiBmb3IgZXZlbnRzIGZyb20uIFNlZSBbS2V5Ym9hcmQuRXZlbnRzLkRPV05de0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuRXZlbnRzI2V2ZW50OkRPV059IGZvciBkZXRhaWxzLlxyXG4gKiBcclxuICogX05vdGVfOiBNYW55IGtleWJvYXJkcyBhcmUgdW5hYmxlIHRvIHByb2Nlc3MgY2VydGFpbiBjb21iaW5hdGlvbnMgb2Yga2V5cyBkdWUgdG8gaGFyZHdhcmUgbGltaXRhdGlvbnMga25vd24gYXMgZ2hvc3RpbmcuXHJcbiAqIFJlYWQgW3RoaXMgYXJ0aWNsZSBvbiBnaG9zdGluZ117QGxpbmsgaHR0cDovL3d3dy5odG1sNWdhbWVkZXZzLmNvbS90b3BpYy80ODc2LWltcG9zc2libGUtdG8tdXNlLW1vcmUtdGhhbi0yLWtleWJvYXJkLWlucHV0LWJ1dHRvbnMtYXQtdGhlLXNhbWUtdGltZS99IGZvciBkZXRhaWxzLlxyXG4gKlxyXG4gKiBBbHNvLCBwbGVhc2UgYmUgYXdhcmUgdGhhdCBzb21lIGJyb3dzZXIgZXh0ZW5zaW9ucyBjYW4gZGlzYWJsZSBvciBvdmVycmlkZSBQaGFzZXIga2V5Ym9hcmQgaGFuZGxpbmcuXHJcbiAqIEZvciBleGFtcGxlLCB0aGUgQ2hyb21lIGV4dGVuc2lvbiB2aW1pdW0gaXMga25vd24gdG8gZGlzYWJsZSBQaGFzZXIgZnJvbSB1c2luZyB0aGUgRCBrZXksIHdoaWxlIEV2ZXJOb3RlIGRpc2FibGVzIHRoZSBiYWNrdGljayBrZXkuXHJcbiAqIFRoZXJlIGFyZSBvdGhlcnMuIFNvLCBwbGVhc2UgY2hlY2sgeW91ciBleHRlbnNpb25zIGlmIHlvdSBmaW5kIHlvdSBoYXZlIHNwZWNpZmljIGtleXMgdGhhdCBkb24ndCB3b3JrLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50cyNBTllfS0VZX0RPV05cclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50IC0gVGhlIG5hdGl2ZSBET00gS2V5Ym9hcmQgRXZlbnQuIFlvdSBjYW4gaW5zcGVjdCB0aGlzIHRvIGxlYXJuIG1vcmUgYWJvdXQgdGhlIGtleSB0aGF0IHdhcyBwcmVzc2VkLCBhbnkgbW9kaWZpZXJzLCBldGMuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdrZXlkb3duJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/events/ANY_KEY_DOWN_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/keyboard/events/ANY_KEY_UP_EVENT.js":
/*!***************************************************************************!*\
!*** ./node_modules/phaser/src/input/keyboard/events/ANY_KEY_UP_EVENT.js ***!
\***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Global Key Up Event.\r\n * \r\n * This event is dispatched by the Keyboard Plugin when any key on the keyboard is released.\r\n * \r\n * Listen to this event from within a Scene using: `this.input.keyboard.on('keyup', listener)`.\r\n * \r\n * You can also listen for a specific key being released. See [Keyboard.Events.KEY_UP]{@linkcode Phaser.Input.Keyboard.Events#event:KEY_UP} for details.\r\n * \r\n * Finally, you can create Key objects, which you can also listen for events from. See [Keyboard.Events.UP]{@linkcode Phaser.Input.Keyboard.Events#event:UP} for details.\r\n *\r\n * @event Phaser.Input.Keyboard.Events#ANY_KEY_UP\r\n * @since 3.0.0\r\n * \r\n * @param {KeyboardEvent} event - The native DOM Keyboard Event. You can inspect this to learn more about the key that was released, any modifiers, etc.\r\n */\r\nmodule.exports = 'keyup';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9ldmVudHMvQU5ZX0tFWV9VUF9FVkVOVC5qcz8xN2I1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVGQUF1RixvREFBb0Q7QUFDM0k7QUFDQSw0R0FBNEcsZ0RBQWdEO0FBQzVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9ldmVudHMvQU5ZX0tFWV9VUF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBHbG9iYWwgS2V5IFVwIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBLZXlib2FyZCBQbHVnaW4gd2hlbiBhbnkga2V5IG9uIHRoZSBrZXlib2FyZCBpcyByZWxlYXNlZC5cclxuICogXHJcbiAqIExpc3RlbiB0byB0aGlzIGV2ZW50IGZyb20gd2l0aGluIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmlucHV0LmtleWJvYXJkLm9uKCdrZXl1cCcsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBZb3UgY2FuIGFsc28gbGlzdGVuIGZvciBhIHNwZWNpZmljIGtleSBiZWluZyByZWxlYXNlZC4gU2VlIFtLZXlib2FyZC5FdmVudHMuS0VZX1VQXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50cyNldmVudDpLRVlfVVB9IGZvciBkZXRhaWxzLlxyXG4gKiBcclxuICogRmluYWxseSwgeW91IGNhbiBjcmVhdGUgS2V5IG9iamVjdHMsIHdoaWNoIHlvdSBjYW4gYWxzbyBsaXN0ZW4gZm9yIGV2ZW50cyBmcm9tLiBTZWUgW0tleWJvYXJkLkV2ZW50cy5VUF17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5LZXlib2FyZC5FdmVudHMjZXZlbnQ6VVB9IGZvciBkZXRhaWxzLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50cyNBTllfS0VZX1VQXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudCAtIFRoZSBuYXRpdmUgRE9NIEtleWJvYXJkIEV2ZW50LiBZb3UgY2FuIGluc3BlY3QgdGhpcyB0byBsZWFybiBtb3JlIGFib3V0IHRoZSBrZXkgdGhhdCB3YXMgcmVsZWFzZWQsIGFueSBtb2RpZmllcnMsIGV0Yy5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2tleXVwJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/events/ANY_KEY_UP_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/keyboard/events/COMBO_MATCH_EVENT.js":
/*!****************************************************************************!*\
!*** ./node_modules/phaser/src/input/keyboard/events/COMBO_MATCH_EVENT.js ***!
\****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Key Combo Match Event.\r\n * \r\n * This event is dispatched by the Keyboard Plugin when a [Key Combo]{@link Phaser.Input.Keyboard.KeyCombo} is matched.\r\n * \r\n * Listen for this event from the Key Plugin after a combo has been created:\r\n * \r\n * ```javascript\r\n * this.input.keyboard.createCombo([ 38, 38, 40, 40, 37, 39, 37, 39, 66, 65, 13 ], { resetOnMatch: true });\r\n *\r\n * this.input.keyboard.on('keycombomatch', function (event) {\r\n * console.log('Konami Code entered!');\r\n * });\r\n * ```\r\n *\r\n * @event Phaser.Input.Keyboard.Events#COMBO_MATCH\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Keyboard.KeyCombo} keycombo - The Key Combo object that was matched.\r\n * @param {KeyboardEvent} event - The native DOM Keyboard Event of the final key in the combo. You can inspect this to learn more about any modifiers, etc.\r\n */\r\nmodule.exports = 'keycombomatch';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9ldmVudHMvQ09NQk9fTUFUQ0hfRVZFTlQuanM/NTc2OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esc0VBQXNFLHFDQUFxQztBQUMzRztBQUNBO0FBQ0E7QUFDQTtBQUNBLG9GQUFvRixxQkFBcUI7QUFDekc7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLCtCQUErQjtBQUMxQyxXQUFXLGNBQWM7QUFDekI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2tleWJvYXJkL2V2ZW50cy9DT01CT19NQVRDSF9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBLZXkgQ29tYm8gTWF0Y2ggRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIEtleWJvYXJkIFBsdWdpbiB3aGVuIGEgW0tleSBDb21ib117QGxpbmsgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvbWJvfSBpcyBtYXRjaGVkLlxyXG4gKiBcclxuICogTGlzdGVuIGZvciB0aGlzIGV2ZW50IGZyb20gdGhlIEtleSBQbHVnaW4gYWZ0ZXIgYSBjb21ibyBoYXMgYmVlbiBjcmVhdGVkOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmlucHV0LmtleWJvYXJkLmNyZWF0ZUNvbWJvKFsgMzgsIDM4LCA0MCwgNDAsIDM3LCAzOSwgMzcsIDM5LCA2NiwgNjUsIDEzIF0sIHsgcmVzZXRPbk1hdGNoOiB0cnVlIH0pO1xyXG4gKlxyXG4gKiB0aGlzLmlucHV0LmtleWJvYXJkLm9uKCdrZXljb21ib21hdGNoJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAqICAgICBjb25zb2xlLmxvZygnS29uYW1pIENvZGUgZW50ZXJlZCEnKTtcclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50cyNDT01CT19NQVRDSFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LktleWJvYXJkLktleUNvbWJvfSBrZXljb21ibyAtIFRoZSBLZXkgQ29tYm8gb2JqZWN0IHRoYXQgd2FzIG1hdGNoZWQuXHJcbiAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnQgLSBUaGUgbmF0aXZlIERPTSBLZXlib2FyZCBFdmVudCBvZiB0aGUgZmluYWwga2V5IGluIHRoZSBjb21iby4gWW91IGNhbiBpbnNwZWN0IHRoaXMgdG8gbGVhcm4gbW9yZSBhYm91dCBhbnkgbW9kaWZpZXJzLCBldGMuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdrZXljb21ib21hdGNoJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/events/COMBO_MATCH_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/keyboard/events/DOWN_EVENT.js":
/*!*********************************************************************!*\
!*** ./node_modules/phaser/src/input/keyboard/events/DOWN_EVENT.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Key Down Event.\r\n * \r\n * This event is dispatched by a [Key]{@link Phaser.Input.Keyboard.Key} object when it is pressed.\r\n * \r\n * Listen for this event from the Key object instance directly:\r\n * \r\n * ```javascript\r\n * var spaceBar = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SPACE);\r\n * \r\n * spaceBar.on('down', listener)\r\n * ```\r\n * \r\n * You can also create a generic 'global' listener. See [Keyboard.Events.ANY_KEY_DOWN]{@linkcode Phaser.Input.Keyboard.Events#event:ANY_KEY_DOWN} for details.\r\n *\r\n * @event Phaser.Input.Keyboard.Events#DOWN\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Keyboard.Key} key - The Key object that was pressed.\r\n * @param {KeyboardEvent} event - The native DOM Keyboard Event. You can inspect this to learn more about any modifiers, etc.\r\n */\r\nmodule.exports = 'down';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9ldmVudHMvRE9XTl9FVkVOVC5qcz9jMmU4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsZ0NBQWdDO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVGQUF1RiwwREFBMEQ7QUFDako7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDBCQUEwQjtBQUNyQyxXQUFXLGNBQWM7QUFDekI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2tleWJvYXJkL2V2ZW50cy9ET1dOX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEtleSBEb3duIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgW0tleV17QGxpbmsgUGhhc2VyLklucHV0LktleWJvYXJkLktleX0gb2JqZWN0IHdoZW4gaXQgaXMgcHJlc3NlZC5cclxuICogXHJcbiAqIExpc3RlbiBmb3IgdGhpcyBldmVudCBmcm9tIHRoZSBLZXkgb2JqZWN0IGluc3RhbmNlIGRpcmVjdGx5OlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB2YXIgc3BhY2VCYXIgPSB0aGlzLmlucHV0LmtleWJvYXJkLmFkZEtleShQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuU1BBQ0UpO1xyXG4gKiBcclxuICogc3BhY2VCYXIub24oJ2Rvd24nLCBsaXN0ZW5lcilcclxuICogYGBgXHJcbiAqIFxyXG4gKiBZb3UgY2FuIGFsc28gY3JlYXRlIGEgZ2VuZXJpYyAnZ2xvYmFsJyBsaXN0ZW5lci4gU2VlIFtLZXlib2FyZC5FdmVudHMuQU5ZX0tFWV9ET1dOXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50cyNldmVudDpBTllfS0VZX0RPV059IGZvciBkZXRhaWxzLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50cyNET1dOXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5fSBrZXkgLSBUaGUgS2V5IG9iamVjdCB0aGF0IHdhcyBwcmVzc2VkLlxyXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50IC0gVGhlIG5hdGl2ZSBET00gS2V5Ym9hcmQgRXZlbnQuIFlvdSBjYW4gaW5zcGVjdCB0aGlzIHRvIGxlYXJuIG1vcmUgYWJvdXQgYW55IG1vZGlmaWVycywgZXRjLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnZG93bic7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/events/DOWN_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/keyboard/events/KEY_DOWN_EVENT.js":
/*!*************************************************************************!*\
!*** ./node_modules/phaser/src/input/keyboard/events/KEY_DOWN_EVENT.js ***!
\*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Key Down Event.\r\n * \r\n * This event is dispatched by the Keyboard Plugin when any key on the keyboard is pressed down.\r\n * \r\n * Unlike the `ANY_KEY_DOWN` event, this one has a special dynamic event name. For example, to listen for the `A` key being pressed\r\n * use the following from within a Scene: `this.input.keyboard.on('keydown-A', listener)`. You can replace the `-A` part of the event\r\n * name with any valid [Key Code string]{@link Phaser.Input.Keyboard.KeyCodes}. For example, this will listen for the space bar: \r\n * `this.input.keyboard.on('keydown-SPACE', listener)`.\r\n * \r\n * You can also create a generic 'global' listener. See [Keyboard.Events.ANY_KEY_DOWN]{@linkcode Phaser.Input.Keyboard.Events#event:ANY_KEY_DOWN} for details.\r\n * \r\n * Finally, you can create Key objects, which you can also listen for events from. See [Keyboard.Events.DOWN]{@linkcode Phaser.Input.Keyboard.Events#event:DOWN} for details.\r\n * \r\n * _Note_: Many keyboards are unable to process certain combinations of keys due to hardware limitations known as ghosting.\r\n * Read [this article on ghosting]{@link http://www.html5gamedevs.com/topic/4876-impossible-to-use-more-than-2-keyboard-input-buttons-at-the-same-time/} for details.\r\n *\r\n * Also, please be aware that some browser extensions can disable or override Phaser keyboard handling.\r\n * For example, the Chrome extension vimium is known to disable Phaser from using the D key, while EverNote disables the backtick key.\r\n * There are others. So, please check your extensions if you find you have specific keys that don't work.\r\n *\r\n * @event Phaser.Input.Keyboard.Events#KEY_DOWN\r\n * @since 3.0.0\r\n * \r\n * @param {KeyboardEvent} event - The native DOM Keyboard Event. You can inspect this to learn more about the key that was pressed, any modifiers, etc.\r\n */\r\nmodule.exports = 'keydown-';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9ldmVudHMvS0VZX0RPV05fRVZFTlQuanM/MTA2NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMscUNBQXFDO0FBQzlFO0FBQ0E7QUFDQSx1RkFBdUYsMERBQTBEO0FBQ2pKO0FBQ0EsOEdBQThHLGtEQUFrRDtBQUNoSztBQUNBO0FBQ0EsbUNBQW1DLHFIQUFxSDtBQUN4SjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9ldmVudHMvS0VZX0RPV05fRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgS2V5IERvd24gRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIEtleWJvYXJkIFBsdWdpbiB3aGVuIGFueSBrZXkgb24gdGhlIGtleWJvYXJkIGlzIHByZXNzZWQgZG93bi5cclxuICogXHJcbiAqIFVubGlrZSB0aGUgYEFOWV9LRVlfRE9XTmAgZXZlbnQsIHRoaXMgb25lIGhhcyBhIHNwZWNpYWwgZHluYW1pYyBldmVudCBuYW1lLiBGb3IgZXhhbXBsZSwgdG8gbGlzdGVuIGZvciB0aGUgYEFgIGtleSBiZWluZyBwcmVzc2VkXHJcbiAqIHVzZSB0aGUgZm9sbG93aW5nIGZyb20gd2l0aGluIGEgU2NlbmU6IGB0aGlzLmlucHV0LmtleWJvYXJkLm9uKCdrZXlkb3duLUEnLCBsaXN0ZW5lcilgLiBZb3UgY2FuIHJlcGxhY2UgdGhlIGAtQWAgcGFydCBvZiB0aGUgZXZlbnRcclxuICogbmFtZSB3aXRoIGFueSB2YWxpZCBbS2V5IENvZGUgc3RyaW5nXXtAbGluayBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXN9LiBGb3IgZXhhbXBsZSwgdGhpcyB3aWxsIGxpc3RlbiBmb3IgdGhlIHNwYWNlIGJhcjogXHJcbiAqIGB0aGlzLmlucHV0LmtleWJvYXJkLm9uKCdrZXlkb3duLVNQQUNFJywgbGlzdGVuZXIpYC5cclxuICogXHJcbiAqIFlvdSBjYW4gYWxzbyBjcmVhdGUgYSBnZW5lcmljICdnbG9iYWwnIGxpc3RlbmVyLiBTZWUgW0tleWJvYXJkLkV2ZW50cy5BTllfS0VZX0RPV05de0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuRXZlbnRzI2V2ZW50OkFOWV9LRVlfRE9XTn0gZm9yIGRldGFpbHMuXHJcbiAqIFxyXG4gKiBGaW5hbGx5LCB5b3UgY2FuIGNyZWF0ZSBLZXkgb2JqZWN0cywgd2hpY2ggeW91IGNhbiBhbHNvIGxpc3RlbiBmb3IgZXZlbnRzIGZyb20uIFNlZSBbS2V5Ym9hcmQuRXZlbnRzLkRPV05de0BsaW5rY29kZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuRXZlbnRzI2V2ZW50OkRPV059IGZvciBkZXRhaWxzLlxyXG4gKiBcclxuICogX05vdGVfOiBNYW55IGtleWJvYXJkcyBhcmUgdW5hYmxlIHRvIHByb2Nlc3MgY2VydGFpbiBjb21iaW5hdGlvbnMgb2Yga2V5cyBkdWUgdG8gaGFyZHdhcmUgbGltaXRhdGlvbnMga25vd24gYXMgZ2hvc3RpbmcuXHJcbiAqIFJlYWQgW3RoaXMgYXJ0aWNsZSBvbiBnaG9zdGluZ117QGxpbmsgaHR0cDovL3d3dy5odG1sNWdhbWVkZXZzLmNvbS90b3BpYy80ODc2LWltcG9zc2libGUtdG8tdXNlLW1vcmUtdGhhbi0yLWtleWJvYXJkLWlucHV0LWJ1dHRvbnMtYXQtdGhlLXNhbWUtdGltZS99IGZvciBkZXRhaWxzLlxyXG4gKlxyXG4gKiBBbHNvLCBwbGVhc2UgYmUgYXdhcmUgdGhhdCBzb21lIGJyb3dzZXIgZXh0ZW5zaW9ucyBjYW4gZGlzYWJsZSBvciBvdmVycmlkZSBQaGFzZXIga2V5Ym9hcmQgaGFuZGxpbmcuXHJcbiAqIEZvciBleGFtcGxlLCB0aGUgQ2hyb21lIGV4dGVuc2lvbiB2aW1pdW0gaXMga25vd24gdG8gZGlzYWJsZSBQaGFzZXIgZnJvbSB1c2luZyB0aGUgRCBrZXksIHdoaWxlIEV2ZXJOb3RlIGRpc2FibGVzIHRoZSBiYWNrdGljayBrZXkuXHJcbiAqIFRoZXJlIGFyZSBvdGhlcnMuIFNvLCBwbGVhc2UgY2hlY2sgeW91ciBleHRlbnNpb25zIGlmIHlvdSBmaW5kIHlvdSBoYXZlIHNwZWNpZmljIGtleXMgdGhhdCBkb24ndCB3b3JrLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50cyNLRVlfRE9XTlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnQgLSBUaGUgbmF0aXZlIERPTSBLZXlib2FyZCBFdmVudC4gWW91IGNhbiBpbnNwZWN0IHRoaXMgdG8gbGVhcm4gbW9yZSBhYm91dCB0aGUga2V5IHRoYXQgd2FzIHByZXNzZWQsIGFueSBtb2RpZmllcnMsIGV0Yy5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gJ2tleWRvd24tJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/events/KEY_DOWN_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/keyboard/events/KEY_UP_EVENT.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/src/input/keyboard/events/KEY_UP_EVENT.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Key Up Event.\r\n * \r\n * This event is dispatched by the Keyboard Plugin when any key on the keyboard is released.\r\n * \r\n * Unlike the `ANY_KEY_UP` event, this one has a special dynamic event name. For example, to listen for the `A` key being released\r\n * use the following from within a Scene: `this.input.keyboard.on('keyup-A', listener)`. You can replace the `-A` part of the event\r\n * name with any valid [Key Code string]{@link Phaser.Input.Keyboard.KeyCodes}. For example, this will listen for the space bar: \r\n * `this.input.keyboard.on('keyup-SPACE', listener)`.\r\n * \r\n * You can also create a generic 'global' listener. See [Keyboard.Events.ANY_KEY_UP]{@linkcode Phaser.Input.Keyboard.Events#event:ANY_KEY_UP} for details.\r\n * \r\n * Finally, you can create Key objects, which you can also listen for events from. See [Keyboard.Events.UP]{@linkcode Phaser.Input.Keyboard.Events#event:UP} for details.\r\n *\r\n * @event Phaser.Input.Keyboard.Events#KEY_UP\r\n * @since 3.0.0\r\n * \r\n * @param {KeyboardEvent} event - The native DOM Keyboard Event. You can inspect this to learn more about the key that was released, any modifiers, etc.\r\n */\r\nmodule.exports = 'keyup-';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9ldmVudHMvS0VZX1VQX0VWRU5ULmpzPzBmMmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLHFDQUFxQztBQUM5RTtBQUNBO0FBQ0EscUZBQXFGLHdEQUF3RDtBQUM3STtBQUNBLDRHQUE0RyxnREFBZ0Q7QUFDNUo7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2tleWJvYXJkL2V2ZW50cy9LRVlfVVBfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgS2V5IFVwIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBLZXlib2FyZCBQbHVnaW4gd2hlbiBhbnkga2V5IG9uIHRoZSBrZXlib2FyZCBpcyByZWxlYXNlZC5cclxuICogXHJcbiAqIFVubGlrZSB0aGUgYEFOWV9LRVlfVVBgIGV2ZW50LCB0aGlzIG9uZSBoYXMgYSBzcGVjaWFsIGR5bmFtaWMgZXZlbnQgbmFtZS4gRm9yIGV4YW1wbGUsIHRvIGxpc3RlbiBmb3IgdGhlIGBBYCBrZXkgYmVpbmcgcmVsZWFzZWRcclxuICogdXNlIHRoZSBmb2xsb3dpbmcgZnJvbSB3aXRoaW4gYSBTY2VuZTogYHRoaXMuaW5wdXQua2V5Ym9hcmQub24oJ2tleXVwLUEnLCBsaXN0ZW5lcilgLiBZb3UgY2FuIHJlcGxhY2UgdGhlIGAtQWAgcGFydCBvZiB0aGUgZXZlbnRcclxuICogbmFtZSB3aXRoIGFueSB2YWxpZCBbS2V5IENvZGUgc3RyaW5nXXtAbGluayBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXN9LiBGb3IgZXhhbXBsZSwgdGhpcyB3aWxsIGxpc3RlbiBmb3IgdGhlIHNwYWNlIGJhcjogXHJcbiAqIGB0aGlzLmlucHV0LmtleWJvYXJkLm9uKCdrZXl1cC1TUEFDRScsIGxpc3RlbmVyKWAuXHJcbiAqIFxyXG4gKiBZb3UgY2FuIGFsc28gY3JlYXRlIGEgZ2VuZXJpYyAnZ2xvYmFsJyBsaXN0ZW5lci4gU2VlIFtLZXlib2FyZC5FdmVudHMuQU5ZX0tFWV9VUF17QGxpbmtjb2RlIFBoYXNlci5JbnB1dC5LZXlib2FyZC5FdmVudHMjZXZlbnQ6QU5ZX0tFWV9VUH0gZm9yIGRldGFpbHMuXHJcbiAqIFxyXG4gKiBGaW5hbGx5LCB5b3UgY2FuIGNyZWF0ZSBLZXkgb2JqZWN0cywgd2hpY2ggeW91IGNhbiBhbHNvIGxpc3RlbiBmb3IgZXZlbnRzIGZyb20uIFNlZSBbS2V5Ym9hcmQuRXZlbnRzLlVQXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50cyNldmVudDpVUH0gZm9yIGRldGFpbHMuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuRXZlbnRzI0tFWV9VUFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnQgLSBUaGUgbmF0aXZlIERPTSBLZXlib2FyZCBFdmVudC4gWW91IGNhbiBpbnNwZWN0IHRoaXMgdG8gbGVhcm4gbW9yZSBhYm91dCB0aGUga2V5IHRoYXQgd2FzIHJlbGVhc2VkLCBhbnkgbW9kaWZpZXJzLCBldGMuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdrZXl1cC0nO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/events/KEY_UP_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/keyboard/events/UP_EVENT.js":
/*!*******************************************************************!*\
!*** ./node_modules/phaser/src/input/keyboard/events/UP_EVENT.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Key Up Event.\r\n * \r\n * This event is dispatched by a [Key]{@link Phaser.Input.Keyboard.Key} object when it is released.\r\n * \r\n * Listen for this event from the Key object instance directly:\r\n * \r\n * ```javascript\r\n * var spaceBar = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SPACE);\r\n * \r\n * spaceBar.on('up', listener)\r\n * ```\r\n * \r\n * You can also create a generic 'global' listener. See [Keyboard.Events.ANY_KEY_UP]{@linkcode Phaser.Input.Keyboard.Events#event:ANY_KEY_UP} for details.\r\n *\r\n * @event Phaser.Input.Keyboard.Events#UP\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Input.Keyboard.Key} key - The Key object that was released.\r\n * @param {KeyboardEvent} event - The native DOM Keyboard Event. You can inspect this to learn more about any modifiers, etc.\r\n */\r\nmodule.exports = 'up';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9ldmVudHMvVVBfRVZFTlQuanM/ZWY2NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGdDQUFnQztBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRkFBcUYsd0RBQXdEO0FBQzdJO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywwQkFBMEI7QUFDckMsV0FBVyxjQUFjO0FBQ3pCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9ldmVudHMvVVBfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgS2V5IFVwIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IGEgW0tleV17QGxpbmsgUGhhc2VyLklucHV0LktleWJvYXJkLktleX0gb2JqZWN0IHdoZW4gaXQgaXMgcmVsZWFzZWQuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gZm9yIHRoaXMgZXZlbnQgZnJvbSB0aGUgS2V5IG9iamVjdCBpbnN0YW5jZSBkaXJlY3RseTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdmFyIHNwYWNlQmFyID0gdGhpcy5pbnB1dC5rZXlib2FyZC5hZGRLZXkoUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlNQQUNFKTtcclxuICogXHJcbiAqIHNwYWNlQmFyLm9uKCd1cCcsIGxpc3RlbmVyKVxyXG4gKiBgYGBcclxuICogXHJcbiAqIFlvdSBjYW4gYWxzbyBjcmVhdGUgYSBnZW5lcmljICdnbG9iYWwnIGxpc3RlbmVyLiBTZWUgW0tleWJvYXJkLkV2ZW50cy5BTllfS0VZX1VQXXtAbGlua2NvZGUgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50cyNldmVudDpBTllfS0VZX1VQfSBmb3IgZGV0YWlscy5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5JbnB1dC5LZXlib2FyZC5FdmVudHMjVVBcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXl9IGtleSAtIFRoZSBLZXkgb2JqZWN0IHRoYXQgd2FzIHJlbGVhc2VkLlxyXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50IC0gVGhlIG5hdGl2ZSBET00gS2V5Ym9hcmQgRXZlbnQuIFlvdSBjYW4gaW5zcGVjdCB0aGlzIHRvIGxlYXJuIG1vcmUgYWJvdXQgYW55IG1vZGlmaWVycywgZXRjLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAndXAnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/events/UP_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/keyboard/events/index.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/input/keyboard/events/index.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Input.Keyboard.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n ANY_KEY_DOWN: __webpack_require__(/*! ./ANY_KEY_DOWN_EVENT */ \"./node_modules/phaser/src/input/keyboard/events/ANY_KEY_DOWN_EVENT.js\"),\r\n ANY_KEY_UP: __webpack_require__(/*! ./ANY_KEY_UP_EVENT */ \"./node_modules/phaser/src/input/keyboard/events/ANY_KEY_UP_EVENT.js\"),\r\n COMBO_MATCH: __webpack_require__(/*! ./COMBO_MATCH_EVENT */ \"./node_modules/phaser/src/input/keyboard/events/COMBO_MATCH_EVENT.js\"),\r\n DOWN: __webpack_require__(/*! ./DOWN_EVENT */ \"./node_modules/phaser/src/input/keyboard/events/DOWN_EVENT.js\"),\r\n KEY_DOWN: __webpack_require__(/*! ./KEY_DOWN_EVENT */ \"./node_modules/phaser/src/input/keyboard/events/KEY_DOWN_EVENT.js\"),\r\n KEY_UP: __webpack_require__(/*! ./KEY_UP_EVENT */ \"./node_modules/phaser/src/input/keyboard/events/KEY_UP_EVENT.js\"),\r\n UP: __webpack_require__(/*! ./UP_EVENT */ \"./node_modules/phaser/src/input/keyboard/events/UP_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9ldmVudHMvaW5kZXguanM/M2MyNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLG1HQUFzQjtBQUNoRCxnQkFBZ0IsbUJBQU8sQ0FBQywrRkFBb0I7QUFDNUMsaUJBQWlCLG1CQUFPLENBQUMsaUdBQXFCO0FBQzlDLFVBQVUsbUJBQU8sQ0FBQyxtRkFBYztBQUNoQyxjQUFjLG1CQUFPLENBQUMsMkZBQWtCO0FBQ3hDLFlBQVksbUJBQU8sQ0FBQyx1RkFBZ0I7QUFDcEMsUUFBUSxtQkFBTyxDQUFDLCtFQUFZOztBQUU1QiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2tleWJvYXJkL2V2ZW50cy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50c1xyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIEFOWV9LRVlfRE9XTjogcmVxdWlyZSgnLi9BTllfS0VZX0RPV05fRVZFTlQnKSxcclxuICAgIEFOWV9LRVlfVVA6IHJlcXVpcmUoJy4vQU5ZX0tFWV9VUF9FVkVOVCcpLFxyXG4gICAgQ09NQk9fTUFUQ0g6IHJlcXVpcmUoJy4vQ09NQk9fTUFUQ0hfRVZFTlQnKSxcclxuICAgIERPV046IHJlcXVpcmUoJy4vRE9XTl9FVkVOVCcpLFxyXG4gICAgS0VZX0RPV046IHJlcXVpcmUoJy4vS0VZX0RPV05fRVZFTlQnKSxcclxuICAgIEtFWV9VUDogcmVxdWlyZSgnLi9LRVlfVVBfRVZFTlQnKSxcclxuICAgIFVQOiByZXF1aXJlKCcuL1VQX0VWRU5UJylcclxuXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/events/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/keyboard/index.js":
/*!*********************************************************!*\
!*** ./node_modules/phaser/src/input/keyboard/index.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Input.Keyboard\r\n */\r\n\r\nmodule.exports = {\r\n\r\n Events: __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/input/keyboard/events/index.js\"),\r\n\r\n KeyboardManager: __webpack_require__(/*! ./KeyboardManager */ \"./node_modules/phaser/src/input/keyboard/KeyboardManager.js\"),\r\n KeyboardPlugin: __webpack_require__(/*! ./KeyboardPlugin */ \"./node_modules/phaser/src/input/keyboard/KeyboardPlugin.js\"),\r\n\r\n Key: __webpack_require__(/*! ./keys/Key */ \"./node_modules/phaser/src/input/keyboard/keys/Key.js\"),\r\n KeyCodes: __webpack_require__(/*! ./keys/KeyCodes */ \"./node_modules/phaser/src/input/keyboard/keys/KeyCodes.js\"),\r\n\r\n KeyCombo: __webpack_require__(/*! ./combo/KeyCombo */ \"./node_modules/phaser/src/input/keyboard/combo/KeyCombo.js\"),\r\n\r\n JustDown: __webpack_require__(/*! ./keys/JustDown */ \"./node_modules/phaser/src/input/keyboard/keys/JustDown.js\"),\r\n JustUp: __webpack_require__(/*! ./keys/JustUp */ \"./node_modules/phaser/src/input/keyboard/keys/JustUp.js\"),\r\n DownDuration: __webpack_require__(/*! ./keys/DownDuration */ \"./node_modules/phaser/src/input/keyboard/keys/DownDuration.js\"),\r\n UpDuration: __webpack_require__(/*! ./keys/UpDuration */ \"./node_modules/phaser/src/input/keyboard/keys/UpDuration.js\")\r\n \r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9pbmRleC5qcz9lMGQ0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLDBFQUFVOztBQUU5QixxQkFBcUIsbUJBQU8sQ0FBQyxzRkFBbUI7QUFDaEQsb0JBQW9CLG1CQUFPLENBQUMsb0ZBQWtCOztBQUU5QyxTQUFTLG1CQUFPLENBQUMsd0VBQVk7QUFDN0IsY0FBYyxtQkFBTyxDQUFDLGtGQUFpQjs7QUFFdkMsY0FBYyxtQkFBTyxDQUFDLG9GQUFrQjs7QUFFeEMsY0FBYyxtQkFBTyxDQUFDLGtGQUFpQjtBQUN2QyxZQUFZLG1CQUFPLENBQUMsOEVBQWU7QUFDbkMsa0JBQWtCLG1CQUFPLENBQUMsMEZBQXFCO0FBQy9DLGdCQUFnQixtQkFBTyxDQUFDLHNGQUFtQjs7QUFFM0MiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLklucHV0LktleWJvYXJkXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgRXZlbnRzOiByZXF1aXJlKCcuL2V2ZW50cycpLFxyXG5cclxuICAgIEtleWJvYXJkTWFuYWdlcjogcmVxdWlyZSgnLi9LZXlib2FyZE1hbmFnZXInKSxcclxuICAgIEtleWJvYXJkUGx1Z2luOiByZXF1aXJlKCcuL0tleWJvYXJkUGx1Z2luJyksXHJcblxyXG4gICAgS2V5OiByZXF1aXJlKCcuL2tleXMvS2V5JyksXHJcbiAgICBLZXlDb2RlczogcmVxdWlyZSgnLi9rZXlzL0tleUNvZGVzJyksXHJcblxyXG4gICAgS2V5Q29tYm86IHJlcXVpcmUoJy4vY29tYm8vS2V5Q29tYm8nKSxcclxuXHJcbiAgICBKdXN0RG93bjogcmVxdWlyZSgnLi9rZXlzL0p1c3REb3duJyksXHJcbiAgICBKdXN0VXA6IHJlcXVpcmUoJy4va2V5cy9KdXN0VXAnKSxcclxuICAgIERvd25EdXJhdGlvbjogcmVxdWlyZSgnLi9rZXlzL0Rvd25EdXJhdGlvbicpLFxyXG4gICAgVXBEdXJhdGlvbjogcmVxdWlyZSgnLi9rZXlzL1VwRHVyYXRpb24nKVxyXG4gICAgXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/keyboard/keys/DownDuration.js":
/*!*********************************************************************!*\
!*** ./node_modules/phaser/src/input/keyboard/keys/DownDuration.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns `true` if the Key was pressed down within the `duration` value given, based on the current\r\n * game clock time. Or `false` if it either isn't down, or was pressed down longer ago than the given duration.\r\n *\r\n * @function Phaser.Input.Keyboard.DownDuration\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Keyboard.Key} key - The Key object to test.\r\n * @param {integer} [duration=50] - The duration, in ms, within which the key must have been pressed down.\r\n *\r\n * @return {boolean} `true` if the Key was pressed down within `duration` ms ago, otherwise `false`.\r\n */\r\nvar DownDuration = function (key, duration)\r\n{\r\n if (duration === undefined) { duration = 50; }\r\n\r\n var current = key.plugin.game.loop.time - key.timeDown;\r\n\r\n return (key.isDown && current < duration);\r\n};\r\n\r\nmodule.exports = DownDuration;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9rZXlzL0Rvd25EdXJhdGlvbi5qcz81MmZlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMEJBQTBCO0FBQ3JDLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsZUFBZTs7QUFFaEQ7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2tleWJvYXJkL2tleXMvRG93bkR1cmF0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIEtleSB3YXMgcHJlc3NlZCBkb3duIHdpdGhpbiB0aGUgYGR1cmF0aW9uYCB2YWx1ZSBnaXZlbiwgYmFzZWQgb24gdGhlIGN1cnJlbnRcclxuICogZ2FtZSBjbG9jayB0aW1lLiBPciBgZmFsc2VgIGlmIGl0IGVpdGhlciBpc24ndCBkb3duLCBvciB3YXMgcHJlc3NlZCBkb3duIGxvbmdlciBhZ28gdGhhbiB0aGUgZ2l2ZW4gZHVyYXRpb24uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuRG93bkR1cmF0aW9uXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXl9IGtleSAtIFRoZSBLZXkgb2JqZWN0IHRvIHRlc3QuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2R1cmF0aW9uPTUwXSAtIFRoZSBkdXJhdGlvbiwgaW4gbXMsIHdpdGhpbiB3aGljaCB0aGUga2V5IG11c3QgaGF2ZSBiZWVuIHByZXNzZWQgZG93bi5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBLZXkgd2FzIHByZXNzZWQgZG93biB3aXRoaW4gYGR1cmF0aW9uYCBtcyBhZ28sIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxudmFyIERvd25EdXJhdGlvbiA9IGZ1bmN0aW9uIChrZXksIGR1cmF0aW9uKVxyXG57XHJcbiAgICBpZiAoZHVyYXRpb24gPT09IHVuZGVmaW5lZCkgeyBkdXJhdGlvbiA9IDUwOyB9XHJcblxyXG4gICAgdmFyIGN1cnJlbnQgPSBrZXkucGx1Z2luLmdhbWUubG9vcC50aW1lIC0ga2V5LnRpbWVEb3duO1xyXG5cclxuICAgIHJldHVybiAoa2V5LmlzRG93biAmJiBjdXJyZW50IDwgZHVyYXRpb24pO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBEb3duRHVyYXRpb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/keys/DownDuration.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/keyboard/keys/JustDown.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/input/keyboard/keys/JustDown.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The justDown value allows you to test if this Key has just been pressed down or not.\r\n * \r\n * When you check this value it will return `true` if the Key is down, otherwise `false`.\r\n * \r\n * You can only call justDown once per key press. It will only return `true` once, until the Key is released and pressed down again.\r\n * This allows you to use it in situations where you want to check if this key is down without using an event, such as in a core game loop.\r\n *\r\n * @function Phaser.Input.Keyboard.JustDown\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Keyboard.Key} key - The Key to check to see if it's just down or not.\r\n *\r\n * @return {boolean} `true` if the Key was just pressed, otherwise `false`.\r\n */\r\nvar JustDown = function (key)\r\n{\r\n if (key._justDown)\r\n {\r\n key._justDown = false;\r\n\r\n return true;\r\n }\r\n else\r\n {\r\n return false;\r\n }\r\n};\r\n\r\nmodule.exports = JustDown;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9rZXlzL0p1c3REb3duLmpzPzc4YzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDBCQUEwQjtBQUNyQztBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9rZXlzL0p1c3REb3duLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIGp1c3REb3duIHZhbHVlIGFsbG93cyB5b3UgdG8gdGVzdCBpZiB0aGlzIEtleSBoYXMganVzdCBiZWVuIHByZXNzZWQgZG93biBvciBub3QuXHJcbiAqIFxyXG4gKiBXaGVuIHlvdSBjaGVjayB0aGlzIHZhbHVlIGl0IHdpbGwgcmV0dXJuIGB0cnVlYCBpZiB0aGUgS2V5IGlzIGRvd24sIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKiBcclxuICogWW91IGNhbiBvbmx5IGNhbGwganVzdERvd24gb25jZSBwZXIga2V5IHByZXNzLiBJdCB3aWxsIG9ubHkgcmV0dXJuIGB0cnVlYCBvbmNlLCB1bnRpbCB0aGUgS2V5IGlzIHJlbGVhc2VkIGFuZCBwcmVzc2VkIGRvd24gYWdhaW4uXHJcbiAqIFRoaXMgYWxsb3dzIHlvdSB0byB1c2UgaXQgaW4gc2l0dWF0aW9ucyB3aGVyZSB5b3Ugd2FudCB0byBjaGVjayBpZiB0aGlzIGtleSBpcyBkb3duIHdpdGhvdXQgdXNpbmcgYW4gZXZlbnQsIHN1Y2ggYXMgaW4gYSBjb3JlIGdhbWUgbG9vcC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5JbnB1dC5LZXlib2FyZC5KdXN0RG93blxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5fSBrZXkgLSBUaGUgS2V5IHRvIGNoZWNrIHRvIHNlZSBpZiBpdCdzIGp1c3QgZG93biBvciBub3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgS2V5IHdhcyBqdXN0IHByZXNzZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxudmFyIEp1c3REb3duID0gZnVuY3Rpb24gKGtleSlcclxue1xyXG4gICAgaWYgKGtleS5fanVzdERvd24pXHJcbiAgICB7XHJcbiAgICAgICAga2V5Ll9qdXN0RG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEp1c3REb3duO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/keys/JustDown.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/keyboard/keys/JustUp.js":
/*!***************************************************************!*\
!*** ./node_modules/phaser/src/input/keyboard/keys/JustUp.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The justUp value allows you to test if this Key has just been released or not.\r\n * \r\n * When you check this value it will return `true` if the Key is up, otherwise `false`.\r\n * \r\n * You can only call JustUp once per key release. It will only return `true` once, until the Key is pressed down and released again.\r\n * This allows you to use it in situations where you want to check if this key is up without using an event, such as in a core game loop.\r\n *\r\n * @function Phaser.Input.Keyboard.JustUp\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Keyboard.Key} key - The Key to check to see if it's just up or not.\r\n *\r\n * @return {boolean} `true` if the Key was just released, otherwise `false`.\r\n */\r\nvar JustUp = function (key)\r\n{\r\n if (key._justUp)\r\n {\r\n key._justUp = false;\r\n\r\n return true;\r\n }\r\n else\r\n {\r\n return false;\r\n }\r\n};\r\n\r\nmodule.exports = JustUp;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9rZXlzL0p1c3RVcC5qcz9lNDE3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywwQkFBMEI7QUFDckM7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQva2V5Ym9hcmQva2V5cy9KdXN0VXAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUganVzdFVwIHZhbHVlIGFsbG93cyB5b3UgdG8gdGVzdCBpZiB0aGlzIEtleSBoYXMganVzdCBiZWVuIHJlbGVhc2VkIG9yIG5vdC5cclxuICogXHJcbiAqIFdoZW4geW91IGNoZWNrIHRoaXMgdmFsdWUgaXQgd2lsbCByZXR1cm4gYHRydWVgIGlmIHRoZSBLZXkgaXMgdXAsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKiBcclxuICogWW91IGNhbiBvbmx5IGNhbGwgSnVzdFVwIG9uY2UgcGVyIGtleSByZWxlYXNlLiBJdCB3aWxsIG9ubHkgcmV0dXJuIGB0cnVlYCBvbmNlLCB1bnRpbCB0aGUgS2V5IGlzIHByZXNzZWQgZG93biBhbmQgcmVsZWFzZWQgYWdhaW4uXHJcbiAqIFRoaXMgYWxsb3dzIHlvdSB0byB1c2UgaXQgaW4gc2l0dWF0aW9ucyB3aGVyZSB5b3Ugd2FudCB0byBjaGVjayBpZiB0aGlzIGtleSBpcyB1cCB3aXRob3V0IHVzaW5nIGFuIGV2ZW50LCBzdWNoIGFzIGluIGEgY29yZSBnYW1lIGxvb3AuXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuSnVzdFVwXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXl9IGtleSAtIFRoZSBLZXkgdG8gY2hlY2sgdG8gc2VlIGlmIGl0J3MganVzdCB1cCBvciBub3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgS2V5IHdhcyBqdXN0IHJlbGVhc2VkLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICovXHJcbnZhciBKdXN0VXAgPSBmdW5jdGlvbiAoa2V5KVxyXG57XHJcbiAgICBpZiAoa2V5Ll9qdXN0VXApXHJcbiAgICB7XHJcbiAgICAgICAga2V5Ll9qdXN0VXAgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBKdXN0VXA7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/keys/JustUp.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/keyboard/keys/Key.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/input/keyboard/keys/Key.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/input/keyboard/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A generic Key object which can be passed to the Process functions (and so on)\r\n * keycode must be an integer\r\n *\r\n * @class Key\r\n * @extends Phaser.Events.EventEmitter\r\n * @memberof Phaser.Input.Keyboard\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Keyboard.KeyboardPlugin} plugin - The Keyboard Plugin instance that owns this Key object.\r\n * @param {integer} keyCode - The keycode of this key.\r\n */\r\nvar Key = new Class({\r\n\r\n Extends: EventEmitter,\r\n\r\n initialize:\r\n\r\n function Key (plugin, keyCode)\r\n {\r\n EventEmitter.call(this);\r\n\r\n /**\r\n * The Keyboard Plugin instance that owns this Key object.\r\n *\r\n * @name Phaser.Input.Keyboard.Key#plugin\r\n * @type {Phaser.Input.Keyboard.KeyboardPlugin}\r\n * @since 3.17.0\r\n */\r\n this.plugin = plugin;\r\n\r\n /**\r\n * The keycode of this key.\r\n *\r\n * @name Phaser.Input.Keyboard.Key#keyCode\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n this.keyCode = keyCode;\r\n\r\n /**\r\n * The original DOM event.\r\n *\r\n * @name Phaser.Input.Keyboard.Key#originalEvent\r\n * @type {KeyboardEvent}\r\n * @since 3.0.0\r\n */\r\n this.originalEvent = undefined;\r\n\r\n /**\r\n * Can this Key be processed?\r\n *\r\n * @name Phaser.Input.Keyboard.Key#enabled\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.enabled = true;\r\n\r\n /**\r\n * The \"down\" state of the key. This will remain `true` for as long as the keyboard thinks this key is held down.\r\n *\r\n * @name Phaser.Input.Keyboard.Key#isDown\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.isDown = false;\r\n\r\n /**\r\n * The \"up\" state of the key. This will remain `true` for as long as the keyboard thinks this key is up.\r\n *\r\n * @name Phaser.Input.Keyboard.Key#isUp\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.isUp = true;\r\n\r\n /**\r\n * The down state of the ALT key, if pressed at the same time as this key.\r\n *\r\n * @name Phaser.Input.Keyboard.Key#altKey\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.altKey = false;\r\n\r\n /**\r\n * The down state of the CTRL key, if pressed at the same time as this key.\r\n *\r\n * @name Phaser.Input.Keyboard.Key#ctrlKey\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.ctrlKey = false;\r\n\r\n /**\r\n * The down state of the SHIFT key, if pressed at the same time as this key.\r\n *\r\n * @name Phaser.Input.Keyboard.Key#shiftKey\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.shiftKey = false;\r\n\r\n /**\r\n * The down state of the Meta key, if pressed at the same time as this key.\r\n * On a Mac the Meta Key is the Command key. On Windows keyboards, it's the Windows key.\r\n *\r\n * @name Phaser.Input.Keyboard.Key#metaKey\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.16.0\r\n */\r\n this.metaKey = false;\r\n\r\n /**\r\n * The location of the modifier key. 0 for standard (or unknown), 1 for left, 2 for right, 3 for numpad.\r\n *\r\n * @name Phaser.Input.Keyboard.Key#location\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.location = 0;\r\n\r\n /**\r\n * The timestamp when the key was last pressed down.\r\n *\r\n * @name Phaser.Input.Keyboard.Key#timeDown\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.timeDown = 0;\r\n\r\n /**\r\n * The number of milliseconds this key was held down for in the previous down - up sequence.\r\n * This value isn't updated every game step, only when the Key changes state.\r\n * To get the current duration use the `getDuration` method.\r\n *\r\n * @name Phaser.Input.Keyboard.Key#duration\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.duration = 0;\r\n\r\n /**\r\n * The timestamp when the key was last released.\r\n *\r\n * @name Phaser.Input.Keyboard.Key#timeUp\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.timeUp = 0;\r\n\r\n /**\r\n * When a key is held down should it continuously fire the `down` event each time it repeats?\r\n * \r\n * By default it will emit the `down` event just once, but if you wish to receive the event\r\n * for each repeat as well, enable this property.\r\n *\r\n * @name Phaser.Input.Keyboard.Key#emitOnRepeat\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.16.0\r\n */\r\n this.emitOnRepeat = false;\r\n\r\n /**\r\n * If a key is held down this holds down the number of times the key has 'repeated'.\r\n *\r\n * @name Phaser.Input.Keyboard.Key#repeats\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.repeats = 0;\r\n\r\n /**\r\n * True if the key has just been pressed (NOTE: requires to be reset, see justDown getter)\r\n *\r\n * @name Phaser.Input.Keyboard.Key#_justDown\r\n * @type {boolean}\r\n * @private\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this._justDown = false;\r\n\r\n /**\r\n * True if the key has just been pressed (NOTE: requires to be reset, see justDown getter)\r\n *\r\n * @name Phaser.Input.Keyboard.Key#_justUp\r\n * @type {boolean}\r\n * @private\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this._justUp = false;\r\n\r\n /**\r\n * Internal tick counter.\r\n *\r\n * @name Phaser.Input.Keyboard.Key#_tick\r\n * @type {number}\r\n * @private\r\n * @since 3.11.0\r\n */\r\n this._tick = -1;\r\n },\r\n\r\n /**\r\n * Controls if this Key will continuously emit a `down` event while being held down (true),\r\n * or emit the event just once, on first press, and then skip future events (false).\r\n *\r\n * @method Phaser.Input.Keyboard.Key#setEmitOnRepeat\r\n * @since 3.16.0\r\n * \r\n * @param {boolean} value - Emit `down` events on repeated key down actions, or just once?\r\n * \r\n * @return {Phaser.Input.Keyboard.Key} This Key instance.\r\n */\r\n setEmitOnRepeat: function (value)\r\n {\r\n this.emitOnRepeat = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Processes the Key Down action for this Key.\r\n * Called automatically by the Keyboard Plugin.\r\n *\r\n * @method Phaser.Input.Keyboard.Key#onDown\r\n * @fires Phaser.Input.Keyboard.Events#DOWN\r\n * @since 3.16.0\r\n * \r\n * @param {KeyboardEvent} event - The native DOM Keyboard event.\r\n */\r\n onDown: function (event)\r\n {\r\n this.originalEvent = event;\r\n\r\n if (!this.enabled)\r\n {\r\n return;\r\n }\r\n\r\n this.altKey = event.altKey;\r\n this.ctrlKey = event.ctrlKey;\r\n this.shiftKey = event.shiftKey;\r\n this.metaKey = event.metaKey;\r\n this.location = event.location;\r\n \r\n this.repeats++;\r\n\r\n if (!this.isDown)\r\n {\r\n this.isDown = true;\r\n this.isUp = false;\r\n this.timeDown = event.timeStamp;\r\n this.duration = 0;\r\n this._justDown = true;\r\n this._justUp = false;\r\n\r\n this.emit(Events.DOWN, this, event);\r\n }\r\n else if (this.emitOnRepeat)\r\n {\r\n this.emit(Events.DOWN, this, event);\r\n }\r\n },\r\n\r\n /**\r\n * Processes the Key Up action for this Key.\r\n * Called automatically by the Keyboard Plugin.\r\n *\r\n * @method Phaser.Input.Keyboard.Key#onUp\r\n * @fires Phaser.Input.Keyboard.Events#UP\r\n * @since 3.16.0\r\n * \r\n * @param {KeyboardEvent} event - The native DOM Keyboard event.\r\n */\r\n onUp: function (event)\r\n {\r\n this.originalEvent = event;\r\n\r\n if (!this.enabled)\r\n {\r\n return;\r\n }\r\n \r\n this.isDown = false;\r\n this.isUp = true;\r\n this.timeUp = event.timeStamp;\r\n this.duration = this.timeUp - this.timeDown;\r\n this.repeats = 0;\r\n \r\n this._justDown = false;\r\n this._justUp = true;\r\n this._tick = -1;\r\n \r\n this.emit(Events.UP, this, event);\r\n },\r\n\r\n /**\r\n * Resets this Key object back to its default un-pressed state.\r\n *\r\n * @method Phaser.Input.Keyboard.Key#reset\r\n * @since 3.6.0\r\n * \r\n * @return {Phaser.Input.Keyboard.Key} This Key instance.\r\n */\r\n reset: function ()\r\n {\r\n this.preventDefault = true;\r\n this.enabled = true;\r\n this.isDown = false;\r\n this.isUp = true;\r\n this.altKey = false;\r\n this.ctrlKey = false;\r\n this.shiftKey = false;\r\n this.metaKey = false;\r\n this.timeDown = 0;\r\n this.duration = 0;\r\n this.timeUp = 0;\r\n this.repeats = 0;\r\n this._justDown = false;\r\n this._justUp = false;\r\n this._tick = -1;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Returns the duration, in ms, that the Key has been held down for.\r\n * \r\n * If the key is not currently down it will return zero.\r\n * \r\n * The get the duration the Key was held down for in the previous up-down cycle,\r\n * use the `Key.duration` property value instead.\r\n *\r\n * @method Phaser.Input.Keyboard.Key#getDuration\r\n * @since 3.17.0\r\n * \r\n * @return {number} The duration, in ms, that the Key has been held down for if currently down.\r\n */\r\n getDuration: function ()\r\n {\r\n if (this.isDown)\r\n {\r\n return (this.plugin.game.loop.time - this.timeDown);\r\n }\r\n else\r\n {\r\n return 0;\r\n }\r\n },\r\n\r\n /**\r\n * Removes any bound event handlers and removes local references.\r\n *\r\n * @method Phaser.Input.Keyboard.Key#destroy\r\n * @since 3.16.0\r\n */\r\n destroy: function ()\r\n {\r\n this.removeAllListeners();\r\n\r\n this.originalEvent = null;\r\n\r\n this.plugin = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = Key;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9rZXlzL0tleS5qcz83NTcwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsc0VBQXNCO0FBQzFDLG1CQUFtQixtQkFBTyxDQUFDLDREQUFlO0FBQzFDLGFBQWEsbUJBQU8sQ0FBQywyRUFBVzs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUNBQXFDO0FBQ2hELFdBQVcsUUFBUTtBQUNuQjtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZ0JBQWdCLDBCQUEwQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsY0FBYztBQUM3QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxjQUFjO0FBQzdCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsMEJBQTBCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9rZXlzL0tleS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcclxudmFyIEV2ZW50cyA9IHJlcXVpcmUoJy4uL2V2ZW50cycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBnZW5lcmljIEtleSBvYmplY3Qgd2hpY2ggY2FuIGJlIHBhc3NlZCB0byB0aGUgUHJvY2VzcyBmdW5jdGlvbnMgKGFuZCBzbyBvbilcclxuICoga2V5Y29kZSBtdXN0IGJlIGFuIGludGVnZXJcclxuICpcclxuICogQGNsYXNzIEtleVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuRXZlbnRzLkV2ZW50RW1pdHRlclxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLklucHV0LktleWJvYXJkXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Ym9hcmRQbHVnaW59IHBsdWdpbiAtIFRoZSBLZXlib2FyZCBQbHVnaW4gaW5zdGFuY2UgdGhhdCBvd25zIHRoaXMgS2V5IG9iamVjdC5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBrZXlDb2RlIC0gVGhlIGtleWNvZGUgb2YgdGhpcyBrZXkuXHJcbiAqL1xyXG52YXIgS2V5ID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBFdmVudEVtaXR0ZXIsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBLZXkgKHBsdWdpbiwga2V5Q29kZSlcclxuICAgIHtcclxuICAgICAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIEtleWJvYXJkIFBsdWdpbiBpbnN0YW5jZSB0aGF0IG93bnMgdGhpcyBLZXkgb2JqZWN0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleSNwbHVnaW5cclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LktleWJvYXJkLktleWJvYXJkUGx1Z2lufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGtleWNvZGUgb2YgdGhpcyBrZXkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5I2tleUNvZGVcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmtleUNvZGUgPSBrZXlDb2RlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgb3JpZ2luYWwgRE9NIGV2ZW50LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleSNvcmlnaW5hbEV2ZW50XHJcbiAgICAgICAgICogQHR5cGUge0tleWJvYXJkRXZlbnR9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW4gdGhpcyBLZXkgYmUgcHJvY2Vzc2VkP1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleSNlbmFibGVkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBcImRvd25cIiBzdGF0ZSBvZiB0aGUga2V5LiBUaGlzIHdpbGwgcmVtYWluIGB0cnVlYCBmb3IgYXMgbG9uZyBhcyB0aGUga2V5Ym9hcmQgdGhpbmtzIHRoaXMga2V5IGlzIGhlbGQgZG93bi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXkjaXNEb3duXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgXCJ1cFwiIHN0YXRlIG9mIHRoZSBrZXkuIFRoaXMgd2lsbCByZW1haW4gYHRydWVgIGZvciBhcyBsb25nIGFzIHRoZSBrZXlib2FyZCB0aGlua3MgdGhpcyBrZXkgaXMgdXAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5I2lzVXBcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc1VwID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRvd24gc3RhdGUgb2YgdGhlIEFMVCBrZXksIGlmIHByZXNzZWQgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGlzIGtleS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXkjYWx0S2V5XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFsdEtleSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgZG93biBzdGF0ZSBvZiB0aGUgQ1RSTCBrZXksIGlmIHByZXNzZWQgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGlzIGtleS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXkjY3RybEtleVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jdHJsS2V5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBkb3duIHN0YXRlIG9mIHRoZSBTSElGVCBrZXksIGlmIHByZXNzZWQgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGlzIGtleS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXkjc2hpZnRLZXlcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2hpZnRLZXkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGRvd24gc3RhdGUgb2YgdGhlIE1ldGEga2V5LCBpZiBwcmVzc2VkIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhpcyBrZXkuXHJcbiAgICAgICAgICogT24gYSBNYWMgdGhlIE1ldGEgS2V5IGlzIHRoZSBDb21tYW5kIGtleS4gT24gV2luZG93cyBrZXlib2FyZHMsIGl0J3MgdGhlIFdpbmRvd3Mga2V5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleSNtZXRhS2V5XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tZXRhS2V5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgbW9kaWZpZXIga2V5LiAwIGZvciBzdGFuZGFyZCAob3IgdW5rbm93biksIDEgZm9yIGxlZnQsIDIgZm9yIHJpZ2h0LCAzIGZvciBudW1wYWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5I2xvY2F0aW9uXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5sb2NhdGlvbiA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUga2V5IHdhcyBsYXN0IHByZXNzZWQgZG93bi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXkjdGltZURvd25cclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRpbWVEb3duID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhpcyBrZXkgd2FzIGhlbGQgZG93biBmb3IgaW4gdGhlIHByZXZpb3VzIGRvd24gLSB1cCBzZXF1ZW5jZS5cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzbid0IHVwZGF0ZWQgZXZlcnkgZ2FtZSBzdGVwLCBvbmx5IHdoZW4gdGhlIEtleSBjaGFuZ2VzIHN0YXRlLlxyXG4gICAgICAgICAqIFRvIGdldCB0aGUgY3VycmVudCBkdXJhdGlvbiB1c2UgdGhlIGBnZXREdXJhdGlvbmAgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleSNkdXJhdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuZHVyYXRpb24gPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIGtleSB3YXMgbGFzdCByZWxlYXNlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXkjdGltZVVwXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aW1lVXAgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXaGVuIGEga2V5IGlzIGhlbGQgZG93biBzaG91bGQgaXQgY29udGludW91c2x5IGZpcmUgdGhlIGBkb3duYCBldmVudCBlYWNoIHRpbWUgaXQgcmVwZWF0cz9cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBCeSBkZWZhdWx0IGl0IHdpbGwgZW1pdCB0aGUgYGRvd25gIGV2ZW50IGp1c3Qgb25jZSwgYnV0IGlmIHlvdSB3aXNoIHRvIHJlY2VpdmUgdGhlIGV2ZW50XHJcbiAgICAgICAgICogZm9yIGVhY2ggcmVwZWF0IGFzIHdlbGwsIGVuYWJsZSB0aGlzIHByb3BlcnR5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleSNlbWl0T25SZXBlYXRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE2LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmVtaXRPblJlcGVhdCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBhIGtleSBpcyBoZWxkIGRvd24gdGhpcyBob2xkcyBkb3duIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGtleSBoYXMgJ3JlcGVhdGVkJy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXkjcmVwZWF0c1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVwZWF0cyA9IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRydWUgaWYgdGhlIGtleSBoYXMganVzdCBiZWVuIHByZXNzZWQgKE5PVEU6IHJlcXVpcmVzIHRvIGJlIHJlc2V0LCBzZWUganVzdERvd24gZ2V0dGVyKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleSNfanVzdERvd25cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fanVzdERvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVHJ1ZSBpZiB0aGUga2V5IGhhcyBqdXN0IGJlZW4gcHJlc3NlZCAoTk9URTogcmVxdWlyZXMgdG8gYmUgcmVzZXQsIHNlZSBqdXN0RG93biBnZXR0ZXIpXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5I19qdXN0VXBcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fanVzdFVwID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIHRpY2sgY291bnRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXkjX3RpY2tcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMTEuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX3RpY2sgPSAtMTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250cm9scyBpZiB0aGlzIEtleSB3aWxsIGNvbnRpbnVvdXNseSBlbWl0IGEgYGRvd25gIGV2ZW50IHdoaWxlIGJlaW5nIGhlbGQgZG93biAodHJ1ZSksXHJcbiAgICAgKiBvciBlbWl0IHRoZSBldmVudCBqdXN0IG9uY2UsIG9uIGZpcnN0IHByZXNzLCBhbmQgdGhlbiBza2lwIGZ1dHVyZSBldmVudHMgKGZhbHNlKS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXkjc2V0RW1pdE9uUmVwZWF0XHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBFbWl0IGBkb3duYCBldmVudHMgb24gcmVwZWF0ZWQga2V5IGRvd24gYWN0aW9ucywgb3IganVzdCBvbmNlP1xyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5fSBUaGlzIEtleSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgc2V0RW1pdE9uUmVwZWF0OiBmdW5jdGlvbiAodmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5lbWl0T25SZXBlYXQgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvY2Vzc2VzIHRoZSBLZXkgRG93biBhY3Rpb24gZm9yIHRoaXMgS2V5LlxyXG4gICAgICogQ2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIEtleWJvYXJkIFBsdWdpbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXkjb25Eb3duXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50cyNET1dOXHJcbiAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnQgLSBUaGUgbmF0aXZlIERPTSBLZXlib2FyZCBldmVudC5cclxuICAgICAqL1xyXG4gICAgb25Eb3duOiBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5lbmFibGVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hbHRLZXkgPSBldmVudC5hbHRLZXk7XHJcbiAgICAgICAgdGhpcy5jdHJsS2V5ID0gZXZlbnQuY3RybEtleTtcclxuICAgICAgICB0aGlzLnNoaWZ0S2V5ID0gZXZlbnQuc2hpZnRLZXk7XHJcbiAgICAgICAgdGhpcy5tZXRhS2V5ID0gZXZlbnQubWV0YUtleTtcclxuICAgICAgICB0aGlzLmxvY2F0aW9uID0gZXZlbnQubG9jYXRpb247XHJcbiAgICBcclxuICAgICAgICB0aGlzLnJlcGVhdHMrKztcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzRG93bilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5pc1VwID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMudGltZURvd24gPSBldmVudC50aW1lU3RhbXA7XHJcbiAgICAgICAgICAgIHRoaXMuZHVyYXRpb24gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLl9qdXN0RG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2p1c3RVcCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5ET1dOLCB0aGlzLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuZW1pdE9uUmVwZWF0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5ET1dOLCB0aGlzLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb2Nlc3NlcyB0aGUgS2V5IFVwIGFjdGlvbiBmb3IgdGhpcyBLZXkuXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgS2V5Ym9hcmQgUGx1Z2luLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LktleWJvYXJkLktleSNvblVwXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLklucHV0LktleWJvYXJkLkV2ZW50cyNVUFxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50IC0gVGhlIG5hdGl2ZSBET00gS2V5Ym9hcmQgZXZlbnQuXHJcbiAgICAgKi9cclxuICAgIG9uVXA6IGZ1bmN0aW9uIChldmVudClcclxuICAgIHtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzVXAgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudGltZVVwID0gZXZlbnQudGltZVN0YW1wO1xyXG4gICAgICAgIHRoaXMuZHVyYXRpb24gPSB0aGlzLnRpbWVVcCAtIHRoaXMudGltZURvd247XHJcbiAgICAgICAgdGhpcy5yZXBlYXRzID0gMDtcclxuICAgIFxyXG4gICAgICAgIHRoaXMuX2p1c3REb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fanVzdFVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl90aWNrID0gLTE7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5lbWl0KEV2ZW50cy5VUCwgdGhpcywgZXZlbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGlzIEtleSBvYmplY3QgYmFjayB0byBpdHMgZGVmYXVsdCB1bi1wcmVzc2VkIHN0YXRlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0LktleWJvYXJkLktleSNyZXNldFxyXG4gICAgICogQHNpbmNlIDMuNi4wXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5LZXlib2FyZC5LZXl9IFRoaXMgS2V5IGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICByZXNldDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc1VwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmFsdEtleSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY3RybEtleSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hpZnRLZXkgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1ldGFLZXkgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRpbWVEb3duID0gMDtcclxuICAgICAgICB0aGlzLmR1cmF0aW9uID0gMDtcclxuICAgICAgICB0aGlzLnRpbWVVcCA9IDA7XHJcbiAgICAgICAgdGhpcy5yZXBlYXRzID0gMDtcclxuICAgICAgICB0aGlzLl9qdXN0RG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2p1c3RVcCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3RpY2sgPSAtMTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgZHVyYXRpb24sIGluIG1zLCB0aGF0IHRoZSBLZXkgaGFzIGJlZW4gaGVsZCBkb3duIGZvci5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIGtleSBpcyBub3QgY3VycmVudGx5IGRvd24gaXQgd2lsbCByZXR1cm4gemVyby5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGdldCB0aGUgZHVyYXRpb24gdGhlIEtleSB3YXMgaGVsZCBkb3duIGZvciBpbiB0aGUgcHJldmlvdXMgdXAtZG93biBjeWNsZSxcclxuICAgICAqIHVzZSB0aGUgYEtleS5kdXJhdGlvbmAgcHJvcGVydHkgdmFsdWUgaW5zdGVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXkjZ2V0RHVyYXRpb25cclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgZHVyYXRpb24sIGluIG1zLCB0aGF0IHRoZSBLZXkgaGFzIGJlZW4gaGVsZCBkb3duIGZvciBpZiBjdXJyZW50bHkgZG93bi5cclxuICAgICAqL1xyXG4gICAgZ2V0RHVyYXRpb246IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnBsdWdpbi5nYW1lLmxvb3AudGltZSAtIHRoaXMudGltZURvd24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhbnkgYm91bmQgZXZlbnQgaGFuZGxlcnMgYW5kIHJlbW92ZXMgbG9jYWwgcmVmZXJlbmNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXkjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XHJcblxyXG4gICAgICAgIHRoaXMub3JpZ2luYWxFdmVudCA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMucGx1Z2luID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBLZXk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/keys/Key.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/keyboard/keys/KeyCodes.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/input/keyboard/keys/KeyCodes.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Keyboard Codes.\r\n *\r\n * @namespace Phaser.Input.Keyboard.KeyCodes\r\n * @memberof Phaser.Input.Keyboard\r\n * @since 3.0.0\r\n */\r\n\r\nvar KeyCodes = {\r\n\r\n /**\r\n * The BACKSPACE key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.BACKSPACE\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n BACKSPACE: 8,\r\n\r\n /**\r\n * The TAB key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.TAB\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n TAB: 9,\r\n\r\n /**\r\n * The ENTER key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.ENTER\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n ENTER: 13,\r\n\r\n /**\r\n * The SHIFT key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.SHIFT\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n SHIFT: 16,\r\n\r\n /**\r\n * The CTRL key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.CTRL\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n CTRL: 17,\r\n\r\n /**\r\n * The ALT key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.ALT\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n ALT: 18,\r\n\r\n /**\r\n * The PAUSE key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.PAUSE\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n PAUSE: 19,\r\n\r\n /**\r\n * The CAPS_LOCK key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.CAPS_LOCK\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n CAPS_LOCK: 20,\r\n\r\n /**\r\n * The ESC key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.ESC\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n ESC: 27,\r\n\r\n /**\r\n * The SPACE key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.SPACE\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n SPACE: 32,\r\n\r\n /**\r\n * The PAGE_UP key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.PAGE_UP\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n PAGE_UP: 33,\r\n\r\n /**\r\n * The PAGE_DOWN key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.PAGE_DOWN\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n PAGE_DOWN: 34,\r\n\r\n /**\r\n * The END key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.END\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n END: 35,\r\n\r\n /**\r\n * The HOME key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.HOME\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n HOME: 36,\r\n\r\n /**\r\n * The LEFT key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.LEFT\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n LEFT: 37,\r\n\r\n /**\r\n * The UP key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.UP\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n UP: 38,\r\n\r\n /**\r\n * The RIGHT key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.RIGHT\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n RIGHT: 39,\r\n\r\n /**\r\n * The DOWN key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.DOWN\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n DOWN: 40,\r\n\r\n /**\r\n * The PRINT_SCREEN key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.PRINT_SCREEN\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n PRINT_SCREEN: 42,\r\n\r\n /**\r\n * The INSERT key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.INSERT\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n INSERT: 45,\r\n\r\n /**\r\n * The DELETE key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.DELETE\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n DELETE: 46,\r\n\r\n /**\r\n * The ZERO key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.ZERO\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n ZERO: 48,\r\n\r\n /**\r\n * The ONE key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.ONE\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n ONE: 49,\r\n\r\n /**\r\n * The TWO key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.TWO\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n TWO: 50,\r\n\r\n /**\r\n * The THREE key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.THREE\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n THREE: 51,\r\n\r\n /**\r\n * The FOUR key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.FOUR\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n FOUR: 52,\r\n\r\n /**\r\n * The FIVE key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.FIVE\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n FIVE: 53,\r\n\r\n /**\r\n * The SIX key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.SIX\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n SIX: 54,\r\n\r\n /**\r\n * The SEVEN key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.SEVEN\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n SEVEN: 55,\r\n\r\n /**\r\n * The EIGHT key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.EIGHT\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n EIGHT: 56,\r\n\r\n /**\r\n * The NINE key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.NINE\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n NINE: 57,\r\n\r\n /**\r\n * The NUMPAD_ZERO key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.NUMPAD_ZERO\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n NUMPAD_ZERO: 96,\r\n\r\n /**\r\n * The NUMPAD_ONE key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.NUMPAD_ONE\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n NUMPAD_ONE: 97,\r\n\r\n /**\r\n * The NUMPAD_TWO key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.NUMPAD_TWO\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n NUMPAD_TWO: 98,\r\n\r\n /**\r\n * The NUMPAD_THREE key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.NUMPAD_THREE\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n NUMPAD_THREE: 99,\r\n\r\n /**\r\n * The NUMPAD_FOUR key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.NUMPAD_FOUR\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n NUMPAD_FOUR: 100,\r\n\r\n /**\r\n * The NUMPAD_FIVE key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.NUMPAD_FIVE\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n NUMPAD_FIVE: 101,\r\n\r\n /**\r\n * The NUMPAD_SIX key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.NUMPAD_SIX\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n NUMPAD_SIX: 102,\r\n\r\n /**\r\n * The NUMPAD_SEVEN key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.NUMPAD_SEVEN\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n NUMPAD_SEVEN: 103,\r\n\r\n /**\r\n * The NUMPAD_EIGHT key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.NUMPAD_EIGHT\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n NUMPAD_EIGHT: 104,\r\n\r\n /**\r\n * The NUMPAD_NINE key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.NUMPAD_NINE\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n NUMPAD_NINE: 105,\r\n\r\n /**\r\n * The Numpad Addition (+) key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.NUMPAD_ADD\r\n * @type {integer}\r\n * @since 3.21.0\r\n */\r\n NUMPAD_ADD: 107,\r\n\r\n /**\r\n * The Numpad Subtraction (-) key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.NUMPAD_SUBTRACT\r\n * @type {integer}\r\n * @since 3.21.0\r\n */\r\n NUMPAD_SUBTRACT: 109,\r\n\r\n /**\r\n * The A key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.A\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n A: 65,\r\n\r\n /**\r\n * The B key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.B\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n B: 66,\r\n\r\n /**\r\n * The C key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.C\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n C: 67,\r\n\r\n /**\r\n * The D key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.D\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n D: 68,\r\n\r\n /**\r\n * The E key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.E\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n E: 69,\r\n\r\n /**\r\n * The F key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.F\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n F: 70,\r\n\r\n /**\r\n * The G key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.G\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n G: 71,\r\n\r\n /**\r\n * The H key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.H\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n H: 72,\r\n\r\n /**\r\n * The I key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.I\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n I: 73,\r\n\r\n /**\r\n * The J key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.J\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n J: 74,\r\n\r\n /**\r\n * The K key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.K\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n K: 75,\r\n\r\n /**\r\n * The L key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.L\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n L: 76,\r\n\r\n /**\r\n * The M key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.M\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n M: 77,\r\n\r\n /**\r\n * The N key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.N\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n N: 78,\r\n\r\n /**\r\n * The O key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.O\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n O: 79,\r\n\r\n /**\r\n * The P key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.P\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n P: 80,\r\n\r\n /**\r\n * The Q key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.Q\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n Q: 81,\r\n\r\n /**\r\n * The R key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.R\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n R: 82,\r\n\r\n /**\r\n * The S key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.S\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n S: 83,\r\n\r\n /**\r\n * The T key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.T\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n T: 84,\r\n\r\n /**\r\n * The U key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.U\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n U: 85,\r\n\r\n /**\r\n * The V key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.V\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n V: 86,\r\n\r\n /**\r\n * The W key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.W\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n W: 87,\r\n\r\n /**\r\n * The X key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.X\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n X: 88,\r\n\r\n /**\r\n * The Y key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.Y\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n Y: 89,\r\n\r\n /**\r\n * The Z key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.Z\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n Z: 90,\r\n\r\n /**\r\n * The F1 key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.F1\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n F1: 112,\r\n\r\n /**\r\n * The F2 key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.F2\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n F2: 113,\r\n\r\n /**\r\n * The F3 key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.F3\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n F3: 114,\r\n\r\n /**\r\n * The F4 key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.F4\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n F4: 115,\r\n\r\n /**\r\n * The F5 key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.F5\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n F5: 116,\r\n\r\n /**\r\n * The F6 key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.F6\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n F6: 117,\r\n\r\n /**\r\n * The F7 key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.F7\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n F7: 118,\r\n\r\n /**\r\n * The F8 key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.F8\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n F8: 119,\r\n\r\n /**\r\n * The F9 key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.F9\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n F9: 120,\r\n\r\n /**\r\n * The F10 key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.F10\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n F10: 121,\r\n\r\n /**\r\n * The F11 key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.F11\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n F11: 122,\r\n\r\n /**\r\n * The F12 key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.F12\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n F12: 123,\r\n\r\n /**\r\n * The SEMICOLON key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.SEMICOLON\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n SEMICOLON: 186,\r\n\r\n /**\r\n * The PLUS key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.PLUS\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n PLUS: 187,\r\n\r\n /**\r\n * The COMMA key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.COMMA\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n COMMA: 188,\r\n\r\n /**\r\n * The MINUS key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.MINUS\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n MINUS: 189,\r\n\r\n /**\r\n * The PERIOD key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.PERIOD\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n PERIOD: 190,\r\n\r\n /**\r\n * The FORWARD_SLASH key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.FORWARD_SLASH\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n FORWARD_SLASH: 191,\r\n\r\n /**\r\n * The BACK_SLASH key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.BACK_SLASH\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n BACK_SLASH: 220,\r\n\r\n /**\r\n * The QUOTES key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.QUOTES\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n QUOTES: 222,\r\n\r\n /**\r\n * The BACKTICK key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.BACKTICK\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n BACKTICK: 192,\r\n\r\n /**\r\n * The OPEN_BRACKET key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.OPEN_BRACKET\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n OPEN_BRACKET: 219,\r\n\r\n /**\r\n * The CLOSED_BRACKET key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.CLOSED_BRACKET\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n CLOSED_BRACKET: 221,\r\n\r\n /**\r\n * The SEMICOLON_FIREFOX key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.SEMICOLON_FIREFOX\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n SEMICOLON_FIREFOX: 59,\r\n\r\n /**\r\n * The COLON key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.COLON\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n COLON: 58,\r\n\r\n /**\r\n * The COMMA_FIREFOX_WINDOWS key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.COMMA_FIREFOX_WINDOWS\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n COMMA_FIREFOX_WINDOWS: 60,\r\n\r\n /**\r\n * The COMMA_FIREFOX key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.COMMA_FIREFOX\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n COMMA_FIREFOX: 62,\r\n\r\n /**\r\n * The BRACKET_RIGHT_FIREFOX key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.BRACKET_RIGHT_FIREFOX\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n BRACKET_RIGHT_FIREFOX: 174,\r\n\r\n /**\r\n * The BRACKET_LEFT_FIREFOX key.\r\n * \r\n * @name Phaser.Input.Keyboard.KeyCodes.BRACKET_LEFT_FIREFOX\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n BRACKET_LEFT_FIREFOX: 175\r\n};\r\n\r\nmodule.exports = KeyCodes;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9rZXlzL0tleUNvZGVzLmpzPzhlYzAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L2tleWJvYXJkL2tleXMvS2V5Q29kZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBLZXlib2FyZCBDb2Rlcy5cclxuICpcclxuICogQG5hbWVzcGFjZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXNcclxuICogQG1lbWJlcm9mIFBoYXNlci5JbnB1dC5LZXlib2FyZFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcblxyXG52YXIgS2V5Q29kZXMgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQkFDS1NQQUNFIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLkJBQ0tTUEFDRVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgQkFDS1NQQUNFOiA4LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFRBQiBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5UQUJcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFRBQjogOSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBFTlRFUiBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5FTlRFUlxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgRU5URVI6IDEzLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNISUZUIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlNISUZUXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBTSElGVDogMTYsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQ1RSTCBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5DVFJMXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBDVFJMOiAxNyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBBTFQga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuQUxUXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBBTFQ6IDE4LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFBBVVNFIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlBBVVNFXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBQQVVTRTogMTksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQ0FQU19MT0NLIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLkNBUFNfTE9DS1xyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgQ0FQU19MT0NLOiAyMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBFU0Mga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuRVNDXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBFU0M6IDI3LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNQQUNFIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlNQQUNFXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBTUEFDRTogMzIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgUEFHRV9VUCBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5QQUdFX1VQXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBQQUdFX1VQOiAzMyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBQQUdFX0RPV04ga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuUEFHRV9ET1dOXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBQQUdFX0RPV046IDM0LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIEVORCBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5FTkRcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEVORDogMzUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgSE9NRSBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5IT01FXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBIT01FOiAzNixcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBMRUZUIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLkxFRlRcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIExFRlQ6IDM3LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFVQIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlVQXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBVUDogMzgsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgUklHSFQga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuUklHSFRcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFJJR0hUOiAzOSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBET1dOIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLkRPV05cclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIERPV046IDQwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFBSSU5UX1NDUkVFTiBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5QUklOVF9TQ1JFRU5cclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFBSSU5UX1NDUkVFTjogNDIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgSU5TRVJUIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLklOU0VSVFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgSU5TRVJUOiA0NSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBERUxFVEUga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuREVMRVRFXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBERUxFVEU6IDQ2LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFpFUk8ga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuWkVST1xyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgWkVSTzogNDgsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgT05FIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLk9ORVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgT05FOiA0OSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBUV08ga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuVFdPXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBUV086IDUwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFRIUkVFIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlRIUkVFXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBUSFJFRTogNTEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRk9VUiBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5GT1VSXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBGT1VSOiA1MixcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBGSVZFIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLkZJVkVcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEZJVkU6IDUzLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNJWCBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5TSVhcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFNJWDogNTQsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgU0VWRU4ga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuU0VWRU5cclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFNFVkVOOiA1NSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBFSUdIVCBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5FSUdIVFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgRUlHSFQ6IDU2LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIE5JTkUga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuTklORVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgTklORTogNTcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgTlVNUEFEX1pFUk8ga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuTlVNUEFEX1pFUk9cclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIE5VTVBBRF9aRVJPOiA5NixcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBOVU1QQURfT05FIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLk5VTVBBRF9PTkVcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIE5VTVBBRF9PTkU6IDk3LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIE5VTVBBRF9UV08ga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuTlVNUEFEX1RXT1xyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgTlVNUEFEX1RXTzogOTgsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgTlVNUEFEX1RIUkVFIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLk5VTVBBRF9USFJFRVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgTlVNUEFEX1RIUkVFOiA5OSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBOVU1QQURfRk9VUiBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5OVU1QQURfRk9VUlxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgTlVNUEFEX0ZPVVI6IDEwMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBOVU1QQURfRklWRSBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5OVU1QQURfRklWRVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgTlVNUEFEX0ZJVkU6IDEwMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBOVU1QQURfU0lYIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLk5VTVBBRF9TSVhcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIE5VTVBBRF9TSVg6IDEwMixcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBOVU1QQURfU0VWRU4ga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuTlVNUEFEX1NFVkVOXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBOVU1QQURfU0VWRU46IDEwMyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBOVU1QQURfRUlHSFQga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuTlVNUEFEX0VJR0hUXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBOVU1QQURfRUlHSFQ6IDEwNCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBOVU1QQURfTklORSBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5OVU1QQURfTklORVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgTlVNUEFEX05JTkU6IDEwNSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBOdW1wYWQgQWRkaXRpb24gKCspIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLk5VTVBBRF9BRERcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICovXHJcbiAgICBOVU1QQURfQUREOiAxMDcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgTnVtcGFkIFN1YnRyYWN0aW9uICgtKSBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5OVU1QQURfU1VCVFJBQ1RcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMjEuMFxyXG4gICAgICovXHJcbiAgICBOVU1QQURfU1VCVFJBQ1Q6IDEwOSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBBIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLkFcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEE6IDY1LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIEIga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuQlxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgQjogNjYsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQyBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5DXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBDOiA2NyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBEIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLkRcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEQ6IDY4LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIEUga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuRVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgRTogNjksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRiBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5GXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBGOiA3MCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBHIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLkdcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEc6IDcxLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIEgga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuSFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgSDogNzIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgSSBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5JXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBJOiA3MyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBKIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLkpcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEo6IDc0LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIEsga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuS1xyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgSzogNzUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgTCBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5MXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBMOiA3NixcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBNIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLk1cclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIE06IDc3LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIE4ga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuTlxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgTjogNzgsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgTyBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5PXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBPOiA3OSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBQIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlBcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFA6IDgwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFEga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuUVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgUTogODEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgUiBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5SXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBSOiA4MixcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBTIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlNcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFM6IDgzLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFQga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuVFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgVDogODQsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgVSBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5VXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBVOiA4NSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBWIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlZcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFY6IDg2LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFcga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuV1xyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgVzogODcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgWCBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5YXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBYOiA4OCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBZIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLllcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFk6IDg5LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFoga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuWlxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgWjogOTAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRjEga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuRjFcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEYxOiAxMTIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRjIga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuRjJcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEYyOiAxMTMsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRjMga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuRjNcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEYzOiAxMTQsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRjQga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuRjRcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEY0OiAxMTUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRjUga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuRjVcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEY1OiAxMTYsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRjYga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuRjZcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEY2OiAxMTcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRjcga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuRjdcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEY3OiAxMTgsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRjgga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuRjhcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEY4OiAxMTksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRjkga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuRjlcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEY5OiAxMjAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRjEwIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLkYxMFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgRjEwOiAxMjEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRjExIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLkYxMVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgRjExOiAxMjIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRjEyIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLkYxMlxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgRjEyOiAxMjMsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgU0VNSUNPTE9OIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlNFTUlDT0xPTlxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgU0VNSUNPTE9OOiAxODYsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgUExVUyBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5QTFVTXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBQTFVTOiAxODcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQ09NTUEga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuQ09NTUFcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIENPTU1BOiAxODgsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgTUlOVVMga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuTUlOVVNcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIE1JTlVTOiAxODksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgUEVSSU9EIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlBFUklPRFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgUEVSSU9EOiAxOTAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRk9SV0FSRF9TTEFTSCBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5GT1JXQVJEX1NMQVNIXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBGT1JXQVJEX1NMQVNIOiAxOTEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQkFDS19TTEFTSCBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5CQUNLX1NMQVNIXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBCQUNLX1NMQVNIOiAyMjAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgUVVPVEVTIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLlFVT1RFU1xyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgUVVPVEVTOiAyMjIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQkFDS1RJQ0sga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuQkFDS1RJQ0tcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEJBQ0tUSUNLOiAxOTIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgT1BFTl9CUkFDS0VUIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLklucHV0LktleWJvYXJkLktleUNvZGVzLk9QRU5fQlJBQ0tFVFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgT1BFTl9CUkFDS0VUOiAyMTksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQ0xPU0VEX0JSQUNLRVQga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuQ0xPU0VEX0JSQUNLRVRcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIENMT1NFRF9CUkFDS0VUOiAyMjEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgU0VNSUNPTE9OX0ZJUkVGT1gga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuU0VNSUNPTE9OX0ZJUkVGT1hcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIFNFTUlDT0xPTl9GSVJFRk9YOiA1OSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBDT0xPTiBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5DT0xPTlxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgQ09MT046IDU4LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIENPTU1BX0ZJUkVGT1hfV0lORE9XUyBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5DT01NQV9GSVJFRk9YX1dJTkRPV1NcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIENPTU1BX0ZJUkVGT1hfV0lORE9XUzogNjAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQ09NTUFfRklSRUZPWCBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5DT01NQV9GSVJFRk9YXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBDT01NQV9GSVJFRk9YOiA2MixcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBCUkFDS0VUX1JJR0hUX0ZJUkVGT1gga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5Q29kZXMuQlJBQ0tFVF9SSUdIVF9GSVJFRk9YXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBCUkFDS0VUX1JJR0hUX0ZJUkVGT1g6IDE3NCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBCUkFDS0VUX0xFRlRfRklSRUZPWCBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5LZXlib2FyZC5LZXlDb2Rlcy5CUkFDS0VUX0xFRlRfRklSRUZPWFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgQlJBQ0tFVF9MRUZUX0ZJUkVGT1g6IDE3NVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBLZXlDb2RlcztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/keys/KeyCodes.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/keyboard/keys/KeyMap.js":
/*!***************************************************************!*\
!*** ./node_modules/phaser/src/input/keyboard/keys/KeyMap.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar KeyCodes = __webpack_require__(/*! ./KeyCodes */ \"./node_modules/phaser/src/input/keyboard/keys/KeyCodes.js\");\r\n\r\nvar KeyMap = {};\r\n\r\nfor (var key in KeyCodes)\r\n{\r\n KeyMap[KeyCodes[key]] = key;\r\n}\r\n\r\nmodule.exports = KeyMap;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9rZXlzL0tleU1hcC5qcz9jOTVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxlQUFlLG1CQUFPLENBQUMsNkVBQVk7O0FBRW5DOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvaW5wdXQva2V5Ym9hcmQva2V5cy9LZXlNYXAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBLZXlDb2RlcyA9IHJlcXVpcmUoJy4vS2V5Q29kZXMnKTtcclxuXHJcbnZhciBLZXlNYXAgPSB7fTtcclxuXHJcbmZvciAodmFyIGtleSBpbiBLZXlDb2Rlcylcclxue1xyXG4gICAgS2V5TWFwW0tleUNvZGVzW2tleV1dID0ga2V5O1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEtleU1hcDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/keys/KeyMap.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/keyboard/keys/UpDuration.js":
/*!*******************************************************************!*\
!*** ./node_modules/phaser/src/input/keyboard/keys/UpDuration.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Returns `true` if the Key was released within the `duration` value given, based on the current\r\n * game clock time. Or returns `false` if it either isn't up, or was released longer ago than the given duration.\r\n *\r\n * @function Phaser.Input.Keyboard.UpDuration\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.Keyboard.Key} key - The Key object to test.\r\n * @param {integer} [duration=50] - The duration, in ms, within which the key must have been released.\r\n *\r\n * @return {boolean} `true` if the Key was released within `duration` ms ago, otherwise `false`.\r\n */\r\nvar UpDuration = function (key, duration)\r\n{\r\n if (duration === undefined) { duration = 50; }\r\n\r\n var current = key.plugin.game.loop.time - key.timeUp;\r\n\r\n return (key.isUp && current < duration);\r\n};\r\n\r\nmodule.exports = UpDuration;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9rZXlzL1VwRHVyYXRpb24uanM/OTkzOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDBCQUEwQjtBQUNyQyxXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLGVBQWU7O0FBRWhEOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9rZXlib2FyZC9rZXlzL1VwRHVyYXRpb24uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgS2V5IHdhcyByZWxlYXNlZCB3aXRoaW4gdGhlIGBkdXJhdGlvbmAgdmFsdWUgZ2l2ZW4sIGJhc2VkIG9uIHRoZSBjdXJyZW50XHJcbiAqIGdhbWUgY2xvY2sgdGltZS4gT3IgcmV0dXJucyBgZmFsc2VgIGlmIGl0IGVpdGhlciBpc24ndCB1cCwgb3Igd2FzIHJlbGVhc2VkIGxvbmdlciBhZ28gdGhhbiB0aGUgZ2l2ZW4gZHVyYXRpb24uXHJcbiAqXHJcbiAqIEBmdW5jdGlvbiBQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuVXBEdXJhdGlvblxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuS2V5Ym9hcmQuS2V5fSBrZXkgLSBUaGUgS2V5IG9iamVjdCB0byB0ZXN0LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtkdXJhdGlvbj01MF0gLSBUaGUgZHVyYXRpb24sIGluIG1zLCB3aXRoaW4gd2hpY2ggdGhlIGtleSBtdXN0IGhhdmUgYmVlbiByZWxlYXNlZC5cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBLZXkgd2FzIHJlbGVhc2VkIHdpdGhpbiBgZHVyYXRpb25gIG1zIGFnbywgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAqL1xyXG52YXIgVXBEdXJhdGlvbiA9IGZ1bmN0aW9uIChrZXksIGR1cmF0aW9uKVxyXG57XHJcbiAgICBpZiAoZHVyYXRpb24gPT09IHVuZGVmaW5lZCkgeyBkdXJhdGlvbiA9IDUwOyB9XHJcblxyXG4gICAgdmFyIGN1cnJlbnQgPSBrZXkucGx1Z2luLmdhbWUubG9vcC50aW1lIC0ga2V5LnRpbWVVcDtcclxuXHJcbiAgICByZXR1cm4gKGtleS5pc1VwICYmIGN1cnJlbnQgPCBkdXJhdGlvbik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFVwRHVyYXRpb247XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/keyboard/keys/UpDuration.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/mouse/MouseManager.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/input/mouse/MouseManager.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Features = __webpack_require__(/*! ../../device/Features */ \"./node_modules/phaser/src/device/Features.js\");\r\nvar InputEvents = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/input/events/index.js\");\r\nvar NOOP = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n// https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent\r\n// https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\r\n\r\n/**\r\n * @classdesc\r\n * The Mouse Manager is a helper class that belongs to the Input Manager.\r\n * \r\n * Its role is to listen for native DOM Mouse Events and then pass them onto the Input Manager for further processing.\r\n * \r\n * You do not need to create this class directly, the Input Manager will create an instance of it automatically.\r\n *\r\n * @class MouseManager\r\n * @memberof Phaser.Input.Mouse\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.InputManager} inputManager - A reference to the Input Manager.\r\n */\r\nvar MouseManager = new Class({\r\n\r\n initialize:\r\n\r\n function MouseManager (inputManager)\r\n {\r\n /**\r\n * A reference to the Input Manager.\r\n *\r\n * @name Phaser.Input.Mouse.MouseManager#manager\r\n * @type {Phaser.Input.InputManager}\r\n * @since 3.0.0\r\n */\r\n this.manager = inputManager;\r\n\r\n /**\r\n * If true the DOM mouse events will have event.preventDefault applied to them, if false they will propagate fully.\r\n *\r\n * @name Phaser.Input.Mouse.MouseManager#capture\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.capture = true;\r\n\r\n /**\r\n * A boolean that controls if the Mouse Manager is enabled or not.\r\n * Can be toggled on the fly.\r\n *\r\n * @name Phaser.Input.Mouse.MouseManager#enabled\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.enabled = false;\r\n\r\n /**\r\n * The Mouse target, as defined in the Game Config.\r\n * Typically the canvas to which the game is rendering, but can be any interactive DOM element.\r\n *\r\n * @name Phaser.Input.Mouse.MouseManager#target\r\n * @type {any}\r\n * @since 3.0.0\r\n */\r\n this.target;\r\n\r\n /**\r\n * If the mouse has been pointer locked successfully this will be set to true.\r\n *\r\n * @name Phaser.Input.Mouse.MouseManager#locked\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.locked = false;\r\n\r\n /**\r\n * The Mouse Move Event handler.\r\n * This function is sent the native DOM MouseEvent.\r\n * Initially empty and bound in the `startListeners` method.\r\n *\r\n * @name Phaser.Input.Mouse.MouseManager#onMouseMove\r\n * @type {function}\r\n * @since 3.10.0\r\n */\r\n this.onMouseMove = NOOP;\r\n\r\n /**\r\n * The Mouse Down Event handler.\r\n * This function is sent the native DOM MouseEvent.\r\n * Initially empty and bound in the `startListeners` method.\r\n *\r\n * @name Phaser.Input.Mouse.MouseManager#onMouseDown\r\n * @type {function}\r\n * @since 3.10.0\r\n */\r\n this.onMouseDown = NOOP;\r\n\r\n /**\r\n * The Mouse Up Event handler.\r\n * This function is sent the native DOM MouseEvent.\r\n * Initially empty and bound in the `startListeners` method.\r\n *\r\n * @name Phaser.Input.Mouse.MouseManager#onMouseUp\r\n * @type {function}\r\n * @since 3.10.0\r\n */\r\n this.onMouseUp = NOOP;\r\n\r\n /**\r\n * The Mouse Down Event handler specifically for events on the Window.\r\n * This function is sent the native DOM MouseEvent.\r\n * Initially empty and bound in the `startListeners` method.\r\n *\r\n * @name Phaser.Input.Mouse.MouseManager#onMouseDownWindow\r\n * @type {function}\r\n * @since 3.17.0\r\n */\r\n this.onMouseDownWindow = NOOP;\r\n\r\n /**\r\n * The Mouse Up Event handler specifically for events on the Window.\r\n * This function is sent the native DOM MouseEvent.\r\n * Initially empty and bound in the `startListeners` method.\r\n *\r\n * @name Phaser.Input.Mouse.MouseManager#onMouseUpWindow\r\n * @type {function}\r\n * @since 3.17.0\r\n */\r\n this.onMouseUpWindow = NOOP;\r\n\r\n /**\r\n * The Mouse Over Event handler.\r\n * This function is sent the native DOM MouseEvent.\r\n * Initially empty and bound in the `startListeners` method.\r\n *\r\n * @name Phaser.Input.Mouse.MouseManager#onMouseOver\r\n * @type {function}\r\n * @since 3.16.0\r\n */\r\n this.onMouseOver = NOOP;\r\n\r\n /**\r\n * The Mouse Out Event handler.\r\n * This function is sent the native DOM MouseEvent.\r\n * Initially empty and bound in the `startListeners` method.\r\n *\r\n * @name Phaser.Input.Mouse.MouseManager#onMouseOut\r\n * @type {function}\r\n * @since 3.16.0\r\n */\r\n this.onMouseOut = NOOP;\r\n\r\n /**\r\n * The Mouse Wheel Event handler.\r\n * This function is sent the native DOM MouseEvent.\r\n * Initially empty and bound in the `startListeners` method.\r\n *\r\n * @name Phaser.Input.Mouse.MouseManager#onMouseWheel\r\n * @type {function}\r\n * @since 3.18.0\r\n */\r\n this.onMouseWheel = NOOP;\r\n\r\n /**\r\n * Internal pointerLockChange handler.\r\n * This function is sent the native DOM MouseEvent.\r\n * Initially empty and bound in the `startListeners` method.\r\n *\r\n * @name Phaser.Input.Mouse.MouseManager#pointerLockChange\r\n * @type {function}\r\n * @since 3.0.0\r\n */\r\n this.pointerLockChange = NOOP;\r\n\r\n inputManager.events.once(InputEvents.MANAGER_BOOT, this.boot, this);\r\n },\r\n\r\n /**\r\n * The Touch Manager boot process.\r\n *\r\n * @method Phaser.Input.Mouse.MouseManager#boot\r\n * @private\r\n * @since 3.0.0\r\n */\r\n boot: function ()\r\n {\r\n var config = this.manager.config;\r\n\r\n this.enabled = config.inputMouse;\r\n this.target = config.inputMouseEventTarget;\r\n this.capture = config.inputMouseCapture;\r\n\r\n if (!this.target)\r\n {\r\n this.target = this.manager.game.canvas;\r\n }\r\n else if (typeof this.target === 'string')\r\n {\r\n this.target = document.getElementById(this.target);\r\n }\r\n\r\n if (config.disableContextMenu)\r\n {\r\n this.disableContextMenu();\r\n }\r\n\r\n if (this.enabled && this.target)\r\n {\r\n this.startListeners();\r\n }\r\n },\r\n\r\n /**\r\n * Attempts to disable the context menu from appearing if you right-click on the browser.\r\n * \r\n * Works by listening for the `contextmenu` event and prevent defaulting it.\r\n * \r\n * Use this if you need to enable right-button mouse support in your game, and the browser\r\n * menu keeps getting in the way.\r\n *\r\n * @method Phaser.Input.Mouse.MouseManager#disableContextMenu\r\n * @since 3.0.0\r\n *\r\n * @return {Phaser.Input.Mouse.MouseManager} This Mouse Manager instance.\r\n */\r\n disableContextMenu: function ()\r\n {\r\n document.body.addEventListener('contextmenu', function (event)\r\n {\r\n event.preventDefault();\r\n return false;\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * If the browser supports it, you can request that the pointer be locked to the browser window.\r\n *\r\n * This is classically known as 'FPS controls', where the pointer can't leave the browser until\r\n * the user presses an exit key.\r\n *\r\n * If the browser successfully enters a locked state, a `POINTER_LOCK_CHANGE_EVENT` will be dispatched,\r\n * from the games Input Manager, with an `isPointerLocked` property.\r\n *\r\n * It is important to note that pointer lock can only be enabled after an 'engagement gesture',\r\n * see: https://w3c.github.io/pointerlock/#dfn-engagement-gesture.\r\n *\r\n * @method Phaser.Input.Mouse.MouseManager#requestPointerLock\r\n * @since 3.0.0\r\n */\r\n requestPointerLock: function ()\r\n {\r\n if (Features.pointerLock)\r\n {\r\n var element = this.target;\r\n\r\n element.requestPointerLock = element.requestPointerLock || element.mozRequestPointerLock || element.webkitRequestPointerLock;\r\n\r\n element.requestPointerLock();\r\n }\r\n },\r\n\r\n /**\r\n * If the browser supports pointer lock, this will request that the pointer lock is released. If\r\n * the browser successfully enters a locked state, a 'POINTER_LOCK_CHANGE_EVENT' will be\r\n * dispatched - from the game's input manager - with an `isPointerLocked` property.\r\n *\r\n * @method Phaser.Input.Mouse.MouseManager#releasePointerLock\r\n * @since 3.0.0\r\n */\r\n releasePointerLock: function ()\r\n {\r\n if (Features.pointerLock)\r\n {\r\n document.exitPointerLock = document.exitPointerLock || document.mozExitPointerLock || document.webkitExitPointerLock;\r\n document.exitPointerLock();\r\n }\r\n },\r\n\r\n /**\r\n * Starts the Mouse Event listeners running.\r\n * This is called automatically and does not need to be manually invoked.\r\n *\r\n * @method Phaser.Input.Mouse.MouseManager#startListeners\r\n * @since 3.0.0\r\n */\r\n startListeners: function ()\r\n {\r\n var _this = this;\r\n var canvas = this.manager.canvas;\r\n var autoFocus = (window && window.focus && this.manager.game.config.autoFocus);\r\n\r\n this.onMouseMove = function (event)\r\n {\r\n if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n {\r\n _this.manager.onMouseMove(event);\r\n \r\n if (_this.capture)\r\n {\r\n event.preventDefault();\r\n }\r\n }\r\n };\r\n\r\n this.onMouseDown = function (event)\r\n {\r\n if (autoFocus)\r\n {\r\n window.focus();\r\n }\r\n\r\n if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n {\r\n _this.manager.onMouseDown(event);\r\n \r\n if (_this.capture && event.target === canvas)\r\n {\r\n event.preventDefault();\r\n }\r\n }\r\n };\r\n\r\n this.onMouseDownWindow = function (event)\r\n {\r\n if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled && event.target !== canvas)\r\n {\r\n // Only process the event if the target isn't the canvas\r\n _this.manager.onMouseDown(event);\r\n }\r\n };\r\n\r\n this.onMouseUp = function (event)\r\n {\r\n if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n {\r\n _this.manager.onMouseUp(event);\r\n \r\n if (_this.capture && event.target === canvas)\r\n {\r\n event.preventDefault();\r\n }\r\n }\r\n };\r\n\r\n this.onMouseUpWindow = function (event)\r\n {\r\n if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled && event.target !== canvas)\r\n {\r\n // Only process the event if the target isn't the canvas\r\n _this.manager.onMouseUp(event);\r\n }\r\n };\r\n\r\n this.onMouseOver = function (event)\r\n {\r\n if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n {\r\n _this.manager.setCanvasOver(event);\r\n }\r\n };\r\n\r\n this.onMouseOut = function (event)\r\n {\r\n if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n {\r\n _this.manager.setCanvasOut(event);\r\n }\r\n };\r\n\r\n this.onMouseWheel = function (event)\r\n {\r\n if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n {\r\n _this.manager.onMouseWheel(event);\r\n }\r\n };\r\n\r\n var target = this.target;\r\n\r\n if (!target)\r\n {\r\n return;\r\n }\r\n\r\n var passive = { passive: true };\r\n var nonPassive = { passive: false };\r\n\r\n target.addEventListener('mousemove', this.onMouseMove, (this.capture) ? nonPassive : passive);\r\n target.addEventListener('mousedown', this.onMouseDown, (this.capture) ? nonPassive : passive);\r\n target.addEventListener('mouseup', this.onMouseUp, (this.capture) ? nonPassive : passive);\r\n target.addEventListener('mouseover', this.onMouseOver, (this.capture) ? nonPassive : passive);\r\n target.addEventListener('mouseout', this.onMouseOut, (this.capture) ? nonPassive : passive);\r\n target.addEventListener('wheel', this.onMouseWheel, (this.capture) ? nonPassive : passive);\r\n\r\n if (window && this.manager.game.config.inputWindowEvents)\r\n {\r\n window.addEventListener('mousedown', this.onMouseDownWindow, nonPassive);\r\n window.addEventListener('mouseup', this.onMouseUpWindow, nonPassive);\r\n }\r\n\r\n if (Features.pointerLock)\r\n {\r\n this.pointerLockChange = function (event)\r\n {\r\n var element = _this.target;\r\n\r\n _this.locked = (document.pointerLockElement === element || document.mozPointerLockElement === element || document.webkitPointerLockElement === element) ? true : false;\r\n\r\n _this.manager.onPointerLockChange(event);\r\n };\r\n\r\n document.addEventListener('pointerlockchange', this.pointerLockChange, true);\r\n document.addEventListener('mozpointerlockchange', this.pointerLockChange, true);\r\n document.addEventListener('webkitpointerlockchange', this.pointerLockChange, true);\r\n }\r\n\r\n this.enabled = true;\r\n },\r\n\r\n /**\r\n * Stops the Mouse Event listeners.\r\n * This is called automatically and does not need to be manually invoked.\r\n *\r\n * @method Phaser.Input.Mouse.MouseManager#stopListeners\r\n * @since 3.0.0\r\n */\r\n stopListeners: function ()\r\n {\r\n var target = this.target;\r\n\r\n target.removeEventListener('mousemove', this.onMouseMove);\r\n target.removeEventListener('mousedown', this.onMouseDown);\r\n target.removeEventListener('mouseup', this.onMouseUp);\r\n target.removeEventListener('mouseover', this.onMouseOver);\r\n target.removeEventListener('mouseout', this.onMouseOut);\r\n\r\n if (window)\r\n {\r\n window.removeEventListener('mousedown', this.onMouseDownWindow);\r\n window.removeEventListener('mouseup', this.onMouseUpWindow);\r\n }\r\n\r\n if (Features.pointerLock)\r\n {\r\n document.removeEventListener('pointerlockchange', this.pointerLockChange, true);\r\n document.removeEventListener('mozpointerlockchange', this.pointerLockChange, true);\r\n document.removeEventListener('webkitpointerlockchange', this.pointerLockChange, true);\r\n }\r\n },\r\n\r\n /**\r\n * Destroys this Mouse Manager instance.\r\n *\r\n * @method Phaser.Input.Mouse.MouseManager#destroy\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.stopListeners();\r\n\r\n this.target = null;\r\n this.enabled = false;\r\n this.manager = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = MouseManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9tb3VzZS9Nb3VzZU1hbmFnZXIuanM/Y2MwMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxlQUFlLG1CQUFPLENBQUMsMkVBQXVCO0FBQzlDLGtCQUFrQixtQkFBTyxDQUFDLGtFQUFXO0FBQ3JDLFdBQVcsbUJBQU8sQ0FBQyxtRUFBbUI7O0FBRXRDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDBCQUEwQjtBQUNyQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsZ0NBQWdDO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCO0FBQ3ZCLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L21vdXNlL01vdXNlTWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEZlYXR1cmVzID0gcmVxdWlyZSgnLi4vLi4vZGV2aWNlL0ZlYXR1cmVzJyk7XHJcbnZhciBJbnB1dEV2ZW50cyA9IHJlcXVpcmUoJy4uL2V2ZW50cycpO1xyXG52YXIgTk9PUCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcblxyXG4vLyAgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL01vdXNlRXZlbnRcclxuLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL0V2ZW50TGlzdGVuZXJPcHRpb25zL2Jsb2IvZ2gtcGFnZXMvZXhwbGFpbmVyLm1kXHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBUaGUgTW91c2UgTWFuYWdlciBpcyBhIGhlbHBlciBjbGFzcyB0aGF0IGJlbG9uZ3MgdG8gdGhlIElucHV0IE1hbmFnZXIuXHJcbiAqIFxyXG4gKiBJdHMgcm9sZSBpcyB0byBsaXN0ZW4gZm9yIG5hdGl2ZSBET00gTW91c2UgRXZlbnRzIGFuZCB0aGVuIHBhc3MgdGhlbSBvbnRvIHRoZSBJbnB1dCBNYW5hZ2VyIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuXHJcbiAqIFxyXG4gKiBZb3UgZG8gbm90IG5lZWQgdG8gY3JlYXRlIHRoaXMgY2xhc3MgZGlyZWN0bHksIHRoZSBJbnB1dCBNYW5hZ2VyIHdpbGwgY3JlYXRlIGFuIGluc3RhbmNlIG9mIGl0IGF1dG9tYXRpY2FsbHkuXHJcbiAqXHJcbiAqIEBjbGFzcyBNb3VzZU1hbmFnZXJcclxuICogQG1lbWJlcm9mIFBoYXNlci5JbnB1dC5Nb3VzZVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLklucHV0LklucHV0TWFuYWdlcn0gaW5wdXRNYW5hZ2VyIC0gQSByZWZlcmVuY2UgdG8gdGhlIElucHV0IE1hbmFnZXIuXHJcbiAqL1xyXG52YXIgTW91c2VNYW5hZ2VyID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIE1vdXNlTWFuYWdlciAoaW5wdXRNYW5hZ2VyKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBJbnB1dCBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0Lk1vdXNlLk1vdXNlTWFuYWdlciNtYW5hZ2VyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5JbnB1dC5JbnB1dE1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gaW5wdXRNYW5hZ2VyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiB0cnVlIHRoZSBET00gbW91c2UgZXZlbnRzIHdpbGwgaGF2ZSBldmVudC5wcmV2ZW50RGVmYXVsdCBhcHBsaWVkIHRvIHRoZW0sIGlmIGZhbHNlIHRoZXkgd2lsbCBwcm9wYWdhdGUgZnVsbHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuTW91c2UuTW91c2VNYW5hZ2VyI2NhcHR1cmVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jYXB0dXJlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBib29sZWFuIHRoYXQgY29udHJvbHMgaWYgdGhlIE1vdXNlIE1hbmFnZXIgaXMgZW5hYmxlZCBvciBub3QuXHJcbiAgICAgICAgICogQ2FuIGJlIHRvZ2dsZWQgb24gdGhlIGZseS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Nb3VzZS5Nb3VzZU1hbmFnZXIjZW5hYmxlZFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBNb3VzZSB0YXJnZXQsIGFzIGRlZmluZWQgaW4gdGhlIEdhbWUgQ29uZmlnLlxyXG4gICAgICAgICAqIFR5cGljYWxseSB0aGUgY2FudmFzIHRvIHdoaWNoIHRoZSBnYW1lIGlzIHJlbmRlcmluZywgYnV0IGNhbiBiZSBhbnkgaW50ZXJhY3RpdmUgRE9NIGVsZW1lbnQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuTW91c2UuTW91c2VNYW5hZ2VyI3RhcmdldFxyXG4gICAgICAgICAqIEB0eXBlIHthbnl9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50YXJnZXQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHRoZSBtb3VzZSBoYXMgYmVlbiBwb2ludGVyIGxvY2tlZCBzdWNjZXNzZnVsbHkgdGhpcyB3aWxsIGJlIHNldCB0byB0cnVlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0Lk1vdXNlLk1vdXNlTWFuYWdlciNsb2NrZWRcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubG9ja2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBNb3VzZSBNb3ZlIEV2ZW50IGhhbmRsZXIuXHJcbiAgICAgICAgICogVGhpcyBmdW5jdGlvbiBpcyBzZW50IHRoZSBuYXRpdmUgRE9NIE1vdXNlRXZlbnQuXHJcbiAgICAgICAgICogSW5pdGlhbGx5IGVtcHR5IGFuZCBib3VuZCBpbiB0aGUgYHN0YXJ0TGlzdGVuZXJzYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuTW91c2UuTW91c2VNYW5hZ2VyI29uTW91c2VNb3ZlXHJcbiAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9uTW91c2VNb3ZlID0gTk9PUDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIE1vdXNlIERvd24gRXZlbnQgaGFuZGxlci5cclxuICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHNlbnQgdGhlIG5hdGl2ZSBET00gTW91c2VFdmVudC5cclxuICAgICAgICAgKiBJbml0aWFsbHkgZW1wdHkgYW5kIGJvdW5kIGluIHRoZSBgc3RhcnRMaXN0ZW5lcnNgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Nb3VzZS5Nb3VzZU1hbmFnZXIjb25Nb3VzZURvd25cclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub25Nb3VzZURvd24gPSBOT09QO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgTW91c2UgVXAgRXZlbnQgaGFuZGxlci5cclxuICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHNlbnQgdGhlIG5hdGl2ZSBET00gTW91c2VFdmVudC5cclxuICAgICAgICAgKiBJbml0aWFsbHkgZW1wdHkgYW5kIGJvdW5kIGluIHRoZSBgc3RhcnRMaXN0ZW5lcnNgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Nb3VzZS5Nb3VzZU1hbmFnZXIjb25Nb3VzZVVwXHJcbiAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjEwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9uTW91c2VVcCA9IE5PT1A7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBNb3VzZSBEb3duIEV2ZW50IGhhbmRsZXIgc3BlY2lmaWNhbGx5IGZvciBldmVudHMgb24gdGhlIFdpbmRvdy5cclxuICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHNlbnQgdGhlIG5hdGl2ZSBET00gTW91c2VFdmVudC5cclxuICAgICAgICAgKiBJbml0aWFsbHkgZW1wdHkgYW5kIGJvdW5kIGluIHRoZSBgc3RhcnRMaXN0ZW5lcnNgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Nb3VzZS5Nb3VzZU1hbmFnZXIjb25Nb3VzZURvd25XaW5kb3dcclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub25Nb3VzZURvd25XaW5kb3cgPSBOT09QO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgTW91c2UgVXAgRXZlbnQgaGFuZGxlciBzcGVjaWZpY2FsbHkgZm9yIGV2ZW50cyBvbiB0aGUgV2luZG93LlxyXG4gICAgICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgc2VudCB0aGUgbmF0aXZlIERPTSBNb3VzZUV2ZW50LlxyXG4gICAgICAgICAqIEluaXRpYWxseSBlbXB0eSBhbmQgYm91bmQgaW4gdGhlIGBzdGFydExpc3RlbmVyc2AgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0Lk1vdXNlLk1vdXNlTWFuYWdlciNvbk1vdXNlVXBXaW5kb3dcclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub25Nb3VzZVVwV2luZG93ID0gTk9PUDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIE1vdXNlIE92ZXIgRXZlbnQgaGFuZGxlci5cclxuICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHNlbnQgdGhlIG5hdGl2ZSBET00gTW91c2VFdmVudC5cclxuICAgICAgICAgKiBJbml0aWFsbHkgZW1wdHkgYW5kIGJvdW5kIGluIHRoZSBgc3RhcnRMaXN0ZW5lcnNgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Nb3VzZS5Nb3VzZU1hbmFnZXIjb25Nb3VzZU92ZXJcclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub25Nb3VzZU92ZXIgPSBOT09QO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgTW91c2UgT3V0IEV2ZW50IGhhbmRsZXIuXHJcbiAgICAgICAgICogVGhpcyBmdW5jdGlvbiBpcyBzZW50IHRoZSBuYXRpdmUgRE9NIE1vdXNlRXZlbnQuXHJcbiAgICAgICAgICogSW5pdGlhbGx5IGVtcHR5IGFuZCBib3VuZCBpbiB0aGUgYHN0YXJ0TGlzdGVuZXJzYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuTW91c2UuTW91c2VNYW5hZ2VyI29uTW91c2VPdXRcclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTYuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub25Nb3VzZU91dCA9IE5PT1A7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBNb3VzZSBXaGVlbCBFdmVudCBoYW5kbGVyLlxyXG4gICAgICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgc2VudCB0aGUgbmF0aXZlIERPTSBNb3VzZUV2ZW50LlxyXG4gICAgICAgICAqIEluaXRpYWxseSBlbXB0eSBhbmQgYm91bmQgaW4gdGhlIGBzdGFydExpc3RlbmVyc2AgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0Lk1vdXNlLk1vdXNlTWFuYWdlciNvbk1vdXNlV2hlZWxcclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTguMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub25Nb3VzZVdoZWVsID0gTk9PUDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW50ZXJuYWwgcG9pbnRlckxvY2tDaGFuZ2UgaGFuZGxlci5cclxuICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHNlbnQgdGhlIG5hdGl2ZSBET00gTW91c2VFdmVudC5cclxuICAgICAgICAgKiBJbml0aWFsbHkgZW1wdHkgYW5kIGJvdW5kIGluIHRoZSBgc3RhcnRMaXN0ZW5lcnNgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Nb3VzZS5Nb3VzZU1hbmFnZXIjcG9pbnRlckxvY2tDaGFuZ2VcclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wb2ludGVyTG9ja0NoYW5nZSA9IE5PT1A7XHJcblxyXG4gICAgICAgIGlucHV0TWFuYWdlci5ldmVudHMub25jZShJbnB1dEV2ZW50cy5NQU5BR0VSX0JPT1QsIHRoaXMuYm9vdCwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFRvdWNoIE1hbmFnZXIgYm9vdCBwcm9jZXNzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0Lk1vdXNlLk1vdXNlTWFuYWdlciNib290XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGJvb3Q6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGNvbmZpZyA9IHRoaXMubWFuYWdlci5jb25maWc7XHJcblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGNvbmZpZy5pbnB1dE1vdXNlO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0ID0gY29uZmlnLmlucHV0TW91c2VFdmVudFRhcmdldDtcclxuICAgICAgICB0aGlzLmNhcHR1cmUgPSBjb25maWcuaW5wdXRNb3VzZUNhcHR1cmU7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy50YXJnZXQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnRhcmdldCA9IHRoaXMubWFuYWdlci5nYW1lLmNhbnZhcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHRoaXMudGFyZ2V0ID09PSAnc3RyaW5nJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy50YXJnZXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbmZpZy5kaXNhYmxlQ29udGV4dE1lbnUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVDb250ZXh0TWVudSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlZCAmJiB0aGlzLnRhcmdldClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRMaXN0ZW5lcnMoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXR0ZW1wdHMgdG8gZGlzYWJsZSB0aGUgY29udGV4dCBtZW51IGZyb20gYXBwZWFyaW5nIGlmIHlvdSByaWdodC1jbGljayBvbiB0aGUgYnJvd3Nlci5cclxuICAgICAqIFxyXG4gICAgICogV29ya3MgYnkgbGlzdGVuaW5nIGZvciB0aGUgYGNvbnRleHRtZW51YCBldmVudCBhbmQgcHJldmVudCBkZWZhdWx0aW5nIGl0LlxyXG4gICAgICogXHJcbiAgICAgKiBVc2UgdGhpcyBpZiB5b3UgbmVlZCB0byBlbmFibGUgcmlnaHQtYnV0dG9uIG1vdXNlIHN1cHBvcnQgaW4geW91ciBnYW1lLCBhbmQgdGhlIGJyb3dzZXJcclxuICAgICAqIG1lbnUga2VlcHMgZ2V0dGluZyBpbiB0aGUgd2F5LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0Lk1vdXNlLk1vdXNlTWFuYWdlciNkaXNhYmxlQ29udGV4dE1lbnVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5Nb3VzZS5Nb3VzZU1hbmFnZXJ9IFRoaXMgTW91c2UgTWFuYWdlciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgZGlzYWJsZUNvbnRleHRNZW51OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHRoZSBicm93c2VyIHN1cHBvcnRzIGl0LCB5b3UgY2FuIHJlcXVlc3QgdGhhdCB0aGUgcG9pbnRlciBiZSBsb2NrZWQgdG8gdGhlIGJyb3dzZXIgd2luZG93LlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgaXMgY2xhc3NpY2FsbHkga25vd24gYXMgJ0ZQUyBjb250cm9scycsIHdoZXJlIHRoZSBwb2ludGVyIGNhbid0IGxlYXZlIHRoZSBicm93c2VyIHVudGlsXHJcbiAgICAgKiB0aGUgdXNlciBwcmVzc2VzIGFuIGV4aXQga2V5LlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBicm93c2VyIHN1Y2Nlc3NmdWxseSBlbnRlcnMgYSBsb2NrZWQgc3RhdGUsIGEgYFBPSU5URVJfTE9DS19DSEFOR0VfRVZFTlRgIHdpbGwgYmUgZGlzcGF0Y2hlZCxcclxuICAgICAqIGZyb20gdGhlIGdhbWVzIElucHV0IE1hbmFnZXIsIHdpdGggYW4gYGlzUG9pbnRlckxvY2tlZGAgcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBwb2ludGVyIGxvY2sgY2FuIG9ubHkgYmUgZW5hYmxlZCBhZnRlciBhbiAnZW5nYWdlbWVudCBnZXN0dXJlJyxcclxuICAgICAqIHNlZTogaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3BvaW50ZXJsb2NrLyNkZm4tZW5nYWdlbWVudC1nZXN0dXJlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLklucHV0Lk1vdXNlLk1vdXNlTWFuYWdlciNyZXF1ZXN0UG9pbnRlckxvY2tcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICByZXF1ZXN0UG9pbnRlckxvY2s6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKEZlYXR1cmVzLnBvaW50ZXJMb2NrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLnRhcmdldDtcclxuXHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVxdWVzdFBvaW50ZXJMb2NrID0gZWxlbWVudC5yZXF1ZXN0UG9pbnRlckxvY2sgfHwgZWxlbWVudC5tb3pSZXF1ZXN0UG9pbnRlckxvY2sgfHwgZWxlbWVudC53ZWJraXRSZXF1ZXN0UG9pbnRlckxvY2s7XHJcblxyXG4gICAgICAgICAgICBlbGVtZW50LnJlcXVlc3RQb2ludGVyTG9jaygpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB0aGUgYnJvd3NlciBzdXBwb3J0cyBwb2ludGVyIGxvY2ssIHRoaXMgd2lsbCByZXF1ZXN0IHRoYXQgdGhlIHBvaW50ZXIgbG9jayBpcyByZWxlYXNlZC4gSWZcclxuICAgICAqIHRoZSBicm93c2VyIHN1Y2Nlc3NmdWxseSBlbnRlcnMgYSBsb2NrZWQgc3RhdGUsIGEgJ1BPSU5URVJfTE9DS19DSEFOR0VfRVZFTlQnIHdpbGwgYmVcclxuICAgICAqIGRpc3BhdGNoZWQgLSBmcm9tIHRoZSBnYW1lJ3MgaW5wdXQgbWFuYWdlciAtIHdpdGggYW4gYGlzUG9pbnRlckxvY2tlZGAgcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuTW91c2UuTW91c2VNYW5hZ2VyI3JlbGVhc2VQb2ludGVyTG9ja1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHJlbGVhc2VQb2ludGVyTG9jazogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAoRmVhdHVyZXMucG9pbnRlckxvY2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5leGl0UG9pbnRlckxvY2sgPSBkb2N1bWVudC5leGl0UG9pbnRlckxvY2sgfHwgZG9jdW1lbnQubW96RXhpdFBvaW50ZXJMb2NrIHx8IGRvY3VtZW50LndlYmtpdEV4aXRQb2ludGVyTG9jaztcclxuICAgICAgICAgICAgZG9jdW1lbnQuZXhpdFBvaW50ZXJMb2NrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YXJ0cyB0aGUgTW91c2UgRXZlbnQgbGlzdGVuZXJzIHJ1bm5pbmcuXHJcbiAgICAgKiBUaGlzIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGFuZCBkb2VzIG5vdCBuZWVkIHRvIGJlIG1hbnVhbGx5IGludm9rZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuTW91c2UuTW91c2VNYW5hZ2VyI3N0YXJ0TGlzdGVuZXJzXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgc3RhcnRMaXN0ZW5lcnM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2YXIgY2FudmFzID0gdGhpcy5tYW5hZ2VyLmNhbnZhcztcclxuICAgICAgICB2YXIgYXV0b0ZvY3VzID0gKHdpbmRvdyAmJiB3aW5kb3cuZm9jdXMgJiYgdGhpcy5tYW5hZ2VyLmdhbWUuY29uZmlnLmF1dG9Gb2N1cyk7XHJcblxyXG4gICAgICAgIHRoaXMub25Nb3VzZU1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgJiYgX3RoaXMuZW5hYmxlZCAmJiBfdGhpcy5tYW5hZ2VyICYmIF90aGlzLm1hbmFnZXIuZW5hYmxlZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMubWFuYWdlci5vbk1vdXNlTW92ZShldmVudCk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5jYXB0dXJlKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLm9uTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGF1dG9Gb2N1cylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCAmJiBfdGhpcy5lbmFibGVkICYmIF90aGlzLm1hbmFnZXIgJiYgX3RoaXMubWFuYWdlci5lbmFibGVkKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5tYW5hZ2VyLm9uTW91c2VEb3duKGV2ZW50KTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLmNhcHR1cmUgJiYgZXZlbnQudGFyZ2V0ID09PSBjYW52YXMpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMub25Nb3VzZURvd25XaW5kb3cgPSBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgJiYgX3RoaXMuZW5hYmxlZCAmJiBfdGhpcy5tYW5hZ2VyICYmIF90aGlzLm1hbmFnZXIuZW5hYmxlZCAmJiBldmVudC50YXJnZXQgIT09IGNhbnZhcylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIE9ubHkgcHJvY2VzcyB0aGUgZXZlbnQgaWYgdGhlIHRhcmdldCBpc24ndCB0aGUgY2FudmFzXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5tYW5hZ2VyLm9uTW91c2VEb3duKGV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMub25Nb3VzZVVwID0gZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkICYmIF90aGlzLmVuYWJsZWQgJiYgX3RoaXMubWFuYWdlciAmJiBfdGhpcy5tYW5hZ2VyLmVuYWJsZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLm1hbmFnZXIub25Nb3VzZVVwKGV2ZW50KTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLmNhcHR1cmUgJiYgZXZlbnQudGFyZ2V0ID09PSBjYW52YXMpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMub25Nb3VzZVVwV2luZG93ID0gZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkICYmIF90aGlzLmVuYWJsZWQgJiYgX3RoaXMubWFuYWdlciAmJiBfdGhpcy5tYW5hZ2VyLmVuYWJsZWQgJiYgZXZlbnQudGFyZ2V0ICE9PSBjYW52YXMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBPbmx5IHByb2Nlc3MgdGhlIGV2ZW50IGlmIHRoZSB0YXJnZXQgaXNuJ3QgdGhlIGNhbnZhc1xyXG4gICAgICAgICAgICAgICAgX3RoaXMubWFuYWdlci5vbk1vdXNlVXAoZXZlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5vbk1vdXNlT3ZlciA9IGZ1bmN0aW9uIChldmVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCAmJiBfdGhpcy5lbmFibGVkICYmIF90aGlzLm1hbmFnZXIgJiYgX3RoaXMubWFuYWdlci5lbmFibGVkKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5tYW5hZ2VyLnNldENhbnZhc092ZXIoZXZlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5vbk1vdXNlT3V0ID0gZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkICYmIF90aGlzLmVuYWJsZWQgJiYgX3RoaXMubWFuYWdlciAmJiBfdGhpcy5tYW5hZ2VyLmVuYWJsZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLm1hbmFnZXIuc2V0Q2FudmFzT3V0KGV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMub25Nb3VzZVdoZWVsID0gZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkICYmIF90aGlzLmVuYWJsZWQgJiYgX3RoaXMubWFuYWdlciAmJiBfdGhpcy5tYW5hZ2VyLmVuYWJsZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLm1hbmFnZXIub25Nb3VzZVdoZWVsKGV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLnRhcmdldDtcclxuXHJcbiAgICAgICAgaWYgKCF0YXJnZXQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcGFzc2l2ZSA9IHsgcGFzc2l2ZTogdHJ1ZSB9O1xyXG4gICAgICAgIHZhciBub25QYXNzaXZlID0geyBwYXNzaXZlOiBmYWxzZSB9O1xyXG5cclxuICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk1vdXNlTW92ZSwgKHRoaXMuY2FwdHVyZSkgPyBub25QYXNzaXZlIDogcGFzc2l2ZSk7XHJcbiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd24sICh0aGlzLmNhcHR1cmUpID8gbm9uUGFzc2l2ZSA6IHBhc3NpdmUpO1xyXG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbk1vdXNlVXAsICh0aGlzLmNhcHR1cmUpID8gbm9uUGFzc2l2ZSA6IHBhc3NpdmUpO1xyXG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCB0aGlzLm9uTW91c2VPdmVyLCAodGhpcy5jYXB0dXJlKSA/IG5vblBhc3NpdmUgOiBwYXNzaXZlKTtcclxuICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCB0aGlzLm9uTW91c2VPdXQsICh0aGlzLmNhcHR1cmUpID8gbm9uUGFzc2l2ZSA6IHBhc3NpdmUpO1xyXG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCd3aGVlbCcsIHRoaXMub25Nb3VzZVdoZWVsLCAodGhpcy5jYXB0dXJlKSA/IG5vblBhc3NpdmUgOiBwYXNzaXZlKTtcclxuXHJcbiAgICAgICAgaWYgKHdpbmRvdyAmJiB0aGlzLm1hbmFnZXIuZ2FtZS5jb25maWcuaW5wdXRXaW5kb3dFdmVudHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbk1vdXNlRG93bldpbmRvdywgbm9uUGFzc2l2ZSk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbk1vdXNlVXBXaW5kb3csIG5vblBhc3NpdmUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEZlYXR1cmVzLnBvaW50ZXJMb2NrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wb2ludGVyTG9ja0NoYW5nZSA9IGZ1bmN0aW9uIChldmVudClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBfdGhpcy50YXJnZXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgX3RoaXMubG9ja2VkID0gKGRvY3VtZW50LnBvaW50ZXJMb2NrRWxlbWVudCA9PT0gZWxlbWVudCB8fCBkb2N1bWVudC5tb3pQb2ludGVyTG9ja0VsZW1lbnQgPT09IGVsZW1lbnQgfHwgZG9jdW1lbnQud2Via2l0UG9pbnRlckxvY2tFbGVtZW50ID09PSBlbGVtZW50KSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5tYW5hZ2VyLm9uUG9pbnRlckxvY2tDaGFuZ2UoZXZlbnQpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmxvY2tjaGFuZ2UnLCB0aGlzLnBvaW50ZXJMb2NrQ2hhbmdlLCB0cnVlKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW96cG9pbnRlcmxvY2tjaGFuZ2UnLCB0aGlzLnBvaW50ZXJMb2NrQ2hhbmdlLCB0cnVlKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignd2Via2l0cG9pbnRlcmxvY2tjaGFuZ2UnLCB0aGlzLnBvaW50ZXJMb2NrQ2hhbmdlLCB0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcHMgdGhlIE1vdXNlIEV2ZW50IGxpc3RlbmVycy5cclxuICAgICAqIFRoaXMgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYW5kIGRvZXMgbm90IG5lZWQgdG8gYmUgbWFudWFsbHkgaW52b2tlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Nb3VzZS5Nb3VzZU1hbmFnZXIjc3RvcExpc3RlbmVyc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHN0b3BMaXN0ZW5lcnM6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk1vdXNlTW92ZSk7XHJcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd24pO1xyXG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbk1vdXNlVXApO1xyXG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCB0aGlzLm9uTW91c2VPdmVyKTtcclxuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCB0aGlzLm9uTW91c2VPdXQpO1xyXG5cclxuICAgICAgICBpZiAod2luZG93KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd25XaW5kb3cpO1xyXG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25Nb3VzZVVwV2luZG93KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChGZWF0dXJlcy5wb2ludGVyTG9jaylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJsb2NrY2hhbmdlJywgdGhpcy5wb2ludGVyTG9ja0NoYW5nZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21venBvaW50ZXJsb2NrY2hhbmdlJywgdGhpcy5wb2ludGVyTG9ja0NoYW5nZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmtpdHBvaW50ZXJsb2NrY2hhbmdlJywgdGhpcy5wb2ludGVyTG9ja0NoYW5nZSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoaXMgTW91c2UgTWFuYWdlciBpbnN0YW5jZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Nb3VzZS5Nb3VzZU1hbmFnZXIjZGVzdHJveVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zdG9wTGlzdGVuZXJzKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGFyZ2V0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1hbmFnZXIgPSBudWxsO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE1vdXNlTWFuYWdlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/mouse/MouseManager.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/mouse/index.js":
/*!******************************************************!*\
!*** ./node_modules/phaser/src/input/mouse/index.js ***!
\******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Input.Mouse\r\n */\r\n\r\n/* eslint-disable */\r\nmodule.exports = {\r\n\r\n MouseManager: __webpack_require__(/*! ./MouseManager */ \"./node_modules/phaser/src/input/mouse/MouseManager.js\")\r\n \r\n};\r\n/* eslint-enable */\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9tb3VzZS9pbmRleC5qcz9kNTUwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyw2RUFBZ0I7O0FBRTFDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC9tb3VzZS9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLklucHV0Lk1vdXNlXHJcbiAqL1xyXG5cclxuLyogZXNsaW50LWRpc2FibGUgKi9cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgTW91c2VNYW5hZ2VyOiByZXF1aXJlKCcuL01vdXNlTWFuYWdlcicpXHJcbiAgICAgICBcclxufTtcclxuLyogZXNsaW50LWVuYWJsZSAqL1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/mouse/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/touch/TouchManager.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/input/touch/TouchManager.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar InputEvents = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/input/events/index.js\");\r\nvar NOOP = __webpack_require__(/*! ../../utils/NOOP */ \"./node_modules/phaser/src/utils/NOOP.js\");\r\n\r\n// https://developer.mozilla.org/en-US/docs/Web/API/Touch_events\r\n// https://patrickhlauke.github.io/touch/tests/results/\r\n// https://www.html5rocks.com/en/mobile/touch/\r\n\r\n/**\r\n * @classdesc\r\n * The Touch Manager is a helper class that belongs to the Input Manager.\r\n * \r\n * Its role is to listen for native DOM Touch Events and then pass them onto the Input Manager for further processing.\r\n * \r\n * You do not need to create this class directly, the Input Manager will create an instance of it automatically.\r\n *\r\n * @class TouchManager\r\n * @memberof Phaser.Input.Touch\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Input.InputManager} inputManager - A reference to the Input Manager.\r\n */\r\nvar TouchManager = new Class({\r\n\r\n initialize:\r\n\r\n function TouchManager (inputManager)\r\n {\r\n /**\r\n * A reference to the Input Manager.\r\n *\r\n * @name Phaser.Input.Touch.TouchManager#manager\r\n * @type {Phaser.Input.InputManager}\r\n * @since 3.0.0\r\n */\r\n this.manager = inputManager;\r\n\r\n /**\r\n * If true the DOM events will have event.preventDefault applied to them, if false they will propagate fully.\r\n *\r\n * @name Phaser.Input.Touch.TouchManager#capture\r\n * @type {boolean}\r\n * @default true\r\n * @since 3.0.0\r\n */\r\n this.capture = true;\r\n\r\n /**\r\n * A boolean that controls if the Touch Manager is enabled or not.\r\n * Can be toggled on the fly.\r\n *\r\n * @name Phaser.Input.Touch.TouchManager#enabled\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.0.0\r\n */\r\n this.enabled = false;\r\n\r\n /**\r\n * The Touch Event target, as defined in the Game Config.\r\n * Typically the canvas to which the game is rendering, but can be any interactive DOM element.\r\n *\r\n * @name Phaser.Input.Touch.TouchManager#target\r\n * @type {any}\r\n * @since 3.0.0\r\n */\r\n this.target;\r\n\r\n /**\r\n * The Touch Start event handler function.\r\n * Initially empty and bound in the `startListeners` method.\r\n *\r\n * @name Phaser.Input.Touch.TouchManager#onTouchStart\r\n * @type {function}\r\n * @since 3.0.0\r\n */\r\n this.onTouchStart = NOOP;\r\n\r\n /**\r\n * The Touch Start event handler function specifically for events on the Window.\r\n * Initially empty and bound in the `startListeners` method.\r\n *\r\n * @name Phaser.Input.Touch.TouchManager#onTouchStartWindow\r\n * @type {function}\r\n * @since 3.17.0\r\n */\r\n this.onTouchStartWindow = NOOP;\r\n\r\n /**\r\n * The Touch Move event handler function.\r\n * Initially empty and bound in the `startListeners` method.\r\n *\r\n * @name Phaser.Input.Touch.TouchManager#onTouchMove\r\n * @type {function}\r\n * @since 3.0.0\r\n */\r\n this.onTouchMove = NOOP;\r\n\r\n /**\r\n * The Touch End event handler function.\r\n * Initially empty and bound in the `startListeners` method.\r\n *\r\n * @name Phaser.Input.Touch.TouchManager#onTouchEnd\r\n * @type {function}\r\n * @since 3.0.0\r\n */\r\n this.onTouchEnd = NOOP;\r\n\r\n /**\r\n * The Touch End event handler function specifically for events on the Window.\r\n * Initially empty and bound in the `startListeners` method.\r\n *\r\n * @name Phaser.Input.Touch.TouchManager#onTouchEndWindow\r\n * @type {function}\r\n * @since 3.17.0\r\n */\r\n this.onTouchEndWindow = NOOP;\r\n\r\n /**\r\n * The Touch Cancel event handler function.\r\n * Initially empty and bound in the `startListeners` method.\r\n *\r\n * @name Phaser.Input.Touch.TouchManager#onTouchCancel\r\n * @type {function}\r\n * @since 3.15.0\r\n */\r\n this.onTouchCancel = NOOP;\r\n\r\n /**\r\n * The Touch Cancel event handler function specifically for events on the Window.\r\n * Initially empty and bound in the `startListeners` method.\r\n *\r\n * @name Phaser.Input.Touch.TouchManager#onTouchCancelWindow\r\n * @type {function}\r\n * @since 3.18.0\r\n */\r\n this.onTouchCancelWindow = NOOP;\r\n\r\n /**\r\n * The Touch Over event handler function.\r\n * Initially empty and bound in the `startListeners` method.\r\n *\r\n * @name Phaser.Input.Touch.TouchManager#onTouchOver\r\n * @type {function}\r\n * @since 3.16.0\r\n */\r\n this.onTouchOver = NOOP;\r\n\r\n /**\r\n * The Touch Out event handler function.\r\n * Initially empty and bound in the `startListeners` method.\r\n *\r\n * @name Phaser.Input.Touch.TouchManager#onTouchOut\r\n * @type {function}\r\n * @since 3.16.0\r\n */\r\n this.onTouchOut = NOOP;\r\n\r\n inputManager.events.once(InputEvents.MANAGER_BOOT, this.boot, this);\r\n },\r\n\r\n /**\r\n * The Touch Manager boot process.\r\n *\r\n * @method Phaser.Input.Touch.TouchManager#boot\r\n * @private\r\n * @since 3.0.0\r\n */\r\n boot: function ()\r\n {\r\n var config = this.manager.config;\r\n\r\n this.enabled = config.inputTouch;\r\n this.target = config.inputTouchEventTarget;\r\n this.capture = config.inputTouchCapture;\r\n\r\n if (!this.target)\r\n {\r\n this.target = this.manager.game.canvas;\r\n }\r\n\r\n if (config.disableContextMenu)\r\n {\r\n this.disableContextMenu();\r\n }\r\n\r\n if (this.enabled && this.target)\r\n {\r\n this.startListeners();\r\n }\r\n },\r\n\r\n /**\r\n * Attempts to disable the context menu from appearing if you touch-hold on the browser.\r\n * \r\n * Works by listening for the `contextmenu` event and prevent defaulting it.\r\n * \r\n * Use this if you need to disable the OS context menu on mobile.\r\n *\r\n * @method Phaser.Input.Touch.TouchManager#disableContextMenu\r\n * @since 3.20.0\r\n *\r\n * @return {Phaser.Input.Touch.TouchManager} This Touch Manager instance.\r\n */\r\n disableContextMenu: function ()\r\n {\r\n document.body.addEventListener('contextmenu', function (event)\r\n {\r\n event.preventDefault();\r\n return false;\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Starts the Touch Event listeners running as long as an input target is set.\r\n * \r\n * This method is called automatically if Touch Input is enabled in the game config,\r\n * which it is by default. However, you can call it manually should you need to\r\n * delay input capturing until later in the game.\r\n *\r\n * @method Phaser.Input.Touch.TouchManager#startListeners\r\n * @since 3.0.0\r\n */\r\n startListeners: function ()\r\n {\r\n var _this = this;\r\n var canvas = this.manager.canvas;\r\n var autoFocus = (window && window.focus && this.manager.game.config.autoFocus);\r\n\r\n this.onTouchStart = function (event)\r\n {\r\n if (autoFocus)\r\n {\r\n window.focus();\r\n }\r\n\r\n if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n {\r\n _this.manager.onTouchStart(event);\r\n \r\n if (_this.capture && event.cancelable && event.target === canvas)\r\n {\r\n event.preventDefault();\r\n }\r\n }\r\n };\r\n\r\n this.onTouchStartWindow = function (event)\r\n {\r\n if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled && event.target !== canvas)\r\n {\r\n // Only process the event if the target isn't the canvas\r\n _this.manager.onTouchStart(event);\r\n }\r\n };\r\n\r\n this.onTouchMove = function (event)\r\n {\r\n if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n {\r\n _this.manager.onTouchMove(event);\r\n \r\n if (_this.capture && event.cancelable)\r\n {\r\n event.preventDefault();\r\n }\r\n }\r\n };\r\n\r\n this.onTouchEnd = function (event)\r\n {\r\n if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n {\r\n _this.manager.onTouchEnd(event);\r\n \r\n if (_this.capture && event.cancelable && event.target === canvas)\r\n {\r\n event.preventDefault();\r\n }\r\n }\r\n };\r\n\r\n this.onTouchEndWindow = function (event)\r\n {\r\n if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled && event.target !== canvas)\r\n {\r\n // Only process the event if the target isn't the canvas\r\n _this.manager.onTouchEnd(event);\r\n }\r\n };\r\n\r\n this.onTouchCancel = function (event)\r\n {\r\n if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n {\r\n _this.manager.onTouchCancel(event);\r\n \r\n if (_this.capture)\r\n {\r\n event.preventDefault();\r\n }\r\n }\r\n };\r\n\r\n this.onTouchCancelWindow = function (event)\r\n {\r\n if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n {\r\n _this.manager.onTouchCancel(event);\r\n }\r\n };\r\n\r\n this.onTouchOver = function (event)\r\n {\r\n if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n {\r\n _this.manager.setCanvasOver(event);\r\n }\r\n };\r\n\r\n this.onTouchOut = function (event)\r\n {\r\n if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled)\r\n {\r\n _this.manager.setCanvasOut(event);\r\n }\r\n };\r\n\r\n var target = this.target;\r\n\r\n if (!target)\r\n {\r\n return;\r\n }\r\n\r\n var passive = { passive: true };\r\n var nonPassive = { passive: false };\r\n\r\n target.addEventListener('touchstart', this.onTouchStart, (this.capture) ? nonPassive : passive);\r\n target.addEventListener('touchmove', this.onTouchMove, (this.capture) ? nonPassive : passive);\r\n target.addEventListener('touchend', this.onTouchEnd, (this.capture) ? nonPassive : passive);\r\n target.addEventListener('touchcancel', this.onTouchCancel, (this.capture) ? nonPassive : passive);\r\n target.addEventListener('touchover', this.onTouchOver, (this.capture) ? nonPassive : passive);\r\n target.addEventListener('touchout', this.onTouchOut, (this.capture) ? nonPassive : passive);\r\n\r\n if (window && this.manager.game.config.inputWindowEvents)\r\n {\r\n window.addEventListener('touchstart', this.onTouchStartWindow, nonPassive);\r\n window.addEventListener('touchend', this.onTouchEndWindow, nonPassive);\r\n window.addEventListener('touchcancel', this.onTouchCancelWindow, nonPassive);\r\n }\r\n\r\n this.enabled = true;\r\n },\r\n\r\n /**\r\n * Stops the Touch Event listeners.\r\n * This is called automatically and does not need to be manually invoked.\r\n *\r\n * @method Phaser.Input.Touch.TouchManager#stopListeners\r\n * @since 3.0.0\r\n */\r\n stopListeners: function ()\r\n {\r\n var target = this.target;\r\n\r\n target.removeEventListener('touchstart', this.onTouchStart);\r\n target.removeEventListener('touchmove', this.onTouchMove);\r\n target.removeEventListener('touchend', this.onTouchEnd);\r\n target.removeEventListener('touchcancel', this.onTouchCancel);\r\n target.removeEventListener('touchover', this.onTouchOver);\r\n target.removeEventListener('touchout', this.onTouchOut);\r\n\r\n if (window)\r\n {\r\n window.removeEventListener('touchstart', this.onTouchStartWindow);\r\n window.removeEventListener('touchend', this.onTouchEndWindow);\r\n }\r\n },\r\n\r\n /**\r\n * Destroys this Touch Manager instance.\r\n *\r\n * @method Phaser.Input.Touch.TouchManager#destroy\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.stopListeners();\r\n\r\n this.target = null;\r\n this.enabled = false;\r\n this.manager = null;\r\n }\r\n\r\n});\r\n\r\nmodule.exports = TouchManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC90b3VjaC9Ub3VjaE1hbmFnZXIuanM/YjdmZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxrQkFBa0IsbUJBQU8sQ0FBQyxrRUFBVztBQUNyQyxXQUFXLG1CQUFPLENBQUMsaUVBQWtCOztBQUVyQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDBCQUEwQjtBQUNyQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixnQ0FBZ0M7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QjtBQUN2QiwwQkFBMEI7O0FBRTFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2lucHV0L3RvdWNoL1RvdWNoTWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIElucHV0RXZlbnRzID0gcmVxdWlyZSgnLi4vZXZlbnRzJyk7XHJcbnZhciBOT09QID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvTk9PUCcpO1xyXG5cclxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1RvdWNoX2V2ZW50c1xyXG4vLyBodHRwczovL3BhdHJpY2tobGF1a2UuZ2l0aHViLmlvL3RvdWNoL3Rlc3RzL3Jlc3VsdHMvXHJcbi8vIGh0dHBzOi8vd3d3Lmh0bWw1cm9ja3MuY29tL2VuL21vYmlsZS90b3VjaC9cclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBUb3VjaCBNYW5hZ2VyIGlzIGEgaGVscGVyIGNsYXNzIHRoYXQgYmVsb25ncyB0byB0aGUgSW5wdXQgTWFuYWdlci5cclxuICogXHJcbiAqIEl0cyByb2xlIGlzIHRvIGxpc3RlbiBmb3IgbmF0aXZlIERPTSBUb3VjaCBFdmVudHMgYW5kIHRoZW4gcGFzcyB0aGVtIG9udG8gdGhlIElucHV0IE1hbmFnZXIgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy5cclxuICogXHJcbiAqIFlvdSBkbyBub3QgbmVlZCB0byBjcmVhdGUgdGhpcyBjbGFzcyBkaXJlY3RseSwgdGhlIElucHV0IE1hbmFnZXIgd2lsbCBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgaXQgYXV0b21hdGljYWxseS5cclxuICpcclxuICogQGNsYXNzIFRvdWNoTWFuYWdlclxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLklucHV0LlRvdWNoXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuSW5wdXQuSW5wdXRNYW5hZ2VyfSBpbnB1dE1hbmFnZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgSW5wdXQgTWFuYWdlci5cclxuICovXHJcbnZhciBUb3VjaE1hbmFnZXIgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gVG91Y2hNYW5hZ2VyIChpbnB1dE1hbmFnZXIpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIElucHV0IE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuVG91Y2guVG91Y2hNYW5hZ2VyI21hbmFnZXJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLklucHV0LklucHV0TWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1hbmFnZXIgPSBpbnB1dE1hbmFnZXI7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHRydWUgdGhlIERPTSBldmVudHMgd2lsbCBoYXZlIGV2ZW50LnByZXZlbnREZWZhdWx0IGFwcGxpZWQgdG8gdGhlbSwgaWYgZmFsc2UgdGhleSB3aWxsIHByb3BhZ2F0ZSBmdWxseS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Ub3VjaC5Ub3VjaE1hbmFnZXIjY2FwdHVyZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNhcHR1cmUgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIGJvb2xlYW4gdGhhdCBjb250cm9scyBpZiB0aGUgVG91Y2ggTWFuYWdlciBpcyBlbmFibGVkIG9yIG5vdC5cclxuICAgICAgICAgKiBDYW4gYmUgdG9nZ2xlZCBvbiB0aGUgZmx5LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlRvdWNoLlRvdWNoTWFuYWdlciNlbmFibGVkXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFRvdWNoIEV2ZW50IHRhcmdldCwgYXMgZGVmaW5lZCBpbiB0aGUgR2FtZSBDb25maWcuXHJcbiAgICAgICAgICogVHlwaWNhbGx5IHRoZSBjYW52YXMgdG8gd2hpY2ggdGhlIGdhbWUgaXMgcmVuZGVyaW5nLCBidXQgY2FuIGJlIGFueSBpbnRlcmFjdGl2ZSBET00gZWxlbWVudC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Ub3VjaC5Ub3VjaE1hbmFnZXIjdGFyZ2V0XHJcbiAgICAgICAgICogQHR5cGUge2FueX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRhcmdldDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFRvdWNoIFN0YXJ0IGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24uXHJcbiAgICAgICAgICogSW5pdGlhbGx5IGVtcHR5IGFuZCBib3VuZCBpbiB0aGUgYHN0YXJ0TGlzdGVuZXJzYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuVG91Y2guVG91Y2hNYW5hZ2VyI29uVG91Y2hTdGFydFxyXG4gICAgICAgICAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9uVG91Y2hTdGFydCA9IE5PT1A7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBUb3VjaCBTdGFydCBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBmb3IgZXZlbnRzIG9uIHRoZSBXaW5kb3cuXHJcbiAgICAgICAgICogSW5pdGlhbGx5IGVtcHR5IGFuZCBib3VuZCBpbiB0aGUgYHN0YXJ0TGlzdGVuZXJzYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuVG91Y2guVG91Y2hNYW5hZ2VyI29uVG91Y2hTdGFydFdpbmRvd1xyXG4gICAgICAgICAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5vblRvdWNoU3RhcnRXaW5kb3cgPSBOT09QO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgVG91Y2ggTW92ZSBldmVudCBoYW5kbGVyIGZ1bmN0aW9uLlxyXG4gICAgICAgICAqIEluaXRpYWxseSBlbXB0eSBhbmQgYm91bmQgaW4gdGhlIGBzdGFydExpc3RlbmVyc2AgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlRvdWNoLlRvdWNoTWFuYWdlciNvblRvdWNoTW92ZVxyXG4gICAgICAgICAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9uVG91Y2hNb3ZlID0gTk9PUDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFRvdWNoIEVuZCBldmVudCBoYW5kbGVyIGZ1bmN0aW9uLlxyXG4gICAgICAgICAqIEluaXRpYWxseSBlbXB0eSBhbmQgYm91bmQgaW4gdGhlIGBzdGFydExpc3RlbmVyc2AgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlRvdWNoLlRvdWNoTWFuYWdlciNvblRvdWNoRW5kXHJcbiAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub25Ub3VjaEVuZCA9IE5PT1A7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBUb3VjaCBFbmQgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgZm9yIGV2ZW50cyBvbiB0aGUgV2luZG93LlxyXG4gICAgICAgICAqIEluaXRpYWxseSBlbXB0eSBhbmQgYm91bmQgaW4gdGhlIGBzdGFydExpc3RlbmVyc2AgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlRvdWNoLlRvdWNoTWFuYWdlciNvblRvdWNoRW5kV2luZG93XHJcbiAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9uVG91Y2hFbmRXaW5kb3cgPSBOT09QO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgVG91Y2ggQ2FuY2VsIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24uXHJcbiAgICAgICAgICogSW5pdGlhbGx5IGVtcHR5IGFuZCBib3VuZCBpbiB0aGUgYHN0YXJ0TGlzdGVuZXJzYCBtZXRob2QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuSW5wdXQuVG91Y2guVG91Y2hNYW5hZ2VyI29uVG91Y2hDYW5jZWxcclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICogQHNpbmNlIDMuMTUuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub25Ub3VjaENhbmNlbCA9IE5PT1A7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBUb3VjaCBDYW5jZWwgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgZm9yIGV2ZW50cyBvbiB0aGUgV2luZG93LlxyXG4gICAgICAgICAqIEluaXRpYWxseSBlbXB0eSBhbmQgYm91bmQgaW4gdGhlIGBzdGFydExpc3RlbmVyc2AgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlRvdWNoLlRvdWNoTWFuYWdlciNvblRvdWNoQ2FuY2VsV2luZG93XHJcbiAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjE4LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9uVG91Y2hDYW5jZWxXaW5kb3cgPSBOT09QO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgVG91Y2ggT3ZlciBldmVudCBoYW5kbGVyIGZ1bmN0aW9uLlxyXG4gICAgICAgICAqIEluaXRpYWxseSBlbXB0eSBhbmQgYm91bmQgaW4gdGhlIGBzdGFydExpc3RlbmVyc2AgbWV0aG9kLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLklucHV0LlRvdWNoLlRvdWNoTWFuYWdlciNvblRvdWNoT3ZlclxyXG4gICAgICAgICAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5vblRvdWNoT3ZlciA9IE5PT1A7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBUb3VjaCBPdXQgZXZlbnQgaGFuZGxlciBmdW5jdGlvbi5cclxuICAgICAgICAgKiBJbml0aWFsbHkgZW1wdHkgYW5kIGJvdW5kIGluIHRoZSBgc3RhcnRMaXN0ZW5lcnNgIG1ldGhvZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5JbnB1dC5Ub3VjaC5Ub3VjaE1hbmFnZXIjb25Ub3VjaE91dFxyXG4gICAgICAgICAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5vblRvdWNoT3V0ID0gTk9PUDtcclxuXHJcbiAgICAgICAgaW5wdXRNYW5hZ2VyLmV2ZW50cy5vbmNlKElucHV0RXZlbnRzLk1BTkFHRVJfQk9PVCwgdGhpcy5ib290LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgVG91Y2ggTWFuYWdlciBib290IHByb2Nlc3MuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuVG91Y2guVG91Y2hNYW5hZ2VyI2Jvb3RcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgYm9vdDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgY29uZmlnID0gdGhpcy5tYW5hZ2VyLmNvbmZpZztcclxuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gY29uZmlnLmlucHV0VG91Y2g7XHJcbiAgICAgICAgdGhpcy50YXJnZXQgPSBjb25maWcuaW5wdXRUb3VjaEV2ZW50VGFyZ2V0O1xyXG4gICAgICAgIHRoaXMuY2FwdHVyZSA9IGNvbmZpZy5pbnB1dFRvdWNoQ2FwdHVyZTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnRhcmdldClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gdGhpcy5tYW5hZ2VyLmdhbWUuY2FudmFzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbmZpZy5kaXNhYmxlQ29udGV4dE1lbnUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVDb250ZXh0TWVudSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlZCAmJiB0aGlzLnRhcmdldClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRMaXN0ZW5lcnMoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXR0ZW1wdHMgdG8gZGlzYWJsZSB0aGUgY29udGV4dCBtZW51IGZyb20gYXBwZWFyaW5nIGlmIHlvdSB0b3VjaC1ob2xkIG9uIHRoZSBicm93c2VyLlxyXG4gICAgICogXHJcbiAgICAgKiBXb3JrcyBieSBsaXN0ZW5pbmcgZm9yIHRoZSBgY29udGV4dG1lbnVgIGV2ZW50IGFuZCBwcmV2ZW50IGRlZmF1bHRpbmcgaXQuXHJcbiAgICAgKiBcclxuICAgICAqIFVzZSB0aGlzIGlmIHlvdSBuZWVkIHRvIGRpc2FibGUgdGhlIE9TIGNvbnRleHQgbWVudSBvbiBtb2JpbGUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuVG91Y2guVG91Y2hNYW5hZ2VyI2Rpc2FibGVDb250ZXh0TWVudVxyXG4gICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5JbnB1dC5Ub3VjaC5Ub3VjaE1hbmFnZXJ9IFRoaXMgVG91Y2ggTWFuYWdlciBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgZGlzYWJsZUNvbnRleHRNZW51OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YXJ0cyB0aGUgVG91Y2ggRXZlbnQgbGlzdGVuZXJzIHJ1bm5pbmcgYXMgbG9uZyBhcyBhbiBpbnB1dCB0YXJnZXQgaXMgc2V0LlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBpZiBUb3VjaCBJbnB1dCBpcyBlbmFibGVkIGluIHRoZSBnYW1lIGNvbmZpZyxcclxuICAgICAqIHdoaWNoIGl0IGlzIGJ5IGRlZmF1bHQuIEhvd2V2ZXIsIHlvdSBjYW4gY2FsbCBpdCBtYW51YWxseSBzaG91bGQgeW91IG5lZWQgdG9cclxuICAgICAqIGRlbGF5IGlucHV0IGNhcHR1cmluZyB1bnRpbCBsYXRlciBpbiB0aGUgZ2FtZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5JbnB1dC5Ub3VjaC5Ub3VjaE1hbmFnZXIjc3RhcnRMaXN0ZW5lcnNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBzdGFydExpc3RlbmVyczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBjYW52YXMgPSB0aGlzLm1hbmFnZXIuY2FudmFzO1xyXG4gICAgICAgIHZhciBhdXRvRm9jdXMgPSAod2luZG93ICYmIHdpbmRvdy5mb2N1cyAmJiB0aGlzLm1hbmFnZXIuZ2FtZS5jb25maWcuYXV0b0ZvY3VzKTtcclxuXHJcbiAgICAgICAgdGhpcy5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoYXV0b0ZvY3VzKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkICYmIF90aGlzLmVuYWJsZWQgJiYgX3RoaXMubWFuYWdlciAmJiBfdGhpcy5tYW5hZ2VyLmVuYWJsZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLm1hbmFnZXIub25Ub3VjaFN0YXJ0KGV2ZW50KTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLmNhcHR1cmUgJiYgZXZlbnQuY2FuY2VsYWJsZSAmJiBldmVudC50YXJnZXQgPT09IGNhbnZhcylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5vblRvdWNoU3RhcnRXaW5kb3cgPSBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgJiYgX3RoaXMuZW5hYmxlZCAmJiBfdGhpcy5tYW5hZ2VyICYmIF90aGlzLm1hbmFnZXIuZW5hYmxlZCAmJiBldmVudC50YXJnZXQgIT09IGNhbnZhcylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIE9ubHkgcHJvY2VzcyB0aGUgZXZlbnQgaWYgdGhlIHRhcmdldCBpc24ndCB0aGUgY2FudmFzXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5tYW5hZ2VyLm9uVG91Y2hTdGFydChldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLm9uVG91Y2hNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkICYmIF90aGlzLmVuYWJsZWQgJiYgX3RoaXMubWFuYWdlciAmJiBfdGhpcy5tYW5hZ2VyLmVuYWJsZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLm1hbmFnZXIub25Ub3VjaE1vdmUoZXZlbnQpO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMuY2FwdHVyZSAmJiBldmVudC5jYW5jZWxhYmxlKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLm9uVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgJiYgX3RoaXMuZW5hYmxlZCAmJiBfdGhpcy5tYW5hZ2VyICYmIF90aGlzLm1hbmFnZXIuZW5hYmxlZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMubWFuYWdlci5vblRvdWNoRW5kKGV2ZW50KTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLmNhcHR1cmUgJiYgZXZlbnQuY2FuY2VsYWJsZSAmJiBldmVudC50YXJnZXQgPT09IGNhbnZhcylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5vblRvdWNoRW5kV2luZG93ID0gZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkICYmIF90aGlzLmVuYWJsZWQgJiYgX3RoaXMubWFuYWdlciAmJiBfdGhpcy5tYW5hZ2VyLmVuYWJsZWQgJiYgZXZlbnQudGFyZ2V0ICE9PSBjYW52YXMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBPbmx5IHByb2Nlc3MgdGhlIGV2ZW50IGlmIHRoZSB0YXJnZXQgaXNuJ3QgdGhlIGNhbnZhc1xyXG4gICAgICAgICAgICAgICAgX3RoaXMubWFuYWdlci5vblRvdWNoRW5kKGV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMub25Ub3VjaENhbmNlbCA9IGZ1bmN0aW9uIChldmVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCAmJiBfdGhpcy5lbmFibGVkICYmIF90aGlzLm1hbmFnZXIgJiYgX3RoaXMubWFuYWdlci5lbmFibGVkKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5tYW5hZ2VyLm9uVG91Y2hDYW5jZWwoZXZlbnQpO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMuY2FwdHVyZSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5vblRvdWNoQ2FuY2VsV2luZG93ID0gZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkICYmIF90aGlzLmVuYWJsZWQgJiYgX3RoaXMubWFuYWdlciAmJiBfdGhpcy5tYW5hZ2VyLmVuYWJsZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLm1hbmFnZXIub25Ub3VjaENhbmNlbChldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLm9uVG91Y2hPdmVyID0gZnVuY3Rpb24gKGV2ZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkICYmIF90aGlzLmVuYWJsZWQgJiYgX3RoaXMubWFuYWdlciAmJiBfdGhpcy5tYW5hZ2VyLmVuYWJsZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLm1hbmFnZXIuc2V0Q2FudmFzT3ZlcihldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLm9uVG91Y2hPdXQgPSBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgJiYgX3RoaXMuZW5hYmxlZCAmJiBfdGhpcy5tYW5hZ2VyICYmIF90aGlzLm1hbmFnZXIuZW5hYmxlZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMubWFuYWdlci5zZXRDYW52YXNPdXQoZXZlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICBpZiAoIXRhcmdldClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwYXNzaXZlID0geyBwYXNzaXZlOiB0cnVlIH07XHJcbiAgICAgICAgdmFyIG5vblBhc3NpdmUgPSB7IHBhc3NpdmU6IGZhbHNlIH07XHJcblxyXG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vblRvdWNoU3RhcnQsICh0aGlzLmNhcHR1cmUpID8gbm9uUGFzc2l2ZSA6IHBhc3NpdmUpO1xyXG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlLCAodGhpcy5jYXB0dXJlKSA/IG5vblBhc3NpdmUgOiBwYXNzaXZlKTtcclxuICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLm9uVG91Y2hFbmQsICh0aGlzLmNhcHR1cmUpID8gbm9uUGFzc2l2ZSA6IHBhc3NpdmUpO1xyXG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIHRoaXMub25Ub3VjaENhbmNlbCwgKHRoaXMuY2FwdHVyZSkgPyBub25QYXNzaXZlIDogcGFzc2l2ZSk7XHJcbiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNob3ZlcicsIHRoaXMub25Ub3VjaE92ZXIsICh0aGlzLmNhcHR1cmUpID8gbm9uUGFzc2l2ZSA6IHBhc3NpdmUpO1xyXG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG91dCcsIHRoaXMub25Ub3VjaE91dCwgKHRoaXMuY2FwdHVyZSkgPyBub25QYXNzaXZlIDogcGFzc2l2ZSk7XHJcblxyXG4gICAgICAgIGlmICh3aW5kb3cgJiYgdGhpcy5tYW5hZ2VyLmdhbWUuY29uZmlnLmlucHV0V2luZG93RXZlbnRzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVG91Y2hTdGFydFdpbmRvdywgbm9uUGFzc2l2ZSk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMub25Ub3VjaEVuZFdpbmRvdywgbm9uUGFzc2l2ZSk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIHRoaXMub25Ub3VjaENhbmNlbFdpbmRvdywgbm9uUGFzc2l2ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIHRoZSBUb3VjaCBFdmVudCBsaXN0ZW5lcnMuXHJcbiAgICAgKiBUaGlzIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGFuZCBkb2VzIG5vdCBuZWVkIHRvIGJlIG1hbnVhbGx5IGludm9rZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuVG91Y2guVG91Y2hNYW5hZ2VyI3N0b3BMaXN0ZW5lcnNcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBzdG9wTGlzdGVuZXJzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLnRhcmdldDtcclxuXHJcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVG91Y2hTdGFydCk7XHJcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUpO1xyXG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMub25Ub3VjaEVuZCk7XHJcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoY2FuY2VsJywgdGhpcy5vblRvdWNoQ2FuY2VsKTtcclxuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hvdmVyJywgdGhpcy5vblRvdWNoT3Zlcik7XHJcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNob3V0JywgdGhpcy5vblRvdWNoT3V0KTtcclxuXHJcbiAgICAgICAgaWYgKHdpbmRvdylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vblRvdWNoU3RhcnRXaW5kb3cpO1xyXG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLm9uVG91Y2hFbmRXaW5kb3cpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGlzIFRvdWNoIE1hbmFnZXIgaW5zdGFuY2UuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuSW5wdXQuVG91Y2guVG91Y2hNYW5hZ2VyI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc3RvcExpc3RlbmVycygpO1xyXG5cclxuICAgICAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUb3VjaE1hbmFnZXI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/touch/TouchManager.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/input/touch/index.js":
/*!******************************************************!*\
!*** ./node_modules/phaser/src/input/touch/index.js ***!
\******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Input.Touch\r\n */\r\n\r\n/* eslint-disable */\r\nmodule.exports = {\r\n\r\n TouchManager: __webpack_require__(/*! ./TouchManager */ \"./node_modules/phaser/src/input/touch/TouchManager.js\")\r\n \r\n};\r\n/* eslint-enable */\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC90b3VjaC9pbmRleC5qcz8wMjBmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyw2RUFBZ0I7O0FBRTFDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9pbnB1dC90b3VjaC9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLklucHV0LlRvdWNoXHJcbiAqL1xyXG5cclxuLyogZXNsaW50LWRpc2FibGUgKi9cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgVG91Y2hNYW5hZ2VyOiByZXF1aXJlKCcuL1RvdWNoTWFuYWdlcicpXHJcbiAgICAgICBcclxufTtcclxuLyogZXNsaW50LWVuYWJsZSAqL1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/input/touch/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/File.js":
/*!************************************************!*\
!*** ./node_modules/phaser/src/loader/File.js ***!
\************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/loader/events/index.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar GetURL = __webpack_require__(/*! ./GetURL */ \"./node_modules/phaser/src/loader/GetURL.js\");\r\nvar MergeXHRSettings = __webpack_require__(/*! ./MergeXHRSettings */ \"./node_modules/phaser/src/loader/MergeXHRSettings.js\");\r\nvar XHRLoader = __webpack_require__(/*! ./XHRLoader */ \"./node_modules/phaser/src/loader/XHRLoader.js\");\r\nvar XHRSettings = __webpack_require__(/*! ./XHRSettings */ \"./node_modules/phaser/src/loader/XHRSettings.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The base File class used by all File Types that the Loader can support.\r\n * You shouldn't create an instance of a File directly, but should extend it with your own class, setting a custom type and processing methods.\r\n *\r\n * @class File\r\n * @memberof Phaser.Loader\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - The Loader that is going to load this File.\r\n * @param {Phaser.Types.Loader.FileConfig} fileConfig - The file configuration object, as created by the file type.\r\n */\r\nvar File = new Class({\r\n\r\n initialize:\r\n\r\n function File (loader, fileConfig)\r\n {\r\n /**\r\n * A reference to the Loader that is going to load this file.\r\n *\r\n * @name Phaser.Loader.File#loader\r\n * @type {Phaser.Loader.LoaderPlugin}\r\n * @since 3.0.0\r\n */\r\n this.loader = loader;\r\n\r\n /**\r\n * A reference to the Cache, or Texture Manager, that is going to store this file if it loads.\r\n *\r\n * @name Phaser.Loader.File#cache\r\n * @type {(Phaser.Cache.BaseCache|Phaser.Textures.TextureManager)}\r\n * @since 3.7.0\r\n */\r\n this.cache = GetFastValue(fileConfig, 'cache', false);\r\n\r\n /**\r\n * The file type string (image, json, etc) for sorting within the Loader.\r\n *\r\n * @name Phaser.Loader.File#type\r\n * @type {string}\r\n * @since 3.0.0\r\n */\r\n this.type = GetFastValue(fileConfig, 'type', false);\r\n\r\n /**\r\n * Unique cache key (unique within its file type)\r\n *\r\n * @name Phaser.Loader.File#key\r\n * @type {string}\r\n * @since 3.0.0\r\n */\r\n this.key = GetFastValue(fileConfig, 'key', false);\r\n\r\n var loadKey = this.key;\r\n\r\n if (loader.prefix && loader.prefix !== '')\r\n {\r\n this.key = loader.prefix + loadKey;\r\n }\r\n\r\n if (!this.type || !this.key)\r\n {\r\n throw new Error('Error calling \\'Loader.' + this.type + '\\' invalid key provided.');\r\n }\r\n\r\n /**\r\n * The URL of the file, not including baseURL.\r\n * Automatically has Loader.path prepended to it.\r\n *\r\n * @name Phaser.Loader.File#url\r\n * @type {string}\r\n * @since 3.0.0\r\n */\r\n this.url = GetFastValue(fileConfig, 'url');\r\n\r\n if (this.url === undefined)\r\n {\r\n this.url = loader.path + loadKey + '.' + GetFastValue(fileConfig, 'extension', '');\r\n }\r\n else if (typeof(this.url) !== 'function')\r\n {\r\n this.url = loader.path + this.url;\r\n }\r\n\r\n /**\r\n * The final URL this file will load from, including baseURL and path.\r\n * Set automatically when the Loader calls 'load' on this file.\r\n *\r\n * @name Phaser.Loader.File#src\r\n * @type {string}\r\n * @since 3.0.0\r\n */\r\n this.src = '';\r\n\r\n /**\r\n * The merged XHRSettings for this file.\r\n *\r\n * @name Phaser.Loader.File#xhrSettings\r\n * @type {Phaser.Types.Loader.XHRSettingsObject}\r\n * @since 3.0.0\r\n */\r\n this.xhrSettings = XHRSettings(GetFastValue(fileConfig, 'responseType', undefined));\r\n\r\n if (GetFastValue(fileConfig, 'xhrSettings', false))\r\n {\r\n this.xhrSettings = MergeXHRSettings(this.xhrSettings, GetFastValue(fileConfig, 'xhrSettings', {}));\r\n }\r\n\r\n /**\r\n * The XMLHttpRequest instance (as created by XHR Loader) that is loading this File.\r\n *\r\n * @name Phaser.Loader.File#xhrLoader\r\n * @type {?XMLHttpRequest}\r\n * @since 3.0.0\r\n */\r\n this.xhrLoader = null;\r\n\r\n /**\r\n * The current state of the file. One of the FILE_CONST values.\r\n *\r\n * @name Phaser.Loader.File#state\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n this.state = (typeof(this.url) === 'function') ? CONST.FILE_POPULATED : CONST.FILE_PENDING;\r\n\r\n /**\r\n * The total size of this file.\r\n * Set by onProgress and only if loading via XHR.\r\n *\r\n * @name Phaser.Loader.File#bytesTotal\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.bytesTotal = 0;\r\n\r\n /**\r\n * Updated as the file loads.\r\n * Only set if loading via XHR.\r\n *\r\n * @name Phaser.Loader.File#bytesLoaded\r\n * @type {number}\r\n * @default -1\r\n * @since 3.0.0\r\n */\r\n this.bytesLoaded = -1;\r\n\r\n /**\r\n * A percentage value between 0 and 1 indicating how much of this file has loaded.\r\n * Only set if loading via XHR.\r\n *\r\n * @name Phaser.Loader.File#percentComplete\r\n * @type {number}\r\n * @default -1\r\n * @since 3.0.0\r\n */\r\n this.percentComplete = -1;\r\n\r\n /**\r\n * For CORs based loading.\r\n * If this is undefined then the File will check BaseLoader.crossOrigin and use that (if set)\r\n *\r\n * @name Phaser.Loader.File#crossOrigin\r\n * @type {(string|undefined)}\r\n * @since 3.0.0\r\n */\r\n this.crossOrigin = undefined;\r\n\r\n /**\r\n * The processed file data, stored here after the file has loaded.\r\n *\r\n * @name Phaser.Loader.File#data\r\n * @type {*}\r\n * @since 3.0.0\r\n */\r\n this.data = undefined;\r\n\r\n /**\r\n * A config object that can be used by file types to store transitional data.\r\n *\r\n * @name Phaser.Loader.File#config\r\n * @type {*}\r\n * @since 3.0.0\r\n */\r\n this.config = GetFastValue(fileConfig, 'config', {});\r\n\r\n /**\r\n * If this is a multipart file, i.e. an atlas and its json together, then this is a reference\r\n * to the parent MultiFile. Set and used internally by the Loader or specific file types.\r\n *\r\n * @name Phaser.Loader.File#multiFile\r\n * @type {?Phaser.Loader.MultiFile}\r\n * @since 3.7.0\r\n */\r\n this.multiFile;\r\n\r\n /**\r\n * Does this file have an associated linked file? Such as an image and a normal map.\r\n * Atlases and Bitmap Fonts use the multiFile, because those files need loading together but aren't\r\n * actually bound by data, where-as a linkFile is.\r\n *\r\n * @name Phaser.Loader.File#linkFile\r\n * @type {?Phaser.Loader.File}\r\n * @since 3.7.0\r\n */\r\n this.linkFile;\r\n },\r\n\r\n /**\r\n * Links this File with another, so they depend upon each other for loading and processing.\r\n *\r\n * @method Phaser.Loader.File#setLink\r\n * @since 3.7.0\r\n *\r\n * @param {Phaser.Loader.File} fileB - The file to link to this one.\r\n */\r\n setLink: function (fileB)\r\n {\r\n this.linkFile = fileB;\r\n\r\n fileB.linkFile = this;\r\n },\r\n\r\n /**\r\n * Resets the XHRLoader instance this file is using.\r\n *\r\n * @method Phaser.Loader.File#resetXHR\r\n * @since 3.0.0\r\n */\r\n resetXHR: function ()\r\n {\r\n if (this.xhrLoader)\r\n {\r\n this.xhrLoader.onload = undefined;\r\n this.xhrLoader.onerror = undefined;\r\n this.xhrLoader.onprogress = undefined;\r\n }\r\n },\r\n\r\n /**\r\n * Called by the Loader, starts the actual file downloading.\r\n * During the load the methods onLoad, onError and onProgress are called, based on the XHR events.\r\n * You shouldn't normally call this method directly, it's meant to be invoked by the Loader.\r\n *\r\n * @method Phaser.Loader.File#load\r\n * @since 3.0.0\r\n */\r\n load: function ()\r\n {\r\n if (this.state === CONST.FILE_POPULATED)\r\n {\r\n // Can happen for example in a JSONFile if they've provided a JSON object instead of a URL\r\n this.loader.nextFile(this, true);\r\n }\r\n else\r\n {\r\n this.src = GetURL(this, this.loader.baseURL);\r\n\r\n if (this.src.indexOf('data:') === 0)\r\n {\r\n console.warn('Local data URIs are not supported: ' + this.key);\r\n }\r\n else\r\n {\r\n // The creation of this XHRLoader starts the load process going.\r\n // It will automatically call the following, based on the load outcome:\r\n // \r\n // xhr.onload = this.onLoad\r\n // xhr.onerror = this.onError\r\n // xhr.onprogress = this.onProgress\r\n\r\n this.xhrLoader = XHRLoader(this, this.loader.xhr);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Called when the file finishes loading, is sent a DOM ProgressEvent.\r\n *\r\n * @method Phaser.Loader.File#onLoad\r\n * @since 3.0.0\r\n *\r\n * @param {XMLHttpRequest} xhr - The XMLHttpRequest that caused this onload event.\r\n * @param {ProgressEvent} event - The DOM ProgressEvent that resulted from this load.\r\n */\r\n onLoad: function (xhr, event)\r\n {\r\n var localFileOk = ((xhr.responseURL && xhr.responseURL.indexOf('file://') === 0 && event.target.status === 0));\r\n\r\n var success = !(event.target && event.target.status !== 200) || localFileOk;\r\n\r\n // Handle HTTP status codes of 4xx and 5xx as errors, even if xhr.onerror was not called.\r\n if (xhr.readyState === 4 && xhr.status >= 400 && xhr.status <= 599)\r\n {\r\n success = false;\r\n }\r\n\r\n this.resetXHR();\r\n\r\n this.loader.nextFile(this, success);\r\n },\r\n\r\n /**\r\n * Called if the file errors while loading, is sent a DOM ProgressEvent.\r\n *\r\n * @method Phaser.Loader.File#onError\r\n * @since 3.0.0\r\n *\r\n * @param {XMLHttpRequest} xhr - The XMLHttpRequest that caused this onload event.\r\n * @param {ProgressEvent} event - The DOM ProgressEvent that resulted from this error.\r\n */\r\n onError: function ()\r\n {\r\n this.resetXHR();\r\n\r\n this.loader.nextFile(this, false);\r\n },\r\n\r\n /**\r\n * Called during the file load progress. Is sent a DOM ProgressEvent.\r\n *\r\n * @method Phaser.Loader.File#onProgress\r\n * @fires Phaser.Loader.Events#FILE_PROGRESS\r\n * @since 3.0.0\r\n *\r\n * @param {ProgressEvent} event - The DOM ProgressEvent.\r\n */\r\n onProgress: function (event)\r\n {\r\n if (event.lengthComputable)\r\n {\r\n this.bytesLoaded = event.loaded;\r\n this.bytesTotal = event.total;\r\n\r\n this.percentComplete = Math.min((this.bytesLoaded / this.bytesTotal), 1);\r\n\r\n this.loader.emit(Events.FILE_PROGRESS, this, this.percentComplete);\r\n }\r\n },\r\n\r\n /**\r\n * Usually overridden by the FileTypes and is called by Loader.nextFile.\r\n * This method controls what extra work this File does with its loaded data, for example a JSON file will parse itself during this stage.\r\n *\r\n * @method Phaser.Loader.File#onProcess\r\n * @since 3.0.0\r\n */\r\n onProcess: function ()\r\n {\r\n this.state = CONST.FILE_PROCESSING;\r\n\r\n this.onProcessComplete();\r\n },\r\n\r\n /**\r\n * Called when the File has completed processing.\r\n * Checks on the state of its multifile, if set.\r\n *\r\n * @method Phaser.Loader.File#onProcessComplete\r\n * @since 3.7.0\r\n */\r\n onProcessComplete: function ()\r\n {\r\n this.state = CONST.FILE_COMPLETE;\r\n\r\n if (this.multiFile)\r\n {\r\n this.multiFile.onFileComplete(this);\r\n }\r\n\r\n this.loader.fileProcessComplete(this);\r\n },\r\n\r\n /**\r\n * Called when the File has completed processing but it generated an error.\r\n * Checks on the state of its multifile, if set.\r\n *\r\n * @method Phaser.Loader.File#onProcessError\r\n * @since 3.7.0\r\n */\r\n onProcessError: function ()\r\n {\r\n this.state = CONST.FILE_ERRORED;\r\n\r\n if (this.multiFile)\r\n {\r\n this.multiFile.onFileFailed(this);\r\n }\r\n\r\n this.loader.fileProcessComplete(this);\r\n },\r\n\r\n /**\r\n * Checks if a key matching the one used by this file exists in the target Cache or not.\r\n * This is called automatically by the LoaderPlugin to decide if the file can be safely\r\n * loaded or will conflict.\r\n *\r\n * @method Phaser.Loader.File#hasCacheConflict\r\n * @since 3.7.0\r\n *\r\n * @return {boolean} `true` if adding this file will cause a conflict, otherwise `false`.\r\n */\r\n hasCacheConflict: function ()\r\n {\r\n return (this.cache && this.cache.exists(this.key));\r\n },\r\n\r\n /**\r\n * Adds this file to its target cache upon successful loading and processing.\r\n * This method is often overridden by specific file types.\r\n *\r\n * @method Phaser.Loader.File#addToCache\r\n * @since 3.7.0\r\n */\r\n addToCache: function ()\r\n {\r\n if (this.cache)\r\n {\r\n this.cache.add(this.key, this.data);\r\n }\r\n\r\n this.pendingDestroy();\r\n },\r\n\r\n /**\r\n * Called once the file has been added to its cache and is now ready for deletion from the Loader.\r\n * It will emit a `filecomplete` event from the LoaderPlugin.\r\n *\r\n * @method Phaser.Loader.File#pendingDestroy\r\n * @fires Phaser.Loader.Events#FILE_COMPLETE\r\n * @fires Phaser.Loader.Events#FILE_KEY_COMPLETE\r\n * @since 3.7.0\r\n */\r\n pendingDestroy: function (data)\r\n {\r\n if (data === undefined) { data = this.data; }\r\n\r\n var key = this.key;\r\n var type = this.type;\r\n\r\n this.loader.emit(Events.FILE_COMPLETE, key, type, data);\r\n this.loader.emit(Events.FILE_KEY_COMPLETE + type + '-' + key, key, type, data);\r\n\r\n this.loader.flagForRemoval(this);\r\n },\r\n\r\n /**\r\n * Destroy this File and any references it holds.\r\n *\r\n * @method Phaser.Loader.File#destroy\r\n * @since 3.7.0\r\n */\r\n destroy: function ()\r\n {\r\n this.loader = null;\r\n this.cache = null;\r\n this.xhrSettings = null;\r\n this.multiFile = null;\r\n this.linkFile = null;\r\n this.data = null;\r\n }\r\n\r\n});\r\n\r\n/**\r\n * Static method for creating object URL using URL API and setting it as image 'src' attribute.\r\n * If URL API is not supported (usually on old browsers) it falls back to creating Base64 encoded url using FileReader.\r\n *\r\n * @method Phaser.Loader.File.createObjectURL\r\n * @static\r\n * @since 3.7.0\r\n * \r\n * @param {HTMLImageElement} image - Image object which 'src' attribute should be set to object URL.\r\n * @param {Blob} blob - A Blob object to create an object URL for.\r\n * @param {string} defaultType - Default mime type used if blob type is not available.\r\n */\r\nFile.createObjectURL = function (image, blob, defaultType)\r\n{\r\n if (typeof URL === 'function')\r\n {\r\n image.src = URL.createObjectURL(blob);\r\n }\r\n else\r\n {\r\n var reader = new FileReader();\r\n\r\n reader.onload = function ()\r\n {\r\n image.removeAttribute('crossOrigin');\r\n image.src = 'data:' + (blob.type || defaultType) + ';base64,' + reader.result.split(',')[1];\r\n };\r\n\r\n reader.onerror = image.onerror;\r\n\r\n reader.readAsDataURL(blob);\r\n }\r\n};\r\n\r\n/**\r\n * Static method for releasing an existing object URL which was previously created\r\n * by calling {@link File#createObjectURL} method.\r\n *\r\n * @method Phaser.Loader.File.revokeObjectURL\r\n * @static\r\n * @since 3.7.0\r\n * \r\n * @param {HTMLImageElement} image - Image object which 'src' attribute should be revoked.\r\n */\r\nFile.revokeObjectURL = function (image)\r\n{\r\n if (typeof URL === 'function')\r\n {\r\n URL.revokeObjectURL(image.src);\r\n }\r\n};\r\n\r\nmodule.exports = File;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvRmlsZS5qcz9mNDkyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ3BDLFlBQVksbUJBQU8sQ0FBQywwREFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsa0VBQVU7QUFDL0IsbUJBQW1CLG1CQUFPLENBQUMsNEZBQThCO0FBQ3pELGFBQWEsbUJBQU8sQ0FBQyw0REFBVTtBQUMvQix1QkFBdUIsbUJBQU8sQ0FBQyxnRkFBb0I7QUFDbkQsZ0JBQWdCLG1CQUFPLENBQUMsa0VBQWE7QUFDckMsa0JBQWtCLG1CQUFPLENBQUMsc0VBQWU7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVywrQkFBK0I7QUFDMUM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0R0FBNEc7QUFDNUc7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLDJEQUEyRDs7QUFFM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtQkFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGVBQWU7QUFDOUIsZUFBZSxjQUFjO0FBQzdCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZUFBZTtBQUM5QixlQUFlLGNBQWM7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxjQUFjO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsa0JBQWtCOztBQUVuRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLEtBQUs7QUFDaEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlFQUFpRTtBQUNqRTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGVBQWUsMkJBQTJCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbG9hZGVyL0ZpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4vY29uc3QnKTtcclxudmFyIEV2ZW50cyA9IHJlcXVpcmUoJy4vZXZlbnRzJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBHZXRVUkwgPSByZXF1aXJlKCcuL0dldFVSTCcpO1xyXG52YXIgTWVyZ2VYSFJTZXR0aW5ncyA9IHJlcXVpcmUoJy4vTWVyZ2VYSFJTZXR0aW5ncycpO1xyXG52YXIgWEhSTG9hZGVyID0gcmVxdWlyZSgnLi9YSFJMb2FkZXInKTtcclxudmFyIFhIUlNldHRpbmdzID0gcmVxdWlyZSgnLi9YSFJTZXR0aW5ncycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogVGhlIGJhc2UgRmlsZSBjbGFzcyB1c2VkIGJ5IGFsbCBGaWxlIFR5cGVzIHRoYXQgdGhlIExvYWRlciBjYW4gc3VwcG9ydC5cclxuICogWW91IHNob3VsZG4ndCBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgYSBGaWxlIGRpcmVjdGx5LCBidXQgc2hvdWxkIGV4dGVuZCBpdCB3aXRoIHlvdXIgb3duIGNsYXNzLCBzZXR0aW5nIGEgY3VzdG9tIHR5cGUgYW5kIHByb2Nlc3NpbmcgbWV0aG9kcy5cclxuICpcclxuICogQGNsYXNzIEZpbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Mb2FkZXJcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBUaGUgTG9hZGVyIHRoYXQgaXMgZ29pbmcgdG8gbG9hZCB0aGlzIEZpbGUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlQ29uZmlnfSBmaWxlQ29uZmlnIC0gVGhlIGZpbGUgY29uZmlndXJhdGlvbiBvYmplY3QsIGFzIGNyZWF0ZWQgYnkgdGhlIGZpbGUgdHlwZS5cclxuICovXHJcbnZhciBGaWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEZpbGUgKGxvYWRlciwgZmlsZUNvbmZpZylcclxuICAgIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgTG9hZGVyIHRoYXQgaXMgZ29pbmcgdG8gbG9hZCB0aGlzIGZpbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkZpbGUjbG9hZGVyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gbG9hZGVyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgQ2FjaGUsIG9yIFRleHR1cmUgTWFuYWdlciwgdGhhdCBpcyBnb2luZyB0byBzdG9yZSB0aGlzIGZpbGUgaWYgaXQgbG9hZHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkZpbGUjY2FjaGVcclxuICAgICAgICAgKiBAdHlwZSB7KFBoYXNlci5DYWNoZS5CYXNlQ2FjaGV8UGhhc2VyLlRleHR1cmVzLlRleHR1cmVNYW5hZ2VyKX1cclxuICAgICAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNhY2hlID0gR2V0RmFzdFZhbHVlKGZpbGVDb25maWcsICdjYWNoZScsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGZpbGUgdHlwZSBzdHJpbmcgKGltYWdlLCBqc29uLCBldGMpIGZvciBzb3J0aW5nIHdpdGhpbiB0aGUgTG9hZGVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5GaWxlI3R5cGVcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudHlwZSA9IEdldEZhc3RWYWx1ZShmaWxlQ29uZmlnLCAndHlwZScsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVW5pcXVlIGNhY2hlIGtleSAodW5pcXVlIHdpdGhpbiBpdHMgZmlsZSB0eXBlKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5GaWxlI2tleVxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5rZXkgPSBHZXRGYXN0VmFsdWUoZmlsZUNvbmZpZywgJ2tleScsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgdmFyIGxvYWRLZXkgPSB0aGlzLmtleTtcclxuXHJcbiAgICAgICAgaWYgKGxvYWRlci5wcmVmaXggJiYgbG9hZGVyLnByZWZpeCAhPT0gJycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmtleSA9IGxvYWRlci5wcmVmaXggKyBsb2FkS2V5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnR5cGUgfHwgIXRoaXMua2V5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciBjYWxsaW5nIFxcJ0xvYWRlci4nICsgdGhpcy50eXBlICsgJ1xcJyBpbnZhbGlkIGtleSBwcm92aWRlZC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBVUkwgb2YgdGhlIGZpbGUsIG5vdCBpbmNsdWRpbmcgYmFzZVVSTC5cclxuICAgICAgICAgKiBBdXRvbWF0aWNhbGx5IGhhcyBMb2FkZXIucGF0aCBwcmVwZW5kZWQgdG8gaXQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkZpbGUjdXJsXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnVybCA9IEdldEZhc3RWYWx1ZShmaWxlQ29uZmlnLCAndXJsJyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnVybCA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy51cmwgPSBsb2FkZXIucGF0aCArIGxvYWRLZXkgKyAnLicgKyBHZXRGYXN0VmFsdWUoZmlsZUNvbmZpZywgJ2V4dGVuc2lvbicsICcnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mKHRoaXMudXJsKSAhPT0gJ2Z1bmN0aW9uJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudXJsID0gbG9hZGVyLnBhdGggKyB0aGlzLnVybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBmaW5hbCBVUkwgdGhpcyBmaWxlIHdpbGwgbG9hZCBmcm9tLCBpbmNsdWRpbmcgYmFzZVVSTCBhbmQgcGF0aC5cclxuICAgICAgICAgKiBTZXQgYXV0b21hdGljYWxseSB3aGVuIHRoZSBMb2FkZXIgY2FsbHMgJ2xvYWQnIG9uIHRoaXMgZmlsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuRmlsZSNzcmNcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc3JjID0gJyc7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBtZXJnZWQgWEhSU2V0dGluZ3MgZm9yIHRoaXMgZmlsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuRmlsZSN4aHJTZXR0aW5nc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMueGhyU2V0dGluZ3MgPSBYSFJTZXR0aW5ncyhHZXRGYXN0VmFsdWUoZmlsZUNvbmZpZywgJ3Jlc3BvbnNlVHlwZScsIHVuZGVmaW5lZCkpO1xyXG5cclxuICAgICAgICBpZiAoR2V0RmFzdFZhbHVlKGZpbGVDb25maWcsICd4aHJTZXR0aW5ncycsIGZhbHNlKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueGhyU2V0dGluZ3MgPSBNZXJnZVhIUlNldHRpbmdzKHRoaXMueGhyU2V0dGluZ3MsIEdldEZhc3RWYWx1ZShmaWxlQ29uZmlnLCAneGhyU2V0dGluZ3MnLCB7fSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIFhNTEh0dHBSZXF1ZXN0IGluc3RhbmNlIChhcyBjcmVhdGVkIGJ5IFhIUiBMb2FkZXIpIHRoYXQgaXMgbG9hZGluZyB0aGlzIEZpbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkZpbGUjeGhyTG9hZGVyXHJcbiAgICAgICAgICogQHR5cGUgez9YTUxIdHRwUmVxdWVzdH1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnhockxvYWRlciA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBmaWxlLiBPbmUgb2YgdGhlIEZJTEVfQ09OU1QgdmFsdWVzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5GaWxlI3N0YXRlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICh0eXBlb2YodGhpcy51cmwpID09PSAnZnVuY3Rpb24nKSA/IENPTlNULkZJTEVfUE9QVUxBVEVEIDogQ09OU1QuRklMRV9QRU5ESU5HO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdG90YWwgc2l6ZSBvZiB0aGlzIGZpbGUuXHJcbiAgICAgICAgICogU2V0IGJ5IG9uUHJvZ3Jlc3MgYW5kIG9ubHkgaWYgbG9hZGluZyB2aWEgWEhSLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5GaWxlI2J5dGVzVG90YWxcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJ5dGVzVG90YWwgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBVcGRhdGVkIGFzIHRoZSBmaWxlIGxvYWRzLlxyXG4gICAgICAgICAqIE9ubHkgc2V0IGlmIGxvYWRpbmcgdmlhIFhIUi5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuRmlsZSNieXRlc0xvYWRlZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgLTFcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJ5dGVzTG9hZGVkID0gLTE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcGVyY2VudGFnZSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBob3cgbXVjaCBvZiB0aGlzIGZpbGUgaGFzIGxvYWRlZC5cclxuICAgICAgICAgKiBPbmx5IHNldCBpZiBsb2FkaW5nIHZpYSBYSFIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkZpbGUjcGVyY2VudENvbXBsZXRlXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAtMVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGVyY2VudENvbXBsZXRlID0gLTE7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEZvciBDT1JzIGJhc2VkIGxvYWRpbmcuXHJcbiAgICAgICAgICogSWYgdGhpcyBpcyB1bmRlZmluZWQgdGhlbiB0aGUgRmlsZSB3aWxsIGNoZWNrIEJhc2VMb2FkZXIuY3Jvc3NPcmlnaW4gYW5kIHVzZSB0aGF0IChpZiBzZXQpXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkZpbGUjY3Jvc3NPcmlnaW5cclxuICAgICAgICAgKiBAdHlwZSB7KHN0cmluZ3x1bmRlZmluZWQpfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBwcm9jZXNzZWQgZmlsZSBkYXRhLCBzdG9yZWQgaGVyZSBhZnRlciB0aGUgZmlsZSBoYXMgbG9hZGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5GaWxlI2RhdGFcclxuICAgICAgICAgKiBAdHlwZSB7Kn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmRhdGEgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgY29uZmlnIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGJ5IGZpbGUgdHlwZXMgdG8gc3RvcmUgdHJhbnNpdGlvbmFsIGRhdGEuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkZpbGUjY29uZmlnXHJcbiAgICAgICAgICogQHR5cGUgeyp9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb25maWcgPSBHZXRGYXN0VmFsdWUoZmlsZUNvbmZpZywgJ2NvbmZpZycsIHt9KTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgdGhpcyBpcyBhIG11bHRpcGFydCBmaWxlLCBpLmUuIGFuIGF0bGFzIGFuZCBpdHMganNvbiB0b2dldGhlciwgdGhlbiB0aGlzIGlzIGEgcmVmZXJlbmNlXHJcbiAgICAgICAgICogdG8gdGhlIHBhcmVudCBNdWx0aUZpbGUuIFNldCBhbmQgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBMb2FkZXIgb3Igc3BlY2lmaWMgZmlsZSB0eXBlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuRmlsZSNtdWx0aUZpbGVcclxuICAgICAgICAgKiBAdHlwZSB7P1BoYXNlci5Mb2FkZXIuTXVsdGlGaWxlfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubXVsdGlGaWxlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEb2VzIHRoaXMgZmlsZSBoYXZlIGFuIGFzc29jaWF0ZWQgbGlua2VkIGZpbGU/IFN1Y2ggYXMgYW4gaW1hZ2UgYW5kIGEgbm9ybWFsIG1hcC5cclxuICAgICAgICAgKiBBdGxhc2VzIGFuZCBCaXRtYXAgRm9udHMgdXNlIHRoZSBtdWx0aUZpbGUsIGJlY2F1c2UgdGhvc2UgZmlsZXMgbmVlZCBsb2FkaW5nIHRvZ2V0aGVyIGJ1dCBhcmVuJ3RcclxuICAgICAgICAgKiBhY3R1YWxseSBib3VuZCBieSBkYXRhLCB3aGVyZS1hcyBhIGxpbmtGaWxlIGlzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5GaWxlI2xpbmtGaWxlXHJcbiAgICAgICAgICogQHR5cGUgez9QaGFzZXIuTG9hZGVyLkZpbGV9XHJcbiAgICAgICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5saW5rRmlsZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMaW5rcyB0aGlzIEZpbGUgd2l0aCBhbm90aGVyLCBzbyB0aGV5IGRlcGVuZCB1cG9uIGVhY2ggb3RoZXIgZm9yIGxvYWRpbmcgYW5kIHByb2Nlc3NpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGUjc2V0TGlua1xyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkZpbGV9IGZpbGVCIC0gVGhlIGZpbGUgdG8gbGluayB0byB0aGlzIG9uZS5cclxuICAgICAqL1xyXG4gICAgc2V0TGluazogZnVuY3Rpb24gKGZpbGVCKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMubGlua0ZpbGUgPSBmaWxlQjtcclxuXHJcbiAgICAgICAgZmlsZUIubGlua0ZpbGUgPSB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGUgWEhSTG9hZGVyIGluc3RhbmNlIHRoaXMgZmlsZSBpcyB1c2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZSNyZXNldFhIUlxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHJlc2V0WEhSOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLnhockxvYWRlcilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMueGhyTG9hZGVyLm9ubG9hZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy54aHJMb2FkZXIub25lcnJvciA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy54aHJMb2FkZXIub25wcm9ncmVzcyA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGJ5IHRoZSBMb2FkZXIsIHN0YXJ0cyB0aGUgYWN0dWFsIGZpbGUgZG93bmxvYWRpbmcuXHJcbiAgICAgKiBEdXJpbmcgdGhlIGxvYWQgdGhlIG1ldGhvZHMgb25Mb2FkLCBvbkVycm9yIGFuZCBvblByb2dyZXNzIGFyZSBjYWxsZWQsIGJhc2VkIG9uIHRoZSBYSFIgZXZlbnRzLlxyXG4gICAgICogWW91IHNob3VsZG4ndCBub3JtYWxseSBjYWxsIHRoaXMgbWV0aG9kIGRpcmVjdGx5LCBpdCdzIG1lYW50IHRvIGJlIGludm9rZWQgYnkgdGhlIExvYWRlci5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZSNsb2FkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgbG9hZDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gQ09OU1QuRklMRV9QT1BVTEFURUQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgQ2FuIGhhcHBlbiBmb3IgZXhhbXBsZSBpbiBhIEpTT05GaWxlIGlmIHRoZXkndmUgcHJvdmlkZWQgYSBKU09OIG9iamVjdCBpbnN0ZWFkIG9mIGEgVVJMXHJcbiAgICAgICAgICAgIHRoaXMubG9hZGVyLm5leHRGaWxlKHRoaXMsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNyYyA9IEdldFVSTCh0aGlzLCB0aGlzLmxvYWRlci5iYXNlVVJMKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNyYy5pbmRleE9mKCdkYXRhOicpID09PSAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0xvY2FsIGRhdGEgVVJJcyBhcmUgbm90IHN1cHBvcnRlZDogJyArIHRoaXMua2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBUaGUgY3JlYXRpb24gb2YgdGhpcyBYSFJMb2FkZXIgc3RhcnRzIHRoZSBsb2FkIHByb2Nlc3MgZ29pbmcuXHJcbiAgICAgICAgICAgICAgICAvLyAgSXQgd2lsbCBhdXRvbWF0aWNhbGx5IGNhbGwgdGhlIGZvbGxvd2luZywgYmFzZWQgb24gdGhlIGxvYWQgb3V0Y29tZTpcclxuICAgICAgICAgICAgICAgIC8vICBcclxuICAgICAgICAgICAgICAgIC8vIHhoci5vbmxvYWQgPSB0aGlzLm9uTG9hZFxyXG4gICAgICAgICAgICAgICAgLy8geGhyLm9uZXJyb3IgPSB0aGlzLm9uRXJyb3JcclxuICAgICAgICAgICAgICAgIC8vIHhoci5vbnByb2dyZXNzID0gdGhpcy5vblByb2dyZXNzXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy54aHJMb2FkZXIgPSBYSFJMb2FkZXIodGhpcywgdGhpcy5sb2FkZXIueGhyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgZmlsZSBmaW5pc2hlcyBsb2FkaW5nLCBpcyBzZW50IGEgRE9NIFByb2dyZXNzRXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGUjb25Mb2FkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1hNTEh0dHBSZXF1ZXN0fSB4aHIgLSBUaGUgWE1MSHR0cFJlcXVlc3QgdGhhdCBjYXVzZWQgdGhpcyBvbmxvYWQgZXZlbnQuXHJcbiAgICAgKiBAcGFyYW0ge1Byb2dyZXNzRXZlbnR9IGV2ZW50IC0gVGhlIERPTSBQcm9ncmVzc0V2ZW50IHRoYXQgcmVzdWx0ZWQgZnJvbSB0aGlzIGxvYWQuXHJcbiAgICAgKi9cclxuICAgIG9uTG9hZDogZnVuY3Rpb24gKHhociwgZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGxvY2FsRmlsZU9rID0gKCh4aHIucmVzcG9uc2VVUkwgJiYgeGhyLnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6Ly8nKSA9PT0gMCAmJiBldmVudC50YXJnZXQuc3RhdHVzID09PSAwKSk7XHJcblxyXG4gICAgICAgIHZhciBzdWNjZXNzID0gIShldmVudC50YXJnZXQgJiYgZXZlbnQudGFyZ2V0LnN0YXR1cyAhPT0gMjAwKSB8fCBsb2NhbEZpbGVPaztcclxuXHJcbiAgICAgICAgLy8gIEhhbmRsZSBIVFRQIHN0YXR1cyBjb2RlcyBvZiA0eHggYW5kIDV4eCBhcyBlcnJvcnMsIGV2ZW4gaWYgeGhyLm9uZXJyb3Igd2FzIG5vdCBjYWxsZWQuXHJcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0ICYmIHhoci5zdGF0dXMgPj0gNDAwICYmIHhoci5zdGF0dXMgPD0gNTk5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNldFhIUigpO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRlci5uZXh0RmlsZSh0aGlzLCBzdWNjZXNzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgaWYgdGhlIGZpbGUgZXJyb3JzIHdoaWxlIGxvYWRpbmcsIGlzIHNlbnQgYSBET00gUHJvZ3Jlc3NFdmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZSNvbkVycm9yXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1hNTEh0dHBSZXF1ZXN0fSB4aHIgLSBUaGUgWE1MSHR0cFJlcXVlc3QgdGhhdCBjYXVzZWQgdGhpcyBvbmxvYWQgZXZlbnQuXHJcbiAgICAgKiBAcGFyYW0ge1Byb2dyZXNzRXZlbnR9IGV2ZW50IC0gVGhlIERPTSBQcm9ncmVzc0V2ZW50IHRoYXQgcmVzdWx0ZWQgZnJvbSB0aGlzIGVycm9yLlxyXG4gICAgICovXHJcbiAgICBvbkVycm9yOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMucmVzZXRYSFIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkZXIubmV4dEZpbGUodGhpcywgZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBkdXJpbmcgdGhlIGZpbGUgbG9hZCBwcm9ncmVzcy4gSXMgc2VudCBhIERPTSBQcm9ncmVzc0V2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlI29uUHJvZ3Jlc3NcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuTG9hZGVyLkV2ZW50cyNGSUxFX1BST0dSRVNTXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1Byb2dyZXNzRXZlbnR9IGV2ZW50IC0gVGhlIERPTSBQcm9ncmVzc0V2ZW50LlxyXG4gICAgICovXHJcbiAgICBvblByb2dyZXNzOiBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKGV2ZW50Lmxlbmd0aENvbXB1dGFibGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmJ5dGVzTG9hZGVkID0gZXZlbnQubG9hZGVkO1xyXG4gICAgICAgICAgICB0aGlzLmJ5dGVzVG90YWwgPSBldmVudC50b3RhbDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucGVyY2VudENvbXBsZXRlID0gTWF0aC5taW4oKHRoaXMuYnl0ZXNMb2FkZWQgLyB0aGlzLmJ5dGVzVG90YWwpLCAxKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubG9hZGVyLmVtaXQoRXZlbnRzLkZJTEVfUFJPR1JFU1MsIHRoaXMsIHRoaXMucGVyY2VudENvbXBsZXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXN1YWxseSBvdmVycmlkZGVuIGJ5IHRoZSBGaWxlVHlwZXMgYW5kIGlzIGNhbGxlZCBieSBMb2FkZXIubmV4dEZpbGUuXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBjb250cm9scyB3aGF0IGV4dHJhIHdvcmsgdGhpcyBGaWxlIGRvZXMgd2l0aCBpdHMgbG9hZGVkIGRhdGEsIGZvciBleGFtcGxlIGEgSlNPTiBmaWxlIHdpbGwgcGFyc2UgaXRzZWxmIGR1cmluZyB0aGlzIHN0YWdlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlI29uUHJvY2Vzc1xyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIG9uUHJvY2VzczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09OU1QuRklMRV9QUk9DRVNTSU5HO1xyXG5cclxuICAgICAgICB0aGlzLm9uUHJvY2Vzc0NvbXBsZXRlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIEZpbGUgaGFzIGNvbXBsZXRlZCBwcm9jZXNzaW5nLlxyXG4gICAgICogQ2hlY2tzIG9uIHRoZSBzdGF0ZSBvZiBpdHMgbXVsdGlmaWxlLCBpZiBzZXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGUjb25Qcm9jZXNzQ29tcGxldGVcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBvblByb2Nlc3NDb21wbGV0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09OU1QuRklMRV9DT01QTEVURTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubXVsdGlGaWxlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tdWx0aUZpbGUub25GaWxlQ29tcGxldGUodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvYWRlci5maWxlUHJvY2Vzc0NvbXBsZXRlKHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCB3aGVuIHRoZSBGaWxlIGhhcyBjb21wbGV0ZWQgcHJvY2Vzc2luZyBidXQgaXQgZ2VuZXJhdGVkIGFuIGVycm9yLlxyXG4gICAgICogQ2hlY2tzIG9uIHRoZSBzdGF0ZSBvZiBpdHMgbXVsdGlmaWxlLCBpZiBzZXQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGUjb25Qcm9jZXNzRXJyb3JcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBvblByb2Nlc3NFcnJvcjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09OU1QuRklMRV9FUlJPUkVEO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5tdWx0aUZpbGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm11bHRpRmlsZS5vbkZpbGVGYWlsZWQodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvYWRlci5maWxlUHJvY2Vzc0NvbXBsZXRlKHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBhIGtleSBtYXRjaGluZyB0aGUgb25lIHVzZWQgYnkgdGhpcyBmaWxlIGV4aXN0cyBpbiB0aGUgdGFyZ2V0IENhY2hlIG9yIG5vdC5cclxuICAgICAqIFRoaXMgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIExvYWRlclBsdWdpbiB0byBkZWNpZGUgaWYgdGhlIGZpbGUgY2FuIGJlIHNhZmVseVxyXG4gICAgICogbG9hZGVkIG9yIHdpbGwgY29uZmxpY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGUjaGFzQ2FjaGVDb25mbGljdFxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIGFkZGluZyB0aGlzIGZpbGUgd2lsbCBjYXVzZSBhIGNvbmZsaWN0LCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgaGFzQ2FjaGVDb25mbGljdDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuY2FjaGUgJiYgdGhpcy5jYWNoZS5leGlzdHModGhpcy5rZXkpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIHRoaXMgZmlsZSB0byBpdHMgdGFyZ2V0IGNhY2hlIHVwb24gc3VjY2Vzc2Z1bCBsb2FkaW5nIGFuZCBwcm9jZXNzaW5nLlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgb2Z0ZW4gb3ZlcnJpZGRlbiBieSBzcGVjaWZpYyBmaWxlIHR5cGVzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlI2FkZFRvQ2FjaGVcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBhZGRUb0NhY2hlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmNhY2hlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5jYWNoZS5hZGQodGhpcy5rZXksIHRoaXMuZGF0YSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlbmRpbmdEZXN0cm95KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIG9uY2UgdGhlIGZpbGUgaGFzIGJlZW4gYWRkZWQgdG8gaXRzIGNhY2hlIGFuZCBpcyBub3cgcmVhZHkgZm9yIGRlbGV0aW9uIGZyb20gdGhlIExvYWRlci5cclxuICAgICAqIEl0IHdpbGwgZW1pdCBhIGBmaWxlY29tcGxldGVgIGV2ZW50IGZyb20gdGhlIExvYWRlclBsdWdpbi5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZSNwZW5kaW5nRGVzdHJveVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Mb2FkZXIuRXZlbnRzI0ZJTEVfQ09NUExFVEVcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuTG9hZGVyLkV2ZW50cyNGSUxFX0tFWV9DT01QTEVURVxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKi9cclxuICAgIHBlbmRpbmdEZXN0cm95OiBmdW5jdGlvbiAoZGF0YSlcclxuICAgIHtcclxuICAgICAgICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7IGRhdGEgPSB0aGlzLmRhdGE7IH1cclxuXHJcbiAgICAgICAgdmFyIGtleSA9IHRoaXMua2V5O1xyXG4gICAgICAgIHZhciB0eXBlID0gdGhpcy50eXBlO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRlci5lbWl0KEV2ZW50cy5GSUxFX0NPTVBMRVRFLCBrZXksIHR5cGUsIGRhdGEpO1xyXG4gICAgICAgIHRoaXMubG9hZGVyLmVtaXQoRXZlbnRzLkZJTEVfS0VZX0NPTVBMRVRFICsgdHlwZSArICctJyArIGtleSwga2V5LCB0eXBlLCBkYXRhKTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkZXIuZmxhZ0ZvclJlbW92YWwodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveSB0aGlzIEZpbGUgYW5kIGFueSByZWZlcmVuY2VzIGl0IGhvbGRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlI2Rlc3Ryb3lcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNhY2hlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnhoclNldHRpbmdzID0gbnVsbDtcclxuICAgICAgICB0aGlzLm11bHRpRmlsZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5saW5rRmlsZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIFN0YXRpYyBtZXRob2QgZm9yIGNyZWF0aW5nIG9iamVjdCBVUkwgdXNpbmcgVVJMIEFQSSBhbmQgc2V0dGluZyBpdCBhcyBpbWFnZSAnc3JjJyBhdHRyaWJ1dGUuXHJcbiAqIElmIFVSTCBBUEkgaXMgbm90IHN1cHBvcnRlZCAodXN1YWxseSBvbiBvbGQgYnJvd3NlcnMpIGl0IGZhbGxzIGJhY2sgdG8gY3JlYXRpbmcgQmFzZTY0IGVuY29kZWQgdXJsIHVzaW5nIEZpbGVSZWFkZXIuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlLmNyZWF0ZU9iamVjdFVSTFxyXG4gKiBAc3RhdGljXHJcbiAqIEBzaW5jZSAzLjcuMFxyXG4gKiBcclxuICogQHBhcmFtIHtIVE1MSW1hZ2VFbGVtZW50fSBpbWFnZSAtIEltYWdlIG9iamVjdCB3aGljaCAnc3JjJyBhdHRyaWJ1dGUgc2hvdWxkIGJlIHNldCB0byBvYmplY3QgVVJMLlxyXG4gKiBAcGFyYW0ge0Jsb2J9IGJsb2IgLSBBIEJsb2Igb2JqZWN0IHRvIGNyZWF0ZSBhbiBvYmplY3QgVVJMIGZvci5cclxuICogQHBhcmFtIHtzdHJpbmd9IGRlZmF1bHRUeXBlIC0gRGVmYXVsdCBtaW1lIHR5cGUgdXNlZCBpZiBibG9iIHR5cGUgaXMgbm90IGF2YWlsYWJsZS5cclxuICovXHJcbkZpbGUuY3JlYXRlT2JqZWN0VVJMID0gZnVuY3Rpb24gKGltYWdlLCBibG9iLCBkZWZhdWx0VHlwZSlcclxue1xyXG4gICAgaWYgKHR5cGVvZiBVUkwgPT09ICdmdW5jdGlvbicpXHJcbiAgICB7XHJcbiAgICAgICAgaW1hZ2Uuc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpbWFnZS5yZW1vdmVBdHRyaWJ1dGUoJ2Nyb3NzT3JpZ2luJyk7XHJcbiAgICAgICAgICAgIGltYWdlLnNyYyA9ICdkYXRhOicgKyAoYmxvYi50eXBlIHx8IGRlZmF1bHRUeXBlKSArICc7YmFzZTY0LCcgKyByZWFkZXIucmVzdWx0LnNwbGl0KCcsJylbMV07XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSBpbWFnZS5vbmVycm9yO1xyXG5cclxuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBTdGF0aWMgbWV0aG9kIGZvciByZWxlYXNpbmcgYW4gZXhpc3Rpbmcgb2JqZWN0IFVSTCB3aGljaCB3YXMgcHJldmlvdXNseSBjcmVhdGVkXHJcbiAqIGJ5IGNhbGxpbmcge0BsaW5rIEZpbGUjY3JlYXRlT2JqZWN0VVJMfSBtZXRob2QuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlLnJldm9rZU9iamVjdFVSTFxyXG4gKiBAc3RhdGljXHJcbiAqIEBzaW5jZSAzLjcuMFxyXG4gKiBcclxuICogQHBhcmFtIHtIVE1MSW1hZ2VFbGVtZW50fSBpbWFnZSAtIEltYWdlIG9iamVjdCB3aGljaCAnc3JjJyBhdHRyaWJ1dGUgc2hvdWxkIGJlIHJldm9rZWQuXHJcbiAqL1xyXG5GaWxlLnJldm9rZU9iamVjdFVSTCA9IGZ1bmN0aW9uIChpbWFnZSlcclxue1xyXG4gICAgaWYgKHR5cGVvZiBVUkwgPT09ICdmdW5jdGlvbicpXHJcbiAgICB7XHJcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChpbWFnZS5zcmMpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBGaWxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/File.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/FileTypesManager.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/loader/FileTypesManager.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar types = {};\r\n\r\n/**\r\n * @namespace Phaser.Loader.FileTypesManager\r\n */\r\n\r\nvar FileTypesManager = {\r\n\r\n /**\r\n * Static method called when a LoaderPlugin is created.\r\n * \r\n * Loops through the local types object and injects all of them as\r\n * properties into the LoaderPlugin instance.\r\n *\r\n * @method Phaser.Loader.FileTypesManager.install\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Loader.LoaderPlugin} loader - The LoaderPlugin to install the types into.\r\n */\r\n install: function (loader)\r\n {\r\n for (var key in types)\r\n {\r\n loader[key] = types[key];\r\n }\r\n },\r\n\r\n /**\r\n * Static method called directly by the File Types.\r\n * \r\n * The key is a reference to the function used to load the files via the Loader, i.e. `image`.\r\n *\r\n * @method Phaser.Loader.FileTypesManager.register\r\n * @since 3.0.0\r\n * \r\n * @param {string} key - The key that will be used as the method name in the LoaderPlugin.\r\n * @param {function} factoryFunction - The function that will be called when LoaderPlugin.key is invoked.\r\n */\r\n register: function (key, factoryFunction)\r\n {\r\n types[key] = factoryFunction;\r\n },\r\n\r\n /**\r\n * Removed all associated file types.\r\n *\r\n * @method Phaser.Loader.FileTypesManager.destroy\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n types = {};\r\n }\r\n\r\n};\r\n\r\nmodule.exports = FileTypesManager;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvRmlsZVR5cGVzTWFuYWdlci5qcz8yZDVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwyQkFBMkI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9GaWxlVHlwZXNNYW5hZ2VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgdHlwZXMgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzTWFuYWdlclxyXG4gKi9cclxuXHJcbnZhciBGaWxlVHlwZXNNYW5hZ2VyID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RhdGljIG1ldGhvZCBjYWxsZWQgd2hlbiBhIExvYWRlclBsdWdpbiBpcyBjcmVhdGVkLlxyXG4gICAgICogXHJcbiAgICAgKiBMb29wcyB0aHJvdWdoIHRoZSBsb2NhbCB0eXBlcyBvYmplY3QgYW5kIGluamVjdHMgYWxsIG9mIHRoZW0gYXNcclxuICAgICAqIHByb3BlcnRpZXMgaW50byB0aGUgTG9hZGVyUGx1Z2luIGluc3RhbmNlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXNNYW5hZ2VyLmluc3RhbGxcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBUaGUgTG9hZGVyUGx1Z2luIHRvIGluc3RhbGwgdGhlIHR5cGVzIGludG8uXHJcbiAgICAgKi9cclxuICAgIGluc3RhbGw6IGZ1bmN0aW9uIChsb2FkZXIpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHR5cGVzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbG9hZGVyW2tleV0gPSB0eXBlc1trZXldO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGF0aWMgbWV0aG9kIGNhbGxlZCBkaXJlY3RseSBieSB0aGUgRmlsZSBUeXBlcy5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGtleSBpcyBhIHJlZmVyZW5jZSB0byB0aGUgZnVuY3Rpb24gdXNlZCB0byBsb2FkIHRoZSBmaWxlcyB2aWEgdGhlIExvYWRlciwgaS5lLiBgaW1hZ2VgLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXNNYW5hZ2VyLnJlZ2lzdGVyXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIG1ldGhvZCBuYW1lIGluIHRoZSBMb2FkZXJQbHVnaW4uXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmYWN0b3J5RnVuY3Rpb24gLSBUaGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIExvYWRlclBsdWdpbi5rZXkgaXMgaW52b2tlZC5cclxuICAgICAqL1xyXG4gICAgcmVnaXN0ZXI6IGZ1bmN0aW9uIChrZXksIGZhY3RvcnlGdW5jdGlvbilcclxuICAgIHtcclxuICAgICAgICB0eXBlc1trZXldID0gZmFjdG9yeUZ1bmN0aW9uO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZWQgYWxsIGFzc29jaWF0ZWQgZmlsZSB0eXBlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzTWFuYWdlci5kZXN0cm95XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0eXBlcyA9IHt9O1xyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRmlsZVR5cGVzTWFuYWdlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/FileTypesManager.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/GetURL.js":
/*!**************************************************!*\
!*** ./node_modules/phaser/src/loader/GetURL.js ***!
\**************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Given a File and a baseURL value this returns the URL the File will use to download from.\r\n *\r\n * @function Phaser.Loader.GetURL\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.File} file - The File object.\r\n * @param {string} baseURL - A default base URL.\r\n *\r\n * @return {string} The URL the File will use.\r\n */\r\nvar GetURL = function (file, baseURL)\r\n{\r\n if (!file.url)\r\n {\r\n return false;\r\n }\r\n\r\n if (file.url.match(/^(?:blob:|data:|http:\\/\\/|https:\\/\\/|\\/\\/)/))\r\n {\r\n return file.url;\r\n }\r\n else\r\n {\r\n return baseURL + file.url;\r\n }\r\n};\r\n\r\nmodule.exports = GetURL;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvR2V0VVJMLmpzP2U3ZDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbUJBQW1CO0FBQzlCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvR2V0VVJMLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogR2l2ZW4gYSBGaWxlIGFuZCBhIGJhc2VVUkwgdmFsdWUgdGhpcyByZXR1cm5zIHRoZSBVUkwgdGhlIEZpbGUgd2lsbCB1c2UgdG8gZG93bmxvYWQgZnJvbS5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5Mb2FkZXIuR2V0VVJMXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuRmlsZX0gZmlsZSAtIFRoZSBGaWxlIG9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgLSBBIGRlZmF1bHQgYmFzZSBVUkwuXHJcbiAqXHJcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVSTCB0aGUgRmlsZSB3aWxsIHVzZS5cclxuICovXHJcbnZhciBHZXRVUkwgPSBmdW5jdGlvbiAoZmlsZSwgYmFzZVVSTClcclxue1xyXG4gICAgaWYgKCFmaWxlLnVybClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpbGUudXJsLm1hdGNoKC9eKD86YmxvYjp8ZGF0YTp8aHR0cDpcXC9cXC98aHR0cHM6XFwvXFwvfFxcL1xcLykvKSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZmlsZS51cmw7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGJhc2VVUkwgKyBmaWxlLnVybDtcclxuICAgIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gR2V0VVJMO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/GetURL.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/LoaderPlugin.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/loader/LoaderPlugin.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ./const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar CustomSet = __webpack_require__(/*! ../structs/Set */ \"./node_modules/phaser/src/structs/Set.js\");\r\nvar EventEmitter = __webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\");\r\nvar Events = __webpack_require__(/*! ./events */ \"./node_modules/phaser/src/loader/events/index.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ./FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar PluginCache = __webpack_require__(/*! ../plugins/PluginCache */ \"./node_modules/phaser/src/plugins/PluginCache.js\");\r\nvar SceneEvents = __webpack_require__(/*! ../scene/events */ \"./node_modules/phaser/src/scene/events/index.js\");\r\nvar XHRSettings = __webpack_require__(/*! ./XHRSettings */ \"./node_modules/phaser/src/loader/XHRSettings.js\");\r\n\r\n/**\r\n * @classdesc\r\n * The Loader handles loading all external content such as Images, Sounds, Texture Atlases and data files.\r\n * You typically interact with it via `this.load` in your Scene. Scenes can have a `preload` method, which is always\r\n * called before the Scenes `create` method, allowing you to preload assets that the Scene may need.\r\n *\r\n * If you call any `this.load` methods from outside of `Scene.preload` then you need to start the Loader going\r\n * yourself by calling `Loader.start()`. It's only automatically started during the Scene preload.\r\n *\r\n * The Loader uses a combination of tag loading (eg. Audio elements) and XHR and provides progress and completion events.\r\n * Files are loaded in parallel by default. The amount of concurrent connections can be controlled in your Game Configuration.\r\n *\r\n * Once the Loader has started loading you are still able to add files to it. These can be injected as a result of a loader\r\n * event, the type of file being loaded (such as a pack file) or other external events. As long as the Loader hasn't finished\r\n * simply adding a new file to it, while running, will ensure it's added into the current queue.\r\n *\r\n * Every Scene has its own instance of the Loader and they are bound to the Scene in which they are created. However,\r\n * assets loaded by the Loader are placed into global game-level caches. For example, loading an XML file will place that\r\n * file inside `Game.cache.xml`, which is accessible from every Scene in your game, no matter who was responsible\r\n * for loading it. The same is true of Textures. A texture loaded in one Scene is instantly available to all other Scenes\r\n * in your game.\r\n *\r\n * The Loader works by using custom File Types. These are stored in the FileTypesManager, which injects them into the Loader\r\n * when it's instantiated. You can create your own custom file types by extending either the File or MultiFile classes.\r\n * See those files for more details.\r\n *\r\n * @class LoaderPlugin\r\n * @extends Phaser.Events.EventEmitter\r\n * @memberof Phaser.Loader\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Scene} scene - The Scene which owns this Loader instance.\r\n */\r\nvar LoaderPlugin = new Class({\r\n\r\n Extends: EventEmitter,\r\n\r\n initialize:\r\n\r\n function LoaderPlugin (scene)\r\n {\r\n EventEmitter.call(this);\r\n\r\n var gameConfig = scene.sys.game.config;\r\n var sceneConfig = scene.sys.settings.loader;\r\n\r\n /**\r\n * The Scene which owns this Loader instance.\r\n *\r\n * @name Phaser.Loader.LoaderPlugin#scene\r\n * @type {Phaser.Scene}\r\n * @since 3.0.0\r\n */\r\n this.scene = scene;\r\n\r\n /**\r\n * A reference to the Scene Systems.\r\n *\r\n * @name Phaser.Loader.LoaderPlugin#systems\r\n * @type {Phaser.Scenes.Systems}\r\n * @since 3.0.0\r\n */\r\n this.systems = scene.sys;\r\n\r\n /**\r\n * A reference to the global Cache Manager.\r\n *\r\n * @name Phaser.Loader.LoaderPlugin#cacheManager\r\n * @type {Phaser.Cache.CacheManager}\r\n * @since 3.7.0\r\n */\r\n this.cacheManager = scene.sys.cache;\r\n\r\n /**\r\n * A reference to the global Texture Manager.\r\n *\r\n * @name Phaser.Loader.LoaderPlugin#textureManager\r\n * @type {Phaser.Textures.TextureManager}\r\n * @since 3.7.0\r\n */\r\n this.textureManager = scene.sys.textures;\r\n\r\n /**\r\n * A reference to the global Scene Manager.\r\n *\r\n * @name Phaser.Loader.LoaderPlugin#sceneManager\r\n * @type {Phaser.Scenes.SceneManager}\r\n * @protected\r\n * @since 3.16.0\r\n */\r\n this.sceneManager = scene.sys.game.scene;\r\n\r\n // Inject the available filetypes into the Loader\r\n FileTypesManager.install(this);\r\n\r\n /**\r\n * An optional prefix that is automatically prepended to the start of every file key.\r\n * If prefix was `MENU.` and you load an image with the key 'Background' the resulting key would be `MENU.Background`.\r\n * You can set this directly, or call `Loader.setPrefix()`. It will then affect every file added to the Loader\r\n * from that point on. It does _not_ change any file already in the load queue.\r\n *\r\n * @name Phaser.Loader.LoaderPlugin#prefix\r\n * @type {string}\r\n * @default ''\r\n * @since 3.7.0\r\n */\r\n this.prefix = '';\r\n\r\n /**\r\n * The value of `path`, if set, is placed before any _relative_ file path given. For example:\r\n *\r\n * ```javascript\r\n * this.load.path = \"images/sprites/\";\r\n * this.load.image(\"ball\", \"ball.png\");\r\n * this.load.image(\"tree\", \"level1/oaktree.png\");\r\n * this.load.image(\"boom\", \"http://server.com/explode.png\");\r\n * ```\r\n *\r\n * Would load the `ball` file from `images/sprites/ball.png` and the tree from\r\n * `images/sprites/level1/oaktree.png` but the file `boom` would load from the URL\r\n * given as it's an absolute URL.\r\n *\r\n * Please note that the path is added before the filename but *after* the baseURL (if set.)\r\n *\r\n * If you set this property directly then it _must_ end with a \"/\". Alternatively, call `setPath()` and it'll do it for you.\r\n *\r\n * @name Phaser.Loader.LoaderPlugin#path\r\n * @type {string}\r\n * @default ''\r\n * @since 3.0.0\r\n */\r\n this.path = '';\r\n\r\n /**\r\n * If you want to append a URL before the path of any asset you can set this here.\r\n * \r\n * Useful if allowing the asset base url to be configured outside of the game code.\r\n * \r\n * If you set this property directly then it _must_ end with a \"/\". Alternatively, call `setBaseURL()` and it'll do it for you.\r\n *\r\n * @name Phaser.Loader.LoaderPlugin#baseURL\r\n * @type {string}\r\n * @default ''\r\n * @since 3.0.0\r\n */\r\n this.baseURL = '';\r\n\r\n this.setBaseURL(GetFastValue(sceneConfig, 'baseURL', gameConfig.loaderBaseURL));\r\n\r\n this.setPath(GetFastValue(sceneConfig, 'path', gameConfig.loaderPath));\r\n\r\n this.setPrefix(GetFastValue(sceneConfig, 'prefix', gameConfig.loaderPrefix));\r\n\r\n /**\r\n * The number of concurrent / parallel resources to try and fetch at once.\r\n *\r\n * Old browsers limit 6 requests per domain; modern ones, especially those with HTTP/2 don't limit it at all.\r\n *\r\n * The default is 32 but you can change this in your Game Config, or by changing this property before the Loader starts.\r\n *\r\n * @name Phaser.Loader.LoaderPlugin#maxParallelDownloads\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n this.maxParallelDownloads = GetFastValue(sceneConfig, 'maxParallelDownloads', gameConfig.loaderMaxParallelDownloads);\r\n\r\n /**\r\n * xhr specific global settings (can be overridden on a per-file basis)\r\n *\r\n * @name Phaser.Loader.LoaderPlugin#xhr\r\n * @type {Phaser.Types.Loader.XHRSettingsObject}\r\n * @since 3.0.0\r\n */\r\n this.xhr = XHRSettings(\r\n GetFastValue(sceneConfig, 'responseType', gameConfig.loaderResponseType),\r\n GetFastValue(sceneConfig, 'async', gameConfig.loaderAsync),\r\n GetFastValue(sceneConfig, 'user', gameConfig.loaderUser),\r\n GetFastValue(sceneConfig, 'password', gameConfig.loaderPassword),\r\n GetFastValue(sceneConfig, 'timeout', gameConfig.loaderTimeout)\r\n );\r\n\r\n /**\r\n * The crossOrigin value applied to loaded images. Very often this needs to be set to 'anonymous'.\r\n *\r\n * @name Phaser.Loader.LoaderPlugin#crossOrigin\r\n * @type {string}\r\n * @since 3.0.0\r\n */\r\n this.crossOrigin = GetFastValue(sceneConfig, 'crossOrigin', gameConfig.loaderCrossOrigin);\r\n\r\n /**\r\n * The total number of files to load. It may not always be accurate because you may add to the Loader during the process\r\n * of loading, especially if you load a Pack File. Therefore this value can change, but in most cases remains static.\r\n *\r\n * @name Phaser.Loader.LoaderPlugin#totalToLoad\r\n * @type {integer}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.totalToLoad = 0;\r\n\r\n /**\r\n * The progress of the current load queue, as a float value between 0 and 1.\r\n * This is updated automatically as files complete loading.\r\n * Note that it is possible for this value to go down again if you add content to the current load queue during a load.\r\n *\r\n * @name Phaser.Loader.LoaderPlugin#progress\r\n * @type {number}\r\n * @default 0\r\n * @since 3.0.0\r\n */\r\n this.progress = 0;\r\n\r\n /**\r\n * Files are placed in this Set when they're added to the Loader via `addFile`.\r\n * \r\n * They are moved to the `inflight` Set when they start loading, and assuming a successful\r\n * load, to the `queue` Set for further processing.\r\n *\r\n * By the end of the load process this Set will be empty.\r\n *\r\n * @name Phaser.Loader.LoaderPlugin#list\r\n * @type {Phaser.Structs.Set.<Phaser.Loader.File>}\r\n * @since 3.0.0\r\n */\r\n this.list = new CustomSet();\r\n\r\n /**\r\n * Files are stored in this Set while they're in the process of being loaded.\r\n * \r\n * Upon a successful load they are moved to the `queue` Set.\r\n * \r\n * By the end of the load process this Set will be empty.\r\n *\r\n * @name Phaser.Loader.LoaderPlugin#inflight\r\n * @type {Phaser.Structs.Set.<Phaser.Loader.File>}\r\n * @since 3.0.0\r\n */\r\n this.inflight = new CustomSet();\r\n\r\n /**\r\n * Files are stored in this Set while they're being processed.\r\n * \r\n * If the process is successful they are moved to their final destination, which could be\r\n * a Cache or the Texture Manager.\r\n * \r\n * At the end of the load process this Set will be empty.\r\n *\r\n * @name Phaser.Loader.LoaderPlugin#queue\r\n * @type {Phaser.Structs.Set.<Phaser.Loader.File>}\r\n * @since 3.0.0\r\n */\r\n this.queue = new CustomSet();\r\n\r\n /**\r\n * A temporary Set in which files are stored after processing,\r\n * awaiting destruction at the end of the load process.\r\n *\r\n * @name Phaser.Loader.LoaderPlugin#_deleteQueue\r\n * @type {Phaser.Structs.Set.<Phaser.Loader.File>}\r\n * @private\r\n * @since 3.7.0\r\n */\r\n this._deleteQueue = new CustomSet();\r\n\r\n /**\r\n * The total number of files that failed to load during the most recent load.\r\n * This value is reset when you call `Loader.start`.\r\n *\r\n * @name Phaser.Loader.LoaderPlugin#totalFailed\r\n * @type {integer}\r\n * @default 0\r\n * @since 3.7.0\r\n */\r\n this.totalFailed = 0;\r\n\r\n /**\r\n * The total number of files that successfully loaded during the most recent load.\r\n * This value is reset when you call `Loader.start`.\r\n *\r\n * @name Phaser.Loader.LoaderPlugin#totalComplete\r\n * @type {integer}\r\n * @default 0\r\n * @since 3.7.0\r\n */\r\n this.totalComplete = 0;\r\n\r\n /**\r\n * The current state of the Loader.\r\n *\r\n * @name Phaser.Loader.LoaderPlugin#state\r\n * @type {integer}\r\n * @readonly\r\n * @since 3.0.0\r\n */\r\n this.state = CONST.LOADER_IDLE;\r\n\r\n /**\r\n * The current index being used by multi-file loaders to avoid key clashes.\r\n *\r\n * @name Phaser.Loader.LoaderPlugin#multiKeyIndex\r\n * @type {integer}\r\n * @private\r\n * @since 3.20.0\r\n */\r\n this.multiKeyIndex = 0;\r\n\r\n scene.sys.events.once(SceneEvents.BOOT, this.boot, this);\r\n scene.sys.events.on(SceneEvents.START, this.pluginStart, this);\r\n },\r\n\r\n /**\r\n * This method is called automatically, only once, when the Scene is first created.\r\n * Do not invoke it directly.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#boot\r\n * @private\r\n * @since 3.5.1\r\n */\r\n boot: function ()\r\n {\r\n this.systems.events.once(SceneEvents.DESTROY, this.destroy, this);\r\n },\r\n\r\n /**\r\n * This method is called automatically by the Scene when it is starting up.\r\n * It is responsible for creating local systems, properties and listening for Scene events.\r\n * Do not invoke it directly.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#pluginStart\r\n * @private\r\n * @since 3.5.1\r\n */\r\n pluginStart: function ()\r\n {\r\n this.systems.events.once(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n },\r\n\r\n /**\r\n * If you want to append a URL before the path of any asset you can set this here.\r\n * \r\n * Useful if allowing the asset base url to be configured outside of the game code.\r\n * \r\n * Once a base URL is set it will affect every file loaded by the Loader from that point on. It does _not_ change any\r\n * file _already_ being loaded. To reset it, call this method with no arguments.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#setBaseURL\r\n * @since 3.0.0\r\n *\r\n * @param {string} [url] - The URL to use. Leave empty to reset.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} This Loader object.\r\n */\r\n setBaseURL: function (url)\r\n {\r\n if (url === undefined) { url = ''; }\r\n\r\n if (url !== '' && url.substr(-1) !== '/')\r\n {\r\n url = url.concat('/');\r\n }\r\n\r\n this.baseURL = url;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * The value of `path`, if set, is placed before any _relative_ file path given. For example:\r\n *\r\n * ```javascript\r\n * this.load.setPath(\"images/sprites/\");\r\n * this.load.image(\"ball\", \"ball.png\");\r\n * this.load.image(\"tree\", \"level1/oaktree.png\");\r\n * this.load.image(\"boom\", \"http://server.com/explode.png\");\r\n * ```\r\n *\r\n * Would load the `ball` file from `images/sprites/ball.png` and the tree from\r\n * `images/sprites/level1/oaktree.png` but the file `boom` would load from the URL\r\n * given as it's an absolute URL.\r\n *\r\n * Please note that the path is added before the filename but *after* the baseURL (if set.)\r\n * \r\n * Once a path is set it will then affect every file added to the Loader from that point on. It does _not_ change any\r\n * file _already_ in the load queue. To reset it, call this method with no arguments.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#setPath\r\n * @since 3.0.0\r\n *\r\n * @param {string} [path] - The path to use. Leave empty to reset.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} This Loader object.\r\n */\r\n setPath: function (path)\r\n {\r\n if (path === undefined) { path = ''; }\r\n\r\n if (path !== '' && path.substr(-1) !== '/')\r\n {\r\n path = path.concat('/');\r\n }\r\n\r\n this.path = path;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * An optional prefix that is automatically prepended to the start of every file key.\r\n * \r\n * If prefix was `MENU.` and you load an image with the key 'Background' the resulting key would be `MENU.Background`.\r\n * \r\n * Once a prefix is set it will then affect every file added to the Loader from that point on. It does _not_ change any\r\n * file _already_ in the load queue. To reset it, call this method with no arguments.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#setPrefix\r\n * @since 3.7.0\r\n *\r\n * @param {string} [prefix] - The prefix to use. Leave empty to reset.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} This Loader object.\r\n */\r\n setPrefix: function (prefix)\r\n {\r\n if (prefix === undefined) { prefix = ''; }\r\n\r\n this.prefix = prefix;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Sets the Cross Origin Resource Sharing value used when loading files.\r\n * \r\n * Files can override this value on a per-file basis by specifying an alternative `crossOrigin` value in their file config.\r\n * \r\n * Once CORs is set it will then affect every file loaded by the Loader from that point on, as long as they don't have\r\n * their own CORs setting. To reset it, call this method with no arguments.\r\n *\r\n * For more details about CORs see https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#setCORS\r\n * @since 3.0.0\r\n *\r\n * @param {string} [crossOrigin] - The value to use for the `crossOrigin` property in the load request.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} This Loader object.\r\n */\r\n setCORS: function (crossOrigin)\r\n {\r\n this.crossOrigin = crossOrigin;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Adds a file, or array of files, into the load queue.\r\n *\r\n * The file must be an instance of `Phaser.Loader.File`, or a class that extends it. The Loader will check that the key\r\n * used by the file won't conflict with any other key either in the loader, the inflight queue or the target cache.\r\n * If allowed it will then add the file into the pending list, read for the load to start. Or, if the load has already\r\n * started, ready for the next batch of files to be pulled from the list to the inflight queue.\r\n *\r\n * You should not normally call this method directly, but rather use one of the Loader methods like `image` or `atlas`,\r\n * however you can call this as long as the file given to it is well formed.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#addFile\r\n * @fires Phaser.Loader.Events#ADD\r\n * @since 3.0.0\r\n *\r\n * @param {(Phaser.Loader.File|Phaser.Loader.File[])} file - The file, or array of files, to be added to the load queue.\r\n */\r\n addFile: function (file)\r\n {\r\n if (!Array.isArray(file))\r\n {\r\n file = [ file ];\r\n }\r\n\r\n for (var i = 0; i < file.length; i++)\r\n {\r\n var item = file[i];\r\n\r\n // Does the file already exist in the cache or texture manager?\r\n // Or will it conflict with a file already in the queue or inflight?\r\n if (!this.keyExists(item))\r\n {\r\n this.list.set(item);\r\n\r\n this.emit(Events.ADD, item.key, item.type, this, item);\r\n\r\n if (this.isLoading())\r\n {\r\n this.totalToLoad++;\r\n this.updateProgress();\r\n }\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Checks the key and type of the given file to see if it will conflict with anything already\r\n * in a Cache, the Texture Manager, or the list or inflight queues.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#keyExists\r\n * @since 3.7.0\r\n *\r\n * @param {Phaser.Loader.File} file - The file to check the key of.\r\n *\r\n * @return {boolean} `true` if adding this file will cause a cache or queue conflict, otherwise `false`.\r\n */\r\n keyExists: function (file)\r\n {\r\n var keyConflict = file.hasCacheConflict();\r\n\r\n if (!keyConflict)\r\n {\r\n this.list.iterate(function (item)\r\n {\r\n if (item.type === file.type && item.key === file.key)\r\n {\r\n keyConflict = true;\r\n\r\n return false;\r\n }\r\n\r\n });\r\n }\r\n\r\n if (!keyConflict && this.isLoading())\r\n {\r\n this.inflight.iterate(function (item)\r\n {\r\n if (item.type === file.type && item.key === file.key)\r\n {\r\n keyConflict = true;\r\n\r\n return false;\r\n }\r\n\r\n });\r\n\r\n this.queue.iterate(function (item)\r\n {\r\n if (item.type === file.type && item.key === file.key)\r\n {\r\n keyConflict = true;\r\n\r\n return false;\r\n }\r\n\r\n });\r\n }\r\n\r\n return keyConflict;\r\n },\r\n\r\n /**\r\n * Takes a well formed, fully parsed pack file object and adds its entries into the load queue. Usually you do not call\r\n * this method directly, but instead use `Loader.pack` and supply a path to a JSON file that holds the\r\n * pack data. However, if you've got the data prepared you can pass it to this method.\r\n *\r\n * You can also provide an optional key. If you do then it will only add the entries from that part of the pack into\r\n * to the load queue. If not specified it will add all entries it finds. For more details about the pack file format\r\n * see the `LoaderPlugin.pack` method.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#addPack\r\n * @since 3.7.0\r\n *\r\n * @param {any} data - The Pack File data to be parsed and each entry of it to added to the load queue.\r\n * @param {string} [packKey] - An optional key to use from the pack file data.\r\n *\r\n * @return {boolean} `true` if any files were added to the queue, otherwise `false`.\r\n */\r\n addPack: function (pack, packKey)\r\n {\r\n // if no packKey provided we'll add everything to the queue\r\n if (packKey && pack.hasOwnProperty(packKey))\r\n {\r\n pack = { packKey: pack[packKey] };\r\n }\r\n\r\n var total = 0;\r\n\r\n // Store the loader settings in case this pack replaces them\r\n var currentBaseURL = this.baseURL;\r\n var currentPath = this.path;\r\n var currentPrefix = this.prefix;\r\n\r\n // Here we go ...\r\n for (var key in pack)\r\n {\r\n var config = pack[key];\r\n\r\n // Any meta data to process?\r\n var baseURL = GetFastValue(config, 'baseURL', currentBaseURL);\r\n var path = GetFastValue(config, 'path', currentPath);\r\n var prefix = GetFastValue(config, 'prefix', currentPrefix);\r\n var files = GetFastValue(config, 'files', null);\r\n var defaultType = GetFastValue(config, 'defaultType', 'void');\r\n\r\n if (Array.isArray(files))\r\n {\r\n this.setBaseURL(baseURL);\r\n this.setPath(path);\r\n this.setPrefix(prefix);\r\n\r\n for (var i = 0; i < files.length; i++)\r\n {\r\n var file = files[i];\r\n var type = (file.hasOwnProperty('type')) ? file.type : defaultType;\r\n\r\n if (this[type])\r\n {\r\n this[type](file);\r\n total++;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Reset the loader settings\r\n this.setBaseURL(currentBaseURL);\r\n this.setPath(currentPath);\r\n this.setPrefix(currentPrefix);\r\n\r\n return (total > 0);\r\n },\r\n\r\n /**\r\n * Is the Loader actively loading, or processing loaded files?\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#isLoading\r\n * @since 3.0.0\r\n *\r\n * @return {boolean} `true` if the Loader is busy loading or processing, otherwise `false`.\r\n */\r\n isLoading: function ()\r\n {\r\n return (this.state === CONST.LOADER_LOADING || this.state === CONST.LOADER_PROCESSING);\r\n },\r\n\r\n /**\r\n * Is the Loader ready to start a new load?\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#isReady\r\n * @since 3.0.0\r\n *\r\n * @return {boolean} `true` if the Loader is ready to start a new load, otherwise `false`.\r\n */\r\n isReady: function ()\r\n {\r\n return (this.state === CONST.LOADER_IDLE || this.state === CONST.LOADER_COMPLETE);\r\n },\r\n\r\n /**\r\n * Starts the Loader running. This will reset the progress and totals and then emit a `start` event.\r\n * If there is nothing in the queue the Loader will immediately complete, otherwise it will start\r\n * loading the first batch of files.\r\n *\r\n * The Loader is started automatically if the queue is populated within your Scenes `preload` method.\r\n *\r\n * However, outside of this, you need to call this method to start it.\r\n *\r\n * If the Loader is already running this method will simply return.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#start\r\n * @fires Phaser.Loader.Events#START\r\n * @since 3.0.0\r\n */\r\n start: function ()\r\n {\r\n if (!this.isReady())\r\n {\r\n return;\r\n }\r\n\r\n this.progress = 0;\r\n\r\n this.totalFailed = 0;\r\n this.totalComplete = 0;\r\n this.totalToLoad = this.list.size;\r\n\r\n this.emit(Events.START, this);\r\n\r\n if (this.list.size === 0)\r\n {\r\n this.loadComplete();\r\n }\r\n else\r\n {\r\n this.state = CONST.LOADER_LOADING;\r\n\r\n this.inflight.clear();\r\n this.queue.clear();\r\n\r\n this.updateProgress();\r\n\r\n this.checkLoadQueue();\r\n\r\n this.systems.events.on(SceneEvents.UPDATE, this.update, this);\r\n }\r\n },\r\n\r\n /**\r\n * Called automatically during the load process.\r\n * It updates the `progress` value and then emits a progress event, which you can use to\r\n * display a loading bar in your game.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#updateProgress\r\n * @fires Phaser.Loader.Events#PROGRESS\r\n * @since 3.0.0\r\n */\r\n updateProgress: function ()\r\n {\r\n this.progress = 1 - ((this.list.size + this.inflight.size) / this.totalToLoad);\r\n\r\n this.emit(Events.PROGRESS, this.progress);\r\n },\r\n\r\n /**\r\n * Called automatically during the load process.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#update\r\n * @since 3.10.0\r\n */\r\n update: function ()\r\n {\r\n if (this.state === CONST.LOADER_LOADING && this.list.size > 0 && this.inflight.size < this.maxParallelDownloads)\r\n {\r\n this.checkLoadQueue();\r\n }\r\n },\r\n\r\n /**\r\n * An internal method called by the Loader.\r\n * \r\n * It will check to see if there are any more files in the pending list that need loading, and if so it will move\r\n * them from the list Set into the inflight Set, set their CORs flag and start them loading.\r\n * \r\n * It will carrying on doing this for each file in the pending list until it runs out, or hits the max allowed parallel downloads.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#checkLoadQueue\r\n * @private\r\n * @since 3.7.0\r\n */\r\n checkLoadQueue: function ()\r\n {\r\n this.list.each(function (file)\r\n {\r\n if (file.state === CONST.FILE_POPULATED || (file.state === CONST.FILE_PENDING && this.inflight.size < this.maxParallelDownloads))\r\n {\r\n this.inflight.set(file);\r\n\r\n this.list.delete(file);\r\n\r\n // If the file doesn't have its own crossOrigin set, we'll use the Loaders (which is undefined by default)\r\n if (!file.crossOrigin)\r\n {\r\n file.crossOrigin = this.crossOrigin;\r\n }\r\n\r\n file.load();\r\n }\r\n\r\n if (this.inflight.size === this.maxParallelDownloads)\r\n {\r\n // Tells the Set iterator to abort\r\n return false;\r\n }\r\n\r\n }, this);\r\n },\r\n\r\n /**\r\n * An internal method called automatically by the XHRLoader belong to a File.\r\n * \r\n * This method will remove the given file from the inflight Set and update the load progress.\r\n * If the file was successful its `onProcess` method is called, otherwise it is added to the delete queue.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#nextFile\r\n * @fires Phaser.Loader.Events#FILE_LOAD\r\n * @fires Phaser.Loader.Events#FILE_LOAD_ERROR\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.File} file - The File that just finished loading, or errored during load.\r\n * @param {boolean} success - `true` if the file loaded successfully, otherwise `false`.\r\n */\r\n nextFile: function (file, success)\r\n {\r\n // Has the game been destroyed during load? If so, bail out now.\r\n if (!this.inflight)\r\n {\r\n return;\r\n }\r\n\r\n this.inflight.delete(file);\r\n\r\n this.updateProgress();\r\n\r\n if (success)\r\n {\r\n this.totalComplete++;\r\n\r\n this.queue.set(file);\r\n\r\n this.emit(Events.FILE_LOAD, file);\r\n\r\n file.onProcess();\r\n }\r\n else\r\n {\r\n this.totalFailed++;\r\n\r\n this._deleteQueue.set(file);\r\n\r\n this.emit(Events.FILE_LOAD_ERROR, file);\r\n\r\n this.fileProcessComplete(file);\r\n }\r\n },\r\n\r\n /**\r\n * An internal method that is called automatically by the File when it has finished processing.\r\n *\r\n * If the process was successful, and the File isn't part of a MultiFile, its `addToCache` method is called.\r\n *\r\n * It this then removed from the queue. If there are no more files to load `loadComplete` is called.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#fileProcessComplete\r\n * @since 3.7.0\r\n *\r\n * @param {Phaser.Loader.File} file - The file that has finished processing.\r\n */\r\n fileProcessComplete: function (file)\r\n {\r\n // Has the game been destroyed during load? If so, bail out now.\r\n if (!this.scene || !this.systems || !this.systems.game || this.systems.game.pendingDestroy)\r\n {\r\n return;\r\n }\r\n\r\n // This file has failed, so move it to the failed Set\r\n if (file.state === CONST.FILE_ERRORED)\r\n {\r\n if (file.multiFile)\r\n {\r\n file.multiFile.onFileFailed(file);\r\n }\r\n }\r\n else if (file.state === CONST.FILE_COMPLETE)\r\n {\r\n if (file.multiFile)\r\n {\r\n if (file.multiFile.isReadyToProcess())\r\n {\r\n // If we got here then all files the link file needs are ready to add to the cache\r\n file.multiFile.addToCache();\r\n }\r\n }\r\n else\r\n {\r\n // If we got here, then the file processed, so let it add itself to its cache\r\n file.addToCache();\r\n }\r\n }\r\n\r\n // Remove it from the queue\r\n this.queue.delete(file);\r\n\r\n // Nothing left to do?\r\n\r\n if (this.list.size === 0 && this.inflight.size === 0 && this.queue.size === 0)\r\n {\r\n this.loadComplete();\r\n }\r\n },\r\n\r\n /**\r\n * Called at the end when the load queue is exhausted and all files have either loaded or errored.\r\n * By this point every loaded file will now be in its associated cache and ready for use.\r\n *\r\n * Also clears down the Sets, puts progress to 1 and clears the deletion queue.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#loadComplete\r\n * @fires Phaser.Loader.Events#COMPLETE\r\n * @fires Phaser.Loader.Events#POST_PROCESS\r\n * @since 3.7.0\r\n */\r\n loadComplete: function ()\r\n {\r\n this.emit(Events.POST_PROCESS, this);\r\n\r\n this.list.clear();\r\n this.inflight.clear();\r\n this.queue.clear();\r\n\r\n this.progress = 1;\r\n\r\n this.state = CONST.LOADER_COMPLETE;\r\n\r\n this.systems.events.off(SceneEvents.UPDATE, this.update, this);\r\n\r\n // Call 'destroy' on each file ready for deletion\r\n this._deleteQueue.iterateLocal('destroy');\r\n\r\n this._deleteQueue.clear();\r\n\r\n this.emit(Events.COMPLETE, this, this.totalComplete, this.totalFailed);\r\n },\r\n\r\n /**\r\n * Adds a File into the pending-deletion queue.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#flagForRemoval\r\n * @since 3.7.0\r\n * \r\n * @param {Phaser.Loader.File} file - The File to be queued for deletion when the Loader completes.\r\n */\r\n flagForRemoval: function (file)\r\n {\r\n this._deleteQueue.set(file);\r\n },\r\n\r\n /**\r\n * Converts the given JSON data into a file that the browser then prompts you to download so you can save it locally.\r\n *\r\n * The data must be well formed JSON and ready-parsed, not a JavaScript object.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#saveJSON\r\n * @since 3.0.0\r\n *\r\n * @param {*} data - The JSON data, ready parsed.\r\n * @param {string} [filename=file.json] - The name to save the JSON file as.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} This Loader plugin.\r\n */\r\n saveJSON: function (data, filename)\r\n {\r\n return this.save(JSON.stringify(data), filename);\r\n },\r\n\r\n /**\r\n * Causes the browser to save the given data as a file to its default Downloads folder.\r\n * \r\n * Creates a DOM level anchor link, assigns it as being a `download` anchor, sets the href\r\n * to be an ObjectURL based on the given data, and then invokes a click event.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#save\r\n * @since 3.0.0\r\n *\r\n * @param {*} data - The data to be saved. Will be passed through URL.createObjectURL.\r\n * @param {string} [filename=file.json] - The filename to save the file as.\r\n * @param {string} [filetype=application/json] - The file type to use when saving the file. Defaults to JSON.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} This Loader plugin.\r\n */\r\n save: function (data, filename, filetype)\r\n {\r\n if (filename === undefined) { filename = 'file.json'; }\r\n if (filetype === undefined) { filetype = 'application/json'; }\r\n\r\n var blob = new Blob([ data ], { type: filetype });\r\n\r\n var url = URL.createObjectURL(blob);\r\n\r\n var a = document.createElement('a');\r\n\r\n a.download = filename;\r\n a.textContent = 'Download ' + filename;\r\n a.href = url;\r\n a.click();\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Resets the Loader.\r\n *\r\n * This will clear all lists and reset the base URL, path and prefix.\r\n *\r\n * Warning: If the Loader is currently downloading files, or has files in its queue, they will be aborted.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#reset\r\n * @since 3.0.0\r\n */\r\n reset: function ()\r\n {\r\n this.list.clear();\r\n this.inflight.clear();\r\n this.queue.clear();\r\n\r\n var gameConfig = this.systems.game.config;\r\n var sceneConfig = this.systems.settings.loader;\r\n\r\n this.setBaseURL(GetFastValue(sceneConfig, 'baseURL', gameConfig.loaderBaseURL));\r\n this.setPath(GetFastValue(sceneConfig, 'path', gameConfig.loaderPath));\r\n this.setPrefix(GetFastValue(sceneConfig, 'prefix', gameConfig.loaderPrefix));\r\n\r\n this.state = CONST.LOADER_IDLE;\r\n },\r\n\r\n /**\r\n * The Scene that owns this plugin is shutting down.\r\n * We need to kill and reset all internal properties as well as stop listening to Scene events.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#shutdown\r\n * @private\r\n * @since 3.0.0\r\n */\r\n shutdown: function ()\r\n {\r\n this.reset();\r\n\r\n this.state = CONST.LOADER_SHUTDOWN;\r\n\r\n this.systems.events.off(SceneEvents.UPDATE, this.update, this);\r\n this.systems.events.off(SceneEvents.SHUTDOWN, this.shutdown, this);\r\n },\r\n\r\n /**\r\n * The Scene that owns this plugin is being destroyed.\r\n * We need to shutdown and then kill off all external references.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#destroy\r\n * @private\r\n * @since 3.0.0\r\n */\r\n destroy: function ()\r\n {\r\n this.shutdown();\r\n\r\n this.state = CONST.LOADER_DESTROYED;\r\n\r\n this.systems.events.off(SceneEvents.UPDATE, this.update, this);\r\n this.systems.events.off(SceneEvents.START, this.pluginStart, this);\r\n\r\n this.list = null;\r\n this.inflight = null;\r\n this.queue = null;\r\n\r\n this.scene = null;\r\n this.systems = null;\r\n this.textureManager = null;\r\n this.cacheManager = null;\r\n this.sceneManager = null;\r\n }\r\n\r\n});\r\n\r\nPluginCache.register('Loader', LoaderPlugin, 'load');\r\n\r\nmodule.exports = LoaderPlugin;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvTG9hZGVyUGx1Z2luLmpzPzg2OGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7QUFDcEMsWUFBWSxtQkFBTyxDQUFDLDBEQUFTO0FBQzdCLGdCQUFnQixtQkFBTyxDQUFDLGdFQUFnQjtBQUN4QyxtQkFBbUIsbUJBQU8sQ0FBQyw0REFBZTtBQUMxQyxhQUFhLG1CQUFPLENBQUMsa0VBQVU7QUFDL0IsdUJBQXVCLG1CQUFPLENBQUMsZ0ZBQW9CO0FBQ25ELG1CQUFtQixtQkFBTyxDQUFDLDRGQUE4QjtBQUN6RCxrQkFBa0IsbUJBQU8sQ0FBQyxnRkFBd0I7QUFDbEQsa0JBQWtCLG1CQUFPLENBQUMsd0VBQWlCO0FBQzNDLGtCQUFrQixtQkFBTyxDQUFDLHNFQUFlOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLFVBQVU7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLFdBQVc7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsYUFBYTs7QUFFaEQ7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwwQ0FBMEM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGlCQUFpQjtBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtQkFBbUI7QUFDbEM7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGFBQWE7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGFBQWE7QUFDYjs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxJQUFJO0FBQ25CLGVBQWUsT0FBTztBQUN0QjtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0Isa0JBQWtCO0FBQ2pEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNULEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQW1CO0FBQ2xDLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtQkFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtQkFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUU7QUFDakIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFO0FBQ2pCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyx3QkFBd0I7QUFDN0QscUNBQXFDLCtCQUErQjs7QUFFcEUsdUNBQXVDLGlCQUFpQjs7QUFFeEQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbG9hZGVyL0xvYWRlclBsdWdpbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi9jb25zdCcpO1xyXG52YXIgQ3VzdG9tU2V0ID0gcmVxdWlyZSgnLi4vc3RydWN0cy9TZXQnKTtcclxudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcclxudmFyIEV2ZW50cyA9IHJlcXVpcmUoJy4vZXZlbnRzJyk7XHJcbnZhciBGaWxlVHlwZXNNYW5hZ2VyID0gcmVxdWlyZSgnLi9GaWxlVHlwZXNNYW5hZ2VyJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBQbHVnaW5DYWNoZSA9IHJlcXVpcmUoJy4uL3BsdWdpbnMvUGx1Z2luQ2FjaGUnKTtcclxudmFyIFNjZW5lRXZlbnRzID0gcmVxdWlyZSgnLi4vc2NlbmUvZXZlbnRzJyk7XHJcbnZhciBYSFJTZXR0aW5ncyA9IHJlcXVpcmUoJy4vWEhSU2V0dGluZ3MnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIFRoZSBMb2FkZXIgaGFuZGxlcyBsb2FkaW5nIGFsbCBleHRlcm5hbCBjb250ZW50IHN1Y2ggYXMgSW1hZ2VzLCBTb3VuZHMsIFRleHR1cmUgQXRsYXNlcyBhbmQgZGF0YSBmaWxlcy5cclxuICogWW91IHR5cGljYWxseSBpbnRlcmFjdCB3aXRoIGl0IHZpYSBgdGhpcy5sb2FkYCBpbiB5b3VyIFNjZW5lLiBTY2VuZXMgY2FuIGhhdmUgYSBgcHJlbG9hZGAgbWV0aG9kLCB3aGljaCBpcyBhbHdheXNcclxuICogY2FsbGVkIGJlZm9yZSB0aGUgU2NlbmVzIGBjcmVhdGVgIG1ldGhvZCwgYWxsb3dpbmcgeW91IHRvIHByZWxvYWQgYXNzZXRzIHRoYXQgdGhlIFNjZW5lIG1heSBuZWVkLlxyXG4gKlxyXG4gKiBJZiB5b3UgY2FsbCBhbnkgYHRoaXMubG9hZGAgbWV0aG9kcyBmcm9tIG91dHNpZGUgb2YgYFNjZW5lLnByZWxvYWRgIHRoZW4geW91IG5lZWQgdG8gc3RhcnQgdGhlIExvYWRlciBnb2luZ1xyXG4gKiB5b3Vyc2VsZiBieSBjYWxsaW5nIGBMb2FkZXIuc3RhcnQoKWAuIEl0J3Mgb25seSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgZHVyaW5nIHRoZSBTY2VuZSBwcmVsb2FkLlxyXG4gKlxyXG4gKiBUaGUgTG9hZGVyIHVzZXMgYSBjb21iaW5hdGlvbiBvZiB0YWcgbG9hZGluZyAoZWcuIEF1ZGlvIGVsZW1lbnRzKSBhbmQgWEhSIGFuZCBwcm92aWRlcyBwcm9ncmVzcyBhbmQgY29tcGxldGlvbiBldmVudHMuXHJcbiAqIEZpbGVzIGFyZSBsb2FkZWQgaW4gcGFyYWxsZWwgYnkgZGVmYXVsdC4gVGhlIGFtb3VudCBvZiBjb25jdXJyZW50IGNvbm5lY3Rpb25zIGNhbiBiZSBjb250cm9sbGVkIGluIHlvdXIgR2FtZSBDb25maWd1cmF0aW9uLlxyXG4gKlxyXG4gKiBPbmNlIHRoZSBMb2FkZXIgaGFzIHN0YXJ0ZWQgbG9hZGluZyB5b3UgYXJlIHN0aWxsIGFibGUgdG8gYWRkIGZpbGVzIHRvIGl0LiBUaGVzZSBjYW4gYmUgaW5qZWN0ZWQgYXMgYSByZXN1bHQgb2YgYSBsb2FkZXJcclxuICogZXZlbnQsIHRoZSB0eXBlIG9mIGZpbGUgYmVpbmcgbG9hZGVkIChzdWNoIGFzIGEgcGFjayBmaWxlKSBvciBvdGhlciBleHRlcm5hbCBldmVudHMuIEFzIGxvbmcgYXMgdGhlIExvYWRlciBoYXNuJ3QgZmluaXNoZWRcclxuICogc2ltcGx5IGFkZGluZyBhIG5ldyBmaWxlIHRvIGl0LCB3aGlsZSBydW5uaW5nLCB3aWxsIGVuc3VyZSBpdCdzIGFkZGVkIGludG8gdGhlIGN1cnJlbnQgcXVldWUuXHJcbiAqXHJcbiAqIEV2ZXJ5IFNjZW5lIGhhcyBpdHMgb3duIGluc3RhbmNlIG9mIHRoZSBMb2FkZXIgYW5kIHRoZXkgYXJlIGJvdW5kIHRvIHRoZSBTY2VuZSBpbiB3aGljaCB0aGV5IGFyZSBjcmVhdGVkLiBIb3dldmVyLFxyXG4gKiBhc3NldHMgbG9hZGVkIGJ5IHRoZSBMb2FkZXIgYXJlIHBsYWNlZCBpbnRvIGdsb2JhbCBnYW1lLWxldmVsIGNhY2hlcy4gRm9yIGV4YW1wbGUsIGxvYWRpbmcgYW4gWE1MIGZpbGUgd2lsbCBwbGFjZSB0aGF0XHJcbiAqIGZpbGUgaW5zaWRlIGBHYW1lLmNhY2hlLnhtbGAsIHdoaWNoIGlzIGFjY2Vzc2libGUgZnJvbSBldmVyeSBTY2VuZSBpbiB5b3VyIGdhbWUsIG5vIG1hdHRlciB3aG8gd2FzIHJlc3BvbnNpYmxlXHJcbiAqIGZvciBsb2FkaW5nIGl0LiBUaGUgc2FtZSBpcyB0cnVlIG9mIFRleHR1cmVzLiBBIHRleHR1cmUgbG9hZGVkIGluIG9uZSBTY2VuZSBpcyBpbnN0YW50bHkgYXZhaWxhYmxlIHRvIGFsbCBvdGhlciBTY2VuZXNcclxuICogaW4geW91ciBnYW1lLlxyXG4gKlxyXG4gKiBUaGUgTG9hZGVyIHdvcmtzIGJ5IHVzaW5nIGN1c3RvbSBGaWxlIFR5cGVzLiBUaGVzZSBhcmUgc3RvcmVkIGluIHRoZSBGaWxlVHlwZXNNYW5hZ2VyLCB3aGljaCBpbmplY3RzIHRoZW0gaW50byB0aGUgTG9hZGVyXHJcbiAqIHdoZW4gaXQncyBpbnN0YW50aWF0ZWQuIFlvdSBjYW4gY3JlYXRlIHlvdXIgb3duIGN1c3RvbSBmaWxlIHR5cGVzIGJ5IGV4dGVuZGluZyBlaXRoZXIgdGhlIEZpbGUgb3IgTXVsdGlGaWxlIGNsYXNzZXMuXHJcbiAqIFNlZSB0aG9zZSBmaWxlcyBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKlxyXG4gKiBAY2xhc3MgTG9hZGVyUGx1Z2luXHJcbiAqIEBleHRlbmRzIFBoYXNlci5FdmVudHMuRXZlbnRFbWl0dGVyXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuTG9hZGVyXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuU2NlbmV9IHNjZW5lIC0gVGhlIFNjZW5lIHdoaWNoIG93bnMgdGhpcyBMb2FkZXIgaW5zdGFuY2UuXHJcbiAqL1xyXG52YXIgTG9hZGVyUGx1Z2luID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBFdmVudEVtaXR0ZXIsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBMb2FkZXJQbHVnaW4gKHNjZW5lKVxyXG4gICAge1xyXG4gICAgICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICB2YXIgZ2FtZUNvbmZpZyA9IHNjZW5lLnN5cy5nYW1lLmNvbmZpZztcclxuICAgICAgICB2YXIgc2NlbmVDb25maWcgPSBzY2VuZS5zeXMuc2V0dGluZ3MubG9hZGVyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgU2NlbmUgd2hpY2ggb3ducyB0aGlzIExvYWRlciBpbnN0YW5jZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3NjZW5lXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2VuZX1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBTY2VuZSBTeXN0ZW1zLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jc3lzdGVtc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU2NlbmVzLlN5c3RlbXN9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zID0gc2NlbmUuc3lzO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIENhY2hlIE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNjYWNoZU1hbmFnZXJcclxuICAgICAgICAgKiBAdHlwZSB7UGhhc2VyLkNhY2hlLkNhY2hlTWFuYWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNhY2hlTWFuYWdlciA9IHNjZW5lLnN5cy5jYWNoZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBUZXh0dXJlIE1hbmFnZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiN0ZXh0dXJlTWFuYWdlclxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuVGV4dHVyZXMuVGV4dHVyZU1hbmFnZXJ9XHJcbiAgICAgICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IHNjZW5lLnN5cy50ZXh0dXJlcztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBTY2VuZSBNYW5hZ2VyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jc2NlbmVNYW5hZ2VyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TY2VuZXMuU2NlbmVNYW5hZ2VyfVxyXG4gICAgICAgICAqIEBwcm90ZWN0ZWRcclxuICAgICAgICAgKiBAc2luY2UgMy4xNi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY2VuZU1hbmFnZXIgPSBzY2VuZS5zeXMuZ2FtZS5zY2VuZTtcclxuXHJcbiAgICAgICAgLy8gIEluamVjdCB0aGUgYXZhaWxhYmxlIGZpbGV0eXBlcyBpbnRvIHRoZSBMb2FkZXJcclxuICAgICAgICBGaWxlVHlwZXNNYW5hZ2VyLmluc3RhbGwodGhpcyk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFuIG9wdGlvbmFsIHByZWZpeCB0aGF0IGlzIGF1dG9tYXRpY2FsbHkgcHJlcGVuZGVkIHRvIHRoZSBzdGFydCBvZiBldmVyeSBmaWxlIGtleS5cclxuICAgICAgICAgKiBJZiBwcmVmaXggd2FzIGBNRU5VLmAgYW5kIHlvdSBsb2FkIGFuIGltYWdlIHdpdGggdGhlIGtleSAnQmFja2dyb3VuZCcgdGhlIHJlc3VsdGluZyBrZXkgd291bGQgYmUgYE1FTlUuQmFja2dyb3VuZGAuXHJcbiAgICAgICAgICogWW91IGNhbiBzZXQgdGhpcyBkaXJlY3RseSwgb3IgY2FsbCBgTG9hZGVyLnNldFByZWZpeCgpYC4gSXQgd2lsbCB0aGVuIGFmZmVjdCBldmVyeSBmaWxlIGFkZGVkIHRvIHRoZSBMb2FkZXJcclxuICAgICAgICAgKiBmcm9tIHRoYXQgcG9pbnQgb24uIEl0IGRvZXMgX25vdF8gY2hhbmdlIGFueSBmaWxlIGFscmVhZHkgaW4gdGhlIGxvYWQgcXVldWUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNwcmVmaXhcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBkZWZhdWx0ICcnXHJcbiAgICAgICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wcmVmaXggPSAnJztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHZhbHVlIG9mIGBwYXRoYCwgaWYgc2V0LCBpcyBwbGFjZWQgYmVmb3JlIGFueSBfcmVsYXRpdmVfIGZpbGUgcGF0aCBnaXZlbi4gRm9yIGV4YW1wbGU6XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBgYGBqYXZhc2NyaXB0XHJcbiAgICAgICAgICogdGhpcy5sb2FkLnBhdGggPSBcImltYWdlcy9zcHJpdGVzL1wiO1xyXG4gICAgICAgICAqIHRoaXMubG9hZC5pbWFnZShcImJhbGxcIiwgXCJiYWxsLnBuZ1wiKTtcclxuICAgICAgICAgKiB0aGlzLmxvYWQuaW1hZ2UoXCJ0cmVlXCIsIFwibGV2ZWwxL29ha3RyZWUucG5nXCIpO1xyXG4gICAgICAgICAqIHRoaXMubG9hZC5pbWFnZShcImJvb21cIiwgXCJodHRwOi8vc2VydmVyLmNvbS9leHBsb2RlLnBuZ1wiKTtcclxuICAgICAgICAgKiBgYGBcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFdvdWxkIGxvYWQgdGhlIGBiYWxsYCBmaWxlIGZyb20gYGltYWdlcy9zcHJpdGVzL2JhbGwucG5nYCBhbmQgdGhlIHRyZWUgZnJvbVxyXG4gICAgICAgICAqIGBpbWFnZXMvc3ByaXRlcy9sZXZlbDEvb2FrdHJlZS5wbmdgIGJ1dCB0aGUgZmlsZSBgYm9vbWAgd291bGQgbG9hZCBmcm9tIHRoZSBVUkxcclxuICAgICAgICAgKiBnaXZlbiBhcyBpdCdzIGFuIGFic29sdXRlIFVSTC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFBsZWFzZSBub3RlIHRoYXQgdGhlIHBhdGggaXMgYWRkZWQgYmVmb3JlIHRoZSBmaWxlbmFtZSBidXQgKmFmdGVyKiB0aGUgYmFzZVVSTCAoaWYgc2V0LilcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIElmIHlvdSBzZXQgdGhpcyBwcm9wZXJ0eSBkaXJlY3RseSB0aGVuIGl0IF9tdXN0XyBlbmQgd2l0aCBhIFwiL1wiLiBBbHRlcm5hdGl2ZWx5LCBjYWxsIGBzZXRQYXRoKClgIGFuZCBpdCdsbCBkbyBpdCBmb3IgeW91LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jcGF0aFxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQGRlZmF1bHQgJydcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnBhdGggPSAnJztcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgeW91IHdhbnQgdG8gYXBwZW5kIGEgVVJMIGJlZm9yZSB0aGUgcGF0aCBvZiBhbnkgYXNzZXQgeW91IGNhbiBzZXQgdGhpcyBoZXJlLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFVzZWZ1bCBpZiBhbGxvd2luZyB0aGUgYXNzZXQgYmFzZSB1cmwgdG8gYmUgY29uZmlndXJlZCBvdXRzaWRlIG9mIHRoZSBnYW1lIGNvZGUuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogSWYgeW91IHNldCB0aGlzIHByb3BlcnR5IGRpcmVjdGx5IHRoZW4gaXQgX211c3RfIGVuZCB3aXRoIGEgXCIvXCIuIEFsdGVybmF0aXZlbHksIGNhbGwgYHNldEJhc2VVUkwoKWAgYW5kIGl0J2xsIGRvIGl0IGZvciB5b3UuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNiYXNlVVJMXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAZGVmYXVsdCAnJ1xyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYmFzZVVSTCA9ICcnO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJhc2VVUkwoR2V0RmFzdFZhbHVlKHNjZW5lQ29uZmlnLCAnYmFzZVVSTCcsIGdhbWVDb25maWcubG9hZGVyQmFzZVVSTCkpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFBhdGgoR2V0RmFzdFZhbHVlKHNjZW5lQ29uZmlnLCAncGF0aCcsIGdhbWVDb25maWcubG9hZGVyUGF0aCkpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFByZWZpeChHZXRGYXN0VmFsdWUoc2NlbmVDb25maWcsICdwcmVmaXgnLCBnYW1lQ29uZmlnLmxvYWRlclByZWZpeCkpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbnVtYmVyIG9mIGNvbmN1cnJlbnQgLyBwYXJhbGxlbCByZXNvdXJjZXMgdG8gdHJ5IGFuZCBmZXRjaCBhdCBvbmNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogT2xkIGJyb3dzZXJzIGxpbWl0IDYgcmVxdWVzdHMgcGVyIGRvbWFpbjsgbW9kZXJuIG9uZXMsIGVzcGVjaWFsbHkgdGhvc2Ugd2l0aCBIVFRQLzIgZG9uJ3QgbGltaXQgaXQgYXQgYWxsLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhlIGRlZmF1bHQgaXMgMzIgYnV0IHlvdSBjYW4gY2hhbmdlIHRoaXMgaW4geW91ciBHYW1lIENvbmZpZywgb3IgYnkgY2hhbmdpbmcgdGhpcyBwcm9wZXJ0eSBiZWZvcmUgdGhlIExvYWRlciBzdGFydHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNtYXhQYXJhbGxlbERvd25sb2Fkc1xyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubWF4UGFyYWxsZWxEb3dubG9hZHMgPSBHZXRGYXN0VmFsdWUoc2NlbmVDb25maWcsICdtYXhQYXJhbGxlbERvd25sb2FkcycsIGdhbWVDb25maWcubG9hZGVyTWF4UGFyYWxsZWxEb3dubG9hZHMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiB4aHIgc3BlY2lmaWMgZ2xvYmFsIHNldHRpbmdzIChjYW4gYmUgb3ZlcnJpZGRlbiBvbiBhIHBlci1maWxlIGJhc2lzKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jeGhyXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy54aHIgPSBYSFJTZXR0aW5ncyhcclxuICAgICAgICAgICAgR2V0RmFzdFZhbHVlKHNjZW5lQ29uZmlnLCAncmVzcG9uc2VUeXBlJywgZ2FtZUNvbmZpZy5sb2FkZXJSZXNwb25zZVR5cGUpLFxyXG4gICAgICAgICAgICBHZXRGYXN0VmFsdWUoc2NlbmVDb25maWcsICdhc3luYycsIGdhbWVDb25maWcubG9hZGVyQXN5bmMpLFxyXG4gICAgICAgICAgICBHZXRGYXN0VmFsdWUoc2NlbmVDb25maWcsICd1c2VyJywgZ2FtZUNvbmZpZy5sb2FkZXJVc2VyKSxcclxuICAgICAgICAgICAgR2V0RmFzdFZhbHVlKHNjZW5lQ29uZmlnLCAncGFzc3dvcmQnLCBnYW1lQ29uZmlnLmxvYWRlclBhc3N3b3JkKSxcclxuICAgICAgICAgICAgR2V0RmFzdFZhbHVlKHNjZW5lQ29uZmlnLCAndGltZW91dCcsIGdhbWVDb25maWcubG9hZGVyVGltZW91dClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY3Jvc3NPcmlnaW4gdmFsdWUgYXBwbGllZCB0byBsb2FkZWQgaW1hZ2VzLiBWZXJ5IG9mdGVuIHRoaXMgbmVlZHMgdG8gYmUgc2V0IHRvICdhbm9ueW1vdXMnLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jY3Jvc3NPcmlnaW5cclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBHZXRGYXN0VmFsdWUoc2NlbmVDb25maWcsICdjcm9zc09yaWdpbicsIGdhbWVDb25maWcubG9hZGVyQ3Jvc3NPcmlnaW4pO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIGZpbGVzIHRvIGxvYWQuIEl0IG1heSBub3QgYWx3YXlzIGJlIGFjY3VyYXRlIGJlY2F1c2UgeW91IG1heSBhZGQgdG8gdGhlIExvYWRlciBkdXJpbmcgdGhlIHByb2Nlc3NcclxuICAgICAgICAgKiBvZiBsb2FkaW5nLCBlc3BlY2lhbGx5IGlmIHlvdSBsb2FkIGEgUGFjayBGaWxlLiBUaGVyZWZvcmUgdGhpcyB2YWx1ZSBjYW4gY2hhbmdlLCBidXQgaW4gbW9zdCBjYXNlcyByZW1haW5zIHN0YXRpYy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3RvdGFsVG9Mb2FkXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudG90YWxUb0xvYWQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgcHJvZ3Jlc3Mgb2YgdGhlIGN1cnJlbnQgbG9hZCBxdWV1ZSwgYXMgYSBmbG9hdCB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAgICAgICAgICogVGhpcyBpcyB1cGRhdGVkIGF1dG9tYXRpY2FsbHkgYXMgZmlsZXMgY29tcGxldGUgbG9hZGluZy5cclxuICAgICAgICAgKiBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgZm9yIHRoaXMgdmFsdWUgdG8gZ28gZG93biBhZ2FpbiBpZiB5b3UgYWRkIGNvbnRlbnQgdG8gdGhlIGN1cnJlbnQgbG9hZCBxdWV1ZSBkdXJpbmcgYSBsb2FkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jcHJvZ3Jlc3NcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnByb2dyZXNzID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRmlsZXMgYXJlIHBsYWNlZCBpbiB0aGlzIFNldCB3aGVuIHRoZXkncmUgYWRkZWQgdG8gdGhlIExvYWRlciB2aWEgYGFkZEZpbGVgLlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIFRoZXkgYXJlIG1vdmVkIHRvIHRoZSBgaW5mbGlnaHRgIFNldCB3aGVuIHRoZXkgc3RhcnQgbG9hZGluZywgYW5kIGFzc3VtaW5nIGEgc3VjY2Vzc2Z1bFxyXG4gICAgICAgICAqIGxvYWQsIHRvIHRoZSBgcXVldWVgIFNldCBmb3IgZnVydGhlciBwcm9jZXNzaW5nLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQnkgdGhlIGVuZCBvZiB0aGUgbG9hZCBwcm9jZXNzIHRoaXMgU2V0IHdpbGwgYmUgZW1wdHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNsaXN0XHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TdHJ1Y3RzLlNldC48UGhhc2VyLkxvYWRlci5GaWxlPn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxpc3QgPSBuZXcgQ3VzdG9tU2V0KCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEZpbGVzIGFyZSBzdG9yZWQgaW4gdGhpcyBTZXQgd2hpbGUgdGhleSdyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBsb2FkZWQuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogVXBvbiBhIHN1Y2Nlc3NmdWwgbG9hZCB0aGV5IGFyZSBtb3ZlZCB0byB0aGUgYHF1ZXVlYCBTZXQuXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQnkgdGhlIGVuZCBvZiB0aGUgbG9hZCBwcm9jZXNzIHRoaXMgU2V0IHdpbGwgYmUgZW1wdHkuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNpbmZsaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU3RydWN0cy5TZXQuPFBoYXNlci5Mb2FkZXIuRmlsZT59XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbmZsaWdodCA9IG5ldyBDdXN0b21TZXQoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRmlsZXMgYXJlIHN0b3JlZCBpbiB0aGlzIFNldCB3aGlsZSB0aGV5J3JlIGJlaW5nIHByb2Nlc3NlZC5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBJZiB0aGUgcHJvY2VzcyBpcyBzdWNjZXNzZnVsIHRoZXkgYXJlIG1vdmVkIHRvIHRoZWlyIGZpbmFsIGRlc3RpbmF0aW9uLCB3aGljaCBjb3VsZCBiZVxyXG4gICAgICAgICAqIGEgQ2FjaGUgb3IgdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBBdCB0aGUgZW5kIG9mIHRoZSBsb2FkIHByb2Nlc3MgdGhpcyBTZXQgd2lsbCBiZSBlbXB0eS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3F1ZXVlXHJcbiAgICAgICAgICogQHR5cGUge1BoYXNlci5TdHJ1Y3RzLlNldC48UGhhc2VyLkxvYWRlci5GaWxlPn1cclxuICAgICAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnF1ZXVlID0gbmV3IEN1c3RvbVNldCgpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHRlbXBvcmFyeSBTZXQgaW4gd2hpY2ggZmlsZXMgYXJlIHN0b3JlZCBhZnRlciBwcm9jZXNzaW5nLFxyXG4gICAgICAgICAqIGF3YWl0aW5nIGRlc3RydWN0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGxvYWQgcHJvY2Vzcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI19kZWxldGVRdWV1ZVxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuU3RydWN0cy5TZXQuPFBoYXNlci5Mb2FkZXIuRmlsZT59XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9kZWxldGVRdWV1ZSA9IG5ldyBDdXN0b21TZXQoKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRvdGFsIG51bWJlciBvZiBmaWxlcyB0aGF0IGZhaWxlZCB0byBsb2FkIGR1cmluZyB0aGUgbW9zdCByZWNlbnQgbG9hZC5cclxuICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIHJlc2V0IHdoZW4geW91IGNhbGwgYExvYWRlci5zdGFydGAuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiN0b3RhbEZhaWxlZFxyXG4gICAgICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRvdGFsRmFpbGVkID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHRvdGFsIG51bWJlciBvZiBmaWxlcyB0aGF0IHN1Y2Nlc3NmdWxseSBsb2FkZWQgZHVyaW5nIHRoZSBtb3N0IHJlY2VudCBsb2FkLlxyXG4gICAgICAgICAqIFRoaXMgdmFsdWUgaXMgcmVzZXQgd2hlbiB5b3UgY2FsbCBgTG9hZGVyLnN0YXJ0YC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3RvdGFsQ29tcGxldGVcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy50b3RhbENvbXBsZXRlID0gMDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIExvYWRlci5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3N0YXRlXHJcbiAgICAgICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTlNULkxPQURFUl9JRExFO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY3VycmVudCBpbmRleCBiZWluZyB1c2VkIGJ5IG11bHRpLWZpbGUgbG9hZGVycyB0byBhdm9pZCBrZXkgY2xhc2hlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI211bHRpS2V5SW5kZXhcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm11bHRpS2V5SW5kZXggPSAwO1xyXG5cclxuICAgICAgICBzY2VuZS5zeXMuZXZlbnRzLm9uY2UoU2NlbmVFdmVudHMuQk9PVCwgdGhpcy5ib290LCB0aGlzKTtcclxuICAgICAgICBzY2VuZS5zeXMuZXZlbnRzLm9uKFNjZW5lRXZlbnRzLlNUQVJULCB0aGlzLnBsdWdpblN0YXJ0LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSwgb25seSBvbmNlLCB3aGVuIHRoZSBTY2VuZSBpcyBmaXJzdCBjcmVhdGVkLlxyXG4gICAgICogRG8gbm90IGludm9rZSBpdCBkaXJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2Jvb3RcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy41LjFcclxuICAgICAqL1xyXG4gICAgYm9vdDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN5c3RlbXMuZXZlbnRzLm9uY2UoU2NlbmVFdmVudHMuREVTVFJPWSwgdGhpcy5kZXN0cm95LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgU2NlbmUgd2hlbiBpdCBpcyBzdGFydGluZyB1cC5cclxuICAgICAqIEl0IGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBsb2NhbCBzeXN0ZW1zLCBwcm9wZXJ0aWVzIGFuZCBsaXN0ZW5pbmcgZm9yIFNjZW5lIGV2ZW50cy5cclxuICAgICAqIERvIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNwbHVnaW5TdGFydFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjUuMVxyXG4gICAgICovXHJcbiAgICBwbHVnaW5TdGFydDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN5c3RlbXMuZXZlbnRzLm9uY2UoU2NlbmVFdmVudHMuU0hVVERPV04sIHRoaXMuc2h1dGRvd24sIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHlvdSB3YW50IHRvIGFwcGVuZCBhIFVSTCBiZWZvcmUgdGhlIHBhdGggb2YgYW55IGFzc2V0IHlvdSBjYW4gc2V0IHRoaXMgaGVyZS5cclxuICAgICAqIFxyXG4gICAgICogVXNlZnVsIGlmIGFsbG93aW5nIHRoZSBhc3NldCBiYXNlIHVybCB0byBiZSBjb25maWd1cmVkIG91dHNpZGUgb2YgdGhlIGdhbWUgY29kZS5cclxuICAgICAqIFxyXG4gICAgICogT25jZSBhIGJhc2UgVVJMIGlzIHNldCBpdCB3aWxsIGFmZmVjdCBldmVyeSBmaWxlIGxvYWRlZCBieSB0aGUgTG9hZGVyIGZyb20gdGhhdCBwb2ludCBvbi4gSXQgZG9lcyBfbm90XyBjaGFuZ2UgYW55XHJcbiAgICAgKiBmaWxlIF9hbHJlYWR5XyBiZWluZyBsb2FkZWQuIFRvIHJlc2V0IGl0LCBjYWxsIHRoaXMgbWV0aG9kIHdpdGggbm8gYXJndW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jc2V0QmFzZVVSTFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt1cmxdIC0gVGhlIFVSTCB0byB1c2UuIExlYXZlIGVtcHR5IHRvIHJlc2V0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBUaGlzIExvYWRlciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldEJhc2VVUkw6IGZ1bmN0aW9uICh1cmwpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHVybCA9PT0gdW5kZWZpbmVkKSB7IHVybCA9ICcnOyB9XHJcblxyXG4gICAgICAgIGlmICh1cmwgIT09ICcnICYmIHVybC5zdWJzdHIoLTEpICE9PSAnLycpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB1cmwgPSB1cmwuY29uY2F0KCcvJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmJhc2VVUkwgPSB1cmw7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2YWx1ZSBvZiBgcGF0aGAsIGlmIHNldCwgaXMgcGxhY2VkIGJlZm9yZSBhbnkgX3JlbGF0aXZlXyBmaWxlIHBhdGggZ2l2ZW4uIEZvciBleGFtcGxlOlxyXG4gICAgICpcclxuICAgICAqIGBgYGphdmFzY3JpcHRcclxuICAgICAqIHRoaXMubG9hZC5zZXRQYXRoKFwiaW1hZ2VzL3Nwcml0ZXMvXCIpO1xyXG4gICAgICogdGhpcy5sb2FkLmltYWdlKFwiYmFsbFwiLCBcImJhbGwucG5nXCIpO1xyXG4gICAgICogdGhpcy5sb2FkLmltYWdlKFwidHJlZVwiLCBcImxldmVsMS9vYWt0cmVlLnBuZ1wiKTtcclxuICAgICAqIHRoaXMubG9hZC5pbWFnZShcImJvb21cIiwgXCJodHRwOi8vc2VydmVyLmNvbS9leHBsb2RlLnBuZ1wiKTtcclxuICAgICAqIGBgYFxyXG4gICAgICpcclxuICAgICAqIFdvdWxkIGxvYWQgdGhlIGBiYWxsYCBmaWxlIGZyb20gYGltYWdlcy9zcHJpdGVzL2JhbGwucG5nYCBhbmQgdGhlIHRyZWUgZnJvbVxyXG4gICAgICogYGltYWdlcy9zcHJpdGVzL2xldmVsMS9vYWt0cmVlLnBuZ2AgYnV0IHRoZSBmaWxlIGBib29tYCB3b3VsZCBsb2FkIGZyb20gdGhlIFVSTFxyXG4gICAgICogZ2l2ZW4gYXMgaXQncyBhbiBhYnNvbHV0ZSBVUkwuXHJcbiAgICAgKlxyXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCB0aGUgcGF0aCBpcyBhZGRlZCBiZWZvcmUgdGhlIGZpbGVuYW1lIGJ1dCAqYWZ0ZXIqIHRoZSBiYXNlVVJMIChpZiBzZXQuKVxyXG4gICAgICogXHJcbiAgICAgKiBPbmNlIGEgcGF0aCBpcyBzZXQgaXQgd2lsbCB0aGVuIGFmZmVjdCBldmVyeSBmaWxlIGFkZGVkIHRvIHRoZSBMb2FkZXIgZnJvbSB0aGF0IHBvaW50IG9uLiBJdCBkb2VzIF9ub3RfIGNoYW5nZSBhbnlcclxuICAgICAqIGZpbGUgX2FscmVhZHlfIGluIHRoZSBsb2FkIHF1ZXVlLiBUbyByZXNldCBpdCwgY2FsbCB0aGlzIG1ldGhvZCB3aXRoIG5vIGFyZ3VtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3NldFBhdGhcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbcGF0aF0gLSBUaGUgcGF0aCB0byB1c2UuIExlYXZlIGVtcHR5IHRvIHJlc2V0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBUaGlzIExvYWRlciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHNldFBhdGg6IGZ1bmN0aW9uIChwYXRoKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChwYXRoID09PSB1bmRlZmluZWQpIHsgcGF0aCA9ICcnOyB9XHJcblxyXG4gICAgICAgIGlmIChwYXRoICE9PSAnJyAmJiBwYXRoLnN1YnN0cigtMSkgIT09ICcvJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBhdGggPSBwYXRoLmNvbmNhdCgnLycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wYXRoID0gcGF0aDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW4gb3B0aW9uYWwgcHJlZml4IHRoYXQgaXMgYXV0b21hdGljYWxseSBwcmVwZW5kZWQgdG8gdGhlIHN0YXJ0IG9mIGV2ZXJ5IGZpbGUga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBJZiBwcmVmaXggd2FzIGBNRU5VLmAgYW5kIHlvdSBsb2FkIGFuIGltYWdlIHdpdGggdGhlIGtleSAnQmFja2dyb3VuZCcgdGhlIHJlc3VsdGluZyBrZXkgd291bGQgYmUgYE1FTlUuQmFja2dyb3VuZGAuXHJcbiAgICAgKiBcclxuICAgICAqIE9uY2UgYSBwcmVmaXggaXMgc2V0IGl0IHdpbGwgdGhlbiBhZmZlY3QgZXZlcnkgZmlsZSBhZGRlZCB0byB0aGUgTG9hZGVyIGZyb20gdGhhdCBwb2ludCBvbi4gSXQgZG9lcyBfbm90XyBjaGFuZ2UgYW55XHJcbiAgICAgKiBmaWxlIF9hbHJlYWR5XyBpbiB0aGUgbG9hZCBxdWV1ZS4gVG8gcmVzZXQgaXQsIGNhbGwgdGhpcyBtZXRob2Qgd2l0aCBubyBhcmd1bWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNzZXRQcmVmaXhcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbcHJlZml4XSAtIFRoZSBwcmVmaXggdG8gdXNlLiBMZWF2ZSBlbXB0eSB0byByZXNldC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gVGhpcyBMb2FkZXIgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBzZXRQcmVmaXg6IGZ1bmN0aW9uIChwcmVmaXgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7IHByZWZpeCA9ICcnOyB9XHJcblxyXG4gICAgICAgIHRoaXMucHJlZml4ID0gcHJlZml4O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBDcm9zcyBPcmlnaW4gUmVzb3VyY2UgU2hhcmluZyB2YWx1ZSB1c2VkIHdoZW4gbG9hZGluZyBmaWxlcy5cclxuICAgICAqIFxyXG4gICAgICogRmlsZXMgY2FuIG92ZXJyaWRlIHRoaXMgdmFsdWUgb24gYSBwZXItZmlsZSBiYXNpcyBieSBzcGVjaWZ5aW5nIGFuIGFsdGVybmF0aXZlIGBjcm9zc09yaWdpbmAgdmFsdWUgaW4gdGhlaXIgZmlsZSBjb25maWcuXHJcbiAgICAgKiBcclxuICAgICAqIE9uY2UgQ09ScyBpcyBzZXQgaXQgd2lsbCB0aGVuIGFmZmVjdCBldmVyeSBmaWxlIGxvYWRlZCBieSB0aGUgTG9hZGVyIGZyb20gdGhhdCBwb2ludCBvbiwgYXMgbG9uZyBhcyB0aGV5IGRvbid0IGhhdmVcclxuICAgICAqIHRoZWlyIG93biBDT1JzIHNldHRpbmcuIFRvIHJlc2V0IGl0LCBjYWxsIHRoaXMgbWV0aG9kIHdpdGggbm8gYXJndW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIEZvciBtb3JlIGRldGFpbHMgYWJvdXQgQ09ScyBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9DT1JTXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNzZXRDT1JTXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2Nyb3NzT3JpZ2luXSAtIFRoZSB2YWx1ZSB0byB1c2UgZm9yIHRoZSBgY3Jvc3NPcmlnaW5gIHByb3BlcnR5IGluIHRoZSBsb2FkIHJlcXVlc3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IFRoaXMgTG9hZGVyIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgc2V0Q09SUzogZnVuY3Rpb24gKGNyb3NzT3JpZ2luKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBjcm9zc09yaWdpbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIGZpbGUsIG9yIGFycmF5IG9mIGZpbGVzLCBpbnRvIHRoZSBsb2FkIHF1ZXVlLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBmaWxlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgYFBoYXNlci5Mb2FkZXIuRmlsZWAsIG9yIGEgY2xhc3MgdGhhdCBleHRlbmRzIGl0LiBUaGUgTG9hZGVyIHdpbGwgY2hlY2sgdGhhdCB0aGUga2V5XHJcbiAgICAgKiB1c2VkIGJ5IHRoZSBmaWxlIHdvbid0IGNvbmZsaWN0IHdpdGggYW55IG90aGVyIGtleSBlaXRoZXIgaW4gdGhlIGxvYWRlciwgdGhlIGluZmxpZ2h0IHF1ZXVlIG9yIHRoZSB0YXJnZXQgY2FjaGUuXHJcbiAgICAgKiBJZiBhbGxvd2VkIGl0IHdpbGwgdGhlbiBhZGQgdGhlIGZpbGUgaW50byB0aGUgcGVuZGluZyBsaXN0LCByZWFkIGZvciB0aGUgbG9hZCB0byBzdGFydC4gT3IsIGlmIHRoZSBsb2FkIGhhcyBhbHJlYWR5XHJcbiAgICAgKiBzdGFydGVkLCByZWFkeSBmb3IgdGhlIG5leHQgYmF0Y2ggb2YgZmlsZXMgdG8gYmUgcHVsbGVkIGZyb20gdGhlIGxpc3QgdG8gdGhlIGluZmxpZ2h0IHF1ZXVlLlxyXG4gICAgICpcclxuICAgICAqIFlvdSBzaG91bGQgbm90IG5vcm1hbGx5IGNhbGwgdGhpcyBtZXRob2QgZGlyZWN0bHksIGJ1dCByYXRoZXIgdXNlIG9uZSBvZiB0aGUgTG9hZGVyIG1ldGhvZHMgbGlrZSBgaW1hZ2VgIG9yIGBhdGxhc2AsXHJcbiAgICAgKiBob3dldmVyIHlvdSBjYW4gY2FsbCB0aGlzIGFzIGxvbmcgYXMgdGhlIGZpbGUgZ2l2ZW4gdG8gaXQgaXMgd2VsbCBmb3JtZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhZGRGaWxlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5FdmVudHMjQUREXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyhQaGFzZXIuTG9hZGVyLkZpbGV8UGhhc2VyLkxvYWRlci5GaWxlW10pfSBmaWxlIC0gVGhlIGZpbGUsIG9yIGFycmF5IG9mIGZpbGVzLCB0byBiZSBhZGRlZCB0byB0aGUgbG9hZCBxdWV1ZS5cclxuICAgICAqL1xyXG4gICAgYWRkRmlsZTogZnVuY3Rpb24gKGZpbGUpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGZpbGUpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZmlsZSA9IFsgZmlsZSBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWxlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSBmaWxlW2ldO1xyXG5cclxuICAgICAgICAgICAgLy8gIERvZXMgdGhlIGZpbGUgYWxyZWFkeSBleGlzdCBpbiB0aGUgY2FjaGUgb3IgdGV4dHVyZSBtYW5hZ2VyP1xyXG4gICAgICAgICAgICAvLyAgT3Igd2lsbCBpdCBjb25mbGljdCB3aXRoIGEgZmlsZSBhbHJlYWR5IGluIHRoZSBxdWV1ZSBvciBpbmZsaWdodD9cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmtleUV4aXN0cyhpdGVtKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0LnNldChpdGVtKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkFERCwgaXRlbS5rZXksIGl0ZW0udHlwZSwgdGhpcywgaXRlbSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMb2FkaW5nKCkpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b3RhbFRvTG9hZCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3MoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgdGhlIGtleSBhbmQgdHlwZSBvZiB0aGUgZ2l2ZW4gZmlsZSB0byBzZWUgaWYgaXQgd2lsbCBjb25mbGljdCB3aXRoIGFueXRoaW5nIGFscmVhZHlcclxuICAgICAqIGluIGEgQ2FjaGUsIHRoZSBUZXh0dXJlIE1hbmFnZXIsIG9yIHRoZSBsaXN0IG9yIGluZmxpZ2h0IHF1ZXVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2tleUV4aXN0c1xyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkZpbGV9IGZpbGUgLSBUaGUgZmlsZSB0byBjaGVjayB0aGUga2V5IG9mLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiBhZGRpbmcgdGhpcyBmaWxlIHdpbGwgY2F1c2UgYSBjYWNoZSBvciBxdWV1ZSBjb25mbGljdCwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGtleUV4aXN0czogZnVuY3Rpb24gKGZpbGUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGtleUNvbmZsaWN0ID0gZmlsZS5oYXNDYWNoZUNvbmZsaWN0KCk7XHJcblxyXG4gICAgICAgIGlmICgha2V5Q29uZmxpY3QpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmxpc3QuaXRlcmF0ZShmdW5jdGlvbiAoaXRlbSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gZmlsZS50eXBlICYmIGl0ZW0ua2V5ID09PSBmaWxlLmtleSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXlDb25mbGljdCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFrZXlDb25mbGljdCAmJiB0aGlzLmlzTG9hZGluZygpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5pbmZsaWdodC5pdGVyYXRlKGZ1bmN0aW9uIChpdGVtKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS50eXBlID09PSBmaWxlLnR5cGUgJiYgaXRlbS5rZXkgPT09IGZpbGUua2V5KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleUNvbmZsaWN0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnF1ZXVlLml0ZXJhdGUoZnVuY3Rpb24gKGl0ZW0pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09IGZpbGUudHlwZSAmJiBpdGVtLmtleSA9PT0gZmlsZS5rZXkpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5Q29uZmxpY3QgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBrZXlDb25mbGljdDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIHdlbGwgZm9ybWVkLCBmdWxseSBwYXJzZWQgcGFjayBmaWxlIG9iamVjdCBhbmQgYWRkcyBpdHMgZW50cmllcyBpbnRvIHRoZSBsb2FkIHF1ZXVlLiBVc3VhbGx5IHlvdSBkbyBub3QgY2FsbFxyXG4gICAgICogdGhpcyBtZXRob2QgZGlyZWN0bHksIGJ1dCBpbnN0ZWFkIHVzZSBgTG9hZGVyLnBhY2tgIGFuZCBzdXBwbHkgYSBwYXRoIHRvIGEgSlNPTiBmaWxlIHRoYXQgaG9sZHMgdGhlXHJcbiAgICAgKiBwYWNrIGRhdGEuIEhvd2V2ZXIsIGlmIHlvdSd2ZSBnb3QgdGhlIGRhdGEgcHJlcGFyZWQgeW91IGNhbiBwYXNzIGl0IHRvIHRoaXMgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGFuIG9wdGlvbmFsIGtleS4gSWYgeW91IGRvIHRoZW4gaXQgd2lsbCBvbmx5IGFkZCB0aGUgZW50cmllcyBmcm9tIHRoYXQgcGFydCBvZiB0aGUgcGFjayBpbnRvXHJcbiAgICAgKiB0byB0aGUgbG9hZCBxdWV1ZS4gSWYgbm90IHNwZWNpZmllZCBpdCB3aWxsIGFkZCBhbGwgZW50cmllcyBpdCBmaW5kcy4gRm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgcGFjayBmaWxlIGZvcm1hdFxyXG4gICAgICogc2VlIHRoZSBgTG9hZGVyUGx1Z2luLnBhY2tgIG1ldGhvZC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2FkZFBhY2tcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55fSBkYXRhIC0gVGhlIFBhY2sgRmlsZSBkYXRhIHRvIGJlIHBhcnNlZCBhbmQgZWFjaCBlbnRyeSBvZiBpdCB0byBhZGRlZCB0byB0aGUgbG9hZCBxdWV1ZS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFja0tleV0gLSBBbiBvcHRpb25hbCBrZXkgdG8gdXNlIGZyb20gdGhlIHBhY2sgZmlsZSBkYXRhLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiBhbnkgZmlsZXMgd2VyZSBhZGRlZCB0byB0aGUgcXVldWUsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBhZGRQYWNrOiBmdW5jdGlvbiAocGFjaywgcGFja0tleSlcclxuICAgIHtcclxuICAgICAgICAvLyAgaWYgbm8gcGFja0tleSBwcm92aWRlZCB3ZSdsbCBhZGQgZXZlcnl0aGluZyB0byB0aGUgcXVldWVcclxuICAgICAgICBpZiAocGFja0tleSAmJiBwYWNrLmhhc093blByb3BlcnR5KHBhY2tLZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcGFjayA9IHsgcGFja0tleTogcGFja1twYWNrS2V5XSB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRvdGFsID0gMDtcclxuXHJcbiAgICAgICAgLy8gIFN0b3JlIHRoZSBsb2FkZXIgc2V0dGluZ3MgaW4gY2FzZSB0aGlzIHBhY2sgcmVwbGFjZXMgdGhlbVxyXG4gICAgICAgIHZhciBjdXJyZW50QmFzZVVSTCA9IHRoaXMuYmFzZVVSTDtcclxuICAgICAgICB2YXIgY3VycmVudFBhdGggPSB0aGlzLnBhdGg7XHJcbiAgICAgICAgdmFyIGN1cnJlbnRQcmVmaXggPSB0aGlzLnByZWZpeDtcclxuXHJcbiAgICAgICAgLy8gIEhlcmUgd2UgZ28gLi4uXHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHBhY2spXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY29uZmlnID0gcGFja1trZXldO1xyXG5cclxuICAgICAgICAgICAgLy8gIEFueSBtZXRhIGRhdGEgdG8gcHJvY2Vzcz9cclxuICAgICAgICAgICAgdmFyIGJhc2VVUkwgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnYmFzZVVSTCcsIGN1cnJlbnRCYXNlVVJMKTtcclxuICAgICAgICAgICAgdmFyIHBhdGggPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAncGF0aCcsIGN1cnJlbnRQYXRoKTtcclxuICAgICAgICAgICAgdmFyIHByZWZpeCA9IEdldEZhc3RWYWx1ZShjb25maWcsICdwcmVmaXgnLCBjdXJyZW50UHJlZml4KTtcclxuICAgICAgICAgICAgdmFyIGZpbGVzID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2ZpbGVzJywgbnVsbCk7XHJcbiAgICAgICAgICAgIHZhciBkZWZhdWx0VHlwZSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdkZWZhdWx0VHlwZScsICd2b2lkJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWxlcykpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0QmFzZVVSTChiYXNlVVJMKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UGF0aChwYXRoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UHJlZml4KHByZWZpeCk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZSA9IGZpbGVzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gKGZpbGUuaGFzT3duUHJvcGVydHkoJ3R5cGUnKSkgPyBmaWxlLnR5cGUgOiBkZWZhdWx0VHlwZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNbdHlwZV0pXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3R5cGVdKGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFJlc2V0IHRoZSBsb2FkZXIgc2V0dGluZ3NcclxuICAgICAgICB0aGlzLnNldEJhc2VVUkwoY3VycmVudEJhc2VVUkwpO1xyXG4gICAgICAgIHRoaXMuc2V0UGF0aChjdXJyZW50UGF0aCk7XHJcbiAgICAgICAgdGhpcy5zZXRQcmVmaXgoY3VycmVudFByZWZpeCk7XHJcblxyXG4gICAgICAgIHJldHVybiAodG90YWwgPiAwKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyB0aGUgTG9hZGVyIGFjdGl2ZWx5IGxvYWRpbmcsIG9yIHByb2Nlc3NpbmcgbG9hZGVkIGZpbGVzP1xyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jaXNMb2FkaW5nXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIExvYWRlciBpcyBidXN5IGxvYWRpbmcgb3IgcHJvY2Vzc2luZywgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGlzTG9hZGluZzogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc3RhdGUgPT09IENPTlNULkxPQURFUl9MT0FESU5HIHx8IHRoaXMuc3RhdGUgPT09IENPTlNULkxPQURFUl9QUk9DRVNTSU5HKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyB0aGUgTG9hZGVyIHJlYWR5IHRvIHN0YXJ0IGEgbmV3IGxvYWQ/XHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNpc1JlYWR5XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIExvYWRlciBpcyByZWFkeSB0byBzdGFydCBhIG5ldyBsb2FkLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgaXNSZWFkeTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc3RhdGUgPT09IENPTlNULkxPQURFUl9JRExFIHx8IHRoaXMuc3RhdGUgPT09IENPTlNULkxPQURFUl9DT01QTEVURSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RhcnRzIHRoZSBMb2FkZXIgcnVubmluZy4gVGhpcyB3aWxsIHJlc2V0IHRoZSBwcm9ncmVzcyBhbmQgdG90YWxzIGFuZCB0aGVuIGVtaXQgYSBgc3RhcnRgIGV2ZW50LlxyXG4gICAgICogSWYgdGhlcmUgaXMgbm90aGluZyBpbiB0aGUgcXVldWUgdGhlIExvYWRlciB3aWxsIGltbWVkaWF0ZWx5IGNvbXBsZXRlLCBvdGhlcndpc2UgaXQgd2lsbCBzdGFydFxyXG4gICAgICogbG9hZGluZyB0aGUgZmlyc3QgYmF0Y2ggb2YgZmlsZXMuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIExvYWRlciBpcyBzdGFydGVkIGF1dG9tYXRpY2FsbHkgaWYgdGhlIHF1ZXVlIGlzIHBvcHVsYXRlZCB3aXRoaW4geW91ciBTY2VuZXMgYHByZWxvYWRgIG1ldGhvZC5cclxuICAgICAqXHJcbiAgICAgKiBIb3dldmVyLCBvdXRzaWRlIG9mIHRoaXMsIHlvdSBuZWVkIHRvIGNhbGwgdGhpcyBtZXRob2QgdG8gc3RhcnQgaXQuXHJcbiAgICAgKlxyXG4gICAgICogSWYgdGhlIExvYWRlciBpcyBhbHJlYWR5IHJ1bm5pbmcgdGhpcyBtZXRob2Qgd2lsbCBzaW1wbHkgcmV0dXJuLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jc3RhcnRcclxuICAgICAqIEBmaXJlcyBQaGFzZXIuTG9hZGVyLkV2ZW50cyNTVEFSVFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0OiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5pc1JlYWR5KCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnByb2dyZXNzID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy50b3RhbEZhaWxlZCA9IDA7XHJcbiAgICAgICAgdGhpcy50b3RhbENvbXBsZXRlID0gMDtcclxuICAgICAgICB0aGlzLnRvdGFsVG9Mb2FkID0gdGhpcy5saXN0LnNpemU7XHJcblxyXG4gICAgICAgIHRoaXMuZW1pdChFdmVudHMuU1RBUlQsIHRoaXMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5saXN0LnNpemUgPT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRDb21wbGV0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gQ09OU1QuTE9BREVSX0xPQURJTkc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmluZmxpZ2h0LmNsZWFyKCk7XHJcbiAgICAgICAgICAgIHRoaXMucXVldWUuY2xlYXIoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3MoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tMb2FkUXVldWUoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3lzdGVtcy5ldmVudHMub24oU2NlbmVFdmVudHMuVVBEQVRFLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyB0aGUgbG9hZCBwcm9jZXNzLlxyXG4gICAgICogSXQgdXBkYXRlcyB0aGUgYHByb2dyZXNzYCB2YWx1ZSBhbmQgdGhlbiBlbWl0cyBhIHByb2dyZXNzIGV2ZW50LCB3aGljaCB5b3UgY2FuIHVzZSB0b1xyXG4gICAgICogZGlzcGxheSBhIGxvYWRpbmcgYmFyIGluIHlvdXIgZ2FtZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3VwZGF0ZVByb2dyZXNzXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5FdmVudHMjUFJPR1JFU1NcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICB1cGRhdGVQcm9ncmVzczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnByb2dyZXNzID0gMSAtICgodGhpcy5saXN0LnNpemUgKyB0aGlzLmluZmxpZ2h0LnNpemUpIC8gdGhpcy50b3RhbFRvTG9hZCk7XHJcblxyXG4gICAgICAgIHRoaXMuZW1pdChFdmVudHMuUFJPR1JFU1MsIHRoaXMucHJvZ3Jlc3MpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyB0aGUgbG9hZCBwcm9jZXNzLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jdXBkYXRlXHJcbiAgICAgKiBAc2luY2UgMy4xMC4wXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gQ09OU1QuTE9BREVSX0xPQURJTkcgJiYgdGhpcy5saXN0LnNpemUgPiAwICYmIHRoaXMuaW5mbGlnaHQuc2l6ZSA8IHRoaXMubWF4UGFyYWxsZWxEb3dubG9hZHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrTG9hZFF1ZXVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuIGludGVybmFsIG1ldGhvZCBjYWxsZWQgYnkgdGhlIExvYWRlci5cclxuICAgICAqIFxyXG4gICAgICogSXQgd2lsbCBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBtb3JlIGZpbGVzIGluIHRoZSBwZW5kaW5nIGxpc3QgdGhhdCBuZWVkIGxvYWRpbmcsIGFuZCBpZiBzbyBpdCB3aWxsIG1vdmVcclxuICAgICAqIHRoZW0gZnJvbSB0aGUgbGlzdCBTZXQgaW50byB0aGUgaW5mbGlnaHQgU2V0LCBzZXQgdGhlaXIgQ09ScyBmbGFnIGFuZCBzdGFydCB0aGVtIGxvYWRpbmcuXHJcbiAgICAgKiBcclxuICAgICAqIEl0IHdpbGwgY2Fycnlpbmcgb24gZG9pbmcgdGhpcyBmb3IgZWFjaCBmaWxlIGluIHRoZSBwZW5kaW5nIGxpc3QgdW50aWwgaXQgcnVucyBvdXQsIG9yIGhpdHMgdGhlIG1heCBhbGxvd2VkIHBhcmFsbGVsIGRvd25sb2Fkcy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2NoZWNrTG9hZFF1ZXVlXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKi9cclxuICAgIGNoZWNrTG9hZFF1ZXVlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMubGlzdC5lYWNoKGZ1bmN0aW9uIChmaWxlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGZpbGUuc3RhdGUgPT09IENPTlNULkZJTEVfUE9QVUxBVEVEIHx8IChmaWxlLnN0YXRlID09PSBDT05TVC5GSUxFX1BFTkRJTkcgJiYgdGhpcy5pbmZsaWdodC5zaXplIDwgdGhpcy5tYXhQYXJhbGxlbERvd25sb2FkcykpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5mbGlnaHQuc2V0KGZpbGUpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdC5kZWxldGUoZmlsZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIElmIHRoZSBmaWxlIGRvZXNuJ3QgaGF2ZSBpdHMgb3duIGNyb3NzT3JpZ2luIHNldCwgd2UnbGwgdXNlIHRoZSBMb2FkZXJzICh3aGljaCBpcyB1bmRlZmluZWQgYnkgZGVmYXVsdClcclxuICAgICAgICAgICAgICAgIGlmICghZmlsZS5jcm9zc09yaWdpbilcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWxlLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBmaWxlLmxvYWQoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuaW5mbGlnaHQuc2l6ZSA9PT0gdGhpcy5tYXhQYXJhbGxlbERvd25sb2FkcylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIFRlbGxzIHRoZSBTZXQgaXRlcmF0b3IgdG8gYWJvcnRcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBpbnRlcm5hbCBtZXRob2QgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIFhIUkxvYWRlciBiZWxvbmcgdG8gYSBGaWxlLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIHJlbW92ZSB0aGUgZ2l2ZW4gZmlsZSBmcm9tIHRoZSBpbmZsaWdodCBTZXQgYW5kIHVwZGF0ZSB0aGUgbG9hZCBwcm9ncmVzcy5cclxuICAgICAqIElmIHRoZSBmaWxlIHdhcyBzdWNjZXNzZnVsIGl0cyBgb25Qcm9jZXNzYCBtZXRob2QgaXMgY2FsbGVkLCBvdGhlcndpc2UgaXQgaXMgYWRkZWQgdG8gdGhlIGRlbGV0ZSBxdWV1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI25leHRGaWxlXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5FdmVudHMjRklMRV9MT0FEXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5FdmVudHMjRklMRV9MT0FEX0VSUk9SXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuRmlsZX0gZmlsZSAtIFRoZSBGaWxlIHRoYXQganVzdCBmaW5pc2hlZCBsb2FkaW5nLCBvciBlcnJvcmVkIGR1cmluZyBsb2FkLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzdWNjZXNzIC0gYHRydWVgIGlmIHRoZSBmaWxlIGxvYWRlZCBzdWNjZXNzZnVsbHksIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHJcbiAgICBuZXh0RmlsZTogZnVuY3Rpb24gKGZpbGUsIHN1Y2Nlc3MpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIEhhcyB0aGUgZ2FtZSBiZWVuIGRlc3Ryb3llZCBkdXJpbmcgbG9hZD8gSWYgc28sIGJhaWwgb3V0IG5vdy5cclxuICAgICAgICBpZiAoIXRoaXMuaW5mbGlnaHQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmluZmxpZ2h0LmRlbGV0ZShmaWxlKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVQcm9ncmVzcygpO1xyXG5cclxuICAgICAgICBpZiAoc3VjY2VzcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudG90YWxDb21wbGV0ZSsrO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5xdWV1ZS5zZXQoZmlsZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkZJTEVfTE9BRCwgZmlsZSk7XHJcblxyXG4gICAgICAgICAgICBmaWxlLm9uUHJvY2VzcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnRvdGFsRmFpbGVkKys7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9kZWxldGVRdWV1ZS5zZXQoZmlsZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkZJTEVfTE9BRF9FUlJPUiwgZmlsZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZpbGVQcm9jZXNzQ29tcGxldGUoZmlsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuIGludGVybmFsIG1ldGhvZCB0aGF0IGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBGaWxlIHdoZW4gaXQgaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcuXHJcbiAgICAgKlxyXG4gICAgICogSWYgdGhlIHByb2Nlc3Mgd2FzIHN1Y2Nlc3NmdWwsIGFuZCB0aGUgRmlsZSBpc24ndCBwYXJ0IG9mIGEgTXVsdGlGaWxlLCBpdHMgYGFkZFRvQ2FjaGVgIG1ldGhvZCBpcyBjYWxsZWQuXHJcbiAgICAgKlxyXG4gICAgICogSXQgdGhpcyB0aGVuIHJlbW92ZWQgZnJvbSB0aGUgcXVldWUuIElmIHRoZXJlIGFyZSBubyBtb3JlIGZpbGVzIHRvIGxvYWQgYGxvYWRDb21wbGV0ZWAgaXMgY2FsbGVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jZmlsZVByb2Nlc3NDb21wbGV0ZVxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkZpbGV9IGZpbGUgLSBUaGUgZmlsZSB0aGF0IGhhcyBmaW5pc2hlZCBwcm9jZXNzaW5nLlxyXG4gICAgICovXHJcbiAgICBmaWxlUHJvY2Vzc0NvbXBsZXRlOiBmdW5jdGlvbiAoZmlsZSlcclxuICAgIHtcclxuICAgICAgICAvLyAgSGFzIHRoZSBnYW1lIGJlZW4gZGVzdHJveWVkIGR1cmluZyBsb2FkPyBJZiBzbywgYmFpbCBvdXQgbm93LlxyXG4gICAgICAgIGlmICghdGhpcy5zY2VuZSB8fCAhdGhpcy5zeXN0ZW1zIHx8ICF0aGlzLnN5c3RlbXMuZ2FtZSB8fCB0aGlzLnN5c3RlbXMuZ2FtZS5wZW5kaW5nRGVzdHJveSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBUaGlzIGZpbGUgaGFzIGZhaWxlZCwgc28gbW92ZSBpdCB0byB0aGUgZmFpbGVkIFNldFxyXG4gICAgICAgIGlmIChmaWxlLnN0YXRlID09PSBDT05TVC5GSUxFX0VSUk9SRUQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoZmlsZS5tdWx0aUZpbGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGZpbGUubXVsdGlGaWxlLm9uRmlsZUZhaWxlZChmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChmaWxlLnN0YXRlID09PSBDT05TVC5GSUxFX0NPTVBMRVRFKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKGZpbGUubXVsdGlGaWxlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmlsZS5tdWx0aUZpbGUuaXNSZWFkeVRvUHJvY2VzcygpKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICBJZiB3ZSBnb3QgaGVyZSB0aGVuIGFsbCBmaWxlcyB0aGUgbGluayBmaWxlIG5lZWRzIGFyZSByZWFkeSB0byBhZGQgdG8gdGhlIGNhY2hlXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZS5tdWx0aUZpbGUuYWRkVG9DYWNoZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIElmIHdlIGdvdCBoZXJlLCB0aGVuIHRoZSBmaWxlIHByb2Nlc3NlZCwgc28gbGV0IGl0IGFkZCBpdHNlbGYgdG8gaXRzIGNhY2hlXHJcbiAgICAgICAgICAgICAgICBmaWxlLmFkZFRvQ2FjaGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gIFJlbW92ZSBpdCBmcm9tIHRoZSBxdWV1ZVxyXG4gICAgICAgIHRoaXMucXVldWUuZGVsZXRlKGZpbGUpO1xyXG5cclxuICAgICAgICAvLyAgTm90aGluZyBsZWZ0IHRvIGRvP1xyXG5cclxuICAgICAgICBpZiAodGhpcy5saXN0LnNpemUgPT09IDAgJiYgdGhpcy5pbmZsaWdodC5zaXplID09PSAwICYmIHRoaXMucXVldWUuc2l6ZSA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZENvbXBsZXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhdCB0aGUgZW5kIHdoZW4gdGhlIGxvYWQgcXVldWUgaXMgZXhoYXVzdGVkIGFuZCBhbGwgZmlsZXMgaGF2ZSBlaXRoZXIgbG9hZGVkIG9yIGVycm9yZWQuXHJcbiAgICAgKiBCeSB0aGlzIHBvaW50IGV2ZXJ5IGxvYWRlZCBmaWxlIHdpbGwgbm93IGJlIGluIGl0cyBhc3NvY2lhdGVkIGNhY2hlIGFuZCByZWFkeSBmb3IgdXNlLlxyXG4gICAgICpcclxuICAgICAqIEFsc28gY2xlYXJzIGRvd24gdGhlIFNldHMsIHB1dHMgcHJvZ3Jlc3MgdG8gMSBhbmQgY2xlYXJzIHRoZSBkZWxldGlvbiBxdWV1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2xvYWRDb21wbGV0ZVxyXG4gICAgICogQGZpcmVzIFBoYXNlci5Mb2FkZXIuRXZlbnRzI0NPTVBMRVRFXHJcbiAgICAgKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5FdmVudHMjUE9TVF9QUk9DRVNTXHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqL1xyXG4gICAgbG9hZENvbXBsZXRlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZW1pdChFdmVudHMuUE9TVF9QUk9DRVNTLCB0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0LmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5pbmZsaWdodC5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMucXVldWUuY2xlYXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT05TVC5MT0FERVJfQ09NUExFVEU7XHJcblxyXG4gICAgICAgIHRoaXMuc3lzdGVtcy5ldmVudHMub2ZmKFNjZW5lRXZlbnRzLlVQREFURSwgdGhpcy51cGRhdGUsIHRoaXMpO1xyXG5cclxuICAgICAgICAvLyAgQ2FsbCAnZGVzdHJveScgb24gZWFjaCBmaWxlIHJlYWR5IGZvciBkZWxldGlvblxyXG4gICAgICAgIHRoaXMuX2RlbGV0ZVF1ZXVlLml0ZXJhdGVMb2NhbCgnZGVzdHJveScpO1xyXG5cclxuICAgICAgICB0aGlzLl9kZWxldGVRdWV1ZS5jbGVhcigpO1xyXG5cclxuICAgICAgICB0aGlzLmVtaXQoRXZlbnRzLkNPTVBMRVRFLCB0aGlzLCB0aGlzLnRvdGFsQ29tcGxldGUsIHRoaXMudG90YWxGYWlsZWQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBGaWxlIGludG8gdGhlIHBlbmRpbmctZGVsZXRpb24gcXVldWUuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNmbGFnRm9yUmVtb3ZhbFxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkxvYWRlci5GaWxlfSBmaWxlIC0gVGhlIEZpbGUgdG8gYmUgcXVldWVkIGZvciBkZWxldGlvbiB3aGVuIHRoZSBMb2FkZXIgY29tcGxldGVzLlxyXG4gICAgICovXHJcbiAgICBmbGFnRm9yUmVtb3ZhbDogZnVuY3Rpb24gKGZpbGUpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fZGVsZXRlUXVldWUuc2V0KGZpbGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRzIHRoZSBnaXZlbiBKU09OIGRhdGEgaW50byBhIGZpbGUgdGhhdCB0aGUgYnJvd3NlciB0aGVuIHByb21wdHMgeW91IHRvIGRvd25sb2FkIHNvIHlvdSBjYW4gc2F2ZSBpdCBsb2NhbGx5LlxyXG4gICAgICpcclxuICAgICAqIFRoZSBkYXRhIG11c3QgYmUgd2VsbCBmb3JtZWQgSlNPTiBhbmQgcmVhZHktcGFyc2VkLCBub3QgYSBKYXZhU2NyaXB0IG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3NhdmVKU09OXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyp9IGRhdGEgLSBUaGUgSlNPTiBkYXRhLCByZWFkeSBwYXJzZWQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2ZpbGVuYW1lPWZpbGUuanNvbl0gLSBUaGUgbmFtZSB0byBzYXZlIHRoZSBKU09OIGZpbGUgYXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IFRoaXMgTG9hZGVyIHBsdWdpbi5cclxuICAgICAqL1xyXG4gICAgc2F2ZUpTT046IGZ1bmN0aW9uIChkYXRhLCBmaWxlbmFtZSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zYXZlKEpTT04uc3RyaW5naWZ5KGRhdGEpLCBmaWxlbmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2F1c2VzIHRoZSBicm93c2VyIHRvIHNhdmUgdGhlIGdpdmVuIGRhdGEgYXMgYSBmaWxlIHRvIGl0cyBkZWZhdWx0IERvd25sb2FkcyBmb2xkZXIuXHJcbiAgICAgKiBcclxuICAgICAqIENyZWF0ZXMgYSBET00gbGV2ZWwgYW5jaG9yIGxpbmssIGFzc2lnbnMgaXQgYXMgYmVpbmcgYSBgZG93bmxvYWRgIGFuY2hvciwgc2V0cyB0aGUgaHJlZlxyXG4gICAgICogdG8gYmUgYW4gT2JqZWN0VVJMIGJhc2VkIG9uIHRoZSBnaXZlbiBkYXRhLCBhbmQgdGhlbiBpbnZva2VzIGEgY2xpY2sgZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNzYXZlXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyp9IGRhdGEgLSBUaGUgZGF0YSB0byBiZSBzYXZlZC4gV2lsbCBiZSBwYXNzZWQgdGhyb3VnaCBVUkwuY3JlYXRlT2JqZWN0VVJMLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtmaWxlbmFtZT1maWxlLmpzb25dIC0gVGhlIGZpbGVuYW1lIHRvIHNhdmUgdGhlIGZpbGUgYXMuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2ZpbGV0eXBlPWFwcGxpY2F0aW9uL2pzb25dIC0gVGhlIGZpbGUgdHlwZSB0byB1c2Ugd2hlbiBzYXZpbmcgdGhlIGZpbGUuIERlZmF1bHRzIHRvIEpTT04uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IFRoaXMgTG9hZGVyIHBsdWdpbi5cclxuICAgICAqL1xyXG4gICAgc2F2ZTogZnVuY3Rpb24gKGRhdGEsIGZpbGVuYW1lLCBmaWxldHlwZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoZmlsZW5hbWUgPT09IHVuZGVmaW5lZCkgeyBmaWxlbmFtZSA9ICdmaWxlLmpzb24nOyB9XHJcbiAgICAgICAgaWYgKGZpbGV0eXBlID09PSB1bmRlZmluZWQpIHsgZmlsZXR5cGUgPSAnYXBwbGljYXRpb24vanNvbic7IH1cclxuXHJcbiAgICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbIGRhdGEgXSwgeyB0eXBlOiBmaWxldHlwZSB9KTtcclxuXHJcbiAgICAgICAgdmFyIHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcblxyXG4gICAgICAgIHZhciBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG5cclxuICAgICAgICBhLmRvd25sb2FkID0gZmlsZW5hbWU7XHJcbiAgICAgICAgYS50ZXh0Q29udGVudCA9ICdEb3dubG9hZCAnICsgZmlsZW5hbWU7XHJcbiAgICAgICAgYS5ocmVmID0gdXJsO1xyXG4gICAgICAgIGEuY2xpY2soKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXRzIHRoZSBMb2FkZXIuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyB3aWxsIGNsZWFyIGFsbCBsaXN0cyBhbmQgcmVzZXQgdGhlIGJhc2UgVVJMLCBwYXRoIGFuZCBwcmVmaXguXHJcbiAgICAgKlxyXG4gICAgICogV2FybmluZzogSWYgdGhlIExvYWRlciBpcyBjdXJyZW50bHkgZG93bmxvYWRpbmcgZmlsZXMsIG9yIGhhcyBmaWxlcyBpbiBpdHMgcXVldWUsIHRoZXkgd2lsbCBiZSBhYm9ydGVkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jcmVzZXRcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICByZXNldDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmxpc3QuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmluZmxpZ2h0LmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5xdWV1ZS5jbGVhcigpO1xyXG5cclxuICAgICAgICB2YXIgZ2FtZUNvbmZpZyA9IHRoaXMuc3lzdGVtcy5nYW1lLmNvbmZpZztcclxuICAgICAgICB2YXIgc2NlbmVDb25maWcgPSB0aGlzLnN5c3RlbXMuc2V0dGluZ3MubG9hZGVyO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJhc2VVUkwoR2V0RmFzdFZhbHVlKHNjZW5lQ29uZmlnLCAnYmFzZVVSTCcsIGdhbWVDb25maWcubG9hZGVyQmFzZVVSTCkpO1xyXG4gICAgICAgIHRoaXMuc2V0UGF0aChHZXRGYXN0VmFsdWUoc2NlbmVDb25maWcsICdwYXRoJywgZ2FtZUNvbmZpZy5sb2FkZXJQYXRoKSk7XHJcbiAgICAgICAgdGhpcy5zZXRQcmVmaXgoR2V0RmFzdFZhbHVlKHNjZW5lQ29uZmlnLCAncHJlZml4JywgZ2FtZUNvbmZpZy5sb2FkZXJQcmVmaXgpKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTlNULkxPQURFUl9JRExFO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBTY2VuZSB0aGF0IG93bnMgdGhpcyBwbHVnaW4gaXMgc2h1dHRpbmcgZG93bi5cclxuICAgICAqIFdlIG5lZWQgdG8ga2lsbCBhbmQgcmVzZXQgYWxsIGludGVybmFsIHByb3BlcnRpZXMgYXMgd2VsbCBhcyBzdG9wIGxpc3RlbmluZyB0byBTY2VuZSBldmVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNzaHV0ZG93blxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBzaHV0ZG93bjogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT05TVC5MT0FERVJfU0hVVERPV047XHJcblxyXG4gICAgICAgIHRoaXMuc3lzdGVtcy5ldmVudHMub2ZmKFNjZW5lRXZlbnRzLlVQREFURSwgdGhpcy51cGRhdGUsIHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc3lzdGVtcy5ldmVudHMub2ZmKFNjZW5lRXZlbnRzLlNIVVRET1dOLCB0aGlzLnNodXRkb3duLCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgU2NlbmUgdGhhdCBvd25zIHRoaXMgcGx1Z2luIGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuICAgICAqIFdlIG5lZWQgdG8gc2h1dGRvd24gYW5kIHRoZW4ga2lsbCBvZmYgYWxsIGV4dGVybmFsIHJlZmVyZW5jZXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNkZXN0cm95XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zaHV0ZG93bigpO1xyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09OU1QuTE9BREVSX0RFU1RST1lFRDtcclxuXHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zLmV2ZW50cy5vZmYoU2NlbmVFdmVudHMuVVBEQVRFLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XHJcbiAgICAgICAgdGhpcy5zeXN0ZW1zLmV2ZW50cy5vZmYoU2NlbmVFdmVudHMuU1RBUlQsIHRoaXMucGx1Z2luU3RhcnQsIHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLmxpc3QgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaW5mbGlnaHQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucXVldWUgPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcclxuICAgICAgICB0aGlzLnN5c3RlbXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudGV4dHVyZU1hbmFnZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2FjaGVNYW5hZ2VyID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNjZW5lTWFuYWdlciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcblBsdWdpbkNhY2hlLnJlZ2lzdGVyKCdMb2FkZXInLCBMb2FkZXJQbHVnaW4sICdsb2FkJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlclBsdWdpbjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/LoaderPlugin.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/MergeXHRSettings.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/loader/MergeXHRSettings.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Extend = __webpack_require__(/*! ../utils/object/Extend */ \"./node_modules/phaser/src/utils/object/Extend.js\");\r\nvar XHRSettings = __webpack_require__(/*! ./XHRSettings */ \"./node_modules/phaser/src/loader/XHRSettings.js\");\r\n\r\n/**\r\n * Takes two XHRSettings Objects and creates a new XHRSettings object from them.\r\n *\r\n * The new object is seeded by the values given in the global settings, but any setting in\r\n * the local object overrides the global ones.\r\n *\r\n * @function Phaser.Loader.MergeXHRSettings\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} global - The global XHRSettings object.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} local - The local XHRSettings object.\r\n *\r\n * @return {Phaser.Types.Loader.XHRSettingsObject} A newly formed XHRSettings object.\r\n */\r\nvar MergeXHRSettings = function (global, local)\r\n{\r\n var output = (global === undefined) ? XHRSettings() : Extend({}, global);\r\n\r\n if (local)\r\n {\r\n for (var setting in local)\r\n {\r\n if (local[setting] !== undefined)\r\n {\r\n output[setting] = local[setting];\r\n }\r\n }\r\n }\r\n\r\n return output;\r\n};\r\n\r\nmodule.exports = MergeXHRSettings;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvTWVyZ2VYSFJTZXR0aW5ncy5qcz9lMmY4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsZ0ZBQXdCO0FBQzdDLGtCQUFrQixtQkFBTyxDQUFDLHNFQUFlOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNDQUFzQztBQUNqRCxXQUFXLHNDQUFzQztBQUNqRDtBQUNBLFlBQVksc0NBQXNDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRTs7QUFFbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9NZXJnZVhIUlNldHRpbmdzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgRXh0ZW5kID0gcmVxdWlyZSgnLi4vdXRpbHMvb2JqZWN0L0V4dGVuZCcpO1xyXG52YXIgWEhSU2V0dGluZ3MgPSByZXF1aXJlKCcuL1hIUlNldHRpbmdzJyk7XHJcblxyXG4vKipcclxuICogVGFrZXMgdHdvIFhIUlNldHRpbmdzIE9iamVjdHMgYW5kIGNyZWF0ZXMgYSBuZXcgWEhSU2V0dGluZ3Mgb2JqZWN0IGZyb20gdGhlbS5cclxuICpcclxuICogVGhlIG5ldyBvYmplY3QgaXMgc2VlZGVkIGJ5IHRoZSB2YWx1ZXMgZ2l2ZW4gaW4gdGhlIGdsb2JhbCBzZXR0aW5ncywgYnV0IGFueSBzZXR0aW5nIGluXHJcbiAqIHRoZSBsb2NhbCBvYmplY3Qgb3ZlcnJpZGVzIHRoZSBnbG9iYWwgb25lcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5Mb2FkZXIuTWVyZ2VYSFJTZXR0aW5nc1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBnbG9iYWwgLSBUaGUgZ2xvYmFsIFhIUlNldHRpbmdzIG9iamVjdC5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBsb2NhbCAtIFRoZSBsb2NhbCBYSFJTZXR0aW5ncyBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IEEgbmV3bHkgZm9ybWVkIFhIUlNldHRpbmdzIG9iamVjdC5cclxuICovXHJcbnZhciBNZXJnZVhIUlNldHRpbmdzID0gZnVuY3Rpb24gKGdsb2JhbCwgbG9jYWwpXHJcbntcclxuICAgIHZhciBvdXRwdXQgPSAoZ2xvYmFsID09PSB1bmRlZmluZWQpID8gWEhSU2V0dGluZ3MoKSA6IEV4dGVuZCh7fSwgZ2xvYmFsKTtcclxuXHJcbiAgICBpZiAobG9jYWwpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgc2V0dGluZyBpbiBsb2NhbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChsb2NhbFtzZXR0aW5nXSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRbc2V0dGluZ10gPSBsb2NhbFtzZXR0aW5nXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0cHV0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBNZXJnZVhIUlNldHRpbmdzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/MergeXHRSettings.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/MultiFile.js":
/*!*****************************************************!*\
!*** ./node_modules/phaser/src/loader/MultiFile.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A MultiFile is a special kind of parent that contains two, or more, Files as children and looks after\r\n * the loading and processing of them all. It is commonly extended and used as a base class for file types such as AtlasJSON or BitmapFont.\r\n * \r\n * You shouldn't create an instance of a MultiFile directly, but should extend it with your own class, setting a custom type and processing methods.\r\n *\r\n * @class MultiFile\r\n * @memberof Phaser.Loader\r\n * @constructor\r\n * @since 3.7.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - The Loader that is going to load this File.\r\n * @param {string} type - The file type string for sorting within the Loader.\r\n * @param {string} key - The key of the file within the loader.\r\n * @param {Phaser.Loader.File[]} files - An array of Files that make-up this MultiFile.\r\n */\r\nvar MultiFile = new Class({\r\n\r\n initialize:\r\n\r\n function MultiFile (loader, type, key, files)\r\n {\r\n /**\r\n * A reference to the Loader that is going to load this file.\r\n *\r\n * @name Phaser.Loader.MultiFile#loader\r\n * @type {Phaser.Loader.LoaderPlugin}\r\n * @since 3.7.0\r\n */\r\n this.loader = loader;\r\n\r\n /**\r\n * The file type string for sorting within the Loader.\r\n *\r\n * @name Phaser.Loader.MultiFile#type\r\n * @type {string}\r\n * @since 3.7.0\r\n */\r\n this.type = type;\r\n\r\n /**\r\n * Unique cache key (unique within its file type)\r\n *\r\n * @name Phaser.Loader.MultiFile#key\r\n * @type {string}\r\n * @since 3.7.0\r\n */\r\n this.key = key;\r\n\r\n /**\r\n * The current index being used by multi-file loaders to avoid key clashes.\r\n *\r\n * @name Phaser.Loader.MultiFile#multiKeyIndex\r\n * @type {integer}\r\n * @private\r\n * @since 3.20.0\r\n */\r\n this.multiKeyIndex = loader.multiKeyIndex++;\r\n\r\n /**\r\n * Array of files that make up this MultiFile.\r\n *\r\n * @name Phaser.Loader.MultiFile#files\r\n * @type {Phaser.Loader.File[]}\r\n * @since 3.7.0\r\n */\r\n this.files = files;\r\n\r\n /**\r\n * The completion status of this MultiFile.\r\n *\r\n * @name Phaser.Loader.MultiFile#complete\r\n * @type {boolean}\r\n * @default false\r\n * @since 3.7.0\r\n */\r\n this.complete = false;\r\n\r\n /**\r\n * The number of files to load.\r\n *\r\n * @name Phaser.Loader.MultiFile#pending\r\n * @type {integer}\r\n * @since 3.7.0\r\n */\r\n\r\n this.pending = files.length;\r\n\r\n /**\r\n * The number of files that failed to load.\r\n *\r\n * @name Phaser.Loader.MultiFile#failed\r\n * @type {integer}\r\n * @default 0\r\n * @since 3.7.0\r\n */\r\n this.failed = 0;\r\n\r\n /**\r\n * A storage container for transient data that the loading files need.\r\n *\r\n * @name Phaser.Loader.MultiFile#config\r\n * @type {any}\r\n * @since 3.7.0\r\n */\r\n this.config = {};\r\n\r\n /**\r\n * A reference to the Loaders baseURL at the time this MultiFile was created.\r\n * Used to populate child-files.\r\n *\r\n * @name Phaser.Loader.MultiFile#baseURL\r\n * @type {string}\r\n * @since 3.20.0\r\n */\r\n this.baseURL = loader.baseURL;\r\n\r\n /**\r\n * A reference to the Loaders path at the time this MultiFile was created.\r\n * Used to populate child-files.\r\n *\r\n * @name Phaser.Loader.MultiFile#path\r\n * @type {string}\r\n * @since 3.20.0\r\n */\r\n this.path = loader.path;\r\n\r\n /**\r\n * A reference to the Loaders prefix at the time this MultiFile was created.\r\n * Used to populate child-files.\r\n *\r\n * @name Phaser.Loader.MultiFile#prefix\r\n * @type {string}\r\n * @since 3.20.0\r\n */\r\n this.prefix = loader.prefix;\r\n\r\n // Link the files\r\n for (var i = 0; i < files.length; i++)\r\n {\r\n files[i].multiFile = this;\r\n }\r\n },\r\n\r\n /**\r\n * Checks if this MultiFile is ready to process its children or not.\r\n *\r\n * @method Phaser.Loader.MultiFile#isReadyToProcess\r\n * @since 3.7.0\r\n *\r\n * @return {boolean} `true` if all children of this MultiFile have loaded, otherwise `false`.\r\n */\r\n isReadyToProcess: function ()\r\n {\r\n return (this.pending === 0 && this.failed === 0 && !this.complete);\r\n },\r\n\r\n /**\r\n * Adds another child to this MultiFile, increases the pending count and resets the completion status.\r\n *\r\n * @method Phaser.Loader.MultiFile#addToMultiFile\r\n * @since 3.7.0\r\n *\r\n * @param {Phaser.Loader.File} files - The File to add to this MultiFile.\r\n *\r\n * @return {Phaser.Loader.MultiFile} This MultiFile instance.\r\n */\r\n addToMultiFile: function (file)\r\n {\r\n this.files.push(file);\r\n\r\n file.multiFile = this;\r\n\r\n this.pending++;\r\n\r\n this.complete = false;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Called by each File when it finishes loading.\r\n *\r\n * @method Phaser.Loader.MultiFile#onFileComplete\r\n * @since 3.7.0\r\n *\r\n * @param {Phaser.Loader.File} file - The File that has completed processing.\r\n */\r\n onFileComplete: function (file)\r\n {\r\n var index = this.files.indexOf(file);\r\n\r\n if (index !== -1)\r\n {\r\n this.pending--;\r\n }\r\n },\r\n\r\n /**\r\n * Called by each File that fails to load.\r\n *\r\n * @method Phaser.Loader.MultiFile#onFileFailed\r\n * @since 3.7.0\r\n *\r\n * @param {Phaser.Loader.File} file - The File that has failed to load.\r\n */\r\n onFileFailed: function (file)\r\n {\r\n var index = this.files.indexOf(file);\r\n\r\n if (index !== -1)\r\n {\r\n this.failed++;\r\n }\r\n }\r\n\r\n});\r\n\r\nmodule.exports = MultiFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvTXVsdGlGaWxlLmpzPzYwOWQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnRUFBZ0I7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxxQkFBcUI7QUFDaEM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLGtCQUFrQjtBQUN6QztBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1CQUFtQjtBQUNsQztBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1CQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvTXVsdGlGaWxlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi91dGlscy9DbGFzcycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBNdWx0aUZpbGUgaXMgYSBzcGVjaWFsIGtpbmQgb2YgcGFyZW50IHRoYXQgY29udGFpbnMgdHdvLCBvciBtb3JlLCBGaWxlcyBhcyBjaGlsZHJlbiBhbmQgbG9va3MgYWZ0ZXJcclxuICogdGhlIGxvYWRpbmcgYW5kIHByb2Nlc3Npbmcgb2YgdGhlbSBhbGwuIEl0IGlzIGNvbW1vbmx5IGV4dGVuZGVkIGFuZCB1c2VkIGFzIGEgYmFzZSBjbGFzcyBmb3IgZmlsZSB0eXBlcyBzdWNoIGFzIEF0bGFzSlNPTiBvciBCaXRtYXBGb250LlxyXG4gKiBcclxuICogWW91IHNob3VsZG4ndCBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgYSBNdWx0aUZpbGUgZGlyZWN0bHksIGJ1dCBzaG91bGQgZXh0ZW5kIGl0IHdpdGggeW91ciBvd24gY2xhc3MsIHNldHRpbmcgYSBjdXN0b20gdHlwZSBhbmQgcHJvY2Vzc2luZyBtZXRob2RzLlxyXG4gKlxyXG4gKiBAY2xhc3MgTXVsdGlGaWxlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuTG9hZGVyXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy43LjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gbG9hZGVyIC0gVGhlIExvYWRlciB0aGF0IGlzIGdvaW5nIHRvIGxvYWQgdGhpcyBGaWxlLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBmaWxlIHR5cGUgc3RyaW5nIGZvciBzb3J0aW5nIHdpdGhpbiB0aGUgTG9hZGVyLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgZmlsZSB3aXRoaW4gdGhlIGxvYWRlci5cclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkZpbGVbXX0gZmlsZXMgLSBBbiBhcnJheSBvZiBGaWxlcyB0aGF0IG1ha2UtdXAgdGhpcyBNdWx0aUZpbGUuXHJcbiAqL1xyXG52YXIgTXVsdGlGaWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIE11bHRpRmlsZSAobG9hZGVyLCB0eXBlLCBrZXksIGZpbGVzKVxyXG4gICAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBMb2FkZXIgdGhhdCBpcyBnb2luZyB0byBsb2FkIHRoaXMgZmlsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTXVsdGlGaWxlI2xvYWRlclxyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn1cclxuICAgICAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxvYWRlciA9IGxvYWRlcjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIGZpbGUgdHlwZSBzdHJpbmcgZm9yIHNvcnRpbmcgd2l0aGluIHRoZSBMb2FkZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLk11bHRpRmlsZSN0eXBlXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBVbmlxdWUgY2FjaGUga2V5ICh1bmlxdWUgd2l0aGluIGl0cyBmaWxlIHR5cGUpXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLk11bHRpRmlsZSNrZXlcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMua2V5ID0ga2V5O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgY3VycmVudCBpbmRleCBiZWluZyB1c2VkIGJ5IG11bHRpLWZpbGUgbG9hZGVycyB0byBhdm9pZCBrZXkgY2xhc2hlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTXVsdGlGaWxlI211bHRpS2V5SW5kZXhcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm11bHRpS2V5SW5kZXggPSBsb2FkZXIubXVsdGlLZXlJbmRleCsrO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBcnJheSBvZiBmaWxlcyB0aGF0IG1ha2UgdXAgdGhpcyBNdWx0aUZpbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLk11bHRpRmlsZSNmaWxlc1xyXG4gICAgICAgICAqIEB0eXBlIHtQaGFzZXIuTG9hZGVyLkZpbGVbXX1cclxuICAgICAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmZpbGVzID0gZmlsZXM7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjb21wbGV0aW9uIHN0YXR1cyBvZiB0aGlzIE11bHRpRmlsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTXVsdGlGaWxlI2NvbXBsZXRlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBudW1iZXIgb2YgZmlsZXMgdG8gbG9hZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTXVsdGlGaWxlI3BlbmRpbmdcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgdGhpcy5wZW5kaW5nID0gZmlsZXMubGVuZ3RoO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgbnVtYmVyIG9mIGZpbGVzIHRoYXQgZmFpbGVkIHRvIGxvYWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLk11bHRpRmlsZSNmYWlsZWRcclxuICAgICAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5mYWlsZWQgPSAwO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHN0b3JhZ2UgY29udGFpbmVyIGZvciB0cmFuc2llbnQgZGF0YSB0aGF0IHRoZSBsb2FkaW5nIGZpbGVzIG5lZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLk11bHRpRmlsZSNjb25maWdcclxuICAgICAgICAgKiBAdHlwZSB7YW55fVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuY29uZmlnID0ge307XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBMb2FkZXJzIGJhc2VVUkwgYXQgdGhlIHRpbWUgdGhpcyBNdWx0aUZpbGUgd2FzIGNyZWF0ZWQuXHJcbiAgICAgICAgICogVXNlZCB0byBwb3B1bGF0ZSBjaGlsZC1maWxlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTXVsdGlGaWxlI2Jhc2VVUkxcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqIEBzaW5jZSAzLjIwLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJhc2VVUkwgPSBsb2FkZXIuYmFzZVVSTDtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIExvYWRlcnMgcGF0aCBhdCB0aGUgdGltZSB0aGlzIE11bHRpRmlsZSB3YXMgY3JlYXRlZC5cclxuICAgICAgICAgKiBVc2VkIHRvIHBvcHVsYXRlIGNoaWxkLWZpbGVzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5NdWx0aUZpbGUjcGF0aFxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGF0aCA9IGxvYWRlci5wYXRoO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgTG9hZGVycyBwcmVmaXggYXQgdGhlIHRpbWUgdGhpcyBNdWx0aUZpbGUgd2FzIGNyZWF0ZWQuXHJcbiAgICAgICAgICogVXNlZCB0byBwb3B1bGF0ZSBjaGlsZC1maWxlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuTXVsdGlGaWxlI3ByZWZpeFxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICogQHNpbmNlIDMuMjAuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucHJlZml4ID0gbG9hZGVyLnByZWZpeDtcclxuXHJcbiAgICAgICAgLy8gIExpbmsgdGhlIGZpbGVzXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpbGVzW2ldLm11bHRpRmlsZSA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiB0aGlzIE11bHRpRmlsZSBpcyByZWFkeSB0byBwcm9jZXNzIGl0cyBjaGlsZHJlbiBvciBub3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLk11bHRpRmlsZSNpc1JlYWR5VG9Qcm9jZXNzXHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgYWxsIGNoaWxkcmVuIG9mIHRoaXMgTXVsdGlGaWxlIGhhdmUgbG9hZGVkLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgaXNSZWFkeVRvUHJvY2VzczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMucGVuZGluZyA9PT0gMCAmJiB0aGlzLmZhaWxlZCA9PT0gMCAmJiAhdGhpcy5jb21wbGV0ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhbm90aGVyIGNoaWxkIHRvIHRoaXMgTXVsdGlGaWxlLCBpbmNyZWFzZXMgdGhlIHBlbmRpbmcgY291bnQgYW5kIHJlc2V0cyB0aGUgY29tcGxldGlvbiBzdGF0dXMuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLk11bHRpRmlsZSNhZGRUb011bHRpRmlsZVxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkZpbGV9IGZpbGVzIC0gVGhlIEZpbGUgdG8gYWRkIHRvIHRoaXMgTXVsdGlGaWxlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge1BoYXNlci5Mb2FkZXIuTXVsdGlGaWxlfSBUaGlzIE11bHRpRmlsZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgYWRkVG9NdWx0aUZpbGU6IGZ1bmN0aW9uIChmaWxlKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZmlsZXMucHVzaChmaWxlKTtcclxuXHJcbiAgICAgICAgZmlsZS5tdWx0aUZpbGUgPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLnBlbmRpbmcrKztcclxuXHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYnkgZWFjaCBGaWxlIHdoZW4gaXQgZmluaXNoZXMgbG9hZGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTXVsdGlGaWxlI29uRmlsZUNvbXBsZXRlXHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuRmlsZX0gZmlsZSAtIFRoZSBGaWxlIHRoYXQgaGFzIGNvbXBsZXRlZCBwcm9jZXNzaW5nLlxyXG4gICAgICovXHJcbiAgICBvbkZpbGVDb21wbGV0ZTogZnVuY3Rpb24gKGZpbGUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5maWxlcy5pbmRleE9mKGZpbGUpO1xyXG5cclxuICAgICAgICBpZiAoaW5kZXggIT09IC0xKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nLS07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBieSBlYWNoIEZpbGUgdGhhdCBmYWlscyB0byBsb2FkLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5NdWx0aUZpbGUjb25GaWxlRmFpbGVkXHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuRmlsZX0gZmlsZSAtIFRoZSBGaWxlIHRoYXQgaGFzIGZhaWxlZCB0byBsb2FkLlxyXG4gICAgICovXHJcbiAgICBvbkZpbGVGYWlsZWQ6IGZ1bmN0aW9uIChmaWxlKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuZmlsZXMuaW5kZXhPZihmaWxlKTtcclxuXHJcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZmFpbGVkKys7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE11bHRpRmlsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/MultiFile.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/XHRLoader.js":
/*!*****************************************************!*\
!*** ./node_modules/phaser/src/loader/XHRLoader.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar MergeXHRSettings = __webpack_require__(/*! ./MergeXHRSettings */ \"./node_modules/phaser/src/loader/MergeXHRSettings.js\");\r\n\r\n/**\r\n * Creates a new XMLHttpRequest (xhr) object based on the given File and XHRSettings\r\n * and starts the download of it. It uses the Files own XHRSettings and merges them\r\n * with the global XHRSettings object to set the xhr values before download.\r\n *\r\n * @function Phaser.Loader.XHRLoader\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.File} file - The File to download.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} globalXHRSettings - The global XHRSettings object.\r\n *\r\n * @return {XMLHttpRequest} The XHR object.\r\n */\r\nvar XHRLoader = function (file, globalXHRSettings)\r\n{\r\n var config = MergeXHRSettings(globalXHRSettings, file.xhrSettings);\r\n\r\n var xhr = new XMLHttpRequest();\r\n\r\n xhr.open('GET', file.src, config.async, config.user, config.password);\r\n\r\n xhr.responseType = file.xhrSettings.responseType;\r\n xhr.timeout = config.timeout;\r\n\r\n if (config.header && config.headerValue)\r\n {\r\n xhr.setRequestHeader(config.header, config.headerValue);\r\n }\r\n\r\n if (config.requestedWith)\r\n {\r\n xhr.setRequestHeader('X-Requested-With', config.requestedWith);\r\n }\r\n\r\n if (config.overrideMimeType)\r\n {\r\n xhr.overrideMimeType(config.overrideMimeType);\r\n }\r\n\r\n // After a successful request, the xhr.response property will contain the requested data as a DOMString, ArrayBuffer, Blob, or Document (depending on what was set for responseType.)\r\n\r\n xhr.onload = file.onLoad.bind(file, xhr);\r\n xhr.onerror = file.onError.bind(file, xhr);\r\n xhr.onprogress = file.onProgress.bind(file);\r\n\r\n // This is the only standard method, the ones above are browser additions (maybe not universal?)\r\n // xhr.onreadystatechange\r\n\r\n xhr.send();\r\n\r\n return xhr;\r\n};\r\n\r\nmodule.exports = XHRLoader;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvWEhSTG9hZGVyLmpzPzBiZDkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLGdGQUFvQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbUJBQW1CO0FBQzlCLFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0EsWUFBWSxlQUFlO0FBQzNCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9YSFJMb2FkZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBNZXJnZVhIUlNldHRpbmdzID0gcmVxdWlyZSgnLi9NZXJnZVhIUlNldHRpbmdzJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBYTUxIdHRwUmVxdWVzdCAoeGhyKSBvYmplY3QgYmFzZWQgb24gdGhlIGdpdmVuIEZpbGUgYW5kIFhIUlNldHRpbmdzXHJcbiAqIGFuZCBzdGFydHMgdGhlIGRvd25sb2FkIG9mIGl0LiBJdCB1c2VzIHRoZSBGaWxlcyBvd24gWEhSU2V0dGluZ3MgYW5kIG1lcmdlcyB0aGVtXHJcbiAqIHdpdGggdGhlIGdsb2JhbCBYSFJTZXR0aW5ncyBvYmplY3QgdG8gc2V0IHRoZSB4aHIgdmFsdWVzIGJlZm9yZSBkb3dubG9hZC5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5Mb2FkZXIuWEhSTG9hZGVyXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuRmlsZX0gZmlsZSAtIFRoZSBGaWxlIHRvIGRvd25sb2FkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IGdsb2JhbFhIUlNldHRpbmdzIC0gVGhlIGdsb2JhbCBYSFJTZXR0aW5ncyBvYmplY3QuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1hNTEh0dHBSZXF1ZXN0fSBUaGUgWEhSIG9iamVjdC5cclxuICovXHJcbnZhciBYSFJMb2FkZXIgPSBmdW5jdGlvbiAoZmlsZSwgZ2xvYmFsWEhSU2V0dGluZ3MpXHJcbntcclxuICAgIHZhciBjb25maWcgPSBNZXJnZVhIUlNldHRpbmdzKGdsb2JhbFhIUlNldHRpbmdzLCBmaWxlLnhoclNldHRpbmdzKTtcclxuXHJcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcblxyXG4gICAgeGhyLm9wZW4oJ0dFVCcsIGZpbGUuc3JjLCBjb25maWcuYXN5bmMsIGNvbmZpZy51c2VyLCBjb25maWcucGFzc3dvcmQpO1xyXG5cclxuICAgIHhoci5yZXNwb25zZVR5cGUgPSBmaWxlLnhoclNldHRpbmdzLnJlc3BvbnNlVHlwZTtcclxuICAgIHhoci50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XHJcblxyXG4gICAgaWYgKGNvbmZpZy5oZWFkZXIgJiYgY29uZmlnLmhlYWRlclZhbHVlKVxyXG4gICAge1xyXG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKGNvbmZpZy5oZWFkZXIsIGNvbmZpZy5oZWFkZXJWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5yZXF1ZXN0ZWRXaXRoKVxyXG4gICAge1xyXG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdYLVJlcXVlc3RlZC1XaXRoJywgY29uZmlnLnJlcXVlc3RlZFdpdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcub3ZlcnJpZGVNaW1lVHlwZSlcclxuICAgIHtcclxuICAgICAgICB4aHIub3ZlcnJpZGVNaW1lVHlwZShjb25maWcub3ZlcnJpZGVNaW1lVHlwZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWZ0ZXIgYSBzdWNjZXNzZnVsIHJlcXVlc3QsIHRoZSB4aHIucmVzcG9uc2UgcHJvcGVydHkgd2lsbCBjb250YWluIHRoZSByZXF1ZXN0ZWQgZGF0YSBhcyBhIERPTVN0cmluZywgQXJyYXlCdWZmZXIsIEJsb2IsIG9yIERvY3VtZW50IChkZXBlbmRpbmcgb24gd2hhdCB3YXMgc2V0IGZvciByZXNwb25zZVR5cGUuKVxyXG5cclxuICAgIHhoci5vbmxvYWQgPSBmaWxlLm9uTG9hZC5iaW5kKGZpbGUsIHhocik7XHJcbiAgICB4aHIub25lcnJvciA9IGZpbGUub25FcnJvci5iaW5kKGZpbGUsIHhocik7XHJcbiAgICB4aHIub25wcm9ncmVzcyA9IGZpbGUub25Qcm9ncmVzcy5iaW5kKGZpbGUpO1xyXG5cclxuICAgIC8vICBUaGlzIGlzIHRoZSBvbmx5IHN0YW5kYXJkIG1ldGhvZCwgdGhlIG9uZXMgYWJvdmUgYXJlIGJyb3dzZXIgYWRkaXRpb25zIChtYXliZSBub3QgdW5pdmVyc2FsPylcclxuICAgIC8vIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2VcclxuXHJcbiAgICB4aHIuc2VuZCgpO1xyXG5cclxuICAgIHJldHVybiB4aHI7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFhIUkxvYWRlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/XHRLoader.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/XHRSettings.js":
/*!*******************************************************!*\
!*** ./node_modules/phaser/src/loader/XHRSettings.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * Creates an XHRSettings Object with default values.\r\n *\r\n * @function Phaser.Loader.XHRSettings\r\n * @since 3.0.0\r\n *\r\n * @param {XMLHttpRequestResponseType} [responseType=''] - The responseType, such as 'text'.\r\n * @param {boolean} [async=true] - Should the XHR request use async or not?\r\n * @param {string} [user=''] - Optional username for the XHR request.\r\n * @param {string} [password=''] - Optional password for the XHR request.\r\n * @param {integer} [timeout=0] - Optional XHR timeout value.\r\n *\r\n * @return {Phaser.Types.Loader.XHRSettingsObject} The XHRSettings object as used by the Loader.\r\n */\r\nvar XHRSettings = function (responseType, async, user, password, timeout)\r\n{\r\n if (responseType === undefined) { responseType = ''; }\r\n if (async === undefined) { async = true; }\r\n if (user === undefined) { user = ''; }\r\n if (password === undefined) { password = ''; }\r\n if (timeout === undefined) { timeout = 0; }\r\n\r\n // Before sending a request, set the xhr.responseType to \"text\",\r\n // \"arraybuffer\", \"blob\", or \"document\", depending on your data needs.\r\n // Note, setting xhr.responseType = '' (or omitting) will default the response to \"text\".\r\n\r\n return {\r\n\r\n // Ignored by the Loader, only used by File.\r\n responseType: responseType,\r\n\r\n async: async,\r\n\r\n // credentials\r\n user: user,\r\n password: password,\r\n\r\n // timeout in ms (0 = no timeout)\r\n timeout: timeout,\r\n\r\n // setRequestHeader\r\n header: undefined,\r\n headerValue: undefined,\r\n requestedWith: false,\r\n\r\n // overrideMimeType\r\n overrideMimeType: undefined\r\n\r\n };\r\n};\r\n\r\nmodule.exports = XHRSettings;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvWEhSU2V0dGluZ3MuanM/NWY3MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxzQ0FBc0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLG1CQUFtQjtBQUN4RCw4QkFBOEIsY0FBYztBQUM1Qyw2QkFBNkIsV0FBVztBQUN4QyxpQ0FBaUMsZUFBZTtBQUNoRCxnQ0FBZ0MsYUFBYTs7QUFFN0M7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbG9hZGVyL1hIUlNldHRpbmdzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhbiBYSFJTZXR0aW5ncyBPYmplY3Qgd2l0aCBkZWZhdWx0IHZhbHVlcy5cclxuICpcclxuICogQGZ1bmN0aW9uIFBoYXNlci5Mb2FkZXIuWEhSU2V0dGluZ3NcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7WE1MSHR0cFJlcXVlc3RSZXNwb25zZVR5cGV9IFtyZXNwb25zZVR5cGU9JyddIC0gVGhlIHJlc3BvbnNlVHlwZSwgc3VjaCBhcyAndGV4dCcuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FzeW5jPXRydWVdIC0gU2hvdWxkIHRoZSBYSFIgcmVxdWVzdCB1c2UgYXN5bmMgb3Igbm90P1xyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VzZXI9JyddIC0gT3B0aW9uYWwgdXNlcm5hbWUgZm9yIHRoZSBYSFIgcmVxdWVzdC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFtwYXNzd29yZD0nJ10gLSBPcHRpb25hbCBwYXNzd29yZCBmb3IgdGhlIFhIUiByZXF1ZXN0LlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFt0aW1lb3V0PTBdIC0gT3B0aW9uYWwgWEhSIHRpbWVvdXQgdmFsdWUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFRoZSBYSFJTZXR0aW5ncyBvYmplY3QgYXMgdXNlZCBieSB0aGUgTG9hZGVyLlxyXG4gKi9cclxudmFyIFhIUlNldHRpbmdzID0gZnVuY3Rpb24gKHJlc3BvbnNlVHlwZSwgYXN5bmMsIHVzZXIsIHBhc3N3b3JkLCB0aW1lb3V0KVxyXG57XHJcbiAgICBpZiAocmVzcG9uc2VUeXBlID09PSB1bmRlZmluZWQpIHsgcmVzcG9uc2VUeXBlID0gJyc7IH1cclxuICAgIGlmIChhc3luYyA9PT0gdW5kZWZpbmVkKSB7IGFzeW5jID0gdHJ1ZTsgfVxyXG4gICAgaWYgKHVzZXIgPT09IHVuZGVmaW5lZCkgeyB1c2VyID0gJyc7IH1cclxuICAgIGlmIChwYXNzd29yZCA9PT0gdW5kZWZpbmVkKSB7IHBhc3N3b3JkID0gJyc7IH1cclxuICAgIGlmICh0aW1lb3V0ID09PSB1bmRlZmluZWQpIHsgdGltZW91dCA9IDA7IH1cclxuXHJcbiAgICAvLyBCZWZvcmUgc2VuZGluZyBhIHJlcXVlc3QsIHNldCB0aGUgeGhyLnJlc3BvbnNlVHlwZSB0byBcInRleHRcIixcclxuICAgIC8vIFwiYXJyYXlidWZmZXJcIiwgXCJibG9iXCIsIG9yIFwiZG9jdW1lbnRcIiwgZGVwZW5kaW5nIG9uIHlvdXIgZGF0YSBuZWVkcy5cclxuICAgIC8vIE5vdGUsIHNldHRpbmcgeGhyLnJlc3BvbnNlVHlwZSA9ICcnIChvciBvbWl0dGluZykgd2lsbCBkZWZhdWx0IHRoZSByZXNwb25zZSB0byBcInRleHRcIi5cclxuXHJcbiAgICByZXR1cm4ge1xyXG5cclxuICAgICAgICAvLyAgSWdub3JlZCBieSB0aGUgTG9hZGVyLCBvbmx5IHVzZWQgYnkgRmlsZS5cclxuICAgICAgICByZXNwb25zZVR5cGU6IHJlc3BvbnNlVHlwZSxcclxuXHJcbiAgICAgICAgYXN5bmM6IGFzeW5jLFxyXG5cclxuICAgICAgICAvLyAgY3JlZGVudGlhbHNcclxuICAgICAgICB1c2VyOiB1c2VyLFxyXG4gICAgICAgIHBhc3N3b3JkOiBwYXNzd29yZCxcclxuXHJcbiAgICAgICAgLy8gIHRpbWVvdXQgaW4gbXMgKDAgPSBubyB0aW1lb3V0KVxyXG4gICAgICAgIHRpbWVvdXQ6IHRpbWVvdXQsXHJcblxyXG4gICAgICAgIC8vICBzZXRSZXF1ZXN0SGVhZGVyXHJcbiAgICAgICAgaGVhZGVyOiB1bmRlZmluZWQsXHJcbiAgICAgICAgaGVhZGVyVmFsdWU6IHVuZGVmaW5lZCxcclxuICAgICAgICByZXF1ZXN0ZWRXaXRoOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLy8gIG92ZXJyaWRlTWltZVR5cGVcclxuICAgICAgICBvdmVycmlkZU1pbWVUeXBlOiB1bmRlZmluZWRcclxuXHJcbiAgICB9O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBYSFJTZXR0aW5ncztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/XHRSettings.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/const.js":
/*!*************************************************!*\
!*** ./node_modules/phaser/src/loader/const.js ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar FILE_CONST = {\r\n\r\n /**\r\n * The Loader is idle.\r\n * \r\n * @name Phaser.Loader.LOADER_IDLE\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n LOADER_IDLE: 0,\r\n\r\n /**\r\n * The Loader is actively loading.\r\n * \r\n * @name Phaser.Loader.LOADER_LOADING\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n LOADER_LOADING: 1,\r\n\r\n /**\r\n * The Loader is processing files is has loaded.\r\n * \r\n * @name Phaser.Loader.LOADER_PROCESSING\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n LOADER_PROCESSING: 2,\r\n\r\n /**\r\n * The Loader has completed loading and processing.\r\n * \r\n * @name Phaser.Loader.LOADER_COMPLETE\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n LOADER_COMPLETE: 3,\r\n\r\n /**\r\n * The Loader is shutting down.\r\n * \r\n * @name Phaser.Loader.LOADER_SHUTDOWN\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n LOADER_SHUTDOWN: 4,\r\n\r\n /**\r\n * The Loader has been destroyed.\r\n * \r\n * @name Phaser.Loader.LOADER_DESTROYED\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n LOADER_DESTROYED: 5,\r\n\r\n /**\r\n * File is in the load queue but not yet started\r\n * \r\n * @name Phaser.Loader.FILE_PENDING\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n FILE_PENDING: 10,\r\n\r\n /**\r\n * File has been started to load by the loader (onLoad called)\r\n * \r\n * @name Phaser.Loader.FILE_LOADING\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n FILE_LOADING: 11,\r\n\r\n /**\r\n * File has loaded successfully, awaiting processing \r\n * \r\n * @name Phaser.Loader.FILE_LOADED\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n FILE_LOADED: 12,\r\n\r\n /**\r\n * File failed to load\r\n * \r\n * @name Phaser.Loader.FILE_FAILED\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n FILE_FAILED: 13,\r\n\r\n /**\r\n * File is being processed (onProcess callback)\r\n * \r\n * @name Phaser.Loader.FILE_PROCESSING\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n FILE_PROCESSING: 14,\r\n\r\n /**\r\n * The File has errored somehow during processing.\r\n * \r\n * @name Phaser.Loader.FILE_ERRORED\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n FILE_ERRORED: 16,\r\n\r\n /**\r\n * File has finished processing.\r\n * \r\n * @name Phaser.Loader.FILE_COMPLETE\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n FILE_COMPLETE: 17,\r\n\r\n /**\r\n * File has been destroyed\r\n * \r\n * @name Phaser.Loader.FILE_DESTROYED\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n FILE_DESTROYED: 18,\r\n\r\n /**\r\n * File was populated from local data and doesn't need an HTTP request\r\n * \r\n * @name Phaser.Loader.FILE_POPULATED\r\n * @type {integer}\r\n * @since 3.0.0\r\n */\r\n FILE_POPULATED: 19\r\n\r\n};\r\n\r\nmodule.exports = FILE_CONST;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvY29uc3QuanM/MzhiMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvY29uc3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBGSUxFX0NPTlNUID0ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIExvYWRlciBpcyBpZGxlLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkxPQURFUl9JRExFXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBMT0FERVJfSURMRTogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBMb2FkZXIgaXMgYWN0aXZlbHkgbG9hZGluZy5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5MT0FERVJfTE9BRElOR1xyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgTE9BREVSX0xPQURJTkc6IDEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgTG9hZGVyIGlzIHByb2Nlc3NpbmcgZmlsZXMgaXMgaGFzIGxvYWRlZC5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5MT0FERVJfUFJPQ0VTU0lOR1xyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgTE9BREVSX1BST0NFU1NJTkc6IDIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgTG9hZGVyIGhhcyBjb21wbGV0ZWQgbG9hZGluZyBhbmQgcHJvY2Vzc2luZy5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5MT0FERVJfQ09NUExFVEVcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIExPQURFUl9DT01QTEVURTogMyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBMb2FkZXIgaXMgc2h1dHRpbmcgZG93bi5cclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5MT0FERVJfU0hVVERPV05cclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIExPQURFUl9TSFVURE9XTjogNCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBMb2FkZXIgaGFzIGJlZW4gZGVzdHJveWVkLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkxPQURFUl9ERVNUUk9ZRURcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIExPQURFUl9ERVNUUk9ZRUQ6IDUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaWxlIGlzIGluIHRoZSBsb2FkIHF1ZXVlIGJ1dCBub3QgeWV0IHN0YXJ0ZWRcclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5GSUxFX1BFTkRJTkdcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEZJTEVfUEVORElORzogMTAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaWxlIGhhcyBiZWVuIHN0YXJ0ZWQgdG8gbG9hZCBieSB0aGUgbG9hZGVyIChvbkxvYWQgY2FsbGVkKVxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkZJTEVfTE9BRElOR1xyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgRklMRV9MT0FESU5HOiAxMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbGUgaGFzIGxvYWRlZCBzdWNjZXNzZnVsbHksIGF3YWl0aW5nIHByb2Nlc3NpbmcgICAgXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuRklMRV9MT0FERURcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEZJTEVfTE9BREVEOiAxMixcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbGUgZmFpbGVkIHRvIGxvYWRcclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5GSUxFX0ZBSUxFRFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgRklMRV9GQUlMRUQ6IDEzLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmlsZSBpcyBiZWluZyBwcm9jZXNzZWQgKG9uUHJvY2VzcyBjYWxsYmFjaylcclxuICAgICAqIFxyXG4gICAgICogQG5hbWUgUGhhc2VyLkxvYWRlci5GSUxFX1BST0NFU1NJTkdcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEZJTEVfUFJPQ0VTU0lORzogMTQsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgRmlsZSBoYXMgZXJyb3JlZCBzb21laG93IGR1cmluZyBwcm9jZXNzaW5nLlxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkZJTEVfRVJST1JFRFxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgRklMRV9FUlJPUkVEOiAxNixcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbGUgaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcuXHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuRklMRV9DT01QTEVURVxyXG4gICAgICogQHR5cGUge2ludGVnZXJ9XHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgRklMRV9DT01QTEVURTogMTcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaWxlIGhhcyBiZWVuIGRlc3Ryb3llZFxyXG4gICAgICogXHJcbiAgICAgKiBAbmFtZSBQaGFzZXIuTG9hZGVyLkZJTEVfREVTVFJPWUVEXHJcbiAgICAgKiBAdHlwZSB7aW50ZWdlcn1cclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBGSUxFX0RFU1RST1lFRDogMTgsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaWxlIHdhcyBwb3B1bGF0ZWQgZnJvbSBsb2NhbCBkYXRhIGFuZCBkb2Vzbid0IG5lZWQgYW4gSFRUUCByZXF1ZXN0XHJcbiAgICAgKiBcclxuICAgICAqIEBuYW1lIFBoYXNlci5Mb2FkZXIuRklMRV9QT1BVTEFURURcclxuICAgICAqIEB0eXBlIHtpbnRlZ2VyfVxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIEZJTEVfUE9QVUxBVEVEOiAxOVxyXG5cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRklMRV9DT05TVDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/const.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/events/ADD_EVENT.js":
/*!************************************************************!*\
!*** ./node_modules/phaser/src/loader/events/ADD_EVENT.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Loader Plugin Add File Event.\r\n * \r\n * This event is dispatched when a new file is successfully added to the Loader and placed into the load queue.\r\n * \r\n * Listen to it from a Scene using: `this.load.on('addfile', listener)`.\r\n * \r\n * If you add lots of files to a Loader from a `preload` method, it will dispatch this event for each one of them.\r\n *\r\n * @event Phaser.Loader.Events#ADD\r\n * @since 3.0.0\r\n * \r\n * @param {string} key - The unique key of the file that was added to the Loader.\r\n * @param {string} type - The [file type]{@link Phaser.Loader.File#type} string of the file that was added to the Loader, i.e. `image`.\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader Plugin that dispatched this event.\r\n * @param {Phaser.Loader.File} file - A reference to the File which was added to the Loader.\r\n */\r\nmodule.exports = 'addfile';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL0FERF9FVkVOVC5qcz85MGJjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPLHdCQUF3Qiw4QkFBOEI7QUFDeEUsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxtQkFBbUI7QUFDOUI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9ldmVudHMvQUREX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIExvYWRlciBQbHVnaW4gQWRkIEZpbGUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgd2hlbiBhIG5ldyBmaWxlIGlzIHN1Y2Nlc3NmdWxseSBhZGRlZCB0byB0aGUgTG9hZGVyIGFuZCBwbGFjZWQgaW50byB0aGUgbG9hZCBxdWV1ZS5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmxvYWQub24oJ2FkZGZpbGUnLCBsaXN0ZW5lcilgLlxyXG4gKiBcclxuICogSWYgeW91IGFkZCBsb3RzIG9mIGZpbGVzIHRvIGEgTG9hZGVyIGZyb20gYSBgcHJlbG9hZGAgbWV0aG9kLCBpdCB3aWxsIGRpc3BhdGNoIHRoaXMgZXZlbnQgZm9yIGVhY2ggb25lIG9mIHRoZW0uXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuTG9hZGVyLkV2ZW50cyNBRERcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHVuaXF1ZSBrZXkgb2YgdGhlIGZpbGUgdGhhdCB3YXMgYWRkZWQgdG8gdGhlIExvYWRlci5cclxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBUaGUgW2ZpbGUgdHlwZV17QGxpbmsgUGhhc2VyLkxvYWRlci5GaWxlI3R5cGV9IHN0cmluZyBvZiB0aGUgZmlsZSB0aGF0IHdhcyBhZGRlZCB0byB0aGUgTG9hZGVyLCBpLmUuIGBpbWFnZWAuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IGxvYWRlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBMb2FkZXIgUGx1Z2luIHRoYXQgZGlzcGF0Y2hlZCB0aGlzIGV2ZW50LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuRmlsZX0gZmlsZSAtIEEgcmVmZXJlbmNlIHRvIHRoZSBGaWxlIHdoaWNoIHdhcyBhZGRlZCB0byB0aGUgTG9hZGVyLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnYWRkZmlsZSc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/events/ADD_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/events/COMPLETE_EVENT.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/loader/events/COMPLETE_EVENT.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Loader Plugin Complete Event.\r\n * \r\n * This event is dispatched when the Loader has fully processed everything in the load queue.\r\n * By this point every loaded file will now be in its associated cache and ready for use.\r\n * \r\n * Listen to it from a Scene using: `this.load.on('complete', listener)`.\r\n *\r\n * @event Phaser.Loader.Events#COMPLETE\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader Plugin that dispatched this event.\r\n * @param {integer} totalComplete - The total number of files that successfully loaded.\r\n * @param {integer} totalFailed - The total number of files that failed to load.\r\n */\r\nmodule.exports = 'complete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL0NPTVBMRVRFX0VWRU5ULmpzPzYxODYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL0NPTVBMRVRFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIExvYWRlciBQbHVnaW4gQ29tcGxldGUgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgd2hlbiB0aGUgTG9hZGVyIGhhcyBmdWxseSBwcm9jZXNzZWQgZXZlcnl0aGluZyBpbiB0aGUgbG9hZCBxdWV1ZS5cclxuICogQnkgdGhpcyBwb2ludCBldmVyeSBsb2FkZWQgZmlsZSB3aWxsIG5vdyBiZSBpbiBpdHMgYXNzb2NpYXRlZCBjYWNoZSBhbmQgcmVhZHkgZm9yIHVzZS5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmxvYWQub24oJ2NvbXBsZXRlJywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Mb2FkZXIuRXZlbnRzI0NPTVBMRVRFXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gbG9hZGVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIExvYWRlciBQbHVnaW4gdGhhdCBkaXNwYXRjaGVkIHRoaXMgZXZlbnQuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gdG90YWxDb21wbGV0ZSAtIFRoZSB0b3RhbCBudW1iZXIgb2YgZmlsZXMgdGhhdCBzdWNjZXNzZnVsbHkgbG9hZGVkLlxyXG4gKiBAcGFyYW0ge2ludGVnZXJ9IHRvdGFsRmFpbGVkIC0gVGhlIHRvdGFsIG51bWJlciBvZiBmaWxlcyB0aGF0IGZhaWxlZCB0byBsb2FkLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnY29tcGxldGUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/events/COMPLETE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/events/FILE_COMPLETE_EVENT.js":
/*!**********************************************************************!*\
!*** ./node_modules/phaser/src/loader/events/FILE_COMPLETE_EVENT.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The File Load Complete Event.\r\n * \r\n * This event is dispatched by the Loader Plugin when any file in the queue finishes loading.\r\n * \r\n * Listen to it from a Scene using: `this.load.on('filecomplete', listener)`.\r\n * \r\n * You can also listen for the completion of a specific file. See the [FILE_KEY_COMPLETE]{@linkcode Phaser.Loader.Events#event:FILE_KEY_COMPLETE} event.\r\n *\r\n * @event Phaser.Loader.Events#FILE_COMPLETE\r\n * @since 3.0.0\r\n * \r\n * @param {string} key - The key of the file that just loaded and finished processing.\r\n * @param {string} type - The [file type]{@link Phaser.Loader.File#type} of the file that just loaded, i.e. `image`.\r\n * @param {any} data - The raw data the file contained.\r\n */\r\nmodule.exports = 'filecomplete';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL0ZJTEVfQ09NUExFVEVfRVZFTlQuanM/MmFhZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwRkFBMEYsdURBQXVEO0FBQ2pKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTyx3QkFBd0IsOEJBQThCO0FBQ3hFLFdBQVcsSUFBSTtBQUNmO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL0ZJTEVfQ09NUExFVEVfRVZFTlQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGUgRmlsZSBMb2FkIENvbXBsZXRlIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBMb2FkZXIgUGx1Z2luIHdoZW4gYW55IGZpbGUgaW4gdGhlIHF1ZXVlIGZpbmlzaGVzIGxvYWRpbmcuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNjZW5lIHVzaW5nOiBgdGhpcy5sb2FkLm9uKCdmaWxlY29tcGxldGUnLCBsaXN0ZW5lcilgLlxyXG4gKiBcclxuICogWW91IGNhbiBhbHNvIGxpc3RlbiBmb3IgdGhlIGNvbXBsZXRpb24gb2YgYSBzcGVjaWZpYyBmaWxlLiBTZWUgdGhlIFtGSUxFX0tFWV9DT01QTEVURV17QGxpbmtjb2RlIFBoYXNlci5Mb2FkZXIuRXZlbnRzI2V2ZW50OkZJTEVfS0VZX0NPTVBMRVRFfSBldmVudC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Mb2FkZXIuRXZlbnRzI0ZJTEVfQ09NUExFVEVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgZmlsZSB0aGF0IGp1c3QgbG9hZGVkIGFuZCBmaW5pc2hlZCBwcm9jZXNzaW5nLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBbZmlsZSB0eXBlXXtAbGluayBQaGFzZXIuTG9hZGVyLkZpbGUjdHlwZX0gb2YgdGhlIGZpbGUgdGhhdCBqdXN0IGxvYWRlZCwgaS5lLiBgaW1hZ2VgLlxyXG4gKiBAcGFyYW0ge2FueX0gZGF0YSAtIFRoZSByYXcgZGF0YSB0aGUgZmlsZSBjb250YWluZWQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdmaWxlY29tcGxldGUnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/events/FILE_COMPLETE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/events/FILE_KEY_COMPLETE_EVENT.js":
/*!**************************************************************************!*\
!*** ./node_modules/phaser/src/loader/events/FILE_KEY_COMPLETE_EVENT.js ***!
\**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The File Load Complete Event.\r\n * \r\n * This event is dispatched by the Loader Plugin when any file in the queue finishes loading.\r\n * \r\n * It uses a special dynamic event name constructed from the key and type of the file.\r\n * \r\n * For example, if you have loaded an `image` with a key of `monster`, you can listen for it\r\n * using the following:\r\n *\r\n * ```javascript\r\n * this.load.on('filecomplete-image-monster', function (key, type, data) {\r\n * // Your handler code\r\n * });\r\n * ```\r\n *\r\n * Or, if you have loaded a texture `atlas` with a key of `Level1`:\r\n * \r\n * ```javascript\r\n * this.load.on('filecomplete-atlas-Level1', function (key, type, data) {\r\n * // Your handler code\r\n * });\r\n * ```\r\n * \r\n * Or, if you have loaded a sprite sheet with a key of `Explosion` and a prefix of `GAMEOVER`:\r\n * \r\n * ```javascript\r\n * this.load.on('filecomplete-spritesheet-GAMEOVERExplosion', function (key, type, data) {\r\n * // Your handler code\r\n * });\r\n * ```\r\n * \r\n * You can also listen for the generic completion of files. See the [FILE_COMPLETE]{@linkcode Phaser.Loader.Events#event:FILE_COMPLETE} event.\r\n *\r\n * @event Phaser.Loader.Events#FILE_KEY_COMPLETE\r\n * @since 3.0.0\r\n * \r\n * @param {string} key - The key of the file that just loaded and finished processing.\r\n * @param {string} type - The [file type]{@link Phaser.Loader.File#type} of the file that just loaded, i.e. `image`.\r\n * @param {any} data - The raw data the file contained.\r\n */\r\nmodule.exports = 'filecomplete-';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL0ZJTEVfS0VZX0NPTVBMRVRFX0VWRU5ULmpzPzRmZDEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxvRkFBb0YsbURBQW1EO0FBQ3ZJO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTyx3QkFBd0IsOEJBQThCO0FBQ3hFLFdBQVcsSUFBSTtBQUNmO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL0ZJTEVfS0VZX0NPTVBMRVRFX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEZpbGUgTG9hZCBDb21wbGV0ZSBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgTG9hZGVyIFBsdWdpbiB3aGVuIGFueSBmaWxlIGluIHRoZSBxdWV1ZSBmaW5pc2hlcyBsb2FkaW5nLlxyXG4gKiBcclxuICogSXQgdXNlcyBhIHNwZWNpYWwgZHluYW1pYyBldmVudCBuYW1lIGNvbnN0cnVjdGVkIGZyb20gdGhlIGtleSBhbmQgdHlwZSBvZiB0aGUgZmlsZS5cclxuICogXHJcbiAqIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBsb2FkZWQgYW4gYGltYWdlYCB3aXRoIGEga2V5IG9mIGBtb25zdGVyYCwgeW91IGNhbiBsaXN0ZW4gZm9yIGl0XHJcbiAqIHVzaW5nIHRoZSBmb2xsb3dpbmc6XHJcbiAqXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLm9uKCdmaWxlY29tcGxldGUtaW1hZ2UtbW9uc3RlcicsIGZ1bmN0aW9uIChrZXksIHR5cGUsIGRhdGEpIHtcclxuICogICAgIC8vIFlvdXIgaGFuZGxlciBjb2RlXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogT3IsIGlmIHlvdSBoYXZlIGxvYWRlZCBhIHRleHR1cmUgYGF0bGFzYCB3aXRoIGEga2V5IG9mIGBMZXZlbDFgOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQub24oJ2ZpbGVjb21wbGV0ZS1hdGxhcy1MZXZlbDEnLCBmdW5jdGlvbiAoa2V5LCB0eXBlLCBkYXRhKSB7XHJcbiAqICAgICAvLyBZb3VyIGhhbmRsZXIgY29kZVxyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqIFxyXG4gKiBPciwgaWYgeW91IGhhdmUgbG9hZGVkIGEgc3ByaXRlIHNoZWV0IHdpdGggYSBrZXkgb2YgYEV4cGxvc2lvbmAgYW5kIGEgcHJlZml4IG9mIGBHQU1FT1ZFUmA6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5vbignZmlsZWNvbXBsZXRlLXNwcml0ZXNoZWV0LUdBTUVPVkVSRXhwbG9zaW9uJywgZnVuY3Rpb24gKGtleSwgdHlwZSwgZGF0YSkge1xyXG4gKiAgICAgLy8gWW91ciBoYW5kbGVyIGNvZGVcclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKiBcclxuICogWW91IGNhbiBhbHNvIGxpc3RlbiBmb3IgdGhlIGdlbmVyaWMgY29tcGxldGlvbiBvZiBmaWxlcy4gU2VlIHRoZSBbRklMRV9DT01QTEVURV17QGxpbmtjb2RlIFBoYXNlci5Mb2FkZXIuRXZlbnRzI2V2ZW50OkZJTEVfQ09NUExFVEV9IGV2ZW50LlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkxvYWRlci5FdmVudHMjRklMRV9LRVlfQ09NUExFVEVcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgZmlsZSB0aGF0IGp1c3QgbG9hZGVkIGFuZCBmaW5pc2hlZCBwcm9jZXNzaW5nLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBbZmlsZSB0eXBlXXtAbGluayBQaGFzZXIuTG9hZGVyLkZpbGUjdHlwZX0gb2YgdGhlIGZpbGUgdGhhdCBqdXN0IGxvYWRlZCwgaS5lLiBgaW1hZ2VgLlxyXG4gKiBAcGFyYW0ge2FueX0gZGF0YSAtIFRoZSByYXcgZGF0YSB0aGUgZmlsZSBjb250YWluZWQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdmaWxlY29tcGxldGUtJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/events/FILE_KEY_COMPLETE_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/events/FILE_LOAD_ERROR_EVENT.js":
/*!************************************************************************!*\
!*** ./node_modules/phaser/src/loader/events/FILE_LOAD_ERROR_EVENT.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The File Load Error Event.\r\n * \r\n * This event is dispatched by the Loader Plugin when a file fails to load.\r\n * \r\n * Listen to it from a Scene using: `this.load.on('loaderror', listener)`.\r\n *\r\n * @event Phaser.Loader.Events#FILE_LOAD_ERROR\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Loader.File} file - A reference to the File which errored during load.\r\n */\r\nmodule.exports = 'loaderror';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL0ZJTEVfTE9BRF9FUlJPUl9FVkVOVC5qcz83YjI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbUJBQW1CO0FBQzlCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL0ZJTEVfTE9BRF9FUlJPUl9FVkVOVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBGaWxlIExvYWQgRXJyb3IgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYnkgdGhlIExvYWRlciBQbHVnaW4gd2hlbiBhIGZpbGUgZmFpbHMgdG8gbG9hZC5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmxvYWQub24oJ2xvYWRlcnJvcicsIGxpc3RlbmVyKWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuTG9hZGVyLkV2ZW50cyNGSUxFX0xPQURfRVJST1JcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuRmlsZX0gZmlsZSAtIEEgcmVmZXJlbmNlIHRvIHRoZSBGaWxlIHdoaWNoIGVycm9yZWQgZHVyaW5nIGxvYWQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdsb2FkZXJyb3InO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/events/FILE_LOAD_ERROR_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/events/FILE_LOAD_EVENT.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/loader/events/FILE_LOAD_EVENT.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The File Load Event.\r\n * \r\n * This event is dispatched by the Loader Plugin when a file finishes loading,\r\n * but _before_ it is processed and added to the internal Phaser caches.\r\n * \r\n * Listen to it from a Scene using: `this.load.on('load', listener)`.\r\n *\r\n * @event Phaser.Loader.Events#FILE_LOAD\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Loader.File} file - A reference to the File which just finished loading.\r\n */\r\nmodule.exports = 'load';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL0ZJTEVfTE9BRF9FVkVOVC5qcz8wZDVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxtQkFBbUI7QUFDOUI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9ldmVudHMvRklMRV9MT0FEX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEZpbGUgTG9hZCBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgTG9hZGVyIFBsdWdpbiB3aGVuIGEgZmlsZSBmaW5pc2hlcyBsb2FkaW5nLFxyXG4gKiBidXQgX2JlZm9yZV8gaXQgaXMgcHJvY2Vzc2VkIGFuZCBhZGRlZCB0byB0aGUgaW50ZXJuYWwgUGhhc2VyIGNhY2hlcy5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmxvYWQub24oJ2xvYWQnLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkxvYWRlci5FdmVudHMjRklMRV9MT0FEXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkZpbGV9IGZpbGUgLSBBIHJlZmVyZW5jZSB0byB0aGUgRmlsZSB3aGljaCBqdXN0IGZpbmlzaGVkIGxvYWRpbmcuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdsb2FkJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/events/FILE_LOAD_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/events/FILE_PROGRESS_EVENT.js":
/*!**********************************************************************!*\
!*** ./node_modules/phaser/src/loader/events/FILE_PROGRESS_EVENT.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The File Load Progress Event.\r\n * \r\n * This event is dispatched by the Loader Plugin during the load of a file, if the browser receives a DOM ProgressEvent and\r\n * the `lengthComputable` event property is true. Depending on the size of the file and browser in use, this may, or may not happen.\r\n * \r\n * Listen to it from a Scene using: `this.load.on('fileprogress', listener)`.\r\n *\r\n * @event Phaser.Loader.Events#FILE_PROGRESS\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Loader.File} file - A reference to the File which errored during load.\r\n * @param {number} percentComplete - A value between 0 and 1 indicating how 'complete' this file is.\r\n */\r\nmodule.exports = 'fileprogress';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL0ZJTEVfUFJPR1JFU1NfRVZFTlQuanM/ODg0MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbUJBQW1CO0FBQzlCLFdBQVcsT0FBTztBQUNsQjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbG9hZGVyL2V2ZW50cy9GSUxFX1BST0dSRVNTX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIEZpbGUgTG9hZCBQcm9ncmVzcyBFdmVudC5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUgTG9hZGVyIFBsdWdpbiBkdXJpbmcgdGhlIGxvYWQgb2YgYSBmaWxlLCBpZiB0aGUgYnJvd3NlciByZWNlaXZlcyBhIERPTSBQcm9ncmVzc0V2ZW50IGFuZFxyXG4gKiB0aGUgYGxlbmd0aENvbXB1dGFibGVgIGV2ZW50IHByb3BlcnR5IGlzIHRydWUuIERlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiB0aGUgZmlsZSBhbmQgYnJvd3NlciBpbiB1c2UsIHRoaXMgbWF5LCBvciBtYXkgbm90IGhhcHBlbi5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmxvYWQub24oJ2ZpbGVwcm9ncmVzcycsIGxpc3RlbmVyKWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuTG9hZGVyLkV2ZW50cyNGSUxFX1BST0dSRVNTXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKiBcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkZpbGV9IGZpbGUgLSBBIHJlZmVyZW5jZSB0byB0aGUgRmlsZSB3aGljaCBlcnJvcmVkIGR1cmluZyBsb2FkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gcGVyY2VudENvbXBsZXRlIC0gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBob3cgJ2NvbXBsZXRlJyB0aGlzIGZpbGUgaXMuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdmaWxlcHJvZ3Jlc3MnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/events/FILE_PROGRESS_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/events/POST_PROCESS_EVENT.js":
/*!*********************************************************************!*\
!*** ./node_modules/phaser/src/loader/events/POST_PROCESS_EVENT.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Loader Plugin Post Process Event.\r\n * \r\n * This event is dispatched by the Loader Plugin when the Loader has finished loading everything in the load queue.\r\n * It is dispatched before the internal lists are cleared and each File is destroyed.\r\n * \r\n * Use this hook to perform any last minute processing of files that can only happen once the\r\n * Loader has completed, but prior to it emitting the `complete` event.\r\n * \r\n * Listen to it from a Scene using: `this.load.on('postprocess', listener)`.\r\n *\r\n * @event Phaser.Loader.Events#POST_PROCESS\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader Plugin that dispatched this event.\r\n */\r\nmodule.exports = 'postprocess';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL1BPU1RfUFJPQ0VTU19FVkVOVC5qcz84MWFhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9ldmVudHMvUE9TVF9QUk9DRVNTX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIExvYWRlciBQbHVnaW4gUG9zdCBQcm9jZXNzIEV2ZW50LlxyXG4gKiBcclxuICogVGhpcyBldmVudCBpcyBkaXNwYXRjaGVkIGJ5IHRoZSBMb2FkZXIgUGx1Z2luIHdoZW4gdGhlIExvYWRlciBoYXMgZmluaXNoZWQgbG9hZGluZyBldmVyeXRoaW5nIGluIHRoZSBsb2FkIHF1ZXVlLlxyXG4gKiBJdCBpcyBkaXNwYXRjaGVkIGJlZm9yZSB0aGUgaW50ZXJuYWwgbGlzdHMgYXJlIGNsZWFyZWQgYW5kIGVhY2ggRmlsZSBpcyBkZXN0cm95ZWQuXHJcbiAqIFxyXG4gKiBVc2UgdGhpcyBob29rIHRvIHBlcmZvcm0gYW55IGxhc3QgbWludXRlIHByb2Nlc3Npbmcgb2YgZmlsZXMgdGhhdCBjYW4gb25seSBoYXBwZW4gb25jZSB0aGVcclxuICogTG9hZGVyIGhhcyBjb21wbGV0ZWQsIGJ1dCBwcmlvciB0byBpdCBlbWl0dGluZyB0aGUgYGNvbXBsZXRlYCBldmVudC5cclxuICogXHJcbiAqIExpc3RlbiB0byBpdCBmcm9tIGEgU2NlbmUgdXNpbmc6IGB0aGlzLmxvYWQub24oJ3Bvc3Rwcm9jZXNzJywgbGlzdGVuZXIpYC5cclxuICpcclxuICogQGV2ZW50IFBoYXNlci5Mb2FkZXIuRXZlbnRzI1BPU1RfUFJPQ0VTU1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IGxvYWRlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBMb2FkZXIgUGx1Z2luIHRoYXQgZGlzcGF0Y2hlZCB0aGlzIGV2ZW50LlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAncG9zdHByb2Nlc3MnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/events/POST_PROCESS_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/events/PROGRESS_EVENT.js":
/*!*****************************************************************!*\
!*** ./node_modules/phaser/src/loader/events/PROGRESS_EVENT.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Loader Plugin Progress Event.\r\n * \r\n * This event is dispatched when the Loader updates its load progress, typically as a result of a file having completed loading.\r\n * \r\n * Listen to it from a Scene using: `this.load.on('progress', listener)`.\r\n *\r\n * @event Phaser.Loader.Events#PROGRESS\r\n * @since 3.0.0\r\n * \r\n * @param {number} progress - The current progress of the load. A value between 0 and 1.\r\n */\r\nmodule.exports = 'progress';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL1BST0dSRVNTX0VWRU5ULmpzP2FlMzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL1BST0dSRVNTX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIExvYWRlciBQbHVnaW4gUHJvZ3Jlc3MgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgd2hlbiB0aGUgTG9hZGVyIHVwZGF0ZXMgaXRzIGxvYWQgcHJvZ3Jlc3MsIHR5cGljYWxseSBhcyBhIHJlc3VsdCBvZiBhIGZpbGUgaGF2aW5nIGNvbXBsZXRlZCBsb2FkaW5nLlxyXG4gKiBcclxuICogTGlzdGVuIHRvIGl0IGZyb20gYSBTY2VuZSB1c2luZzogYHRoaXMubG9hZC5vbigncHJvZ3Jlc3MnLCBsaXN0ZW5lcilgLlxyXG4gKlxyXG4gKiBAZXZlbnQgUGhhc2VyLkxvYWRlci5FdmVudHMjUFJPR1JFU1NcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqIFxyXG4gKiBAcGFyYW0ge251bWJlcn0gcHJvZ3Jlc3MgLSBUaGUgY3VycmVudCBwcm9ncmVzcyBvZiB0aGUgbG9hZC4gQSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9ICdwcm9ncmVzcyc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/events/PROGRESS_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/events/START_EVENT.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/loader/events/START_EVENT.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * The Loader Plugin Start Event.\r\n * \r\n * This event is dispatched when the Loader starts running. At this point load progress is zero.\r\n * \r\n * This event is dispatched even if there aren't any files in the load queue.\r\n * \r\n * Listen to it from a Scene using: `this.load.on('start', listener)`.\r\n *\r\n * @event Phaser.Loader.Events#START\r\n * @since 3.0.0\r\n * \r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader Plugin that dispatched this event.\r\n */\r\nmodule.exports = 'start';\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL1NUQVJUX0VWRU5ULmpzPzY1MGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkJBQTJCO0FBQ3RDO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL1NUQVJUX0VWRU5ULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIExvYWRlciBQbHVnaW4gU3RhcnQgRXZlbnQuXHJcbiAqIFxyXG4gKiBUaGlzIGV2ZW50IGlzIGRpc3BhdGNoZWQgd2hlbiB0aGUgTG9hZGVyIHN0YXJ0cyBydW5uaW5nLiBBdCB0aGlzIHBvaW50IGxvYWQgcHJvZ3Jlc3MgaXMgemVyby5cclxuICogXHJcbiAqIFRoaXMgZXZlbnQgaXMgZGlzcGF0Y2hlZCBldmVuIGlmIHRoZXJlIGFyZW4ndCBhbnkgZmlsZXMgaW4gdGhlIGxvYWQgcXVldWUuXHJcbiAqIFxyXG4gKiBMaXN0ZW4gdG8gaXQgZnJvbSBhIFNjZW5lIHVzaW5nOiBgdGhpcy5sb2FkLm9uKCdzdGFydCcsIGxpc3RlbmVyKWAuXHJcbiAqXHJcbiAqIEBldmVudCBQaGFzZXIuTG9hZGVyLkV2ZW50cyNTVEFSVFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IGxvYWRlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBMb2FkZXIgUGx1Z2luIHRoYXQgZGlzcGF0Y2hlZCB0aGlzIGV2ZW50LlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSAnc3RhcnQnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/events/START_EVENT.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/events/index.js":
/*!********************************************************!*\
!*** ./node_modules/phaser/src/loader/events/index.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\n/**\r\n * @namespace Phaser.Loader.Events\r\n */\r\n\r\nmodule.exports = {\r\n\r\n ADD: __webpack_require__(/*! ./ADD_EVENT */ \"./node_modules/phaser/src/loader/events/ADD_EVENT.js\"),\r\n COMPLETE: __webpack_require__(/*! ./COMPLETE_EVENT */ \"./node_modules/phaser/src/loader/events/COMPLETE_EVENT.js\"),\r\n FILE_COMPLETE: __webpack_require__(/*! ./FILE_COMPLETE_EVENT */ \"./node_modules/phaser/src/loader/events/FILE_COMPLETE_EVENT.js\"),\r\n FILE_KEY_COMPLETE: __webpack_require__(/*! ./FILE_KEY_COMPLETE_EVENT */ \"./node_modules/phaser/src/loader/events/FILE_KEY_COMPLETE_EVENT.js\"),\r\n FILE_LOAD_ERROR: __webpack_require__(/*! ./FILE_LOAD_ERROR_EVENT */ \"./node_modules/phaser/src/loader/events/FILE_LOAD_ERROR_EVENT.js\"),\r\n FILE_LOAD: __webpack_require__(/*! ./FILE_LOAD_EVENT */ \"./node_modules/phaser/src/loader/events/FILE_LOAD_EVENT.js\"),\r\n FILE_PROGRESS: __webpack_require__(/*! ./FILE_PROGRESS_EVENT */ \"./node_modules/phaser/src/loader/events/FILE_PROGRESS_EVENT.js\"),\r\n POST_PROCESS: __webpack_require__(/*! ./POST_PROCESS_EVENT */ \"./node_modules/phaser/src/loader/events/POST_PROCESS_EVENT.js\"),\r\n PROGRESS: __webpack_require__(/*! ./PROGRESS_EVENT */ \"./node_modules/phaser/src/loader/events/PROGRESS_EVENT.js\"),\r\n START: __webpack_require__(/*! ./START_EVENT */ \"./node_modules/phaser/src/loader/events/START_EVENT.js\")\r\n\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZXZlbnRzL2luZGV4LmpzPzFkN2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxTQUFTLG1CQUFPLENBQUMseUVBQWE7QUFDOUIsY0FBYyxtQkFBTyxDQUFDLG1GQUFrQjtBQUN4QyxtQkFBbUIsbUJBQU8sQ0FBQyw2RkFBdUI7QUFDbEQsdUJBQXVCLG1CQUFPLENBQUMscUdBQTJCO0FBQzFELHFCQUFxQixtQkFBTyxDQUFDLGlHQUF5QjtBQUN0RCxlQUFlLG1CQUFPLENBQUMscUZBQW1CO0FBQzFDLG1CQUFtQixtQkFBTyxDQUFDLDZGQUF1QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQywyRkFBc0I7QUFDaEQsY0FBYyxtQkFBTyxDQUFDLG1GQUFrQjtBQUN4QyxXQUFXLG1CQUFPLENBQUMsNkVBQWU7O0FBRWxDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbG9hZGVyL2V2ZW50cy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgUGhhc2VyLkxvYWRlci5FdmVudHNcclxuICovXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBBREQ6IHJlcXVpcmUoJy4vQUREX0VWRU5UJyksXHJcbiAgICBDT01QTEVURTogcmVxdWlyZSgnLi9DT01QTEVURV9FVkVOVCcpLFxyXG4gICAgRklMRV9DT01QTEVURTogcmVxdWlyZSgnLi9GSUxFX0NPTVBMRVRFX0VWRU5UJyksXHJcbiAgICBGSUxFX0tFWV9DT01QTEVURTogcmVxdWlyZSgnLi9GSUxFX0tFWV9DT01QTEVURV9FVkVOVCcpLFxyXG4gICAgRklMRV9MT0FEX0VSUk9SOiByZXF1aXJlKCcuL0ZJTEVfTE9BRF9FUlJPUl9FVkVOVCcpLFxyXG4gICAgRklMRV9MT0FEOiByZXF1aXJlKCcuL0ZJTEVfTE9BRF9FVkVOVCcpLFxyXG4gICAgRklMRV9QUk9HUkVTUzogcmVxdWlyZSgnLi9GSUxFX1BST0dSRVNTX0VWRU5UJyksXHJcbiAgICBQT1NUX1BST0NFU1M6IHJlcXVpcmUoJy4vUE9TVF9QUk9DRVNTX0VWRU5UJyksXHJcbiAgICBQUk9HUkVTUzogcmVxdWlyZSgnLi9QUk9HUkVTU19FVkVOVCcpLFxyXG4gICAgU1RBUlQ6IHJlcXVpcmUoJy4vU1RBUlRfRVZFTlQnKVxyXG5cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/events/index.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/filetypes/AnimationJSONFile.js":
/*!***********************************************************************!*\
!*** ./node_modules/phaser/src/loader/filetypes/AnimationJSONFile.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar JSONFile = __webpack_require__(/*! ./JSONFile.js */ \"./node_modules/phaser/src/loader/filetypes/JSONFile.js\");\r\nvar LoaderEvents = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/loader/events/index.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Animation JSON File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#animation method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#animation.\r\n *\r\n * @class AnimationJSONFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.JSONFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.json`, i.e. if `key` was \"alien\" then the URL will be \"alien.json\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n * @param {string} [dataKey] - When the JSON file loads only this property will be stored in the Cache.\r\n */\r\nvar AnimationJSONFile = new Class({\r\n\r\n Extends: JSONFile,\r\n\r\n initialize:\r\n\r\n // url can either be a string, in which case it is treated like a proper url, or an object, in which case it is treated as a ready-made JS Object\r\n // dataKey allows you to pluck a specific object out of the JSON and put just that into the cache, rather than the whole thing\r\n\r\n function AnimationJSONFile (loader, key, url, xhrSettings, dataKey)\r\n {\r\n JSONFile.call(this, loader, key, url, xhrSettings, dataKey);\r\n\r\n this.type = 'animationJSON';\r\n },\r\n\r\n /**\r\n * Called automatically by Loader.nextFile.\r\n * This method controls what extra work this File does with its loaded data.\r\n *\r\n * @method Phaser.Loader.FileTypes.AnimationJSONFile#onProcess\r\n * @since 3.7.0\r\n */\r\n onProcess: function ()\r\n {\r\n // We need to hook into this event:\r\n this.loader.once(LoaderEvents.POST_PROCESS, this.onLoadComplete, this);\r\n\r\n // But the rest is the same as a normal JSON file\r\n JSONFile.prototype.onProcess.call(this);\r\n },\r\n\r\n /**\r\n * Called at the end of the load process, after the Loader has finished all files in its queue.\r\n *\r\n * @method Phaser.Loader.FileTypes.AnimationJSONFile#onLoadComplete\r\n * @since 3.7.0\r\n */\r\n onLoadComplete: function ()\r\n {\r\n this.loader.systems.anims.fromJSON(this.data);\r\n\r\n this.pendingDestroy();\r\n }\r\n\r\n});\r\n\r\n/**\r\n * Adds an Animation JSON Data file, or array of Animation JSON files, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n * this.load.animation('baddieAnims', 'files/BaddieAnims.json');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * If you call this from outside of `preload` then you are responsible for starting the Loader afterwards and monitoring\r\n * its events to know when it's safe to use the asset. Please see the Phaser.Loader.LoaderPlugin class for more details.\r\n * \r\n * The key must be a unique String. It is used to add the file to the global JSON Cache upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the JSON Cache.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the JSON Cache first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.animation({\r\n * key: 'baddieAnims',\r\n * url: 'files/BaddieAnims.json'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.JSONFileConfig` for more details.\r\n *\r\n * Once the file has finished loading it will automatically be passed to the global Animation Managers `fromJSON` method.\r\n * This will parse all of the JSON data and create animation data from it. This process happens at the very end\r\n * of the Loader, once every other file in the load queue has finished. The reason for this is to allow you to load\r\n * both animation data and the images it relies upon in the same load call.\r\n *\r\n * Once the animation data has been parsed you will be able to play animations using that data.\r\n * Please see the Animation Manager `fromJSON` method for more details about the format and playback.\r\n * \r\n * You can also access the raw animation data from its Cache using its key:\r\n * \r\n * ```javascript\r\n * this.load.animation('baddieAnims', 'files/BaddieAnims.json');\r\n * // and later in your game ...\r\n * var data = this.cache.json.get('baddieAnims');\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `LEVEL1.` and the key was `Waves` the final key will be `LEVEL1.Waves` and\r\n * this is what you would use to retrieve the text from the JSON Cache.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"data\"\r\n * and no URL is given then the Loader will set the URL to be \"data.json\". It will always add `.json` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * You can also optionally provide a `dataKey` to use. This allows you to extract only a part of the JSON and store it in the Cache,\r\n * rather than the whole file. For example, if your JSON data had a structure like this:\r\n * \r\n * ```json\r\n * {\r\n * \"level1\": {\r\n * \"baddies\": {\r\n * \"aliens\": {},\r\n * \"boss\": {}\r\n * }\r\n * },\r\n * \"level2\": {},\r\n * \"level3\": {}\r\n * }\r\n * ```\r\n *\r\n * And if you only wanted to create animations from the `boss` data, then you could pass `level1.baddies.boss`as the `dataKey`.\r\n *\r\n * Note: The ability to load this type of file will only be available if the JSON File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#animation\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.JSONFileConfig|Phaser.Types.Loader.FileTypes.JSONFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.json`, i.e. if `key` was \"alien\" then the URL will be \"alien.json\".\r\n * @param {string} [dataKey] - When the Animation JSON file loads only this property will be stored in the Cache and used to create animation data.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('animation', function (key, url, dataKey, xhrSettings)\r\n{\r\n // Supports an Object file definition in the key argument\r\n // Or an array of objects in the key argument\r\n // Or a single entry where all arguments have been defined\r\n\r\n if (Array.isArray(key))\r\n {\r\n for (var i = 0; i < key.length; i++)\r\n {\r\n this.addFile(new AnimationJSONFile(this, key[i]));\r\n }\r\n }\r\n else\r\n {\r\n this.addFile(new AnimationJSONFile(this, key, url, xhrSettings, dataKey));\r\n }\r\n\r\n return this;\r\n});\r\n\r\nmodule.exports = AnimationJSONFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0FuaW1hdGlvbkpTT05GaWxlLmpzPzIzZGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsdUJBQXVCLG1CQUFPLENBQUMsaUZBQXFCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyw2RUFBZTtBQUN0QyxtQkFBbUIsbUJBQU8sQ0FBQyxtRUFBVzs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcsc0RBQXNEO0FBQ2pFLFdBQVcsT0FBTztBQUNsQixXQUFXLHNDQUFzQztBQUNqRCxXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxR0FBcUc7QUFDaEgsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLHNDQUFzQztBQUNqRDtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCLGdCQUFnQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9maWxldHlwZXMvQW5pbWF0aW9uSlNPTkZpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBGaWxlVHlwZXNNYW5hZ2VyID0gcmVxdWlyZSgnLi4vRmlsZVR5cGVzTWFuYWdlcicpO1xyXG52YXIgSlNPTkZpbGUgPSByZXF1aXJlKCcuL0pTT05GaWxlLmpzJyk7XHJcbnZhciBMb2FkZXJFdmVudHMgPSByZXF1aXJlKCcuLi9ldmVudHMnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgc2luZ2xlIEFuaW1hdGlvbiBKU09OIEZpbGUgc3VpdGFibGUgZm9yIGxvYWRpbmcgYnkgdGhlIExvYWRlci5cclxuICpcclxuICogVGhlc2UgYXJlIGNyZWF0ZWQgd2hlbiB5b3UgdXNlIHRoZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhbmltYXRpb24gbWV0aG9kIGFuZCBhcmUgbm90IHR5cGljYWxseSBjcmVhdGVkIGRpcmVjdGx5LlxyXG4gKiBcclxuICogRm9yIGRvY3VtZW50YXRpb24gYWJvdXQgd2hhdCBhbGwgdGhlIGFyZ3VtZW50cyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIG1lYW4gcGxlYXNlIHNlZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhbmltYXRpb24uXHJcbiAqXHJcbiAqIEBjbGFzcyBBbmltYXRpb25KU09ORmlsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLkZpbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gbG9hZGVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIExvYWRlciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIGZpbGUuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5KU09ORmlsZUNvbmZpZyl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5qc29uYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4uanNvblwiLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt4aHJTZXR0aW5nc10gLSBFeHRyYSBYSFIgU2V0dGluZ3Mgc3BlY2lmaWNhbGx5IGZvciB0aGlzIGZpbGUuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YUtleV0gLSBXaGVuIHRoZSBKU09OIGZpbGUgbG9hZHMgb25seSB0aGlzIHByb3BlcnR5IHdpbGwgYmUgc3RvcmVkIGluIHRoZSBDYWNoZS5cclxuICovXHJcbnZhciBBbmltYXRpb25KU09ORmlsZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogSlNPTkZpbGUsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICAvLyAgdXJsIGNhbiBlaXRoZXIgYmUgYSBzdHJpbmcsIGluIHdoaWNoIGNhc2UgaXQgaXMgdHJlYXRlZCBsaWtlIGEgcHJvcGVyIHVybCwgb3IgYW4gb2JqZWN0LCBpbiB3aGljaCBjYXNlIGl0IGlzIHRyZWF0ZWQgYXMgYSByZWFkeS1tYWRlIEpTIE9iamVjdFxyXG4gICAgLy8gIGRhdGFLZXkgYWxsb3dzIHlvdSB0byBwbHVjayBhIHNwZWNpZmljIG9iamVjdCBvdXQgb2YgdGhlIEpTT04gYW5kIHB1dCBqdXN0IHRoYXQgaW50byB0aGUgY2FjaGUsIHJhdGhlciB0aGFuIHRoZSB3aG9sZSB0aGluZ1xyXG5cclxuICAgIGZ1bmN0aW9uIEFuaW1hdGlvbkpTT05GaWxlIChsb2FkZXIsIGtleSwgdXJsLCB4aHJTZXR0aW5ncywgZGF0YUtleSlcclxuICAgIHtcclxuICAgICAgICBKU09ORmlsZS5jYWxsKHRoaXMsIGxvYWRlciwga2V5LCB1cmwsIHhoclNldHRpbmdzLCBkYXRhS2V5KTtcclxuXHJcbiAgICAgICAgdGhpcy50eXBlID0gJ2FuaW1hdGlvbkpTT04nO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IExvYWRlci5uZXh0RmlsZS5cclxuICAgICAqIFRoaXMgbWV0aG9kIGNvbnRyb2xzIHdoYXQgZXh0cmEgd29yayB0aGlzIEZpbGUgZG9lcyB3aXRoIGl0cyBsb2FkZWQgZGF0YS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLkFuaW1hdGlvbkpTT05GaWxlI29uUHJvY2Vzc1xyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKi9cclxuICAgIG9uUHJvY2VzczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICAvLyAgV2UgbmVlZCB0byBob29rIGludG8gdGhpcyBldmVudDpcclxuICAgICAgICB0aGlzLmxvYWRlci5vbmNlKExvYWRlckV2ZW50cy5QT1NUX1BST0NFU1MsIHRoaXMub25Mb2FkQ29tcGxldGUsIHRoaXMpO1xyXG5cclxuICAgICAgICAvLyAgQnV0IHRoZSByZXN0IGlzIHRoZSBzYW1lIGFzIGEgbm9ybWFsIEpTT04gZmlsZVxyXG4gICAgICAgIEpTT05GaWxlLnByb3RvdHlwZS5vblByb2Nlc3MuY2FsbCh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYXQgdGhlIGVuZCBvZiB0aGUgbG9hZCBwcm9jZXNzLCBhZnRlciB0aGUgTG9hZGVyIGhhcyBmaW5pc2hlZCBhbGwgZmlsZXMgaW4gaXRzIHF1ZXVlLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuQW5pbWF0aW9uSlNPTkZpbGUjb25Mb2FkQ29tcGxldGVcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBvbkxvYWRDb21wbGV0ZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmxvYWRlci5zeXN0ZW1zLmFuaW1zLmZyb21KU09OKHRoaXMuZGF0YSk7XHJcblxyXG4gICAgICAgIHRoaXMucGVuZGluZ0Rlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgYW4gQW5pbWF0aW9uIEpTT04gRGF0YSBmaWxlLCBvciBhcnJheSBvZiBBbmltYXRpb24gSlNPTiBmaWxlcywgdG8gdGhlIGN1cnJlbnQgbG9hZCBxdWV1ZS5cclxuICpcclxuICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIGZyb20gd2l0aGluIHlvdXIgU2NlbmUncyBgcHJlbG9hZGAsIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGVzIHlvdSB3aXNoIHRvIGxvYWQ6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGZ1bmN0aW9uIHByZWxvYWQgKClcclxuICoge1xyXG4gKiAgICAgdGhpcy5sb2FkLmFuaW1hdGlvbignYmFkZGllQW5pbXMnLCAnZmlsZXMvQmFkZGllQW5pbXMuanNvbicpO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgZmlsZSBpcyAqKm5vdCoqIGxvYWRlZCByaWdodCBhd2F5LiBJdCBpcyBhZGRlZCB0byBhIHF1ZXVlIHJlYWR5IHRvIGJlIGxvYWRlZCBlaXRoZXIgd2hlbiB0aGUgbG9hZGVyIHN0YXJ0cyxcclxuICogb3IgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIHdoZW4gdGhlIG5leHQgZnJlZSBsb2FkIHNsb3QgYmVjb21lcyBhdmFpbGFibGUuIFRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGlmIHlvdVxyXG4gKiBhcmUgY2FsbGluZyB0aGlzIGZyb20gd2l0aGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QsIG9yIGEgcmVsYXRlZCBjYWxsYmFjay4gQmVjYXVzZSB0aGUgZmlsZSBpcyBxdWV1ZWRcclxuICogaXQgbWVhbnMgeW91IGNhbm5vdCB1c2UgdGhlIGZpbGUgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgYnV0IG11c3Qgd2FpdCBmb3IgdGhlIGZpbGUgdG8gY29tcGxldGUuXHJcbiAqIFRoZSB0eXBpY2FsIGZsb3cgZm9yIGEgUGhhc2VyIFNjZW5lIGlzIHRoYXQgeW91IGxvYWQgYXNzZXRzIGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QgYW5kIHRoZW4gd2hlbiB0aGVcclxuICogU2NlbmUncyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aG9zZSBhc3NldHMgYXJlIHJlYWR5IGZvciB1c2UgYW5kIGhhdmUgYmVlblxyXG4gKiBsb2FkZWQuXHJcbiAqIFxyXG4gKiBJZiB5b3UgY2FsbCB0aGlzIGZyb20gb3V0c2lkZSBvZiBgcHJlbG9hZGAgdGhlbiB5b3UgYXJlIHJlc3BvbnNpYmxlIGZvciBzdGFydGluZyB0aGUgTG9hZGVyIGFmdGVyd2FyZHMgYW5kIG1vbml0b3JpbmdcclxuICogaXRzIGV2ZW50cyB0byBrbm93IHdoZW4gaXQncyBzYWZlIHRvIHVzZSB0aGUgYXNzZXQuIFBsZWFzZSBzZWUgdGhlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luIGNsYXNzIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqIFxyXG4gKiBUaGUga2V5IG11c3QgYmUgYSB1bmlxdWUgU3RyaW5nLiBJdCBpcyB1c2VkIHRvIGFkZCB0aGUgZmlsZSB0byB0aGUgZ2xvYmFsIEpTT04gQ2FjaGUgdXBvbiBhIHN1Y2Nlc3NmdWwgbG9hZC5cclxuICogVGhlIGtleSBzaG91bGQgYmUgdW5pcXVlIGJvdGggaW4gdGVybXMgb2YgZmlsZXMgYmVpbmcgbG9hZGVkIGFuZCBmaWxlcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIEpTT04gQ2FjaGUuXHJcbiAqIExvYWRpbmcgYSBmaWxlIHVzaW5nIGEga2V5IHRoYXQgaXMgYWxyZWFkeSB0YWtlbiB3aWxsIHJlc3VsdCBpbiBhIHdhcm5pbmcuIElmIHlvdSB3aXNoIHRvIHJlcGxhY2UgYW4gZXhpc3RpbmcgZmlsZVxyXG4gKiB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBKU09OIENhY2hlIGZpcnN0LCBiZWZvcmUgbG9hZGluZyBhIG5ldyBvbmUuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhcmd1bWVudHMgeW91IGNhbiBwYXNzIGEgY29uZmlndXJhdGlvbiBvYmplY3QsIHN1Y2ggYXM6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5hbmltYXRpb24oe1xyXG4gKiAgICAga2V5OiAnYmFkZGllQW5pbXMnLFxyXG4gKiAgICAgdXJsOiAnZmlsZXMvQmFkZGllQW5pbXMuanNvbidcclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGBQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5KU09ORmlsZUNvbmZpZ2AgZm9yIG1vcmUgZGV0YWlscy5cclxuICpcclxuICogT25jZSB0aGUgZmlsZSBoYXMgZmluaXNoZWQgbG9hZGluZyBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgcGFzc2VkIHRvIHRoZSBnbG9iYWwgQW5pbWF0aW9uIE1hbmFnZXJzIGBmcm9tSlNPTmAgbWV0aG9kLlxyXG4gKiBUaGlzIHdpbGwgcGFyc2UgYWxsIG9mIHRoZSBKU09OIGRhdGEgYW5kIGNyZWF0ZSBhbmltYXRpb24gZGF0YSBmcm9tIGl0LiBUaGlzIHByb2Nlc3MgaGFwcGVucyBhdCB0aGUgdmVyeSBlbmRcclxuICogb2YgdGhlIExvYWRlciwgb25jZSBldmVyeSBvdGhlciBmaWxlIGluIHRoZSBsb2FkIHF1ZXVlIGhhcyBmaW5pc2hlZC4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0byBhbGxvdyB5b3UgdG8gbG9hZFxyXG4gKiBib3RoIGFuaW1hdGlvbiBkYXRhIGFuZCB0aGUgaW1hZ2VzIGl0IHJlbGllcyB1cG9uIGluIHRoZSBzYW1lIGxvYWQgY2FsbC5cclxuICpcclxuICogT25jZSB0aGUgYW5pbWF0aW9uIGRhdGEgaGFzIGJlZW4gcGFyc2VkIHlvdSB3aWxsIGJlIGFibGUgdG8gcGxheSBhbmltYXRpb25zIHVzaW5nIHRoYXQgZGF0YS5cclxuICogUGxlYXNlIHNlZSB0aGUgQW5pbWF0aW9uIE1hbmFnZXIgYGZyb21KU09OYCBtZXRob2QgZm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgZm9ybWF0IGFuZCBwbGF5YmFjay5cclxuICogXHJcbiAqIFlvdSBjYW4gYWxzbyBhY2Nlc3MgdGhlIHJhdyBhbmltYXRpb24gZGF0YSBmcm9tIGl0cyBDYWNoZSB1c2luZyBpdHMga2V5OlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQuYW5pbWF0aW9uKCdiYWRkaWVBbmltcycsICdmaWxlcy9CYWRkaWVBbmltcy5qc29uJyk7XHJcbiAqIC8vIGFuZCBsYXRlciBpbiB5b3VyIGdhbWUgLi4uXHJcbiAqIHZhciBkYXRhID0gdGhpcy5jYWNoZS5qc29uLmdldCgnYmFkZGllQW5pbXMnKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIElmIHlvdSBoYXZlIHNwZWNpZmllZCBhIHByZWZpeCBpbiB0aGUgbG9hZGVyLCB2aWEgYExvYWRlci5zZXRQcmVmaXhgIHRoZW4gdGhpcyB2YWx1ZSB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGlzIGZpbGVzXHJcbiAqIGtleS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBwcmVmaXggd2FzIGBMRVZFTDEuYCBhbmQgdGhlIGtleSB3YXMgYFdhdmVzYCB0aGUgZmluYWwga2V5IHdpbGwgYmUgYExFVkVMMS5XYXZlc2AgYW5kXHJcbiAqIHRoaXMgaXMgd2hhdCB5b3Ugd291bGQgdXNlIHRvIHJldHJpZXZlIHRoZSB0ZXh0IGZyb20gdGhlIEpTT04gQ2FjaGUuXHJcbiAqXHJcbiAqIFRoZSBVUkwgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlLiBJZiB0aGUgVVJMIGlzIHJlbGF0aXZlIHRoZSBgTG9hZGVyLmJhc2VVUkxgIGFuZCBgTG9hZGVyLnBhdGhgIHZhbHVlcyB3aWxsIGJlIHByZXBlbmRlZCB0byBpdC5cclxuICpcclxuICogSWYgdGhlIFVSTCBpc24ndCBzcGVjaWZpZWQgdGhlIExvYWRlciB3aWxsIHRha2UgdGhlIGtleSBhbmQgY3JlYXRlIGEgZmlsZW5hbWUgZnJvbSB0aGF0LiBGb3IgZXhhbXBsZSBpZiB0aGUga2V5IGlzIFwiZGF0YVwiXHJcbiAqIGFuZCBubyBVUkwgaXMgZ2l2ZW4gdGhlbiB0aGUgTG9hZGVyIHdpbGwgc2V0IHRoZSBVUkwgdG8gYmUgXCJkYXRhLmpzb25cIi4gSXQgd2lsbCBhbHdheXMgYWRkIGAuanNvbmAgYXMgdGhlIGV4dGVuc2lvbiwgYWx0aG91Z2hcclxuICogdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBpZiB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBtZXRob2QgYXJndW1lbnRzLiBJZiB5b3UgZG8gbm90IGRlc2lyZSB0aGlzIGFjdGlvbiB0aGVuIHByb3ZpZGUgYSBVUkwuXHJcbiAqXHJcbiAqIFlvdSBjYW4gYWxzbyBvcHRpb25hbGx5IHByb3ZpZGUgYSBgZGF0YUtleWAgdG8gdXNlLiBUaGlzIGFsbG93cyB5b3UgdG8gZXh0cmFjdCBvbmx5IGEgcGFydCBvZiB0aGUgSlNPTiBhbmQgc3RvcmUgaXQgaW4gdGhlIENhY2hlLFxyXG4gKiByYXRoZXIgdGhhbiB0aGUgd2hvbGUgZmlsZS4gRm9yIGV4YW1wbGUsIGlmIHlvdXIgSlNPTiBkYXRhIGhhZCBhIHN0cnVjdHVyZSBsaWtlIHRoaXM6XHJcbiAqIFxyXG4gKiBgYGBqc29uXHJcbiAqIHtcclxuICogICAgIFwibGV2ZWwxXCI6IHtcclxuICogICAgICAgICBcImJhZGRpZXNcIjoge1xyXG4gKiAgICAgICAgICAgICBcImFsaWVuc1wiOiB7fSxcclxuICogICAgICAgICAgICAgXCJib3NzXCI6IHt9XHJcbiAqICAgICAgICAgfVxyXG4gKiAgICAgfSxcclxuICogICAgIFwibGV2ZWwyXCI6IHt9LFxyXG4gKiAgICAgXCJsZXZlbDNcIjoge31cclxuICogfVxyXG4gKiBgYGBcclxuICpcclxuICogQW5kIGlmIHlvdSBvbmx5IHdhbnRlZCB0byBjcmVhdGUgYW5pbWF0aW9ucyBmcm9tIHRoZSBgYm9zc2AgZGF0YSwgdGhlbiB5b3UgY291bGQgcGFzcyBgbGV2ZWwxLmJhZGRpZXMuYm9zc2BhcyB0aGUgYGRhdGFLZXlgLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGUgYWJpbGl0eSB0byBsb2FkIHRoaXMgdHlwZSBvZiBmaWxlIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIEpTT04gRmlsZSB0eXBlIGhhcyBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLlxyXG4gKiBJdCBpcyBhdmFpbGFibGUgaW4gdGhlIGRlZmF1bHQgYnVpbGQgYnV0IGNhbiBiZSBleGNsdWRlZCBmcm9tIGN1c3RvbSBidWlsZHMuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYW5pbWF0aW9uXHJcbiAqIEBmaXJlcyBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhZGRGaWxlRXZlbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5KU09ORmlsZUNvbmZpZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5KU09ORmlsZUNvbmZpZ1tdKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhcnJheSBvZiB0aGVtLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhpcyBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+Lmpzb25gLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5qc29uXCIuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YUtleV0gLSBXaGVuIHRoZSBBbmltYXRpb24gSlNPTiBmaWxlIGxvYWRzIG9ubHkgdGhpcyBwcm9wZXJ0eSB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgQ2FjaGUgYW5kIHVzZWQgdG8gY3JlYXRlIGFuaW1hdGlvbiBkYXRhLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt4aHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBUaGUgTG9hZGVyIGluc3RhbmNlLlxyXG4gKi9cclxuRmlsZVR5cGVzTWFuYWdlci5yZWdpc3RlcignYW5pbWF0aW9uJywgZnVuY3Rpb24gKGtleSwgdXJsLCBkYXRhS2V5LCB4aHJTZXR0aW5ncylcclxue1xyXG4gICAgLy8gIFN1cHBvcnRzIGFuIE9iamVjdCBmaWxlIGRlZmluaXRpb24gaW4gdGhlIGtleSBhcmd1bWVudFxyXG4gICAgLy8gIE9yIGFuIGFycmF5IG9mIG9iamVjdHMgaW4gdGhlIGtleSBhcmd1bWVudFxyXG4gICAgLy8gIE9yIGEgc2luZ2xlIGVudHJ5IHdoZXJlIGFsbCBhcmd1bWVudHMgaGF2ZSBiZWVuIGRlZmluZWRcclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRGaWxlKG5ldyBBbmltYXRpb25KU09ORmlsZSh0aGlzLCBrZXlbaV0pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hZGRGaWxlKG5ldyBBbmltYXRpb25KU09ORmlsZSh0aGlzLCBrZXksIHVybCwgeGhyU2V0dGluZ3MsIGRhdGFLZXkpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEFuaW1hdGlvbkpTT05GaWxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/AnimationJSONFile.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/filetypes/AtlasJSONFile.js":
/*!*******************************************************************!*\
!*** ./node_modules/phaser/src/loader/filetypes/AtlasJSONFile.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar ImageFile = __webpack_require__(/*! ./ImageFile.js */ \"./node_modules/phaser/src/loader/filetypes/ImageFile.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\nvar JSONFile = __webpack_require__(/*! ./JSONFile.js */ \"./node_modules/phaser/src/loader/filetypes/JSONFile.js\");\r\nvar MultiFile = __webpack_require__(/*! ../MultiFile.js */ \"./node_modules/phaser/src/loader/MultiFile.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single JSON based Texture Atlas File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#atlas method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#atlas.\r\n * \r\n * https://www.codeandweb.com/texturepacker/tutorials/how-to-create-sprite-sheets-for-phaser3?source=photonstorm\r\n *\r\n * @class AtlasJSONFile\r\n * @extends Phaser.Loader.MultiFile\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.AtlasJSONFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string|string[]} [textureURL] - The absolute or relative URL to load the texture image file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\r\n * @param {string} [atlasURL] - The absolute or relative URL to load the texture atlas json data file from. If undefined or `null` it will be set to `<key>.json`, i.e. if `key` was \"alien\" then the URL will be \"alien.json\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [textureXhrSettings] - An XHR Settings configuration object for the atlas image file. Used in replacement of the Loaders default XHR Settings.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [atlasXhrSettings] - An XHR Settings configuration object for the atlas json file. Used in replacement of the Loaders default XHR Settings.\r\n */\r\nvar AtlasJSONFile = new Class({\r\n\r\n Extends: MultiFile,\r\n\r\n initialize:\r\n\r\n function AtlasJSONFile (loader, key, textureURL, atlasURL, textureXhrSettings, atlasXhrSettings)\r\n {\r\n var image;\r\n var data;\r\n\r\n if (IsPlainObject(key))\r\n {\r\n var config = key;\r\n\r\n key = GetFastValue(config, 'key');\r\n\r\n image = new ImageFile(loader, {\r\n key: key,\r\n url: GetFastValue(config, 'textureURL'),\r\n extension: GetFastValue(config, 'textureExtension', 'png'),\r\n normalMap: GetFastValue(config, 'normalMap'),\r\n xhrSettings: GetFastValue(config, 'textureXhrSettings')\r\n });\r\n\r\n data = new JSONFile(loader, {\r\n key: key,\r\n url: GetFastValue(config, 'atlasURL'),\r\n extension: GetFastValue(config, 'atlasExtension', 'json'),\r\n xhrSettings: GetFastValue(config, 'atlasXhrSettings')\r\n });\r\n }\r\n else\r\n {\r\n image = new ImageFile(loader, key, textureURL, textureXhrSettings);\r\n data = new JSONFile(loader, key, atlasURL, atlasXhrSettings);\r\n }\r\n\r\n if (image.linkFile)\r\n {\r\n // Image has a normal map\r\n MultiFile.call(this, loader, 'atlasjson', key, [ image, data, image.linkFile ]);\r\n }\r\n else\r\n {\r\n MultiFile.call(this, loader, 'atlasjson', key, [ image, data ]);\r\n }\r\n },\r\n\r\n /**\r\n * Adds this file to its target cache upon successful loading and processing.\r\n *\r\n * @method Phaser.Loader.FileTypes.AtlasJSONFile#addToCache\r\n * @since 3.7.0\r\n */\r\n addToCache: function ()\r\n {\r\n if (this.isReadyToProcess())\r\n {\r\n var image = this.files[0];\r\n var json = this.files[1];\r\n var normalMap = (this.files[2]) ? this.files[2].data : null;\r\n\r\n this.loader.textureManager.addAtlas(image.key, image.data, json.data, normalMap);\r\n\r\n json.addToCache();\r\n\r\n this.complete = true;\r\n }\r\n }\r\n\r\n});\r\n\r\n/**\r\n * Adds a JSON based Texture Atlas, or array of atlases, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n * this.load.atlas('mainmenu', 'images/MainMenu.png', 'images/MainMenu.json');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * If you call this from outside of `preload` then you are responsible for starting the Loader afterwards and monitoring\r\n * its events to know when it's safe to use the asset. Please see the Phaser.Loader.LoaderPlugin class for more details.\r\n *\r\n * Phaser expects the atlas data to be provided in a JSON file, using either the JSON Hash or JSON Array format.\r\n * These files are created by software such as Texture Packer, Shoebox and Adobe Flash / Animate.\r\n * If you are using Texture Packer and have enabled multi-atlas support, then please use the Phaser Multi Atlas loader\r\n * instead of this one.\r\n * \r\n * Phaser can load all common image types: png, jpg, gif and any other format the browser can natively handle.\r\n *\r\n * The key must be a unique String. It is used to add the file to the global Texture Manager upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Texture Manager.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Texture Manager first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.atlas({\r\n * key: 'mainmenu',\r\n * textureURL: 'images/MainMenu.png',\r\n * atlasURL: 'images/MainMenu.json'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.AtlasJSONFileConfig` for more details.\r\n *\r\n * Instead of passing a URL for the atlas JSON data you can also pass in a well formed JSON object instead.\r\n *\r\n * Once the atlas has finished loading you can use frames from it as textures for a Game Object by referencing its key:\r\n * \r\n * ```javascript\r\n * this.load.atlas('mainmenu', 'images/MainMenu.png', 'images/MainMenu.json');\r\n * // and later in your game ...\r\n * this.add.image(x, y, 'mainmenu', 'background');\r\n * ```\r\n *\r\n * To get a list of all available frames within an atlas please consult your Texture Atlas software.\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `MENU.` and the key was `Background` the final key will be `MENU.Background` and\r\n * this is what you would use to retrieve the image from the Texture Manager.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"alien\"\r\n * and no URL is given then the Loader will set the URL to be \"alien.png\". It will always add `.png` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Phaser also supports the automatic loading of associated normal maps. If you have a normal map to go with this image,\r\n * then you can specify it by providing an array as the `url` where the second element is the normal map:\r\n * \r\n * ```javascript\r\n * this.load.atlas('mainmenu', [ 'images/MainMenu.png', 'images/MainMenu-n.png' ], 'images/MainMenu.json');\r\n * ```\r\n *\r\n * Or, if you are using a config object use the `normalMap` property:\r\n * \r\n * ```javascript\r\n * this.load.atlas({\r\n * key: 'mainmenu',\r\n * textureURL: 'images/MainMenu.png',\r\n * normalMap: 'images/MainMenu-n.png',\r\n * atlasURL: 'images/MainMenu.json'\r\n * });\r\n * ```\r\n *\r\n * The normal map file is subject to the same conditions as the image file with regard to the path, baseURL, CORs and XHR Settings.\r\n * Normal maps are a WebGL only feature.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Atlas JSON File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#atlas\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.AtlasJSONFileConfig|Phaser.Types.Loader.FileTypes.AtlasJSONFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string|string[]} [textureURL] - The absolute or relative URL to load the texture image file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\r\n * @param {string} [atlasURL] - The absolute or relative URL to load the texture atlas json data file from. If undefined or `null` it will be set to `<key>.json`, i.e. if `key` was \"alien\" then the URL will be \"alien.json\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [textureXhrSettings] - An XHR Settings configuration object for the atlas image file. Used in replacement of the Loaders default XHR Settings.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [atlasXhrSettings] - An XHR Settings configuration object for the atlas json file. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('atlas', function (key, textureURL, atlasURL, textureXhrSettings, atlasXhrSettings)\r\n{\r\n var multifile;\r\n\r\n // Supports an Object file definition in the key argument\r\n // Or an array of objects in the key argument\r\n // Or a single entry where all arguments have been defined\r\n\r\n if (Array.isArray(key))\r\n {\r\n for (var i = 0; i < key.length; i++)\r\n {\r\n multifile = new AtlasJSONFile(this, key[i]);\r\n\r\n this.addFile(multifile.files);\r\n }\r\n }\r\n else\r\n {\r\n multifile = new AtlasJSONFile(this, key, textureURL, atlasURL, textureXhrSettings, atlasXhrSettings);\r\n\r\n this.addFile(multifile.files);\r\n }\r\n\r\n return this;\r\n});\r\n\r\nmodule.exports = AtlasJSONFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0F0bGFzSlNPTkZpbGUuanM/NTQwOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2Qyx1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBcUI7QUFDcEQsbUJBQW1CLG1CQUFPLENBQUMsK0ZBQWlDO0FBQzVELGdCQUFnQixtQkFBTyxDQUFDLCtFQUFnQjtBQUN4QyxvQkFBb0IsbUJBQU8sQ0FBQyxpR0FBa0M7QUFDOUQsZUFBZSxtQkFBTyxDQUFDLDZFQUFlO0FBQ3RDLGdCQUFnQixtQkFBTyxDQUFDLHNFQUFpQjs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLDJEQUEyRDtBQUN0RSxXQUFXLGdCQUFnQjtBQUMzQixXQUFXLE9BQU87QUFDbEIsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVyxzQ0FBc0M7QUFDakQ7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsK0dBQStHO0FBQzFILFdBQVcsZ0JBQWdCO0FBQzNCLFdBQVcsT0FBTztBQUNsQixXQUFXLHNDQUFzQztBQUNqRCxXQUFXLHNDQUFzQztBQUNqRDtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCLGdCQUFnQjtBQUN2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9maWxldHlwZXMvQXRsYXNKU09ORmlsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEZpbGVUeXBlc01hbmFnZXIgPSByZXF1aXJlKCcuLi9GaWxlVHlwZXNNYW5hZ2VyJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBJbWFnZUZpbGUgPSByZXF1aXJlKCcuL0ltYWdlRmlsZS5qcycpO1xyXG52YXIgSXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9Jc1BsYWluT2JqZWN0Jyk7XHJcbnZhciBKU09ORmlsZSA9IHJlcXVpcmUoJy4vSlNPTkZpbGUuanMnKTtcclxudmFyIE11bHRpRmlsZSA9IHJlcXVpcmUoJy4uL011bHRpRmlsZS5qcycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBzaW5nbGUgSlNPTiBiYXNlZCBUZXh0dXJlIEF0bGFzIEZpbGUgc3VpdGFibGUgZm9yIGxvYWRpbmcgYnkgdGhlIExvYWRlci5cclxuICpcclxuICogVGhlc2UgYXJlIGNyZWF0ZWQgd2hlbiB5b3UgdXNlIHRoZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhdGxhcyBtZXRob2QgYW5kIGFyZSBub3QgdHlwaWNhbGx5IGNyZWF0ZWQgZGlyZWN0bHkuXHJcbiAqIFxyXG4gKiBGb3IgZG9jdW1lbnRhdGlvbiBhYm91dCB3aGF0IGFsbCB0aGUgYXJndW1lbnRzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWVhbiBwbGVhc2Ugc2VlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2F0bGFzLlxyXG4gKiBcclxuICogaHR0cHM6Ly93d3cuY29kZWFuZHdlYi5jb20vdGV4dHVyZXBhY2tlci90dXRvcmlhbHMvaG93LXRvLWNyZWF0ZS1zcHJpdGUtc2hlZXRzLWZvci1waGFzZXIzP3NvdXJjZT1waG90b25zdG9ybVxyXG4gKlxyXG4gKiBAY2xhc3MgQXRsYXNKU09ORmlsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLk11bHRpRmlsZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgTG9hZGVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkF0bGFzSlNPTkZpbGVDb25maWcpfSBrZXkgLSBUaGUga2V5IHRvIHVzZSBmb3IgdGhpcyBmaWxlLCBvciBhIGZpbGUgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBbdGV4dHVyZVVSTF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhlIHRleHR1cmUgaW1hZ2UgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5wbmdgLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5wbmdcIi5cclxuICogQHBhcmFtIHtzdHJpbmd9IFthdGxhc1VSTF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhlIHRleHR1cmUgYXRsYXMganNvbiBkYXRhIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4uanNvbmAsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLmpzb25cIi5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbdGV4dHVyZVhoclNldHRpbmdzXSAtIEFuIFhIUiBTZXR0aW5ncyBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhlIGF0bGFzIGltYWdlIGZpbGUuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW2F0bGFzWGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgYXRsYXMganNvbiBmaWxlLiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKi9cclxudmFyIEF0bGFzSlNPTkZpbGUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IE11bHRpRmlsZSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEF0bGFzSlNPTkZpbGUgKGxvYWRlciwga2V5LCB0ZXh0dXJlVVJMLCBhdGxhc1VSTCwgdGV4dHVyZVhoclNldHRpbmdzLCBhdGxhc1hoclNldHRpbmdzKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpbWFnZTtcclxuICAgICAgICB2YXIgZGF0YTtcclxuXHJcbiAgICAgICAgaWYgKElzUGxhaW5PYmplY3Qoa2V5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjb25maWcgPSBrZXk7XHJcblxyXG4gICAgICAgICAgICBrZXkgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAna2V5Jyk7XHJcblxyXG4gICAgICAgICAgICBpbWFnZSA9IG5ldyBJbWFnZUZpbGUobG9hZGVyLCB7XHJcbiAgICAgICAgICAgICAgICBrZXk6IGtleSxcclxuICAgICAgICAgICAgICAgIHVybDogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3RleHR1cmVVUkwnKSxcclxuICAgICAgICAgICAgICAgIGV4dGVuc2lvbjogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3RleHR1cmVFeHRlbnNpb24nLCAncG5nJyksXHJcbiAgICAgICAgICAgICAgICBub3JtYWxNYXA6IEdldEZhc3RWYWx1ZShjb25maWcsICdub3JtYWxNYXAnKSxcclxuICAgICAgICAgICAgICAgIHhoclNldHRpbmdzOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAndGV4dHVyZVhoclNldHRpbmdzJylcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBkYXRhID0gbmV3IEpTT05GaWxlKGxvYWRlciwge1xyXG4gICAgICAgICAgICAgICAga2V5OiBrZXksXHJcbiAgICAgICAgICAgICAgICB1cmw6IEdldEZhc3RWYWx1ZShjb25maWcsICdhdGxhc1VSTCcpLFxyXG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnYXRsYXNFeHRlbnNpb24nLCAnanNvbicpLFxyXG4gICAgICAgICAgICAgICAgeGhyU2V0dGluZ3M6IEdldEZhc3RWYWx1ZShjb25maWcsICdhdGxhc1hoclNldHRpbmdzJylcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGltYWdlID0gbmV3IEltYWdlRmlsZShsb2FkZXIsIGtleSwgdGV4dHVyZVVSTCwgdGV4dHVyZVhoclNldHRpbmdzKTtcclxuICAgICAgICAgICAgZGF0YSA9IG5ldyBKU09ORmlsZShsb2FkZXIsIGtleSwgYXRsYXNVUkwsIGF0bGFzWGhyU2V0dGluZ3MpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGltYWdlLmxpbmtGaWxlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIEltYWdlIGhhcyBhIG5vcm1hbCBtYXBcclxuICAgICAgICAgICAgTXVsdGlGaWxlLmNhbGwodGhpcywgbG9hZGVyLCAnYXRsYXNqc29uJywga2V5LCBbIGltYWdlLCBkYXRhLCBpbWFnZS5saW5rRmlsZSBdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgTXVsdGlGaWxlLmNhbGwodGhpcywgbG9hZGVyLCAnYXRsYXNqc29uJywga2V5LCBbIGltYWdlLCBkYXRhIF0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIHRoaXMgZmlsZSB0byBpdHMgdGFyZ2V0IGNhY2hlIHVwb24gc3VjY2Vzc2Z1bCBsb2FkaW5nIGFuZCBwcm9jZXNzaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuQXRsYXNKU09ORmlsZSNhZGRUb0NhY2hlXHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqL1xyXG4gICAgYWRkVG9DYWNoZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5pc1JlYWR5VG9Qcm9jZXNzKCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgaW1hZ2UgPSB0aGlzLmZpbGVzWzBdO1xyXG4gICAgICAgICAgICB2YXIganNvbiA9IHRoaXMuZmlsZXNbMV07XHJcbiAgICAgICAgICAgIHZhciBub3JtYWxNYXAgPSAodGhpcy5maWxlc1syXSkgPyB0aGlzLmZpbGVzWzJdLmRhdGEgOiBudWxsO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5sb2FkZXIudGV4dHVyZU1hbmFnZXIuYWRkQXRsYXMoaW1hZ2Uua2V5LCBpbWFnZS5kYXRhLCBqc29uLmRhdGEsIG5vcm1hbE1hcCk7XHJcblxyXG4gICAgICAgICAgICBqc29uLmFkZFRvQ2FjaGUoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY29tcGxldGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgYSBKU09OIGJhc2VkIFRleHR1cmUgQXRsYXMsIG9yIGFycmF5IG9mIGF0bGFzZXMsIHRvIHRoZSBjdXJyZW50IGxvYWQgcXVldWUuXHJcbiAqXHJcbiAqIFlvdSBjYW4gY2FsbCB0aGlzIG1ldGhvZCBmcm9tIHdpdGhpbiB5b3VyIFNjZW5lJ3MgYHByZWxvYWRgLCBhbG9uZyB3aXRoIGFueSBvdGhlciBmaWxlcyB5b3Ugd2lzaCB0byBsb2FkOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiBmdW5jdGlvbiBwcmVsb2FkICgpXHJcbiAqIHtcclxuICogICAgIHRoaXMubG9hZC5hdGxhcygnbWFpbm1lbnUnLCAnaW1hZ2VzL01haW5NZW51LnBuZycsICdpbWFnZXMvTWFpbk1lbnUuanNvbicpO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgZmlsZSBpcyAqKm5vdCoqIGxvYWRlZCByaWdodCBhd2F5LiBJdCBpcyBhZGRlZCB0byBhIHF1ZXVlIHJlYWR5IHRvIGJlIGxvYWRlZCBlaXRoZXIgd2hlbiB0aGUgbG9hZGVyIHN0YXJ0cyxcclxuICogb3IgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIHdoZW4gdGhlIG5leHQgZnJlZSBsb2FkIHNsb3QgYmVjb21lcyBhdmFpbGFibGUuIFRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGlmIHlvdVxyXG4gKiBhcmUgY2FsbGluZyB0aGlzIGZyb20gd2l0aGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QsIG9yIGEgcmVsYXRlZCBjYWxsYmFjay4gQmVjYXVzZSB0aGUgZmlsZSBpcyBxdWV1ZWRcclxuICogaXQgbWVhbnMgeW91IGNhbm5vdCB1c2UgdGhlIGZpbGUgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgYnV0IG11c3Qgd2FpdCBmb3IgdGhlIGZpbGUgdG8gY29tcGxldGUuXHJcbiAqIFRoZSB0eXBpY2FsIGZsb3cgZm9yIGEgUGhhc2VyIFNjZW5lIGlzIHRoYXQgeW91IGxvYWQgYXNzZXRzIGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QgYW5kIHRoZW4gd2hlbiB0aGVcclxuICogU2NlbmUncyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aG9zZSBhc3NldHMgYXJlIHJlYWR5IGZvciB1c2UgYW5kIGhhdmUgYmVlblxyXG4gKiBsb2FkZWQuXHJcbiAqIFxyXG4gKiBJZiB5b3UgY2FsbCB0aGlzIGZyb20gb3V0c2lkZSBvZiBgcHJlbG9hZGAgdGhlbiB5b3UgYXJlIHJlc3BvbnNpYmxlIGZvciBzdGFydGluZyB0aGUgTG9hZGVyIGFmdGVyd2FyZHMgYW5kIG1vbml0b3JpbmdcclxuICogaXRzIGV2ZW50cyB0byBrbm93IHdoZW4gaXQncyBzYWZlIHRvIHVzZSB0aGUgYXNzZXQuIFBsZWFzZSBzZWUgdGhlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luIGNsYXNzIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIFBoYXNlciBleHBlY3RzIHRoZSBhdGxhcyBkYXRhIHRvIGJlIHByb3ZpZGVkIGluIGEgSlNPTiBmaWxlLCB1c2luZyBlaXRoZXIgdGhlIEpTT04gSGFzaCBvciBKU09OIEFycmF5IGZvcm1hdC5cclxuICogVGhlc2UgZmlsZXMgYXJlIGNyZWF0ZWQgYnkgc29mdHdhcmUgc3VjaCBhcyBUZXh0dXJlIFBhY2tlciwgU2hvZWJveCBhbmQgQWRvYmUgRmxhc2ggLyBBbmltYXRlLlxyXG4gKiBJZiB5b3UgYXJlIHVzaW5nIFRleHR1cmUgUGFja2VyIGFuZCBoYXZlIGVuYWJsZWQgbXVsdGktYXRsYXMgc3VwcG9ydCwgdGhlbiBwbGVhc2UgdXNlIHRoZSBQaGFzZXIgTXVsdGkgQXRsYXMgbG9hZGVyXHJcbiAqIGluc3RlYWQgb2YgdGhpcyBvbmUuXHJcbiAqIFxyXG4gKiBQaGFzZXIgY2FuIGxvYWQgYWxsIGNvbW1vbiBpbWFnZSB0eXBlczogcG5nLCBqcGcsIGdpZiBhbmQgYW55IG90aGVyIGZvcm1hdCB0aGUgYnJvd3NlciBjYW4gbmF0aXZlbHkgaGFuZGxlLlxyXG4gKlxyXG4gKiBUaGUga2V5IG11c3QgYmUgYSB1bmlxdWUgU3RyaW5nLiBJdCBpcyB1c2VkIHRvIGFkZCB0aGUgZmlsZSB0byB0aGUgZ2xvYmFsIFRleHR1cmUgTWFuYWdlciB1cG9uIGEgc3VjY2Vzc2Z1bCBsb2FkLlxyXG4gKiBUaGUga2V5IHNob3VsZCBiZSB1bmlxdWUgYm90aCBpbiB0ZXJtcyBvZiBmaWxlcyBiZWluZyBsb2FkZWQgYW5kIGZpbGVzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBMb2FkaW5nIGEgZmlsZSB1c2luZyBhIGtleSB0aGF0IGlzIGFscmVhZHkgdGFrZW4gd2lsbCByZXN1bHQgaW4gYSB3YXJuaW5nLiBJZiB5b3Ugd2lzaCB0byByZXBsYWNlIGFuIGV4aXN0aW5nIGZpbGVcclxuICogdGhlbiByZW1vdmUgaXQgZnJvbSB0aGUgVGV4dHVyZSBNYW5hZ2VyIGZpcnN0LCBiZWZvcmUgbG9hZGluZyBhIG5ldyBvbmUuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhcmd1bWVudHMgeW91IGNhbiBwYXNzIGEgY29uZmlndXJhdGlvbiBvYmplY3QsIHN1Y2ggYXM6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5hdGxhcyh7XHJcbiAqICAgICBrZXk6ICdtYWlubWVudScsXHJcbiAqICAgICB0ZXh0dXJlVVJMOiAnaW1hZ2VzL01haW5NZW51LnBuZycsXHJcbiAqICAgICBhdGxhc1VSTDogJ2ltYWdlcy9NYWluTWVudS5qc29uJ1xyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkF0bGFzSlNPTkZpbGVDb25maWdgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhIFVSTCBmb3IgdGhlIGF0bGFzIEpTT04gZGF0YSB5b3UgY2FuIGFsc28gcGFzcyBpbiBhIHdlbGwgZm9ybWVkIEpTT04gb2JqZWN0IGluc3RlYWQuXHJcbiAqXHJcbiAqIE9uY2UgdGhlIGF0bGFzIGhhcyBmaW5pc2hlZCBsb2FkaW5nIHlvdSBjYW4gdXNlIGZyYW1lcyBmcm9tIGl0IGFzIHRleHR1cmVzIGZvciBhIEdhbWUgT2JqZWN0IGJ5IHJlZmVyZW5jaW5nIGl0cyBrZXk6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5hdGxhcygnbWFpbm1lbnUnLCAnaW1hZ2VzL01haW5NZW51LnBuZycsICdpbWFnZXMvTWFpbk1lbnUuanNvbicpO1xyXG4gKiAvLyBhbmQgbGF0ZXIgaW4geW91ciBnYW1lIC4uLlxyXG4gKiB0aGlzLmFkZC5pbWFnZSh4LCB5LCAnbWFpbm1lbnUnLCAnYmFja2dyb3VuZCcpO1xyXG4gKiBgYGBcclxuICpcclxuICogVG8gZ2V0IGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGZyYW1lcyB3aXRoaW4gYW4gYXRsYXMgcGxlYXNlIGNvbnN1bHQgeW91ciBUZXh0dXJlIEF0bGFzIHNvZnR3YXJlLlxyXG4gKlxyXG4gKiBJZiB5b3UgaGF2ZSBzcGVjaWZpZWQgYSBwcmVmaXggaW4gdGhlIGxvYWRlciwgdmlhIGBMb2FkZXIuc2V0UHJlZml4YCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhpcyBmaWxlc1xyXG4gKiBrZXkuIEZvciBleGFtcGxlLCBpZiB0aGUgcHJlZml4IHdhcyBgTUVOVS5gIGFuZCB0aGUga2V5IHdhcyBgQmFja2dyb3VuZGAgdGhlIGZpbmFsIGtleSB3aWxsIGJlIGBNRU5VLkJhY2tncm91bmRgIGFuZFxyXG4gKiB0aGlzIGlzIHdoYXQgeW91IHdvdWxkIHVzZSB0byByZXRyaWV2ZSB0aGUgaW1hZ2UgZnJvbSB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKlxyXG4gKiBUaGUgVVJMIGNhbiBiZSByZWxhdGl2ZSBvciBhYnNvbHV0ZS4gSWYgdGhlIFVSTCBpcyByZWxhdGl2ZSB0aGUgYExvYWRlci5iYXNlVVJMYCBhbmQgYExvYWRlci5wYXRoYCB2YWx1ZXMgd2lsbCBiZSBwcmVwZW5kZWQgdG8gaXQuXHJcbiAqXHJcbiAqIElmIHRoZSBVUkwgaXNuJ3Qgc3BlY2lmaWVkIHRoZSBMb2FkZXIgd2lsbCB0YWtlIHRoZSBrZXkgYW5kIGNyZWF0ZSBhIGZpbGVuYW1lIGZyb20gdGhhdC4gRm9yIGV4YW1wbGUgaWYgdGhlIGtleSBpcyBcImFsaWVuXCJcclxuICogYW5kIG5vIFVSTCBpcyBnaXZlbiB0aGVuIHRoZSBMb2FkZXIgd2lsbCBzZXQgdGhlIFVSTCB0byBiZSBcImFsaWVuLnBuZ1wiLiBJdCB3aWxsIGFsd2F5cyBhZGQgYC5wbmdgIGFzIHRoZSBleHRlbnNpb24sIGFsdGhvdWdoXHJcbiAqIHRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gaWYgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgbWV0aG9kIGFyZ3VtZW50cy4gSWYgeW91IGRvIG5vdCBkZXNpcmUgdGhpcyBhY3Rpb24gdGhlbiBwcm92aWRlIGEgVVJMLlxyXG4gKlxyXG4gKiBQaGFzZXIgYWxzbyBzdXBwb3J0cyB0aGUgYXV0b21hdGljIGxvYWRpbmcgb2YgYXNzb2NpYXRlZCBub3JtYWwgbWFwcy4gSWYgeW91IGhhdmUgYSBub3JtYWwgbWFwIHRvIGdvIHdpdGggdGhpcyBpbWFnZSxcclxuICogdGhlbiB5b3UgY2FuIHNwZWNpZnkgaXQgYnkgcHJvdmlkaW5nIGFuIGFycmF5IGFzIHRoZSBgdXJsYCB3aGVyZSB0aGUgc2Vjb25kIGVsZW1lbnQgaXMgdGhlIG5vcm1hbCBtYXA6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5hdGxhcygnbWFpbm1lbnUnLCBbICdpbWFnZXMvTWFpbk1lbnUucG5nJywgJ2ltYWdlcy9NYWluTWVudS1uLnBuZycgXSwgJ2ltYWdlcy9NYWluTWVudS5qc29uJyk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBPciwgaWYgeW91IGFyZSB1c2luZyBhIGNvbmZpZyBvYmplY3QgdXNlIHRoZSBgbm9ybWFsTWFwYCBwcm9wZXJ0eTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmF0bGFzKHtcclxuICogICAgIGtleTogJ21haW5tZW51JyxcclxuICogICAgIHRleHR1cmVVUkw6ICdpbWFnZXMvTWFpbk1lbnUucG5nJyxcclxuICogICAgIG5vcm1hbE1hcDogJ2ltYWdlcy9NYWluTWVudS1uLnBuZycsXHJcbiAqICAgICBhdGxhc1VSTDogJ2ltYWdlcy9NYWluTWVudS5qc29uJ1xyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIFRoZSBub3JtYWwgbWFwIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgc2FtZSBjb25kaXRpb25zIGFzIHRoZSBpbWFnZSBmaWxlIHdpdGggcmVnYXJkIHRvIHRoZSBwYXRoLCBiYXNlVVJMLCBDT1JzIGFuZCBYSFIgU2V0dGluZ3MuXHJcbiAqIE5vcm1hbCBtYXBzIGFyZSBhIFdlYkdMIG9ubHkgZmVhdHVyZS5cclxuICpcclxuICogTm90ZTogVGhlIGFiaWxpdHkgdG8gbG9hZCB0aGlzIHR5cGUgb2YgZmlsZSB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBBdGxhcyBKU09OIEZpbGUgdHlwZSBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogSXQgaXMgYXZhaWxhYmxlIGluIHRoZSBkZWZhdWx0IGJ1aWxkIGJ1dCBjYW4gYmUgZXhjbHVkZWQgZnJvbSBjdXN0b20gYnVpbGRzLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2F0bGFzXHJcbiAqIEBmaXJlcyBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhZGRGaWxlRXZlbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5BdGxhc0pTT05GaWxlQ29uZmlnfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkF0bGFzSlNPTkZpbGVDb25maWdbXSl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdCwgb3IgYXJyYXkgb2YgdGhlbS5cclxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt0ZXh0dXJlVVJMXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGUgdGV4dHVyZSBpbWFnZSBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+LnBuZ2AsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLnBuZ1wiLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW2F0bGFzVVJMXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGUgdGV4dHVyZSBhdGxhcyBqc29uIGRhdGEgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5qc29uYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4uanNvblwiLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt0ZXh0dXJlWGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgYXRsYXMgaW1hZ2UgZmlsZS4gVXNlZCBpbiByZXBsYWNlbWVudCBvZiB0aGUgTG9hZGVycyBkZWZhdWx0IFhIUiBTZXR0aW5ncy5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbYXRsYXNYaHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBhdGxhcyBqc29uIGZpbGUuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBUaGUgTG9hZGVyIGluc3RhbmNlLlxyXG4gKi9cclxuRmlsZVR5cGVzTWFuYWdlci5yZWdpc3RlcignYXRsYXMnLCBmdW5jdGlvbiAoa2V5LCB0ZXh0dXJlVVJMLCBhdGxhc1VSTCwgdGV4dHVyZVhoclNldHRpbmdzLCBhdGxhc1hoclNldHRpbmdzKVxyXG57XHJcbiAgICB2YXIgbXVsdGlmaWxlO1xyXG5cclxuICAgIC8vICBTdXBwb3J0cyBhbiBPYmplY3QgZmlsZSBkZWZpbml0aW9uIGluIHRoZSBrZXkgYXJndW1lbnRcclxuICAgIC8vICBPciBhbiBhcnJheSBvZiBvYmplY3RzIGluIHRoZSBrZXkgYXJndW1lbnRcclxuICAgIC8vICBPciBhIHNpbmdsZSBlbnRyeSB3aGVyZSBhbGwgYXJndW1lbnRzIGhhdmUgYmVlbiBkZWZpbmVkXHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5KSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG11bHRpZmlsZSA9IG5ldyBBdGxhc0pTT05GaWxlKHRoaXMsIGtleVtpXSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGUobXVsdGlmaWxlLmZpbGVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgbXVsdGlmaWxlID0gbmV3IEF0bGFzSlNPTkZpbGUodGhpcywga2V5LCB0ZXh0dXJlVVJMLCBhdGxhc1VSTCwgdGV4dHVyZVhoclNldHRpbmdzLCBhdGxhc1hoclNldHRpbmdzKTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRGaWxlKG11bHRpZmlsZS5maWxlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBdGxhc0pTT05GaWxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/AtlasJSONFile.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/filetypes/AtlasXMLFile.js":
/*!******************************************************************!*\
!*** ./node_modules/phaser/src/loader/filetypes/AtlasXMLFile.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar ImageFile = __webpack_require__(/*! ./ImageFile.js */ \"./node_modules/phaser/src/loader/filetypes/ImageFile.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\nvar MultiFile = __webpack_require__(/*! ../MultiFile.js */ \"./node_modules/phaser/src/loader/MultiFile.js\");\r\nvar XMLFile = __webpack_require__(/*! ./XMLFile.js */ \"./node_modules/phaser/src/loader/filetypes/XMLFile.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single XML based Texture Atlas File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#atlasXML method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#atlasXML.\r\n *\r\n * @class AtlasXMLFile\r\n * @extends Phaser.Loader.MultiFile\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.7.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.AtlasXMLFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string|string[]} [textureURL] - The absolute or relative URL to load the texture image file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\r\n * @param {string} [atlasURL] - The absolute or relative URL to load the texture atlas xml data file from. If undefined or `null` it will be set to `<key>.xml`, i.e. if `key` was \"alien\" then the URL will be \"alien.xml\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [textureXhrSettings] - An XHR Settings configuration object for the atlas image file. Used in replacement of the Loaders default XHR Settings.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [atlasXhrSettings] - An XHR Settings configuration object for the atlas xml file. Used in replacement of the Loaders default XHR Settings.\r\n */\r\nvar AtlasXMLFile = new Class({\r\n\r\n Extends: MultiFile,\r\n\r\n initialize:\r\n\r\n function AtlasXMLFile (loader, key, textureURL, atlasURL, textureXhrSettings, atlasXhrSettings)\r\n {\r\n var image;\r\n var data;\r\n\r\n if (IsPlainObject(key))\r\n {\r\n var config = key;\r\n\r\n key = GetFastValue(config, 'key');\r\n\r\n image = new ImageFile(loader, {\r\n key: key,\r\n url: GetFastValue(config, 'textureURL'),\r\n extension: GetFastValue(config, 'textureExtension', 'png'),\r\n normalMap: GetFastValue(config, 'normalMap'),\r\n xhrSettings: GetFastValue(config, 'textureXhrSettings')\r\n });\r\n\r\n data = new XMLFile(loader, {\r\n key: key,\r\n url: GetFastValue(config, 'atlasURL'),\r\n extension: GetFastValue(config, 'atlasExtension', 'xml'),\r\n xhrSettings: GetFastValue(config, 'atlasXhrSettings')\r\n });\r\n }\r\n else\r\n {\r\n image = new ImageFile(loader, key, textureURL, textureXhrSettings);\r\n data = new XMLFile(loader, key, atlasURL, atlasXhrSettings);\r\n }\r\n\r\n if (image.linkFile)\r\n {\r\n // Image has a normal map\r\n MultiFile.call(this, loader, 'atlasxml', key, [ image, data, image.linkFile ]);\r\n }\r\n else\r\n {\r\n MultiFile.call(this, loader, 'atlasxml', key, [ image, data ]);\r\n }\r\n },\r\n\r\n /**\r\n * Adds this file to its target cache upon successful loading and processing.\r\n *\r\n * @method Phaser.Loader.FileTypes.AtlasXMLFile#addToCache\r\n * @since 3.7.0\r\n */\r\n addToCache: function ()\r\n {\r\n if (this.isReadyToProcess())\r\n {\r\n var image = this.files[0];\r\n var xml = this.files[1];\r\n var normalMap = (this.files[2]) ? this.files[2].data : null;\r\n\r\n this.loader.textureManager.addAtlasXML(image.key, image.data, xml.data, normalMap);\r\n\r\n xml.addToCache();\r\n\r\n this.complete = true;\r\n }\r\n }\r\n\r\n});\r\n\r\n/**\r\n * Adds an XML based Texture Atlas, or array of atlases, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n * this.load.atlasXML('mainmenu', 'images/MainMenu.png', 'images/MainMenu.xml');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * If you call this from outside of `preload` then you are responsible for starting the Loader afterwards and monitoring\r\n * its events to know when it's safe to use the asset. Please see the Phaser.Loader.LoaderPlugin class for more details.\r\n *\r\n * Phaser expects the atlas data to be provided in an XML file format.\r\n * These files are created by software such as Shoebox and Adobe Flash / Animate.\r\n * \r\n * Phaser can load all common image types: png, jpg, gif and any other format the browser can natively handle.\r\n *\r\n * The key must be a unique String. It is used to add the file to the global Texture Manager upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Texture Manager.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Texture Manager first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.atlasXML({\r\n * key: 'mainmenu',\r\n * textureURL: 'images/MainMenu.png',\r\n * atlasURL: 'images/MainMenu.xml'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.AtlasXMLFileConfig` for more details.\r\n *\r\n * Once the atlas has finished loading you can use frames from it as textures for a Game Object by referencing its key:\r\n * \r\n * ```javascript\r\n * this.load.atlasXML('mainmenu', 'images/MainMenu.png', 'images/MainMenu.xml');\r\n * // and later in your game ...\r\n * this.add.image(x, y, 'mainmenu', 'background');\r\n * ```\r\n *\r\n * To get a list of all available frames within an atlas please consult your Texture Atlas software.\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `MENU.` and the key was `Background` the final key will be `MENU.Background` and\r\n * this is what you would use to retrieve the image from the Texture Manager.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"alien\"\r\n * and no URL is given then the Loader will set the URL to be \"alien.png\". It will always add `.png` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Phaser also supports the automatic loading of associated normal maps. If you have a normal map to go with this image,\r\n * then you can specify it by providing an array as the `url` where the second element is the normal map:\r\n * \r\n * ```javascript\r\n * this.load.atlasXML('mainmenu', [ 'images/MainMenu.png', 'images/MainMenu-n.png' ], 'images/MainMenu.xml');\r\n * ```\r\n *\r\n * Or, if you are using a config object use the `normalMap` property:\r\n * \r\n * ```javascript\r\n * this.load.atlasXML({\r\n * key: 'mainmenu',\r\n * textureURL: 'images/MainMenu.png',\r\n * normalMap: 'images/MainMenu-n.png',\r\n * atlasURL: 'images/MainMenu.xml'\r\n * });\r\n * ```\r\n *\r\n * The normal map file is subject to the same conditions as the image file with regard to the path, baseURL, CORs and XHR Settings.\r\n * Normal maps are a WebGL only feature.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Atlas XML File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#atlasXML\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.7.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.AtlasXMLFileConfig|Phaser.Types.Loader.FileTypes.AtlasXMLFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string|string[]} [textureURL] - The absolute or relative URL to load the texture image file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\r\n * @param {string} [atlasURL] - The absolute or relative URL to load the texture atlas xml data file from. If undefined or `null` it will be set to `<key>.xml`, i.e. if `key` was \"alien\" then the URL will be \"alien.xml\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [textureXhrSettings] - An XHR Settings configuration object for the atlas image file. Used in replacement of the Loaders default XHR Settings.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [atlasXhrSettings] - An XHR Settings configuration object for the atlas xml file. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('atlasXML', function (key, textureURL, atlasURL, textureXhrSettings, atlasXhrSettings)\r\n{\r\n var multifile;\r\n\r\n // Supports an Object file definition in the key argument\r\n // Or an array of objects in the key argument\r\n // Or a single entry where all arguments have been defined\r\n\r\n if (Array.isArray(key))\r\n {\r\n for (var i = 0; i < key.length; i++)\r\n {\r\n multifile = new AtlasXMLFile(this, key[i]);\r\n\r\n this.addFile(multifile.files);\r\n }\r\n }\r\n else\r\n {\r\n multifile = new AtlasXMLFile(this, key, textureURL, atlasURL, textureXhrSettings, atlasXhrSettings);\r\n\r\n this.addFile(multifile.files);\r\n }\r\n\r\n return this;\r\n});\r\n\r\nmodule.exports = AtlasXMLFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0F0bGFzWE1MRmlsZS5qcz83ZDE0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFxQjtBQUNwRCxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDNUQsZ0JBQWdCLG1CQUFPLENBQUMsK0VBQWdCO0FBQ3hDLG9CQUFvQixtQkFBTyxDQUFDLGlHQUFrQztBQUM5RCxnQkFBZ0IsbUJBQU8sQ0FBQyxzRUFBaUI7QUFDekMsY0FBYyxtQkFBTyxDQUFDLDJFQUFjOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVywwREFBMEQ7QUFDckUsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw2R0FBNkc7QUFDeEgsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbG9hZGVyL2ZpbGV0eXBlcy9BdGxhc1hNTEZpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBGaWxlVHlwZXNNYW5hZ2VyID0gcmVxdWlyZSgnLi4vRmlsZVR5cGVzTWFuYWdlcicpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgSW1hZ2VGaWxlID0gcmVxdWlyZSgnLi9JbWFnZUZpbGUuanMnKTtcclxudmFyIElzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvSXNQbGFpbk9iamVjdCcpO1xyXG52YXIgTXVsdGlGaWxlID0gcmVxdWlyZSgnLi4vTXVsdGlGaWxlLmpzJyk7XHJcbnZhciBYTUxGaWxlID0gcmVxdWlyZSgnLi9YTUxGaWxlLmpzJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIHNpbmdsZSBYTUwgYmFzZWQgVGV4dHVyZSBBdGxhcyBGaWxlIHN1aXRhYmxlIGZvciBsb2FkaW5nIGJ5IHRoZSBMb2FkZXIuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSBjcmVhdGVkIHdoZW4geW91IHVzZSB0aGUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYXRsYXNYTUwgbWV0aG9kIGFuZCBhcmUgbm90IHR5cGljYWxseSBjcmVhdGVkIGRpcmVjdGx5LlxyXG4gKiBcclxuICogRm9yIGRvY3VtZW50YXRpb24gYWJvdXQgd2hhdCBhbGwgdGhlIGFyZ3VtZW50cyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIG1lYW4gcGxlYXNlIHNlZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhdGxhc1hNTC5cclxuICpcclxuICogQGNsYXNzIEF0bGFzWE1MRmlsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLk11bHRpRmlsZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjcuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgTG9hZGVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkF0bGFzWE1MRmlsZUNvbmZpZyl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt0ZXh0dXJlVVJMXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGUgdGV4dHVyZSBpbWFnZSBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+LnBuZ2AsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLnBuZ1wiLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW2F0bGFzVVJMXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGUgdGV4dHVyZSBhdGxhcyB4bWwgZGF0YSBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+LnhtbGAsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLnhtbFwiLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt0ZXh0dXJlWGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgYXRsYXMgaW1hZ2UgZmlsZS4gVXNlZCBpbiByZXBsYWNlbWVudCBvZiB0aGUgTG9hZGVycyBkZWZhdWx0IFhIUiBTZXR0aW5ncy5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbYXRsYXNYaHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBhdGxhcyB4bWwgZmlsZS4gVXNlZCBpbiByZXBsYWNlbWVudCBvZiB0aGUgTG9hZGVycyBkZWZhdWx0IFhIUiBTZXR0aW5ncy5cclxuICovXHJcbnZhciBBdGxhc1hNTEZpbGUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IE11bHRpRmlsZSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEF0bGFzWE1MRmlsZSAobG9hZGVyLCBrZXksIHRleHR1cmVVUkwsIGF0bGFzVVJMLCB0ZXh0dXJlWGhyU2V0dGluZ3MsIGF0bGFzWGhyU2V0dGluZ3MpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGltYWdlO1xyXG4gICAgICAgIHZhciBkYXRhO1xyXG5cclxuICAgICAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGtleTtcclxuXHJcbiAgICAgICAgICAgIGtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdrZXknKTtcclxuXHJcbiAgICAgICAgICAgIGltYWdlID0gbmV3IEltYWdlRmlsZShsb2FkZXIsIHtcclxuICAgICAgICAgICAgICAgIGtleToga2V5LFxyXG4gICAgICAgICAgICAgICAgdXJsOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAndGV4dHVyZVVSTCcpLFxyXG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAndGV4dHVyZUV4dGVuc2lvbicsICdwbmcnKSxcclxuICAgICAgICAgICAgICAgIG5vcm1hbE1hcDogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ25vcm1hbE1hcCcpLFxyXG4gICAgICAgICAgICAgICAgeGhyU2V0dGluZ3M6IEdldEZhc3RWYWx1ZShjb25maWcsICd0ZXh0dXJlWGhyU2V0dGluZ3MnKVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGRhdGEgPSBuZXcgWE1MRmlsZShsb2FkZXIsIHtcclxuICAgICAgICAgICAgICAgIGtleToga2V5LFxyXG4gICAgICAgICAgICAgICAgdXJsOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnYXRsYXNVUkwnKSxcclxuICAgICAgICAgICAgICAgIGV4dGVuc2lvbjogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2F0bGFzRXh0ZW5zaW9uJywgJ3htbCcpLFxyXG4gICAgICAgICAgICAgICAgeGhyU2V0dGluZ3M6IEdldEZhc3RWYWx1ZShjb25maWcsICdhdGxhc1hoclNldHRpbmdzJylcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGltYWdlID0gbmV3IEltYWdlRmlsZShsb2FkZXIsIGtleSwgdGV4dHVyZVVSTCwgdGV4dHVyZVhoclNldHRpbmdzKTtcclxuICAgICAgICAgICAgZGF0YSA9IG5ldyBYTUxGaWxlKGxvYWRlciwga2V5LCBhdGxhc1VSTCwgYXRsYXNYaHJTZXR0aW5ncyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaW1hZ2UubGlua0ZpbGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgSW1hZ2UgaGFzIGEgbm9ybWFsIG1hcFxyXG4gICAgICAgICAgICBNdWx0aUZpbGUuY2FsbCh0aGlzLCBsb2FkZXIsICdhdGxhc3htbCcsIGtleSwgWyBpbWFnZSwgZGF0YSwgaW1hZ2UubGlua0ZpbGUgXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIE11bHRpRmlsZS5jYWxsKHRoaXMsIGxvYWRlciwgJ2F0bGFzeG1sJywga2V5LCBbIGltYWdlLCBkYXRhIF0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIHRoaXMgZmlsZSB0byBpdHMgdGFyZ2V0IGNhY2hlIHVwb24gc3VjY2Vzc2Z1bCBsb2FkaW5nIGFuZCBwcm9jZXNzaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuQXRsYXNYTUxGaWxlI2FkZFRvQ2FjaGVcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBhZGRUb0NhY2hlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmlzUmVhZHlUb1Byb2Nlc3MoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBpbWFnZSA9IHRoaXMuZmlsZXNbMF07XHJcbiAgICAgICAgICAgIHZhciB4bWwgPSB0aGlzLmZpbGVzWzFdO1xyXG4gICAgICAgICAgICB2YXIgbm9ybWFsTWFwID0gKHRoaXMuZmlsZXNbMl0pID8gdGhpcy5maWxlc1syXS5kYXRhIDogbnVsbDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubG9hZGVyLnRleHR1cmVNYW5hZ2VyLmFkZEF0bGFzWE1MKGltYWdlLmtleSwgaW1hZ2UuZGF0YSwgeG1sLmRhdGEsIG5vcm1hbE1hcCk7XHJcblxyXG4gICAgICAgICAgICB4bWwuYWRkVG9DYWNoZSgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG4vKipcclxuICogQWRkcyBhbiBYTUwgYmFzZWQgVGV4dHVyZSBBdGxhcywgb3IgYXJyYXkgb2YgYXRsYXNlcywgdG8gdGhlIGN1cnJlbnQgbG9hZCBxdWV1ZS5cclxuICpcclxuICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIGZyb20gd2l0aGluIHlvdXIgU2NlbmUncyBgcHJlbG9hZGAsIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGVzIHlvdSB3aXNoIHRvIGxvYWQ6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGZ1bmN0aW9uIHByZWxvYWQgKClcclxuICoge1xyXG4gKiAgICAgdGhpcy5sb2FkLmF0bGFzWE1MKCdtYWlubWVudScsICdpbWFnZXMvTWFpbk1lbnUucG5nJywgJ2ltYWdlcy9NYWluTWVudS54bWwnKTtcclxuICogfVxyXG4gKiBgYGBcclxuICpcclxuICogVGhlIGZpbGUgaXMgKipub3QqKiBsb2FkZWQgcmlnaHQgYXdheS4gSXQgaXMgYWRkZWQgdG8gYSBxdWV1ZSByZWFkeSB0byBiZSBsb2FkZWQgZWl0aGVyIHdoZW4gdGhlIGxvYWRlciBzdGFydHMsXHJcbiAqIG9yIGlmIGl0J3MgYWxyZWFkeSBydW5uaW5nLCB3aGVuIHRoZSBuZXh0IGZyZWUgbG9hZCBzbG90IGJlY29tZXMgYXZhaWxhYmxlLiBUaGlzIGhhcHBlbnMgYXV0b21hdGljYWxseSBpZiB5b3VcclxuICogYXJlIGNhbGxpbmcgdGhpcyBmcm9tIHdpdGhpbiB0aGUgU2NlbmUncyBgcHJlbG9hZGAgbWV0aG9kLCBvciBhIHJlbGF0ZWQgY2FsbGJhY2suIEJlY2F1c2UgdGhlIGZpbGUgaXMgcXVldWVkXHJcbiAqIGl0IG1lYW5zIHlvdSBjYW5ub3QgdXNlIHRoZSBmaWxlIGltbWVkaWF0ZWx5IGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QsIGJ1dCBtdXN0IHdhaXQgZm9yIHRoZSBmaWxlIHRvIGNvbXBsZXRlLlxyXG4gKiBUaGUgdHlwaWNhbCBmbG93IGZvciBhIFBoYXNlciBTY2VuZSBpcyB0aGF0IHlvdSBsb2FkIGFzc2V0cyBpbiB0aGUgU2NlbmUncyBgcHJlbG9hZGAgbWV0aG9kIGFuZCB0aGVuIHdoZW4gdGhlXHJcbiAqIFNjZW5lJ3MgYGNyZWF0ZWAgbWV0aG9kIGlzIGNhbGxlZCB5b3UgYXJlIGd1YXJhbnRlZWQgdGhhdCBhbGwgb2YgdGhvc2UgYXNzZXRzIGFyZSByZWFkeSBmb3IgdXNlIGFuZCBoYXZlIGJlZW5cclxuICogbG9hZGVkLlxyXG4gKiBcclxuICogSWYgeW91IGNhbGwgdGhpcyBmcm9tIG91dHNpZGUgb2YgYHByZWxvYWRgIHRoZW4geW91IGFyZSByZXNwb25zaWJsZSBmb3Igc3RhcnRpbmcgdGhlIExvYWRlciBhZnRlcndhcmRzIGFuZCBtb25pdG9yaW5nXHJcbiAqIGl0cyBldmVudHMgdG8ga25vdyB3aGVuIGl0J3Mgc2FmZSB0byB1c2UgdGhlIGFzc2V0LiBQbGVhc2Ugc2VlIHRoZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiBjbGFzcyBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKlxyXG4gKiBQaGFzZXIgZXhwZWN0cyB0aGUgYXRsYXMgZGF0YSB0byBiZSBwcm92aWRlZCBpbiBhbiBYTUwgZmlsZSBmb3JtYXQuXHJcbiAqIFRoZXNlIGZpbGVzIGFyZSBjcmVhdGVkIGJ5IHNvZnR3YXJlIHN1Y2ggYXMgU2hvZWJveCBhbmQgQWRvYmUgRmxhc2ggLyBBbmltYXRlLlxyXG4gKiBcclxuICogUGhhc2VyIGNhbiBsb2FkIGFsbCBjb21tb24gaW1hZ2UgdHlwZXM6IHBuZywganBnLCBnaWYgYW5kIGFueSBvdGhlciBmb3JtYXQgdGhlIGJyb3dzZXIgY2FuIG5hdGl2ZWx5IGhhbmRsZS5cclxuICpcclxuICogVGhlIGtleSBtdXN0IGJlIGEgdW5pcXVlIFN0cmluZy4gSXQgaXMgdXNlZCB0byBhZGQgdGhlIGZpbGUgdG8gdGhlIGdsb2JhbCBUZXh0dXJlIE1hbmFnZXIgdXBvbiBhIHN1Y2Nlc3NmdWwgbG9hZC5cclxuICogVGhlIGtleSBzaG91bGQgYmUgdW5pcXVlIGJvdGggaW4gdGVybXMgb2YgZmlsZXMgYmVpbmcgbG9hZGVkIGFuZCBmaWxlcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICogTG9hZGluZyBhIGZpbGUgdXNpbmcgYSBrZXkgdGhhdCBpcyBhbHJlYWR5IHRha2VuIHdpbGwgcmVzdWx0IGluIGEgd2FybmluZy4gSWYgeW91IHdpc2ggdG8gcmVwbGFjZSBhbiBleGlzdGluZyBmaWxlXHJcbiAqIHRoZW4gcmVtb3ZlIGl0IGZyb20gdGhlIFRleHR1cmUgTWFuYWdlciBmaXJzdCwgYmVmb3JlIGxvYWRpbmcgYSBuZXcgb25lLlxyXG4gKlxyXG4gKiBJbnN0ZWFkIG9mIHBhc3NpbmcgYXJndW1lbnRzIHlvdSBjYW4gcGFzcyBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBzdWNoIGFzOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQuYXRsYXNYTUwoe1xyXG4gKiAgICAga2V5OiAnbWFpbm1lbnUnLFxyXG4gKiAgICAgdGV4dHVyZVVSTDogJ2ltYWdlcy9NYWluTWVudS5wbmcnLFxyXG4gKiAgICAgYXRsYXNVUkw6ICdpbWFnZXMvTWFpbk1lbnUueG1sJ1xyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkF0bGFzWE1MRmlsZUNvbmZpZ2AgZm9yIG1vcmUgZGV0YWlscy5cclxuICpcclxuICogT25jZSB0aGUgYXRsYXMgaGFzIGZpbmlzaGVkIGxvYWRpbmcgeW91IGNhbiB1c2UgZnJhbWVzIGZyb20gaXQgYXMgdGV4dHVyZXMgZm9yIGEgR2FtZSBPYmplY3QgYnkgcmVmZXJlbmNpbmcgaXRzIGtleTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmF0bGFzWE1MKCdtYWlubWVudScsICdpbWFnZXMvTWFpbk1lbnUucG5nJywgJ2ltYWdlcy9NYWluTWVudS54bWwnKTtcclxuICogLy8gYW5kIGxhdGVyIGluIHlvdXIgZ2FtZSAuLi5cclxuICogdGhpcy5hZGQuaW1hZ2UoeCwgeSwgJ21haW5tZW51JywgJ2JhY2tncm91bmQnKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIFRvIGdldCBhIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSBmcmFtZXMgd2l0aGluIGFuIGF0bGFzIHBsZWFzZSBjb25zdWx0IHlvdXIgVGV4dHVyZSBBdGxhcyBzb2Z0d2FyZS5cclxuICpcclxuICogSWYgeW91IGhhdmUgc3BlY2lmaWVkIGEgcHJlZml4IGluIHRoZSBsb2FkZXIsIHZpYSBgTG9hZGVyLnNldFByZWZpeGAgdGhlbiB0aGlzIHZhbHVlIHdpbGwgYmUgcHJlcGVuZGVkIHRvIHRoaXMgZmlsZXNcclxuICoga2V5LiBGb3IgZXhhbXBsZSwgaWYgdGhlIHByZWZpeCB3YXMgYE1FTlUuYCBhbmQgdGhlIGtleSB3YXMgYEJhY2tncm91bmRgIHRoZSBmaW5hbCBrZXkgd2lsbCBiZSBgTUVOVS5CYWNrZ3JvdW5kYCBhbmRcclxuICogdGhpcyBpcyB3aGF0IHlvdSB3b3VsZCB1c2UgdG8gcmV0cmlldmUgdGhlIGltYWdlIGZyb20gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICpcclxuICogVGhlIFVSTCBjYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUuIElmIHRoZSBVUkwgaXMgcmVsYXRpdmUgdGhlIGBMb2FkZXIuYmFzZVVSTGAgYW5kIGBMb2FkZXIucGF0aGAgdmFsdWVzIHdpbGwgYmUgcHJlcGVuZGVkIHRvIGl0LlxyXG4gKlxyXG4gKiBJZiB0aGUgVVJMIGlzbid0IHNwZWNpZmllZCB0aGUgTG9hZGVyIHdpbGwgdGFrZSB0aGUga2V5IGFuZCBjcmVhdGUgYSBmaWxlbmFtZSBmcm9tIHRoYXQuIEZvciBleGFtcGxlIGlmIHRoZSBrZXkgaXMgXCJhbGllblwiXHJcbiAqIGFuZCBubyBVUkwgaXMgZ2l2ZW4gdGhlbiB0aGUgTG9hZGVyIHdpbGwgc2V0IHRoZSBVUkwgdG8gYmUgXCJhbGllbi5wbmdcIi4gSXQgd2lsbCBhbHdheXMgYWRkIGAucG5nYCBhcyB0aGUgZXh0ZW5zaW9uLCBhbHRob3VnaFxyXG4gKiB0aGlzIGNhbiBiZSBvdmVycmlkZGVuIGlmIHVzaW5nIGFuIG9iamVjdCBpbnN0ZWFkIG9mIG1ldGhvZCBhcmd1bWVudHMuIElmIHlvdSBkbyBub3QgZGVzaXJlIHRoaXMgYWN0aW9uIHRoZW4gcHJvdmlkZSBhIFVSTC5cclxuICpcclxuICogUGhhc2VyIGFsc28gc3VwcG9ydHMgdGhlIGF1dG9tYXRpYyBsb2FkaW5nIG9mIGFzc29jaWF0ZWQgbm9ybWFsIG1hcHMuIElmIHlvdSBoYXZlIGEgbm9ybWFsIG1hcCB0byBnbyB3aXRoIHRoaXMgaW1hZ2UsXHJcbiAqIHRoZW4geW91IGNhbiBzcGVjaWZ5IGl0IGJ5IHByb3ZpZGluZyBhbiBhcnJheSBhcyB0aGUgYHVybGAgd2hlcmUgdGhlIHNlY29uZCBlbGVtZW50IGlzIHRoZSBub3JtYWwgbWFwOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQuYXRsYXNYTUwoJ21haW5tZW51JywgWyAnaW1hZ2VzL01haW5NZW51LnBuZycsICdpbWFnZXMvTWFpbk1lbnUtbi5wbmcnIF0sICdpbWFnZXMvTWFpbk1lbnUueG1sJyk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBPciwgaWYgeW91IGFyZSB1c2luZyBhIGNvbmZpZyBvYmplY3QgdXNlIHRoZSBgbm9ybWFsTWFwYCBwcm9wZXJ0eTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmF0bGFzWE1MKHtcclxuICogICAgIGtleTogJ21haW5tZW51JyxcclxuICogICAgIHRleHR1cmVVUkw6ICdpbWFnZXMvTWFpbk1lbnUucG5nJyxcclxuICogICAgIG5vcm1hbE1hcDogJ2ltYWdlcy9NYWluTWVudS1uLnBuZycsXHJcbiAqICAgICBhdGxhc1VSTDogJ2ltYWdlcy9NYWluTWVudS54bWwnXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogVGhlIG5vcm1hbCBtYXAgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBzYW1lIGNvbmRpdGlvbnMgYXMgdGhlIGltYWdlIGZpbGUgd2l0aCByZWdhcmQgdG8gdGhlIHBhdGgsIGJhc2VVUkwsIENPUnMgYW5kIFhIUiBTZXR0aW5ncy5cclxuICogTm9ybWFsIG1hcHMgYXJlIGEgV2ViR0wgb25seSBmZWF0dXJlLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGUgYWJpbGl0eSB0byBsb2FkIHRoaXMgdHlwZSBvZiBmaWxlIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIEF0bGFzIFhNTCBGaWxlIHR5cGUgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIEl0IGlzIGF2YWlsYWJsZSBpbiB0aGUgZGVmYXVsdCBidWlsZCBidXQgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gY3VzdG9tIGJ1aWxkcy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhdGxhc1hNTFxyXG4gKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYWRkRmlsZUV2ZW50XHJcbiAqIEBzaW5jZSAzLjcuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuQXRsYXNYTUxGaWxlQ29uZmlnfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkF0bGFzWE1MRmlsZUNvbmZpZ1tdKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhcnJheSBvZiB0aGVtLlxyXG4gKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gW3RleHR1cmVVUkxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoZSB0ZXh0dXJlIGltYWdlIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4ucG5nYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4ucG5nXCIuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXRsYXNVUkxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoZSB0ZXh0dXJlIGF0bGFzIHhtbCBkYXRhIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4ueG1sYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4ueG1sXCIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3RleHR1cmVYaHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBhdGxhcyBpbWFnZSBmaWxlLiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFthdGxhc1hoclNldHRpbmdzXSAtIEFuIFhIUiBTZXR0aW5ncyBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhlIGF0bGFzIHhtbCBmaWxlLiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gVGhlIExvYWRlciBpbnN0YW5jZS5cclxuICovXHJcbkZpbGVUeXBlc01hbmFnZXIucmVnaXN0ZXIoJ2F0bGFzWE1MJywgZnVuY3Rpb24gKGtleSwgdGV4dHVyZVVSTCwgYXRsYXNVUkwsIHRleHR1cmVYaHJTZXR0aW5ncywgYXRsYXNYaHJTZXR0aW5ncylcclxue1xyXG4gICAgdmFyIG11bHRpZmlsZTtcclxuXHJcbiAgICAvLyAgU3VwcG9ydHMgYW4gT2JqZWN0IGZpbGUgZGVmaW5pdGlvbiBpbiB0aGUga2V5IGFyZ3VtZW50XHJcbiAgICAvLyAgT3IgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpbiB0aGUga2V5IGFyZ3VtZW50XHJcbiAgICAvLyAgT3IgYSBzaW5nbGUgZW50cnkgd2hlcmUgYWxsIGFyZ3VtZW50cyBoYXZlIGJlZW4gZGVmaW5lZFxyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXkubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBtdWx0aWZpbGUgPSBuZXcgQXRsYXNYTUxGaWxlKHRoaXMsIGtleVtpXSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGUobXVsdGlmaWxlLmZpbGVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgbXVsdGlmaWxlID0gbmV3IEF0bGFzWE1MRmlsZSh0aGlzLCBrZXksIHRleHR1cmVVUkwsIGF0bGFzVVJMLCB0ZXh0dXJlWGhyU2V0dGluZ3MsIGF0bGFzWGhyU2V0dGluZ3MpO1xyXG5cclxuICAgICAgICB0aGlzLmFkZEZpbGUobXVsdGlmaWxlLmZpbGVzKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEF0bGFzWE1MRmlsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/AtlasXMLFile.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/filetypes/AudioFile.js":
/*!***************************************************************!*\
!*** ./node_modules/phaser/src/loader/filetypes/AudioFile.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../../const */ \"./node_modules/phaser/src/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar HTML5AudioFile = __webpack_require__(/*! ./HTML5AudioFile */ \"./node_modules/phaser/src/loader/filetypes/HTML5AudioFile.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Audio File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#audio method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#audio.\r\n *\r\n * @class AudioFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.AudioFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {any} [urlConfig] - The absolute or relative URL to load this file from in a config object.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n * @param {AudioContext} [audioContext] - The AudioContext this file will use to process itself.\r\n */\r\nvar AudioFile = new Class({\r\n\r\n Extends: File,\r\n\r\n initialize:\r\n\r\n // URL is an object created by AudioFile.findAudioURL\r\n function AudioFile (loader, key, urlConfig, xhrSettings, audioContext)\r\n {\r\n if (IsPlainObject(key))\r\n {\r\n var config = key;\r\n\r\n key = GetFastValue(config, 'key');\r\n xhrSettings = GetFastValue(config, 'xhrSettings');\r\n audioContext = GetFastValue(config, 'context', audioContext);\r\n }\r\n\r\n var fileConfig = {\r\n type: 'audio',\r\n cache: loader.cacheManager.audio,\r\n extension: urlConfig.type,\r\n responseType: 'arraybuffer',\r\n key: key,\r\n url: urlConfig.url,\r\n xhrSettings: xhrSettings,\r\n config: { context: audioContext }\r\n };\r\n\r\n File.call(this, loader, fileConfig);\r\n },\r\n\r\n /**\r\n * Called automatically by Loader.nextFile.\r\n * This method controls what extra work this File does with its loaded data.\r\n *\r\n * @method Phaser.Loader.FileTypes.AudioFile#onProcess\r\n * @since 3.0.0\r\n */\r\n onProcess: function ()\r\n {\r\n this.state = CONST.FILE_PROCESSING;\r\n\r\n var _this = this;\r\n\r\n // interesting read https://github.com/WebAudio/web-audio-api/issues/1305\r\n this.config.context.decodeAudioData(this.xhrLoader.response,\r\n function (audioBuffer)\r\n {\r\n _this.data = audioBuffer;\r\n\r\n _this.onProcessComplete();\r\n },\r\n function (e)\r\n {\r\n // eslint-disable-next-line no-console\r\n console.error('Error decoding audio: ' + this.key + ' - ', e ? e.message : null);\r\n\r\n _this.onProcessError();\r\n }\r\n );\r\n\r\n this.config.context = null;\r\n }\r\n\r\n});\r\n\r\nAudioFile.create = function (loader, key, urls, config, xhrSettings)\r\n{\r\n var game = loader.systems.game;\r\n var audioConfig = game.config.audio;\r\n var deviceAudio = game.device.audio;\r\n\r\n // url may be inside key, which may be an object\r\n if (IsPlainObject(key))\r\n {\r\n urls = GetFastValue(key, 'url', []);\r\n config = GetFastValue(key, 'config', {});\r\n }\r\n\r\n var urlConfig = AudioFile.getAudioURL(game, urls);\r\n\r\n if (!urlConfig)\r\n {\r\n return null;\r\n }\r\n\r\n // https://developers.google.com/web/updates/2012/02/HTML5-audio-and-the-Web-Audio-API-are-BFFs\r\n // var stream = GetFastValue(config, 'stream', false);\r\n\r\n if (deviceAudio.webAudio && !(audioConfig && audioConfig.disableWebAudio))\r\n {\r\n return new AudioFile(loader, key, urlConfig, xhrSettings, game.sound.context);\r\n }\r\n else\r\n {\r\n return new HTML5AudioFile(loader, key, urlConfig, config);\r\n }\r\n};\r\n\r\nAudioFile.getAudioURL = function (game, urls)\r\n{\r\n if (!Array.isArray(urls))\r\n {\r\n urls = [ urls ];\r\n }\r\n\r\n for (var i = 0; i < urls.length; i++)\r\n {\r\n var url = GetFastValue(urls[i], 'url', urls[i]);\r\n\r\n if (url.indexOf('blob:') === 0 || url.indexOf('data:') === 0)\r\n {\r\n return url;\r\n }\r\n\r\n var audioType = url.match(/\\.([a-zA-Z0-9]+)($|\\?)/);\r\n\r\n audioType = GetFastValue(urls[i], 'type', (audioType) ? audioType[1] : '').toLowerCase();\r\n\r\n if (game.device.audio[audioType])\r\n {\r\n return {\r\n url: url,\r\n type: audioType\r\n };\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Adds an Audio or HTML5Audio file, or array of audio files, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n * this.load.audio('title', [ 'music/Title.ogg', 'music/Title.mp3', 'music/Title.m4a' ]);\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * The key must be a unique String. It is used to add the file to the global Audio Cache upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Audio Cache.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Audio Cache first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.audio({\r\n * key: 'title',\r\n * url: [ 'music/Title.ogg', 'music/Title.mp3', 'music/Title.m4a' ]\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.AudioFileConfig` for more details.\r\n *\r\n * The URLs can be relative or absolute. If the URLs are relative the `Loader.baseURL` and `Loader.path` values will be prepended to them.\r\n *\r\n * Due to different browsers supporting different audio file types you should usually provide your audio files in a variety of formats.\r\n * ogg, mp3 and m4a are the most common. If you provide an array of URLs then the Loader will determine which _one_ file to load based on\r\n * browser support.\r\n *\r\n * If audio has been disabled in your game, either via the game config, or lack of support from the device, then no audio will be loaded.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Audio File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#audio\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.AudioFileConfig|Phaser.Types.Loader.FileTypes.AudioFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {(string|string[])} [urls] - The absolute or relative URL to load the audio files from.\r\n * @param {any} [config] - An object containing an `instances` property for HTML5Audio. Defaults to 1.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('audio', function (key, urls, config, xhrSettings)\r\n{\r\n var game = this.systems.game;\r\n var audioConfig = game.config.audio;\r\n var deviceAudio = game.device.audio;\r\n\r\n if ((audioConfig && audioConfig.noAudio) || (!deviceAudio.webAudio && !deviceAudio.audioData))\r\n {\r\n // Sounds are disabled, so skip loading audio\r\n return this;\r\n }\r\n\r\n var audioFile;\r\n\r\n if (Array.isArray(key))\r\n {\r\n for (var i = 0; i < key.length; i++)\r\n {\r\n // If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n audioFile = AudioFile.create(this, key[i]);\r\n\r\n if (audioFile)\r\n {\r\n this.addFile(audioFile);\r\n }\r\n }\r\n }\r\n else\r\n {\r\n audioFile = AudioFile.create(this, key, urls, config, xhrSettings);\r\n\r\n if (audioFile)\r\n {\r\n this.addFile(audioFile);\r\n }\r\n }\r\n\r\n return this;\r\n});\r\n\r\nmodule.exports = AudioFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0F1ZGlvRmlsZS5qcz81NzQ0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLFlBQVksbUJBQU8sQ0FBQyx1REFBYTtBQUNqQyxXQUFXLG1CQUFPLENBQUMseURBQVM7QUFDNUIsdUJBQXVCLG1CQUFPLENBQUMsaUZBQXFCO0FBQ3BELG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCxxQkFBcUIsbUJBQU8sQ0FBQyxzRkFBa0I7QUFDL0Msb0JBQW9CLG1CQUFPLENBQUMsaUdBQWtDOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyx1REFBdUQ7QUFDbEUsV0FBVyxJQUFJO0FBQ2YsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVyxhQUFhO0FBQ3hCO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDO0FBQy9DOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx1R0FBdUc7QUFDbEgsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyxJQUFJO0FBQ2YsV0FBVyxzQ0FBc0M7QUFDakQ7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCLGdCQUFnQjtBQUN2QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbG9hZGVyL2ZpbGV0eXBlcy9BdWRpb0ZpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XHJcbnZhciBGaWxlID0gcmVxdWlyZSgnLi4vRmlsZScpO1xyXG52YXIgRmlsZVR5cGVzTWFuYWdlciA9IHJlcXVpcmUoJy4uL0ZpbGVUeXBlc01hbmFnZXInKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIEhUTUw1QXVkaW9GaWxlID0gcmVxdWlyZSgnLi9IVE1MNUF1ZGlvRmlsZScpO1xyXG52YXIgSXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9Jc1BsYWluT2JqZWN0Jyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIHNpbmdsZSBBdWRpbyBGaWxlIHN1aXRhYmxlIGZvciBsb2FkaW5nIGJ5IHRoZSBMb2FkZXIuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSBjcmVhdGVkIHdoZW4geW91IHVzZSB0aGUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYXVkaW8gbWV0aG9kIGFuZCBhcmUgbm90IHR5cGljYWxseSBjcmVhdGVkIGRpcmVjdGx5LlxyXG4gKiBcclxuICogRm9yIGRvY3VtZW50YXRpb24gYWJvdXQgd2hhdCBhbGwgdGhlIGFyZ3VtZW50cyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIG1lYW4gcGxlYXNlIHNlZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhdWRpby5cclxuICpcclxuICogQGNsYXNzIEF1ZGlvRmlsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLkZpbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gbG9hZGVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIExvYWRlciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIGZpbGUuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5BdWRpb0ZpbGVDb25maWcpfSBrZXkgLSBUaGUga2V5IHRvIHVzZSBmb3IgdGhpcyBmaWxlLCBvciBhIGZpbGUgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAqIEBwYXJhbSB7YW55fSBbdXJsQ29uZmlnXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGlzIGZpbGUgZnJvbSBpbiBhIGNvbmZpZyBvYmplY3QuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEV4dHJhIFhIUiBTZXR0aW5ncyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHtBdWRpb0NvbnRleHR9IFthdWRpb0NvbnRleHRdIC0gVGhlIEF1ZGlvQ29udGV4dCB0aGlzIGZpbGUgd2lsbCB1c2UgdG8gcHJvY2VzcyBpdHNlbGYuXHJcbiAqL1xyXG52YXIgQXVkaW9GaWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBGaWxlLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgLy8gIFVSTCBpcyBhbiBvYmplY3QgY3JlYXRlZCBieSBBdWRpb0ZpbGUuZmluZEF1ZGlvVVJMXHJcbiAgICBmdW5jdGlvbiBBdWRpb0ZpbGUgKGxvYWRlciwga2V5LCB1cmxDb25maWcsIHhoclNldHRpbmdzLCBhdWRpb0NvbnRleHQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKElzUGxhaW5PYmplY3Qoa2V5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjb25maWcgPSBrZXk7XHJcblxyXG4gICAgICAgICAgICBrZXkgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAna2V5Jyk7XHJcbiAgICAgICAgICAgIHhoclNldHRpbmdzID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3hoclNldHRpbmdzJyk7XHJcbiAgICAgICAgICAgIGF1ZGlvQ29udGV4dCA9IEdldEZhc3RWYWx1ZShjb25maWcsICdjb250ZXh0JywgYXVkaW9Db250ZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBmaWxlQ29uZmlnID0ge1xyXG4gICAgICAgICAgICB0eXBlOiAnYXVkaW8nLFxyXG4gICAgICAgICAgICBjYWNoZTogbG9hZGVyLmNhY2hlTWFuYWdlci5hdWRpbyxcclxuICAgICAgICAgICAgZXh0ZW5zaW9uOiB1cmxDb25maWcudHlwZSxcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxyXG4gICAgICAgICAgICBrZXk6IGtleSxcclxuICAgICAgICAgICAgdXJsOiB1cmxDb25maWcudXJsLFxyXG4gICAgICAgICAgICB4aHJTZXR0aW5nczogeGhyU2V0dGluZ3MsXHJcbiAgICAgICAgICAgIGNvbmZpZzogeyBjb250ZXh0OiBhdWRpb0NvbnRleHQgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIEZpbGUuY2FsbCh0aGlzLCBsb2FkZXIsIGZpbGVDb25maWcpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IExvYWRlci5uZXh0RmlsZS5cclxuICAgICAqIFRoaXMgbWV0aG9kIGNvbnRyb2xzIHdoYXQgZXh0cmEgd29yayB0aGlzIEZpbGUgZG9lcyB3aXRoIGl0cyBsb2FkZWQgZGF0YS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLkF1ZGlvRmlsZSNvblByb2Nlc3NcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBvblByb2Nlc3M6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTlNULkZJTEVfUFJPQ0VTU0lORztcclxuXHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgLy8gaW50ZXJlc3RpbmcgcmVhZCBodHRwczovL2dpdGh1Yi5jb20vV2ViQXVkaW8vd2ViLWF1ZGlvLWFwaS9pc3N1ZXMvMTMwNVxyXG4gICAgICAgIHRoaXMuY29uZmlnLmNvbnRleHQuZGVjb2RlQXVkaW9EYXRhKHRoaXMueGhyTG9hZGVyLnJlc3BvbnNlLFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoYXVkaW9CdWZmZXIpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmRhdGEgPSBhdWRpb0J1ZmZlcjtcclxuXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5vblByb2Nlc3NDb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRlY29kaW5nIGF1ZGlvOiAnICsgdGhpcy5rZXkgKyAnIC0gJywgZSA/IGUubWVzc2FnZSA6IG51bGwpO1xyXG5cclxuICAgICAgICAgICAgICAgIF90aGlzLm9uUHJvY2Vzc0Vycm9yKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmNvbmZpZy5jb250ZXh0ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuQXVkaW9GaWxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChsb2FkZXIsIGtleSwgdXJscywgY29uZmlnLCB4aHJTZXR0aW5ncylcclxue1xyXG4gICAgdmFyIGdhbWUgPSBsb2FkZXIuc3lzdGVtcy5nYW1lO1xyXG4gICAgdmFyIGF1ZGlvQ29uZmlnID0gZ2FtZS5jb25maWcuYXVkaW87XHJcbiAgICB2YXIgZGV2aWNlQXVkaW8gPSBnYW1lLmRldmljZS5hdWRpbztcclxuXHJcbiAgICAvLyAgdXJsIG1heSBiZSBpbnNpZGUga2V5LCB3aGljaCBtYXkgYmUgYW4gb2JqZWN0XHJcbiAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIHVybHMgPSBHZXRGYXN0VmFsdWUoa2V5LCAndXJsJywgW10pO1xyXG4gICAgICAgIGNvbmZpZyA9IEdldEZhc3RWYWx1ZShrZXksICdjb25maWcnLCB7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHVybENvbmZpZyA9IEF1ZGlvRmlsZS5nZXRBdWRpb1VSTChnYW1lLCB1cmxzKTtcclxuXHJcbiAgICBpZiAoIXVybENvbmZpZylcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS93ZWIvdXBkYXRlcy8yMDEyLzAyL0hUTUw1LWF1ZGlvLWFuZC10aGUtV2ViLUF1ZGlvLUFQSS1hcmUtQkZGc1xyXG4gICAgLy8gdmFyIHN0cmVhbSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdzdHJlYW0nLCBmYWxzZSk7XHJcblxyXG4gICAgaWYgKGRldmljZUF1ZGlvLndlYkF1ZGlvICYmICEoYXVkaW9Db25maWcgJiYgYXVkaW9Db25maWcuZGlzYWJsZVdlYkF1ZGlvKSlcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gbmV3IEF1ZGlvRmlsZShsb2FkZXIsIGtleSwgdXJsQ29uZmlnLCB4aHJTZXR0aW5ncywgZ2FtZS5zb3VuZC5jb250ZXh0KTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gbmV3IEhUTUw1QXVkaW9GaWxlKGxvYWRlciwga2V5LCB1cmxDb25maWcsIGNvbmZpZyk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5BdWRpb0ZpbGUuZ2V0QXVkaW9VUkwgPSBmdW5jdGlvbiAoZ2FtZSwgdXJscylcclxue1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHVybHMpKVxyXG4gICAge1xyXG4gICAgICAgIHVybHMgPSBbIHVybHMgXTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVybHMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHVybCA9IEdldEZhc3RWYWx1ZSh1cmxzW2ldLCAndXJsJywgdXJsc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICh1cmwuaW5kZXhPZignYmxvYjonKSA9PT0gMCB8fCB1cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiB1cmw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgYXVkaW9UeXBlID0gdXJsLm1hdGNoKC9cXC4oW2EtekEtWjAtOV0rKSgkfFxcPykvKTtcclxuXHJcbiAgICAgICAgYXVkaW9UeXBlID0gR2V0RmFzdFZhbHVlKHVybHNbaV0sICd0eXBlJywgKGF1ZGlvVHlwZSkgPyBhdWRpb1R5cGVbMV0gOiAnJykudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgaWYgKGdhbWUuZGV2aWNlLmF1ZGlvW2F1ZGlvVHlwZV0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBhdWRpb1R5cGVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcblxyXG4vKipcclxuICogQWRkcyBhbiBBdWRpbyBvciBIVE1MNUF1ZGlvIGZpbGUsIG9yIGFycmF5IG9mIGF1ZGlvIGZpbGVzLCB0byB0aGUgY3VycmVudCBsb2FkIHF1ZXVlLlxyXG4gKlxyXG4gKiBZb3UgY2FuIGNhbGwgdGhpcyBtZXRob2QgZnJvbSB3aXRoaW4geW91ciBTY2VuZSdzIGBwcmVsb2FkYCwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZmlsZXMgeW91IHdpc2ggdG8gbG9hZDpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogZnVuY3Rpb24gcHJlbG9hZCAoKVxyXG4gKiB7XHJcbiAqICAgICB0aGlzLmxvYWQuYXVkaW8oJ3RpdGxlJywgWyAnbXVzaWMvVGl0bGUub2dnJywgJ211c2ljL1RpdGxlLm1wMycsICdtdXNpYy9UaXRsZS5tNGEnIF0pO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgZmlsZSBpcyAqKm5vdCoqIGxvYWRlZCByaWdodCBhd2F5LiBJdCBpcyBhZGRlZCB0byBhIHF1ZXVlIHJlYWR5IHRvIGJlIGxvYWRlZCBlaXRoZXIgd2hlbiB0aGUgbG9hZGVyIHN0YXJ0cyxcclxuICogb3IgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIHdoZW4gdGhlIG5leHQgZnJlZSBsb2FkIHNsb3QgYmVjb21lcyBhdmFpbGFibGUuIFRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGlmIHlvdVxyXG4gKiBhcmUgY2FsbGluZyB0aGlzIGZyb20gd2l0aGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QsIG9yIGEgcmVsYXRlZCBjYWxsYmFjay4gQmVjYXVzZSB0aGUgZmlsZSBpcyBxdWV1ZWRcclxuICogaXQgbWVhbnMgeW91IGNhbm5vdCB1c2UgdGhlIGZpbGUgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgYnV0IG11c3Qgd2FpdCBmb3IgdGhlIGZpbGUgdG8gY29tcGxldGUuXHJcbiAqIFRoZSB0eXBpY2FsIGZsb3cgZm9yIGEgUGhhc2VyIFNjZW5lIGlzIHRoYXQgeW91IGxvYWQgYXNzZXRzIGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QgYW5kIHRoZW4gd2hlbiB0aGVcclxuICogU2NlbmUncyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aG9zZSBhc3NldHMgYXJlIHJlYWR5IGZvciB1c2UgYW5kIGhhdmUgYmVlblxyXG4gKiBsb2FkZWQuXHJcbiAqIFxyXG4gKiBUaGUga2V5IG11c3QgYmUgYSB1bmlxdWUgU3RyaW5nLiBJdCBpcyB1c2VkIHRvIGFkZCB0aGUgZmlsZSB0byB0aGUgZ2xvYmFsIEF1ZGlvIENhY2hlIHVwb24gYSBzdWNjZXNzZnVsIGxvYWQuXHJcbiAqIFRoZSBrZXkgc2hvdWxkIGJlIHVuaXF1ZSBib3RoIGluIHRlcm1zIG9mIGZpbGVzIGJlaW5nIGxvYWRlZCBhbmQgZmlsZXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBBdWRpbyBDYWNoZS5cclxuICogTG9hZGluZyBhIGZpbGUgdXNpbmcgYSBrZXkgdGhhdCBpcyBhbHJlYWR5IHRha2VuIHdpbGwgcmVzdWx0IGluIGEgd2FybmluZy4gSWYgeW91IHdpc2ggdG8gcmVwbGFjZSBhbiBleGlzdGluZyBmaWxlXHJcbiAqIHRoZW4gcmVtb3ZlIGl0IGZyb20gdGhlIEF1ZGlvIENhY2hlIGZpcnN0LCBiZWZvcmUgbG9hZGluZyBhIG5ldyBvbmUuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhcmd1bWVudHMgeW91IGNhbiBwYXNzIGEgY29uZmlndXJhdGlvbiBvYmplY3QsIHN1Y2ggYXM6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5hdWRpbyh7XHJcbiAqICAgICBrZXk6ICd0aXRsZScsXHJcbiAqICAgICB1cmw6IFsgJ211c2ljL1RpdGxlLm9nZycsICdtdXNpYy9UaXRsZS5tcDMnLCAnbXVzaWMvVGl0bGUubTRhJyBdXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgUGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuQXVkaW9GaWxlQ29uZmlnYCBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKlxyXG4gKiBUaGUgVVJMcyBjYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUuIElmIHRoZSBVUkxzIGFyZSByZWxhdGl2ZSB0aGUgYExvYWRlci5iYXNlVVJMYCBhbmQgYExvYWRlci5wYXRoYCB2YWx1ZXMgd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhlbS5cclxuICpcclxuICogRHVlIHRvIGRpZmZlcmVudCBicm93c2VycyBzdXBwb3J0aW5nIGRpZmZlcmVudCBhdWRpbyBmaWxlIHR5cGVzIHlvdSBzaG91bGQgdXN1YWxseSBwcm92aWRlIHlvdXIgYXVkaW8gZmlsZXMgaW4gYSB2YXJpZXR5IG9mIGZvcm1hdHMuXHJcbiAqIG9nZywgbXAzIGFuZCBtNGEgYXJlIHRoZSBtb3N0IGNvbW1vbi4gSWYgeW91IHByb3ZpZGUgYW4gYXJyYXkgb2YgVVJMcyB0aGVuIHRoZSBMb2FkZXIgd2lsbCBkZXRlcm1pbmUgd2hpY2ggX29uZV8gZmlsZSB0byBsb2FkIGJhc2VkIG9uXHJcbiAqIGJyb3dzZXIgc3VwcG9ydC5cclxuICpcclxuICogSWYgYXVkaW8gaGFzIGJlZW4gZGlzYWJsZWQgaW4geW91ciBnYW1lLCBlaXRoZXIgdmlhIHRoZSBnYW1lIGNvbmZpZywgb3IgbGFjayBvZiBzdXBwb3J0IGZyb20gdGhlIGRldmljZSwgdGhlbiBubyBhdWRpbyB3aWxsIGJlIGxvYWRlZC5cclxuICpcclxuICogTm90ZTogVGhlIGFiaWxpdHkgdG8gbG9hZCB0aGlzIHR5cGUgb2YgZmlsZSB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBBdWRpbyBGaWxlIHR5cGUgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIEl0IGlzIGF2YWlsYWJsZSBpbiB0aGUgZGVmYXVsdCBidWlsZCBidXQgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gY3VzdG9tIGJ1aWxkcy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhdWRpb1xyXG4gKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYWRkRmlsZUV2ZW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuQXVkaW9GaWxlQ29uZmlnfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkF1ZGlvRmlsZUNvbmZpZ1tdKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhcnJheSBvZiB0aGVtLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8c3RyaW5nW10pfSBbdXJsc10gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhlIGF1ZGlvIGZpbGVzIGZyb20uXHJcbiAqIEBwYXJhbSB7YW55fSBbY29uZmlnXSAtIEFuIG9iamVjdCBjb250YWluaW5nIGFuIGBpbnN0YW5jZXNgIHByb3BlcnR5IGZvciBIVE1MNUF1ZGlvLiBEZWZhdWx0cyB0byAxLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt4aHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBUaGUgTG9hZGVyIGluc3RhbmNlLlxyXG4gKi9cclxuRmlsZVR5cGVzTWFuYWdlci5yZWdpc3RlcignYXVkaW8nLCBmdW5jdGlvbiAoa2V5LCB1cmxzLCBjb25maWcsIHhoclNldHRpbmdzKVxyXG57XHJcbiAgICB2YXIgZ2FtZSA9IHRoaXMuc3lzdGVtcy5nYW1lO1xyXG4gICAgdmFyIGF1ZGlvQ29uZmlnID0gZ2FtZS5jb25maWcuYXVkaW87XHJcbiAgICB2YXIgZGV2aWNlQXVkaW8gPSBnYW1lLmRldmljZS5hdWRpbztcclxuXHJcbiAgICBpZiAoKGF1ZGlvQ29uZmlnICYmIGF1ZGlvQ29uZmlnLm5vQXVkaW8pIHx8ICghZGV2aWNlQXVkaW8ud2ViQXVkaW8gJiYgIWRldmljZUF1ZGlvLmF1ZGlvRGF0YSkpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gIFNvdW5kcyBhcmUgZGlzYWJsZWQsIHNvIHNraXAgbG9hZGluZyBhdWRpb1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBhdWRpb0ZpbGU7XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5KSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBJZiBpdCdzIGFuIGFycmF5IGl0IGhhcyB0byBiZSBhbiBhcnJheSBvZiBPYmplY3RzLCBzbyB3ZSBnZXQgZXZlcnl0aGluZyBvdXQgb2YgdGhlICdrZXknIG9iamVjdFxyXG4gICAgICAgICAgICBhdWRpb0ZpbGUgPSBBdWRpb0ZpbGUuY3JlYXRlKHRoaXMsIGtleVtpXSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYXVkaW9GaWxlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZpbGUoYXVkaW9GaWxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBhdWRpb0ZpbGUgPSBBdWRpb0ZpbGUuY3JlYXRlKHRoaXMsIGtleSwgdXJscywgY29uZmlnLCB4aHJTZXR0aW5ncyk7XHJcblxyXG4gICAgICAgIGlmIChhdWRpb0ZpbGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGUoYXVkaW9GaWxlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBdWRpb0ZpbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/AudioFile.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/filetypes/AudioSpriteFile.js":
/*!*********************************************************************!*\
!*** ./node_modules/phaser/src/loader/filetypes/AudioSpriteFile.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar AudioFile = __webpack_require__(/*! ./AudioFile.js */ \"./node_modules/phaser/src/loader/filetypes/AudioFile.js\");\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\nvar JSONFile = __webpack_require__(/*! ./JSONFile.js */ \"./node_modules/phaser/src/loader/filetypes/JSONFile.js\");\r\nvar MultiFile = __webpack_require__(/*! ../MultiFile.js */ \"./node_modules/phaser/src/loader/MultiFile.js\");\r\n\r\n/**\r\n * @classdesc\r\n * An Audio Sprite File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#audioSprite method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#audioSprite.\r\n *\r\n * @class AudioSpriteFile\r\n * @extends Phaser.Loader.MultiFile\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.7.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.AudioSpriteFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} jsonURL - The absolute or relative URL to load the json file from. Or a well formed JSON object to use instead.\r\n * @param {{(string|string[])}} [audioURL] - The absolute or relative URL to load the audio file from. If empty it will be obtained by parsing the JSON file.\r\n * @param {any} [audioConfig] - The audio configuration options.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [audioXhrSettings] - An XHR Settings configuration object for the audio file. Used in replacement of the Loaders default XHR Settings.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [jsonXhrSettings] - An XHR Settings configuration object for the json file. Used in replacement of the Loaders default XHR Settings.\r\n */\r\nvar AudioSpriteFile = new Class({\r\n\r\n Extends: MultiFile,\r\n\r\n initialize:\r\n\r\n function AudioSpriteFile (loader, key, jsonURL, audioURL, audioConfig, audioXhrSettings, jsonXhrSettings)\r\n {\r\n if (IsPlainObject(key))\r\n {\r\n var config = key;\r\n\r\n key = GetFastValue(config, 'key');\r\n jsonURL = GetFastValue(config, 'jsonURL');\r\n audioURL = GetFastValue(config, 'audioURL');\r\n audioConfig = GetFastValue(config, 'audioConfig');\r\n audioXhrSettings = GetFastValue(config, 'audioXhrSettings');\r\n jsonXhrSettings = GetFastValue(config, 'jsonXhrSettings');\r\n }\r\n\r\n var data;\r\n\r\n // No url? then we're going to do a json load and parse it from that\r\n if (!audioURL)\r\n {\r\n data = new JSONFile(loader, key, jsonURL, jsonXhrSettings);\r\n \r\n MultiFile.call(this, loader, 'audiosprite', key, [ data ]);\r\n\r\n this.config.resourceLoad = true;\r\n this.config.audioConfig = audioConfig;\r\n this.config.audioXhrSettings = audioXhrSettings;\r\n }\r\n else\r\n {\r\n var audio = AudioFile.create(loader, key, audioURL, audioConfig, audioXhrSettings);\r\n\r\n if (audio)\r\n {\r\n data = new JSONFile(loader, key, jsonURL, jsonXhrSettings);\r\n\r\n MultiFile.call(this, loader, 'audiosprite', key, [ audio, data ]);\r\n\r\n this.config.resourceLoad = false;\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Called by each File when it finishes loading.\r\n *\r\n * @method Phaser.Loader.FileTypes.AudioSpriteFile#onFileComplete\r\n * @since 3.7.0\r\n *\r\n * @param {Phaser.Loader.File} file - The File that has completed processing.\r\n */\r\n onFileComplete: function (file)\r\n {\r\n var index = this.files.indexOf(file);\r\n\r\n if (index !== -1)\r\n {\r\n this.pending--;\r\n\r\n if (this.config.resourceLoad && file.type === 'json' && file.data.hasOwnProperty('resources'))\r\n {\r\n // Inspect the data for the files to now load\r\n var urls = file.data.resources;\r\n\r\n var audioConfig = GetFastValue(this.config, 'audioConfig');\r\n var audioXhrSettings = GetFastValue(this.config, 'audioXhrSettings');\r\n\r\n var audio = AudioFile.create(this.loader, file.key, urls, audioConfig, audioXhrSettings);\r\n\r\n if (audio)\r\n {\r\n this.addToMultiFile(audio);\r\n\r\n this.loader.addFile(audio);\r\n }\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Adds this file to its target cache upon successful loading and processing.\r\n *\r\n * @method Phaser.Loader.FileTypes.AudioSpriteFile#addToCache\r\n * @since 3.7.0\r\n */\r\n addToCache: function ()\r\n {\r\n if (this.isReadyToProcess())\r\n {\r\n var fileA = this.files[0];\r\n var fileB = this.files[1];\r\n\r\n fileA.addToCache();\r\n fileB.addToCache();\r\n\r\n this.complete = true;\r\n }\r\n }\r\n\r\n});\r\n\r\n/**\r\n * Adds a JSON based Audio Sprite, or array of audio sprites, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n * this.load.audioSprite('kyobi', 'kyobi.json', [\r\n * 'kyobi.ogg',\r\n * 'kyobi.mp3',\r\n * 'kyobi.m4a'\r\n * ]);\r\n * }\r\n * ```\r\n * \r\n * Audio Sprites are a combination of audio files and a JSON configuration.\r\n * The JSON follows the format of that created by https://github.com/tonistiigi/audiosprite\r\n *\r\n * If the JSON file includes a 'resource' object then you can let Phaser parse it and load the audio\r\n * files automatically based on its content. To do this exclude the audio URLs from the load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n * this.load.audioSprite('kyobi', 'kyobi.json');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * If you call this from outside of `preload` then you are responsible for starting the Loader afterwards and monitoring\r\n * its events to know when it's safe to use the asset. Please see the Phaser.Loader.LoaderPlugin class for more details.\r\n *\r\n * The key must be a unique String. It is used to add the file to the global Audio Cache upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Audio Cache.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Audio Cache first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.audioSprite({\r\n * key: 'kyobi',\r\n * jsonURL: 'audio/Kyobi.json',\r\n * audioURL: [\r\n * 'audio/Kyobi.ogg',\r\n * 'audio/Kyobi.mp3',\r\n * 'audio/Kyobi.m4a'\r\n * ]\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.AudioSpriteFileConfig` for more details.\r\n *\r\n * Instead of passing a URL for the audio JSON data you can also pass in a well formed JSON object instead.\r\n *\r\n * Once the audio has finished loading you can use it create an Audio Sprite by referencing its key:\r\n * \r\n * ```javascript\r\n * this.load.audioSprite('kyobi', 'kyobi.json');\r\n * // and later in your game ...\r\n * var music = this.sound.addAudioSprite('kyobi');\r\n * music.play('title');\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `MENU.` and the key was `Background` the final key will be `MENU.Background` and\r\n * this is what you would use to retrieve the image from the Texture Manager.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * Due to different browsers supporting different audio file types you should usually provide your audio files in a variety of formats.\r\n * ogg, mp3 and m4a are the most common. If you provide an array of URLs then the Loader will determine which _one_ file to load based on\r\n * browser support.\r\n *\r\n * If audio has been disabled in your game, either via the game config, or lack of support from the device, then no audio will be loaded.\r\n * \r\n * Note: The ability to load this type of file will only be available if the Audio Sprite File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#audioSprite\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.AudioSpriteFileConfig|Phaser.Types.Loader.FileTypes.AudioSpriteFileConfig[])} key - The key to use for this file, or a file configuration object, or an array of objects.\r\n * @param {string} jsonURL - The absolute or relative URL to load the json file from. Or a well formed JSON object to use instead.\r\n * @param {(string|string[])} [audioURL] - The absolute or relative URL to load the audio file from. If empty it will be obtained by parsing the JSON file.\r\n * @param {any} [audioConfig] - The audio configuration options.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [audioXhrSettings] - An XHR Settings configuration object for the audio file. Used in replacement of the Loaders default XHR Settings.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [jsonXhrSettings] - An XHR Settings configuration object for the json file. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader.\r\n */\r\nFileTypesManager.register('audioSprite', function (key, jsonURL, audioURL, audioConfig, audioXhrSettings, jsonXhrSettings)\r\n{\r\n var game = this.systems.game;\r\n var gameAudioConfig = game.config.audio;\r\n var deviceAudio = game.device.audio;\r\n\r\n if ((gameAudioConfig && gameAudioConfig.noAudio) || (!deviceAudio.webAudio && !deviceAudio.audioData))\r\n {\r\n // Sounds are disabled, so skip loading audio\r\n return this;\r\n }\r\n\r\n var multifile;\r\n\r\n // Supports an Object file definition in the key argument\r\n // Or an array of objects in the key argument\r\n // Or a single entry where all arguments have been defined\r\n\r\n if (Array.isArray(key))\r\n {\r\n for (var i = 0; i < key.length; i++)\r\n {\r\n multifile = new AudioSpriteFile(this, key[i]);\r\n\r\n if (multifile.files)\r\n {\r\n this.addFile(multifile.files);\r\n }\r\n }\r\n }\r\n else\r\n {\r\n multifile = new AudioSpriteFile(this, key, jsonURL, audioURL, audioConfig, audioXhrSettings, jsonXhrSettings);\r\n\r\n if (multifile.files)\r\n {\r\n this.addFile(multifile.files);\r\n }\r\n }\r\n\r\n return this;\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0F1ZGlvU3ByaXRlRmlsZS5qcz84NDQ0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQywrRUFBZ0I7QUFDeEMsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2Qyx1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBcUI7QUFDcEQsbUJBQW1CLG1CQUFPLENBQUMsK0ZBQWlDO0FBQzVELG9CQUFvQixtQkFBTyxDQUFDLGlHQUFrQztBQUM5RCxlQUFlLG1CQUFPLENBQUMsNkVBQWU7QUFDdEMsZ0JBQWdCLG1CQUFPLENBQUMsc0VBQWlCOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyw2REFBNkQ7QUFDeEUsV0FBVyxPQUFPO0FBQ2xCLFlBQVksbUJBQW1CO0FBQy9CLFdBQVcsSUFBSTtBQUNmLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1CQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1IQUFtSDtBQUM5SCxXQUFXLE9BQU87QUFDbEIsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyxJQUFJO0FBQ2YsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVyxzQ0FBc0M7QUFDakQ7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0F1ZGlvU3ByaXRlRmlsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIEF1ZGlvRmlsZSA9IHJlcXVpcmUoJy4vQXVkaW9GaWxlLmpzJyk7XHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBGaWxlVHlwZXNNYW5hZ2VyID0gcmVxdWlyZSgnLi4vRmlsZVR5cGVzTWFuYWdlcicpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgSXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9Jc1BsYWluT2JqZWN0Jyk7XHJcbnZhciBKU09ORmlsZSA9IHJlcXVpcmUoJy4vSlNPTkZpbGUuanMnKTtcclxudmFyIE11bHRpRmlsZSA9IHJlcXVpcmUoJy4uL011bHRpRmlsZS5qcycpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQW4gQXVkaW8gU3ByaXRlIEZpbGUgc3VpdGFibGUgZm9yIGxvYWRpbmcgYnkgdGhlIExvYWRlci5cclxuICpcclxuICogVGhlc2UgYXJlIGNyZWF0ZWQgd2hlbiB5b3UgdXNlIHRoZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhdWRpb1Nwcml0ZSBtZXRob2QgYW5kIGFyZSBub3QgdHlwaWNhbGx5IGNyZWF0ZWQgZGlyZWN0bHkuXHJcbiAqIFxyXG4gKiBGb3IgZG9jdW1lbnRhdGlvbiBhYm91dCB3aGF0IGFsbCB0aGUgYXJndW1lbnRzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWVhbiBwbGVhc2Ugc2VlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2F1ZGlvU3ByaXRlLlxyXG4gKlxyXG4gKiBAY2xhc3MgQXVkaW9TcHJpdGVGaWxlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5Mb2FkZXIuTXVsdGlGaWxlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuNy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IGxvYWRlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBMb2FkZXIgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgdGhpcyBmaWxlLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuQXVkaW9TcHJpdGVGaWxlQ29uZmlnKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30ganNvblVSTCAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGUganNvbiBmaWxlIGZyb20uIE9yIGEgd2VsbCBmb3JtZWQgSlNPTiBvYmplY3QgdG8gdXNlIGluc3RlYWQuXHJcbiAqIEBwYXJhbSB7eyhzdHJpbmd8c3RyaW5nW10pfX0gW2F1ZGlvVVJMXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGUgYXVkaW8gZmlsZSBmcm9tLiBJZiBlbXB0eSBpdCB3aWxsIGJlIG9idGFpbmVkIGJ5IHBhcnNpbmcgdGhlIEpTT04gZmlsZS5cclxuICogQHBhcmFtIHthbnl9IFthdWRpb0NvbmZpZ10gLSBUaGUgYXVkaW8gY29uZmlndXJhdGlvbiBvcHRpb25zLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFthdWRpb1hoclNldHRpbmdzXSAtIEFuIFhIUiBTZXR0aW5ncyBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhlIGF1ZGlvIGZpbGUuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW2pzb25YaHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBqc29uIGZpbGUuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqL1xyXG52YXIgQXVkaW9TcHJpdGVGaWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBNdWx0aUZpbGUsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBBdWRpb1Nwcml0ZUZpbGUgKGxvYWRlciwga2V5LCBqc29uVVJMLCBhdWRpb1VSTCwgYXVkaW9Db25maWcsIGF1ZGlvWGhyU2V0dGluZ3MsIGpzb25YaHJTZXR0aW5ncylcclxuICAgIHtcclxuICAgICAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGtleTtcclxuXHJcbiAgICAgICAgICAgIGtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdrZXknKTtcclxuICAgICAgICAgICAganNvblVSTCA9IEdldEZhc3RWYWx1ZShjb25maWcsICdqc29uVVJMJyk7XHJcbiAgICAgICAgICAgIGF1ZGlvVVJMID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2F1ZGlvVVJMJyk7XHJcbiAgICAgICAgICAgIGF1ZGlvQ29uZmlnID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2F1ZGlvQ29uZmlnJyk7XHJcbiAgICAgICAgICAgIGF1ZGlvWGhyU2V0dGluZ3MgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnYXVkaW9YaHJTZXR0aW5ncycpO1xyXG4gICAgICAgICAgICBqc29uWGhyU2V0dGluZ3MgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnanNvblhoclNldHRpbmdzJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGF0YTtcclxuXHJcbiAgICAgICAgLy8gIE5vIHVybD8gdGhlbiB3ZSdyZSBnb2luZyB0byBkbyBhIGpzb24gbG9hZCBhbmQgcGFyc2UgaXQgZnJvbSB0aGF0XHJcbiAgICAgICAgaWYgKCFhdWRpb1VSTClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBuZXcgSlNPTkZpbGUobG9hZGVyLCBrZXksIGpzb25VUkwsIGpzb25YaHJTZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBNdWx0aUZpbGUuY2FsbCh0aGlzLCBsb2FkZXIsICdhdWRpb3Nwcml0ZScsIGtleSwgWyBkYXRhIF0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb25maWcucmVzb3VyY2VMb2FkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb25maWcuYXVkaW9Db25maWcgPSBhdWRpb0NvbmZpZztcclxuICAgICAgICAgICAgdGhpcy5jb25maWcuYXVkaW9YaHJTZXR0aW5ncyA9IGF1ZGlvWGhyU2V0dGluZ3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBhdWRpbyA9IEF1ZGlvRmlsZS5jcmVhdGUobG9hZGVyLCBrZXksIGF1ZGlvVVJMLCBhdWRpb0NvbmZpZywgYXVkaW9YaHJTZXR0aW5ncyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYXVkaW8pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGRhdGEgPSBuZXcgSlNPTkZpbGUobG9hZGVyLCBrZXksIGpzb25VUkwsIGpzb25YaHJTZXR0aW5ncyk7XHJcblxyXG4gICAgICAgICAgICAgICAgTXVsdGlGaWxlLmNhbGwodGhpcywgbG9hZGVyLCAnYXVkaW9zcHJpdGUnLCBrZXksIFsgYXVkaW8sIGRhdGEgXSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcucmVzb3VyY2VMb2FkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGJ5IGVhY2ggRmlsZSB3aGVuIGl0IGZpbmlzaGVzIGxvYWRpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5BdWRpb1Nwcml0ZUZpbGUjb25GaWxlQ29tcGxldGVcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkxvYWRlci5GaWxlfSBmaWxlIC0gVGhlIEZpbGUgdGhhdCBoYXMgY29tcGxldGVkIHByb2Nlc3NpbmcuXHJcbiAgICAgKi9cclxuICAgIG9uRmlsZUNvbXBsZXRlOiBmdW5jdGlvbiAoZmlsZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmZpbGVzLmluZGV4T2YoZmlsZSk7XHJcblxyXG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmctLTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5yZXNvdXJjZUxvYWQgJiYgZmlsZS50eXBlID09PSAnanNvbicgJiYgZmlsZS5kYXRhLmhhc093blByb3BlcnR5KCdyZXNvdXJjZXMnKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIEluc3BlY3QgdGhlIGRhdGEgZm9yIHRoZSBmaWxlcyB0byBub3cgbG9hZFxyXG4gICAgICAgICAgICAgICAgdmFyIHVybHMgPSBmaWxlLmRhdGEucmVzb3VyY2VzO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBhdWRpb0NvbmZpZyA9IEdldEZhc3RWYWx1ZSh0aGlzLmNvbmZpZywgJ2F1ZGlvQ29uZmlnJyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXVkaW9YaHJTZXR0aW5ncyA9IEdldEZhc3RWYWx1ZSh0aGlzLmNvbmZpZywgJ2F1ZGlvWGhyU2V0dGluZ3MnKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgYXVkaW8gPSBBdWRpb0ZpbGUuY3JlYXRlKHRoaXMubG9hZGVyLCBmaWxlLmtleSwgdXJscywgYXVkaW9Db25maWcsIGF1ZGlvWGhyU2V0dGluZ3MpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChhdWRpbylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFRvTXVsdGlGaWxlKGF1ZGlvKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkZXIuYWRkRmlsZShhdWRpbyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyB0aGlzIGZpbGUgdG8gaXRzIHRhcmdldCBjYWNoZSB1cG9uIHN1Y2Nlc3NmdWwgbG9hZGluZyBhbmQgcHJvY2Vzc2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLkF1ZGlvU3ByaXRlRmlsZSNhZGRUb0NhY2hlXHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqL1xyXG4gICAgYWRkVG9DYWNoZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5pc1JlYWR5VG9Qcm9jZXNzKCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgZmlsZUEgPSB0aGlzLmZpbGVzWzBdO1xyXG4gICAgICAgICAgICB2YXIgZmlsZUIgPSB0aGlzLmZpbGVzWzFdO1xyXG5cclxuICAgICAgICAgICAgZmlsZUEuYWRkVG9DYWNoZSgpO1xyXG4gICAgICAgICAgICBmaWxlQi5hZGRUb0NhY2hlKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvbXBsZXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIGEgSlNPTiBiYXNlZCBBdWRpbyBTcHJpdGUsIG9yIGFycmF5IG9mIGF1ZGlvIHNwcml0ZXMsIHRvIHRoZSBjdXJyZW50IGxvYWQgcXVldWUuXHJcbiAqXHJcbiAqIFlvdSBjYW4gY2FsbCB0aGlzIG1ldGhvZCBmcm9tIHdpdGhpbiB5b3VyIFNjZW5lJ3MgYHByZWxvYWRgLCBhbG9uZyB3aXRoIGFueSBvdGhlciBmaWxlcyB5b3Ugd2lzaCB0byBsb2FkOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiBmdW5jdGlvbiBwcmVsb2FkICgpXHJcbiAqIHtcclxuICogICAgIHRoaXMubG9hZC5hdWRpb1Nwcml0ZSgna3lvYmknLCAna3lvYmkuanNvbicsIFtcclxuICogICAgICAgICAna3lvYmkub2dnJyxcclxuICogICAgICAgICAna3lvYmkubXAzJyxcclxuICogICAgICAgICAna3lvYmkubTRhJ1xyXG4gKiAgICAgXSk7XHJcbiAqIH1cclxuICogYGBgXHJcbiAqIFxyXG4gKiBBdWRpbyBTcHJpdGVzIGFyZSBhIGNvbWJpbmF0aW9uIG9mIGF1ZGlvIGZpbGVzIGFuZCBhIEpTT04gY29uZmlndXJhdGlvbi5cclxuICogVGhlIEpTT04gZm9sbG93cyB0aGUgZm9ybWF0IG9mIHRoYXQgY3JlYXRlZCBieSBodHRwczovL2dpdGh1Yi5jb20vdG9uaXN0aWlnaS9hdWRpb3Nwcml0ZVxyXG4gKlxyXG4gKiBJZiB0aGUgSlNPTiBmaWxlIGluY2x1ZGVzIGEgJ3Jlc291cmNlJyBvYmplY3QgdGhlbiB5b3UgY2FuIGxldCBQaGFzZXIgcGFyc2UgaXQgYW5kIGxvYWQgdGhlIGF1ZGlvXHJcbiAqIGZpbGVzIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gaXRzIGNvbnRlbnQuIFRvIGRvIHRoaXMgZXhjbHVkZSB0aGUgYXVkaW8gVVJMcyBmcm9tIHRoZSBsb2FkOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiBmdW5jdGlvbiBwcmVsb2FkICgpXHJcbiAqIHtcclxuICogICAgIHRoaXMubG9hZC5hdWRpb1Nwcml0ZSgna3lvYmknLCAna3lvYmkuanNvbicpO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgZmlsZSBpcyAqKm5vdCoqIGxvYWRlZCByaWdodCBhd2F5LiBJdCBpcyBhZGRlZCB0byBhIHF1ZXVlIHJlYWR5IHRvIGJlIGxvYWRlZCBlaXRoZXIgd2hlbiB0aGUgbG9hZGVyIHN0YXJ0cyxcclxuICogb3IgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIHdoZW4gdGhlIG5leHQgZnJlZSBsb2FkIHNsb3QgYmVjb21lcyBhdmFpbGFibGUuIFRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGlmIHlvdVxyXG4gKiBhcmUgY2FsbGluZyB0aGlzIGZyb20gd2l0aGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QsIG9yIGEgcmVsYXRlZCBjYWxsYmFjay4gQmVjYXVzZSB0aGUgZmlsZSBpcyBxdWV1ZWRcclxuICogaXQgbWVhbnMgeW91IGNhbm5vdCB1c2UgdGhlIGZpbGUgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgYnV0IG11c3Qgd2FpdCBmb3IgdGhlIGZpbGUgdG8gY29tcGxldGUuXHJcbiAqIFRoZSB0eXBpY2FsIGZsb3cgZm9yIGEgUGhhc2VyIFNjZW5lIGlzIHRoYXQgeW91IGxvYWQgYXNzZXRzIGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QgYW5kIHRoZW4gd2hlbiB0aGVcclxuICogU2NlbmUncyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aG9zZSBhc3NldHMgYXJlIHJlYWR5IGZvciB1c2UgYW5kIGhhdmUgYmVlblxyXG4gKiBsb2FkZWQuXHJcbiAqIFxyXG4gKiBJZiB5b3UgY2FsbCB0aGlzIGZyb20gb3V0c2lkZSBvZiBgcHJlbG9hZGAgdGhlbiB5b3UgYXJlIHJlc3BvbnNpYmxlIGZvciBzdGFydGluZyB0aGUgTG9hZGVyIGFmdGVyd2FyZHMgYW5kIG1vbml0b3JpbmdcclxuICogaXRzIGV2ZW50cyB0byBrbm93IHdoZW4gaXQncyBzYWZlIHRvIHVzZSB0aGUgYXNzZXQuIFBsZWFzZSBzZWUgdGhlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luIGNsYXNzIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIFRoZSBrZXkgbXVzdCBiZSBhIHVuaXF1ZSBTdHJpbmcuIEl0IGlzIHVzZWQgdG8gYWRkIHRoZSBmaWxlIHRvIHRoZSBnbG9iYWwgQXVkaW8gQ2FjaGUgdXBvbiBhIHN1Y2Nlc3NmdWwgbG9hZC5cclxuICogVGhlIGtleSBzaG91bGQgYmUgdW5pcXVlIGJvdGggaW4gdGVybXMgb2YgZmlsZXMgYmVpbmcgbG9hZGVkIGFuZCBmaWxlcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIEF1ZGlvIENhY2hlLlxyXG4gKiBMb2FkaW5nIGEgZmlsZSB1c2luZyBhIGtleSB0aGF0IGlzIGFscmVhZHkgdGFrZW4gd2lsbCByZXN1bHQgaW4gYSB3YXJuaW5nLiBJZiB5b3Ugd2lzaCB0byByZXBsYWNlIGFuIGV4aXN0aW5nIGZpbGVcclxuICogdGhlbiByZW1vdmUgaXQgZnJvbSB0aGUgQXVkaW8gQ2FjaGUgZmlyc3QsIGJlZm9yZSBsb2FkaW5nIGEgbmV3IG9uZS5cclxuICpcclxuICogSW5zdGVhZCBvZiBwYXNzaW5nIGFyZ3VtZW50cyB5b3UgY2FuIHBhc3MgYSBjb25maWd1cmF0aW9uIG9iamVjdCwgc3VjaCBhczpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmF1ZGlvU3ByaXRlKHtcclxuICogICAgIGtleTogJ2t5b2JpJyxcclxuICogICAgIGpzb25VUkw6ICdhdWRpby9LeW9iaS5qc29uJyxcclxuICogICAgIGF1ZGlvVVJMOiBbXHJcbiAqICAgICAgICAgJ2F1ZGlvL0t5b2JpLm9nZycsXHJcbiAqICAgICAgICAgJ2F1ZGlvL0t5b2JpLm1wMycsXHJcbiAqICAgICAgICAgJ2F1ZGlvL0t5b2JpLm00YSdcclxuICogICAgIF1cclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGBQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5BdWRpb1Nwcml0ZUZpbGVDb25maWdgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhIFVSTCBmb3IgdGhlIGF1ZGlvIEpTT04gZGF0YSB5b3UgY2FuIGFsc28gcGFzcyBpbiBhIHdlbGwgZm9ybWVkIEpTT04gb2JqZWN0IGluc3RlYWQuXHJcbiAqXHJcbiAqIE9uY2UgdGhlIGF1ZGlvIGhhcyBmaW5pc2hlZCBsb2FkaW5nIHlvdSBjYW4gdXNlIGl0IGNyZWF0ZSBhbiBBdWRpbyBTcHJpdGUgYnkgcmVmZXJlbmNpbmcgaXRzIGtleTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmF1ZGlvU3ByaXRlKCdreW9iaScsICdreW9iaS5qc29uJyk7XHJcbiAqIC8vIGFuZCBsYXRlciBpbiB5b3VyIGdhbWUgLi4uXHJcbiAqIHZhciBtdXNpYyA9IHRoaXMuc291bmQuYWRkQXVkaW9TcHJpdGUoJ2t5b2JpJyk7XHJcbiAqIG11c2ljLnBsYXkoJ3RpdGxlJyk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBJZiB5b3UgaGF2ZSBzcGVjaWZpZWQgYSBwcmVmaXggaW4gdGhlIGxvYWRlciwgdmlhIGBMb2FkZXIuc2V0UHJlZml4YCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhpcyBmaWxlc1xyXG4gKiBrZXkuIEZvciBleGFtcGxlLCBpZiB0aGUgcHJlZml4IHdhcyBgTUVOVS5gIGFuZCB0aGUga2V5IHdhcyBgQmFja2dyb3VuZGAgdGhlIGZpbmFsIGtleSB3aWxsIGJlIGBNRU5VLkJhY2tncm91bmRgIGFuZFxyXG4gKiB0aGlzIGlzIHdoYXQgeW91IHdvdWxkIHVzZSB0byByZXRyaWV2ZSB0aGUgaW1hZ2UgZnJvbSB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKlxyXG4gKiBUaGUgVVJMIGNhbiBiZSByZWxhdGl2ZSBvciBhYnNvbHV0ZS4gSWYgdGhlIFVSTCBpcyByZWxhdGl2ZSB0aGUgYExvYWRlci5iYXNlVVJMYCBhbmQgYExvYWRlci5wYXRoYCB2YWx1ZXMgd2lsbCBiZSBwcmVwZW5kZWQgdG8gaXQuXHJcbiAqXHJcbiAqIER1ZSB0byBkaWZmZXJlbnQgYnJvd3NlcnMgc3VwcG9ydGluZyBkaWZmZXJlbnQgYXVkaW8gZmlsZSB0eXBlcyB5b3Ugc2hvdWxkIHVzdWFsbHkgcHJvdmlkZSB5b3VyIGF1ZGlvIGZpbGVzIGluIGEgdmFyaWV0eSBvZiBmb3JtYXRzLlxyXG4gKiBvZ2csIG1wMyBhbmQgbTRhIGFyZSB0aGUgbW9zdCBjb21tb24uIElmIHlvdSBwcm92aWRlIGFuIGFycmF5IG9mIFVSTHMgdGhlbiB0aGUgTG9hZGVyIHdpbGwgZGV0ZXJtaW5lIHdoaWNoIF9vbmVfIGZpbGUgdG8gbG9hZCBiYXNlZCBvblxyXG4gKiBicm93c2VyIHN1cHBvcnQuXHJcbiAqXHJcbiAqIElmIGF1ZGlvIGhhcyBiZWVuIGRpc2FibGVkIGluIHlvdXIgZ2FtZSwgZWl0aGVyIHZpYSB0aGUgZ2FtZSBjb25maWcsIG9yIGxhY2sgb2Ygc3VwcG9ydCBmcm9tIHRoZSBkZXZpY2UsIHRoZW4gbm8gYXVkaW8gd2lsbCBiZSBsb2FkZWQuXHJcbiAqIFxyXG4gKiBOb3RlOiBUaGUgYWJpbGl0eSB0byBsb2FkIHRoaXMgdHlwZSBvZiBmaWxlIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIEF1ZGlvIFNwcml0ZSBGaWxlIHR5cGUgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIEl0IGlzIGF2YWlsYWJsZSBpbiB0aGUgZGVmYXVsdCBidWlsZCBidXQgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gY3VzdG9tIGJ1aWxkcy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhdWRpb1Nwcml0ZVxyXG4gKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYWRkRmlsZUV2ZW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuQXVkaW9TcHJpdGVGaWxlQ29uZmlnfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkF1ZGlvU3ByaXRlRmlsZUNvbmZpZ1tdKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhbiBhcnJheSBvZiBvYmplY3RzLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30ganNvblVSTCAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGUganNvbiBmaWxlIGZyb20uIE9yIGEgd2VsbCBmb3JtZWQgSlNPTiBvYmplY3QgdG8gdXNlIGluc3RlYWQuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xzdHJpbmdbXSl9IFthdWRpb1VSTF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhlIGF1ZGlvIGZpbGUgZnJvbS4gSWYgZW1wdHkgaXQgd2lsbCBiZSBvYnRhaW5lZCBieSBwYXJzaW5nIHRoZSBKU09OIGZpbGUuXHJcbiAqIEBwYXJhbSB7YW55fSBbYXVkaW9Db25maWddIC0gVGhlIGF1ZGlvIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbYXVkaW9YaHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBhdWRpbyBmaWxlLiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFtqc29uWGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUganNvbiBmaWxlLiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gVGhlIExvYWRlci5cclxuICovXHJcbkZpbGVUeXBlc01hbmFnZXIucmVnaXN0ZXIoJ2F1ZGlvU3ByaXRlJywgZnVuY3Rpb24gKGtleSwganNvblVSTCwgYXVkaW9VUkwsIGF1ZGlvQ29uZmlnLCBhdWRpb1hoclNldHRpbmdzLCBqc29uWGhyU2V0dGluZ3MpXHJcbntcclxuICAgIHZhciBnYW1lID0gdGhpcy5zeXN0ZW1zLmdhbWU7XHJcbiAgICB2YXIgZ2FtZUF1ZGlvQ29uZmlnID0gZ2FtZS5jb25maWcuYXVkaW87XHJcbiAgICB2YXIgZGV2aWNlQXVkaW8gPSBnYW1lLmRldmljZS5hdWRpbztcclxuXHJcbiAgICBpZiAoKGdhbWVBdWRpb0NvbmZpZyAmJiBnYW1lQXVkaW9Db25maWcubm9BdWRpbykgfHwgKCFkZXZpY2VBdWRpby53ZWJBdWRpbyAmJiAhZGV2aWNlQXVkaW8uYXVkaW9EYXRhKSlcclxuICAgIHtcclxuICAgICAgICAvLyAgU291bmRzIGFyZSBkaXNhYmxlZCwgc28gc2tpcCBsb2FkaW5nIGF1ZGlvXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIG11bHRpZmlsZTtcclxuXHJcbiAgICAvLyAgU3VwcG9ydHMgYW4gT2JqZWN0IGZpbGUgZGVmaW5pdGlvbiBpbiB0aGUga2V5IGFyZ3VtZW50XHJcbiAgICAvLyAgT3IgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpbiB0aGUga2V5IGFyZ3VtZW50XHJcbiAgICAvLyAgT3IgYSBzaW5nbGUgZW50cnkgd2hlcmUgYWxsIGFyZ3VtZW50cyBoYXZlIGJlZW4gZGVmaW5lZFxyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXkubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBtdWx0aWZpbGUgPSBuZXcgQXVkaW9TcHJpdGVGaWxlKHRoaXMsIGtleVtpXSk7XHJcblxyXG4gICAgICAgICAgICBpZiAobXVsdGlmaWxlLmZpbGVzKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZpbGUobXVsdGlmaWxlLmZpbGVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICBtdWx0aWZpbGUgPSBuZXcgQXVkaW9TcHJpdGVGaWxlKHRoaXMsIGtleSwganNvblVSTCwgYXVkaW9VUkwsIGF1ZGlvQ29uZmlnLCBhdWRpb1hoclNldHRpbmdzLCBqc29uWGhyU2V0dGluZ3MpO1xyXG5cclxuICAgICAgICBpZiAobXVsdGlmaWxlLmZpbGVzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRGaWxlKG11bHRpZmlsZS5maWxlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG59KTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/AudioSpriteFile.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/filetypes/BinaryFile.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/loader/filetypes/BinaryFile.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Binary File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#binary method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#binary.\r\n *\r\n * @class BinaryFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.BinaryFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.bin`, i.e. if `key` was \"alien\" then the URL will be \"alien.bin\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n * @param {any} [dataType] - Optional type to cast the binary file to once loaded. For example, `Uint8Array`.\r\n */\r\nvar BinaryFile = new Class({\r\n\r\n Extends: File,\r\n\r\n initialize:\r\n\r\n function BinaryFile (loader, key, url, xhrSettings, dataType)\r\n {\r\n var extension = 'bin';\r\n\r\n if (IsPlainObject(key))\r\n {\r\n var config = key;\r\n\r\n key = GetFastValue(config, 'key');\r\n url = GetFastValue(config, 'url');\r\n xhrSettings = GetFastValue(config, 'xhrSettings');\r\n extension = GetFastValue(config, 'extension', extension);\r\n dataType = GetFastValue(config, 'dataType', dataType);\r\n }\r\n\r\n var fileConfig = {\r\n type: 'binary',\r\n cache: loader.cacheManager.binary,\r\n extension: extension,\r\n responseType: 'arraybuffer',\r\n key: key,\r\n url: url,\r\n xhrSettings: xhrSettings,\r\n config: { dataType: dataType }\r\n };\r\n\r\n File.call(this, loader, fileConfig);\r\n },\r\n\r\n /**\r\n * Called automatically by Loader.nextFile.\r\n * This method controls what extra work this File does with its loaded data.\r\n *\r\n * @method Phaser.Loader.FileTypes.BinaryFile#onProcess\r\n * @since 3.7.0\r\n */\r\n onProcess: function ()\r\n {\r\n this.state = CONST.FILE_PROCESSING;\r\n\r\n var ctor = this.config.dataType;\r\n\r\n this.data = (ctor) ? new ctor(this.xhrLoader.response) : this.xhrLoader.response;\r\n\r\n this.onProcessComplete();\r\n }\r\n\r\n});\r\n\r\n/**\r\n * Adds a Binary file, or array of Binary files, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n * this.load.binary('doom', 'files/Doom.wad');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * The key must be a unique String. It is used to add the file to the global Binary Cache upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Binary Cache.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Binary Cache first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.binary({\r\n * key: 'doom',\r\n * url: 'files/Doom.wad',\r\n * dataType: Uint8Array\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.BinaryFileConfig` for more details.\r\n *\r\n * Once the file has finished loading you can access it from its Cache using its key:\r\n * \r\n * ```javascript\r\n * this.load.binary('doom', 'files/Doom.wad');\r\n * // and later in your game ...\r\n * var data = this.cache.binary.get('doom');\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `LEVEL1.` and the key was `Data` the final key will be `LEVEL1.Data` and\r\n * this is what you would use to retrieve the text from the Binary Cache.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"doom\"\r\n * and no URL is given then the Loader will set the URL to be \"doom.bin\". It will always add `.bin` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Binary File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#binary\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.BinaryFileConfig|Phaser.Types.Loader.FileTypes.BinaryFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.bin`, i.e. if `key` was \"alien\" then the URL will be \"alien.bin\".\r\n * @param {any} [dataType] - Optional type to cast the binary file to once loaded. For example, `Uint8Array`.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('binary', function (key, url, dataType, xhrSettings)\r\n{\r\n if (Array.isArray(key))\r\n {\r\n for (var i = 0; i < key.length; i++)\r\n {\r\n // If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n this.addFile(new BinaryFile(this, key[i]));\r\n }\r\n }\r\n else\r\n {\r\n this.addFile(new BinaryFile(this, key, url, xhrSettings, dataType));\r\n }\r\n\r\n return this;\r\n});\r\n\r\nmodule.exports = BinaryFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0JpbmFyeUZpbGUuanM/NzAwMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxZQUFZLG1CQUFPLENBQUMsMkRBQVU7QUFDOUIsV0FBVyxtQkFBTyxDQUFDLHlEQUFTO0FBQzVCLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFxQjtBQUNwRCxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDNUQsb0JBQW9CLG1CQUFPLENBQUMsaUdBQWtDOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyx3REFBd0Q7QUFDbkUsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsSUFBSTtBQUNmO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcseUdBQXlHO0FBQ3BILFdBQVcsT0FBTztBQUNsQixXQUFXLElBQUk7QUFDZixXQUFXLHNDQUFzQztBQUNqRDtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0JpbmFyeUZpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XHJcbnZhciBGaWxlID0gcmVxdWlyZSgnLi4vRmlsZScpO1xyXG52YXIgRmlsZVR5cGVzTWFuYWdlciA9IHJlcXVpcmUoJy4uL0ZpbGVUeXBlc01hbmFnZXInKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIElzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvSXNQbGFpbk9iamVjdCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBzaW5nbGUgQmluYXJ5IEZpbGUgc3VpdGFibGUgZm9yIGxvYWRpbmcgYnkgdGhlIExvYWRlci5cclxuICpcclxuICogVGhlc2UgYXJlIGNyZWF0ZWQgd2hlbiB5b3UgdXNlIHRoZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNiaW5hcnkgbWV0aG9kIGFuZCBhcmUgbm90IHR5cGljYWxseSBjcmVhdGVkIGRpcmVjdGx5LlxyXG4gKiBcclxuICogRm9yIGRvY3VtZW50YXRpb24gYWJvdXQgd2hhdCBhbGwgdGhlIGFyZ3VtZW50cyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIG1lYW4gcGxlYXNlIHNlZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNiaW5hcnkuXHJcbiAqXHJcbiAqIEBjbGFzcyBCaW5hcnlGaWxlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5Mb2FkZXIuRmlsZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgTG9hZGVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkJpbmFyeUZpbGVDb25maWcpfSBrZXkgLSBUaGUga2V5IHRvIHVzZSBmb3IgdGhpcyBmaWxlLCBvciBhIGZpbGUgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdXJsXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGlzIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4uYmluYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4uYmluXCIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEV4dHJhIFhIUiBTZXR0aW5ncyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHthbnl9IFtkYXRhVHlwZV0gLSBPcHRpb25hbCB0eXBlIHRvIGNhc3QgdGhlIGJpbmFyeSBmaWxlIHRvIG9uY2UgbG9hZGVkLiBGb3IgZXhhbXBsZSwgYFVpbnQ4QXJyYXlgLlxyXG4gKi9cclxudmFyIEJpbmFyeUZpbGUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEZpbGUsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBCaW5hcnlGaWxlIChsb2FkZXIsIGtleSwgdXJsLCB4aHJTZXR0aW5ncywgZGF0YVR5cGUpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGV4dGVuc2lvbiA9ICdiaW4nO1xyXG5cclxuICAgICAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGtleTtcclxuXHJcbiAgICAgICAgICAgIGtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdrZXknKTtcclxuICAgICAgICAgICAgdXJsID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3VybCcpO1xyXG4gICAgICAgICAgICB4aHJTZXR0aW5ncyA9IEdldEZhc3RWYWx1ZShjb25maWcsICd4aHJTZXR0aW5ncycpO1xyXG4gICAgICAgICAgICBleHRlbnNpb24gPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZXh0ZW5zaW9uJywgZXh0ZW5zaW9uKTtcclxuICAgICAgICAgICAgZGF0YVR5cGUgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZGF0YVR5cGUnLCBkYXRhVHlwZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZmlsZUNvbmZpZyA9IHtcclxuICAgICAgICAgICAgdHlwZTogJ2JpbmFyeScsXHJcbiAgICAgICAgICAgIGNhY2hlOiBsb2FkZXIuY2FjaGVNYW5hZ2VyLmJpbmFyeSxcclxuICAgICAgICAgICAgZXh0ZW5zaW9uOiBleHRlbnNpb24sXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyxcclxuICAgICAgICAgICAga2V5OiBrZXksXHJcbiAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICB4aHJTZXR0aW5nczogeGhyU2V0dGluZ3MsXHJcbiAgICAgICAgICAgIGNvbmZpZzogeyBkYXRhVHlwZTogZGF0YVR5cGUgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIEZpbGUuY2FsbCh0aGlzLCBsb2FkZXIsIGZpbGVDb25maWcpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IExvYWRlci5uZXh0RmlsZS5cclxuICAgICAqIFRoaXMgbWV0aG9kIGNvbnRyb2xzIHdoYXQgZXh0cmEgd29yayB0aGlzIEZpbGUgZG9lcyB3aXRoIGl0cyBsb2FkZWQgZGF0YS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLkJpbmFyeUZpbGUjb25Qcm9jZXNzXHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqL1xyXG4gICAgb25Qcm9jZXNzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT05TVC5GSUxFX1BST0NFU1NJTkc7XHJcblxyXG4gICAgICAgIHZhciBjdG9yID0gdGhpcy5jb25maWcuZGF0YVR5cGU7XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YSA9IChjdG9yKSA/IG5ldyBjdG9yKHRoaXMueGhyTG9hZGVyLnJlc3BvbnNlKSA6IHRoaXMueGhyTG9hZGVyLnJlc3BvbnNlO1xyXG5cclxuICAgICAgICB0aGlzLm9uUHJvY2Vzc0NvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIGEgQmluYXJ5IGZpbGUsIG9yIGFycmF5IG9mIEJpbmFyeSBmaWxlcywgdG8gdGhlIGN1cnJlbnQgbG9hZCBxdWV1ZS5cclxuICpcclxuICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIGZyb20gd2l0aGluIHlvdXIgU2NlbmUncyBgcHJlbG9hZGAsIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGVzIHlvdSB3aXNoIHRvIGxvYWQ6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGZ1bmN0aW9uIHByZWxvYWQgKClcclxuICoge1xyXG4gKiAgICAgdGhpcy5sb2FkLmJpbmFyeSgnZG9vbScsICdmaWxlcy9Eb29tLndhZCcpO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgZmlsZSBpcyAqKm5vdCoqIGxvYWRlZCByaWdodCBhd2F5LiBJdCBpcyBhZGRlZCB0byBhIHF1ZXVlIHJlYWR5IHRvIGJlIGxvYWRlZCBlaXRoZXIgd2hlbiB0aGUgbG9hZGVyIHN0YXJ0cyxcclxuICogb3IgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIHdoZW4gdGhlIG5leHQgZnJlZSBsb2FkIHNsb3QgYmVjb21lcyBhdmFpbGFibGUuIFRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGlmIHlvdVxyXG4gKiBhcmUgY2FsbGluZyB0aGlzIGZyb20gd2l0aGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QsIG9yIGEgcmVsYXRlZCBjYWxsYmFjay4gQmVjYXVzZSB0aGUgZmlsZSBpcyBxdWV1ZWRcclxuICogaXQgbWVhbnMgeW91IGNhbm5vdCB1c2UgdGhlIGZpbGUgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgYnV0IG11c3Qgd2FpdCBmb3IgdGhlIGZpbGUgdG8gY29tcGxldGUuXHJcbiAqIFRoZSB0eXBpY2FsIGZsb3cgZm9yIGEgUGhhc2VyIFNjZW5lIGlzIHRoYXQgeW91IGxvYWQgYXNzZXRzIGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QgYW5kIHRoZW4gd2hlbiB0aGVcclxuICogU2NlbmUncyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aG9zZSBhc3NldHMgYXJlIHJlYWR5IGZvciB1c2UgYW5kIGhhdmUgYmVlblxyXG4gKiBsb2FkZWQuXHJcbiAqIFxyXG4gKiBUaGUga2V5IG11c3QgYmUgYSB1bmlxdWUgU3RyaW5nLiBJdCBpcyB1c2VkIHRvIGFkZCB0aGUgZmlsZSB0byB0aGUgZ2xvYmFsIEJpbmFyeSBDYWNoZSB1cG9uIGEgc3VjY2Vzc2Z1bCBsb2FkLlxyXG4gKiBUaGUga2V5IHNob3VsZCBiZSB1bmlxdWUgYm90aCBpbiB0ZXJtcyBvZiBmaWxlcyBiZWluZyBsb2FkZWQgYW5kIGZpbGVzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgQmluYXJ5IENhY2hlLlxyXG4gKiBMb2FkaW5nIGEgZmlsZSB1c2luZyBhIGtleSB0aGF0IGlzIGFscmVhZHkgdGFrZW4gd2lsbCByZXN1bHQgaW4gYSB3YXJuaW5nLiBJZiB5b3Ugd2lzaCB0byByZXBsYWNlIGFuIGV4aXN0aW5nIGZpbGVcclxuICogdGhlbiByZW1vdmUgaXQgZnJvbSB0aGUgQmluYXJ5IENhY2hlIGZpcnN0LCBiZWZvcmUgbG9hZGluZyBhIG5ldyBvbmUuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhcmd1bWVudHMgeW91IGNhbiBwYXNzIGEgY29uZmlndXJhdGlvbiBvYmplY3QsIHN1Y2ggYXM6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5iaW5hcnkoe1xyXG4gKiAgICAga2V5OiAnZG9vbScsXHJcbiAqICAgICB1cmw6ICdmaWxlcy9Eb29tLndhZCcsXHJcbiAqICAgICBkYXRhVHlwZTogVWludDhBcnJheVxyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkJpbmFyeUZpbGVDb25maWdgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIE9uY2UgdGhlIGZpbGUgaGFzIGZpbmlzaGVkIGxvYWRpbmcgeW91IGNhbiBhY2Nlc3MgaXQgZnJvbSBpdHMgQ2FjaGUgdXNpbmcgaXRzIGtleTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmJpbmFyeSgnZG9vbScsICdmaWxlcy9Eb29tLndhZCcpO1xyXG4gKiAvLyBhbmQgbGF0ZXIgaW4geW91ciBnYW1lIC4uLlxyXG4gKiB2YXIgZGF0YSA9IHRoaXMuY2FjaGUuYmluYXJ5LmdldCgnZG9vbScpO1xyXG4gKiBgYGBcclxuICpcclxuICogSWYgeW91IGhhdmUgc3BlY2lmaWVkIGEgcHJlZml4IGluIHRoZSBsb2FkZXIsIHZpYSBgTG9hZGVyLnNldFByZWZpeGAgdGhlbiB0aGlzIHZhbHVlIHdpbGwgYmUgcHJlcGVuZGVkIHRvIHRoaXMgZmlsZXNcclxuICoga2V5LiBGb3IgZXhhbXBsZSwgaWYgdGhlIHByZWZpeCB3YXMgYExFVkVMMS5gIGFuZCB0aGUga2V5IHdhcyBgRGF0YWAgdGhlIGZpbmFsIGtleSB3aWxsIGJlIGBMRVZFTDEuRGF0YWAgYW5kXHJcbiAqIHRoaXMgaXMgd2hhdCB5b3Ugd291bGQgdXNlIHRvIHJldHJpZXZlIHRoZSB0ZXh0IGZyb20gdGhlIEJpbmFyeSBDYWNoZS5cclxuICpcclxuICogVGhlIFVSTCBjYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUuIElmIHRoZSBVUkwgaXMgcmVsYXRpdmUgdGhlIGBMb2FkZXIuYmFzZVVSTGAgYW5kIGBMb2FkZXIucGF0aGAgdmFsdWVzIHdpbGwgYmUgcHJlcGVuZGVkIHRvIGl0LlxyXG4gKlxyXG4gKiBJZiB0aGUgVVJMIGlzbid0IHNwZWNpZmllZCB0aGUgTG9hZGVyIHdpbGwgdGFrZSB0aGUga2V5IGFuZCBjcmVhdGUgYSBmaWxlbmFtZSBmcm9tIHRoYXQuIEZvciBleGFtcGxlIGlmIHRoZSBrZXkgaXMgXCJkb29tXCJcclxuICogYW5kIG5vIFVSTCBpcyBnaXZlbiB0aGVuIHRoZSBMb2FkZXIgd2lsbCBzZXQgdGhlIFVSTCB0byBiZSBcImRvb20uYmluXCIuIEl0IHdpbGwgYWx3YXlzIGFkZCBgLmJpbmAgYXMgdGhlIGV4dGVuc2lvbiwgYWx0aG91Z2hcclxuICogdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBpZiB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBtZXRob2QgYXJndW1lbnRzLiBJZiB5b3UgZG8gbm90IGRlc2lyZSB0aGlzIGFjdGlvbiB0aGVuIHByb3ZpZGUgYSBVUkwuXHJcbiAqXHJcbiAqIE5vdGU6IFRoZSBhYmlsaXR5IHRvIGxvYWQgdGhpcyB0eXBlIG9mIGZpbGUgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgQmluYXJ5IEZpbGUgdHlwZSBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogSXQgaXMgYXZhaWxhYmxlIGluIHRoZSBkZWZhdWx0IGJ1aWxkIGJ1dCBjYW4gYmUgZXhjbHVkZWQgZnJvbSBjdXN0b20gYnVpbGRzLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2JpbmFyeVxyXG4gKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYWRkRmlsZUV2ZW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuQmluYXJ5RmlsZUNvbmZpZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5CaW5hcnlGaWxlQ29uZmlnW10pfSBrZXkgLSBUaGUga2V5IHRvIHVzZSBmb3IgdGhpcyBmaWxlLCBvciBhIGZpbGUgY29uZmlndXJhdGlvbiBvYmplY3QsIG9yIGFycmF5IG9mIHRoZW0uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdXJsXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGlzIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4uYmluYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4uYmluXCIuXHJcbiAqIEBwYXJhbSB7YW55fSBbZGF0YVR5cGVdIC0gT3B0aW9uYWwgdHlwZSB0byBjYXN0IHRoZSBiaW5hcnkgZmlsZSB0byBvbmNlIGxvYWRlZC4gRm9yIGV4YW1wbGUsIGBVaW50OEFycmF5YC5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbeGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gVGhlIExvYWRlciBpbnN0YW5jZS5cclxuICovXHJcbkZpbGVUeXBlc01hbmFnZXIucmVnaXN0ZXIoJ2JpbmFyeScsIGZ1bmN0aW9uIChrZXksIHVybCwgZGF0YVR5cGUsIHhoclNldHRpbmdzKVxyXG57XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIElmIGl0J3MgYW4gYXJyYXkgaXQgaGFzIHRvIGJlIGFuIGFycmF5IG9mIE9iamVjdHMsIHNvIHdlIGdldCBldmVyeXRoaW5nIG91dCBvZiB0aGUgJ2tleScgb2JqZWN0XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRmlsZShuZXcgQmluYXJ5RmlsZSh0aGlzLCBrZXlbaV0pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hZGRGaWxlKG5ldyBCaW5hcnlGaWxlKHRoaXMsIGtleSwgdXJsLCB4aHJTZXR0aW5ncywgZGF0YVR5cGUpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJpbmFyeUZpbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/BinaryFile.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/filetypes/BitmapFontFile.js":
/*!********************************************************************!*\
!*** ./node_modules/phaser/src/loader/filetypes/BitmapFontFile.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar ImageFile = __webpack_require__(/*! ./ImageFile.js */ \"./node_modules/phaser/src/loader/filetypes/ImageFile.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\nvar MultiFile = __webpack_require__(/*! ../MultiFile.js */ \"./node_modules/phaser/src/loader/MultiFile.js\");\r\nvar ParseXMLBitmapFont = __webpack_require__(/*! ../../gameobjects/bitmaptext/ParseXMLBitmapFont.js */ \"./node_modules/phaser/src/gameobjects/bitmaptext/ParseXMLBitmapFont.js\");\r\nvar XMLFile = __webpack_require__(/*! ./XMLFile.js */ \"./node_modules/phaser/src/loader/filetypes/XMLFile.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Bitmap Font based File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#bitmapFont method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#bitmapFont.\r\n *\r\n * @class BitmapFontFile\r\n * @extends Phaser.Loader.MultiFile\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.BitmapFontFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string|string[]} [textureURL] - The absolute or relative URL to load the font image file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\r\n * @param {string} [fontDataURL] - The absolute or relative URL to load the font xml data file from. If undefined or `null` it will be set to `<key>.xml`, i.e. if `key` was \"alien\" then the URL will be \"alien.xml\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [textureXhrSettings] - An XHR Settings configuration object for the font image file. Used in replacement of the Loaders default XHR Settings.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [fontDataXhrSettings] - An XHR Settings configuration object for the font data xml file. Used in replacement of the Loaders default XHR Settings.\r\n */\r\nvar BitmapFontFile = new Class({\r\n\r\n Extends: MultiFile,\r\n\r\n initialize:\r\n\r\n function BitmapFontFile (loader, key, textureURL, fontDataURL, textureXhrSettings, fontDataXhrSettings)\r\n {\r\n var image;\r\n var data;\r\n\r\n if (IsPlainObject(key))\r\n {\r\n var config = key;\r\n\r\n key = GetFastValue(config, 'key');\r\n\r\n image = new ImageFile(loader, {\r\n key: key,\r\n url: GetFastValue(config, 'textureURL'),\r\n extension: GetFastValue(config, 'textureExtension', 'png'),\r\n normalMap: GetFastValue(config, 'normalMap'),\r\n xhrSettings: GetFastValue(config, 'textureXhrSettings')\r\n });\r\n\r\n data = new XMLFile(loader, {\r\n key: key,\r\n url: GetFastValue(config, 'fontDataURL'),\r\n extension: GetFastValue(config, 'fontDataExtension', 'xml'),\r\n xhrSettings: GetFastValue(config, 'fontDataXhrSettings')\r\n });\r\n }\r\n else\r\n {\r\n image = new ImageFile(loader, key, textureURL, textureXhrSettings);\r\n data = new XMLFile(loader, key, fontDataURL, fontDataXhrSettings);\r\n }\r\n\r\n if (image.linkFile)\r\n {\r\n // Image has a normal map\r\n MultiFile.call(this, loader, 'bitmapfont', key, [ image, data, image.linkFile ]);\r\n }\r\n else\r\n {\r\n MultiFile.call(this, loader, 'bitmapfont', key, [ image, data ]);\r\n }\r\n },\r\n\r\n /**\r\n * Adds this file to its target cache upon successful loading and processing.\r\n *\r\n * @method Phaser.Loader.FileTypes.BitmapFontFile#addToCache\r\n * @since 3.7.0\r\n */\r\n addToCache: function ()\r\n {\r\n if (this.isReadyToProcess())\r\n {\r\n var image = this.files[0];\r\n var xml = this.files[1];\r\n\r\n image.addToCache();\r\n xml.addToCache();\r\n\r\n this.loader.cacheManager.bitmapFont.add(image.key, { data: ParseXMLBitmapFont(xml.data), texture: image.key, frame: null });\r\n\r\n this.complete = true;\r\n }\r\n }\r\n\r\n});\r\n\r\n/**\r\n * Adds an XML based Bitmap Font, or array of fonts, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n\r\n * ```javascript\r\n * function preload ()\r\n * {\r\n * this.load.bitmapFont('goldenFont', 'images/GoldFont.png', 'images/GoldFont.xml');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * If you call this from outside of `preload` then you are responsible for starting the Loader afterwards and monitoring\r\n * its events to know when it's safe to use the asset. Please see the Phaser.Loader.LoaderPlugin class for more details.\r\n *\r\n * Phaser expects the font data to be provided in an XML file format.\r\n * These files are created by software such as the [Angelcode Bitmap Font Generator](http://www.angelcode.com/products/bmfont/),\r\n * [Littera](http://kvazars.com/littera/) or [Glyph Designer](https://71squared.com/glyphdesigner)\r\n * \r\n * Phaser can load all common image types: png, jpg, gif and any other format the browser can natively handle.\r\n *\r\n * The key must be a unique String. It is used to add the file to the global Texture Manager upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Texture Manager.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Texture Manager first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.bitmapFont({\r\n * key: 'goldenFont',\r\n * textureURL: 'images/GoldFont.png',\r\n * fontDataURL: 'images/GoldFont.xml'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.BitmapFontFileConfig` for more details.\r\n *\r\n * Once the atlas has finished loading you can use key of it when creating a Bitmap Text Game Object:\r\n * \r\n * ```javascript\r\n * this.load.bitmapFont('goldenFont', 'images/GoldFont.png', 'images/GoldFont.xml');\r\n * // and later in your game ...\r\n * this.add.bitmapText(x, y, 'goldenFont', 'Hello World');\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `MENU.` and the key was `Background` the final key will be `MENU.Background` and\r\n * this is what you would use when creating a Bitmap Text object.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"alien\"\r\n * and no URL is given then the Loader will set the URL to be \"alien.png\". It will always add `.png` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Phaser also supports the automatic loading of associated normal maps. If you have a normal map to go with this image,\r\n * then you can specify it by providing an array as the `url` where the second element is the normal map:\r\n * \r\n * ```javascript\r\n * this.load.bitmapFont('goldenFont', [ 'images/GoldFont.png', 'images/GoldFont-n.png' ], 'images/GoldFont.xml');\r\n * ```\r\n *\r\n * Or, if you are using a config object use the `normalMap` property:\r\n * \r\n * ```javascript\r\n * this.load.bitmapFont({\r\n * key: 'goldenFont',\r\n * textureURL: 'images/GoldFont.png',\r\n * normalMap: 'images/GoldFont-n.png',\r\n * fontDataURL: 'images/GoldFont.xml'\r\n * });\r\n * ```\r\n *\r\n * The normal map file is subject to the same conditions as the image file with regard to the path, baseURL, CORs and XHR Settings.\r\n * Normal maps are a WebGL only feature.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Bitmap Font File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#bitmapFont\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.BitmapFontFileConfig|Phaser.Types.Loader.FileTypes.BitmapFontFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string|string[]} [textureURL] - The absolute or relative URL to load the font image file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\r\n * @param {string} [fontDataURL] - The absolute or relative URL to load the font xml data file from. If undefined or `null` it will be set to `<key>.xml`, i.e. if `key` was \"alien\" then the URL will be \"alien.xml\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [textureXhrSettings] - An XHR Settings configuration object for the font image file. Used in replacement of the Loaders default XHR Settings.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [fontDataXhrSettings] - An XHR Settings configuration object for the font data xml file. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('bitmapFont', function (key, textureURL, fontDataURL, textureXhrSettings, fontDataXhrSettings)\r\n{\r\n var multifile;\r\n\r\n // Supports an Object file definition in the key argument\r\n // Or an array of objects in the key argument\r\n // Or a single entry where all arguments have been defined\r\n\r\n if (Array.isArray(key))\r\n {\r\n for (var i = 0; i < key.length; i++)\r\n {\r\n multifile = new BitmapFontFile(this, key[i]);\r\n\r\n this.addFile(multifile.files);\r\n }\r\n }\r\n else\r\n {\r\n multifile = new BitmapFontFile(this, key, textureURL, fontDataURL, textureXhrSettings, fontDataXhrSettings);\r\n\r\n this.addFile(multifile.files);\r\n }\r\n\r\n return this;\r\n});\r\n\r\nmodule.exports = BitmapFontFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0JpdG1hcEZvbnRGaWxlLmpzP2RiZDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsdUJBQXVCLG1CQUFPLENBQUMsaUZBQXFCO0FBQ3BELG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCxnQkFBZ0IsbUJBQU8sQ0FBQywrRUFBZ0I7QUFDeEMsb0JBQW9CLG1CQUFPLENBQUMsaUdBQWtDO0FBQzlELGdCQUFnQixtQkFBTyxDQUFDLHNFQUFpQjtBQUN6Qyx5QkFBeUIsbUJBQU8sQ0FBQyxrSUFBb0Q7QUFDckYsY0FBYyxtQkFBTyxDQUFDLDJFQUFjOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyw0REFBNEQ7QUFDdkUsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxnRUFBZ0Usc0VBQXNFOztBQUV0STtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxpSEFBaUg7QUFDNUgsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbG9hZGVyL2ZpbGV0eXBlcy9CaXRtYXBGb250RmlsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIEZpbGVUeXBlc01hbmFnZXIgPSByZXF1aXJlKCcuLi9GaWxlVHlwZXNNYW5hZ2VyJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBJbWFnZUZpbGUgPSByZXF1aXJlKCcuL0ltYWdlRmlsZS5qcycpO1xyXG52YXIgSXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9Jc1BsYWluT2JqZWN0Jyk7XHJcbnZhciBNdWx0aUZpbGUgPSByZXF1aXJlKCcuLi9NdWx0aUZpbGUuanMnKTtcclxudmFyIFBhcnNlWE1MQml0bWFwRm9udCA9IHJlcXVpcmUoJy4uLy4uL2dhbWVvYmplY3RzL2JpdG1hcHRleHQvUGFyc2VYTUxCaXRtYXBGb250LmpzJyk7XHJcbnZhciBYTUxGaWxlID0gcmVxdWlyZSgnLi9YTUxGaWxlLmpzJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIHNpbmdsZSBCaXRtYXAgRm9udCBiYXNlZCBGaWxlIHN1aXRhYmxlIGZvciBsb2FkaW5nIGJ5IHRoZSBMb2FkZXIuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSBjcmVhdGVkIHdoZW4geW91IHVzZSB0aGUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYml0bWFwRm9udCBtZXRob2QgYW5kIGFyZSBub3QgdHlwaWNhbGx5IGNyZWF0ZWQgZGlyZWN0bHkuXHJcbiAqIFxyXG4gKiBGb3IgZG9jdW1lbnRhdGlvbiBhYm91dCB3aGF0IGFsbCB0aGUgYXJndW1lbnRzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWVhbiBwbGVhc2Ugc2VlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2JpdG1hcEZvbnQuXHJcbiAqXHJcbiAqIEBjbGFzcyBCaXRtYXBGb250RmlsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLk11bHRpRmlsZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgTG9hZGVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkJpdG1hcEZvbnRGaWxlQ29uZmlnKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gW3RleHR1cmVVUkxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoZSBmb250IGltYWdlIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4ucG5nYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4ucG5nXCIuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZm9udERhdGFVUkxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoZSBmb250IHhtbCBkYXRhIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4ueG1sYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4ueG1sXCIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3RleHR1cmVYaHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBmb250IGltYWdlIGZpbGUuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW2ZvbnREYXRhWGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgZm9udCBkYXRhIHhtbCBmaWxlLiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKi9cclxudmFyIEJpdG1hcEZvbnRGaWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBNdWx0aUZpbGUsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBCaXRtYXBGb250RmlsZSAobG9hZGVyLCBrZXksIHRleHR1cmVVUkwsIGZvbnREYXRhVVJMLCB0ZXh0dXJlWGhyU2V0dGluZ3MsIGZvbnREYXRhWGhyU2V0dGluZ3MpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGltYWdlO1xyXG4gICAgICAgIHZhciBkYXRhO1xyXG5cclxuICAgICAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGtleTtcclxuXHJcbiAgICAgICAgICAgIGtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdrZXknKTtcclxuXHJcbiAgICAgICAgICAgIGltYWdlID0gbmV3IEltYWdlRmlsZShsb2FkZXIsIHtcclxuICAgICAgICAgICAgICAgIGtleToga2V5LFxyXG4gICAgICAgICAgICAgICAgdXJsOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAndGV4dHVyZVVSTCcpLFxyXG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAndGV4dHVyZUV4dGVuc2lvbicsICdwbmcnKSxcclxuICAgICAgICAgICAgICAgIG5vcm1hbE1hcDogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ25vcm1hbE1hcCcpLFxyXG4gICAgICAgICAgICAgICAgeGhyU2V0dGluZ3M6IEdldEZhc3RWYWx1ZShjb25maWcsICd0ZXh0dXJlWGhyU2V0dGluZ3MnKVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGRhdGEgPSBuZXcgWE1MRmlsZShsb2FkZXIsIHtcclxuICAgICAgICAgICAgICAgIGtleToga2V5LFxyXG4gICAgICAgICAgICAgICAgdXJsOiBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZm9udERhdGFVUkwnKSxcclxuICAgICAgICAgICAgICAgIGV4dGVuc2lvbjogR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2ZvbnREYXRhRXh0ZW5zaW9uJywgJ3htbCcpLFxyXG4gICAgICAgICAgICAgICAgeGhyU2V0dGluZ3M6IEdldEZhc3RWYWx1ZShjb25maWcsICdmb250RGF0YVhoclNldHRpbmdzJylcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGltYWdlID0gbmV3IEltYWdlRmlsZShsb2FkZXIsIGtleSwgdGV4dHVyZVVSTCwgdGV4dHVyZVhoclNldHRpbmdzKTtcclxuICAgICAgICAgICAgZGF0YSA9IG5ldyBYTUxGaWxlKGxvYWRlciwga2V5LCBmb250RGF0YVVSTCwgZm9udERhdGFYaHJTZXR0aW5ncyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaW1hZ2UubGlua0ZpbGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgSW1hZ2UgaGFzIGEgbm9ybWFsIG1hcFxyXG4gICAgICAgICAgICBNdWx0aUZpbGUuY2FsbCh0aGlzLCBsb2FkZXIsICdiaXRtYXBmb250Jywga2V5LCBbIGltYWdlLCBkYXRhLCBpbWFnZS5saW5rRmlsZSBdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgTXVsdGlGaWxlLmNhbGwodGhpcywgbG9hZGVyLCAnYml0bWFwZm9udCcsIGtleSwgWyBpbWFnZSwgZGF0YSBdKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyB0aGlzIGZpbGUgdG8gaXRzIHRhcmdldCBjYWNoZSB1cG9uIHN1Y2Nlc3NmdWwgbG9hZGluZyBhbmQgcHJvY2Vzc2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLkJpdG1hcEZvbnRGaWxlI2FkZFRvQ2FjaGVcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBhZGRUb0NhY2hlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmlzUmVhZHlUb1Byb2Nlc3MoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBpbWFnZSA9IHRoaXMuZmlsZXNbMF07XHJcbiAgICAgICAgICAgIHZhciB4bWwgPSB0aGlzLmZpbGVzWzFdO1xyXG5cclxuICAgICAgICAgICAgaW1hZ2UuYWRkVG9DYWNoZSgpO1xyXG4gICAgICAgICAgICB4bWwuYWRkVG9DYWNoZSgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5sb2FkZXIuY2FjaGVNYW5hZ2VyLmJpdG1hcEZvbnQuYWRkKGltYWdlLmtleSwgeyBkYXRhOiBQYXJzZVhNTEJpdG1hcEZvbnQoeG1sLmRhdGEpLCB0ZXh0dXJlOiBpbWFnZS5rZXksIGZyYW1lOiBudWxsIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG4vKipcclxuICogQWRkcyBhbiBYTUwgYmFzZWQgQml0bWFwIEZvbnQsIG9yIGFycmF5IG9mIGZvbnRzLCB0byB0aGUgY3VycmVudCBsb2FkIHF1ZXVlLlxyXG4gKlxyXG4gKiBZb3UgY2FuIGNhbGwgdGhpcyBtZXRob2QgZnJvbSB3aXRoaW4geW91ciBTY2VuZSdzIGBwcmVsb2FkYCwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZmlsZXMgeW91IHdpc2ggdG8gbG9hZDpcclxuXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogZnVuY3Rpb24gcHJlbG9hZCAoKVxyXG4gKiB7XHJcbiAqICAgICB0aGlzLmxvYWQuYml0bWFwRm9udCgnZ29sZGVuRm9udCcsICdpbWFnZXMvR29sZEZvbnQucG5nJywgJ2ltYWdlcy9Hb2xkRm9udC54bWwnKTtcclxuICogfVxyXG4gKiBgYGBcclxuICpcclxuICogVGhlIGZpbGUgaXMgKipub3QqKiBsb2FkZWQgcmlnaHQgYXdheS4gSXQgaXMgYWRkZWQgdG8gYSBxdWV1ZSByZWFkeSB0byBiZSBsb2FkZWQgZWl0aGVyIHdoZW4gdGhlIGxvYWRlciBzdGFydHMsXHJcbiAqIG9yIGlmIGl0J3MgYWxyZWFkeSBydW5uaW5nLCB3aGVuIHRoZSBuZXh0IGZyZWUgbG9hZCBzbG90IGJlY29tZXMgYXZhaWxhYmxlLiBUaGlzIGhhcHBlbnMgYXV0b21hdGljYWxseSBpZiB5b3VcclxuICogYXJlIGNhbGxpbmcgdGhpcyBmcm9tIHdpdGhpbiB0aGUgU2NlbmUncyBgcHJlbG9hZGAgbWV0aG9kLCBvciBhIHJlbGF0ZWQgY2FsbGJhY2suIEJlY2F1c2UgdGhlIGZpbGUgaXMgcXVldWVkXHJcbiAqIGl0IG1lYW5zIHlvdSBjYW5ub3QgdXNlIHRoZSBmaWxlIGltbWVkaWF0ZWx5IGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QsIGJ1dCBtdXN0IHdhaXQgZm9yIHRoZSBmaWxlIHRvIGNvbXBsZXRlLlxyXG4gKiBUaGUgdHlwaWNhbCBmbG93IGZvciBhIFBoYXNlciBTY2VuZSBpcyB0aGF0IHlvdSBsb2FkIGFzc2V0cyBpbiB0aGUgU2NlbmUncyBgcHJlbG9hZGAgbWV0aG9kIGFuZCB0aGVuIHdoZW4gdGhlXHJcbiAqIFNjZW5lJ3MgYGNyZWF0ZWAgbWV0aG9kIGlzIGNhbGxlZCB5b3UgYXJlIGd1YXJhbnRlZWQgdGhhdCBhbGwgb2YgdGhvc2UgYXNzZXRzIGFyZSByZWFkeSBmb3IgdXNlIGFuZCBoYXZlIGJlZW5cclxuICogbG9hZGVkLlxyXG4gKiBcclxuICogSWYgeW91IGNhbGwgdGhpcyBmcm9tIG91dHNpZGUgb2YgYHByZWxvYWRgIHRoZW4geW91IGFyZSByZXNwb25zaWJsZSBmb3Igc3RhcnRpbmcgdGhlIExvYWRlciBhZnRlcndhcmRzIGFuZCBtb25pdG9yaW5nXHJcbiAqIGl0cyBldmVudHMgdG8ga25vdyB3aGVuIGl0J3Mgc2FmZSB0byB1c2UgdGhlIGFzc2V0LiBQbGVhc2Ugc2VlIHRoZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiBjbGFzcyBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKlxyXG4gKiBQaGFzZXIgZXhwZWN0cyB0aGUgZm9udCBkYXRhIHRvIGJlIHByb3ZpZGVkIGluIGFuIFhNTCBmaWxlIGZvcm1hdC5cclxuICogVGhlc2UgZmlsZXMgYXJlIGNyZWF0ZWQgYnkgc29mdHdhcmUgc3VjaCBhcyB0aGUgW0FuZ2VsY29kZSBCaXRtYXAgRm9udCBHZW5lcmF0b3JdKGh0dHA6Ly93d3cuYW5nZWxjb2RlLmNvbS9wcm9kdWN0cy9ibWZvbnQvKSxcclxuICogW0xpdHRlcmFdKGh0dHA6Ly9rdmF6YXJzLmNvbS9saXR0ZXJhLykgb3IgW0dseXBoIERlc2lnbmVyXShodHRwczovLzcxc3F1YXJlZC5jb20vZ2x5cGhkZXNpZ25lcilcclxuICogXHJcbiAqIFBoYXNlciBjYW4gbG9hZCBhbGwgY29tbW9uIGltYWdlIHR5cGVzOiBwbmcsIGpwZywgZ2lmIGFuZCBhbnkgb3RoZXIgZm9ybWF0IHRoZSBicm93c2VyIGNhbiBuYXRpdmVseSBoYW5kbGUuXHJcbiAqXHJcbiAqIFRoZSBrZXkgbXVzdCBiZSBhIHVuaXF1ZSBTdHJpbmcuIEl0IGlzIHVzZWQgdG8gYWRkIHRoZSBmaWxlIHRvIHRoZSBnbG9iYWwgVGV4dHVyZSBNYW5hZ2VyIHVwb24gYSBzdWNjZXNzZnVsIGxvYWQuXHJcbiAqIFRoZSBrZXkgc2hvdWxkIGJlIHVuaXF1ZSBib3RoIGluIHRlcm1zIG9mIGZpbGVzIGJlaW5nIGxvYWRlZCBhbmQgZmlsZXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqIExvYWRpbmcgYSBmaWxlIHVzaW5nIGEga2V5IHRoYXQgaXMgYWxyZWFkeSB0YWtlbiB3aWxsIHJlc3VsdCBpbiBhIHdhcm5pbmcuIElmIHlvdSB3aXNoIHRvIHJlcGxhY2UgYW4gZXhpc3RpbmcgZmlsZVxyXG4gKiB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBUZXh0dXJlIE1hbmFnZXIgZmlyc3QsIGJlZm9yZSBsb2FkaW5nIGEgbmV3IG9uZS5cclxuICpcclxuICogSW5zdGVhZCBvZiBwYXNzaW5nIGFyZ3VtZW50cyB5b3UgY2FuIHBhc3MgYSBjb25maWd1cmF0aW9uIG9iamVjdCwgc3VjaCBhczpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmJpdG1hcEZvbnQoe1xyXG4gKiAgICAga2V5OiAnZ29sZGVuRm9udCcsXHJcbiAqICAgICB0ZXh0dXJlVVJMOiAnaW1hZ2VzL0dvbGRGb250LnBuZycsXHJcbiAqICAgICBmb250RGF0YVVSTDogJ2ltYWdlcy9Hb2xkRm9udC54bWwnXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgUGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuQml0bWFwRm9udEZpbGVDb25maWdgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIE9uY2UgdGhlIGF0bGFzIGhhcyBmaW5pc2hlZCBsb2FkaW5nIHlvdSBjYW4gdXNlIGtleSBvZiBpdCB3aGVuIGNyZWF0aW5nIGEgQml0bWFwIFRleHQgR2FtZSBPYmplY3Q6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5iaXRtYXBGb250KCdnb2xkZW5Gb250JywgJ2ltYWdlcy9Hb2xkRm9udC5wbmcnLCAnaW1hZ2VzL0dvbGRGb250LnhtbCcpO1xyXG4gKiAvLyBhbmQgbGF0ZXIgaW4geW91ciBnYW1lIC4uLlxyXG4gKiB0aGlzLmFkZC5iaXRtYXBUZXh0KHgsIHksICdnb2xkZW5Gb250JywgJ0hlbGxvIFdvcmxkJyk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBJZiB5b3UgaGF2ZSBzcGVjaWZpZWQgYSBwcmVmaXggaW4gdGhlIGxvYWRlciwgdmlhIGBMb2FkZXIuc2V0UHJlZml4YCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhpcyBmaWxlc1xyXG4gKiBrZXkuIEZvciBleGFtcGxlLCBpZiB0aGUgcHJlZml4IHdhcyBgTUVOVS5gIGFuZCB0aGUga2V5IHdhcyBgQmFja2dyb3VuZGAgdGhlIGZpbmFsIGtleSB3aWxsIGJlIGBNRU5VLkJhY2tncm91bmRgIGFuZFxyXG4gKiB0aGlzIGlzIHdoYXQgeW91IHdvdWxkIHVzZSB3aGVuIGNyZWF0aW5nIGEgQml0bWFwIFRleHQgb2JqZWN0LlxyXG4gKlxyXG4gKiBUaGUgVVJMIGNhbiBiZSByZWxhdGl2ZSBvciBhYnNvbHV0ZS4gSWYgdGhlIFVSTCBpcyByZWxhdGl2ZSB0aGUgYExvYWRlci5iYXNlVVJMYCBhbmQgYExvYWRlci5wYXRoYCB2YWx1ZXMgd2lsbCBiZSBwcmVwZW5kZWQgdG8gaXQuXHJcbiAqXHJcbiAqIElmIHRoZSBVUkwgaXNuJ3Qgc3BlY2lmaWVkIHRoZSBMb2FkZXIgd2lsbCB0YWtlIHRoZSBrZXkgYW5kIGNyZWF0ZSBhIGZpbGVuYW1lIGZyb20gdGhhdC4gRm9yIGV4YW1wbGUgaWYgdGhlIGtleSBpcyBcImFsaWVuXCJcclxuICogYW5kIG5vIFVSTCBpcyBnaXZlbiB0aGVuIHRoZSBMb2FkZXIgd2lsbCBzZXQgdGhlIFVSTCB0byBiZSBcImFsaWVuLnBuZ1wiLiBJdCB3aWxsIGFsd2F5cyBhZGQgYC5wbmdgIGFzIHRoZSBleHRlbnNpb24sIGFsdGhvdWdoXHJcbiAqIHRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gaWYgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgbWV0aG9kIGFyZ3VtZW50cy4gSWYgeW91IGRvIG5vdCBkZXNpcmUgdGhpcyBhY3Rpb24gdGhlbiBwcm92aWRlIGEgVVJMLlxyXG4gKlxyXG4gKiBQaGFzZXIgYWxzbyBzdXBwb3J0cyB0aGUgYXV0b21hdGljIGxvYWRpbmcgb2YgYXNzb2NpYXRlZCBub3JtYWwgbWFwcy4gSWYgeW91IGhhdmUgYSBub3JtYWwgbWFwIHRvIGdvIHdpdGggdGhpcyBpbWFnZSxcclxuICogdGhlbiB5b3UgY2FuIHNwZWNpZnkgaXQgYnkgcHJvdmlkaW5nIGFuIGFycmF5IGFzIHRoZSBgdXJsYCB3aGVyZSB0aGUgc2Vjb25kIGVsZW1lbnQgaXMgdGhlIG5vcm1hbCBtYXA6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5iaXRtYXBGb250KCdnb2xkZW5Gb250JywgWyAnaW1hZ2VzL0dvbGRGb250LnBuZycsICdpbWFnZXMvR29sZEZvbnQtbi5wbmcnIF0sICdpbWFnZXMvR29sZEZvbnQueG1sJyk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBPciwgaWYgeW91IGFyZSB1c2luZyBhIGNvbmZpZyBvYmplY3QgdXNlIHRoZSBgbm9ybWFsTWFwYCBwcm9wZXJ0eTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmJpdG1hcEZvbnQoe1xyXG4gKiAgICAga2V5OiAnZ29sZGVuRm9udCcsXHJcbiAqICAgICB0ZXh0dXJlVVJMOiAnaW1hZ2VzL0dvbGRGb250LnBuZycsXHJcbiAqICAgICBub3JtYWxNYXA6ICdpbWFnZXMvR29sZEZvbnQtbi5wbmcnLFxyXG4gKiAgICAgZm9udERhdGFVUkw6ICdpbWFnZXMvR29sZEZvbnQueG1sJ1xyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIFRoZSBub3JtYWwgbWFwIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgc2FtZSBjb25kaXRpb25zIGFzIHRoZSBpbWFnZSBmaWxlIHdpdGggcmVnYXJkIHRvIHRoZSBwYXRoLCBiYXNlVVJMLCBDT1JzIGFuZCBYSFIgU2V0dGluZ3MuXHJcbiAqIE5vcm1hbCBtYXBzIGFyZSBhIFdlYkdMIG9ubHkgZmVhdHVyZS5cclxuICpcclxuICogTm90ZTogVGhlIGFiaWxpdHkgdG8gbG9hZCB0aGlzIHR5cGUgb2YgZmlsZSB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBCaXRtYXAgRm9udCBGaWxlIHR5cGUgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIEl0IGlzIGF2YWlsYWJsZSBpbiB0aGUgZGVmYXVsdCBidWlsZCBidXQgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gY3VzdG9tIGJ1aWxkcy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNiaXRtYXBGb250XHJcbiAqIEBmaXJlcyBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhZGRGaWxlRXZlbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5CaXRtYXBGb250RmlsZUNvbmZpZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5CaXRtYXBGb250RmlsZUNvbmZpZ1tdKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhcnJheSBvZiB0aGVtLlxyXG4gKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gW3RleHR1cmVVUkxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoZSBmb250IGltYWdlIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4ucG5nYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4ucG5nXCIuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZm9udERhdGFVUkxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoZSBmb250IHhtbCBkYXRhIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4ueG1sYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4ueG1sXCIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3RleHR1cmVYaHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBmb250IGltYWdlIGZpbGUuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW2ZvbnREYXRhWGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgZm9udCBkYXRhIHhtbCBmaWxlLiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gVGhlIExvYWRlciBpbnN0YW5jZS5cclxuICovXHJcbkZpbGVUeXBlc01hbmFnZXIucmVnaXN0ZXIoJ2JpdG1hcEZvbnQnLCBmdW5jdGlvbiAoa2V5LCB0ZXh0dXJlVVJMLCBmb250RGF0YVVSTCwgdGV4dHVyZVhoclNldHRpbmdzLCBmb250RGF0YVhoclNldHRpbmdzKVxyXG57XHJcbiAgICB2YXIgbXVsdGlmaWxlO1xyXG5cclxuICAgIC8vICBTdXBwb3J0cyBhbiBPYmplY3QgZmlsZSBkZWZpbml0aW9uIGluIHRoZSBrZXkgYXJndW1lbnRcclxuICAgIC8vICBPciBhbiBhcnJheSBvZiBvYmplY3RzIGluIHRoZSBrZXkgYXJndW1lbnRcclxuICAgIC8vICBPciBhIHNpbmdsZSBlbnRyeSB3aGVyZSBhbGwgYXJndW1lbnRzIGhhdmUgYmVlbiBkZWZpbmVkXHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5KSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG11bHRpZmlsZSA9IG5ldyBCaXRtYXBGb250RmlsZSh0aGlzLCBrZXlbaV0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRGaWxlKG11bHRpZmlsZS5maWxlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIG11bHRpZmlsZSA9IG5ldyBCaXRtYXBGb250RmlsZSh0aGlzLCBrZXksIHRleHR1cmVVUkwsIGZvbnREYXRhVVJMLCB0ZXh0dXJlWGhyU2V0dGluZ3MsIGZvbnREYXRhWGhyU2V0dGluZ3MpO1xyXG5cclxuICAgICAgICB0aGlzLmFkZEZpbGUobXVsdGlmaWxlLmZpbGVzKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJpdG1hcEZvbnRGaWxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/BitmapFontFile.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/filetypes/CSSFile.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/loader/filetypes/CSSFile.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single CSS File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#css method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#css.\r\n *\r\n * @class CSSFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.17.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.CSSFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.js`, i.e. if `key` was \"alien\" then the URL will be \"alien.js\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n */\r\nvar CSSFile = new Class({\r\n\r\n Extends: File,\r\n\r\n initialize:\r\n\r\n function CSSFile (loader, key, url, xhrSettings)\r\n {\r\n var extension = 'css';\r\n\r\n if (IsPlainObject(key))\r\n {\r\n var config = key;\r\n\r\n key = GetFastValue(config, 'key');\r\n url = GetFastValue(config, 'url');\r\n xhrSettings = GetFastValue(config, 'xhrSettings');\r\n extension = GetFastValue(config, 'extension', extension);\r\n }\r\n\r\n var fileConfig = {\r\n type: 'script',\r\n cache: false,\r\n extension: extension,\r\n responseType: 'text',\r\n key: key,\r\n url: url,\r\n xhrSettings: xhrSettings\r\n };\r\n\r\n File.call(this, loader, fileConfig);\r\n },\r\n\r\n /**\r\n * Called automatically by Loader.nextFile.\r\n * This method controls what extra work this File does with its loaded data.\r\n *\r\n * @method Phaser.Loader.FileTypes.CSSFile#onProcess\r\n * @since 3.17.0\r\n */\r\n onProcess: function ()\r\n {\r\n this.state = CONST.FILE_PROCESSING;\r\n\r\n this.data = document.createElement('style');\r\n this.data.defer = false;\r\n this.data.innerHTML = this.xhrLoader.responseText;\r\n\r\n document.head.appendChild(this.data);\r\n\r\n this.onProcessComplete();\r\n }\r\n\r\n});\r\n\r\n/**\r\n * Adds a CSS file, or array of CSS files, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n * this.load.css('headers', 'styles/headers.css');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * The key must be a unique String and not already in-use by another file in the Loader.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.css({\r\n * key: 'headers',\r\n * url: 'styles/headers.css'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.CSSFileConfig` for more details.\r\n *\r\n * Once the file has finished loading it will automatically be converted into a style DOM element\r\n * via `document.createElement('style')`. It will have its `defer` property set to false and then the\r\n * resulting element will be appended to `document.head`. The CSS styles are then applied to the current document.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"alien\"\r\n * and no URL is given then the Loader will set the URL to be \"alien.css\". It will always add `.css` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Note: The ability to load this type of file will only be available if the CSS File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#css\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.17.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.CSSFileConfig|Phaser.Types.Loader.FileTypes.CSSFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.css`, i.e. if `key` was \"alien\" then the URL will be \"alien.css\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('css', function (key, url, xhrSettings)\r\n{\r\n if (Array.isArray(key))\r\n {\r\n for (var i = 0; i < key.length; i++)\r\n {\r\n // If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n this.addFile(new CSSFile(this, key[i]));\r\n }\r\n }\r\n else\r\n {\r\n this.addFile(new CSSFile(this, key, url, xhrSettings));\r\n }\r\n\r\n return this;\r\n});\r\n\r\nmodule.exports = CSSFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0NTU0ZpbGUuanM/NTMyMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxZQUFZLG1CQUFPLENBQUMsMkRBQVU7QUFDOUIsV0FBVyxtQkFBTyxDQUFDLHlEQUFTO0FBQzVCLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFxQjtBQUNwRCxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDNUQsb0JBQW9CLG1CQUFPLENBQUMsaUdBQWtDOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxxREFBcUQ7QUFDaEUsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1HQUFtRztBQUM5RyxXQUFXLE9BQU87QUFDbEIsV0FBVyxzQ0FBc0M7QUFDakQ7QUFDQSxZQUFZLDJCQUEyQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLGdCQUFnQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbG9hZGVyL2ZpbGV0eXBlcy9DU1NGaWxlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xyXG52YXIgRmlsZSA9IHJlcXVpcmUoJy4uL0ZpbGUnKTtcclxudmFyIEZpbGVUeXBlc01hbmFnZXIgPSByZXF1aXJlKCcuLi9GaWxlVHlwZXNNYW5hZ2VyJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBJc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0lzUGxhaW5PYmplY3QnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgc2luZ2xlIENTUyBGaWxlIHN1aXRhYmxlIGZvciBsb2FkaW5nIGJ5IHRoZSBMb2FkZXIuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSBjcmVhdGVkIHdoZW4geW91IHVzZSB0aGUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jY3NzIG1ldGhvZCBhbmQgYXJlIG5vdCB0eXBpY2FsbHkgY3JlYXRlZCBkaXJlY3RseS5cclxuICogXHJcbiAqIEZvciBkb2N1bWVudGF0aW9uIGFib3V0IHdoYXQgYWxsIHRoZSBhcmd1bWVudHMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtZWFuIHBsZWFzZSBzZWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jY3NzLlxyXG4gKlxyXG4gKiBAY2xhc3MgQ1NTRmlsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLkZpbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4xNy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IGxvYWRlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBMb2FkZXIgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgdGhpcyBmaWxlLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuQ1NTRmlsZUNvbmZpZyl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5qc2AsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLmpzXCIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEV4dHJhIFhIUiBTZXR0aW5ncyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgZmlsZS5cclxuICovXHJcbnZhciBDU1NGaWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBGaWxlLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gQ1NTRmlsZSAobG9hZGVyLCBrZXksIHVybCwgeGhyU2V0dGluZ3MpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGV4dGVuc2lvbiA9ICdjc3MnO1xyXG5cclxuICAgICAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGtleTtcclxuXHJcbiAgICAgICAgICAgIGtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdrZXknKTtcclxuICAgICAgICAgICAgdXJsID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3VybCcpO1xyXG4gICAgICAgICAgICB4aHJTZXR0aW5ncyA9IEdldEZhc3RWYWx1ZShjb25maWcsICd4aHJTZXR0aW5ncycpO1xyXG4gICAgICAgICAgICBleHRlbnNpb24gPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZXh0ZW5zaW9uJywgZXh0ZW5zaW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBmaWxlQ29uZmlnID0ge1xyXG4gICAgICAgICAgICB0eXBlOiAnc2NyaXB0JyxcclxuICAgICAgICAgICAgY2FjaGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBleHRlbnNpb246IGV4dGVuc2lvbixcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCcsXHJcbiAgICAgICAgICAgIGtleToga2V5LFxyXG4gICAgICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICAgICAgeGhyU2V0dGluZ3M6IHhoclNldHRpbmdzXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgRmlsZS5jYWxsKHRoaXMsIGxvYWRlciwgZmlsZUNvbmZpZyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgTG9hZGVyLm5leHRGaWxlLlxyXG4gICAgICogVGhpcyBtZXRob2QgY29udHJvbHMgd2hhdCBleHRyYSB3b3JrIHRoaXMgRmlsZSBkb2VzIHdpdGggaXRzIGxvYWRlZCBkYXRhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuQ1NTRmlsZSNvblByb2Nlc3NcclxuICAgICAqIEBzaW5jZSAzLjE3LjBcclxuICAgICAqL1xyXG4gICAgb25Qcm9jZXNzOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT05TVC5GSUxFX1BST0NFU1NJTkc7XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XHJcbiAgICAgICAgdGhpcy5kYXRhLmRlZmVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kYXRhLmlubmVySFRNTCA9IHRoaXMueGhyTG9hZGVyLnJlc3BvbnNlVGV4dDtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0aGlzLmRhdGEpO1xyXG5cclxuICAgICAgICB0aGlzLm9uUHJvY2Vzc0NvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIGEgQ1NTIGZpbGUsIG9yIGFycmF5IG9mIENTUyBmaWxlcywgdG8gdGhlIGN1cnJlbnQgbG9hZCBxdWV1ZS5cclxuICpcclxuICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIGZyb20gd2l0aGluIHlvdXIgU2NlbmUncyBgcHJlbG9hZGAsIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGVzIHlvdSB3aXNoIHRvIGxvYWQ6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGZ1bmN0aW9uIHByZWxvYWQgKClcclxuICoge1xyXG4gKiAgICAgdGhpcy5sb2FkLmNzcygnaGVhZGVycycsICdzdHlsZXMvaGVhZGVycy5jc3MnKTtcclxuICogfVxyXG4gKiBgYGBcclxuICpcclxuICogVGhlIGZpbGUgaXMgKipub3QqKiBsb2FkZWQgcmlnaHQgYXdheS4gSXQgaXMgYWRkZWQgdG8gYSBxdWV1ZSByZWFkeSB0byBiZSBsb2FkZWQgZWl0aGVyIHdoZW4gdGhlIGxvYWRlciBzdGFydHMsXHJcbiAqIG9yIGlmIGl0J3MgYWxyZWFkeSBydW5uaW5nLCB3aGVuIHRoZSBuZXh0IGZyZWUgbG9hZCBzbG90IGJlY29tZXMgYXZhaWxhYmxlLiBUaGlzIGhhcHBlbnMgYXV0b21hdGljYWxseSBpZiB5b3VcclxuICogYXJlIGNhbGxpbmcgdGhpcyBmcm9tIHdpdGhpbiB0aGUgU2NlbmUncyBgcHJlbG9hZGAgbWV0aG9kLCBvciBhIHJlbGF0ZWQgY2FsbGJhY2suIEJlY2F1c2UgdGhlIGZpbGUgaXMgcXVldWVkXHJcbiAqIGl0IG1lYW5zIHlvdSBjYW5ub3QgdXNlIHRoZSBmaWxlIGltbWVkaWF0ZWx5IGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QsIGJ1dCBtdXN0IHdhaXQgZm9yIHRoZSBmaWxlIHRvIGNvbXBsZXRlLlxyXG4gKiBUaGUgdHlwaWNhbCBmbG93IGZvciBhIFBoYXNlciBTY2VuZSBpcyB0aGF0IHlvdSBsb2FkIGFzc2V0cyBpbiB0aGUgU2NlbmUncyBgcHJlbG9hZGAgbWV0aG9kIGFuZCB0aGVuIHdoZW4gdGhlXHJcbiAqIFNjZW5lJ3MgYGNyZWF0ZWAgbWV0aG9kIGlzIGNhbGxlZCB5b3UgYXJlIGd1YXJhbnRlZWQgdGhhdCBhbGwgb2YgdGhvc2UgYXNzZXRzIGFyZSByZWFkeSBmb3IgdXNlIGFuZCBoYXZlIGJlZW5cclxuICogbG9hZGVkLlxyXG4gKiBcclxuICogVGhlIGtleSBtdXN0IGJlIGEgdW5pcXVlIFN0cmluZyBhbmQgbm90IGFscmVhZHkgaW4tdXNlIGJ5IGFub3RoZXIgZmlsZSBpbiB0aGUgTG9hZGVyLlxyXG4gKlxyXG4gKiBJbnN0ZWFkIG9mIHBhc3NpbmcgYXJndW1lbnRzIHlvdSBjYW4gcGFzcyBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBzdWNoIGFzOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQuY3NzKHtcclxuICogICAgIGtleTogJ2hlYWRlcnMnLFxyXG4gKiAgICAgdXJsOiAnc3R5bGVzL2hlYWRlcnMuY3NzJ1xyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkNTU0ZpbGVDb25maWdgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIE9uY2UgdGhlIGZpbGUgaGFzIGZpbmlzaGVkIGxvYWRpbmcgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGNvbnZlcnRlZCBpbnRvIGEgc3R5bGUgRE9NIGVsZW1lbnRcclxuICogdmlhIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpYC4gSXQgd2lsbCBoYXZlIGl0cyBgZGVmZXJgIHByb3BlcnR5IHNldCB0byBmYWxzZSBhbmQgdGhlbiB0aGVcclxuICogcmVzdWx0aW5nIGVsZW1lbnQgd2lsbCBiZSBhcHBlbmRlZCB0byBgZG9jdW1lbnQuaGVhZGAuIFRoZSBDU1Mgc3R5bGVzIGFyZSB0aGVuIGFwcGxpZWQgdG8gdGhlIGN1cnJlbnQgZG9jdW1lbnQuXHJcbiAqXHJcbiAqIFRoZSBVUkwgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlLiBJZiB0aGUgVVJMIGlzIHJlbGF0aXZlIHRoZSBgTG9hZGVyLmJhc2VVUkxgIGFuZCBgTG9hZGVyLnBhdGhgIHZhbHVlcyB3aWxsIGJlIHByZXBlbmRlZCB0byBpdC5cclxuICpcclxuICogSWYgdGhlIFVSTCBpc24ndCBzcGVjaWZpZWQgdGhlIExvYWRlciB3aWxsIHRha2UgdGhlIGtleSBhbmQgY3JlYXRlIGEgZmlsZW5hbWUgZnJvbSB0aGF0LiBGb3IgZXhhbXBsZSBpZiB0aGUga2V5IGlzIFwiYWxpZW5cIlxyXG4gKiBhbmQgbm8gVVJMIGlzIGdpdmVuIHRoZW4gdGhlIExvYWRlciB3aWxsIHNldCB0aGUgVVJMIHRvIGJlIFwiYWxpZW4uY3NzXCIuIEl0IHdpbGwgYWx3YXlzIGFkZCBgLmNzc2AgYXMgdGhlIGV4dGVuc2lvbiwgYWx0aG91Z2hcclxuICogdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBpZiB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBtZXRob2QgYXJndW1lbnRzLiBJZiB5b3UgZG8gbm90IGRlc2lyZSB0aGlzIGFjdGlvbiB0aGVuIHByb3ZpZGUgYSBVUkwuXHJcbiAqXHJcbiAqIE5vdGU6IFRoZSBhYmlsaXR5IHRvIGxvYWQgdGhpcyB0eXBlIG9mIGZpbGUgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgQ1NTIEZpbGUgdHlwZSBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogSXQgaXMgYXZhaWxhYmxlIGluIHRoZSBkZWZhdWx0IGJ1aWxkIGJ1dCBjYW4gYmUgZXhjbHVkZWQgZnJvbSBjdXN0b20gYnVpbGRzLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2Nzc1xyXG4gKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYWRkRmlsZUV2ZW50XHJcbiAqIEBzaW5jZSAzLjE3LjBcclxuICpcclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkNTU0ZpbGVDb25maWd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuQ1NTRmlsZUNvbmZpZ1tdKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhcnJheSBvZiB0aGVtLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhpcyBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+LmNzc2AsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLmNzc1wiLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt4aHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBUaGUgTG9hZGVyIGluc3RhbmNlLlxyXG4gKi9cclxuRmlsZVR5cGVzTWFuYWdlci5yZWdpc3RlcignY3NzJywgZnVuY3Rpb24gKGtleSwgdXJsLCB4aHJTZXR0aW5ncylcclxue1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5KSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBJZiBpdCdzIGFuIGFycmF5IGl0IGhhcyB0byBiZSBhbiBhcnJheSBvZiBPYmplY3RzLCBzbyB3ZSBnZXQgZXZlcnl0aGluZyBvdXQgb2YgdGhlICdrZXknIG9iamVjdFxyXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGUobmV3IENTU0ZpbGUodGhpcywga2V5W2ldKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYWRkRmlsZShuZXcgQ1NTRmlsZSh0aGlzLCBrZXksIHVybCwgeGhyU2V0dGluZ3MpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENTU0ZpbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/CSSFile.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/filetypes/GLSLFile.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/loader/filetypes/GLSLFile.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\nvar Shader = __webpack_require__(/*! ../../display/shader/BaseShader */ \"./node_modules/phaser/src/display/shader/BaseShader.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single GLSL File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#glsl method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#glsl.\r\n *\r\n * @class GLSLFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.GLSLFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.txt`, i.e. if `key` was \"alien\" then the URL will be \"alien.txt\".\r\n * @param {string} [shaderType='fragment'] - The type of shader. Either `fragment` for a fragment shader, or `vertex` for a vertex shader. This is ignored if you load a shader bundle.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n */\r\nvar GLSLFile = new Class({\r\n\r\n Extends: File,\r\n\r\n initialize:\r\n\r\n function GLSLFile (loader, key, url, shaderType, xhrSettings)\r\n {\r\n var extension = 'glsl';\r\n\r\n if (IsPlainObject(key))\r\n {\r\n var config = key;\r\n\r\n key = GetFastValue(config, 'key');\r\n url = GetFastValue(config, 'url');\r\n shaderType = GetFastValue(config, 'shaderType', 'fragment');\r\n xhrSettings = GetFastValue(config, 'xhrSettings');\r\n extension = GetFastValue(config, 'extension', extension);\r\n }\r\n else if (shaderType === undefined)\r\n {\r\n shaderType = 'fragment';\r\n }\r\n\r\n var fileConfig = {\r\n type: 'glsl',\r\n cache: loader.cacheManager.shader,\r\n extension: extension,\r\n responseType: 'text',\r\n key: key,\r\n url: url,\r\n config: {\r\n shaderType: shaderType\r\n },\r\n xhrSettings: xhrSettings\r\n };\r\n\r\n File.call(this, loader, fileConfig);\r\n },\r\n\r\n /**\r\n * Called automatically by Loader.nextFile.\r\n * This method controls what extra work this File does with its loaded data.\r\n *\r\n * @method Phaser.Loader.FileTypes.GLSLFile#onProcess\r\n * @since 3.7.0\r\n */\r\n onProcess: function ()\r\n {\r\n this.state = CONST.FILE_PROCESSING;\r\n\r\n this.data = this.xhrLoader.responseText;\r\n\r\n this.onProcessComplete();\r\n },\r\n\r\n /**\r\n * Adds this file to its target cache upon successful loading and processing.\r\n *\r\n * @method Phaser.Loader.FileTypes.GLSLFile#addToCache\r\n * @since 3.17.0\r\n */\r\n addToCache: function ()\r\n {\r\n var data = this.data.split('\\n');\r\n\r\n // Check to see if this is a shader bundle, or raw glsl file.\r\n var block = this.extractBlock(data, 0);\r\n\r\n if (block)\r\n {\r\n while (block)\r\n {\r\n var key = this.getShaderName(block.header);\r\n var shaderType = this.getShaderType(block.header);\r\n var uniforms = this.getShaderUniforms(block.header);\r\n var shaderSrc = block.shader;\r\n\r\n if (this.cache.has(key))\r\n {\r\n var shader = this.cache.get(key);\r\n\r\n if (shaderType === 'fragment')\r\n {\r\n shader.fragmentSrc = shaderSrc;\r\n }\r\n else\r\n {\r\n shader.vertexSrc = shaderSrc;\r\n }\r\n\r\n if (!shader.uniforms)\r\n {\r\n shader.uniforms = uniforms;\r\n }\r\n }\r\n else if (shaderType === 'fragment')\r\n {\r\n this.cache.add(key, new Shader(key, shaderSrc, '', uniforms));\r\n }\r\n else\r\n {\r\n this.cache.add(key, new Shader(key, '', shaderSrc, uniforms));\r\n }\r\n\r\n block = this.extractBlock(data, block.offset);\r\n }\r\n }\r\n else if (this.config.shaderType === 'fragment')\r\n {\r\n // Single shader\r\n this.cache.add(this.key, new Shader(this.key, this.data));\r\n }\r\n else\r\n {\r\n this.cache.add(this.key, new Shader(this.key, '', this.data));\r\n }\r\n\r\n this.pendingDestroy();\r\n },\r\n\r\n /**\r\n * Returns the name of the shader from the header block.\r\n *\r\n * @method Phaser.Loader.FileTypes.GLSLFile#getShaderName\r\n * @since 3.17.0\r\n * \r\n * @param {string[]} headerSource - The header data.\r\n * \r\n * @return {string} The shader name.\r\n */\r\n getShaderName: function (headerSource)\r\n {\r\n for (var i = 0; i < headerSource.length; i++)\r\n {\r\n var line = headerSource[i].trim();\r\n\r\n if (line.substring(0, 5) === 'name:')\r\n {\r\n return line.substring(5).trim();\r\n }\r\n }\r\n\r\n return this.key;\r\n },\r\n\r\n /**\r\n * Returns the type of the shader from the header block.\r\n *\r\n * @method Phaser.Loader.FileTypes.GLSLFile#getShaderType\r\n * @since 3.17.0\r\n * \r\n * @param {string[]} headerSource - The header data.\r\n * \r\n * @return {string} The shader type. Either 'fragment' or 'vertex'.\r\n */\r\n getShaderType: function (headerSource)\r\n {\r\n for (var i = 0; i < headerSource.length; i++)\r\n {\r\n var line = headerSource[i].trim();\r\n\r\n if (line.substring(0, 5) === 'type:')\r\n {\r\n return line.substring(5).trim();\r\n }\r\n }\r\n\r\n return this.config.shaderType;\r\n },\r\n\r\n /**\r\n * Returns the shader uniforms from the header block.\r\n *\r\n * @method Phaser.Loader.FileTypes.GLSLFile#getShaderUniforms\r\n * @since 3.17.0\r\n * \r\n * @param {string[]} headerSource - The header data.\r\n * \r\n * @return {any} The shader uniforms object.\r\n */\r\n getShaderUniforms: function (headerSource)\r\n {\r\n var uniforms = {};\r\n\r\n for (var i = 0; i < headerSource.length; i++)\r\n {\r\n var line = headerSource[i].trim();\r\n\r\n if (line.substring(0, 8) === 'uniform.')\r\n {\r\n var pos = line.indexOf(':');\r\n\r\n if (pos)\r\n {\r\n var key = line.substring(8, pos);\r\n\r\n try\r\n {\r\n uniforms[key] = JSON.parse(line.substring(pos + 1));\r\n }\r\n catch (e)\r\n {\r\n console.warn('Invalid uniform JSON: ' + key);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return uniforms;\r\n },\r\n\r\n /**\r\n * Processes the shader file and extracts the relevant data.\r\n *\r\n * @method Phaser.Loader.FileTypes.GLSLFile#extractBlock\r\n * @private\r\n * @since 3.17.0\r\n * \r\n * @param {string[]} data - The array of shader data to process.\r\n * @param {integer} offset - The offset to start processing from.\r\n * \r\n * @return {any} The processed shader block, or null.\r\n */\r\n extractBlock: function (data, offset)\r\n {\r\n var headerStart = -1;\r\n var headerEnd = -1;\r\n var blockEnd = -1;\r\n var headerOpen = false;\r\n var captureSource = false;\r\n var headerSource = [];\r\n var shaderSource = [];\r\n\r\n for (var i = offset; i < data.length; i++)\r\n {\r\n var line = data[i].trim();\r\n\r\n if (line === '---')\r\n {\r\n if (headerStart === -1)\r\n {\r\n headerStart = i;\r\n headerOpen = true;\r\n }\r\n else if (headerOpen)\r\n {\r\n headerEnd = i;\r\n headerOpen = false;\r\n captureSource = true;\r\n }\r\n else\r\n {\r\n // We've hit another --- delimiter, break out\r\n captureSource = false;\r\n break;\r\n }\r\n }\r\n else if (headerOpen)\r\n {\r\n headerSource.push(line);\r\n }\r\n else if (captureSource)\r\n {\r\n shaderSource.push(line);\r\n blockEnd = i;\r\n }\r\n }\r\n\r\n if (!headerOpen && headerEnd !== -1)\r\n {\r\n return { header: headerSource, shader: shaderSource.join('\\n'), offset: blockEnd };\r\n }\r\n else\r\n {\r\n return null;\r\n }\r\n }\r\n\r\n});\r\n\r\n/**\r\n * Adds a GLSL file, or array of GLSL files, to the current load queue.\r\n * In Phaser 3 GLSL files are just plain Text files at the current moment in time.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n * this.load.glsl('plasma', 'shaders/Plasma.glsl');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * The key must be a unique String. It is used to add the file to the global Shader Cache upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Shader Cache.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Shader Cache first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.glsl({\r\n * key: 'plasma',\r\n * shaderType: 'fragment',\r\n * url: 'shaders/Plasma.glsl'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.GLSLFileConfig` for more details.\r\n *\r\n * Once the file has finished loading you can access it from its Cache using its key:\r\n * \r\n * ```javascript\r\n * this.load.glsl('plasma', 'shaders/Plasma.glsl');\r\n * // and later in your game ...\r\n * var data = this.cache.shader.get('plasma');\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `FX.` and the key was `Plasma` the final key will be `FX.Plasma` and\r\n * this is what you would use to retrieve the text from the Shader Cache.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"plasma\"\r\n * and no URL is given then the Loader will set the URL to be \"plasma.glsl\". It will always add `.glsl` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Note: The ability to load this type of file will only be available if the GLSL File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#glsl\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.GLSLFileConfig|Phaser.Types.Loader.FileTypes.GLSLFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.glsl`, i.e. if `key` was \"alien\" then the URL will be \"alien.glsl\".\r\n * @param {string} [shaderType='fragment'] - The type of shader. Either `fragment` for a fragment shader, or `vertex` for a vertex shader. This is ignored if you load a shader bundle.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('glsl', function (key, url, shaderType, xhrSettings)\r\n{\r\n if (Array.isArray(key))\r\n {\r\n for (var i = 0; i < key.length; i++)\r\n {\r\n // If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n this.addFile(new GLSLFile(this, key[i]));\r\n }\r\n }\r\n else\r\n {\r\n this.addFile(new GLSLFile(this, key, url, shaderType, xhrSettings));\r\n }\r\n\r\n return this;\r\n});\r\n\r\nmodule.exports = GLSLFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0dMU0xGaWxlLmpzPzNhNGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsWUFBWSxtQkFBTyxDQUFDLDJEQUFVO0FBQzlCLFdBQVcsbUJBQU8sQ0FBQyx5REFBUztBQUM1Qix1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBcUI7QUFDcEQsbUJBQW1CLG1CQUFPLENBQUMsK0ZBQWlDO0FBQzVELG9CQUFvQixtQkFBTyxDQUFDLGlHQUFrQztBQUM5RCxhQUFhLG1CQUFPLENBQUMsK0ZBQWlDOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxzREFBc0Q7QUFDakUsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLHNDQUFzQztBQUNqRDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHlCQUF5QjtBQUNoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QjtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qix5QkFBeUI7QUFDaEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEI7QUFDQSxnQkFBZ0IsSUFBSTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIseUJBQXlCO0FBQ2hEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxnQkFBZ0IsSUFBSTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0QkFBNEIsaUJBQWlCO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFHQUFxRztBQUNoSCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9maWxldHlwZXMvR0xTTEZpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XHJcbnZhciBGaWxlID0gcmVxdWlyZSgnLi4vRmlsZScpO1xyXG52YXIgRmlsZVR5cGVzTWFuYWdlciA9IHJlcXVpcmUoJy4uL0ZpbGVUeXBlc01hbmFnZXInKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIElzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvSXNQbGFpbk9iamVjdCcpO1xyXG52YXIgU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vZGlzcGxheS9zaGFkZXIvQmFzZVNoYWRlcicpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBzaW5nbGUgR0xTTCBGaWxlIHN1aXRhYmxlIGZvciBsb2FkaW5nIGJ5IHRoZSBMb2FkZXIuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSBjcmVhdGVkIHdoZW4geW91IHVzZSB0aGUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jZ2xzbCBtZXRob2QgYW5kIGFyZSBub3QgdHlwaWNhbGx5IGNyZWF0ZWQgZGlyZWN0bHkuXHJcbiAqIFxyXG4gKiBGb3IgZG9jdW1lbnRhdGlvbiBhYm91dCB3aGF0IGFsbCB0aGUgYXJndW1lbnRzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWVhbiBwbGVhc2Ugc2VlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2dsc2wuXHJcbiAqXHJcbiAqIEBjbGFzcyBHTFNMRmlsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLkZpbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gbG9hZGVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIExvYWRlciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIGZpbGUuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5HTFNMRmlsZUNvbmZpZyl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi50eHRgLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi50eHRcIi5cclxuICogQHBhcmFtIHtzdHJpbmd9IFtzaGFkZXJUeXBlPSdmcmFnbWVudCddIC0gVGhlIHR5cGUgb2Ygc2hhZGVyLiBFaXRoZXIgYGZyYWdtZW50YCBmb3IgYSBmcmFnbWVudCBzaGFkZXIsIG9yIGB2ZXJ0ZXhgIGZvciBhIHZlcnRleCBzaGFkZXIuIFRoaXMgaXMgaWdub3JlZCBpZiB5b3UgbG9hZCBhIHNoYWRlciBidW5kbGUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEV4dHJhIFhIUiBTZXR0aW5ncyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgZmlsZS5cclxuICovXHJcbnZhciBHTFNMRmlsZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogRmlsZSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEdMU0xGaWxlIChsb2FkZXIsIGtleSwgdXJsLCBzaGFkZXJUeXBlLCB4aHJTZXR0aW5ncylcclxuICAgIHtcclxuICAgICAgICB2YXIgZXh0ZW5zaW9uID0gJ2dsc2wnO1xyXG5cclxuICAgICAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGtleTtcclxuXHJcbiAgICAgICAgICAgIGtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdrZXknKTtcclxuICAgICAgICAgICAgdXJsID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3VybCcpO1xyXG4gICAgICAgICAgICBzaGFkZXJUeXBlID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3NoYWRlclR5cGUnLCAnZnJhZ21lbnQnKTtcclxuICAgICAgICAgICAgeGhyU2V0dGluZ3MgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAneGhyU2V0dGluZ3MnKTtcclxuICAgICAgICAgICAgZXh0ZW5zaW9uID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2V4dGVuc2lvbicsIGV4dGVuc2lvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNoYWRlclR5cGUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHNoYWRlclR5cGUgPSAnZnJhZ21lbnQnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGZpbGVDb25maWcgPSB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdnbHNsJyxcclxuICAgICAgICAgICAgY2FjaGU6IGxvYWRlci5jYWNoZU1hbmFnZXIuc2hhZGVyLFxyXG4gICAgICAgICAgICBleHRlbnNpb246IGV4dGVuc2lvbixcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCcsXHJcbiAgICAgICAgICAgIGtleToga2V5LFxyXG4gICAgICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICAgICAgY29uZmlnOiB7XHJcbiAgICAgICAgICAgICAgICBzaGFkZXJUeXBlOiBzaGFkZXJUeXBlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHhoclNldHRpbmdzOiB4aHJTZXR0aW5nc1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIEZpbGUuY2FsbCh0aGlzLCBsb2FkZXIsIGZpbGVDb25maWcpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IExvYWRlci5uZXh0RmlsZS5cclxuICAgICAqIFRoaXMgbWV0aG9kIGNvbnRyb2xzIHdoYXQgZXh0cmEgd29yayB0aGlzIEZpbGUgZG9lcyB3aXRoIGl0cyBsb2FkZWQgZGF0YS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLkdMU0xGaWxlI29uUHJvY2Vzc1xyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKi9cclxuICAgIG9uUHJvY2VzczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09OU1QuRklMRV9QUk9DRVNTSU5HO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLnhockxvYWRlci5yZXNwb25zZVRleHQ7XHJcblxyXG4gICAgICAgIHRoaXMub25Qcm9jZXNzQ29tcGxldGUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIHRoaXMgZmlsZSB0byBpdHMgdGFyZ2V0IGNhY2hlIHVwb24gc3VjY2Vzc2Z1bCBsb2FkaW5nIGFuZCBwcm9jZXNzaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuR0xTTEZpbGUjYWRkVG9DYWNoZVxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICovXHJcbiAgICBhZGRUb0NhY2hlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhLnNwbGl0KCdcXG4nKTtcclxuXHJcbiAgICAgICAgLy8gIENoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIGEgc2hhZGVyIGJ1bmRsZSwgb3IgcmF3IGdsc2wgZmlsZS5cclxuICAgICAgICB2YXIgYmxvY2sgPSB0aGlzLmV4dHJhY3RCbG9jayhkYXRhLCAwKTtcclxuXHJcbiAgICAgICAgaWYgKGJsb2NrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgd2hpbGUgKGJsb2NrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gdGhpcy5nZXRTaGFkZXJOYW1lKGJsb2NrLmhlYWRlcik7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZGVyVHlwZSA9IHRoaXMuZ2V0U2hhZGVyVHlwZShibG9jay5oZWFkZXIpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHVuaWZvcm1zID0gdGhpcy5nZXRTaGFkZXJVbmlmb3JtcyhibG9jay5oZWFkZXIpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNoYWRlclNyYyA9IGJsb2NrLnNoYWRlcjtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jYWNoZS5oYXMoa2V5KSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2hhZGVyID0gdGhpcy5jYWNoZS5nZXQoa2V5KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNoYWRlclR5cGUgPT09ICdmcmFnbWVudCcpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXIuZnJhZ21lbnRTcmMgPSBzaGFkZXJTcmM7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRlci52ZXJ0ZXhTcmMgPSBzaGFkZXJTcmM7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXNoYWRlci51bmlmb3JtcylcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRlci51bmlmb3JtcyA9IHVuaWZvcm1zO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNoYWRlclR5cGUgPT09ICdmcmFnbWVudCcpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWNoZS5hZGQoa2V5LCBuZXcgU2hhZGVyKGtleSwgc2hhZGVyU3JjLCAnJywgdW5pZm9ybXMpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlLmFkZChrZXksIG5ldyBTaGFkZXIoa2V5LCAnJywgc2hhZGVyU3JjLCB1bmlmb3JtcykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGJsb2NrID0gdGhpcy5leHRyYWN0QmxvY2soZGF0YSwgYmxvY2sub2Zmc2V0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbmZpZy5zaGFkZXJUeXBlID09PSAnZnJhZ21lbnQnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIFNpbmdsZSBzaGFkZXJcclxuICAgICAgICAgICAgdGhpcy5jYWNoZS5hZGQodGhpcy5rZXksIG5ldyBTaGFkZXIodGhpcy5rZXksIHRoaXMuZGF0YSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmNhY2hlLmFkZCh0aGlzLmtleSwgbmV3IFNoYWRlcih0aGlzLmtleSwgJycsIHRoaXMuZGF0YSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wZW5kaW5nRGVzdHJveSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHNoYWRlciBmcm9tIHRoZSBoZWFkZXIgYmxvY2suXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5HTFNMRmlsZSNnZXRTaGFkZXJOYW1lXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IGhlYWRlclNvdXJjZSAtIFRoZSBoZWFkZXIgZGF0YS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc2hhZGVyIG5hbWUuXHJcbiAgICAgKi9cclxuICAgIGdldFNoYWRlck5hbWU6IGZ1bmN0aW9uIChoZWFkZXJTb3VyY2UpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWFkZXJTb3VyY2UubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgbGluZSA9IGhlYWRlclNvdXJjZVtpXS50cmltKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAobGluZS5zdWJzdHJpbmcoMCwgNSkgPT09ICduYW1lOicpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBsaW5lLnN1YnN0cmluZyg1KS50cmltKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmtleTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBzaGFkZXIgZnJvbSB0aGUgaGVhZGVyIGJsb2NrLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuR0xTTEZpbGUjZ2V0U2hhZGVyVHlwZVxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBoZWFkZXJTb3VyY2UgLSBUaGUgaGVhZGVyIGRhdGEuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHNoYWRlciB0eXBlLiBFaXRoZXIgJ2ZyYWdtZW50JyBvciAndmVydGV4Jy5cclxuICAgICAqL1xyXG4gICAgZ2V0U2hhZGVyVHlwZTogZnVuY3Rpb24gKGhlYWRlclNvdXJjZSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhlYWRlclNvdXJjZS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBsaW5lID0gaGVhZGVyU291cmNlW2ldLnRyaW0oKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChsaW5lLnN1YnN0cmluZygwLCA1KSA9PT0gJ3R5cGU6JylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUuc3Vic3RyaW5nKDUpLnRyaW0oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLnNoYWRlclR5cGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgc2hhZGVyIHVuaWZvcm1zIGZyb20gdGhlIGhlYWRlciBibG9jay5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLkdMU0xGaWxlI2dldFNoYWRlclVuaWZvcm1zXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IGhlYWRlclNvdXJjZSAtIFRoZSBoZWFkZXIgZGF0YS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7YW55fSBUaGUgc2hhZGVyIHVuaWZvcm1zIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ2V0U2hhZGVyVW5pZm9ybXM6IGZ1bmN0aW9uIChoZWFkZXJTb3VyY2UpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHVuaWZvcm1zID0ge307XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGVhZGVyU291cmNlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGxpbmUgPSBoZWFkZXJTb3VyY2VbaV0udHJpbSgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGxpbmUuc3Vic3RyaW5nKDAsIDgpID09PSAndW5pZm9ybS4nKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcG9zID0gbGluZS5pbmRleE9mKCc6Jyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHBvcylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbGluZS5zdWJzdHJpbmcoOCwgcG9zKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5XHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtc1trZXldID0gSlNPTi5wYXJzZShsaW5lLnN1YnN0cmluZyhwb3MgKyAxKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIHVuaWZvcm0gSlNPTjogJyArIGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdW5pZm9ybXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvY2Vzc2VzIHRoZSBzaGFkZXIgZmlsZSBhbmQgZXh0cmFjdHMgdGhlIHJlbGV2YW50IGRhdGEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5HTFNMRmlsZSNleHRyYWN0QmxvY2tcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAc2luY2UgMy4xNy4wXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IGRhdGEgLSBUaGUgYXJyYXkgb2Ygc2hhZGVyIGRhdGEgdG8gcHJvY2Vzcy5cclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gb2Zmc2V0IC0gVGhlIG9mZnNldCB0byBzdGFydCBwcm9jZXNzaW5nIGZyb20uXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm4ge2FueX0gVGhlIHByb2Nlc3NlZCBzaGFkZXIgYmxvY2ssIG9yIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGV4dHJhY3RCbG9jazogZnVuY3Rpb24gKGRhdGEsIG9mZnNldClcclxuICAgIHtcclxuICAgICAgICB2YXIgaGVhZGVyU3RhcnQgPSAtMTtcclxuICAgICAgICB2YXIgaGVhZGVyRW5kID0gLTE7XHJcbiAgICAgICAgdmFyIGJsb2NrRW5kID0gLTE7XHJcbiAgICAgICAgdmFyIGhlYWRlck9wZW4gPSBmYWxzZTtcclxuICAgICAgICB2YXIgY2FwdHVyZVNvdXJjZSA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBoZWFkZXJTb3VyY2UgPSBbXTtcclxuICAgICAgICB2YXIgc2hhZGVyU291cmNlID0gW107XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSBvZmZzZXQ7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGxpbmUgPSBkYXRhW2ldLnRyaW0oKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChsaW5lID09PSAnLS0tJylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYgKGhlYWRlclN0YXJ0ID09PSAtMSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJTdGFydCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyT3BlbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChoZWFkZXJPcGVuKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlckVuZCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhcHR1cmVTb3VyY2UgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICBXZSd2ZSBoaXQgYW5vdGhlciAtLS0gZGVsaW1pdGVyLCBicmVhayBvdXRcclxuICAgICAgICAgICAgICAgICAgICBjYXB0dXJlU291cmNlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaGVhZGVyT3BlbilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyU291cmNlLnB1c2gobGluZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY2FwdHVyZVNvdXJjZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2hhZGVyU291cmNlLnB1c2gobGluZSk7XHJcbiAgICAgICAgICAgICAgICBibG9ja0VuZCA9IGk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghaGVhZGVyT3BlbiAmJiBoZWFkZXJFbmQgIT09IC0xKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgaGVhZGVyOiBoZWFkZXJTb3VyY2UsIHNoYWRlcjogc2hhZGVyU291cmNlLmpvaW4oJ1xcbicpLCBvZmZzZXQ6IGJsb2NrRW5kIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgYSBHTFNMIGZpbGUsIG9yIGFycmF5IG9mIEdMU0wgZmlsZXMsIHRvIHRoZSBjdXJyZW50IGxvYWQgcXVldWUuXHJcbiAqIEluIFBoYXNlciAzIEdMU0wgZmlsZXMgYXJlIGp1c3QgcGxhaW4gVGV4dCBmaWxlcyBhdCB0aGUgY3VycmVudCBtb21lbnQgaW4gdGltZS5cclxuICpcclxuICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIGZyb20gd2l0aGluIHlvdXIgU2NlbmUncyBgcHJlbG9hZGAsIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGVzIHlvdSB3aXNoIHRvIGxvYWQ6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGZ1bmN0aW9uIHByZWxvYWQgKClcclxuICoge1xyXG4gKiAgICAgdGhpcy5sb2FkLmdsc2woJ3BsYXNtYScsICdzaGFkZXJzL1BsYXNtYS5nbHNsJyk7XHJcbiAqIH1cclxuICogYGBgXHJcbiAqXHJcbiAqIFRoZSBmaWxlIGlzICoqbm90KiogbG9hZGVkIHJpZ2h0IGF3YXkuIEl0IGlzIGFkZGVkIHRvIGEgcXVldWUgcmVhZHkgdG8gYmUgbG9hZGVkIGVpdGhlciB3aGVuIHRoZSBsb2FkZXIgc3RhcnRzLFxyXG4gKiBvciBpZiBpdCdzIGFscmVhZHkgcnVubmluZywgd2hlbiB0aGUgbmV4dCBmcmVlIGxvYWQgc2xvdCBiZWNvbWVzIGF2YWlsYWJsZS4gVGhpcyBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgaWYgeW91XHJcbiAqIGFyZSBjYWxsaW5nIHRoaXMgZnJvbSB3aXRoaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCwgb3IgYSByZWxhdGVkIGNhbGxiYWNrLiBCZWNhdXNlIHRoZSBmaWxlIGlzIHF1ZXVlZFxyXG4gKiBpdCBtZWFucyB5b3UgY2Fubm90IHVzZSB0aGUgZmlsZSBpbW1lZGlhdGVseSBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLCBidXQgbXVzdCB3YWl0IGZvciB0aGUgZmlsZSB0byBjb21wbGV0ZS5cclxuICogVGhlIHR5cGljYWwgZmxvdyBmb3IgYSBQaGFzZXIgU2NlbmUgaXMgdGhhdCB5b3UgbG9hZCBhc3NldHMgaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCBhbmQgdGhlbiB3aGVuIHRoZVxyXG4gKiBTY2VuZSdzIGBjcmVhdGVgIG1ldGhvZCBpcyBjYWxsZWQgeW91IGFyZSBndWFyYW50ZWVkIHRoYXQgYWxsIG9mIHRob3NlIGFzc2V0cyBhcmUgcmVhZHkgZm9yIHVzZSBhbmQgaGF2ZSBiZWVuXHJcbiAqIGxvYWRlZC5cclxuICogXHJcbiAqIFRoZSBrZXkgbXVzdCBiZSBhIHVuaXF1ZSBTdHJpbmcuIEl0IGlzIHVzZWQgdG8gYWRkIHRoZSBmaWxlIHRvIHRoZSBnbG9iYWwgU2hhZGVyIENhY2hlIHVwb24gYSBzdWNjZXNzZnVsIGxvYWQuXHJcbiAqIFRoZSBrZXkgc2hvdWxkIGJlIHVuaXF1ZSBib3RoIGluIHRlcm1zIG9mIGZpbGVzIGJlaW5nIGxvYWRlZCBhbmQgZmlsZXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBTaGFkZXIgQ2FjaGUuXHJcbiAqIExvYWRpbmcgYSBmaWxlIHVzaW5nIGEga2V5IHRoYXQgaXMgYWxyZWFkeSB0YWtlbiB3aWxsIHJlc3VsdCBpbiBhIHdhcm5pbmcuIElmIHlvdSB3aXNoIHRvIHJlcGxhY2UgYW4gZXhpc3RpbmcgZmlsZVxyXG4gKiB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBTaGFkZXIgQ2FjaGUgZmlyc3QsIGJlZm9yZSBsb2FkaW5nIGEgbmV3IG9uZS5cclxuICpcclxuICogSW5zdGVhZCBvZiBwYXNzaW5nIGFyZ3VtZW50cyB5b3UgY2FuIHBhc3MgYSBjb25maWd1cmF0aW9uIG9iamVjdCwgc3VjaCBhczpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmdsc2woe1xyXG4gKiAgICAga2V5OiAncGxhc21hJyxcclxuICogICAgIHNoYWRlclR5cGU6ICdmcmFnbWVudCcsXHJcbiAqICAgICB1cmw6ICdzaGFkZXJzL1BsYXNtYS5nbHNsJ1xyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkdMU0xGaWxlQ29uZmlnYCBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKlxyXG4gKiBPbmNlIHRoZSBmaWxlIGhhcyBmaW5pc2hlZCBsb2FkaW5nIHlvdSBjYW4gYWNjZXNzIGl0IGZyb20gaXRzIENhY2hlIHVzaW5nIGl0cyBrZXk6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5nbHNsKCdwbGFzbWEnLCAnc2hhZGVycy9QbGFzbWEuZ2xzbCcpO1xyXG4gKiAvLyBhbmQgbGF0ZXIgaW4geW91ciBnYW1lIC4uLlxyXG4gKiB2YXIgZGF0YSA9IHRoaXMuY2FjaGUuc2hhZGVyLmdldCgncGxhc21hJyk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBJZiB5b3UgaGF2ZSBzcGVjaWZpZWQgYSBwcmVmaXggaW4gdGhlIGxvYWRlciwgdmlhIGBMb2FkZXIuc2V0UHJlZml4YCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhpcyBmaWxlc1xyXG4gKiBrZXkuIEZvciBleGFtcGxlLCBpZiB0aGUgcHJlZml4IHdhcyBgRlguYCBhbmQgdGhlIGtleSB3YXMgYFBsYXNtYWAgdGhlIGZpbmFsIGtleSB3aWxsIGJlIGBGWC5QbGFzbWFgIGFuZFxyXG4gKiB0aGlzIGlzIHdoYXQgeW91IHdvdWxkIHVzZSB0byByZXRyaWV2ZSB0aGUgdGV4dCBmcm9tIHRoZSBTaGFkZXIgQ2FjaGUuXHJcbiAqXHJcbiAqIFRoZSBVUkwgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlLiBJZiB0aGUgVVJMIGlzIHJlbGF0aXZlIHRoZSBgTG9hZGVyLmJhc2VVUkxgIGFuZCBgTG9hZGVyLnBhdGhgIHZhbHVlcyB3aWxsIGJlIHByZXBlbmRlZCB0byBpdC5cclxuICpcclxuICogSWYgdGhlIFVSTCBpc24ndCBzcGVjaWZpZWQgdGhlIExvYWRlciB3aWxsIHRha2UgdGhlIGtleSBhbmQgY3JlYXRlIGEgZmlsZW5hbWUgZnJvbSB0aGF0LiBGb3IgZXhhbXBsZSBpZiB0aGUga2V5IGlzIFwicGxhc21hXCJcclxuICogYW5kIG5vIFVSTCBpcyBnaXZlbiB0aGVuIHRoZSBMb2FkZXIgd2lsbCBzZXQgdGhlIFVSTCB0byBiZSBcInBsYXNtYS5nbHNsXCIuIEl0IHdpbGwgYWx3YXlzIGFkZCBgLmdsc2xgIGFzIHRoZSBleHRlbnNpb24sIGFsdGhvdWdoXHJcbiAqIHRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gaWYgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgbWV0aG9kIGFyZ3VtZW50cy4gSWYgeW91IGRvIG5vdCBkZXNpcmUgdGhpcyBhY3Rpb24gdGhlbiBwcm92aWRlIGEgVVJMLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGUgYWJpbGl0eSB0byBsb2FkIHRoaXMgdHlwZSBvZiBmaWxlIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIEdMU0wgRmlsZSB0eXBlIGhhcyBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLlxyXG4gKiBJdCBpcyBhdmFpbGFibGUgaW4gdGhlIGRlZmF1bHQgYnVpbGQgYnV0IGNhbiBiZSBleGNsdWRlZCBmcm9tIGN1c3RvbSBidWlsZHMuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jZ2xzbFxyXG4gKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYWRkRmlsZUV2ZW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuR0xTTEZpbGVDb25maWd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuR0xTTEZpbGVDb25maWdbXSl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdCwgb3IgYXJyYXkgb2YgdGhlbS5cclxuICogQHBhcmFtIHtzdHJpbmd9IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5nbHNsYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4uZ2xzbFwiLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NoYWRlclR5cGU9J2ZyYWdtZW50J10gLSBUaGUgdHlwZSBvZiBzaGFkZXIuIEVpdGhlciBgZnJhZ21lbnRgIGZvciBhIGZyYWdtZW50IHNoYWRlciwgb3IgYHZlcnRleGAgZm9yIGEgdmVydGV4IHNoYWRlci4gVGhpcyBpcyBpZ25vcmVkIGlmIHlvdSBsb2FkIGEgc2hhZGVyIGJ1bmRsZS5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbeGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gVGhlIExvYWRlciBpbnN0YW5jZS5cclxuICovXHJcbkZpbGVUeXBlc01hbmFnZXIucmVnaXN0ZXIoJ2dsc2wnLCBmdW5jdGlvbiAoa2V5LCB1cmwsIHNoYWRlclR5cGUsIHhoclNldHRpbmdzKVxyXG57XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIElmIGl0J3MgYW4gYXJyYXkgaXQgaGFzIHRvIGJlIGFuIGFycmF5IG9mIE9iamVjdHMsIHNvIHdlIGdldCBldmVyeXRoaW5nIG91dCBvZiB0aGUgJ2tleScgb2JqZWN0XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRmlsZShuZXcgR0xTTEZpbGUodGhpcywga2V5W2ldKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYWRkRmlsZShuZXcgR0xTTEZpbGUodGhpcywga2V5LCB1cmwsIHNoYWRlclR5cGUsIHhoclNldHRpbmdzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBHTFNMRmlsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/GLSLFile.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/filetypes/HTML5AudioFile.js":
/*!********************************************************************!*\
!*** ./node_modules/phaser/src/loader/filetypes/HTML5AudioFile.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar Events = __webpack_require__(/*! ../events */ \"./node_modules/phaser/src/loader/events/index.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar GetURL = __webpack_require__(/*! ../GetURL */ \"./node_modules/phaser/src/loader/GetURL.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Audio File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#audio method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#audio.\r\n *\r\n * @class HTML5AudioFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.AudioFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [urlConfig] - The absolute or relative URL to load this file from.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n */\r\nvar HTML5AudioFile = new Class({\r\n\r\n Extends: File,\r\n\r\n initialize:\r\n\r\n function HTML5AudioFile (loader, key, urlConfig, audioConfig)\r\n {\r\n if (IsPlainObject(key))\r\n {\r\n var config = key;\r\n\r\n key = GetFastValue(config, 'key');\r\n audioConfig = GetFastValue(config, 'config', audioConfig);\r\n }\r\n\r\n var fileConfig = {\r\n type: 'audio',\r\n cache: loader.cacheManager.audio,\r\n extension: urlConfig.type,\r\n key: key,\r\n url: urlConfig.url,\r\n config: audioConfig\r\n };\r\n\r\n File.call(this, loader, fileConfig);\r\n\r\n // New properties specific to this class\r\n this.locked = 'ontouchstart' in window;\r\n this.loaded = false;\r\n this.filesLoaded = 0;\r\n this.filesTotal = 0;\r\n },\r\n\r\n /**\r\n * Called when the file finishes loading.\r\n *\r\n * @method Phaser.Loader.FileTypes.HTML5AudioFile#onLoad\r\n * @since 3.0.0\r\n */\r\n onLoad: function ()\r\n {\r\n if (this.loaded)\r\n {\r\n return;\r\n }\r\n\r\n this.loaded = true;\r\n\r\n this.loader.nextFile(this, true);\r\n },\r\n\r\n /**\r\n * Called if the file errors while loading.\r\n *\r\n * @method Phaser.Loader.FileTypes.HTML5AudioFile#onError\r\n * @since 3.0.0\r\n */\r\n onError: function ()\r\n {\r\n for (var i = 0; i < this.data.length; i++)\r\n {\r\n var audio = this.data[i];\r\n\r\n audio.oncanplaythrough = null;\r\n audio.onerror = null;\r\n }\r\n\r\n this.loader.nextFile(this, false);\r\n },\r\n\r\n /**\r\n * Called during the file load progress. Is sent a DOM ProgressEvent.\r\n *\r\n * @method Phaser.Loader.FileTypes.HTML5AudioFile#onProgress\r\n * @fires Phaser.Loader.Events#FILE_PROGRESS\r\n * @since 3.0.0\r\n */\r\n onProgress: function (event)\r\n {\r\n var audio = event.target;\r\n\r\n audio.oncanplaythrough = null;\r\n audio.onerror = null;\r\n\r\n this.filesLoaded++;\r\n\r\n this.percentComplete = Math.min((this.filesLoaded / this.filesTotal), 1);\r\n\r\n this.loader.emit(Events.FILE_PROGRESS, this, this.percentComplete);\r\n\r\n if (this.filesLoaded === this.filesTotal)\r\n {\r\n this.onLoad();\r\n }\r\n },\r\n\r\n /**\r\n * Called by the Loader, starts the actual file downloading.\r\n * During the load the methods onLoad, onError and onProgress are called, based on the XHR events.\r\n * You shouldn't normally call this method directly, it's meant to be invoked by the Loader.\r\n *\r\n * @method Phaser.Loader.FileTypes.HTML5AudioFile#load\r\n * @since 3.0.0\r\n */\r\n load: function ()\r\n {\r\n this.data = [];\r\n\r\n var instances = (this.config && this.config.instances) || 1;\r\n\r\n this.filesTotal = instances;\r\n this.filesLoaded = 0;\r\n this.percentComplete = 0;\r\n\r\n for (var i = 0; i < instances; i++)\r\n {\r\n var audio = new Audio();\r\n audio.dataset = {};\r\n audio.dataset.name = this.key + ('0' + i).slice(-2);\r\n audio.dataset.used = 'false';\r\n\r\n if (this.locked)\r\n {\r\n audio.dataset.locked = 'true';\r\n }\r\n else\r\n {\r\n audio.dataset.locked = 'false';\r\n\r\n audio.preload = 'auto';\r\n audio.oncanplaythrough = this.onProgress.bind(this);\r\n audio.onerror = this.onError.bind(this);\r\n }\r\n\r\n this.data.push(audio);\r\n }\r\n\r\n for (i = 0; i < this.data.length; i++)\r\n {\r\n audio = this.data[i];\r\n audio.src = GetURL(this, this.loader.baseURL);\r\n\r\n if (!this.locked)\r\n {\r\n audio.load();\r\n }\r\n }\r\n\r\n if (this.locked)\r\n {\r\n // This is super-dangerous but works. Race condition potential high.\r\n // Is there another way?\r\n setTimeout(this.onLoad.bind(this));\r\n }\r\n }\r\n\r\n});\r\n\r\nmodule.exports = HTML5AudioFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0hUTUw1QXVkaW9GaWxlLmpzPzMzZTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsYUFBYSxtQkFBTyxDQUFDLG1FQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyx5REFBUztBQUM1QixtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDNUQsYUFBYSxtQkFBTyxDQUFDLDZEQUFXO0FBQ2hDLG9CQUFvQixtQkFBTyxDQUFDLGlHQUFrQzs7QUFFOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcsdURBQXVEO0FBQ2xFLFdBQVcsT0FBTztBQUNsQixXQUFXLHNDQUFzQztBQUNqRDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGVBQWU7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQixzQkFBc0I7QUFDekM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9maWxldHlwZXMvSFRNTDVBdWRpb0ZpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBFdmVudHMgPSByZXF1aXJlKCcuLi9ldmVudHMnKTtcclxudmFyIEZpbGUgPSByZXF1aXJlKCcuLi9GaWxlJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBHZXRVUkwgPSByZXF1aXJlKCcuLi9HZXRVUkwnKTtcclxudmFyIElzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvSXNQbGFpbk9iamVjdCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBzaW5nbGUgQXVkaW8gRmlsZSBzdWl0YWJsZSBmb3IgbG9hZGluZyBieSB0aGUgTG9hZGVyLlxyXG4gKlxyXG4gKiBUaGVzZSBhcmUgY3JlYXRlZCB3aGVuIHlvdSB1c2UgdGhlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2F1ZGlvIG1ldGhvZCBhbmQgYXJlIG5vdCB0eXBpY2FsbHkgY3JlYXRlZCBkaXJlY3RseS5cclxuICogXHJcbiAqIEZvciBkb2N1bWVudGF0aW9uIGFib3V0IHdoYXQgYWxsIHRoZSBhcmd1bWVudHMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtZWFuIHBsZWFzZSBzZWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYXVkaW8uXHJcbiAqXHJcbiAqIEBjbGFzcyBIVE1MNUF1ZGlvRmlsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLkZpbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gbG9hZGVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIExvYWRlciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIGZpbGUuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5BdWRpb0ZpbGVDb25maWcpfSBrZXkgLSBUaGUga2V5IHRvIHVzZSBmb3IgdGhpcyBmaWxlLCBvciBhIGZpbGUgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdXJsQ29uZmlnXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGlzIGZpbGUgZnJvbS5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbeGhyU2V0dGluZ3NdIC0gRXh0cmEgWEhSIFNldHRpbmdzIHNwZWNpZmljYWxseSBmb3IgdGhpcyBmaWxlLlxyXG4gKi9cclxudmFyIEhUTUw1QXVkaW9GaWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBGaWxlLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gSFRNTDVBdWRpb0ZpbGUgKGxvYWRlciwga2V5LCB1cmxDb25maWcsIGF1ZGlvQ29uZmlnKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChJc1BsYWluT2JqZWN0KGtleSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY29uZmlnID0ga2V5O1xyXG5cclxuICAgICAgICAgICAga2V5ID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2tleScpO1xyXG4gICAgICAgICAgICBhdWRpb0NvbmZpZyA9IEdldEZhc3RWYWx1ZShjb25maWcsICdjb25maWcnLCBhdWRpb0NvbmZpZyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZmlsZUNvbmZpZyA9IHtcclxuICAgICAgICAgICAgdHlwZTogJ2F1ZGlvJyxcclxuICAgICAgICAgICAgY2FjaGU6IGxvYWRlci5jYWNoZU1hbmFnZXIuYXVkaW8sXHJcbiAgICAgICAgICAgIGV4dGVuc2lvbjogdXJsQ29uZmlnLnR5cGUsXHJcbiAgICAgICAgICAgIGtleToga2V5LFxyXG4gICAgICAgICAgICB1cmw6IHVybENvbmZpZy51cmwsXHJcbiAgICAgICAgICAgIGNvbmZpZzogYXVkaW9Db25maWdcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBGaWxlLmNhbGwodGhpcywgbG9hZGVyLCBmaWxlQ29uZmlnKTtcclxuXHJcbiAgICAgICAgLy8gIE5ldyBwcm9wZXJ0aWVzIHNwZWNpZmljIHRvIHRoaXMgY2xhc3NcclxuICAgICAgICB0aGlzLmxvY2tlZCA9ICdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdztcclxuICAgICAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmlsZXNMb2FkZWQgPSAwO1xyXG4gICAgICAgIHRoaXMuZmlsZXNUb3RhbCA9IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIGZpbGUgZmluaXNoZXMgbG9hZGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLkhUTUw1QXVkaW9GaWxlI29uTG9hZFxyXG4gICAgICogQHNpbmNlIDMuMC4wXHJcbiAgICAgKi9cclxuICAgIG9uTG9hZDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5sb2FkZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZGVyLm5leHRGaWxlKHRoaXMsIHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBpZiB0aGUgZmlsZSBlcnJvcnMgd2hpbGUgbG9hZGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLkhUTUw1QXVkaW9GaWxlI29uRXJyb3JcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBvbkVycm9yOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGF1ZGlvID0gdGhpcy5kYXRhW2ldO1xyXG5cclxuICAgICAgICAgICAgYXVkaW8ub25jYW5wbGF5dGhyb3VnaCA9IG51bGw7XHJcbiAgICAgICAgICAgIGF1ZGlvLm9uZXJyb3IgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sb2FkZXIubmV4dEZpbGUodGhpcywgZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBkdXJpbmcgdGhlIGZpbGUgbG9hZCBwcm9ncmVzcy4gSXMgc2VudCBhIERPTSBQcm9ncmVzc0V2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuSFRNTDVBdWRpb0ZpbGUjb25Qcm9ncmVzc1xyXG4gICAgICogQGZpcmVzIFBoYXNlci5Mb2FkZXIuRXZlbnRzI0ZJTEVfUFJPR1JFU1NcclxuICAgICAqIEBzaW5jZSAzLjAuMFxyXG4gICAgICovXHJcbiAgICBvblByb2dyZXNzOiBmdW5jdGlvbiAoZXZlbnQpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGF1ZGlvID0gZXZlbnQudGFyZ2V0O1xyXG5cclxuICAgICAgICBhdWRpby5vbmNhbnBsYXl0aHJvdWdoID0gbnVsbDtcclxuICAgICAgICBhdWRpby5vbmVycm9yID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5maWxlc0xvYWRlZCsrO1xyXG5cclxuICAgICAgICB0aGlzLnBlcmNlbnRDb21wbGV0ZSA9IE1hdGgubWluKCh0aGlzLmZpbGVzTG9hZGVkIC8gdGhpcy5maWxlc1RvdGFsKSwgMSk7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZGVyLmVtaXQoRXZlbnRzLkZJTEVfUFJPR1JFU1MsIHRoaXMsIHRoaXMucGVyY2VudENvbXBsZXRlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZXNMb2FkZWQgPT09IHRoaXMuZmlsZXNUb3RhbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMub25Mb2FkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBieSB0aGUgTG9hZGVyLCBzdGFydHMgdGhlIGFjdHVhbCBmaWxlIGRvd25sb2FkaW5nLlxyXG4gICAgICogRHVyaW5nIHRoZSBsb2FkIHRoZSBtZXRob2RzIG9uTG9hZCwgb25FcnJvciBhbmQgb25Qcm9ncmVzcyBhcmUgY2FsbGVkLCBiYXNlZCBvbiB0aGUgWEhSIGV2ZW50cy5cclxuICAgICAqIFlvdSBzaG91bGRuJ3Qgbm9ybWFsbHkgY2FsbCB0aGlzIG1ldGhvZCBkaXJlY3RseSwgaXQncyBtZWFudCB0byBiZSBpbnZva2VkIGJ5IHRoZSBMb2FkZXIuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5IVE1MNUF1ZGlvRmlsZSNsb2FkXHJcbiAgICAgKiBAc2luY2UgMy4wLjBcclxuICAgICAqL1xyXG4gICAgbG9hZDogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBbXTtcclxuXHJcbiAgICAgICAgdmFyIGluc3RhbmNlcyA9ICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5pbnN0YW5jZXMpIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMuZmlsZXNUb3RhbCA9IGluc3RhbmNlcztcclxuICAgICAgICB0aGlzLmZpbGVzTG9hZGVkID0gMDtcclxuICAgICAgICB0aGlzLnBlcmNlbnRDb21wbGV0ZSA9IDA7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5zdGFuY2VzOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgYXVkaW8gPSBuZXcgQXVkaW8oKTtcclxuICAgICAgICAgICAgYXVkaW8uZGF0YXNldCA9IHt9O1xyXG4gICAgICAgICAgICBhdWRpby5kYXRhc2V0Lm5hbWUgPSB0aGlzLmtleSArICgnMCcgKyBpKS5zbGljZSgtMik7XHJcbiAgICAgICAgICAgIGF1ZGlvLmRhdGFzZXQudXNlZCA9ICdmYWxzZSc7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5sb2NrZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGF1ZGlvLmRhdGFzZXQubG9ja2VkID0gJ3RydWUnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYXVkaW8uZGF0YXNldC5sb2NrZWQgPSAnZmFsc2UnO1xyXG5cclxuICAgICAgICAgICAgICAgIGF1ZGlvLnByZWxvYWQgPSAnYXV0byc7XHJcbiAgICAgICAgICAgICAgICBhdWRpby5vbmNhbnBsYXl0aHJvdWdoID0gdGhpcy5vblByb2dyZXNzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgICAgICBhdWRpby5vbmVycm9yID0gdGhpcy5vbkVycm9yLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YS5wdXNoKGF1ZGlvKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBhdWRpbyA9IHRoaXMuZGF0YVtpXTtcclxuICAgICAgICAgICAgYXVkaW8uc3JjID0gR2V0VVJMKHRoaXMsIHRoaXMubG9hZGVyLmJhc2VVUkwpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmxvY2tlZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgYXVkaW8ubG9hZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5sb2NrZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgVGhpcyBpcyBzdXBlci1kYW5nZXJvdXMgYnV0IHdvcmtzLiBSYWNlIGNvbmRpdGlvbiBwb3RlbnRpYWwgaGlnaC5cclxuICAgICAgICAgICAgLy8gIElzIHRoZXJlIGFub3RoZXIgd2F5P1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHRoaXMub25Mb2FkLmJpbmQodGhpcykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBIVE1MNUF1ZGlvRmlsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/HTML5AudioFile.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/filetypes/HTMLFile.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/loader/filetypes/HTMLFile.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single HTML File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#html method and are not typically created directly.\r\n *\r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#html.\r\n *\r\n * @class HTMLFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.12.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.HTMLFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.txt`, i.e. if `key` was \"alien\" then the URL will be \"alien.html\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n */\r\nvar HTMLFile = new Class({\r\n\r\n Extends: File,\r\n\r\n initialize:\r\n\r\n function HTMLFile (loader, key, url, xhrSettings)\r\n {\r\n var extension = 'html';\r\n\r\n if (IsPlainObject(key))\r\n {\r\n var config = key;\r\n\r\n key = GetFastValue(config, 'key');\r\n url = GetFastValue(config, 'url');\r\n xhrSettings = GetFastValue(config, 'xhrSettings');\r\n extension = GetFastValue(config, 'extension', extension);\r\n }\r\n\r\n var fileConfig = {\r\n type: 'text',\r\n cache: loader.cacheManager.html,\r\n extension: extension,\r\n responseType: 'text',\r\n key: key,\r\n url: url,\r\n xhrSettings: xhrSettings\r\n };\r\n\r\n File.call(this, loader, fileConfig);\r\n },\r\n\r\n /**\r\n * Called automatically by Loader.nextFile.\r\n * This method controls what extra work this File does with its loaded data.\r\n *\r\n * @method Phaser.Loader.FileTypes.HTMLFile#onProcess\r\n * @since 3.7.0\r\n */\r\n onProcess: function ()\r\n {\r\n this.state = CONST.FILE_PROCESSING;\r\n\r\n this.data = this.xhrLoader.responseText;\r\n\r\n this.onProcessComplete();\r\n }\r\n\r\n});\r\n\r\n/**\r\n * Adds an HTML file, or array of HTML files, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n *\r\n * ```javascript\r\n * function preload ()\r\n * {\r\n * this.load.html('story', 'files/LoginForm.html');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n *\r\n * The key must be a unique String. It is used to add the file to the global HTML Cache upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the HTML Cache.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the HTML Cache first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n *\r\n * ```javascript\r\n * this.load.html({\r\n * key: 'login',\r\n * url: 'files/LoginForm.html'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.HTMLFileConfig` for more details.\r\n *\r\n * Once the file has finished loading you can access it from its Cache using its key:\r\n *\r\n * ```javascript\r\n * this.load.html('login', 'files/LoginForm.html');\r\n * // and later in your game ...\r\n * var data = this.cache.html.get('login');\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `LEVEL1.` and the key was `Story` the final key will be `LEVEL1.Story` and\r\n * this is what you would use to retrieve the html from the HTML Cache.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"story\"\r\n * and no URL is given then the Loader will set the URL to be \"story.html\". It will always add `.html` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Note: The ability to load this type of file will only be available if the HTML File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#html\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.12.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.HTMLFileConfig|Phaser.Types.Loader.FileTypes.HTMLFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.html`, i.e. if `key` was \"alien\" then the URL will be \"alien.html\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('html', function (key, url, xhrSettings)\r\n{\r\n if (Array.isArray(key))\r\n {\r\n for (var i = 0; i < key.length; i++)\r\n {\r\n // If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n this.addFile(new HTMLFile(this, key[i]));\r\n }\r\n }\r\n else\r\n {\r\n this.addFile(new HTMLFile(this, key, url, xhrSettings));\r\n }\r\n\r\n return this;\r\n});\r\n\r\nmodule.exports = HTMLFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0hUTUxGaWxlLmpzP2EwNjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsWUFBWSxtQkFBTyxDQUFDLDJEQUFVO0FBQzlCLFdBQVcsbUJBQU8sQ0FBQyx5REFBUztBQUM1Qix1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBcUI7QUFDcEQsbUJBQW1CLG1CQUFPLENBQUMsK0ZBQWlDO0FBQzVELG9CQUFvQixtQkFBTyxDQUFDLGlHQUFrQzs7QUFFOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcsc0RBQXNEO0FBQ2pFLFdBQVcsT0FBTztBQUNsQixXQUFXLHNDQUFzQztBQUNqRDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxR0FBcUc7QUFDaEgsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9maWxldHlwZXMvSFRNTEZpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XHJcbnZhciBGaWxlID0gcmVxdWlyZSgnLi4vRmlsZScpO1xyXG52YXIgRmlsZVR5cGVzTWFuYWdlciA9IHJlcXVpcmUoJy4uL0ZpbGVUeXBlc01hbmFnZXInKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIElzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvSXNQbGFpbk9iamVjdCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBzaW5nbGUgSFRNTCBGaWxlIHN1aXRhYmxlIGZvciBsb2FkaW5nIGJ5IHRoZSBMb2FkZXIuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSBjcmVhdGVkIHdoZW4geW91IHVzZSB0aGUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jaHRtbCBtZXRob2QgYW5kIGFyZSBub3QgdHlwaWNhbGx5IGNyZWF0ZWQgZGlyZWN0bHkuXHJcbiAqXHJcbiAqIEZvciBkb2N1bWVudGF0aW9uIGFib3V0IHdoYXQgYWxsIHRoZSBhcmd1bWVudHMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtZWFuIHBsZWFzZSBzZWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jaHRtbC5cclxuICpcclxuICogQGNsYXNzIEhUTUxGaWxlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5Mb2FkZXIuRmlsZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjEyLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gbG9hZGVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIExvYWRlciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIGZpbGUuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5IVE1MRmlsZUNvbmZpZyl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi50eHRgLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5odG1sXCIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEV4dHJhIFhIUiBTZXR0aW5ncyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgZmlsZS5cclxuICovXHJcbnZhciBIVE1MRmlsZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogRmlsZSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIEhUTUxGaWxlIChsb2FkZXIsIGtleSwgdXJsLCB4aHJTZXR0aW5ncylcclxuICAgIHtcclxuICAgICAgICB2YXIgZXh0ZW5zaW9uID0gJ2h0bWwnO1xyXG5cclxuICAgICAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGtleTtcclxuXHJcbiAgICAgICAgICAgIGtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdrZXknKTtcclxuICAgICAgICAgICAgdXJsID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3VybCcpO1xyXG4gICAgICAgICAgICB4aHJTZXR0aW5ncyA9IEdldEZhc3RWYWx1ZShjb25maWcsICd4aHJTZXR0aW5ncycpO1xyXG4gICAgICAgICAgICBleHRlbnNpb24gPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZXh0ZW5zaW9uJywgZXh0ZW5zaW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBmaWxlQ29uZmlnID0ge1xyXG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXHJcbiAgICAgICAgICAgIGNhY2hlOiBsb2FkZXIuY2FjaGVNYW5hZ2VyLmh0bWwsXHJcbiAgICAgICAgICAgIGV4dGVuc2lvbjogZXh0ZW5zaW9uLFxyXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyxcclxuICAgICAgICAgICAga2V5OiBrZXksXHJcbiAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICB4aHJTZXR0aW5nczogeGhyU2V0dGluZ3NcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBGaWxlLmNhbGwodGhpcywgbG9hZGVyLCBmaWxlQ29uZmlnKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSBMb2FkZXIubmV4dEZpbGUuXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBjb250cm9scyB3aGF0IGV4dHJhIHdvcmsgdGhpcyBGaWxlIGRvZXMgd2l0aCBpdHMgbG9hZGVkIGRhdGEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5IVE1MRmlsZSNvblByb2Nlc3NcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBvblByb2Nlc3M6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTlNULkZJTEVfUFJPQ0VTU0lORztcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy54aHJMb2FkZXIucmVzcG9uc2VUZXh0O1xyXG5cclxuICAgICAgICB0aGlzLm9uUHJvY2Vzc0NvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIGFuIEhUTUwgZmlsZSwgb3IgYXJyYXkgb2YgSFRNTCBmaWxlcywgdG8gdGhlIGN1cnJlbnQgbG9hZCBxdWV1ZS5cclxuICpcclxuICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIGZyb20gd2l0aGluIHlvdXIgU2NlbmUncyBgcHJlbG9hZGAsIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGVzIHlvdSB3aXNoIHRvIGxvYWQ6XHJcbiAqXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogZnVuY3Rpb24gcHJlbG9hZCAoKVxyXG4gKiB7XHJcbiAqICAgICB0aGlzLmxvYWQuaHRtbCgnc3RvcnknLCAnZmlsZXMvTG9naW5Gb3JtLmh0bWwnKTtcclxuICogfVxyXG4gKiBgYGBcclxuICpcclxuICogVGhlIGZpbGUgaXMgKipub3QqKiBsb2FkZWQgcmlnaHQgYXdheS4gSXQgaXMgYWRkZWQgdG8gYSBxdWV1ZSByZWFkeSB0byBiZSBsb2FkZWQgZWl0aGVyIHdoZW4gdGhlIGxvYWRlciBzdGFydHMsXHJcbiAqIG9yIGlmIGl0J3MgYWxyZWFkeSBydW5uaW5nLCB3aGVuIHRoZSBuZXh0IGZyZWUgbG9hZCBzbG90IGJlY29tZXMgYXZhaWxhYmxlLiBUaGlzIGhhcHBlbnMgYXV0b21hdGljYWxseSBpZiB5b3VcclxuICogYXJlIGNhbGxpbmcgdGhpcyBmcm9tIHdpdGhpbiB0aGUgU2NlbmUncyBgcHJlbG9hZGAgbWV0aG9kLCBvciBhIHJlbGF0ZWQgY2FsbGJhY2suIEJlY2F1c2UgdGhlIGZpbGUgaXMgcXVldWVkXHJcbiAqIGl0IG1lYW5zIHlvdSBjYW5ub3QgdXNlIHRoZSBmaWxlIGltbWVkaWF0ZWx5IGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QsIGJ1dCBtdXN0IHdhaXQgZm9yIHRoZSBmaWxlIHRvIGNvbXBsZXRlLlxyXG4gKiBUaGUgdHlwaWNhbCBmbG93IGZvciBhIFBoYXNlciBTY2VuZSBpcyB0aGF0IHlvdSBsb2FkIGFzc2V0cyBpbiB0aGUgU2NlbmUncyBgcHJlbG9hZGAgbWV0aG9kIGFuZCB0aGVuIHdoZW4gdGhlXHJcbiAqIFNjZW5lJ3MgYGNyZWF0ZWAgbWV0aG9kIGlzIGNhbGxlZCB5b3UgYXJlIGd1YXJhbnRlZWQgdGhhdCBhbGwgb2YgdGhvc2UgYXNzZXRzIGFyZSByZWFkeSBmb3IgdXNlIGFuZCBoYXZlIGJlZW5cclxuICogbG9hZGVkLlxyXG4gKlxyXG4gKiBUaGUga2V5IG11c3QgYmUgYSB1bmlxdWUgU3RyaW5nLiBJdCBpcyB1c2VkIHRvIGFkZCB0aGUgZmlsZSB0byB0aGUgZ2xvYmFsIEhUTUwgQ2FjaGUgdXBvbiBhIHN1Y2Nlc3NmdWwgbG9hZC5cclxuICogVGhlIGtleSBzaG91bGQgYmUgdW5pcXVlIGJvdGggaW4gdGVybXMgb2YgZmlsZXMgYmVpbmcgbG9hZGVkIGFuZCBmaWxlcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIEhUTUwgQ2FjaGUuXHJcbiAqIExvYWRpbmcgYSBmaWxlIHVzaW5nIGEga2V5IHRoYXQgaXMgYWxyZWFkeSB0YWtlbiB3aWxsIHJlc3VsdCBpbiBhIHdhcm5pbmcuIElmIHlvdSB3aXNoIHRvIHJlcGxhY2UgYW4gZXhpc3RpbmcgZmlsZVxyXG4gKiB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBIVE1MIENhY2hlIGZpcnN0LCBiZWZvcmUgbG9hZGluZyBhIG5ldyBvbmUuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhcmd1bWVudHMgeW91IGNhbiBwYXNzIGEgY29uZmlndXJhdGlvbiBvYmplY3QsIHN1Y2ggYXM6XHJcbiAqXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmh0bWwoe1xyXG4gKiAgICAga2V5OiAnbG9naW4nLFxyXG4gKiAgICAgdXJsOiAnZmlsZXMvTG9naW5Gb3JtLmh0bWwnXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgUGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuSFRNTEZpbGVDb25maWdgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIE9uY2UgdGhlIGZpbGUgaGFzIGZpbmlzaGVkIGxvYWRpbmcgeW91IGNhbiBhY2Nlc3MgaXQgZnJvbSBpdHMgQ2FjaGUgdXNpbmcgaXRzIGtleTpcclxuICpcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQuaHRtbCgnbG9naW4nLCAnZmlsZXMvTG9naW5Gb3JtLmh0bWwnKTtcclxuICogLy8gYW5kIGxhdGVyIGluIHlvdXIgZ2FtZSAuLi5cclxuICogdmFyIGRhdGEgPSB0aGlzLmNhY2hlLmh0bWwuZ2V0KCdsb2dpbicpO1xyXG4gKiBgYGBcclxuICpcclxuICogSWYgeW91IGhhdmUgc3BlY2lmaWVkIGEgcHJlZml4IGluIHRoZSBsb2FkZXIsIHZpYSBgTG9hZGVyLnNldFByZWZpeGAgdGhlbiB0aGlzIHZhbHVlIHdpbGwgYmUgcHJlcGVuZGVkIHRvIHRoaXMgZmlsZXNcclxuICoga2V5LiBGb3IgZXhhbXBsZSwgaWYgdGhlIHByZWZpeCB3YXMgYExFVkVMMS5gIGFuZCB0aGUga2V5IHdhcyBgU3RvcnlgIHRoZSBmaW5hbCBrZXkgd2lsbCBiZSBgTEVWRUwxLlN0b3J5YCBhbmRcclxuICogdGhpcyBpcyB3aGF0IHlvdSB3b3VsZCB1c2UgdG8gcmV0cmlldmUgdGhlIGh0bWwgZnJvbSB0aGUgSFRNTCBDYWNoZS5cclxuICpcclxuICogVGhlIFVSTCBjYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUuIElmIHRoZSBVUkwgaXMgcmVsYXRpdmUgdGhlIGBMb2FkZXIuYmFzZVVSTGAgYW5kIGBMb2FkZXIucGF0aGAgdmFsdWVzIHdpbGwgYmUgcHJlcGVuZGVkIHRvIGl0LlxyXG4gKlxyXG4gKiBJZiB0aGUgVVJMIGlzbid0IHNwZWNpZmllZCB0aGUgTG9hZGVyIHdpbGwgdGFrZSB0aGUga2V5IGFuZCBjcmVhdGUgYSBmaWxlbmFtZSBmcm9tIHRoYXQuIEZvciBleGFtcGxlIGlmIHRoZSBrZXkgaXMgXCJzdG9yeVwiXHJcbiAqIGFuZCBubyBVUkwgaXMgZ2l2ZW4gdGhlbiB0aGUgTG9hZGVyIHdpbGwgc2V0IHRoZSBVUkwgdG8gYmUgXCJzdG9yeS5odG1sXCIuIEl0IHdpbGwgYWx3YXlzIGFkZCBgLmh0bWxgIGFzIHRoZSBleHRlbnNpb24sIGFsdGhvdWdoXHJcbiAqIHRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gaWYgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgbWV0aG9kIGFyZ3VtZW50cy4gSWYgeW91IGRvIG5vdCBkZXNpcmUgdGhpcyBhY3Rpb24gdGhlbiBwcm92aWRlIGEgVVJMLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGUgYWJpbGl0eSB0byBsb2FkIHRoaXMgdHlwZSBvZiBmaWxlIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIEhUTUwgRmlsZSB0eXBlIGhhcyBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLlxyXG4gKiBJdCBpcyBhdmFpbGFibGUgaW4gdGhlIGRlZmF1bHQgYnVpbGQgYnV0IGNhbiBiZSBleGNsdWRlZCBmcm9tIGN1c3RvbSBidWlsZHMuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jaHRtbFxyXG4gKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYWRkRmlsZUV2ZW50XHJcbiAqIEBzaW5jZSAzLjEyLjBcclxuICpcclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkhUTUxGaWxlQ29uZmlnfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkhUTUxGaWxlQ29uZmlnW10pfSBrZXkgLSBUaGUga2V5IHRvIHVzZSBmb3IgdGhpcyBmaWxlLCBvciBhIGZpbGUgY29uZmlndXJhdGlvbiBvYmplY3QsIG9yIGFycmF5IG9mIHRoZW0uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdXJsXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGlzIGZpbGUgZnJvbS4gSWYgdW5kZWZpbmVkIG9yIGBudWxsYCBpdCB3aWxsIGJlIHNldCB0byBgPGtleT4uaHRtbGAsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLmh0bWxcIi5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbeGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gVGhlIExvYWRlciBpbnN0YW5jZS5cclxuICovXHJcbkZpbGVUeXBlc01hbmFnZXIucmVnaXN0ZXIoJ2h0bWwnLCBmdW5jdGlvbiAoa2V5LCB1cmwsIHhoclNldHRpbmdzKVxyXG57XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIElmIGl0J3MgYW4gYXJyYXkgaXQgaGFzIHRvIGJlIGFuIGFycmF5IG9mIE9iamVjdHMsIHNvIHdlIGdldCBldmVyeXRoaW5nIG91dCBvZiB0aGUgJ2tleScgb2JqZWN0XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRmlsZShuZXcgSFRNTEZpbGUodGhpcywga2V5W2ldKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYWRkRmlsZShuZXcgSFRNTEZpbGUodGhpcywga2V5LCB1cmwsIHhoclNldHRpbmdzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBIVE1MRmlsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/HTMLFile.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/filetypes/HTMLTextureFile.js":
/*!*********************************************************************!*\
!*** ./node_modules/phaser/src/loader/filetypes/HTMLTextureFile.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single HTML File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#htmlTexture method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#htmlTexture.\r\n *\r\n * @class HTMLTextureFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.12.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.HTMLTextureFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\r\n * @param {integer} [width] - The width of the texture the HTML will be rendered to.\r\n * @param {integer} [height] - The height of the texture the HTML will be rendered to.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n */\r\nvar HTMLTextureFile = new Class({\r\n\r\n Extends: File,\r\n\r\n initialize:\r\n\r\n function HTMLTextureFile (loader, key, url, width, height, xhrSettings)\r\n {\r\n if (width === undefined) { width = 512; }\r\n if (height === undefined) { height = 512; }\r\n\r\n var extension = 'html';\r\n\r\n if (IsPlainObject(key))\r\n {\r\n var config = key;\r\n\r\n key = GetFastValue(config, 'key');\r\n url = GetFastValue(config, 'url');\r\n xhrSettings = GetFastValue(config, 'xhrSettings');\r\n extension = GetFastValue(config, 'extension', extension);\r\n width = GetFastValue(config, 'width', width);\r\n height = GetFastValue(config, 'height', height);\r\n }\r\n\r\n var fileConfig = {\r\n type: 'html',\r\n cache: loader.textureManager,\r\n extension: extension,\r\n responseType: 'text',\r\n key: key,\r\n url: url,\r\n xhrSettings: xhrSettings,\r\n config: {\r\n width: width,\r\n height: height\r\n }\r\n };\r\n\r\n File.call(this, loader, fileConfig);\r\n },\r\n\r\n /**\r\n * Called automatically by Loader.nextFile.\r\n * This method controls what extra work this File does with its loaded data.\r\n *\r\n * @method Phaser.Loader.FileTypes.HTMLTextureFile#onProcess\r\n * @since 3.7.0\r\n */\r\n onProcess: function ()\r\n {\r\n this.state = CONST.FILE_PROCESSING;\r\n\r\n var w = this.config.width;\r\n var h = this.config.height;\r\n\r\n var data = [];\r\n\r\n data.push('<svg width=\"' + w + 'px\" height=\"' + h + 'px\" viewBox=\"0 0 ' + w + ' ' + h + '\" xmlns=\"http://www.w3.org/2000/svg\">');\r\n data.push('<foreignObject width=\"100%\" height=\"100%\">');\r\n data.push('<body xmlns=\"http://www.w3.org/1999/xhtml\">');\r\n data.push(this.xhrLoader.responseText);\r\n data.push('</body>');\r\n data.push('</foreignObject>');\r\n data.push('</svg>');\r\n\r\n var svg = [ data.join('\\n') ];\r\n var _this = this;\r\n\r\n try\r\n {\r\n var blob = new window.Blob(svg, { type: 'image/svg+xml;charset=utf-8' });\r\n }\r\n catch (e)\r\n {\r\n _this.state = CONST.FILE_ERRORED;\r\n\r\n _this.onProcessComplete();\r\n\r\n return;\r\n }\r\n\r\n this.data = new Image();\r\n\r\n this.data.crossOrigin = this.crossOrigin;\r\n\r\n this.data.onload = function ()\r\n {\r\n File.revokeObjectURL(_this.data);\r\n\r\n _this.onProcessComplete();\r\n };\r\n\r\n this.data.onerror = function ()\r\n {\r\n File.revokeObjectURL(_this.data);\r\n\r\n _this.onProcessError();\r\n };\r\n\r\n File.createObjectURL(this.data, blob, 'image/svg+xml');\r\n },\r\n\r\n /**\r\n * Adds this file to its target cache upon successful loading and processing.\r\n *\r\n * @method Phaser.Loader.FileTypes.HTMLTextureFile#addToCache\r\n * @since 3.7.0\r\n */\r\n addToCache: function ()\r\n {\r\n var texture = this.cache.addImage(this.key, this.data);\r\n\r\n this.pendingDestroy(texture);\r\n }\r\n\r\n});\r\n\r\n/**\r\n * Adds an HTML File, or array of HTML Files, to the current load queue. When the files are loaded they\r\n * will be rendered to textures and stored in the Texture Manager.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n * this.load.htmlTexture('instructions', 'content/intro.html', 256, 512);\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n *\r\n * The key must be a unique String. It is used to add the file to the global Texture Manager upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Texture Manager.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Texture Manager first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.htmlTexture({\r\n * key: 'instructions',\r\n * url: 'content/intro.html',\r\n * width: 256,\r\n * height: 512\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.HTMLTextureFileConfig` for more details.\r\n *\r\n * Once the file has finished loading you can use it as a texture for a Game Object by referencing its key:\r\n * \r\n * ```javascript\r\n * this.load.htmlTexture('instructions', 'content/intro.html', 256, 512);\r\n * // and later in your game ...\r\n * this.add.image(x, y, 'instructions');\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `MENU.` and the key was `Background` the final key will be `MENU.Background` and\r\n * this is what you would use to retrieve the image from the Texture Manager.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"alien\"\r\n * and no URL is given then the Loader will set the URL to be \"alien.html\". It will always add `.html` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * The width and height are the size of the texture to which the HTML will be rendered. It's not possible to determine these\r\n * automatically, so you will need to provide them, either as arguments or in the file config object.\r\n * When the HTML file has loaded a new SVG element is created with a size and viewbox set to the width and height given.\r\n * The SVG file has a body tag added to it, with the HTML file contents included. It then calls `window.Blob` on the SVG,\r\n * and if successful is added to the Texture Manager, otherwise it fails processing. The overall quality of the rendered\r\n * HTML depends on your browser, and some of them may not even support the svg / blob process used. Be aware that there are\r\n * limitations on what HTML can be inside an SVG. You can find out more details in this\r\n * [Mozilla MDN entry](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Drawing_DOM_objects_into_a_canvas).\r\n *\r\n * Note: The ability to load this type of file will only be available if the HTMLTextureFile File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#htmlTexture\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.12.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.HTMLTextureFileConfig|Phaser.Types.Loader.FileTypes.HTMLTextureFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.html`, i.e. if `key` was \"alien\" then the URL will be \"alien.html\".\r\n * @param {integer} [width=512] - The width of the texture the HTML will be rendered to.\r\n * @param {integer} [height=512] - The height of the texture the HTML will be rendered to.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('htmlTexture', function (key, url, width, height, xhrSettings)\r\n{\r\n if (Array.isArray(key))\r\n {\r\n for (var i = 0; i < key.length; i++)\r\n {\r\n // If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n this.addFile(new HTMLTextureFile(this, key[i]));\r\n }\r\n }\r\n else\r\n {\r\n this.addFile(new HTMLTextureFile(this, key, url, width, height, xhrSettings));\r\n }\r\n\r\n return this;\r\n});\r\n\r\nmodule.exports = HTMLTextureFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0hUTUxUZXh0dXJlRmlsZS5qcz80OTY4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLFlBQVksbUJBQU8sQ0FBQywyREFBVTtBQUM5QixXQUFXLG1CQUFPLENBQUMseURBQVM7QUFDNUIsdUJBQXVCLG1CQUFPLENBQUMsaUZBQXFCO0FBQ3BELG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCxvQkFBb0IsbUJBQU8sQ0FBQyxpR0FBa0M7O0FBRTlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLDZEQUE2RDtBQUN4RSxXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLHNDQUFzQztBQUNqRDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0MsYUFBYTtBQUMvQyxtQ0FBbUMsY0FBYzs7QUFFakQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZDQUE2QyxzQkFBc0IsZ0JBQWdCO0FBQ25GO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbUhBQW1IO0FBQzlILFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9maWxldHlwZXMvSFRNTFRleHR1cmVGaWxlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xyXG52YXIgRmlsZSA9IHJlcXVpcmUoJy4uL0ZpbGUnKTtcclxudmFyIEZpbGVUeXBlc01hbmFnZXIgPSByZXF1aXJlKCcuLi9GaWxlVHlwZXNNYW5hZ2VyJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBJc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0lzUGxhaW5PYmplY3QnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgc2luZ2xlIEhUTUwgRmlsZSBzdWl0YWJsZSBmb3IgbG9hZGluZyBieSB0aGUgTG9hZGVyLlxyXG4gKlxyXG4gKiBUaGVzZSBhcmUgY3JlYXRlZCB3aGVuIHlvdSB1c2UgdGhlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2h0bWxUZXh0dXJlIG1ldGhvZCBhbmQgYXJlIG5vdCB0eXBpY2FsbHkgY3JlYXRlZCBkaXJlY3RseS5cclxuICogXHJcbiAqIEZvciBkb2N1bWVudGF0aW9uIGFib3V0IHdoYXQgYWxsIHRoZSBhcmd1bWVudHMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtZWFuIHBsZWFzZSBzZWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jaHRtbFRleHR1cmUuXHJcbiAqXHJcbiAqIEBjbGFzcyBIVE1MVGV4dHVyZUZpbGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkxvYWRlci5GaWxlXHJcbiAqIEBtZW1iZXJvZiBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQHNpbmNlIDMuMTIuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgTG9hZGVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkhUTUxUZXh0dXJlRmlsZUNvbmZpZyl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5wbmdgLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5wbmdcIi5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbd2lkdGhdIC0gVGhlIHdpZHRoIG9mIHRoZSB0ZXh0dXJlIHRoZSBIVE1MIHdpbGwgYmUgcmVuZGVyZWQgdG8uXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW2hlaWdodF0gLSBUaGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlIHRoZSBIVE1MIHdpbGwgYmUgcmVuZGVyZWQgdG8uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEV4dHJhIFhIUiBTZXR0aW5ncyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgZmlsZS5cclxuICovXHJcbnZhciBIVE1MVGV4dHVyZUZpbGUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEZpbGUsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBIVE1MVGV4dHVyZUZpbGUgKGxvYWRlciwga2V5LCB1cmwsIHdpZHRoLCBoZWlnaHQsIHhoclNldHRpbmdzKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh3aWR0aCA9PT0gdW5kZWZpbmVkKSB7IHdpZHRoID0gNTEyOyB9XHJcbiAgICAgICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7IGhlaWdodCA9IDUxMjsgfVxyXG5cclxuICAgICAgICB2YXIgZXh0ZW5zaW9uID0gJ2h0bWwnO1xyXG5cclxuICAgICAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGtleTtcclxuXHJcbiAgICAgICAgICAgIGtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdrZXknKTtcclxuICAgICAgICAgICAgdXJsID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3VybCcpO1xyXG4gICAgICAgICAgICB4aHJTZXR0aW5ncyA9IEdldEZhc3RWYWx1ZShjb25maWcsICd4aHJTZXR0aW5ncycpO1xyXG4gICAgICAgICAgICBleHRlbnNpb24gPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZXh0ZW5zaW9uJywgZXh0ZW5zaW9uKTtcclxuICAgICAgICAgICAgd2lkdGggPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnd2lkdGgnLCB3aWR0aCk7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IEdldEZhc3RWYWx1ZShjb25maWcsICdoZWlnaHQnLCBoZWlnaHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGZpbGVDb25maWcgPSB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdodG1sJyxcclxuICAgICAgICAgICAgY2FjaGU6IGxvYWRlci50ZXh0dXJlTWFuYWdlcixcclxuICAgICAgICAgICAgZXh0ZW5zaW9uOiBleHRlbnNpb24sXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxyXG4gICAgICAgICAgICBrZXk6IGtleSxcclxuICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHhoclNldHRpbmdzOiB4aHJTZXR0aW5ncyxcclxuICAgICAgICAgICAgY29uZmlnOiB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgRmlsZS5jYWxsKHRoaXMsIGxvYWRlciwgZmlsZUNvbmZpZyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgTG9hZGVyLm5leHRGaWxlLlxyXG4gICAgICogVGhpcyBtZXRob2QgY29udHJvbHMgd2hhdCBleHRyYSB3b3JrIHRoaXMgRmlsZSBkb2VzIHdpdGggaXRzIGxvYWRlZCBkYXRhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuSFRNTFRleHR1cmVGaWxlI29uUHJvY2Vzc1xyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKi9cclxuICAgIG9uUHJvY2VzczogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09OU1QuRklMRV9QUk9DRVNTSU5HO1xyXG5cclxuICAgICAgICB2YXIgdyA9IHRoaXMuY29uZmlnLndpZHRoO1xyXG4gICAgICAgIHZhciBoID0gdGhpcy5jb25maWcuaGVpZ2h0O1xyXG5cclxuICAgICAgICB2YXIgZGF0YSA9IFtdO1xyXG5cclxuICAgICAgICBkYXRhLnB1c2goJzxzdmcgd2lkdGg9XCInICsgdyArICdweFwiIGhlaWdodD1cIicgKyBoICsgJ3B4XCIgdmlld0JveD1cIjAgMCAnICsgdyArICcgJyArIGggKyAnXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPicpO1xyXG4gICAgICAgIGRhdGEucHVzaCgnPGZvcmVpZ25PYmplY3Qgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPicpO1xyXG4gICAgICAgIGRhdGEucHVzaCgnPGJvZHkgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI+Jyk7XHJcbiAgICAgICAgZGF0YS5wdXNoKHRoaXMueGhyTG9hZGVyLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgZGF0YS5wdXNoKCc8L2JvZHk+Jyk7XHJcbiAgICAgICAgZGF0YS5wdXNoKCc8L2ZvcmVpZ25PYmplY3Q+Jyk7XHJcbiAgICAgICAgZGF0YS5wdXNoKCc8L3N2Zz4nKTtcclxuXHJcbiAgICAgICAgdmFyIHN2ZyA9IFsgZGF0YS5qb2luKCdcXG4nKSBdO1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRyeVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGJsb2IgPSBuZXcgd2luZG93LkJsb2Ioc3ZnLCB7IHR5cGU6ICdpbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgnIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIF90aGlzLnN0YXRlID0gQ09OU1QuRklMRV9FUlJPUkVEO1xyXG5cclxuICAgICAgICAgICAgX3RoaXMub25Qcm9jZXNzQ29tcGxldGUoKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBJbWFnZSgpO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEuY3Jvc3NPcmlnaW4gPSB0aGlzLmNyb3NzT3JpZ2luO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIEZpbGUucmV2b2tlT2JqZWN0VVJMKF90aGlzLmRhdGEpO1xyXG5cclxuICAgICAgICAgICAgX3RoaXMub25Qcm9jZXNzQ29tcGxldGUoKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEub25lcnJvciA9IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBGaWxlLnJldm9rZU9iamVjdFVSTChfdGhpcy5kYXRhKTtcclxuXHJcbiAgICAgICAgICAgIF90aGlzLm9uUHJvY2Vzc0Vycm9yKCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgRmlsZS5jcmVhdGVPYmplY3RVUkwodGhpcy5kYXRhLCBibG9iLCAnaW1hZ2Uvc3ZnK3htbCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgdGhpcyBmaWxlIHRvIGl0cyB0YXJnZXQgY2FjaGUgdXBvbiBzdWNjZXNzZnVsIGxvYWRpbmcgYW5kIHByb2Nlc3NpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5IVE1MVGV4dHVyZUZpbGUjYWRkVG9DYWNoZVxyXG4gICAgICogQHNpbmNlIDMuNy4wXHJcbiAgICAgKi9cclxuICAgIGFkZFRvQ2FjaGU6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLmNhY2hlLmFkZEltYWdlKHRoaXMua2V5LCB0aGlzLmRhdGEpO1xyXG5cclxuICAgICAgICB0aGlzLnBlbmRpbmdEZXN0cm95KHRleHR1cmUpO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG4vKipcclxuICogQWRkcyBhbiBIVE1MIEZpbGUsIG9yIGFycmF5IG9mIEhUTUwgRmlsZXMsIHRvIHRoZSBjdXJyZW50IGxvYWQgcXVldWUuIFdoZW4gdGhlIGZpbGVzIGFyZSBsb2FkZWQgdGhleVxyXG4gKiB3aWxsIGJlIHJlbmRlcmVkIHRvIHRleHR1cmVzIGFuZCBzdG9yZWQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICpcclxuICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIGZyb20gd2l0aGluIHlvdXIgU2NlbmUncyBgcHJlbG9hZGAsIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGVzIHlvdSB3aXNoIHRvIGxvYWQ6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGZ1bmN0aW9uIHByZWxvYWQgKClcclxuICoge1xyXG4gKiAgICAgdGhpcy5sb2FkLmh0bWxUZXh0dXJlKCdpbnN0cnVjdGlvbnMnLCAnY29udGVudC9pbnRyby5odG1sJywgMjU2LCA1MTIpO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgZmlsZSBpcyAqKm5vdCoqIGxvYWRlZCByaWdodCBhd2F5LiBJdCBpcyBhZGRlZCB0byBhIHF1ZXVlIHJlYWR5IHRvIGJlIGxvYWRlZCBlaXRoZXIgd2hlbiB0aGUgbG9hZGVyIHN0YXJ0cyxcclxuICogb3IgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIHdoZW4gdGhlIG5leHQgZnJlZSBsb2FkIHNsb3QgYmVjb21lcyBhdmFpbGFibGUuIFRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGlmIHlvdVxyXG4gKiBhcmUgY2FsbGluZyB0aGlzIGZyb20gd2l0aGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QsIG9yIGEgcmVsYXRlZCBjYWxsYmFjay4gQmVjYXVzZSB0aGUgZmlsZSBpcyBxdWV1ZWRcclxuICogaXQgbWVhbnMgeW91IGNhbm5vdCB1c2UgdGhlIGZpbGUgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgYnV0IG11c3Qgd2FpdCBmb3IgdGhlIGZpbGUgdG8gY29tcGxldGUuXHJcbiAqIFRoZSB0eXBpY2FsIGZsb3cgZm9yIGEgUGhhc2VyIFNjZW5lIGlzIHRoYXQgeW91IGxvYWQgYXNzZXRzIGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QgYW5kIHRoZW4gd2hlbiB0aGVcclxuICogU2NlbmUncyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aG9zZSBhc3NldHMgYXJlIHJlYWR5IGZvciB1c2UgYW5kIGhhdmUgYmVlblxyXG4gKiBsb2FkZWQuXHJcbiAqXHJcbiAqIFRoZSBrZXkgbXVzdCBiZSBhIHVuaXF1ZSBTdHJpbmcuIEl0IGlzIHVzZWQgdG8gYWRkIHRoZSBmaWxlIHRvIHRoZSBnbG9iYWwgVGV4dHVyZSBNYW5hZ2VyIHVwb24gYSBzdWNjZXNzZnVsIGxvYWQuXHJcbiAqIFRoZSBrZXkgc2hvdWxkIGJlIHVuaXF1ZSBib3RoIGluIHRlcm1zIG9mIGZpbGVzIGJlaW5nIGxvYWRlZCBhbmQgZmlsZXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqIExvYWRpbmcgYSBmaWxlIHVzaW5nIGEga2V5IHRoYXQgaXMgYWxyZWFkeSB0YWtlbiB3aWxsIHJlc3VsdCBpbiBhIHdhcm5pbmcuIElmIHlvdSB3aXNoIHRvIHJlcGxhY2UgYW4gZXhpc3RpbmcgZmlsZVxyXG4gKiB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBUZXh0dXJlIE1hbmFnZXIgZmlyc3QsIGJlZm9yZSBsb2FkaW5nIGEgbmV3IG9uZS5cclxuICpcclxuICogSW5zdGVhZCBvZiBwYXNzaW5nIGFyZ3VtZW50cyB5b3UgY2FuIHBhc3MgYSBjb25maWd1cmF0aW9uIG9iamVjdCwgc3VjaCBhczpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmh0bWxUZXh0dXJlKHtcclxuICogICAgIGtleTogJ2luc3RydWN0aW9ucycsXHJcbiAqICAgICB1cmw6ICdjb250ZW50L2ludHJvLmh0bWwnLFxyXG4gKiAgICAgd2lkdGg6IDI1NixcclxuICogICAgIGhlaWdodDogNTEyXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgUGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuSFRNTFRleHR1cmVGaWxlQ29uZmlnYCBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKlxyXG4gKiBPbmNlIHRoZSBmaWxlIGhhcyBmaW5pc2hlZCBsb2FkaW5nIHlvdSBjYW4gdXNlIGl0IGFzIGEgdGV4dHVyZSBmb3IgYSBHYW1lIE9iamVjdCBieSByZWZlcmVuY2luZyBpdHMga2V5OlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQuaHRtbFRleHR1cmUoJ2luc3RydWN0aW9ucycsICdjb250ZW50L2ludHJvLmh0bWwnLCAyNTYsIDUxMik7XHJcbiAqIC8vIGFuZCBsYXRlciBpbiB5b3VyIGdhbWUgLi4uXHJcbiAqIHRoaXMuYWRkLmltYWdlKHgsIHksICdpbnN0cnVjdGlvbnMnKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIElmIHlvdSBoYXZlIHNwZWNpZmllZCBhIHByZWZpeCBpbiB0aGUgbG9hZGVyLCB2aWEgYExvYWRlci5zZXRQcmVmaXhgIHRoZW4gdGhpcyB2YWx1ZSB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGlzIGZpbGVzXHJcbiAqIGtleS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBwcmVmaXggd2FzIGBNRU5VLmAgYW5kIHRoZSBrZXkgd2FzIGBCYWNrZ3JvdW5kYCB0aGUgZmluYWwga2V5IHdpbGwgYmUgYE1FTlUuQmFja2dyb3VuZGAgYW5kXHJcbiAqIHRoaXMgaXMgd2hhdCB5b3Ugd291bGQgdXNlIHRvIHJldHJpZXZlIHRoZSBpbWFnZSBmcm9tIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqXHJcbiAqIFRoZSBVUkwgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlLiBJZiB0aGUgVVJMIGlzIHJlbGF0aXZlIHRoZSBgTG9hZGVyLmJhc2VVUkxgIGFuZCBgTG9hZGVyLnBhdGhgIHZhbHVlcyB3aWxsIGJlIHByZXBlbmRlZCB0byBpdC5cclxuICpcclxuICogSWYgdGhlIFVSTCBpc24ndCBzcGVjaWZpZWQgdGhlIExvYWRlciB3aWxsIHRha2UgdGhlIGtleSBhbmQgY3JlYXRlIGEgZmlsZW5hbWUgZnJvbSB0aGF0LiBGb3IgZXhhbXBsZSBpZiB0aGUga2V5IGlzIFwiYWxpZW5cIlxyXG4gKiBhbmQgbm8gVVJMIGlzIGdpdmVuIHRoZW4gdGhlIExvYWRlciB3aWxsIHNldCB0aGUgVVJMIHRvIGJlIFwiYWxpZW4uaHRtbFwiLiBJdCB3aWxsIGFsd2F5cyBhZGQgYC5odG1sYCBhcyB0aGUgZXh0ZW5zaW9uLCBhbHRob3VnaFxyXG4gKiB0aGlzIGNhbiBiZSBvdmVycmlkZGVuIGlmIHVzaW5nIGFuIG9iamVjdCBpbnN0ZWFkIG9mIG1ldGhvZCBhcmd1bWVudHMuIElmIHlvdSBkbyBub3QgZGVzaXJlIHRoaXMgYWN0aW9uIHRoZW4gcHJvdmlkZSBhIFVSTC5cclxuICpcclxuICogVGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIHRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlIHRvIHdoaWNoIHRoZSBIVE1MIHdpbGwgYmUgcmVuZGVyZWQuIEl0J3Mgbm90IHBvc3NpYmxlIHRvIGRldGVybWluZSB0aGVzZVxyXG4gKiBhdXRvbWF0aWNhbGx5LCBzbyB5b3Ugd2lsbCBuZWVkIHRvIHByb3ZpZGUgdGhlbSwgZWl0aGVyIGFzIGFyZ3VtZW50cyBvciBpbiB0aGUgZmlsZSBjb25maWcgb2JqZWN0LlxyXG4gKiBXaGVuIHRoZSBIVE1MIGZpbGUgaGFzIGxvYWRlZCBhIG5ldyBTVkcgZWxlbWVudCBpcyBjcmVhdGVkIHdpdGggYSBzaXplIGFuZCB2aWV3Ym94IHNldCB0byB0aGUgd2lkdGggYW5kIGhlaWdodCBnaXZlbi5cclxuICogVGhlIFNWRyBmaWxlIGhhcyBhIGJvZHkgdGFnIGFkZGVkIHRvIGl0LCB3aXRoIHRoZSBIVE1MIGZpbGUgY29udGVudHMgaW5jbHVkZWQuIEl0IHRoZW4gY2FsbHMgYHdpbmRvdy5CbG9iYCBvbiB0aGUgU1ZHLFxyXG4gKiBhbmQgaWYgc3VjY2Vzc2Z1bCBpcyBhZGRlZCB0byB0aGUgVGV4dHVyZSBNYW5hZ2VyLCBvdGhlcndpc2UgaXQgZmFpbHMgcHJvY2Vzc2luZy4gVGhlIG92ZXJhbGwgcXVhbGl0eSBvZiB0aGUgcmVuZGVyZWRcclxuICogSFRNTCBkZXBlbmRzIG9uIHlvdXIgYnJvd3NlciwgYW5kIHNvbWUgb2YgdGhlbSBtYXkgbm90IGV2ZW4gc3VwcG9ydCB0aGUgc3ZnIC8gYmxvYiBwcm9jZXNzIHVzZWQuIEJlIGF3YXJlIHRoYXQgdGhlcmUgYXJlXHJcbiAqIGxpbWl0YXRpb25zIG9uIHdoYXQgSFRNTCBjYW4gYmUgaW5zaWRlIGFuIFNWRy4gWW91IGNhbiBmaW5kIG91dCBtb3JlIGRldGFpbHMgaW4gdGhpc1xyXG4gKiBbTW96aWxsYSBNRE4gZW50cnldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9DYW52YXNfQVBJL0RyYXdpbmdfRE9NX29iamVjdHNfaW50b19hX2NhbnZhcykuXHJcbiAqXHJcbiAqIE5vdGU6IFRoZSBhYmlsaXR5IHRvIGxvYWQgdGhpcyB0eXBlIG9mIGZpbGUgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgSFRNTFRleHR1cmVGaWxlIEZpbGUgdHlwZSBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogSXQgaXMgYXZhaWxhYmxlIGluIHRoZSBkZWZhdWx0IGJ1aWxkIGJ1dCBjYW4gYmUgZXhjbHVkZWQgZnJvbSBjdXN0b20gYnVpbGRzLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2h0bWxUZXh0dXJlXHJcbiAqIEBmaXJlcyBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhZGRGaWxlRXZlbnRcclxuICogQHNpbmNlIDMuMTIuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuSFRNTFRleHR1cmVGaWxlQ29uZmlnfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkhUTUxUZXh0dXJlRmlsZUNvbmZpZ1tdKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhcnJheSBvZiB0aGVtLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhpcyBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+Lmh0bWxgLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5odG1sXCIuXHJcbiAqIEBwYXJhbSB7aW50ZWdlcn0gW3dpZHRoPTUxMl0gLSBUaGUgd2lkdGggb2YgdGhlIHRleHR1cmUgdGhlIEhUTUwgd2lsbCBiZSByZW5kZXJlZCB0by5cclxuICogQHBhcmFtIHtpbnRlZ2VyfSBbaGVpZ2h0PTUxMl0gLSBUaGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlIHRoZSBIVE1MIHdpbGwgYmUgcmVuZGVyZWQgdG8uXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEFuIFhIUiBTZXR0aW5ncyBjb25maWd1cmF0aW9uIG9iamVjdC4gVXNlZCBpbiByZXBsYWNlbWVudCBvZiB0aGUgTG9hZGVycyBkZWZhdWx0IFhIUiBTZXR0aW5ncy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IFRoZSBMb2FkZXIgaW5zdGFuY2UuXHJcbiAqL1xyXG5GaWxlVHlwZXNNYW5hZ2VyLnJlZ2lzdGVyKCdodG1sVGV4dHVyZScsIGZ1bmN0aW9uIChrZXksIHVybCwgd2lkdGgsIGhlaWdodCwgeGhyU2V0dGluZ3MpXHJcbntcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXkubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgSWYgaXQncyBhbiBhcnJheSBpdCBoYXMgdG8gYmUgYW4gYXJyYXkgb2YgT2JqZWN0cywgc28gd2UgZ2V0IGV2ZXJ5dGhpbmcgb3V0IG9mIHRoZSAna2V5JyBvYmplY3RcclxuICAgICAgICAgICAgdGhpcy5hZGRGaWxlKG5ldyBIVE1MVGV4dHVyZUZpbGUodGhpcywga2V5W2ldKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYWRkRmlsZShuZXcgSFRNTFRleHR1cmVGaWxlKHRoaXMsIGtleSwgdXJsLCB3aWR0aCwgaGVpZ2h0LCB4aHJTZXR0aW5ncykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSFRNTFRleHR1cmVGaWxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/HTMLTextureFile.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/filetypes/ImageFile.js":
/*!***************************************************************!*\
!*** ./node_modules/phaser/src/loader/filetypes/ImageFile.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Image File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#image method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#image.\r\n *\r\n * @class ImageFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.ImageFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string|string[]} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n * @param {Phaser.Types.Loader.FileTypes.ImageFrameConfig} [frameConfig] - The frame configuration object. Only provided for, and used by, Sprite Sheets.\r\n */\r\nvar ImageFile = new Class({\r\n\r\n Extends: File,\r\n\r\n initialize:\r\n\r\n function ImageFile (loader, key, url, xhrSettings, frameConfig)\r\n {\r\n var extension = 'png';\r\n var normalMapURL;\r\n\r\n if (IsPlainObject(key))\r\n {\r\n var config = key;\r\n\r\n key = GetFastValue(config, 'key');\r\n url = GetFastValue(config, 'url');\r\n normalMapURL = GetFastValue(config, 'normalMap');\r\n xhrSettings = GetFastValue(config, 'xhrSettings');\r\n extension = GetFastValue(config, 'extension', extension);\r\n frameConfig = GetFastValue(config, 'frameConfig');\r\n }\r\n\r\n if (Array.isArray(url))\r\n {\r\n normalMapURL = url[1];\r\n url = url[0];\r\n }\r\n\r\n var fileConfig = {\r\n type: 'image',\r\n cache: loader.textureManager,\r\n extension: extension,\r\n responseType: 'blob',\r\n key: key,\r\n url: url,\r\n xhrSettings: xhrSettings,\r\n config: frameConfig\r\n };\r\n\r\n File.call(this, loader, fileConfig);\r\n\r\n // Do we have a normal map to load as well?\r\n if (normalMapURL)\r\n {\r\n var normalMap = new ImageFile(loader, this.key, normalMapURL, xhrSettings, frameConfig);\r\n\r\n normalMap.type = 'normalMap';\r\n\r\n this.setLink(normalMap);\r\n\r\n loader.addFile(normalMap);\r\n }\r\n },\r\n\r\n /**\r\n * Called automatically by Loader.nextFile.\r\n * This method controls what extra work this File does with its loaded data.\r\n *\r\n * @method Phaser.Loader.FileTypes.ImageFile#onProcess\r\n * @since 3.7.0\r\n */\r\n onProcess: function ()\r\n {\r\n this.state = CONST.FILE_PROCESSING;\r\n\r\n this.data = new Image();\r\n\r\n this.data.crossOrigin = this.crossOrigin;\r\n\r\n var _this = this;\r\n\r\n this.data.onload = function ()\r\n {\r\n File.revokeObjectURL(_this.data);\r\n\r\n _this.onProcessComplete();\r\n };\r\n\r\n this.data.onerror = function ()\r\n {\r\n File.revokeObjectURL(_this.data);\r\n\r\n _this.onProcessError();\r\n };\r\n\r\n File.createObjectURL(this.data, this.xhrLoader.response, 'image/png');\r\n },\r\n\r\n /**\r\n * Adds this file to its target cache upon successful loading and processing.\r\n *\r\n * @method Phaser.Loader.FileTypes.ImageFile#addToCache\r\n * @since 3.7.0\r\n */\r\n addToCache: function ()\r\n {\r\n var texture;\r\n var linkFile = this.linkFile;\r\n\r\n if (linkFile && linkFile.state === CONST.FILE_COMPLETE)\r\n {\r\n if (this.type === 'image')\r\n {\r\n texture = this.cache.addImage(this.key, this.data, linkFile.data);\r\n }\r\n else\r\n {\r\n texture = this.cache.addImage(linkFile.key, linkFile.data, this.data);\r\n }\r\n\r\n this.pendingDestroy(texture);\r\n\r\n linkFile.pendingDestroy(texture);\r\n }\r\n else if (!linkFile)\r\n {\r\n texture = this.cache.addImage(this.key, this.data);\r\n\r\n this.pendingDestroy(texture);\r\n }\r\n }\r\n\r\n});\r\n\r\n/**\r\n * Adds an Image, or array of Images, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n * this.load.image('logo', 'images/phaserLogo.png');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * Phaser can load all common image types: png, jpg, gif and any other format the browser can natively handle.\r\n * If you try to load an animated gif only the first frame will be rendered. Browsers do not natively support playback\r\n * of animated gifs to Canvas elements.\r\n *\r\n * The key must be a unique String. It is used to add the file to the global Texture Manager upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Texture Manager.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Texture Manager first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.image({\r\n * key: 'logo',\r\n * url: 'images/AtariLogo.png'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.ImageFileConfig` for more details.\r\n *\r\n * Once the file has finished loading you can use it as a texture for a Game Object by referencing its key:\r\n * \r\n * ```javascript\r\n * this.load.image('logo', 'images/AtariLogo.png');\r\n * // and later in your game ...\r\n * this.add.image(x, y, 'logo');\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `MENU.` and the key was `Background` the final key will be `MENU.Background` and\r\n * this is what you would use to retrieve the image from the Texture Manager.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"alien\"\r\n * and no URL is given then the Loader will set the URL to be \"alien.png\". It will always add `.png` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Phaser also supports the automatic loading of associated normal maps. If you have a normal map to go with this image,\r\n * then you can specify it by providing an array as the `url` where the second element is the normal map:\r\n * \r\n * ```javascript\r\n * this.load.image('logo', [ 'images/AtariLogo.png', 'images/AtariLogo-n.png' ]);\r\n * ```\r\n *\r\n * Or, if you are using a config object use the `normalMap` property:\r\n * \r\n * ```javascript\r\n * this.load.image({\r\n * key: 'logo',\r\n * url: 'images/AtariLogo.png',\r\n * normalMap: 'images/AtariLogo-n.png'\r\n * });\r\n * ```\r\n *\r\n * The normal map file is subject to the same conditions as the image file with regard to the path, baseURL, CORs and XHR Settings.\r\n * Normal maps are a WebGL only feature.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Image File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#image\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.ImageFileConfig|Phaser.Types.Loader.FileTypes.ImageFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string|string[]} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.png`, i.e. if `key` was \"alien\" then the URL will be \"alien.png\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('image', function (key, url, xhrSettings)\r\n{\r\n if (Array.isArray(key))\r\n {\r\n for (var i = 0; i < key.length; i++)\r\n {\r\n // If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n this.addFile(new ImageFile(this, key[i]));\r\n }\r\n }\r\n else\r\n {\r\n this.addFile(new ImageFile(this, key, url, xhrSettings));\r\n }\r\n\r\n return this;\r\n});\r\n\r\nmodule.exports = ImageFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0ltYWdlRmlsZS5qcz9hYzFmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLFlBQVksbUJBQU8sQ0FBQywyREFBVTtBQUM5QixXQUFXLG1CQUFPLENBQUMseURBQVM7QUFDNUIsdUJBQXVCLG1CQUFPLENBQUMsaUZBQXFCO0FBQ3BELG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCxvQkFBb0IsbUJBQU8sQ0FBQyxpR0FBa0M7O0FBRTlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLHVEQUF1RDtBQUNsRSxXQUFXLGdCQUFnQjtBQUMzQixXQUFXLHNDQUFzQztBQUNqRCxXQUFXLCtDQUErQztBQUMxRDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdUdBQXVHO0FBQ2xILFdBQVcsZ0JBQWdCO0FBQzNCLFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9maWxldHlwZXMvSW1hZ2VGaWxlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xyXG52YXIgRmlsZSA9IHJlcXVpcmUoJy4uL0ZpbGUnKTtcclxudmFyIEZpbGVUeXBlc01hbmFnZXIgPSByZXF1aXJlKCcuLi9GaWxlVHlwZXNNYW5hZ2VyJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBJc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0lzUGxhaW5PYmplY3QnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgc2luZ2xlIEltYWdlIEZpbGUgc3VpdGFibGUgZm9yIGxvYWRpbmcgYnkgdGhlIExvYWRlci5cclxuICpcclxuICogVGhlc2UgYXJlIGNyZWF0ZWQgd2hlbiB5b3UgdXNlIHRoZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNpbWFnZSBtZXRob2QgYW5kIGFyZSBub3QgdHlwaWNhbGx5IGNyZWF0ZWQgZGlyZWN0bHkuXHJcbiAqIFxyXG4gKiBGb3IgZG9jdW1lbnRhdGlvbiBhYm91dCB3aGF0IGFsbCB0aGUgYXJndW1lbnRzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWVhbiBwbGVhc2Ugc2VlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2ltYWdlLlxyXG4gKlxyXG4gKiBAY2xhc3MgSW1hZ2VGaWxlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5Mb2FkZXIuRmlsZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgTG9hZGVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkltYWdlRmlsZUNvbmZpZyl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5wbmdgLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5wbmdcIi5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbeGhyU2V0dGluZ3NdIC0gRXh0cmEgWEhSIFNldHRpbmdzIHNwZWNpZmljYWxseSBmb3IgdGhpcyBmaWxlLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkltYWdlRnJhbWVDb25maWd9IFtmcmFtZUNvbmZpZ10gLSBUaGUgZnJhbWUgY29uZmlndXJhdGlvbiBvYmplY3QuIE9ubHkgcHJvdmlkZWQgZm9yLCBhbmQgdXNlZCBieSwgU3ByaXRlIFNoZWV0cy5cclxuICovXHJcbnZhciBJbWFnZUZpbGUgPSBuZXcgQ2xhc3Moe1xyXG5cclxuICAgIEV4dGVuZHM6IEZpbGUsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBJbWFnZUZpbGUgKGxvYWRlciwga2V5LCB1cmwsIHhoclNldHRpbmdzLCBmcmFtZUNvbmZpZylcclxuICAgIHtcclxuICAgICAgICB2YXIgZXh0ZW5zaW9uID0gJ3BuZyc7XHJcbiAgICAgICAgdmFyIG5vcm1hbE1hcFVSTDtcclxuXHJcbiAgICAgICAgaWYgKElzUGxhaW5PYmplY3Qoa2V5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjb25maWcgPSBrZXk7XHJcblxyXG4gICAgICAgICAgICBrZXkgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAna2V5Jyk7XHJcbiAgICAgICAgICAgIHVybCA9IEdldEZhc3RWYWx1ZShjb25maWcsICd1cmwnKTtcclxuICAgICAgICAgICAgbm9ybWFsTWFwVVJMID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ25vcm1hbE1hcCcpO1xyXG4gICAgICAgICAgICB4aHJTZXR0aW5ncyA9IEdldEZhc3RWYWx1ZShjb25maWcsICd4aHJTZXR0aW5ncycpO1xyXG4gICAgICAgICAgICBleHRlbnNpb24gPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZXh0ZW5zaW9uJywgZXh0ZW5zaW9uKTtcclxuICAgICAgICAgICAgZnJhbWVDb25maWcgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZnJhbWVDb25maWcnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHVybCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBub3JtYWxNYXBVUkwgPSB1cmxbMV07XHJcbiAgICAgICAgICAgIHVybCA9IHVybFswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBmaWxlQ29uZmlnID0ge1xyXG4gICAgICAgICAgICB0eXBlOiAnaW1hZ2UnLFxyXG4gICAgICAgICAgICBjYWNoZTogbG9hZGVyLnRleHR1cmVNYW5hZ2VyLFxyXG4gICAgICAgICAgICBleHRlbnNpb246IGV4dGVuc2lvbixcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYicsXHJcbiAgICAgICAgICAgIGtleToga2V5LFxyXG4gICAgICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICAgICAgeGhyU2V0dGluZ3M6IHhoclNldHRpbmdzLFxyXG4gICAgICAgICAgICBjb25maWc6IGZyYW1lQ29uZmlnXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgRmlsZS5jYWxsKHRoaXMsIGxvYWRlciwgZmlsZUNvbmZpZyk7XHJcblxyXG4gICAgICAgIC8vICBEbyB3ZSBoYXZlIGEgbm9ybWFsIG1hcCB0byBsb2FkIGFzIHdlbGw/XHJcbiAgICAgICAgaWYgKG5vcm1hbE1hcFVSTClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBub3JtYWxNYXAgPSBuZXcgSW1hZ2VGaWxlKGxvYWRlciwgdGhpcy5rZXksIG5vcm1hbE1hcFVSTCwgeGhyU2V0dGluZ3MsIGZyYW1lQ29uZmlnKTtcclxuXHJcbiAgICAgICAgICAgIG5vcm1hbE1hcC50eXBlID0gJ25vcm1hbE1hcCc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldExpbmsobm9ybWFsTWFwKTtcclxuXHJcbiAgICAgICAgICAgIGxvYWRlci5hZGRGaWxlKG5vcm1hbE1hcCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IExvYWRlci5uZXh0RmlsZS5cclxuICAgICAqIFRoaXMgbWV0aG9kIGNvbnRyb2xzIHdoYXQgZXh0cmEgd29yayB0aGlzIEZpbGUgZG9lcyB3aXRoIGl0cyBsb2FkZWQgZGF0YS5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLkltYWdlRmlsZSNvblByb2Nlc3NcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBvblByb2Nlc3M6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTlNULkZJTEVfUFJPQ0VTU0lORztcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47XHJcblxyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YS5vbmxvYWQgPSBmdW5jdGlvbiAoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgRmlsZS5yZXZva2VPYmplY3RVUkwoX3RoaXMuZGF0YSk7XHJcblxyXG4gICAgICAgICAgICBfdGhpcy5vblByb2Nlc3NDb21wbGV0ZSgpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YS5vbmVycm9yID0gZnVuY3Rpb24gKClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIEZpbGUucmV2b2tlT2JqZWN0VVJMKF90aGlzLmRhdGEpO1xyXG5cclxuICAgICAgICAgICAgX3RoaXMub25Qcm9jZXNzRXJyb3IoKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBGaWxlLmNyZWF0ZU9iamVjdFVSTCh0aGlzLmRhdGEsIHRoaXMueGhyTG9hZGVyLnJlc3BvbnNlLCAnaW1hZ2UvcG5nJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyB0aGlzIGZpbGUgdG8gaXRzIHRhcmdldCBjYWNoZSB1cG9uIHN1Y2Nlc3NmdWwgbG9hZGluZyBhbmQgcHJvY2Vzc2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLkltYWdlRmlsZSNhZGRUb0NhY2hlXHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqL1xyXG4gICAgYWRkVG9DYWNoZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgdGV4dHVyZTtcclxuICAgICAgICB2YXIgbGlua0ZpbGUgPSB0aGlzLmxpbmtGaWxlO1xyXG5cclxuICAgICAgICBpZiAobGlua0ZpbGUgJiYgbGlua0ZpbGUuc3RhdGUgPT09IENPTlNULkZJTEVfQ09NUExFVEUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSAnaW1hZ2UnKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGhpcy5jYWNoZS5hZGRJbWFnZSh0aGlzLmtleSwgdGhpcy5kYXRhLCBsaW5rRmlsZS5kYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUgPSB0aGlzLmNhY2hlLmFkZEltYWdlKGxpbmtGaWxlLmtleSwgbGlua0ZpbGUuZGF0YSwgdGhpcy5kYXRhKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nRGVzdHJveSh0ZXh0dXJlKTtcclxuXHJcbiAgICAgICAgICAgIGxpbmtGaWxlLnBlbmRpbmdEZXN0cm95KHRleHR1cmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghbGlua0ZpbGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0ZXh0dXJlID0gdGhpcy5jYWNoZS5hZGRJbWFnZSh0aGlzLmtleSwgdGhpcy5kYXRhKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0Rlc3Ryb3kodGV4dHVyZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG4vKipcclxuICogQWRkcyBhbiBJbWFnZSwgb3IgYXJyYXkgb2YgSW1hZ2VzLCB0byB0aGUgY3VycmVudCBsb2FkIHF1ZXVlLlxyXG4gKlxyXG4gKiBZb3UgY2FuIGNhbGwgdGhpcyBtZXRob2QgZnJvbSB3aXRoaW4geW91ciBTY2VuZSdzIGBwcmVsb2FkYCwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZmlsZXMgeW91IHdpc2ggdG8gbG9hZDpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogZnVuY3Rpb24gcHJlbG9hZCAoKVxyXG4gKiB7XHJcbiAqICAgICB0aGlzLmxvYWQuaW1hZ2UoJ2xvZ28nLCAnaW1hZ2VzL3BoYXNlckxvZ28ucG5nJyk7XHJcbiAqIH1cclxuICogYGBgXHJcbiAqXHJcbiAqIFRoZSBmaWxlIGlzICoqbm90KiogbG9hZGVkIHJpZ2h0IGF3YXkuIEl0IGlzIGFkZGVkIHRvIGEgcXVldWUgcmVhZHkgdG8gYmUgbG9hZGVkIGVpdGhlciB3aGVuIHRoZSBsb2FkZXIgc3RhcnRzLFxyXG4gKiBvciBpZiBpdCdzIGFscmVhZHkgcnVubmluZywgd2hlbiB0aGUgbmV4dCBmcmVlIGxvYWQgc2xvdCBiZWNvbWVzIGF2YWlsYWJsZS4gVGhpcyBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgaWYgeW91XHJcbiAqIGFyZSBjYWxsaW5nIHRoaXMgZnJvbSB3aXRoaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCwgb3IgYSByZWxhdGVkIGNhbGxiYWNrLiBCZWNhdXNlIHRoZSBmaWxlIGlzIHF1ZXVlZFxyXG4gKiBpdCBtZWFucyB5b3UgY2Fubm90IHVzZSB0aGUgZmlsZSBpbW1lZGlhdGVseSBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLCBidXQgbXVzdCB3YWl0IGZvciB0aGUgZmlsZSB0byBjb21wbGV0ZS5cclxuICogVGhlIHR5cGljYWwgZmxvdyBmb3IgYSBQaGFzZXIgU2NlbmUgaXMgdGhhdCB5b3UgbG9hZCBhc3NldHMgaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCBhbmQgdGhlbiB3aGVuIHRoZVxyXG4gKiBTY2VuZSdzIGBjcmVhdGVgIG1ldGhvZCBpcyBjYWxsZWQgeW91IGFyZSBndWFyYW50ZWVkIHRoYXQgYWxsIG9mIHRob3NlIGFzc2V0cyBhcmUgcmVhZHkgZm9yIHVzZSBhbmQgaGF2ZSBiZWVuXHJcbiAqIGxvYWRlZC5cclxuICogXHJcbiAqIFBoYXNlciBjYW4gbG9hZCBhbGwgY29tbW9uIGltYWdlIHR5cGVzOiBwbmcsIGpwZywgZ2lmIGFuZCBhbnkgb3RoZXIgZm9ybWF0IHRoZSBicm93c2VyIGNhbiBuYXRpdmVseSBoYW5kbGUuXHJcbiAqIElmIHlvdSB0cnkgdG8gbG9hZCBhbiBhbmltYXRlZCBnaWYgb25seSB0aGUgZmlyc3QgZnJhbWUgd2lsbCBiZSByZW5kZXJlZC4gQnJvd3NlcnMgZG8gbm90IG5hdGl2ZWx5IHN1cHBvcnQgcGxheWJhY2tcclxuICogb2YgYW5pbWF0ZWQgZ2lmcyB0byBDYW52YXMgZWxlbWVudHMuXHJcbiAqXHJcbiAqIFRoZSBrZXkgbXVzdCBiZSBhIHVuaXF1ZSBTdHJpbmcuIEl0IGlzIHVzZWQgdG8gYWRkIHRoZSBmaWxlIHRvIHRoZSBnbG9iYWwgVGV4dHVyZSBNYW5hZ2VyIHVwb24gYSBzdWNjZXNzZnVsIGxvYWQuXHJcbiAqIFRoZSBrZXkgc2hvdWxkIGJlIHVuaXF1ZSBib3RoIGluIHRlcm1zIG9mIGZpbGVzIGJlaW5nIGxvYWRlZCBhbmQgZmlsZXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqIExvYWRpbmcgYSBmaWxlIHVzaW5nIGEga2V5IHRoYXQgaXMgYWxyZWFkeSB0YWtlbiB3aWxsIHJlc3VsdCBpbiBhIHdhcm5pbmcuIElmIHlvdSB3aXNoIHRvIHJlcGxhY2UgYW4gZXhpc3RpbmcgZmlsZVxyXG4gKiB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBUZXh0dXJlIE1hbmFnZXIgZmlyc3QsIGJlZm9yZSBsb2FkaW5nIGEgbmV3IG9uZS5cclxuICpcclxuICogSW5zdGVhZCBvZiBwYXNzaW5nIGFyZ3VtZW50cyB5b3UgY2FuIHBhc3MgYSBjb25maWd1cmF0aW9uIG9iamVjdCwgc3VjaCBhczpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmltYWdlKHtcclxuICogICAgIGtleTogJ2xvZ28nLFxyXG4gKiAgICAgdXJsOiAnaW1hZ2VzL0F0YXJpTG9nby5wbmcnXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgUGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuSW1hZ2VGaWxlQ29uZmlnYCBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gKlxyXG4gKiBPbmNlIHRoZSBmaWxlIGhhcyBmaW5pc2hlZCBsb2FkaW5nIHlvdSBjYW4gdXNlIGl0IGFzIGEgdGV4dHVyZSBmb3IgYSBHYW1lIE9iamVjdCBieSByZWZlcmVuY2luZyBpdHMga2V5OlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQuaW1hZ2UoJ2xvZ28nLCAnaW1hZ2VzL0F0YXJpTG9nby5wbmcnKTtcclxuICogLy8gYW5kIGxhdGVyIGluIHlvdXIgZ2FtZSAuLi5cclxuICogdGhpcy5hZGQuaW1hZ2UoeCwgeSwgJ2xvZ28nKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIElmIHlvdSBoYXZlIHNwZWNpZmllZCBhIHByZWZpeCBpbiB0aGUgbG9hZGVyLCB2aWEgYExvYWRlci5zZXRQcmVmaXhgIHRoZW4gdGhpcyB2YWx1ZSB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGlzIGZpbGVzXHJcbiAqIGtleS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBwcmVmaXggd2FzIGBNRU5VLmAgYW5kIHRoZSBrZXkgd2FzIGBCYWNrZ3JvdW5kYCB0aGUgZmluYWwga2V5IHdpbGwgYmUgYE1FTlUuQmFja2dyb3VuZGAgYW5kXHJcbiAqIHRoaXMgaXMgd2hhdCB5b3Ugd291bGQgdXNlIHRvIHJldHJpZXZlIHRoZSBpbWFnZSBmcm9tIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqXHJcbiAqIFRoZSBVUkwgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlLiBJZiB0aGUgVVJMIGlzIHJlbGF0aXZlIHRoZSBgTG9hZGVyLmJhc2VVUkxgIGFuZCBgTG9hZGVyLnBhdGhgIHZhbHVlcyB3aWxsIGJlIHByZXBlbmRlZCB0byBpdC5cclxuICpcclxuICogSWYgdGhlIFVSTCBpc24ndCBzcGVjaWZpZWQgdGhlIExvYWRlciB3aWxsIHRha2UgdGhlIGtleSBhbmQgY3JlYXRlIGEgZmlsZW5hbWUgZnJvbSB0aGF0LiBGb3IgZXhhbXBsZSBpZiB0aGUga2V5IGlzIFwiYWxpZW5cIlxyXG4gKiBhbmQgbm8gVVJMIGlzIGdpdmVuIHRoZW4gdGhlIExvYWRlciB3aWxsIHNldCB0aGUgVVJMIHRvIGJlIFwiYWxpZW4ucG5nXCIuIEl0IHdpbGwgYWx3YXlzIGFkZCBgLnBuZ2AgYXMgdGhlIGV4dGVuc2lvbiwgYWx0aG91Z2hcclxuICogdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBpZiB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBtZXRob2QgYXJndW1lbnRzLiBJZiB5b3UgZG8gbm90IGRlc2lyZSB0aGlzIGFjdGlvbiB0aGVuIHByb3ZpZGUgYSBVUkwuXHJcbiAqXHJcbiAqIFBoYXNlciBhbHNvIHN1cHBvcnRzIHRoZSBhdXRvbWF0aWMgbG9hZGluZyBvZiBhc3NvY2lhdGVkIG5vcm1hbCBtYXBzLiBJZiB5b3UgaGF2ZSBhIG5vcm1hbCBtYXAgdG8gZ28gd2l0aCB0aGlzIGltYWdlLFxyXG4gKiB0aGVuIHlvdSBjYW4gc3BlY2lmeSBpdCBieSBwcm92aWRpbmcgYW4gYXJyYXkgYXMgdGhlIGB1cmxgIHdoZXJlIHRoZSBzZWNvbmQgZWxlbWVudCBpcyB0aGUgbm9ybWFsIG1hcDpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmltYWdlKCdsb2dvJywgWyAnaW1hZ2VzL0F0YXJpTG9nby5wbmcnLCAnaW1hZ2VzL0F0YXJpTG9nby1uLnBuZycgXSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBPciwgaWYgeW91IGFyZSB1c2luZyBhIGNvbmZpZyBvYmplY3QgdXNlIHRoZSBgbm9ybWFsTWFwYCBwcm9wZXJ0eTpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLmltYWdlKHtcclxuICogICAgIGtleTogJ2xvZ28nLFxyXG4gKiAgICAgdXJsOiAnaW1hZ2VzL0F0YXJpTG9nby5wbmcnLFxyXG4gKiAgICAgbm9ybWFsTWFwOiAnaW1hZ2VzL0F0YXJpTG9nby1uLnBuZydcclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgbm9ybWFsIG1hcCBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHNhbWUgY29uZGl0aW9ucyBhcyB0aGUgaW1hZ2UgZmlsZSB3aXRoIHJlZ2FyZCB0byB0aGUgcGF0aCwgYmFzZVVSTCwgQ09ScyBhbmQgWEhSIFNldHRpbmdzLlxyXG4gKiBOb3JtYWwgbWFwcyBhcmUgYSBXZWJHTCBvbmx5IGZlYXR1cmUuXHJcbiAqXHJcbiAqIE5vdGU6IFRoZSBhYmlsaXR5IHRvIGxvYWQgdGhpcyB0eXBlIG9mIGZpbGUgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgSW1hZ2UgRmlsZSB0eXBlIGhhcyBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLlxyXG4gKiBJdCBpcyBhdmFpbGFibGUgaW4gdGhlIGRlZmF1bHQgYnVpbGQgYnV0IGNhbiBiZSBleGNsdWRlZCBmcm9tIGN1c3RvbSBidWlsZHMuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jaW1hZ2VcclxuICogQGZpcmVzIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2FkZEZpbGVFdmVudFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkltYWdlRmlsZUNvbmZpZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5JbWFnZUZpbGVDb25maWdbXSl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdCwgb3IgYXJyYXkgb2YgdGhlbS5cclxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5wbmdgLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5wbmdcIi5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbeGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gVGhlIExvYWRlciBpbnN0YW5jZS5cclxuICovXHJcbkZpbGVUeXBlc01hbmFnZXIucmVnaXN0ZXIoJ2ltYWdlJywgZnVuY3Rpb24gKGtleSwgdXJsLCB4aHJTZXR0aW5ncylcclxue1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5KSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBJZiBpdCdzIGFuIGFycmF5IGl0IGhhcyB0byBiZSBhbiBhcnJheSBvZiBPYmplY3RzLCBzbyB3ZSBnZXQgZXZlcnl0aGluZyBvdXQgb2YgdGhlICdrZXknIG9iamVjdFxyXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGUobmV3IEltYWdlRmlsZSh0aGlzLCBrZXlbaV0pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hZGRGaWxlKG5ldyBJbWFnZUZpbGUodGhpcywga2V5LCB1cmwsIHhoclNldHRpbmdzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbWFnZUZpbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/ImageFile.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/filetypes/JSONFile.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/loader/filetypes/JSONFile.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar GetValue = __webpack_require__(/*! ../../utils/object/GetValue */ \"./node_modules/phaser/src/utils/object/GetValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single JSON File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#json method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#json.\r\n *\r\n * @class JSONFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.JSONFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.json`, i.e. if `key` was \"alien\" then the URL will be \"alien.json\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n * @param {string} [dataKey] - When the JSON file loads only this property will be stored in the Cache.\r\n */\r\nvar JSONFile = new Class({\r\n\r\n Extends: File,\r\n\r\n initialize:\r\n\r\n // url can either be a string, in which case it is treated like a proper url, or an object, in which case it is treated as a ready-made JS Object\r\n // dataKey allows you to pluck a specific object out of the JSON and put just that into the cache, rather than the whole thing\r\n\r\n function JSONFile (loader, key, url, xhrSettings, dataKey)\r\n {\r\n var extension = 'json';\r\n\r\n if (IsPlainObject(key))\r\n {\r\n var config = key;\r\n\r\n key = GetFastValue(config, 'key');\r\n url = GetFastValue(config, 'url');\r\n xhrSettings = GetFastValue(config, 'xhrSettings');\r\n extension = GetFastValue(config, 'extension', extension);\r\n dataKey = GetFastValue(config, 'dataKey', dataKey);\r\n }\r\n\r\n var fileConfig = {\r\n type: 'json',\r\n cache: loader.cacheManager.json,\r\n extension: extension,\r\n responseType: 'text',\r\n key: key,\r\n url: url,\r\n xhrSettings: xhrSettings,\r\n config: dataKey\r\n };\r\n\r\n File.call(this, loader, fileConfig);\r\n\r\n if (IsPlainObject(url))\r\n {\r\n // Object provided instead of a URL, so no need to actually load it (populate data with value)\r\n if (dataKey)\r\n {\r\n this.data = GetValue(url, dataKey);\r\n }\r\n else\r\n {\r\n this.data = url;\r\n }\r\n\r\n this.state = CONST.FILE_POPULATED;\r\n }\r\n },\r\n\r\n /**\r\n * Called automatically by Loader.nextFile.\r\n * This method controls what extra work this File does with its loaded data.\r\n *\r\n * @method Phaser.Loader.FileTypes.JSONFile#onProcess\r\n * @since 3.7.0\r\n */\r\n onProcess: function ()\r\n {\r\n if (this.state !== CONST.FILE_POPULATED)\r\n {\r\n this.state = CONST.FILE_PROCESSING;\r\n\r\n var json = JSON.parse(this.xhrLoader.responseText);\r\n\r\n var key = this.config;\r\n\r\n if (typeof key === 'string')\r\n {\r\n this.data = GetValue(json, key, json);\r\n }\r\n else\r\n {\r\n this.data = json;\r\n }\r\n }\r\n\r\n this.onProcessComplete();\r\n }\r\n\r\n});\r\n\r\n/**\r\n * Adds a JSON file, or array of JSON files, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n * this.load.json('wavedata', 'files/AlienWaveData.json');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * The key must be a unique String. It is used to add the file to the global JSON Cache upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the JSON Cache.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the JSON Cache first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.json({\r\n * key: 'wavedata',\r\n * url: 'files/AlienWaveData.json'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.JSONFileConfig` for more details.\r\n *\r\n * Once the file has finished loading you can access it from its Cache using its key:\r\n * \r\n * ```javascript\r\n * this.load.json('wavedata', 'files/AlienWaveData.json');\r\n * // and later in your game ...\r\n * var data = this.cache.json.get('wavedata');\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `LEVEL1.` and the key was `Waves` the final key will be `LEVEL1.Waves` and\r\n * this is what you would use to retrieve the text from the JSON Cache.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"data\"\r\n * and no URL is given then the Loader will set the URL to be \"data.json\". It will always add `.json` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * You can also optionally provide a `dataKey` to use. This allows you to extract only a part of the JSON and store it in the Cache,\r\n * rather than the whole file. For example, if your JSON data had a structure like this:\r\n * \r\n * ```json\r\n * {\r\n * \"level1\": {\r\n * \"baddies\": {\r\n * \"aliens\": {},\r\n * \"boss\": {}\r\n * }\r\n * },\r\n * \"level2\": {},\r\n * \"level3\": {}\r\n * }\r\n * ```\r\n *\r\n * And you only wanted to store the `boss` data in the Cache, then you could pass `level1.baddies.boss`as the `dataKey`.\r\n *\r\n * Note: The ability to load this type of file will only be available if the JSON File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#json\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.JSONFileConfig|Phaser.Types.Loader.FileTypes.JSONFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.json`, i.e. if `key` was \"alien\" then the URL will be \"alien.json\".\r\n * @param {string} [dataKey] - When the JSON file loads only this property will be stored in the Cache.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('json', function (key, url, dataKey, xhrSettings)\r\n{\r\n if (Array.isArray(key))\r\n {\r\n for (var i = 0; i < key.length; i++)\r\n {\r\n // If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n this.addFile(new JSONFile(this, key[i]));\r\n }\r\n }\r\n else\r\n {\r\n this.addFile(new JSONFile(this, key, url, xhrSettings, dataKey));\r\n }\r\n\r\n return this;\r\n});\r\n\r\nmodule.exports = JSONFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0pTT05GaWxlLmpzP2M0NjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsWUFBWSxtQkFBTyxDQUFDLDJEQUFVO0FBQzlCLFdBQVcsbUJBQU8sQ0FBQyx5REFBUztBQUM1Qix1QkFBdUIsbUJBQU8sQ0FBQyxpRkFBcUI7QUFDcEQsbUJBQW1CLG1CQUFPLENBQUMsK0ZBQWlDO0FBQzVELGVBQWUsbUJBQU8sQ0FBQyx1RkFBNkI7QUFDcEQsb0JBQW9CLG1CQUFPLENBQUMsaUdBQWtDOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxzREFBc0Q7QUFDakUsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxR0FBcUc7QUFDaEgsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLHNDQUFzQztBQUNqRDtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL0pTT05GaWxlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xyXG52YXIgRmlsZSA9IHJlcXVpcmUoJy4uL0ZpbGUnKTtcclxudmFyIEZpbGVUeXBlc01hbmFnZXIgPSByZXF1aXJlKCcuLi9GaWxlVHlwZXNNYW5hZ2VyJyk7XHJcbnZhciBHZXRGYXN0VmFsdWUgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvR2V0RmFzdFZhbHVlJyk7XHJcbnZhciBHZXRWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRWYWx1ZScpO1xyXG52YXIgSXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9Jc1BsYWluT2JqZWN0Jyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIHNpbmdsZSBKU09OIEZpbGUgc3VpdGFibGUgZm9yIGxvYWRpbmcgYnkgdGhlIExvYWRlci5cclxuICpcclxuICogVGhlc2UgYXJlIGNyZWF0ZWQgd2hlbiB5b3UgdXNlIHRoZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNqc29uIG1ldGhvZCBhbmQgYXJlIG5vdCB0eXBpY2FsbHkgY3JlYXRlZCBkaXJlY3RseS5cclxuICogXHJcbiAqIEZvciBkb2N1bWVudGF0aW9uIGFib3V0IHdoYXQgYWxsIHRoZSBhcmd1bWVudHMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtZWFuIHBsZWFzZSBzZWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4janNvbi5cclxuICpcclxuICogQGNsYXNzIEpTT05GaWxlXHJcbiAqIEBleHRlbmRzIFBoYXNlci5Mb2FkZXIuRmlsZVxyXG4gKiBAbWVtYmVyb2YgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBsb2FkZXIgLSBBIHJlZmVyZW5jZSB0byB0aGUgTG9hZGVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLkpTT05GaWxlQ29uZmlnKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhpcyBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+Lmpzb25gLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5qc29uXCIuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEV4dHJhIFhIUiBTZXR0aW5ncyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgZmlsZS5cclxuICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhS2V5XSAtIFdoZW4gdGhlIEpTT04gZmlsZSBsb2FkcyBvbmx5IHRoaXMgcHJvcGVydHkgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIENhY2hlLlxyXG4gKi9cclxudmFyIEpTT05GaWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBGaWxlLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgLy8gIHVybCBjYW4gZWl0aGVyIGJlIGEgc3RyaW5nLCBpbiB3aGljaCBjYXNlIGl0IGlzIHRyZWF0ZWQgbGlrZSBhIHByb3BlciB1cmwsIG9yIGFuIG9iamVjdCwgaW4gd2hpY2ggY2FzZSBpdCBpcyB0cmVhdGVkIGFzIGEgcmVhZHktbWFkZSBKUyBPYmplY3RcclxuICAgIC8vICBkYXRhS2V5IGFsbG93cyB5b3UgdG8gcGx1Y2sgYSBzcGVjaWZpYyBvYmplY3Qgb3V0IG9mIHRoZSBKU09OIGFuZCBwdXQganVzdCB0aGF0IGludG8gdGhlIGNhY2hlLCByYXRoZXIgdGhhbiB0aGUgd2hvbGUgdGhpbmdcclxuXHJcbiAgICBmdW5jdGlvbiBKU09ORmlsZSAobG9hZGVyLCBrZXksIHVybCwgeGhyU2V0dGluZ3MsIGRhdGFLZXkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGV4dGVuc2lvbiA9ICdqc29uJztcclxuXHJcbiAgICAgICAgaWYgKElzUGxhaW5PYmplY3Qoa2V5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBjb25maWcgPSBrZXk7XHJcblxyXG4gICAgICAgICAgICBrZXkgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAna2V5Jyk7XHJcbiAgICAgICAgICAgIHVybCA9IEdldEZhc3RWYWx1ZShjb25maWcsICd1cmwnKTtcclxuICAgICAgICAgICAgeGhyU2V0dGluZ3MgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAneGhyU2V0dGluZ3MnKTtcclxuICAgICAgICAgICAgZXh0ZW5zaW9uID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2V4dGVuc2lvbicsIGV4dGVuc2lvbik7XHJcbiAgICAgICAgICAgIGRhdGFLZXkgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZGF0YUtleScsIGRhdGFLZXkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGZpbGVDb25maWcgPSB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdqc29uJyxcclxuICAgICAgICAgICAgY2FjaGU6IGxvYWRlci5jYWNoZU1hbmFnZXIuanNvbixcclxuICAgICAgICAgICAgZXh0ZW5zaW9uOiBleHRlbnNpb24sXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxyXG4gICAgICAgICAgICBrZXk6IGtleSxcclxuICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHhoclNldHRpbmdzOiB4aHJTZXR0aW5ncyxcclxuICAgICAgICAgICAgY29uZmlnOiBkYXRhS2V5XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgRmlsZS5jYWxsKHRoaXMsIGxvYWRlciwgZmlsZUNvbmZpZyk7XHJcblxyXG4gICAgICAgIGlmIChJc1BsYWluT2JqZWN0KHVybCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgT2JqZWN0IHByb3ZpZGVkIGluc3RlYWQgb2YgYSBVUkwsIHNvIG5vIG5lZWQgdG8gYWN0dWFsbHkgbG9hZCBpdCAocG9wdWxhdGUgZGF0YSB3aXRoIHZhbHVlKVxyXG4gICAgICAgICAgICBpZiAoZGF0YUtleSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gR2V0VmFsdWUodXJsLCBkYXRhS2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IHVybDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IENPTlNULkZJTEVfUE9QVUxBVEVEO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSBMb2FkZXIubmV4dEZpbGUuXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBjb250cm9scyB3aGF0IGV4dHJhIHdvcmsgdGhpcyBGaWxlIGRvZXMgd2l0aCBpdHMgbG9hZGVkIGRhdGEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5KU09ORmlsZSNvblByb2Nlc3NcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBvblByb2Nlc3M6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IENPTlNULkZJTEVfUE9QVUxBVEVEKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IENPTlNULkZJTEVfUFJPQ0VTU0lORztcclxuXHJcbiAgICAgICAgICAgIHZhciBqc29uID0gSlNPTi5wYXJzZSh0aGlzLnhockxvYWRlci5yZXNwb25zZVRleHQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGtleSA9IHRoaXMuY29uZmlnO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBHZXRWYWx1ZShqc29uLCBrZXksIGpzb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0ganNvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5vblByb2Nlc3NDb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG4vKipcclxuICogQWRkcyBhIEpTT04gZmlsZSwgb3IgYXJyYXkgb2YgSlNPTiBmaWxlcywgdG8gdGhlIGN1cnJlbnQgbG9hZCBxdWV1ZS5cclxuICpcclxuICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIGZyb20gd2l0aGluIHlvdXIgU2NlbmUncyBgcHJlbG9hZGAsIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGVzIHlvdSB3aXNoIHRvIGxvYWQ6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGZ1bmN0aW9uIHByZWxvYWQgKClcclxuICoge1xyXG4gKiAgICAgdGhpcy5sb2FkLmpzb24oJ3dhdmVkYXRhJywgJ2ZpbGVzL0FsaWVuV2F2ZURhdGEuanNvbicpO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgZmlsZSBpcyAqKm5vdCoqIGxvYWRlZCByaWdodCBhd2F5LiBJdCBpcyBhZGRlZCB0byBhIHF1ZXVlIHJlYWR5IHRvIGJlIGxvYWRlZCBlaXRoZXIgd2hlbiB0aGUgbG9hZGVyIHN0YXJ0cyxcclxuICogb3IgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIHdoZW4gdGhlIG5leHQgZnJlZSBsb2FkIHNsb3QgYmVjb21lcyBhdmFpbGFibGUuIFRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGlmIHlvdVxyXG4gKiBhcmUgY2FsbGluZyB0aGlzIGZyb20gd2l0aGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QsIG9yIGEgcmVsYXRlZCBjYWxsYmFjay4gQmVjYXVzZSB0aGUgZmlsZSBpcyBxdWV1ZWRcclxuICogaXQgbWVhbnMgeW91IGNhbm5vdCB1c2UgdGhlIGZpbGUgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgYnV0IG11c3Qgd2FpdCBmb3IgdGhlIGZpbGUgdG8gY29tcGxldGUuXHJcbiAqIFRoZSB0eXBpY2FsIGZsb3cgZm9yIGEgUGhhc2VyIFNjZW5lIGlzIHRoYXQgeW91IGxvYWQgYXNzZXRzIGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QgYW5kIHRoZW4gd2hlbiB0aGVcclxuICogU2NlbmUncyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aG9zZSBhc3NldHMgYXJlIHJlYWR5IGZvciB1c2UgYW5kIGhhdmUgYmVlblxyXG4gKiBsb2FkZWQuXHJcbiAqIFxyXG4gKiBUaGUga2V5IG11c3QgYmUgYSB1bmlxdWUgU3RyaW5nLiBJdCBpcyB1c2VkIHRvIGFkZCB0aGUgZmlsZSB0byB0aGUgZ2xvYmFsIEpTT04gQ2FjaGUgdXBvbiBhIHN1Y2Nlc3NmdWwgbG9hZC5cclxuICogVGhlIGtleSBzaG91bGQgYmUgdW5pcXVlIGJvdGggaW4gdGVybXMgb2YgZmlsZXMgYmVpbmcgbG9hZGVkIGFuZCBmaWxlcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIEpTT04gQ2FjaGUuXHJcbiAqIExvYWRpbmcgYSBmaWxlIHVzaW5nIGEga2V5IHRoYXQgaXMgYWxyZWFkeSB0YWtlbiB3aWxsIHJlc3VsdCBpbiBhIHdhcm5pbmcuIElmIHlvdSB3aXNoIHRvIHJlcGxhY2UgYW4gZXhpc3RpbmcgZmlsZVxyXG4gKiB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBKU09OIENhY2hlIGZpcnN0LCBiZWZvcmUgbG9hZGluZyBhIG5ldyBvbmUuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhcmd1bWVudHMgeW91IGNhbiBwYXNzIGEgY29uZmlndXJhdGlvbiBvYmplY3QsIHN1Y2ggYXM6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5qc29uKHtcclxuICogICAgIGtleTogJ3dhdmVkYXRhJyxcclxuICogICAgIHVybDogJ2ZpbGVzL0FsaWVuV2F2ZURhdGEuanNvbidcclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGBQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5KU09ORmlsZUNvbmZpZ2AgZm9yIG1vcmUgZGV0YWlscy5cclxuICpcclxuICogT25jZSB0aGUgZmlsZSBoYXMgZmluaXNoZWQgbG9hZGluZyB5b3UgY2FuIGFjY2VzcyBpdCBmcm9tIGl0cyBDYWNoZSB1c2luZyBpdHMga2V5OlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQuanNvbignd2F2ZWRhdGEnLCAnZmlsZXMvQWxpZW5XYXZlRGF0YS5qc29uJyk7XHJcbiAqIC8vIGFuZCBsYXRlciBpbiB5b3VyIGdhbWUgLi4uXHJcbiAqIHZhciBkYXRhID0gdGhpcy5jYWNoZS5qc29uLmdldCgnd2F2ZWRhdGEnKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIElmIHlvdSBoYXZlIHNwZWNpZmllZCBhIHByZWZpeCBpbiB0aGUgbG9hZGVyLCB2aWEgYExvYWRlci5zZXRQcmVmaXhgIHRoZW4gdGhpcyB2YWx1ZSB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGlzIGZpbGVzXHJcbiAqIGtleS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBwcmVmaXggd2FzIGBMRVZFTDEuYCBhbmQgdGhlIGtleSB3YXMgYFdhdmVzYCB0aGUgZmluYWwga2V5IHdpbGwgYmUgYExFVkVMMS5XYXZlc2AgYW5kXHJcbiAqIHRoaXMgaXMgd2hhdCB5b3Ugd291bGQgdXNlIHRvIHJldHJpZXZlIHRoZSB0ZXh0IGZyb20gdGhlIEpTT04gQ2FjaGUuXHJcbiAqXHJcbiAqIFRoZSBVUkwgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlLiBJZiB0aGUgVVJMIGlzIHJlbGF0aXZlIHRoZSBgTG9hZGVyLmJhc2VVUkxgIGFuZCBgTG9hZGVyLnBhdGhgIHZhbHVlcyB3aWxsIGJlIHByZXBlbmRlZCB0byBpdC5cclxuICpcclxuICogSWYgdGhlIFVSTCBpc24ndCBzcGVjaWZpZWQgdGhlIExvYWRlciB3aWxsIHRha2UgdGhlIGtleSBhbmQgY3JlYXRlIGEgZmlsZW5hbWUgZnJvbSB0aGF0LiBGb3IgZXhhbXBsZSBpZiB0aGUga2V5IGlzIFwiZGF0YVwiXHJcbiAqIGFuZCBubyBVUkwgaXMgZ2l2ZW4gdGhlbiB0aGUgTG9hZGVyIHdpbGwgc2V0IHRoZSBVUkwgdG8gYmUgXCJkYXRhLmpzb25cIi4gSXQgd2lsbCBhbHdheXMgYWRkIGAuanNvbmAgYXMgdGhlIGV4dGVuc2lvbiwgYWx0aG91Z2hcclxuICogdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBpZiB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBtZXRob2QgYXJndW1lbnRzLiBJZiB5b3UgZG8gbm90IGRlc2lyZSB0aGlzIGFjdGlvbiB0aGVuIHByb3ZpZGUgYSBVUkwuXHJcbiAqXHJcbiAqIFlvdSBjYW4gYWxzbyBvcHRpb25hbGx5IHByb3ZpZGUgYSBgZGF0YUtleWAgdG8gdXNlLiBUaGlzIGFsbG93cyB5b3UgdG8gZXh0cmFjdCBvbmx5IGEgcGFydCBvZiB0aGUgSlNPTiBhbmQgc3RvcmUgaXQgaW4gdGhlIENhY2hlLFxyXG4gKiByYXRoZXIgdGhhbiB0aGUgd2hvbGUgZmlsZS4gRm9yIGV4YW1wbGUsIGlmIHlvdXIgSlNPTiBkYXRhIGhhZCBhIHN0cnVjdHVyZSBsaWtlIHRoaXM6XHJcbiAqIFxyXG4gKiBgYGBqc29uXHJcbiAqIHtcclxuICogICAgIFwibGV2ZWwxXCI6IHtcclxuICogICAgICAgICBcImJhZGRpZXNcIjoge1xyXG4gKiAgICAgICAgICAgICBcImFsaWVuc1wiOiB7fSxcclxuICogICAgICAgICAgICAgXCJib3NzXCI6IHt9XHJcbiAqICAgICAgICAgfVxyXG4gKiAgICAgfSxcclxuICogICAgIFwibGV2ZWwyXCI6IHt9LFxyXG4gKiAgICAgXCJsZXZlbDNcIjoge31cclxuICogfVxyXG4gKiBgYGBcclxuICpcclxuICogQW5kIHlvdSBvbmx5IHdhbnRlZCB0byBzdG9yZSB0aGUgYGJvc3NgIGRhdGEgaW4gdGhlIENhY2hlLCB0aGVuIHlvdSBjb3VsZCBwYXNzIGBsZXZlbDEuYmFkZGllcy5ib3NzYGFzIHRoZSBgZGF0YUtleWAuXHJcbiAqXHJcbiAqIE5vdGU6IFRoZSBhYmlsaXR5IHRvIGxvYWQgdGhpcyB0eXBlIG9mIGZpbGUgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgSlNPTiBGaWxlIHR5cGUgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIEl0IGlzIGF2YWlsYWJsZSBpbiB0aGUgZGVmYXVsdCBidWlsZCBidXQgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gY3VzdG9tIGJ1aWxkcy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNqc29uXHJcbiAqIEBmaXJlcyBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhZGRGaWxlRXZlbnRcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5KU09ORmlsZUNvbmZpZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5KU09ORmlsZUNvbmZpZ1tdKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhcnJheSBvZiB0aGVtLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhpcyBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+Lmpzb25gLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5qc29uXCIuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YUtleV0gLSBXaGVuIHRoZSBKU09OIGZpbGUgbG9hZHMgb25seSB0aGlzIHByb3BlcnR5IHdpbGwgYmUgc3RvcmVkIGluIHRoZSBDYWNoZS5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbeGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gVGhlIExvYWRlciBpbnN0YW5jZS5cclxuICovXHJcbkZpbGVUeXBlc01hbmFnZXIucmVnaXN0ZXIoJ2pzb24nLCBmdW5jdGlvbiAoa2V5LCB1cmwsIGRhdGFLZXksIHhoclNldHRpbmdzKVxyXG57XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIElmIGl0J3MgYW4gYXJyYXkgaXQgaGFzIHRvIGJlIGFuIGFycmF5IG9mIE9iamVjdHMsIHNvIHdlIGdldCBldmVyeXRoaW5nIG91dCBvZiB0aGUgJ2tleScgb2JqZWN0XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRmlsZShuZXcgSlNPTkZpbGUodGhpcywga2V5W2ldKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYWRkRmlsZShuZXcgSlNPTkZpbGUodGhpcywga2V5LCB1cmwsIHhoclNldHRpbmdzLCBkYXRhS2V5KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBKU09ORmlsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/JSONFile.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/filetypes/MultiAtlasFile.js":
/*!********************************************************************!*\
!*** ./node_modules/phaser/src/loader/filetypes/MultiAtlasFile.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar ImageFile = __webpack_require__(/*! ./ImageFile.js */ \"./node_modules/phaser/src/loader/filetypes/ImageFile.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\nvar JSONFile = __webpack_require__(/*! ./JSONFile.js */ \"./node_modules/phaser/src/loader/filetypes/JSONFile.js\");\r\nvar MultiFile = __webpack_require__(/*! ../MultiFile.js */ \"./node_modules/phaser/src/loader/MultiFile.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Multi Texture Atlas File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#multiatlas method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#multiatlas.\r\n *\r\n * @class MultiAtlasFile\r\n * @extends Phaser.Loader.MultiFile\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.7.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {string} key - The key of the file. Must be unique within both the Loader and the Texture Manager.\r\n * @param {string} [atlasURL] - The absolute or relative URL to load the multi atlas json file from.\r\n * @param {string} [path] - Optional path to use when loading the textures defined in the atlas data.\r\n * @param {string} [baseURL] - Optional Base URL to use when loading the textures defined in the atlas data.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [atlasXhrSettings] - Extra XHR Settings specifically for the atlas json file.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [textureXhrSettings] - Extra XHR Settings specifically for the texture files.\r\n */\r\nvar MultiAtlasFile = new Class({\r\n\r\n Extends: MultiFile,\r\n\r\n initialize:\r\n\r\n function MultiAtlasFile (loader, key, atlasURL, path, baseURL, atlasXhrSettings, textureXhrSettings)\r\n {\r\n if (IsPlainObject(key))\r\n {\r\n var config = key;\r\n\r\n key = GetFastValue(config, 'key');\r\n atlasURL = GetFastValue(config, 'url');\r\n atlasXhrSettings = GetFastValue(config, 'xhrSettings');\r\n path = GetFastValue(config, 'path');\r\n baseURL = GetFastValue(config, 'baseURL');\r\n textureXhrSettings = GetFastValue(config, 'textureXhrSettings');\r\n }\r\n\r\n var data = new JSONFile(loader, key, atlasURL, atlasXhrSettings);\r\n\r\n MultiFile.call(this, loader, 'multiatlas', key, [ data ]);\r\n\r\n this.config.path = path;\r\n this.config.baseURL = baseURL;\r\n this.config.textureXhrSettings = textureXhrSettings;\r\n },\r\n\r\n /**\r\n * Called by each File when it finishes loading.\r\n *\r\n * @method Phaser.Loader.FileTypes.MultiAtlasFile#onFileComplete\r\n * @since 3.7.0\r\n *\r\n * @param {Phaser.Loader.File} file - The File that has completed processing.\r\n */\r\n onFileComplete: function (file)\r\n {\r\n var index = this.files.indexOf(file);\r\n\r\n if (index !== -1)\r\n {\r\n this.pending--;\r\n\r\n if (file.type === 'json' && file.data.hasOwnProperty('textures'))\r\n {\r\n // Inspect the data for the files to now load\r\n var textures = file.data.textures;\r\n\r\n var config = this.config;\r\n var loader = this.loader;\r\n\r\n var currentBaseURL = loader.baseURL;\r\n var currentPath = loader.path;\r\n var currentPrefix = loader.prefix;\r\n\r\n var baseURL = GetFastValue(config, 'baseURL', this.baseURL);\r\n var path = GetFastValue(config, 'path', this.path);\r\n var prefix = GetFastValue(config, 'prefix', this.prefix);\r\n var textureXhrSettings = GetFastValue(config, 'textureXhrSettings');\r\n\r\n loader.setBaseURL(baseURL);\r\n loader.setPath(path);\r\n loader.setPrefix(prefix);\r\n\r\n for (var i = 0; i < textures.length; i++)\r\n {\r\n // \"image\": \"texture-packer-multi-atlas-0.png\",\r\n var textureURL = textures[i].image;\r\n\r\n var key = 'MA' + this.multiKeyIndex + '_' + textureURL;\r\n\r\n var image = new ImageFile(loader, key, textureURL, textureXhrSettings);\r\n\r\n this.addToMultiFile(image);\r\n\r\n loader.addFile(image);\r\n\r\n // \"normalMap\": \"texture-packer-multi-atlas-0_n.png\",\r\n if (textures[i].normalMap)\r\n {\r\n var normalMap = new ImageFile(loader, key, textures[i].normalMap, textureXhrSettings);\r\n\r\n normalMap.type = 'normalMap';\r\n\r\n image.setLink(normalMap);\r\n\r\n this.addToMultiFile(normalMap);\r\n\r\n loader.addFile(normalMap);\r\n }\r\n }\r\n\r\n // Reset the loader settings\r\n loader.setBaseURL(currentBaseURL);\r\n loader.setPath(currentPath);\r\n loader.setPrefix(currentPrefix);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Adds this file to its target cache upon successful loading and processing.\r\n *\r\n * @method Phaser.Loader.FileTypes.MultiAtlasFile#addToCache\r\n * @since 3.7.0\r\n */\r\n addToCache: function ()\r\n {\r\n if (this.isReadyToProcess())\r\n {\r\n var fileJSON = this.files[0];\r\n\r\n var data = [];\r\n var images = [];\r\n var normalMaps = [];\r\n\r\n for (var i = 1; i < this.files.length; i++)\r\n {\r\n var file = this.files[i];\r\n\r\n if (file.type === 'normalMap')\r\n {\r\n continue;\r\n }\r\n\r\n var pos = file.key.indexOf('_');\r\n var key = file.key.substr(pos + 1);\r\n\r\n var image = file.data;\r\n\r\n // Now we need to find out which json entry this mapped to\r\n for (var t = 0; t < fileJSON.data.textures.length; t++)\r\n {\r\n var item = fileJSON.data.textures[t];\r\n\r\n if (item.image === key)\r\n {\r\n images.push(image);\r\n \r\n data.push(item);\r\n\r\n if (file.linkFile)\r\n {\r\n normalMaps.push(file.linkFile.data);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (normalMaps.length === 0)\r\n {\r\n normalMaps = undefined;\r\n }\r\n\r\n this.loader.textureManager.addAtlasJSONArray(this.key, images, data, normalMaps);\r\n\r\n this.complete = true;\r\n\r\n for (i = 0; i < this.files.length; i++)\r\n {\r\n this.files[i].pendingDestroy();\r\n }\r\n }\r\n }\r\n\r\n});\r\n\r\n/**\r\n * Adds a Multi Texture Atlas, or array of multi atlases, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n * this.load.multiatlas('level1', 'images/Level1.json');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * If you call this from outside of `preload` then you are responsible for starting the Loader afterwards and monitoring\r\n * its events to know when it's safe to use the asset. Please see the Phaser.Loader.LoaderPlugin class for more details.\r\n *\r\n * Phaser expects the atlas data to be provided in a JSON file as exported from the application Texture Packer,\r\n * version 4.6.3 or above, where you have made sure to use the Phaser 3 Export option.\r\n *\r\n * The way it works internally is that you provide a URL to the JSON file. Phaser then loads this JSON, parses it and\r\n * extracts which texture files it also needs to load to complete the process. If the JSON also defines normal maps,\r\n * Phaser will load those as well.\r\n * \r\n * The key must be a unique String. It is used to add the file to the global Texture Manager upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Texture Manager.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Texture Manager first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.multiatlas({\r\n * key: 'level1',\r\n * atlasURL: 'images/Level1.json'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.MultiAtlasFileConfig` for more details.\r\n *\r\n * Instead of passing a URL for the atlas JSON data you can also pass in a well formed JSON object instead.\r\n *\r\n * Once the atlas has finished loading you can use frames from it as textures for a Game Object by referencing its key:\r\n * \r\n * ```javascript\r\n * this.load.multiatlas('level1', 'images/Level1.json');\r\n * // and later in your game ...\r\n * this.add.image(x, y, 'level1', 'background');\r\n * ```\r\n *\r\n * To get a list of all available frames within an atlas please consult your Texture Atlas software.\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `MENU.` and the key was `Background` the final key will be `MENU.Background` and\r\n * this is what you would use to retrieve the image from the Texture Manager.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"alien\"\r\n * and no URL is given then the Loader will set the URL to be \"alien.png\". It will always add `.png` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Multi Atlas File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#multiatlas\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.7.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.MultiAtlasFileConfig|Phaser.Types.Loader.FileTypes.MultiAtlasFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [atlasURL] - The absolute or relative URL to load the texture atlas json data file from. If undefined or `null` it will be set to `<key>.json`, i.e. if `key` was \"alien\" then the URL will be \"alien.json\".\r\n * @param {string} [path] - Optional path to use when loading the textures defined in the atlas data.\r\n * @param {string} [baseURL] - Optional Base URL to use when loading the textures defined in the atlas data.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [atlasXhrSettings] - An XHR Settings configuration object for the atlas json file. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('multiatlas', function (key, atlasURL, path, baseURL, atlasXhrSettings)\r\n{\r\n var multifile;\r\n\r\n // Supports an Object file definition in the key argument\r\n // Or an array of objects in the key argument\r\n // Or a single entry where all arguments have been defined\r\n\r\n if (Array.isArray(key))\r\n {\r\n for (var i = 0; i < key.length; i++)\r\n {\r\n multifile = new MultiAtlasFile(this, key[i]);\r\n\r\n this.addFile(multifile.files);\r\n }\r\n }\r\n else\r\n {\r\n multifile = new MultiAtlasFile(this, key, atlasURL, path, baseURL, atlasXhrSettings);\r\n\r\n this.addFile(multifile.files);\r\n }\r\n\r\n return this;\r\n});\r\n\r\nmodule.exports = MultiAtlasFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL011bHRpQXRsYXNGaWxlLmpzPzllNWQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsdUJBQXVCLG1CQUFPLENBQUMsaUZBQXFCO0FBQ3BELG1CQUFtQixtQkFBTyxDQUFDLCtGQUFpQztBQUM1RCxnQkFBZ0IsbUJBQU8sQ0FBQywrRUFBZ0I7QUFDeEMsb0JBQW9CLG1CQUFPLENBQUMsaUdBQWtDO0FBQzlELGVBQWUsbUJBQU8sQ0FBQyw2RUFBZTtBQUN0QyxnQkFBZ0IsbUJBQU8sQ0FBQyxzRUFBaUI7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVyxzQ0FBc0M7QUFDakQ7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtQkFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0IscUJBQXFCO0FBQ3BEO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkIsdUJBQXVCO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLCtCQUErQixtQ0FBbUM7QUFDbEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsdUJBQXVCLHVCQUF1QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlIQUFpSDtBQUM1SCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLHNDQUFzQztBQUNqRDtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCLGdCQUFnQjtBQUN2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9maWxldHlwZXMvTXVsdGlBdGxhc0ZpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBGaWxlVHlwZXNNYW5hZ2VyID0gcmVxdWlyZSgnLi4vRmlsZVR5cGVzTWFuYWdlcicpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgSW1hZ2VGaWxlID0gcmVxdWlyZSgnLi9JbWFnZUZpbGUuanMnKTtcclxudmFyIElzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvSXNQbGFpbk9iamVjdCcpO1xyXG52YXIgSlNPTkZpbGUgPSByZXF1aXJlKCcuL0pTT05GaWxlLmpzJyk7XHJcbnZhciBNdWx0aUZpbGUgPSByZXF1aXJlKCcuLi9NdWx0aUZpbGUuanMnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgc2luZ2xlIE11bHRpIFRleHR1cmUgQXRsYXMgRmlsZSBzdWl0YWJsZSBmb3IgbG9hZGluZyBieSB0aGUgTG9hZGVyLlxyXG4gKlxyXG4gKiBUaGVzZSBhcmUgY3JlYXRlZCB3aGVuIHlvdSB1c2UgdGhlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI211bHRpYXRsYXMgbWV0aG9kIGFuZCBhcmUgbm90IHR5cGljYWxseSBjcmVhdGVkIGRpcmVjdGx5LlxyXG4gKiBcclxuICogRm9yIGRvY3VtZW50YXRpb24gYWJvdXQgd2hhdCBhbGwgdGhlIGFyZ3VtZW50cyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIG1lYW4gcGxlYXNlIHNlZSBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNtdWx0aWF0bGFzLlxyXG4gKlxyXG4gKiBAY2xhc3MgTXVsdGlBdGxhc0ZpbGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkxvYWRlci5NdWx0aUZpbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy43LjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gbG9hZGVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIExvYWRlciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIGZpbGUuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBmaWxlLiBNdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYm90aCB0aGUgTG9hZGVyIGFuZCB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW2F0bGFzVVJMXSAtIFRoZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gbG9hZCB0aGUgbXVsdGkgYXRsYXMganNvbiBmaWxlIGZyb20uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcGF0aF0gLSBPcHRpb25hbCBwYXRoIHRvIHVzZSB3aGVuIGxvYWRpbmcgdGhlIHRleHR1cmVzIGRlZmluZWQgaW4gdGhlIGF0bGFzIGRhdGEuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYmFzZVVSTF0gLSBPcHRpb25hbCBCYXNlIFVSTCB0byB1c2Ugd2hlbiBsb2FkaW5nIHRoZSB0ZXh0dXJlcyBkZWZpbmVkIGluIHRoZSBhdGxhcyBkYXRhLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFthdGxhc1hoclNldHRpbmdzXSAtIEV4dHJhIFhIUiBTZXR0aW5ncyBzcGVjaWZpY2FsbHkgZm9yIHRoZSBhdGxhcyBqc29uIGZpbGUuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3RleHR1cmVYaHJTZXR0aW5nc10gLSBFeHRyYSBYSFIgU2V0dGluZ3Mgc3BlY2lmaWNhbGx5IGZvciB0aGUgdGV4dHVyZSBmaWxlcy5cclxuICovXHJcbnZhciBNdWx0aUF0bGFzRmlsZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogTXVsdGlGaWxlLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gTXVsdGlBdGxhc0ZpbGUgKGxvYWRlciwga2V5LCBhdGxhc1VSTCwgcGF0aCwgYmFzZVVSTCwgYXRsYXNYaHJTZXR0aW5ncywgdGV4dHVyZVhoclNldHRpbmdzKVxyXG4gICAge1xyXG4gICAgICAgIGlmIChJc1BsYWluT2JqZWN0KGtleSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY29uZmlnID0ga2V5O1xyXG5cclxuICAgICAgICAgICAga2V5ID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ2tleScpO1xyXG4gICAgICAgICAgICBhdGxhc1VSTCA9IEdldEZhc3RWYWx1ZShjb25maWcsICd1cmwnKTtcclxuICAgICAgICAgICAgYXRsYXNYaHJTZXR0aW5ncyA9IEdldEZhc3RWYWx1ZShjb25maWcsICd4aHJTZXR0aW5ncycpO1xyXG4gICAgICAgICAgICBwYXRoID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3BhdGgnKTtcclxuICAgICAgICAgICAgYmFzZVVSTCA9IEdldEZhc3RWYWx1ZShjb25maWcsICdiYXNlVVJMJyk7XHJcbiAgICAgICAgICAgIHRleHR1cmVYaHJTZXR0aW5ncyA9IEdldEZhc3RWYWx1ZShjb25maWcsICd0ZXh0dXJlWGhyU2V0dGluZ3MnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBkYXRhID0gbmV3IEpTT05GaWxlKGxvYWRlciwga2V5LCBhdGxhc1VSTCwgYXRsYXNYaHJTZXR0aW5ncyk7XHJcblxyXG4gICAgICAgIE11bHRpRmlsZS5jYWxsKHRoaXMsIGxvYWRlciwgJ211bHRpYXRsYXMnLCBrZXksIFsgZGF0YSBdKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb25maWcucGF0aCA9IHBhdGg7XHJcbiAgICAgICAgdGhpcy5jb25maWcuYmFzZVVSTCA9IGJhc2VVUkw7XHJcbiAgICAgICAgdGhpcy5jb25maWcudGV4dHVyZVhoclNldHRpbmdzID0gdGV4dHVyZVhoclNldHRpbmdzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBieSBlYWNoIEZpbGUgd2hlbiBpdCBmaW5pc2hlcyBsb2FkaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuTXVsdGlBdGxhc0ZpbGUjb25GaWxlQ29tcGxldGVcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGhhc2VyLkxvYWRlci5GaWxlfSBmaWxlIC0gVGhlIEZpbGUgdGhhdCBoYXMgY29tcGxldGVkIHByb2Nlc3NpbmcuXHJcbiAgICAgKi9cclxuICAgIG9uRmlsZUNvbXBsZXRlOiBmdW5jdGlvbiAoZmlsZSlcclxuICAgIHtcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmZpbGVzLmluZGV4T2YoZmlsZSk7XHJcblxyXG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmctLTtcclxuXHJcbiAgICAgICAgICAgIGlmIChmaWxlLnR5cGUgPT09ICdqc29uJyAmJiBmaWxlLmRhdGEuaGFzT3duUHJvcGVydHkoJ3RleHR1cmVzJykpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vICBJbnNwZWN0IHRoZSBkYXRhIGZvciB0aGUgZmlsZXMgdG8gbm93IGxvYWRcclxuICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlcyA9IGZpbGUuZGF0YS50ZXh0dXJlcztcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgY29uZmlnID0gdGhpcy5jb25maWc7XHJcbiAgICAgICAgICAgICAgICB2YXIgbG9hZGVyID0gdGhpcy5sb2FkZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRCYXNlVVJMID0gbG9hZGVyLmJhc2VVUkw7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudFBhdGggPSBsb2FkZXIucGF0aDtcclxuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50UHJlZml4ID0gbG9hZGVyLnByZWZpeDtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgYmFzZVVSTCA9IEdldEZhc3RWYWx1ZShjb25maWcsICdiYXNlVVJMJywgdGhpcy5iYXNlVVJMKTtcclxuICAgICAgICAgICAgICAgIHZhciBwYXRoID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3BhdGgnLCB0aGlzLnBhdGgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHByZWZpeCA9IEdldEZhc3RWYWx1ZShjb25maWcsICdwcmVmaXgnLCB0aGlzLnByZWZpeCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZVhoclNldHRpbmdzID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3RleHR1cmVYaHJTZXR0aW5ncycpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxvYWRlci5zZXRCYXNlVVJMKGJhc2VVUkwpO1xyXG4gICAgICAgICAgICAgICAgbG9hZGVyLnNldFBhdGgocGF0aCk7XHJcbiAgICAgICAgICAgICAgICBsb2FkZXIuc2V0UHJlZml4KHByZWZpeCk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0dXJlcy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgXCJpbWFnZVwiOiBcInRleHR1cmUtcGFja2VyLW11bHRpLWF0bGFzLTAucG5nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRleHR1cmVVUkwgPSB0ZXh0dXJlc1tpXS5pbWFnZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9ICdNQScgKyB0aGlzLm11bHRpS2V5SW5kZXggKyAnXycgKyB0ZXh0dXJlVVJMO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2VGaWxlKGxvYWRlciwga2V5LCB0ZXh0dXJlVVJMLCB0ZXh0dXJlWGhyU2V0dGluZ3MpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFRvTXVsdGlGaWxlKGltYWdlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbG9hZGVyLmFkZEZpbGUoaW1hZ2UpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyAgXCJub3JtYWxNYXBcIjogXCJ0ZXh0dXJlLXBhY2tlci1tdWx0aS1hdGxhcy0wX24ucG5nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVzW2ldLm5vcm1hbE1hcClcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3JtYWxNYXAgPSBuZXcgSW1hZ2VGaWxlKGxvYWRlciwga2V5LCB0ZXh0dXJlc1tpXS5ub3JtYWxNYXAsIHRleHR1cmVYaHJTZXR0aW5ncyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxNYXAudHlwZSA9ICdub3JtYWxNYXAnO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2Uuc2V0TGluayhub3JtYWxNYXApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRUb011bHRpRmlsZShub3JtYWxNYXApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyLmFkZEZpbGUobm9ybWFsTWFwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIFJlc2V0IHRoZSBsb2FkZXIgc2V0dGluZ3NcclxuICAgICAgICAgICAgICAgIGxvYWRlci5zZXRCYXNlVVJMKGN1cnJlbnRCYXNlVVJMKTtcclxuICAgICAgICAgICAgICAgIGxvYWRlci5zZXRQYXRoKGN1cnJlbnRQYXRoKTtcclxuICAgICAgICAgICAgICAgIGxvYWRlci5zZXRQcmVmaXgoY3VycmVudFByZWZpeCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyB0aGlzIGZpbGUgdG8gaXRzIHRhcmdldCBjYWNoZSB1cG9uIHN1Y2Nlc3NmdWwgbG9hZGluZyBhbmQgcHJvY2Vzc2luZy5cclxuICAgICAqXHJcbiAgICAgKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzLk11bHRpQXRsYXNGaWxlI2FkZFRvQ2FjaGVcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBhZGRUb0NhY2hlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmlzUmVhZHlUb1Byb2Nlc3MoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBmaWxlSlNPTiA9IHRoaXMuZmlsZXNbMF07XHJcblxyXG4gICAgICAgICAgICB2YXIgZGF0YSA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgaW1hZ2VzID0gW107XHJcbiAgICAgICAgICAgIHZhciBub3JtYWxNYXBzID0gW107XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRoaXMuZmlsZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBmaWxlID0gdGhpcy5maWxlc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZmlsZS50eXBlID09PSAnbm9ybWFsTWFwJylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcG9zID0gZmlsZS5rZXkuaW5kZXhPZignXycpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGZpbGUua2V5LnN1YnN0cihwb3MgKyAxKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSBmaWxlLmRhdGE7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gIE5vdyB3ZSBuZWVkIHRvIGZpbmQgb3V0IHdoaWNoIGpzb24gZW50cnkgdGhpcyBtYXBwZWQgdG9cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgZmlsZUpTT04uZGF0YS50ZXh0dXJlcy5sZW5ndGg7IHQrKylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGZpbGVKU09OLmRhdGEudGV4dHVyZXNbdF07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmltYWdlID09PSBrZXkpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMucHVzaChpbWFnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnB1c2goaXRlbSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZS5saW5rRmlsZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsTWFwcy5wdXNoKGZpbGUubGlua0ZpbGUuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG5vcm1hbE1hcHMubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBub3JtYWxNYXBzID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmxvYWRlci50ZXh0dXJlTWFuYWdlci5hZGRBdGxhc0pTT05BcnJheSh0aGlzLmtleSwgaW1hZ2VzLCBkYXRhLCBub3JtYWxNYXBzKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY29tcGxldGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZmlsZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsZXNbaV0ucGVuZGluZ0Rlc3Ryb3koKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgYSBNdWx0aSBUZXh0dXJlIEF0bGFzLCBvciBhcnJheSBvZiBtdWx0aSBhdGxhc2VzLCB0byB0aGUgY3VycmVudCBsb2FkIHF1ZXVlLlxyXG4gKlxyXG4gKiBZb3UgY2FuIGNhbGwgdGhpcyBtZXRob2QgZnJvbSB3aXRoaW4geW91ciBTY2VuZSdzIGBwcmVsb2FkYCwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZmlsZXMgeW91IHdpc2ggdG8gbG9hZDpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogZnVuY3Rpb24gcHJlbG9hZCAoKVxyXG4gKiB7XHJcbiAqICAgICB0aGlzLmxvYWQubXVsdGlhdGxhcygnbGV2ZWwxJywgJ2ltYWdlcy9MZXZlbDEuanNvbicpO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgZmlsZSBpcyAqKm5vdCoqIGxvYWRlZCByaWdodCBhd2F5LiBJdCBpcyBhZGRlZCB0byBhIHF1ZXVlIHJlYWR5IHRvIGJlIGxvYWRlZCBlaXRoZXIgd2hlbiB0aGUgbG9hZGVyIHN0YXJ0cyxcclxuICogb3IgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIHdoZW4gdGhlIG5leHQgZnJlZSBsb2FkIHNsb3QgYmVjb21lcyBhdmFpbGFibGUuIFRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGlmIHlvdVxyXG4gKiBhcmUgY2FsbGluZyB0aGlzIGZyb20gd2l0aGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QsIG9yIGEgcmVsYXRlZCBjYWxsYmFjay4gQmVjYXVzZSB0aGUgZmlsZSBpcyBxdWV1ZWRcclxuICogaXQgbWVhbnMgeW91IGNhbm5vdCB1c2UgdGhlIGZpbGUgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgYnV0IG11c3Qgd2FpdCBmb3IgdGhlIGZpbGUgdG8gY29tcGxldGUuXHJcbiAqIFRoZSB0eXBpY2FsIGZsb3cgZm9yIGEgUGhhc2VyIFNjZW5lIGlzIHRoYXQgeW91IGxvYWQgYXNzZXRzIGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QgYW5kIHRoZW4gd2hlbiB0aGVcclxuICogU2NlbmUncyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aG9zZSBhc3NldHMgYXJlIHJlYWR5IGZvciB1c2UgYW5kIGhhdmUgYmVlblxyXG4gKiBsb2FkZWQuXHJcbiAqIFxyXG4gKiBJZiB5b3UgY2FsbCB0aGlzIGZyb20gb3V0c2lkZSBvZiBgcHJlbG9hZGAgdGhlbiB5b3UgYXJlIHJlc3BvbnNpYmxlIGZvciBzdGFydGluZyB0aGUgTG9hZGVyIGFmdGVyd2FyZHMgYW5kIG1vbml0b3JpbmdcclxuICogaXRzIGV2ZW50cyB0byBrbm93IHdoZW4gaXQncyBzYWZlIHRvIHVzZSB0aGUgYXNzZXQuIFBsZWFzZSBzZWUgdGhlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luIGNsYXNzIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIFBoYXNlciBleHBlY3RzIHRoZSBhdGxhcyBkYXRhIHRvIGJlIHByb3ZpZGVkIGluIGEgSlNPTiBmaWxlIGFzIGV4cG9ydGVkIGZyb20gdGhlIGFwcGxpY2F0aW9uIFRleHR1cmUgUGFja2VyLFxyXG4gKiB2ZXJzaW9uIDQuNi4zIG9yIGFib3ZlLCB3aGVyZSB5b3UgaGF2ZSBtYWRlIHN1cmUgdG8gdXNlIHRoZSBQaGFzZXIgMyBFeHBvcnQgb3B0aW9uLlxyXG4gKlxyXG4gKiBUaGUgd2F5IGl0IHdvcmtzIGludGVybmFsbHkgaXMgdGhhdCB5b3UgcHJvdmlkZSBhIFVSTCB0byB0aGUgSlNPTiBmaWxlLiBQaGFzZXIgdGhlbiBsb2FkcyB0aGlzIEpTT04sIHBhcnNlcyBpdCBhbmRcclxuICogZXh0cmFjdHMgd2hpY2ggdGV4dHVyZSBmaWxlcyBpdCBhbHNvIG5lZWRzIHRvIGxvYWQgdG8gY29tcGxldGUgdGhlIHByb2Nlc3MuIElmIHRoZSBKU09OIGFsc28gZGVmaW5lcyBub3JtYWwgbWFwcyxcclxuICogUGhhc2VyIHdpbGwgbG9hZCB0aG9zZSBhcyB3ZWxsLlxyXG4gKiBcclxuICogVGhlIGtleSBtdXN0IGJlIGEgdW5pcXVlIFN0cmluZy4gSXQgaXMgdXNlZCB0byBhZGQgdGhlIGZpbGUgdG8gdGhlIGdsb2JhbCBUZXh0dXJlIE1hbmFnZXIgdXBvbiBhIHN1Y2Nlc3NmdWwgbG9hZC5cclxuICogVGhlIGtleSBzaG91bGQgYmUgdW5pcXVlIGJvdGggaW4gdGVybXMgb2YgZmlsZXMgYmVpbmcgbG9hZGVkIGFuZCBmaWxlcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICogTG9hZGluZyBhIGZpbGUgdXNpbmcgYSBrZXkgdGhhdCBpcyBhbHJlYWR5IHRha2VuIHdpbGwgcmVzdWx0IGluIGEgd2FybmluZy4gSWYgeW91IHdpc2ggdG8gcmVwbGFjZSBhbiBleGlzdGluZyBmaWxlXHJcbiAqIHRoZW4gcmVtb3ZlIGl0IGZyb20gdGhlIFRleHR1cmUgTWFuYWdlciBmaXJzdCwgYmVmb3JlIGxvYWRpbmcgYSBuZXcgb25lLlxyXG4gKlxyXG4gKiBJbnN0ZWFkIG9mIHBhc3NpbmcgYXJndW1lbnRzIHlvdSBjYW4gcGFzcyBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBzdWNoIGFzOlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQubXVsdGlhdGxhcyh7XHJcbiAqICAgICBrZXk6ICdsZXZlbDEnLFxyXG4gKiAgICAgYXRsYXNVUkw6ICdpbWFnZXMvTGV2ZWwxLmpzb24nXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgUGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuTXVsdGlBdGxhc0ZpbGVDb25maWdgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhIFVSTCBmb3IgdGhlIGF0bGFzIEpTT04gZGF0YSB5b3UgY2FuIGFsc28gcGFzcyBpbiBhIHdlbGwgZm9ybWVkIEpTT04gb2JqZWN0IGluc3RlYWQuXHJcbiAqXHJcbiAqIE9uY2UgdGhlIGF0bGFzIGhhcyBmaW5pc2hlZCBsb2FkaW5nIHlvdSBjYW4gdXNlIGZyYW1lcyBmcm9tIGl0IGFzIHRleHR1cmVzIGZvciBhIEdhbWUgT2JqZWN0IGJ5IHJlZmVyZW5jaW5nIGl0cyBrZXk6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5tdWx0aWF0bGFzKCdsZXZlbDEnLCAnaW1hZ2VzL0xldmVsMS5qc29uJyk7XHJcbiAqIC8vIGFuZCBsYXRlciBpbiB5b3VyIGdhbWUgLi4uXHJcbiAqIHRoaXMuYWRkLmltYWdlKHgsIHksICdsZXZlbDEnLCAnYmFja2dyb3VuZCcpO1xyXG4gKiBgYGBcclxuICpcclxuICogVG8gZ2V0IGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGZyYW1lcyB3aXRoaW4gYW4gYXRsYXMgcGxlYXNlIGNvbnN1bHQgeW91ciBUZXh0dXJlIEF0bGFzIHNvZnR3YXJlLlxyXG4gKlxyXG4gKiBJZiB5b3UgaGF2ZSBzcGVjaWZpZWQgYSBwcmVmaXggaW4gdGhlIGxvYWRlciwgdmlhIGBMb2FkZXIuc2V0UHJlZml4YCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhpcyBmaWxlc1xyXG4gKiBrZXkuIEZvciBleGFtcGxlLCBpZiB0aGUgcHJlZml4IHdhcyBgTUVOVS5gIGFuZCB0aGUga2V5IHdhcyBgQmFja2dyb3VuZGAgdGhlIGZpbmFsIGtleSB3aWxsIGJlIGBNRU5VLkJhY2tncm91bmRgIGFuZFxyXG4gKiB0aGlzIGlzIHdoYXQgeW91IHdvdWxkIHVzZSB0byByZXRyaWV2ZSB0aGUgaW1hZ2UgZnJvbSB0aGUgVGV4dHVyZSBNYW5hZ2VyLlxyXG4gKlxyXG4gKiBUaGUgVVJMIGNhbiBiZSByZWxhdGl2ZSBvciBhYnNvbHV0ZS4gSWYgdGhlIFVSTCBpcyByZWxhdGl2ZSB0aGUgYExvYWRlci5iYXNlVVJMYCBhbmQgYExvYWRlci5wYXRoYCB2YWx1ZXMgd2lsbCBiZSBwcmVwZW5kZWQgdG8gaXQuXHJcbiAqXHJcbiAqIElmIHRoZSBVUkwgaXNuJ3Qgc3BlY2lmaWVkIHRoZSBMb2FkZXIgd2lsbCB0YWtlIHRoZSBrZXkgYW5kIGNyZWF0ZSBhIGZpbGVuYW1lIGZyb20gdGhhdC4gRm9yIGV4YW1wbGUgaWYgdGhlIGtleSBpcyBcImFsaWVuXCJcclxuICogYW5kIG5vIFVSTCBpcyBnaXZlbiB0aGVuIHRoZSBMb2FkZXIgd2lsbCBzZXQgdGhlIFVSTCB0byBiZSBcImFsaWVuLnBuZ1wiLiBJdCB3aWxsIGFsd2F5cyBhZGQgYC5wbmdgIGFzIHRoZSBleHRlbnNpb24sIGFsdGhvdWdoXHJcbiAqIHRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gaWYgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgbWV0aG9kIGFyZ3VtZW50cy4gSWYgeW91IGRvIG5vdCBkZXNpcmUgdGhpcyBhY3Rpb24gdGhlbiBwcm92aWRlIGEgVVJMLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGUgYWJpbGl0eSB0byBsb2FkIHRoaXMgdHlwZSBvZiBmaWxlIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIE11bHRpIEF0bGFzIEZpbGUgdHlwZSBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogSXQgaXMgYXZhaWxhYmxlIGluIHRoZSBkZWZhdWx0IGJ1aWxkIGJ1dCBjYW4gYmUgZXhjbHVkZWQgZnJvbSBjdXN0b20gYnVpbGRzLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI211bHRpYXRsYXNcclxuICogQGZpcmVzIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2FkZEZpbGVFdmVudFxyXG4gKiBAc2luY2UgMy43LjBcclxuICpcclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLk11bHRpQXRsYXNGaWxlQ29uZmlnfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLk11bHRpQXRsYXNGaWxlQ29uZmlnW10pfSBrZXkgLSBUaGUga2V5IHRvIHVzZSBmb3IgdGhpcyBmaWxlLCBvciBhIGZpbGUgY29uZmlndXJhdGlvbiBvYmplY3QsIG9yIGFycmF5IG9mIHRoZW0uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXRsYXNVUkxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoZSB0ZXh0dXJlIGF0bGFzIGpzb24gZGF0YSBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+Lmpzb25gLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5qc29uXCIuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcGF0aF0gLSBPcHRpb25hbCBwYXRoIHRvIHVzZSB3aGVuIGxvYWRpbmcgdGhlIHRleHR1cmVzIGRlZmluZWQgaW4gdGhlIGF0bGFzIGRhdGEuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYmFzZVVSTF0gLSBPcHRpb25hbCBCYXNlIFVSTCB0byB1c2Ugd2hlbiBsb2FkaW5nIHRoZSB0ZXh0dXJlcyBkZWZpbmVkIGluIHRoZSBhdGxhcyBkYXRhLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFthdGxhc1hoclNldHRpbmdzXSAtIEFuIFhIUiBTZXR0aW5ncyBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhlIGF0bGFzIGpzb24gZmlsZS4gVXNlZCBpbiByZXBsYWNlbWVudCBvZiB0aGUgTG9hZGVycyBkZWZhdWx0IFhIUiBTZXR0aW5ncy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IFRoZSBMb2FkZXIgaW5zdGFuY2UuXHJcbiAqL1xyXG5GaWxlVHlwZXNNYW5hZ2VyLnJlZ2lzdGVyKCdtdWx0aWF0bGFzJywgZnVuY3Rpb24gKGtleSwgYXRsYXNVUkwsIHBhdGgsIGJhc2VVUkwsIGF0bGFzWGhyU2V0dGluZ3MpXHJcbntcclxuICAgIHZhciBtdWx0aWZpbGU7XHJcblxyXG4gICAgLy8gIFN1cHBvcnRzIGFuIE9iamVjdCBmaWxlIGRlZmluaXRpb24gaW4gdGhlIGtleSBhcmd1bWVudFxyXG4gICAgLy8gIE9yIGFuIGFycmF5IG9mIG9iamVjdHMgaW4gdGhlIGtleSBhcmd1bWVudFxyXG4gICAgLy8gIE9yIGEgc2luZ2xlIGVudHJ5IHdoZXJlIGFsbCBhcmd1bWVudHMgaGF2ZSBiZWVuIGRlZmluZWRcclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbXVsdGlmaWxlID0gbmV3IE11bHRpQXRsYXNGaWxlKHRoaXMsIGtleVtpXSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGUobXVsdGlmaWxlLmZpbGVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgbXVsdGlmaWxlID0gbmV3IE11bHRpQXRsYXNGaWxlKHRoaXMsIGtleSwgYXRsYXNVUkwsIHBhdGgsIGJhc2VVUkwsIGF0bGFzWGhyU2V0dGluZ3MpO1xyXG5cclxuICAgICAgICB0aGlzLmFkZEZpbGUobXVsdGlmaWxlLmZpbGVzKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE11bHRpQXRsYXNGaWxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/MultiAtlasFile.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/filetypes/MultiScriptFile.js":
/*!*********************************************************************!*\
!*** ./node_modules/phaser/src/loader/filetypes/MultiScriptFile.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\nvar MultiFile = __webpack_require__(/*! ../MultiFile.js */ \"./node_modules/phaser/src/loader/MultiFile.js\");\r\nvar ScriptFile = __webpack_require__(/*! ./ScriptFile.js */ \"./node_modules/phaser/src/loader/filetypes/ScriptFile.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A Multi Script File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#scripts method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#scripts.\r\n *\r\n * @class MultiScriptFile\r\n * @extends Phaser.Loader.MultiFile\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.17.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.MultiScriptFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string[]} [url] - An array of absolute or relative URLs to load the script files from. They are processed in the order given in the array.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object for the script files. Used in replacement of the Loaders default XHR Settings.\r\n */\r\nvar MultiScriptFile = new Class({\r\n\r\n Extends: MultiFile,\r\n\r\n initialize:\r\n\r\n function MultiScriptFile (loader, key, url, xhrSettings)\r\n {\r\n var extension = 'js';\r\n var files = [];\r\n\r\n if (IsPlainObject(key))\r\n {\r\n var config = key;\r\n\r\n key = GetFastValue(config, 'key');\r\n url = GetFastValue(config, 'url');\r\n xhrSettings = GetFastValue(config, 'xhrSettings');\r\n extension = GetFastValue(config, 'extension', extension);\r\n }\r\n\r\n if (!Array.isArray(url))\r\n {\r\n url = [ url ];\r\n }\r\n\r\n for (var i = 0; i < url.length; i++)\r\n {\r\n var scriptFile = new ScriptFile(loader, {\r\n key: key + '_' + i.toString(),\r\n url: url[i],\r\n extension: extension,\r\n xhrSettings: xhrSettings\r\n });\r\n\r\n // Override the default onProcess function\r\n scriptFile.onProcess = function ()\r\n {\r\n this.onProcessComplete();\r\n };\r\n\r\n files.push(scriptFile);\r\n }\r\n\r\n MultiFile.call(this, loader, 'scripts', key, files);\r\n },\r\n\r\n /**\r\n * Adds this file to its target cache upon successful loading and processing.\r\n *\r\n * @method Phaser.Loader.FileTypes.MultiScriptFile#addToCache\r\n * @since 3.17.0\r\n */\r\n addToCache: function ()\r\n {\r\n if (this.isReadyToProcess())\r\n {\r\n for (var i = 0; i < this.files.length; i++)\r\n {\r\n var file = this.files[i];\r\n\r\n file.data = document.createElement('script');\r\n file.data.language = 'javascript';\r\n file.data.type = 'text/javascript';\r\n file.data.defer = false;\r\n file.data.text = file.xhrLoader.responseText;\r\n \r\n document.head.appendChild(file.data);\r\n }\r\n\r\n this.complete = true;\r\n }\r\n }\r\n\r\n});\r\n\r\n/**\r\n * Adds an array of Script files to the current load queue.\r\n * \r\n * The difference between this and the `ScriptFile` file type is that you give an array of scripts to this method,\r\n * and the scripts are then processed _exactly_ in that order. This allows you to load a bunch of scripts that\r\n * may have dependencies on each other without worrying about the async nature of traditional script loading.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n * this.load.scripts('PostProcess', [\r\n * 'libs/shaders/CopyShader.js',\r\n * 'libs/postprocessing/EffectComposer.js',\r\n * 'libs/postprocessing/RenderPass.js',\r\n * 'libs/postprocessing/MaskPass.js',\r\n * 'libs/postprocessing/ShaderPass.js',\r\n * 'libs/postprocessing/AfterimagePass.js'\r\n * ]);\r\n * }\r\n * ```\r\n * \r\n * In the code above the script files will all be loaded in parallel but only processed (i.e. invoked) in the exact\r\n * order given in the array.\r\n *\r\n * The files are **not** loaded right away. They are added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the files are queued\r\n * it means you cannot use the files immediately after calling this method, but must wait for the files to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * The key must be a unique String and not already in-use by another file in the Loader.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.scripts({\r\n * key: 'PostProcess',\r\n * url: [\r\n * 'libs/shaders/CopyShader.js',\r\n * 'libs/postprocessing/EffectComposer.js',\r\n * 'libs/postprocessing/RenderPass.js',\r\n * 'libs/postprocessing/MaskPass.js',\r\n * 'libs/postprocessing/ShaderPass.js',\r\n * 'libs/postprocessing/AfterimagePass.js'\r\n * ]\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.MultiScriptFileConfig` for more details.\r\n *\r\n * Once all the files have finished loading they will automatically be converted into a script element\r\n * via `document.createElement('script')`. They will have their language set to JavaScript, `defer` set to\r\n * false and then the resulting element will be appended to `document.head`. Any code then in the\r\n * script will be executed. This is done in the exact order the files are specified in the url array.\r\n *\r\n * The URLs can be relative or absolute. If the URLs are relative the `Loader.baseURL` and `Loader.path` values will be prepended to them.\r\n *\r\n * Note: The ability to load this type of file will only be available if the MultiScript File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#scripts\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.17.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.MultiScriptFileConfig|Phaser.Types.Loader.FileTypes.MultiScriptFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string[]} [url] - An array of absolute or relative URLs to load the script files from. They are processed in the order given in the array.\r\n * @param {string} [extension='js'] - The default file extension to use if no url is provided.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for these files.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('scripts', function (key, url, xhrSettings)\r\n{\r\n var multifile;\r\n\r\n // Supports an Object file definition in the key argument\r\n // Or an array of objects in the key argument\r\n // Or a single entry where all arguments have been defined\r\n\r\n if (Array.isArray(key))\r\n {\r\n for (var i = 0; i < key.length; i++)\r\n {\r\n multifile = new MultiScriptFile(this, key[i]);\r\n\r\n this.addFile(multifile.files);\r\n }\r\n }\r\n else\r\n {\r\n multifile = new MultiScriptFile(this, key, url, xhrSettings);\r\n\r\n this.addFile(multifile.files);\r\n }\r\n\r\n return this;\r\n});\r\n\r\nmodule.exports = MultiScriptFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL011bHRpU2NyaXB0RmlsZS5qcz8xZTQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQSxZQUFZLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3ZDLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFxQjtBQUNwRCxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDNUQsb0JBQW9CLG1CQUFPLENBQUMsaUdBQWtDO0FBQzlELGdCQUFnQixtQkFBTyxDQUFDLHNFQUFpQjtBQUN6QyxpQkFBaUIsbUJBQU8sQ0FBQyxpRkFBaUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLDZEQUE2RDtBQUN4RSxXQUFXLFNBQVM7QUFDcEIsV0FBVyxzQ0FBc0M7QUFDakQ7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQix1QkFBdUI7QUFDbEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxtSEFBbUg7QUFDOUgsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsT0FBTztBQUNsQixXQUFXLHNDQUFzQztBQUNqRDtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCLGdCQUFnQjtBQUN2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9maWxldHlwZXMvTXVsdGlTY3JpcHRGaWxlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBhdXRob3IgICAgICAgUmljaGFyZCBEYXZleSA8cmljaEBwaG90b25zdG9ybS5jb20+XHJcbiAqIEBjb3B5cmlnaHQgICAgMjAxOSBQaG90b24gU3Rvcm0gTHRkLlxyXG4gKiBAbGljZW5zZSAgICAgIHtAbGluayBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVHxNSVQgTGljZW5zZX1cclxuICovXHJcblxyXG52YXIgQ2xhc3MgPSByZXF1aXJlKCcuLi8uLi91dGlscy9DbGFzcycpO1xyXG52YXIgRmlsZVR5cGVzTWFuYWdlciA9IHJlcXVpcmUoJy4uL0ZpbGVUeXBlc01hbmFnZXInKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIElzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvSXNQbGFpbk9iamVjdCcpO1xyXG52YXIgTXVsdGlGaWxlID0gcmVxdWlyZSgnLi4vTXVsdGlGaWxlLmpzJyk7XHJcbnZhciBTY3JpcHRGaWxlID0gcmVxdWlyZSgnLi9TY3JpcHRGaWxlLmpzJyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIE11bHRpIFNjcmlwdCBGaWxlIHN1aXRhYmxlIGZvciBsb2FkaW5nIGJ5IHRoZSBMb2FkZXIuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSBjcmVhdGVkIHdoZW4geW91IHVzZSB0aGUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jc2NyaXB0cyBtZXRob2QgYW5kIGFyZSBub3QgdHlwaWNhbGx5IGNyZWF0ZWQgZGlyZWN0bHkuXHJcbiAqIFxyXG4gKiBGb3IgZG9jdW1lbnRhdGlvbiBhYm91dCB3aGF0IGFsbCB0aGUgYXJndW1lbnRzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWVhbiBwbGVhc2Ugc2VlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3NjcmlwdHMuXHJcbiAqXHJcbiAqIEBjbGFzcyBNdWx0aVNjcmlwdEZpbGVcclxuICogQGV4dGVuZHMgUGhhc2VyLkxvYWRlci5NdWx0aUZpbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4xNy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IGxvYWRlciAtIEEgcmVmZXJlbmNlIHRvIHRoZSBMb2FkZXIgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgdGhpcyBmaWxlLlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuTXVsdGlTY3JpcHRGaWxlQ29uZmlnKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBbdXJsXSAtIEFuIGFycmF5IG9mIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTHMgdG8gbG9hZCB0aGUgc2NyaXB0IGZpbGVzIGZyb20uIFRoZXkgYXJlIHByb2Nlc3NlZCBpbiB0aGUgb3JkZXIgZ2l2ZW4gaW4gdGhlIGFycmF5LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt4aHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBzY3JpcHQgZmlsZXMuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqL1xyXG52YXIgTXVsdGlTY3JpcHRGaWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBNdWx0aUZpbGUsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICBmdW5jdGlvbiBNdWx0aVNjcmlwdEZpbGUgKGxvYWRlciwga2V5LCB1cmwsIHhoclNldHRpbmdzKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBleHRlbnNpb24gPSAnanMnO1xyXG4gICAgICAgIHZhciBmaWxlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGtleTtcclxuXHJcbiAgICAgICAgICAgIGtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdrZXknKTtcclxuICAgICAgICAgICAgdXJsID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3VybCcpO1xyXG4gICAgICAgICAgICB4aHJTZXR0aW5ncyA9IEdldEZhc3RWYWx1ZShjb25maWcsICd4aHJTZXR0aW5ncycpO1xyXG4gICAgICAgICAgICBleHRlbnNpb24gPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZXh0ZW5zaW9uJywgZXh0ZW5zaW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh1cmwpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdXJsID0gWyB1cmwgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXJsLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHNjcmlwdEZpbGUgPSBuZXcgU2NyaXB0RmlsZShsb2FkZXIsIHtcclxuICAgICAgICAgICAgICAgIGtleToga2V5ICsgJ18nICsgaS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgdXJsOiB1cmxbaV0sXHJcbiAgICAgICAgICAgICAgICBleHRlbnNpb246IGV4dGVuc2lvbixcclxuICAgICAgICAgICAgICAgIHhoclNldHRpbmdzOiB4aHJTZXR0aW5nc1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vICBPdmVycmlkZSB0aGUgZGVmYXVsdCBvblByb2Nlc3MgZnVuY3Rpb25cclxuICAgICAgICAgICAgc2NyaXB0RmlsZS5vblByb2Nlc3MgPSBmdW5jdGlvbiAoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uUHJvY2Vzc0NvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBmaWxlcy5wdXNoKHNjcmlwdEZpbGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTXVsdGlGaWxlLmNhbGwodGhpcywgbG9hZGVyLCAnc2NyaXB0cycsIGtleSwgZmlsZXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgdGhpcyBmaWxlIHRvIGl0cyB0YXJnZXQgY2FjaGUgdXBvbiBzdWNjZXNzZnVsIGxvYWRpbmcgYW5kIHByb2Nlc3NpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5NdWx0aVNjcmlwdEZpbGUjYWRkVG9DYWNoZVxyXG4gICAgICogQHNpbmNlIDMuMTcuMFxyXG4gICAgICovXHJcbiAgICBhZGRUb0NhY2hlOiBmdW5jdGlvbiAoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmlzUmVhZHlUb1Byb2Nlc3MoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5maWxlcy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIGZpbGUgPSB0aGlzLmZpbGVzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGZpbGUuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG4gICAgICAgICAgICAgICAgZmlsZS5kYXRhLmxhbmd1YWdlID0gJ2phdmFzY3JpcHQnO1xyXG4gICAgICAgICAgICAgICAgZmlsZS5kYXRhLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcclxuICAgICAgICAgICAgICAgIGZpbGUuZGF0YS5kZWZlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZmlsZS5kYXRhLnRleHQgPSBmaWxlLnhockxvYWRlci5yZXNwb25zZVRleHQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGZpbGUuZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuY29tcGxldGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgYW4gYXJyYXkgb2YgU2NyaXB0IGZpbGVzIHRvIHRoZSBjdXJyZW50IGxvYWQgcXVldWUuXHJcbiAqIFxyXG4gKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBgU2NyaXB0RmlsZWAgZmlsZSB0eXBlIGlzIHRoYXQgeW91IGdpdmUgYW4gYXJyYXkgb2Ygc2NyaXB0cyB0byB0aGlzIG1ldGhvZCxcclxuICogYW5kIHRoZSBzY3JpcHRzIGFyZSB0aGVuIHByb2Nlc3NlZCBfZXhhY3RseV8gaW4gdGhhdCBvcmRlci4gVGhpcyBhbGxvd3MgeW91IHRvIGxvYWQgYSBidW5jaCBvZiBzY3JpcHRzIHRoYXRcclxuICogbWF5IGhhdmUgZGVwZW5kZW5jaWVzIG9uIGVhY2ggb3RoZXIgd2l0aG91dCB3b3JyeWluZyBhYm91dCB0aGUgYXN5bmMgbmF0dXJlIG9mIHRyYWRpdGlvbmFsIHNjcmlwdCBsb2FkaW5nLlxyXG4gKlxyXG4gKiBZb3UgY2FuIGNhbGwgdGhpcyBtZXRob2QgZnJvbSB3aXRoaW4geW91ciBTY2VuZSdzIGBwcmVsb2FkYCwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZmlsZXMgeW91IHdpc2ggdG8gbG9hZDpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogZnVuY3Rpb24gcHJlbG9hZCAoKVxyXG4gKiB7XHJcbiAqICAgICB0aGlzLmxvYWQuc2NyaXB0cygnUG9zdFByb2Nlc3MnLCBbXHJcbiAqICAgICAgICAgJ2xpYnMvc2hhZGVycy9Db3B5U2hhZGVyLmpzJyxcclxuICogICAgICAgICAnbGlicy9wb3N0cHJvY2Vzc2luZy9FZmZlY3RDb21wb3Nlci5qcycsXHJcbiAqICAgICAgICAgJ2xpYnMvcG9zdHByb2Nlc3NpbmcvUmVuZGVyUGFzcy5qcycsXHJcbiAqICAgICAgICAgJ2xpYnMvcG9zdHByb2Nlc3NpbmcvTWFza1Bhc3MuanMnLFxyXG4gKiAgICAgICAgICdsaWJzL3Bvc3Rwcm9jZXNzaW5nL1NoYWRlclBhc3MuanMnLFxyXG4gKiAgICAgICAgICdsaWJzL3Bvc3Rwcm9jZXNzaW5nL0FmdGVyaW1hZ2VQYXNzLmpzJ1xyXG4gKiAgICBdKTtcclxuICogfVxyXG4gKiBgYGBcclxuICogXHJcbiAqIEluIHRoZSBjb2RlIGFib3ZlIHRoZSBzY3JpcHQgZmlsZXMgd2lsbCBhbGwgYmUgbG9hZGVkIGluIHBhcmFsbGVsIGJ1dCBvbmx5IHByb2Nlc3NlZCAoaS5lLiBpbnZva2VkKSBpbiB0aGUgZXhhY3RcclxuICogb3JkZXIgZ2l2ZW4gaW4gdGhlIGFycmF5LlxyXG4gKlxyXG4gKiBUaGUgZmlsZXMgYXJlICoqbm90KiogbG9hZGVkIHJpZ2h0IGF3YXkuIFRoZXkgYXJlIGFkZGVkIHRvIGEgcXVldWUgcmVhZHkgdG8gYmUgbG9hZGVkIGVpdGhlciB3aGVuIHRoZSBsb2FkZXIgc3RhcnRzLFxyXG4gKiBvciBpZiBpdCdzIGFscmVhZHkgcnVubmluZywgd2hlbiB0aGUgbmV4dCBmcmVlIGxvYWQgc2xvdCBiZWNvbWVzIGF2YWlsYWJsZS4gVGhpcyBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgaWYgeW91XHJcbiAqIGFyZSBjYWxsaW5nIHRoaXMgZnJvbSB3aXRoaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCwgb3IgYSByZWxhdGVkIGNhbGxiYWNrLiBCZWNhdXNlIHRoZSBmaWxlcyBhcmUgcXVldWVkXHJcbiAqIGl0IG1lYW5zIHlvdSBjYW5ub3QgdXNlIHRoZSBmaWxlcyBpbW1lZGlhdGVseSBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLCBidXQgbXVzdCB3YWl0IGZvciB0aGUgZmlsZXMgdG8gY29tcGxldGUuXHJcbiAqIFRoZSB0eXBpY2FsIGZsb3cgZm9yIGEgUGhhc2VyIFNjZW5lIGlzIHRoYXQgeW91IGxvYWQgYXNzZXRzIGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QgYW5kIHRoZW4gd2hlbiB0aGVcclxuICogU2NlbmUncyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aG9zZSBhc3NldHMgYXJlIHJlYWR5IGZvciB1c2UgYW5kIGhhdmUgYmVlblxyXG4gKiBsb2FkZWQuXHJcbiAqIFxyXG4gKiBUaGUga2V5IG11c3QgYmUgYSB1bmlxdWUgU3RyaW5nIGFuZCBub3QgYWxyZWFkeSBpbi11c2UgYnkgYW5vdGhlciBmaWxlIGluIHRoZSBMb2FkZXIuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhcmd1bWVudHMgeW91IGNhbiBwYXNzIGEgY29uZmlndXJhdGlvbiBvYmplY3QsIHN1Y2ggYXM6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5zY3JpcHRzKHtcclxuICogICAgIGtleTogJ1Bvc3RQcm9jZXNzJyxcclxuICogICAgIHVybDogW1xyXG4gKiAgICAgICAgICdsaWJzL3NoYWRlcnMvQ29weVNoYWRlci5qcycsXHJcbiAqICAgICAgICAgJ2xpYnMvcG9zdHByb2Nlc3NpbmcvRWZmZWN0Q29tcG9zZXIuanMnLFxyXG4gKiAgICAgICAgICdsaWJzL3Bvc3Rwcm9jZXNzaW5nL1JlbmRlclBhc3MuanMnLFxyXG4gKiAgICAgICAgICdsaWJzL3Bvc3Rwcm9jZXNzaW5nL01hc2tQYXNzLmpzJyxcclxuICogICAgICAgICAnbGlicy9wb3N0cHJvY2Vzc2luZy9TaGFkZXJQYXNzLmpzJyxcclxuICogICAgICAgICAnbGlicy9wb3N0cHJvY2Vzc2luZy9BZnRlcmltYWdlUGFzcy5qcydcclxuICogICAgICAgIF1cclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGBQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5NdWx0aVNjcmlwdEZpbGVDb25maWdgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIE9uY2UgYWxsIHRoZSBmaWxlcyBoYXZlIGZpbmlzaGVkIGxvYWRpbmcgdGhleSB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgY29udmVydGVkIGludG8gYSBzY3JpcHQgZWxlbWVudFxyXG4gKiB2aWEgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpYC4gVGhleSB3aWxsIGhhdmUgdGhlaXIgbGFuZ3VhZ2Ugc2V0IHRvIEphdmFTY3JpcHQsIGBkZWZlcmAgc2V0IHRvXHJcbiAqIGZhbHNlIGFuZCB0aGVuIHRoZSByZXN1bHRpbmcgZWxlbWVudCB3aWxsIGJlIGFwcGVuZGVkIHRvIGBkb2N1bWVudC5oZWFkYC4gQW55IGNvZGUgdGhlbiBpbiB0aGVcclxuICogc2NyaXB0IHdpbGwgYmUgZXhlY3V0ZWQuIFRoaXMgaXMgZG9uZSBpbiB0aGUgZXhhY3Qgb3JkZXIgdGhlIGZpbGVzIGFyZSBzcGVjaWZpZWQgaW4gdGhlIHVybCBhcnJheS5cclxuICpcclxuICogVGhlIFVSTHMgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlLiBJZiB0aGUgVVJMcyBhcmUgcmVsYXRpdmUgdGhlIGBMb2FkZXIuYmFzZVVSTGAgYW5kIGBMb2FkZXIucGF0aGAgdmFsdWVzIHdpbGwgYmUgcHJlcGVuZGVkIHRvIHRoZW0uXHJcbiAqXHJcbiAqIE5vdGU6IFRoZSBhYmlsaXR5IHRvIGxvYWQgdGhpcyB0eXBlIG9mIGZpbGUgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgTXVsdGlTY3JpcHQgRmlsZSB0eXBlIGhhcyBiZWVuIGJ1aWx0IGludG8gUGhhc2VyLlxyXG4gKiBJdCBpcyBhdmFpbGFibGUgaW4gdGhlIGRlZmF1bHQgYnVpbGQgYnV0IGNhbiBiZSBleGNsdWRlZCBmcm9tIGN1c3RvbSBidWlsZHMuXHJcbiAqXHJcbiAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jc2NyaXB0c1xyXG4gKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYWRkRmlsZUV2ZW50XHJcbiAqIEBzaW5jZSAzLjE3LjBcclxuICpcclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLk11bHRpU2NyaXB0RmlsZUNvbmZpZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5NdWx0aVNjcmlwdEZpbGVDb25maWdbXSl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdCwgb3IgYXJyYXkgb2YgdGhlbS5cclxuICogQHBhcmFtIHtzdHJpbmdbXX0gW3VybF0gLSBBbiBhcnJheSBvZiBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkxzIHRvIGxvYWQgdGhlIHNjcmlwdCBmaWxlcyBmcm9tLiBUaGV5IGFyZSBwcm9jZXNzZWQgaW4gdGhlIG9yZGVyIGdpdmVuIGluIHRoZSBhcnJheS5cclxuICogQHBhcmFtIHtzdHJpbmd9IFtleHRlbnNpb249J2pzJ10gLSBUaGUgZGVmYXVsdCBmaWxlIGV4dGVuc2lvbiB0byB1c2UgaWYgbm8gdXJsIGlzIHByb3ZpZGVkLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt4aHJTZXR0aW5nc10gLSBFeHRyYSBYSFIgU2V0dGluZ3Mgc3BlY2lmaWNhbGx5IGZvciB0aGVzZSBmaWxlcy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IFRoZSBMb2FkZXIgaW5zdGFuY2UuXHJcbiAqL1xyXG5GaWxlVHlwZXNNYW5hZ2VyLnJlZ2lzdGVyKCdzY3JpcHRzJywgZnVuY3Rpb24gKGtleSwgdXJsLCB4aHJTZXR0aW5ncylcclxue1xyXG4gICAgdmFyIG11bHRpZmlsZTtcclxuXHJcbiAgICAvLyAgU3VwcG9ydHMgYW4gT2JqZWN0IGZpbGUgZGVmaW5pdGlvbiBpbiB0aGUga2V5IGFyZ3VtZW50XHJcbiAgICAvLyAgT3IgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpbiB0aGUga2V5IGFyZ3VtZW50XHJcbiAgICAvLyAgT3IgYSBzaW5nbGUgZW50cnkgd2hlcmUgYWxsIGFyZ3VtZW50cyBoYXZlIGJlZW4gZGVmaW5lZFxyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXkubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBtdWx0aWZpbGUgPSBuZXcgTXVsdGlTY3JpcHRGaWxlKHRoaXMsIGtleVtpXSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGUobXVsdGlmaWxlLmZpbGVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgbXVsdGlmaWxlID0gbmV3IE11bHRpU2NyaXB0RmlsZSh0aGlzLCBrZXksIHVybCwgeGhyU2V0dGluZ3MpO1xyXG5cclxuICAgICAgICB0aGlzLmFkZEZpbGUobXVsdGlmaWxlLmZpbGVzKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE11bHRpU2NyaXB0RmlsZTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/MultiScriptFile.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/filetypes/PackFile.js":
/*!**************************************************************!*\
!*** ./node_modules/phaser/src/loader/filetypes/PackFile.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar JSONFile = __webpack_require__(/*! ./JSONFile.js */ \"./node_modules/phaser/src/loader/filetypes/JSONFile.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single JSON Pack File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#pack method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#pack.\r\n *\r\n * @class PackFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.7.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.PackFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.json`, i.e. if `key` was \"alien\" then the URL will be \"alien.json\".\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n * @param {string} [dataKey] - When the JSON file loads only this property will be stored in the Cache.\r\n */\r\nvar PackFile = new Class({\r\n\r\n Extends: JSONFile,\r\n\r\n initialize:\r\n\r\n // url can either be a string, in which case it is treated like a proper url, or an object, in which case it is treated as a ready-made JS Object\r\n // dataKey allows you to pluck a specific object out of the JSON and put just that into the cache, rather than the whole thing\r\n\r\n function PackFile (loader, key, url, xhrSettings, dataKey)\r\n {\r\n JSONFile.call(this, loader, key, url, xhrSettings, dataKey);\r\n\r\n this.type = 'packfile';\r\n },\r\n\r\n /**\r\n * Called automatically by Loader.nextFile.\r\n * This method controls what extra work this File does with its loaded data.\r\n *\r\n * @method Phaser.Loader.FileTypes.PackFile#onProcess\r\n * @since 3.7.0\r\n */\r\n onProcess: function ()\r\n {\r\n if (this.state !== CONST.FILE_POPULATED)\r\n {\r\n this.state = CONST.FILE_PROCESSING;\r\n\r\n this.data = JSON.parse(this.xhrLoader.responseText);\r\n }\r\n\r\n // Let's pass the pack file data over to the Loader ...\r\n this.loader.addPack(this.data, this.config);\r\n\r\n this.onProcessComplete();\r\n }\r\n\r\n});\r\n\r\n/**\r\n * Adds a JSON File Pack, or array of packs, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n * this.load.pack('level1', 'data/Level1Files.json');\r\n * }\r\n * ```\r\n *\r\n * A File Pack is a JSON file (or object) that contains details about other files that should be added into the Loader.\r\n * Here is a small example:\r\n *\r\n * ```json\r\n * { \r\n * \"test1\": {\r\n * \"files\": [\r\n * {\r\n * \"type\": \"image\",\r\n * \"key\": \"taikodrummaster\",\r\n * \"url\": \"assets/pics/taikodrummaster.jpg\"\r\n * },\r\n * {\r\n * \"type\": \"image\",\r\n * \"key\": \"sukasuka-chtholly\",\r\n * \"url\": \"assets/pics/sukasuka-chtholly.png\"\r\n * }\r\n * ]\r\n * },\r\n * \"meta\": {\r\n * \"generated\": \"1401380327373\",\r\n * \"app\": \"Phaser 3 Asset Packer\",\r\n * \"url\": \"https://phaser.io\",\r\n * \"version\": \"1.0\",\r\n * \"copyright\": \"Photon Storm Ltd. 2018\"\r\n * }\r\n * }\r\n * ```\r\n *\r\n * The pack can be split into sections. In the example above you'll see a section called `test1. You can tell\r\n * the `load.pack` method to parse only a particular section of a pack. The pack is stored in the JSON Cache,\r\n * so you can pass it to the Loader to process additional sections as needed in your game, or you can just load\r\n * them all at once without specifying anything.\r\n *\r\n * The pack file can contain an entry for any type of file that Phaser can load. The object structures exactly\r\n * match that of the file type configs, and all properties available within the file type configs can be used\r\n * in the pack file too.\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * If you call this from outside of `preload` then you are responsible for starting the Loader afterwards and monitoring\r\n * its events to know when it's safe to use the asset. Please see the Phaser.Loader.LoaderPlugin class for more details.\r\n * \r\n * The key must be a unique String. It is used to add the file to the global JSON Cache upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the JSON Cache.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the JSON Cache first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.pack({\r\n * key: 'level1',\r\n * url: 'data/Level1Files.json'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.PackFileConfig` for more details.\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `LEVEL1.` and the key was `Waves` the final key will be `LEVEL1.Waves` and\r\n * this is what you would use to retrieve the text from the JSON Cache.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"data\"\r\n * and no URL is given then the Loader will set the URL to be \"data.json\". It will always add `.json` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * You can also optionally provide a `dataKey` to use. This allows you to extract only a part of the JSON and store it in the Cache,\r\n * rather than the whole file. For example, if your JSON data had a structure like this:\r\n * \r\n * ```json\r\n * {\r\n * \"level1\": {\r\n * \"baddies\": {\r\n * \"aliens\": {},\r\n * \"boss\": {}\r\n * }\r\n * },\r\n * \"level2\": {},\r\n * \"level3\": {}\r\n * }\r\n * ```\r\n *\r\n * And you only wanted to store the `boss` data in the Cache, then you could pass `level1.baddies.boss`as the `dataKey`.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Pack File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#pack\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.7.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.PackFileConfig|Phaser.Types.Loader.FileTypes.PackFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.json`, i.e. if `key` was \"alien\" then the URL will be \"alien.json\".\r\n * @param {string} [dataKey] - When the JSON file loads only this property will be stored in the Cache.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('pack', function (key, url, packKey, xhrSettings)\r\n{\r\n // Supports an Object file definition in the key argument\r\n // Or an array of objects in the key argument\r\n // Or a single entry where all arguments have been defined\r\n\r\n if (Array.isArray(key))\r\n {\r\n for (var i = 0; i < key.length; i++)\r\n {\r\n this.addFile(new PackFile(this, key[i]));\r\n }\r\n }\r\n else\r\n {\r\n this.addFile(new PackFile(this, key, url, xhrSettings, packKey));\r\n }\r\n\r\n return this;\r\n});\r\n\r\nmodule.exports = PackFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL1BhY2tGaWxlLmpzPzhhMzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxtRUFBbUI7QUFDdkMsWUFBWSxtQkFBTyxDQUFDLDJEQUFVO0FBQzlCLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFxQjtBQUNwRCxlQUFlLG1CQUFPLENBQUMsNkVBQWU7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLHNEQUFzRDtBQUNqRSxXQUFXLE9BQU87QUFDbEIsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBLFFBQVE7QUFDUixtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFHQUFxRztBQUNoSCxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BoYXNlci9zcmMvbG9hZGVyL2ZpbGV0eXBlcy9QYWNrRmlsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcclxudmFyIEZpbGVUeXBlc01hbmFnZXIgPSByZXF1aXJlKCcuLi9GaWxlVHlwZXNNYW5hZ2VyJyk7XHJcbnZhciBKU09ORmlsZSA9IHJlcXVpcmUoJy4vSlNPTkZpbGUuanMnKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3NkZXNjXHJcbiAqIEEgc2luZ2xlIEpTT04gUGFjayBGaWxlIHN1aXRhYmxlIGZvciBsb2FkaW5nIGJ5IHRoZSBMb2FkZXIuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSBjcmVhdGVkIHdoZW4geW91IHVzZSB0aGUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jcGFjayBtZXRob2QgYW5kIGFyZSBub3QgdHlwaWNhbGx5IGNyZWF0ZWQgZGlyZWN0bHkuXHJcbiAqIFxyXG4gKiBGb3IgZG9jdW1lbnRhdGlvbiBhYm91dCB3aGF0IGFsbCB0aGUgYXJndW1lbnRzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWVhbiBwbGVhc2Ugc2VlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3BhY2suXHJcbiAqXHJcbiAqIEBjbGFzcyBQYWNrRmlsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLkZpbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy43LjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gbG9hZGVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIExvYWRlciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIGZpbGUuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5QYWNrRmlsZUNvbmZpZyl9IGtleSAtIFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIGZpbGUsIG9yIGEgZmlsZSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5qc29uYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4uanNvblwiLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt4aHJTZXR0aW5nc10gLSBFeHRyYSBYSFIgU2V0dGluZ3Mgc3BlY2lmaWNhbGx5IGZvciB0aGlzIGZpbGUuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YUtleV0gLSBXaGVuIHRoZSBKU09OIGZpbGUgbG9hZHMgb25seSB0aGlzIHByb3BlcnR5IHdpbGwgYmUgc3RvcmVkIGluIHRoZSBDYWNoZS5cclxuICovXHJcbnZhciBQYWNrRmlsZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogSlNPTkZpbGUsXHJcblxyXG4gICAgaW5pdGlhbGl6ZTpcclxuXHJcbiAgICAvLyAgdXJsIGNhbiBlaXRoZXIgYmUgYSBzdHJpbmcsIGluIHdoaWNoIGNhc2UgaXQgaXMgdHJlYXRlZCBsaWtlIGEgcHJvcGVyIHVybCwgb3IgYW4gb2JqZWN0LCBpbiB3aGljaCBjYXNlIGl0IGlzIHRyZWF0ZWQgYXMgYSByZWFkeS1tYWRlIEpTIE9iamVjdFxyXG4gICAgLy8gIGRhdGFLZXkgYWxsb3dzIHlvdSB0byBwbHVjayBhIHNwZWNpZmljIG9iamVjdCBvdXQgb2YgdGhlIEpTT04gYW5kIHB1dCBqdXN0IHRoYXQgaW50byB0aGUgY2FjaGUsIHJhdGhlciB0aGFuIHRoZSB3aG9sZSB0aGluZ1xyXG5cclxuICAgIGZ1bmN0aW9uIFBhY2tGaWxlIChsb2FkZXIsIGtleSwgdXJsLCB4aHJTZXR0aW5ncywgZGF0YUtleSlcclxuICAgIHtcclxuICAgICAgICBKU09ORmlsZS5jYWxsKHRoaXMsIGxvYWRlciwga2V5LCB1cmwsIHhoclNldHRpbmdzLCBkYXRhS2V5KTtcclxuXHJcbiAgICAgICAgdGhpcy50eXBlID0gJ3BhY2tmaWxlJztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSBieSBMb2FkZXIubmV4dEZpbGUuXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBjb250cm9scyB3aGF0IGV4dHJhIHdvcmsgdGhpcyBGaWxlIGRvZXMgd2l0aCBpdHMgbG9hZGVkIGRhdGEuXHJcbiAgICAgKlxyXG4gICAgICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkZpbGVUeXBlcy5QYWNrRmlsZSNvblByb2Nlc3NcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBvblByb2Nlc3M6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IENPTlNULkZJTEVfUE9QVUxBVEVEKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IENPTlNULkZJTEVfUFJPQ0VTU0lORztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UodGhpcy54aHJMb2FkZXIucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICBMZXQncyBwYXNzIHRoZSBwYWNrIGZpbGUgZGF0YSBvdmVyIHRvIHRoZSBMb2FkZXIgLi4uXHJcbiAgICAgICAgdGhpcy5sb2FkZXIuYWRkUGFjayh0aGlzLmRhdGEsIHRoaXMuY29uZmlnKTtcclxuXHJcbiAgICAgICAgdGhpcy5vblByb2Nlc3NDb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG4vKipcclxuICogQWRkcyBhIEpTT04gRmlsZSBQYWNrLCBvciBhcnJheSBvZiBwYWNrcywgdG8gdGhlIGN1cnJlbnQgbG9hZCBxdWV1ZS5cclxuICpcclxuICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIGZyb20gd2l0aGluIHlvdXIgU2NlbmUncyBgcHJlbG9hZGAsIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGVzIHlvdSB3aXNoIHRvIGxvYWQ6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGZ1bmN0aW9uIHByZWxvYWQgKClcclxuICoge1xyXG4gKiAgICAgdGhpcy5sb2FkLnBhY2soJ2xldmVsMScsICdkYXRhL0xldmVsMUZpbGVzLmpzb24nKTtcclxuICogfVxyXG4gKiBgYGBcclxuICpcclxuICogQSBGaWxlIFBhY2sgaXMgYSBKU09OIGZpbGUgKG9yIG9iamVjdCkgdGhhdCBjb250YWlucyBkZXRhaWxzIGFib3V0IG90aGVyIGZpbGVzIHRoYXQgc2hvdWxkIGJlIGFkZGVkIGludG8gdGhlIExvYWRlci5cclxuICogSGVyZSBpcyBhIHNtYWxsIGV4YW1wbGU6XHJcbiAqXHJcbiAqIGBgYGpzb25cclxuICogeyBcclxuICogICAgXCJ0ZXN0MVwiOiB7XHJcbiAqICAgICAgICBcImZpbGVzXCI6IFtcclxuICogICAgICAgICAgICB7XHJcbiAqICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImltYWdlXCIsXHJcbiAqICAgICAgICAgICAgICAgIFwia2V5XCI6IFwidGFpa29kcnVtbWFzdGVyXCIsXHJcbiAqICAgICAgICAgICAgICAgIFwidXJsXCI6IFwiYXNzZXRzL3BpY3MvdGFpa29kcnVtbWFzdGVyLmpwZ1wiXHJcbiAqICAgICAgICAgICAgfSxcclxuICogICAgICAgICAgICB7XHJcbiAqICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImltYWdlXCIsXHJcbiAqICAgICAgICAgICAgICAgIFwia2V5XCI6IFwic3VrYXN1a2EtY2h0aG9sbHlcIixcclxuICogICAgICAgICAgICAgICAgXCJ1cmxcIjogXCJhc3NldHMvcGljcy9zdWthc3VrYS1jaHRob2xseS5wbmdcIlxyXG4gKiAgICAgICAgICAgIH1cclxuICogICAgICAgIF1cclxuICogICAgfSxcclxuICogICAgXCJtZXRhXCI6IHtcclxuICogICAgICAgIFwiZ2VuZXJhdGVkXCI6IFwiMTQwMTM4MDMyNzM3M1wiLFxyXG4gKiAgICAgICAgXCJhcHBcIjogXCJQaGFzZXIgMyBBc3NldCBQYWNrZXJcIixcclxuICogICAgICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9waGFzZXIuaW9cIixcclxuICogICAgICAgIFwidmVyc2lvblwiOiBcIjEuMFwiLFxyXG4gKiAgICAgICAgXCJjb3B5cmlnaHRcIjogXCJQaG90b24gU3Rvcm0gTHRkLiAyMDE4XCJcclxuICogICAgfVxyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgcGFjayBjYW4gYmUgc3BsaXQgaW50byBzZWN0aW9ucy4gSW4gdGhlIGV4YW1wbGUgYWJvdmUgeW91J2xsIHNlZSBhIHNlY3Rpb24gY2FsbGVkIGB0ZXN0MS4gWW91IGNhbiB0ZWxsXHJcbiAqIHRoZSBgbG9hZC5wYWNrYCBtZXRob2QgdG8gcGFyc2Ugb25seSBhIHBhcnRpY3VsYXIgc2VjdGlvbiBvZiBhIHBhY2suIFRoZSBwYWNrIGlzIHN0b3JlZCBpbiB0aGUgSlNPTiBDYWNoZSxcclxuICogc28geW91IGNhbiBwYXNzIGl0IHRvIHRoZSBMb2FkZXIgdG8gcHJvY2VzcyBhZGRpdGlvbmFsIHNlY3Rpb25zIGFzIG5lZWRlZCBpbiB5b3VyIGdhbWUsIG9yIHlvdSBjYW4ganVzdCBsb2FkXHJcbiAqIHRoZW0gYWxsIGF0IG9uY2Ugd2l0aG91dCBzcGVjaWZ5aW5nIGFueXRoaW5nLlxyXG4gKlxyXG4gKiBUaGUgcGFjayBmaWxlIGNhbiBjb250YWluIGFuIGVudHJ5IGZvciBhbnkgdHlwZSBvZiBmaWxlIHRoYXQgUGhhc2VyIGNhbiBsb2FkLiBUaGUgb2JqZWN0IHN0cnVjdHVyZXMgZXhhY3RseVxyXG4gKiBtYXRjaCB0aGF0IG9mIHRoZSBmaWxlIHR5cGUgY29uZmlncywgYW5kIGFsbCBwcm9wZXJ0aWVzIGF2YWlsYWJsZSB3aXRoaW4gdGhlIGZpbGUgdHlwZSBjb25maWdzIGNhbiBiZSB1c2VkXHJcbiAqIGluIHRoZSBwYWNrIGZpbGUgdG9vLlxyXG4gKlxyXG4gKiBUaGUgZmlsZSBpcyAqKm5vdCoqIGxvYWRlZCByaWdodCBhd2F5LiBJdCBpcyBhZGRlZCB0byBhIHF1ZXVlIHJlYWR5IHRvIGJlIGxvYWRlZCBlaXRoZXIgd2hlbiB0aGUgbG9hZGVyIHN0YXJ0cyxcclxuICogb3IgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIHdoZW4gdGhlIG5leHQgZnJlZSBsb2FkIHNsb3QgYmVjb21lcyBhdmFpbGFibGUuIFRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGlmIHlvdVxyXG4gKiBhcmUgY2FsbGluZyB0aGlzIGZyb20gd2l0aGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QsIG9yIGEgcmVsYXRlZCBjYWxsYmFjay4gQmVjYXVzZSB0aGUgZmlsZSBpcyBxdWV1ZWRcclxuICogaXQgbWVhbnMgeW91IGNhbm5vdCB1c2UgdGhlIGZpbGUgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgYnV0IG11c3Qgd2FpdCBmb3IgdGhlIGZpbGUgdG8gY29tcGxldGUuXHJcbiAqIFRoZSB0eXBpY2FsIGZsb3cgZm9yIGEgUGhhc2VyIFNjZW5lIGlzIHRoYXQgeW91IGxvYWQgYXNzZXRzIGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QgYW5kIHRoZW4gd2hlbiB0aGVcclxuICogU2NlbmUncyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aG9zZSBhc3NldHMgYXJlIHJlYWR5IGZvciB1c2UgYW5kIGhhdmUgYmVlblxyXG4gKiBsb2FkZWQuXHJcbiAqIFxyXG4gKiBJZiB5b3UgY2FsbCB0aGlzIGZyb20gb3V0c2lkZSBvZiBgcHJlbG9hZGAgdGhlbiB5b3UgYXJlIHJlc3BvbnNpYmxlIGZvciBzdGFydGluZyB0aGUgTG9hZGVyIGFmdGVyd2FyZHMgYW5kIG1vbml0b3JpbmdcclxuICogaXRzIGV2ZW50cyB0byBrbm93IHdoZW4gaXQncyBzYWZlIHRvIHVzZSB0aGUgYXNzZXQuIFBsZWFzZSBzZWUgdGhlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luIGNsYXNzIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqIFxyXG4gKiBUaGUga2V5IG11c3QgYmUgYSB1bmlxdWUgU3RyaW5nLiBJdCBpcyB1c2VkIHRvIGFkZCB0aGUgZmlsZSB0byB0aGUgZ2xvYmFsIEpTT04gQ2FjaGUgdXBvbiBhIHN1Y2Nlc3NmdWwgbG9hZC5cclxuICogVGhlIGtleSBzaG91bGQgYmUgdW5pcXVlIGJvdGggaW4gdGVybXMgb2YgZmlsZXMgYmVpbmcgbG9hZGVkIGFuZCBmaWxlcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIEpTT04gQ2FjaGUuXHJcbiAqIExvYWRpbmcgYSBmaWxlIHVzaW5nIGEga2V5IHRoYXQgaXMgYWxyZWFkeSB0YWtlbiB3aWxsIHJlc3VsdCBpbiBhIHdhcm5pbmcuIElmIHlvdSB3aXNoIHRvIHJlcGxhY2UgYW4gZXhpc3RpbmcgZmlsZVxyXG4gKiB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBKU09OIENhY2hlIGZpcnN0LCBiZWZvcmUgbG9hZGluZyBhIG5ldyBvbmUuXHJcbiAqXHJcbiAqIEluc3RlYWQgb2YgcGFzc2luZyBhcmd1bWVudHMgeW91IGNhbiBwYXNzIGEgY29uZmlndXJhdGlvbiBvYmplY3QsIHN1Y2ggYXM6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIHRoaXMubG9hZC5wYWNrKHtcclxuICogICAgIGtleTogJ2xldmVsMScsXHJcbiAqICAgICB1cmw6ICdkYXRhL0xldmVsMUZpbGVzLmpzb24nXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgUGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuUGFja0ZpbGVDb25maWdgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAqXHJcbiAqIElmIHlvdSBoYXZlIHNwZWNpZmllZCBhIHByZWZpeCBpbiB0aGUgbG9hZGVyLCB2aWEgYExvYWRlci5zZXRQcmVmaXhgIHRoZW4gdGhpcyB2YWx1ZSB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGlzIGZpbGVzXHJcbiAqIGtleS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBwcmVmaXggd2FzIGBMRVZFTDEuYCBhbmQgdGhlIGtleSB3YXMgYFdhdmVzYCB0aGUgZmluYWwga2V5IHdpbGwgYmUgYExFVkVMMS5XYXZlc2AgYW5kXHJcbiAqIHRoaXMgaXMgd2hhdCB5b3Ugd291bGQgdXNlIHRvIHJldHJpZXZlIHRoZSB0ZXh0IGZyb20gdGhlIEpTT04gQ2FjaGUuXHJcbiAqXHJcbiAqIFRoZSBVUkwgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlLiBJZiB0aGUgVVJMIGlzIHJlbGF0aXZlIHRoZSBgTG9hZGVyLmJhc2VVUkxgIGFuZCBgTG9hZGVyLnBhdGhgIHZhbHVlcyB3aWxsIGJlIHByZXBlbmRlZCB0byBpdC5cclxuICpcclxuICogSWYgdGhlIFVSTCBpc24ndCBzcGVjaWZpZWQgdGhlIExvYWRlciB3aWxsIHRha2UgdGhlIGtleSBhbmQgY3JlYXRlIGEgZmlsZW5hbWUgZnJvbSB0aGF0LiBGb3IgZXhhbXBsZSBpZiB0aGUga2V5IGlzIFwiZGF0YVwiXHJcbiAqIGFuZCBubyBVUkwgaXMgZ2l2ZW4gdGhlbiB0aGUgTG9hZGVyIHdpbGwgc2V0IHRoZSBVUkwgdG8gYmUgXCJkYXRhLmpzb25cIi4gSXQgd2lsbCBhbHdheXMgYWRkIGAuanNvbmAgYXMgdGhlIGV4dGVuc2lvbiwgYWx0aG91Z2hcclxuICogdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBpZiB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBtZXRob2QgYXJndW1lbnRzLiBJZiB5b3UgZG8gbm90IGRlc2lyZSB0aGlzIGFjdGlvbiB0aGVuIHByb3ZpZGUgYSBVUkwuXHJcbiAqXHJcbiAqIFlvdSBjYW4gYWxzbyBvcHRpb25hbGx5IHByb3ZpZGUgYSBgZGF0YUtleWAgdG8gdXNlLiBUaGlzIGFsbG93cyB5b3UgdG8gZXh0cmFjdCBvbmx5IGEgcGFydCBvZiB0aGUgSlNPTiBhbmQgc3RvcmUgaXQgaW4gdGhlIENhY2hlLFxyXG4gKiByYXRoZXIgdGhhbiB0aGUgd2hvbGUgZmlsZS4gRm9yIGV4YW1wbGUsIGlmIHlvdXIgSlNPTiBkYXRhIGhhZCBhIHN0cnVjdHVyZSBsaWtlIHRoaXM6XHJcbiAqIFxyXG4gKiBgYGBqc29uXHJcbiAqIHtcclxuICogICAgIFwibGV2ZWwxXCI6IHtcclxuICogICAgICAgICBcImJhZGRpZXNcIjoge1xyXG4gKiAgICAgICAgICAgICBcImFsaWVuc1wiOiB7fSxcclxuICogICAgICAgICAgICAgXCJib3NzXCI6IHt9XHJcbiAqICAgICAgICAgfVxyXG4gKiAgICAgfSxcclxuICogICAgIFwibGV2ZWwyXCI6IHt9LFxyXG4gKiAgICAgXCJsZXZlbDNcIjoge31cclxuICogfVxyXG4gKiBgYGBcclxuICpcclxuICogQW5kIHlvdSBvbmx5IHdhbnRlZCB0byBzdG9yZSB0aGUgYGJvc3NgIGRhdGEgaW4gdGhlIENhY2hlLCB0aGVuIHlvdSBjb3VsZCBwYXNzIGBsZXZlbDEuYmFkZGllcy5ib3NzYGFzIHRoZSBgZGF0YUtleWAuXHJcbiAqXHJcbiAqIE5vdGU6IFRoZSBhYmlsaXR5IHRvIGxvYWQgdGhpcyB0eXBlIG9mIGZpbGUgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgUGFjayBGaWxlIHR5cGUgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIEl0IGlzIGF2YWlsYWJsZSBpbiB0aGUgZGVmYXVsdCBidWlsZCBidXQgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gY3VzdG9tIGJ1aWxkcy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNwYWNrXHJcbiAqIEBmaXJlcyBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNhZGRGaWxlRXZlbnRcclxuICogQHNpbmNlIDMuNy4wXHJcbiAqXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5QYWNrRmlsZUNvbmZpZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5QYWNrRmlsZUNvbmZpZ1tdKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhcnJheSBvZiB0aGVtLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhpcyBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+Lmpzb25gLCBpLmUuIGlmIGBrZXlgIHdhcyBcImFsaWVuXCIgdGhlbiB0aGUgVVJMIHdpbGwgYmUgXCJhbGllbi5qc29uXCIuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YUtleV0gLSBXaGVuIHRoZSBKU09OIGZpbGUgbG9hZHMgb25seSB0aGlzIHByb3BlcnR5IHdpbGwgYmUgc3RvcmVkIGluIHRoZSBDYWNoZS5cclxuICogQHBhcmFtIHtQaGFzZXIuVHlwZXMuTG9hZGVyLlhIUlNldHRpbmdzT2JqZWN0fSBbeGhyU2V0dGluZ3NdIC0gQW4gWEhSIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LiBVc2VkIGluIHJlcGxhY2VtZW50IG9mIHRoZSBMb2FkZXJzIGRlZmF1bHQgWEhSIFNldHRpbmdzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gVGhlIExvYWRlciBpbnN0YW5jZS5cclxuICovXHJcbkZpbGVUeXBlc01hbmFnZXIucmVnaXN0ZXIoJ3BhY2snLCBmdW5jdGlvbiAoa2V5LCB1cmwsIHBhY2tLZXksIHhoclNldHRpbmdzKVxyXG57XHJcbiAgICAvLyAgU3VwcG9ydHMgYW4gT2JqZWN0IGZpbGUgZGVmaW5pdGlvbiBpbiB0aGUga2V5IGFyZ3VtZW50XHJcbiAgICAvLyAgT3IgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpbiB0aGUga2V5IGFyZ3VtZW50XHJcbiAgICAvLyAgT3IgYSBzaW5nbGUgZW50cnkgd2hlcmUgYWxsIGFyZ3VtZW50cyBoYXZlIGJlZW4gZGVmaW5lZFxyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXkubGVuZ3RoOyBpKyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGUobmV3IFBhY2tGaWxlKHRoaXMsIGtleVtpXSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgICAgICB0aGlzLmFkZEZpbGUobmV3IFBhY2tGaWxlKHRoaXMsIGtleSwgdXJsLCB4aHJTZXR0aW5ncywgcGFja0tleSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGFja0ZpbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/PackFile.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/filetypes/PluginFile.js":
/*!****************************************************************!*\
!*** ./node_modules/phaser/src/loader/filetypes/PluginFile.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single Plugin Script File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#plugin method and are not typically created directly.\r\n * \r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#plugin.\r\n *\r\n * @class PluginFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.PluginFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.js`, i.e. if `key` was \"alien\" then the URL will be \"alien.js\".\r\n * @param {boolean} [start=false] - Automatically start the plugin after loading?\r\n * @param {string} [mapping] - If this plugin is to be injected into the Scene, this is the property key used.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n */\r\nvar PluginFile = new Class({\r\n\r\n Extends: File,\r\n\r\n initialize:\r\n\r\n function PluginFile (loader, key, url, start, mapping, xhrSettings)\r\n {\r\n var extension = 'js';\r\n\r\n if (IsPlainObject(key))\r\n {\r\n var config = key;\r\n\r\n key = GetFastValue(config, 'key');\r\n url = GetFastValue(config, 'url');\r\n xhrSettings = GetFastValue(config, 'xhrSettings');\r\n extension = GetFastValue(config, 'extension', extension);\r\n start = GetFastValue(config, 'start');\r\n mapping = GetFastValue(config, 'mapping');\r\n }\r\n\r\n var fileConfig = {\r\n type: 'plugin',\r\n cache: false,\r\n extension: extension,\r\n responseType: 'text',\r\n key: key,\r\n url: url,\r\n xhrSettings: xhrSettings,\r\n config: {\r\n start: start,\r\n mapping: mapping\r\n }\r\n };\r\n\r\n File.call(this, loader, fileConfig);\r\n\r\n // If the url variable refers to a class, add the plugin directly\r\n if (typeof url === 'function')\r\n {\r\n this.data = url;\r\n\r\n this.state = CONST.FILE_POPULATED;\r\n }\r\n },\r\n\r\n /**\r\n * Called automatically by Loader.nextFile.\r\n * This method controls what extra work this File does with its loaded data.\r\n *\r\n * @method Phaser.Loader.FileTypes.PluginFile#onProcess\r\n * @since 3.7.0\r\n */\r\n onProcess: function ()\r\n {\r\n var pluginManager = this.loader.systems.plugins;\r\n var config = this.config;\r\n\r\n var start = GetFastValue(config, 'start', false);\r\n var mapping = GetFastValue(config, 'mapping', null);\r\n\r\n if (this.state === CONST.FILE_POPULATED)\r\n {\r\n pluginManager.install(this.key, this.data, start, mapping);\r\n }\r\n else\r\n {\r\n // Plugin added via a js file\r\n this.state = CONST.FILE_PROCESSING;\r\n\r\n this.data = document.createElement('script');\r\n this.data.language = 'javascript';\r\n this.data.type = 'text/javascript';\r\n this.data.defer = false;\r\n this.data.text = this.xhrLoader.responseText;\r\n\r\n document.head.appendChild(this.data);\r\n\r\n var plugin = pluginManager.install(this.key, window[this.key], start, mapping);\r\n\r\n if (start || mapping)\r\n {\r\n // Install into the current Scene Systems and Scene\r\n this.loader.systems[mapping] = plugin;\r\n this.loader.scene[mapping] = plugin;\r\n }\r\n }\r\n\r\n this.onProcessComplete();\r\n }\r\n\r\n});\r\n\r\n/**\r\n * Adds a Plugin Script file, or array of plugin files, to the current load queue.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n * this.load.plugin('modplayer', 'plugins/ModPlayer.js');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n * \r\n * The key must be a unique String and not already in-use by another file in the Loader.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n * \r\n * ```javascript\r\n * this.load.plugin({\r\n * key: 'modplayer',\r\n * url: 'plugins/ModPlayer.js'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.PluginFileConfig` for more details.\r\n *\r\n * Once the file has finished loading it will automatically be converted into a script element\r\n * via `document.createElement('script')`. It will have its language set to JavaScript, `defer` set to\r\n * false and then the resulting element will be appended to `document.head`. Any code then in the\r\n * script will be executed. It will then be passed to the Phaser PluginCache.register method.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"alien\"\r\n * and no URL is given then the Loader will set the URL to be \"alien.js\". It will always add `.js` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n *\r\n * Note: The ability to load this type of file will only be available if the Plugin File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#plugin\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.PluginFileConfig|Phaser.Types.Loader.FileTypes.PluginFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {(string|function)} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.js`, i.e. if `key` was \"alien\" then the URL will be \"alien.js\". Or, a plugin function.\r\n * @param {boolean} [start] - Automatically start the plugin after loading?\r\n * @param {string} [mapping] - If this plugin is to be injected into the Scene, this is the property key used.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('plugin', function (key, url, start, mapping, xhrSettings)\r\n{\r\n if (Array.isArray(key))\r\n {\r\n for (var i = 0; i < key.length; i++)\r\n {\r\n // If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n this.addFile(new PluginFile(this, key[i]));\r\n }\r\n }\r\n else\r\n {\r\n this.addFile(new PluginFile(this, key, url, start, mapping, xhrSettings));\r\n }\r\n\r\n return this;\r\n});\r\n\r\nmodule.exports = PluginFile;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL1BsdWdpbkZpbGUuanM/N2IyYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxZQUFZLG1CQUFPLENBQUMsMkRBQVU7QUFDOUIsV0FBVyxtQkFBTyxDQUFDLHlEQUFTO0FBQzVCLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFxQjtBQUNwRCxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDNUQsb0JBQW9CLG1CQUFPLENBQUMsaUdBQWtDOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyx3REFBd0Q7QUFDbkUsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEIsV0FBVyxzQ0FBc0M7QUFDakQ7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5R0FBeUc7QUFDcEgsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQixXQUFXLHNDQUFzQztBQUNqRDtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL1BsdWdpbkZpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGF1dGhvciAgICAgICBSaWNoYXJkIERhdmV5IDxyaWNoQHBob3RvbnN0b3JtLmNvbT5cclxuICogQGNvcHlyaWdodCAgICAyMDE5IFBob3RvbiBTdG9ybSBMdGQuXHJcbiAqIEBsaWNlbnNlICAgICAge0BsaW5rIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUfE1JVCBMaWNlbnNlfVxyXG4gKi9cclxuXHJcbnZhciBDbGFzcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL0NsYXNzJyk7XHJcbnZhciBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XHJcbnZhciBGaWxlID0gcmVxdWlyZSgnLi4vRmlsZScpO1xyXG52YXIgRmlsZVR5cGVzTWFuYWdlciA9IHJlcXVpcmUoJy4uL0ZpbGVUeXBlc01hbmFnZXInKTtcclxudmFyIEdldEZhc3RWYWx1ZSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9HZXRGYXN0VmFsdWUnKTtcclxudmFyIElzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QvSXNQbGFpbk9iamVjdCcpO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzc2Rlc2NcclxuICogQSBzaW5nbGUgUGx1Z2luIFNjcmlwdCBGaWxlIHN1aXRhYmxlIGZvciBsb2FkaW5nIGJ5IHRoZSBMb2FkZXIuXHJcbiAqXHJcbiAqIFRoZXNlIGFyZSBjcmVhdGVkIHdoZW4geW91IHVzZSB0aGUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jcGx1Z2luIG1ldGhvZCBhbmQgYXJlIG5vdCB0eXBpY2FsbHkgY3JlYXRlZCBkaXJlY3RseS5cclxuICogXHJcbiAqIEZvciBkb2N1bWVudGF0aW9uIGFib3V0IHdoYXQgYWxsIHRoZSBhcmd1bWVudHMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtZWFuIHBsZWFzZSBzZWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jcGx1Z2luLlxyXG4gKlxyXG4gKiBAY2xhc3MgUGx1Z2luRmlsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLkZpbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gbG9hZGVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIExvYWRlciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIGZpbGUuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5QbHVnaW5GaWxlQ29uZmlnKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhpcyBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+LmpzYCwgaS5lLiBpZiBga2V5YCB3YXMgXCJhbGllblwiIHRoZW4gdGhlIFVSTCB3aWxsIGJlIFwiYWxpZW4uanNcIi5cclxuICogQHBhcmFtIHtib29sZWFufSBbc3RhcnQ9ZmFsc2VdIC0gQXV0b21hdGljYWxseSBzdGFydCB0aGUgcGx1Z2luIGFmdGVyIGxvYWRpbmc/XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWFwcGluZ10gLSBJZiB0aGlzIHBsdWdpbiBpcyB0byBiZSBpbmplY3RlZCBpbnRvIHRoZSBTY2VuZSwgdGhpcyBpcyB0aGUgcHJvcGVydHkga2V5IHVzZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEV4dHJhIFhIUiBTZXR0aW5ncyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgZmlsZS5cclxuICovXHJcbnZhciBQbHVnaW5GaWxlID0gbmV3IENsYXNzKHtcclxuXHJcbiAgICBFeHRlbmRzOiBGaWxlLFxyXG5cclxuICAgIGluaXRpYWxpemU6XHJcblxyXG4gICAgZnVuY3Rpb24gUGx1Z2luRmlsZSAobG9hZGVyLCBrZXksIHVybCwgc3RhcnQsIG1hcHBpbmcsIHhoclNldHRpbmdzKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBleHRlbnNpb24gPSAnanMnO1xyXG5cclxuICAgICAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGtleTtcclxuXHJcbiAgICAgICAgICAgIGtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdrZXknKTtcclxuICAgICAgICAgICAgdXJsID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3VybCcpO1xyXG4gICAgICAgICAgICB4aHJTZXR0aW5ncyA9IEdldEZhc3RWYWx1ZShjb25maWcsICd4aHJTZXR0aW5ncycpO1xyXG4gICAgICAgICAgICBleHRlbnNpb24gPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZXh0ZW5zaW9uJywgZXh0ZW5zaW9uKTtcclxuICAgICAgICAgICAgc3RhcnQgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnc3RhcnQnKTtcclxuICAgICAgICAgICAgbWFwcGluZyA9IEdldEZhc3RWYWx1ZShjb25maWcsICdtYXBwaW5nJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZmlsZUNvbmZpZyA9IHtcclxuICAgICAgICAgICAgdHlwZTogJ3BsdWdpbicsXHJcbiAgICAgICAgICAgIGNhY2hlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXh0ZW5zaW9uOiBleHRlbnNpb24sXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxyXG4gICAgICAgICAgICBrZXk6IGtleSxcclxuICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHhoclNldHRpbmdzOiB4aHJTZXR0aW5ncyxcclxuICAgICAgICAgICAgY29uZmlnOiB7XHJcbiAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsXHJcbiAgICAgICAgICAgICAgICBtYXBwaW5nOiBtYXBwaW5nXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBGaWxlLmNhbGwodGhpcywgbG9hZGVyLCBmaWxlQ29uZmlnKTtcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIHVybCB2YXJpYWJsZSByZWZlcnMgdG8gYSBjbGFzcywgYWRkIHRoZSBwbHVnaW4gZGlyZWN0bHlcclxuICAgICAgICBpZiAodHlwZW9mIHVybCA9PT0gJ2Z1bmN0aW9uJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHVybDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBDT05TVC5GSUxFX1BPUFVMQVRFRDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgTG9hZGVyLm5leHRGaWxlLlxyXG4gICAgICogVGhpcyBtZXRob2QgY29udHJvbHMgd2hhdCBleHRyYSB3b3JrIHRoaXMgRmlsZSBkb2VzIHdpdGggaXRzIGxvYWRlZCBkYXRhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuUGx1Z2luRmlsZSNvblByb2Nlc3NcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBvblByb2Nlc3M6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIHBsdWdpbk1hbmFnZXIgPSB0aGlzLmxvYWRlci5zeXN0ZW1zLnBsdWdpbnM7XHJcbiAgICAgICAgdmFyIGNvbmZpZyA9IHRoaXMuY29uZmlnO1xyXG5cclxuICAgICAgICB2YXIgc3RhcnQgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnc3RhcnQnLCBmYWxzZSk7XHJcbiAgICAgICAgdmFyIG1hcHBpbmcgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnbWFwcGluZycsIG51bGwpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gQ09OU1QuRklMRV9QT1BVTEFURUQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwbHVnaW5NYW5hZ2VyLmluc3RhbGwodGhpcy5rZXksIHRoaXMuZGF0YSwgc3RhcnQsIG1hcHBpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgUGx1Z2luIGFkZGVkIHZpYSBhIGpzIGZpbGVcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IENPTlNULkZJTEVfUFJPQ0VTU0lORztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEubGFuZ3VhZ2UgPSAnamF2YXNjcmlwdCc7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YS50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YS5kZWZlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEudGV4dCA9IHRoaXMueGhyTG9hZGVyLnJlc3BvbnNlVGV4dDtcclxuXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodGhpcy5kYXRhKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwbHVnaW4gPSBwbHVnaW5NYW5hZ2VyLmluc3RhbGwodGhpcy5rZXksIHdpbmRvd1t0aGlzLmtleV0sIHN0YXJ0LCBtYXBwaW5nKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzdGFydCB8fCBtYXBwaW5nKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgSW5zdGFsbCBpbnRvIHRoZSBjdXJyZW50IFNjZW5lIFN5c3RlbXMgYW5kIFNjZW5lXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRlci5zeXN0ZW1zW21hcHBpbmddID0gcGx1Z2luO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZXIuc2NlbmVbbWFwcGluZ10gPSBwbHVnaW47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub25Qcm9jZXNzQ29tcGxldGUoKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgYSBQbHVnaW4gU2NyaXB0IGZpbGUsIG9yIGFycmF5IG9mIHBsdWdpbiBmaWxlcywgdG8gdGhlIGN1cnJlbnQgbG9hZCBxdWV1ZS5cclxuICpcclxuICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIGZyb20gd2l0aGluIHlvdXIgU2NlbmUncyBgcHJlbG9hZGAsIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGVzIHlvdSB3aXNoIHRvIGxvYWQ6XHJcbiAqIFxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGZ1bmN0aW9uIHByZWxvYWQgKClcclxuICoge1xyXG4gKiAgICAgdGhpcy5sb2FkLnBsdWdpbignbW9kcGxheWVyJywgJ3BsdWdpbnMvTW9kUGxheWVyLmpzJyk7XHJcbiAqIH1cclxuICogYGBgXHJcbiAqXHJcbiAqIFRoZSBmaWxlIGlzICoqbm90KiogbG9hZGVkIHJpZ2h0IGF3YXkuIEl0IGlzIGFkZGVkIHRvIGEgcXVldWUgcmVhZHkgdG8gYmUgbG9hZGVkIGVpdGhlciB3aGVuIHRoZSBsb2FkZXIgc3RhcnRzLFxyXG4gKiBvciBpZiBpdCdzIGFscmVhZHkgcnVubmluZywgd2hlbiB0aGUgbmV4dCBmcmVlIGxvYWQgc2xvdCBiZWNvbWVzIGF2YWlsYWJsZS4gVGhpcyBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgaWYgeW91XHJcbiAqIGFyZSBjYWxsaW5nIHRoaXMgZnJvbSB3aXRoaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCwgb3IgYSByZWxhdGVkIGNhbGxiYWNrLiBCZWNhdXNlIHRoZSBmaWxlIGlzIHF1ZXVlZFxyXG4gKiBpdCBtZWFucyB5b3UgY2Fubm90IHVzZSB0aGUgZmlsZSBpbW1lZGlhdGVseSBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLCBidXQgbXVzdCB3YWl0IGZvciB0aGUgZmlsZSB0byBjb21wbGV0ZS5cclxuICogVGhlIHR5cGljYWwgZmxvdyBmb3IgYSBQaGFzZXIgU2NlbmUgaXMgdGhhdCB5b3UgbG9hZCBhc3NldHMgaW4gdGhlIFNjZW5lJ3MgYHByZWxvYWRgIG1ldGhvZCBhbmQgdGhlbiB3aGVuIHRoZVxyXG4gKiBTY2VuZSdzIGBjcmVhdGVgIG1ldGhvZCBpcyBjYWxsZWQgeW91IGFyZSBndWFyYW50ZWVkIHRoYXQgYWxsIG9mIHRob3NlIGFzc2V0cyBhcmUgcmVhZHkgZm9yIHVzZSBhbmQgaGF2ZSBiZWVuXHJcbiAqIGxvYWRlZC5cclxuICogXHJcbiAqIFRoZSBrZXkgbXVzdCBiZSBhIHVuaXF1ZSBTdHJpbmcgYW5kIG5vdCBhbHJlYWR5IGluLXVzZSBieSBhbm90aGVyIGZpbGUgaW4gdGhlIExvYWRlci5cclxuICpcclxuICogSW5zdGVhZCBvZiBwYXNzaW5nIGFyZ3VtZW50cyB5b3UgY2FuIHBhc3MgYSBjb25maWd1cmF0aW9uIG9iamVjdCwgc3VjaCBhczpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLnBsdWdpbih7XHJcbiAqICAgICBrZXk6ICdtb2RwbGF5ZXInLFxyXG4gKiAgICAgdXJsOiAncGx1Z2lucy9Nb2RQbGF5ZXIuanMnXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgUGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuUGx1Z2luRmlsZUNvbmZpZ2AgZm9yIG1vcmUgZGV0YWlscy5cclxuICpcclxuICogT25jZSB0aGUgZmlsZSBoYXMgZmluaXNoZWQgbG9hZGluZyBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgY29udmVydGVkIGludG8gYSBzY3JpcHQgZWxlbWVudFxyXG4gKiB2aWEgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpYC4gSXQgd2lsbCBoYXZlIGl0cyBsYW5ndWFnZSBzZXQgdG8gSmF2YVNjcmlwdCwgYGRlZmVyYCBzZXQgdG9cclxuICogZmFsc2UgYW5kIHRoZW4gdGhlIHJlc3VsdGluZyBlbGVtZW50IHdpbGwgYmUgYXBwZW5kZWQgdG8gYGRvY3VtZW50LmhlYWRgLiBBbnkgY29kZSB0aGVuIGluIHRoZVxyXG4gKiBzY3JpcHQgd2lsbCBiZSBleGVjdXRlZC4gSXQgd2lsbCB0aGVuIGJlIHBhc3NlZCB0byB0aGUgUGhhc2VyIFBsdWdpbkNhY2hlLnJlZ2lzdGVyIG1ldGhvZC5cclxuICpcclxuICogVGhlIFVSTCBjYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUuIElmIHRoZSBVUkwgaXMgcmVsYXRpdmUgdGhlIGBMb2FkZXIuYmFzZVVSTGAgYW5kIGBMb2FkZXIucGF0aGAgdmFsdWVzIHdpbGwgYmUgcHJlcGVuZGVkIHRvIGl0LlxyXG4gKlxyXG4gKiBJZiB0aGUgVVJMIGlzbid0IHNwZWNpZmllZCB0aGUgTG9hZGVyIHdpbGwgdGFrZSB0aGUga2V5IGFuZCBjcmVhdGUgYSBmaWxlbmFtZSBmcm9tIHRoYXQuIEZvciBleGFtcGxlIGlmIHRoZSBrZXkgaXMgXCJhbGllblwiXHJcbiAqIGFuZCBubyBVUkwgaXMgZ2l2ZW4gdGhlbiB0aGUgTG9hZGVyIHdpbGwgc2V0IHRoZSBVUkwgdG8gYmUgXCJhbGllbi5qc1wiLiBJdCB3aWxsIGFsd2F5cyBhZGQgYC5qc2AgYXMgdGhlIGV4dGVuc2lvbiwgYWx0aG91Z2hcclxuICogdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBpZiB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBtZXRob2QgYXJndW1lbnRzLiBJZiB5b3UgZG8gbm90IGRlc2lyZSB0aGlzIGFjdGlvbiB0aGVuIHByb3ZpZGUgYSBVUkwuXHJcbiAqXHJcbiAqIE5vdGU6IFRoZSBhYmlsaXR5IHRvIGxvYWQgdGhpcyB0eXBlIG9mIGZpbGUgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiB0aGUgUGx1Z2luIEZpbGUgdHlwZSBoYXMgYmVlbiBidWlsdCBpbnRvIFBoYXNlci5cclxuICogSXQgaXMgYXZhaWxhYmxlIGluIHRoZSBkZWZhdWx0IGJ1aWxkIGJ1dCBjYW4gYmUgZXhjbHVkZWQgZnJvbSBjdXN0b20gYnVpbGRzLlxyXG4gKlxyXG4gKiBAbWV0aG9kIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3BsdWdpblxyXG4gKiBAZmlyZXMgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jYWRkRmlsZUV2ZW50XHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKlxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuUGx1Z2luRmlsZUNvbmZpZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5QbHVnaW5GaWxlQ29uZmlnW10pfSBrZXkgLSBUaGUga2V5IHRvIHVzZSBmb3IgdGhpcyBmaWxlLCBvciBhIGZpbGUgY29uZmlndXJhdGlvbiBvYmplY3QsIG9yIGFycmF5IG9mIHRoZW0uXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xmdW5jdGlvbil9IFt1cmxdIC0gVGhlIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBsb2FkIHRoaXMgZmlsZSBmcm9tLiBJZiB1bmRlZmluZWQgb3IgYG51bGxgIGl0IHdpbGwgYmUgc2V0IHRvIGA8a2V5Pi5qc2AsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLmpzXCIuIE9yLCBhIHBsdWdpbiBmdW5jdGlvbi5cclxuICogQHBhcmFtIHtib29sZWFufSBbc3RhcnRdIC0gQXV0b21hdGljYWxseSBzdGFydCB0aGUgcGx1Z2luIGFmdGVyIGxvYWRpbmc/XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWFwcGluZ10gLSBJZiB0aGlzIHBsdWdpbiBpcyB0byBiZSBpbmplY3RlZCBpbnRvIHRoZSBTY2VuZSwgdGhpcyBpcyB0aGUgcHJvcGVydHkga2V5IHVzZWQuXHJcbiAqIEBwYXJhbSB7UGhhc2VyLlR5cGVzLkxvYWRlci5YSFJTZXR0aW5nc09iamVjdH0gW3hoclNldHRpbmdzXSAtIEFuIFhIUiBTZXR0aW5ncyBjb25maWd1cmF0aW9uIG9iamVjdC4gVXNlZCBpbiByZXBsYWNlbWVudCBvZiB0aGUgTG9hZGVycyBkZWZhdWx0IFhIUiBTZXR0aW5ncy5cclxuICpcclxuICogQHJldHVybiB7UGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW59IFRoZSBMb2FkZXIgaW5zdGFuY2UuXHJcbiAqL1xyXG5GaWxlVHlwZXNNYW5hZ2VyLnJlZ2lzdGVyKCdwbHVnaW4nLCBmdW5jdGlvbiAoa2V5LCB1cmwsIHN0YXJ0LCBtYXBwaW5nLCB4aHJTZXR0aW5ncylcclxue1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5KSlcclxuICAgIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vICBJZiBpdCdzIGFuIGFycmF5IGl0IGhhcyB0byBiZSBhbiBhcnJheSBvZiBPYmplY3RzLCBzbyB3ZSBnZXQgZXZlcnl0aGluZyBvdXQgb2YgdGhlICdrZXknIG9iamVjdFxyXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGUobmV3IFBsdWdpbkZpbGUodGhpcywga2V5W2ldKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYWRkRmlsZShuZXcgUGx1Z2luRmlsZSh0aGlzLCBrZXksIHVybCwgc3RhcnQsIG1hcHBpbmcsIHhoclNldHRpbmdzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQbHVnaW5GaWxlO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/PluginFile.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/filetypes/SVGFile.js":
/*!*************************************************************!*\
!*** ./node_modules/phaser/src/loader/filetypes/SVGFile.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * A single SVG File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#svg method and are not typically created directly.\r\n *\r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#svg.\r\n *\r\n * @class SVGFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.0.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.SVGFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.svg`, i.e. if `key` was \"alien\" then the URL will be \"alien.svg\".\r\n * @param {Phaser.Types.Loader.FileTypes.SVGSizeConfig} [svgConfig] - The svg size configuration object.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - Extra XHR Settings specifically for this file.\r\n */\r\nvar SVGFile = new Class({\r\n\r\n Extends: File,\r\n\r\n initialize:\r\n\r\n function SVGFile (loader, key, url, svgConfig, xhrSettings)\r\n {\r\n var extension = 'svg';\r\n\r\n if (IsPlainObject(key))\r\n {\r\n var config = key;\r\n\r\n key = GetFastValue(config, 'key');\r\n url = GetFastValue(config, 'url');\r\n svgConfig = GetFastValue(config, 'svgConfig', {});\r\n xhrSettings = GetFastValue(config, 'xhrSettings');\r\n extension = GetFastValue(config, 'extension', extension);\r\n }\r\n\r\n var fileConfig = {\r\n type: 'svg',\r\n cache: loader.textureManager,\r\n extension: extension,\r\n responseType: 'text',\r\n key: key,\r\n url: url,\r\n xhrSettings: xhrSettings,\r\n config: {\r\n width: GetFastValue(svgConfig, 'width'),\r\n height: GetFastValue(svgConfig, 'height'),\r\n scale: GetFastValue(svgConfig, 'scale')\r\n }\r\n };\r\n\r\n File.call(this, loader, fileConfig);\r\n },\r\n\r\n /**\r\n * Called automatically by Loader.nextFile.\r\n * This method controls what extra work this File does with its loaded data.\r\n *\r\n * @method Phaser.Loader.FileTypes.SVGFile#onProcess\r\n * @since 3.7.0\r\n */\r\n onProcess: function ()\r\n {\r\n this.state = CONST.FILE_PROCESSING;\r\n\r\n var text = this.xhrLoader.responseText;\r\n var svg = [ text ];\r\n var width = this.config.width;\r\n var height = this.config.height;\r\n var scale = this.config.scale;\r\n\r\n resize: if (width && height || scale)\r\n {\r\n var xml = null;\r\n var parser = new DOMParser();\r\n xml = parser.parseFromString(text, 'text/xml');\r\n var svgXML = xml.getElementsByTagName('svg')[0];\r\n\r\n var hasViewBox = svgXML.hasAttribute('viewBox');\r\n var svgWidth = parseFloat(svgXML.getAttribute('width'));\r\n var svgHeight = parseFloat(svgXML.getAttribute('height'));\r\n\r\n if (!hasViewBox && svgWidth && svgHeight)\r\n {\r\n // If there's no viewBox attribute, set one\r\n svgXML.setAttribute('viewBox', '0 0 ' + svgWidth + ' ' + svgHeight);\r\n }\r\n else if (hasViewBox && !svgWidth && !svgHeight)\r\n {\r\n // Get the w/h from the viewbox\r\n var viewBox = svgXML.getAttribute('viewBox').split(/\\s+|,/);\r\n\r\n svgWidth = viewBox[2];\r\n svgHeight = viewBox[3];\r\n }\r\n\r\n if (scale)\r\n {\r\n if (svgWidth && svgHeight)\r\n {\r\n width = svgWidth * scale;\r\n height = svgHeight * scale;\r\n }\r\n else\r\n {\r\n break resize;\r\n }\r\n }\r\n\r\n svgXML.setAttribute('width', width.toString() + 'px');\r\n svgXML.setAttribute('height', height.toString() + 'px');\r\n\r\n svg = [ (new XMLSerializer()).serializeToString(svgXML) ];\r\n }\r\n\r\n try\r\n {\r\n var blob = new window.Blob(svg, { type: 'image/svg+xml;charset=utf-8' });\r\n }\r\n catch (e)\r\n {\r\n this.onProcessError();\r\n\r\n return;\r\n }\r\n\r\n this.data = new Image();\r\n\r\n this.data.crossOrigin = this.crossOrigin;\r\n\r\n var _this = this;\r\n var retry = false;\r\n\r\n this.data.onload = function ()\r\n {\r\n if (!retry)\r\n {\r\n File.revokeObjectURL(_this.data);\r\n }\r\n\r\n _this.onProcessComplete();\r\n };\r\n\r\n this.data.onerror = function ()\r\n {\r\n // Safari 8 re-try\r\n if (!retry)\r\n {\r\n retry = true;\r\n\r\n File.revokeObjectURL(_this.data);\r\n\r\n _this.data.src = 'data:image/svg+xml,' + encodeURIComponent(svg.join(''));\r\n }\r\n else\r\n {\r\n _this.onProcessError();\r\n }\r\n };\r\n\r\n File.createObjectURL(this.data, blob, 'image/svg+xml');\r\n },\r\n\r\n /**\r\n * Adds this file to its target cache upon successful loading and processing.\r\n *\r\n * @method Phaser.Loader.FileTypes.SVGFile#addToCache\r\n * @since 3.7.0\r\n */\r\n addToCache: function ()\r\n {\r\n var texture = this.cache.addImage(this.key, this.data);\r\n\r\n this.pendingDestroy(texture);\r\n }\r\n\r\n});\r\n\r\n/**\r\n * Adds an SVG File, or array of SVG Files, to the current load queue. When the files are loaded they\r\n * will be rendered to bitmap textures and stored in the Texture Manager.\r\n *\r\n * You can call this method from within your Scene's `preload`, along with any other files you wish to load:\r\n *\r\n * ```javascript\r\n * function preload ()\r\n * {\r\n * this.load.svg('morty', 'images/Morty.svg');\r\n * }\r\n * ```\r\n *\r\n * The file is **not** loaded right away. It is added to a queue ready to be loaded either when the loader starts,\r\n * or if it's already running, when the next free load slot becomes available. This happens automatically if you\r\n * are calling this from within the Scene's `preload` method, or a related callback. Because the file is queued\r\n * it means you cannot use the file immediately after calling this method, but must wait for the file to complete.\r\n * The typical flow for a Phaser Scene is that you load assets in the Scene's `preload` method and then when the\r\n * Scene's `create` method is called you are guaranteed that all of those assets are ready for use and have been\r\n * loaded.\r\n *\r\n * The key must be a unique String. It is used to add the file to the global Texture Manager upon a successful load.\r\n * The key should be unique both in terms of files being loaded and files already present in the Texture Manager.\r\n * Loading a file using a key that is already taken will result in a warning. If you wish to replace an existing file\r\n * then remove it from the Texture Manager first, before loading a new one.\r\n *\r\n * Instead of passing arguments you can pass a configuration object, such as:\r\n *\r\n * ```javascript\r\n * this.load.svg({\r\n * key: 'morty',\r\n * url: 'images/Morty.svg'\r\n * });\r\n * ```\r\n *\r\n * See the documentation for `Phaser.Types.Loader.FileTypes.SVGFileConfig` for more details.\r\n *\r\n * Once the file has finished loading you can use it as a texture for a Game Object by referencing its key:\r\n *\r\n * ```javascript\r\n * this.load.svg('morty', 'images/Morty.svg');\r\n * // and later in your game ...\r\n * this.add.image(x, y, 'morty');\r\n * ```\r\n *\r\n * If you have specified a prefix in the loader, via `Loader.setPrefix` then this value will be prepended to this files\r\n * key. For example, if the prefix was `MENU.` and the key was `Background` the final key will be `MENU.Background` and\r\n * this is what you would use to retrieve the image from the Texture Manager.\r\n *\r\n * The URL can be relative or absolute. If the URL is relative the `Loader.baseURL` and `Loader.path` values will be prepended to it.\r\n *\r\n * If the URL isn't specified the Loader will take the key and create a filename from that. For example if the key is \"alien\"\r\n * and no URL is given then the Loader will set the URL to be \"alien.html\". It will always add `.html` as the extension, although\r\n * this can be overridden if using an object instead of method arguments. If you do not desire this action then provide a URL.\r\n * \r\n * You can optionally pass an SVG Resize Configuration object when you load an SVG file. By default the SVG will be rendered to a texture\r\n * at the same size defined in the SVG file attributes. However, this isn't always desirable. You may wish to resize the SVG (either down\r\n * or up) to improve texture clarity, or reduce texture memory consumption. You can either specify an exact width and height to resize\r\n * the SVG to:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n * this.load.svg('morty', 'images/Morty.svg', { width: 300, height: 600 });\r\n * }\r\n * ```\r\n * \r\n * Or when using a configuration object:\r\n * \r\n * ```javascript\r\n * this.load.svg({\r\n * key: 'morty',\r\n * url: 'images/Morty.svg',\r\n * svgConfig: {\r\n * width: 300,\r\n * height: 600\r\n * }\r\n * });\r\n * ```\r\n * \r\n * Alternatively, you can just provide a scale factor instead:\r\n * \r\n * ```javascript\r\n * function preload ()\r\n * {\r\n * this.load.svg('morty', 'images/Morty.svg', { scale: 2.5 });\r\n * }\r\n * ```\r\n * \r\n * Or when using a configuration object:\r\n * \r\n * ```javascript\r\n * this.load.svg({\r\n * key: 'morty',\r\n * url: 'images/Morty.svg',\r\n * svgConfig: {\r\n * scale: 2.5\r\n * }\r\n * });\r\n * ```\r\n * \r\n * If scale, width and height values are all given, the scale has priority and the width and height values are ignored.\r\n *\r\n * Note: The ability to load this type of file will only be available if the SVG File type has been built into Phaser.\r\n * It is available in the default build but can be excluded from custom builds.\r\n *\r\n * @method Phaser.Loader.LoaderPlugin#svg\r\n * @fires Phaser.Loader.LoaderPlugin#addFileEvent\r\n * @since 3.0.0\r\n *\r\n * @param {(string|Phaser.Types.Loader.FileTypes.SVGFileConfig|Phaser.Types.Loader.FileTypes.SVGFileConfig[])} key - The key to use for this file, or a file configuration object, or array of them.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key>.svg`, i.e. if `key` was \"alien\" then the URL will be \"alien.svg\".\r\n * @param {Phaser.Types.Loader.FileTypes.SVGSizeConfig} [svgConfig] - The svg size configuration object.\r\n * @param {Phaser.Types.Loader.XHRSettingsObject} [xhrSettings] - An XHR Settings configuration object. Used in replacement of the Loaders default XHR Settings.\r\n *\r\n * @return {Phaser.Loader.LoaderPlugin} The Loader instance.\r\n */\r\nFileTypesManager.register('svg', function (key, url, svgConfig, xhrSettings)\r\n{\r\n if (Array.isArray(key))\r\n {\r\n for (var i = 0; i < key.length; i++)\r\n {\r\n // If it's an array it has to be an array of Objects, so we get everything out of the 'key' object\r\n this.addFile(new SVGFile(this, key[i]));\r\n }\r\n }\r\n else\r\n {\r\n this.addFile(new SVGFile(this, key, url, svgConfig, xhrSettings));\r\n }\r\n\r\n return this;\r\n});\r\n\r\nmodule.exports = SVGFile;\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGhhc2VyL3NyYy9sb2FkZXIvZmlsZXR5cGVzL1NWR0ZpbGUuanM/NzI2NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLG1FQUFtQjtBQUN2QyxZQUFZLG1CQUFPLENBQUMsMkRBQVU7QUFDOUIsV0FBVyxtQkFBTyxDQUFDLHlEQUFTO0FBQzVCLHVCQUF1QixtQkFBTyxDQUFDLGlGQUFxQjtBQUNwRCxtQkFBbUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDNUQsb0JBQW9CLG1CQUFPLENBQUMsaUdBQWtDOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxxREFBcUQ7QUFDaEUsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsNENBQTRDO0FBQ3ZELFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNERBQTREO0FBQzVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2Q0FBNkMsc0JBQXNCLGdCQUFnQjtBQUNuRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELDBCQUEwQjtBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCxhQUFhO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxtR0FBbUc7QUFDOUcsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsNENBQTRDO0FBQ3ZELFdBQVcsc0NBQXNDO0FBQ2pEO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9waGFzZXIvc3JjL2xvYWRlci9maWxldHlwZXMvU1ZHRmlsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAYXV0aG9yICAgICAgIFJpY2hhcmQgRGF2ZXkgPHJpY2hAcGhvdG9uc3Rvcm0uY29tPlxyXG4gKiBAY29weXJpZ2h0ICAgIDIwMTkgUGhvdG9uIFN0b3JtIEx0ZC5cclxuICogQGxpY2Vuc2UgICAgICB7QGxpbmsgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVR8TUlUIExpY2Vuc2V9XHJcbiAqL1xyXG5cclxudmFyIENsYXNzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvQ2xhc3MnKTtcclxudmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcclxudmFyIEZpbGUgPSByZXF1aXJlKCcuLi9GaWxlJyk7XHJcbnZhciBGaWxlVHlwZXNNYW5hZ2VyID0gcmVxdWlyZSgnLi4vRmlsZVR5cGVzTWFuYWdlcicpO1xyXG52YXIgR2V0RmFzdFZhbHVlID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvb2JqZWN0L0dldEZhc3RWYWx1ZScpO1xyXG52YXIgSXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL29iamVjdC9Jc1BsYWluT2JqZWN0Jyk7XHJcblxyXG4vKipcclxuICogQGNsYXNzZGVzY1xyXG4gKiBBIHNpbmdsZSBTVkcgRmlsZSBzdWl0YWJsZSBmb3IgbG9hZGluZyBieSB0aGUgTG9hZGVyLlxyXG4gKlxyXG4gKiBUaGVzZSBhcmUgY3JlYXRlZCB3aGVuIHlvdSB1c2UgdGhlIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI3N2ZyBtZXRob2QgYW5kIGFyZSBub3QgdHlwaWNhbGx5IGNyZWF0ZWQgZGlyZWN0bHkuXHJcbiAqXHJcbiAqIEZvciBkb2N1bWVudGF0aW9uIGFib3V0IHdoYXQgYWxsIHRoZSBhcmd1bWVudHMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtZWFuIHBsZWFzZSBzZWUgUGhhc2VyLkxvYWRlci5Mb2FkZXJQbHVnaW4jc3ZnLlxyXG4gKlxyXG4gKiBAY2xhc3MgU1ZHRmlsZVxyXG4gKiBAZXh0ZW5kcyBQaGFzZXIuTG9hZGVyLkZpbGVcclxuICogQG1lbWJlcm9mIFBoYXNlci5Mb2FkZXIuRmlsZVR5cGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHtQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbn0gbG9hZGVyIC0gQSByZWZlcmVuY2UgdG8gdGhlIExvYWRlciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIGZpbGUuXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xQaGFzZXIuVHlwZXMuTG9hZGVyLkZpbGVUeXBlcy5TVkdGaWxlQ29uZmlnKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhpcyBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+LnN2Z2AsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLnN2Z1wiLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLlNWR1NpemVDb25maWd9IFtzdmdDb25maWddIC0gVGhlIHN2ZyBzaXplIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt4aHJTZXR0aW5nc10gLSBFeHRyYSBYSFIgU2V0dGluZ3Mgc3BlY2lmaWNhbGx5IGZvciB0aGlzIGZpbGUuXHJcbiAqL1xyXG52YXIgU1ZHRmlsZSA9IG5ldyBDbGFzcyh7XHJcblxyXG4gICAgRXh0ZW5kczogRmlsZSxcclxuXHJcbiAgICBpbml0aWFsaXplOlxyXG5cclxuICAgIGZ1bmN0aW9uIFNWR0ZpbGUgKGxvYWRlciwga2V5LCB1cmwsIHN2Z0NvbmZpZywgeGhyU2V0dGluZ3MpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGV4dGVuc2lvbiA9ICdzdmcnO1xyXG5cclxuICAgICAgICBpZiAoSXNQbGFpbk9iamVjdChrZXkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGtleTtcclxuXHJcbiAgICAgICAgICAgIGtleSA9IEdldEZhc3RWYWx1ZShjb25maWcsICdrZXknKTtcclxuICAgICAgICAgICAgdXJsID0gR2V0RmFzdFZhbHVlKGNvbmZpZywgJ3VybCcpO1xyXG4gICAgICAgICAgICBzdmdDb25maWcgPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnc3ZnQ29uZmlnJywge30pO1xyXG4gICAgICAgICAgICB4aHJTZXR0aW5ncyA9IEdldEZhc3RWYWx1ZShjb25maWcsICd4aHJTZXR0aW5ncycpO1xyXG4gICAgICAgICAgICBleHRlbnNpb24gPSBHZXRGYXN0VmFsdWUoY29uZmlnLCAnZXh0ZW5zaW9uJywgZXh0ZW5zaW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBmaWxlQ29uZmlnID0ge1xyXG4gICAgICAgICAgICB0eXBlOiAnc3ZnJyxcclxuICAgICAgICAgICAgY2FjaGU6IGxvYWRlci50ZXh0dXJlTWFuYWdlcixcclxuICAgICAgICAgICAgZXh0ZW5zaW9uOiBleHRlbnNpb24sXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxyXG4gICAgICAgICAgICBrZXk6IGtleSxcclxuICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHhoclNldHRpbmdzOiB4aHJTZXR0aW5ncyxcclxuICAgICAgICAgICAgY29uZmlnOiB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogR2V0RmFzdFZhbHVlKHN2Z0NvbmZpZywgJ3dpZHRoJyksXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IEdldEZhc3RWYWx1ZShzdmdDb25maWcsICdoZWlnaHQnKSxcclxuICAgICAgICAgICAgICAgIHNjYWxlOiBHZXRGYXN0VmFsdWUoc3ZnQ29uZmlnLCAnc2NhbGUnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgRmlsZS5jYWxsKHRoaXMsIGxvYWRlciwgZmlsZUNvbmZpZyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgTG9hZGVyLm5leHRGaWxlLlxyXG4gICAgICogVGhpcyBtZXRob2QgY29udHJvbHMgd2hhdCBleHRyYSB3b3JrIHRoaXMgRmlsZSBkb2VzIHdpdGggaXRzIGxvYWRlZCBkYXRhLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuU1ZHRmlsZSNvblByb2Nlc3NcclxuICAgICAqIEBzaW5jZSAzLjcuMFxyXG4gICAgICovXHJcbiAgICBvblByb2Nlc3M6IGZ1bmN0aW9uICgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTlNULkZJTEVfUFJPQ0VTU0lORztcclxuXHJcbiAgICAgICAgdmFyIHRleHQgPSB0aGlzLnhockxvYWRlci5yZXNwb25zZVRleHQ7XHJcbiAgICAgICAgdmFyIHN2ZyA9IFsgdGV4dCBdO1xyXG4gICAgICAgIHZhciB3aWR0aCA9IHRoaXMuY29uZmlnLndpZHRoO1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmNvbmZpZy5oZWlnaHQ7XHJcbiAgICAgICAgdmFyIHNjYWxlID0gdGhpcy5jb25maWcuc2NhbGU7XHJcblxyXG4gICAgICAgIHJlc2l6ZTogaWYgKHdpZHRoICYmIGhlaWdodCB8fCBzY2FsZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciB4bWwgPSBudWxsO1xyXG4gICAgICAgICAgICB2YXIgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xyXG4gICAgICAgICAgICB4bWwgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHRleHQsICd0ZXh0L3htbCcpO1xyXG4gICAgICAgICAgICB2YXIgc3ZnWE1MID0geG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdmcnKVswXTtcclxuXHJcbiAgICAgICAgICAgIHZhciBoYXNWaWV3Qm94ID0gc3ZnWE1MLmhhc0F0dHJpYnV0ZSgndmlld0JveCcpO1xyXG4gICAgICAgICAgICB2YXIgc3ZnV2lkdGggPSBwYXJzZUZsb2F0KHN2Z1hNTC5nZXRBdHRyaWJ1dGUoJ3dpZHRoJykpO1xyXG4gICAgICAgICAgICB2YXIgc3ZnSGVpZ2h0ID0gcGFyc2VGbG9hdChzdmdYTUwuZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWhhc1ZpZXdCb3ggJiYgc3ZnV2lkdGggJiYgc3ZnSGVpZ2h0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAvLyAgSWYgdGhlcmUncyBubyB2aWV3Qm94IGF0dHJpYnV0ZSwgc2V0IG9uZVxyXG4gICAgICAgICAgICAgICAgc3ZnWE1MLnNldEF0dHJpYnV0ZSgndmlld0JveCcsICcwICAwICcgKyBzdmdXaWR0aCArICcgJyArIHN2Z0hlaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaGFzVmlld0JveCAmJiAhc3ZnV2lkdGggJiYgIXN2Z0hlaWdodClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy8gIEdldCB0aGUgdy9oIGZyb20gdGhlIHZpZXdib3hcclxuICAgICAgICAgICAgICAgIHZhciB2aWV3Qm94ID0gc3ZnWE1MLmdldEF0dHJpYnV0ZSgndmlld0JveCcpLnNwbGl0KC9cXHMrfCwvKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzdmdXaWR0aCA9IHZpZXdCb3hbMl07XHJcbiAgICAgICAgICAgICAgICBzdmdIZWlnaHQgPSB2aWV3Qm94WzNdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc2NhbGUpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdmdXaWR0aCAmJiBzdmdIZWlnaHQpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBzdmdXaWR0aCAqIHNjYWxlO1xyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodCA9IHN2Z0hlaWdodCAqIHNjYWxlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrIHJlc2l6ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc3ZnWE1MLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCB3aWR0aC50b1N0cmluZygpICsgJ3B4Jyk7XHJcbiAgICAgICAgICAgIHN2Z1hNTC5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIGhlaWdodC50b1N0cmluZygpICsgJ3B4Jyk7XHJcblxyXG4gICAgICAgICAgICBzdmcgPSBbIChuZXcgWE1MU2VyaWFsaXplcigpKS5zZXJpYWxpemVUb1N0cmluZyhzdmdYTUwpIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBibG9iID0gbmV3IHdpbmRvdy5CbG9iKHN2ZywgeyB0eXBlOiAnaW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04JyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm9uUHJvY2Vzc0Vycm9yKCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcclxuXHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2YXIgcmV0cnkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoIXJldHJ5KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBGaWxlLnJldm9rZU9iamVjdFVSTChfdGhpcy5kYXRhKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgX3RoaXMub25Qcm9jZXNzQ29tcGxldGUoKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEub25lcnJvciA9IGZ1bmN0aW9uICgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyAgU2FmYXJpIDggcmUtdHJ5XHJcbiAgICAgICAgICAgIGlmICghcmV0cnkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHJ5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBGaWxlLnJldm9rZU9iamVjdFVSTChfdGhpcy5kYXRhKTtcclxuXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5kYXRhLnNyYyA9ICdkYXRhOmltYWdlL3N2Zyt4bWwsJyArIGVuY29kZVVSSUNvbXBvbmVudChzdmcuam9pbignJykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMub25Qcm9jZXNzRXJyb3IoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIEZpbGUuY3JlYXRlT2JqZWN0VVJMKHRoaXMuZGF0YSwgYmxvYiwgJ2ltYWdlL3N2Zyt4bWwnKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIHRoaXMgZmlsZSB0byBpdHMgdGFyZ2V0IGNhY2hlIHVwb24gc3VjY2Vzc2Z1bCBsb2FkaW5nIGFuZCBwcm9jZXNzaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBtZXRob2QgUGhhc2VyLkxvYWRlci5GaWxlVHlwZXMuU1ZHRmlsZSNhZGRUb0NhY2hlXHJcbiAgICAgKiBAc2luY2UgMy43LjBcclxuICAgICAqL1xyXG4gICAgYWRkVG9DYWNoZTogZnVuY3Rpb24gKClcclxuICAgIHtcclxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuY2FjaGUuYWRkSW1hZ2UodGhpcy5rZXksIHRoaXMuZGF0YSk7XHJcblxyXG4gICAgICAgIHRoaXMucGVuZGluZ0Rlc3Ryb3kodGV4dHVyZSk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIGFuIFNWRyBGaWxlLCBvciBhcnJheSBvZiBTVkcgRmlsZXMsIHRvIHRoZSBjdXJyZW50IGxvYWQgcXVldWUuIFdoZW4gdGhlIGZpbGVzIGFyZSBsb2FkZWQgdGhleVxyXG4gKiB3aWxsIGJlIHJlbmRlcmVkIHRvIGJpdG1hcCB0ZXh0dXJlcyBhbmQgc3RvcmVkIGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqXHJcbiAqIFlvdSBjYW4gY2FsbCB0aGlzIG1ldGhvZCBmcm9tIHdpdGhpbiB5b3VyIFNjZW5lJ3MgYHByZWxvYWRgLCBhbG9uZyB3aXRoIGFueSBvdGhlciBmaWxlcyB5b3Ugd2lzaCB0byBsb2FkOlxyXG4gKlxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGZ1bmN0aW9uIHByZWxvYWQgKClcclxuICoge1xyXG4gKiAgICAgdGhpcy5sb2FkLnN2ZygnbW9ydHknLCAnaW1hZ2VzL01vcnR5LnN2ZycpO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgZmlsZSBpcyAqKm5vdCoqIGxvYWRlZCByaWdodCBhd2F5LiBJdCBpcyBhZGRlZCB0byBhIHF1ZXVlIHJlYWR5IHRvIGJlIGxvYWRlZCBlaXRoZXIgd2hlbiB0aGUgbG9hZGVyIHN0YXJ0cyxcclxuICogb3IgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIHdoZW4gdGhlIG5leHQgZnJlZSBsb2FkIHNsb3QgYmVjb21lcyBhdmFpbGFibGUuIFRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGlmIHlvdVxyXG4gKiBhcmUgY2FsbGluZyB0aGlzIGZyb20gd2l0aGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QsIG9yIGEgcmVsYXRlZCBjYWxsYmFjay4gQmVjYXVzZSB0aGUgZmlsZSBpcyBxdWV1ZWRcclxuICogaXQgbWVhbnMgeW91IGNhbm5vdCB1c2UgdGhlIGZpbGUgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgYnV0IG11c3Qgd2FpdCBmb3IgdGhlIGZpbGUgdG8gY29tcGxldGUuXHJcbiAqIFRoZSB0eXBpY2FsIGZsb3cgZm9yIGEgUGhhc2VyIFNjZW5lIGlzIHRoYXQgeW91IGxvYWQgYXNzZXRzIGluIHRoZSBTY2VuZSdzIGBwcmVsb2FkYCBtZXRob2QgYW5kIHRoZW4gd2hlbiB0aGVcclxuICogU2NlbmUncyBgY3JlYXRlYCBtZXRob2QgaXMgY2FsbGVkIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aG9zZSBhc3NldHMgYXJlIHJlYWR5IGZvciB1c2UgYW5kIGhhdmUgYmVlblxyXG4gKiBsb2FkZWQuXHJcbiAqXHJcbiAqIFRoZSBrZXkgbXVzdCBiZSBhIHVuaXF1ZSBTdHJpbmcuIEl0IGlzIHVzZWQgdG8gYWRkIHRoZSBmaWxlIHRvIHRoZSBnbG9iYWwgVGV4dHVyZSBNYW5hZ2VyIHVwb24gYSBzdWNjZXNzZnVsIGxvYWQuXHJcbiAqIFRoZSBrZXkgc2hvdWxkIGJlIHVuaXF1ZSBib3RoIGluIHRlcm1zIG9mIGZpbGVzIGJlaW5nIGxvYWRlZCBhbmQgZmlsZXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBUZXh0dXJlIE1hbmFnZXIuXHJcbiAqIExvYWRpbmcgYSBmaWxlIHVzaW5nIGEga2V5IHRoYXQgaXMgYWxyZWFkeSB0YWtlbiB3aWxsIHJlc3VsdCBpbiBhIHdhcm5pbmcuIElmIHlvdSB3aXNoIHRvIHJlcGxhY2UgYW4gZXhpc3RpbmcgZmlsZVxyXG4gKiB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBUZXh0dXJlIE1hbmFnZXIgZmlyc3QsIGJlZm9yZSBsb2FkaW5nIGEgbmV3IG9uZS5cclxuICpcclxuICogSW5zdGVhZCBvZiBwYXNzaW5nIGFyZ3VtZW50cyB5b3UgY2FuIHBhc3MgYSBjb25maWd1cmF0aW9uIG9iamVjdCwgc3VjaCBhczpcclxuICpcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQuc3ZnKHtcclxuICogICAgIGtleTogJ21vcnR5JyxcclxuICogICAgIHVybDogJ2ltYWdlcy9Nb3J0eS5zdmcnXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgUGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuU1ZHRmlsZUNvbmZpZ2AgZm9yIG1vcmUgZGV0YWlscy5cclxuICpcclxuICogT25jZSB0aGUgZmlsZSBoYXMgZmluaXNoZWQgbG9hZGluZyB5b3UgY2FuIHVzZSBpdCBhcyBhIHRleHR1cmUgZm9yIGEgR2FtZSBPYmplY3QgYnkgcmVmZXJlbmNpbmcgaXRzIGtleTpcclxuICpcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQuc3ZnKCdtb3J0eScsICdpbWFnZXMvTW9ydHkuc3ZnJyk7XHJcbiAqIC8vIGFuZCBsYXRlciBpbiB5b3VyIGdhbWUgLi4uXHJcbiAqIHRoaXMuYWRkLmltYWdlKHgsIHksICdtb3J0eScpO1xyXG4gKiBgYGBcclxuICpcclxuICogSWYgeW91IGhhdmUgc3BlY2lmaWVkIGEgcHJlZml4IGluIHRoZSBsb2FkZXIsIHZpYSBgTG9hZGVyLnNldFByZWZpeGAgdGhlbiB0aGlzIHZhbHVlIHdpbGwgYmUgcHJlcGVuZGVkIHRvIHRoaXMgZmlsZXNcclxuICoga2V5LiBGb3IgZXhhbXBsZSwgaWYgdGhlIHByZWZpeCB3YXMgYE1FTlUuYCBhbmQgdGhlIGtleSB3YXMgYEJhY2tncm91bmRgIHRoZSBmaW5hbCBrZXkgd2lsbCBiZSBgTUVOVS5CYWNrZ3JvdW5kYCBhbmRcclxuICogdGhpcyBpcyB3aGF0IHlvdSB3b3VsZCB1c2UgdG8gcmV0cmlldmUgdGhlIGltYWdlIGZyb20gdGhlIFRleHR1cmUgTWFuYWdlci5cclxuICpcclxuICogVGhlIFVSTCBjYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUuIElmIHRoZSBVUkwgaXMgcmVsYXRpdmUgdGhlIGBMb2FkZXIuYmFzZVVSTGAgYW5kIGBMb2FkZXIucGF0aGAgdmFsdWVzIHdpbGwgYmUgcHJlcGVuZGVkIHRvIGl0LlxyXG4gKlxyXG4gKiBJZiB0aGUgVVJMIGlzbid0IHNwZWNpZmllZCB0aGUgTG9hZGVyIHdpbGwgdGFrZSB0aGUga2V5IGFuZCBjcmVhdGUgYSBmaWxlbmFtZSBmcm9tIHRoYXQuIEZvciBleGFtcGxlIGlmIHRoZSBrZXkgaXMgXCJhbGllblwiXHJcbiAqIGFuZCBubyBVUkwgaXMgZ2l2ZW4gdGhlbiB0aGUgTG9hZGVyIHdpbGwgc2V0IHRoZSBVUkwgdG8gYmUgXCJhbGllbi5odG1sXCIuIEl0IHdpbGwgYWx3YXlzIGFkZCBgLmh0bWxgIGFzIHRoZSBleHRlbnNpb24sIGFsdGhvdWdoXHJcbiAqIHRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gaWYgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgbWV0aG9kIGFyZ3VtZW50cy4gSWYgeW91IGRvIG5vdCBkZXNpcmUgdGhpcyBhY3Rpb24gdGhlbiBwcm92aWRlIGEgVVJMLlxyXG4gKiBcclxuICogWW91IGNhbiBvcHRpb25hbGx5IHBhc3MgYW4gU1ZHIFJlc2l6ZSBDb25maWd1cmF0aW9uIG9iamVjdCB3aGVuIHlvdSBsb2FkIGFuIFNWRyBmaWxlLiBCeSBkZWZhdWx0IHRoZSBTVkcgd2lsbCBiZSByZW5kZXJlZCB0byBhIHRleHR1cmVcclxuICogYXQgdGhlIHNhbWUgc2l6ZSBkZWZpbmVkIGluIHRoZSBTVkcgZmlsZSBhdHRyaWJ1dGVzLiBIb3dldmVyLCB0aGlzIGlzbid0IGFsd2F5cyBkZXNpcmFibGUuIFlvdSBtYXkgd2lzaCB0byByZXNpemUgdGhlIFNWRyAoZWl0aGVyIGRvd25cclxuICogb3IgdXApIHRvIGltcHJvdmUgdGV4dHVyZSBjbGFyaXR5LCBvciByZWR1Y2UgdGV4dHVyZSBtZW1vcnkgY29uc3VtcHRpb24uIFlvdSBjYW4gZWl0aGVyIHNwZWNpZnkgYW4gZXhhY3Qgd2lkdGggYW5kIGhlaWdodCB0byByZXNpemVcclxuICogdGhlIFNWRyB0bzpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogZnVuY3Rpb24gcHJlbG9hZCAoKVxyXG4gKiB7XHJcbiAqICAgICB0aGlzLmxvYWQuc3ZnKCdtb3J0eScsICdpbWFnZXMvTW9ydHkuc3ZnJywgeyB3aWR0aDogMzAwLCBoZWlnaHQ6IDYwMCB9KTtcclxuICogfVxyXG4gKiBgYGBcclxuICogXHJcbiAqIE9yIHdoZW4gdXNpbmcgYSBjb25maWd1cmF0aW9uIG9iamVjdDpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogdGhpcy5sb2FkLnN2Zyh7XHJcbiAqICAgICBrZXk6ICdtb3J0eScsXHJcbiAqICAgICB1cmw6ICdpbWFnZXMvTW9ydHkuc3ZnJyxcclxuICogICAgIHN2Z0NvbmZpZzoge1xyXG4gKiAgICAgICAgIHdpZHRoOiAzMDAsXHJcbiAqICAgICAgICAgaGVpZ2h0OiA2MDBcclxuICogICAgIH1cclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKiBcclxuICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBqdXN0IHByb3ZpZGUgYSBzY2FsZSBmYWN0b3IgaW5zdGVhZDpcclxuICogXHJcbiAqIGBgYGphdmFzY3JpcHRcclxuICogZnVuY3Rpb24gcHJlbG9hZCAoKVxyXG4gKiB7XHJcbiAqICAgICB0aGlzLmxvYWQuc3ZnKCdtb3J0eScsICdpbWFnZXMvTW9ydHkuc3ZnJywgeyBzY2FsZTogMi41IH0pO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKiBcclxuICogT3Igd2hlbiB1c2luZyBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0OlxyXG4gKiBcclxuICogYGBgamF2YXNjcmlwdFxyXG4gKiB0aGlzLmxvYWQuc3ZnKHtcclxuICogICAgIGtleTogJ21vcnR5JyxcclxuICogICAgIHVybDogJ2ltYWdlcy9Nb3J0eS5zdmcnLFxyXG4gKiAgICAgc3ZnQ29uZmlnOiB7XHJcbiAqICAgICAgICAgc2NhbGU6IDIuNVxyXG4gKiAgICAgfVxyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqIFxyXG4gKiBJZiBzY2FsZSwgd2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgYXJlIGFsbCBnaXZlbiwgdGhlIHNjYWxlIGhhcyBwcmlvcml0eSBhbmQgdGhlIHdpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIGFyZSBpZ25vcmVkLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGUgYWJpbGl0eSB0byBsb2FkIHRoaXMgdHlwZSBvZiBmaWxlIHdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIFNWRyBGaWxlIHR5cGUgaGFzIGJlZW4gYnVpbHQgaW50byBQaGFzZXIuXHJcbiAqIEl0IGlzIGF2YWlsYWJsZSBpbiB0aGUgZGVmYXVsdCBidWlsZCBidXQgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gY3VzdG9tIGJ1aWxkcy5cclxuICpcclxuICogQG1ldGhvZCBQaGFzZXIuTG9hZGVyLkxvYWRlclBsdWdpbiNzdmdcclxuICogQGZpcmVzIFBoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2luI2FkZEZpbGVFdmVudFxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICogQHBhcmFtIHsoc3RyaW5nfFBoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLlNWR0ZpbGVDb25maWd8UGhhc2VyLlR5cGVzLkxvYWRlci5GaWxlVHlwZXMuU1ZHRmlsZUNvbmZpZ1tdKX0ga2V5IC0gVGhlIGtleSB0byB1c2UgZm9yIHRoaXMgZmlsZSwgb3IgYSBmaWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhcnJheSBvZiB0aGVtLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGxvYWQgdGhpcyBmaWxlIGZyb20uIElmIHVuZGVmaW5lZCBvciBgbnVsbGAgaXQgd2lsbCBiZSBzZXQgdG8gYDxrZXk+LnN2Z2AsIGkuZS4gaWYgYGtleWAgd2FzIFwiYWxpZW5cIiB0aGVuIHRoZSBVUkwgd2lsbCBiZSBcImFsaWVuLnN2Z1wiLlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuRmlsZVR5cGVzLlNWR1NpemVDb25maWd9IFtzdmdDb25maWddIC0gVGhlIHN2ZyBzaXplIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gKiBAcGFyYW0ge1BoYXNlci5UeXBlcy5Mb2FkZXIuWEhSU2V0dGluZ3NPYmplY3R9IFt4aHJTZXR0aW5nc10gLSBBbiBYSFIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiBvYmplY3QuIFVzZWQgaW4gcmVwbGFjZW1lbnQgb2YgdGhlIExvYWRlcnMgZGVmYXVsdCBYSFIgU2V0dGluZ3MuXHJcbiAqXHJcbiAqIEByZXR1cm4ge1BoYXNlci5Mb2FkZXIuTG9hZGVyUGx1Z2lufSBUaGUgTG9hZGVyIGluc3RhbmNlLlxyXG4gKi9cclxuRmlsZVR5cGVzTWFuYWdlci5yZWdpc3Rlcignc3ZnJywgZnVuY3Rpb24gKGtleSwgdXJsLCBzdmdDb25maWcsIHhoclNldHRpbmdzKVxyXG57XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gIElmIGl0J3MgYW4gYXJyYXkgaXQgaGFzIHRvIGJlIGFuIGFycmF5IG9mIE9iamVjdHMsIHNvIHdlIGdldCBldmVyeXRoaW5nIG91dCBvZiB0aGUgJ2tleScgb2JqZWN0XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRmlsZShuZXcgU1ZHRmlsZSh0aGlzLCBrZXlbaV0pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hZGRGaWxlKG5ldyBTVkdGaWxlKHRoaXMsIGtleSwgdXJsLCBzdmdDb25maWcsIHhoclNldHRpbmdzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTVkdGaWxlO1xyXG5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/phaser/src/loader/filetypes/SVGFile.js\n");
/***/ }),
/***/ "./node_modules/phaser/src/loader/filetypes/SceneFile.js":
/*!***************************************************************!*\
!*** ./node_modules/phaser/src/loader/filetypes/SceneFile.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\r\n * @author Richard Davey <rich@photonstorm.com>\r\n * @copyright 2019 Photon Storm Ltd.\r\n * @license {@link https://opensource.org/licenses/MIT|MIT License}\r\n */\r\n\r\nvar Class = __webpack_require__(/*! ../../utils/Class */ \"./node_modules/phaser/src/utils/Class.js\");\r\nvar CONST = __webpack_require__(/*! ../const */ \"./node_modules/phaser/src/loader/const.js\");\r\nvar File = __webpack_require__(/*! ../File */ \"./node_modules/phaser/src/loader/File.js\");\r\nvar FileTypesManager = __webpack_require__(/*! ../FileTypesManager */ \"./node_modules/phaser/src/loader/FileTypesManager.js\");\r\nvar GetFastValue = __webpack_require__(/*! ../../utils/object/GetFastValue */ \"./node_modules/phaser/src/utils/object/GetFastValue.js\");\r\nvar IsPlainObject = __webpack_require__(/*! ../../utils/object/IsPlainObject */ \"./node_modules/phaser/src/utils/object/IsPlainObject.js\");\r\n\r\n/**\r\n * @classdesc\r\n * An external Scene JavaScript File suitable for loading by the Loader.\r\n *\r\n * These are created when you use the Phaser.Loader.LoaderPlugin#sceneFile method and are not typically created directly.\r\n *\r\n * For documentation about what all the arguments and configuration options mean please see Phaser.Loader.LoaderPlugin#sceneFile.\r\n *\r\n * @class SceneFile\r\n * @extends Phaser.Loader.File\r\n * @memberof Phaser.Loader.FileTypes\r\n * @constructor\r\n * @since 3.16.0\r\n *\r\n * @param {Phaser.Loader.LoaderPlugin} loader - A reference to the Loader that is responsible for this file.\r\n * @param {(string|Phaser.Types.Loader.FileTypes.SceneFileConfig)} key - The key to use for this file, or a file configuration object.\r\n * @param {string} [url] - The absolute or relative URL to load this file from. If undefined or `null` it will be set to `<key> |